2010-01-01から1年間の記事一覧

メモ #3

関数とは、任意のパラメータから任意の値への写像である。オブジェクトとは定数関数(メンバ変数)や関数(メソッド)の集合であり、またオブジェクトそれ自体が識別子からメンバ(変数、関数)への写像である。オブジェクトは0個以上のスロットを持つ。スロ…

メモ #2

Literal リテラル(によって生成された値)を指す。自身の値を指す @value という属性を持つ。 Identifier 識別子。特別なリテラルと考えられるので、Literal を継承する。別のリテラル(Identifier も含む)を参照し、値として持つことが可能。また、自身の…

メモ #1

Identifier も Literal も値でありどちらも「参照される」ことは可能だが、 Literal は「参照する」ことはできない。つまり "hoge" というリテラルは常に同じオブジェクトIDをかえす。言い換えると Identifier は自身の文字列表現を表す @name という属性を…

強いメッセージ指向言語、Sketchy

コップ本を買って Scala のおもしろさがわかってきたのと、言語のデザインについてあれこれ考えていたこともあって、ちょっと Scala で処理系をつくってみようとおもいます。 JavaScript のような辞書と関数による単純な設計 Io をも越える強いメッセージ指…

メモ

メッセージングによる代入 - #!/usr/bin/env japanese - Teq.gこれのつづき。 スコープ(パッケージという概念) 他の言語への言及(Io や JavaScript)

メッセージングによる代入

代入をメッセージングで表すことを考えてみる。代入は、左辺に識別子をとり右辺に値をとる等式で表現できる。 ident = value つまり代入とは、識別子というオブジェクトに "=" というメッセージセンドを行っていると解釈できる。Rubyで実装してみる。 #!/usr…

多重代入

val a, b = 0 // a -> 0, b -> 0 val c, d = (1, 2) // c -> (1, 2), d -> (1, 2) val (e, f) = (3, 4) // e -> 3, f -> 4 val (g, _) = (5, 6) // g -> 5 val (_, i, _) = (7, 8, 9) // i -> 8 val j :: k :: _ = List(10, 11, 12, 13, 14, 15) # j -> 10, …

常に空ではない最小のインデックスへ要素を追加するリスト

GNU Screenのウィンドウの追加/削除を実装したつもり。

ごく簡単なバリデータを書く

コマンドラインツールのオプションは極端に省略されていて、可読性に欠けている面があったりする。(また他のツールと一貫性のない略語が使われていたりするので、なおさらタチが悪い)Rubyでそういったコマンドラインツールのラッパをメソッドで実装しよう…

Rubyの to_a っぽいもの

Object.prototype.to_a = function() { return Array.prototype.slice.call(this); }; Array.slice - JavaScript | MDN Function.prototype.call - JavaScript | MDN いろんなオブジェクトを配列へ変換するメソッド。Array.prototype.slice と Function.prot…

tig.rbで投稿するときに常に「幼馴染と一緒に」をつける

*** tig.rb.old 2010-10-17 23:34:59.817551695 +0900 --- tig.rb 2010-10-17 23:37:49.842437369 +0900 *************** *** 739,744 **** --- 739,745 ---- mesg = escape_http_urls(mesg) mesg = @opts.unuify ? unuify(mesg) : bitlify(mesg) + mesg = o…

fav langsというサービスをリリースしました

fav langs fav langsというサービスをリリースしました。これは、ユーザがよく書いている言語を知ることができるサービスです。GitHubに置いてあるリポジトリの中を見るので、GitHubに登録しているユーザに限られますが、気になるあの人のお気に入りの言語を…

連想配列のソート

