nDiki : JSON

2007年4月3日 (火)

WiKickerJSON でのページ出力機能を追加

最近は DiKicker ばかりに手を入れていたが、久しぶりに WiKicker の改良も行っている。 しばらく前から実装を始めていた JSON 形式での出力機能が今日完成。

今までは WikiPage について

  • HTML 形式による出力
  • Wiki 文法で書かれている生テキスト形式による出力

という2つの出力形式を持っていたので、JSON が加わることで3つめとなる。

サーバ側で WikiPage の構文解析まではやる

クライアントサイドの JavaScript でページの内容に合わせて様々な処理をできるように、サーバ側で構文解析まではしてあげるというのが主な目的。

JavaScript でまたパーサを書いてメンテしていくのも大変なので、その部分はサーバでやってしまおうかと。 構文解析した結果の解析木を JSON 形式で返して、JavaScript 側であとはお好きにという形。

CPAN にある JSON モジュールを使用

サーバ側の Perl プログラムには、構文解析をして解析木を作れるようになっている。 この解析木から Visitor パターンで JSON 形式を生成していく。

依存モジュールを増やすことを避けるべく、最初は自前で JSON 形式に変換していこうと思ったのだがやっぱり面倒だった。 ということで CPAN にあるモジュールをチョイス。

JSON 関連では JSONJSON::Syck、JSON::PC などがあるが今回はインストールのしやすさを考えて pure Perl モジュールとして実装されている JSON を採用することにした。

Visitor クラスで解析木を無名ハッシュ/無名配列のツリーに変換して、JSON モジュールに流しこめば OK。

 use JSON;
 my $json = JSON->new(pretty => 1);
 my $js = $json->objToJson($tree);

WiKickerフレームワークにはフォーマット別に出力を切り換える機構があるので、これに JSON を追加して application/json で送るようにして完成。

ちなみに残念ながら JSON 1.07 は Perl 5.005_03 では make test が fail するので、NaneyOrgWiki では使えない。

スポンサード リンク
[ 4月3日全て ]

2007年4月7日 (土)

携帯電話(iモード)から Twitter を更新する

Twitter をいろいろ遊んでみて「やはり携帯電話から更新できないと」と思えてきた。

携帯電話からメールを送る事で Twitterアップデートをかけてくれるゲートウェイを設置できれば一番いいのだけれど、そのようなメールアドレスを作る場所が今はない(さすがに会社のサーバはまずい)。

ということでiモードから更新をかけられるように短い CGI プログラムを書くことにした。 CPAN には Net::Twitter という Perl モジュールがあるのだが、JSON::Any (と JSON::XS / JSON / JSON::DWIW / JSON::Syck のどれか)が必要で、ちょっと大げさなので今回は使用は見送り。 普通に CGI.pm と LWP::UserAgent で書いた。

 #!/usr/bin/perl -w

 use 5.005_03;
 use strict;
 use CGI qw(-no_xhtml);
 use Jcode;
 use LWP::UserAgent;

 my $query     = CGI->new;
 my $user_name = $query->param('u');
 my $password  = $query->param('p');
 my $status    = $query->param('s');

 $user_name = '' unless defined $user_name;
 $password  = '' unless defined $password;
 $status    = '' unless defined $status;

 my $message = '';

 if ($user_name ne '' && $password ne '' && $status ne '') {
   my $ua = LWP::UserAgent->new;
   Jcode::convert(\$status, 'utf8', 'sjis');
   $ua->credentials('twitter.com:80', 'Twitter API', $user_name, $password);
   my $request = $ua->post('http://twitter.com/statuses/update.json',
                           {status => $status . ' '});
   if ($request->is_success) {
     $message = '<p>OK</p>';
   }
 }

 print $query->header(-type => 'text/html', -charset => '');
 print '<html><head><title>Twitter update</title></title><body>';
 print '<form method="post" action="twitter">';
 print 'ユーザ名:',   $query->textfield('u'),      '<br>';
 print 'パスワード:', $query->password_field('p'), '<br>';
 print 'ステータス:', $query->textfield('s'),      '<br>';
 print '<input type="submit">';
 print '</form>';
 print $message;
 print '</body></html>';

