詳解 Objective-C 2.0 第3版

詳解までは必要ないかなぁと考えていたのだが、Objective-Cで書いてみると色々わからないことが出てくるのでやっぱ買っておいて良かった。

ProductName 詳解 Objective-C 2.0 第3版
荻原 剛志
ソフトバンククリエイティブ / 3990円 ( 2011-12-28 )


ブロックオブジェクトって気持ち悪い。

「お金の地図」はノーマル版だった

病院の待ち時間に読むために持参したのだけど、パラパラとめくったら、当たり前のことばかり書いてあったので速読した。

お金を使う時の考え方の基本は「節約すること」と「ものの価値を知ること」です

とあるが、節約よりも、無駄遣いをしないこととか収入の経路を多くすることを考えたほうがデフレの今は効果的かもしれないですね。

  • ポイントを貯めることは利息を得ずにお金をそのお店に預けること

バランスシートは作っておかなきゃいけないなぁと思った。

Shizuoka.pyでSphinxの紹介をした

先週のShizuoka.pyでのSphinxの紹介スライド。

Sphinxの使い方とかは日本語のドキュメントが充実しているので、編集時や公開時に便利なちょっとした小技を多めに。

本当は Sphinx -> mobi -> KDPに出版 というところまでやってから発表したかったんだけど、出版するネタがなかったのでtips紹介になってしまった。

でも、ドキュメントをHTMLとepubの二種類用意できるっていうのは非常にメリットがあるのでSphinxはオススメですね。(7インチタブレットで読むにはpdfは読みづらくて、epubかmobiのほうがいいんじゃないかなぁと思っている)

来週から入門機械学習の読書会ですよ

来週から久々の読書会が始まるのでパラパラめくりながら一回にやれそうな章を区切ってみた。

ProductName 入門 機械学習
Drew Conway
オライリージャパン / 3360円 ( 2012-12-22 )


  1. 1章 Rを利用する, 2章 データの調査
  2. 3章 分類:スパムフィルタ
  3. 4章 順位付け:優先トレイ
  4. 5章 回帰:ページビューの予測
  5. 6章 正則化:テキスト回帰
  6. 7章 最適化:暗号解読
  7. 8章 PCA, 9章 MDS, 10章 k近傍法
  8. 11章 ソーシャルグラフの分析, 12章 モデル比較

大体8つに分けられそうなので、毎月やれば今年中に終わりそう。

以下、メモ的なもの

  • 初回はR言語の説明が必要
  • スパムフィルタは別途ベイズの定理を分かりやすく説明する必要がある
  • 6章の過学習も説明が必要、正則化
  • 7章もちょっと補足が要りそう
  • 8,9,10はあっさりしすぎ

幾何学的思考でデザインを考えるのはプログラマ向けかも

これはかなり面白かった。

グリッドレイアウトもいいんだけど、あれ使ってもバランスがなんかいまいちなんだよねーってヒトは読むとイイかも。

形の要素とその間にある空間のプロポーションは、必ずと言ってよいほど論理的にたどることのできる特定の数列に関連している

ProductName Balance in Design[増補改訂版]- 美しくみせるデザインの原則
Kimberly Elam
ビー・エヌ・エヌ新社 / 2100円 ( 2012-01-24 )


ルート2の長方形のレイアウトが使いやすいかも。

fabricでブログデータのバックアップをとる

このブログはFlask製でデータはSQLiteに溜めているのでscpすればいいのだが、@ando_ando_andoがShizuoka.pyで紹介をしていたということもありfabricで書いてみた。

from fabric.api import get

def backup():
    get('/usr/local/blog/blog.db', '/Users/kzfm/Dropbox/blog.db')

とfabfile.pyを作っておいて

fab --host=[server] --port=[port] backup

と打てば、手元のDropboxの同期用フォルダにsftpされ、Dropboxで同期される

Wii U購入した

