100日プログラミングとは

100日かければなんとかプログラムが勉強できるのではないか、 という仮説から、100日間だけ がんばって勉強を続けられるようにする企画です。 基本的には5人1組でやっていき、 お互いに進捗を報告することで、モチベーションを高めていきます。

詳しくはこちらをご覧ください。

100日プログラミングが終わって

2008/1/7 月曜日 - 17:04:21 by kensuu

100日プログラミングが終わりました。本当はもっと早くまとめエントリーを書きたかったのですが年末で時間がなくてすいませんすいません。年明けになってしまいましたね・・・。

さて、100日プログラミングですが、いろいろな気づきがありました。まとめてみます。

よかった点

やってよかったと思う点を書いてみます。

・毎週、順番が来るのでプレッシャーになった

→これは狙い通りですね。やっていないと恥ずかしいのでなんとかやろうとしました。やり始めてしまえば意外とすらすら出来るものですが、なかなかやらないのが問題なので。やるきっかけがあるのはよかったです。

・晒すことでアドバイスをもらえた

→あのコードはおかしい、やら、教えるよ!といってくれたりなどなかなか素敵なコメントやメッセージをいただきました。こういうのは晒さないといただけないものですね。大変ありがたかったです。

・周りの人にいい刺激を与えられた

→100日プログラミングをまねていいですか?などの問い合わせを2〜3件いただきました。ありがとうございます。何かの参考になったらうれしいですね。

反省すべき点

・ラストのほうが年末で仕事との折り合いが付けづらかった

→しょうがないといえばしょうがないし、甘いと言えば甘いですね。他の人が書けなくなると自分も忙しいし、さぼっていいかな、、、と思ってしまいました。あと普通に忘れることも増えてしまいました。これは反省です。

・本当にやりたいと思うものでないと続かない

→軽い気持ちで初めてしまうと100日はかなりきついみたいですね。やろうとずっと思っていたけど出来ないことをやる、というほうがいいかもしれません。

・続くようになったら、逆に報告が面倒になる

→これは僕だったのですが、30日を超えてからは結構コンスタンスに勉強できるようになっていました。となると、逆に報告をする時間がもったいなく感じてしまうこともありました。報告の仕方をもうちょっとわかりやすくすればいいかもしれません。(時間やら成果やらで報告の負担を下げるとか?)

・運営はそれなりに大変だった

→意外と大変でした・・・。モチベーション管理とか・・・。

総括

失敗を前提としてやっていたりして、もしも更新できなくてもしょうがない、というスタンスだったのですが、そのゆるさがよかったのかもしれません。

結論から言うと、おいらに限っては結構プログラミングできるようになったのではないかと思います。ほぼ0の状態から、CakePHP(フレームワーク)を使って、会員サイトを作れるくらいにはなりました。もう少ししたらリリースができそうです。本当なら今年中にしたかったのですが、さすがにバグが見つかりすぎてダメでした、、><

次回へ向けて

次回をやるかどうか100%決定ではありませんが、やるとしたらこのあたりを改善したらどうだろうか、というところをメモしておきます。

・100日というのは妥当なのか?30日とかのほうがいいかな?

→1ヶ月、もしくは3週間くらいに集中的にやったほうがだれない気がしました。短い時間を何回もやるほうがいいかもしれません。

・報告のシステムを考える

→うまい具合に報告できるシステムがあるといいなあ。と。ギークなお姉さん的なものをやるのもいいですが、負担がでかいんですよね・・・。

などです。

ともかく100日間(だいぶすぎてしまいましたが)応援していただき、ありがとうございます!第二回はまだ未定ですが、イケてる友だちの女の子がやってくれるとのことだったので、期待です。

それではまた会う日まで!(意外とすぐかも?)

Googleシュリンプ的何か

2007/12/19 水曜日 - 16:03:04 by kazuhide

あら!あら奥さん。

もう最終回ですよ。いつのまに!

