さとやn Blog

試合はRuby,勝負はC#!

プログラミング

capistrano で svn+ssh する場合

Subversinoへのアクセスにsvnやhttpではなくsvn+sshプロトコルを使用している場合、どうもCapistranoがしっかりやってくれない。
deploy.rbに配置先からSVNサーバーへのsshのパスワードを指定する方法がないから、のようなのです。

鍵認証にして、ssh-agent立てるかパスワードなしの鍵ファイルにするのが簡単なのでしょう、きっと。

eval `ssh-agent` 

でエージェントを起動して

ssh-add 鍵ファイル

で 鍵ファイルを登録してやればOKのよう。
agent終わらす場合は

eval `ssh-agent -k`。

また、

ssh-agent bash(とかzshとか)

ってやると、バックグラウンドで起動し続けて、シェルを終了すると自分も終了してくれるようです。

でも、どっちも面倒なので、パスワードなしの鍵ファイルにしてみる。

すでに鍵ファイル使ってるので、

ssh-keygen -p

でパスワード変更して、無事

cap depoy

正常終了!
 
あんまり sshでsvnってやらないのかな、、、。
俺様認証局立てて、SSLでHTTPよりは全然簡単だと思う。

 

mysql: error while loading shared libraries: libmysqlclient.so.16:

MacBookAirに入れたLinux(仮想)でMySqlをコンパイルしてサーバーが起動したのはいいけど、クライアントを起動すると、
mysql: error while loading shared libraries: libmysqlclient.so.16:
と怒られた。

LD_LIBRARY_PATH 
/usr/local/mysql/lib/mysql
を追加。

ちなみに、Railsで

uninitialized constant MysqlCompat::MysqlRes

こんなメッセージが出る場合も上記の設定が足りない場合が多いようです(私体験)。

よくよく考えたらMySqlっていつもyumでインストールしてばかりで、自分でコンパイルして入れたのは初めてのような気がする。

ついでに、

gem install mysql

やろうとしたら、
/usr/bin/ld: cannot find -lmysqlclient

こう指定してやればよいらしい。

gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 

SQL 行同士で値を交換する

table members

id  name
-----------
1  satoyan
2  hoge

1と2でnameを入れ替えるような処理が必要になったのですが、一発のSQLで済ますように下記のようなSQLを書きました。
 
UPDATE members SET name = CASE
       WHEN id=1 THEN (SELECT name FROM members WHERE id=2)
       WHEN id=2 THEN (SELECT name FROM members WHERE id=1)
       ELSE name) END
WHERE id in (1,2);

PostgreSQLではOKでした。
MySqlでは
You can't specify target table 'members' for update in FROM clause 
でエラー。 
Sqliteはまあ、無視します。
多分、SqlServer,Oracleでは正常にいくのかな?
MySQLの方はselectを使わずに、直接値を指定すれば正常に動作しました。
ただしnameにユニーク制約がかかっているとMySQLではNGです。
以前はPostgreもNGだったようですが、今のバージョン(8.4?)はいけるようです。

このへんの違いをもうちょっと調べたい、、。

TextMate2ならぬ e-texteditor2.0が先に完成

朝メールを見たらこんなメールが着てました。

e has had a major makeover for version 2.0 and there are not only lots
of new features, it builds an entirely new base for future expansion.
You can download the latest release at: http://e-texteditor.com

本家のTextmateがもたもたしている間にこっちは着実にバージョンアップしています。

アップグレードなら1700〜1800円で購入可能、ということで早速先ほどオンラインでお支払い完了。すぐにキーコードも着て登録も完了。

ファイルナビゲーションのスピードが格段にアップしてました。

メールに書いてありましたが、viのようにコマンドモードというものが搭載されて、Escキーを押すとコマンドモードになり、ちょっと触った感じだとviと同様のキー操作が実現されているっぽい。これならvi好きな人でRailsやっている人にも推められるかも。

o Command Mode
 e2 introduces a powerful new command mode, that allows you to do
 quick navigation and transformation of the text with just a few key
 presses. It is not just a copy of vi's command-mode, even though
 that was the main inspiration. 
 
 viにインスパイアされてはいますが単にそれだけじゃないよってことのようです。

 でもどんなコマンドが使えるのか、まだマニュアルが公開されていない。見つけられてないだけ?
 
キャプチャ
 

Javaには.NETのTimeSpanにあたるものがない、、

2つの日付を比較して日数を求めようとした場合、
.NETでは日付同士の減算はTimeSpan型で取得できる。
    var d1 = new DateTime(2010, 1, 1);
    var d2 = new DateTime(2010, 1, 11);
    var span = d2 - d1;
    Console.WriteLine(span.Days);  //結果は10

