Windowsにnodistをgitからダウンロード・設定してnode.jsとnpmを入れ、ついでnpmでnewmanを入れる

管理者権限がないのでインストーラー使えない想定です。まずはローカルの書き込み権限のあるディレクトリーにgit cloneする

git clone -b v0.6.1 https://github.com/marcelklehr/nodist

v0.6.1なのは最新だと上手く動かないため。これだと多分動く。次に環境変数なりなんなりに以下を追加する。

NODIST_PREFIX=c:\my\directroy\nodist
PATH=%PATH%;%NODIST_PREFIX%\bin

続いて以下を実行する。

>nodist selfupdate
>nodist update
>node -v
v.6.2.1
>npm -v
1.4.6
>npm update -g npm
>npm -v
3.9.6
>npm install -g newman
>newman -V
2.1.1

これでよし。

Scalaの継承の研究

研究という程でもないんだけど、ScalaJavaの列挙型は気持ち悪いなあと思い、ちょっと考えてcase objectがいいと思い至った。調べてみると同じような事をされている先達がいるものです。


http://xerial.org/scala-cookbook/recipes/2012/06/29/enumeration/


今回は引数に与えるフラグ(CASE_SENSITIVE | CASE_INSENSITIVE)なので、じゃあCASE_STYLEという親を作ってそこから継承してみようと考えつく。が、case object CASE_STYLEをextendsしようとしても出来ない。これはJavaのコードをJADなどで逆コンパイルしてみると一目瞭然で、finalキーワード付きclass で宣言されているからなのです。こういうときのためにJavaコードを読めるようになっておくといろいろ捗ります。


case object、 object、 case class、 classで継承のいろいろなパターンを試してみました。


・親がcase object、objectの場合は常に継承出来ない。


・親がcase class A()の場合は

    • > case objectに継承できない
    • > objectに継承できる。例:object A1 extends A()
    • > case classに継承できない。
    • > classに継承できる。例:class A2 extends A()


・親がclass B()の場合は

    • > case objectに継承できる。例:case object B1 extends B
    • > objectに継承できる。例:object B2 extends B
    • > case classに継承できる。例:case class B3() extends B
    • > classに継承できる。例:class B4 extends B


そして、case->caseの継承はできない。


僕のやりたいことは継承されたcase objectを作りたいので、以下のようにすれば良い。

class CASE_STYLE
case object CASE_SENSITIVE extends CASE_STYLE
case object CASE_INSENSITIVE extends CASE_STYLE

PHPでログイン機能の実装

jQueryと並行でPHPでログイン機能を実装するコースも始めています。フレームワークを使わないところが男らしいです。


機能:
ログインしていない場合、ログイン画面を表示する。
ログインすると、ユーザー一覧を表示する。


という単純なものです。設計にはMVCパターンを用い、データベースにユーザー情報を格納しています。どこのフォルダに何をいれるとか、クラスのautoload機能の実装とか、どこのページに飛ばすかとか、いきなり面倒くさいです。セッション情報の管理、データベースへのアクセス、ビューの作成などを考えると、CakePHPといったWebアプリケーションフレームワークは偉大だなと思います。


現在 7/26 まで。

jQuery基礎の勉強

今日から http://dotinstall.com/lessons/basic_jquery_v2 の勉強を始めた。jQueryって何かと問われたとして、ざっくり言うとWebページを構成する要素に対して操作を行なうライブラリです。大まかな処理は以下のとおり。


1.セレクタ・フィルタ・メソッド(parent, children, next, prev, sibilings)を使って要素を指定する
2.指定された要素に対して、メソッドを用いて様々な操作を行なう


これだったらJavaScriptだけでもdocument.evaluateに続けてXPathを書いて要素指定し、あれこれ出来るじゃないか、と思うかもしれません。しかしjQueryではとても簡潔に行なうことが可能です。たとえば要素を新たに追加するのに、

var li = $('<li>').text('new li item');
li.appendTo($('ul'));


で既存のul要素の最後に「new li item」と入ったli要素を追加できる。


さらに言えば、


・メソッドチェーンを使って複数の操作を一行で行える
・メソッドに関数のコールバックを与えることができる。


12/20 まで。

HXPにドットインストールで勉強したものを置いてみた。および2,3のメモ。

PHPのtodoリストと、CakePHPで作った投稿・コメントシステムを置いてみた。http://www.hxp.jp/~anikare/


todoリストはディレクトリをそのまま置くだけでよかった。しかしCakePHPは難しかった。cakephpのルートを見ようとしたら404、.htaccessを編集して見えるようになったものの、投稿画面をひらこうとしたら404。でもって、なんとか動けるようになったので、その際に行ったことを列挙してみる。


1.CakePHPディレクトリ以下の全てに対し、権限を775にして、所有権をホームディレクトリの所有ユーザー(というのが正しいのか)にする。
2.app/tmpの所有者をapacheなどのwebユーザーにする
3.CakePHPルート、app、app/webrootにある.htaccessを編集、RewriteBaseを追加する。


こうすると動く。

PHPでTodo管理アプリを作る

1. 概要:Remember The MilkみたいなTodo管理アプリをつくる。オブジェクト指向でコーディングをしていくそうです。
2. テーブル作成:todosというテーブルを作る。
3. 設定ファイルなどを作る。todo_app_phpディレクトリに、config.php、functions.php、index.phpを作成
4. HTMLで画面を作成:画面のラフスケッチを作成。(下図)


5. CSSでスタイルを整える:こまごまと行なうとこうなる(下図)。最終形とほぼ同じ。あとは中身をインプリするだけ


6. Todoクラスを作成する:Todo.phpというファイルをindex.phpで読み込み、とりあえずはvar_dumpを行ってみる。getAllという関数を作って、todosテーブルから全取得する。
7. Todoの全件抽出:getAllのインプリおよびHTMLに反映する。
8、9. 更新イベントを作る:ajaxチェックボックスをクリックすると変更する。jQueryのお約束で$(function() { ... });とする。
10、11、12. _ajax.phpをインプリ、Todo->postを呼ぶようにする。
13.Ajaxデバッグ:実際に動かすといろいろとバグがあって思ったように動かない。そんなときはHTTPサーバーのログ、Webクライアントのデバッグ機能を使ってデバッグしていく。
14、15.CSRF対策:トークンを生成、index.phpに埋め込む。また_ajax.phpでもセッションを使うようにする。jQueryでTodo->postにトークンを渡すようにして、トークンのヴァリデーションを行なう。
16. Todoの削除:updateのをコピペしてajaxで削除するようにする
17、18.Todoの追加:こちらもAjax使って追加するようにする。


18/18完了


PHPはすごい。