ということで、とりあえずご報告。今回は、最後ということで検索機能を付けてみました。

se.gif

↑ 右下にこんな感じで。

すべての道は検索に通ず、とも言いますから、検索ができる時点でもう大体世界を征服したのと同じです。Google先生とドッコイドッコイですね。

se2.gif

↑ こんな感じで結果がぴょコンとでます。

ということで、シュリングピーは一旦休憩。

感想はまた改めて!

ShrimpME!

とりあえずサイト作りました

2007/12/14 金曜日 - 3:17:32 by saiso

さいそうです。

再来週に行われる忘年会イベントのサイトを作りました。

jpopnight-_1197569733750.png

J-POP night

photoshopはトップページの画像に少し使いました。
100日近いにも関わらずphotoshopのいいところを全然発揮していない感じですが、色目だけクリスマスぽくしてみました。

久々にスピード重視でガシガシ作ってみたのですが、
案の定、IEだとずれるサイトができてしまいました。
でもまあ、おそらくこのサイトを見てくれるお友達は
ほとんどがFirefoxだと思うのでそんなの関係ねー!です。

残り5日でもう一個作りたいと思います!

あ゛ー!

でも5日後には僕更新できない!
というか今回で最後の更新ではないか!
悲しい!
悲しすぎる!
でもphotoshopに出会うことができたし、
最近Rubyもはじめることができた!
これを通して仲良くなったと思っている人が2人くらい増えたし
いいことばかりでした!

来年は、本当のプログラミングを学んでいきたいと思います!

さようなら!

エビ困る

2007/12/13 木曜日 - 8:55:16 by kazuhide

いやー。事件です。

エビの プログラミング用パソコンがトラブルで、何もいじれない状況です。

ThinkPad君にFTPソフトやら画像加工ソフトやらDWやらIDやパスワードやらを全部入れていたのですが、ディスプレイが壊れて使えなくなりましたです。代わりに昨日、MacBook買ったので、その話でもしますね。

まずPCを買う時は価格比較サイトを見るわけですが、しかし、何かの調査で、ヤマダとかビックなどの量販店のほうが「平均的には」安く買えるという結果が出たそうです。

で、今回は色々付随したものも買いたいこともありヨドバシakibaまで。今回はMacを買うことにする(今までもiBookはたまに使っていた)。

で、MacBookに関して、店の人と話していて知ったのですが、これって、見えないところでかなりマイナーチェンジをしているんですね。昔とスペックは同じだと思っていたのでとてもびっくりしました。購入したのは11月発売のもの。あと、Macbookはメモリが1テラ(だかなんだか何テラか)バイトまで対応できるそうで。Winの3ギガと比べると、文字通り次元が違います。とりあえず4ギガを購入。

あとはけんすうがおすすめしていたマウスを見る。Logicoolのレボリューションなんとか。VX(モバイル用)のところを間違えてMX(デスクトップ用)を買ってしまい痛い目にあう(現在進行形)。

参考:VXレボリューション買った | IDEA*IDEA

あとは、ケースとか、iWorksだとかを購入。Adobe欲しいけど我慢。帰ってきてからつまずいたことといえば、Leopardだと、eMobileの設定方法が少し変わっていたこと。

参考:E-MOBILE端末をLeopardで設定する方法 - Overlasting::Hatena

あと、QuickSilverがオープンソースになって配布元URLが変わっていた点。

こちらが現状:Blacktree

ということで、このMacbook君でがんばってエビを作るようにします。ではでは。

あと8日でサイトが作れるかどうか

2007/12/11 火曜日 - 1:03:37 by kensuu

けんすうです。
先週最後の最後でさぼってしまいました。
そもそも更新があと残り1回しかないので
引き締めまくっていきたいと思います。

先週はcakePHP勉強会にいってきました。
プログラムの先生をやってくれているあきやんが
スライドを公表しています。

CakePHP勉強会を開催しました! & 発表資料です : akiyan.com