とりあえずこれで、iモードから送信できることを確認。 パスワードの入力が面倒だけれども、サーバ側に書いておくのも嫌なので毎回送ることにした。FOMA 端末側には定型文として保存しておく以外にいい手はないのかな。

最初うまく送れなくてなんだろうと思ったが、あきやん氏の「Twitterで日本語を入力する方法 (akiyan.com)」の記事にある

  • 全て全角文字で入力して、最後に半角スペースをいれる
  • 半角全角を混在させるときは、半角文字と全角文字の間にスペースをいれる

といった日本語を入力する際の注意点がらみだったようである。 とりあえず CGI プログラムの方で最後に必ずいわゆる半角空白を追加するようにしておいた。

文字数チェックとか Twitter API の返り値チェックとか、改善すべきところはいろいろあるけれど、自分用にはまずこれでいいかな。

気が向いた時に外出先から更新かけます。

[ 4月7日全て ]

2007年5月30日 (水)

WiKicker 0.420 リリース - 変更いろいろ

去年の12月3日以来、約半年ぶりのリリース。 リリースしそびれて、随分変更を累積してしまった。 以下主な変更点。

バージョン番号形式を変更

前回の 0.41 に対して、今回は 0.420 とした。 浮動小数点数的には、増分 0.01 で今まで通り。

今後 version.pm が普及した時のことと、developer release を出す時のことを考えて小数点以下3桁ずつのスタイルに移行することにした (関連記事)。

<meta name="robots" content="noindex,nofollow">

2007年1月に実装。 編集ページや履歴ページが検索エンジンに登録されないようにするための機能。

<a rel="nofollow">

2007年1月に実装。 リンク spam 対応。

AutomaticLink 長を可変にした

2007年3月に実装。 特に DiKicker で1文字キーワードによる自動リンクを有効にするために追加した。

'/' の前を省略した自動リンクを有効にするか無効にするかを設定できるように

前述の機能で1文字での自動リンクを有効にしたら、不便な面が出た。

WiKicker / DiKicker では '/' を階層の区切り文字としても扱うことができるようになっていて、サフィックス部分だけでも自動リンクするようになっている。 自動リンクを1文字にしたら「OS/2」というキーワードに対して '2' でも自動リンクが働き、望まないリンクが張られるようになってしまった。 DiKicker では階層的キーワードは無くてもあまり困らないので、'/' の前を省略した自動リンクを無効にできるようにした。

JSON 形式データ出力

2007年4月に実装

(DiKicker) はてなブックマーク数表示機能を追加

2007年1月に実装

(DiKicker) はてなブックマークエントリーページへのボタン表示機能を追加

2007年1月に実装

(DiKicker) grep 検索機能を追加

2007年2月に実装。自分としては重宝している。

(DiKicker) キーワード記事の下部への文字列挿入機能

Google AdSense 挿入用。

(DiKicker) サーバの負荷が高くなったら 503 を返して沈静化を待つようにした

2007年4月に実装 load average をチェックして負荷が高い時は、503 を返すようにした。

内部コードの結構な書き換え

ソースコードを結構いじった。 deprecated なメソッドの削除も実施したので、0.41 以前から派生しているソフトウェアは多くの場合修正が必要。

[ 5月30日全て ]

2010年8月26日 (木)

今日のさえずり: 改札通ってすぐ面舵いっぱいしない! ようそろ!

2010年08月26日

  • 08:19 こんな時間にガッテン。
  • 10:30 オリジナル Notepad++ って ISO-2022-JP (と EUC-JP) に対応していないのか。 pLaTeX2e ソースファイル編集するのに困るんです。
  • 10:39 Evernote for Android 1.5.1 きた。バグフィックスか何か?
  • 12:04 おにぎり 350円。 (@ ファミリーマート神田佐久間町店) http://4sq.com/biJuCj
  • 15:06 朝用意してくれたおやつに、なぜか白い恋人が。
  • 17:36 File::Slurp::read_file で binmode と指定するところで bin_mode とやっていて、入力が1バイト足りずにもがいていたところ。
  • 18:42 MongoDB や CouchDB とかって大きなファイルつっこんでも大丈夫なのかな。JSON な CouchDB より BSON な MongoDB の方がイケてそうな気はするのだが。
  • 19:13 @babie 情報ありがとうございます。100MB 動画も no problem ってありますね。これなら検討しているシステムの候補にできそうです。
  • 19:29 そこ、改札通ってすぐ面舵いっぱいしない! ようそろ!
  • 22:55 えこひいきって、どこらへんがエコ?
  • 24:26 頭上のシーリングライトの中の部品がゴトッと音をたてて、そのカバーに落下した。メッチャびっくりした。
  • 24:28 前に直したスイッチボックスが取れたのかな。今晩はもう確認するつもりはなし。