息子にDSもWiiも壊されたので、また壊されたら嫌だなぁと据え置き型のゲーム機を買わなかったのだけど、遂に買ってしまった。

ProductName Wii U ベーシックセット (WUP-S-WAAA)

任天堂 / 25845円 ( 2012-12-08 )


スーパーマリオも同時に頼んだので、子ども達と三人で遊んでいるんだけど、GamePadの取り合いばかりして困るが、iPadみたいなタッチパネル操作ゲームの延長なんだろう。

ProductName New スーパーマリオブラザーズ U

任天堂 / 4854円 ( 2012-12-08 )


ピクミン3は遊びたいがまだ出ないので2でもやろうかな。

ProductName Wiiであそぶ ピクミン2

任天堂 / 2863円 ( 2009-03-12 )


Shizuoka.py楽しかった

参加者の皆様、発表者の皆様お疲れ様でした。特に色々と調整していただいた@secondarykeyには大変お世話になりました。

  • Emacsのインデントの表示にhighlight-indentation
  • Emacsでgistいじるのにgist.el
  • Windows AzureでDjangoを動かすデモで管理画面が分かりやすくていいなと思った
  • 形態素解析というかテキストマイニング面白かった。
  • pythonのマルチスレッドとかいまいちよく理解してないわ
  • 死活監視もちゃんとやらなきゃあかんなぁ

懇親会で、次回どうしようかっていう話もちょっとしてきた。

  • Kivyをもう少し深く
  • pandasの紹介
  • Flask
  • 入門者向けの演題
  • @ando_ando_andoによる(続)Fabric入門

上3つはいいとして、入門者向けっていうのがなぁ。プログラミング全然わからないような初心者はおそらく参加しないだろうからあまりにも入門過ぎると飽きるしちょっと悩む

というわけで人工無能をPythonで作ってtwitterのボットにするくらいのハンズオンでもするのが軽くていいんじゃなかろうか? 形態素解析もできるし、外部のAPIを使ったプログラミングも経験できるし。Flaskでwikiつくるのもいいんだろうけど新鮮味がないから、やっぱマイニングの方向に持っていけるサンプルのほうがいいんじゃないかなぁ。

ちなみに次回は夏のあたり(7月のどこか)にやれればいいかなぁと思っているので、発表ネタを温めておいてもらえばと。

スライド

pythonでつくるiPhoneアプリ

pythonでpptx

Python で munin plugin を書いてみる

Subprocess no susume

pythonでiPhoneアプリを作るまで

Shizuoka.pyでpythonでiPhoneアプリを作る紹介をしたけど、さらっと流しただけで環境構築には触れなかったのでメモっておく。

iPhoneアプリ開発者登録をする

Titanium MobileでもObj-Cでもそうですが実機転送するためには開発者ライセンスがいるのでよろしく設定しておいてください。お金かかります。

Kivyのインストール

プラットフォームに応じたバイナリをダウンロードしてきてインストール。OSXの場合はアプリケーションフォルダにドラッグドロップして、make-symlinksをクリックしてシンボリックリンクを張る。

Kivy

これでkivyコマンドが使えるようになってmac上でアプリ開発ができる。

iOS用の設定

注) 1.6.0では安定版ではないのでそのつもりで。

KIvy for iOSに書いてある手順で。

  1. brewで必要なライブラリを入れる
  2. build_all.shでビルド
  3. create-xcode-project.shでテンプレートを用意して開発
  4. xcodeで開いてrunすると実機転送

という仕組み

pythonでpptxを作ればGit管理下におけて素敵

Shizuoka.pyお疲れ様でした、想定以上のヒトに参加していただいて感謝しております。特に今までお会いしたことのなかった静岡のPythonistaにお会いできて満足です。

それからpygamessユーザーとお話できたのも嬉しかったです(あまり製薬業界以外で使われているとは思わなかったので)。

また、懇親会で良い感じの場所を提供していただいたphotoにも感謝!

