2012/05/31

[iOS][facebook]Objective-Cから写真をアップロード

やっとiOSからfacebookに写真をアップロードすることができたので、そのやり方を書きたいと思います。

UIImagePickerControllerDelegateでimagePickerController:didFinishPickingMediaWithInfo:メソッドが呼び出された後から、書くことにする。


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info


UIImage *imageOriginal = [info objectForKey:UIImagePickerControllerOriginalImage];
[self.facebook requestWithGraphPath:@"me/photos" andParams:[NSMutableDictionary dictionaryWithObject:[[NSData alloc] initWithData:UIImageJPEGRepresentation(imageOriginal, 1)] forKey:@"source"] andHttpMethod:@"POST" andDelegate:self];

}
たったのこれだけでおkなのである。

なんとシンプルな構造だろうか?

これは、facebookのリファレンスにも書かれていないので、忘れてしまったときに、これを見返したい。

ちなみに、
self.facebook
は、Facebookクラスのインスタンス変数である。

2012/05/30

[Python]【第4回】 yoyogi.py - python経験のないwebエンジニア向け - の講演をします

第三回目の時に講演をさせていただいたのですが、第四回目を開催するということで、今回も講演いたします。

内容は、Djangoを使ったチュートリアルの説明ができたらと考えております。

お時間のある方は、是非、お越しください。

前回の発表内容は、このエントリーに掲載してあります。

2012/05/29

[iOS][Objective-C]JSONをパース

長年書き溜めたネタをいよいよ解禁するタイミングが来ました。

ずばりObjective-CでJSONをパースする方法なのだが、
JSON Frameworkを使ってjsonをiPhone(iOS)でパースする。

を確認すると、まずは、GitHubでプログラムのダウンロードが書かれているのだが、実は、FacebookSDKを使っている場合は、運のいいことに、デフォルトでもれなくSBJSONのプログラムもついてくるのです。

なので、後は、JSONの処理に集中すればいいのであるのだが、受け取ったJSONデータを下のように記述すればいいようである。

id jsonItem = [jsonData JSONValue];

via:[iPhone] JSON Framework の使い方(解析編)
と書いた場合、返ってくるのは、NSDictionaryかNSArrayなので、上のやり方でも問題ないのだが、下のように書いてもいけそうな気がする。
if([jsonData isKindOfClass:[NSDictionary class]]){
 NSDictionary *jsonItem = [jsonData JSONValue];
}else if([jsonData isKindOfClass:[NSArray class]]){
 NSArray *jsonItem = [jsonData JSONValue];
}
ちなみに、jsonDataはNSStringであります。

後は、NSDictionaryまたは、NSArrayに対してkeyを使ってvalueを引っ張ってくればおk

しかし、なんで、Objective-Cは、デォルトでJSONをパースする機能を用意してくれていないのだろうか?

歴史を紐解くと1980年代に生まれた言語なので、ないっちゃないのかもしれない。
が、バージョンアップという形で対応はしてほしいなと。

2012/05/28

[CSS]cursorについて

もうかれこれ5年以上webに携わっているが意外な盲点を発掘。

前回、CSSでカーソルというプロパティーでURLを使って画像を指定することができることを書いたが、その設定したオリジナルカーソルが使えない場合、カンマを使って複数指定することができるそうだ。

具体的には、

■指定方法

cursor: url(example.cur), text;

url( ) … ( ) 内に、カーソルとして使用する画像ファイルを指定します。

オリジナルカーソルが表示できない場合に備え、カンマ( , )に続けて任意のキーワード(default や pointer 等)を指定しておきます。(上記の例では text を指定しています)

via:【オリジナルカーソルについて】
マルチブラウザ対応の場合にいいかもしれませんね。

2012/05/27

[本]日本が「対米従属」を脱する日--多極化する新世界秩序の中で

読了
日本が「対米従属」を脱する日--多極化する新世界秩序の中で
日本が「対米従属」を脱する日--多極化する新世界秩序の中で
田中 宇

第1章 多極化に対応し始めた日本
第2章 核廃絶と新世界秩序
第3章 多極化の中で台頭する中国
第4章 ドル崩壊と新たな基軸通貨の登場
第5章 「対米従属」から脱却する世界の国々
第6章 日本が「対米従属」を脱する日

via:目次
前回出版された世界がドルを棄てた日の続編とも言える作品。

氏の国際情勢分析は、評価がわかれているそうなのだが、本書によって、同氏の発言が信用に足りうるものであることが、はっきりわかるだろう。それは、まえがきのこの部分。
p15
それを見て、 民主党の二つの筋から、昼食をともにする誘いが、別々に時期をずらして私のところに来た。
ということは、氏の国際情勢は、少なくとも政治家の目に留まったということであり、でたらめな分析だと、見向きもされないわけで、さらに、こんなこともあったそうだ。
p16
内閣調査室の筋と思われる人から昼食を誘われ
なので、引き続き、氏のメールマガジンないし、書籍を読んでいこうと思ったが、一点だけ突っ込みたいところがあった。

