ラベル programming の投稿を表示しています。 すべての投稿を表示
ラベル programming の投稿を表示しています。 すべての投稿を表示

2015年4月8日水曜日

GitHubのContributionsをIngressのResistance色にするUser Styleを書いた(二番煎じ)

こんにちは。アイコンは緑だけどResistanceの青りんごです。

下記の記事を見て「cssでも出来んじゃね?」って思って書いてみました。

GitHub の Contributions を Ingress の Resistance 色にする Chrome 拡張を作った - I'm kubosho_ http://blog.kubosho.com/entry/change-ingress-registance-color-of-github-contributions

resistance-contributions.css

cssの中身。legendの元の色指定がインラインスタイルだったので、上書きするには!important書かざるを得ないのが悔しい。

StylishといったUser Styleを設定できる拡張機能を利用したりして使う。


before:

after:

あんまりGitHub使えてないなぁ…

2013年7月26日金曜日

gitはじめて勉強会

先日、内輪でgitの勉強会で講師をやってきました。

資料

当日使ったスライド。
あまりgitはどうだなんだという説明はせず、とにかくハンズオンでやってみる事が目的でした。


反省点

講師っていうのは初めてだった事もあり、諸々反省点がありました。
  • 内容が参加者に合っていなかった
    講師の都合でterminal上での操作前提の内容にしていたけど、慣れていない人に教えるにはやはりSourceTreeなど使った方がいいかもしれない。
    自分では commit や diff 見る程度はEclipse上でやるけど、その他はterminal上でばっかり操作していて、他のやり方を教えられるほど知らないのがネック。

  • つめこみ過ぎた
    git init から push まで粗方詰め込んだ上で、その他のコマンドの説明も諸々…という内容にしたら、目的が何処かに行ってしまった感じになった。
    色々やるより、必要最低限をしっかりやる方が最初のとっかかりとしては良さそう。
    細かい説明はいちいちせずに「○○をするにはどうするか」という目的ベースで進めた方が覚えやすいかな。

  • 脱線し過ぎた
    ただでさえ詰め込みすぎて時間の余裕があまり無いのに、途中途中の質疑応答に時間をかけすぎた。push の話をする頃にはタイムオーバーだった…
    場合によってはバッサリ時間を切って進めて、時間配分をずらさないようにしないと、なかなか話が進まない。

第2回があるかどうかは皆の声援次第。

2013年5月16日木曜日

String.prototype.replaceのコールバック関数

jsの String.prototype.replace メソッドは正規表現とコールバック関数を使った時、コールバック関数の引数が正規表現のマッチグループの数によって変わる。
知らなかったので、ちょっと試して確認した時のメモ

GoogleChrome バージョン 24.0.1312.52 で動作を確認したもの

ただの文字列:

1:マッチした部分
2:マッチしたインデックス
3:元の文字列全体

グループの無い正規表現:例 /[a-z]/

ただの文字列の場合と同じ

グループが1つの正規表現:例 /a([a-z])/

1:正規表現マッチした部分
2:マッチしたグループ部分
3:マッチしたインデックス
4:元の文字列全体
試したコード
"abcd".replace(/a([a-z])/, function(a,b,c){console.log(a,b,c);return a;});

グループが2つの正規表現:

1:正規表現にマッチした部分
2:マッチした1つ目のグループ部分
3:マッチした2つ目のグループ部分
4:マッチしたインデックス
5:元の文字列全体
試したコード
"abcd".replace(/a([a-z])([a-z])/, function(a){console.log(arguments);return a;});

グループが3つの正規表現:

マッチした部分の引数が増えて、インデックス・元の文字列全体が後ろにずれる。

まとめ

正規表現にgオプションを付けた場合も、それぞれのマッチ部分に対してそれぞれ上記同様にコールバック関数が呼ばれる。

仕様書を読むと、
第1引数:マッチした部分文字列
マッチグループ(captures)の数分の引数
マッチグループ(captures)の数+2番目の引数:マッチしたインデックス(マッチした文字列までのoffset)
マッチグループが無いなら第2引数。1つあれば第3引数。2つあれば第4引数。
マッチグループ(captures)の数+3番目の引数:元の文字列

MDNのページに大分詳しく載ってる。

参考

2012年7月22日日曜日

githugでおべんきょう


gitの使い方を実際にコマンド叩きつつ勉強出来るgithugが面白そうだったのでメモ。

参考:



githugはgemで公開されてるそうなので、Ubuntuなら
$ sudo apt-get install gem ←gemがインストール済みなら不要
$ sudo gem install githug
ってな具合でインストール。

 あとは、githug叩くごとに色々指示(問題)が出されるので、それをこなしてからまたgithug叩く、ってのを繰り返していく。
gitコマンド叩いてゴニョゴニョするだけじゃなく、場合によっては問題への回答を求められたりもする。

2011年12月9日金曜日

Androidアプリで使えるJSONライブラリ比較

これは、Android Advent Calendar 2011の12月9日エントリです。



「Androidはオワコン」なんて話が聞こえてくる昨今、いかがお過ごしでしょうか?
HT-03A以来のAndroidユーザーとしては寂しい悲しい限りです。発売後のこんな頃や、こんな頃が懐かしいですね。

ですけど、街中を歩くと、多くの人がAndoid機を持っているのがわかります。
REGZA Phoneとかよく目に付きますね。デカイし。

それに、Andoid機を買って初めてプログラムしてアプリを作ってみた学生さんとか、Andoid関係のお仕事の話とか結構聞こえてきます。
今後もそういうのは続いていくんじゃないでしょうか。

そして、趣味か仕事かを問わず、Webアクセスしたりするアプリの場合、APIを叩いてJSON形式のデータをパースしなきゃいけないことが多々あると思います。
そこで、JSONのライブラリをいくつか簡単に比較してみました。
下3つは使い方がよくわからんかったので、参考に並べただけです(汗
言い換えれば、いきなり持ってきても取っつきやすいものだけ紹介。



パース・エンコードの処理の計測には、自分のタイムラインのjsonを1M分繋げたファイルを使いました。/res/raw/からファイルをInputStreamで取得して使用。
計測に使った機種はXperia Ray

JSONIC

国内ではオーソドックスなんじゃないかと勝手に思っているライブラリです。
ただ、上表の通り速度は見劣りします。
比較的少ないコード量でかゆい所に手が届くようになってますけど、proguardでの難読化に失敗するので、それが解決出来ないとAndroidアプリで使うのはつらい。
使用例:

// パース。第2引数でクラスを指定しない場合、戻りはObjectになるが、中身はArrayListかLinkedHashMap。
InputStream is = ほげ;
Hoge[] hoges = JSON.decode(is, Hoge[].class);

// シリアライズ
String json = JSON.encode(hoges);


google-gson

この記事書こうと思って調べるまで存在を知りませんでした。正直すまんかった。
パース速度は爆速。シリアライズは最遅
なんなんだ。いったいなんなんだお前。
シリアライズ時に、型指定を省略すると更にアホほど遅くなります。
POJOでないクラスのフィールドに対応させるには、JsonSerializerとJsonDeserializerインターフェースを実装します。
proguardを使う場合、JSONをマッピングするPOJOクラスを難読化から除外する設定が必要です。
使用例:

// パース。第2引数で必ず型を指定する必要がある。Mapとか指定してもとりあえずは動く。JSONIC同様に、ArrayListかLinkedHashMapのインスタンスが返る。
InputStream is = ほげ;
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
Hoge[] hoges = new Gson().fromJson(reader, Hoge[].class);

// シリアライズ。第2引数の型指定は省略できるが、そうすると激遅。
String json = new Gson().toJson(hoges, Hoge[].class);


JsonPullParser

ファイルサイズが超軽量!
しかし、特色は軽量であることより、指定したPOJOクラスのパース/シリアライズ処理クラスをビルド時に自動生成する事だろう。それ故に、パースとシリアライズ共に安定して高速な処理を実現しています。
逐次処理も出来るし パースもシリアライズも早い。凄いぞ強いぞ僕らのJPP
ただ、パーサークラスを生成させるPOJOクラスとそのフィールドにアノテーションをいちいち付けなきゃいけないのはちと面倒。
POJOでないクラスのフィールドに対応させるには、TokenConverterを実装します。参考として以前に試しに書いてみたDateConverterをどうぞ。ええ、SimpleDateFormat使っちゃってるのでスレッドセーフじゃありません(最近知りました)。
使用例:

// パース。Hogeクラスの専用パーサーとしてビルド時に自動生成されたHogeGenクラスを使用
InputStream is = ほげ;
List<Hoge> hoges = HogeGen.getList(is);

// シリアライズ。直接文字列を返す手段はサポートされておらず、Writerクラスを経由する。
StringWriter sw = new StringWriter();
HogeGen.encodeListNullToNull(sw, hoges);
String json = sw.toString();


半分くらい深夜のテンションで書き殴りましたが、いかがでしょうか。
多分コレをまっさきに読むであろうAndroidersよりも、いつかググってたまたまやってくる人向けの内容になりました。

Androidを好きになってくれるエンジニアが増えてくれることを願って。


私信:読んだ人が失禁して泣いてパンツを洗いながらJPPの採用を決めるような魔導書レベルの記事は書けませんよ流石に

2009年12月9日水曜日

TwitterUserProfileExtension


なんとなく作ったかんたんGreasemonkeyスクリプトを公開。

http://userscripts.org/scripts/show/63833

Twitterのユーザのプロフィールページに、関連サービスへのリンクを付加します。
・付加するサービス
Favotter
TwitPic
vidly
携帯百景(movapic) ※Twitterと同じユーザ名の場合だけ有効

気が向いたら追加していきます。

Special Thanks to Pasta-K

<追記>
勘違いしてましたが、携帯百景ってTwitterのアカウント使う訳じゃないんですね。。。そりゃユーザ名が違ったりする筈だわ。。。

<追記2>
Twitgoo追加
それとふぁぼったーのアイコンをデータスキームで埋め込みに変更。これ以上あそこが落ちる要因増やしちゃあかんわな。

書き忘れてたけど、Googleマップへのリンクも付加します。
「iPhone〜ジオタグ〜」みたいなのも対応してます。

2009年9月7日月曜日

Develop Android apps with HT-03A(HTC Magic) and Ubuntu 9.04

ついに買っちゃいました HT-03A

そんでもって、さっそくアプリ作りをちょろっとやってみようと思い、EclipseにAndroid Development Toolを導入。この辺は他のEclipseプラグインと変わりはしないので割愛して説明する。とりあえず、実機(HT-03A)でHello Worldを表示させるところまで。
(エミュレータもあるけど、ウチのマシンには荷が重かったようで、起動画面のANDROIDロゴから全然進みませんでした orz)

・参考
http://developer.android.com/intl/ja/sdk/1.5_r3/installing.html
http://developer.android.com/intl/ja/guide/tutorials/hello-world.html
http://developer.android.com/intl/ja/guide/developing/device.html
このブログを読まなくても、これらのオフィシャルの解説ページを読めば大丈夫だと思うけど、3つめの実機でのデバッグを解説しているページはまだ日本語版が無いようなので、このブログが参考になれば幸い。

・環境
HP nx6124
Ubuntu 9.04 Jaunty Jackalope

Android SDK
http://developer.android.com/intl/ja/sdk/1.5_r3/index.html
からLinux版をDLして適当なディレクトリに展開。

Eclipse IDE for Java Developersのver3.5(Galileo)でPleiades1.3.0を導入済み。
そこにAndroid Development Tool(以下、ADT)をインストール。udpate siteは
https://dl-ssl.google.com/android/eclipse/
<追記>
どうにもEclipse起動時に渡すPleiadesのjarファイルへのパスがうまく通らない場合がある様で、gnomeパネルのランチャからeclipseが起動できない問題にぶち当たりました。潔くPleiadesを諦めるのも手です。
<追記終わり>

・初期設定
EclipseにADTをインストール後、一度Eclipseを再起動。
Eclipseの設定画面で、Android の SDK ロケーション にAndroid SDKのディレクトリを指定してやって、「適用」。

実機をUSB接続してデバッグツールとして使用するが、設定ファイルを一つ書いてやる必要がある。
ファイルパス:/etc/udev/rules.d/51-android.rules
内容:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

そしてこのファイルに実行権限を付加するために、次のコマンドを実行
sudo chmod a+rx /etc/udev/rules.d/51-android.rules


・実機側の設定
 設定 -> アプリケーション -> 開発 -> USBデバッグ
のチェックを入れる。

・プロジェクト作成
Eclipseのプロジェクトの新規作成画面で「Androidプロジェクト」を選択。
「新規Androidプロジェクト」画面で、
プロジェクト名:Hello
アプリケーション名:Hello, Android
Create Activity:HelloAndroid
ビルドターゲット欄で、Android 1.5を選択(Min SDK Versionが自動で3になる)
「完了」ボタン押下。

プロジェクト作成直後、プロジェクトアイコンに×マークが付いてたりするが、選択してF5キーで表示内容の更新をかけてやればOK(Pleiades1導入済みのEclipse上ではリフレッシュと表記されている筈)

・実機でのデバッグ
一応、PC側の設定ファイル・実機側のUSBデバッグ設定、がちゃんと行われているかどうかを改めて確認しておこう。
実機をPCにUSB接続しマウントする。PC画面上では何も起きない(または、通常のUSBメモリなどのように認識される)が、先ほどの設定が活きていれば既にEclipseのデバッグ操作が可能になっている。
Eclipseで、プロジェクトが選択された状態で、「実行」または「デバッグ」を行う。方法の選択ウィンドウが表示されたら、「Androidアプリケーション」を選択しよう。
実機側の画面に「Hello Android」と表示されたら成功!

・後始末
「実行」を行う場合、アプリケーションを実際に実機にインストールしてしまうようです。
そうなった場合、通常のAndroidアプリケーションと同様に、
 設定 -> アプリケーション -> アプリケーションの管理
から「Hello, Android」を探してアンインストールします。

2009年5月8日金曜日

Aptana PHP memo

Aptana Studio
http://www.aptana.com/

Aptana PHP
http://www.aptana.com/php

Aptana PHPの現行バージョンは1.0だが、Alpha版の1.1はSmartyテンプレートの作成などにも対応している。
Aptana PHP 1.1のインストール方法
http://www.aptana.com/docs/index.php/Aptana_PHP_Plug-In_1.1

php.iniのinclude_pathの内容を、Aptana PHPの設定のPHP Libraliesに指定してやる。これをしないと、デバッグ時にSmartyをrequireしようとするところでNot Foundエラーが出る。

http://aptana.com/docs/index.php/Installing_Aptana_on_Linux
http://andrewbleakley.com/blog/2008/11/01/installing-and-running-aptana-on-ubuntu-810/

2009年5月7日木曜日

PHP Smarty tips

最近PHPをちょこっとずつ勉強中。
Smartyのテンプレでよく使うであろうパターンの覚書。

escape修飾子と予約変数$smartyの組み合わせ

Smartyのテンプレでは、変数に修飾子というものを付加して表示結果を弄れる。escape修飾子は文字列中の記号などをエスケープしてくれる。
また、予約変数の$smartyを使うと、テンプレート内からPHPの定義済み変数にアクセスできる。
よくあるwebの入力フォームでは、入力エラーの場合に入力内容をそのまま表示仕返してやったりする。それを、Smartyを使えば次のようにテンプレートに記述することで済む。
<input type="text" name="hoge" value="{$smarty.post.hoge|escape}">

関数も修飾子として使える

escapeなどSmartyで用意されているものだけでなく、PHP側の普通の関数もテンプレート内から修飾子として呼び出せる。
例えば、入力内容をそのスクリプト自身にsubmitさせてやるようなフォームなら、basename関数を修飾子として使い、actionの指定もテンプレート内で動的に書き出せる。
<form action="./{$smarty.server.SCRIPT_NAME|basename}" >

2009年1月15日木曜日

How to use GETOPT function in C

端末で使ういろいろなコマンドは大抵はオプションを付けていろいろな機能を使うことが出来る。そういったプログラムをCで書くのに必要なgetopt関数の覚書。
unistd.hをインクルードしておくこと。

引数を取るプログラムをCで書くとき、mainの宣言は
 int main(int argc,char *argv[])
こんな感じに書くのが普通。*argv[]が**argvとなってるコードも見たことがある。

で、getoptの使い方。
while ((ch = getopt(argc, argv, "ab:")) != -1){
switch (ch){
case 'a':
-aオプションの処理
break;
case 'b':
-bオプションの処理
この時、-bの次の引数へのポインタがoptargに収まっている
break;
}
}


初めてgetoptを使おうとしたときに見落としていてちょっと躓いたのが、getoptの引数"ab:"の部分。
これはaは引数を取らない、bは引数を取る、という具合になる。使うオプションを""で括ってずらずらっと書いてやり、引数を取るものの後ろにだけ:(コロン)を付けてやればいい。
引数を取るオプションを見つけたときにgetoptはgetargというcharポインタに引数を与えてくれる。例えばコマンドに「-b hogehoge」というオプションが与えられていたならば、getoptがbを見つけたときに、hogehogeという文字列がoptargに収まる。

2008年12月3日水曜日

スクリプト言語でちょっと短いコードを試してみる時のTips

RubyとかPerlでちょっとした短いコードを書いて(あるいはコピペして)試す場合、いちいちファイルに書き出すのは面倒です。
で、今まで知らなかったのが恥ずかしいくらいなのだけれど、簡単にちょちょっと試す方法があったのでTipsとして覚書。

  $ ruby
hoge = 12
puts hoge #ここまで入力してCtrl + D
12 #実行結果の表示が出てくれる
$

Perlでも同様にイケる。

この動画見て気づいたってのが、まぁ何だかなぁ、って感じ。