Hatena::ブログ(Diary)

c/fe

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

さくらクラウドつこてみた、つらつらメモ(随時追記)

http://uzulla.hateblo.jp/entry/2011/11/15/175953

2011-11-10

はてぶろつかってみてる

http://uzulla.hateblo.jp/

まあ、深い意味とかないんですけど、しばらくあっちを更新するかもです。

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されてて、デバッガが使えない…)、まあ、ちょっとだけ書く程度ならIEJS書いてると思えばいい程度だし…。


ただ、<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()

いまいちよくわかんない、これなんでsrc二つあるの…。


どうでもいいけど

「貴方はこのthisですよね?」

「いいえ、私はこのthisです」

「えっ、じゃああのthisはどこにいったんですか?」

しりません、私はあくまでこのthisです」

「そのthisでもなく?」

「このthisです」

久々にJS書くと、どうしても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()を叩いてあげる必要がありますね。

*1:Perlもか…Mooooooooooooose

*2:ボクは基本OOPは継承ができればいいです…、情弱ぴちぱーなので。

*3:某FWはなんでやめちゃったのかね?ライセンス

*4:複数行リストセルにしたとき、矢印がズレるとか、そういうのは有るけど

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でやればいーんじゃねーの?!

http://atnd.org/events/20693


そうそう

元々八王子地元のエンジニアを!っておもってたんですけど、キイロさん(@yellow844)が八王子で、これでついに八王子4人目ですよ!(あれ?5人目?)

やっぱりいるじゃないか、八王子にも。だれだ八王子なんかにはいないと言っていた人は!