終わってみて

kasahiです。


いやぁ3ヶ月もあっという間。
今回はもともとアドバイザー(のひとり)として参加するつもりだったのですが、
途中からすっかり参加者でした。


自分的な目標としては、あまり使ったことのないperlrubypythonを覚えつつ、

【ゴール】
「3ヶ月で3つの言語を勉強して3つのフレームワークを覚えて3つのサービスを作る」

というのがゴールでした。


で、結果ですが、
なんともギリギリな感じで終了となりました。



作ったもの

グルメをメモする

オモシロひとこと掲示

tumblrをランダムに表示する


まぁ一応、こんな感じで各言語で3つ形となるものは作ったのですが、
正直、本来自分がやろうと思ったところまでいけませんでした。。
(もっと色々作りこむつもりだったのに。。。)



で、敗因は何かと考えてみたところ、
(※敗因と書いていいわけと読みます)

ドラクエ9が面白すぎた。
ドラゴンクエストIX 星空の守り人

これに尽きます。


ドラクエに手を出してしまったことにより、夏の大部分が崩壊しました。
ひとしきりクリアしてふと我に返り、自分の意思の弱さにほとほとあきれました


ただ、ドラクエ9は本当に面白かったです。



とはいえ
みなさんで3ヶ月の間、集中してチャレンジするというのはとても楽しかったです。
また、自分的にも各言語を色々使ってみたことで元々あった抵抗感がだいぶ無くなり、よかったと思います。


もし次回があるならば、もうゲームには手を出しません。


3ヶ月間、どうもありがとうございました。
お疲れ様でした。



ほんとの最後に
このブログのID、本来は、
「programing」ではなく、⇒「programming」が正しいですよね!
ちゃんと気づいていましたよ!わざとですよ!

結果報告

こんにちは。krrです。

結論から言うと、iPhoneアプリは完成できませんでした。
作ろうとしていたのは、写真の上に手書きまたはキーボード入力で線や字を書いて保存できる、というアプリです。写真にテキストを添えるのであればメールでも様々なアプリでもできますし、手書きだけならそういうアプリを見かけましたが、それではどうしても画面内に書ける文字数が限られるために用途が違ってくるので、作る意味はあるだろうと。

まずはどこまでは行ったかのご報告です。
アプリを立ち上げて、カメラを使うのか、カメラロールから既存の写真をひっぱってくるのかを選択(アクションシートの表示:下からにゅっと出てきて選択肢を提示するあれです)、撮影/選択したものを画面に表示。表示したデータを加工できるようにビットマップデータへ変換。(途中に加工部分があって:ここができませんでした)加工が終わったら、今度はビットマップを元の写真データへと変換。と、ここまでです。

そしてどこができなかったかというと、入力を受け付ける、つまり文字通り肝心なイベント処理の部分です。シングルタップで手書き(そのまま指を離すまで線をひく)、ダブルタップでキーボード呼び出し(吹き出しを表示、その中にカーソルを表示)、としたかったのですが、そのための参考情報を探しているうちにタイムアップとなりました。

難しかった点は主に2つにまとめられるように思います。
プログラミングは実際には、厳密な意味で0から作ることではなく、既存のものを組み合わせることなのだと思います。実際、appleは膨大なライブラリとドキュメントを用意してくれています。しかし、自分がやりたいことを実現してくれるものがそのどの辺りにあるのかがわからなければ当然、使えません。そこを自分で探し当てて行くのがプログラミングの醍醐味の一つなのかもしれませんが、今回ほどライブラリアンについて欲しいと思ったことは多分そうありません。
また、appleのドキュメント以外に9冊の参考書を買い、ウェブでもあれこれ見ましたが、当然ながら、著者たちはそれぞれ自分の流儀でプログラミングし、説明します。ここではこうするけど実際にはこういうやり方もあるよ、という記述はあまり見当たりません。そこで、本の通りにやる部分から離陸して、自分で独自に作る部分に入る時、結局どうするのが一番よいのか、困ってしまいました(特に複数の著者のプログラムを組み合わせてみようという時)。これは勿論、どんなコードが最も美しいか、といった高度な話ではなく、プログラムを書く根本的なやり方がわかっていないことから来た難点だと感じています。

