国内で有名なソーシャル系ボタン7つの説明ページへのリンク集

よく調べる気がするのでメモ
関係ないけどこの中でSSLに勝手に対応してくれるのはGoogleだけ。

はてなブックマークボタン
http://b.hatena.ne.jp/guide/bbutton

Facebook いいねボタン(デベロッパー登録が必要)
http://developers.facebook.com/docs/reference/plugins/like/

mixiチェックボタン(デベロッパー登録が必要)
http://developer.mixi.co.jp/connect/mixi_plugin/mixi_check/spec_mixi_check

Evernoteサイトメモリーボタン
http://www.evernote.com/about/developer/sitememory/developer.php

GREEのボタン
http://developer.gree.co.jp/connect/plugins/sf

Google +1
http://www.google.co.jp/webmasters/+1/button/

Twitter
http://twitter.com/goodies/tweetbutton

CakePHPでdatetime型のフォームを日付と時間の二つのテキストフィールドにする

jQueryのDatePickerとかTimePickerを使うために、datetime型のフィールドを下のような状態のフォームで出力したかった。


結論

あまりスマートな方法は見つからなかった。
ただしそれほど汚いことはしなくていい

手順

  • フォームヘルパを編集
  • モデルのデータ受取り部分を編集

フォームヘルパを編集

<?php
  echo $form->dateText($fieldName, $options);
  echo $form->timeText($fieldName, $options);
?>

という感じで使えるようにするために、フォームヘルパに以下のようなコードを追加する

<?php
        function dateText($fieldName, $options = array()){
            $options = $this->_initInputField($fieldName, array_merge(
                    array('type' => 'text'), $options
            ));
            if($options['value'] && $options['value'] > '0000-00-00 00:00:00'){
                $options['value'] = date('Y/m/d',strtotime($options['value']));
            }else{
                $options['value'] = '';
            }
            return $this->input($fieldName, $options);
        }

        function timeText($fieldName, $options = array()){
            $options = $this->_initInputField($fieldName, array_merge(
                    array('type' => 'text'), $options
            ));
            if($options['value'] && $options['value'] > '0000-00-00 00:00:00'){
                $options['value'] = date('H:i',strtotime($options['value']));
            }else{
                $options['value'] = '';
            }
            return $this->input($fieldName, $options);
        }

モデルのデータ受取り部分を編集

date[Post][date][year],date[Post][date][month],date[Post][date][day]などの配列をまとめてdate[Post][date]という形にするのは、Modelのdeconstructという関数がやっているのでそれをAppModelなどで上書きしてやる

<?php
    /*
     * フォームから送られてきたデータを加工する関数
     */
    function deconstruct($field, $data) {
        if(isset($data['date']) && isset($data['time'])){
            $time = strtotime($data['date']." ".$data['time']);
            $data['year'] = date('Y',$time);
            $data['month'] = date('m',$time);
            $data['day'] = date('d',$time);
            $data['hour'] = date('H',$time);
            $data['min'] = date('i',$time);
        }

        return parent::deconstruct($field, $data);
    }

以上

objective-cでretainCountが増えるとき減るときの確認

Objective-ciPhoneiPadアプリ開発をしているが、GCのない言語をまともに使ったことがないので混乱している。
頭を整理するためにViewBasedApplicationを使って試してみる。

基本

- (void)viewDidLoad {
    [super viewDidLoad];
	
	UIView *a = [[UIView alloc] init];
	LOG(@"a retainCount:%d",[a retainCount]); // => 1
	
	[self.view addSubview:a];
	LOG(@"a retainCount:%d",[a retainCount]); // => 2 増えた
	
	[a removeFromSuperview];
	LOG(@"a retainCount:%d",[a retainCount]); // => 1
}
  • allocしたときに増える
  • addSubviewしたとき増える
  • removeFromSuperviewしたときに減る

addSubviewで増えたcountはいつ減るのか

さらにaにsubview bが、bにsubview cがついたとき

  • UIView a
    • UIview b
      • UIView c