[ 8月26日全て ]

2010年11月16日 (火)

今日のさえずり: 「車に乗るやつ?」って言われた。それ違う、人生ゲームや。

2010年11月16日

  • 06:57 起床。さすがに室温13℃なのでエアコンつけた。
  • 07:57 そろそろ活動開始しないとヤバイ。
  • 08:05 朝からずっとヘリが飛んでるんだけれど何? 狙われてるの?
  • 08:36 ダウンジャケット出してきた。今日着ていく。
  • 09:25 シビックって1972年発売だったんだ。同い年生まれ。
  • 09:30 RT @mayumiura: 早寝早起きによって「失われた時間」とは、「翌日のための仕込みの時間」だということが判明。だらだらと夜更かししている間に、翌日には出さなきゃいけないメールの下書きだとか郵便物の準備だとか、そういう諸々の仕込み作業をしていた……その時間がなくなっ ...
  • 09:35 今晩麦茶作ろう。
  • 09:55 出社済み。後ろから陽があたってポカポカしてα波が出そう。
  • 09:59 「ライフゲームみたい」って言ったら @as_tone に「車に乗るやつ?」って言われた。それ違う、人生ゲームや。
  • 10:01 「オートマン? オートマトン? オートマトンって人の名前なんだ。なんか羊思い出すよね(@as_tone)」ちがうちがう。
  • 10:06 RT @stkuc: #XPERIA の電池での稼働時間58時間でようやく電池切れ。やっぱり一番電池を消費するのはGoogleアカウントの自動同期だった。
  • 11:47 Web の画面遷移の記述って UML だとどの図を使えばいいんだろう。
  • 12:05 弁当 350円。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/9oazrC
  • 12:31 ニコニコ学園 + 金時山 + 氷砂糖は港区のデフォですよね。 @nye_c
  • 12:51 @akigonn シビック持ってたんですか、いいですね。自分は高校生の時にアルバイト先の大学生のオニーサンに乗せてもらった思い出の車です。
  • 12:53 電話加入権譲渡で、フレッツ・ADSL 使っていると譲渡承認手数料が+840円されるの。えー。
  • 12:55 フレッツ・ADSL のお客様IDが必要か。
  • 13:45 Emacs evernote mode だと! http://bit.ly/aPVOGX #Emacs #Evernote
  • 17:26 Mojolicious::Plugin::JsonConfig は読み込み専用か。書き込みは Mojo::JSON とかで。
  • 18:30 昨日遅かったので早めの退勤。
  • 20:01 実家から「風邪ひいて喉が痛いのか?」と確認の電話。ホントに「オレオレ」っていう電話がかかってきたらしい。
  • 20:06 警察に通報したところ「オレオレ」「風邪ひいて喉が変」「ケータイ落とした」そして同じ事を2回繰り返すなど典型パターンらしい。マニュアル通りにやる方と、それを把握している警察と。
  • 20:30 麦茶お湯出し開始。
  • 20:52 さすがに寒くて手がかじかむので暖房つけた。
  • 21:05 z4root 1.2.1 で Xperia を root 化中。
  • 21:06 自動的にリブート中。 #Xperia
  • 22:40 Xperia の root 化・シャッター音の OFF 設定の有効化・スクリーンショット取得用の Drocap2 インストールまで完了。初トライだったのでちょっと時間がかかったな。
  • 22:53 @_kojihiro Titanium Backup ですか? root 化について調べてたらいくつかのサイトで見かけたあれかな?
  • 23:00 @_kojihiro なるほど。ありがとうございます、今度試してみます。
  • 24:28 RT @nye_c: 港区立の小学校出た人は、皆うなずくはず。RT @Naney: ニコニコ学園 + 金時山 + 氷砂糖は港区のデフォですよね。 @nye_c
