
CentOS上でSeleniumRCとPHPUnitを使ってfirefoxを操作する
- 2014/09/24
- aikawa
まずはSelenium-RCをダウンロード。
http://docs.seleniumhq.org/download/
Selenium Server (formerly the Selenium RC Server)の、selenium-server-standalone-2.x.x.jarを。
CentOS上の適当な場所に設置します。






Mac上に開発用Roundcubeをセットアップ
プラグインを作りたいので開発環境を手元に作ることにしました。
インストールについては弊社kosugiが書いた
を参考に作業しました。あまり問題は出なかったのですが、Roundcubeのバージョンがあがり設定ファイルの名称や扱いが変わったりしていたのでメモを残したいと思います。
あとはphpのビルトインサーバー(php -S)で手軽にやりたいな〜ってのと、Gmailのセキュリティ強化の影響、個人的趣味でデータベースがPostgreSQLだというのが異なる点です。
・PHPは以前の記事でPostgreSQL用のモジュールを入れた5.5.14。
- phpenv で入れた PHP に pdo_pgsql をインストール
- phpenv で入れた PHP に pdo_pgsql をインストール
・PostgreSQLのバージョンは9.3.5.0 (Postgres.app)
・メールサーバーはGmail利用する。
・Roundcube 1.0.2 (Complete)
■ データベース(PostgreSQL)準備
ダウンロードして展開したRoundcubeのディレクトリにあるINSTALLファイルを参照しながら準備します。
・pgAdmin3などでroundcubeユーザーを作ります。開発環境なので権限はザックリSUPERUSERにしときました。
・roundcubemailデータベースを作ります。
CREATE DATABASE roundcubemail
WITH OWNER = roundcube
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'ja_JP.UTF-8'
LC_CTYPE = 'ja_JP.UTF-8'
CONNECTION LIMIT = -1;
・準備用のSQLを実行。
#展開したRoundcubeのディレクトリで
$ psql -U roundcube -f SQL/postgres.initial.sql roundcubemail
■ ビルトインサーバー起動
#展開したRoundcubeのディレクトリで
$ php -S localhost:8000
PHP 5.5.14 Development Server started at Mon Sep 22 17:13:54 2014
Listening on http://localhost:8000
Document root is /Users/murave/roundcubemail-1.0.2
Press Ctrl-C to quit.
■ installerにアクセスして初期設定
今回だと http://localhost:8000/installer/ にアクセス。画面にしたがって設定していけばOKです。英語ですけど。
STEP2のCreate configで作成される設定ファイルの名称と扱いが以前とは変わっているようです。
config/config.inc.phpが直接作成されます。今回は編集する必要も特にありませんでした。一部(‘des_key)を*で伏せて引用します。
■ Gmailについて
kosugiが書いている通りIMAP経由でのメール受信を有効にしておくのは大前提ですが、RoundcubeからGmailにIMAPでアクセスしようとすると「安全性の低いアプリ」として拒否されるかもしれません(拒否されなければ気にする必要はありません)。
この場合「Google アカウント: ログイン試行をブロックしました」というメールが来ていると思います。
このメールに書いてあるのですが、以下のページから設定を変更することができます。あまり良くないのですが今回は「安全性に低いアプリのアクセス」を有効にしてIMAP接続を確認しました。
https://www.google.com/settings/security/lesssecureapps
■ ログインして動作確認
http://localhost:8000/
にアクセス、ログインしてメールの送受信を確認して完了です。





Groovyやってみる!
- 2014/09/18
- uchida
1.インストール
brewでいれるよりgvmが流行と書いてあったので以下の手順でインストール
curl -s get.gvmtool.net | bash
これを設定しなさいって書いてあったので設定する
export GROOVY_HOME=/usr/local/opt/groovy/libexec
インストール実行
gvm install groovy
2.開発環境
EclipseにGroovy-Eclipseプラグインを入れます。
http://dist.springsource.org/milestone/GRECLIPSE/e4.4/
3.ファイルを読み込んでコンソールに出力するだけのコード
package com.lancard.yuichi
class FileRead {
static main(args) {
new File(args[0]).eachLine {
println it
}
}
}
これだけで、ファイルを開いてtry catchで囲んでfinallyでcloseされてっていう。すごい・・。
「it」は各行の内容の暗黙の変数らしい。
4.クロージャも使える
package com.lancard.yuichi
import groovy.lang.Closure;
class Add {
static main(args) {
Closure add = add()
add.call()//1
add.call()//2
add.call()//3
add.call()//4
}
static Closure add(){
def x = 0
Closure closure = {
x++
println x
}
closure;
}
}
5.回数指定でクロージャ実行
package com.lancard.yuichi
class Times {
static main(args) {
3.times {
println it
}
//0 1 2
}
}
色々簡単で面白い!






TrelloにAPIからカードを追加する
- 2014/09/05
- aikawa

