オープンソースこねこね

Webプログラミングなどについてあれこれ。

Seleniumで自己署名のSSL証明書を使う

Selenium Serverを使ってWebアプリのテストをするとき、サーバのSSLがテスト用の自己署名のものだとSeleniumのテストが途中で止まってしまうので、以下のように-trustAllSSLCertificatesオプションをつけて起動してやるとよいです。

起動コマンド

$ java -jar /path/to/selenium-server-standalone.jar -port 4444 -trustAllSSLCertificates

参考にした情報

http://blog.mogotest.com/2010/04/13/how-to-accept-self-signed-ssl-certificates-in-selenium/

Github Pagesでプロジェクトページを作ってみた

3ヶ月ほど前になるのですけど、PHPマイグレーションツールを作ったのです。

PHPMigrate - PHPでマイグレーションツールを作った

これはPHPファイル一つで動作する簡易マイグレーションツールで、実際にしばらく使っていたのですが、運用しているシステムが複数のDBスキーマ管理したり、同じスキーマだけど自動テスト用と開発用、本番用で接続先が違ったりと複雑化してきて、どうにも使いにくくなってきました。

とういうわけでファイル一つで動作するという手軽さは捨てて、もっと構成管理しやすくしたバージョンに新しく書き直しました。テストコードもつけてpackagistに登録してComposerでのインストールに対応させたりもしました。

LibMigration

で、ドキュメント書くついでにGithub Pagesもいじってみようと思って、ちょっと調べながらプロジェクトページを作ってみました。わりと簡単にそれっぽいページができましたよ。

f:id:kohkimakimoto:20130703011030p:plain

リポジトリ自体は自分でつけたスターいっこしかないけど、ちょっと気分がいいのでブログ書きます。

Github Pages

一応Github Pagesについて、ざっくり説明しておきます。これはGithubのリポジトリやユーザアカウントに関連付けたWebサイトが作れて、ホスティングしてくれるGithubのサービスです。

http://pages.github.com/

最初の登録方法は以下などを参考にすればいいと思います。

https://gist.github.com/weed/3608503

GithubらしいのがページのソースはGitリポジトリにコミットして管理するという点。今回私が作ったリポジトリに関連づけるページではgh-pagesというブランチが作られるので、そこにサイトのソース一式をコミット、pushする。そうして決められたURLにアクセスするとWebページを表示してくれる仕組みになっています。

また、デザインテーマに最初からかっこいいやつがいろいろ用意されています。

Jekyll

さて、このGithub Pagesですがページを編集するためのCMSみたいなものはなく、基本的には自分で生のHTMLをいじくることになります。ただGithub Pagesはサイトを表示する時JekyllというRuby製のHTMLジェネレータを通してリポジトリの内容をWebページにレンダリングしています。

Jekyllは普通のHTMLはそのままHTMLとして出力して、markdownで書いたページがあれば、HTMLにしてくれるます。またlayout機能をもっているので、デザインテンプレート部分だけHTMLで書いてコンテンツ部分をmarkdownで書くようなことができます。

プログラムのように動的にコンテンツを変えることはできませんが、共通部分を抜き出して部品化できるので、効率的にサイトを編集できます。

ページ作成を始める - ローカル仮想環境にJekyllをインストールする

さて、markdownで書いたコンテンツを確認するのにいちいちGithubにpushするのは面倒なので、 ローカルにあるCentOS仮想環境RubyとJekyllを入れて、 手元でも確認できる環境をつくります。RubyはRVMでインストールしました。以下の記事などを参考にどうぞ

http://kohkimakimoto.hatenablog.com/entry/2013/04/09/185204

Jekyllはgemでインストールするだけ。以下のコマンドを実行します。

$ gem install jekyll

ページのブランチをcloneする

ページのソースを管理しているブランチをローカルにcloneします。

$ git clone git@github.com:kohkimakimoto/lib-migration.git
$ cd lib-migration/
$ git checkout gh-pages

Jekyllの確認用のサーバを立ち上げる

Jekyllには組み込みサーバがバンドルされています。ページ編集中にこれを立ち上げておき、ファイルを更新すると随時自動でHTMLを再生成してくれてブラウザで確認できるようになります。

$ jekyll serve --watch

デフォルトでport4000でサーバが起動するので

http://192.168.56.1:4000/

とかブラウザでアクセスすればサイト表示が確認できます。

レイアウトファイルを作って、デザインとコンテンツを分離する

_layoutsディレクトリを作ってその配下にdefault.htmlというファイルを作ります。以下の様な構成でHTMLを書きます。{{ content }}となっているところが、後で別途作るコンテンツ用のページに置き換わることになります。

