*iroi*

mechairoi の Blog

Wikipedia の作り方 / How to make Wikipedia

こんにちは。アプリケーションエンジニアの id:mechairoi です。 この記事は はてなエンジニアアドベントカレンダー2014 の10日目です。 昨日は id:hatz48 さんの Mackerel と fluentd でサービスの状態を可視化する - Hatena Developer Blog でした。 今日…

emacs から git-browse-remote で GitHub をいい感じにひらく

カーソル位置とかリージョンで選んだ範囲をブラウザで開けるやつです。 C-u つけると --rev になるのがおしゃれポイントです。 以上です。 参考 git-browse-remote 0.1.0 を公開しました & Vim からいい感じに GitHub を開く - 詩と創作・思索のひろば (Poet…

Scala use cases at Hatena という発表をしました。#ScalaMatsuri

はてなで最近作っているMackerelMackerel: A Revolutionary New Kind of Application Performance Management Calling for Beta Testers! Mackerel: A Revolutionary New Kind of Application Performance Managementの開発には Scala を使ってます。 発表で…

ghq get しつつ cd する

zsh

雑な zsh function. .zshrc に function gc () { cd $(ghq get $1 | tee -a /dev/stderr | tail -n 1 | awk '{ print $NF }') }

Slick の lifted embedding で FOR UPDATE する

mechairoi/slick-for-update-sample · GitHubSlcik の lifted embedding で 無理やり FOR UPDATE できようにするサンプルslick-for-update-sample/Driver.scala at master · mechairoi/slick-for-update-sample · GitHubみたいに PostgresDriver を継承した …

Docker を使って Haskell を Heroku の cedar stack 用にコンパイルする

Heroku で Haskell を動かす方法は http://daimatz.hateblo.jp/entry/2013/02/09/164531 のように buildpack を使うとデプロイ時に Heroku のホストでビルドできて便利です。しかしビルド時間が15分までで Yesod などを使っていると間に合わず、手元で Ubunt…

kyoto.js #5 で Emacs から WebSocket で Google Chrome を操作する拡張について発表しました。 #kyotojs

先日開催された Kyoto.js #5 で LT をしてきました. crxel Emacs から Google Chrome を操作する crxel というライブラリを作っているので発表しました. 今回の発表ではこのライブラリを使ったデモとして Emacs から Google Chrome のタブを Anything で切り…

Anychrome って Google Chrome 拡張を作っています

id:hitode909 さんに手伝ってもらいました。ありがとうございます。 概要 こちらをインストールすると追加されるかわいいトマトのアイコンを押すと、開いてるタブと履歴からインクリメンタルに選んでアクティブにしたり開いたりできます。 今はタブと履歴か…

gdbでEmacs Lisp のスタックトレースを表示する

Emacs"で"デバッグする方法はいっぱい出てくるのに、Emacs"を"デバッグする方法が http://www.emacswiki.org/emacs/DebugEmacs くらいしかみつけられないです...とりあえずgdb で elispのスタックトレースをみたいので GDBで実行中のスクリプト言語のスタッ…

emacs で git blame して summary も表示する (mo-git-blame.el)

みんな大好きな git blame をいい感じに表示します。author より summary の方が有益なのでそれも表示します。こんな感じになります。 以下導入方法 https://github.com/voins/mo-git-blame/blob/master/mo-git-blame.el から mo-git-blame.el をいれます M-…

gudでソースコードを表示してるwindowを常にセンタリング

カーソルがwindowの下の方にいってしまうと次の行が見にくくて辛いので perldb-ui.elでしか試してないです.

はてなに入社しました

Emacsの isearch の highlight を全ての windowで

Emacsのisearchによるハイライトは貧乏性なのかカレントバッファでしか行われない. それでは不便なので, 表示されてるバッファ全て(現在のframeの全てのwindow)でハイライトするいい加減なスクリプト.

Template-ToolkitのMACROとかBLOCKをctagsで

Exuberant ctagsで使えます. ~/.ctags にいい加減な正規表現を書く. なんかmacだと動かない? なんか他の環境では動かないらしい。 正規表現書き換えたら動いた。ctagsのバージョンとかは $ ctags --version Exuberant Ctags 5.8, Copyright (C) 1996-2009 D…

perlのflymakeの設定

buffer localにしたかったのでPERL5LIBにsetenvせず起動オプションで -Mlib glob. 常にgitを使うのでgitプロジェクトの一番上を起点にしている. ;; -- flymake (add-to-list 'flymake-allowed-file-name-masks '("\\.t$" flymake-perl-init)) ; pm, pl は設…

GTAGSのパスを指定したanything-gtagsのsourceを作る.

(バッファが属する)ProjectのTAGSと(global-modeに応じた)LibraryのTAGSとか同時に使いたいです.anything-gtags.el でプロジェクトのGTAGSは既に使えるので, GTAGSファイルのパスを指定できるsourceを作って, 複数のsourceを扱うのはanythingにおまかせする…

Test::Class でメソッドの単体テストを elisp でさくっと

Test::Class でメソッドの単体テストを vim script でさくっと - #生存戦略 、それは - subtechが便利過ぎる!!!のでemacsでもしたいです. (defun run-perl-method-test () (interactive) (let ((command compile-command)) (save-excursion (when (or (re-se…

gtags(GNU global)をperlとかで使う

etagsは使いにくいしgtagsは対応ファイルフォーマットが少ないしと思って色々調べていたらExuberant ctagsを使ってGTAGSを作れるようなのでやってみた.ちゃんとした機能ではなくgtagsのプラギン例のようです. ctagsが元になってるので global -rはできないで…

vimpulseとanythingを使う設定とか

vimpulseを使っているとanythingとかでminibufferに入ったときにinsert-stateになっててC-nとかC-zが使えなくて悲しいのでなんとかしてみた.vimpulseはvimpulse-define-keyでmodeのkeybindを拡張できるようなのでまずminibufferにminor-modeをつける. よくわ…

anything.elでプロセスに対しても複数行のバグ

d:id:rubikitch:20101122:anythingで取り込んで頂いたパッチにprocessの出力が二回以上にわかれて来たときに二回目の挿入位置が前回の位置を覚えていないようで順番とか色々変になるバグを埋め込んでしまいました. 勘で修正してみましたがinsertとinsert-bef…

File ... is checked in. Check it out?

File ~/config/.emacs.d/elisp/init.el is checked in. Check it out?とか聞いてくる鬱陶しいのはemacsさんだと思っていたら, viperさんだった. emacsさん疑ってごめんなさい. http://www.emacswiki.org/emacs/ViperMode#toc10 に解決方法が載ってた.

anything-git-grepをsubmodule対応など

d:id:mechairoi:20101120:1290245957のanything-git-grepを少し改良.変更点は スペースでAND検索 git submodule foreach 'git grep ...' で submoduleを検索するanything-c-source-git-submodule-grep を追加 (sed, grep に依存, patternに'が含まれてると動…

vimpulse で stateごとにモードラインの色を変える

どこかで見つけてvimに設定していたら、これが無いと妙に落ち着かなくなってしまった. mode-lineの色がinsert-stateだと黄色, vi-stateだと白, emacs-stateは危険な(何が起こるかよくわからない)ので赤とかになる. (current-buffer)が変わった後に呼ばれるho…

anything-git-grep

anything-grep は合わなかったので、anything-git-grep を作ってみました. 入力の度にgit grepする. magit,anything,d:id:mechairoi:20101120:1290245166が必要.(とりこんでいただいたのでanything最新版だと不要) anythingは複数sourceとか, 遅延とかがとて…

anything.el で (processp candidates)のときmultilineにならない?

anything.el で source が (processp candidates)のときmultilineにならない気がしたので.. --- a/.emacs.d/auto-install/anything.el +++ b/.emacs.d/auto-install/anything.el @@ -2265,7 +2265,12 @@ the real value in a text property." (split-string …

vimpulse-define-keyできないことがある?

emacs23.1.1 gitのmasterのvimpulse (vimpulse-define-key 'emacs-lisp-mode 'vi-state "\ e" 'eval-last-sexp) (vimpulse-define-key 'emacs-lisp-mode 'visual-state "\ e" 'eval-region) とかしたいが動かなかったのでnilになるとこを消してみたら動いた.…

0...n-1からなるk桁の順列

c++

0...n-1からなるk桁の順列 do { reverse(perm+k, perm+n); } while(next_permutation(perm, perm+n);

はてブ絶対復習

全自動ブックマーク棚卸しが想像以上に有意義な件 - てっく煮ブログとを合体させてみた. → Pipes: はてブ絶対復習 使い方は全自動棚卸しとほとんど同じで, 絶対復習したいページをサブアカにブクマしてRSSリーダーとかで復習.利点は 棚卸しと同じようにRSSの…

Gaucheのreplとmodule

gaucheでreplを使おうと思って色々試してたんだけど、 replを開いたときのモジュールがどう決まるのかよくわからん。 特に問題ないんだけど気になる。 (select-module user) (print (current-module)) (read-eval-print-loop) (print) (print "-------------…

Maximum flow (Dinic)

ゼミでやったので, 今更だけど最大フローを実装してみる. O(n^2m)になってるはずだけど長い.. #!/usr/bin/env perl use strict; use warnings; #use Carp::Assert; use Data::Dumper; package Edge; sub new { my ($class, $source, $target, $weight) = @_;…

Re: Re: emacsの*scrach*もどきをvimとgaucheで. - mechairoiの日記

アドバイスを頂いたので他のプラグインを見つつちょっと修正. Gauche interfaceを教えて貰ったのでコンパイル. Vim scriptが楽しく書けそうなので使ってみます. 感謝.

Problem64

use warnings; use strict; my $ans=0; for(1..10000) { $ans++ if (f($_) % 2 == 1); } print $ans; sub f { my $N = shift; return rec($N, 1, - int(sqrt($N)), 1, {}); } sub rec { no warnings 'recursion'; my ($N, $k, $l, $m, $ht) = @_; my $n_m = …

emacsの*scratch*もどきをvimとgaucheで.

gauche_scratch.vim 初vimscript! *scratch*みたくバッファ上で式を評価します.vimのコンパイルオプションに+pyhtonが必要. Linuxでしか試してないです. 使い方 gauche_scratch.vimとgauche_scratch.pyを http://github.com/mechairoi/gauche_scratch/tree/m…

Project Euler Problem62

借りてきたラクダ本に力をわけてもらった. まだ1章だけど. リストコンテキストはちょっと楽しい. #!/usr/bin/env perl use strict; use warnings; my (%count, %min); for(my $i=1;;$i++) { my $cube = $i**3; my $key = join '', sort $cube =~ /./go; $min…

Perlでパーサーコンビネータもどき

HaskellのMonadをJavaScriptで実装するとしたら - ラシウラ を参考にほとんど写経. #!/usr/bin/env perl use strict; use warnings; sub parse { my ($parser, $input) = @_; return $parser->({ result => [], source => $input, index => 0, }); } sub bin…

スターがついてる

こんなに嬉しいとは思わなかった.

Project Euler Problem61

Perlの練習ということで #!/usr/bin/perl use strict; use warnings; my @paths; $paths[$_] = [] for(0..99); push(@{$paths[target($_)]}, [{8 => 1}, [source($_), target($_)]]) for (polygonals(8)); for(3..7) { my @prev = @paths; $paths[$_] = [] f…

はてなインターンにいきたいので

日記を書く.