Skip navigation

Tue Aug 11, 2009は”もっとDjango”の一日だった。ボスから仕事中にトゥウィートすることの許可を得て(しっかり仕事中トゥウィートの掟付きで:-D)、後で自分が問題と解決の道筋をトラックしやすいように、うまくいかない!!!!とか、うまくいった!!!!とか、躓いた…とか、わかったーーー!!とか、”さえずり”という静かな感じを全く無視した形で騒ぎまくっていた。

今回、主に問題となったところは、formの扱いかな… フォローしていたチュートリアルが使っているDjangoのバージョンが古かった、ということもあって結構うまく行かなかった。

あとは、相変わらずURLconfの書き 方… 今回はdynamicにurls.pyの内容を生成したかったので、(?P\d+) を初めて使ってみた…だから、最初はその書き方で行き詰まってしまったのだけれど、”実は”¥”が”\”であるべきだった… 間違い: (?P¥d+) 正しい: (?P\d+)(トゥウィートより引用)”というわけだった。

viewsとかmodelとかの間のimportの関係性がもっとしっくり分かるように慣れればいいな。

とにかく、11日にできるようになったことは、今まではDjango adminを使ってしかできなかったこと、新しいデータの追加、編集、検索、がDjango adminを使わずに、自分で新たに作ったページから行えるようになったこと!!ちょっぴり進んだね ;-D

”Djangoに関するトゥウィートを1つでもする”とか、”Djangoに関するブログポストを書く”でも良いので、毎日ちょびりちょびりDjangoに関わることが大事だよね。btw. if i give myself the same homework that i gave my English class students to “tweet at least 20 times in English everyday”. i’ll have to tweet about Django at least 20 times a day. lol. and i’m NOT going to do that ;-P

——————————————
これがリアルタイムアップデートのDjango戦闘記!
——————————————

* これで、Django adminを使わずに、フォームに入力したデータをDBに保存できるようになった + すでに保存してあるデータの編集をしてアップデートできるようになった!
Tue Aug 11 13:54:35 +0000 2009 from Miwaza Jemimah

* 問題:実は”¥”が”\”であるべきだった… 間違い: (?P¥d+) 正しい: (?P\d+)
Tue Aug 11 13:52:39 +0000 2009 from Miwaza Jemimah

* やったーーー!!!!解決したーーー!
Tue Aug 11 13:50:55 +0000 2009 from Miwaza Jemimah

* 冷静に実行してみるよ…!お、びっくりマークは冷静ではない証拠。:-P
Tue Aug 11 13:49:46 +0000 2009 from Miwaza Jemimah

* もしかして、できたかもしれない!!
Tue Aug 11 13:49:22 +0000 2009 from Miwaza Jemimah

* Lenovo Mobile O1 はちょっとごちゃごちゃ、というように見えるかな。やっぱり、HTC Heroが欲しいな。http://www.htc.com/www/product/hero/overview.html
Tue Aug 11 13:35:18 +0000 2009 from Miwaza Jemimah

* URLConfの中でうまくidが渡っていないということだと思うんだけれどな…
Tue Aug 11 13:30:58 +0000 2009 from Miwaza Jemimah

* あ、Djangoの前にEngadgetを読む :-)
Tue Aug 11 13:07:41 +0000 2009 from Miwaza Jemimah

* URLConfがうまくいかなかったのが、うじうじ、なので、趣味として今からDjangoに取り組む!
Tue Aug 11 13:02:11 +0000 2009 from Miwaza Jemimah

* @IanMLewis ありがとう。夢にDjangoが出てくるぐらいがんばる。
Tue Aug 11 12:57:38 +0000 2009 from Miwaza Jemimah

* DBのテーブルでも確認してみる。
Tue Aug 11 09:26:24 +0000 2009 from Miwaza Jemimah

* FormからDBに追加できたのは良いのだけど、それぞれのデータに付けたidをurlに取れない…
Tue Aug 11 09:17:56 +0000 2009 from Miwaza Jemimah

* @kannokazuhiko 仕事中トィウィートの掟 :-D
Tue Aug 11 09:14:12 +0000 2009 from Miwaza Jemimah

* おぉ。やっとsubmitまでいけそうか…な?
Tue Aug 11 09:11:46 +0000 2009 from Miwaza Jemimah

* @voluntas まだ、”Djangoの人”になりたい人、です ;-)
Tue Aug 11 09:06:47 +0000 2009 from Miwaza Jemimah

* @voluntas thanks :-) 今度躓いたら助けてもらおう… :-) どうやら、Djangoのバージョンの違いでformの扱い方が間違っていたようです。
Tue Aug 11 09:06:11 +0000 2009 from Miwaza Jemimah

