タグ

ブックマーク / unknownplace.org (25)

  • GitHubのレポジトリURLを開くgh-openコマンド - unknownplace.org

    進行中のGitHubプロジェクトが増えてくると、そのプロジェクトページをブラウザ上で即座に開くことができず、手間取ることが増えてきた。 hub とか、 gh というようなコマンドラインツールを使うと、手元のチェックアウトしたパスで、 $ gh browse とかすれば対応するGitHubのページを開くことができる。 最初はこれを使ってがんばろうと思ったのだけど、やっぱりカレントディレクトリの情報をベースに開くものだから、他の場所にいるといちいちcdしないといけないのが面倒。 また、シェル履歴との相性も悪い。 $ gh-open ~/path/to/repo みたいにしてcloneしたディレクトリを指定してあげるだけで動くものがあれば、どこにいても動くし、履歴も上手に使える。 というわけで作った: typester/gh-open ちょろっと作ったものだけど、やはりこちらのほうが使いやすい。

  • GoでCocoa APIを使う、もしくは他のイベントループをGoに混ぜる方法 - unknownplace.org

    Gocgo という機能を使うと、GoからCの世界のコードを呼んだり、呼ばれたりすることができる。 Perlで言うところのXSというやつだ。 このcgoを使ったGoプログラムは、昔はMakefileを利用してビルドしていたそうだが、 1.0からは go get や go build と言った、go toolがcgoに対応したのでそういうことも必要なくなっている。 cgoの基的な使い方 まずは import "C" として、Cという疑似パッケージをimportする。 このパッケージを使うと、 C.fprintf(...) というような感じでCの世界にアクセスできるようになる。 また、このimport文の直前のコメントはCのコードとして解釈される。 なので、 package main /* #include <stdio.h> void hello() { fprintf(stderr,

  • 独立しました - unknownplace.org

    2013年8月末で面白法人カヤックを退職し、新しく会社を設立しました。 カヤックには約9年間お世話になり、とても多くのことを学ばせてもらいました。 とくにクリエーターとしての自分の考え方は、ほぼカヤックで養われたと言っても過言ではないでしょう。 そういう意味でカヤックは僕の第二の親のような存在であり、鎌倉方面には足を向けて寝られません。 当にありがとうございました。 カヤックは面白法人とか名乗っていますが、実は非常にまじめな集団です。 たとえば、経営理念についても、とても真摯に向かいあっています。 経営理念とはただの飾りではなく、まさに会社の存在意義であり、社員全員がそれを意識して仕事をしなければ意味がない。 そんなことから半年に一度、全社員で経営理念について考えるための全員社長合宿、というものをやっていたりします。 そんな環境で、自分も個人としての理念を磨いてきました。 昔のカヤックス

  • OSX で tmpfs 的なことをする方法 - unknownplace.org

    MacBook Air 上で Test::mysqld なテストを走らせていると SSD の寿命縮めそうだなーとおもって tmpfs 的なものが OS X にもないものかと検索したら hdid(8) でできるとのこと。 man の一番下のほうに例が載っている。 $ hdid -nomount ram://128000 /dev/disk1 これでメモリから128000セクタ(1セクタ512バイトなので62.5MB)分とって仮想ディスクをつくり、 $ newfs_hfs /dev/disk1 Initialized /dev/rdisk1 as a 63 MB HFS Plus volume HFSで初期化して、あとは普通に $ mkdir /tmp/mnt $ mount -t hfs /dev/disk1 /tmp/mnt でマウントすればOK。 作ったディスクの破棄には $ hdidu

  • TwilioのRedisによる決済サービスの障害、2つの原因 - unknownplace.org

    Twilio というサービスで決済サービスの障害があったらしいが、恐しいことにこのサービス、 決済情報をRedisで管理していたらしい、というのをRedis作者、antirez氏のblogで知った。 Twilio incident and Redis - Antirez weblog この件に関しては、Twilio自体も 調査報告 を出している。簡単にまとめるとこういう感じだ: TwilioではRedisを single-master, multi-slave なレプリケーション環境で使用している ネットワーク障害で一時的に master-slave 間の接続が切れたことにより、master-slave間のデータの再同期が発生 この再同期がすべてのslaveに対して同時に発生したため、masterの負荷が高くなり、結果決済サービスの障害が発生 この負荷を解決するためmasterを再起動する

  • データベースエンジニア養成読本に寄稿 - unknownplace.org

    技術評論社さんの 「データベースエンジニア養成読」 に、Redisの紹介記事を書かせていただいた。 データベースエンジニア養成読 [DBを自由自在に活用するための知識とノウハウ満載!] (Software Design plus)posted with amazlet at 13.06.24 技術評論社 売り上げランキング: 857 Amazon.co.jpで詳細を見る 最近、僕自身があまり「Redis Redis」言わなくなったせいか、周りからよく「Redisもう飽きたんですか?」とか言われることが多いのだけど、 全然そんなことはなくて、むしろあって当たり前の、空気のような存在になっているから特に話題にしなくなったんだと思う。 Redisを使う前と後では明らかにアプリケーションの作り方が変わったので、 2012年マイイノベーション として紹介したくらいだ。 あとはもはや僕自身が騒がず

  • Goはクロスコンパイルが簡単 - unknownplace.org

    homebrew の Go用のレシピ を見た人は、その中にこんなオプションが定義されているのに気がついたかもしれない: option 'cross-compile-all', "Build the cross-compilers and runtime support for all supported platforms" option 'cross-compile-common', "Build the cross-compilers and runtime support for darwin, linux and windows" Goはクロスコンパイルが可能なようにビルドしておけば、簡単に他の環境で動くバイナリを作ることができるようになっているらしい。 Goがダイナミックライブラリに依存しない実行バイナリを作るという特徴と併せて考えると非常におもしろい(そして、使える)機能だと思

  • EmacsでのGo言語編集環境 - unknownplace.org

    最近Go言語を始めた。MacGoの実行環境を入れ、Emacsで編集するところまで、一通りまとめておく。 Goの導入 (for OS X) いろいろ方法があるようだけど、僕はカジュアルに brew install go で済ませた。 GOPATH 環境変数は最初プロジェクト毎に設定して使おうかと思っていたんだけど、 後述するgocodeやgo-flymakeといったツールを使う場合、手元のGOPATHは1つにしてしまったほうが便利なので、 export GOPATH=$HOME/dev/go-workspace というのをshellの設定に定義して、手元ではこの共通のPATHを使うようにした。 これは問題がでたらまた考える。 PATHを通す homebrewで入れたツールをEmacsから使うためには、 homebrewのbinディレクトリを exec-path に追加する必要がある。 (a

  • VLC 2.0.5 で YouTube Playlist 再生 - unknownplace.org

    VLCってたしかYouTube動画の再生に対応してたよなーと思いだして試してみたけど、 現在の最新バージョンの2.0.5でも今のYouTubeの仕様に対応できてないのか、YouTube動画の URL を開こうとしてもエラーになってしまう。 ためしにナイトリービルドでためしてみたらOKだった。 けど、ナイトリービルドを常用するのも嫌だ。しかし、このYouTubeのハンドリングはどうもluaの拡張でやっているだけみたいなので、 その拡張ファイルだけバックポートするだけでいけそうだということで、やってみたらちゃんと動いた。 具体的には、 VLC.app/Contents/MacOS/share/lua/playlist/youtube.luacVLC.app/Contents/MacOS/share/lua/playlist/youtube_homepage.luac の2ファイルを上書きしてあ

  • irssiで良い感じにlingrができる irssi-lingr - unknownplace.org

    最近、 Perlの話題を日語で – Lingr お気軽なかんじで、Perl に関する話題をしましょう。 初心者のかたでも御気軽にPerl の質問など、もりもりしてください♪ というLingrの部屋が盛りあがってる。 最初はブラウザで見ていたんだけど、だんだんつらくなってきたので、APIを使ってirssiでLingrチャットができるのを作りました。 https://github.com/typester/irssi-lingr ~/.irssi/scripts に置いて、 irssi内から、 /run lingr /set lingr_user your_lingr_username /set lingr_password your_lingr_password /set lingr_api_key your_api_key # オプション /lingr start で lingr/* と

  • Any::Moose とか幻想やったんや - unknownplace.org

    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の速度にそこまで性能差はなかったと

  • Redis布教活動報告 ISUCON 編 - unknownplace.org

    最近 Test::RedisServer とかもろもろつくっててばれてるかもしれませんが、だいぶ Redis 期にありまして、最近の趣味は?っていう問いにはだいたいRedisのソースを読むことですってなくらいなのですが、 memcached とかシンプルな KVS と比べるとだいぶ機能が豊富なので使い方を迷ったりとかそういう事例もあり、周りにもう少し使える人を増やさなければ僕の書いたコードが属人化しててつらい感じになるなーっていうわけで、 布教活動をおこなっておりまして、その一環として ISUCON2 に参加してきましたのでその報告です。 livedoor Techブログ : #isucon2 リアルタイムフォトレポート 更新終了 前回の優勝チームに混ぜてもらった感じでだいぶついてる感じもしますが、見事連覇を果たせ、懇親会でも redis redis と連呼してきたのでだいぶ興味持った方も

  • Githubの各種イベント通知をPubSubHubbubで受け取るの巻 - unknownplace.org

    tl;dr - 通常のHookではなくPubSubHubbubのほうのHookを使えばGithubのすべてのイベントをひとつのWebHookで受け取ることができる。 Github の WebHook ではレポジトリの更新しか受け取れず、issue とかも受け取れたら便利なのになーと思いつつ API ドキュメントを見てみると Hook を API から登録したりすることができるようになっていた。 だがこれは所詮は Web から登録できる Hook をいじるもので、このリストにあるものしか登録できない。 また、それぞれの Hook について登録できるイベントはリストで定義されている物に制限されているようで、たとえば WebHook だと push イベントしか設定することはできないみたい。(API 経由でも設定できなかった) 一方、それとは別に用意されている PubSubHubbub の Ho

  • Sub::Rateと言うのを書いた - unknownplace.org

    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 は呼ぶと確率に応じて登録された関数を呼び出

  • tmux + irssi + canything で Anything 風チャンネル切り替えする - unknownplace.org

    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

  • AnyEvent でバックエンドに EV を使う時の注意 - unknownplace.org

    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,

  • Cocoa::Skype とか - unknownplace.org

    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

  • Growl 1.3.1 と Skype - unknownplace.org

    ひさしぶりにMacを再起動したらSkypeがGrowlを認識しなくなった。 そういえばGrowlを1.3.1にしてから再起動していなかった。原因はそれだろうとSupport Forumをのぞいてみると同様の問題を持った人がいっぱいいて、そこに解決法も書かれていた。 Skypeに内蔵されてるGrowl.frameworkが古いからそれをアップデートしてやればOKということらしい。 フレームワークのアップデートは自分でファイルを置き換えても良いが、Growl公式サイトでそれ用のツール、Growl Version Detectiveが配布されているのでそれを使用すると良い。 Growl - Downloads アプリはこんな感じで、 Skypeを選択してUpdate FWを押すだけで入れ替わる。

  • node.js を iPhone アプリから動かす - unknownplace.org

    結論から言うと、 jailbreak してないと動きません。詳細はこの辺: Issue 1312 - v8 - It's time to get iOS supported! - V8 JavaScript Engine - Google Project Hosting というわけでターゲットがデベロッパー用に絞られてしまいますがやってみましょう! Node ダウンロード 今回はリリースされたばかりの 0.6.0 を使いました。 http://nodejs.org/#download からダウンロードして展開しましょう libuv にパッチを当てる libev はなにもしないでもそのまま iOS で動きますが、 libuv はそうではないようです。 $ cd deps/uv $ wget --no-check-certificate https://raw.github.com/gist/

  • node.js C/C++ addons 入門 - unknownplace.org

    node.js のドキュメントを見ていたら C/C++ で簡単に拡張が書けそうだったので試してみた。 addons - Node.js Manual & Documentation ドキュメントに載っている hello.cc をみてみると: #include <v8.h> using namespace v8; extern "C" void init (Handle<Object> target) { HandleScope scope; target->Set(String::New("hello"), String::New("world")); } この extern "C" void init (Handle<Object> target) というやつが、jsで require("hello") したときに呼ばれる感じらしい。この関数だけは必ず実装する必要がある。 この中の Ha