2013年6月15日土曜日

Laravelに手を出してみる日記

PHPのウェブアプリケーションフレームワークLaravelつかってみましょう。

フレームワーク・PHP本体のバージョン問題や、CodeIgniterのライセンス問題などでウェブフレームワークが乱立する中で、Laravelはなかなかよいとおもいます。

IoC Containerもあるよ☆-(´>ω・`)b

環境構築

基本的な構築は、composerでcreate-projectを実行すれば完了。
composer create-project laravel/laravel your-project-name

オラオラー!と関連コンポーネントがダウンロードされて、 

 終了。イェイ


つづく。

かねこ(人´∀`)

2013年3月31日日曜日

MacのFinderで隠しファイル・ディレクトリを表示

Finderで、隠しフォルダ・ファイルを表示したい。

それにしてもMacのFinder使いにくいな┐(´д`)┌

隠しフォルダあるのに、
$ cd $HOME
$ ls -la

drwxr-xr-x+ 21 tomo staff 714 3 28 16:14 .
drwxr-xr-x  6 root admin 204 3 25 10:44 ..
(略)

みえぬ!

なにかの値を上書きして、
$ defaults write com.apple.finder AppleShowAllFiles true

古いFinderプロセス成敗!
$ killall Finder


Yeah

かねこ(゜_゜>)

2013年3月21日木曜日

Macでルートになる!

超いいこと知った!
Macでrootになるには、

sudo su -

だー!!

オダカオル様ありがとうございました。

かねこ\(^o^)/

2013年3月17日日曜日

Mac買ったのでローカル開発環境をつくるの巻 Apache編

無線LANルータ買ってよといったら難なく支給して頂きまして、ありがとうございます大変素晴らしい会社ですこれで社畜もさらに捗ります。ということで、Mac Book持ち歩くのもアレなんで、Macbook Air 11inchかいました。


ウハーかっこいい!

ウェブ制作会社なのでウェブ環境必須でしょということで、ローカル開発環境を作りたいと思います。

なにはともあれApache。以前はSystem PreferencesのSharing -> Web SharingのチェックつければOKだったのに、ないお(T_T)


仕方ない、自力でやるか。

Ctrl+F -> terminalでターミナル起動

起動
$ apachectl start
This operation requires root.
権限がなかった。

rootになる
$ su -
Password:
su: Sorry
だめだった。私はrootになりたい。

くそー、いちいちめんどくさい
$ sudo apachectl start

http://localhost/

It works!

かねこ

2013年2月12日火曜日

PHPのフレキシブルで高速でセキュアなテンプレートエンジンtwigを試すの巻

PHPのモダンテンプレートエンジンTwigを使ってみる。 ほぼデファクトのSmartyより、いくらか素敵らしい。

特長

・高速
プレーンな最適化されたPHPコードに変換されるからオーバーヘッドが超少ない!

・セキュア
サンドボックスモードがあって信頼出来ないコードも安全に実行できる  (利用者がテンプレートデザインを変更できる場合とか)

・フレキシブル
柔軟なlexer(?)とパーサで動く。カスタムタグとフィルターとDSLを作ることができる

ウハー!曖昧(・へ・)

インストール

方法が色いろある
http://twig.sensiolabs.org/doc/intro.html#installation

とりあえずいつもどおりPEARで。
こうして、
pear channel-discover pear.twig-project.org


こうすると、
pear install twig/Twig


こうなる。
downloading Twig-1.11.1.tgz ...
Starting to download Twig-1.11.1.tgz (76,492 bytes)
.................done: 76,492 bytes
install ok:
channel://pear.twig-project.org/Twig-1.11.1


これで



こうなって

Hello Fabien!

これで

こうなった。

<!DOCTYPE html>

<html>
    <head>
        <title>:-)</title>
    </head>
    <body>
        HELLO!!
    </body>
</html>


つづくー!

かねこ<(゚ε゚)>

2012年11月5日月曜日

SpringFrameworkのテストでSessionスコープを使うの巻

初歩的なメモ

SpringFrameworkでこう書いて、
テストこう書いて、
実行すると、こうなる
ねーぞ、と。
なので、テスト用にSessionスコープをつくってあげます(Requestとか他のスコープも一緒)
実行


とりあえずとおった。
複数のテストの場合、個別のテストに書くの微妙なのでリスナーを作りましょう。
で、ほげテスト君をもとどおりにしてアノテーションでリスナー指定
チクショーDIできてねー(>_<)
どうやらこうらしい。
さいごとのトコちょっと意味不明。
なので、(気が向いたら)つづく。

かねこ m)Д`)