それは、多極化戦略と呼ばれる、今までの英米が世界経済・政治を牽引する形ではなく、今後は、ロシア、BRICs、EUなどいくつかの極にわかれて経済、政治が展開されていくという戦略と、従来の英米中心戦略が衝突しており、現在は、多極派が、ガンガン戦略を推し進めている。

その裏付けとして、G8ではなく、G20が中心となるなど分析しているが、ではその逆に、英米中心戦略が行っているニュースは一体なんなのか?

あまりにも、多極化に関する分析が多く、その逆の勢力が行ったことがわかりにくくなってしまっているので、今後は、分析事項として入れてほしいなーっと思いました。

see also
国際情勢 メディアが出さないほんとうの話

2012/05/26

[GoogleAppEngine]datastoreにputを使うときの注意点

プロパティーに登録必須かどうかを設定できる

required=True
という引数があるのだが、これをTrueに設定した場合、ちょっと注意することがあります。

それは、Falseの場合だと

class Hoge(db.Model):
bar = db.StringProperty(required=False)


hoge = Hoge()
hoge.bar = "this is ok"
この場合は、正常終了するのだが、Trueだとエラーになる。

なので、エラーを回避するには、

class Hoge(db.Model):
bar = db.StringProperty(required=True)


hoge = Hoge(
bar = "this is ok"
)
というように、インスタンス変数を宣言するときに、引数に設定する必要があります。

危険な落とし穴でした。

2012/05/25

[GoogleAppEngine]local環境でデータの確認

本番環境にdeployする前に、ローカル環境で登録データの確認をしたいときがあります。

で、どこにローカルのデータベースがあるのだろうか?

開発用ウェブ サーバーには、コンソール ウェブ アプリケーションが含まれます。コンソールを使用すると、ローカル データストアを参照したり、ウェブ フォームに Python コードを送信してアプリケーションと通信することができます。

