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

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機と通信できるので、全体に指示を出していく監督的なプログラムになっていくのだと思います。そっちはそっちでやりごたえがありそうです。

また,これはある程度予想できたことだが,やはり本作は“操縦型”に軸足を置いている印象だ。それはチュートリアルにも現れており,シナリオモードではまず“操縦型”,つまりプレイヤーがリアルタイムでOKEを操作するタイプの解説が行われる。

また,これはある程度予想できたことだが,やはり本作は“操縦型”に軸足を置いている印象だ。それはチュートリアルにも現れており,シナリオモードではまず“操縦型”,つまりプレイヤーがリアルタイムでOKEを操作するタイプの解説が行われる。

とりあえず昨日・今日と遊んだざっくりとした感想。ちなみに俺は初代とZEUSの途中までしかやってないので操作性の進化など「前作からあったよ」という点にもイチイチびっくりしたことは言っておきたい。

まず、チュートリアルが凄まじい。殆ど新しいプログラミング環境を覚えるのと同じ量の学習が必要なこのシリーズはまともにチュートリアルを作るとハンパない量になってしまう。(初代の投げっぱなし振りを見よ)

ところが、ストーリーに「家庭教師にロボットのプログラムを習う」というのが含まれてるのでストーリーを進めながら異常な程親切なチュートリアルが進む。これは見習いたい。ソーシャルアプリはかなり遊びながら覚えられるような作りになっているが、流石にここまで徹底的に超長いチュートリアルを飽きさせず作っている本作にはかなわない。

初代から裏技など、何らかの形でユーザーが直接ロボットを操作する方法が提供されていたが、今作は実にカルネージハートらしい方法でユーザー操作を取り入れている。

プログラミング的に言えば、「キーイベントが取れるようになった」と言えばわかりやすいと思う。(アナログパッドのX軸Y軸の値も取れるなどかなり本格的)

「十字キー右を押すと右に移動する」

という動作を実現するには、

  1. キー入力を受け付けるポイントを設定する。
  2. キーの状態(平たく言えばkeydown, keyup, keypressなど)によってif条件が設定できる。
  3. 上記条件を満たした場合だけ右に移動するチップを置く。

もちろん、上下左右、左右旋回、武装選択、攻撃などが予めよくあるキーに割り振られたプログラムもプリセットで存在する。しかしそれも単に自分でも作れる物の模範解答でしかなく、それを元に細かくカスタマイズをすることができる。

チュートリアルで関心したのが、まず上記のような"操縦型"のプログラミングを習い、プログラミングに慣れ、課題で敵を倒す爽快感を味合わせた上で、「じゃあ今度は今やったのを全自動で処理するロボットを作ってみましょう」という流れになるところだ。

例えば、敵と自機の間に障害物がある場合、操縦型なら単に目視して回りこめばいいだけだが、自律型の場合は"敵の追跡"と"障害物の回避"という部分を完全自動化する必要がある。

しかも面白いのが、基本的にロボットは3対3で戦うのだが、プレイヤーは一人しかいないのだからもちろん操縦型は1機しか操縦することができない。残りの2機は必ず自律型をプログラミングする必要があるというところだ。

操縦型もカルネージハートは可能な操作があまりに多いので(武装が5種類、オプションが3種類、移動方法も通常移動、旋回、緊急移動にジャンプ。更に機体ごとの特殊動作が2種類などある)人間の操作で全てをコントロールするのはウメハラじゃないと無理がある。そこで「◯ボタンを押したら、前方90度の範囲で一番近い的に武装1を4発発射する」などマクロの様に操作を補う形でプログラムすることができる。まだやったことは無いが、後ろ方向の50m以内に格闘体制に入っている敵がいたら全ての処理を中段して自動的に前にジャンプするなどといったプログラムも可能だろう。

また、初代ではやはりある程度後半で手に入る機体や武装の方が強いという感じだったのが最新作では機体だけでも37種類もあるのに、それぞれが一長一短(オールラウンダーもそれ固有の弱点がある)で、スペックだけでは分からない使い勝手などもあり、面白い。

まだプログラマーになってもいなかった初代発売時(1995年)と比べると確かに、「無制限の環境でプログラミングしたい」と思わないでもないが、制限があるからこその固有の面白さがある。

