Google App Engineで「Hello World!」なんてしてみた
IT系ニュース見てたら、
「GoogleがAmazonみたいにインフラをみんなが使えるようにうんちゃらかんちゃら」とあり、
「ほぉ〜!」と思ったところ
「限定1万人で」みたいなことも見えたので急いで登録してみました。
登録当初は「使えるようになったら連絡するね」とGoogleから言われたんですが
数日後、「使えるようになったよ」とメールが来てたのでSDKも落として使ってみました。
Googleのドキュメント見つつ、とりあえず、Pythonもよく知らんので
まずは、コピペがてらHelloWorldしてみることに。
まずは適当にディレクトリを切って、その配下にhelloworld.pyを作成します。
helloworld.py
print 'Content-Type: text/plain'
print ''
print 'Hello, world!'
Content-type要るんですね。
同じディレクトリにapp.yamlも作成します。
app.yaml
application: helloworld
version: 1
runtime: python
api_version: 1handlers:
- url: /.*
script: helloworld.py
あとは作成したディレクトリのある場所で下記のコマンドを打つと
http://localhost:8080で確認できます。
# dev_appserver.py helloworld/
Allow dev_appserver to check for updates on startup? (Y/n): Ydev_appserver will check for updates on startup. To change this setting, edit /Users/xxxxx/.appcfg_nag
INFO 2008-04-14 23:07:13,326 appcfg.py] Checking for updates to the SDK.
INFO 2008-04-14 23:07:14,339 appcfg.py] The SDK is up to date.
WARNING 2008-04-14 23:07:14,339 datastore_file_stub.py] Could not read datastore data from /var/folders/C2/C2SqSVziEYOlAlZObkkdxE+++TI/-Tmp-/dev_appserver.datastore
WARNING 2008-04-14 23:07:14,340 datastore_file_stub.py] Could not read datastore data from /var/folders/C2/C2SqSVziEYOlAlZObkkdxE+++TI/-Tmp-/dev_appserver.datastore.history
INFO 2008-04-14 23:07:14,344 dev_appserver_main.py] Running application helloworld on port 8080: http://localhost:8080
INFO 2008-04-14 14:07:20,836 dev_appserver.py] "GET / HTTP/1.1" 200 -
INFO 2008-04-14 14:07:20,838 dev_appserver_index.py] Updating /Users/xxxxx/Documents/GoogleApp/helloworld/index.yaml
INFO 2008-04-14 14:07:20,965 dev_appserver.py] "GET /favicon.ico HTTP/1.1" 200 -
Googleのサーバへは下記のコマンドでUploadできます
# appcfg.py update helloworld/
Email:
Password for :
Saving authentication cookies to /Users/xxxxx/.appcfg_cookies
Scanning files on local disk.
Initiating update.
2008-04-14 23:11:55,373 ERROR appcfg.py:1070 An unexpected error occurred. Aborting.
Error 403: --- begin server output ---
You do not have permission to modify this app.
--- end server output ---
あれあれ??
なんか怒られる。。。
もう一回、ドキュメントとかを確認してみると、
Googleで作成したアプリケーション名をhelloworldにしてなかったので
app.yamlに書かれてるapplicationと違うので怒られてたみたい。
なので、もう一回、app.yamlを修正して、あげ直し。
# appcfg.py update tryout-lab/
Loaded authentication cookies from /Users/tryout/.appcfg_cookies
Scanning files on local disk.
Initiating update.
Cloning 1 application file.
Closing update.
Uploading index definitions.
はい、うまいこと行きました。
http://app-id.appspot.comで見てもOK。
なかなか興味深いです。コマンドも用意されててアップも簡単みたいだし。
pythonの勉強も少ししつつ、触っていきたいと思います。
難しいね
普段、HTMLを書くときは手書きで書いてる人なんですが、
やっぱり、ツール使って書くというのも覚えないとと思い、DreamWeaverを使ってみました。
思ってもないところいタグが入ったり、hrタグの属性の変更方法が分からずと
なかなか悪戦苦闘中。。。
CSSも適用するだけで一苦労です。。。
でも、覚えたら、なんか色々できそうなので、もう少しがんばってみます。
↓これでちょっと調べたりしてます。。。
お勉強
ADOBE CREATIVE SUITE 3 DESIGN PREMIUM オフィシャルトレーニングブック
- 作者: ワークスコーポレーション別冊書籍編集部
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2007/12/25
- メディア: 大型本
- クリック: 18回
- この商品を含むブログ (5件) を見る
とりあえず、これ読んで少しずつやってます。
とりあえず、今やってる章の内容からご紹介。
- GRAPHIC DESIGN
- 「製品ロゴをデザインする」
- 「製品ラベルをデザインする」
- 「パッケージをデザインする」
この内、「製品ロゴをデザインする」がほぼ終了。
だいたい30ページでした。
パスとかの概念は分かったんやけど、
アンカーポイントの概念と操作が難しいなぁ。。。
でも、やっぱり、細かい部分のディテールの部分は
画像おっきくして、画像組み合わして丸い部分を生み出したり、
アンカーポイント操作してオブジェクト作ったりと、細かい作業で慣れてない作業に大変でしたw
↓とりあえず、ここまでできました♪
したいことリスト
なんとなくお休みしてました。
読んでくれる人がいてるかどうかは別としてご挨拶。
そもそもBlogは日々の自分のやったことに対しての備忘録として書いてたのですが、
なんかそうじゃなくてほんとは自分が成長した記録として残したい気持ちがでかいことに気がつきました。
今まで書いたことは無駄じゃないけど、
備忘録と、その日したことと、成長したいって思って書いたことと
それがごっちゃになってるなぁと。
でも、カオスの良さが出てるかというとそんなこともなくて。
ちょっとそんな気持ちを整理する意味で、まずは自分のやりたいことを書き出してみよ〜って感じで
ちょっと書いてみます。
ちなみに本職はエンジニアです。
- プログラミング
いろんな技術も含めてやけど、やっぱりギークになりたいなぁって。
PHPなり、RubyなりPerl、JAVA。
それなりには深く話しができるぐらいにはなりたいです。
最近、買った本
Code Craft ~エクセレントなコードを書くための実践的技法~
- 作者: Pete Goodliffe,後藤正徳,鵜飼文敏,平林俊一,トップスタジオ,まつもとゆきひろ
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/11/29
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 216回
- この商品を含むブログ (83件) を見る
RailsによるアジャイルWebアプリケーション開発 第2版
- 作者: Dave Thomas,David Heinemeier Hansson,Leon Breedt,Mike Clark,Andreas Schwarz,James Duncan Davidson,Justin Gehtland,前田修吾
- 出版社/メーカー: オーム社
- 発売日: 2007/10/26
- メディア: 大型本
- 購入: 18人 クリック: 300回
- この商品を含むブログ (134件) を見る
Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)
- 作者: 西田圭介
- 出版社/メーカー: 技術評論社
- 発売日: 2008/03/28
- メディア: 単行本(ソフトカバー)
- 購入: 47人 クリック: 1,166回
- この商品を含むブログ (374件) を見る
- デザイン
最近、IllustratorとかPhotoShopとかFlash、DreamweaverとかAdobe周りを勉強してます。
昔からデザインにも興味あって、自分でも作品作れるようになりたいし、
使いこなせるようになりたいです。
最近は素材だったり、作品にしたい気持ちもあって
休日はカメラ持って写真とるようにしてます。
あと、動画とか音楽もマスターしたい。
最近買った本と物
ADOBE CREATIVE SUITE 3 DESIGN PREMIUM オフィシャルトレーニングブック
- 作者: ワークスコーポレーション別冊書籍編集部
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2007/12/25
- メディア: 大型本
- クリック: 18回
- この商品を含むブログ (5件) を見る
Mac Fan GarageBand '08マスターブック (Mac Fan BOOKS)
- 作者: 木村公彦
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/12/08
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 6回
- この商品を含むブログ (4件) を見る
- 出版社/メーカー: リコー
- 発売日: 2005/10/21
- メディア: Camera
- クリック: 187回
- この商品を含むブログ (137件) を見る
RICOH デジタルカメラ Caplio (キャプリオ) R7 ブラック 800万画素 光学7.1倍ズーム CAPLIOR7BK
- 出版社/メーカー: リコー
- 発売日: 2007/09/14
- メディア: Camera
- クリック: 5回
- この商品を含むブログ (13件) を見る
三洋電機 デジタルムービーカメラ「Xacti」 DMX-CG65(グリーン) DMX-CG65(G)
- 出版社/メーカー: 三洋電機
- 発売日: 2007/04/20
- メディア: Camera
- クリック: 7回
- この商品を含むブログ (26件) を見る
- WEBでなにをしたいのか。
うーん、やっぱり、ちゃんとアウトプットしたい。
それが作り上げたサイトなのか、途中経過のBlogなのか、どっちでもいいねんけど、
でも、できれば両方していきたい。
ちゃんとアウトプットしてると言う意味で、
面識はないけどAmachangとか、
職場で知り合いのtkmrとかはすごいなぁと思う
- 結果
なんか、書いてて思ったのは、
「あぁ、やっぱりWEBが作りたいねんや」と。
作っていく過程とか、つまづいたとことか、その結果でき上がったものとか
全部含めてアウトプットして行きたいんやなと思いました。
デザインも、プログラミングも一人でできること限られてるけど
できたら「カッコイイ!」し、「やりたいねん!」ってのは自分の今の偽らざる気持ち。
これを出だしに、このBlogも共にもう一回歩みます。
今回は、ダラダラした内容やけど、整理するって意味でご勘弁を。
P.S.
こんな欲張りな気持ちにさせてくれた
去年出会ったMacBookに感謝!
■
昨日作ったモデルにバリデーション処理を追加する
class Product < ActiveRecord::Base validates_presence_of :title, :description, :image_url validates_numericality_of :price validates_uniqueness_of :title validates_format_of :image_url, :with => %r{\.(gif|jpg|png)$}i, :message => "is not GIF,JPG,PNG IMAGE" protected def validate errors.add(:price, "is Not Correct") if price.nil? || price < 0.01 end end
Productのモデルにデータを追加する画面は、
今までScaffoldを使用してきたけども、viewの部分を変更するために
Scaffoldを生成する
# script/generate scaffold product admin exists app/controllers/ exists app/helpers/ exists app/views/admin exists app/views/layouts/ exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ skip app/models/product.rb identical test/unit/product_test.rb identical test/fixtures/products.yml create app/views/admin/_form.rhtml create app/views/admin/list.rhtml create app/views/admin/show.rhtml create app/views/admin/new.rhtml create app/views/admin/edit.rhtml overwrite app/controllers/admin_controller.rb? [Ynaqd] Y force app/controllers/admin_controller.rb overwrite test/functional/admin_controller_test.rb? [Ynaqd] Y force test/functional/admin_controller_test.rb identical app/helpers/admin_helper.rb create app/views/layouts/admin.rhtml create public/stylesheets/scaffold.css