python-pptxでつくったスライドのソースを張っておきます。水着ループはたった 4 行のコードでひたすらアイドル水着画像をあつめる(Python だよ)を参考にしました。

#!/usr/bin/env python
# -*- encoding:utf-8 -*-

from pptx import Presentation
from pptx.util import Inches, Px
import re
import requests

prs = Presentation()
title_slidelayout = prs.slidelayouts[0]
bullet_slidelayout = prs.slidelayouts[1]

shapes = prs.slides.add_slide(title_slidelayout).shapes
shapes.title.text = 'Pythonでpptx'
shapes.placeholders[0].text = 'Pythonでpptx'
shapes.placeholders[1].text = '@kzfm'

shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'GUIに頼らずpptxを作れると素敵'
tf = shapes.placeholders[1].textframe
tf.text = 'パターンの再利用'
tf.add_paragraph().text = '作業の自動化'
tf.add_paragraph().text = 'Sphinxに慣れすぎた'
tf.add_paragraph().text = 'powepointたまに死ぬ(->発狂する)'

shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'python-pptx'
tf = shapes.placeholders[1].textframe
tf.text = 'https://github.com/scanny/python-pptx'
tf.add_paragraph().text = 'pip install python-pptx'
tf.add_paragraph().text = '開発はじまったばかり'
tf.add_paragraph().text = '超期待!'

shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'アイドル水着画像をあつめてpptxに貼る'
top = Inches(2)
left = Inches(0.5)
width  = Px(280)
height = int(width * 1.427)
txBox = shapes.add_textbox(left, top, width, height)
txBox.textframe.text = """c = requests.get('http://matome.naver.jp/odai/2135350364969742801').content
urls = [x.group(1) for x in re.finditer(r'<img src="(.+)".*?class="MTMItemThumb".*?/>', c)]

for i, url in enumerate(urls[:10], 1):
    img_path = "{}.jpg".format(i)
    r = requests.get(url)
    if r.status_code == 200:
        img = r.content
        with open(img_path, 'w') as f:
            f.write(img)
        shapes = prs.slides.add_slide(bullet_slidelayout).shapes
        shapes.placeholders[0].text = '水着アイドル ({})'.format(i)
        top = Inches(1.5)
        left = Inches(3)
        width  = Px(280)
        height = int(width * 1.427)
        pic = shapes.add_picture(img_path, left, top, width, height)
"""

c = requests.get('http://matome.naver.jp/odai/2135350364969742801').content
urls = [x.group(1) for x in re.finditer(r'<img src="(.+)".*?class="MTMItemThumb".*?/>', c)]

for i, url in enumerate(urls[:10], 1):
    img_path = "{}.jpg".format(i)
    r = requests.get(url)
    if r.status_code == 200:
        img = r.content
        with open(img_path, 'w') as f:
            f.write(img)
        shapes = prs.slides.add_slide(bullet_slidelayout).shapes
        shapes.placeholders[0].text = '水着アイドル ({})'.format(i)
        top = Inches(1.5)
        left = Inches(3)
        width  = Px(280)
        height = int(width * 1.427)
        pic = shapes.add_picture(img_path, left, top, width, height)

shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'このスライドはpython-pptx製'
tf = shapes.placeholders[1].textframe
tf.text = 'スクリプトっぽい(DSLっぽくはない)'
tf.add_paragraph().text = '再利用性は高められそう'
tf.add_paragraph().text = 'Gitで管理できる(重要!)'
tf.add_paragraph().text = 'Sphinxの拡張にするのは面白そう'
tf.add_paragraph().text = 'livereloadで更新時にリロードしないかなぁ?'

shapes = prs.slides.add_slide(bullet_slidelayout).shapes
shapes.placeholders[0].text = 'まとめ (真のアイドルは焼津)'.format(i)
top = Inches(1.5)
left = Inches(3)
width  = Px(280)
height = int(width * 1.427)
pic = shapes.add_picture("yaidumoe.jpg", left, top, width, height)

prs.save('test.pptx')