コンソールにアクセスするには、ご使用のサーバーの /_ah/admin の URL(例: http://localhost:8080/_ah/admin)にアクセスします。

via:開発用コンソール
確かに、ポート番号を8080に設定したら、http://localhost:8080/_ah/adminでデータの閲覧することができた。

ごみデータの削除の時とかに便利ですねー。

2012/05/24

[GoogleAppEngine][Python]getで受け取ったパラメータの型

昨日のPythonの型調査に引き続きなのだが、queryStringから受け取った変数の型って一体なんなのだろうか?

どうやらunicodeのようだ。

なので、以下のように記述するとTrueを返す。

isinstance(hoge, unicode):

2012/05/23

[Python]型判定

Pythonにおいて、数字と文字列を+(プラス)演算することはできない。

そこで、数値の場合は、str()関数を使って文字列型に変換したりするのだが、そもそも、演算の前に、変数の型を調べる必要があるなと思うときがあります。

で、型の判定方法は?
Python で変数の型 (クラス) を調べる – types モジュールを見ると、どうやら、isinstance関数を使って判定するようだ。

しかし、気になるのは、isinstance関数のとりうる値って一体??

2012/05/21

[Python]【第3回】 yoyogi.py - python経験のないwebエンジニア向け - の講演をします

突然ですが、
【第3回】 yoyogi.py - python経験のないwebエンジニア向け -
が開催されるのですが、そこで講演を行ないます。

内容は、
GoogleAppEngineを使ったHelloWorld的な簡単webサイトを構築する方法
についてお話させていただけたらと思います。

是非、お時間のある方は、ご参加ください。

2012/05/20

[google app engine][python]2.7からの変更点 app.yaml編 その3

え、え、え、なんで、app?

- url: .*
script: main.app
まさかビルド作業とか行なう感じかなー。。。

どうやら違うようです。

最初、main.pyをmain.appにリネームすればいいのかなーとか思ったけど全然違った。
以下のようにした場合、main.pyファイルの、変数appを使う、という指定になる。

via:GAEでPython2.7を使ってthreadsafeを有効にする
単純にpyファイルに記述されている変数「app」を使うということなんですねー。

確かに、main.pyを見ると、グローバル変数として宣言されている。
import webapp2

class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write('Hello world! from windows')

app = webapp2.WSGIApplication([('/', MainHandler)],
debug=True)
なるほど、なるほど。

2012/05/19

[google app engine][python]2.7からの変更点 app.yaml編 その2

昨日のエントリーに引き続き今日もapp.yamlの変更点について。

threadsafeの記述もびっくりしたのですが、こちらの記述にもびっくり。

runtime: python27

Required Elementsを読んでみると、どうやらランタイムの指定のようだ。

今回は、Python2.7を使うので、デフォルトの
runtime: python27
のままでおkなようです。

2012/05/18

[google app engine][python]2.7からの変更点 app.yaml編 その1

OSをLionにアップグレードするに伴って、GoogleAppEngineもPython2.7バージョンのものをインストールしたのだが、新規アプリを作成したときに、「app.yaml」に意味不明な、コードが入っていたので、ちょっと調査

で、しかも、何回かにわけてエントリーを書きそうなので、まずは、その1

しょっぱなびっくりしたのは、下記の記述。

threadsafe: yes
「は、これ何??」。リファレンスを覗くとこんな感じに書かれていた。

To use Python 2.7, you must specify a threadsafe element in app.yaml. If true, App Engine sends requests concurrently; if false, App Engine sends them serially.

via: Multithreading
つまり、コンカレンシーを行いたい場合は、yesと設定する必要があるとのこと。

ちなみに、Python2.7からのSDKは、この項目の設定が必須となるようだ。

Note: The threadsafe directive is required for Python 2.7 applications.

via:threadsafe

2012/05/16

[iOS][Objective-C]UIImagePickerControllerで撮影した写真を取得する

以前、購入したiPhoneプログラミングUIKit詳解リファレンスを読みながら、カメラで撮影した画像データを取得したいのだが、どうして、

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
メソッドのコール時に設定されているinfoを使って、
[info UIImagePickerControllerOriginalImage]
のようにNSDictionaryを使って取得することができるのか気になったので調べてみた。

NSString *const UIImagePickerControllerMediaType;
NSString *const UIImagePickerControllerOriginalImage;
NSString *const UIImagePickerControllerEditedImage;
NSString *const UIImagePickerControllerCropRect;
NSString *const UIImagePickerControllerMediaURL;
NSString *const UIImagePickerControllerReferenceURL;
NSString *const UIImagePickerControllerMediaMetadata;

via:UIImagePickerControllerDelegate Protocol Reference
「Editing Information Keys」セクションを読むと、もともと、上の情報が保存されている状態で引数に設定されるそうだ。

で、オリジナルのイメージを取りに行くので、結果的にキーにUIImagePickerControllerOriginalImageを指定したと思われる。

2012/05/15

[iOS][Objective-C]UIScrollViewでスクロールしない件

UIViewControllerでスクロールを行ないたいので、UIScrollViewをメインViewとして設定したのだが、どうしてか、スクロールすることができない。

理由をさぐったところ、Creating Scroll Views Programmaticallyに下のような記述があったので、ひょっとしたら、contentSizeプロパティに値を設定していないかだと考えた結果、予想的中。

- (void)loadView {
CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];
scrollView.contentSize=CGSizeMake(320,758);

// do any further configuration to the scroll view
// add a view, or views, as a subview of the scroll view.

// release scrollView as self.view retains it
self.view=scrollView;
[scrollView release];
}

via:Creating Scroll Views Programmatically
結構、重要なことなので、忘れないようにしたいですね。

2012/05/14

[iOS]アプリのiconをretinaに対応

iOS4からretinaディスプレイ用のiconを設定する必要がでてきたようだ。

でも、実際、画像はどのぐらいの大きさを用意すればいいのだろうか?

57x57 Icon.png App Store and Home screen on iPhone/iPod touch Required
114x114 Icon@2x.png Home screen for iPhone 4 High Resolution Optional but recommended

via:App Icons on iPad and iPhone
おー、ここをチェックしておけば大丈夫そうだ。

2012/05/13

[iOS][objective-c]loadViewとviewDidLoadが呼ばれない件

なぜじゃー。

UIViewControllerのloadViewメソッドとviewDidLoadが呼ばれない。

原因を調査したところ、下記のように組んでしまった場合、呼ばれないようだ。

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle{
//省略
self.view = [[UIView alloc] initWithFrame(0,0,320,480)];
return self;
}
つまり、initのタイミングでviewを呼び出してしまうと、上記2つのメソッドがコールされないようです。

とても大切なことのような気がするので、以後、気をつけたい。

2012/05/12

[iOS]ステータスバーの高さ

今、アプリを作っていてステータスバーの高さが気になったので、調査

ここに書いてあることは正しいそうなのだが。。。

StatusBar 20
UINavigationController 44
UITabBarController 49

via:[iOS] StatusBar、UINavigationController、UITabBarControllerの高さ
ただ、根拠がほしいなーっと思い、原文をあたったところありました。

Case Studies: Transitioning to iOS
を見ると、確かに、ステータスバーは20pxでした。

これで一安心です。

2012/05/11

[Python]Lionでのバージョン

Lionでの初期インストールされているPythonのバージョンはいったいなんだろうか?

調べてみたところ、バージョン2.7のようである。

2012/05/10