phpenv で入れた PHP に pdo_pgsql をインストール
- 2014/08/23
- murave
実際は前の記事の前にやったんですけど、動かしたいソフトが使っていたのはpdo_pgsqlじゃなかったのでありました。
ということで、環境は前の記事と同じでPostgres.appを使用しててPostgreSQLのバージョンは9.3.5.0。対象のPHPのバージョンは5.5.14です。anyenvもからんでいるのでphpenv単独の場合とは少しディレクトリ構成が違う点にご注意ください。
以下の記事を参考に作業しました。
まずはpeclのサイトからpdo_pgsqlを取ってきて解凍。
$ cd tmp
$ wget http://pecl.php.net/get/PDO_PGSQL-1.0.2.tgz
$ tar zxvf PDO_PGSQL-1.0.2.tgz
$ cd PDO_PGSQL-1.0.2
ぺちぱいず(読み方不明)だ!
$ phpize
こんふぃぎゅあしてめいくしましょう。
$ ./configure --with-pdo-pgsql=/Applications/Postgres.app/Contents/Versions/9.3/bin
$ make
インストール内容を確認してから
$ make test
インストール。
$ make install
有効化するためにpdo_pgsqのためのiniファイルを作成。
$ vim /Users/murave/.anyenv/envs/phpenv/versions/5.5.14/etc/conf.d/pdo_pgsql.ini
内容。
extension=pdo_pgsql.so
php.iniに直接追加してもいいけどphp.iniがリセットされて泣いたりするかもしれないから分けておくといいと思う(経験者)。
確認。
$ php -i | grep pdo_pgsql






phpenv + php-build で php_pgsql を有効化したPHPをインストール
- 2014/08/22
- murave
開発環境のMacでPHPからPostgreSQLにアクセスできなくてアレレ〜となったので入れなおしました。その際のメモをまとめておきます。
Postgres.appを使用しており、PostgreSQLのバージョンは9.3.5.0です。
インストールしたPHPのバージョンは5.5.14。
anyenvもからんでいるのでphpenv単独の場合とは少しディレクトリ構成が違う点にご注意ください。
php_pgsqlを有効にするためにconfigure_optionを追加します。
$ vim /Users/murave/.anyenv/envs/phpenv/share/php-build/definitions/5.5.14
編集します。
configure_option "--with-pgsql" "/Applications/Postgres.app/Contents/Versions/9.3/bin"
install_package "http://php.net/distributions/php-5.5.14.tar.bz2"
install_pyrus
install_xdebug "2.2.5"
enable_builtin_opcache
configure_option “–with-pgsql” の行を追加しました。ここはPostgreSQLの導入状況にあわせる必要があります。
インストールします。
$ phpenv install 5.5.14
インストールしたPHPに切り替えて確認。
$ phpenv global 5.5.14
$ phpenv rehash
$ php -i | grep pgsql






VMware Fusion が入っている Mac での 仮想ディスク(vmdk)縮小
- 2014/08/08
- murave
- Mac
- VMware Fusion
放置していたら仮想マシンが肥大してディスクを超圧迫していました、夏。
そして、ディスクの残容量0と言われた立秋。
Vagrant で使用している Virtual Box の VM がいつの間にか60GBを超えており放置できなくなりました。
検索したところ Virtual Box のツールで .vmdk なファイルを .vdi に変換して縮小する素敵な記事が見つかりました。
Bureimono stdio.h: Vagrant とストレージ容量
でも考えたら、ボクのマシンには VMware Fusion が入っています。vmdkファイルを直接縮小できるよね、たぶん。前にやった気もするし。
ということで、調べて作業した際のメモです。 VMware Fusion は 5.0.5 です。
ゲストOSでゼロクリアを行います(root権限で作業)。
# dd if=/dev/zero of=zero bs=4k
# sync
# rm zero
vmdkファイルの縮小(defragment -> shrink)
$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d target.vmdk
$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k target.vmdk
60GB位あったvmdkファイルが10GB位になりました。
今回はディスクの残容量が少なくなりすぎていて vmware-vdiskmanager を動かすのに苦労しました。そんな状況になる前に対処するようにしないとですね。






md2reviewで箇条書きの入れ子に対応していただきました
- 2014/07/22
- murave
前の記事「md2reviewでMarkdownからRe:VIEWに変換すると箇条書きの入れ子は無視される」を見た@takahashimさんが即対応してくださいました!
md2review 1.2.0 で修正されています。
Markdownで書いた記事をRe:VIEWで利用するのがとても楽になりました。
以下、余談です。
修正されたソースコードを見てあまりの簡潔さに「マジすか!」と思いました。
前の記事、解析時にMarkdownの箇条書き入れ子の仕様について間違った認識をしていたために混乱していたようです(コードがクソなのは書捨てということで許して)。
@takahashimさんとやりとりしているときに教えていただいたのですが、入れ子のときには4スペースインデントしないとエンジンによっておかしくなることが多いそうです。
私は調査時2スペースでインデントしていたのでおかしなことになっていたというわけ(Mouではちゃんと表示されるので気づかなかった)。エンジンによるようですがインデントは4の倍数かタブにしておくのが良いようです。