PSPがあれば簡単にダウンロード購入できるのでプログラマーの人もそうでない人も是非やってみて欲しいと思う。

Publickeyにスポンサー広告の依頼があったそうです。別に僕は知り合いでも何でもないんですが、好きなサイトだったので何か嬉しい・・・と思ったら、

感謝! Publickeyに初めてスポンサー広告が入りました - Publickey

しかし今年の夏、7月にはサイバーエージェント様から、イベントの集客のためにと広告の依頼があり、そのときに初めて2週間のバナー広告とタイアップ記事広告を掲載させていただきました。

サイバーエージェントのStartups2010が初めてのバナー広告だったのか。これはびっくり。何故ならPublickeyにStartups2010の広告が載ったのは一部、僕のせいであるかもしれないからです。

Publickeyがオススメ

今年の7月中旬頃、スペイシーズ@ebiharahideyukiさんが、

@ebiharahideyuki「来月頭のイベント、かなり大きい会場借りちゃったのに申し込みまだ全然少ないですよ。ヤバイっすよ。」

@ebiharahideyuki「広告とか出したいんですが、エンジニアの人達って普段どういうサイトを見てるんですか?」

僕と@dandasoはそれぞれ「Publickey」「Agile Cat」をオススメしておきました。

僕「Agile Catって何?」

@dandaso「Hadoopとかのブログでよく見てます。」

Agile Cat — Azure & Hadoop — Talking Book

僕「(手元で検索して)、へーって、ちょwww、この猫wwww、これがAgile Cat?www 適当に自分ちの猫とってGIMPで切り抜いたんじゃないの?www」

(これをきっかけに購読するようになりました。3ヶ月前までは存在も知らなかったなんて今では考えられません・・・)

@ebiharahideyuki「へー、こういうサイトがあるんですねー」

という単なる軽い雑談だったんですが、数日後には両方のサイト共に広告のってるし、Publickeyにはタイアップ記事まで上がっててびっくりしました。はやっ。

一応、僕も自分なりの支援エントリーを書いてみたんですが、そんな必要もなくイベント当日は盛況だったみたいです。

ITベンチャー起業支援 - komagata [p0t]

Publickeyをオススメした理由ときっかけ

丁度その時期、Publickeyってすげーいいサイトがある!って自分の中でブームだったんです。今ははてブ常連ですが、その時は「マイナーだけど密かにスゲー良いサイトじゃね?」「Publickeyの良さが分かるのはわしだけで十分じゃ」などと思っていたのです。(振り返ってみれば結構みんな知ってたわけですが・・・)

きっかけは確かPerl5と6の開発におけるコミュニティの内部事情のエントリだったと思います。

Perl 5は生き返った! 新たな前進を再開したPerl - Publickey

ビジネスな視点と開発者の視点のバランスが丁度良く(開発者に寄り過ぎぐらいが丁度良い)、"TechCrunchとInfoQの中間ぐらいの塩梅のメディア"が欲しいと思ってた自分にハマりました。

@ebiharahideyukiさんが集客したいイベント、Starups2010の対象は"起業志向のあるエンジニア"とのことだったのでPublickeyなんてぴったりじゃね?って思った次第です。

Java 4-everのエントリも面白かったなあ。

マイクロソフトに厳格な一家を襲う悲劇。Javaよ永遠なれ - Publickey

少年は青年となり、禁じられた技術をこっそり友人と試すようになる。「こいつはスゲー、ロバストで、セキュアで、ポータブルで、スケーラブルじゃんか!」

糞ギーク達を喜ばせることは無駄じゃない

要するに何が言いたいのかというと、「僕の様な仕事でも趣味でもコードばっかり書いてる様な糞プログラマーが喜ぶサイトを作ることも、こういう経路でお金を持った企業とつながることがある」ということです。

そういった背景にはソーシャルアプリのヒットなどによりエンジニアの需要(社会的価値)が上がっている(のか?)ことも関係してると思います。

Publickeyのような(僕にとって)良質な記事を書くサイトがちゃんと運営してるくらい儲かるような状況になっていくのは喜ばしいことです。実際にちゃんと集客できたという実績もあることだし、どんどんそういった広告が入るといいですね!