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の継承の研究
研究という程でもないんだけど、ScalaやJavaの列挙型は気持ち悪いなあと思い、ちょっと考えて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でログイン機能の実装
月曜日に終わりました。
26/26完了
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はすごい。