* できた!と思ったけど、できてないな…
Tue Aug 11 09:02:31 +0000 2009 from Miwaza Jemimah

* だけど解決しなかった… ModelFormで躓きまくり
Tue Aug 11 08:57:28 +0000 2009 from Miwaza Jemimah

* 前に座っているDjangoの人に聞いてみてしまった
Tue Aug 11 08:57:05 +0000 2009 from Miwaza Jemimah

* デバッグの読み方を間違っていた……
Tue Aug 11 08:44:27 +0000 2009 from Miwaza Jemimah

* 問題は分かっている気がするのだけれど、解決方法がわからない。たぶん、importしていないということだよね。
Tue Aug 11 08:30:16 +0000 2009 from Miwaza Jemimah

* やっぱり進んではいなかった…しょぼん。
Tue Aug 11 08:27:18 +0000 2009 from Miwaza Jemimah

* あ。ちょとまって進んだかもしれない :-) NameErrorになった。
Tue Aug 11 08:23:45 +0000 2009 from Miwaza Jemimah

* @voluntas はい。アップデートしました。
Tue Aug 11 08:17:10 +0000 2009 from Miwaza Jemimah

* form_for_model がわからない ;-(
Tue Aug 11 07:04:39 +0000 2009 from Miwaza Jemimah

* ViewDoesNotExist ;-(
Tue Aug 11 06:55:29 +0000 2009 from Miwaza Jemimah

* from models import foo
Tue Aug 11 06:06:28 +0000 2009 from Miwaza Jemimah

* これでDjango adminで追加したものを条件付きでDB内を検索して、結果表示できるようになった!
Tue Aug 11 06:03:41 +0000 2009 from Miwaza Jemimah

* action=”-“に正しいURLを設定したのは良いけれど、NameErrorをゲットするようになっちゃった… そうしたら問題を発見した!viewsで、global nameの対象をimportしていなかった… 解決できるようになってきたぞ!
Tue Aug 11 06:02:24 +0000 2009 from Miwaza Jemimah

* 検索しても404がでてしまった問題は、form の action =””が間違っていただけ…
Tue Aug 11 06:01:01 +0000 2009 from Miwaza Jemimah

* o : from django import forms
Tue Aug 11 05:00:49 +0000 2009 from Miwaza Jemimah

* x : from django import newforms as forms
Tue Aug 11 05:00:39 +0000 2009 from Miwaza Jemimah

* Djangoでフォームを作ろうとしたけれど、viewsに問題はないのに、ImportError: cannot import name newforms と最初から躓いた… そして解決できた!新しいバージョンなので newformsはサポートしていないようだ。
Tue Aug 11 04:59:34 +0000 2009 from Miwaza Jemimah

* 仕事中にトゥウィートしても良いのですか?とボスに聞いた。
Tue Aug 11 02:32:52 +0000 2009 from Miwaza Jemimah

* @voluntas 今日もDjangoに取り組みますよ ;-D
Tue Aug 11 02:13:16 +0000 2009 from Miwaza Jemimah

* @Surgo まだDjangoの夢は見ていない ;-)
Tue Aug 11 02:11:56 +0000 2009 from Miwaza Jemimah

* そういえば土曜日の夜は寝る前、無意識のうちにDjangoの事を考えていた ;-P 拒絶反応が無くなったということが証明された :-)
Tue Aug 11 00:23:05 +0000 2009 from Miwaza Jemimah

今日はDjangoの一日だった(久しぶりにDjangoのコードを書いた:-D)。インストールから始まり、Todoアプリをチュートリアルで作ってみたり、Django adminを入れてみたり。いろいろつまづきまくったけれど、最終的に、Django adminからTodoアプリをコントロールできるまでになった!

  1. インストール
  2. 開発用サーバーを設定
  3. Todoアプリのチュートリアル
  4. Django admin

”ギターのおじさんが表紙に出ているDjangoの本”を使った。

(Pythonがすでにインストールされていることが前提)

1. じゃあ、Djangoをインストールしてみよう。まずは、Djangoをダウンロードして!

2. ターミナルで下記のコマンドを実行!

python .../setup.py install

以上。だったと思う(さっきやったばかりなのにもう忘れた。危ない。)。

2. プロジェクトを作って(”ギターおじさん本”:29ページ)

3. ここで、開発用サーバーを開いてみた。

python .../manage.py runserver

4. 早速、お約束の”Hello World!”と思ったら、なぜか”ギターおじさん本”には”Hello, Django!”と書きなさい!と指示されていたので、素直に”Hello, Django!”と書いた。とにかく、この”hello”用のviews.pyを書いて、URLconfを設定して、開発用サーバーを起動。アドレスにアクセスすると”Hello, Django!”と表示された!

