Search Result: とき

Google Doodleのルービックキューブを解くChrome拡張を作った

…using a Content script - Stack Overflow これを使ってcubeの状態が変更されるごとにそれを適当なDOM要素に埋め込み、解を計算する処理を行いたいときにはそのDOM要素から値を読み込む、という方法でデータを受け渡しするようにしてみた。その他のイベント処理なんかはwindow.postMessageとか使って適当にやりとりしつつ。 いやーしかしこんなの考えたエルノー・ルービック先生すごいし 様々な解法やアルゴリズム考え出したヒトたちすごい。

tmux上のweechatのhotlist情報を通知する

…る程度発言が溜まったときにチェックするようにしたい。 tmux上の画面の表示内容は外部から取得できる、ということでweechatのstatus lineからhotlist(未読メッセージのあるchannel情報などが表示される領域)を抜き出して通知する、というのをやってみた。まずはこんな簡単なスクリプトを用意。 #!/bin/sh weechat_window=$(tmux list-windows | grep weechat | perl -ne 'print+(spli…

helm-perldocを使ってインストール済みモジュールのドキュメントを参照する(carton対応も)

…い。そこで、そういうときのためにhelm-perldoc:perl5libという変数が用意されていて、これを指定してからhelm-perldoc:setupを呼ぶことで そのpath以下のモジュールたちも取得し、ドキュメントを引けるようになる。 helm-perldoc:modulesをnilにするかprefix-argを指定してやればhelm-perldoc:setupは再びモジュール一覧を取得しなおしてくれる。 (setq helm-perldoc:perl5lib "~…

diff-highlightでマルチバイト文字の差分が化けてしまう

Git

…分がハイライトされるときに化けてしまって困っています。 どうすればいいんだろう…。 追記 とりあえず手元では diff --git a/diff-highlight b/diff-highlight index c4404d4..e959903 100755 --- a/diff-highlight +++ b/diff-highlight @@ -2,6 +2,7 @@ use warnings FATAL => 'all'; use strict; +use Encode…

Time::Pieceでadd_monthsするときは月末の扱いに気をつける

…々の日付が月末だったときに加減算後にも合わせて月末にするか否か、の挙動らしい。例えば翌月の方が長い場合。 $ perl -MDateTime -E 'say DateTime->new(year => 2014, month => 2, day => 28)->add(months => 1, end_of_month => "limit")->ymd' 2014-03-28 $ perl -MDateTime -E 'say DateTime->new(year => 20…

#isucon 2013で優勝しました

…2回目だ。→第1回のとき タイムライン 予選のとき同様に、自分の手元にある記録と記憶を辿ってどんな雰囲気だったか書き残してみます。間違っていたらゴメンナサイ。 使用言語はPerlです。 〜10:00 出社…じゃなくて会場入り。ちゃんと前日に早寝したので寝坊せずに済みました。 〜11:00 開会待ち。早くきすぎた、でも他の参加者さんたちも早くからしっかり集まってる。 ルール説明。ストーリー仕立てで緊張感が走る。画像系サービスか〜。 11:00〜 開始。用意されたのは5台、初期実…

アメブロ「いいね!」機能を使うためのChrome拡張を作ってみた

…"ドメイン)を開いたときに記事タイトルとなる要素を見つけ、対応する「いいね!」ボタンページのiframeを差し込むようにする。 $('h3.title a, a.skinArticleTitle').each(function (i, a) { var url = $(a).attr('href'); var m = url.match('/([^/]+?)/entry-([0-9]+)\.html'); if (m) { $(a).after( $('<iframe>').…

Carton環境でのflymakeとperl-completion

…ールを検索したりするときにPATHが通らなくて見つからない。 plcmp-cmd-set-additional-lib-directoryコマンドを呼んで一度PERL5LIBに追加してしまえば届くようになるけど、これはplcmp--PERL5LIB-directories(perl-completionの中でPERL5LIBに設定して使うもの)がどんどん追加されていってしまうので何だか気持ち悪い。 Flymake時にPERL5LIBを通すシンプルな方法 - すぎゃーんメモ p…

Slateを入れてみた

…たくさん起動しているときに選択するために連打するのが面倒だし頻繁に使うものは一発で切り替わるようにしたい、というのがあって、 今までずっとそれをQuicksilverのHotKey機能を利用して ⌘+Ctrl+Q でiTerm2 ⌘+Ctrl+W でEmacs ⌘+Ctrl+E でChrome みたいに左手の操作だけで切り替えられるようにしていた。ところで最近「Slateというのが面白い」という話を某所で聞いたので試しに入れてみた。 GitHub - jigish/slate…

アイドル現場情報をGoogleカレンダーから集約するWebアプリを作った

…張や旅行などで訪れたときにだけチェックできればいいのに、わざわざ登録するのもアレだったり。 で、作った http://idol-calendar.herokuapp.com/ 上記記事にまとめられている各カレンダーから直近のイベントを拾い集めて、時系列に表示する。地域ごとに関連していそうなものだけに絞ったり、検索ワードや情報源を指定して絞り込んだり。これを見れば、ビックリするくらいたくさんのライブやイベントが各所で行われているのが分かると思う。 中身 GoogleのAPIから…

SQL::Translator::DiffでDBスキーマに追従させる方法

…けど、より細かいところまで差分だしたり、MySQL以外のDBで同じようにやりたいときはSQL::Translator::Diffが使えそうな気がする。 注意 この方法はSQL::Translatorのparserやproducerがどの程度使用しているDB(MySQLならMySQL)の文法をサポートしているか、どの程度信用するか、になるので 頼りきっていると罠にハマる可能性もある。 正しくSQLが生成されているか、正しい差分抽出ができているか、は常に気をつけて使う必要はある。

perlbrewを利用したプロジェクトごとのPerl環境管理

…サーバにデプロイするときも1箇所で環境作ってディレクトリ丸ごとrsyncで済むし というわけでプロジェクト専用のPerlをperlbrewでインストールして使おう ビルドに時間かかったりもするけどまぁ最初の一回だけだし我慢 手順 既にperlbrew自体は標準の方法でインストールしておいていて使えてる、という前提で $ cd <PROJECT_ROOT> $ export PERLBREW_ROOT=${PWD}/perl5 $ perlbrew init $ source …

#isucon2 のお手伝いをしました

…2012 にて飲んだときにtagomorisさんに「入社したら次のISUCON手伝いますんで」なんて酔っ払いながら言っていたような気がするけど、おかげで準備スタートのときに声をかけていただいて、微力ながら手伝わせていただくことができました。 初期アプリ まずは何となくの「チケット販売サイト」というお題の方針が決まり、昨年のお題 を参考に叩き台アプリを作らせていただきました。 このへんのネーミングは自分ですね。DISられなくて良かったです。 https://github.com…

以前作ったSinatraアプリをPadrinoで書き直した

…ントローラを追加するときは $ padrino gen model fuga $ padrino gen controller piyoとかで作ると自動でテストやヘルパーやmigration用スクリプトなども追加してくれるっぽい。便利。 Padrino app on Heroku Herokuで動かすために諸々設定。 Procfileには web: bundle exec padrino start -a thin -p $PORTとか記述しておく(Gemfileにthin追…

数十行の簡単なスクリプトでWebコンテンツの更新を検知し通知する

…、「前回チェックしたときと比較して差異があるか否か」を調べる必要がある。 「一定間隔で内容をチェック」すること自体は、cronなどを使えば簡単にできる(ここではWWW::Mechanizeでログイン、Web::ScraperでコンテンツHTMLの解析を行う)。 けど、「前回チェックしたときと比較して差異があるか否か」を調べるためには、前回チェックしたときの結果を何らかの形で残しておく必要がある。ファイルに書き出すだとか、DBに保存するだとかの形で。 そうするのは面倒なので、そ…

Test::Flattenでsubtestの初っ端で死ぬときのエラーが出力されない (追記あり)

@xaicronさんのTest::Flattenを使ってみている。 use Test::More; use Test::Flatten; subtest 'hoge' => sub { ok 1, 'fuga'; piyo(); }; done_testing; という、subtest内で死んでしまうようなテストの場合、proveを実行すると $ prove -v t/01_hoge.t .. # ---------------------------------------…

face.comのdetect APIを使ったら目からビームが捗った話

…き、逆にそれが大きいとき、すなわち上下向きや左右向きに偏っている場合は開きを少なく。現状での描画部分のコードは以下のようなかんじ。 def draw_beam (img, tags) tags.reverse.each do |tag| return unless tag['eye_left'] && tag['eye_right'] logger.info tag d = Magick::Draw.new reye = [tag['eye_right']['x'] * im…

ももクロのメンバーブログが更新される曜日/時間帯を可視化してみた

…濃く変えていくだけ。せっかくTwitter Bootstrapを使っているのでPopoverは付けてみた。数値のところにマウスを持っていくと該当時間帯に更新された日付とタイトルを表示する。 実際には最終的に更新処理を行うのは彼女たちのマネージャーであり、よく寝過ごして本来更新すべき日時よりはるかに遅れて更新されたり ひどいときには別のメンバーのブログに投稿されるなどお茶目な事件が起きたりもするので、この可視化されたデータから何か有意な情報を得られるかというと、多分なにも無い。

JavaScriptで、もう連想配列の最後のカンマに悩んでないので

…通にやります。そんなときに"dummy"なんてキーが入ってたら邪魔でしょうがないです。 メモリ領域の無駄、はたいして気にならないでしょうけど、とにかくこんなのが入っていると邪魔になります。 書く側の都合でロジックを汚すのは問題外 プログラム書く側はこの方法を死守することで余計なバグを産まずに済むかもしれませんが、予備知識なくそれを引き継いだり読んで勉強しようとしているヒトがそのソースコードを読んでどう思うでしょうか。 「ん…? dummy? 何だろうコレ。どこかで特殊な使い方…

Template Toolkitでwantarrayなものを使おうとしてハマった件

…り要素数が1つだけのときのwantarrayに対する挙動で問題があったらしい。 http://mail.template-toolkit.org/pipermail/templates/2008-June/010233.html wantarrayは避けて常にリファレンスを受け取るようにしましょう、というような。 コード側を変えられない場合、Template-Toolkit 2.20以降であればScalar Pluginがあるのでそれを使うことで明示的にscalar cont…

自分のホームディレクトリ下の構成

…たり動かしたりしたいときはここ以下にcloneしてもってくる。その下でさらに言語別に分けたり作った人で分けたり。"svn"とか他のscmのものも必要に応じて作るけど最近はあんまり需要ない /home/*/dev/temp/ いつ消えても良いようなどうでも良い一時的なプロジェクトやスクリプト置き場。気が向いたときに適当に消す。 /home/*/service/ daemontoolsに登録するサービスは一度ここに作って/serviceからsymbolic linkを貼るようにし…

WebService::Simple::Parser::JSONがUTF-8エンコードされたJSONで文字化けてハマった

…値を表示しようとしたとき。 #!/usr/bin/env perl use strict; use warnings; use Amon2::Lite; use WebService::Simple; get '/' => sub { my ($c) = @_; my $ws = WebService::Simple->new( base_url => 'http://****.****/****.json', response_parser => 'JSON', ); my…

DayOne.appを使いこなすために作ったもの、やっていること

…ウが現れるので、そのときに「今何してる」「どんなこと考えてる」などを書く。 特に書くことがなければ無視しても構わない。30分毎でも出てくるたびにとりあえず今やっていることを書いていくと「何かやってる感」は出てくる。 Linuxのサーバと同期する DayOne.appはMac用アプリだけど、文書は分かりやすい形でファイル保存されているので、Dropboxで同期させておけばLinux環境からも扱える。 Install Dropbox on your Linux box さくらVP…

カレントディレクトリがGitリポジトリ下か否か判定する

Git

…y()関数が呼ばれたときに内部でこの判定を行い、正しい.gitディレクトリが見つからなかったときにエラーを吐いて死ぬようになっているようだ。builtin command群ではRUN_SETUPフラグがオプションに定義されているとコマンド本体に処理が渡る前にそれが呼ばれる。 git/git.c at v1.7.9.4 · gitster/git · GitHub ので、commandsで定義されているbuiltin commandたちのうちRUN_SETUPが含まれているもの…

Crypt::SSLeayがLANGの関係でインストールできないとき

…->newが失敗したときのエラーメッセージが日本語で出てきてしまっているかららしい。テスト内部では英語のエラーメッセージが期待されているためコケてしまうようだ。 http://smokycat.info/perl/240 Hinemos 研究日記 » Blog Archive » 【Perl】Crypt::SSLeayをインストールする際に気を付けること ということで $ LANG=C cpanm -v Crypt::SSLeayとすればインストールできるようになるらしい。 …

特定のキーワードをim.kayac.comに通知するZNCモジュール書いた

…自分の名前が呼ばれたときとかにiPhoneに通知してくれるようなやつ、いわゆるhilight2im的なもの。を、ZNCのモジュールとして作った。IRC Bouncer上で動かしておけば、weechatなどのクライアントからの接続が無い状態でも通知してくれるので便利。 リポジトリ https://github.com/sugyan/ZNC-NotifyImkayac 使い方 NotifyImkayac.pmを~/.znc/modules/以下に配置。clientからzncにコマ…

tiarra+stoneを卒業してZNCを使い始めた

IRC

…も繋ぎたい、みたいなとき。それぞれ別ユーザを作る必要がある。別名のユーザを作り、それぞれの接続先で別サーバを指定しておけば良い。IRCクライアント側で各ユーザとして接続する。 weechatの場合、同一host & 同一port でもserverをそれぞれ別名で登録しておくことで区別できるので、 /server add freenode 127.0.0.1/16667 -password=<username1>:<password1> /server add perl 127…

gitoliteでプライベートリポジトリ作成

Git

…を持ってないし何かのときのために設定しておくか、と思ってさくらVPSのサーバにgitoliteを入れてみた。 Hosting Git Repositories 以下、手順メモ。 gitoliteのインストール yumでサクっと。 sugyan@remote $ sudo yum install gitolite gitユーザを作成 専用ユーザを作ってそいつの$HOME以下でリポジトリ管理するようにした方がなにかとラクなので sugyan@remote $ sudo usera…

IRC Bouncers(IRC Proxy)あれこれ

IRC

…ただインストールしたときに/etc/bip.confを参考にすることでそれなりに設定を記述することが出来そうだった。複数ネットワークに接続しようとすると別ユーザとして分けてログインする必要がある。SSLでの接続に対応しているようだったけど自分で試してみた限りでは上手くいかなかった… psyBNC これも相当古いものなのかな…?とてもシンプルなかんじで、make menuconfigコマンドからシンプルな設定GUIツールで設定ができる。でもあまり複雑な設定はできなそう…正直あま…

tmuxを使い始めてみた

…定を変えたい、というときに設定を条件分岐させて…というのが出来ると良いな、と思って調べてみたところif-shellというのが使えるらしい。 if-shell shell-command command [command] (alias: if) Execute the first command if shell-command returns success or the second command otherwise.ただコレは内部で別プロセスでシェル実行して行うからな…