(株)オフィス39のブログ
Amebaでブログを始めよう!

CodeIgniter バリデーション拡張 カタカナチェック追加

お久しぶりです。みぃお@PMです。
ちょっと、メモとして。

変更箇所は、Form_validation.phpです。
/**
* KanaFull
*
* @access public
* @param string
* @return bool
*/
function kana_full($str)
{
return (bool)preg_match( '/[^ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ]/', $str) ? FALSE : TRUE;
}

// --------------------------------------------------------------------

こちらを追加すれば、全角カタカナチェックが可能になります。
尚、エラーメッセージは悲惨なのは仕様です。

今度はModelが肥大化したようだ

お久しぶりです、みぃお@PMです。

えー、前回はControllerの肥大化をModelで解消というお話をしたところだったと思います。


今度はModel自身が肥大化しました。

まぁ、詳細はあまりいえないのであれなんですが、想定されるケースが4つほどあって、ケースごとで処理が微妙に違うというもの。


まともにクラス設計していれば、Modelも何個かに分散してスッキリといきたかったのですが、Model部の設計をないがしろにしてしまっていたので(Modelの仕事を考えずに設計してしまったのがそもそもの間違い)肥大化してしまいました。


現在スペックは、300行程度で30メソッドと言っておきましょう。


困ったものです・・・・・。

現在のModelを完成させた後に、どこかでモジュールの切り分けをしていきたいと思います。


私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

肥大化したControllerをModelに分離してみた

お久しぶりです。みぃお@PMです。

現在、CodeIgniter(PHPのフレームワーク)でサイト作ってるんですけど、元々CIはMVCというよりも、VCに比重が傾くらしく、Controllerの肥大化を起こしやすいらしいです。

ただ、CIは結構柔軟性があるので、処理に目をつけて、Modelにどんどん分断していきます。

最初は100行もあるメソッドが出てきましたが、更に分離できるので50行とかに押さえました。


お陰でControllerが全体で100行を切ったため、やたらスッキリしましたとさ。



私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

夏ですね

みぃお@PMです。

札幌もやっと暑くなってきましたね。

そんな中事務所で仕事をしています。

さて、プログラムを作っていると、似た処理がわんさかと出てきます。

しかもデータを扱うもの(ユーザ登録のバリデートとかね)で結構圧迫しているので、今の部分が完成したら、モデルとコントローラを分割しようかなと。

*会員登録関連のPHPコードだけで300行あればそりゃ萎えます。おまけにSmartyのタグ埋め込みとかもやってますから。


ちなみに、CodeIgniterのお陰で、MCとVには分かれています。しかもかなりきれいに。
学生時代にフレームワークを使わなかったときは、分離に失敗して大変な目に遭いましたね。


とりあえず、MCを分離すれば、次から同じような処理は使いまわしが容易になる。これ、とても便利です。


では、そろそろ退社の準備を・・・・・!



私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

レンタルサーバセッティング中

お久しぶりです。みぃお@PMです。サーバセッティング中です。

今回は、NTTPCのWebArena Suite Pro V3を借りました。
V3は本当に最近できたプランで、内容も充実してますね。

現在は、初期設定のためにVNC経由で操作できるようにセッティングした後、OpenVPNをインストールしてセキュア環境を構築します。
これで、どこでも会社のネットワークに安全に接続できるようになります。ちなみにRSAキーは無駄に8192Bitにしました。サーバ証明作るのに酷く時間がかかってます・・・・・。だからブログ書いてるわけですけどね。

WebArenaは結構スペックがいい&VPSなのでやりたい放題&安定性も結構いいと評判というわけで、SambaのBDCも構築します。

というか、ちょっと高いお金出して借りてるわけですから、しっかり有効活用しなければですね。

Sambaは後回しにするとしても、OpenVPNの構築が終われば、次はWebサーバとメールサーバのセッティングですね。一応家でも作業できるから、今日は家で徹夜かな?(笑)


私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

Redmine入れました

みぃお@PMです。

Tracの導入をあきらめ、Ruby on RailsでできているRedmineを入れました。

こちらもSubversionに対応しているそうで。


まぁ、RoRのインストールに時間かかりましたが、何とか今日中にRedmineを入れれました。
yumを何とか強制インストールしたりと荒業だらけですが・・・・・

*ちなみにApache上で動いています。(Passenger(mod_rails)を使ってます)


これでプロジェクト管理はほぼ万全になりましたね。ガントチャートとか自動生成してくれますし。

SubverisonもWebDAVでアクセスできますしね。セキュリティ管理しないと、外には出せませんが・・・・・。

さて、明日からシステム設計だー!


私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

mod_python

みぃお@PMです。

Python2.6で動くmod_pythonがほしいです。

というのも、現在の社内サーバがPython2.6ベースで動くようにできているのですが、何故かmod_pythonが2.4のほうを見に行くので、2.6で動くようにしたいんですよね。

それで、mod_pythonからRPMを作ろうとやってみたら・・・・・

apxsが無いというわけで、yum install httpd-develをやってみたら。。。。。


依存関係に見事失敗


というわけで、開発用の環境でコンパイルしてRPMパッケージにでもしようかと。。。。。困ったものです。

私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

今日は歓迎会ですよ。後来週から。

みぃお@PMです。

札幌市内某所で歓迎会やります!しゃぶしゃぶですよ♪

新人2人さんお疲れさまです。これからもがんばってください。


それと、来週から現在のプロジェクトの設計と見積もりやります。
1週間で全部終わればいいんですがね・・・・・設計書大量に書かねば・・・・・。

設計書の内容は

・画面遷移図
・シーケンス図
・クラス図

といったところでしょうか。他にもあるけど、勉強不足です。はい。
近年、フローチャートでは書ききれなくなってますからね。やはり、UMLを採用するべきだと判断。
シーケンス図とかがんばって書きます。

私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

スレッドやってみたよ

みぃお@PMです。

AS3でスレッドことそうめんで格闘してみた。

しかしながら、まだシングルスレッド状態(笑)


以下ソース(エラー起こします)

メイン(flaファイル)
new MenuMainFirst();
var obj:formatGlobalObject= new formatGlobalObject();
addChild(obj);
var t:MenuMain = new MenuMain(this);
t.start();

MenuMainFirst.as
package
{//http://www.libspark.org/htdocs/as3/thread-files/document/
import flash.display.*;
import org.libspark.thread.Thread;
import org.libspark.thread.EnterFrameThreadExecutor;


public class MenuMainFirst extends Sprite
{
;
public function MenuMainFirst()
{
if (!Thread.isReady) {
Thread.initialize(new EnterFrameThreadExecutor());
}

}

}
}


formatGlobalObject.as

package
{//http://www.libspark.org/htdocs/as3/thread-files/document/
import flash.display.*;
import org.libspark.thread.Thread;
import org.libspark.thread.EnterFrameThreadExecutor;

public class formatGlobalObject extends Sprite{
public var MenuButton:Array=new Array(5);
//画像を埋め込み
//メニューボタン
[Embed(source="./emb_images/MenuButton1.png")] public var MenuButton1Class:Class;
[Embed(source="./emb_images/MenuButton2.png")] public var MenuButton2Class:Class;
[Embed(source="./emb_images/MenuButton3.png")] public var MenuButton3Class:Class;
[Embed(source="./emb_images/MenuButton4.png")] public var MenuButton4Class:Class;
[Embed(source="./emb_images/MenuButton5.png")] public var MenuButton5Class:Class;

//ViewArea用
public var ViewArea:Array=new Array(5);
[Embed(source="./emb_images/ViewArea1.png")] public var ViewArea1Class:Class;
[Embed(source="./emb_images/ViewArea2.png")] public var ViewArea2Class:Class;
[Embed(source="./emb_images/ViewArea3.png")] public var ViewArea3Class:Class;
[Embed(source="./emb_images/ViewArea4.png")] public var ViewArea4Class:Class;
[Embed(source="./emb_images/ViewArea5.png")] public var ViewArea5Class:Class;


public var item_num:uint=5;//要素数を入れてね
public var cnt:uint=0;//システム用。

public function formatGlobalObject(){
//配列へ
//インスタンス化
MenuButton[1]=new MenuButton1Class();
MenuButton[2]=new MenuButton2Class();
MenuButton[3]=new MenuButton3Class();
MenuButton[4]=new MenuButton4Class();
MenuButton[5]=new MenuButton5Class();

//インスタンス化
ViewArea[1]=new ViewArea1Class();
ViewArea[2]=new ViewArea2Class();
ViewArea[3]=new ViewArea3Class();
ViewArea[4]=new ViewArea4Class();
ViewArea[5]=new ViewArea5Class();

}



public function setMenuButton(value)
{
addChild(MenuButton[value]);
MenuButton[value].alpha=1;
MenuButton[value].x=(160*(value-1));
MenuButton[value].x+=30;
MenuButton[value].y=320;
}

public function setViewArea(value)
{
MovieClip(root).addChild(ViewArea[value]);
}

}
}

MenuMain.as

package
{
//http://www.libspark.org/htdocs/as3/thread-files/document/
import flash.display.*;
import org.libspark.thread.Thread;

import flash.display.DisplayObjectContainer;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.errors.IOError;
import org.libspark.thread.Thread;
import org.libspark.thread.threads.net.URLLoaderThread;
import org.libspark.thread.utils.Executor;
import org.libspark.thread.utils.ParallelExecutor;

public class MenuMain extends Thread
{
public var st;
public var threadExec:ParallelExecutor = new ParallelExecutor();

public function MenuMain(obj:MovieClip)
{//ルートオブジェクトにアクセスできるようにする
st=obj;
}
//public var obj:formatGlobalObject = new formatGlobalObject();
override protected function run():void
{

next(formatMenu);
}


private function formatMenu():void
{
trace("formatMenuへ繊維");
//ボタン初期化
st.obj.cnt++;//最初にカウント
next(MenuListMoveFirst);
}

private function MenuListMoveFirst():void
{//メニューボタンの初期演出用
//画像をaddChild
st.obj.setMenuButton(st.obj.cnt);
//フェードイン
threadExec.addThread(new Fade(st.obj.MenuButton[st.obj.cnt]));
threadExec.start();
threadExec.join();
sleep(150);//0.25秒待機

if(st.obj.cnt {

next(MenuViewAreaMoveFirst);//まだ画像があれば表示エリア用に繊維
}
else
{
trace("5つ表示完了したよ");
}


}

private function MenuViewAreaMoveFirst():void
{//メニューで選択した項目をViewAreaに表示する用の初期処理
if(st.obj.cnt {
trace("大きいの");
next(formatMenu);//画像があれば再帰処理
}
}



}
}


Fade.as(格闘中)

package
{ //http://www.two-hearts.net/2009/05/thread.html
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import org.libspark.thread.Thread;
import org.libspark.thread.threads.tweener.TweenerThread;
import flash.display.*;
public class Fade extends Thread
{
public var _contianer:Object;
public function Fade(container)
{
_contianer = container;
}
/**
* 画像のフェードイン
*/
override protected function run():void
{
_contianer.alpha+=0.01;
sleep(10);
}
}
}


私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39

移設完了

みぃお@PMです。

会社で使ってるデータ保存用のHDD(しかもUSB)をLinuxサーバに移設完了しました。
Windowsマシンからファイルの書き込みができなかったのですが、Sambaの設定で、Read onlyになってたのは盲点でした・・・・・(汗

ちなみに、保存用のHDDなんですが、私が入社した当初では、購入時のままのFAT32だったんですね。

それじゃまずいだろうと、NTFSに変換したら何故か致命的なエラーが発生しまして・・・・・
まぁ物理フォーマットで何とか治ったんですけどね。論理的にデータが死んだっぽいです。多分(そして、悪化する前にデータを救出していたのは不幸中の幸い)

そこで保存用HDDを2台体制で行おうということで、現在バックアップ用とメイン用の2つで稼動しています(各1TBです)

まぁ、データの同期作業もしていきたいのですが、まずはファイル共有を完成させるのが先決。

LinuxでNTFSを扱うには、マウンタを導入しなければならないです。後、Samba側であらかじめ文字コードを指定しないと、WindowsマシンからSamba経由でアクセスするときに軽く文字化けを起こして死にます。

CentOS5.4なので、今回はntfs-3gというのをyumからインストールしました。


そしてマウントポイントを指定してマウント。その後シンボリックリンクをペタペタと。
そして、シンボリックリンクをSambaで共有させれば完成。


あとは、社員全員のアカウントを登録するのみかな。


それと、ドメイン認証はユーザプロファイルの保存場所とユーザグループで揉め事が発生しているので、今後も調整が必要な感じです。


私書箱 札幌で私設私書箱・転送電話をお探しなら来店不要ですぐにお申し込みいただけます
マイポスト39