サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
d.hatena.ne.jp/mooz
何らかの事情があり、あるマシン経由でウェブサイトへアクセスしたいということがある。 例えば www.google.com に xxx.zzz というマシンで接続したければ、ユーザー名を hoge とすると、 ssh -L 10080:www.google.com:80 [email protected] のようにすればよい。 こうすることにより、ローカルの 10080 番ポートが [email protected] 経由で www.google.com の 80 番ポートへと接続される。 後はブラウザでの proxy を localhost:10080 にでも設定しておけば良い。ただこのままでは www.google.com 以外のサイトに接続できなくなるので、直接 localhost:10080 をアドレスバーに打ち込んでアクセスするという方法もある。どちらにせよ、ことが済んだらさっさと xxx.zzz か
およそ一年前,元旦から 2011 01/01 - mooz deceives you という記事を書き,昨年の出来事と本年の抱負について語った.そこでは主に「学術的な方面でのインプットとアウトプットを行なう」「自分に対する投資を惜しまないこと」「本を読むこと」「静的型付け言語である程度大きな物を書く」「型推論の勉強と補完フロントエンドの作成」ということをあげたようだ.果たしてそれらは実行に移せていただろうか. この m10n では本年を振り返る体で,最近の脳内状況を吐き出していきたい(だらだらと書いたところ,予想以上に長くなってしまった). 作成したもの 年月を顧みる上で外せないのは自身の書いたコードだろう.ここではそのマイルストーンの中から,何からの形式でウェブへ公開したものをとりあげ,想い出などを綴ってみることにする. percol no title canythin や zaw.zs
発表資料 Firefox Hacks Rebooted 発売記念 最終鬼畜キーボードブラウジング と題されたセミナーが,先日の OSC 2011 で行われました.私も末席を汚すかたちで発表者の一人に加えて頂きましたので,その際の資料を公開しておきます. 感想 プレゼンテーションは難しいですね.
最近 Ubuntu を入れ直してから、 M-$ とか M-x ispell-buffer としたときに次のようなエラーが表示され、スペルチェックが出来なくなっていた。 No word lists can be found for the language "ja_JP" 調べてみると、ホームディレクトリ以下に .aspell.conf というファイルを作り、その中に lang en_US と記述しておけば良いらしいことが判明。 echo "lang en_US" > ~/.aspell.conf ファイルを作成し、もう一度 M-x ispell-buffer してみる。すると今度は No word lists can be found for the language "en_US". と言われてしまった。そもそも英語の辞書ファイルが入っていなかったと。 検索してみると Ubuntu なら
2011/10/01 に開催された Mozilla 勉強会@東京 6th で WeakMap について LT を行わせて頂きました.発表資料,メタ的な説明,勉強会の感想,そして Firefox Hacks Rebooted の説明を記します. 発表資料 説明 ECMAScript 6*1 に導入される予定の機能に WeakMap というものがあります.これは平たく言うと「連想配列」で,ようやく ECMAScript にもまともな連想配列*2が導入されて喜びもひとしおな方も多いことでしょう. その WeakMap ですが,以前 Proxy を先走って実装してくれた Mozilla が再び先走って実装を行なっています.結果として Firefox 6 からこの WeakMap は利用可能となりました. 今回は 5 分間の LT ということで仔細な話は無理と判断し,抑えておくべき WeakMap
atool を使い dired のサポートする圧縮形式を増やす設定を紹介する. atool atool <http://www.nongnu.org/atool/> というツールがある. これは様々な圧縮形式・ツールに対するフロントエンドツールで,ファイルの拡張子から適切な圧縮形式を推測し,内部で適切なコマンドを呼び出してくれるという優れもの. 標準で搭載しているシステムは少ないが,たいていはソフトウェアリポジトリに入っている.例えば Ubuntu なら apt でインストールすることができる. sudo apt-get install atool 使い方は簡単で,例えばファイル FILE を解凍する場合は次のようにすれば良い. aunpack FILE tar xvf や gunzip など圧縮形式毎にコマンドを記憶する時代は終わった.こうして人間は退化していく. dired の圧縮・解
Ruby 会議 2011 先日行われた Ruby 会議 2011 の LT で Rios という自作のモジュールについて発表する機会を頂きました.SlideShare に発表資料を上げましたので,以下に URL を載せておきます(何を血迷ったか自作の別ツールを宣伝してしまってスミマセン……). この記事では LT 中に触れられなかった点について,簡単な補足などを行ないます. Rios Rios を一言で説明すると「CLI (Command Line Interface) のためのプロキシフレームワーク」となります.「プロキシフレームワーク」という言葉自体が私による全くの造語なため,イメージもわきにくいことでしょう. 「CLI」という言葉は,Rios の対象とするアプリケーションを意味します.こうしたアプリケーションでは,インタフェースが文字のみで構成されており,ユーザも文字を打ち込んで操作
文筆家というものを,僭越ながら三つの段階に分類させて頂く. 語彙・レトリックに乏しい. 語彙・レトリックを身につけ,自身の作品へ惜しげもなくそれらをつぎ込む.言葉に作品が支配される. 言葉による支配から脱却する. 2 から 3 への移行というものを,僕は次の二方に感じてきた*1. 庄司薫 『喪失』から『赤頭巾ちゃん気をつけて』 安部公房 『終りし道の標に』から『デンドロカカリヤ』 急にこのような話をしたのは,次の記事を読んで思うところがあったためだ. ダントツで「これはひどい」と思ったのが以下のコードで、この dis りネタはもう書くの三回目なんだけど、 !!~ ってなにしてるか意味わかりますか? ** * contains returns a boolean for if substr is found within str. */ function contains( str, sub
Shadow.vim Vim 用のプラグインに Shadow.vim というものがあります. これは, ファイルを保存するたびに 指定されたコマンドを実行し 実行結果を保存する という作業を行なう非常にシンプルなプラグインで,作者である ujihisa さんは,以下のように説明されています. これは任意の言語で任意の事前処理を行なうための薄いフレームワークです。コマンドや関数は提供されず、以下のようなファイル読み込み時と保存時のフックのみを提供します。 シンプルでこそあれ,小粒でもピリリと辛いプラグインです.その使い方,そして応用例に関しては no title を見ると良いでしょう. Shadow.el さて,先述の Shadow.vim ですが,残念ながら Emacs では動作しません.当たり前ですね. 話は変わりますが,先日開催された Yokohama.vim #1 で「Vim も E
Emacs の scratch バッファで inf-ruby.el の ruby-send-region を呼ぶと,次のようなエラーが出る. irb(main):001:0> TypeError: can't convert nil into String from (irb):1:in `eval' from (irb):1 ここで,該当バッファの内容を適当なファイルへ保存した上でもう一度 ruby-send-region を呼んでやると,今度は上手くリージョン内のコードが評価される. 原因は何だろうと思い inf-ruby.el の中身を覗いてみたところ,ruby-send-region は次のような文字列を Ruby インタプリタへ送信している,ということが分かった. eval <<'コード', nil, ファイル名, 行番号 ここでのファイル名は (buffer-file-name
フォントの表示確認 Emacs におけるフォントの設定では「どのフォントがどのように表示されるか」ということを確認するのがとても面倒です.私は毎回 M-x customize-face としてから family へフォント名を設定し表示を確認する,という手段をとっていたのですが,非効率的にもほどがありました. 何か良いインタフェースは無いものだろうか.そう考えていたときにふと思い浮かんだのが anything-colors でした.これは anything.el を用いて Emacs 組み込みの色や face の一覧表示を行なう関数で,次のような特徴を持ちます. 色や face が実際にどのように表示されるかを確認可能 anything.el インタフェースにより,インクリメンタルな絞り込みが可能 anything.el インタフェースにより,色や face の名前をコピーや挿入することが
JavaScriptで配列の結合を”+”で書きたい. が大変面白かったので. (function () { var cache = {}; function getUID() { var id; while (true) if (!cache.hasOwnProperty(id = Math.random())) break; return id; } Array.prototype.valueOf = function () { var id = getUID(); cache[id] = this; return "#" + id; }; String.prototype.toArray = function () { return this.split('#').reduce(function (acc, id) { return id.length && cache.hasOwnP
長い間,ぼくは選択肢の多さに悩まされてきた.いや,惑わされてきた,と言った方が適切かもしれない.そして,最近ではそんな選択肢の多さに憎しみすら抱くようになった.以下は,とりとめもなくつづられた,そうした選択肢に対する呪詛の言葉だ. あまりに多い選択肢はプログラマを悩ませる 良く言われることに「あまりに多い選択肢は消費者を悩ませる」というものがある.イヤホンを新調する時のことを考えてみよう.あなたは電気屋へ車を走らせ,イヤホンコーナーへと向かう.すると,そこにはずらりと並んだイヤホンがあなたを待ち受けているのだ. 「一体全体,どれを選んだら良いのだろう」 あなたは途方にくれることとなる. ぼくの中に,ここ半年ほどもやもやと渦巻いていた考えがある.これをどう表現したものかと思っていたのだが,つい先ほど,冒頭の文での「消費者」という単語を「プログラマ」という単語で置きかえることで,すっきりと表現
Emacs 上で Python をいじりたいという時には M-x run-python として Python インタプリタを立ち上げるのだが,この run-python の起動がもたつくように感じられ,長らく気になっていた. 何度も run-python とするたびにストレスがつのり,つい先ほど我慢が出来なくなりソースコードを覗いたところ,原因が判明.以下に該当部分のソースコードを示す. (defun run-python (&optional cmd noshow new) ;; <省略> (if (derived-mode-p 'python-mode) (setq python-buffer (default-value 'python-buffer))) ; buffer-local ;; Without this, help output goes into the inferi
Dropbox 管理下にあるファイルを Emacs で編集していると, バックアップファイルである #foo.txt# や foo.txt~ がファイルと同じ場所へ保存され, その度に Dropbox の同期が行われてしまい気分が良くない. かといってこれを全く作らないようにするという設定も, バックアップファイルには何度か助けられたことがあるために頂けなかった. そこで調べてみたところ ubulog: Emacsでオートセーブファイルの作成場所を変える という記事を発見. Emacs に「特定のパターンにあてはまるファイル」のバックアップファイル名を変換したり, バックアップ先ディレクトリを指定したりする仕組みが用意されていることを知った. 上記リンク先を参考に, 次のような設定を .emacs に行っておいた. dropbox-directory と destination-direc
ちょくちょく no title の方をいじっていたのですが, 今年中に行った変更は今年中に一度リリースしてしまおうということで. 変更点をまとめておきます. 変更点 ネストされた関数式やオブジェクトリテラルのインデント オリジナルの js2-mode で, ネストされた関数式やオブジェクトリテラルのインデントが以下のように嫌な感じになっていた問題を修正しました. $.ajax({ type : "POST", url : "some.php", data : "name=John&location=Boston", success : function (msg) { alert( "Data Saved: " + msg ); } }); 修正版では, 次のようになります. $.ajax({ type : "POST", url : "some.php", data : "name=Jo
EijiroX 最近, Google Chrome を良く使うようになりました. と言っても, ブラウジング用途にではなく, 専ら EijiroX による辞書引きにですが. EijiroX は id:edvakf さんの作成されたGoogle Chrome 用の拡張機能で, かの「英辞郎」をサクサクっと快適に検索・閲覧するためのツールとなっています. Google Chrome がクロスプラットフォーム対応であるために, Windows, Mac, Linux などで動作し, 日頃からこの三つを代わる代わるに使用している身としては大助り. カナダに足を向けて寝ることは出来ないなと枕の位置を調節する日々です. とまあ, 今日は EijiroX の紹介がメインでは無いので, この辺りにしておきます. 早速, 本題に入りますと, どうせならワンキーでこの EijiroX の表示をトグルできないか
Emacs Advent Calendar 2010 Emacs Advent Calendar 2010, 7 日目です. 今日は Info の設定をご紹介します. 経緯 先日, ネットワークに繋がらない状態で手持ち無沙汰となってしまい, はてどうしたものかと困ってしまうことがありました. あいにくその日は本などを持ち合わせていなかったため, 仕方なくノート PC を開くことに. いつもの癖でEmacs を立ち上げた僕は, そこでこう思ったのでした. 「そうだ Info 読もう」 電子書籍 Info 世は電子書籍黎明期で, やれ Kindle だ iPad だと連日賑やかですが, そんなものは飾りです. 偉い人にはそれが分からないのです. 我々には「元祖」電子書籍であるところの Info と電子書籍リーダであるところの Emacs があるのですから, これを使わない手はありません. In
LT on Firefox Developer Conference 2010 404 Not Found | Mozilla Japan で ECMAScript Harmony の Proxy について LT させて頂きました. 発表資料 発表に使った資料を SlideShare にアップロードしました. 途中, Harmony を Harmoney と書いているところが多々ありますが, やさしく見過ごしてやって下さい. 追記 (2011 2/23 21:01) スライド中,以下のように has (in 演算子に対応) が第一引数に Proxy のインスタンスを受けとるような書き方をしてしまっていますが,これは誤りです. Proxy.create({ has: function (p, name) { } }); Proxy.create({ has: function (_, nam
find-file Emacs の find-file (C-x C-f) は本当に使いにくいものだと, 常々思っていた. 中でも, 補完候補が複数あった場合の挙動. これが何とも気にくわない. 例えば, 以下のように C-x C-f を入力した直後の状態を考える. この時 TAB キーを押すと, デフォルトの Emacs では [Complete, but not unique] との表示が出るだけで, 候補一覧を表示するにはもう一度 TAB キーを押す必要がある. この「二回 TAB キーを押す」という行為が毎度毎度要求されることとなり, そのストレスたるや凄まじいものがあった. また, TAB を二回押して補完候補が表示された後の挙動は, 輪をかけて苛立たしい. この時 TAB を押すとどうなるかといえば「補完候補が全て見れるようにスクロールが行われる」だけなのだ. 補完候補一覧が画
start-process で xdg-open が呼び出せない 以前 Linux でも open や fiber 的な動作を - mooz deceives you という記事を書いたのだけれど, ここで紹介している設定を先ほど試したところ, どうもうまく動いてくれないことが分かった. そこで, 次のような関数を書いてみる. (defun open-file-dwim (filename) "Open file dwim" (let* ((winp (string-equal window-system "w32")) (opener (if (file-directory-p filename) (if winp '("explorer.exe") '("gnome-open")) (if winp '("fiber.exe") '("gnome-open")))) (fn (repl
幻の ECMAScript 4th 幻となった ECMAScript 4th のドラフトを眺めていたところ, p.33 に Destructuring assignment and binding (分割代入, 分割束縛) という項目を発見した. 分割代入に関しては JavaScript 1.7 (Firefox などが用いる SpiderMonkey や Rhino に実装済み) から使用が可能であるため, ご存知の方も多いのではないかと思う. 「そういえば詳しい仕様は見たことがなかったな」と軽い気持ちで読み進めていたところ, そこに述べられていることが Haskell や OCaml など関数型言語におけるパターンマッチと同等であると分かり, 驚いた. 例えば, 分割代入においては次のように deep なパターンが利用可能であると書かれている. let { x: {a, b}, y:
Global オブジェクトの __proto__ (大抵のブラウザで Prototype 内部プロパティはコレ) に値を設定したらどうなるのかな, と思ったので試してみた. var global = this; var env1 = { a : 1, b : 2, c : 3 }; var env2 = { a : 'a', b : 'b', c : 'c' }; function printABC() { print([a, b, c].join(", ")); } printABC(); // ReferenceError: a is not defined global.__proto__ = env1; printABC(); // 1, 2, 3 global.__proto__ = env2; printABC(); // a, b, c global.__proto__ =
オレ標準 JavaScript 勉強会 で def.js について発表してきました. 発表資料は以下になります. また, ソースコードを読む際にメモを取っていたので, それも公開しておきます. スライドではコードの一部分のみしか取り上げることが出来なかったので, def.js の全容を把握したいという方は参考にしてみてください. メモ付きソースコード 発表 「こんなものを作ってみました, やってみました」という発表が出来れば良かったのですが, 特にアイディアも浮かばなかったため一週間ほど前に知り気になっていた def.js の解説をやろうということに. 「100 行も無いコードだしすぐに読めるだろう」と余裕をこいて前日の夜中にソースコードを読み始めたのですが, 様々なテクニックの駆使された濃いコードにかなり手間取ってしまい, その日は結局動作の仕組みを理解するだけで精一杯. 当日の朝から資
time_t は何を typedef したものか? 「time_t は何を typedef したもの?」と聞かれ, 答えることが出来なかったので調べることにした. time.h とりあえず time.h を覗いてみると, 77 行目に time_t の typedef を発見. typedef __time_t time_t; ということで, time_t は __time_t を typedef したものであることが分かった. めでたしめでたし. __time_t まあ, そんなことで終わってしまってはしょうがないので, __time_t の正体を探ることに. すると time.h の 117 行目に # include <bits/types.h> /* This defines __time_t for us. */ という記述を発見. 早速 bits/types.h を開く. する
arguments no title を見ていて気づいたこと. function foo(x, y) { bar(); } function bar() { alert(foo.arguments[0] + ", " + foo.arguments[1]); } foo("x", "y"); // => x, y bar(); // TypeError: foo.arguments is null foo("x", "y") とすると, 以下のような流れで bar から foo の引数にアクセスできる様子. foo("x", "y") でコールスタックに foo が積まれる foo 内で bar() が呼ばれ, コールスタックに bar が積まれる bar 内では foo.arguments とすればコールスタック上にある一番近い foo の引数にアクセス可能 一方, 直接 bar() と
お知らせ 現在, Add-on for Mozilla において gpum の公開が停止されています. ダウンロードは以下のリンクよりお願いします. no title ダウンロードした gpum.xpi を Firefox へドラッグ & ドロップして下さい. やっと公開が再開されました (停止されていた理由は, アドオン名に Gmail という文字列が含まれている, というものです. なんでもドイツの会社が Gmail を登録商標にしていて, 勝手に使うなと文句を言ってきたらしいのです. Google Mail へと書き換えることにより対応しました.) 記事 Firefox 用アドオン gpum - Gmail Popup Unread Manager を公開しました. gpum - Gmail Popup Unread Manager Gmail の未読メッセージをポップアップから管理
C-x = でポイント上の文字情報を表示する。C-u をつけることで、詳細情報を表示してくれる。 C-u C-x = Meadow 上での実行例。 character: f (102, #o146, #x66, U+0066) charset: ascii (ASCII (ISO646 IRV)) code point: #x66 syntax: w which means: word category: a:ASCII graphic characters 32-126 (ISO646 IRV:1983[4/0]) l:Latin Properties: jisx0208: 53734; buffer code: #x66 file code: #x66 (encoded by coding system japanese-shift-jis-dos) display: by this
OAuth の Read と Write 先日, ツイート君に会話をまとめてもらい, 大変嫌な思いをした. Twitter の OAuth には Read 権限と Write 権限があって, Write 権限があると つぶやく 誰かをフォローする 誰かをリムーブする などのことが行えてしまう. つまり, Write 権限を要求するアプリケーションを許可することは, 「このアプリケーションが私のアカウントを使って勝手に変なことをつぶやいたり, 勝手に誰かをフォローしたり, 勝手に誰かをリムーブしても文句は言いませんよ」ということに等しい. さて, それでは OAuth の権限付与画面を見てみよう. ここでは冒頭に上げたツイート君が権限をこちらに要求してきている. では, いったい何の権限を要求してきているのだろうか. Read なのだろうか. それとも Write なのだろうか. 答えは R
次のページ
このページを最初にブックマークしてみませんか?
『mooz deceives you』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く