Home> Archives > April 2011 Archives

April 2011 Archives

久々にBookmarklet書いたら、すげぇ楽になってた

同僚のSkypeステータスに「某サイトからデータスクレイピングするの大変」的な話が出ていたので、話を聞いてみると、「それJavaScriptで処理できるんじゃない?」という感じがしたので申し出てみた。
ということでまぁ本業では範疇外だけど、昼とか定時後に片手間ながら久々にBookmarklet書いてみたわけです。

で、処理元のHTML文書は、2000年代前半を彷彿とさせる大文字コーディングスタイルでスラッシュなしBRタグやHRタグ、全く構造化されていない。
(ここで昔のYahoo!オークションサイトをスクレイピングしようとした時のことを思い出して陰鬱な気分になった)

しかし時代は2011年。高速なJSエンジンを積んだブラウザも転がっているし、当時よりも多少JavaScriptにも慣れている。
何より手元にはjQueryもある...あれ? BookmarkletでjQuery使えたよね...?

...あったあった。
jQueryでブックマークレットを書く 3 | ethertank diary

コメントを除き237byte。
https://blog.ethertank.jp/2011/04/18-18:12:36

jQuerifyという選択肢もあるけど、今回は人に渡すものだし、なるべく1クリックで動くやつを作りたいのでパス。
いくつかある亜流の中から、上記サイトのものを採用して感謝しつつコーディング開始。

幸いにもBRタグや記号を使用して几帳面なレイアウトがなされていたので、方針としては、

  1. 腐ったタグを正規表現で置換、構造化文書に書き換える
  2. jQueryで文書内のデータからid、classを生成(ここまでが下準備)
  3. 必要なデータだけ抽出してテーブルやテキストエリアにコピペ用データ書き出し

という感じ。

置換は、こんな感じで。

var d = document;
d.body.innerHTML = d.body.innerHTML.replace(/置換する文字列/g, '置換後の文字列');

あとは、適当にセレクタでデータ選択して処理。無名関数とか昔使えなかったなぁ、とか思いながら。

$('セレクタ').each(function(){
何か処理
});

まぁ、実例出せないのであまり書いても意味ないんだけど、思い出すきっかけくらいにはなるだろう、ってことで記事書いておく。

ところで、今回は富豪的プログラミングだったわけだけど、デバグにOperaとFirefox使ってて「どこまで書いても文字数制限で怒られないな-。何でだろ」と思ってたら、いつの間にか文字数制限がえらい緩くなってたらしい。

各ブラウザのブックマークレット限界文字数 最新版 - MediaLab Love

各ブラウザのブックマークレット限界文字数 最新版 - MediaLab Love
https://d.hatena.ne.jp/Koumei_S/20090525/1243260713

10000字とか誰が使うんだよ!...と思いながら超えてんじゃねぇかなーと思いながら書いてたけど数えてみたら、3000文字くらいだった。

一応引き渡しの時に「Opera使ってね」と布教しておいたり。

PSoCの型宣言

社内開発用に必要になった冶具があって、その辺に転がってた古い試験冶具からモーターやら金具やら取り外して制御部分を追加したりしつつ1台でっち上げる、ってのをここ暫くやってた。
(一応似たような冶具を設計ドキュメント書いて以前工場に作らせてたので、品証に冶具作成のお鉢が回ってきたという)

機構部分の改造と制御回路自体は、設計から組み立てまで3日くらいで終わったんだけど、PSoCで制御ファームウェアを書くのに、色々と作法を忘れてるせいで、結局コーディングに半月くらい掛かった。
まぁ0.5人月だとすると...経費が30万くらい。いつも頼んでた国内の冶具屋さんだと50万から100万くらいの見積もり返ってくるだろうから、若干安く済んだかなぁ。
(ホントは1週間くらいで片付けるつもりだったのは内緒)

冶具の使途は具体的には書けないんだが、
  • ギアードDCモータの回転制御
  • 試験回数の上限値設定(停止させる)
  • 設定値の保存と呼び出し(外付けEEPROM)
  • LCDへの表示(回転速度とトータル回転数)
ってあたりを実装する必要があった。

回転速度は±5%くらいの誤差が許容されるので、速度表示はPSoC1の内部オシレータで32kHz吐いてみたら案外いい精度(60±1Sec以内)、どうせ室内でしか使用しないしそのまま使ってる。

回転検知はフォトトラで回転を16分割したフィンを作って動きを読み取らせた。

この辺りまでは全然サクサク書いてたんだけど、EEPROMへの設定値保存のやり方を忘れてたのと、10進データを16進データに変換して保存する辺りのアルゴリズムを再発明したりしてたら結構手間取ってしまった。
飛び込みの仕事をちょくちょくやりながらも、忙しい時期だったら1ヶ月くらい掛かってたかも。

以下、ドキュメント探すのに手間取ったので、取りあえずメモ。
あくまでも8bitなPSoC1シリーズの話。

char:1Byte
文字列の格納に用いる。シングルバイト。
a unsigned 0...255
signed -128...127

int または short(short int):2Byte
整数の格納に用いる。
unsigned 0...65535
signed -32768...32767

long:4Byte
short(int)の格納できる整数範囲を広くしたもの。
unsigned 0...4294967295
signed -2147483648...2147483647

float または double:4Byte
単精度実数と倍精度実数...のはずだけど、PSoC1においてはデータサイズが同じ4バイトしか選べないらしい。
1.175e-38...3.40e+38

enum:1Byte または 2Byte
※256未満の値を記述する場合には1バイト。256以上の値を記述する場合は2バイト。
エイリアスリストの記述に用いる。
0...65535

そろそろ手を入れる部分が無くなって、自分の手を離れる寸前。
やっぱりPSoCが一番手に馴染んでるし、こういうプロトタイピング的な用途には向いてると思う。

最近は、簡単に多重割り込み的な挙動を実装する方法について通勤中に考えたりしてる。
あとは、そろそろ自宅の電子工作用電源もパワーアップさせたいので、作り直そうかなぁ、とか。

Index of all entries

Home> Archives > April 2011 Archives

Categories
Archives
Syndication

Return to page top