キーに文字列、値に数値をもつ連想配列 hashmap について考える 対応する数値でキーを降順にソートした配列を返す関数 sort_hashmap を定義する def sort_hashmap(hashmap) hashmap.sort_by {|(k, v)| v }.map {|(k, v)| k } end hashmap = {'VimL' …

既存のリポジトリの一部から新しいリポジトリを作る

git

dotfilesというリポジトリを立てて各種設定ファイルを管理しているのだけど、その中にこまごまとしたスクリプトも入れている。けど、これは別にして管理したほうがいい気がしてきた。そこで、 scripts というリポジトリを立てて、 dotfiles/bin の中身をそち…

デザイン

眠いのでとりあえずメモ。パッケージについてのメタデータ持つオブジェクト、Recipeを考える。configureスクリプトがあるときはそれを実行する。Makefileがあるときは make && make installconfigureスクリプトで指定されている --[dis|en]able-* や --with[…

screen の backtick であれこれ

# $HOME/.screenrc hardstatus alwayslastline "[%02c] %-w %{.r.}%{!}%n%f%t%{dd} %+w %= %0`" backtick 0 0 0 ${HOME}/.screen/backtick.rb #!/usr/bin/env ruby # $HOME/.screen/backtick.rb require "logger" require "open-uri" class Backtick def sel…

Module#define_methodで魔術

klass = Class.new klass.send(:define_method, '!@#$') { puts 'Can you catch me?' } puts klass.instance_methods - Class.instance_methods # -> ["!@\#$"] klass.new.!@#$ # もちろんだめ klass.new.'!@#$' # もちろんだめ Obj…

GitHubからcloneしたリポジトリの名前

~/projects/{username}@{repos} って名前のディレクトリにcloneしている。いまの ~/projects には、 aereal@net-irc/ と cho45@net-irc/ が存在する。いろんなひとがforkしていたりするので、こうしておくといろいろ都合がいい。

Re: FizzBuzzより実用的なプログラマ向け面接問題考えた

FizzBuzzより実用的なプログラマ向け面接問題考えた - <s>gnarl,</s>技術メモ”’<marquee><textarea>¥ require "uri" def expand_string(str) %w(escape_html make_link make_twitter_mention make_hash_tag).each do |filter| str = __send__(filter, str) end str end def escape_htm</textarea></marquee>…

tig.rbの機能について

あくまで net-irc というライブラリの参考スクリプトであるけど、とても実用的なTwitterクライアントである tig.rb ですが、いかんせんドキュメントが足りていない感があります。作者であるid:cho45氏のブログでアナウンスされているもののほかに、いろいろ…

パッケージ管理のためのアプリケーション、Crumbsを開発することにした。

パッケージ管理システムについて - #!/usr/bin/env japanese - Teq.g これの続き。名前は Crumbs でいく。「パンくず」の意で、OSSプロダクトを先人たちがもたらした幸福(生産性の向上だとか、要求の達成だとか)へ向かうための道標 == パンくずとして見た…

Mozilla FirefoxのキャッシュをRAMディスクへ

/tmp が tmpfs でマウントされているので、キャッシュのディレクトリをそこに置けばいい。about:configを開いて、 browser.cache.disk.parent_directory の値を /tmp/firefox にでもしておきましょう。

/tmp を tmpfs に

tmpfs /tmp tmpfs defaults,size=128m 0 0 (スーパーpre記法、ほんとにすごい。fstabにも対応してる)

CUIで楽しい一夫多妻制生活をはじめよう

zsh

geekはプロンプトに「俺の嫁」を置き、一日中ちゅっちゅさせるものなんだとか。また、プロンプトにおさまるような簡素なAAで表現される嫁をより品があり格が高いと考える文化があるんだとか。美少女がたくさんいて、誘惑の多い世界ですから、「俺の嫁」なん…

Build and install Luakit on Ubuntu 10.04

依存するパッケージを入れる。 $ sudo aptitude install gperf help2man libwebkit-dev libgtk2.0-dev liblua5.1-0-dev そのままだと、Luaのヘッダファイルを見つけられないので、config.mkをちょっといじる。 12c12 < PKGS := gtk+-2.0 gthread-2.0 webkit-…

tig.rbとTiarraをstart-stop-daemonで動かす

#!/bin/sh # /etc/init.d/tig NAME=tig USER=aereal PROG=/usr/local/src/net-irc/examples/tig.rb PIDFILE=/var/run/$NAME.pid start() { echo -n "Starting: $NAME" start-stop-daemon \ --start \ --pidfile $PIDFILE \ --make-pidfile \ --background \ …

複数のTiarraを動かす

tig.rbとTiarraをつかっているのだけど、いまのところ、ストレージを圧迫するのがいやでログをとっていなくて、Tiarraでログとりはしていない。 Tiarraからは、ほかのIRCチャンネルにも繋いでいて、こちらのログはとっておきたいのだけど、Tiarraはチャンネ…

Guakeをインストール

ソースからインストール。 $ sudo aptitude install -y python-gtk2-dev libx11-dev libexpat-dev $ mkdir ~/src && cd ~/src $ wget -O guake-0.4.2.tar.gz http://guake.org/downloads/3 $ tar xvzf guake-0.4.2.tar.gz && cd guake-0.4.2 $ ./configure &…

cpanm XML::Parser

expat.hがないと怒られた。 $ sudo aptitude install libexpat-dev Ubuntuだとこれでビルドが通った。~/.cpanm/build.log を見ろよ、って言われたのだけど、「expat.hがないぞ」という肝心のところに辿りつくまでかなり戻らないといけなかった(関係のないエ…

Skypeの通知をnotify-osdにまわす

Skypeにはイベント(コンタクトがオンラインになるだとか、ファイル送信のリクエストが飛んできたりだとか)毎に通知を出したり、音声を流したりする機能がある。この機能の中に、イベントに応じてコマンドを実行する機能がある。また、イベントによっては変…