RubyではDate型で同様にRational#to_iで日数が取得できる。

d1 = Date.new(2010, 1, 1);
d2 = Date.new(2010, 1, 11);
d3 = d2 - d1;
p d3.to_i  # 30

Javaでは、、、私には同様のものを見つけることは出来ませんでした。
まさか、数値にして減算して、結果を 60 * 60 * 24 で割る、しかないなんてことないよね、とか思ってぐぐってみたらどうもそれっぽい、、、。
なんかJava7ではそんな感じモノもサポートされるみたいなことどこかに書いてありましたが。

RubyやC#のような現代的な言語に慣れてしまうと、こんなのも用意されてないのか? とがっくりしてまいました。最初からないってわかってればよかったのですが、あると思って探してしまったので、余計にがっくりです。
Javaが近代的な言語と呼ばれる所以がちょっとわかりました。

そうかと思えば、DateクラスとCalendarクラスなんて日付を扱うクラスが2つもあるし。
あと、知ってはいましたが、いざ書いてみると、例外処理もほんとメンドー、、、。なんだこれ、、、。
COBOLの次に嫌いな言語になりそう、、、。
レベルの低い愚痴でした。。。
 

テストを書かないPHPプロジェクトは多いのでしょうか

先日、PHPでの開発をしている人、しかもリーダーとお話をする機会があったのですが、何の気なしに「テストフレームワークって何か使ってますか?」と聞いたら、一人は「う〜ん、使いたければ使えば、って感じですね」。もう一人は、「使ってないですね。 」とのこと。

「えっ? じゃあどうやってテストしてるんですか?」 と聞いたところ、「言葉は悪いけど、ユーザーがテスターだと思っている」、「画面遷移が多いので開発者が都度実行して確認してる」と、なんか感覚がズレ過ぎているとうか、見当違いというか、妙な答えが返ってきました。

一応二人は全く別のプロジェクトで互いに関係はありません。かつ開発手法は決してウォーターフォールでもありません。 
しかも1つは誰でも知ってる某比較サイト関連だったり、、、。

10年くらい前からxUnit(DUnit,NUnit)とか最近はRSpecばっかりだけど、テスト書くのは当たり前にやってきたのですが、世間はそんなものなのでしょうか。たまたまだったと思いたい。
 

Subversion リポジトリの場所を変更した場合 svn switch OLD NEW

リポジトリの場所を変更したので、既存の作業コピーを
svn switch
で変更しようとしたら、 

svn: 'svn://oldhost/xxx'
is not the same repository as
'svn://newhost/xxx'

と怒られてしまいました。 

svn help switch  

でヘルプを見ると、

usage: 1. switch URL[@PEGREV] [PATH]
       2. switch --relocate FROM TO [PATH...]
 
 1. 長いので省略
 2. Rewrite working copy URL metadata to reflect a syntactic change only.
     This is used when repository's root URL changes (such as a scheme
     or hostname change) but your working copy still reflects the same
     directory within the same repository.
リポジトリを場所を変えた場合は、オプション --relocate を使えばいいそう。
 
で、
svn swith --relocate svn://oldhost/xxx svn://newhost/xxx

とやったところ、作業ディレクトリのメタデータをすべて書き換えて新しい場所を参照するよにしてくれたようです。
この場合通信は全く行われず、単なる文字列置換をするだけ、だそうです。

危うく手動でそんなスクリプトを作るしかないのかな、と思ってしまった。。。
追記:
通信が全く行われない、というのは嘘で、最初に切り替え先のホストがちゃんと使えるかどうかの確認はしているようです。さっきオフラインで新しいMacBookAirでやろうとしたら怒られました。

TextMateでAndroid開発

Android開発はEclipseがやるのが最も一般的のようですが、TextMateのBundleでそんなのないかなー、と思い以前インストールしたTextMateのパッケージ管理ツールで探したところ、ありました、、、。
59)

で、早速インストールして試してみました。
こんな感じ。

バンドルメニューからSDK&AVDマネージャ起動して、SDKのパスとかエミュレータの作成とか。
19)

57)

 とりあえず HelloAndroid を作ってみる。
43)

見慣れたTextMateの画面。
21)

 COMMAND + E : エミュレータ起動
複数台のエミュレータがある場合はそれらがリストに表示されます。※画像は1個しかない場合
41)
 
COMMAND + B でビルド。
無事Successの文字が、、。
40)
 
COMMND + R でエミュレータにインストール 。
37)

とりあえず、出来ました。
52)

かなり嬉しいのですが、でも、デバッグのこととか考えたら、やっぱりEclipseでやる方がいいんだろうなぁ。。。
悩ましい。

