しぃぶろぐ。

仕事とか技術関係のこと。他色々

アンドロイドでびぅー

auなので、ずっとずっとこの時を待っていました。
とうとうスマートフォンデビューです。
IS05です。画面サイズに不満は無いです。
機種変してから一週間、ようやくカスタマイズが終わりそうかな?www

機種変初日に書き込もうとしたら、スマートフォン用画面からはできず、がっくりしました。
今日ようやくPC版にすればいいと気づいた次第です。
落ち着いたら何か作ろうかなぁ

即戦力の人材を作る、たった1つのポイント

今日、システム屋さんで即戦力を作るには、
たった1つのポイントをおさえておけばいいんだ!と気付きました。

きっかけ

今新しい現場で業務内容やらシステムやらの説明を久しぶりに受けていてですね。
この説明だと私が戦力になるのに時間かかるなー、と思ったわけですよ。
説明の中身がどうこう、というよりも説明の流れですね。
私は新人さんじゃないから、配属初日から戦力になれます。
新人さんでも説明次第で即戦力になれます。
それができないのは、たった1つの説明のポイントがおさえられていなかったからなんだなと、気付いた次第です。

目的から仕様へ、業務からシステムへ、全体から部分へ

たった1つのポイントとは

それはずばり、「上流から下流へ」ということです。
「目的から仕様へ」「業務からシステムへ」「基本から詳細へ」です。
開発の流れとまったく同じです。

上流は全ての原点

全てのシステムに目的があり、それを叶えるために作られ、運用されています。
どんな小さな機能も改善も修正も、お客さんの目的と要望を叶えるために存在しているわけです。
正直、システムの目的とお客さんの要望を正確に理解していれば、社会人1年生だって要件定義の場に加われると思っています。*1
(むしろ、理解しようとしない人はどんなベテランでも無理。)

上流から下流への流れ

やりたいことがわかっていれば、システムの仕組みも理解しやすいのは道理でしょう。
携帯の中身がどうなっているか知らなくても、移動しながら電話するという目的を理解していれば、
この中にマイクとスピーカー、入力装置、画面、電池、電波を送受信するアンテナが必要な事はわかるのと同じです。
必要なものがわかったら、それをどう入れ込めばいいのか(ハード・ミドル)、
どうやってそれらのパーツをつなげるのか(I/Fや言語、フレームワーク、テーブルやモデル設計もかな?)、
どうやってパーツを作るのか(開発手順や開発環境の使い方、言語文法やアルゴリズム)、
といった具合に自然とすすみます。よね?
自然な流れに逆らってはいけないのです。

他への応用

これは、何もシステム屋さんにだけ言えることじゃないですよ。
経理屋さんは、その計算によって会社の経営が方針付けられることを理解し、意識することです。
ただ計算したり、整合性を持たせればいいのではありません。
より正確に会社の状況を把握するにはどうしたらいいか、が問題になるはずです。
植木屋さんは、お客さんが求める理想のお庭を把握・理解しようと努めることです。
ただ形を整えればいいのではありませんし、自分の理想を求めるのでもありません。
小手先の技術によらず、心を込めて真摯にお客さんと向き合うことです。
学生さんは、何でその学問を学ぶのか考えてみてください。自分にとっても、社会や世界にとっても、なぜそれが必要なのか。
丸暗記じゃいつか消えていってしまいます。
自分なりの答えを出した上で教科書を読み直してみましょう。きっと違う本のように感じるはずです。

おまけ(実際にこういう順番はどうですか?)

  1. システムの目的
  2. 主要業務のフロー
  3. 全体システム内のデータライフサイクル・フロー
  4. 担当システム内でのデータライフサイクル・フロー
  5. 案件の発生から開発テスト・リリースのフロー
  6. システムの構成
  7. 今作業中の案件および今後作業予定の案件
  8. 開発手法・実際の内容
  9. 実作業

システムの目的とは具体的に言えば、何のために誰が何をどうするためのシステムなのか、ということです。
例えば、「決算のために伝票を電子化し経理が仕事をしやすくするためのシステム」ですとか、
「知識共有を計るために、各社員の知っている情報を投稿集積し、検索するためのシステム」となるかと思います。
これにより、このシステム内で扱う処理の大まかな内容・関連する部署やシステムが見えてきます。


必要に応じて順番は前後してよいと思いますが、
「上流から下流へ」の流れは押さえておいてください。

おまけのおまけ

忙しいからか、はたまた面倒だからなのか、
詳細or部分的な資料は大量にあるけれど、全体を見渡せる資料がない場合が多いです。
その時は、無理に適当なものを用意するよりも、
ざっと説明した後は、教育を受ける人に作成してもらうとよいでしょう。
復習にもなりますし、次の新しい人のためにもなります。
もちろん、それをチェックすることにより、教育者も確認しなおし、初心に戻りましょう。