今後も、勉強は続けます。今回は、とにかく多くの本にあたる中で、自分に使えるものをピックアップするというのが基本姿勢でしたが、時間制限が解かれたので、まずは1冊選んで、サンプルアプリの制作も含めてテキストに沿って手を動かして行こうと思っています。手がなじんで、応用編=自作へ進むことを目指しつつ。

3ヶ月間、どうもありがとうございました。

3ヶ月でゼロからRails勉強。その成果。

こんばんわ。yasutoです。
さてあの後、無事データベースも作成できました。実行するディレクトリが間違っていただけという間抜けなミスでした。
そうこうしてるうちに予定していた3ヶ月が終了です。というわけで成果報告です。

作ったもの

これです。やり方共有サイト「rightway」
http://preface.sakura.ne.jp/rightway/

はじめてということもありユーザー登録機能、コンテンツ投稿機能など基本的な機能をそろえたCGMサイトがいいなと思っていたこと。
グルメのレシピサイトみたいな体裁で、グルメ以外のマニュアルを共有できるサイトがほしいなと思っていたこと。(Q&Aサイトでうまくいってるものいくつかあるけど、同じ質問が乱立してて、しかも答えのフォーマットがばらばらだったりで効率わるいのかもなーと感じてました)
以上の理由でつくりました。まだまだ「ちゃんと動いてる」というには不十分です。画像もちゃんとUPできません。

作る上で難しかったこと、困ったこと

問題その1:モチベーション維持

大変でした。いざ勉強始めると非常に楽しいのです。でもとりかかるまでが腰が重かった。。
ある程度手応えを感じられる区切りまで進めようと思うと30分〜1時間の空き時間では厳しくて、そうなると平日はなかなか時間が取れない。
土日しかチャンスがなくなるわけですが、土日もちょっと私用でイベントが入るとあっというまにつぶれてしまい、という調子でした。
結局、下記のような方法でなんとかしました。

    • ほんの10分15分、触るだけでもいいからやる。

 何でひっかかってたのか?問題を忘れないでいるだけでも十分成果だと考えるようにしました。時間がない時間がない、で1週間何もしないまま間をあけちゃうと、何が問題だったのかを思い出すだけで結構な時間取られちゃいます。

    • 場所を変える

家ではなかなか集中できず、近所のファミレスやマックにPC持って行って作業してました。他の人からモニター丸見えなので2ch見たりゲームしたりとサボる気にもなれず真面目に集中できてよかったです。

    • 進捗を報告しあう

これは工夫・方法とは違いますがやはり仲間がいたのは大きかったです。進捗を報告しあうと励みになりました。

問題その2:基本的なミス

思い返してみれば結局、開発中にひっかかった部分の原因って、スペルミスとか全角スペースを使ってしまっているとか、実行するディレクトリが違うとかしょうもないことばっかりでした。でもとにかく知識がないので「ここまでは間違ってないはず」っていう自分の中での足場になる確証がないのです。なのでいちいち全部を疑わないと間違いを見つけられない、という状況が続いてしんどかったです。

問題その3:サーバー周り

最大の難関は何といってもこれでした。
僕はさくらのレンタルサーバーでRailsを動かそうとしたわけですが、そもそもがRailsの使用を許可されていない環境なので、いろいろ設定をいじってやっと動くわけです。
この設定部分は、勉強してるRubyRailsとはまったく別種の知識が必要で、ほとんど意味がわからないまま進めていたので非常にストレスでした。
そしてやっとレンタルサーバー上で動くようになったと思ったら無茶苦茶重い。。。