こういうのがすごく勉強になる・・・。

他人のソースコードを見るのは超わかりやすいですね。

さて、100日プログラミング。
これが終わった暁には、成果物を出します。
サイトをオープンさせます。

ということで、コードを晒します。

profiles_controllerというファイルのものです。

<?php 
 
class ProfilesController extends AppController
{
    var $name = 'Profiles';
    var $uses = array('Post','Profile','User','Poke');
    
    //ページング用の数値
    public $view_default_limit = 7;
    
    //プロフィールのテンプレを上書き〜
    public $layout = 'profile_default';
    
    function index()
    {
        //クッキー情報からログインかどうかを判定
        $auth = $this->User->findById_hash($_COOKIE['auth']);
        
        $this->set('my_profiles', $my_profiles = $this->Profile->findByUserId($auth['User']['id']));
 
        //ページタイトル
        $this->pageTitle = $my_profiles['Profile']['name'] . "のページ";
    }
 
    function view($to_user_id = null,$page=1)
    {    
        if(isset($_COOKIE['auth'])){
            $auth = $this->User->findById_hash($_COOKIE['auth']);
            $cond = array('user_id' => $auth['User']['id']);
            $this->set('my_profiles', $my_profiles = $this->Profile->findByUserId($auth['User']['id']));
            
            //ついでにセッションのIDもセットしよう
            $this->set('auth',$auth['User']['id']);
        }
    
        //ユーザーidをセットしておく
        $this->set('to_user_id', $to_user_id);
 
        //ユーザーIDの投稿画面&表示
        $cond = array('to_user_id' => $to_user_id);
        
        //データの数を数える
        $count = $this->Post->findCount($cond);
        $this->set('count', $count);
        
        //取り出すレコードの開始位置
        $st = 0;
        
        //ページング限界数をセット
        $lim = $this->view_default_limit;
        $this->set('lim',$lim);
                
        $page = !isset($_GET["page"]) || $_GET["page"] <1 ? 1 : intval($_GET["page"]);
        
        $st = ($page - 1) * $lim;
        //次の10件
        $next = $page + 1;
        //前の10件
        $prev = $page - 1;
        $prev = $prev <1 ? 1 : $prev;
        
        //ページングのやつを配列にいれてsetしちゃうよ
        $pages = array(
                'page' => $page,
                'prev' => $prev,
                'next' => $next
                );
 
        $this->set('pages',$pages);
 
        //とりあえず$postsにデータを入れる
        $posts = $this->Post->findAll($cond, null, 'Post.created DESC', $lim, $page,2);        
        
        //セット
        $this->set('posts', $posts);
 
        //名前のためにprofilesをsetしないと
        $this->set('profiles', $profiles = $this->Profile->findByUserId($to_user_id));
        
        //画像がなければデフォルトイメージ
        if (empty($profiles['Profile']['pic'])) {
            $profiles['Profile']['pic'] = 'no_image.jpg';
            $this->set('profiles', $profiles); 
        }
        
        /* 新しいユーザーや盛り上げ一覧で出す(ここに書くのは美しくない?) */
        
        //新規ユーザー
        //とりあえず$postsにデータを入れる(最後の2はなんだ?調べる)
        $new_users = $this->Profile->findAll(null, null, 'Profile.user_id DESC', 10,null,2);
        $this->set('new_users',$new_users);
        
        //ページタイトル
        $this->pageTitle = $profiles['Profile']['name'] . "のページ";
        
        /*ここからpokeのカウント用の処理*/
        
        //GROUP BYするためにSQLは直接書きます
        //つっついた人はユニークでとりたいため、user_idでGROUP BYします
 
        $poke_rets = $this->Poke->query("SELECT Poke.user_id, count(Poke.user_id) as cnt FROM pokes as Poke where " . (int)$to_user_id . " = Poke.to_user_id GROUP BY Poke.user_id ORDER BY max(id) DESC LIMIT 10;");
 
        //とりあえずuser_idを配列に入れます
        foreach($poke_rets as $k => $poke_ret){
            $poke_rets[$k] = am($poke_ret, $this->Poke->findByUserIdAndToUserId($poke_ret['Poke']['user_id'], (int)$to_user_id, null, 'Poke.id DESC'));
        }
        
        $this->set('poke_users', $poke_rets);
        
        /*ここから書き込みをした人の処理*/
        
        //GROUP BYするためにSQLは直接書きます
        //つっついた人はユニークでとりたいため、user_idでGROUP BYします
 
        $post_rets = $this->Post->query("SELECT Post.to_user_id, Post.user_id FROM posts as Post where " . (int)$to_user_id . " = Post.user_id GROUP BY Post.to_user_id ORDER BY max(id) DESC LIMIT 10;");
 
        //とりあえずuser_idを配列に入れます
        foreach($post_rets as $kk => $post_ret){
            $post_rets[$kk] = am($post_ret, $this->Profile->findById($post_ret['Post']['to_user_id']));
        }
 
        //pr($post_rets);
        $this->set('post_users', $post_rets);
                
    }
    
