トマトが切れれば、メシ屋はできる 栓が抜ければ、飲み屋ができる

飲食店経営者の成功自慢的なエピソードかなと思って読み始めたんだけど、全然違って、商売とはどういうものかということが分かりやすく書かれている(が実践するのは難しいんだろう)。さらりとやってのけるあたりがすごいなぁと思う。

店を作るときは、どんな店をやったら流行るかばかりを考えるんじゃなく、自分自身が心から楽しいと思える店をやる。それが、長く商売を続けていく基本

売るということ

  1. メニューを企画して
  2. 仕入れをして
  3. 作って
  4. それをPRして
  5. お客さんに「どうですか?」ってアフターフォローをする

創薬もいっしょですな

Emacsの短形領域が便利すぎる

Emacs Rocks! Episode 01: From var to thisを見ていて、これってEmacsで複数行の行頭空白を削除する方法の逆パターンか!と思ったのだがkill-rectangleはC-x r kにアサインされていることを知った。

それから、C-sで検索すると検索開始位置が勝手にマークされるのを知らなかった。もっと使おうっと。

このブログはmarkdown記法で書いているのでコードを貼り付けるときにスペース4文字挿入しないといけないんだけど、文字幅0の短形領域を選択すれば簡単にspace x 4を挿入できる。いままではdmacro.elで繰り返してたけど、C-x r tのやり方のほうが快適だ。

使い始めると短形領域をkillしたりyankしたりしたくなるとおもうんだけど、それはC-x r k(y)でオッケー

参考

Emacsを23系から24.2に変更中

そのままでは23での.emacs.dの設定が動かなかったので、スクラッチから書き直している。

大きく変えたのは

  • パッケージの管理がpackage.el (+ auto-install.el)にした
  • テーマを組み込みのにした

magitとかjs2-modeはインストールしただけで動くし結構楽かな。一方でmaximize-windowっていうコマンドが使えるようになったのだけどosxでは動かないし、window-sizeを変更すると上の何行かにアクセスできなくなったりして困っている。

ちょうどいいのでGitHubで管理するようにしたけどコマンド一発で環境ができるようにしたいなぁ。

macbookでお悩み中

今はmacbook 2008 earlyにメモリを4G,HDDを500Gに増設してつかっているのだが、Titanium Mobileのアプリのbuildにやたら時間がかかるのでそろそろ買い換えたい気分になってきた。

前提として、HDDにデータが250Gくらい入っていて、そのうち150Gくらいは写真とmp3だったりするので写真はDVDに焼いてNASに移動したんだけど、mp3はTraktor使っている関係であまり多くは移せなさそう。結局70Gは必要そう。となると128Gは全然足りなくて、必然的に最低256Gが必要ってことになる。

先にも書いたようにTitanium Mobileアプリが快適にビルドされて欲しいのでメモリも8G必須

ノートブックをあーでもないこーでもないと比較した挙句、候補としては

  • macbook air 13 256G SSDに8Gメモリを積む(1.35Kg)
  • macbook pro 13 2.9 GHz(2.06 kg)
  • macbook pro retina 13 256G SSD (1.62Kg)

macbook pro retinaだったらmacbook pro retina 15 256G SSDと変わんないじゃん!?っていう値段になっていて、だったらそっちにしたほうがいいじゃんという気持ちもある。

一方で、そろそろ毎日車で通勤往復二時間は飽きたなっていうところもあって、電車通勤したいなーと考えた場合にmacbook airの軽さは魅力。macbook airを買ってその勢いで転職活動をしてしまえという勢いも感じなくはない。静岡は美味しいものいっぱいあるし、泰平居酒屋だって行ってみたい。それか東京に新幹線通勤でもいいしなー。

結局macbook airでいいかなぁーと思っていたところ、これ読んでぐらついた(スナップショットが綺麗なんだもん)

というわけでmacbook pro retina 13に踏み切れない自分がいるのであった。

kichi to naru kitchen にいった

子連れはさすがに場違いかなーと思いつつも、日曜はマッタリ感が漂っているのでそれほどでもなかったかな(他にも子供連れがいたしな)

1352201620

一番奥のヒダのついているのはシカクマメというらしい。シャキシャキの食感が美味しかった。その手前の白いのは人参、香りも人参だった。これまたうまい。

1352201622

コンフィ最高。その前に長谷川農園のマッシュルームのオイル煮を食べてるんだけど。

1352201624

鶏の唐揚げは旨かったんだけど、量が結構あったので頼みすぎたかな。

1352201625

娘のデザート。りんごの食感が良かった。

1352201627

また行きたい

Alloyのモデル

ドキュメントによると、

Alloy uses Backbone.js to provide support for its models and collections. Alloy also borrows the concepts of migrations and adapters from Rails for storage integration.

