gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

MagicWeapon

CAS実装……の前提のお話

ふと、色々と紆余曲折があった末として「MagicWeaponのdata_clumpで、cas形式の楽観的ロック、実装してみようかしらん?」というような発想がありまして。 その前提として「cas tokenど〜やって実装しよう?」から、比較的現実的な可能性があるあたりを妄想…

before_filter的なほにゃらら、の想定

元ネタは、友人の 会員登録に住所が必要な場合の「数字は全角で」「数字は半角で」もそろそろどうにかならんのか ってあたりの発言。 まぁ実際「住所入力全角のみ」で、番地数半角ではねられていらついたとかいうケースは割と後を絶たないわけでして。 その…

phpのsession関数を使ってのギミック

PHPのセッションは、便利な反面色々と気になる事もあるのですが。 そのうち ・「セッション有効時間」をきっちりしたい(有効時間が切れたら問答無用で切断したい) ・アカウントロックの実装をかけて、ロックしたら「ログイン出来ない」だけじゃなくて「現在…

data_clumpの使い方(ざっくり版)

ほぼ私信のようなもんですがw 細かくはまたマニュアル( https://github.com/gallu/MagicWeaponManual/blob/master/table_of_contents.md )のほうに書きますが、一端、メモ程度に。 本質的なところ data_clumpは「データの塊」です。 例えば「1つのmail for…

おおざっぱに「がちゃ用の選択プログラム」を組んでみた

以前にも estab_table というクラスを組むには組んでいたのですが。 ほんのりと思うところがありまして、新規に組んでみました。 https://github.com/gallu/MagicWeapon/blob/master/probability.inc https://github.com/gallu/MagicWeapon/blob/master/prob…

セッション関連、作ろうかなぁ?

もっそ雑に調べたのですが。 int(999) } array(0) { } となって、なにかってぇとつまり「$_SESSIONは別にsession_start()しなくても普通にスー…

set_from_cgi_update()のオーバライド用覚え書き

MagicWeaponには、data_clumpっていう、おいちゃんが勝手に「OTM(Object Tbale Mapper)」って呼称している、割合特徴的なクラスがあります。 で、この子は割と「データの塊」を扱うので。 例えば「formから情報を一式とってきてインスタンスん中にいれる」場…

get_recursive_depth() を実装しました

MWでいうところのModel(「アプリケーションデータ、ビジネスルール、ロジック、関数」ってところから、ウチでは実際の処理一式。他のPHPのフレームワーク的には「Controller内にある1Action相当」って思うとわかりやすいかと)に、get_recursive_depth()メソ…

「URLの擬似静的化」のMagicWeapon用の覚え書き

今度どこか(多分github)にまとめますが。 簡易的に、MagicWeapon用のをmemoっておきます。 mod_rewriteの記述 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-s RewriteRule…

所謂「URLの擬似静的化」についての諸々

うちとこの生徒さん(達)に質問されたのですが、ちょうど「どっかで書かないとなぁ」って思ってたネタでちょうど良いので。 URLの擬似静的化(または、URLの静的化)ってのは…んと… http://example.com/program.php?param=param ってなので動く動的なHTMLを、 h…

トランザクション周りの覚書2

http://d.hatena.ne.jp/gallu/20121112/p1 の続き。 これをやれば、後は単純にmemcache_handleのupdateとかinsertとかそっち系の実装で「トランザクションonなら実際のinsertとかupdateとかの代わりにdeleteを走らせる」って処理でいけると思う。 共通化して…

トランザクション周りの覚書

ものっそ覚書。 というか考えながら書いているに近い状態なので、もしかしたら文頭と文末で矛盾してるかもな場合は文末を信用してちゃぷたい。 さて。 MagicWeaponのデータ系ハンドルは、現状、こんな感じ。 data_handle ├db_handle_base |├db_handle_plura…

tokenizerともう一つのトークンの考察

