2011-11-27
なんか、はてなブログばっかりかいててこっちに書いて無いのもどうかなーっておもったりしている。
ベータなんだし、もうちょっとガンガン機能追加されるのかなーっておもってたんだけど、割とあんまり機能追加されないので微妙な気分になってる。
一旦戻ろうかしら。
Panasonic Lumix GX1買ったんですよ
http://uzulla.hateblo.jp/entry/2011/11/27/230731
XMailをつかってみないか?
http://uzulla.hateblo.jp/entry/2011/11/26/002739
Web SQL DatabaseのWrapper的なもの書いてる
http://uzulla.hateblo.jp/entry/2011/11/19/012159
JSで可変長の配列を引数にして関数をコールする、の話し
http://uzulla.hateblo.jp/entry/2011/11/18/202751
簡単なチェーンが欲しかったから書いた
http://uzulla.hateblo.jp/entry/2011/11/18/190503
在宅とかフリーランスとか
http://uzulla.hateblo.jp/entry/2011/11/16/212413
さくらのクラウドつこてみた、つらつらメモ(随時追記)
2011-11-06
CoffeeScriptつかいはじめてみた
Javascriptの何がつらいって、ローダーがないとか色々あるけど、個人的にはOOPが辛い事だとおもうんですよね。*1
まあ、1日以下で書けるような物ならいらないけど、今ちょっとだけややこしいWebアプリを書いてて、やっぱクラスとか使いたくなっているわけですよ。
ということで、今日から真面目にCoffeeScriptを使い始めた。
使い方について、色んなサイトに載ってるんだけど、実際の所、別にnode.jsとかいれなくても
<script type="text/javascript" src="lib/coffee-script.js"></script> <script type="text/coffeescript" src="lib/test.coffee"></script> <script type="text/coffeescript"> alert 1 </script>
とか書いておけば動くので、当座これでいいんじゃないの。
最終的なデプロイ時には速度的にもったいないのはわかるし、デバッグもちょっとだけ辛いんだけど(動的に生成されたJSコードはMinifyされてて、デバッガが使えない…)、まあ、ちょっとだけ書く程度ならIEでJS書いてると思えばいい程度だし…。
ただ、<script type="text/coffeescript">〜</script>を後からwriteとかIncludeしたりとかしてはやそうとしても無理。これはちょっと残念。
--
で、やっぱりOOPがすごい書きやすい…*2
class JsonData
loadFromUrl:(url) ->
@loadingStartFunc
data = $.ajax({
url: url,
cache: false,
dataType: 'text',
}).success(
@loadingSuccessFunc(this)
).fail(
@loadingFailFunc
).always(
@loadingEndFunc
)
##
class List extends JsonData
data : {}
sourceUrl: LISTS_JSON_URL
constructor: () ->
@loadingStartFunc = ->
#console.log 'start'
@loadingFailFunc = ->
#console.log 'fail'
@loadingEndFunc = ->
#console.log 'end'
@loadingSuccessFunc = (_this) ->
(json)->
_this.data = eval(json)
$('#src_list_ul').trigger('e_reload_list')
@load()
reload:() ->
@loadFromUrl(@sourceUrl)
load:() ->
@data = [] # TODO load from local database.
getData:() ->
@data
##
@List = List
Pythonと一緒で、インデントでブロックわけするのは個人的には微妙なんだけど、多分慣れだろうなー。
でもまあ、CoffeeScript良い感じですね。
今回モデル的な所だけはCoffeeで書こうかなーっておもってますよ、はい。
最後の行の
@List = List
については、CoffeeScriptはスコープがガチガチで、1ファイル(1Scriptエレメント)の外には、通常何も投げ出すことができないので(いわゆるグローバル汚染がウッカリでできない)、本来はどうやるのが普通なのかしらないんだけど、これでwindow.Listに、作ったListクラスを適当にはやしている。
@はthis.に相当し、CoffeeScriptの一番上位でのthisはwindowにあたる。
window.myClass.Listとかにすべきかなーとかまあ色々思うんだけど、そもそも正しい解決策が知りたい。
あと、for inの書き方で、
addCell src for src in list.getData()
どうでもいいけど
「貴方はこのthisですよね?」
「いいえ、私はこのthisです」
「えっ、じゃああのthisはどこにいったんですか?」
「しりません、私はあくまでこのthisです」
「そのthisでもなく?」
「このthisです」
上のコードのajaxの所、1時間悩んだ、まだ脳みそのモードがJSの非同期脳、クロージャ脳になってない…。
さっさと切り換え無いと…。
web 2.0 touchが予想外に良い
http://web20boom.com/web/touch.php
まあ出来る事はd
・iPhone風表示
・ネイティブアプリっぽいCSSトランジション
・ヘッダーフッター(タブ)固定(iScroll利用)
といったベーシックな感じなんですけど、iPhone&iPad風のThemeが、他と違ってちゃんと付いてくるのがいいですね*3。
CSS FWとしても、凝った事しなければ比較的使いやすい印象ですね*4。
兎に角iScrollつかってるので、iPhoneネイティブアプリっぽい感じになるのがとてもいいですね。他のFWもさっさと同様になって頂きたい。(逆に、それをやりたくないときちょっとメンドイけど)
ただ、JSでContentsをガリガリ書き換えるとスクロールが変になりますね、まあこれは実際にはiScrollの都合ですが。
scrollの中身を操作したら、(web2.0touchのインスタンス).scroll.refresh()を叩いてあげる必要がありますね。
2011-11-05
冷蔵庫買ったんですよ、400L以上の冷蔵庫ってでかいですね。
それはさておき、やっとConfig::Pitつかうようになりましたよ。こいつぁ便利ですね、Windowsだと使い物にならない気もするけど。(EDITOR環境変数的に)
#!perl # usage # perl this.pl < unfollow_id_list.txt use Net::Twitter; use Config::Pit; use Data::Dumper; use feature say; # config my $config = pit_get("twitter.com_oauth_uzulla" , require => { "consumer_key" => "req", "consumer_secret" => "req", "ACCESS_TOKEN" => "req", "ACCESS_TOKEN_SECRET" => "req", }); die 'pit_get failed.' if !%$config; my $consumer_key = $config->{consumer_key} or die 'consumer_key not found.'; my $consumer_secret = $config->{consumer_secret} or die 'consumer_securet not found.'; my $ACCESS_TOKEN = $config->{ACCESS_TOKEN} or die 'ACCESS_TOKEN not found.'; my $ACCESS_TOKEN_SECRET = $config->{ACCESS_TOKEN_SECRET} or die 'ACCESS_TOKEN_SECRET not found.'; #setup twitter my $t = Net::Twitter->new( traits => [qw/OAuth API::REST/], consumer_key => $consumer_key, consumer_secret => $consumer_secret, access_token => $ACCESS_TOKEN, access_token_secret => $ACCESS_TOKEN_SECRET, ); #do while(<>){ $id = $_; say $id; my $res ; eval { $res = $t->destroy_friend($id) }; warn "$@\n" if $@; }
なんかNet::Twitter::Liteでdestoroy_friendがうまくうごかなかったんですよね。
Net::Twitterいれたらうごいたんですけど。
でもNet::Twitterも何回かやってたらうごいてないような見え方したし。
TwitterのAPIは、特にフォローアンフォロー周りでよくわからない挙動するので(特に遅延)イヤですねえ…。
--
あと、Date::Parseを初めてしりましたね。
use Date::Parse; use DateTime; my $created_at_time = str2time('Thu Dec 09 11:59:52 +0000 2010'); $dt = DateTime->from_epoch(epoch => $created_at_time); say $dt->ymd('/'); # -> 2010/12/09
PHPではstrtotimeってすごい便利な関数(大抵の時刻フォーマットテキストを、UNIX秒にもどしてくれる)があるんですけど、まさにそれですね。
いやこれ本当にないとぼくは目から血が噴き出して死ぬんですが、やっとみつけたわー。
きっとDateTime周りにあるんだろう…いつかは見つかるだろう…と思いつつ、いつも頑張ってパースしてたんですけど、そんなところじゃなかったんですねえ…。
2011-10-31
Hachioji.pm #10開催しましたね。
厚顔にも、YAPCで皆さんに宣伝してもらった効果すごいな!#10は16人中、新顔6人に参加いただきました。
https://plus.google.com/photos/114651309588721895816/albums/5669355651295732737
#10について、私の悪筆を尽くす事もできますが、この楽しげな風景で全てが物語られていますね(手抜き)。
詳しいレポートはその内 http://hachiojipm.org にまとまることでしょう…(さらなる手抜き)。
(「レポをつくるのだ、作らないと俺が血を吐いて死ぬ!」などといった、脅しにもとれる酷い要求をしたところ、今回は皆様に一層書いて頂けました、主催は涙が止まりません。)
いやとても楽しかった!皆さん++!有り難うございました!
ーー
次回Hachioji.pm #11 @Machidaはすごい多くて、現在で21人ですよ、もう今後Machidaでやればいーんじゃねーの?!
そうそう
元々八王子地元のエンジニアを!っておもってたんですけど、キイロさん(@yellow844)が八王子で、これでついに八王子4人目ですよ!(あれ?5人目?)
