Archive for the ‘技術’ category

gitでリポジトリからのチェックアウト時に文字コードを変換する

9月 30th, 2009

ようやく実現できたのでやり方をメモ。
設定ファイルで拡張子に基づくフィルタリングをすればOK。

ProGitの情報によるとリポジトリから取ってくるときをsmudge、リポジトリに突っ込むときをcleanと呼ぶらしい。

以下はリポジトリ内のソースファイルがUTF-8 BOM有、改行コードがLFCRの場合の設定例。文字コード変換はnkfを使っています。
WindowsのVisualStudioに合わせると上記設定が望ましいが、Linux環境でgccを使うにはBOM無しにして、改行コードをLFにする必要がある。
まず.gitconfigファイルに以下を追加する

[filter "fixencoding"]
clean = “/usr/local/bin/nkf -w8 -Lw”
smudge = “/usr/local/bin/nkf -w -Lu”

これでsmudgeでUTF-8 BOM無し/LF、cleanでUTF-8 BOM有り/LFCRとなる。

これだけではダメで、フィルタ処理をかけるファイルを指定する必要が有る。
gitの管理フォルダである.gitがあるトップディレクトリに.gitattributesファイルを以下の内容で作成し、git checkout -fする必要が有る。

*.c filter=fixencoding
*.cpp filter=fixencoding
*.cxx filter=fixencoding
*.h filter=fixencoding
*.hxx filter=fixencoding
*.txt filter=fixencoding
Makefile filter=fixencoding

/usr/share/git-core/templates/info/attributes
を作って上記内容を書いておくとclone時に.git/info以下にコピーされてgit cloneしただけで文字コード変換が動くようになる。

動かすにあたって問題となったのはgitでチェックアウトしただけで編集されたことになってしまうファイルが多々発生したことです。原因はいろいろあったのですが
リポジトリインデックス内のファイル文字コードがバラバラだった(BOM無しファイルが紛れ込んでいた とか)
ファイル内の文字に半角カナがあるとダメらしい。
ファイル内の文字に機種依存文字(実際にあったのは丸数字)があるとダメらしい。

git statusなどで編集が有ったかどうかはインデックス内の状態と比較するからcleanして元々の状態と変わってしまうと当然チェックアウトしただけで編集されたと勘違いされてしまうファイルができてしまう ということですね。
WEB DB Press Vol.50で解説されていたgitの内部データ構造を知ってようやく理解できました。

Subverisonだと文字コードをうまく変換する機構も無いのでgitをかましてやるのが便利ですね。

ChangeLogメモをEvernoteに一本化した

9月 30th, 2009

タイトルの通り。

大学時代から使っていたChangeLogメモとchalowですが、Evernoteを使い始めたところ画像の扱いとかiPhoneとの連携とか便利すぎて気がついたらChangeLogメモがほったらかしになっていました。2箇所にメモが散らばっているのも具合が悪いので思い切ってEvernoteにデータを移行しました。ChangeLogメモ自体は残しておいても邪魔にならないし、Evernoteに何かあってもエクスポートはできるみたいなので多分大丈夫でしょう。

作業手順ですが

  1. chalowでChangeLogファイルを変換
  2. 不要なHTMLファイルを削除(日別のページとインデックスページだったかな?)
  3. EvernoteでChangeLogインポート用のノートブックを作成
  4. HTMLファイルをインポート

とやりました。

いくつか手こずったとこもありました。

  1. chalowの設定が面倒だったのでRuby実装のrchalowにした
  2. MacのEvernoteだとインポートがうまく動かなかったのでWindowsでやった
  3. 拡張子がhtmlだとインポートできなかったのでhtmにした
  4. ChangeLogメモも変換後のHTMLファイルもUTF-8で統一されていたのにインポートしたら文字化けした。しょうがないのでShiftJISに変換してインポートした

これでメモ環境が快適になりました。

会社でgitを使い始めたのでWEB+DB Press Vol.50を読み直した

9月 22nd, 2009

今年のはじめからちょくちょくチャレンジしては壁に跳ね返されていたGitですが、先週あたりからようやくまともに使えるようになってきました。前提条件はこんな感じ

  • 共有リポジトリはSubversion、今後もずっとSubversion
  • プログラムはWindowsとLinuxで動くように作ってる、ソースは1種類
  • エンコーディングはBOM有のUTF-8、改行コードはLFCR
  • LinuxのgccはBOM有だと受け付けてくれないのでビルド前に文字コード変換を挟んでいる
  • Subversionのリポジトリは複数プロジェクト共同で、古いリビジョンだと存在しないパスがあったり、パスが途中で変わったりしている

