19042013 Objective-C
詳解までは必要ないかなぁと考えていたのだが、Objective-Cで書いてみると色々わからないことが出てくるのでやっぱ買っておいて良かった。
ブロックオブジェクトって気持ち悪い。
19042013 Objective-C
詳解までは必要ないかなぁと考えていたのだが、Objective-Cで書いてみると色々わからないことが出てくるのでやっぱ買っておいて良かった。
ブロックオブジェクトって気持ち悪い。
18042013 life
病院の待ち時間に読むために持参したのだけど、パラパラとめくったら、当たり前のことばかり書いてあったので速読した。
お金を使う時の考え方の基本は「節約すること」と「ものの価値を知ること」です
とあるが、節約よりも、無駄遣いをしないこととか収入の経路を多くすることを考えたほうがデフレの今は効果的かもしれないですね。
バランスシートは作っておかなきゃいけないなぁと思った。
18042013 Python
先週のShizuoka.pyでのSphinxの紹介スライド。
Sphinxの使い方とかは日本語のドキュメントが充実しているので、編集時や公開時に便利なちょっとした小技を多めに。
本当は Sphinx -> mobi -> KDPに出版 というところまでやってから発表したかったんだけど、出版するネタがなかったのでtips紹介になってしまった。
でも、ドキュメントをHTMLとepubの二種類用意できるっていうのは非常にメリットがあるのでSphinxはオススメですね。(7インチタブレットで読むにはpdfは読みづらくて、epubかmobiのほうがいいんじゃないかなぁと思っている)
17042013 R
来週から久々の読書会が始まるのでパラパラめくりながら一回にやれそうな章を区切ってみた。
大体8つに分けられそうなので、毎月やれば今年中に終わりそう。
以下、メモ的なもの
17042013 life
これはかなり面白かった。
グリッドレイアウトもいいんだけど、あれ使ってもバランスがなんかいまいちなんだよねーってヒトは読むとイイかも。
形の要素とその間にある空間のプロポーションは、必ずと言ってよいほど論理的にたどることのできる特定の数列に関連している
ルート2の長方形のレイアウトが使いやすいかも。
16042013 Python
このブログは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で同期される
14042013 Python
参加者の皆様、発表者の皆様お疲れ様でした。特に色々と調整していただいた@secondarykeyには大変お世話になりました。
懇親会で、次回どうしようかっていう話もちょっとしてきた。
上3つはいいとして、入門者向けっていうのがなぁ。プログラミング全然わからないような初心者はおそらく参加しないだろうからあまりにも入門過ぎると飽きるしちょっと悩む
というわけで人工無能をPythonで作ってtwitterのボットにするくらいのハンズオンでもするのが軽くていいんじゃなかろうか? 形態素解析もできるし、外部のAPIを使ったプログラミングも経験できるし。Flaskでwikiつくるのもいいんだろうけど新鮮味がないから、やっぱマイニングの方向に持っていけるサンプルのほうがいいんじゃないかなぁ。
ちなみに次回は夏のあたり(7月のどこか)にやれればいいかなぁと思っているので、発表ネタを温めておいてもらえばと。
Shizuoka.pyでpythonでiPhoneアプリを作る紹介をしたけど、さらっと流しただけで環境構築には触れなかったのでメモっておく。
Titanium MobileでもObj-Cでもそうですが実機転送するためには開発者ライセンスがいるのでよろしく設定しておいてください。お金かかります。
プラットフォームに応じたバイナリをダウンロードしてきてインストール。OSXの場合はアプリケーションフォルダにドラッグドロップして、make-symlinksをクリックしてシンボリックリンクを張る。
これでkivyコマンドが使えるようになってmac上でアプリ開発ができる。
注) 1.6.0では安定版ではないのでそのつもりで。
KIvy for iOSに書いてある手順で。
という仕組み
13042013 Python
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')