03052013 life
自分で考えて分かるための表現と相手に伝えるための表現は違う。
- 受け手にどう読み取って欲しいかという解読方法も含める必要がある
画面構成のポイントと手法
- 要素の並べ方
- 画面のフレーム
- ノイズをそぎ落とすこと
その他
- ピクトグラムは強い表現力
- 表は罫線のコントロールが重要
03052013 life
自分で考えて分かるための表現と相手に伝えるための表現は違う。
画面構成のポイントと手法
その他
02052013 Sass
連休中にちょっとつくりたい自分用ウェブサービスがあるんだけど、twitter-bootstrapもなぁということで他の代替(Flatっぽいやつ)を探してみたらFoundation4(定番?)かGumby2のどちらかかなぁ。
ちなみにSass+Compassで使えるものを探しています。
gem install zurb-foundationでさくっとインストールできた。必要なコンポーネントをアンコメントして有効にするようになっているので、必要以上に肥大化しなくていいかもと思っている。
git cloneして使うのかな?gemでインストールできるのかどうかはわからん。
これからドキュメントを読む予定。
あうのかあわないのかはっきりしろや!的なCLIを書いてみた。
自分のブログに似ているかどうかをベイズ分類しています。似てないのサンプルを集めるのが面倒だったけど、アメブロあたりから適当にチョイスしました。もちろん西野カナはあわないほうに分類しておいた。
一応、5/25の入門機械学習読書会の宣伝も兼ねているので、機械学習に興味があったり、つけナポリタンを食べたかったり、会いたかったり会えなかったりするヒトは参加するといいです。今日はPythonで書いていますが、次回の読書会では由緒正しきRでベイズ分類器を実装していきます。
例えば伊東のGentoo過激派と私の相性は
$ ./nk "http://blog.karky7.net/feeds/posts/default?alt=rss" きみにあうよ あうかな: ffmepgコマンドでmp4の動画からm4a(音声)を抜き出してみた あうかな: HACKING: 美しき策謀(第2版) がたまらなく面白い あうかな: gentooのpython-pptxで美人の水着画像をpptx化する あうかな: 静岡Python会、Shizuoka.py行ってきました あうかな: gentooのJuicyPixelsのebuildを作りました あうかな: gentooでudevのUpdateにはご注意下さい... あうかな: gentooで emacs + cscope を使ってタグジャンプでコードを飛びまくる あうかな: 2日酔いからPersistentでキーを使って直接データを引く あうかな: WebデザイナーこそGentooを使うべき4つの理由 あわない: 2013年 プログラマーの皆さん河津桜の季節です あうかな: Linuxでカーネルオプションを探す方法 あわない: 2013年 伊東オレンジビーチマラソン走りました あうかな: セガール君、お土産 in America あうかな: Sabayon Linuxにちょっと惹かれてしまった あわない: 新年の山走り行ってきました あうかな: HaskellのPersistent MySQLを試してみた あわない: 2012年大晦日オフロードツーリングへ行ってきたよ あうかな: LXCのネットワーク設定...続き あうかな: GentooでPersistent-MySQLのebuildを作ってみた あうかな: GentooのLXC(Linux Container)をやってみた あうかな: Gentooでemacs+haskell環境を作る あうかな: HaskellのFunctorのおさらい あうかな: TemplateHaskellを調べてみた あうかな: btrfsを実際に触ってみた あうかな: Gentoo + nginx + FastCGI PHP で高速PHP環境を構築する
余裕であえますね。これっぽっちも切なくなんかない。
eしずおかからお酒のブログ
$ ./nk http://osake.eshizuoka.jp/index.xml きみにあうよ あうかな: 富士山、世界遺産登録勧告ということで あわない: チケット3日で完売の、焼津の酒イベント あわない: さぁ今日は無礼講だ!季節限定ベアード あわない: ZUNビールの味に近いベアード販売中 あうかな: 再々入荷しました!幻の米の臥龍梅 あわない: 豊田一丁目、倉庫火災出動 あうかな: お寺の庭のゆず♪ 季節限定ベアード あうかな: 【入荷】志太泉の普通酒が普通じゃない あうかな: 5.3 由比桜えびまつりヽ(゚∀゚)ノ あわない: 裏鈴木酒店 『とある酒屋の超萌酒会2』 あうかな: 【入荷】英君の特別純米の袋吊り雫だ あうかな: 【入荷】杉錦の誉富士山廃純米生原酒 あうかな: 再入荷しました♪ 臥龍梅の渡船! あわない: 駿河区にまた大型ショッピングセンター あわない: 眼鏡っ娘のめがね拭きができました! あわない: 焼津のあの娘(仮)の、大きめ画像 あうかな: お手頃♪ 臥龍梅、純米吟醸ワンカップ あうかな: 【再入荷】最後の、そに子の痛茶です! あうかな: 【入荷】臥龍梅。幻すぎる、短稈渡船だ あわない: 静鉄の長沼駅でさりげなく萌えてみる
萌えよりも日本酒ってことでしょうか?あと、ビールも飲めってことかな。
というわけで、適当に作ったわりには良い感じで分類できている気がしますね。
$ ./nk --help Nishino Kana Usage: nk ([-l <conf>|--learn=<conf>] | <url>) Options: -h --help show this screen -l <conf> --learn=<conf> training
設定ファイルはjsonです。kanaがあうほうでanakがあわないほうです。
{ "kana": ["http://127.0.0.1:5000/rss/"], "anak": [ "http://feedblog.ameba.jp/rss/ameblo/nishino-kana/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/yamamo-tomato/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/financilthory011/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/hazu-r72t/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/hitomi19800911/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/1983mayumayu/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/2pmoneday2/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/to-meee/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/sa-ku-ra-0706/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/taiyakisuki8/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/pikatyu-tyu/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/urakamimieko/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/wins-motomiya/rss20.xml", "http://feedblog.ameba.jp/rss/ameblo/taisukekmft2/rss20.xml" ] }
#!/usr/bin/env python # -*- coding: utf-8 -*- import feedparser import MeCab import re import json import nltk from docopt import docopt import pickle html_tag = re.compile(r'<[^>]+>') cmd = """Nishino Kana Usage: nk ([-l <conf>|--learn=<conf>] | <url>) Options: -h --help show this screen -l <conf> --learn=<conf> training """ def morph(entry): txt = html_tag.sub('', entry.summary_detail.value) words = [] try: t = MeCab.Tagger() m = t.parseToNode(txt.encode('utf-8')) while m: if m.stat < 2: if re.match('名詞', m.feature): words.append(m.surface) m = m.next except RuntimeError: pass return words def feed_parse(url): d = feedparser.parse(url) words = [] for entry in d.entries: words.extend(morph(entry)) return words def extract_features(document): documentwords = set(document) return dict([('contains(%s)' % word, True) for word in documentwords]) def learn(conf): c = json.load(open(conf), encoding="utf-8") kana = [] anak = [] for url in c["kana"]: kana.extend(feed_parse(url)) for url in c["anak"]: anak.extend(feed_parse(url)) training_documents = [(kana, "kana"), (anak, "anak")] train_set = nltk.classify.apply_features(extract_features, training_documents) classifier = nltk.NaiveBayesClassifier.train(train_set) with open("classifier.pickle", "wb") as f: pickle.dump(classifier, f) def test(url): classifier = pickle.load(open("classifier.pickle")) d = feedparser.parse(url) rcode = {"kana": "あうかな", "anak": "あわない"} total = 0 result = {"status": None, "entry": []} for entry in d.entries: doc = morph(entry) r = classifier.classify(extract_features(doc)) if r == "kana": total += 1 result['entry'].append((rcode[r], entry.title.encode("utf-8"))) if total > 3: result['status'] = "きみにあうよ" else: result['status'] = "きみにあわないよ" return result if __name__ == '__main__': args = docopt(cmd) conf = args.get('--learn') url = args.get('<url>') if conf: learn(conf) elif url: r = test(url) print r['status'] print for code, title in r['entry']: print "{}: {}".format(code, title)
尚、TDMを構築するのが面倒だったのでNLTKを使いました。
30042013 富士
第2回は富士の吉原でやります。
今回は大きい部屋が埋まっていたため定員が少なめなのでご注意ください。
グルメ的にも移動的にもちょうどホットな話題が多いので、観光がてら参加するのもいいでしょう。
おやつは杉山フルーツの生ゼリーを用意しようかと思っています。
入門機械学習のサンプルコードについているインストーラは依存関係のあるパッケージも入れたりソースからインストールするようになっているのでエディタでinstall.packages関数をちょいといじるといいかもしれません。
for(p in cran.packages) { if(!suppressWarnings(require(p, character.only = TRUE, quietly = TRUE))) { cat(paste(p, "missing, will attempt to install\n")) install.packages(p) } else { cat(paste(p, "installed OK\n")) } }
29042013 家庭菜園
ちょこちょこ手入れしている。
エントリにしておかないと「いつ種を蒔いていつ芽が出たか」という記録がなくなるので、次の年にいつまくかのフィードバックがなくなるので困る。
これように別のウェブサービスをつくるべきかも
ジャガイモの芽がでたのと、エンドウの花が咲いた。
右はカリフラワー
空芯菜とモロヘイヤの種をまいた。ズッキーニは芽が出た
室内で育てていたオクラとゴーヤはひょろひょろになってしまった。
28042013 drum'n'bass
Rainy City Musicから始まりRainy City Musicで終わるんやーって組んだんだけど、最後のほうでグダった。
Rainy City Music / Dub Phizix Waveform / Phace & Misanthrop Thorn / BTK Kingpin (Calyx & Teebee Remix) / Friction & Skream feat Scrufizzer P Money & Riko Dan Ignition (TR Tactics Remix) / Optiv & BTK feat Ryme Tyme Beyond Our Dreams / J Majik & Wickaman Hey Brother / Nu Elementz & Ruffstuff Quartz Controlled / June Miller & Mindmapper Roxy / Nymfo & State Of Mind Run / Spinline Pacman (Ram Trilogy Remix) / Ed Rush & Optical The Unspoken / Technimatic Dribble VIP / Muffler This Is My World (Icicle Remix) / Jade Midnight Nation / Optiv Riptide / Optiv & BTK Right Here / Ulterior Motive Everything Is Everything / Utah Jazz & Alex Reece Let It Be (DJ Marky & SPY Remix) / Artificial Intelligence feat Steo Stand Alone / Artificial Intelligence Guardian / SpectraSoul Epic / Mikal From Autumn To Ashes / June Miller Blackout / Hive Drop It (Optiv Remix) / BTK The Kindred / Ed Rush & Optical Arcadia / Ed Rush Epic / Mikal ni ten ichi ryu / teebee Run It Like The President (feat. T Man) / Dub Phizix & Skeptical Rainy City Music / Dub Phizix
28042013 R
皆様お疲れ様でした。
今回初めてCCCを使いました。廃校になった小学校を転用した施設ですが、机と椅子はノスタルジーあふれるものではなかったですね。
2章の途中までやりましたので、次回は残りと3章を演る予定にしています。5/18といいましたが、Nginxとバッティングするのはよくないので次の週(5/25)にやる予定で調整します。多分富士になるので早めの昼に来て、つけナポリタンとかがんもいっちなんかを攻めるといいです。
それから、今回は懇親会をいれなかったので、次回からはいつものように設定していこうと思っています。 ちなみにアナウンスとか調整はgoogle groupsのMLを使っているのでこっちにも参加して頂ければと思います。
みなさんここらへんに興味があるみたいなのでちょっと調べておきました。
本も出版されているようです。
ggplot2のfacet_wrapで~Speciesとやっててtildeなによ?みたいな話が出たんだけど、いまいちよくわかってなかったので、調べてみたが層別したグラフを並べるための記法のようですね。
自前実装したヒトがいるのでそっちを参照。
高階関数がわからないのであればunderscore.jsのmapの実装は
_.map = _.collect = function(obj, iterator, context) { var results = []; if (obj == null) return results; if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); each(obj, function(value, index, list) { results.push(iterator.call(context, value, index, list)); }); return results; };
Haskellだったら再帰ですね。
map :: (a -> b) -> [a] -> [b] map _ [] = [] map f (x:xs) = f x : map f xs
で、あらためて該当するコードを読めばよいでしょう
get.location <- function(l) { split.location <- tryCatch(strsplit(l,",")[[1]], error= function(e) return(c(NA, NA))) clean.location <- gsub("^ ", "", split.location) if(length(clean.location) > 2) { return(c(NA, NA)) } else { return(clean.location) } } city.state <- lapply(ufo$Location, get.location)
Windows版のRStudioがよく落ちていたようですが、一応素のRでもこんなかんじでテキストエディタが使えるみたいなので、次回は試すといいかもしれません。
26042013 R
ちょっとggplot2の説明のための資料を足してた。
ggplot2を使えば、こんな感じのいい感じのプロットがさくっと書ける。種毎にプロットを分けてそれぞれ線形回帰直線を引いてます。
library(ggplot2) g <- ggplot(data=iris, aes_string(x='Sepal.Length', y='Sepal.Width', color='Petal.Length')) g + geom_point() + facet_wrap(~Species) + geom_smooth(method='lm')
興味があれば一緒に勉強しませんか?
26042013 life
O'ReillyでData Pointsを購入したんだが、ファイルサイズが50Mbyteを超えてるせいでNexus7でsend to kindleができなくて困った。
調べたらUSB経由でファイルを送ればいいだけだった。