今度は、Rails向けのHostingサービス「heroku」や話題のGAE上でJRuby×Railsという形にサービス移し替えにチャレンジしてみようかなと思います
・heroku
http://blog.tkmr.org/tatsuya/show/419-rails-heroku-com-git
Rails × JRuby × GAE
http://www.moongift.jp/2009/04/yet_another_ruby_blog/

意外と何とかなったこと

Railsの基本的な仕組みを理解してからは「どうしたらいいかさっぱりわからない!」という状況には陥りませんでした。「こういう機能つくりたい!」というときには、おおよそどうすればいいか想像ができて、あとは本やwebで調べれば案外うまくいくものでした。機能の実装の仕方がわからなくて何日もハマるということはありませんでした。(まぁ、基本的な機能しかつくってませんものね)

終わってみて

というわけで2009年6月、プログラム経験ゼロというところからはじめて3ヶ月。一応はwebアプリケーションと呼べるものを作って本番で動かすことができました。
別人のように変わったとは言わないまでも、この3ヶ月前後の違いは僕にとっては大きいものになりました。
これまで「こういうのあったらいいな」とアイデアがあっても、自分は「使う側」で「作る側」ではない=つくれない、と思ってました。
これからは「あったらいいな」を「がんばれば作れるかもしれない」と思えるのはとてもうれしいことです。3ヶ月結構大変でしたが、やってよかったです。これからも勉強続けていこうと思います。拙い文章で、かつ不定期すぎる更新でしたが読んでくださった方、スターやブクマも非常に励みになりました。ありがとうございました。それではー。

perlとcatalystで作るオモシロ掲示板

kasahiです。
8月ももう終わってしまいますねー。


perlcatalystの勉強の成果としてひとつアプリを作りました。

こちらです。


こんな感じでオモシロひとこと(オモロー)を投稿していただければと思います。

機能的には、ログインつきの掲示板みたいなものです。


なんとなく、「一行で笑ったら〜」関連の投稿を見ていて、
このあたりが集められたらいいなと思って作りました。


しかし、時間もあまりとれなかったため、機能的には

  • ログイン、ログアウト
  • オモローの一覧
  • オモローの投稿

くらいしか実装できていません。


もうちょっと作りこんで、

  • 編集、削除
  • 詳細ページ
  • ユーザ登録
  • ユーザページ
  • 一覧ページのページャ、、、

などなどやりたかったのですが、タイムアップでした。残念です。。


内部的には勉強もかねてperlcatalystで作りました。


感想としては、catalystの情報がWEBだと結構古く(おもに2006年のものが多い)、
2009年の今だとサンプルを動かすのに「今でもこれでいいのかな?」とか考える必要があり、
地味に色々苦労しました。
(※これは自分がまだperlをそこまでわかっていないところも多分にあるかと思います)


あとは、例によって見せられる環境に置くためにさくらインターネットレンタルサーバで動かす必要があったので
そこのセットアップも少々時間がかかってしまいました。
今回は、(そのまま開発サーバを使うと http:****.com:3000/ みたいなポートを指定しなきゃいけなくなり、
ちょっとカッコ悪いのと、常にサーバを起動しておく必要があるので)、CGIとして動作させるようにしました。
なので、動作は少々重かったりします。


いやー、色々勉強になりました。


あとでまとめを書こうかと思います。
なにやらひとつの夏が終わった気分です。

tumblrをランダムに表示する「tumblrandom」

kasahiです。


時間がとれずpythonとGAEで作ったもののまとめを書いていなかったのですが、
今回、tumblr関連で何か作ってみました。


tumblrというのは、クリッピングサービスみたいなもので(こちらなどが参考になります)、
それをだらだら見るアプリ(特に写真)があるといいなぁと常々思っていたので作ってみました。


こちらです。


accountの所にtumblrのaccount名を入れると、その人のtumblr(写真)がランダムに再生されます。
デフォルトは自分のになっていますが、個人的に好きなlomoさん

