2011年9月29日木曜日

URI 設計

1, DNS
IPアドレス ⇔ FQDN

2, Apache
FQDN ⇔ ドキュメントルート

3, cakephp
HTTPメソッド、URIの後ろの方?
⇔ コントローラ+アクション

2011年9月27日火曜日

cakephp での設定ファイル

ここっぽく。

アプリ全体→app/config/bootstrap.php
コントローラ→app/app_controller.php
モデル→app/app_model.php

まぁbootstrap.phpに書く。
書き方は、適当にdefineで。
define('JPAcStopURL','~');

2011年9月25日日曜日

observerパターンがよくわからない。

実際に書いてみて、プログラムの構造は把握できたが、
どんな時に使えばいいか、今まで自分がやってきた仕事の中で、
このパターンを使える事例が思いつかない。。

Backbone.jsという、クライアントサイドのフレームワーク?
メール到着通知ダイヤログ、これやったら少しは分かるかな?


~ 3日後 ~

ようやく理解できた。と思う。
観察するとか、監視するとか言うから、
よくわからなくなるんだと思う。

「A処理が終わった際、通知処理をキックする」時に使うものだと理解した。

複数の通知処理(メール送信、画面表示、twitter投稿とか)をobserverとして、一般的に定義しておく。

必要に応じてobserverを登録し、A処理が行われた際登録してあったものを実行する。

つまり、observerパターンは、通知処理を分離するためのもの。

実装してみたい。

telnetのぱけっとが見たくて。

CentOSにtelnet-serverをインストール

1,telnet-serverをインストール
2,/etc/xinetd.d/telnetを修正
3,/etc/init.d/xinetd をrestart

パケットを見てみる。
なんか長い。
loginが表示されるまでにやたら、パケットやり取りしてる。
そして、ユーザ名・パスワード入れると、
一文字一文字、1パケットでやり取りしている。
これが透過モードというやつか。

どうやったら、行モードになるんだろう。

2011年9月24日土曜日

Plainテキストを使う怖さ

wiresharkでSMTPプロトコルを追ってみた。

1,最初に、クライアントからサーバに、ehloを送信。
2,次に、サーバからクライアントに、250レスポンスが返却されるが、
  その中で、サーバが対応している機能(?)をクライアントに伝えている。
  「AUTH PLAIN」とはいってっている・・・。
3,次に、クライアントからサーバにAUTH PLAIN(SMTP認証)が送られる。
  user名とパスワードをbase64エンコードしたものが入っている。
  デコードしたら、普通にユーザー名とパスワード見えた。。

よく話は聞くけど、見えることを実感・・・。

tcpdumpで特定のパケット取って、
AUTH PLAINのパラメータ取得してくるスクリプト書いたら、
社内のユーザ名とパスワード、取ってこれるんじゃ・・・。
こことか

ちなみに、タイトルと本文は、IMFの中に入ってた。

2011年9月21日水曜日

snmpを入れる

基本ここを見てやった。

設定はここ

設定する内容は、
1,ネットワークとコミュニティ名
2,セキュリティグループ名
3,・・・
もうちょい調べよう。。

apache 2.2.21のrpmbuild

apache脆弱性

apache2.2.21をrpmbuildした

2011年9月20日火曜日

cakephpのソースを追う。

cakephpで作ったアプリケーションを、
本番環境に移行した際、
rewriteが効かなくなった。。

と思ったら、中の.htaccessファイルが消えていた。
cakephpでのルートの振り方を追ってみようと思った。

ちゃんと追ってる人いるもんだな。
.htaccess追い
app/webroot/index.php後

2011年9月19日月曜日

jettyのインストール

ここにはapacheとの連係とかも書いてある。

① jettyをDLしてinstall
$ sudo wget http://dist.codehaus.org/jetty/jetty-hightide-8.0.0/jetty-hightide-8.0.0.v20110901.tar.gz
$ sudo tar -xzvf jetty-hightide-8.0.0.v20110901.tar.gz

② jettyの起動設定
$ sudo cp bin/jetty.sh /etc/init.d/jetty
$ sudo chkconfig --add jetty
$ sudo chkconfig jetty on

③ 動作ユーザの設定
$ sudo adduser jetty
$ id jetty
uid=504(jetty) gid=504(jetty) 所属グループ=504(jetty)

/usr/local/jetty-hightide-8.0.0.v20110901/etc/jetty-setuid.xml を作成
/usr/local/jetty-hightide-8.0.0.v20110901/etc/jetty.conf を修正

④ jettyを起動してみる。
$ java -jar start.jar
http://192.168.11.3:8080で確認
停止はCtrol + d
これやらないと、サービスから起動出来なかった。

⑤ サービスから起動
/etc/init.d/jetty start