- (void)viewDidLoad {
    [super viewDidLoad];
	
	UIView *a = [[UIView alloc] init];
	[self.view addSubview:a];
	LOG(@"a retainCount:%d",[a retainCount]); // => 2
	
	UIView *b = [[[UIView alloc] init] autorelease]; 
	UIView *c = [[[UIView alloc] init] autorelease]; 
	[a addSubview:b];
	[b addSubview:c];
	LOG(@"a retainCount:%d",[a retainCount]); // => 2
	LOG(@"b retainCount:%d",[b retainCount]); // => 2
	LOG(@"c retainCount:%d",[c retainCount]); // => 2
	
	
	[a removeFromSuperview];
	LOG(@"a retainCount:%d",[a retainCount]); // => 1 (減った)
	LOG(@"b retainCount:%d",[b retainCount]); // => 2 (ここでは減らない)
	LOG(@"c retainCount:%d",[c retainCount]); // => 2
	
	[a release];
	LOG(@"b retainCount:%d",[b retainCount]); // => 1 (減った)
	LOG(@"c retainCount:%d",[c retainCount]); // => 2 (ここでは減らない)
}
  • aにsubviewがついてもaのcountは増えない(増えるように見える時があるのはなんだろ)
  • bはaがリリースされるとretainCountが減る([a removeFromSuperview]のタイミングではない)
  • cはbのdeallocが呼ばれないのでreleaseされないのだろう

MutableArrayやMutableDictionaryで増えたcountはいつ減るのか

- (void)viewDidLoad {
    [super viewDidLoad];
	
	NSMutableArray *d = [NSMutableArray array];
	NSObject *obj1 = [[NSObject alloc]init];
	LOG(@"d retainCount:%d",[d retainCount]); // => 1
	LOG(@"obj1 retainCount:%d",[obj1 retainCount]); // => 2
	
	[d addObject:obj1];
	LOG(@"d retainCount:%d",[d retainCount]); // => 1
	LOG(@"obj1 retainCount:%d",[obj1 retainCount]); // => 2
	
	[d release];
	LOG(@"obj1 retainCount:%d",[obj1 retainCount]); // => 1
}
  • addObjectするとobj1は増える
  • MutableArrayを削除すればobj1は減る

autorelease

retainCountが1になったら殺すという死刑宣告。retainしてやれば延命できる。

あとは

Objective-C プログラミング言語:メモリ管理を熟読するのが早い

結論

  • alloc, copy(なんちゃらcopy, copyなんちゃらを含む) , retain, addSubview, addObject(その他addなんちゃら)をすると増える
  • addなんちゃらで増えたcountはaddしたオブジェクトが解放されれば減る

疑問

autoreleaseプールの仕組み。例えば

NSObject *a;
for(int i=0; i<100; i++){
 a = [[[NSObject alloc] init] autorelease];
}

は全部リリースされるのかどうか不安

はてなから寄付できます(しました)

 上のバナーからはてなポイントを使って東北地方太平洋沖地震義援金を送ることができます。
ポイントを持ってる人はもちろん、はてなにクレジットカード情報が登録してある人なら3分以内に寄付が完了します。

 僕ができる募金の額はしれていますが、被災された人、支援に携わる人、福島原発で戦ってる人、それらの人をサポートする何倍もの人、そしてこの地震で日常が奪われたすべての人からせめて物やお金での苦労を軽減できればと思います。

一人暮らしをはじめる昔の自分に教えたいこと

6年ぐらい一人暮らしして、去年結婚してそれも終わった。
フライヤーが一番必要だとは思わえなかったのでノウハウを共有したい

