日曜プログラマがダラダラ書くスマートフォン用の表示で見る日曜プログラマがダラダラ書くこの広告は、90日以上更新していないブログに表示しています。使いたいメモよくあるニーズですね。環境でのおはなしです。使いたいコマンドがインストールされていないなら、野良ビルドして、置けるところに置いて、パスをとおせばいいわけです。バインディングが必要になります。インストールしちゃおう、というのが以下の手順になります。なんだかんだと毎年1回くらいこれで苦労してるような気がするので、いい加減なにかメモを書いておこうと思った次第です。これに合わせて設定しておきます。これが設定されてないと野良ビルドできないやつとかあります。コマンドを野良ビルドしてインストールとなります。玉からインストールすることができます。玉を取ってきてインストールし、ってなことを繰り返して必要なコマンドをインストールすることになります。今回、野良ビルドしたパッケージはこちら。gdbm-1.12perl-5.24.0apr-1.5.2apr-util-1.5.4swig-3.0.11subversion-1.9.5git-2.11.0もちろん、環境は千差万別なので、環境ごとに依存ライブラリは変わるでしょう。このメモが次回にどの程度役に立つかはちょっと心配なところです。スクリプトは勝手には見つけてくれないことが多いので、そういうときはオプションなどで教えてあげる必要があります。中を検索してうんぬんみたいなことをしたりなんだり。実行した手順をスクリプトとしてまとめて書いちゃうと以下になります。やりなおしをすると必要なライブラリがビルドされないtar玉を展開しなおすとビルドされる参考にした情報http://blog.livedoor.jp/sasata299/archives/51182513.htmlhttp://perl-users.jp/articles/advent-calendar/2009/hacker/16.htmlhttp://subversion.1072662.n5.nabble.com/memory-failure-in-perl-bindings-for-subversion-1-5-6-td144135.htmlhttps://svn.haxx.se/users/archive-2011-02/0467.shtmlhttps://groups.google.com/forum/#!topic/subversion_users/9lDJzhT4vZUまとめサーバー管理者のひとにお願いして入れてもらうといいと思います。*1:トラブルシューティングしながらという感じにもなるので、今回は2週間かかった。2013の参加記事というか、途切れてしまうと寂しいので間をつなぐためにお茶を濁してみました的な記事です。1'b1;いや、加算器の両側は、ビット幅そろえて書くだろ。4'd1;と思ったあなた。あなたはこの先の罠にははまらないので、もう読まなくても大丈夫です。読んでおくと、今後、いらんデバッグで時間をつぶさずにすむ可能性がちびっとだけ増えるかもしれません。ここまで書いたところで、カウンタ値は符号付の値と演算するのでカウンタ値も符号付にしなきゃいけない、と後から分かったとします。宣言だけでなく、リテラルも書き換えないといけませんね。符号ビットの分、ビット幅を増やすのを忘れていました。1'sb1;さて、いちおうシミュレーションして動作を確認してみましょう。......あれ?間違い探しの答ええー、まー、ここまで読んでいただいた方には、もうほとんど分かってると思うんですけど、私はこれでハマって、すくなくとも数時間は浪費したことがあります。ばかと呼んでください。インクリメントしてほしいところがなぜかデクリメントされてる。はて、考えてみると符号付1ビット幅の数とはなんぞや。符号ビットしかないじゃないか、と。3ビット幅あたりから考えてみましょうか。符号付3ビット幅の数の取りうる値の範囲は[-4,3]。2の補数表現を全部並べると[100,101,110,111,000,001,010,011]。同様に2ビットでは[-2,1]、[10,11,00,01]。*2というわけで、1ビットでは[-1,0]ということになりますね。こんなん絶対だまされるわ!回避方法は、すでに書きましたね。加算器の両側のビット幅はそろえましょう。うぅ、なんか当時を思い出して力がぬけてきた。したほうがよさげですね。この記事に限らず、私個人の見解は所属組織の見解とは関係ございませんので、あしからずご承知お願いいたします。恥ずかしいことに2の補数表現を間違えていたのを修正しました。問題に挑戦とかしてました。リテラルを使わずに書け」というもの。最初は特に挑戦する気とかなかったんですが、ちょっと思いついたことをツイートしてみたら、出題者さんからレスをいただきました。処理系を、数値リテラル抜きで書かなきゃないのでした。組み合わせただけで、自分が書いたプログラムとは言えないし、やっぱりやめとこ、とか思ったところで、また、ちょっと思いつきました。......必要な数はわりと簡単に手に入る気がする。インタプリタを眺めてみましょう。整数の上限下限を組み合わせるだけで、いずれの値も手に入ります。num128インタプリタの数値リテラルを、これらの変数で置き換えれば、要件は満たせますね。......いえ、満たせません。Worldと出力するプログラムを作成して下さい。プログラムの出力はこう。記事を書いたわけではないのです......。出力する方法をさぐらなければいけなくなったのでした。そもそもの出題意図から軽く脱線している気がしますが、どうせいつものことです。プログラムを読んで理解しようなどと思うのは、多分無謀です。処理系の動作をちゃんと理解した上で、所望のプログラムを書くにはどうすればいいかを考える方がマシでしょう、多分。書いたときには、処理系がなにをしているかも全然分かってなかったのです。さんのコードをコピペしただけですからねー。会に参加させて頂いたこともあって、ちょっとはマシになったかな、と。