※ 気がついた。
/etc/init.d/jetty startで起動すると、
ドキュメントルートが、/usr/java/defaultとか指してる。。
結局、JETTY_HOMEが効いていないんじゃ?

$ java -jar start.jarで起動すると、
ドキュメントルートが、/usr/local/jetty-hightide-8.0.0.v20110901/webappsになる。

jettyの起動スクリプトの中を見るとデバック用のコマンドがある。
$ /etc/init.d/jetty -d
JETTY_HOME = /usr/local/jetty-hightide-8.0.0.v20110901
JETTY_CONF = /usr/local/jetty-hightide-8.0.0.v20110901/etc/jetty.conf
JETTY_RUN = /tmp
JETTY_PID = /tmp/jetty.pid
JETTY_ARGS =
CONFIGS = --pre=etc/jetty-setuid.xml --pre=etc/jetty-logging.xml
JAVA_OPTIONS = -Djetty.home=/usr/local/jetty-hightide-8.0.0.v20110901 -Djava.io.tmpdir=/tmp
JAVA = /usr/java/default
RUN_CMD = /usr/java/default
Usage: jetty [-d] {start|stop|run|restart|check|supervise} [ CONFIGS ... ]
これ見る限り、JETTY_HOMEは設定されている。

どうやってドキュメントルート変更するんだろう。。






これでjettyが動くようになった。
apacheやnginxと連動する際は、
そいつらをproxyとして
jettyに送るのかな。。

Decorator

この牛丼の例はわかりやすい

使えそうな例

読み物としてちょうどいいかも

scalaでDecoratorを実装

もう一度だけscala

書いてたのが全部消えた。

もう一度頑張る。

【環境】
言語 : scala
flamework : lift
DBサバ : Mysql
webサバ : apache


IBMのぺーじなら、デプロイ方法まで書いてあるから、頑張れそうな気がした。

① liftアプリケーションの作成
$ mvn archetype:generate -U -DarchetypeGroupId=net.liftweb
-DarchetypeArtifactId=lift-archetype-basic -DarchetypeVersion=0.8
-DremoteRepositories=http://scala-tools.org/repo-releases
-DgroupId=org.developerworks.lift -DartifactId=quepasa

② ページを追加する
1, /src/main/webapp/update.html を追加する。
2, /src/main/scala/bootstrap/liftweb/Boot.scala に追加。
※ :: 表記を使ってリスト・リテラル

③ アプリケーションのテスト
$ mvn jetty:run -U
http://192.168.11.3:8080/update に接続

④ スニペットを追加する。
1, /src/main/webapp/update.html を修正する。
2, /src/main/scala/~/snippet/Update.scala を追加。
3, 再コンパイルする。
$ mvn compile

⑤ モデルを追加する。
1, /src/main/scala/~/model/Message.scala を作成
2, /src/main/scala/~/snippet/Update.scala を修正
3, /src/main/scala/bootstrap/liftweb/Boot.scala に追加。

⑥ Geronimoにデプロイする。
1, Geronimoインストール
geronimoのぺーじのGeronimo 2.2.1 with Jetty 7 (tar.gz)をダウンロード・解凍

$ sudo wget http://ftp.jaist.ac.jp/pub/apache//geronimo/2.2.1/geronimo-jetty7-javaee5-2.2.1-bin.tar.gz
$ tar -xvzf geronimo-jetty7-javaee5-2.2.1-bin.tar.gz

bashrcに以下を記述。
export GERONIMO_HOME=/usr/local/geronimo-jetty7-javaee5-2.2.1
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin

/usr/local/geronimo/bin/で、geronimo起動コマンドを実行
$ sudo java -jar server.jar

※ 途中でこんなのでて失敗した。
The service ServiceModule=org.apache.geronimo.configs/jetty7/2.2.1/car,j2eeType=GBean,name=JettyAJP13Connector did not start because Address already in use

ポートが競合してる的なやつかと思い。
/usr/local/geronimo/var/config/config.xmlの
JettyWebConnector, JettyAJP13Connectorの、
redirectPortを8080にした。

そしたら今度は・・・。
2011-09-19 12:16:19,770 ERROR [GBeanInstanceState] Error while starting; GBean is now in the FAILED state: abstractName="org.apache.geronimo.configs/j2ee-corba-yoko/2.2.1/car?ServiceModule=org.apache.geronimo.configs/j2ee-corba-yoko/2.2.1/car,j2eeType=CORBANameService,name=NameServer"
org.apache.geronimo.gbean.InvalidConfigurationException: CORBA usage requires Yoko CORBA spec classes in java.endorsed.dirs classpath

何のこっちゃ。

2, Jettyだけ入れようかな・・。
JETTYを入れる。
jettyだけ入れてデプロイする方法もあるし。

やってみたけど、スクリプトからデーモン起動するとドキュメントルートが別のところになってしまう問題未解決。


3, warファイルの作り方
$ mvn clean install
$ mvn package
これで、targetデレクトリ内にwarファイルが出来る。

4, デプロイ
jettyのドキュメントルートにwarファイルをコピーする。

5, 確認
それっぽい画面は出てきたが、sitemapが出てこない~。

その後、mvn jetty:runのホーム(http://192.158.11.3:8080)に
jettyのサンプルが出るようになった。はぁ・・・。
(/usr/java/default)


問題点は、
1,jettyのデーモン起動
2,liftのデプロイ方法(sitemapが出ない原因は?)
3,なぜ、mvn jetty:runで、/usr/java/default/が出るのか?
4,liftでMysqlを使う方法は?

まだまだ、先は長い。。

play scala で yabe

ちょっと気の利いたブログエンジンを作る。
マニュアル
yabe

① プロジェクトの作成
② DBの準備(evolutionsのファイル準備)
③ モデルの作成
④ テストの作成
⑤ コントローラの作成
⑥ viewの作成
・・・
このへんまでやって、
ふと、liftのview firstって考え方のほうが、
いい感じな気がしてくる。
yabeの画面開発までやって、後やってない。
う~ん。行ったり来たり。
どうも開発環境が整わない。。

2011年9月18日日曜日

sarコマンド

CentOSでsarコマンドをつかう方法

Linuxの負荷を調べる際、使えるらしい。

vnc serverの設定

ここに書いてある。
vnc

① /etc/sysconfig/vncserversの修正
② vncpasswdコマンドでvncのパスワードを設定
③ ~/.vnc/xstartupを編集

ここまでやって、RealVNCを立ち上げてみたが、以下のエラー。
unable to connect to host connection refused 10061

原因は、
①の修正でコメントアウトを外しただけだったが、
その中に書いてある、「-nolisten tcp -nohttpd -localhost」がまずかった。
確かにlocalhost空しかつながらなそうな匂いがする。

つないでみたが、画面が黒い。。。
ここ見ればなんとかなるかも。
CentOS 5.4 で VNC

poderosaのパスワード保存方法

パスワードを保存する方法

winキーショートカットと組み合わせて、最速に。

SSL/TLSのしくみ

https接続をした時のパケットを見るため、
TLSプロトコルについて調べた。

SSL/TLSのしくみ
SSL/TLS暗号化

文字ばっかだけど、詳しい
絵がいい

2011年9月17日土曜日

memcachedを入れてみる

Paymoの課金状態をその都度決済システムに確認しに行くのではなく、
一定期間は自鯖のメモリに保存しておく様にしたい。

(aid)(iid)() => 取得結果

komofsも使ってみたいが、
まずはmemcachedをおえるという意味でmemcachedにした。

また、cakePHPのモデルcacheってのもできるみたい・・・。
速度差を試すのはありかも。

memcached

① libeventのインストール
$ sudo yum install libevent libevent-devel

② memcachedのダウンロード・インストール
最新版は1.4.7だった。
$ sudo wget http://memcached.googlecode.com/files/memcached-1.4.7.tar.gz
$ sudo tar -xvzf memcached-1.4.7.tar.gz
$ sudo cd memcached-1.4.7
$ sudo ./configure
$ sudo make
$ sudo make install

③ memcachedの実行
$ /usr/local/bin/memcached -p 11211 -m 64m -vv
デーモンとして稼働させるには、[-vv]ではなく[-d]。

④ PHPからmemcachedを利用する。
ここに書いてある。
ローカルからのみ接続する。
$ memcached -d -m 64 -p 11211 -l 127.0.0.1
えらい。ちゃんとinit.dのスクリプトも書いてる。

肝心のphpからの接続は,peclで提供されている。
$ sudo pecl install memcache
・・・
Build process completed successfully
Installing '/var/tmp/pear-build-root/install-memcache-2.2.6//usr/lib/php/modules/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.6
You should add "extension=memcache.so" to php.ini

となった。

後は、php.iniに以下を書き込む。
extension=memcache.so
※ extension_dir="/usr/lib/php/modules"であること確認。


⑤ phpからの使い方は、以下とか適当に見てやってみる。
phpのサイト
ちょっと詳しそう
コードが見やすい



⑥ memcachedプロトコル
 memcachedプロトコル

⑦ PHPのextensionについて

⑧ libeventについて







2011年9月16日金曜日

もう一度php-5.3.8を入れる

もう一度php-5.3.8を入れる。

.configureを変更してもう一度やってみるか。

こういうこと(phpとかapacheとか使えなくなる危険性のあること)するなら、
社内クラウドで、必要な時だけインスタンス生成、
ミスったらサーバ立ち上げる所からすぐにやり直せる。。
そんな状態がいいな。


てか、configureオプション多すぎ。意味不明。
昨日のやつに、--enable-fpmを入れてconfigure。
すると下記のエラー。

You've configured multiple SAPIs to be build. You can build only
one SAPI module and CLI binary at the same time.

そもそもSAPIsってなによ?
PHP CLI/CGI SAPI

どうやら、PHPのコマンド?にはCLI版とCGI版がある模様。
1回のコンパイルで、どちらかを指定しなければならない。
enable-fpmを指定するとCGI版となるが、
'--with-apxs2=/usr/sbin/apxs' が指定されているとCLI版となる。
後者を外してconfigureしてみる。
また、CLI版とかぶらない様に、
--program-suffix=.cgi を指定する。

configure通った。

次にmake。通った。

次にmake test。
You may have found a problem in PHP.って言われた。

無視して、make install。
program-suffixを指定したためか。
phpは消えてない。
php.cgiってのがいて、
php.cig -vってやると。
「Unable to initialize module」ってエラーが出た。

出てる奴、configureの段階で抜いてみるか。。
'--enable-xml' \
'--disable-pdo' \
'--disable-dom' \
'--disable-xmlreader' \
'--disable-xmlwriter' \
'--without-mysql' \
こいつら抜いてみた。
結果、エラーは変わらない。。

こいつらをコンパイルし直さないとダメなのか・・・?


sudo './configure' \
'--host=i686-redhat-linux-gnu' \
'--build=i686-redhat-linux-gnu' \
'--target=i386-redhat-linux' \
'--program-prefix=' \
'--program-suffix=.cgi' \
'--prefix=/usr' \
'--exec-prefix=/usr' \
'--bindir=/usr/bin' \
'--sbindir=/usr/sbin' \
'--sysconfdir=/etc' \
'--datadir=/usr/share' \
'--includedir=/usr/include' \
'--libdir=/usr/lib' \
'--libexecdir=/usr/libexec' \
'--localstatedir=/var' \
'--sharedstatedir=/usr/com' \
'--mandir=/usr/share/man' \
'--infodir=/usr/share/info' \
'--cache-file=../config.cache' \
'--with-libdir=lib' \
'--with-config-file-path=/etc' \
'--with-config-file-scan-dir=/etc/php.d' \
'--disable-debug' \
'--with-pic' \
'--disable-rpath' \
'--without-pear' \
'--with-bz2' \
'--with-curl' \
'--with-exec-dir=/usr/bin' \
'--with-freetype-dir=/usr' \
'--with-png-dir=/usr' \
'--enable-gd-native-ttf' \
'--without-gdbm' \
'--with-gettext' \
'--with-gmp' \
'--with-iconv' \
'--with-jpeg-dir=/usr' \
'--with-openssl' \
'--with-pcre-regex=/usr/local' \
'--with-zlib' \
'--with-layout=GNU' \
'--enable-exif' \
'--enable-ftp' \
'--enable-magic-quotes' \
'--enable-sockets' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--enable-sysvmsg' \
'--enable-wddx' \
'--with-kerberos' \
'--enable-ucd-snmp-hack' \
'--enable-shmop' \
'--enable-calendar' \
'--without-mime-magic' \
'--without-sqlite' \
'--with-libxml-dir=/usr' \
'--enable-xml' \
'--with-system-tzdata' \
'--without-mysql' \
'--without-gd' \
'--disable-dom' \
'--disable-dba' \
'--without-unixODBC' \
'--disable-pdo' \
'--disable-xmlreader' \
'--disable-xmlwriter' \
'--disable-json' \
'--without-pspell' \
'--enable-fpm'

2011年9月15日木曜日

nginxをインストールしてみる。

nginxのインストール
yumでいいや。

① yumレポジトリを追加
$ sudo wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
$ sudo wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
$ sudo rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

② インストール
$ sudo yum install ningx
nginx,GeoIP(依存関係のあるパケ)

$ sudo yum install php-fpm
php-fpmをインストール出来ない。

Missing Dependency: php-common = 5.3.8-1.el5.remi is needed by package php-fpm-5.3.8-1.el5.remi.i386 (remi)
依存関係のあるphp-commonが見つからない的な。

nginx+apache
nginx+php-fpmでどこまでチューニングできるか

てか、サポートしてるの、php-5.3.3以上なのか?。
php-5.3.8に上げよう。




③ 

php のSOAPが遅い。

paymoで使っているphpのSOAPでめっちゃ時間かかっている。

ものは試しと、
拡張モジュールの方のSOAPクライアント使ってみる。

PHP/SOAPクライアント

① 拡張モジュールインストール
$ sudo yum install php-soap

② apache再起動して、phpinfoを確認
soap使えるように成っている。

③ SOAP接続部分を書きなおし
$client = new SoapClient("http://192.168.33.13/PayInfoAPI/paymo.asmx?op=GetACData&wsdl",$options);
$res = $client->GetACData($shop_id,$email,$iid,$ac_status);

※エラー発生。

Fatal error: Uncaught SoapFault exception: [soap:Server] サーバーは要求を処理できませんでした。 --> 値を Null にすることはできません。パラメータ名 : String in

なんだろう。。

SOAP SERVER側で、helloworld()を作って呼び出してみると、
取得できた。
しかし遅すぎる。
SOAPクライアントが原因ではない模様。。

ネットワーク関連か?
① IPで指定してみる。
 → 速くなった。 
② ローカルIPで指定してみる。
 → 速くなった。
てことはDNSか。
resolv.confは、他のサーバと同じものが設定されている。
見て所が違うのか?

php extentionを作りたい

extensionを作る

① 手始めにPHPをソースからコンパイルしてみる。
$ sudo wget http://jp.php.net/get/php-5.3.8.tar.gz/from/this/mirror
$ sudo tar -xzvf php-5.3.8.tar.gz
$ cd php-5.3.8.tar.gz
$ (configureを実行でMakefileを作成、5.2.16のphpinfoから抜粋、丸っと貼り付けで動いたw)
'./configure' '--host=i686-redhat-linux-gnu' '--build=i686-redhat-linux-gnu' '--target=i386-redhat-linux' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-mime-magic' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--disable-json' '--without-pspell'

※エラー
error: Could not find pcre.h in /usr

パス違うのかな。。
$sudo find / -name pcre.h
/usr/local/otp_src_R13B01/erts/emulator/pcre/pcre.h
/usr/local/php-5.3.8/ext/pcre/pcrelib/pcre.h

yumでは入っていたけど、ソースが無いからヒットしないのかな。。
--with-pcre-regex=/usr/local/php-5.3.8/ext/pcre/pcrelib/pcre.h
でもう一度configureした。しかし、今度は、
error: Could not find libpcre.(a|so) in /usr/local/php-5.3.8/ext/pcre/pcrelib/
と言われた。
findで探したがなかった。
つまり、pcreもソースからインストールしないと行けないということか。

pcre.hが見つからないエラー
pcreインストール

$ sudo wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.tar.gz
$ sudo tar -xvzf pcre-8.13.tar.gz
$ cd pcre-8.13
$ sudo .configure
$ sudo make
$ sudo make install

pcreできたっぽい。
じゃ、
--with-pcre-regex=/usr/local/pcre-8.13
としてもう一度configure.
おかしいね。
やっぱり、libpcre.(a|so)見つからない。
過去の質問
--with-pcre-regex=/usr/local
としてもう一度configure.
できたっぽい。

じゃ、make
そして、make install

試しに $ php -v

【エラー】
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/20090626/pdo_mysql.so' - /usr/lib/20090626/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
こんなのがいっぱい出てきた。。
読み込めない。では、それを設定しているファイルを探す。

$ grep -R 20090626 /usr/*
/usr/bin/php-config:extension_dir='/usr/lib/20090626'

こいつか。
逆に、「pdo_mysql.so」こいつがいるパスを探す

$ find / -name pdo_mysql.so
/usr/lib/php/modules/pdo_mysql.so

ここだ。では、下記に変更してみる。
/usr/bin/php-config:extension_dir='/usr/lib/php/modules'

駄目だ。

php.iniにextension_dir書いてみるか?
extension_dir=/usr/lib/php/modules

extensionは指定した所を見るようになったが、
そもそも、使えるモジュールじゃない?


今日は諦めて元戻すか。今度リベンジする。

yum removeで一回全部消した。
・php
・php-common
・php-cli
・php-mcrypt
・php-ldap
・php-mbstring
・php-mysql
・php-pdo
・php-pear
・php-soap
・php-xml
たぶん復活。

xdebug

var_dumpが見やすくなるextension。
xdebug

play framework、scala版

やっとここまで来た。play scalaを始めましょう。
play scala

① scalaモジュールのインストール
$sudo play install scala

② scalaアプリケーションの作り方
$ play new myScalaApp --with scala

③ 実行
$ play run

※ここでコンパイルエラー発生
class file needed by ScalaController is missing.
reference value LocalvariablesNamesEnhancer of package play.classloading.enhancers refers to nonexisting symbol.
one error found

playとscalaのバージョンが怪しそう。。
Play 1.2.2、Scala 2.8.1って明記してるし。

1, Scala 2.8.1を入れてみる。
svm
ちょっと便利そう。。
まぁとりあえず自分で入れよう。
$ sudo wget www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz
$ sudo tar -xvzf scala-2.8.1.final.tgz
あとは,bashrcに書いてあるSCALA_HOMEを、
インストールした/usr/local/scala-2.8.1.finalに設定。

試しにplayしてみる。
が、同じエラー・・・。

2, playを1.2.2にしてみる。
そもそもバージョンいくつなんだろう。
バージョンが出るはずのところに、
「master-0976149」って出てるんだよね。
~/.bash_historyを見てみると、
git://github.com/playframework/play.git で落として、antしたらしい。

今度は、「http://download.playframework.org/releases/」から、
play-1.2.2.zipをおとして見る。
$ sudo wget http://download.playframework.org/releases/play-1.2.2.zip
$ sudo unzip play-1.2.2.zip

あとは、/usr/local/binに入っているplaycmdを作りなおす。
$ sudo rm playcmd
$ sudo ln -s ../play-1.2.2/play playcmd

よし、できた。
もう一度play。

きた!。
具体的な原因までは突き止められてないが・・。
そしてやっとスタート地点。


② はじめてのアプリケーション
java版とほぼ同じ。
scalaで書かれているだけ。
テストはやっぱり出来なかった。
次は、yabeやるか。

2011年9月14日水曜日

play framework、java版

scalaのフレームワーク play(元はjava)を使ってみる。
play

まず、playのインストール。
これはjavaを前提にやってみる。

①ソースを落としてコンパイル。
# git clone git://github.com/playframework/play.git
# cd play/framework
# ant

② play/ディレクトリ下にあるplayを参照できるように。
/usr/local/binにシンボリックリンクを作成
なんかもともとLinuxに入っていたplayコマンドと被ったので、
playcmdとした。
$playcmd って打ったらplay!って出た。

※ warningが出てる・・・。
!! Warning: could not load core command file war.py
!! Warning: could not load core command file precompile.py

③ 新規アプリケーションを作成してみる。
$ playcmd new myApp
名前聞かれたが、適当に答えた。

④ 新規アプリを実行
$playcmd run myApp
http://192.168.11.3:9000に接続しても見れなかった。
http://localhsot:9000じゃないとダメなのかな?
次に進む。
※ その後なんかつながった。。何だったんだ?

⑤ IDEの準備
IDEはとりあえずいいや。

⑥ helloworld
ここそのまんま。
helloworld
・app/controller/ 以下にコントローラを置く。
・conf/routes でルーティング設定。
・app/views/{コントローラ名}/ 以下にアクション毎のviewを置く。
・app/views/以下にテンプレートが置かれている。
他に、
・ルーティングのやり方(パラメータをURL煮含めるには?)
・テンプレートの修正(テンプレへの出力場所はdoLayoutにしかできないのか?)
・バリデーションの出力()
・テストの実施(play testして、/@testsに接続したら、そこからテスト実行できる!!スゲェ)
デモ、テスト、一番初めの段階で、localhostに接続できない的なエラー。
ローカルで実行する想定なのかな。


http://192.168.11.3:9000/application/sayhello?myName=asdf

⑦ このあとのチュートリアル。
このあとは、ブログエンジンを作るチュートリアルが続く。
これをやれば、DBへの接続だとか、
まるまる全部、わかるっぽい。
scalaの方をやりたいので、
javaはここまで。

⑧本番環境
$play start で指定したポートでwebサーバが稼働する。
受け側をApacheにして、振り分けるってこともできるっぽい。

2011年9月13日火曜日

virtualboxのネットワークアダプタ

virtualboxで使えるネットワークアダプタの割り当て。
・NAT
・ブリッジ
・内部ネットワーク
・ホストオンリー

ここが一番わかりやすかった。
VirtualBoxのネットワーク設定

MyISAMとInnoDB

MyISAMとInnoDB
MyISAM

・テーブル単位のロック

InnoDB
・クラスタインデクス
・トランザクション
・レコード単位のロック
つまり、SQLSERVERと同じ。

apacheの設定確認

【apacheのバージョン】
httpd -v

【apacheが読み込んでいるモジュール】
httpd -M

paymo本番

【決済キーの取得】
店舗ID:
APIキー:
email:


【自動課金商品の購入】
店舗ID:
APIキー:
決済キー:
商品名:
店舗オーダー番号:
カード番号:
有効期間:
性:
名:
電話番号:
email:

【自動課金情報の取得】
店舗ID:
APIキー:
email:
商品名:
課金状態:


【自動課金停止への接続】
店舗ID:
APIキー:
自動課金番号:


【DB】
http://192.168.11.3/phpMyAdmin/index.php?db=e2info&token=4580667dc3538ae8eba16725aa61274a

DB名 : paymo
テーブル名 : api_key_storage
スキャフォールド

yumレポジトリの追加方法

レポジトリ追加

2011年9月12日月曜日

linuxでNTPサーバの設定

linux-windows
NTP

① ntpサーバをインストール、起動、chkconfig on 
② ntpサーバのconfig修正(/etc/ntp.conf)
- 外部NTPサーバの設定
- 接続可能なクライアントの設定
③ ピアの階層がホストの階層よりも少なくなっていますエラー
NTPサーバがサービスを提供するまでに10分くらいかかるみたい。
その後、接続できた。

※ しかしできたのは同セグメントのものだけ。
別セグメントは123ポートに接続出来なかった。。ASA?

phpで日付を操作する。

日付操作

cakePHPのalphaNumericは環境に依存するらしい

alphaNumeric

cake/libs/validation.phpを修正

【デフォ】
//$_this->regex = '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/mu';

【数字文字】
//$_this->regex = '/^[a-z\d]*$/i';

【数字文字記号】
$_this->regex = '/^[a-z\d!-_]*$/i';

scala チャットアプリ

チャットアプリ

1,元を取得
TARファイル
後、SBTをどっかからDL

2,sbt update

3,混在のChatを作成

4,デザインを分離

5,追加機能

2011年9月6日火曜日

lift+sbtで頑張る

1,本家サンプルDL実行
Liftの本家っぽいページ
① DL
② tar
③ ./sbt update ~jetty-run
④ http://192.168.11.3:8080/に接続

2,ページ・スニペットを追加し、テンプレートに埋め込む。
[add] test.html : lift_basic/src/main/webapp/
[add] Friends.scala : lift_basic/src/main/scala/code/snippet/
[edit] Boot.scala : lift_basic/src/main/scala/bootstrap/liftweb/

※ このあたりいじってる間に、なんか動かなくなったので、
初めからやり直す。

3,スニペットでフォームを作る。
Scala + Life
SHtmlについて少し
SHtmlについてしっかり

4,

lift + sbt

liftって別にsbtでもいけるらしい。

本家っぽいページ

simple build toolの復習
Simple-Build-Toolで始めるScala開発

※ liftのDBをmysqlに変えてる人たちは、このやり方を使っているっぽい。
liftでmysqlとか使う

tomcatインストール

scalaを実稼働するために、
Javaアプリケーションサーバー構築(Tomcat5)を行った。
JAVAアプリケーションサーバ

もう一度lift

Facebookアプリをscalaで作ることを検討するため、
もう一度lift

【lift全般】
scala+lift
やってみたらできた。

scala+lift2
こっちもやってみる。

liftで遊ぶ
こっちもひと通りやってみる。

【DBをMysqlにする】
mysqlを使うために
liftでmysqlと
jettyとPostgrase


【apache上で動かす】
apache geronimo
geronimoのインストール
また、jettyとapache連係しても良いと、
なんか選択肢おおい。とりあえずどれでやろうか。

【liftで開発を行う】
webサービスをscalaで行う

2011年9月5日月曜日

paymoのURL構造

【決済キーの取得】
店舗ID:
APIキー:
email:



【自動課金商品の購入】
店舗ID:
APIキー:
決済キー:
商品名:
店舗オーダー番号:
カード番号:
有効期間:
性:
名:
電話番号:
email:


【自動課金情報の取得】
店舗ID:
APIキー:
email:
商品名:
課金状態:



【自動課金停止への接続】
店舗ID:
APIキー:
自動課金番号:



【DB】
http://192.168.11.3/phpMyAdmin/index.php?db=e2info&token=4580667dc3538ae8eba16725aa61274a

DB名 : paymo
テーブル名 : api_key_storage
スキャフォールド

SOAPクライアントを作る

VisualStudioでSOAPサーバ、
phpでSOAPクライアントを作ってみる。
今度は問題なく

1,VisualStudioでSOAPサーバ
.netで作成した~
VSでSAOPサーバ


2,phpでSOAPクライアント
PERAを使ったSOAPクライント

2011年9月4日日曜日

nodejsむずかしい。

nginx
未着手。

webapp作成
connect() is now done automatically.のバグがとれん。。

jQuery利用
未着手。

simple mvc
nodejs/mvc_test3にインスト。
$ node app.jsでエラー。
Cannot set property 'maxListeners' of undefined
わからん

2011年9月3日土曜日

node.js実稼働にあたり。

① webサーバはNginXを使うらしい。
Ubuntu+nginxでnode.js+npmのインストールからデプロイまで

② 1プロセスだとブロッキングすると終わる。

③ expressでMVCモデルが使える。
MVCな開発がしたくて「express-mvc-bootstrap」をInstallしてみた

本家のサンプルサイト

a simple mvc ~

【未完成】node.jsのフレームワークexpress

使い方が書いてある。
node.jsとMySQLでWebアプリを作る

1点、
app.use(express.bodyDecoder());は、
app.use(express.bodyParser());としなければならない模様。

出力されたエラー
① 上記のエラー。
② called object is not a function
③ connect() is now done automatically.

2011年9月2日金曜日

SORPとWSDL

ここ見ればできそう。
SORPとWSDL

.netで作成したWebサービスにJAVAクライアントから接続する

cakePHPでREST

cakephpでrestを実装

cookbook


① 設定変更
app/config/routes.php の修正
下記2行を追加
Router::mapResources('recipes');
Router::parseExtensions();

【デフォルトのルート】
GET /recipes RecipesController::index()
GET /recipes/123 RecipesController::view(123)
POST /recipes RecipesController::add()
PUT /recipes/123 RecipesController::edit(123)
DELETE /recipes/123 RecipesController::delete(123)
POST /recipes/123 RecipesController::edit(123)

② コントローラ作成
app/controller/recipes_controller.php
index,view,add,edit,deleteを実装(特に全部使うわけでは無いけど)
HTMLのメソッドと、接続先のURLによって、
呼び出されるアクションが変わる。

③ ビューの作成。
index,view,add,edit,deleteを実装(特に全部使うわけでは無いけど)

serialize($recipes); ?>

って書くとOK

また、ポストゲットのパラメータは以下で取得できる。
GET : $vid = $this->params["url"]["id"];
POST : $vid = $this->params["form"]["id"];

④ モデル
前回作ったやつを流用

できた!

ちょっと、エンタモについて書けば、
URL発行API : GET、/recipes/geturl/、view(geturl)
課金情報API : GET、/recipes/getpay/、view(getpay)
課金停止API : POST、/recipes/stop/***/、edit(123)
課金実施API : POST、/recipes/pay/***/、edit(123)

で行こう!!!。

~ メモ ~

デフォルトルートでの設定。


【index all】


【index 13】



【view】


【add】


【edit】


【delete】


【edit】

Delimiter must not be alphanumeric or backslash

危うくはまりかけた。
Delimiter must not be alphanumeric or backslash

スニペット補完

ただの補完ではない。
コードの一部をまるまるneocomplcache出力する

cakephpのスニペット
neocom

node.js出できることが書いてある。

node.jsいろいろ

チャットアプリとか、綺麗な図を各canvasとか。

【未完成】 node.jsでcanvasを利用する

canvasを使う。
これを使うと綺麗な図とかかけるらしい。

なんか出来なかった。
canvasのインストールが出来んかった・・・。

npm ERR! Failed at the canvas@0.7.2 preinstall script.
npm ERR! This is most likely a problem with the canvas package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-waf configure build
npm ERR! You can get their info via:
npm ERR! npm owner ls canvas
npm ERR! There is likely additional logging output above.

オレのせいじゃない?

もっとすごいやつ

node.jsのチャットアプリデモ

チャットアプリ

node.jsデモ
簡単にできたw。
まぁ、落として、実行しただけだから、できたとは言えないけど。

2011年9月1日木曜日

【未完成】イベントループとは

ここでちょっと詳しく説明されているっぽい。
naveでnode.js

nodejsのインストール

どうやら、naveっていうnodejsのバージョン管理ツールを使うのが
一般的なもよう。

全部uninstallしてやり直し。

【node.jsのインストール】
# cd /usr/local/
# mkdir nodejs
# cd nodejs
# git clone http://github.com/isaacs/nave.git

# cd nave
# ./nave.sh ls-remote (現在取得できるバージョンを確認)
# ./nave.sh install 0.5.2 (latestだとうまく行かなかったので)
# ./nave.sh ls(ちゃんとインストールされたか確認)
# ./nave.sh use 0.5.2(.bashrcに書いておく)
# cd /usr/local/bin
# ln -s ../nodejs/nave/nave.sh nave (naveにパスを通す。)

【npmのインストール】
node.jsのパッケージ管理ツール

# wget http://npmjs.org/install.sh
# chmod 777 install.sh
# ./install.sh sh

【パッケージのインストール】

パッケージ例

node.jsを使って、webアプリを作るチュートリアル

node.jsとmysqlでwebアプリ

nginxとは

吉川さんの言っていたnginxとは、
webサーバだった。

nginx

apacheはスレッドベース、
nginxはイベントループ。

スレッドベースの場合、クライアントからの
リクエストごとに対応するスレッドを作成。
そのとき、メモリも確保されるため、
同時接続するクライアントの数に比例して、
使用するメモリ量も増える。

node.js概要

【IBM】nodejsとは


サーバサイドjavascript

要は、
1,シングルスレッドで非同期処理ができる。
(イベントループ)

【未完成】 node.jsのIDE

ブラウザ上で動くnodejsのIDEがあるらしい。

node.js入門

インストールと実行
# npm install cloud9
$ cloud9
出来なかった・・・。

以下を参考に再挑戦。
cloud9環境を構築
① githubからソース落とす。
② cloud9/bin/cloud9.shを実行する。

うーん。うまくいかん。
また今度トやる。