ブログ移設しました。

bloggerから記事を移設しました。


HUGOで記事を書いてみると思いのほか書きやすかったので移動。

火曜日, 4月 14, 2015

mod_perlがビルドできなかった

mod_perlがビルド時点でしくってるので確認。

以下、ログ

/home/luna/perl5/perlbrew/perls/perl-5.18.4/bin/perl /home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4
/ExtUtils/xsubpp  -typemap /home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4/ExtUtils/typemap -typemap
 /usr/local/src/mod_perl-2.0.8/xs/typemap  Connection.xs > Connection.xsc && mv Connection.xsc Connection.c
cc -c  -I/usr/local/src/mod_perl-2.0.8/src/modules/perl -I/usr/local/src/mod_perl-2.0.8/xs -I/usr/include/a
pr-1 -I/usr/include/httpd -D_REENTRANT -D_GNU_SOURCE -fPIC -fno-strict-aliasing -pipe -fstack-protector -I/
usr/local/include  -DMOD_PERL -DMP_COMPAT_1X -DLINUX -D_REENTRANT -D_GNU_SOURCE  -O2   -DVERSION=\"2.000008
\" -DXS_VERSION=\"2.000008\" -fPIC "-I/home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4/x86_64-linux-t
hread-multi/CORE"  -DMP_HAVE_APR_LIBS Connection.c
Connection.xs: 関数 ‘XS_Apache2__Connection_remote_addr’ 内:
Connection.xs:117:33: エラー: ‘conn_rec’ は ‘remote_addr’ という名前のメンバを持っていません
     RETVAL = (APR__SockAddr) obj->remote_addr;
                                 ^
Connection.xs: 関数 ‘XS_Apache2__Connection_remote_ip’ 内:
Connection.xs:134:26: エラー: ‘conn_rec’ は ‘remote_ip’ という名前のメンバを持っていません
     RETVAL = (char *) obj->remote_ip;
                          ^
Connection.xs:138:13: エラー: ‘conn_rec’ は ‘remote_ip’ という名前のメンバを持っていません
          obj->remote_ip = (char *) (SvOK(ST(1)) ?
             ^
make[3]: *** [Connection.o] エラー 1
make[3]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS/Apache2/Connection' から出ます
make[2]: *** [subdirs] エラー 2
make[2]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS/Apache2' から出ます
make[1]: *** [subdirs] エラー 2
make[1]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS' から出ます
make: *** [subdirs] エラー 2
[luna@v3290 mod_perl-2.0.8]$

んー。。。。なんかすでに入っている何かを呼び出そうとして失敗してるのかな。

調べてみると、以下の記事

httpd -V
Server version: Apache/2.4.6 (CentOS)
Server built:   Mar 12 2015 15:07:19
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

今までの環境ってそういえばみんなapache2.2系でしたね。

stackoverflowで提示されている方法試してみるか。

I solve that problem by installing apache2 via apt-get and installing Apache2::RequestRec via cpan
or

Try to run these commands before make

make source_scan

make xs_generate

makeのターゲット指定をまず試してみた。
結果はダメで、再度perl Makefile.PLを叩いても結果一緒です。

もう一つのperlモジュールもmod_perl持ってきてから、なので、これも通らなさそう。

となるとこれか。。

Unfortunately upstream mod_perl is not ported to Apache 2.4 yet.

AFAIK Debian developers went ahead and made some changes that allows you to compile and use mod_perl on Apache 2.4. Here is there source tree http://svn.apache.org/repos/asf/perl/modperl/branches/httpd24

今度試した時に追記するよ。

modern ie

思い出したので、書いておきたい。

もし、IEのテストを行う時には、このVMを思い出して欲しい。

https://www.modern.ie/ja-jp

様々なWindowsとIEの組み合わせが入っているそんなやつらだ。
特にMacしかもっていない人は、これでIEの動作確認ができる。

Browser+OSの組みあわせで可能なものが表示されるので、欲しいものをダウンロードしておくと良いだろう。
必要になったら、OVAファイルをダブルクリックすればいい。

月曜日, 4月 13, 2015

perl周りについて書き散らかす。

perl今自分の中でホットになりました。
そんなわけでperlのことについて色々書いてみたいと思う。

開発環境は何がいいかな?

慣れていないなら、Linux。 Windowsは別途ノウハウがいる。(cpanであれが通らないんだけどを解決する術)

perl6がいいの?

ほかの言語とは違い、perl6は全く別言語と聞きます。
ずっと前から名前だけは聞いてますが、まだまだな感じを受けます。
(触ってみた、動かしてみたが多いけど、入門系の記事はあまり見受けないので)

site_perlでいい?自分でビルド?

ほかの人が言うにはvendor_perlはフレームワークみたいなものを使う時には良くないとききます。
が、私自身ビルドしてもある程度のエラーが出るのでなんとも。

オススメの環境は?

plack + webサーバー mod_perlの運用方法は知っておくべき事柄の一つかもしれないけど。
(plackの紹介記事だけ見て話してる)

perlビルドするのが大変です。

開発環境では、 perlbrew、プロダクションでは、plenvがいいとか。
ログに載せているけど、オプションは、あんな感じで良いと思います。

その他

runy使っててもwindowsでやるときは別途ノウハウが必要だと感じてて、慣れるまでは大変かな?と思います。
また、mod_perl全力ディスではなく、監視対象が一つ減るとかいいとこもあるので、この辺は要件になるかなと思います。

手を動かす。

そこを踏まえた上で、開発環境で、catalyst、sledgeとかを動かす環境を作ってみるとしましょう。(mojoは触れる機会がまだないのでスキップ)

perlbrew

perlbrewのインストール及び概要については上のサイトが全体像掴みやすかった。
しかし、上記のやり方ではGetop周りで怒られちゃうので、以下のサイトの様な回避策を講じる必要がある。
ワンライナーで何か置き換えているね。sedは使えた方がいいね。(遠い目)

ではどんどんインストール

インストールするバージョンはperlbrew availableで確認できるのがインストール可能なバージョンです。
心ゆくままに5.8オーバーを各種ビルドなんてのもいいのではないでしょうか。
(この記事を修正してるとき、裏でperlbrewを回しまくっています。)

いざ、モジュールのインストール

さて、cpanmまでインストールが終わったら、いざ開発に必要なモジュールを揃える旅に出よう。
perlbrewはrvmみたいにmoduleセットの切り替えができるんですね。すてきです。
perl5libの面倒もみてくれるんですかね。 site_perl的なところに入ってしまうものについてはみてくれるパスではないかもしれないですが。

個人的にはプロジェクト作成時点でcartonで必要なパッケージをちゃんとバージョン管理する様にした方がいいかなと思うよ。。。

  • 個人的にcatalystのディレクトリ構成とあまりマッチしていない気がしますが
    • いやいや。catalystに関しては、cpanfileだけでよくね?


cartonで管理するなら、あまりcpanmでどこにインストールするのかとか最初だけ気にしていればいいからね。
となると、cpanmでいれたほうがいいのは?
carton、DBD系くらいしか思いつかない。きっと、熟れてる人ならもっと出てくるかもしれないけど。

carton+catalyst+sqlite
https://github.com/tluna/perl
sledge
諦めた。mod_perl必須

後書き perlって環境周りはあまり楽じゃない気がします。。。
へぼいのは承知でちとperlerはすげぇとおもう。また、テストツールはperl界隈は随一とのことなので、その辺も触ったらいいのかな。次の機会に書こう

ごりっとバージョンごとにインストール(あまり意味ないけど)
#!/bin/bash
perlbrew -v install perl-5.21.10 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.20.2 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.18.4 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.16.3 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.14.4 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.12.5 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.10.1 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.8.9 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads

#perl-5.21.10
#perl-5.20.2
#perl-5.18.4
#perl-5.16.3
#perl-5.14.4
#perl-5.12.5
#perl-5.10.1
#perl-5.8.9
#perl-5.6.2
#perl5.005_04
#perl5.004_05
#perl5.003_07

$ perlbrew list 
  perl-5.16.3
  perl-5.18.4

  perl-5.20.2

その他のバージョンのビルドについては後日確認します。

木曜日, 8月 21, 2014

vim! grep!

最近会社のマシン上でvimのBundleが正しく動くようになりました。

今までこのマシンが悪いと思っていたのですが、悪いのは結局本人ですね!

んで、vimが動くようになったので、外部grepの設定を行いました。
できるようになったことは次の通り(一例)

カレントディレクトリに対しての検索
grep -r search_word * | cw 

今開いているファイルの検索
grep search_word % | cw

検索結果はリスト表示されるのでこれがやれないとすごいつらいです。検索もかなり早いので、grep -r とかをcygwinとかでやるより素敵ですよ。

現状のvimfilesのディレクトリは、以下のリポジトリに登録してあります(汚いから書き方は他の人を真似てね!)

happy vim life

月曜日, 7月 07, 2014

とあるサイトのURLを飛ばしてくれる ChromeExtension作成中

今以下のようなChromeでとあるサイトのリンクをクリックした時に、リンクに含まれる先をとってきてサーバーに返却するExcentionを作成中です。


えっと、、、またツールですね。
twitterのなにがしかを作ろうと思っていたのですが、うまい事考えがまとまらずこういう事をしています。

extensionじゃなくて、userjsにしてやればいいのでしょうけど。

後ほど作ったら報告

木曜日, 6月 05, 2014

ログどうしましょう。

crontabで実行したものがメールに投げられてうざい。 /dev/nullに葬るか?

と思ったのですが、あんまりじゃね?と思ったので、これを期にログを管理する方法を考えてみましょう。ということを考えた訳で、


cron で > /dev/null して椅子を投げられないための3つの方法 - 酒日記 はてな支店 http://d.hatena.ne.jp/sfujiwara/20120613/1339547638

syslogを押さえよう! | Think IT http://thinkit.co.jp/article/724/1

シスログの管理 rsyslog.conf の設定 〜 CentOS6 | EasyRamble http://easyramble.com/configure-rsyslog.html

rsyslogの方がサーバーが増えたときも良さそう。
iptablesで外部接続を遮断しておけばいいべ。


という訳で、ログ周りの設定を。。。するか。

月曜日, 5月 05, 2014

tmuxよいですね。

今までscreenというものを使っていましたが、沖縄のガチな友達から教えてもらいました、tmuxを使っております。
印象的にはscreenより便利です。 キーバインドも気になったら変更すればいいし、screenよりも柔軟でよいです。 今のところ結構利用しておりますが、バグった瞬間もないのでおすすめです。


screen を使っていたときには、ssh-agentのsocketをどうやって持ちまわすか?についてscreenrcに書いておりましたが、これで書かないです みそうです。tmuxでコンソールを複数開いてwhoしてもひとつしかコンソール表示されないのに何か秘密があるんじゃないかとか。

注:ssh-agentの例のアレ
│     /tmp/ssh-XXXXXXXXXX/agent.<ppid>
│             Unix-domain sockets used to
│             contain the connection to
│             the authentication agent.
│             These sockets should only
│             be readable by the owner.
│             The sockets should get
│             automatically removed when
│             the agent exits.
screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips
時代はGNU screenからtmuxへ - Dマイナー志向

2015/5/5追記
どうもssh-agentのsockets共有するときにこれでOKっていうものがこの当時見つかっていなかったらしく(mac,windowsのagentがよしなにしてくれていた。)
なんで、linuxでもこれで解決できるよ。っていうのがあったら教えてください。

debianな人も赤帽な人もBSDな人もみんなまとめてtmuxしたらいい!

同一端末上で、puttyやteratermを複数起動して使い分けている人是非試してみてくださいな。
(けっこうsshで接続するときも切断されると結構面倒ではないですか? tmuxやscreenを使えば、その辺の面倒な事が一気に解決。)

いつもながら乱文すいません。

MacでChromeが暴走

Js周りの解析で結構便利とか、結構軽いのが好きとか、Shift+ホイールで横移動できたりで、デフォルトブラウザをWindows,Macともに設定しています。

そこで、最近Macの電池が切れるのが早いし、処理をおこなっていないときにも、ファンが回っているなぁ。。。夏だからかな?とかそんなことを考えていました。

ActivityMonitorで確認してみると、ChromeがCPU usage ダントツの120%。
タブしか開いていないのにこれはありえないでしょう。

Chromeもエクステンションが増えてきたので、誰かが暴走しているのかなー?と
そうなった時は、右のメニューボタン?=>ツール=>タスクマネージャを開きましょう。

拡張機能が最初怪しいということで、すべてをOFFにしても解決しなかったので、途方に暮れていました。

私の場合今回は、オフラインgmailが原因でした。(あれって拡張機能だけど、どうもツール=>拡張機能には出てこないみたい)

なんで、ホームにてオフラインGmailを削除しますた。(どのみちあまり使っていないですし)


てなわけで、暑い暑いなかファンがえらい元気に回っている時が多いですけど、そこまで処理をおこなっていないときにそうなる場合は、Windowsならtaskmgr、MacならActivityMonitorみてみてねー。。。ってことで。

tizenのdata contorolsを読み解いてみる。

tizenを使う用事があって、その中で利用するData Contorolsについて読んでみる。

忘れっぽいので書いたあとにドキュメントをなくす人だからここに書く。

追記:
DataContorlって何するの?まとめ。
アプリ間でデータを共有するときにAppManager?AppContorlの一緒に載せてデータを送るとか、そのリスナーだけで解決できない小難しい問題に対しての解決策を提供するもの。
SQL型とキーバリュー型があるから好きなものを使うよろし、(一つのパッケージに複数のプロバイダーを入れても問題はないからそれでも良いと思う。 SQL型の場合今見ている限り、DBを切り替えるみたいなものはないですし)

Datacontrolを使うためには、
サービスアプリ(DataControlProviderとなるもの)
クライアント
でやりますので、1対多で使えるけど、実際これってデータの完全性とかトランザクションの概念はあるのかな。。。 その辺がまだわからない状態で時間切れになりました。

チラ裏でやれ。ってツッコミは正解でモチベーションのために記事書いた。公開したいものがあるから記事書いたわけではない( ー`дー´)キリッ

BGMはこんな感じの意味が読み取りづらい曲を流していると作業に集中できることを発見。


日本語訳を公開している人もいなかったので、読みながら書いてミスを発見するために文章を起こした。
でもね、訳も間違っている。話の大筋は自分が追える(書いたあとに思ったのは、これだったら本文読んだほうが1.5倍早く追える)このエントリーを更新していくきりょくがなかったりするんで
もし、コメントにノイズ載せるなハゲ的な苦情が殺到したらページを閉じます。

https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Fguide%2Fapp%2Fdata_controls.htm

上記のページから開始。

データコントロール

データコントロールは標準的なアプリケーション間のデータのやり取りを行う機構です。
すべてのアプリケーションは、データの共有を他のアプリケーションに対してリクエストすることができます。しかし、サービスは自分のデータを提供することしか出来ません。

2つのタイプのデータコントロールがあります。
SqlDataContorol
MapDataControl

ここで脱線します(具志個人的に使って覚えるほうが早い人はこっちのほうがいい気がしたので)--------------
チュートリアルを見たほうが早いという人は
SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataCOntrol
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrol_map.htm

とかをみればよい。
------------------

続き行きます。
SqlDataControl
このクラスは、他のサービスアプリケーションにより、特定のデータをSQL型のデータコントロールを使用することができるようにするものです。
また、あなたのサービスアプリケーションからSQLデータ管理プロバイダーを定義することができます。

MapDataControl
このクラスは、他のサービスアプリケーションからエクスポートされたデータに対してキーバリュー型のデータアクセスを可能にするクラスです。またサービスアプリケーションかからキーバリュー型データ管理プロバイダーを定義することができます。

(exportの意味が結構危ないですね。 また、データコントロールは、データ管理と書くべき?CRUDするだけじゃないの?)

データコントロールは、共有データにアクセスし、結果を戻すための操作を供給することができます。

データコントロールを使ってみる

sqldatacontrol または mapdatacontrolのインスタンスをappmanagerクラスから取得します。
appmanagerクラスは、要求されたデータコントロールを提供し、あなたのアプリケーションにデータコントロールを返すサービスアプリケーションを見つけます。

データコントロールはプロバイダーIDを第一情報として使います。
これは、データコントロールプロバイダーで定義します。
例えば、static const Tizen::Base::String DATACONTROL_PROVIDER_EXAMPLE = L"http://tizen.org/datacontrol/provider/exmaple"
(あれ?この書式operationidに似てね?)

sqldatacontorl
appmanager::getsqldatacontorlN メソッドを使用してプロバイダーIDを指定する場合、一意に特定のSQLデータコントロールを取得出来ます。データコントロール取得後、(解決 後)sqldatacontorlのselect(),insert(),update(),deleteなどを呼び出せます。
sqldatacontorlインスタンスの実行結果はリスナーを返します。(この時に返すのは、OnSqlDataControlSelectResponseReceived(),
OnSqlDataContorlUpdateResponseReceived(),
OnSqlDataContorlDeleteResponseReceived(),
OnSqlDataContorlInsertResponseReceived(),
はTizen::App::ISqlDatacontorolResponseListenerのインターフェースです。
サービスアプリケーションが終了した時、そのsqldatacontrol操作を終了した応答リスナーが呼び出されます。(上の4つね。)

(やばい、訳があやしすぎるw 楽しくなってきた。)

MapDataControl
GetMapDataContorolN() を使用してプロバイダIDを指定する場合、ユニークな特定のマップタイプのデータコントロールを得ることができます。データコントロールを解決したあと、 GetValue, AddValue SetValue removeValueのようなMapDataContorlクラスのメソッドをよびだします。
MapDataContorlインスタンスの実行結果は以下のメソッドから取得出来ます。
OnMapDataControlAddValueResponseReceived(), OnMapDataControlSetValueResponseReceived(), OnMapDataControlRemoveValueResponseReceived()
はTizen::App::IMapDataControlResponseListenernaのインターフェースです。
上記の応答リスナーはサービスアプリケーションがマップデータコントロールの操作を行ったあと呼び出されます。

データコントロールのライフサイクル(ここは図を見たほうがいい)
順番を書いておくと

  1. データコントロールを取得(C++App)
  2. データコントロールのプロバイダーIDを解決、アクセス権限をチェックする。(AppManager)
  3. データコントロール応答リスナーをセット(C++APP)
  4. データコントロールメソッドを使用(C++APP)
  5. データコントロールを起動または、データコントロールのプロバイダーに要求(これはきっと、provider側(datacontorolを実装したアプリ側))
  6. 結果が非同期にデータコントロール応答リスナーに対して送られる。
  7. 終了
順番は、そのプロバイダー側で制御してあげないといけないのか。

データコントロールを用いた開発

でサービスから他のアプリケーションにデータを出力する。(やっぱり、exportの訳が分かんね)
データベースファイルを提供する(データベースを提供という解釈で)サービスアプリは、ISqlDataControlProviderEventListenerインタフェースを実装し、
Tizen::App::DataControlProviderManager のSetSqlDataControlProviderEventListener()を使用し、プロバイダーのリスナーとして登録します。
サービスアプリケションは、SQL型データコントロールリクエストをプロバイダーリスナーからデータコントールリクエストを
OnSqlDataControlSelectRequestReceived(),
OnSqlDataControlInsertRequestReceived(), OnSqlDataControlUpdateRequestReceived(), OnSqlDataControlDeleteRequestReceived() 
ISqlDataControlProviderEventListenerインターフェースから受け取るよ。。。
(手が疲れてきたよ)

んで、キーバリュー型の〜〜、、、、(ここも大体が同じ説明、何を実装して、どれからリクエストをとるかというお話)

終了

このへんを頭に入れて、各チュートリアルを見てみましょう。


SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

両方共、インタフェースの用意からインスタンスの取得、データの読み取り追加まで流行っています。更新と削除については、コードは用意していないけど、きっと同じように〜ってなっていますね。

使い方はわかったけど、んー。 RDBMSないし、キーバリューのサーバー(サービスアプリケーション)に対して、クライアントからどうすれば利用できるか。を書いたものでしたねー。。。。 ちょっと、これ制御めんどくさそうだな。

さ て、読み解いた。 Tizenの中だけでデータをやり取りして(MessagePort)、そして、データを書込して(DataControl)で面白い 題材ないかなー。。。。 私の頭ではぐちゃぐちゃになってきっともうすでに存在しないデータに対して更新とかやりそうで。

眠たいので、風呂入って寝ますかね。

火曜日, 4月 29, 2014

PHP 5.5 & cakephp(on composer)

Jenkinsをインストールした際にfinallyを使っているものがうごかねぇ!という事が判明したので、macとcentosのphpのバージョンをアップ!
ついでにcomposerに寄り道した時のメモ

やったこと:php55とphp-fpmのインストール cakephp on composer
composerを利用してphpunitを目的のものをインストール(古すぎず、新しすぎず欲しいライブラリを自由に個々の環境にインストールしてbundlerみたいに)

まず、php5.5のインストール

mac:

まとめ:色々あって問題解決 twitterからその時のログをコピペ
brew doctor->指定の問題を解決->brew uninstall opennssl->brew uninstall postgresql-> brew install openssl postgresql -> brew install php55 -オプション
原因:openssl postgresqlの順に参照しているライブラリのシンボルが無いぜーってエラーでした。

linux:

まとめ
remi-php55 remiを追加yumリポジトリとして利用する事で解決。
linuxに関してはソースインストールを行うも、コンパイル後、postgresqlのシンボル周りでオコされたので撤退。
php55のインストールについては、以下の記事参照。
CentOSにPHP5.5をインストール - Qiita

事の発端はcakephp cakeコマンドでbakeコマンドを動かそうとしたら、おこられたことから。

久しぶりにアップデートをかけてみると、やっぱりかなり更新があったみたいです。。。
パッケージが新しい状態かどうか確認するのは大切ですなー。

composer

http://book.cakephp.org/2.0/ja/installation/advanced-installation.html
pearの問題点であるバージョンの異なるライブラリを読み込みできない事を解決しようぜ!ってものだと思っています。
んで、cakephpからcomposerでライブラリをインストールしていたのですが、面倒になってcomposerでcakephpで管理してしまえ!
という事で、
手順メモ: (以下の項目に関してですが、一度整備してしまえば、cakephpとりに行って準備するより面倒が少なくてよいかなと。)

composerの取得

composer.json作成

結構使い方間違っているんだろうな。って項目も多いですが、以下のように。

bundle installのように


php composer.phar install  
memo:このときrequire-devの項目に関してはインストールされないはずなんですが、なんかインストールされていました。 まぁ、使うのでいいのですけど。(プロダクション環境では無効にできるようにしておかなければなりませんが)

ディレクトリ確認

その後のディレクトリ構成は以下のようになっていると思います。
▸ Plugin/
▸ Vendor/
  composer.json
  composer.lock
  composer.phar*

プロジェクト作成

./Vendor/bin/cake bake applitionname
applicationnameに指定した名前がカレントディレクトリに作成されます。

bootloaderの設定

このままでは、せっかくインストールしたphpunitも動かないので、bootloaderもちゃんと設定してあげましょう。

※gistをbloggerでさくさく貼付ける方法が欲しいです。

composerを使ってcakephpを導入しなかった人へ

通常使っているbootloaderと少し異なるので、diffでもとった後に導入を検討してください。(きっと、この辺はcakephpを素で落としただけの人も使える)

以上です。使いたいライブラリが増えたらpeclとかじゃ無い限り対応できますし、何よりライブラリの制限も設ける事ができるので、よりよいのではないかなと思います。

結果

成果:php5.5系のインストール composerの導入
失ったもの:kyototycoon用のdatasource。。。。 残っているとうれしいかな。

火曜日, 4月 08, 2014

nginx + passenger macで

rvmで構築された状態でpassengerのインストールについて分かりやすく書いてあった。
Nginx + Passenger 3 + RVM for Rack app on OS X using homebrew only 

そもそもpassengerをnginxで動かすときの設定って覚えていなかったので、調べてみると簡単に説明した所があった。
Design Recipe 別館 Blog - nginx + Passenger による Rails 環境の構築 

CentOS 6.4 server setup with Ruby On Rails, Nginx and PostgreSQL - Karol Galanciak - Ruby on Rails developer from Łódź, Poland 

nginx側にpassengerについて教えてあげるところが記載されていなくて、403になっていったぽい。

火曜日, 11月 26, 2013

eclipseじゃないaptanaで。

all in one eclipseなるものをwindowsに入れて使ってたけど、設定が多いから大変だー戸思っていた。
vimでプロジェクトごとに色々やっていた。

そこで、
http://tluna-tech-scrap.tumblr.com/post/67252208274/gosling-emacs-builder-by-zdnet

なるほど。そうか。そうか。(emacsはあれはエディタかどうかは分かりかねますが。)

railsやるとき、cakephpやるとき、IDE使えるとうれしいのかな?

分かんないけど手を出してみよう。 なんか、railsやるときにaptana入れるといいよ。的な記事を見て、aptanaを入れてみる。 えぇ。eclipseでも、pluginでできるけど、aptanaを入れてみる。

検索が、、、(Ctrl+fの図)

カムチャッカ

探しているとglancesよさげ。
でも、Eclipse marketみろよ。とかいわれる。
http://stackoverflow.com/questions/11213542/using-the-eclipse-marketplace-on-aptana-studio-3

なので、http://marketplace.eclipse.org/content/glance#.UpN1xWSGIUw
これを追加して、みると、、、、入る。
settingsからkeyで元々あるSuperKey+Jと入れ替え。 素敵はいった。 Ctrl+fと置き換えるのが私の中でよいのかはおいといて

いいもの見つけました。

月曜日, 11月 18, 2013

VMWare PlayerとVirtualBoxのディスク書き込み時の性能比較

今までVirutalBoxの方がネットワークの設定が自由だったので使っていましたが、どうもUSBから直接マウントしたディスクアクセスをしくっているケースが多いので、検証

いかに環境を記載します。
host machine:thinkpad edge mem:8G USB3のカードを取り付け。(色違うからもしかすると型番が違うかも。)http://www.kuroutoshikou.com/modules/display/?iid=1506
hostos: Windows 7 home
VMware Player:Ver6.0.1
VirtualBox: 4.2.18
guestos: centos6.4

上記環境においてVMWare player,Virtualbox共々、以下の試験を実施、
  • 直接マウントでの書き込み
  • NTFS上に仮想ディスクを作成、マウントした仮想ディスクに書き込み
  • NTFS上に共有ディレクトリ(vmが独自の機構)を作成の上、書き込み
書き込みは以下のコマンドを使用。
dd if=/dev/zero of=/mnt/target bs=1000 count=10000000

直接マウントでの書き込み

直接マウントでの書き込み時の計測結果を紛失してしまいましたが、VirtualBoxでテストを実施したときになぜか、途中でUSBドライブへのアクセスをやめてしまったので、試験完了ならず。
Playerは速度的には、NTFS上に仮想マシン用のファイルを作成したときと同じよう感じでした。(ってことは、USB3の認識ができているのですかね。)

まずは、VMware playerが一勝

んー。ext4に入れてるデータが消えてしまうかもしれない。 そう考えるとネイティブに移行するか、NTFS化した後にデータを分けるようにしましょう。ということで、いったん今あるデータをまとめてその後、データをNTFSドライブに移したあと次の試験を実施。

NTFS上に共有ディレクトリ(vmが独自の機構)を作成の上、書き込み

順番的には、こちらを後に実施しましたが、どちらにせよこちらの方が遅いに決まっているし、何よりあった方が後々楽なので、インストール。
なお。VirtualBoxで共有ディレクトリを作成するときには、ヘッダーファイルをバージョン指定のうえ実施してくださいね。

VMware Player: 40.4MB/s
VirtualBox:        12.9MB/s

んー。これではちとつらい。(VMware playerなら、windowsと共有する部分だけ切り出しならいいかもしれないけど)

NTFS上に仮想ディスクを作成、マウントした仮想ディスクに書き込み

システム的に保持したいファイルはこのやり方で落ち着くであろう方式。

結果は、
VMware Player: 171MB/s
VirtualBox:        165MB/s

こちらもVMware Player勝利。

ディスクアクセスの結果としては、VMware Playerが圧勝してしまいました。環境による差異もあるかもしれませんね。
もし開発用のサーバーとして利用しないなら、一度利用するマシンで両方ともインストールを行った上、上記の試験を実施して
  • 本当にディスクを離してしまわないか。
  • ディスクアクセスでの負荷をかけたときに止まってしまわないか。
その辺を検証してからの方がよさそうですねー。(検証を行う際のレイアウトはホストマシンがあった方が楽です。)

ただ、ネットワークの自由度としては、PlayerよりもVirtualboxの方が自由度は高いので悩みどころです。

-----チラ裏のチラ裏
今回のファイルを配置したりするサーバーにはVMware Playerを利用しますが、playerならext4にしてしまったほうがいいんじゃないか?とか考えています。(バージョンアップによる仮想ディスクの互換性が怖い)
でも、HDDを割当できるのは、一つのVMだけだし。(レイアウトの自由度低下)
んじゃ、今回はVMware Playerでファイルサーバー系は共有フォルダ、DB系は仮想ディスク作成の上書き込み。にするとしますか。

火曜日, 8月 27, 2013

オブジェクト脳のつくり方を読んでいます

最近必要なものとしてオブジェクト脳の作り方を読んでいます。



amazonアソシエイトこういう書籍紹介の時に便利ですなー。 画面が映えるそれだけでブログを書いている気持ちになるね。

目次がなかったっぽいので、翔泳社のHPから目次を拾ってきてよ。
オブジェクト脳のつくり方 http://www.seshop.com/product/detail/4115/

さて、購入した版が古いためか、それとも現行でそういう作り方が主流なのかわかりませんが結構古くから使われている技術について記載があって戸惑いつつも読み進めています。

余談ですが、


  • この記事を書いている時にこのPDFに目次つけていなかったな。。。目次つけるかと思い立つ。
    • しかし、PDFOutlinerがテキスト貼り付けからの編集をやっていないので断念。さくさくとPerfectViewerで流し読み。
  • 読み進めている時にipadが欲しくなった。 これはきっと画面サイズによるものだろうな。。。次はNexusが出たら10インチモデルが出たら店頭で触ってから購入しようと考える。(きっと前のNexusより値段が高いから買えても年末辺りかな。)


聞いたことがない用語とか出てきたらメモがてら読解して読み進めていこうかと。

この記事を書いている時は、すでに1部は読んでいてまだ実践していない状態。読んでいるところは、2部に入ってUMLを交えた設計の話が始まりましたの段階。

わからなかった単語:

5章:
  • EntityBean
  • CMP
  • DTO・・・DAOの親戚?
J2SEのライブラリを使ったものが上記に列挙されているのでしょうかね。わかんないので後回し。

GGRKSの結果:
Entity Beanとは - 意味/解説/説明/定義 : IT用語辞典 http://e-words.jp/w/Entity20Bean.html
JavaBeans - Wikipedia http://ja.wikipedia.org/wiki/JavaBeans
J2EE体験編 CMPを体験する http://www.geocities.jp/tune_up_linux/cmp1.html
Data Transfer Object - Wikipedia http://ja.wikipedia.org/wiki/Data_Transfer_Object
さっき出てきた単語をぐぐってみると。上記の結果、Beansでの違いを書いたのかしら。

6章:

  • DOA

オブジェクト脳のつくり方 http://www.seshop.com/product/detail/4115/


感想(ニコニコ動画のコメント的な):

6章が読み物として面白そうなので、読み進めたい。


6章はありそうな(今でも)話がいっぱい散りばめられてて「うけるーwww」ってくさを生やしたくなる話が満載で楽しいです。 現実は、作らないといけないドキュメントにも差異がある。 ある。 ある。 あるんだお。

6.1〜6.8までしか読んでいないですけど、これってエンジニアのレベルの差と環境が産んだ弊害物が大きいなぁと。
自身の考える技術者としてのレベルを考えたとき、エンジニアのレベルって言葉通り雲泥の差が激しいと感じています。(当然のことながら自分のレベルは低いので上の人のいう違いはモヤモヤして見えていないですが)
6.8からはドキュメントの扱いについてついて、6.9では今までの経験って無駄?(ウォーターフローのガッツリ設計=>さっさっさと開発=>ガッツリテスト)

そんな中、1部で書いてあったものがさっさと取り入れないといけないものではないか。とかそんなことを考えつつ。

7.1に書いてあるの今の職場のSEがやってくれていることだ。。。 ごめんなさい。
7.1.2うん。厳格です。 レベルたけぇと思う人は、プログラムに対して厳格ですよね。でも、いいエンジニアにするためには、必要なことだと思っています。
7.1.3これやってくれている。実際に俺もやんないとダメだ。
7.1.4最後の落とし方が面白い。けど、この気持は無いとだめだろうな。。。
7.4うわー。。。わかりすぎる。 うーん。
7.5タイプ別に分けてこのタイプにはこうっていうのを書いてあるけど、おもしろいな。
最後のパターンでないことを祈ろう

8章
実務でテストを書きながらやっている時の雰囲気をつかむのにいいかもな。(さんぷるこーどがないので見れないのが残念です)
3部に入った時に途中まで気軽に読んでいたのだけど、これEJBがわからないとおおよそ何をしているかわかってもそれ以上のことはわからないなぁー。と思って読み飛ばし(何をしているかは拾い読み程度)
んー。Javaで書かれたWebで使われているのかしら。

3割読み終わったー。付録か。 何が書いてあるのだろうか。と思ってぴろんとめくってみると、8章で出ていたコンポーネント周り、アプリケーションサーバについての解説が。。。。 なんでこっちを先に読めと言わなかったのだろうか。。。。(謎すぎる)

悪評もあるのはなんでか大体わかったところで、しみこませるのは2部までですな。 それ以降はまだまだ早いです。よってことで。寝る。適当に適当に。

金曜日, 6月 21, 2013

家に帰った時にDHCP環境でどのマシンが上がっているかみたくなった。

題名のとおりです。
普通に考えると、nmapとかシェルスクリプトで解決ですよね。

ホストの発見

なんか、-PS netowrk/24(やっちゃだめ。。。。きっとListenしているポートまでかくにんするから)とかやるとネットワークがものすごい事になったので、ちゃんとオプションは知っておかないとまずいなとか。そんなことを思いつつ。

んで、

シェルスクリプトで、pingをforするだけで事は足りると思ったのですが、勢い余ってrubyで書き始めたので最後までやることに。

利用しているライブラリは、

parallel
benchmark
net/ping

forkするものは書いたことなかったので試しに書いてみた感じ。

gistはコードをブログに貼り付けられるということで、試しに使ってみる。(githubには上げて動かないものを公開する日々)

normalのところでエラー出たらごめんなさい。 実は動作させていると、だめぽかもしれない。


勢い余ってやった。 反省している。

閑話休題
なんかディスプレイを購入したいです。
40インチのディスプレイの話を聞いていて購入意欲が高まってきた所で、「本当にそれでいいの?デュアルじゃなくていいの?」

忘れていました。
会社も自宅もデュアルディスプレイになっているのでディスプレイの大きさがすべてを解決してくれるわけではないと。

よーく考えてみるとデュアルじゃないと困る。
というわけで、デュアルディスプレイでの構成で、チルトできるディスプレイかつ、ディスプレイアームを2つ。
もしかしたら、ディスプレイは2つ追加。

ディスプレイ縦にしてみるとすごいコードが読みやすいということで、試したいし。wkwk

追伸:コードおかしかったら、、、なんかして欲しいです。
githubでなにかされるとどうなるかまだ見たことがないので、それどんなのかみてみたいですし。

土曜日, 6月 01, 2013

やべーHDD飛ばしてもうた。

最近thinkpadさんがすごい暇をしているので、windows上でdebian on Virtualboxしていました。

USBマウントでext4なHDDを二台扱っていたのですが、どうにも途中でVMがハングアップしている(VirtualBox自体がハングアップ)ので、

「Knoppixでやればいいね。」
とコピーの作業を実施。

頭の中で
/big1->/dev/sdc1
/big2->/dev/sdb1
となっていたのが、
/big1->/dev/sdb1
/big2->/dev/sdc1
となっておりました。

よし、big1からbig2のデータのコピーに失敗していたからやり直しをしましょう。
といってrm -rf /big2/ディレクトリたちと指定してEnterをたたくと、

big1を確認するとあれ?データが少ない。。。。

本をわざわざ購入して電子書籍にしていた時のお金、TSUTAYAに行って借りて、旅の思いで(これはpicasaにあるからいいとしても)が一瞬にしてなくなりました。

反射的に mount -o remount,ro /mnt/big2としました。
「私はいっさいの書き込みを受け付けない。」

なんか無いかなーと思って調べていると、
Linuxでうっかりrm -rfしちゃったけど復活出来たよー\(^o^)/ - y-kawazの日記 http://d.hatena.ne.jp/y-kawaz/20110123/1295779916

ktkt

Knopix上で作業をおこなおうにもwifiアダプタを認識していないので、断念。 このままubuntu desktopにしてしまおうということで、thinkpadさんにubuntuディスクを投入。

現在結果待ちです。

ただ、みていると、
結構とれていないファイルも多いので、これはあまり期待できそうにないですね。

前のバックアップ(調子が悪いとあきらめてknopixを起動する前のもの)が結構取れていてほしいデータがあるので、残りを保管する役割としてつかえばいいか。。)

気をつけましょう。 rm

金曜日, 2月 15, 2013

egitで最初の更新は注意?

まだ検証していない状態ですが、下記のことがあったので覚書

eclipseでコード書いてて、コミットの瞬間に書いていコードが消える。

再現手順は以下の通り、
1.新規リポジトリ作成
2.リポジトリをクローン
3.そのディレクトリでどんどん作っていく。
4.コミットする
5.push (あれ?できないぞ。。。)
6.branchをマスターとして選択
7.push (push自体は無事成功)

6の段階でブランチが確定していない、コンソールでは、pushする元と先がわかんないよ?ということは聞かれてもいきなりブランチがブランクの状態で始まることはないはず。
でも、Egitでやった時に最初のブランチはブランクの状態でして、、、

pushした瞬間に消えているのかはわかりませんが最初のスタート時に気をつけないとかなりやばいですねえ。

って、サクサクとsuica関連のプログラムが書き上がってpushしたらファイルが消えたので、悔しくて寝れなかったので考えていて原因が見えてきたという話で。

大抵はコマンドでcloneかけてその後eclipseだったから問題がなかなか発覚しなかったけど、前にも同様のことはあってそのときは間違えて消したと思っていたのだけど、、、、あの時も一緒だったのね。。。。

残念、無念 明日以降もう一度かきなおしですな。

悔しさが少しだけ和らいだのでそのまま寝ちゃう。

土曜日, 11月 24, 2012

ユーザスクリプトでちょっとした手間をなくす


どうも、最近jQueryについている$はjQuery自身である事を知った具志です。
(今までこの$はなんだろうか。。。と思っていました。)

さて、下記のページを見て欲しい。
日経BPからのRSSで飛んでくるとこのページに来るのですが、ここまで来ているのに、全文を読むボタンを押さないとそのページにいけないという謎仕様なんです。
一つのドメインに割り当ててアクセス解析の手間を軽減しているんだろうけど、これでは使いにくくて仕方がないですね。
取得しているRSSの記事があまり触れて来なかったもの、なぜか結論が冒頭に出ていない記事ばかりなので、気になったら、全文を読むをクリックする手間を省きたいです。

思いついたのは、サーバーサイドでやるか、クライアントサイドでやるか。

サーバサイドでやると、また別の方向に飛んでしまいそうですので、今回はクライアントサイドで解決する方法を考えたいです。

ただ、解決するとはいっても、軽量な方法で解決したいな。と思ったのがこのエントリを上げるきっかけでした。

クライアントサイドで解決するなら、user scriptかな。
jQueryも呼び出せるみたいなので、ブラウザの操作に不自由を感じることは無さそうです。
http://stackoverflow.com/questions/2246901/how-can-i-use-jquery-in-greasemonkey-scripts-in-google-chrome
なんで、作ってみましょう。

一旦できたー。
もしかしたら、jQueryって元々使えたんじゃね?とか、consoleからいじってて思ったけど、いいか。
できたファイルは、chromeの拡張機能に放り込めば使える。
https://raw.github.com/tluna/tluna/master/lang/js/nikkeibp-opener.js

使ってみると、前のタブが残っているのが気に入らなかったので、方法はないかな?と探してみると、http://developer.chrome.com/extensions/tabs.htmlというものをみつけたので、これで対処できるかなー。と思っていたのですが、、、
(この時点では気づいていませんでしたが、既に出来上がっているuser scriptで目的は達成できていた。)


http://dev.screw-axis.com/doc/chrome_extensions/guide/content_script/
私の利用したかったtabをどうのこうのするAPIはChrome Extensionとして作らないと出来ないみたいですね。

user scriptから改、chrome Extensionにするしかないですね。なんで、上にあるコードは使わないで新しく作りますか。

,,,,,

作り終わった後に気づいたのですが、User Scriptsでも十分対応できていました。(前に書いたコードで)

あぁー。
まぁ、Chrome Exntesionの作り方がわかりましたよーっていうことでよしとしますか。

https://chrome.google.com/webstore/detail/nikkeibp-auto-opener/bmioapgeabpnhcljmoojefabdnmibimn/related?hl=ja

誰かが使うかもしれん。。。テストでプログラムをアップロードしてみたいし、ということで、Chrome Storeにアップしますかね。
Googleに開発者登録USD5$を収めた。

作業時間としてmanifest.jsonを描くのが一番時間がかかりましたね。 あれがなかったらもっと早く終わったのに。。。。

作りながらオプーナのプレイ動画見てたけど、あれ結構普通のゲームじゃね?

日曜日, 7月 08, 2012

区切って区切って

はまっているときに色々他の事をしながら作業をしたりすることがあるので、区切ることで自分に納期を作ろうとおもっていたのだけど、単位をどうしましょうかねー。って時にtwitterで流れてきた記事

集中力を発揮して、生産性を高めるために知っておくべきこと! | Act as Professional - hiroki.jp by HIROCASTER
http://hiroki.jp/2012/07/08/4697/

手帳管理方式にまた戻りつつあるので、TODO更新に手がつけられない状態にならないように気をつけましょうということで、エントリー(相変わらず内容が無い内容)

ポートを使用しているプロセスとポート一覧

毎回manたたいて調べる割に使用頻度が少ないからすぐに忘れてしまうのでメモ。

netstatでポートとプロセスを関連付けて表示
netstat -tanp
-t:TCP -a:すべての情報 -p:プロセスID

lsofコマンドでプロセスの詳細を調べる
lsof -i:port

さーせん。