svn svk リポジトリ構成
作り直すにあたりリポジトリ構成で困った。前もって trunk branches tags は作っておくべきだ……
svk を使うとバージョン文字列にリビジョン番号が使えない。ので日付と時刻にしてみよう。
作り直すにあたりリポジトリ構成で困った。前もって trunk branches tags は作っておくべきだ……
svk を使うとバージョン文字列にリビジョン番号が使えない。ので日付と時刻にしてみよう。
メソッドの引数の間にシンボルおく方法が使えなくなるのが微妙にアレだなぁ。キモイのはキモイんだけどコードの意味がわかりにくくなるんだよなぁ……メソッド名の途中で改行はできないから、クソながいやつはクソながく書かないといけない
http://lab.lowreal.net/trac/browser/CSS%20Bullets/trunk (移動)
UDP だけ使うようにするとやたらシンプルだなぁ。ただこれでちゃんとうまく動くかまだわからない。
svk push するときは --verbatim 使おう。。
OK
NG
Mac と ubuntu からの送信がうまくいってないのかな
svk info //mirror/hogehoge
でミラーリポジトリ指定してあげると Mirrored From からリビジョン番号がとれるっぽい。どういう番号なのかわからないけど
なんで突然 gerry が頻発するようになったんだろう
ハライター的には汚いトイレが多いJRの駅(多い気がするだけ?)はできるだけ利用したくない。ショッカーめ
どうも paralles とホスト間で RingServer が見つけられない。
Hamachi を入れて試してみたけどだめっぽい。でも他の Windows 機を RingServer にすると paralles 内からも発見できる。
#<Errno::EBADF: Bad file descriptor - connect(2)> (DRb::DRbConnError)
とかでてるからそもそもなんかおかしいみたいだ
One click installer でインストールしなおしたら上のエラーはでなくなった。
しかし相変わらず RingNotFound。ホストコンピュータじゃなければ接続できるっぽいんだけどなぁ
やっぱり DNS でした。少し前の secondlife さんのアレと全く同じハマりをしてた
オートリロードってだけなら、RingServer と TuplseSpace とか使わないで、UDP パケットなげっぱなしでリレーするだけでもいいかも? これなら逆方向から接続しなおすとかないからホスト名ひくとかいらない、よなぁ。 リクエストのシーケンス番号つけて一回着たのは無視するようにしとかないと無限ループする予感でこわい。
require 'rake'
require 'rake/packagetask'
Rake::PackageTask.new('PackageBaseName', VERSION) do |pkg|
pkg.need_zip = true
pkg.package_files.include('plugins/*', TARGET, RESOURCES, 'README*')
endrake test 実行するのもいいけど、パッケージングもたのしい
ほとんどわからない。(recv(4096)) とかやるけど4096以上きたときってどうなるんだろう。送信側とあらかじめ決めておくのかな
とりあえず最小構成書いてみないとね!!! っていうかいまさら Socket プログラミングかよ遅くねpgrとか言われそう。
鯖
require 'socket'
@s = UDPSocket.new
@s.bind('', 9989)
p @s
loop do
p @s.recv(1014)
end倉
require 'socket'
['<broadcast>', 'localhost'].each do |host|
p host
@s = UDPSocket.open
begin
# ないと permission error
@s.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
p @s.send('aaa', 0, host, 9989)
ensure
@s.close
end
end送るだけ送る。"aaa" が二回表示される。
Mac さんから Windows さんへは思い (UDP) が伝わらない
Windows さんから Mac さんへは伝わる。
なんでだ!! Mac さんの思いはもっと報われるべきじゃないのか!!
もっかい考え直し。限りなくシンプルになったので UI いらない気がする。
メニューだけの構成にしようか、なぁ。またかよって感じだけどそれが一番簡単だ。
一昨日と昨日やったことのまとめ。rubyclr (なんか rubyclr のサイトって title 要素の内容がないんだけど) について。
rubyclr 自体は .NET Framework があれば動くので VS.NET はいらないのですが、UI 開発などの行程で VS.NET が激しく便利なので少なくとも C# Express ぐらいはインストールしといたほうがいいと思います。(rubyclr の開発言語は C++ なので C++ のほうがいいかも)
わかったこと
とりあえず VS.NET で作ったファイルを読み込むには
require 'rubyclr'
reference_file "CompiledAssembly.exe"
とかやると、CompiledAssembly.exe に定義されたクラスが全てインポートされる。(もちろん public なものしかアクセスできない。フォームに配置したコントールはデフォルトで private なので Ruby から参照したいときは書き換える必要あり)
namespace Hogehoge 以下の Unco クラスは Ruby では Hogehoge::Unco で参照できる。
.exe にしてありますが、プロジェクトのプロパティで、出力の形式(デフォルトは Windows アプリケーション) をクラスライブラリにすれば dll になって単体で実行できなくなるみたいです。けど IDE で実行できなくなるのでデバッグし辛い。
Ruby のスレッドスイッチが起きないのは致命的というか、DRb 使えない Ruby とか Ruby で書く意味があんまりない、とまでは言わないけれど結構そんな残念な感じになってしまったので解決法考えた。というかトイレいったら思いついた。
# threadTimer という名前で配置。Interval は 10 で、最初から Enabled を true にしてある。
form.threadTimer.Tick do |sender, arg|
Thread.pass
end
フォームに Timer を配置して、.NET 側から Ruby に定期的に割り込み入れるようにする。
ただし、この Thread.pass されたスレッドでフォーム内のコントロールを参照すると、参照した時点で謎のエラー (簡素なダイアログ) で落ちてしまう。(Thread.pass する前、つまりタイマー割り込みのイベント内では大丈夫です。)
subtech - MisuzillaSubtechImpl - Windows Forms とスレッド によると安全性のために落ちているらしい。Ruby のスレッドと .NET のスレッドとの関係性がいまいちわからないけれど、おまじない書くと一応大丈夫になる。
reference 'System.Windows.Forms'
System::Windows::Forms::Form.CheckForIllegalCrossThreadCalls = false
true にしといて別の方法で同期とったほうがいいかもしれない。(今回書いていたコードではこのおまじないを使わないで Timer 割り込みで UI を更新するようなコードにした)
あとは rubyclr のサンプルを見ながらやれば特に困ったことにはならなかった。でも exerb でまとめるとどうしてもセグフォるので誰かうまくいったら教えて欲しいです。
どうでもいいけど Ruby でスクリプト書くときも VS.NET を立ち上げっぱなしにしておけばどんなプロパティがあるかわかって便利だった。というか MSDN はどうも読みにくい……MSDN 見てから developer.apple.com 見ると癒される。
そういえば、もともと VB6 を触った事があったのでメソッド名とかはだいたい想像がついて .NET の浅い部分ではそんなに悩んだりはしなかった。
セキュリティシステムあたりがまだ理解できてない。
そんな感じの .NET プログラミング初体験☆でした。別にエロくない。
ドキュメント書くのめんどす。。
IconReset はコマンドラインからも書き換えができるので自動化しやすくていい感じ
ただこれを使うということはビルドプロセスが Windows でしか動かないということになるのでちょっとめんどいですね、みたいな
itai