Posts Tagged ‘Linux’

Windows/Linux両環境で動作するC言語ソースの一元管理をGitで行う

5月 2nd, 2010

gitでリポジトリからのチェックアウト時に文字コードを変換する » tune webの続きです。
【未解決】VisualStudioとgccでコンパイルできるソースのエンコーディング » tune webでも書きましたが、問題はVisualStudioはUTF-8 BOM有のみ、gccはUTF-8 BOM無しのみ扱え、両者で問題なく扱える文字コードが存在しない事でした。gitにあるsmudge/cleanを使うとチェックアウト/ステージ時に任意のフィルタを通すことができ、BOMの除去をここでやれば出来そうなのですが、文字コード変換ソフトのnkfではBOMの有り無し以外も書き変わってしまうことがあるため実用に使えなかったのがこれまででした。

git smudge/cleanはPro Git – Pro Git 7.2 Git のカスタマイズ Git の属性に詳しく解説されています。
git smudge/cleanの設定は前の日記に書きましたが、ここでも引用しておきます。

まず.gitconfigファイルに以下を追加

[filter "fixbom"]
clean = “/usr/bin/bom_util -a”
smudge = “/usr/bin/bom_util -d”

これでsmudgeでUTF-8 BOM無し、cleanでUTF-8 BOM有りになります。

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

*.c filter=fixbom
*.h filter=fixbom

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

上記で指定している、BOMをつけ外しするプログラムは結局自作しました。単にファイル先頭のBOMを検知して追加・削除をするだけです。ハマったこととしてgit smudge/cleanのデータは標準入力から渡され、標準出力へ書いた内容で差し替えられます。外部コマンドとして起動されるのかと思っていましたが異なるようです。
BOMをつけ外しするプログラムを下に貼っておきます。(gistはこちら→gist: 386410 – GitHub)

#!/usr/bin/ruby

require "optparse"

mode = :help

opt = OptionParser.new
opt.on("-a", "Add BOM"){|v| mode = :add}
opt.on("-d", "Delete BOM"){|v| mode = :delete}
opt.parse!(ARGV)

case mode
when :add
 STDOUT.binmode
       lines = readlines
       unless lines[0] =~ /^\M-o\M-;\M-?/ then
               print "\xEF\xBB\xBF"
       end
       print lines

when :delete
 STDOUT.binmode
       lines = readlines
 lines[0].sub!(/^\xEF\xBB\xBF/, '')
 print lines

when :help
       STDERR.puts opt.help
end

VisualStudioでの開発をメインにしているので、リポジトリ内のソースをUTF-8 BOM有、改行コードをLFCRにして運用しています。
これでLinux環境での開発がひとつやりやすくなりました。

入門Git 入門git 実用Git

Linuxで一定時間後にプログラムを起動する

1月 27th, 2010

複数のプログラムを同時に動かしても互いに干渉しないなんて今時当たり前ですが、添付ファイルを一時的に用いるプログラムでデータ取りする作業があって、添付ファイルの書き出しで競合が生じる問題に悩まされました。10000枚ぐらい画像を一度に処理するので8時間ぐらいかかってしまいます。

「今日はもう帰りたいんだけど、あと1時間ぐらいしたらデータ取りが終わるから1時間半後にこのプログラム回しておきたいんだけど」というニッチな悩みをしていたところ、Linuxで一定時間後にプログラムを起動する方法を見つけました。
一定の時間後にプログラムを実行するには

例えば1分後にprocess_dataコマンドを実行するなら

% sleep 60; ./process_data

とやっておけばいいそうです。sleepコマンドを使うとターミナルの応答が返ってこなくなりますが、GNU screenと合わせれば問題なしですね。

さらにatコマンドを使って指定時間にプログラムを起動する技もあるそうです。

% at now + 1 hour
at> ls
at> date
at> ([Ctrl]+[D]キーを押す)
warning: commands will be executed using /bin/sh
job 8 at 2001-02-09 14:38

探せば便利な技があるんですね。

HudsonのWindows/Linux混在テスト環境できたよー♪

11月 6th, 2008

ということで、業務の空き時間をちょこちょこ使うことでついにWindows/Linuxの混在ビルド環境ができました。

環境を書いておくと