の写真などをだらだら見ていると結構幸せになりますし、gakkieの写真

を見ていると面白いです。


技術的にはGAEの利点も活かしてなく、正直GAE上にある意味はまったくないのですが、
なんとなくすっきりした感じに仕上がったのでよいかと思っています。
(GAEのデプロイのやり方やpythonなどもなんとなくわかりましたし。)


あとはperlですねー。
まだ作り途中ではあるのですが、今日明日でできるところまではやろうと思っています。


がんばります。

Sakuraのレンタルサーバーでrailsを動かす、でうまく先に進めず。。。

こんばんわ。yasutoです。
すっかり間があいてしまいました。さて何に苦戦していたかといいますと、サーバーまわりのもろもろです(今も絶賛苦戦中)。自宅PCの開発環境にrails入れて作ったアプリケーションをインターネット上で動かすところで完全にハマりました。


環境はSakuraサーバーのスタンダードプランにしました。
理由は本ブログメンバーのkasahi君がすでにrailsを動かしてた実績があったのと、web上を検索しても結構参考になりそうなサイトがみつかったので、これらを見ながらやればなんとかなるだろうと思ったからです。

ただ、sakuraのFAQでは「Railsはつかえません」とあり、簡単にはいかないのだろうなと予測はしてました。
http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000510


■今回参考にさせていただいたサイト
http://iwatakenichi.blogspot.com/2007/08/ruby-on-rails-on-sakura.html
http://ruby.g.hatena.ne.jp/garyo/20070507/1178512720
(なんど読み返したかわかりません。)

上記サイトのとおり

1.RubyGemsを入れる
2.Railsをインストール

このあたりはなんら問題ありません。
で、次くらいからあやしくなるのですが、

3.開発中のものと同じ名前のプロジェクトをsakura上でも作成

% rails プロジェクト名
ですね。これで必要なファイル、フォルダ類がだーっとできあがり。
ファイル&フォルダは全部まっさらなので、ローカルで作成したファイル群をftpソフトで丸ごとアップロード&上書きしました。
これらのファイルにパーミッション設定の変更とやらを施します。

4.環境ファイルの設定

config/environment.rb に下記を追加

$LOAD_PATH.push("/home/*****/lib/")
$LOAD_PATH.push("/home/*****/lib/ruby")
ENV['GEM_HOME'] ||= '/home/*****/lib/ruby/gem'
ENV['RAILS_RELATIVE_URL_ROOT']="/sample/rails/プロジェクト名"
5.public/.htaccess でいくつかコメントアウト
#AddHandler fastcgi-script .fcgi
#AddHandler cgi-script .cgi
#Options +FollowSymLinks +ExecCGI
6.シンボリックリンクをつくる
% ln -s $HOME/rails/プロジェクト名/public $HOME/www/プロジェクト名

これでプロジェクトを置いたURLにアクセスすると「Welcome aboard画面」がでます。
で「About your application's environment」というリンクをクリックして「For security purposes, this information is only available to local requests.」と出ればとりあえず正解。とのこと。

ところがここでおおハマり。
「Application error Rails application failed to start properly"」
としか出ません。
これはconfig/environment.rbに問題があるとのことですが何度見直しても間違いがない。
数日間費やしてやっと解決しました。原因は、手順3にありました。
sakura上に作ったプロジェクトに、ローカルのファイルをすべてアップロード&上書きしてましたがこの中に不要なものがあり、そのファイル内に記載されたパスが「\C\windows\hoge」みたいにローカルのフォルダを指していたようなのです。
3をやり直して、必要なファイルだけをアップロードしたらうまくエラーが解消されました。

ととりあえずひとつ壁を越えたぞー。
そして今はデータベースにテーブル作ろうとして、

ERROR 1044 (42000): Access denied for user 'ユーザー名'@'%' to database 'プロジェクト名_development'