md2reviewでMarkdownからRe:VIEWに変換すると箇条書きの入れ子は無視される
- 2014/07/17
- murave
※2014年7月頭の状況です(解決済です次の記事をご参照ください)。
MarkdownとRe:VIEWを知っている方しか見ない記事だと思うので細かい説明は抜きでいきます。
ソフトウェア技術者だと最近はMarkdownで資料を書くことが多いのではないかと思います。
私もそうなのですが、Markdownで書いたお資料を印刷する際に困っていました(客様に渡す報告書等)。
いろいろ試した結果Mou(Mac用のMarkdownエディター)で印刷していたのですが、フォントが中国系になるという不満点がありました。
そこでmd2reviewでMarkdownからRe:VIEWに変換してPDF化するというフローを試したところかなりいい感じに出力できたのですが、私にとっての大問題が判明しました。
そう、 「md2reviewでMarkdownからRe:VIEWに変換すると箇条書きの入れ子は無視される」 のです。
番号付き箇条書き(Decimal型)についてはRe:VIEW側が対応していないのでしょうがないのですが(個人的にあまり使ってないですし)、普通の箇条書き(Disc型)の入れ子は多用しているので大変厳しい。
そこで、改造して Pull Request 出したろう!と着手したのですが、
- md2review調査
- かなりの部分redcarpet依存であると判明。
- redcarpet調査
- 「メイン処理はCで書かれてるのかよ〜」と思いつつ読んだ結果、簡単には対応できそうもないと判断。なぜmd2reviewが箇条書きの入れ子に未対応なのか、納得する。
- 残念対応
- md2reviewで変換したRe:VIEWの箇条書き部分に入れ子の状態から挿入される空行に規則性があるようだったので、これを解析したらどうにかならないか?と思う。
- redcarpetにpostprocessというレンダリングの後処理を行うための仕組みがあったのでそこで処理してみた。
- 作ってみた結果、以下の問題がある残念なものが出来上がった。
- 入れ子2段までしか判断できないため3段以上は正常に動作しない。
- 箇条書きの最後のアイテムについては判断できないためとりあえずワーニングコメント#@warn(CONFIRM NEST!)を出力する(確認しやすくはなった)。
という残念な結果に終わりました。
残念対応ですが無いよりはマシですので公開しておきます。
md2reviewのreview.rbに以下のpostprocessを追加します。
def postprocess(full_document)
# レンダリング結果を解析して順番なし箇条書きのインデントを反映する。
# ただし2段までしか判断できないため3段以上は正常に動作しない。
# また、箇条書きの最後のアイテムについては判断できないため
# ワーニングコメント#@warn(CONFIRM NEST!)を出力する。
# 無効化するときは次の行のreturnを有効化する。
#return full_document
require 'set'
lf_del_set = Set.new
lf_ins_set = Set.new
pre_ul_flg = false
pre_emp_flg = false
ul_level = 1
lines = []
full_document.split(/\n/).each_with_index do |line, i|
if line == "" || line[0, 3] == " * "
if line == ""
if pre_emp_flg && pre_ul_flg
line = "\#@warn(CONFIRM NEST!)\n"
elsif pre_ul_flg
lf_del_set.add(i)
if 1 < ul_level
if lines[i - 1][0, 2] == " *" && lines[i - 2][0, 2] == " *"
lines[i - 1] = " #{'*' * (ul_level - 1)} " +
lines[i - 1][(ul_level + 2), lines[i - 1].length]
ul_level -= 1
lf_ins_set.add(i - 1)
end
end
end
pre_emp_flg = true
else
if pre_ul_flg && pre_emp_flg
ul_level += 1
end
line = " #{'*' * ul_level} " + line[3, line.length]
pre_ul_flg = true
pre_emp_flg = false
end
else
pre_ul_flg = false
ul_level = 1
end
lines.push(line)
end
if pre_ul_flg
lines.push("\#@warn(CONFIRM NEST!)\n")
end
ret_document = ""
lines.each_with_index do |line, i|
if lf_ins_set.include?(i)
ret_document += "\n"
end
if !lf_del_set.include?(i)
ret_document += line + "\n"
end
end
ret_document
end
以上まではほぼMarkdownで記述し改造版md2reviewで変換した後、箇条書き部分の入れ子が3段の箇所と箇条書きの最後をて修正したRe:VIEWファイルから出力したHTMLです(ソースコード掲載の箇所はハイライト表示の関係で書きなおしました)。
同じファイルから作ったPDFが以下のファイルです(単純なレポート用に調整した設定を使用しています)。
report.pdf
EPUBも作ったんですが、セキュリティ制約でアップロードを弾かれちゃいました。残念。
このように様々な出力が可能という利点はあります。
余談ですがEPUB出力するのはとても簡単です。PDF出力はLaTeX環境をつくらなければならないのでやや面倒でした。






Haxe/JSでGoogle maps APIをextern
- 2014/06/26
- aikawa