<html>
  <head><title>{{ page.title }}</title><head>
  <body>
    {{ content }}
  </body>
</html>

コンテンツをmarkdownで書く

index.mdを作成して以下のような感じにコンテンツをmarkdownで書きます。上部にあるlayout,titleの指定で、layoutを選択し、タイトルを差し込んでいます。

---
layout: default
title: LibMigration
---

## A minimum database migration library and framework for MySQL.

LibMigration is a minimum database migration library and framework for MySQL.
...

さらにdocumentation.mdとかcommands.mdとかページごとにmarkdownファイルを作ってコンテンツ増やしていきます。

コミットしてpush

ひと通り、ページを作成したら、コミットしてpushします。

$ git add .
$ git commit -a
$ git push origin gh-pages

キャッシュされているのかジェネレートにタイムラグがあるのか、Github Pages上ではすぐに更新内容が反映されないことがあるので、その場合はしばらく待ちます。

あとソースコードの記述をハイライトさせたかったので、jQueryjQuery Syntax Highlighterを使いました。javascriptcssもそのままコミットすればいいです。コードのハイライトは以下の様な表示に。

f:id:kohkimakimoto:20130703011025p:plain

というわけで、ひと通りの作業はこんな感じです。完成したページは以下からどうぞ。

LibMigration Github Pages

VirtualBoxでvmをクローンした後ネットワークが繋がらなくなったときの対処

Device eth0 does not seem to be present, delaying initialization 

のメッセージがでて接続不可になったときのこと。Macアドレスが変更されているのが原因。

/etc/sysconfig/network-scripts/ifcfg-eth**

のMACアドレスを修正して、

/etc/udev/rules.d/70-persistent-net.rules

の内容を全部消す。

最後にVMをリブートして反映。

RVMをインストールするとchefが"Could not find chef"となってしまう場合の対処方法

chefがOmnibus Installationで/opt/chef/配下に組み込みRubyと一緒にインストールされている環境にて、別途RVMのRubyを入れると、以下のようなエラーが表示されて動作しなくなりました。

# chef-solo -c /var/chef/config/solo.rb -j /var/chef/nodes/devel.localdomain.json

/opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find chef (>= 0) amongst [bundler-1.3.5, bundler-unload-1.0.1, rake-10.1.0, rubygems-bundler-1.2.0, rvm-1.11.3.8] (Gem::LoadError)
        from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems.rb:1231:in `gem'
        from /opt/chef/bin/chef-solo:22:in `<main>'

そんでちょっと調べてみたら、公式サイトにもこの現象について書かれています。

http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac

OmnibusのGemよりRVMのGemを先に探しに行くらしいのでエラーになるらしい。

対処法ですが、sudosudo -sを使って実行すれば、/etc/profile.d/rvm.shをロードしなくなるのでRVMの影響をさけることができ、Omunibusの閉じた環境で実行してくれます。

# sudo chef-solo -c /var/chef/config/solo.rb -j /var/chef/nodes/devel.localdomain.json

現在のログインユーザがrootでもsudoするのがミソです。

デプロイツールAltaxをPackagistに登録したよ。

以前作ったPHP製デプロイツール。

これをPackagistに登録しましたよ。

というわけで、composerを使っているユーザはcomposer.jsonに以下のように記述してinstallコマンドを実行すれば、プロジェクトのvendorディレクトリのbin配下にaltaxコマンドがインストールされます~。

{
    "require": {
        "kohkimakimoto/altax": "dev-master"
    }
}

求人募集をHTTPレスポンスヘッダに埋め込む

http://www.codebreak.com/

のHTMLソースに求人が書いてあって、ちょっとニヤリとしたのです。 ...あ。いいこと思いついたよ! それなら、HTTPレスポンスヘッダに求人情報を埋め込むってのはどうかな?

エンジニアなら新しいサービスやサイトを見つけると、HTTPのヘッダを確認したくなっちゃうよね!

というわけで、PHPで書くとこんなんです。

<?php
header("Recruit-Message: Are you a programmer? Why don't you work with us. Please visit our recruit page -> http://ourcompany/recruit.html");

企業のよりよい求人活動の一つとしてご利用いただければ幸いです。

CentOSにslコマンドをインストールする

ジョークコマンドのslがgithubで公開されているので、早速インストールしてました。

https://github.com/mtoyoda/sl

makeでcurses.hがなくてエラーになるときは

$ sudo yum install ncurses-devel

としてください。あとはmakeするだけです。

$ make
$ ./sl