眠い頭でつれづれなるままに書いてみましたが、
ちょびっとでもみなさまの人生のお役に立てたら幸いです☆
また何か思いついたらまとめます (`・д・´)ゞ
ではおやすみなさい。。。

*1:見積もりは難しいでしょうが、要望をまとめたりどう実装するかは考えられるでしょう。

LastPass復活しましたね!

残業から帰ってきて、とりあえず洗濯とご飯のセットだけして今に至ります。
現在12時半。
ちなみに起床予定時刻は朝5時半です。
(その前に4時半頃に多分起こされますが。0歳児に)


で、本を読み終わったから日記でも書くかとはてなに入ったところ、
LastPass+ログイン で検索してこられている方が結構いらっしゃいました。
あー。みんなできないのねーと思って、まだ直ってないんだなーと思ってためしてみたら。


ログインできましたよ。


無事に直ったようです。
私の環境は、
Chromeさんが7.0.503.0
LastPassのエクステンションが1.69.1 です。
みなさまも、LastPassで快適なネット生活をお送りくださいませ。

CakePHPのMVCをてきとーにまとめ。

この場合のてきとーは、適当ではなく、「いいかげん」のてきとーです。
「いい加減」の意味でもありません。実にざっくりな感じです(=ω=)


チュートリアルをすすめて、Postの追加・編集・削除まで行なえるようになりました。
DBに該当モデルのテーブルを作成した後は、

  1. コントローラーに欲しいアクションを追加
  2. アクション用ビューを作成orアクション実行URLを適当なビューに追加

すれば良いのですね!
詳しくはマニュアルのチュートリアルを参照してください。(マテ

CakePHPのModel

MVCとは何ぞや?という方は、コチラを先にご覧下さい。
CakePHPのモデルは、DBとのやり取りを行なう場所になります。

  • テーブルを用意しておく(正式な英語の複数形)
  • app/models/テーブル名の単数形.php に定義する
  • AppModelクラスを継承
  • ”var $name” に単語の頭文字が大文字のモデル名を定義

CakePHPのView

ビューは見た目ですね。
全体の見た目はレイアウトで指定し、ここでのビューはアクション(機能)ごとになります。

  • app/views/コントローラ名/自由なファイル名.ctp に定義
    • ファイル名をアクション名と同じにしておくと、コントローラ側で明示する必要がない
  • $htmlなどを利用する

CakePHPのController

アクションを定義するところになります。
ページタイトルもコントローラーで指定します。

  • app/controllers/コントローラ名_controller.php に定義
  • AppControllerを継承
  • ”var $name”に単語の頭文字が大文字のコントローラ名を定義
  • ”var $uses”にコントローラで使用するモデルを定義
    • 複数のモデルを使用したいときは配列として列挙する
  • アクションはコントローラーのメソッドとして定義
    • アクションのURLは ”/コントローラ名/アクション名”
    • アクション名無しでアクセスしたときは、デフォルトではindexアクションが呼ばれる
      • URLでアクセスできないメソッドを作成したいときは、メソッド名の先頭に _(アンダーバー)を付ける
      • →アンダーバー無しのメソッドは、すべてURLからアクセスできてしまう
  • $this->set() はビューに値を渡すメソッド
    • 引数は (変数名, 値)
  • モデルからデータを取得するには$this->Model1->findAll()
    • 引数は (検索条件, 取得フィールド, ソート条件, etc...)
  • ページのタイトルは”$this->pageTitle”で定義


コントローラーが重くなりがちだなーと思ってみたり。
でも、MVCのつくりになっていると本当に作りやすいですね。
パーツで考えればいいので、集中できて好きです。
今後はデザイン後回しで #dekiben の機能をひとつずつ作りこんでいきたいと思います。
(というか誰かデザイン部分やってくださいませんか(マテ

とりあえずcakephpのチュートリアル見ながら交流サイトを作ってみるの巻。

開発しろよー。と内なる声に促されて。
とにかく構想中のものを形にするほうを優先することにしました。
メール分解⇒DB操作の部分はちょっと後回しにします。


というわけで。
cakephpのチュートリアルを見ながら、会員制コミュニティサイトを作る計画です。
このチュートリアル、分かりやすくていいですね。。。
もっと早く見ておけばよかった。。。orz
CakePHPのチュートリアルはここになります。
10.1 CakePHPブログチュートリアル

で、何を作るのか

Twitterで時々つぶやいていた、#dekiben を作ろうと思ってます。
ブログポータルに近いですかね?
まずはユーザー管理、記事を投稿・コメント、記事のお気に入り登録を実現させます(がんばる)。

CakePHPのインストールは省略

以前記事にまとめてあったので、インストール作業は省略します。
ただ、チュートリアルを見て一箇所やってなかったところがありました。。。orz
Security.saltの変更です。

  1. /app/config/core.phpをviで開く。
  2. /salt で編集箇所を探す。
  3. 適当な文字列を入れる。
  4. :wpで上書き保存して、welcomeファイルを開く

Security.saltを更新すると、以下のようなページが表示されます。

あと、/app/config/database.phpに、
'encoding' => 'utf8' をこっそり追加しました。

テーブルの追加

とりあえずチュートリアルにしたがってテーブルを追加します。
さくらのphpMyAdminを利用。
prefixを設定してあったので、忘れずにテーブル名の前にくっつけます。

モデルとコントローラーとビューの作成

/app/models の下に post.php を、
/app/controllers の下に posts_controller.php を、
/app/views の下に posts/index.ctp をチュートリアル通りに作ります。
FTPするのが面倒なので、全部viでやりました。
この段階で、http://example.sakura.ne.jp/app1/posts/index に接続すると、下の画面が表示されます。

リンクを押しても、まだアクションが定義されていないのでエラーページが出るだけです。

アクションを定義

記事詳細を見るアクションを定義します。
基本はチュートリアルそのままでOKです。
が。
indexのビューがちょっと間違っているので、
URL直接打ち込むとページが表示されますが、
indexのリンクからは「定義されていないの」のエラーが出ます。
以下のように変更してください。

<?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?>

<?php echo $html->link($post['Post']['title'], "/view/".$post['Post']['id']); ?>

そうすると、リンクが正常に機能して以下のようなページが表示されます。


とりあえず、以上。
次は追加・更新・削除のアクションの追加ですね。

LastPassにログインできない件。

すみません。
最近開発していません。。。orz


さて。表題の「LastPassがchromeで使えないよ!」(タイトル違うし)ですが。
今日(というかもう昨日)、日本時間2010/8/18 夜、
いつものように、Chromeで、
はてなやらTwitterやらメールやら会社のサイボウズやらmixiやらに
ログインしようとしたらですね。
LastPassのエクステンションが「未ログイン」状態で動いていなかったんですよ。
何かなーと思いつつ、いつものようにパスワードを入れたらですね。


ログインできないんですよ。


CapsLockかかってるわけでもなく。
スクリーンキーボード試してもログインできない。
Invalid Password って怒られる。
ちょーーーーー怖かったです。


何でだ何でだと思ってOneTimeパスワードとか色々やってみたんですが。
全部ダメ。
その途中で、気になる文章をチラ見しました。(もちろん英語)
うろおぼえな上に超意訳すると、
Chromeで不具合起きてるから気をつけてねー」てな感じです。(絶対違う)


ためしにIEでLastPassログインしてみたら、すんなり入れるでやんの
誰かに不正利用されたんじゃないかと怖かったので、アクセス履歴確認したら、
自分のドメインしかありませんでした。
なんだよもー。びびったよもー。


日本語で情報無いかなと思って調べたところ、
こちらの5号館のつぶやきさんに
まとめられていました。
ありがとうございます。
本当に安心しました。


にしても、「他のブラウザ使ってね☆」な態度はどうなんだろう。。。
IEは旦那用、私はChromeと使い分けしているので、
早期解決を望みます。。。orz

PEARのmimeDecodeのインストール

前々回の内容をテストするお!と思っていましたが、
起動せずにおかしいおかしいと思っておりました。。。orz
PEARのパスが通ってないのかなーとか、色々試したところ。


mimeDecode.php自体がインストールされていませんでしたorz


他のサイトさんを見ましたところ、
mimeDecodeはMail_Mimeの中に入っていると書いてありましたが、
入っていません!!!
mimeDecodeを使用する際は、
「 Mail_mimeDecode 」をインストールしてください。


以下、go-pearの画面でパッケージをインストールする方法です。


1.パッケージを検索する

赤丸の部分に「Mail」などを入力します。
2.検索結果からインストールしたいパッケージを見つける

mimeDecodeがMimeとは別のパッケージになっていました。
緑の+マークをクリックし、インストールします。
インストール完了後はこんな感じ。

コマンドラインから、ちゃんとmimeDecode.phpが入ったことを確認。


以上で無事にmimeDecode.phpが使えました!
前々回のUp以降、何件か「mimeDecode」の検索でうちに辿り着いた方がいらっしゃいました。。。
同じことでつまづいていたのでしょうか?
無事に解決していると良いのですが。。。