何回かチャレンジしたときはmsysgitを使ってgit svnでのチェックアウトを試みたのですが、昔のリポジトリに同じパスのデータが無いのがまずいのかエラー終了してしまうところであきらめていました。
今回は出たばかりのTortoiseGitのバージョン1系を使い、TortoiseGitで(実際にはmsysgitなんだけど)svnリポジトリからのチェックアウトを試みて、昔のリビジョンだとエラー終了するのを指定リビジョン以降のチェックアウトに限定することで回避しました。

修正や機能追加の際にトピックブランチを作って平行開発、終わったらmasterにマージしてsvn dcommitして共有リポジトリにアップ。こんな流れで周囲の和を乱すことなく開発を進められる所まで来ました。途中gitの意味不明なエラーに遭遇したものの、TortoseGitのバージョンがこなれていくに従って徐々に減っていくでしょう。

gitの使い方はWebとWEB+DB Press Vol.50のgit特集と、オーム社の入門gitを使って勉強しました。Webの情報は古いのが引っかかったり、そもそもズバリな悩みの解決法がまだ見つかりにくく、オーム社の入門gitはリファレンスとしては有用そうに見えるのですが、git stashなど基本的なコマンドの解説が無く、WEB+DB PRESSのが一番使えることに間違いなさそうです。

gitのコミッターが書いた秀和システムの入門gitが先週土曜日に発売されましたが、Amazonからまだ発送されてきません。内容はWEB DB Pressをさらに深くしたものらしいので、日本ではこれが決定版になりそうな気がしています。

WEB+DB PRESS Vol.50 (大型本)
477413838X 入門git (単行本(ソフトカバー))
427406767X 入門Git (単行本)
4798023809

Hudsonのよくわからないエラー

9月 20th, 2009

SCMのポーリングが実行
Updating http://example.com/svn-repos/
FATAL: Unable to call getCredential. Invalid object ID 109
java.lang.IllegalStateException: Unable to call getCredential. Invalid object ID 109
at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:268)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:255)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:215)
at hudson.remoting.UserRequest.perform(UserRequest.java:104)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:236)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)

Windowsのスレーブで1.317から出るようになったみたい。
Subversionのリポジトリをポーリングしてビルドを動かすようにしているけど、出るときとでないときがあります。1回目はエラーがでて、2回目は出ない感じ。何なんでしょう?

・・・

下のスレッドで議論されている内容が原因みたい。斜め読みだけどSingletonの使い方がおかしいのかな?
Nabble – Hudson dev – Error in SubversionSCM “Unable to call getCredential”
このnabble.comってのはどんなサイトなんだろう? 修正パッチも有ったみたいだけどHudsonのMLには同様の情報は流れてないのかな。

・・・

よくHudsonのバグリストを探してみたら見つかった、これな気がする。
hudson: 課題 4176
現在もステータスはOpenになってるし、問題として認識されているんだろう。
個人的には毎日何回もエラーメールが飛んできて困るので2票ほど投票してみた。結構根が深い問題なのだろうか、気長に待とう。

このブログが長い間真っ白だった

6月 18th, 2009

いつからかこのブログはブラウザで見ようとすると真っ白な画面が表示されるようになっていたようです。
なぜか管理画面に一度アクセスすると普通に見れるようになるため全くこの問題に気づきませんでした。

いつからこの問題が起きていて、原因もはっきり分からないのですが、一応解決を見たので参考にしたサイトを載せておきます。

まず、真っ白に表示される原因はXREAのPHP動作モードにあるらしく、 WordPressサイトが真っ白 | fusigineko blog / KANADA Co.,Ltd.を参考に、WordPressのトップディレクトリにある.htaccessを修正しました。

これでページは表示できるようになったのですが、WordPress 2.8が悪いのか管理画面にCSSが適用されなくなりました。 WordPress › フォーラム » WP2.8Jの管理画面のCSSがSafariでは適用されないにある

define( ‘CONCATENATE_SCRIPTS’, false );

をwp-config.phpの上の方に定義することで対処できました。後者の問題はそのうちWordPressがアップグレードされてなおることでしょう。

こういうトラブルあると独自ドメインのブログなんてやめたくなりますね。

WordPressのメンテナンス

5月 9th, 2009

このブログを動かしているWordPressの設定が面倒でところどころ目をつむりながら動かしてきたんですが、ようやく重い腰を上げて色々な問題を直しました。

まず最初が自動アップグレードができなかったことです。管理画面にログインする度に本体とプラグインのアップグレードを促されるとうんざりしてしまいます。WordPressは2.7以降自動アップグレードシステムがあるのでこれをXREAのサーバで動かすようにしました。
Google先生に聞くとすぐ見つかるのですが、アップグレードをおこなうPHPスクリプトをSAFEモードで動かす必要があるそうです。
作業としてはwp-adminディレクトリに.htaccessファイルを作成し

<Files upload.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
<Files update.php>
AddHandler application/x-httpd-phpcgi .php
</Files>

を追加します。

