23112012 ebook
と気になったので稲中購入。めくる方向が普通の本と違って漫画と一緒なので最初戸惑った。
蟲師も気になるところではあるが。
伝染るんですは電子書籍化されてなかった。待ち遠しい
23112012 ebook
と気になったので稲中購入。めくる方向が普通の本と違って漫画と一緒なので最初戸惑った。
蟲師も気になるところではあるが。
伝染るんですは電子書籍化されてなかった。待ち遠しい
23112012 ebook
「Kindle自費出版ガイド」という電子書籍作成ノウハウ満載なミニコンテンツが興味深い件につられて購入して読んでみたが、必要なことが書いてあって僕にとっては費用対効果が高かったので満足。
レビューにはページ数に対して価格が高いか安いかという評価が多いようだが、そのコンテンツが幾らで消費されるべきものなのか?という観点で考えると興味深いかも。本書はブログの優良な1エントリぐらいの量だが、これが100円で消費されているわけですよね?ということはKindleで見れたほうが便利なブログのエントリはKDPでも買えるようにしておくとブログのAuthorも消費者もハッピーになれるwin-winなモデルになるのかなぁと。
例えばEmacsの設定みたいな設定系のやつとかquickstart系のエントリはKDPに持って行きやすいような気もする。Dive Into Python3なんかはそんな感じだよね。情報のポータビリティにお金を払うのか、コンテンツの内容にお金を払うのかはちょっと考える必要があるのかもしれないけど。
例えば、はてブが一定以上ついて、それが継続的に続くようだったらKDPに移行するっていう出版モデルがあってもいいのかなぁと思ったりもする。それは、日経だかどこかみたいに2ページ目移行はログインが必要な感じのを真似して元エントリを削除してamazonへのリンクにしてもいいのかなぁと思う。そっちのほうがgoogle adsenseとかメルマガよりコンテンツの消費の仕方というか課金モデルとして健全な気がするしなぁ。
23112012 javascript iPhone Ti
Titanium Mobile iPhone/Androidアプリ開発入門の簡易RSSリーダーをAlloyで書きなおしてみた