なのでとりあえずEclipseの配色もTextMate風に変えてしまいました。
42)

 TextMate Android Bundle
 http://www.onebitwonder.com/projects/android

 TextMate Color Theme for Eclipse
http://blog.codefront.net/2006/09/28/vibrant-ink-textmate-theme-for-eclipse/ 

Eclipse便利なショートカットキー メモ

最近Androidの開発を始めたので、仕方なくEclipseを使うことにしましたが、如何せんショートカットキーがわからなすぎる、、、。

元ネタは
http://tkramar.blogspot.com/2007/10/effective-eclipse-ii-shortcut-keys_16.html
です。 

これはいいと思ったものを、多分自分でも忘れてしまうと思われるので、メモっときます。

※マックの場合は CTRL=COMMAND です。


CTRL+D
現在の行もしくは選択された行を削除。

ALT + Up/Down Arrow
現在の行もしくは選択された行を上下に移動する。

ALT + Left/Right Arrow
直前に編集していた箇所に戻ることができる(らしい)。
※確認できませんでした。

CTRL+1
VisualStudioで言うと、実装すべきインターフェースのメソッドの雛形を生成してくるやつ。もちろんそれ以外でもQuickFixできるものはやってくれる。これはかなり便利ですね。

CTRL+SHIFT+T 
TextMateではお馴染みのファイル検索。
これもかなり便利です。いちいちパッケージエクスプローラで探さなくてもいいので。
 
CTRL+E
開いているウィンドウ一覧を表示。

CTRL + I
インデントを自動整形してくれる。
 
CTRL + J
インクリメンタルサーチ。最初使い方がわからなかった。。。
 
CTRL + SHIFT + L
ショートカットキー一覧を表示。 

岡崎図書館がTwitterで盛り上がっているようですね

http://twitter.com/#search?q=%23librahack

当の三菱なんとかのこれの担当者は、今どんな気持ちなんでしょう?
心中お察しします、て言っても自業自得ではありますが、、、。

なんか話題は、「警察がもっとITに詳しくなるべきだ」、っていうのと、「そもそも警察はそんなの専門外なんだから、 三菱何とか(技術者全般)がしっかりすべき」、みたいのに分かれているようです。

私は、警視庁のサイバー何とか班、て言うのがあるのかどうかは知りませんが、そういう部門だったら、今回のようなのは、「ああ、これ別に攻撃じゃないでしょ。IP遮断するとか、警告してみて。」って判断はできるでしょうけど、すべての警察署レベルでそんな判断ができるとは思いませんし、できなくても全然不思議じゃないと思います。

最初は、なんで逮捕する前に警告しなかったのかなぁ、とか思ったのですが、よくよく考えたらそんなのわからないんでしょうね。
我々開発者だったら1リクエスト/1sec は攻撃にしたら変だな、とは思うし、図書館っていう性格を考えれば、「あ、なんかクロールして自分で何か作ろうとしてんのかな」と考えることが出来ますが、そうでない一般のIT素人であれば、1リクエスト/1secは尋常じゃない、と判断してもおかしくないと思われます。
 
で、相変わらず、岡崎図書館のシステムに変更はないようです。
なんかトップページが変わったような気がするのは気のせいでしょうか? 
http://www.library.okazaki.aichi.jp/tosho/index.asp

もし、三菱何とかが被害届を出したのは、自分のところのシステムのボロを認めたら、後々色々と厄介だから、という理由だったとすれば、逆に随分と高くついてしまったのではないでしょうか。
逆に、本当にこれを攻撃だと判断したのであれば、それはそれで、哀れ過ぎます。
ま、このシステムの売りはICタグ云々の方なんでしょうけど、あまりにも基本的に部分がなってないと思われます。
最初から表にWeb検索なんて出さなきゃよかったのに、、、。

ちなみにその三菱何とか製の岡崎図書館のWeb検索システムでは、
1q84 で検索 → 該当書物なし
1Q84 → 例のベストセラー をちゃんと見つけてくれる。
上春 → 該当書物なし
%上春% → 思考停止

検索そのものが、しょぼすぎる、、、、。

参考までに、松戸図書館(しすてむは三菱何とかではない)では、
いずれもOKでした。
※別に松戸の図書館がえらい、と言ってるわけではありません。

でも拡張子が .asp って、、、いつ作られたものなんだ、、、。


プロフィール

さとやn

C#が好きだけど仕事はRubyばかりな開発者。
最近はDockerとか関数型言語とかAngularJSにハマっている。
武蔵小杉とか田町とか柏とかに出没。

QRコード
QRコード
  • ライブドアブログ