5. この後、Todoアプリを作るためにも、”バックエンドデータベース”を設定した。念願の”データベース”だ!!settings.pyの”DATABASE_”をいろいろ変更して、syncdbのコマンドをターミナルで実行したら完了!

…というような形でいろいろトライして、一進一退を繰り返していたんだけれど、最初のほうの事はなんか細かいところをすでに忘れちゃった…

まあ、とにかく躓いたところをリストアップしてみよう(自分のtweetsを参考にしている)。

1. urls.py を書いた時に、”NameError… ;-(” ほんのチュートリアルをフォローしてやっていたんだけれど、最後ブラウザで動かします!というところで、urls.pyに躓いた。なぜなら、本には”ビューをviews.pyに定義したら、URLConfに登録して表示してみましょう!”とかいう一行しか書かれていなかったんだ!まあ、前に開発したアプリのurl.pyなどを必死に読んで、DjangoのDocumantationを読んだり、なんとかできた!

(r'^todo/categorized$', 'todo.views.show_categorized_list'),

当然のことながら、コロン一つ間違えただけでも動かない…但し、親切なエラーメッセージをよーく読めば、問題は分かる。これは、普段 HTML + CSS をコーディングしている人にとってはあまり馴染みのないこと…

2.Django adminをいれる時に元々、urls.pyの中にあった # Uncomment the next line to enable the admin を変更するだけでは動かなかった…本には、ここをコメントアウトしている図しかなかったから分からなかったのだけれど、実は上の方の行に”# Uncomment the next two lines to enable the admin:”で、importの行があった!それをコメントアウトして、syncdbしたら動いた!とうとう、Django adminのloginまでたどり着いた!

3. 作ったTodoアプリをDjango adminに表示するためには、Adminクラスをmodels.pyの中に書かなければ行けない…本には下記のコードを書いて、と言われていた。

class Admin: pass

何度やり直しても、いろいろ試しても、IndentationError

解決方法は、Todoアプリのmodels.pyの中でAdminクラスを定義するのではなくて、新たに、admin.pyというのを書く事だった!

from django.contrib import admin
from models import Todo,Category

class Admin:
pass

admin.site.register(Todo)
admin.site.register(Category)

以上、なんとも感動的なDjango戦闘記!他にもいろいろ書かなければいけないことがあるのだけれど、レイジーなので、いろいろ省略しまくった。

あと、Djangoにトライしてみたかったら”ギターおじさん本”がかなりオススメだ。本当の名前は”開発のプロが教える標準Django完全解説”。欲しかったら、Amazonでゲットして。

アメリカから日本に来てから(これはあまり関係ないと思うけれど)、なぜか突然Evernoteが壊れた!Evernote for Macなんだけれど、スクリーンショットのノートは作れても、まったくEvernote上にコンテントが表示されなくなっちゃったんだ!!(今考えてみたら、言語環境をEnglish>日本語、とか変更したことが影響しているのかな?)。

とにかく不便だった。デザインの仕事の効率にもかなり影響を及ぼしたと思う。リインストールしてみたり、いろいろ試してみまくった。だけど、問題は解決されずに時は過ぎていった…ノートは作れるけれど、表示されない、というのが問題だったんだけれど、作ったノートは無事にシンクされていることをWebのEvernoteとiPhone用で確認した。

そして、とうとう今日Evernoteを直すことができた!もし、同じ問題がMacでおこってしまった人がいた場合のために、直し方を書くね。

  1. まずは、一度Evernoteでシンクする(シンクしないと、シンクされていない部分のデータが消えてしまうと思う)。
  2. Evernoteを終了。
  3. Home > Library > Application Support の中にある”Evernote”というファイルをどこかに移動する(どこでも良い、例えばDesktopとか…)。
  4. そうしたら、もう一度、Evernoteを起動する。これで、たぶん勝手にシンクが始まって、今までのノートが読み込まれるだろう。

人生にEvernoteが帰ってきた!本当にうれしいことだ!!!!やっぱり、Evernoteが無いとだめなんだ(…とか言っても、Premium Accountは買っていない。毎月、あーーーディスクリミットが-!!!とギリギリに使っている。)!!

WordPressには普通のブログポストのページ以外に、”Pages”というものがあって、スタティックのページを作ることができる。”page”を作るとpage用に用意されているテンプレートが適用されるんだけど、それぞれのpagesで別のテンプレートを使いたい、ということがあるね?Wordpressはそれができるんだ

  • 他のテンプレートが置いてあるディレクトリと同じ所に、新しく用意した、テンプレート(PHPのスクリプト)をアップロードする。
  • この際に注意することは、そのテンプレートの一番最初の行に必ず下記のコードを(PHPのスクリプトとして書き直して、それは、最初と最後に来るPHPタグのこと)入れること。そうしなければ、テンプレートの選択肢のリストに表示されないよ!

phpcode


/*
Template Name: Your Template Name
*/

これで、新しいpageを作る時に、新しいテンプレートが選択できるようになる。

template

“iPhone”を愛用している人が”Android”を一ヶ月間愛用した話

去年のiPhone 3G 日本発売から約一年間 iPhoneを使ってきた、Web Appsの開発とかもいろいろしてきた。Web AppsはGoogle App Engine をベースに作ってきたのものあって、5月のGoogle I/Oに行ったよ!!!!そのあと、一ヶ月間アメリカを旅する!というビッグおまけもボスから頂いたんだ(前にも書いたか)!一ヶ月間、いろいろな友達のところを訪ねたりしたので、もともとプリペイドの携帯をアメリカで買う予定だった、着いた日にはゲットすることができなかったので、Google I/Oの一日目のお昼にでも買いに行こうという予定にしていたんだ。

そうしたら、Google I/O 1日目の朝のキーノートで!!!!!Androidをattendees全員に配布します!ということが発表された、しかも1ヶ月間の無料通話とデータ通信付きで!!!これからまさに一ヶ月間アメリカに滞在する!!という時に起こった奇跡だ(大げさじゃなくて)!!!

…ということで、アメリカにいた1ヶ月間Androidを使っていた(Androidを一ヶ月間無料で使い込める、というなんとも貴重な体験!)。一ヶ月使っている時に、iPhoneだったら…とか、Androidのほうが!とかいうことはほとんど考えることはなかった。これがすごいところだと思う。二つとも違いを感じずに使えた、ということが一番凄いな。

——————————————

クラウドがiPhoneとAndroidの間のボーダーを取り除いた!

そのようにできた一つの大きな理由はクラウドにあると思う。iPhoneでまず大事なのが、メール。miwaza.comのメールをGmailに転送して使っているので、まったく問題ない。そして、他にはFacebookとTwitter、これらのアプリはAndroidにもあるから、これも全く問題なかった。(但し、TwitterのアプリはiPhoneの場合、本当に良いクライアントがたくさんある!に対して、Androidはクライアントはたくさんあるけれど、これぞ!というものが見つからなかったのは少し残念。)

コンピューターでも携帯でも新しい物に変える時に問題となるのが、データの移動とか共有(特に日本に帰ってきたらiPhoneに戻るから)。クラウドはそれを解決してくれた。

——————————————

携帯電話としてのAndroid

iPhoneとAndroidを比べた時に、一つ言えるのは、Androidのほうが電話としては使いやすかったってことかな。

——————————————

ウェブブラウザはどっちがいいかな?

あとは、やっぱりウェブブラウザはiPhoneのほうが断然使いやすいってこと :-) マルチタッチはやはりウェブブラウザに必ず必要だ。

