2008年 02月 06日

天才と器用貧乏

天才な女の子よりは、器用貧乏な女の子のほうが萌える。

書類不備

学校に出した書類が不備で送りかえされてくるらしい。なんかほんと書類書くのが苦手だ。

ああいうのアナログのって送ってみるまで妥当性検証されない。すごい無駄。しかも、その検証は人がやるから、全ての書類に対して同じような検証がかかるとは言えない。そのくせ、殆どの検証は機械にやらせようと思えるばできることだ。バカバカしいことこの上ないと思う。重要な書類ほど機械に処理させるべきだ。入試のときも同じことを思った。(マークシートは機械で処理されるけど、マークされているかどうかの閾がユーザにわからないのでクソだ)

自分は、心の根本的な部分の成長が遅い感じを中学ぐらいから感じていて、それがところところで、威力を発揮しだして、めんどうくさい……だいたいの人は、なんだかんだいって、友達をつくることができ、ある程度安定した場みたいなのを築けるみたいだけど、そういうのができない。たくさん人がいるところでの、社交性みたいなのが、全くわからない。

そこらに沢山人がいるところでの、独りである感覚、絶望感、みたいなの。賑やかな孤独。知らない人はもちろんだけど、中途半端に知っている人もダメだ。飲み会みたいとかでの、ふと気分が下った瞬間から感じるそういう真っ暗で冷い感じがどうしようもなく嫌だ。人が多いほど、制御すべきことが多くなって、気分を上げにくくなる。誰だってあることだ。

誰でも、社会的な役割を無意識に感じとっていて、それに収まるように行動してる感じがする。みんな嫌だろうがなんだろうが、繋っているようだし、その繋っている部分で、バランスを調節しあってる。誰かがいなくなると、そこに近い人がそれをおぎなってく。嫌な人が一人いなくなっても、誰かにその役割を譲るだけだ。誰かとっくの昔にいってるはずだこんなこと

TODO

バカがバカなりに生きていく方法を考える。

lt と gt

僕の覚えかたは、lt の l は left で < です。

あぁ、説明不足だったんですが、僕はだいなり・しょうなりってどっちがどっちだかわからないバカなので (同じように東と西もわからなかった)、gt/lt が何の略か知っていてもそれが記号に一致しないんです。でも l は left の l とバカでもわかるように覚えておけば、左手に近いほうの Shift+, をおせばいいというのが直感的に理解できるんです。バカのバカなりの考えかたです。

Ruby の Jabber(XMPP) ライブラリ

xmpp4r-simple がつかいやすいみたいかな。xmpp4r のラッパで、作者が twitter の中の人みたい

require "rubygems"
require "xmpp4r-simple"
require "pit"

config = Pit.get("jabber", :require => {
	"username" => "username of jabber account",
	"password" => "password of jabber account",
})

im = Jabber::Simple.new(config["username"], config["password"])

Thread.start do
	loop do
		im.received_messages do |msg|
			p msg
			p msg.from
			p msg.body
			p msg.type
		end
		sleep 1
	end
end
#im.deliver("to@example.com", "foobar")

sleep

received_messages は常に non-blocking なのでループさせる必要がある。xmpp4r のほうはコールバックになってるから、特に non-blocking にしたくないんだったら im.client.add_message_callback do |msg| end したほうがいいかも。

im.subscribed_to?(jid) とか便利なのもあるけど、接続直後だと、どんなアカウントでも false をかえしたりする。

特別いろいろやりたいんじゃなかったら xmpp4r-simple のほうがめんどくさくなくてよさげ (なにがめんどいって最初のコネクションだけど、あと接続きれたときの処理とかもめんどいし、そこらへんかってにやってくれるのは嬉しい)

require "rubygems"
require "xmpp4r"

config = ...

jid    = Jabber::JID.new(config["username"])
client = Jabber::Client.new(jid)
client.connect
client.auth(config["password"])
client.send Presence.new(nil, "") # 現在の状態をセット。しないと他の人にはオフラインのままにみえる
client.add_message_callback do |msg|
	p msg
end