    function edit($my_id = null)
    {
        //クッキー情報からログインかどうかを判定
        $auth = $this->User->findById_hash($_COOKIE['auth']);
 
        //セッションのIDを$my_idへ
        $my_id = ($auth['User']['id']);
 
        //profileにセット
        $this->set('my_profiles', $my_profiles = $this->Profile->findByUserId($my_id));
        
        //pr($my_profiles);
        //echo $my_profiles['Profile']['pic'];
        
        //画像アップ
        if (!empty($this->data['Profile']['pic']['name'])){
        
            //大文字を小文字にしたりして拡張子をぶっこぬき(正規表現はあとで調べる)
            $ext = strtolower(preg_replace("!.*\.!", null, $this->data['Profile']['pic']['name']));
            
            //書式指定変換した出力を文字列に格納
            $filename = sprintf("%05d.%s",$my_id, $ext);
            pr($filename);
            move_uploaded_file($this->data['Profile']['pic']['tmp_name'], APP."webroot/img/user_pics".DS.$filename);
            $this->data['Profile']['pic'] = $filename;
        }else{
            //picがなかったらpicそのもの自体を消しちゃうよ!
            unset($this->data['Profile']['pic']);
        }
        
        pr($this->data);
            
        //もしpostの中がからっぽだったらviewに渡す?
        if(empty($this->data)) {
            $this->Profile->id = $my_profiles['User']['id'];
            $this->data = $this->Profile->read();
        }
        else{
            if ($this->Profile->save($this->data['Profile'])){
                $this->flash('プロフィールを変更しました!','/');
            }
        }
 
        /* 新しいユーザーや盛り上げ一覧で出す(ここに書くのは美しくない?) */
        
        //新規ユーザー
        //とりあえず$postsにデータを入れる
        $new_users = $this->Profile->findAll(null, null, 'Profile.user_id DESC', 10,null,2);
        $this->set('new_users',$new_users);
        
        //名前のためにprofilesをsetしないと
        $this->set('profiles', $profiles = $this->Profile->findByUserId($my_id));
    
        //画像がなければデフォルトイメージ
        if (empty($profiles['Profile']['pic'])) {
            $profiles['Profile']['pic'] = 'no_image.jpg';
            $this->set('profiles', $profiles); 
        }
            
        //ページタイトル
        $this->pageTitle = $my_profiles['Profile']['name'] . "のページ";
 
        /*ここからpokeのカウント用の処理*/
 
        $cond = array('Poke.to_user_id' => $my_id);
        $order = array('Poke.created' => 'desc');//並び順
        
        $this->set('pokes', $pokes = $this->Poke->findAll($cond,null,$order,10));
        
    }
 
}
    
?>

もはやどう解説したらいいのかわからないので解説しません。
他人のコードを見たり、
人から教わりまくったりと、かなりあたふたしながら作っています。