次にWordPress用のFTPアカウントをXREAの管理画面で作成します。これはFTPのログインディレクトリをWordPressのログインディレクトリにするためです。WordPressだけを動かしているなら必要ない作業ですが、大抵の場合は必要なはずです。

最後に画像のアップロードに失敗していたのでwp-content/uploadsディレクトリの書き込み権限を777に変更しました。これもSAFEモードが関係しているのですが、Googleで調べてみたところ事前にアップロードフォルダを手動で作っている人が多かったのですが、毎回そんなことをするのも面倒だったので、アクセス権を緩くして対処した次第です。

これでようやくまともに使えるようになりました! これで更新のペースが上がるといいんですが。

Hudsonを稼働させてるサーバにVMWare Server2をインストールしたら片方起動しなくなった

4月 2nd, 2009

タイトルの問題に今日の仕事中悩んでました。
きっかけはCentOS 5.3のアップデートで、サーバを再起動するついでに前からやりたかったVMWare Serverのアップデートもやってしまおうかと思ったことでした。

VMWare Server2からはWebインターフェースで仮想マシンにアクセスする仕様になってますが、裏ではTomcatが同梱され動いているようです。んでHudsonを動かすTomcatとVMWare Server2が使うTomcatが何らかの原因で共存できなくて問題が起こったようです。

本当は○○すればこの問題は解決します とまで調べて書きたいのですが、他の業務に押されて調べきれず、結局VMWare Serverのバージョンを元に戻してしまいました。

Javaが得意な方で、どの辺の設定をいじれば良いものか検討がつく方はいましたらコメントで教えてください m(_ _ )m

Hudson 1.273を試してみた

1月 14th, 2009

Hudsonコミッタの id:ssogabeさんに言及されてたのでHudson 1.273を試してみました。

前に書いた不満点に

  • マスタにラベルが割り振れない
  • Windows 64bitでサービス登録できない

の2点がありましたが、2点とも今回のリリースでなおっているとchangelogに記載がありました。

マスタにラベルを振る機能は自分が望んでいた通りのものでした。WindowsとLinuxを混在させた環境を作るためにマスタで直接実行するのをさけ、あえてslaveとして登録させていましたが、この設定は早速削除しました。

もう一点の64bit Windowsでのサービス登録はやっぱりうまく行きませんでした。エラーのスタックトレースはこんな感じでした。

java.io.FileNotFoundException:

http://example.jp:8080/jnlpJars/remoting.jar

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown
Source)

HudsonのURLが

http://hudson.example.jp:8080

ではなく

http://example.jp:8080/hudson/

なので、どうも要求しているリソースのURLがあってない気がします。これも登録済みのバグなのかな?

2009年1月21日追記
Hudson 1.277でなおったようです。無事に64bit Windowsでもサービス登録できました。
VistaだとUACが悪さをして登録できないようですが、一時的にUACを切ればいけます。

Redmineは右クリックができる

1月 6th, 2009

Redmineのチケット画面で右クリック

今日0.8にアップグレードして気がついたのですが、チケット一覧を表示するページで右クリックが使えるんですね。所定のチケットの優先順位や状態などを一括して変更できて非常に便利です。

JavaScriptで実現しているんだと思うのですが、最近のWebアプリはすごいですね。

x86_64だと浮動小数点演算の精度が低下する

12月 9th, 2008

64bit OSで動かすと32bitの時と処理結果が異なるプログラムで悩んだメモです。

調べていくとfloatを使った浮動小数点演算で誤差が出ることがわかりました。分からなかったのが、IEEE754でfloatの演算精度は32bitと規定されているのになぜ同じソースから作ったプログラムで結果が違うのかということです。

x86では浮動小数点演算にx87を使うのですが、この演算精度は32bitや64bitではなく、80bitで行われるそうです。この辺の話は 浮動小数点演算ではまった話 – bkブログとかBK通信に詳しく載ってます。要約すると32bitの精度で誤差が生じる計算が含まれていても”たまたま”うまく計算できることがある ということです。

たまたま精度よく計算できるプログラムをx86_64に持っていってコンパイルしようとします。このとき、x86_64では必ずSSEが使えるため、コンパイラはデフォルトでSSEを使うようにコンパイルします。SSEで浮動小数点演算を行うと演算精度がx87の80bitよりも悪くなるため、本来生じるはずだった演算誤差が表面化することになります。

高林さんがBK通信で書いているMac OSで演算結果が違うというのも、Mac OSが64bitOSであることが関係している気がします。

バイナリーハックス買おうかな。

Binary Hacks ―ハッカー秘伝のテクニック100選
高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸
オライリー・ジャパン
売り上げランキング: 23306
おすすめ度の平均: 5.0

5 ハードコア?なソフトウエア
5 大工さんにおける電動工具の紹介本
5 当然教科書ではない。でも、とても参考になります。
5 バイナリアンの基本

Pages: Prev 1 2 3 4 5 6 7 8 9 10 ...40 41 42 Next