家/物件

  • 広くて古い物件より、狭くても新しい物件のほうが高機能で気持ちがいい
  • 部屋自体が新しければ家具にお金をかけなくてもおしゃれにしやすい(照明がレールのあれになってるとか)
  • 設備が充実してることも結局月々のランニングコストを下げてくれる(浴室乾燥があるとか)
  • スーパーが仕事場や学校と自宅の間にあることが重要(近くても移動経路の間にないと自炊頻度はかなり下がると思われる)
  • 大通りや高速道路に面しているとうるさいので寝るときとか気になるし、洗濯物もくさくなる
  • 家の探し方はメールが便利(以前のエントリ参照

家具/家電

 お金がなかったので家電はヤマダ電機とかで一番安いものを揃えた。結婚してから高くていいものに買い換えたが、どれもそんなに値段ほどの違いは感じなかったので基本的に安いものでいい気がする。
 ただし、炊飯器だけはドンキホーテの一番安いやつから2万円台のものに買い換えた。信じられないぐらい米がうまくなって驚いた。

 家具も無印を中心にニトリとかで買った。最初のころにホームセンターとかで買ったものはデザイン性などについて我慢していたが、やはり気に入らなかったので徐々に無印良品のものなどに変えていった。
 ソファだけはカリモク60というやつがいいなと思ったので買った。今でも流行ってるかどうかしらないけど、来た人はいいねと言ってくれるしヤフオクでも高値で取引されているので安い買い物だったと思う。
 あと本棚は木を買ってきて自分で作った。壁にぴったりサイズだからなんとなくおしゃれに見えた(気がする)木はホームセンターでカットしてくれるので工具なども別に要らない。

  • 家電はネットで買うのが一番安い。サポートも問題ない。
  • 家電はどうせたいした機能は使わないので一番安いのでいい。
  • 家電・家具は結婚したらほとんど全部捨てることになることを覚えておく

パナソニック ドルツリニア 音波振動ハブラシ 白 EW-LA30-W

  • 電動歯ブラシは単純に歯磨きの効率をあげてくれるのでおススメ
  • 家電は無印良品で買わない(はずれが多い。特にアイロンは後悔した。)

パナソニック コードレススチームアイロン シルバー NI-WL600-S

  • アイロンは1万円以下のものとそれ以上のものでは効率に3倍の差が出る(Panasonicの両側がとがってるのがいい)

カリモク カフェソファー WS1180BW/WS1183BW【国産家具】【組み立て式】 (1P WS1180BW)

  • その他小物は全部無印良品で買う
  • 2万円のソファを買うぐらいなら、6万円のソファを買って4万円で売るのがいい
  • ソファが安いとすぐにヘタるので清潔感が損なわれ結婚が遠のく
  • ソファは一人掛けより二人掛けにしたほうが結婚が早くなる

お金

 どうせ貯金はできないので自動化する。自動積み立てはやっておいて良かったなと思う。ぜんぜんお金のない時期も「いざとなればあの○万円がある」と思うだけで心に余裕がもてた。

  • 1万円+(余裕分)とかを自動で積み立てられる契約にしておく(定期ではなく単なる積み立て。)
  • これを毎月1万円の貯金はできないが、毎月1万円少ない金額で生活するのはできるの法則という
  • ついでにもう1万円をインデックスファンドなどに投資しておく。三菱東京UFJの場合だとこれでコンビニとかの引き出し手数料が無料になったりするし、経済のことも気になるようになる

炊事

 これもいかに最初の出だしを面倒だと思わないかということに重点を置く。そういう意味でパスタゆで器、タジン鍋、冷凍のご飯、無洗米は神器といえる。

  • 炊飯器は2万円台後半〜のものを買う。本当にまずいので注意。1万円以下のものは炊飯器と考えない
  • 米は無洗米でいい。最近のは味もぜんぜん悪くない。手をぬらさずに1分で炊飯開始できるハードルの低さは自炊率UPに大いに貢献してくれる

パスタゆで容器PS-G62

  • パスタゆで器は味はパスタ鍋に比べて20%減だが、自炊頻度が3倍になるので必須

イシガキ タジン鍋19? 2978

  • タジン鍋は基本材料を入れて5分チンするだけで料理ができるので必須(簡単なのと見た目がいいのがポイント)
  • シリコン製などは見た目と匂いの点からおススメしない

パール金属 リビンクリップ ナイロンクッキングトング 25.5cm C-285

  • トングは混ぜる炒める盛るに大活躍。菜ばし不要になる。
  • 重曹があれば焦げをはじめ、だいたいの汚れがとれる
  • お米は冷凍すれば長く食べれる。保温しておいても粘り気がでるまで食べれる

[rakuten:profoods:10005813:image]

  • オリーブオイルは少しいいものをたくさん使う
  • 卵は生のまま20日ぐらいは余裕で食べれる(テレビで卵工場の人が言ってた)
  • 味噌汁の作り方を覚えてから自炊の機会が増えた(冷蔵庫で4日ぐらいはOK)

掃除

クイックルワイパー
 これも基本方針はいかに簡単に続けるかということ。掃除機は出すのが面倒なので週1とかにして基本的にはクイックルワイパーでやれば1分で80%は終わるのでいいと思う。

  • 掃除機は安いものでもいい
  • クイックルワイパーがあれば大丈夫
  • パイプマン、カビキラーは信じてもいい
  • トイレクイックルはメーカー品じゃないと薄くて破れやすい

洗濯

こればっかりは簡単にする方法を編み出せなかった。今でも面倒に思う。
浴室乾燥機があると雨の日でも干せるのでかなりうれしい。

NKグループ販売 長く長く使える 引っぱリンガー 44ピンチ NSA-37

  • 下着とかを干すやつ(ピンチハンガー?)は高かったけど「NKグループ販売 長く長く使える 引っぱリンガー 44ピンチ NSA-37」ってやつが、片方に洗濯物がよっても斜めになりにくく、取り込みもひっぱるだけなので楽。耐久性も抜群らしいのでぼろぼろになりにくい。
  • ハンガーは大量に購入し取り込んだらクローゼットに直接入れると楽
  • 乾燥機は使ったみたが服の劣化が激しかったのでやめた(高い乾燥機なら違うのかも?)
  • 洗濯物は洗い終わった瞬間から雑菌が繁殖し始める。すぐに干せ
  • Tシャツとかが生乾きくさくなったら雑菌が原因なので(ゾンビ化と呼んでた)、3分なべで茹でる+ハイターでOK


あと思い出したら適当に追加したい

あたりまえだけどintを連続で宣言すれば連続したところにメモリ確保される

Objective-CをやるにあたりC言語を駆け足で復習中
普段LLしかやらないので、直接メモリを触ってる感じが楽しい。

例題でこういうのがあった

#include <stdio.h>

int main(void)
{
        int i1,i2,i3;
        printf("%p,%p,%p\n", &i1,&i2,&i3);
        return 0;
}

ってやると

toyoshi@ant:~/c$ ./a.out
0x7ffff32ac88c,0x7ffff32ac888,0x7ffff32ac884
toyoshi@ant:~/c$ ./a.out
0x7fffe8ce7b8c,0x7fffe8ce7b88,0x7fffe8ce7b84
toyoshi@ant:~/c$ ./a.out
0x7fff75ed653c,0x7fff75ed6538,0x7fff75ed6534
toyoshi@ant:~/c$ ./a.out
0x7fff52fa6fbc,0x7fff52fa6fb8,0x7fff52fa6fb4
toyoshi@ant:~/c$ ./a.out
0x7fff3c8ad4cc,0x7fff3c8ad4c8,0x7fff3c8ad4c4
toyoshi@ant:~/c$ ./a.out
0x7fffd99efe1c,0x7fffd99efe18,0x7fffd99efe14
toyoshi@ant:~/c$ ./a.out
0x7fff4b4669cc,0x7fff4b4669c8,0x7fff4b4669c4
toyoshi@ant:~/c$ ./a.out
0x7fff364096dc,0x7fff364096d8,0x7fff364096d4
toyoshi@ant:~/c$ ./a.out
0x7fffde10205c,0x7fffde102058,0x7fffde102054
toyoshi@ant:~/c$ ./a.out
0x7fff2fc39e7c,0x7fff2fc39e78,0x7fff2fc39e74

という感じで
なぜ宣言とは逆順にメモリが確保されるのか
なぜi3は必ず下一桁が4から始まるのか
というのが楽しい!だれか教えて

あとi1,i2,i3がキレイに4バイトずつずれるのも楽しい!