Stranger in Wonderland

pyfesにて、もくもく作業してた内容メモのみ。

@geeklatte_bot をつくった

JSON 読みこんで、ランダムで1つとってきて tweet する子です。 dev_appserver.py がなぜかどっかいってたけど Google App Engine SDK アップデートしたら戻ってきた。よくわからない Warning が出てるけど…。

以下、自分に忘れて欲しくないポイントだけ。

url 開く

import urllib2
data = urllib2.urlopen('http://geeklatte.com/geeklatte_all.json')

20.6. urllib2 — URL を開くための拡張可能なライブラリ

urllib2.urlopen(url[, data][, timeout])
URL url を開きます。 url は文字列でも Request オブジェクトでもかまいません。
この関数は以下の 2 つのメソッドを持つファイル類似のオブジェクトを返します: * geturl() * info()

ファイル類似のオブジェクト(file-like object)というのは、実ファイルじゃないけど.read()とかできるファイルっぽい何か、らしい。

JSON 読んで dict つくる

import json
dictFromJson = json.load(data)

Python 2.7ja1 documentation » Python 標準ライブラリ » 18. インターネット上のデータの操作 » 18.2. json — JSON エンコーダおよびデコーダ

json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
直列化された fp (.read() をサポートするファイル的オブジェクトで JSON 文書を収めたもの) の内容を Python オブジェクトに戻します。

Python オブジェクトって具体的になに!この場合は元が JSON だから dict と思ってていいのかな。

dict の中身にアクセス

photoset = dictFromJson['photoset']

思わず dictFromJson.photoset って dot notation で書こうとしてた。ちがった…。

Python 2.7ja1 documentation » Python チュートリアル Python チュートリアル » 5.5. 辞書

@moonphase_botアップデートした

28日め = 0日めに「計算できなかったみたい」って tweet してたので直したのと、1周して飽きたので、月齢を □□□□ 表示にしてみた。テストとかしてないのでまた28日かけて動作確認する。
さらに、Tokyo の日の出と日没時間も tweet するようにした。

datetimeのフォーマット

sun['sunrise'] とか sun['sunset'] で返ってくる値が 2012-11-24 06:25:52+09:00 なんだけど、使いたいのは 06:25:52 のとこだけなんだよね。うーん。
で、re.sub しかけてたんだけど、そうじゃなくて datetime の方で好きなフォーマットにできるのだった。

str(sun['sunset'].strftime("%H時%M分%S秒"))

とか。

Python 2.7ja1 documentation » Python 標準ライブラリ » 8. データ型 » 8.1. datetime — 基本的な日付型および時間型

ひゃっほう!!Codecademy で Cash Register Part II おわったぜ!

Recursing on a listindex + 1 って書くべきところを index++ って書いてハマってた。まさにこの人と同じ間違い

//bad! This should be inside an object. We'll fix that a bit later
var change = 0; 

function howManyCoins (coinName, coinAmount, coinsSoFar) {
    if (change < coinAmount) {
		console.log(coinsSoFar + " " + coinName);
	} else {
		change -= coinAmount;
		howManyCoins(coinName, coinAmount, coinsSoFar + 1);
	}
}

var currency = [5.00, 1.00, 0.25, 0.10, 0.01];
var coinNames = ["five dollar bills", "one dollar bills", "quarters", "dimes", "pennies"];

function makeChange (coinNames, currency, index) {
	if (index >= currency.length) {
		// and this
		return;
	} else {
		//and this
		howManyCoins(coinNames[index], currency[index], 0);
		// ここの3つめの引数を index++ にして無限ループしてた 
		makeChange(coinNames, currency, index + 1)
	}
}

change = 18.94;
makeChange(coinNames, currency, 0);

なぜ ++ って書いてたかというと、codecademy の別のコースで出てきて、1減らしたいときここは -- とも書けるぜ。これちょっと自慢できるぜ。って書いてあったんだよなー。これ。

function makeRobots(robotsNeeded){
  // Do we need any robots?
  if(robotsNeeded>0){
    // We do?  Well lets make one
    console.log("Robot "+ robotsNeeded+" Created");
    // Removes 1 from robots Needed
    // Also the same as saying robotsNeeded = robotsNeeded -1
    robotsNeeded--;
    // Calls makeRobots with the new number of robots needed
    makeRobots(robotsNeeded);
  }
}
makeRobots(2);

ここでは、robotsNeeded = robotsNeeded -1robotsNeeded-- は同じ、という話で、robotsNeeded -1robotsNeeded-- は同じではないのだけど、そこをカンチガイしていたのだった。

Knowing this will impress your programmer friends, and make you more attractive to people in general. とかいわれたら使ってみたくなるじゃんね!
よくわかんなくてぶつぶつ言ってたら Twitter で教えてもらった。pre-increment と post-increment ってどう違うの!サイ本の説明よくわかんなかった!

さださん(@sada_h) の https://gist.github.com/4088752 見て、実行してみて、理解した。

var i = 1;
// +1 される前の値が出力されるのが i++
console.log(i++) // 1
// そして次に呼び出すときには +1 されている
console.log(i)   // 2

var j = 1;
// +1 された後の値が出力されるのが ++j
console.log(++j) // 2
console.log(j)   // 2

そうか。index + 1 はOKだし、index = index + 1 でもよくて、++index もよいのだった。index++ がまずかったのね。

残り Build a Blackjack Game, Final だけなんだけど、OOPのとこ復習しないといけないのをひしひしとかんじています。

上海小吃の豆腐の細切りを reproduce するべく干豆腐絲を探し求めて彷徨ったのち、料理してビアも飲んだし、さらに七尾旅人と U-zhaan の Ust も見ちゃったので本日 Codecademy はおやすみ。
Jekyll で気になってたところ見なおして直した。 jekyll+github pagesでブログを作る を読みなおした。

title どうやってつけるんだっけ

ファイル名に入っている日付以外の部分が title になってたのが気になってた。_posts の下に置くファイルのここに書くんだった。

---
layout: post
title: "Jekyll 続き"
category : selfstudy
tags : [selfstudy, jekyll, blog]
date: 2012-11-14
---

Syntax Highlight したい

pygments を入れただけの状態だったので、ちゃんと highlight するようにした。こういうの。

var chai  = {
	'ingredient' : ['fennel', 'large cardamon seeds', 'dried ginger', 'cassia', 'black pepper', 'green cardamon', 'star-anise', 'cloves'],
	'gram' : 25
}

必要なのはこのみっつ。 1. $ easy_install pygments 2. https://github.com/mojombo/tpw/blob/master/css/syntax.css

  1. 該当部分を {% highlight perl %} と {% endhighlight %} で囲む

ちなみに、この template tag をエスケープする方法はここにあった。

Jekyll は Liquid という Ruby のテンプレートエンジンをつかってるのかー。へー。

Author

Yuko Honda Morita (yukop) : yukop.com
飯能→東京→シリコンバレー。夫と猫2匹と暮らしてます。作ったり学んだり踊ったりするのが好き。
Born in Japan, living in California with my husband and two cats. "A bit of a geek and a bit of a geek fan and a bit of an artist." ->

Latest Posts

Japanese
English

Chronological Archive

Tags