CoffeeScrptで開発する方法については、ここを参照のこと。
軽くハマったのはviewかな。
最初TabGroupにidを設定したら、$.index.openでエラーがでた。
結局$.indexってなんじゃろか?とドキュメントを読んだら解決した。
要するにViewのトップレベルには
のいずれかが必要で、idが明示的に指定されてない場合には、そのファイル名がidとして利用される。
規約に従うことにしたらxmlはシンプルになった。
<Alloy> <TabGroup> </TabGroup> </Alloy>
コントローラーは本の通りに。スタイルとかも全部コントローラーに書いちゃったのでindex.tssはいじってない。
createApplicationTabGroup = -> tab1 = createRSSTab 'Developer Blog', 'http://developer.appcelerator.com/blog/feed' tab2 = createRSSTab 'Q&A', 'http://developer.appcelerator.com/questions/feed/newest' $.index.addTab tab1 $.index.addTab tab2 return createRSSTab = (title, url) -> win = Ti.UI.createWindow title: title tab = Ti.UI.createTab title: title icon: 'KS_nav_views.png' window: win tableView = Ti.UI.createTableView {data:[]} win.add(tableView) win.addEventListener 'open', -> query = String.format "select * from rss where url = '%s'", url Ti.Yahoo.yql query, (res) -> if res.success is false alert("Yahoo YQL error.") return res.data.item.forEach (item) -> tableView.appendRow title: item.title color: '#000' link: item.link hasChild: true return tableView.addEventListener 'click', (event) -> detailWin = Ti.UI.createWindow {title: event.rowData.title, backgroundColor: '#fff'} webView = Ti.UI.createWebView {url: event.rowData.link} detailWin.add(webView) tab.open(detailWin) return return tab createApplicationTabGroup() $.index.open()
22112012 life
zenbackの何がいいかというとSNSのボタンというより関連記事をまとめてくれることだ。
僕の場合は筆頭想定読者が自分なので、昔考えてエントリにしたことが関連記事で出てくると、思いがけず反芻することができたりして、そのおかげで当時よりも理解がすすんだり、もう一歩踏み込んだアイデアが浮かんだりするので重宝している。昨日再発見したこれなんかもエレベータで数階上がった感覚が得られた。
思考というか課題というのは螺旋を描きながら前進するものだろ思っているので、一周廻ったあたりでタイミングよく振り返るツールとしてzenbackの関連記事はいい機能だと思うんだがどうなんだろうか?
そしてblogは情報発信というよりは情報収集のためのアンテナとして優れているのだと思う(たぶん昔書いたような気もするが)その当時はコメントとかトラックバックでエントリ以上の質のレスポンスがあって、非常に勉強になったわけだが、いまはそれらはtwitterが担っているのだと思う。
というのは、ちょっと前に隠れフォロワー(twitterのアカウント持たずにtweetを補足するというアレ)に補足されるのが嫌になって鍵をかけたらレスポンスが激減していいことがなかったのでもとに戻したんだけど、その結果twitterはコメントツールの役割も担っているんだなぁ認識したので。
一方でfacebookは思考の幅を広げるには大して役にたたない(すくなくともblogのレスポンスとしては役に立ったことがない)。というか「いいね!」を押したからといって何がどうなるんだという。
そんな感じのことを考えながら澤の花を呑んでた。
21112012 javascript
気になっている本
Smashing Node.js: JavaScript Everywhere (Smashing Magazine Book Series)20112012 life
web分析系はよくわからない三文字表記が多いので、それらを覚えるのに都合が良かった。内容も基礎的だけど丁寧に解説されていたので、わかりやすかった。
ウェブ分析では、サイトの目的・目標を「KGI(Key Goal Indicator)」と呼びます。ここで重要なのは目的を数値化することです

CSF(Critical Success Factor)とはKGIに決定的な影響を及ぼす要因。これをさらに具体的な数値目標に落とすとKPI(Key Performance Indicator)になる。
talknoteで聞いたユーザータイムラインは本書で言うところのコンセプトダイアグラムと同じものかな。
統計のあたりは流し読みで十分だった。
ウェブに関するデータで正規分布するものはほとんどない
と触れられていたが、正規分布がどういう分布か知っていればまぁそうだろうなと。それからP.90の時系列データを多項式近似するのは乱暴だなと思ったけど、入門者向けの説明だからいいのかな。逆にそのくらい粗い近似でいいというのが不思議な気もするがそういうもんなのかな。
検索ワードには来訪者の「目的」や「期待」が表れる
検索エンジンからの流入分析じゃなくてソーシャルメディアの分析も面白いなと最近思うようになってきたので、facebookインサイトの説明は役に立った。
まぁ試行錯誤するタイプの分析は本読むよりは自分でやってみるに限るなとというか数をこなさないとダメだな。
ポップでキッチュな表紙のあの本とは直接関係ありませんが、今週末に三島Haskell無名関数の会 第一回目があるので、興味があれば参加されると楽しいと思います。というより、そろそろ関数型プログラミングの勉強会を定期的に開催していければなぁと思います。
初学者の@ando_ando_andoも参加するということなので、快適なHaskellコーディング環境をつくるという話をしようと思っています。
とりあえず、タイトルと表紙だけつくってみました。

