コード整形とシンタックスハイライトするjetpackを作った
実は、第1回浜松ウェブAPIハッカソンをガッツリ見学してきた - Cherenkovの暗中模索にっき には心残りがありました。
それは、朝までかけて作ったJetpackを発表しそこねた事。
事前に何も言ってなかったし、見学組だし、主張しなかったし。
宣伝するいい機会だったのに、Jetpackerのみんなすまねぇ。
という訳で、この場を借りて(?)ベータをリリースしてみる。
cherenkov's Code-Beautify-and-Syntax-Highlight at master - GitHub
主な機能は3つ。
- JavaScript Beautifier (jsbeautifier.org) - JSコード整形
- HTML beautify (Ham Cutlet) - HTMLコード整形
- Syntax Highlight (google-code-prettify) - シンタックスハイライト
使い方はREADMEを読んでください。
関連するつぶやき
メモ
- 基本の処理はここから。lib/main.js at master from cherenkov's Code-Beautify-and-Syntax-Highlight - GitHub
- シンタックスハイライトしてからコード整形すると表示がおかしくなる。その際はリロードして順番を変えてやり直してください。
- ハムカツAPIは非公式なやつを叩いている。ページ単位ではなくソース単位で整形したかったため。
- ハムカツには限界がある。(googleのトップページとか)
- http://github.com/einars/js-beautify にbeautify-html.jsがあるがハムカツとの比較などはまだやっていない。
- xpiの名前変えたいのだけどよくわからん。パッケージフォルダ名とpackage.jsonを書き換えて同名にしてもcfx xpiでエラーでる。
- githubのrawとかそのへんのサイトのJSをブラウザで開いたときにこれを使う。超便利!
windowsでgccコマンドを使えるようにするためMinGWをインストールした
- Browse MinGW - Minimalist GNU for Windows Files on SourceForge.net ここからmingw-get-0.1-mingw32-alpha-3-bin.zipをダウンロード。
- J:\Program Files\MinGWとかにフォルダを作ってzip解凍したファイルをコピーする。
- J:\Program Files\MinGW\binをpathに追加する。
- Getting Started | MinGW ここを見ながら入れたいパッケージを決める。
- コマンドプロンプトでmingw-get install gcc g++ mingw32-make msys-baseとかやるとインストールが始まる。
- 処理が終わったらすぐにgccコマンドが使えるようになる。
gemっぽいー。
gcc version 4.5.0
文字列を入力して逆順に出力
問題:テキスト1行を入力して、これを逆順に出力するプログラムを作れ。ポインタを使用せず配列を用いた形式で書き、ポインタを用いたものと比較せよ。
配列
#include <stdio.h> #include <string.h> int main() { char str[100]; int n; gets(str); for(n=strlen(str); n>0; n--) printf("%c", str[n-1]); return 0; }
ポインタ
#include <stdio.h> #include <string.h> int main() { char str[100], *p; gets(str); p = str + strlen(str) - 1; while(str <= p) putchar(*p--); return 0; }
同じくらいの読みやすさで書けた。ポインタのほうが高速に処理できる(はず)。
削除できなくなったTwitter検索メモを削除するブックマークレット
検索メモ(Saved Searches)には、検索結果が0の場合に解除するリンクが表示されない欠陥がある。それをブックマークレットで解決する。
javascript: var id = $('#saved_searches .active').attr('id').replace(/^ss_/,""); $.ajax({ type: "post", url: 'http://twitter.com/saved_searches/destroy/'+id, success: function(){ alert("success!"); location = "http://twitter.com/"; } }); void(0);
使い方
- webから消したい検索メモをクリックして開いておく。URLは http://twitter.com/#search?q=%23hogefuga こんな感じになるはず。
- 上のブックマークレットを丸ごとアドレスバーにコピペして実行。
実行してすぐにアラートが表示されない場合はtwitterの調子が悪く失敗です。時間を置いて試してみて下さい。
メモ
- 手元のメモ見てみると5/29にはこの欠陥があった。
- 9/11〜(今日14)から上手くいかないこと確認。URLも変わってないのでtwitter側の不具合が続いているのだと思う。
Jetpack SDK 0.7のcfx testallをFirefox4と3.6.8で比較
0.7がでたのでcfx testallしてみた。これまでバージョンのテストより賑やかになった。
Vista SP2、Firefoxのバージョンは上が3.6.8、下が4.0b5pre (Minefield)
cfx testall -b "J:\Program Files\Mozilla Firefox\firefox.exe" 〜〜〜〜〜 2363 of 2375 tests passed. FAIL Total time: 113.985000 seconds Program terminated unsuccessfully. Some tests were unsuccessful. cfx testall -b "J:\Program Files\Mozilla Firefox - Nightly build\firefox.exe" 〜〜〜〜〜 2293 of 2300 tests passed. FAIL Total time: 181.527000 seconds Program terminated unsuccessfully. Some tests were unsuccessful.
だからどうした。
メモ
なぜか実行する度テストの数が2,3増減する。
数値中のすべてのビットを左端までシフトする
問題:数値中のすべてのビットを左端までシフトする。例01010110は11110000。
#include <stdio.h> int main(){ int i; char c[100], result[100], one[100]="1"; strcpy(result, ""); fgets(c, sizeof(c), stdin); for(i=0; i<strlen(c); i++){ if(c[i]=='0') strcat(result, "0"); else if(c[i]=='1'){ strcat(one, result); strcpy(result, one); strcpy(one, "1"); } } printf("result = %s", result); return 0; }
うーん。ビット演算の章の問題なんだけどこの解き方はなぁ。
32ビット整数型を8つの4ビット値に分割する
/* 32ビット整数型(long int)をとり、それを8つの4ビット値に分割する。符号ビットに注意。 */ #include <stdio.h> int main(){ char c[100]; int i, n, target, ary[8]; fgets(c, sizeof(c), stdin); sscanf(c, "%d", &target); for(i=0, n=0; n<32; n+=4, i++){ ary[i] = (target >> n) & 15; } for(i=7; i>-1; i--) printf("%d ", ary[i]); }
入力: 2147483647*1
出力: 7 15 15 15 15 15 15 15
うーん。こういうことかな?
*1:2^31-1