MagicWeaponには「tokenizer」という「一意のトークンを発行する」クラスがあります。ちょっとしたDBのPKに死ぬるほど便利なのでよく使います。 一方で、以前に書いたのですが( http://d.hatena.ne.jp/gallu/20120402/p2 )、違うトークンの作り方もあります…

おまけ:もしMagicWeaponでメッセージキューを実装するとしたら

すげぇアバウトなインタフェース草案。 送信 // オブジェクトを作成 $msq = new mw_message_queue(); // key設定のやり方への可能性 $msq->set_key($key) $msq->set_key($config) // クラス継承してコンストラクタで設定 // メッセージを設定。stringでもオ…

技術メモ:認証変

認証系を作り直しているので、備忘録兼ねて。 とりあえず ・パスワードの持ち方を変えつつ ・セッションIDにmcryptを使わないように してみやう。…いやmcryptは捨てがたいのだが(苦笑)、オプションとして。 ・パスワードの持ち方 以前はsha1でハッシュしてい…

フレームワークは思想

「このフレームワークを導入したからうまくいくぞ!!」って、どこの「銀の弾丸伝説」でしょうか? フレームワークは、元々、作者の「こーゆー風に物事をやりたいつくりたい」って思いがあって、「その思いの補助道具」として存在してるざます。 あなたが使…

「似非DIコンテナのようなものもどき」作りました〜

もっそ微妙w メモかねて。 先に使い方。 ・configに「di_config」でDI用の設定ファイル名を書く ・di_configの書式例 # 仮想クラス名 = includeファイル名:newしたいクラス名 #------------------------------------------------------- # 基本書式 cgi_req…

data clumpについて

最近、むやみやたらに進化してきているdata clumpなのですが。 これを一言で言い表すよい言葉を思いついたので、メモ。 Object-Table Mapping 元ネタは言わずとしれたObject-Relational Mapping。 data clumpの細かい話は、また後日〜

いくつか

いち。 mapファイルで@includeを使えるようにしました!! 注意点としては「カレントディレクトリは、map.txt本体が置いてある場所」って事くらいかな? レポジトリにあげなきゃいかんですが、これで本格的に「レ〜ゴレゴ」な世界に突入出来そう!! パーツ…

雑に追加

以下の項目をconfigに追加〜 # 携帯のみ有効とする only_mobile = on no_mobile_uri = ./no_mobile.html no_uid_uri = ./no_uid.htmluser-agent見てまふ、なのである部分注意。 &おまけ DoCoMoで「入り口だけguidチェック」するなら。 かなりあちこち雑なコ…

認証系設定の仮まとめ

認証の基本知識はこっち見て。 http://d.hatena.ne.jp/gallu/20080203/p1 以下、authentication(個体認証)。 基本、login.incとかいうブツん中にあるざんす。メソッド位置的にはpublic function initialize() 内。 一般的な、ID+Passwordでのログイン:fron…

後で推敲する用memo:空メールを経由するユーザ登録処理

一般的な流れとMagicWeapon特有の処理をだらりんこと。 まず。 (一般) 「ユーザが特定のアドレスに空メールを送る」で、サーバ側で「メール受信を契機にプログラムを起動する」処理を書きます。 例えば、hogera@foo.com にメールを送った場合。 foo.comを持…

後で推敲する用memo:編集 -> 確認( -> 完了)

edit //処理 public function execute_auth() { // もし「confから来たわけではない」場合、DBからの情報を設定する if (false === $this->is_bag('edit_from_cgi')) { $cobj = new hogehoge_clump(); $cobj->set_db($this->get_db()); $cobj->set_value('pk…

CONVの使い方:複置換変:余談

本来的には、multiDicは「要素部分を"ごにょごにょする"」ものなので。 自作クラスを渡せば結構遊べまふ。最低限必要なのは function m_conv($body, $param) {ここだけだし。$bodyに要素がはいるとおもいねぇ。 $paramは…しばらく使ってないけど。例えば $$$…

CONVの使い方:複置換変:エラー出力とかの「特定条件出力」

こっちはちょ〜簡単。 例えばエラーメッセージがあるとするです。テンプレート的には、こう。 $$$if_error_name_must$$$ <FONT color="#ff0000">ちょっとちょっと名前くらい名乗っていきなよ<br> $$$/if_error_name_must$$$ プログラムで、下記記述があれば、出力されるです。なきゃ出</font>…

CONVの使い方:複置換変:ループ

ループ系複置換の基本は 「"ハッシュ配列"の配列」を作って渡すこと。 で、data_clumpと組み合わせた方法。…ちなみに「SQL文使ってpkのlistを作る」のは、おいちゃん的には結構いや(笑 なにがしか今度作りたいなぁ。 ページ処理したい時は、page_controll_li…

CONVの使い方:特殊置換変

radioボタンとかselectボタンとかで「入力された値を保持したい」時に使うあれ。 都道府県の場合は、 がらくた箱( http://www.gjmj.net/ )ん中にある http://www.gjmj.net/area.html が端的に楽なんだけど(笑 書式は、こんな感じ。 <SELECT name="area"> <option value="1" ***area:1*** >北海道</option> <option value="2" ***area:2*** >青森県</option> </select>

CONVの使い方:単置換変

一番単純な、一対一の置換。 テンプレート側 名前:%%%name%%%に対して、プログラム側では CONVインスタンス->monoDic('name', $name);とかってcall。 data_clumpとのコンボ技の場合、まとめて clumpインスタンス->set_all_to_conv(CONVインスタンス);CONVの…

後で推敲する用memo:入力 -> 確認 -> 完了

Modelのexec部分だけざっくり。 input 処理はなにも書かない。いらないっしょ? 編集系もまとめるなら、ちょっとだけ小細工入れるとぐっど。 //処理 public function execute_auth() { // return ; } confirm is_validateはまだ未実装。ごめん。 イメージは…

後で推敲する用memo:data_clump

概ね「一塊のデータを塊のまま扱う」クラス。 大抵、1クラスと1物理テーブルが対応していて。 1インスタンスと1レコードが対応している。