JSONって多分こんな感じ

いろいろあって、JSONを使うようになった。
JSONなにそれ。チェーンソーもってんの?
実体はなんかこんな感じ?

["hoge", "miko", "jk"];//配列

{"jk": "18", "jc": 15, "js": "かわいい"}//オブジェクト

多分こんな感じ。
んで、某mixiアプリOpenSocialAPIを叩いて返ってくるのが以下

throw 1; < don't be evil' >
{"http://d.hatena.ne.jp/asonas/rss2":
	{"body":"
		//扱えるのはこっかららしい
		{\"Entry\":
			//配列らしい
			[
				{
					\"Link\":\"http://d.hatena.ne.jp/asonas/20091216#1260938282\",
					\"Date\":1260938282000,
					\"Title\":\"[php]phpの関数名長いよ馬鹿\"
				},
				{\"Link\":
					\"http://d.hatena.ne.jp/asonas/20091129#1259493072\",
					\"Date\":1259493072000,
					\"Title\":\"[開発][メモ][perl][女子高生]perlとcrontabとemacsと女子高生と。\"
				},
				{
					\"Link\":\"http://d.hatena.ne.jp/asonas/20091125#1259158094\",
					\"Date\":1259158094000,
					\"Title\":\"[開発][php]phpのheader()\"
				}
			],
			//ブログの情報
			\"Description\":\"ああ、そういえば、なかった気が、する -あそなす-\",
			\"Link\":\"http://d.hatena.ne.jp/asonas/\",
			\"Author\":\"asonas\",
			\"URL\":\"http://d.hatena.ne.jp/asonas/rss2\",
			\"Title\":\"ああ、そういえば、なかった気が、する -あそなす-\"
		}
		","rc":200 //レスポンスの結果?
	}
}

ところどころエスケープされてるのは気にしない。
んで、これを

//認証とか
//データの取得方方法とかは
//省略

gadgets.io.makeRequest(url, function(response) {
	var feed = response.data;
	var title = feed.Title;
	var link = feed.Link;
	// do something...
	var entries = feed.Entry;
	for (var i = 0; i < entries.length; i++) {
		var entry = entries[i];
		var entryTitle = entry.Title;
		var entryLink = entry.Link;
		// do something...
		document.getElementById("feedTitle").innerHTML = entryTitle;
		document.getElementById("feedLink").innerHTML = entryLink;
	}
}, params);

とかで出力するらしい、要するに配列の中をfor文で回すらしい。
ただ、要素が足りないのでcreateAttributeとかでdivを増やす必要があるんじゃね?とか思ったり。
しばらくJavaScriptに関連する記事が増える予感。

phpの関数名長いよ馬鹿

phpの関数名が長いくせによく使う関数の幻想をぶちこわす。

<?php
function m($mres){ 
return mysql_real_escape_string($mres); 
} 

function h($hsc){ 
return htmlspecialchars($hsc, ENT_QUOTES); 
} 

//って書いておくと 

$hoge = sprintf("SELECT * FROM (ry);",m($piyo)); 
//とか 
$get_parm = h($_GET['p']); 
?>

みたいに書ける。短い!

追記

mixi日記に同じ内容で書いたら、コメントを貰った。ありがたやありがたや
コメントを読むと上のコードだとダメらしい。あたかも「これで短く書ける!きたこれ!!」って思って他のに赤っ恥ですね。ひゃああ
で、どうやらプレースホルダってのが重要なキーワードらしい。
調べてみるPEAR::DBの何からしい。
とりあえず、PEARからDBをインストールして*1試してる。ていうかすでにコードの量が半分以下になった。やっぱ便利だね。<-イマココ
よくよく調べてみるとprepareメソッドとかexcuteメソッドが重要ぽい。
理解出来たら現状のコードからリプレースをかける。
そして何かあったらまた追記する。

*1:めんどくさいことにMAMPで開発してるから/Applications/MAMP/bin/php5/bin/pearを叩かないといけなかった。あうあう

perlとcrontabとemacsと女子高生と。

今ネット界の界隈で大流行している「Twitter」!!
そんなTwitterで毎日行われる儀式をあなたは知っていますか...っ!!


深夜0時を過ぎるとみんな一斉に「よるほー」とつぶやく...ッ!!