——————————————

iPhoneとAndroid、写真を持ち歩くにはどっちかな?

iPhoneのメインの用途の一つは写真を持ち歩くことなんだけれど、写真(カメラの事じゃなくて、DSLRで撮った写真をiPhoneに転送している)もやっぱりiPhoneのほうが綺麗に見られるし、人にも見せやすい。ただ、Androidの写真表示も十分綺麗。

——————————————

…結論はね、

Androidはコンピューターが乗ってる携帯。
iPhoneは携帯が乗ってるコンピューター。

…だ。そして、どちらも素晴らしい。

それに、Androidは”携帯”ishなところがiPhoneよりも強いので、iPhoneより日本人に喜ばれそうな気がした。

今まで開発したiPhone用web appsを着々とAndroid対応にしたり、最近かなりAndroidと交流している(Androidでどうでも良いゲームを遊ぶことにちょっと時間を費やしてしまった事は秘密にしようかな)。

Androidは興味深くてしょうがない。但し、Android用に何かを開発しようと、iPhoneのSDKの感覚で始めてしまうと、バンカーがたくさん潜んでいるぞ。Emulatorを開くだけでも結構初めは一大事、分かってしまえばシンプルなものだけど(それにしてもAndroid Emulatorはちょっと遅いな…)。

じゃあやってみよーう(AndroidのSDKダウンロードしておいて)。

まずは、avdを作らなければいけない。avdとは、Android Virtual Devicesのこと。調べてみたところ、どうやら日本語では”Android仮想デバイス”と呼ぶようだ。