IT 戦士の作り方

こんなスライドが人気のようです。
すごくいいことを言っています。

そう、コードを晒すのは大事なのです。
しかし晒し方もなかなか難しい。
もうちょっと晒せるようになりたいのですが
いまだそのレベルですらない。

晒し方がうまくなるようにしないとなあ、と。

サイトを一つ作るというのができたら、
今度は細々としたコードを晒していけるようにしようと思っています。

というわけで、あと8日がんばります!

生きてますよ!

2007/12/7 金曜日 - 15:13:05 by dropdb

dropdbは11月に1度も更新しなかったわけですが、
サボっていたわけじゃないですよ!

むしろ、今まで以上にPhotoshopをいじっていました。
というのも、今まで学んだことの集大成だぁ!という意気込み。

1サイトまるごとPhotoshopでデザインしてきた。
Read the rest of this entry »

ブラシでゴシゴシしてみた

- 6:21:52 by saiso

おはようございます。
さいそうです。

今日はRubyの本を二冊買いました。
次はphpをやろうと思っていたのですが
Rubyのほうがなんとなくかっこいいぜ!と先輩に言われたので
Rubyにしてみました。
ひどい話です。

今回は巷で評判のブラシというものをインストールして遊んでみました。
たしかにすごくおもしろい!
しかし、僕にはセンスというものがあまりないため
うまく使いこなせないようでございます。
がんばって磨かないとなあ。

というわけで久しぶりにhtmlとかcssでもいじってやろうなど思いつつ
イジイジして適当に作った作品発表をしたいと思います。
#このサイトにはなんの意味もありません

ore_1196975148851.png
http://saiso.jp/ore.html

やっぱり手を動かすのはいいですね!

適当なブラシでゴシゴシして、
180度回転させ天井から吊るしてみました。
真ん中にいるのは、ジャンプしている僕自身なのですが
その昔、爽健美子さんがPhotoshopを駆使して作ってくれたものです。
さすがです。
最近はどこでなにをやっているのでしょうか。

それと、今更ながら repeat-x のうまい使い道を知りました。
これで今後はパッと見イケてるブログなどを作ることができそうです。

これまでPhotoshopをがんばってきたのですが、
そろそろサイト作ります。
といっても作りたいサイトがないので、
既存のmy siteをリニューアルします。
でも残り12日しかありません。
ぎゃー!

というわけでまた来週。

最新のコメントを表示しますよ。

2007/12/5 水曜日 - 19:47:56 by kazuhide

左側のカテゴリをコメント欄にしちゃいました。

最新のコメントをIDの若い順に表示しているだけですが。これで何エビが元気が一目瞭然ですね!

s.gif

ShrimpME!

常に更新、常に前進

2007/11/30 金曜日 - 5:57:05 by saiso

ごめんなさい。
おひさしぶりです。

FFTA2にはまりすぎて
pshotoshopのみならず、
他のこともないがしろにしておりました。

いいものを出そう!と思ってはいたのですが、
手が止まってしまっていたので、
とりあえず更新するのだ!をコンセプトとして、
先週末に作った作品を出します。

milkmafe_title.jpg

年内リニューアル予定のミルキャンというサイトのロゴです。
本当は左横にロゴマークとか入れたかったのですが、
ベジェうんたらとか不慣れなのでできませんでした。
悔しい。

これまではFireworksで作っていたものをphotoshopで作ることができました。
ちょびっと感動しました。
今週末にまた作ったweb素材を載せてみたいと思います!

ではでは。

風邪ひいたエビ

2007/11/28 水曜日 - 9:13:59 by kazuhide

風邪がひいたエビです。

今日はカテゴリというものに挑戦しようとしてしまいました。とりあえずキーワード(タグ)を投稿できるようにしました。あとは検索できれば、やっつけカテゴリが作れるのではないかという思惑です。

key.gif

がんばります。くしゃみが泊まらないです。

» ShrimpME!