エラー処理もいれないといけなくて、エラーがおきて re-connect したらまた Presence をおくらないといけなくて、みたいな感じでめんどい。

2008年 02月 05日

have nothing you have.

罠 -> JSON は文字列リテラルのクオートにシングルクオートは使えない

2008年 02月 04日

単体で (Rails をつかわずに) AR::Migration をつかうメモ

(ほぼ)最小構成の例: (acts_as_versioned もふくめて)

# Rakefile

require "rubygems"
require "rake"
require "active_record"

namespace :db do
	"Migrate database."
	task :migrate do
		require "db/connection"
		ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
	end
end
# db/connection.rb

require "logger"

ActiveRecord::Base.establish_connection({
	:adapter => "sqlite3",
	:dbfile  => "wiki.db",
})

ActiveRecord::Base.logger = Logger.new($stderr)

Dir.glob("model/*.rb") do |f|
	require f
end
# db/migrate/001_init.rb

class Init < ActiveRecord::Migration
	def self.up
		create_table :pages do |t|
			t.column :version    , :int
			t.column :title      , :text
			t.column :body       , :text
			t.column :created_at , :datetime
			t.column :updated_at , :datetime
		end
		Page.create_versioned_table
	end

	def self.down
		Page.drop_versioned_table
		drop_table :pages
	end
end
# model/page.rb

require "acts_as_versioned"

class Page < ActiveRecord::Base
	acts_as_versioned
end
  • AR::Migrator は undocumented なので変更される危険性がそれなりにあるかも ( # :nodoc: 指定)
  • AR::Base.logger を設定しないと Migrator うごかないよ

Rack + SQLite な Wiki をつくろうとおもったけどなんかめんどくさくなってしまった……

限定発売

限定発売とかまじでやめてほしいなぁ。

コンテスト

プログラミングコンテスト、みたいなのにどうも興味が持てない。頭が悪いから、解く楽しみ、みたいなのがない。というかああいう、頭の悪さを嫌でも実感しなくちゃいけないものは嫌いだ。そんなのお前 (問題) に言われなくたって嫌でも、日常生活でわかってるんだよって感じだ。

好きなことを仕事にすること

[life][music][thinking] 自分がやりたい事を自分がやりたいからやる、というスタンス | Mon, Jan 9. 2006 - 氾濫原

昔の日記を読んでた。このへんの考えはやっぱり、なかなか変わらない。とはいえ今は結構マシだと思う。というかこれ書いたの2年前なのかって感じだなぁ。なんだかもっともっと前に感じられる。いろんなことがありすぎる。

最もタメになる「初心者用言語」は Lazy-K !

  • Unlambda みたいに統一された書きかたじゃないよ! There is more than one way to do it!
  • Schemeみたいに括弧だらけじゃないよ! でもそこそこ括弧だらけにもできるよ! TIMTOWTDI!
  • Pythonみたいにインデントを強制されたりしないよ!
  • Ruby みたいに lambda がダサくないよ!
  • Javaみたいに「まずクラスを作れ」とか言われないよ!
  • 覚えることがかなりすくないよ! とりあえず S と K と I だけでいいよ!
  • 変数の名前に困らないよ! 変数なんてないよ!
  • チューリング完全だよ!
  • 継続なんて黒魔法ないよ!
  • 関数以外本当に何も存在しないよ!
  • Brainf*ck みたいに下品な名前じゃないよ! FUCK! FUCK!
  • 選べることは正しいんだよ!
  • 今流行りの Y combinator も ```ss`s``s`ksk`k``sii と書いたり、SS(S(S(KS)K))(K(SII)) って書いたり、****i*i*i*ii*i*i*i*ii**i*i*i*ii***i*i*i*ii**i*i*ii*i*i*i*ii*i*i*ii**i*i*ii***i*i*i*ii*ii*ii って書いたり、11111111000111110001111110001111111000111100111110001110011110011111110001111111110000011111111100000 って書いたりできるよ! JavaScript (笑) よりだいたいみじかいね! *1

*1: print-as-unlambda とかしただけで、僕は Y combinator を理解してません