[ 11月16日全て ]

2011年7月6日 (水)

今日のさえずり: 要は ε 遷移があるかないかですよ

2011年07月06日

  • 08:44 Android の連絡先(Contacts)の auto aggregation は「名前」「電話番号」「メールアドレス」でマッチング。 http://bit.ly/n57wYi
  • 08:52 初 Huddle。
  • 09:00 と最初に観た映画は「ラスト・オブ・モヒカン」。モヒカンって……。
  • 11:59 RT @mixi_engineers: mixi Engineers' Blogエントリ追加しました → mixi Hackathon in Kyotoのご報告 http://alpha.mixi.co.jp/blog/?p=3427
  • 12:08 弁当と夕方用のパン 514円。 (@ ローソン渋谷東一丁目店) http://4sq.com/q9s3Mp
  • 15:10 「○○さんウンコなんですよ」って、すごい紹介。
  • 15:28 略称は魔開になりました。
  • 17:43 ピンクのメーテル T シャツ着て Shibuya Perl Mongersテクニカルトーク#16 顔出します。 #shibuyapm
  • 17:48 #shibuyapm Shibuya PerlMongersテクニカルトーク#16 リスト (ATND あたりから) http://bit.ly/r0r1ht
  • 17:52 @britty それ冬服ですから!
  • 18:14 RT @mixi_engineers: 本日は18:30から、Shibuya Perl Mongersテクニカルトーク#16を弊社7Fセミナールームで開催します → http://shibuya.pm.org/.../201107.html
  • 18:14 RT @mixi_engineers: テクニカルトークの様子はustでも中継いたしますので、ATNDに漏れたかた、お仕事中のかた、お茶の間からご覧になりたいみなさま、ぜひどうぞ! http://www.ustream.tv/...
  • 18:47 #shibuyapm スタート!
  • 18:52 ゴメンなさい、最近のアニメよくわかんないです。 #shibuyapm
  • 19:03 昔愚直に自分で trie モジュール作ってた。 #shibuyapm
  • 19:08 e の数で挙動が変わるのは知らなかった。何か m4 思い出す。 #shibuyapm
  • 19:08 RT @nipotan: 無駄に @Yappo のハードルがあげられててうける #shibuyapm
  • 19:10 RT @__gfx__: perl -ce 'http://mixi.jp' # syntax ok っていうネタがあったね。 #shibuyapm
  • 19:20 Emacs での正規表現はちょっと毛嫌い。 #shibuyapm
  • 19:56 正規表現じゃなくて正則表現といえば OK。 #shibuyapm
  • 20:03 困ったら状態遷移図書くよね。 #shibuyapm
  • 20:24 やはり DFA とか NFA とかでてくるとワクワクしますね。 #shibuyapm
  • 20:39 Plagger って最近下火なのかな。 #shibuyapm
  • 20:41 今日初の TL 流し。 #shibuyapm
  • 20:50 JSON で終わりそう。 #shibuyapm
  • 22:34 #shibuyapm 懇親会おひらき。Twitter でお見かけしていた方と初めて直接お話させていただけたりしてなかなか楽しかった!
  • 22:36 @makotokaga 今日はお会いできて楽しかったです。これからもよろしくお願いいたします。
  • 22:39 @shamoshamo 今日は VBA の話とか楽しかったです。これからもよろしくお願いいたします。
  • 22:45 @shamoshamo このアイコン知ってます知ってますってパターンはお互いよくあるので、最近ぶらさげるようにしてまーす。
  • 23:27 会社出た。そういえば食いっぱぐれてる。
  • 23:29 要は ε 遷移があるかないかですよ。
  • 23:31 渋谷駅雨降ってきた。
  • 24:06 RT @k12u: めずらしく書いた / Test::mysqld + perl -d を使うと SQLがそのまま叩けて便利 - k12uのアレ http://htn.to/L6sKf1
  • 24:31 RT @riywo: やーmixiさんのオフィスすごいよかった。広いセミナールームの隣に広い懇親会場とか素敵。
  • 24:37 ローソンのそうめん食べた。ほぐし水が井戸水だった。
  • 24:47 それぞれ mixi やってるので非公開コミュニティ作ってやりとりしようとしたけど、マイミクシィどうしじゃなかったので mixi 内で出会えず断念したというケースがあったという話をうかがった。まだまだサポートの余地がある。