それから、世界観が大切だと思うのでそういうものもちゃんと考慮してあります。
つまり我々はEmacsを信じHaskellを推進しなければならないのです。
19112012 Emacs
Emacs RocksのEpisode 01: From var to thisを見ていて、C-sすると自動的に検索開始時点の位置がマークされることを知った。
ということはC-x C-xで戻れるってことじゃないかと。
他にはexpand-regionってのが便利そうだったので、入れた(list-packagesで選択できる)。
18112012 javascript Emacs coffeescript Ti
犬が早朝から吠えたので4時に叩き起こされたが、タイムラインを追いかけていたらAlloy with CoffeeScript のお誘いというこれは!というエントリがあがっていたので、早速誘われてみた。尚、jsとcoffeeは一緒のディレクトリに置いておくのが好みなので@k0sukeyのオリジナルなjmkに変更をくわえてあります。
Titanium Mobile iPhone/Androidアプリ開発入門のストップウォッチを参考にしました。
本書ではui.jsという1つのファイルで完結していますがAlloyのようなMVCフレームワークを使ったほうがコードの見通しは良くなると思います。
$ titanium create stopwatch # 対話でターゲットデバイスやapp-id設定 $ cd stopwatch $ alloy new # alloyのひな形作成 $ alloy generate jmk
stopwatch/app/alloy.jmkを以下のように書きなおす。これでapp/controller のcoffeeファイルはalloy compileでコンパイルされるようになります。
task("pre:compile", function(event,logger) { var wrench = require("wrench"), fs = require("fs"), path = require("path"), controller_root = event.dir.controllers, coffee = require("coffee-script"); wrench.readdirSyncRecursive(controller_root).forEach(function(controller){ if (controller.match("coffee$")) { fs.writeFileSync( path.join(controller_root,controller.replace("coffee", "js")), coffee.compile( fs.readFileSync(path.join(controller_root, controller)).toString(), { bare: true })); } }); }); task("post:compile",function(event,logger){ });
あとは普通に。
app/views/index.xml
<Alloy> <TabGroup> <Tab id="tab1" icon="dark_clock.png" title="ストップウォッチ"> <Window id="window1" title="ストップウォッチ"> <Label id="label"> 00:00:00.000 </Label> <Button id="button"> Start </Button> </Window> </Tab> <Tab id="tab2" icon="dark_info.png" title="使い方"> <Window id="window2" title="使い方"> <WebView url="howto.html"> </WebView> </Window> </Tab> </TabGroup> </Alloy>
/app/styles/index.tss
{"Window": { "barColor": "#000", "backgroundColor": "#000" }, "Tab": { "backgroundColor": "#000" }, "#label": { "color": "#fff", "width": "auto", "height": "auto", "font": { "fontSize": 40, "fontWeight": "bold" } }, "#button": { "color": "#000", "width": 150, "height": 40, "bottom": 30 }}
webview用のhtmlは /app/assets/iphone/howto.htmlに
<html> <head> <title>使い方</title> </head> <body> <h1>使い方</h1>このサンプル は<a href="http://www.amazon.co.jp/dp/479803231X">Titanium Mobile iPhone/Androidアプリ開発入門</a>のストップウォッチのサンプルをAlloyで 書きなおしてみたものです。 <img src="http://ec2.images-amazon.com/images/I/41jDZ5IY01L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU09_.jpg"/> </body> 興味を持ったら購入して読んでみるとよいと思いますよ。 </html>
最後にcoffeeをapp/controllers/index.coffeeに
started =false intervalID = null startStopwatch = -> $.label.text = "00:00:00.000" startTime = new Date() _updateTimer = -> u_sec = 1000 u_min = 60 * u_sec u_hour = 60 * u_min now = new Date() diff = now - startTime hour = Math.floor(diff/u_hour) min = Math.floor((diff - hour*u_hour)/u_min) sec = Math.floor((diff - hour*u_hour - min*u_min)/u_sec) msec = diff / u_sec $.label.text = ("0" + hour).slice(-2) + ":" + ("0" + min).slice(-2) + ":" + ("0" + sec).slice(-2) + "." + ("00" + msec).slice(-3) intervalID = setInterval(_updateTimer, 3) return $.button.addEventListener 'click', -> if started clearInterval(intervalID) $.button.title = "Start" started = false else startStopwatch() $.button.title = "Stop" started = true return $.index.open()
$ alloy run

Let's Enjoy!