コード整形とシンタックスハイライトするjetpackを作った

実は、第1回浜松ウェブAPIハッカソンをガッツリ見学してきた - Cherenkovの暗中模索にっき には心残りがありました。
それは、朝までかけて作ったJetpackを発表しそこねた事。
事前に何も言ってなかったし、見学組だし、主張しなかったし。
宣伝するいい機会だったのに、Jetpackerのみんなすまねぇ。
という訳で、この場を借りて(?)ベータをリリースしてみる。


cherenkov's Code-Beautify-and-Syntax-Highlight at master - GitHub
主な機能は3つ。

  1. JavaScript Beautifier (jsbeautifier.org) - JSコード整形
  2. HTML beautify (Ham Cutlet) - HTMLコード整形
  3. 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をインストールした

  1. Browse MinGW - Minimalist GNU for Windows Files on SourceForge.net ここからmingw-get-0.1-mingw32-alpha-3-bin.zipをダウンロード。
  2. J:\Program Files\MinGWとかにフォルダを作ってzip解凍したファイルをコピーする。
  3. J:\Program Files\MinGW\binをpathに追加する。
  4. Getting Started | MinGW ここを見ながら入れたいパッケージを決める。
  5. コマンドプロンプトmingw-get install gcc g++ mingw32-make msys-baseとかやるとインストールが始まる。
  6. 処理が終わったらすぐに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);

使い方

  1. webから消したい検索メモをクリックして開いておく。URLは http://twitter.com/#search?q=%23hogefuga こんな感じになるはず。
  2. 上のブックマークレット丸ごとアドレスバーにコピペして実行。

実行してすぐにアラートが表示されない場合は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