ホストOS:CentOS 5.2
ゲストOS(VMWare Server): Windows Vista / Ubuntu 8.10

で、HudsonをホストOSに入れTomcatで運用。
WindowsをJNLPで、Ubuntuをsshでslave.jarを呼び出す形でSlaveに追加し、ホストOSも同時実行するインスタンス数はHudsonの設定で0にし、別途Slaveとして追加しています。つまりMaster1台+ Slave3台です。

前はLinuxのSlave追加に悩んでいましたが、理屈が分かってからはWindowsの方が設定に悩みました。
以下Windowsの設定で悩んだことです。

1. WindowsでVisualStudioを使ってビルドするときはSlaveのサービスを起動するユーザをHudsonを動かすユーザにする必要がある。
そうじゃないとビルド時にオブジェクトが一致しないとか言うエラーメッセージが出てビルドができない。
discypusさんで解決情報を見つけたはずなんだけど検索しても見つけた情報が見つからなくなってる orz

2. JNLPでWindowsをSlaveに追加しHudsonをサービスとして起動するとき、Slaveの名称に半角スペースを含んでいるとサービスが起動しない。

3. 自分の環境だとなぜかWindowsのSlaveが一定時間経つとHudsonとの接続がきれ、サービスが勝手に終了してしまった。原因は分からないがWindowsのサービス設定で自動的に再起動するように設定したら大丈夫そう。

まだまだ改善点はありますが、大分ノウハウもたまってきました。

X40のバッテリーをリフレッシュしてUbuntuに入れ替え

8月 17th, 2008

Macを買ってから死蔵させていたThinkPad X40ですが、このまま眠らせておくには惜しいのでバッテリーのセル交換を行い、OSをUbuntuに差し替えました。

バッテリーのセル交換はGoogleで見つけた バッテリーリフレッシュ・セル交換の専門店 – Brs co.,で行いました。バッテリーを新規に購入するよりも5000円くらい安く済みます。何度も充電を繰り返した結果、6分と持たなくなっていたのでセル交換で元通り持ち運べて使えるようになります。

OSを変えたのは半分遊びですが、ブラウザさえ使えれば困ることは少なくなっているのでWindowsよりもアップデートが今後も期待できるLinuxがいいかなと思って変えました。インストールもあっさり終わり、動作も軽快です。

gOS

11月 1st, 2007



Googleの提供するWebアプリをランチャーにあらかじめ設定してあるUbuntuベースのOS、ウォルマートが発売するPCにプレインストールしてあるらしい。ちょっと面白いかも。

UbuntuベースのgOSに Flockが乗っていて、Flockが対応してないWebアプリは Prismで対応みたいになるんですかね、そう遠くない将来に・・・

Ubuntuに関する情報集め

5月 16th, 2007

VMWare Player + Ubuntu – tune webに書いたようにUbuntuでの作業環境を会社で設定しています。今日は設定の参考になりそうなサイトを見て使いやすくカスタマイズしていました。

ついでにテーマやガジェットのインストールサイトも

1日の設定でホストOSにしているWindows2000よりも使いやすそうになりました。やっぱり見た目がよくないと作業する気が起きません。早くWindows Vistaに切り替わらないかなぁ。

VMWare Player + Ubuntu

5月 8th, 2007

仕事でLinuxの開発環境が欲しくてVMWare/VirtualPC/coLinuxなど悩んだのですが最終的に VMware Playerに落ち着きました。OSは最近はやりのUbuntuを使ってみようと思い、 Ubuntu Japanese Teamからダウンロードしたものを使いました。VMWare Playerのインストールも簡単に終わり、Ubuntuも何の問題もなく起動しました。動作はcoLinuxと比較してVMWare/VirtualPCだと若干遅いようですが使っていて特に気になるほどではありませんでした。

Ubuntuは初めて使ったのですがなんでもGUIで設定できてWindowsみたいですね。これなら自宅マシンをLinuxにしてもいいかなとちょっと思いました。

Cream

4月 12th, 2007



Windows,Linux,BSDで動作するエディタです.とはいってもVimを普通のエディタのように使えるようにカスタマイズ(設定変更?)してあるもののようです.ここまでしてVimを使う必要があるか・・・と思うと疑問ですが動作が軽いとか長所があるのかも知れません.