ということでmodelの仕組みはbackbone.jsっぽくてマイグレーションはRoRっぽいが、設定周りがちょっと違う。

  • 'sql' for the SQLite database on the Android and iOS platform.
  • 'localStorage' for HTML5 localStorage on the Mobile Web platform.
  • 'properties' for storing data locally in the Titanium SDK context.

とどのストレージを使うか選ぶ。backbone.jsとかspine.jsだとlocalstrageかrestなところが選択肢が増えたことで型とか設定するようになっている。

モデルの変更とかで送られてくるイベントの種類はドキュメントに書いてないのでソースコード読まないといけないっぽいんだけど、backbone.jsと同じかなと思っている。

alloy / test / apps / models / propertiesを眺めてみたんだけどcollectionの位置づけがわからなかった(backbone.jsのコレクションとモデルって分かれてるよね)。

なんか書いてみないとダメだな。

AlloyのTSSで演算させる

alloy / test / apps / advanced / themesはconfig.jsonでプラットフォームごとにテーマを切り替えるというサンプル。

alloy themes

TSSっていうのはAlloyのスタイルシート(CSS)みたいなものだが、exprを使うと演算できる。昨日@k0sukeyが言ってたのはこれのことかと今更理解したわけだが。

スライダーが縦になっているが、これはTSSをみると

"#slider": {
    leftTrackImage: '/title_green.png',
    top: 228, 
    left: -145,
    width: 350,
    transform: expr(Titanium.UI.create2DMatrix().rotate(-90))
},

こんな感じで縦方向に-90度回転されている。

Alloyでの継承(というより別のところが理解できてない)

alloy / test / apps / advanced / inheritanceを読んでみた。継承は分かりやすいが、windowまわりがいまいちわからん。

controller/index.js

$.index.open();

function openDialog(e) {  
    Alloy.createController(e.source.title, {
        message: 'Opened ' + e.source.title
    }).openDialog($.index);
}

createControllerメソッドで文字列を渡すとコントローラーが作られる。

views/index.xmlはこんな感じになっていて

<Alloy>
    <Window>
        <View layout="vertical">
            <Button onClick="openDialog">baseDialog</Button>
            <Button onClick="openDialog">animatedDialog</Button>
        </View>
    </Window>
</Alloy>

Buttonのtextじゃなくてtitleで渡される(e.source.title)みたいだ。コード追っかけててちょっと引っかかった。

openDialogメソッドはそれぞれのコントローラーで実装されている。

controllers/baseDialog.js

var args = arguments[0] || {};
$.message.text = args.message || 'dialog';

exports.openDialog = function(win) {
    $.refWin = win; 
    $.refWin.add($.cover);
    $.refWin.add($.dialog);
}

exports.closeDialog = function() {
    $.refWin.remove($.cover);
    $.refWin.remove($.dialog);
    $.refWin = $.cover = $.dialog = null;   
}

refWinってなんだよ?と思ったが新しい属性作って放り込んでいるだけなのかな?あとWindowにWindowを追加してんの?($.refWin.add)。それとも$.cover,$dialogはviewなんだろうか?コンパイル後のコードを読むにはどうしたらいいんだろうか?

継承はexports.baseControllerにスーパークラスを指定する。あとは普通にメソッドを上書きすればいい。

// Establish inheritance from baseDialog
exports.baseController = 'baseDialog';

// Override baseDialog's openDialog() function. We will still
// be able to use baseDialog's closeDialog() function.
exports.openDialog = function(win) {
    $.refWin = win; 
 ...

}

飼い犬が8歳になった

すっかりおばさん顔

1351985705

ジャーキーがろうそく代わり

1351985703

静岡 Titanium Mobile もくもく会に参加した

参加されたみなさんお疲れ様でした。

titanium cliでのアプリ開発の流れを学んだのが大きな収穫だった。Titanium Studioを使わずにEmacsで開発できるようになるのは個人的には非常に大きい。

ステッカー頂いた。

1351985625

インストールとか使い方は先取り “新” Titanium CLIの通りなんだが、titanium createコマンドがなかったのでちょっと躓いた。結局Developer Preview: The New Titanium Command Line Interfaceにあるように

titanium sdk install --branch 3_0_X --default

と打って、3.0系を入れることでtitanium createが使えるようになった。

もくもく会ではtodoMVCをalloyでやるつもりだったんだけど、Alloyのドキュメント読んで、Test/Basicsを触ったら終わってしまった。

todoサンプルを見つけたのでこっちも読んでみる。

その他

  • iPad miniは実物みると欲しくなる
  • mac book pro retina素敵。コンパイル速くて羨ましい(僕のはmacbook 2008 early)