July 31, 2008

IT 業界をどう生き延びていくか

IT 業界をどう生き延びていくか、とか最近よく考えるんですよ。
ま、いろいろな道があります。
いろいろあるんですけど、先のことを見越して何をやるべきか、とか考え出すと正直ちょっと悩みます。

結局は、IT 業界に限らず仕事って問題解決の連続なんですよねー(僕の中の定義では)。
いかに上手く問題を解決するか。
問題を解決するためにはいろんなスキルセットが必要で、だから日々情報収集したり勉強したりしてるわけですよね。

あと、問題を解決するのも重要ですけどその前に、問題をちゃんと見極めるということも重要ですよね。
自分自身が問題の種になってたりすることもあるかもしれません。

もっと広い視点から語ると、重要なのは、あるべき状態にどういうふうにもっていくか、ということなんだと思います。
現状をどうしたいのか、ひいては自分の人生をどういう方向に持っていきたいのかとか。
そのためには何が必要で、現状はどうなのかとかいろいろ考えるわけです。

要は、問題を見抜くスキル・問題を解決するスキルをたくさん身につけるために日々努力し続ける必要があるってことですね。
まあ、幸いそういったことは嫌いではないというかむしろ好きなので、良かったなぁというか。
なんていうんですかねぇ、普遍的なスキルっていうんですかねぇ(そういうのがあるとして)。

ま、とにかく勉強します。

July 25, 2008

CodeIgniter のモデル

CodeIgniter のビューの続き。
モデルについて。

モデルクラスは application/models/ フォルダに以下に置く。
モデルの定義は以下のような感じ。

ファイル: application/models/blog_model.php

<?php
class Blog_model extends Model {
  ...
}
?>

モデルを使用するには以下のようにコントローラで「$this->load->model(’Blog_model’);
」とか明示的に書く必要がある。

ファイル: application/controllers/blog.php

<?php
class Blog extends Controller {

  function index()
  {
    $this->load->model('Blog_model');
    ...
  }
  ...
}
?>

(上の例は微妙かも。コンストラクタに書いとけばいい気も。)

こうすると「$this->Blog_model」ってな感じでモデルにアクセスできるようになる。
でもこれだけじゃまだDBには繋がらない。
DBに接続するには以下のファイルを編集して「自動接続」を有効にする必要がある。

ファイル: application/config/autoload.php

$autoload['libraries'] = array('database');

↑「$autoload['libraries']」に「’database’」を追加してる。

あと、DB に接続するための設定も当然必要で、それは以下のファイルに記述する。

application/config/database.php

デフォルトでMySQLの設定が書いてあったので今回はMySQLを使うことに。
(SQLiteでやりたかったけど、そのための情報をすぐに見つけられなかったのでやめた。)

とりあえずMySQLに以下のようなテーブルを作った。

CREATE TABLE `ci`.`blogs` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `title` VARCHAR( 255 ) NOT NULL ,
  `content` TEXT NOT NULL
) ENGINE = InnoDB

テストデータ:

INSERT INTO `ci`.`blogs` (
  `title` ,
  `content`
)
VALUES (
'テスト', 'テストですよー'
);

んで、コントローラを以下のようにすると画面にテーブルの内容が出てくる。

ファイル: application/controllers/blog.php

<?php
class Blog extends Controller {

  function index()
  {
    $this->load->model('Blog_model');

    $blogs = $this->Blog_model->db->get('blogs', 10)->result();

    var_dump($blogs);
  }
}
?>

スクリーンショット:

やったー。

ま、でも、var_dumpしただけで喜んでちゃいけない。
DB周りをもうちょっと突っ込んで調べないと。

参考:
CodeIgniter ユーザガイド 日本語版 : モデル
(前回と前々回の記事は若干古いドキュメントを参照していた。。)

ていうか、最近のフレームワークってどれもRailsっぽく見えてしまうなぁ。

CodeIgniter はドキュメントが丁寧に書かれていて(かつ日本語訳もされていて)非常に助かるなぁ。
ドキュメント重要ですねー。

追記:
えーっと、実は上記のモデル(Blog_model)の使用例はあんまり適切じゃないんですよねー。
なんでかっていうと、本来 blog テーブルからデータを取ってくる云々っていうのは Blog_model の内部でやるべきなんです。
それをコントローラー側でやってて、なんかモデルの意味無い!みたいな感じに上記の例ではなってます。
というわけでもうちょっと勉強します。

追記:
よくよく考えると、上の例の blogs テーブルとか blog_model とかっていうネーミングは変だ。
entries とか entry_model だよね普通。

July 24, 2008

CodeIgniter のビュー

CodeIgniter のコントローラの続き。

CodeIgniter のビューについて。
ビューを使うにはコントローラで以下のように書く。

<?php
class Blog extends Controller {

    function index()
    {
        $this->load->view('view');
    }
}
?>

こうすると、application/views/view.php というファイルがビューとして使われる。
ビューは普通のPHPファイル。
テンプレートエンジンを使ったりもできるみたいだけど、そのへんはまだよく知らない。
追記: ↑ただの思い込みな気がしてきたので消しとく。あとで調べる。

ビューへのデータの受け渡しは以下のようにする。

<?php
class Blog extends Controller {

    function index()
    {
        $data = array(
                'title' => 'Title',
                'message' => 'Hello World!'
        );
        $this->load->view('view', $data);
    }
}
?>

そして、ビュー側でデータを表示するには以下のようにする。

ファイル: view.php

<html>
<head>
<title><?php echo $title;?></title>
</head>
	<p><?php echo $message;?></p>