[ 7月6日全て ]

2013年3月26日 (火)

オンラインアウトライナー WorkFlowy Pro (有料)にした

オンラインアウトライナー(outliner、アウトラインプロセッサ)サービスの WorkFlowy、しばらく使ってみたところなかなか良かったので有料の WorkFlowy Pro にした。有料版の違いは、

  • 項目数の制限が無くなる。無料版は月500項目までなんだけれど使い始めるとあっという間に無くなるので、制限が無くなるのは心理的なブレーキが無くなるので大きい。
  • 特定の WorkFlowy アカウントとだけリストを共有できる。他に使っている人がいる場合は便利。共有したリストの項目数のカウントはオーナー側につくので、無料アカウントの人も有料アカウントからリストを共有してもらえればガンガン項目追加できたりする。
  • Dropbox への1日1回のバックアップ。結構地味に効く。プレーンテキスト形式と JSON 形式で各世代のものが保存される。間違えて消してしまったり、やはり消さなければ良かったというのにも後でアクセスできるのが安心感がある。workflowy.com が落ちたとしても、バックアップ時点までのは参照できるし。なお WorkFlowy からは「アプリ/WorkFlowy/」ディレクトリ以下の読み書き権限だけを要求するので、Dropbox の他のデータまでアクセスされてしまうのは嫌という懸念も発生しないので良い。
  • テーマ設定とフォント設定の自由度アップ。

といったところ。

いろいろなアイデアノートが貯まってきた時に、タグや検索を駆使してリストの再整理をしていくと、いろいろ気付きがありそうで楽しみ。

  • https://workflowy.com/
    • このリンク先から登録すると通常の2倍のスペースが使えます。
[ 3月26日全て ]

2013年6月12日 (水)

Twitter API v1 完全停止

ついに Twitter API v1 が完全停止となった。

あー、自分の Tweet 取得スクリプトも一部は v1.1 に合わせたのだけれど、RSS フォーマット版で呼んでて JSON 対応は先送りしてたんだよね。

ということで cron で動かしているのだけれど取ってこなくなった。週末修正するかなぁ。それともメンテナンス止めて Twilog のログダウンロードで済ますかなぁ。

[ 6月12日全て ]

2013年6月16日 (日)

Twitter API v1.1 対応とか、パイプでやりとりするの JSON でいいのとか

Twitter API v1.1 に対応していないスクリプトがあって、たしか OAuth 対応はしてあるけど RSS 形式を使っていたので JSON で取得して処理するようにしなければなーと思ってたんだけれど、そもそも OAuth 対応すらしてなかった。

なので Net::Twitter::Lite を使うように書き換え。

あと、いままで1つのスクリプトで「Twitter API を呼び出してタイムライン取得」「シリアライズしてファイルに保存」「Wiki 形式に整形して書き出し」をしていたんだけれど、UNIX 哲学に従って小スクリプトに分割してパイプで受け渡すように変更するなど。

スクリプト間のやりとりは構造化テキストデータなので JSON にしたんだけれど、若干これでいいのかなぁ感はある。テキスト形式だし最近の主流フォーマットではあるんだけれど、それでもシェルから見ると複雑な形式な気がするんだよね。でもあと軽量な構造化テキストフォーマットだと YAML ぐらいかなぁ。

今日のさえずり: 浴室乾燥の影響でトイレが暑い

2013年06月16日

  • 11:46 浴室乾燥の影響でトイレが暑い。
  • 11:56 user_timeline 取得を Twitter API 1.1 からに書き換える必要あるんだけれど、差分大きくて本腰入れる必要がある。
  • 16:05 2時間ほどペーパークラフトした。
  • 16:22 ラムネを水に溶かす実験。
  • 21:45 1コ Twitter API 1.1 対応した。ついでにスクリプトはスクリプトらしくパイプ使えるように分割した。
  • 21:47 標準出力に吐いてパイプで受け渡すの構造化データなので JSON にしたんだけれど、ちょっとモヤっとする。