俺は勝手に「よるほー教」と呼んでるんだけど、なんでも、マカーな人御用達のTwitterクライアントであるところの夜フクロウのユーザ達が始めたとか、それよりもずっと前からある儀式だとか元祖たる諸説もとい流派は多岐に渡り一度派閥争いが起きて大リムーブ&ブロック戦争が起きたのは記憶に新しい。派閥の忠誠を誓う証拠に夜フクロウのアイコンを模造した銅板を踏ませていてそれがこの世に生きる踏み絵だとかなんとか、まぁ俺の妄想だけど。
まぁ、なんだっていいんだけど、要するに深夜0時になると「フクロウは夜に鳴く」っていうのにかけて、「よるほー」ってつぶやくらしい。で、それが昼の12時だと「ひるぽー」とか「ひるぽっぽ」らしい。それキジバトなの!?ハトなの!?


で、腐れ脳みそ理系er、もとい「めんどくさい手作業は全部俺以外がやればいい理論」で、perlとcrontabの勉強するついでに

  • 深夜0時に「よるほー」ってつぶやくコードを書いたよ!

ここから本編

使う物:Macとターミナル.appとPerlとやる気
だいたいの作業はターミナル.appでやるよ!


まずは、個人的な準備で

crontab -e

で、viが起動するのが嫌なので

export $EDITOR=emacs

とかする。そしたら、crontab -e でemacsが起動するようになる。
crontab -eでemacsが起動したら

 0 0 * * * perl /Sore/Ha/Anata/Death.pl

みたいに書く。時間設定は前から「分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0(Sun)-6(Sut)」上に書いた設定だと【毎日0時に最後のコマンドを実行させる】ってこと。簡単!
そして最後にコマンドを記述。で、オイラはこれでハマっちゃってたんだけど。最後に改行を入れないとcronがきちんと動かないぽい。つまるところの

 0 0 * * * perl /Sore/Ha/Anata/Death.pl
#改行

こうしておく必要がある。
で、保存してターミナル.appでcrontab -lを叩いて

 0 0 * * * perl /Sore/Ha/Anata/Death.pl 
$ 

とか出れば成功。
だけど、

 0 0 * * * perl /Sore/Ha/Anata/Death.pl$   #cronの結を改行してないとこうなる。

これはNG
次にPerlのコード。必須なモジュールはNet::TwitterCPANから入れてね!

#! /usr/bin/perl
use Net::Twitter;
use Jcode; #多分この行要らない

my $tw = Net::Twitter->new(
	traits   => [qw/API::REST/],
	username => "SoreHaAnataDesu",
	password => "SoreMoAnataDesu");

my $text = 'よるほー';
Jcode::convert(\$text, 'utf8'); #多分この行要らない
my $result = $tw->update($text);

だいたいこんな感じ。
ノリと勢いでザグザグと書いたので汚いけど・・・。*1

問題点

Twitterの制限で24時間に同じ発言(POST)は出来ない仕様らしい。
24時間ってどれぐらいなのか非常にきになる。24時間何分何秒なのか非常にきになる。
つまるところ、その制限が24時間きっかりなのか23時間59分59秒なのか24時間0分1秒なのかで上のコードがきちんと動くかどうかが非常に怪しいんだ。
ちょっと様子を見ながら調整する予定

解決策

もともとcronで操作してるからcronで秒単位でいじればどうにかなるんじゃね?とか思う。デフォルトでcronは秒の設定できないぽいけどググったら、なんかやる方法はあるっぽい
もしくは、日付ごと(偶数日奇数日とかね!)にPOSTする「よるほー」を置き換えるとか。ひとり「よろほー」とかPOSTしても誰も気がつかない。

まとめ。

今色々と考えてるTwitterBOTがいくつかあるので、それをつくるためのスタート地点に立てたかなと思う。
今後ももっとぷろぐりゃまーなことやっていきたい。


テストPOSTの残骸
あそなす on Twitter: "女子高生!女子高生!!"
あそなす on Twitter: "制服女子!制服女子!!"
あそなす on Twitter: "ツンデレ幼女子高生!!"

*1:もしかして:文字がエスケープされてるから円マークをバックスラッシュに変える必要があるかも?

phpのheader()

はまるとかそういうレベルじゃなくて冷静に考えればそうだよね。って思えること。
phpのheader関数について
code.php

<?php
header('Location: code1.php');

header('Location: code2.php');
?>


で、code1.phpおよび、code2.phpでは

<?php
print '1';
?>
<?php
print '2';
?>

みたいな。
もちろん出力結果は'2'
勝手に最初に記述してるcode1.phpに転送されると思ったらそのコードの一番最後にあるheaderを採用するみたい。