</html>

実に簡単ですねぇ。

参考:
CodeIgniter ユーザガイド 日本語版 – ビュー

July 23, 2008

CodeIgniter のコントローラ

CodeIgniter っていうPHPのフレームワークを今調べてるんだけど、なんだかRailsっぽい。

たとえば、コントローラ(MVCの)として以下のようなファイルを作る。

ファイル: blog.php

<?php
class Blog extends Controller {

    function index()
    {
        echo 'Hello World!';
    }

    function hoge()
    {
        echo 'hoge';
    }
}
?>

すると、URLとコントローラのメソッドが以下のようにマッピングされる。

www.your-site.com/blog/ もしくは
www.your-site.com/blog/index
↓
Blog#index() が呼ばれる
www.your-site.com/blog/hoge
↓
Blog#hoge() が呼ばれる

あと、Railsでは何もしなければ呼び出されたメソッドと同じ名前のビュー(index.html.erb、hoge.html.erb)が自動的に適用されるんだけど、CodeIgniterでは明示的に指定してやる必要があるみたい。
そのへんは明日調べる。

参考:
CodeIgniter ユーザガイド 日本語版 – コントローラー

July 20, 2008

読書: Pythonチュートリアル

Pythonチュートリアル Pythonチュートリアル
鴨澤 眞夫

オライリー・ジャパン 2007-09-22
売り上げランキング : 118178

Amazonで詳しく見る by G-Tools

これだけの分量(実質150ページくらい)でなんとなく Python を知った気になれるのがいい。
Java とか Ruby などの一般的なプログラミング言語をそれなりに理解している人であればさらっと読めてしまうと思う。
いろんな言語を学ぶのは面白いですねぇ。
(「学ぶ」と「使いこなす」の間にはものすごい差があるんだけど)

Python のコードの見た目はすごく好きなんですよねぇ、すっきりしてて。
インデントをプログラムの構文として扱うっていう発想がすごい。

興味を引かれたところ。

タプルっていう概念(データ構造の一種)が面白いなと思った。
関数の扱いが若干 Javascript っぽいなと思った。
変数に代入して簡単に呼び出したりできるし。↓

class Hoge:
  def f(self):
    print 'f'

h = Hoge()
f = h.f
f()  #=> f

プロパティに値を代入するような気軽さでメソッドを簡単に上書きできてしまうのがちょっと怖いけど。↓

...

h = Hoge()
h.f() #=> f

def f2():
  print 'f2'

h.f = f2
h.f() #=> f2

多重継承が一応できるみたい。

よし、もうちょっと勉強しよう。

July 15, 2008

ついに買いました!黒

ついに買いました!黒

本当は白を買うつもりだったんだけど、お店に行ったらもう黒しか残ってなかった。
しかも最後の2個のうちの1個だった。
いや〜、買えてよかった。

で、いろいろいじくってるんですが、なかなかこれはいいですよ。
結構きびきび動く。
Firefox もさくさく。
YouTube なんかも普通に問題なく見れる。

キーボードはやっぱりちょっと慣れが必要かな。
キー配列が一部ちょっと詰まり過ぎで押し間違える。

そつのないデザインがとても好印象。
無駄な機能が無いのもいい。

バッテリーも、そんなに激しく使わなければ4〜5時間はもつんじゃないかな。

気になるところもいくつかある。
タッチパッドが若干使いにくい。
一応マルチタッチに対応してて、二本の指を使ってスクロールできたりするんだけど、間違ってクリックされちゃったり。
タイピング中に間違って手がタッチパッドに触れてしまって思わぬ操作をしてしまったり。
こういったことにはちょっとイライラするけど、すぐに慣れるかもしれない。
あと、クリックがちょっと固い。
まあだいたい想定の範囲内だけど。

なんにせよ、買ってよかった。
Windows XP だしね。
IE で自作 Web アプリの動作確認とかできて便利だと思うよきっと。
Vista はなんとなく使いたくないし。

といっても Windows XP も別にそんな使いたわけじゃない。
なので、SD カードに Linux 入れて使うつもり。
そのほうがなんかカッコいいでしょ、ギークっぽくて。
ていうか、このマシンでばりばり開発したいだけなんだけどね。

Ubuntu で試したら、外付けハードディスクには簡単に(しかも Windows 上から)インストールできたんだけど、SD カードにインストールする方法がわからない。
インストール CD 焼いてごにょごにょすればいけるのかな。
でもインストール CD 作るの面倒くさいから、できればインストール CD の CD イメージを丸ごと外付けハードディスクに入れて、そいつからブートしてごにょごにょして SD カードにインストールできたりしたらいいなぁ。
明日調べよう。

ASUSTek ノートPC EeePC 901-X ファインエボニー EeePC901-X FE ASUSTek ノートPC EeePC 901-X ファインエボニー EeePC901-X FE

Asustek 2008-07-12
売り上げランキング :

Amazonで詳しく見る by G-Tools

読書: アインシュタイン丸かじり

アインシュタイン丸かじり―新書で入門 (新潮新書 207) アインシュタイン丸かじり―新書で入門 (新潮新書 207)
志村 史夫

新潮社 2007-03
売り上げランキング : 65705

Amazonで詳しく見る by G-Tools

こういうのも面白い。

この本読んで改めて思ったけど、僕は相対性理論がいまだにちゃんと理解できてない。
いや、言ってることはわかる、つまり頭では理解できてるつもりなんだけど、体で理解できてないっていうのかな。
時間が遅れるとか空間が縮むとか全然うまく想像できない。