2012年10月14日日曜日

Groovy!! (MOP: Meta Object Protocolの巻)

Groovyのすべてのクラスは暗黙的にgroovy.lang.GroovyObjectインタフェースを実装していて、GroovyObjectインタフェースにはMOP用のメソッドが定義されている。

こんな感じ。シンプル。
invokeMothod
set/getProperty
set/getMetaClass
→groovy.lang.MetaClass imprements MetaObject

コード例


まとめ
grooby++

かねこ\(^o^)/

2012年9月30日日曜日

Groovy!! ミックスイン(Minxin)の巻

GroovyはMixinがつかえる。
Mixin名前かっこいい!


多重継承の使いどころ全然思いつかない(ニューハーフとか?)
けど、コード書いてみよう。


言語仕様は使いやすくて読みやすい。
ただし、読みやすさは同一スコープでクラス初期化してる場合だけで、DIとかの場合は定義だけ見ても継承関係わかんなくなっちゃうからダメかも。でもGroovyでDIなんか書かないからいいか。
要は適材適所?でも適所がわからん(><)

ついでに参考
Mixin は Symbolics 社のオブジェクト指向システム Flavors で初めて登場し、LISPマシン で用いられたオブジェクト指向への試みであった。この名称は、マサチューセッツ州 Somerville にあった Steve's Ice Cream Parlor からヒントを得て考え出されたものであった[1]。このアイスクリーム店の店長は(バニラやチョコレートなどの)基本となる味を混ぜ、追加の具材(ナッツ、クッキー、キャンディなど)と組み合わせたものを提供し、それを"Mix-in"と呼んで店の登録商標としていた[2]。
Mixin - Wikipedia

けつろん
 名前かっこいい!