YoruFukurou
多分、多くのMacユーザが使っているTwitterクライアント。
僕もこのクライアントを利用してTwitterライフを満喫しているのです。
美麗なGUI、充実した機能、64bit対応 etc etc

第壱話 バグ、襲来

そんなTwitterクライアント「夜フクロウ」なのですが、どうも僕の環境ではめんどくさい不具合が起きる

  • 不具合その壱
    • フリーズ、もしくは著しいパフォーマンスの低下。レインボーがぶんぶん回る
  • 不具合その弐
    • 気がついたら深夜3時にn

不具合その弐は嘘だ。いっつ冗句。で、なにがめんどくさいかって、まず再現できない。具体的には、完全に再現できない。
夜フクロウだけを使っている時や、入力ソースをことえりを変えると不具合が発生しなくなったり、夜フクロウと一緒に例えばBOINCを起動させてみたりするととたんにパフォーマンスが落ちたり、発生するタイミングランダムすぎる。
「ていうか、てめーちょっとは似非開発者ぽいことしてんだからコンソールログぐらい読めよ」って話になって*1、なんだか申し訳ない気持ちいっぱいで「ですが、コンソールにはそれらしきログは残ってなかったんです。」と言う他ない始末*2 *3
もし、同じ現象で悩んでたりする人がいたら情報共有とかしたいなぁ。

ちなみに実行環境

追記

相変わらずフリーズは起きるのでコンソールを眺めてたら意外なものがひっかかってた。

09/10/23 23:51:28 Console[25963] Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found. Did find:
/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper

これはフリーズしたあたりの時間で探してたらこんなのがみつかった。なんか読み込みに失敗してる模様。
Adobe Unit Types.osaxがなんか悪さをしてる模様。ためしにファイル名でググってみるとPhotoshopのファイルらしい。しかも、見つかった記事は超古い。僕は今のMacBookProではPhotoshopをつかってないので削除。
これで少し様子を見ようと思います。また何かあれば、報告します
とりあえず、これで問題解決したら開発者のaki_nullさんにお詫びを入れておこう・・・。

*1:開発をしている方にも言われたり http://twitter.com/aki_null/status/5087640101 きっと、単にバグを報告するだけのうんこユーザって思われてるorz

*2:もしかしたら、僕のログの読み方を間違えてるのかも。ちなみに、現象が起きてから強制終了させるなり、おさまるのを待つなりしてからConsole.appを開いて、まず"yorufukurou"や"atok"でログを検索してみたりして現象が起きた時間を照らし合わせてみてる

*3:今気がついたんだけど、もしかして起動時のログとかも見た方がよかったのかな。だとするとなおさら申し訳ないというこっぱずかしいことしてしまった。反省。

痩せた?

いいえ、やつれてるんです。
毎日のランニングやら体重測定やらをしていないんですが、地味に体重は減りつつあります。
最近気がついたんですが、体重計ってやっぱり誤差は出るんですね。つまり、1回目の測定値と2回目の測定値は違うってことです。しかもうちのは誤差範囲が広い、つまり計器としての精度が悪いので今度から5回ほど体重を測り平均を取ろうと思います。

リリース直前

今やってるmixiアプリにくわえ、別件でSNSの発注を受けた。
SNSなんてその辺のを適当に使えばいいじゃん。」
とか思ってたんだけど、どうやら使い勝手が悪いとかサービスがダウンするとかで使いにくいらしい。(あと、俺が知り合いだから、ただで発注していろいろ機能を追加しやすい。とかそういう理由らしい*1
そんな訳でSNSもどき*2を1週間あまりででっち上げました。明日(日曜日)にリリース。
リリースとは言っても建前でホントはデバグに近いことをする予定です。そのSNSを利用する友人を捕まえてデバグシートを渡して不具合を書き出して貰うつもりだったり。携帯でも見られるようにしてくれとのお達しだったのですが、僕はiPhoneユーザなので携帯ブラウザを使ってのデバグが出来ないんですよね。なんて不便*3
まぁ、いろいろとやってて気がついたことがあったのでそのあたりもまとめてブログに書き出そうと思います。

*1:まぁ、ニートだからいいけど

*2:もどき、とは言うけどキチンとログイン状態を保持したりパスワードやメールアドレスは暗号化して保存したり新規アクティビティがあると暗号化されたメールアドレスを複合してメール送ったりとか結構実装は大変だったりする。

*3:なんか携帯ブラウザをエミュレートするiPhoneアプリがあるらしい