タグ

ブックマーク / rubikitch.hatenadiary.org (21)

  • Emacs24のelispは速いぞ!ベンチマークを測定してみた - http://rubikitch.com/に移転しました

    Emacs24「ねんがんのlexical-bindingをてにいれたぞ!」 10年にわたって開発してきたlexical-bindingがついにEmacs24に取り込まれました。 これはEmacs界の大大大ニュースです! lexical-bindingが有効になると、letがlexical-letに化けます。 lexical-bindingは速いということらしいのですが、現時点でベンチマークをみかけないので測定してみました。 lexical-bindingは変数lexical-bindingをtにすると有効になります。 この変数は、バッファローカル変数なのでsetqで設定しても他のバッファに影響はありません。 M-x ielmで実験してみましょう。 ELISP> (setq lexical-binding t) t ELISP> (defun f1 (n) (let ((i 1) (s 0)

    Emacs24のelispは速いぞ!ベンチマークを測定してみた - http://rubikitch.com/に移転しました
    Watson
    Watson 2012/06/23
  • 集中力5倍!小よく大を制するミニマリストEmacs - http://rubikitch.com/に移転しました

    この記事は Emacs Advent Calendar jp: 2011 の11日目です. 昨日はta2_o2p さん、明日は id:handlename さんです。 去年、一昨年とインストーラ系を連続して紹介してきましたが、 今年はうってかわって身近な例を取り上げたいと思います。 僕は最近、Windows XPのネットブックを 使っていることが多いです。 あれだけ忌み嫌っていたWindowsの方が自宅の Linuxマシンよりも稼働率が高いのです。 数年前の自分が聞いたらびっくりしてることでしょう。 この前はネットブックにEmacsをインストール する話をしましたが、今回は小さい画面で Emacsを使うノウハウをお送りします。 最近はパソコンといえばノートパソコンが普通の ようなので、これからする話は役立つと思います。 とにかく、小さいパソコンでEmacsを使う場合、 最大の問題点となるの

    集中力5倍!小よく大を制するミニマリストEmacs - http://rubikitch.com/に移転しました
    Watson
    Watson 2011/12/12
  • savekill.elリリース - Emacsの突然死に備えて - http://rubikitch.com/に移転しました

    savekill.elをリリースしました。 動機 最近、なぜかよくわかりませんが、Emacsが突然死することありますよね? あまり使いこんでない人はあまり経験がないかもしれませんが、ヘビーユーザーにとっては日常茶飯事です。 不安定すぎて落ちまくるほどではないですが、僕のところでは数日に1回のペースで落ちてしまいます。 Emacs以外を使っていると、ソフトウェアの突然死の恐怖はよくわかると思います。 「保存してなくて、今までの作業がパーになった!」 誰もが一度はそんな経験があるでしょう。 もちろん、そこは我等がEmacs、ちゃんと防衛線は張っています。 Emacsには自動セーブ機能があり、一定時間以上保存していないと、一時ファイルに保存する仕組みになっています。 そのため、Emacsが落ちたとしても、当該ファイルに対し M-x recover-file を実行すれば、ほとんどの作業を取り戻す

    savekill.elリリース - Emacsの突然死に備えて - http://rubikitch.com/に移転しました
    Watson
    Watson 2011/02/27
  • el-get.elでEmacs Lispパッケージをインストール・アップグレードする - http://rubikitch.com/に移転しました

    Emacs Advent Calendar jp: 2010 の9日目の記事です。 去年のauto-install.el に引き続き、今年もインストーラの紹介です。 昨日は id:yaotti さん(anything関数を好きな言語で実装できるanything-with-everything.el (Emacs Advent Calendar 2010 8日目) - yaotti's diary)でした。 anything-with-everything.elは以前から作ろうと思っていたら先越されてしまいました。 明日は id:handlename さんです。 つい最近になって、Emacs Lispのインストールを管理するel-get.elが登場しました。 Emacs Lispのインストールといえば、auto-install.elやその前身のinstall-elisp.elがあります。 し

    el-get.elでEmacs Lispパッケージをインストール・アップグレードする - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/12/09
  • デバッグの第一歩!Emacs Lisp関数をトレースする方法 - http://rubikitch.com/に移転しました

    Emacs Lispのデバッグをしているとき、特定の関数呼び出しをトレースしたいことがあります。 関数呼び出しのトレースとは、呼び出した関数の引数の値と、返り値をチェックすることです。 もちろん、関数が呼び出されたかどうかもわかります。 トレースの実現にはadvice機能を使っています。 M-x trace-functionでトレースするM-x trace-functionは、特定の関数をトレースします。 このコマンドは、トレース対象関数と出力バッファを聞いてきます。 出力バッファはデフォルトで*trace-output*なので、そのままにしておくのが無難です。 複数の関数をトレースする際に出力がごちゃごちゃになるのが嫌ならば別のバッファ名にしておけばいいです。 その後でトレース対象関数を呼び出したら、トレース結果を表示します。 M-x trace-function-backgroundで

    デバッグの第一歩!Emacs Lisp関数をトレースする方法 - http://rubikitch.com/に移転しました
  • Emacsでマウスを有効活用する方法 - http://rubikitch.com/に移転しました

    Emacs使いというと、どうしてもキーボード操作に偏ってしまい、マウス操作がないがしろにされている気がします。 Emacsでもマウス操作はそこそこできるのです。 マウスを有効に使っていますか? Emacsはインクリメンタルサーチが強力なので、目についた場所へ一瞬でジャンプできます。 しかし、文章を読む場合に目についた単語や範囲についてコマンドを実行する場合はマウスが優勢です。 そこで、マウスにコマンドを割り当てる方法ついて少し解説してみます。 マウスイベントのシンボルマウスイベントは「接頭辞-mouse-番号」という形のシンボルで表されます。 接頭辞はないこともあります。 たとえば、mouse-1は左クリックを、double-mouse-3は右ダブルクリックです。 マウスボタンの番号マウスボタンと番号は以下のような対応になっています。 3以降は環境に依存するかもしれませんが、僕のところでは

    Emacsでマウスを有効活用する方法 - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/11/10
  • split-root.elでEmacsで横長のウィンドウを作成する - http://rubikitch.com/に移転しました

    split-root.elは図(家より転載)のように確実に画面下部に横長のウィンドウを作成します。 普段は通常のEmacsのウィンドウ分割に満足していても、特定のケースでは画面下部に出したいこともあります。 この場合は、 split-root.el を使った display-buffer-function を作成します。 display-buffer関数は、 display-buffer-function に指定してある関数を呼びます。 split-root.elは split-root にありますが、auto-install.elで直接インストールできます。 M-x install-elisp http://nschum.de/src/emacs/split-root/split-root.el (require 'split-root) (defvar split-root-wind

    split-root.elでEmacsで横長のウィンドウを作成する - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/11/01
  • Emacsの中でsudoする方法 〜これでrootによる操作も楽々〜 - http://rubikitch.com/に移転しました

    Emacs、増刷されました!】 みなさん、Emacsを使っていて、突然rootでの操作がしたいと思ったとき、どうしてますか? たとえば、ユーザに書き込み権限のないファイルに書き込みたいとき、root権限でコマンドを実行したいとき。 わざわざターミナルに移動してsuやsudoを使っていたりしませんか? 面倒ですよね。 どうせなら、Emacsの中で直接sudoを使ってみたいですね。 ここで紹介するsudo-ext.elがその願いを叶えてくれます。 注意! 2011-01-17 月更新 Macではsudoersの設定をする必要があるようです。http://d.hatena.ne.jp/maeshima/20110116/1295196063]] http://d.hatena.ne.jp/handlename/20110117/1295231889 機能 sudo-ext.elが提供する機能

    Emacsの中でsudoする方法 〜これでrootによる操作も楽々〜 - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/10/19
  • anything-filelist 〜すべてのファイルを瞬時に開く方法〜 - http://rubikitch.com/に移転しました

    Emacsを書きました】 深いディレクトリ階層にあるファイルを開くのは面倒なものです。 比較的最近使ったファイル・よく使うファイルであればrecentfを使えば問題ありません。 もし、recentfに入っていないファイルの場合、長いパスを入力するなりlocateを使うなりしないといけません。 面倒ですね。 recentfは便利なのでここ参照 そこで、システム上のすべてのファイルをリストを作成して、そこから開く方法を使います。 anything.elをインストールする まずは準備段階として、anything.elをインストールしておきましょう。 最新機能なのですでに入れている人は更新しておきましょう。 具体的には M-x auto-install-batch anything を実行するだけです。 http://d.hatena.ne.jp/rubikitch/20100718/anyt

    Watson
    Watson 2010/09/16
  • Emacsからgitのブランチを扱うgit-dwim.elをリリース - http://rubikitch.com/に移転しました

    Emacsを書きました】 gitはブランチが強力です。 ブランチは単なるポインタなので、gitではブランチの積極的な利用が推奨されています。 トピックブランチ特に「トピックブランチ」は便利なブランチ利用法です。 作業前に特定の作業用のブランチを切り、無事に実装できたらmasterにマージ(リベース)し、ブランチを削除する方法です。 トピックブランチを切ることで、現在の目標を明確にすることができます。 また、緊急の修正をする場合はあわてずに一旦masterに戻って修正し、再びトピックブランチで作業することができます。 トピックブランチについては http://progit.org/book/ja/ch3-4.html が詳しいです。 トピックブランチを作成するnewtopicとういう名前のトピックブランチを作成するには、以下のコマンドを使います。 $ git checkout -b ne

  • auto-async-byte-compile.elリリース - バイトコンパイル問題の終焉 - http://rubikitch.com/に移転しました

    自動バイトコンパイルを行う auto-async-byte-compile.el をリリースしました。以前のバージョンではRubyが必要でしたが、auto-async-byte-compile.elはEmacs Lispで完結しています。 リンク先のbyte-compileスクリプトも持っておくとコマンドラインからload-pathを気にせずにバイトコンパイルできます。 その発想はなかった! 新しい自動バイトコンパイルでEmacsを高速化する - http://rubikitch.com/に移転しましたより。 Emacs Lispをバイトコンパイルすると動作が高速化するのは常識である。しかし、バイトコンパイルには致命的な欠点があって、Lispファイルの方がバイトコンパイルファイルよりも新しい場合は、古いバイトコンパイルファイルが読み込まれてしまうのだ!!そのため、Lispファイルを更新した

    auto-async-byte-compile.elリリース - バイトコンパイル問題の終焉 - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/04/23
  • text-translator.elで英語・日本語を自動判別しつつすべての翻訳エンジンで検索するパッチ - http://rubikitch.com/に移転しました

    久々にtext-translator.elをアップデートしたら、いろいろ便利機能が追加されていた。とりわけこの2つは強力だ。 text-trantext-translator-allで登録されている全部の翻訳エンジンで翻訳する text-translator-translate-by-auto-selectionで英語・日語を自動判別して適切な翻訳エンジンを使う しかし、この2つが両立していないところが不便だ。text-trantext-translator-allを使おうにも、毎回「enja」だの「jaen」だの打たないといけないのは至極面倒だ。せっかく英語・日語自動判別機能があるなら、使わない手はない。というわけでパッチ。 あ、インストールはauto-install.elからM-x auto-install-batch text translatorでできるよ!auto-insta

    Watson
    Watson 2010/02/28
  • そろそろEmacsのウィンドウについて一言いっとくか - http://rubikitch.com/に移転しました

    Emacsはひとつの窓(ふつうの意味の「ウィンドウ」、Emacs用語の「フレーム」)の中に複数の表示領域(Emacs用語の「ウィンドウ」)を持つことができる。そして、ヘルプ等を表示させる場合はEmacsが勝手に画面を分割して別のウィンドウに表示させる。まぁ、Emacsを使ってるならみんな経験してることだ。 ワイドディスプレイが台頭する中、フレームの横幅はどんどん長くなっている。Emacs22までだと強制的に上下分割されてとても使いづらかった。Emacs23になったら横幅にあわせて、上下分割か左右分割か判断してくれるようになった。横幅が広いと左右分割してくれる。表示行数が減らないのでこれは嬉しい。画面の有効活用だ。 Emacs22で左右分割させたいならば、M-x install-elisp-from-emacswiki display-buffer-for-wide-screen.elしてく

    そろそろEmacsのウィンドウについて一言いっとくか - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/02/10
  • Emacs Lisp基礎文法最速マスター - http://rubikitch.com/に移転しました

    基礎文法最速マスターブームにのっかってみる。Ruby基礎文法最速マスターをだいたいEmacs Lisp(elisp)に置き換えてみる。 Emacs LispはEmacsで使われているLisp方言のひとつだ。他の言語をある程度知っている人はこれを読めばEmacs Lispの基礎をマスターしてEmacs Lispを書くことができるようになるかもしれない。無保証ではあるが。 ある程度はCommon Lispにも応用できると思うよ。 更新情報 [2010/02/03] 注釈の誤りを修正。 let*について加筆。 基礎 対話的にEmacs Lisp式を評価する Emacsを起動したときに生成されている、スクラッチバッファ(*scratch*)を使うと、Emacs Lispの式を簡単に評価することができる。M-Tabで補完できるぞ。 式を書いたらC-jを押すと、式の値が出てくるぞ。 (+ 1 3) 4

    Emacs Lisp基礎文法最速マスター - http://rubikitch.com/に移転しました
  • 僕たちが待ち望んでいたRubyスクリプトをデーモン化する方法 - http://rubikitch.com/に移転しました

    Rubyでは、簡単にデーモンが記述できる。その方法は簡単!Ruby 1.9だと Process.daemon と書くだけだ。その行の後は制御端末が切離され、デーモンとして実行される。Ctrl+Cで終了できないので、永遠に実行を続けるスクリプトは「pkill -f」などで殺す。 既存のスクリプトをデーモン化するには、この一行を加えればいいだけなのだが、常にデーモンにしてしまうとデバッグが困難になってしまう。そこで、テスト時はふつうに実行して、普段はデーモンにしてしまえばいい。その方法もまた簡単!上の一行を daemonize.rb というファイルに保存すればいい。だけどこれだけだとつまらないので、ついでにRuby 1.8にも対応させてみる。 if Process.respond_to? :daemon # Ruby 1.9 Process.daemon else # Ruby 1.8 req

    僕たちが待ち望んでいたRubyスクリプトをデーモン化する方法 - http://rubikitch.com/に移転しました
    Watson
    Watson 2010/01/09
  • その発想はなかった! 新しい自動バイトコンパイルでEmacsを高速化する - (rubikitch loves (Emacs Ruby CUI))

    Emacs Lispをバイトコンパイルすると動作が高速化するのは常識である。しかし、バイトコンパイルには致命的な欠点があって、Lispファイルの方がバイトコンパイルファイルよりも新しい場合は、古いバイトコンパイルファイルが読み込まれてしまうのだ!!そのため、Lispファイルを更新したらバイトコンパイルしておかないといけない。 このどうしようもない仕様をなんとかするべく、自動バイトコンパイルで自衛をしている人はけっこういると思う。というか、自動バイトコンパイルがないと絶対に泥沼にはまってしまう。 自動バイトコンパイルとは、Lispファイルを保存したときに after-save-hook をつかって自動でバイトコンパイルをするというもの。しかし、これだとバイトコンパイル中は待たされてしまう。シングルスレッドの悲劇。 Emacsで同時に複数の処理を実行するには、タイマーを使うか、外部プロセスに任

    その発想はなかった! 新しい自動バイトコンパイルでEmacsを高速化する - (rubikitch loves (Emacs Ruby CUI))
    Watson
    Watson 2010/01/07
  • MigemoをUTF-8化する - http://rubikitch.com/に移転しました

    Migemoはローマ字から直接日語を検索するすげえツールなのだが、開発停止されているようだ。というかもう完成されたソフトウェアなんだろうね。今に至るまで10年近くずーっと愛用している。 ただ、文字コードがEUC-JPのみってのがイケてない。今時UTF-8だろ?てなわけでパッチ。「-U」オプションをつけるとUTF-8で出力してくれるぞ。あっさりnkfをかましてるだけ。明白。 MigemoをUTF-8化しないと w3m で system_charset = UTF-8 にした状態だとMigemoが効かないのだ。 diff --git a/bin/migemo b/bin/migemo index 5eacf81..22c1121 100755 --- a/bin/migemo +++ b/bin/migemo @@ -44,6 +44,7 @@ Usage: migemo [OPTION]

    MigemoをUTF-8化する - http://rubikitch.com/に移転しました
  • w3m-autopagerizeを公開予定 - http://rubikitch.com/に移転しました

    FirefoxのAutoPagerize(id:swdyhさん作)がうらやましくなったのでw3m版も作ってみた。 というか、AutoPagerizeが生まれる前から「次のページ」ボタンが欲しくなってワンタッチでLocal CGIを起動して次のページリンクを見つけて押すようなものを作っていたのだ。だけど対応すべきサイトが膨大すぎるため自分が見るサイトしか対応していなくて公開してなかった。正直万人に使える代物ではなかった。 だが、AutoPagerizeの登場と最新版AutoPagerizeの設定データ(SITEINFO)がwebで公開されていることで状況が変わった。そこのデータを流用してしまえば、定番サイトは対応できるだろうと考えた。 しかし、壁はまだ残っていた。HTMLを解析してXPathで抜き出すまともなRubyのライブラリが存在しなかった。HpricotはいちおうXPathにも対応して

    w3m-autopagerizeを公開予定 - http://rubikitch.com/に移転しました
    Watson
    Watson 2008/12/31
  • Ruby初心者〜初中級者が読むべきコードについて - ’(rubikitch wanna be (a . lisper))

    Rubyの初心者にたいして「これは読むべき」だと思うコードを教え… - 人力検索はてな 今北産業ではないが超要約してみる。 Ruby初心者はまず文法や基的なクラスを習得せよ。 初級者ならばmailread.rbなどの簡単なライブラリを読んでみよう。 中級くらいからはWEBrickやBitChannelのソースがよい。 そして、なんといっても、力をつけたいならばソースを改造してみるのが一番だ。改造するんだからソースを理解しないといけないし、書く力も養われる。俺は「興味あるプログラム、気に入ったプログラム」をおすすめする。なぜなら、好奇心があるからモチベーションを保ちやすい。 やっぱり改造一番だよなぁ…書籍のサンプルコードはスペースの関係でミニチュア版になってるし、あくまで「作られた例(contrived example)」に過ぎないんだよね。生きたソースコードにはかなわない、うん。 俺はe

    Ruby初心者〜初中級者が読むべきコードについて - ’(rubikitch wanna be (a . lisper))
    Watson
    Watson 2008/05/21
  • Ruby 1.8.7で使えるようになったRuby 1.9のメソッドたち - ’(rubikitch wanna be (a . lisper))

    Ruby 1.8.7ではRuby 1.9からのbackportがとても多い。つまり、Ruby 1.9のあのメソッドがRuby 1.8でも使えるようになったということだ!! これがすごいという機能がもりだくさん、ちょっと大人になったRuby 1.8をお楽しみに。 Enumeratorは組み込みになり、eachなどのイテレータメソッドはブロックをつけないとEnumerable::Enumeratorを返すようになった。おかげでブロック付きメソッドの柔軟性が飛躍的にアップ! expectationsテスティングフレームワークによるテストで書いているので「gem install expectations」してから実行してみよう。手軽にユニットテストが書けるからおすすめ。書式は…見ればわかるよねw ChangeLogで現在からRuby 1.8.6リリースまでを読んだので、ほとんどカバーしていると思わ

    Ruby 1.8.7で使えるようになったRuby 1.9のメソッドたち - ’(rubikitch wanna be (a . lisper))
    Watson
    Watson 2008/05/09