かねこ((´∀`))

2012年9月29日土曜日

Groovy!! クロージャ(Closure)の巻

Groovyはクロージャ(Closure)が使える。
クロージャが使えると、RubyとかjQueryでよくやるあの感じ(笑)のコーディングが出来る!

説明ができないので、コード書きます。

スコープ
クロージャはブロックの外側の変数にアクセスすることができる。


レキシカルスコープ
クロージャが呼び出された場所ではなく、クロージャが宣言されている場所からみたスコープが有効


変数の束縛
クロージャ内で宣言した変数のスコープはクロージャ内のみとなる


本領発揮
必殺!この記法で書くことができると、イテレーションの条件と実際の処理を分離することができる。


どんどんつかおうクロージャ!

かねこ( ゚ ρ ゚ )

2012年9月23日日曜日

Groovy!!(テスト!)

テスト書かない奴は死刑!

ということで、groovyのテストかいてみます。

コード みぢかっ!

テスト
実行
グリーン。

今日のブログもう終わってしまった…つづく!

かねこ(-∧-;)

2012年9月22日土曜日

Groovy!!(EclipseとGroovyプラグイン)

EclipseのGroovyプラグインいれるの巻。ほぼ全自動で楽々♪


ヘルプ→新規ソフトウェアのインストール



何にも考えずにどんどん進んで、


インストール完了。

新規プロジェクトウィザードにGroovyできた。ナイス!
さっそくプロジェクト作ってみる。



check it!!



かねこ(´∀`∩)↑age↑

2012年9月20日木曜日

Groovy!!(Linuxに環境構築編)


Groovyきわめる!

まずはLinuxに環境構築する

前提確認。OS.
# uname -a
Linux polyrhythm.e2info.co.jp 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011
x86_64 x86_64 x86_64 GNU/Linux

種類わかったから以下。
# cat /etc/redhat-release
CentOS release 6.2 (Final)

あとJava
java version "1.7.0_05-icedtea"
OpenJDK Runtime Environment (rhel-2.2.1.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 23.0-b21, mixed mode)


Groovyインストール!

バイナリ取得
[root@polyrhythm tmp]# cd /tmp
[root@polyrhythm tmp]# wget http://dist.groovy.codehaus.org/distributions/groovy-binar


展開と移動
[root@polyrhythm tmp]# unzip groovy-binary-2.0.2.zip
[root@polyrhythm tmp]# mv groovy-binary-2.0.2/ /usr/share/


シンボリックリンク(必須じゃない)
[root@polyrhythm share]# mv /usr/share/
[root@polyrhythm share]# ln -s /usr/share/groovy-2.0.2/ groovy


パス設定(本当は~/.bash_profileで。)
[root@polyrhythm share]# PATH=$PATH:/usr/share/groovy/bin/
[root@polyrhythm share]# export PATH

要チェック!
[root@polyrhythm share]# groovy -v
Groovy Version: 2.0.2 JVM: 1.6.0_24 Vendor: Sun Microsystems Inc. OS: Linux
やった。

コード実行
[root@polyrhythm e2info]# vi hw.groovy
println "Hello World!"

[root@polyrhythm e2info]# groovy hw.groovy
Hello World!

Groovyさいこう!

かねこ(^-^)

2012年9月18日火曜日

PHP Fog!

開発環境構築はそろそろネタ切れになってきてちょっと飽きちゃたから、たまには他のことやろう。

PHP Fogが気になったので、つかってみます。PHPのクラウドプラットフォーム!

1.登録~SSHキー設定

(省略)

アプリ登録で、とりあえずCustom Appを選択。登録が完了するとHelloWorldがでるようになる。



2.Gitリポジトリからソースコード取得

git cloneする。
# git clone git@git01.phpfog.com:e2kaneko.phpfogapp.com
Cloning into 'e2kaneko.phpfogapp.com'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.


3.ソースコード書き換え

適当に。



4.commit~push

コミットしてプッシュ。お決まり。
# git commit . -m "change message."
[master 3db2846] change message.
 1 file changed, 1 insertion(+), 1 deletion(-)

# git push
Counting objects: 5, done.
Writing objects: 100% (3/3), 271 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:  -----> Deploying to the cloud
To git@git01.phpfog.com:e2kaneko.phpfogapp.com
   c0fb119..3db2846  master -> master


5.確認

さっきプッシュした内容が反映されたことを確認。



て感じでお手軽かどうかイマイチどうかわからない(コミットフックして自動デプロイってすぐ作れるもんね)PHP Fogだけど、スケールアウトしたりスケールアップしたり、リリースバージョン管理したり、すぐサービス起動したり止めたり、そういうクラウドの特徴っぽいところで真価を発揮するんだろうよ、きっと。

AppFogもきになる!

かねこ(b´∀`)

2012年9月17日月曜日

SVNとIRC連携の巻

SVNコミットをIRCに通知してみる。
SVNにはpost-commitがあるから、たぶん楽勝。

環境もなんでもいいんだろうけど、手っ取り早そうなPHPで。

pearライブラリ検索
> pear search IR
Retrieving data...0%
.MATCHED PACKAGES, CHANNEL PEAR.PHP.NET:
=======================================
PACKAGE      STABLE/(LATEST) LOCAL
Net_IRC      0.0.7 (beta)          IRC Client Class
Net_SmartIRC 1.0.2 (stable)  1.0.2 Net_SmartIRC is a PHP class for communication with IRC networks
ネット見たらSmartIRCのほうがよさそう。

かいた。
サーバに置いて、post-commit変更
[root@hoge hooks]# vi post-commit
#!/bin/s
AUTHOR=`svnlook author -r $REV $REPOS`
LOG=`svnlook log -r $REV $REPOS`
CHANGES=`svnlook changed -r $REV $REPOS`
php /home/e2info/developer/svn-irc.php "$AUTHOR" "$LOG" "$CHANGES"

どうかな


できた!!日本語よめないのはめんどくさいからまた今度で。

(*´・ω・)かねこ(・ω・`*)

2012年9月14日金曜日

Jenkins先生とIRCの連携の巻

IRCサーバうごいたので、早速Jenkinsのビルド結果をIRCサーバに送ってみよう。
JenkinsにはIRC Pluginがあるので導入。

Jenkinsの管理→プラグインの管理→Jenkins IRC Plugin



「Jenkinsの管理」→「システムの設定」にIRC Nortification発見!有効に。


ビルドしてみる…jenkins-botきた!わーい


いや、なんかしろ(笑)

気を取り直して設定見直し。
プロジェクト単位の設定の方にあった。


再度ビルド。



できたー!連携サイコー!
IRC用のちっちゃいモニター欲しい。

かねこ( ^ω^ )

2012年9月13日木曜日

IRCいれた!!の巻

iRCサーバいれた。
設置と設定が簡単そうなので、IRCD-Hybridを選択。どのへんがハイブリッドなんだろうか。


EPEL追加
[root@polyrhythm tmp]cd /tmp
[root@polyrhythm tmp]# wget http://syslogserver.googlecode.com/files/epel-release-5-3.noarch.rpm
--2012-09-12 18:19:48--  http://syslogserver.googlecode.com/files/epel-release-5-3.noarch.rpm
Resolving syslogserver.googlecode.com... 74.125.31.82, 2404:6800:4008:c00::52
Connecting to syslogserver.googlecode.com|74.125.31.82|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11989 (12K) [application/x-rpm]
Saving to:  epel-release-5-3.noarch.rpm”

100%[======================================>] 11,989      --.-K/s   in 0.03s

2012-09-12 18:19:48 (396 KB/s) -  epel-release-5-3.noarch.rpm  saved [11989/11989]

[root@polyrhythm tmp]# rpm -ivh epel-release-5-3.noarch.rpm
warning: epel-release-5-3.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 21752
1f6: NOKEY
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]



yumインストールして、
[root@polyrhythm tmp]# yum --enablerepo=epel install ircd-hybrid
(略)

Installed:
  ircd-hybrid.x86_64 0:7.2.3-5.el5

Dependency Installed:
  openssl098e.x86_64 0:0.9.8e-17.el6.centos.2

Complete!
[root@polyrhythm tmp]#


コンフィグファイル設定して起動
[root@polyrhythm tmp]# cp /usr/share/doc/ircd-hybrid-7.2.3/simple.conf /etc/ircd/ircd.conf
[root@polyrhythm tmp]# vi /etc/ircd/ircd.conf

serverinfo {
        name = "polyrhythm.e2info.co.jp";
        sid = "000";
        description = "Test IRC Server";
        hub = no;
};

[root@polyrhythm tmp]# service ircd start
[root@polyrhythm tmp]# service ircd status
ircd (pid 13110) is running...

できた?


つないでみる



つながった?よくわからないけど、つながったんだろう、きっと。

OS起動時に自動起動するようにして、

[root@polyrhythm tmp]# chkconfig ircd on


おしまい~☆

かねこ(・д・)

2012年9月11日火曜日

最強の開発環境をつくるぞ!

本気でやるぞ!


というわけで、グランドデザインのラフつくりました。イマイチ!
トモチンに「もっとかっこよくしたい!」って相談したら、「モノクロにするとかっこよくなりますよ~」って言われたんだけど、モノクロのやりかたはおしえてくれませんでした
(-∧-;) あいつめ。

現在導入済みの環境は、
  • Jenkins
  • SVN
  • Redmine
  • Aipo
  • サーバ死活監視
ほかにもあったっけな?


次はとりあえず全部つないじゃうのがわかりやすくていいだろうと思うので、iRCサーバ作って導入済みプロダクトの通知をバンバン飛ばしてみたい!

よって次回は、iRCサーバをたちあげてみたいと思います。
楽しみ!

かねこ(゜-゜)

2012年9月10日月曜日

Jenkins導入しました

ひろっちと開発チーム用サーバつくりました。KVM上にCentOS。
サーバ名はpolyrhythm.

かっこいい!

Jenkins入れました。

メモリ不足。
スペック貧弱すぎたか( TДT)

まだまだ序の口。

かねこ(゚з゚)

MVCとMOVE

世間ではMVC is dead, it's time to MOVE on.(和訳)の話題が花盛り♪

ちょっと見てみた。

MVC is a phenomenal idea. You have models, which are nice self-contained bits of state, views which are nice self-contained bits of UI, and controllers which are nice self-contained bits of …

What?

I'm certainly not the first person to notice this, but the problem with MVC as given is that you end up stuffing too much code into your controllers, because you don't know where else to put it.

これの、too much code into your controllers, because~ の下り、イマイチ(><)