[ 6月16日全て ]

2013年11月20日 (水)

Shibuya Plack/PSGI Conference (shibuya.pl) #1 #plackcon

LINE株式会社で開催された Shibuya Plack/PSGI Conference (shibuya.pl) #1 #plackcon 「秋のPlack/PSGI祭り」に参加してきた。今回は YAPC::Asia Tokyo でもよくトークされている masartz 氏とご一緒させていただいた。ここの会場にくるのは「第3.5回 データ構造と情報検索と言語処理勉強会」「PerlCasual #05」に続き3回目。

開催を知った時には定員60人すでに埋まっていて補欠だったんだけれど、その後定員80人に増やしてくれたようで参加できるようになった。当日時点ではキャンセル等で定員切っていてきたい人はこれるようになってたよ。

普通に使う Plack/PSGI Server @fujiwara 氏

会場アンケートをとりつつ、必須な/便利なモジュールや Plack::Middleware の紹介。

  • だいたい Starlet か Sterman を使っている。
  • リバースプロキシ使っている時には Plack::Middleware::ReverseProxy が便利。
  • Server::Starter の start_server では plackup を実行するシェルスクリプトを作ってそれを指定するようにするとパラメータ変更できるのでいいよ。
  • Devel::NYTProf する時には if $$ % 11 == 0 などで一部のプロセスだけでプロファイリングするようにすると不運な人は遅くなるけど、全体の影響抑えつつできるよ。

『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3 を受けての話題 @kazeburo 氏

YAPC::Asia Tokyo 2013 の発表の続き。

Plack/PSGI のパフォーマンス向上の取り組みが進めば Perl の適用領域を広がるし(リアルタイムな広告系とか)、Perl 使いの仕事も増えるよ。

Plack::BodyParser の話 @tokuhirom 氏

  • 最近のサーバーサイドの開発は JSON API の開発と管理画面の開発だよね。
  • HTTP ステータスコードの使い方をシンプルに。アクセス自体が成功したら 200 を返して、API の結果の方に API 処理自体のステータスを入れる方がシンプルだし、アクセスログ処理なども楽だよと。
  • JSON API のボディ内で返すステータスも HTTP ステータスコードと同じにしたら覚えることが少なくて楽。
  • URI の /v1/ とか入れたりするけど /v2/ とか出たためしがない。

など。プラクティカルなトーク。

Plack::Request with Encoding @moznion 氏

リクエスト中のパラメータの decode を Plack で一箇所でやってしまう話。

Mojolicious の知りたい 10 のコト @yusukebe 氏

  • morbo と hypnotoad。それほどパフォーマンス悪くない。
  • Mojo::Base は使わなくていい。それほど機能無いし、Web 系以外では Mojo に依存したくないし。

YAPC::Asia 2014 やります!」とのことです。

LT

@bayashi 氏の plackup -e でちょっとしたこといろいろできて便利だよという話や、@azumakuniyuki 氏の Haineko の話や、 @hkoba 氏のコントローラを書く人がいないプロジェクト向けのテンプレートエンジンの話や、@songmu 氏の .psgi からの卒業の話とか、@tasukuchan 氏のきまぐれオレンジ☆ロードについてのラジオみたいなビデオ LT とか。

空気を読まない(読めない)一方通行なビデオ LT は新しく。

今日のさえずり: きまぐれオレンジ☆ロードについてのラジオみたいなの

2013年11月20日

[ 11月20日全て ]

About Me

Naney Naney

Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

About nDiki

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。

#nNote タグがついている記事は他の記事に比べて、より断片的・未整理・不完全なちょっとしたノートです。まだ結論に至っていない考えなども含まれます。頻繁/大幅に更新したり削除したりすることがあります。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Other Notes

ナレッジベースアプリケーション Obsidian で書いているノートの一部を notes.naney.org で 公開しています。

最近検索されている記事

月別インデックス
Process Time: 0.178221s / load averages: 0.43, 0.46, 0.48
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker