「どうせ大して変わらねえだろう」

という軽い気持ちでUSキーボードのパソコンを買ったんですが、違いの大きさに苦戦中です。USキーボードとvimについて現在の疑問を羅列してみました。

日本語変換キー

USキーボードではCmd+Spaceが日本語変換キーです。これは配置からいってどうにも押しづらい。KeyRemap4MacBookのCommand_R to Command_R(+ When you type Command_R only, send Command+Space)で右Cmdに割り当ててみましたが、コレ、完全に他のキーを押してない状態で右Cmdを押さないといけないのでかなり使い辛いです。普通みなさん何に割り当ててるんでしょうか?

vimのコロン

USキーボードではコロンはShiftを押す必要があります。vimで使いまくりのコロンが両手必須というのは厳しい。

noremap ; :
noremap : ;

という設定を教わって便利になりましたが、普通どうやってるんでしょうか?

他にもUSキーボード、vimユーザーなら普通はコレやってるぜ!というのがあったら教えていただければ嬉しいです。

photo

MacBook Airの11-inch買いました。

Apple Store Ginzaで

「11-inch USキーボードで一番良いのを頼む」

しました。(これまでは非Proの最初のユニボディMacBook)

量販店と違って、Apple Storeにはカスタマイズ済みのモノを在庫として持ってるそうで、店頭でその場で買えます。(発売当初は無かった)

そもそも僕にとってノートパソコンの最適サイズはこのぐらいなので13-inchはデカかったんですが、PowerBook以来、小さいのが出る様子が全くなかったので「アメリカさんは小さいのなんて要らないんや」と諦めてました。

スペックについてはこれまでのMacBookでもメモリ3GBでスワップすることは殆ど無かったし、CPUが遅いと感じることも無かったのであまり変わらない感じです。ディスクアクセスが必要な場面で速いぐらいです。HDDも以前のMacBookでも128GB以上使ってなかったので特に意識しないで使ってます。

使うアプリがFirefoxとTerminal(今は仕事でXcode)ぐらいなのでWeb系プログラマーはあまりスペックを必要としない人種なのかもしれませんな。(brew install mysqlしたときにFANが回ったぐらい)

オススメっす。

おまけ

buy now!!! on Twitpic

信者乙 > 俺

プラグインの管理画面へのリンク

Lokkaでプラグインで管理画面を持った時にプラグイン一覧からリンクしてくれるようにしました。

Test Site - Lokka

最初はプラグイン内でhave_admin_page(acts_as_fooみたいなの)を宣言するようにしてたんですが、頑張って、

Lokka側から "/admin/plugins/#{プラグイン名}"のページがプラグインに存在したらリンクを貼る。

というようにしました。

管理画面左メニューへの追加

また、管理画面の左メニューの一番下にyield_content :admin_menuというプラグインから挿入できるポイントを入れときました。複数回呼べるみたいなので、色んなプラグインから挿入されても大丈夫ですね。(順番はプラグインの読み込まれる順)

まだ、プラグイン内で管理画面作った場合の認証入れてないんですが、sinatra1.1のパス指定beforeを使えるようにしてからの方がいいかなと・・・。

テーマの方にもheader, footerという挿入できるポイントを入れようと思ってます。(全テーマ修正がだるい・・・)

- content_for :foo do
%p One
- content_for :foo do
%p Two
%h1 Hello, World!

Double content_for

2回同じ名前で呼んでも大丈夫みたいです。便利ー。

komagata's double-content-for at master - GitHub

僕の中で曖昧だったので、ユーザー分類を元にLokkaの開発方針をまとめてみました。

ユーザー分類

  • 閲覧者(visiter)
    • ブログを見に来る人
  • 投稿者(author)
    • ブログにエントリーを投稿する人
  • 管理者(administrator)
    • ブログを設置し、管理する人
  • 開発者(developer/designer)
    • プラグイン・テーマを作る人
  • コミッタ(commiter)
    • 本体を作る人

上(人数が多い)、下(人数が少ない)

上(影響が少ない)、下(影響が大きい)

ユーザー分類補足

  • 閲覧者
    • fc2とwordpressの見た目が殆ど付かない現状、閲覧者にとってはどのツールも違いがない。
  • 投稿者
    • ブログの体裁を取っていれば殆どの投稿者にとっては最低限投稿することは出来る模様。UI改善の余地は多少あり
  • 管理者
    • インストールの敷居がまだ高い
    • 職業Webデザイナーが多い
    • ローカルで開発するデザイナーは殆どいないらしい
      (Apache + MySQL or XAMPが必要等、敷居が高いため)
    • CMS/Blogツール導入の権限はココに該当する人にある
    • どれだけ管理者に好かれるツールであるかが最も重要。
  • 開発者
    • 上記管理者に好かれるツールになるかどうかは開発者の充実にかかっている。
    • テーマはデザイナー、プラグインはプログラマーが主に作ることを意識する必要がある。
  • コミッタ
    • コア内部よりも上記開発者に触れる部分をどれだけ簡単でクリーンに出来るかが重要だと思われる。コミッタはそれ程大勢になるわけではないので開発者への奉仕に注力する必要がある。
    • フルタイムのコミッタがいるプロジェクトは成功率が高いらしい

どんなソフトウェアを目指すのか?(スローガン)

  • CMS for Cloud
    • クラウド環境で良く動く
  • 打倒WordPress
    • 協調や補完では無く打倒。
    • WordPressを置き換えるモノで無くてはならない。つまり現状のWordPressユーザーが置き換えたくなる機能が必要。

必ず実現したいこと

  • デフォルトでHeroku(or GAE)で良く動くこと
    • ファイルのWriteや大量DB消費があってはならない
  • Windows, Mac, Linuxでzipを解凍すれば動くこと
    • デザイナーがローカル環境で作業するのに必須
  • zipを解凍してフォルダに置くだけでプラグインが動くこと
    • WordPressユーザーにとって必須
  • 少なくとも1つ、現実的な分散環境で簡単に動くこと
    • プライベートクラウドで簡単に動くようにするということ
    • mongodbとかkumofsとかromaとかそういうの。

できれば実現したいこと

  • 本体とプラグインがgem
  • プラグインが単体でテストし易い
    • 本体のgem化が出来ればこれもできることになる

要は?

  1. ファイルのWriteしない(=クラウド対応)
  2. RDB, KVS, Document指向DBに対応
  3. zip解凍で動く
今のところこれがこのソフトの存在意義。これが出来なければ作る意味が無いので気をつけていきたい。

@nkmrshnさんの素晴らしいまとめ。Optionを使ってるコードとかまだ他で見たことないので素敵ですw

作成したLokkaプラグインのまとめ - nkmrshnの日記

  1. プラグインで使用するgemを、Gemfileと別にプラグイン側で管理する方法。(現状:Lokka本体のGemfileに書くしかない。)
  2. プラグインで使用するi18nのen/ja.yml。(現状:Lokka保体のen/ja.ymlに追記するしかない。)
  3. プラグインの読み込む順番。(現状:読み込む順番を設定できない。)
  4. プラグインの有効・無効。(現状:public/plugin/lokka-<プラグイン名>は全部有効。)
  5. プラグインのアップロード・削除機能。(現状:ターミナルのコマンドなどでプラグインファイルを追加・削除する必要がある。)
  6. public/admin/layout.hamlのdiv#aside(左側サイドメニュー)にプラグインのメニュー項目を追加。(現状:layout.hamlに追記するしかない。)

コメント欄に書いたらエラー?が出たのでココに書きます。(以下俺)

おおお、すばらしいまとめありがとうございます!

最後の6点は僕もどう本体を実装すべきか悩んでおります。

  1. C拡張を含むメジャーなgemは本体に同伴し、pluginで必要な(Pure Rubyの)gemはpluginに同伴してもらう?
  2. 頑張ればplugin毎のi18nを読み込める?拙作のdm-validations-i18nとあわせて対応できるか?r18nの利用を継続するか?
  3. railsのようにルールさえ明確ならば指定出来る必要は無い?
  4. DBで管理すれば可能だがWordPressであんまり必要性を感じてないので検討中。
  5. 実装方法が思いつかない・・・(基本WRITE出来ない環境を想定してるので現状でいいかも?)
  6. やり方を決めればいいだけなんですが、選択肢が有り過ぎてしっくりくる方法を思いついていない。文字列とリンクURLの構造体を持つ?xxxxx.{erb,haml,erubis}があったらそれを表示する?

という感じです。

やっぱりプラグインを書いてみた人本人でないとわからない点が沢山あるとおもいますので、「こうしたほうがいい」というところがあればお教えいただけると嬉しいです!

何故オライリーの本を買うのか - komagata [p0t]

以前こんな事を書きましたが、これはある種の宗教的イニシエーションやショッキングな体験、感動的な出来事、などといったものと同じく自分の脳の構造の変化を起こすものだと思います。(苦痛と快楽がセットになってるし)

脳を神経系の繋ぎ直しによるプログラマブルなハードウェアだと仮定した場合、ある一定上のショックを受けるとそれに影響を受けた構造の最適化が行われるというようなモデルを想像してしまいます。

20歳で職業プログラマーになってから12年間で上記のような事を繰り返すうちに大分偏った構造になっていて、それを意識した学習方法を選択するのが新しい事を覚えるには特に大事だと最近強く意識しています。

残念なGC - komagata [p0t]

"直近の目的に繋がらない知識は寝ると忘れてしまう"、"3年より昔の事は殆ど忘れてしまう"、"直近の目的に繋がる知識は簡単に覚える事ができる"といったメリットとデメリットを持つ脳ミソに訓練されてしまったように思えてなりません。

デメリットも結構感じていて、例えば僕は小中高と特別幸福でも不幸でもない普通っぽい学生時代を送ったとは思いますが、それにしても学生時代のことを殆ど覚えていません。色々あったはずなのに・・・。

多分、デスマとかを乗り切る為にそういう記憶を犠牲にしてインフラのバッドノウハウとか微妙な関数とかを覚えることに使ってしまってるんでしょう・・・。

色んなタイプがあると思いますが、例えば、大学で物事を体系的に勉強することでその先の確かな成果を幾度も体験して来た人にはキッチリと基礎から学習する方法が習得しやすいだろうし、僕の様に現場から入ってしまった人は、まず目的に必要なものをでっち上げ、後でそれの裏にある背景や理論を勉強すると、

「なるほど〜 だからアレはあーなってたのかー!」

と楽しく学習することができます。順番が逆だと寝れば忘れてしまうので1日しか持ちません・・・。

この脳の構造はちょっと嫌ですが、12年も繰り返し洗脳?されてきた脳を変えるには薬物を使ったり、うつ病の治療に使われる電気ショックとか、生死の境をさ迷う体験とかをしないと駄目っぽそうです・・・。

Parens Language in Scheme on iOS - * *scrap*

同作者のソースコードビュアー”Source Code”は滅茶苦茶便利じゃないですかコレ。

http限定だけどGit, Mercurial, Subversion, zip, ファイル直指定に対応。githubやbitbucketの公開リポジトリにあるソースをサクっとダウンロードして閲覧できます。

リポジトリじゃなくても読みたいテキストをzipに固めてdropboxとかに突っ込んでおけばOK。

糞便利過ぎる!俺が求めてたアプリはこれだ!

長文テキストを読むのが一番楽なデバイスはiPadよりPCよりiPhone(多分Androidも同じ)だと思います。

自分のiPhone時間(=移動中)の中で気になっているフェーズがあります。それは"はてブおもしろ"とかのゴシップを読むフェーズです。俺的iPhone時間優先順位は下記のようになっています。

  1. 未読メールがあったら読む。無かったら次へ。
  2. 未読フィードがあったら読む。無かったら次へ。(フロー的なニュースなどは購読しない)
  3. 未読DM, Mentionsがあったら読む。無かったら次へ。
  4. 未読ホッテントリ(コンピュータ・IT)があったら読む。無かったら次へ。
  5. 未読ホッテントリ(おもしろ)があったら読む。2chまとめを含めると無限にあるので読み終わることが無い。

この4と5を気になるプロジェクトのソースコードを読むことにあてられたらいいのになと常々考えていました。githubをsafariでみてもイマイチ読み辛いし断念していたのですが・・・。

このアプリで解決です!

photo

気になるプロジェクトをgithubからダウンロード。

photo

Sinatra 1.1の変更点押さえとかなきゃなー。

photo

sinatraのように1ファイルが長いプロジェクトに特に向いてますな。sinatra/base.rbで殆どの処理が書いてあるし。

photo

画面に収めたい場合はランドスケープしてピンチイン。

photo

黒背景じゃないと落ち着いてコードが読めない人の為に設定できる。syntax highlightingがあるともっと嬉しいんだけどな。line wrapは別に要らないかな〜?

基本的にGithubにあるものだけでiPhone時間は十分なのでGithub専用でも構わない。syntax highlightingありのアプリでもっと快適Code Readingしてるぜぇという方がいたら教えてください。

それは兎も角、かなりのLife changingアプリでした。

Source Code for iPhone and iPod touch on the iTunes App Store

LokkaにWordPressでいうwp_options的なサイト固有で何でも入れとける場所を作りました。(Lokkaではscript/console的なのは irb -r init.rbで出来ます)

% irb -r init.rb
>> Option.aksmet_key
=> nil
>> Option.aksmet_key = 'hoge'
=> "hoge"
>> Option.aksmet_key
=> "hoge"
>> Option.all
=> [#<Option @name="aksmet_key" @value=<not loaded> @created_at=Sun, 31 Oct 2010 00:01:02 +0900 @updated_at=Sun, 31 Oct 2010 00:01:02 +0900>]

lib/lokka/option.rb from komagata's lokka - GitHub

ソースは上記の通りです。name / valueしか持たないテーブルにmethod_missingでいれているだけです。

上の例の様にプラグインで値を保存したい時に、プラグイン毎にイチイチテーブルを作るまでもないもの(akismetのkeyとか)を保存する場所として用意しました。

% irb -r init.rb
>> @site = Site.first
=> #<Site @id=1 @title="Test Site" @description="description..." @theme="default" @created_at=Sun, 31 Oct 2010 00:06:39 +0900 @updated_at=Sun, 31 Oct 2010 00:06:39 +0900>
>> @site.akismet_key
=> "hoge"

また、Siteクラスのインスタンスから代入以外はOptionにproxyするようにしました。

追記:optionsテーブルが増えたので最新にした方は $ bundle exec rake db:migrate お願いします。

カルネージハート エクサ

(コイツがバイクみたいで速すぎる)

28日に発売されたカルネージハートエクサをPSPにダウンロード購入して3日目。プレイ時間は18時間。社会人失格だ。

ストーリーの前半、チュートリアル部分はとりあえず模範解答をメニューからペーストできるのでそれを繰り返してるだけでクリア出来る。それまではシミュレーションだが実践に入ると同時にチュートリアルは終了というわけだ。

真面目にチュートリアルをやると一つ一つパズル並にちゃんと正解を見つけないといけないのでかなり大変。でも言うとおりやれば本当に理解できる。俺はメンドイのでカンニング連発で終わらせた。

チュートリアルが終わると「自律型って面倒だなあ・・・」とげっそり。

「操縦型で火力ある車両型でも作って全弾撃ち尽くし外交(@鳥肌実)すればクリアできるだろう」

そんなふうに考えていた時期が俺にもありました。(@バキ)

まず、やってみて感じたのが、操縦型は結構大変ということです。想像以上に敵の移動速度や弾のスピードが速いし、操作も複雑なのでやるとかなり神経を使います。逆に自律型は最初はホントにアホで弱いけど、改良するたびに確実に強くなっていくため、「今回は気を抜いてやられてしまった」ということがありません。何度もリトライするのも自律型なら気軽にできます。

また、「3分間敵を足止めしろ」といったミッションもあるのが新鮮でした。敵を倒すと新しいのが湧いてくるため、なるべく直さないように、弱体化させつつ逃げまわるような動きが求められます。(なるべく弱い武器を使ったり)

というわけで自律型オンリーで進めてきたんですが、既に全ての操縦を人間がやるような操縦型ではまず勝てないような相手ばかりになってきました。

バイクみたいに外周を凄いスピードで回りながら地雷をばら撒くヤツ。ニュータイプ並の動きで後ろに回りこんで格闘してくるホバー型のヤツ。

こんなん操作で捉えきれません。スピードが速すぎて普通に弾打ってもまず当たらない。

恐らく操縦型も基本的には自動で、「全体を見て攻撃すべきターゲットを選ぶ」とか「戦況を判断して遠距離型から近距離型に切り替える」などといったプログラムするには難しいところを補っていく形になるんだと思います。

3機中1機しか操縦出来ませんが、他の2機と通信できるので、全体に指示を出していく監督的なプログラムになっていくのだと思います。そっちはそっちでやりごたえがありそうです。