avdの作り方はこれ。ターミナルとかを使って。

/android-sdk/tools/android create avd --name avd1.5 --target 2

この”avd1.5″と”target 2″とは、Android 1.5のこと。だから、もし以下の用に書けばAndroid 1.1のavdを作成することができる。

/android-sdk/tools/android create avd --name avd1.1 --target 1

とコマンドを使うと以下の質問が聞かれるから no と答える。(ごめん、この部分実は意味が分からないけど no と書いたら使えたから…)

Do you wish to create a custom hardware profile[no]

これでavdファイルが完成した。

これでemulatorが起動できるんだけど、起動して、”Android_”が表示されてから使えるようになるまでかなり時間がかかるから!!

emulatorの起動には…

/android-sdk/tools/emulator @avd1.5

これでデフォルトのskinでAndroidのemulatorが使える。もし、skinを変えたいのであれば下記のコマンドを使って(デフォルトはHVGA)。


/android-sdk/tools/emulator -skin @avd1.5 HVGA

QVGA-Pの他にもHVGA-P、HVGA-L、QVGA-L等がある。

どうかな?iPhone SDKしか知らないと、Android SDKの場合emulatorを起動するところから躓いてしまうぞ(そして躓きかけたぞ)!

Androidで日本語を入力できるようにした。

Google I/OでもらったAndroidは英語しか喋れない。だから、日本語を教えてあげよう。日本語の表示はできるけど、入力ができなかった。それを解決するためには、Simejiをインストールするんだけど、Android Marketにあるものは古いバージョンだから、SDKに入っているadbを使ってインストールする必要がある。

だから、まずはAndroidのSDKをインストールする。2009年7月4日現在の最新版は1.5。ここからダウンロードして。

AndroidをUSBで接続する。しかし、ここでマウントはしてはいけない。(PCの時はUSBでAndroidを接続することはややこしい、ほかのページをみて。)

AndroidのSettings / Applications で Unknown Sourcesをオンにする。

unknownsources

そして、Simeji(.apk)をダウンロード(http://www.adamrocker.com/blog/264/simeji-local-dictionary.html)。

2009年7月4日現在の最新版は”Simeji2.5.2.apk”。

ターミナルで …/adb install …/Simeji2.5.2.apk コマンドを事項。

/android-sdk-mac_x86-1.5_r2/tools/adb install /Simeji2.5.2.apk

ピクチャ 5

* daemon not running. starting it now *
* daemon started successfully *
721 KB/s (212793 bytes in 0.287s)
pkg: /data/local/tmp/Simeji2.5.2.apk
Success

が出てきたらインストール完了。

あとは、Androidの実機でSettings / Locale & Text で Simejiを有効にする。

localetext

simeji

最初にインストールしたのは2.4.1だった。最新版ではフリック以外の入力方法も追加されて、かなり使いやすい!インストールも簡単でいいね。

type

さくらインターネット、FreeBSDの標準シェルはbashじゃない、これがシェルを変更する方法。

% chsh -s /usr/local/bin/bash

これをターミナルとかで実行すると、パスワードの入力を求められるから、さくらインターネットの登録したときに送られてきたパスワードを入力して完了。

変えたのは良いけど戻し方が分からなくて焦った!……となった場合は…

これが戻し方だよ(例はbashからtcshへ)。

$ cat /etc/shells | grep tcsh

$ which tcsg

$ chsh -s /bin/tcsh

これで完了。

Google I/Oで頂いたAndroidが日本で使えた!自分のiPhone 3GのSIMカードをAndroidに差し込んだら、電話ができた!パケットの金額が怖いので、3Gでブラウザを開いてみたり、とかそのような動作はしてみなかった…電話できた!というだけでもうれしい。記念写真も撮った。

softbank

iPhoneで簡単にスクリーンショットをとる方法はみんな知っている。Androidでもスクリーンショットが撮れるのだけど、USBでコンピューターに接続されていなければいけない。これが方法。

1. まずはAndroid SDKをダウンロード

2. SDKのフォルダの中にあるtoolsというフォルダ内に”ddms”というUnix Executable Fileがあるからそれを開く。

3. ターミナルが開いた後、待っていると、一つダイアログが出てきた後で、Dalvik Debug Monitorがひらく。

3. 左の一覧から、対象の端末を選択する。

4. Ctrl + S (PC/Mac)

5. Device Screen Captureで現在の表示されている画面が出てくる。

6. Save / Refresh / Done のいずれかをする。

7. Saveは.PNG形式。

8. iPhoneに比べると少し不便。

Follow

Get every new post delivered to your Inbox.