サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
unknownplace.org
ATOKをMacを使いはじめてからずっと使っているので、そこそこ長い付き合いではあるけれど、 和英混在入力の使い勝手が悪く、いつも混在入力をするときに、ATOK自体のON/OFFをして対応してしまっていた。 この使い方は注意しないと、変な文節を学習させてしまうことになる。 例えば、 nodeよりperlが好き。 のような文章で、英語の部分ではATOKをOFFにするような入力をしていると、 「が好き」という文章をATOKに教えこませてしまう。このような意図しない学習結果が積みかさなると、普通の文章の変換も苦になるほどATOKの調子が悪くなってしまう。 そのような状態になるたびに、辞書をクリアしたり、 そもそもこのようなことを避けるために、「が」で一旦確定させるクセをつけるなどして、対応してきたが、そんなことを考えながら文章かくのであれば、もっとシンプルな、SKKのような入力方法にしちゃえばい
plenv でつかわれる Perl をプロンプトに表示したりするのに使えるかと。検出ロジックは plenv とおなじつもり。 plenv_perl_version() { local dir=$PWD [[ -n $PLENV_VERSION ]] && { echo $PLENV_VERSION; return } while [[ -n $dir && $dir != "/" && $dir != "." ]]; do if [[ -f "$dir/.perl-version" ]]; then head -n 1 "$dir/.perl-version" return fi dir=$dir:h done local plenv_home=$PLENV_HOME [[ -z $PLENV_HOME && -n $HOME ]] && plenv_home="$HOME/.plenv"
perlbrew 使ってたんだけど、tokuhirom がつくってる plenv にスイッチした。 perlbrew よりシンプルでなにやってるかわかるのがなにより。 というか perlbrew がよく分からなすぎるという話もある。 plenv だとさらに .perl-version というファイルに perl のバージョンをいれておくと、そのディレクトリ以下では自動的にそのバージョンの perl が使われるという機能があって、これがだいぶはかどる。 perlbrew で入れた各種 perl は -g つけわすれて SEGV したときこまってて別途 --as=5.14.2-debug みたいのをつくってたけど、 その経験を生かして今度は最初から $ plenv install 5.14.2 -D=DEBUGGING=-g な感じで全部入れるようにした。ちなみにこの install オプショ
いままで秘伝のタレのような設定を使い続けていたのだが、どうもしばらく使っているとEmacsがCPUを非常に食うようになってくる。 flymakeの設定かなー?とかほかにもいろいろ怪しげなところを削ってみたりしたがわからず、だましだまし使っていた。 そういう理由もあってEmacs設定をリセットしたいと思っていたので、Emacs実践入門や Advent Calendar を読んでいたら el-get というパッケージマネージャがなかなかよさそうだと思った。 これ、存在自体はまえから知っていたけど秘伝のタレベースな自分は使わないだろうなーとスルーしていた物だが、 ドキュメント(info)を読んでみると思った以上によさげだと言うことが分かった。 Mac 使ってる人にわかりやすくいうなら Emacs 用の homebrew という感じ。 なかでも 6.3 Distributed Setup で紹介さ
毎回ググるのでメモ。 OSX は USBのドングルとかBluetoothホストコントローラとかをつけたときの挙動を、ファームウェアの NVRAM ってところに bluetoothHostControllerSwitchBehavior というキーで値を設定してあげることによって以下の3種類のうちから決めることができる。 never: 外付けのホストコントローラにスイッチせず、つねにビルドインコントローラを使うalways: ビルドインコントローラからdetachして外付けのホストコントローラにスイッチするdefault: 外付けホストコントローラがApple以外のときはビルドインからdetachして外付けデバイスを使う デフォルトはもちろん default。 で、 BT4LE に対応したドングルを持っていれば、BT4積んでない昔の MacBook なんかでも CoreBluetooth つ
Any::Moose は Moose と Mouse のラッパーで、バックエンドがどちらになるかは use Any::Moose した時点で Moose or Mouse がロードされているかによって変わる。 どこかで use Moose していたら use Any::Moose は use Moose としてうごくし、 そうじゃない場合は use Mouse としてうごく。 これはなんのためにあるかというと、MouseとMooseの両方のモジュールを混ぜて使うと壊れるからなんだけど、 そもそも混ぜて使って問題になるのは Mouse のクラスを Moose で extends したりとか、そういう Moose 周りの機能を相互に使おうとした場合だけであって、混ぜて使っていてもそれぞれのクラスを普通に使い合う分にはなんの問題もない。 また、昔はruntimeの速度にそこまで性能差はなかったと
最近 Test::RedisServer とかもろもろつくっててばれてるかもしれませんが、だいぶ Redis 期にありまして、最近の趣味は?っていう問いにはだいたいRedisのソースを読むことですってなくらいなのですが、 memcached とかシンプルな KVS と比べるとだいぶ機能が豊富なので使い方を迷ったりとかそういう事例もあり、周りにもう少し使える人を増やさなければ僕の書いたコードが属人化しててつらい感じになるなーっていうわけで、 布教活動をおこなっておりまして、その一環として ISUCON2 に参加してきましたのでその報告です。 livedoor Techブログ : #isucon2 リアルタイムフォトレポート 更新終了 前回の優勝チームに混ぜてもらった感じでだいぶついてる感じもしますが、見事連覇を果たせ、懇親会でも redis redis と連呼してきたのでだいぶ興味持った方も
iPhone Developer Program の申請が全然通らないので、勝手アプリの作成環境を整えてみた。 Cydia でおなじみの saurik 氏がクロスコンパイル環境の作り方を以下のページに書いてくれていて、基本これに従えばOK。 Upgrading the iPhone Toolchain - Jay Freeman (saurik) すごいなー。saurik++ 簡単に環境作れるようにスクリプトにまとめた。ヘッダのコピーのとことかちょっと追加してある。 http://gist.github.com/15487 簡単に説明。 iPhone のファームウェアのファイルを、ごにょごにょ(ググればすぐわかる)して展開して ~/tmp/iphone/iPhone2.1 にコピー。 iPhone SDKをダウンロードしてきて展開して MacOSX10.5.pkg と iPhoneSDKH
僕のトークでなんか気になった人がいるとのことなので僕の使っているスクリプトを置いておきますね。 #!/usr/bin/env perl use strict; use warnings; use utf8; use Cocoa::BatteryInfo; use Cocoa::EventLoop; use Cocoa::Growl ':all'; growl_register( app => 'Battery Notifier', notifications => ['NotifyLastOneMinite', 'NotifyTimeRemaining'], ); Cocoa::BatteryInfo::time_remaining_handler { my $sec = Cocoa::BatteryInfo->time_remaining_estimate; return unless
今回は前夜祭でも話すことになって、始めて前夜祭からの参加になったけど、なかなかおもしろかった。 トークは二つってのはかなり久しぶりだけど、どちらも20分だし、YAPC向けになにか特別ネタを用意したというわけではなく、普段やってることや考えていることを話しただけでだいぶがんばってない感じのトークです UV - libuv binding for Perl Perlハッカーは息をするようにCPANモジュールを書く というようなトークたちです。 今回は基本的にホールで電源ある席を陣取り、コード書きつつトークを見る、というスタイルで参加。 Padre の話は聞けなかったんだけど、Adam Kennedy さんはなんというか堂々としていて自信に満ちていてかっこよかった。あう言う大人になりたい。 Cocoa ネイティブ対応はなんか気が向いたら見てみようかなーって言う感じ。 Ingy はなんかすごいおじ
本日二回ほどバッテリー切れで黒い画面をみて、「システムのバッテリー残量警告でるのはやすぎなんだよなーもっとぎりぎりの残量通知が欲しいよなー」、とか思いつつバッテリー周りのAPIドキュメントを眺めていたら気がついたらCPANモジュールができていた…。 Cocoa::BatteryInfo - Getting battery informations on your Mac - metacpan.org 単純なバッテリー情報の取得の他にも、 Cocoa::EventLoop との合わせ技で OS からのバッテリー関連通知を受け取るという機能もあるので残量監視スクリプトなど作るのに最適です。 というとネタモジュールな感じだけど、ノートブックのインターナルバッテリー以外にも OS X Server に接続している UPS の情報などもとれたりしますのでわりとそっち系では実用モジュールなのではないか
JSON-Types-0.01 - variable type utility for JSON encoding - metacpan.org Perl から JSON 吐くときに、ここは絶対数値で(文字列で)だしたい、みたいなときに use JSON; print encode_json({ number => $num + 0, string => $str . '', bool => $bool ? \1 : \0, }); みたいにすることがあるかもしれませんが、これってやっぱりハックなので可読性悪いしわかりにくいってことで、 use JSON; use JSON::Types; print encode_json({ number => number $num, string => string $str, bool => bool $bool, }); みたいな感じで、まぁ内
Travis は Github 連携の CI サービスで、結構前に Perl にも対応しているので最近更新したレポジトリには基本的に .travis.yml を置いて便利に使わせていただいていたのですが、 いままで使っていた設定だとtravis上でうまくテストが通らなくなってしまった。 今まで使っていた方法は、まず gfx 考案の Makefile.PL をベースに Makefile.PL をこんなかんじで書く: use strict; use warnings; BEGIN { my @devmods = qw( Module::Install::AuthorTests Module::Install::ReadmeFromPod Module::Install::Repository ); my @not_available; eval qq{use inc::Module::Inst
tl;dr - 通常のHookではなくPubSubHubbubのほうのHookを使えばGithubのすべてのイベントをひとつのWebHookで受け取ることができる。 Github の WebHook ではレポジトリの更新しか受け取れず、issue とかも受け取れたら便利なのになーと思いつつ API ドキュメントを見てみると Hook を API から登録したりすることができるようになっていた。 だがこれは所詮は Web から登録できる Hook をいじるもので、このリストにあるものしか登録できない。 また、それぞれの Hook について登録できるイベントはリストで定義されている物に制限されているようで、たとえば WebHook だと push イベントしか設定することはできないみたい。(API 経由でも設定できなかった) 一方、それとは別に用意されている PubSubHubbub の Ho
最近 Redis ずいてるわけですが、redis-server は $ redis-server /path/to/redis.conf or $ cat redis.conf | redis-server - みたいな形式でしか起動できず、これをがんばって exec してテスト用とかに使うコードを3回くらい書いたところで面倒になってモジュール化しました。 Daisuke Murase / Test-RedisServer - search.cpan.org 基本的に Test::mysqld のパクりなのでサクッとかけました。kazuho++
linux のコマンドラインから、wi-fi の情報をつかって位置情報を得る - tokuhirom's blog. を見て、面白そうだと思ったのでそのMac版。MacでコマンドラインからWiFiスポットをスキャンするのは、 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s でいけます。ってことで、 use strict; use warnings; use utf8; use 5.012; use JSON; use LWP::UserAgent; my @addresses = do { my @lines = split /\n/, qx{/System/Library/PrivateFrameworks/Apple80211.framework/Version
Sub::Rate - Rate based sub dispatcher generator - metacpan.org 確率に応じて処理を振り分けたいというような要件をカジュアルにクリアできる感じになっております。 たとえばいわゆるガチャ的なものを考えたときに、 my $rate = Sub::Rate->new( max_rate => 100 ); $rate->add( 0.1, sub { say 'Super rare' }); # 0.1 % $rate->add( 3, sub { say 'Rare' }); # 3 % $rate->add( default => sub { 'Normal' }); # 残り my $func = $rate->generate; みたいな感じで関数を生成できて、この生成した $func は呼ぶと確率に応じて登録された関数を呼び出
今頃なにを言っているのかという感じだが、Basic認証ごしにGyazoクローンに画像アップロードしたいという要求があったので、ちょろっと書いてみた。 https://github.com/typester/Gyazo-Mac Downloads からバイナリも落とせるようにしておいた。 初回起動、もしくはOption押しながらの起動で設定画面が出るので、適当に情報を入力して閉じたら、あとは普通のGyazoクライアントと同じように使える。 誰かいかしたアイコンつくってください。
AnyEvent を利用する際に注意する必要があることに、コールバック中で発生した例外の処理方法がバックエンドに任されている(=例外処理の方法がバックエンドによってちがう)、というのが挙げられる。 Impl::Perl では例外は単純に rethrow されるため、プログラム中で例外が発生したり die したりすると普通にプロセスは終了する。 しかし、Impl::EV の場合、デフォルトでは例外はキャッチされ標準エラーに出力されるものの、そのまま処理は続行されてしまう。 以下のような1秒タイマーをまわしてタイマーが発火したらアプリを終了する、というようなコードがあったとき、 use strict; use warnings; use AnyEvent; my $cv = AnyEvent->condvar; my $t; $t = AnyEvent->timer( after => 1,
Xcode4.2くらい(?) からデフォルトになった clang だとビルドがこけるので、 $ perl Makefile.PL CC=gcc などとして gcc でビルドするようにすれば普通に入ります。
flymakeで読んでいるシンタックスチェックコマンドが無限ループに陥って困り、@fujiwaraに相談したところ。daemontoolsについてくるsoftlimitコマンドでタイムアウトするようにするといいと教えてもらった fujiwara++ $ softlimit -t 1 perl -e 'while(1){}' zsh: cpu limit exceeded softlimit -t 1 perl -e 'while(1){}' 便利ですね。とりあえずperlのflymake設定を (defun flymake-perl-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name tem
なぜ CoffeeScript がダメか - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech 僕の考えでは JavaScript ネイティブでない(けれど非同期プログラミングやネットワークの知識はある)人が、Node.js を使ってネットワークアプリケーションを書くという用途では結構使えると思う。 デバッグしづらいという点も Node と組み合わせる前提で考えれば coffee コマンドで直接実行すればいい話である。 また僕自身も小さなネットワークアプリケーションは最近は CoffeeScript で書いてて、fujiwara 氏などにメンテしてもらっているけれど、やはり彼も僕と同じようなスキル(JavaScriptネイティブでない)だから、そういう人が見て大体なんとなく理解できるものになってると感じる。 これがもし、AnyEvent で書いたコードだったらそ
デフォルトだと動かないのでなんか変なラッパーを挟むのがスタンダードな方法みたいですが、たまにしか使わないのにそんな無駄なことしたくないと、 # tmux if [[ "$TMUX" != "" ]] then alias pbcopy="ssh 127.0.0.1 pbcopy" alias pbpaste="ssh 127.0.0.1 pbpaste" fi としてしのいでいる。僕の使用頻度だとこれで十分ぽい。
irssi 環境を prgmr.com からさくら VPS に移行したついでに irssi のプラグインを見直していて、そのときに nicklist.pl というのをいれたわけですが、これがなかなか hackish な実装になっており(笑)、named pipe なファイルつくってそれを cat しておくと irssi がそこに nicklist を書き込むというような感じになってて、基本的に GNU screen などの縦分割と一緒に使うように設計されている。 で、僕はリモートサーバー上の GNU screen 上で irssi を動かしているので、それをつかうために縦分割をためしてみたわけですが、window 分割したときにでる caption を GNU screen では消すことができず、ローカルで使っている screen の hardstatus の上に、リモート screen
Emacs界の松岡修造ことtomoyaさんが素敵なEmacs本を書かれたので紹介。 Emacs実践入門 ~思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus) Emacsとはなにか? から始まり、インストール、基本的な使い方、カスタマイズ方法といったことが体系的にまとめられたとても良い本。 すでにEmacsユーザーの方は一通り読むことで自分の中で足りない知識を補完することができるし、体系的にまとめられたものを読むことでEmacs脳がかなり整理されるのでぜひ一読することをおすすめする。 そしてEmacsユーザーではないけれど興味があるという人にこそ、この本を薦めたい。そういう人に対してこの本は最適な入門書になっていると思う。 一通り読み終わったあとは自分のマイEmacsを育てる土台ができていることでしょう。 Emacsデビューはこの本で!
libuv 専用スレッドと通常の Objective-C スレッドとのやりとりの仕方、ついでに書いておく。 tl;dr - libuv スレッドから Objective-C スレッドに対して何か送るときは Objective-C の作法がそのまま使える。逆は uv_async を使う libuv スレッドから Objective-C スレッド これは Objective-C の世界の作法がそのまま使える。 iOS4+ と OSX 10.6+ であれば GCD で、 dispatch_async(dispatch_get_main_queue(), ^{ // ここはメインスレッド }); のようなのを書くだけでメインスレッドの動作を定義できるから、そこでメソッド呼ぶなり Notification を発行するなりすれば良いので楽ちん。 それ以下の環境だったら performSelector:
iOS や Mac アプリで HTTP 以外のネットワーク機能をつけたいといった場合に、libuv や libev を組み込んで使うというのを割とよくする。方法としては以下のような感じでその機能用のスレッドをつくる: -(void)run { NSThread* thread = [[NSThread alloc] initWithTarget:self selector:@selector(loop) object:nil]; self.thread = thread; [thread release]; [thread start]; } スレッドの中身は大体こんな感じ: -(void)loop { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; uv_loop_t* loop = uv_loop_new(); /
Cocoa:: なんちゃらでほしいものを聞いていたときにも挙がっていた Cocoa::Skype だけど、その昔Skype4COMを使った記憶があって、SkypeAPI のバインディング書くのはめんどそうな印象だったのだが、 今日 Skype.framework のヘッダファイルみたら、 #import <Cocoa/Cocoa.h> @protocol SkypeAPIDelegate; @interface SkypeAPI : NSObject { } + (BOOL)isSkypeRunning; + (BOOL)isSkypeAvailable; // You can only connect and send commands when this method returns YES. // For example, when Skype is running, but use
forwardInvocation とかを使えば出来るみたい。 #import <Foundation/Foundation.h> @interface Foo : NSObject; -(void)call:(NSString*)sel; @end @implementation Foo -(void)call:(NSString*)sel { NSLog(@"call: %@", sel); } -(void)forwardInvocation:(NSInvocation *)invocation { [self call:NSStringFromSelector([invocation selector])]; } -(NSMethodSignature*)methodSignatureForSelector:(SEL)sel { NSMethodSignature* sig = [
次のページ
このページを最初にブックマークしてみませんか?
『unknownplace.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く