が出続けてます。。。道のりは遠い。。開発も進めなきゃ。。。

Google App Engin SDK で開発サーバーが起動しない場合の解決法

臨時プログラミング勉強会@渋谷ルノアールです。

前回のエントリーで、Google App Engin SDKをインストールしたものの、開発サーバーが起動しなかった件について、ようやく解決したので記載しておきます。

いくつかの要因がありますが、まず素人がプログラミングする際にどうしても壁となりやすい下記の条件が不幸なことに重なってしまってました。

1.インストールしたGoogle App Engine(以下GAE)のバージョンが最新のものだが、参考にしていた本に記載されているのは古いバージョンであったこと
2.本で記載してあるPythonのバージョンが古く、自分が学習しているPythonのバージョンとは違っていたこと
3.自分がこれまで学習していたPythonのバージョンが2.6のもので、GAEではPythonのバージョン2.5までしかサポートしていなかったこと

3つのポイントそれぞれでズレが生じており、どれかに1本化する必要がありました。当然のことながら、GAEで動かすことがゴールですから、GAEのルールに合わせることにします。

まず、Python2.6.2(※自分が使ってたもの)をアンインストールして、Python2.5.4をインストールしました。(インストールはコチラ:http://python.org/download)

インストール後、システムのプロパティより環境変数の編集をします。編数名のPathの後ろに次のように記述します。

;C:\Python25;C:Python25\Scripts

アプリケーションのディレクトリと app.yaml 設定ファイルがあれば、dev_appserver.py コマンドで開発用 Web サーバーを開始できるということなので、これらを設定します。

とりあえず自分は、Cドライブ直下に、テスト用のディレクトリを作りました。

C:\test_log

上記のディレクトリの中に、app.yamlファイルを置きます。GAEのチュートリアルでサンプルがあるのでそれを利用しつつ、若干書き換えます。
http://code.google.com/intl/ja/appengine/docs/python/config/appconfig.html

application: test-log
version: 1
runtime: python
api_version: 1

handlers:
- url: /styles
  static_dir: styles

- url: .*
  script: main.py

続いて、PythonHello Worldと出す命令文を書きます。test.pyとでも名前を付けて、C:\test_log_logに保存します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template

class IndexHtml(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__),'index.html')
        template_values = {}
        template_values['messeage'] = 'Hello, world!'
        self.response.out.write(template.render(path,template_values))

def main():
    application = webapp.WSGIApplication([('/', IndexHtml)], debug=True)
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
    main()

続いては、C:\test_log_log内にindex.htmlを用意。Hello,World!を出すだけなので適当で大丈夫です。こんな感じ。。

<html>
<head>
<title>テストログ</title>
</head>
<body>

<div id="head">
<a href="/">テスト中</a>
</div>

<div id="content">
<p>{{ messeage }}</p>
</div>
 
</body>
</html>

あとは、作成したものを開発サーバーで実行します。コマンドプロンプトを起動し、下記のコマンドを入力してください。

使用するコマンド
cd \ (第1階層まで戻ります)
cd.. (いまの階層よりも1つ階層が戻ります)
cd ディレクトリ名 (指定したディレクトリへ進んでいきます)

上記のコマンドを使いながら、google_appengineの階層まで進んでください。一気に階層は進めません。cdコマンドで1ずつ階層を進んでください。そこまで進めば、>以降のコマンドは一気に書いて実行です。

C:\Program Files\Google\google_appengine>python dev_appserver.py \test_log

そうすると、コマンドプロンプトに次々とメッセージがでるはず。y/nを尋ねられるので、そこはyを選択してください。

Running application test_log on port 8080: http://localhost:8080

と表示されたらOK。あとはhttp://localhost:8080にアクセスして、HTMLにHello,Worldが出ていたら成功です。

ここに来るまで、丸1日かかってしまいましたが、解決方法を自分で考えてチャレンジしてみることは、いい経験だったのではないかと思います。