[本]池上彰の宗教がわかれば世界が見える

読了
池上彰の宗教がわかれば世界が見える (文春新書)
池上彰の宗教がわかれば世界が見える
池上 彰

第1章 宗教で読み解く「日本と世界のこれから」―東日本大震災・ビンラディン殺害・中東革命
第2章 宗教がわかる!ほんとうに「葬式はいらない」のですか?―vs.島田裕巳(宗教学者)
第3章 仏教がわかる!1 「南無阿弥陀仏」とはどんな意味ですか?―vs.釈徹宗(浄土真宗本願寺派如来寺住職)
第4章 仏教がわかる!2 仏は「生・老・病・死」を救ってくれますか?―vs.高橋卓志(臨済宗神宮寺住職)
第5章 キリスト教がわかる!「最後の審判」は来るのですか?―vs.山形孝夫(宮城学院女子大学名誉教授)
第6章 神道がわかる!日本の神様とはなんですか?―vs.安蘇谷正彦(國學院大学前学長)
第7章 イスラム教がわかる!『コーラン』で中東情勢がみえますか?―vs.飯塚正人(東京外国語大学教授)
第8章 宗教と脳がわかる!「いい死に方」ってなんですか?―vs.養老孟司(解剖学者)
おわりに 宗教は「よく死ぬ」ための予習

via:目次
親父が持っていたので、ちょっと借りてGW中に読みました。

他の著書とは決定的に違うのは、時事解説ではなく宗教ベースである点であり、かつ、どうやら文藝春秋のインタビューを加筆しているところ。

冒頭のこの部分は、果たしてそうなのか疑問に思った。
p14
ふだんは信仰がなくても、思わず「神様、助けて!」と祈った人も多かったでしょう。
こういうとき、やはり宗教にすがりたくなるのではないでしょうか。
果たして、「宗教に」すがったのか?そこまで言い切れるほど、震災時に余裕があったのだろうか?

インタビューした人全員、日本人は「無宗教ではない。」と答えたが果たして本当にそうなのだろうか?疑問に思ってしまう。
偏見かもしれないが、初詣や、大晦日をはじめ、クリスマスとかは、第二次世界大戦後の小売店が売り上げをのばすための施策の一環としか感じることができない。
宗教的なことをあまり考えていないような気がするのだ。お祭りの延長線上にあると思う。
現に、バレンタインデーやホワイトデーは、そうやって導入されたと過去に聞いたことがある。

であれば、韓国のブラックデーも導入すれば、韓国料理や中国料理の需要開拓していいのではないかと思うのだが。

あ、決して、クリスマスや大晦日を否定していません。むしろ、肯定しています。
美味しいものは食べられるし、サンタさんにはプレゼントはもらえるし、好きな人と一緒にいられるし、町は賑わっているし、いいことづくめ。
あくまで、宗教の行事として捉えていないのではないかということです。

対談相手の島田裕巳の葬式は、要らないは、結構、話題を呼んだ本だそうです。初めて知った。時間があるときに、今度、読んでみよーっと。
葬式は、要らない (幻冬舎新書)
葬式は、要らない (幻冬舎新書)

日本の宗教は、一神教ではないらしい。逆にキリスト教やイスラム教は一神教のようだ。
クリスマスは、この29年間ずーっと、12月25日と思っていたのだが、ギリシャやロシア、シリアでは、1月6日らしく宗派によって異なっているのは興味深い。
12月25日は、日本で過ごして、1月をロシアまたはギリシャで過ごせば、一年で二回クリスマスを味わうことができるんですねー。
後、イエスキリストは、もとは、ユダヤ教だったそうです。それこそ宗教を創った神だから「無宗教」だと思っていましたが。
実際に、キリスト教を広めたのは、パウロのようです。
コンスタンティヌスという言葉でてくるのですが、そのとき真っ先に頭の中にこれが駆け巡ったのですが、おそらく関係はないと思います。
コンスタンティン [Blu-ray]
コンスタンティン

イスラム教では、学校でコーランを習ったがそれとは別にハディースという参考書があるようで、これは知らなかった。
ハディース〈1〉イスラーム伝承集成
ハディース〈1〉イスラーム伝承集成

最後まで読んでみると、やはり世界史に行き着くんだなと。

今度、腰を据えて勉強したいなー。

2012/05/09

[iGoogle gadget]movie top 10終了

以前、iGoogleガジェット向けに、showbiz countdownの情報を表示する「movie top 10」をリリースしましたが、番組が終わってしまったので、それにあわせて本ガジェットも終了することにしました。

今までお使いいただきありがとうございました!!

2012/05/08

[JavaScript]スマホ不具合集

下記のスライドを見て、すごく共感できるところが。

特に、case4のレイヤーで同じ状態に陥り、泥沼にはまった記憶があります。

あの時に、この資料があれば。。。