実際は、MVCのモデルの領域は、”データと手続き”の部分なので、Controllerが誇大化する場合は、そもそもModelの扱い方を間違えてるのではないかと思います(よくあるのは、ControllerからDAO操作してるとか)

ということで、MVC死んでねー

MOVEは一読してよくわからなかったので、次回お勉強してみようと思います。

かねこ( ・`д・´)

2012年4月9日月曜日

MongoDB(5) シャーディング

今日はMongoDBのシャーディングをやってみよう。

shardingとは: Shard(database_architecture)
mongoのシャーディング: Sharding

はじめにデータベース起動(とりあえず3つ)
mongod --dbpath=d:\xampp\mongodb\data\shard1 --port 28017
mongod --dbpath=d:\xampp\mongodb\data\shard2 --port 28018
mongod --dbpath=d:\xampp\mongodb\data\shard3 --port 28019


コンフィグサーバ起動
mongod --configsvr --port 28099 --dbpath=d:\xampp\mongodb\data\config


ルーティングプロセス起動

(デフォルトチャンクサイズは200MBだけど、テストのために3MBに指定)
mongos --configdb localhost:28099 --port 28100 --chunkSize 3


ここまでで、サーバ群起動完了。
次に、shardingの設定をする。


mongo起動、adminデータベースに接続
D:\xampp\mongodb\bin>mongo localhost:28100/admin
MongoDB shell version: 2.0.3
connecting to: localhost:28100/admin


shardサーバ追加
mongos> db.runCommand({addshard:"localhost:28017"});
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> db.runCommand({addshard:"localhost:28018"});
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> db.runCommand({addshard:"localhost:28019"});
{ "shardAdded" : "shard0002", "ok" : 1 }


ステータス確認
mongos> db.rintShardingStatus();
--- Sharding Status ---
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
        {  "_id" : "shard0000",  "host" : "localhost:28017" }
        {  "_id" : "shard0001",  "host" : "localhost:28018" }
        {  "_id" : "shard0002",  "host" : "localhost:28019" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

mongos>



shardキーを指定
mongos> db.runCommand({shardcollection:"test.test",key:{userid:1}});
{ "ok" : 0, "errmsg" : "sharding not enabled for db" }


おこられた(><)

データベースにsharding許可を指示
mongos> db.runCommand({enablesharding:"test"});
{ "ok" : 1 }



再度挑戦
mongos> db.runCommand({shardcollection:"test.test",key:{userid:1}});
{ "collectionsharded" : "testdb.test", "ok" : 1 }

ていうか、これ、コレクション単位でshardできるのか。すごい柔軟。



ルーティングサーバに接続して、テストデータ投入。
D:\xampp\mongodb\bin>mongo localhost:28100
MongoDB shell version: 2.0.3
connecting to: localhost:28100/test
mongos>



100万件くらい、いれればいいかな。
mongos> for(var i =0; i<1000000; i++) {
... var doc = {userid:i, name:"user"+i};
... db.test.save(doc);
... }


状況確認
mongos> db.runCommand({addshard:"localhost:28017"});db.printShardingStatus();
--- Sharding Status ---
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
        {  "_id" : "shard0000",  "host" : "localhost:28017" }
        {  "_id" : "shard0001",  "host" : "localhost:28018" }
        {  "_id" : "shard0002",  "host" : "localhost:28019" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
        {  "_id" : "testdb",  "partitioned" : true,  "primary" : "shard0000" }
        {  "_id" : "test",  "partitioned" : true,  "primary" : "shard0000" }
                test.test chunks:
                                shard0000       8
                                shard0001       7
                                shard0002       14
                        too many chunks to print, use verbose if you want to force print


状況確認2
mongos> db.test.count();
1000000


100万件はいってる。


接続先を個別のデータベースに変えて確認
D:\xampp\mongodb\bin>mongo localhost:28017
MongoDB shell version: 2.0.4
connecting to: localhost:28017/test
> db.test.count();
162515

D:\xampp\mongodb\bin>mongo localhost:28018
MongoDB shell version: 2.0.4
connecting to: localhost:28018/test
> db.test.count();
171400

D:\xampp\mongodb\bin>mongo localhost:28019
MongoDB shell version: 2.0.4
connecting to: localhost:28019/test
> db.test.count();
666085

合計100万件はいってる。ナイス。

というわけで、MongoDB編おしまい。

かねこ( ;∀;)