はじめてのバンデージッドキューブ

2005-03-31T20:28:00 / rubik / comment

色々とありましたけど取り敢えずバンデージッドキューブを作ってみました (具体的な作成手順については「バンデージキューブを作ってみましょう」が参考になります)。作成したバンデージッドキューブの図を見ればすぐに解りますが、複数のキューブを接続することで回転に制限をかけたものです (図には PLANET PUZZLE の雛型画像を利用させていただきました)。

キューブの間を接着剤でくっつければいいだけなので加工としては非常に簡単でした。とはいえ、材料のキューブのシールを剥ぐのは一苦労しましたし、新しいシールの切り取りも面倒でした。1 面 9 枚が 6 面で合計 54 枚もありますからね。切り取る枚数はこれよりも少なくなるとはいえ、面倒なことには変わりありません。特に角の切り落としは刃が波上のハサミを使うなどした方がいいでしょう。仕上がりがよくなりますし、自分で切るよりは遥かに楽なはずです。

細かいことを言えば、キューブの各面を少し研磨し、角を落とすことで、より使いやすくなるのですが、その加工にかかる時間を考えると嫌になってきたので止めました。一応潤滑剤を入れ、センターキューブのネジも少し緩めたので、購入時よりも回しやすくなりましたけど、角と中心部分の歪みからキューブの引っかかりについては駄目なままです。とはいえ、バンデージの影響で勢いよくがんがん回すことはできないので、別にこれでも構わないのかも知れません。

さて、作成したキューブ。崩したのはいいのだけど、どうやったら元に戻せるんだろう。2*1*1 のキューブはともかく、2*2*1 のキューブがかなり邪魔です。

やはりこれも粗悪キューブか

2005-03-31T01:37:00 / rubik / comment

昨日それなりに良そうなパチモンキューブですけど、シールを剥がして分解してみたところ、理想というにはまだまだ遠そうです。

確かに構造等はいいのですが、細かいところで作りが悪い。

キューブの角がほとんど削られていない
回す際にがんがん引っかかる。
キューブが厚めの板を組み合わせて構成されている
変形しやすい。
回す際に引っかかる。
回す際の見てくれが悪い。
センターキューブのネジを入れる穴がずれている (他の穴と直交していない)
分解や組み立てが (少々) しにくい。
全体が歪むので見てくれが悪くなる。
回す際に引っかかる。

それでいてキューブ同士の隙間はぴっちり……とまではいかないけれど、正規品に比べれば余裕がない感じ。これらが絡み合って回しづらいことこの上ない。角や隙間は研磨すればどうとでもなるのですけど (板製のために少々不安が残りますが)、センター部分の穴のずれはどうしようもありません。

まあ、仕方ないです。ネジ穴さえきちんとしていればと思いますけど、どうせものにより精度はばらばらでしょうしね。

ルービックキューブが見つからない (最終回)

2005-03-30T16:40:00 / rubik / comment

今日も安いパチモンキューブを求めて東奔西走。今日はデパートのテナント中心。

いくつか回ってみたのですが、やはりおもちゃ屋にパチモンはないようです。正規品ならあるんですけどね。今日はパルボックス社製の通常のもの (2 割引) と 25 周年モデルを見つけましたが、2 割引でも高い。別のところではマジックスネークも見つけました (ところで、これもルービック教授の考案だったのですね。そういえば子供の頃に友人宅で見かけたなー)。

そういう訳なので 100 円均一に矛先を変えて見たところ、あるデパートにて通常サイズのパチモンキューブを発見! ……と思ったら昨日の粗悪キューブと同じものでした。

もう諦めようかと思っていたところ、別のコーナー (確かキャラクターもの) に通常サイズ (より 5 ミリほど小さめ) でシールタイプのパチモンを発見しました。取り敢えず粗悪品覚悟で購入して帰宅。

さて、分解前に軽く回して見たところ、キューブ間の摩擦が強いせいかきつい。とはいえ、昨日のもののような引っかかりがある訳ではないので、かなりマシですね。

で、一度分解してみたところ……おお! センターキューブの固定はネジ式で、スプリングも入ってました (つまり正規品と同様の構造)。やはり安価なだけに型ズレやバリもあるのですが、バリに関してはほとんど気にならないほどで、昨日の粗悪キューブに比べればかなりいいです。ただ、全体的にキューブとキューブの隙間に余裕がないようで、分解も組み立ても辛いですね。この辺は研磨するなりセンターキューブの調整をするなりすればどうにかなりそうです。

という訳でかなりいいものが手に入りました。構造はネジ止め、スプリング入り、通常以下のサイズでシールタイプ。まさに昨日考えていた理想のキューブそのものです。欠点といえば臭いことだけです。

これでキューブ探しは一件落着。後は調整して加工に取り掛かるとします。

ルービックキューブが見つからない (番外編)

2005-03-29T17:58:00 / rubik, etc / comment

昨日今日と 100 円均一を回っていたときに発生した事件。

収納関係のコーナーに紙製の箱がありまして。色々なサイズや色々な柄のものがあるわけです。

で、たまたまイギリス国旗の柄のものを見かけたのですが、何故かチェキー (以下省略)。

ルービックキューブが見つからない (完結編パート 2)

2005-03-29T17:24:00 / rubik / comment

前言撤回。さっき買ったパチモンは駄目だ。別の探した方がいい。

タイルの接着具合がまちまちで、一部のものは手でも剥げそうなのですが、ほとんどのものが剥がれそうにありません。いや、頑張れば剥がせるでしょうけど、面倒すぎます。素直にシールタイプのものを探した方がいい。

センター部分はプラスチックのみで、構造としては「手がぎりぎり通るくらいの壺に手を入れて、握りこぶしを作ると手が出せなくなっちゃった」というもの (他にどう表現すればいいんでしょう)。センター部分が手、各センターキューブが壺と考えてください。調整の仕様がない構造で、スプリングもありません。手を入れても使い物になるかどうか。

という訳で、明日も東奔西走ファンタジックキューブ探し確定。理想としては PLANET PUZZLE で紹介されていた 100 円のビッグキューブと同様の構造で、通常以下のサイズで、シールタイプのものなのですが、見つかりますかねぇ。

ルービックキューブが見つからない (完結編)

2005-03-29T15:50:00 / rubik / comment

安いパチモンキューブを求めて東奔西走してました。

昨日調べてないところを、ということでおもちゃ屋や模型店を回ろうと思ったのですが、やっぱりありませんよ。デパート等のテナントとしてのおもちゃ屋ならありますけど、そういうところにパチモンは置いてなさそうですし。

でも行ってみなければ解りませんから、期待せずに行ってみました。すると見つかりましたよ! ……正規品が。パルボックス社製の 25 周年モデルとプロフェッサーが数個ありました。でも欲しいのはこれではありません。サンプルとして自由に弄れるキューブもありましたので、きっちり揃えてから退散。

退散の際にたまたま発見したのですが、テナントとして駄菓子屋がありました。駄菓子屋といえば例の激安ミニキューブ。一通り店内を見て回ったところ、ありましたよ! 通常サイズのキューブが 1 個…… 525 円。高い。見なかったことにして退散。

キューブから少し離れてホームセンターも見てみましたが、カッティングシートがあるなー、ぐらいしか収穫しかありませんでした。チェーンなどもありましたが、値段としては昨日文具店で見かけたものと同じ。大量に買う分には文具店よりは優れていますが、色数は文具店よりも遥かに少なかったです。そもそも壁紙等のコーナーに置いてありましたからね。おまけとして、チェーンも色々ありましたからプリズナーキューブを作るという手もありますが今回はパス。

もう自棄になって適当な方角に向けて延々と直進したところ、(また) 100 円均一が見つかりました。これでないなら止めよう、と思って入ってみたところ……おお! 見つかった! 通常サイズのパチモンがいっぱい! シールでなく色付きのプラスチック片を貼り付けているタイプなので剥がすのは面倒そうですが、もう他のところを探す気にはならなかったので 1 個購入。これを機に足りない道具や材料も買おうかと思いましたが、自宅にあるかも知れないものもあるので確認と休憩のために一旦帰宅。

早速開封して正規品との差がどんなものかと回そうとしたのですが、子供の力で回るのかと思うくらい硬い。何でこんなに硬いのかと思ったら、キューブとキューブの隙間がほとんどなく、ぴっちり詰まってるようです。また、分解してみたところ型ズレや材料の漏れがかなり多いことが確認できました。回そうとしても回らない部分があると感じたのですが、これらが原因か。正規品と比べると雲泥の差です。

一先ずキューブが見つかったので良しとします。

こんなミス第十一話: getopt_long(3)

2005-03-29T01:58:00 / prog / comment
struct option LONG_OPTIONS[] = {
        {"help", no_argument, NULL, 'h'},
        {"version", no_argument, NULL, 'v'},
        ...
        {"something-wrong", no_argument, NULL, 'w'}
};
int c;

while ((c = getopt_long(ac, av, "hv", LONG_OPTIONS, NULL)) != -1) {
        ...

--help と --version はいいのだけど、--something-wrong を一部省略して --s などと与えるとクラッシュしたりしなかったりする。何でだ?

(30 分後) 配列の最後の要素は、全て 0 で埋められていなければならないことなんて知ったことか!

ルービックキューブが見つからない

2005-03-28T22:08:00 / rubik / comment

ルービックキューブ等の既存のパズルを加工して別のパズルを作成しているのを見て、何だか楽しそうなので自分でも挑戦してみようと思いました。まあ、思うだけならタダなので、取り敢えず値段調査のために足りない道具と材料がありそうなところを色々と回ってみました。

で、気付いたのですが、何でこんなに 100 円均一の店があるんでしょうか。適当に街中を回っていたのですが、それでも行く先々で見かけます。コンビニ並みかと思うくらいです。実際にはそこまで多くはありませんけど、思ったよりも多くあったので驚きました。

さて、道具や材料は大体 100 円均一で揃いますが、カッティングシートやパテ、塗装スプレー辺りになるとさすがにありませんでした。これらは文具店やおもちゃ屋、模型店辺りですかね。

カッティングシートはいくつかの文具店で見かけましたが、高い。1 枚 1 枚は安くても、キューブに使う以上最低 6 種類は必要なので、それを考えるとどうにも手が出しにくいです。

塗装スプレーは量と値段と手間がネックなのでそもそも検討に入れていません。試しに作ってみようか、という程度なのでスプレーは無駄になる量が多すぎます。それをいうとカッティングシートも量的にアレなのですが、こちらはまだ別のキューブの予備のシールとして使えるので構いません (この間購入したパルボックスの 25 周年モデルのやつは早くも一部のシールの角が少々剥げかけてますし) 。

それでも参考までに模型店やおもちゃ屋も探そうとしたのですが、全然見つかりませんでした。ゲームショップならいくらでも見つかるのですが。

ああ、そうそう。致命的な問題がありました。肝心のキューブが見つかりません。これがないと話になりませんよ。ピラモルフィックスのパチモンなら見つかったのですが…… 通販でよければ 25 個入り 1075 円と滅茶苦茶安いミニキューブがありますが、送料等を考えるとアレですし、それ以前に 25 個も要りません。

まあ、まだ調べてない範囲が残っているので、明日また調べてみますかね。

ルービックキューブ: 6 面揃えれた

2005-03-24T15:59:00 / rubik / comment

うおー、とうとうルービックキューブを 6 面揃えれるようになりましたよ! ただし運が良ければの話ですが。

手順としては、

  1. まず 1 面の色を揃える。
  2. その側面の色を揃える (これを完全一面というそうです)。
  3. 中央の段の色を揃える。
  4. 完全一面の反対の面の色を揃える。
  5. その面の側面を揃える。

なのですが、最後の側面を揃えることがなかなかできません。角のキューブを入れ替えるパターンは解ったのですが、他のものがどうにも。

まあ、これで心置きなく他の解法を調べることができます。

削りすぎは心臓に悪い

2005-03-21T18:26:00 / desktop / comment

私の場合、普段から電源を落とす代わりに休止状態 (hibernate) にしています。というのも、普通に電源を落とすと次に起動する場合、OS が起動し、シェルが起動し、スタートアップに登録されているもの等が起動され……完全に利用できる状態になるまで結構時間がかかるからです。そうでなくても途中で中断した作業をすぐに再開できるので便利ですが。

で、この間デスクトップから常時表示されているようなものはほとんど削ったので、当然ながらシェルの起動時に何も表示されません。

いやまあ、これが心臓に悪いのなんの。何か起動するたびにそれなりに反応、例えばシステムトレイにアイコンが追加される等があればいいのですが、それすらないので動いてるんだか動いてないんだか解らなくて怖かったです。

暫くして HDD の動作音から大体いつも通りの動きらしいことが解った頃に自分のぼけに気付いた夕暮れ。

トレイくらいは表示させておいた方がいいかなぁ。でもどうせ起動後暫くしたら要らないし。スタートアップに適当なものでも仕込もうか。でも面倒だし暫く放って置こう。

ルービックキューブ動画

2005-03-20T17:24:00 / rubik / comment

この間ルービックキューブがどうこうと書きましたが、あれだけでは何なので実際に揃える過程の動画 (約 652KB)を作ってみました。

と言ってもまだ 1 段 + αまでしか揃えられません。2 段目はまだ狙って揃えられません。揃える方針は 2 つあるのだけど、1 つは途中から既に揃えた部分を崩さないように移動するパターンが解りませんし、もう 1 つはまだ確実に移動できるパターンが掴めてません。

たまに 2 段目まで揃ってしまうことはあるのですが、それ以降はどう弄っていいやら解りません。どうしたもんだか。

BBTaskSwitch-mod_nixi

2005-03-20T03:37:00 / bb4w / comment

BBTaskSwitch 用追加モジュール。同梱の DLL を BBTaskSwitch.dll に置いて、後は同梱の BBTaskSwitch.rc を参考に適当に補完してください。少々外観を変えただけです。

現在のデスクトップ (2005-03-19)

2005-03-19T22:55:00 / desktop / comment
  1. 取り敢えず samurize で置き換えたので BBnetState と BBsysState は要らなくなった。
  2. 時計も samurize で代用すれば BBTextClock も要らない。
  3. 普段プラグインは表示しないままで、必要に応じて表示するという形なので、改めて見直してみると BBTray も要らない。BBTray が必要なとき (システムトレイの内容の確認、またはアイコンへのアクセス) は BBAltTray を使った方が早いし、実際 BBAltTray を作ってから BBTray は使ってない。

もうこれ以上消すものがない。

壁紙は Sirius のところにあった壁紙をごにょごにょしたもの。と書いてて気付いた。当のページには 1280*1024 のサイズのものがあるように書いているのだけど、実際の画像が 1280*960 なのは何故。

samurize 導入

2005-03-19T22:00:00 / software, desktop / comment

samurize を使うことにしました。一年くらい前にちょろっと触ったことはあるのですが、BBnetState と BBsysState で用が足りていたので使う気にはなりませんでした。

が、どうも BBnetState と BBsysState はメモリリークしてるようで。大した量ではないのですが、一度気になるとどうしようもないので samurize に切り替えました。

しかし samurize は samurize で気になる点がいくつか。

最初の 2 つはともかく、最後のは外部から対処のしようがないので困ります。検索してもそれっぽい記事は見つからなかったので、報告しておくべきですかね。

キーバインド一例

2005-03-18T23:17:00 / bb4w, desktop / comment

アプリケーションを跨って使えるようにしているホットキー + αを並べてみる。

Win-N
[BB4W] 次のワークスペースへ移動
Win-P
[BB4W] 前のワークスペースへ移動
Win-T
[BB4W] Toggle plugins
Win-R
[BB4W] Reconfigure
Shift-Win-R
[BB4W] Restart
Win-M
[BB4W] メインメニューの表示
Shift-Alt-V
@BBVHM.maximize_vertical
Shift-Alt-H
@BBVHM.maximize_horizontal
Win-Z
ロック
Win-X
シャットダウン
Win-C
再起動
Win-V
ログオフ
Win-B
休止状態
Win-J
@BBAltTray.Next
Win-K
@BBAltTray.Prev
Win-Esc
@BBAltTray.Cancel
Win-H
@BBAltTray.Send LeftClick
Win-I
@BBAltTray.Send MiddleClick
Win-O
@BBAltTray.Send RightClick
Shift-Win-H
@BBAltTray.Send LeftDoubleClick
Shift-Win-I
@BBAltTray.Send MiddleDoubleClick
Shift-Win-O
@BBAltTray.Send RightDoubleClick
Ctrl-Alt-S
rxvt 起動
Ctrl-Alt-H
Ctrl-Alt-L
ファイラー起動 (特定のディレクトリ指定)
Ctrl-Alt-Shift
LimeChat 起動
Ctrl-Alt-T
Timidi95 起動
Ctrl-Alt-O
Opera 起動
Ctrl-Alt-J
JTrim 起動
Ctrl-Alt-I
Irfanview 起動
Win-Space
bluewind 呼び出し
RightShift
\ と同様
モディファイヤ (Shift)
RightWindows
[窓使いの憂鬱] 設定の再読み込み
モディファイヤ (Win)
Win-I
[窓使いの憂鬱] &WindowIdentify
CapsLock
何もしない (= 使用不可)
RightAlt
日本語入力に切り替え

基本的に「割り当てるものの頭文字 + モディファイヤ」にしている。それが無理な場合は押しやすい位置にあるキーを割り当てている。モディファイヤは Ctrl-Alt をアプリケーションの起動、Win をシェル固有の機能に分けている。

今のところこれらのキーの設定が BB4W (BBKeys) と窓使いの憂鬱に分散してるのだけど、ちゃんとまとめなおした方がいいよな。

ビットをけちる

2005-03-16T15:33:00 / prog / comment

勉強がてらに Scheme の処理系 (効率無視 / 取り敢えず動けばいいやという代物) を書いているのですが、既存の処理系ではどういう風に実装しているか気になったので参考までにソースを見てみたのですが、なかなか面白いことをしています。

Scheme では値が型を持つので、ある値の型が何なのか実行時に判断できなければなりません。基本的には、どの値にも自身の型を表す情報が付随しており、それに加えて独自の情報が付随しているという形になります。

例えば TinyScheme では単純に「どの型でも同じデータ構造を使う」ことで対処しています。具体的には以下のような感じです (細かいことを言えば、これだと後から新たな型を追加する場合に色々と困ります。(違う言語ですけど) Python では同様の手法を取りつつも上手い具合に問題を回避してます)。

/* cell structure */
struct cell {
  unsigned int _flag;
  union {
    struct {
      char   *_svalue;
      int   _length;
    } _string;
    num _number;
    port *_port;
    foreign_func _ff;
    struct {
      struct cell *_car;
      struct cell *_cdr;
    } _cons;
  } _object;
};

ただ、これは整数や文字、論理値などの単純な値でさえ cell 分のメモリを割り当てなければならないので、かなり効率が悪いことになります。

で、これはどう改善できるのだろうか思っていたのですが、Gaucheguile が面白いことをしていました。例えば Gauche だと以下のようになっていてます (guile も同様の手法を取っています)。

typedef struct ScmHeaderRec *ScmObj;

...

/* TAG STRUCTURE
 *
 * [Pointer]
 *      -------- -------- -------- ------00
 *      Points to cell (4-byte aligned)
 *
 * [Fixnum]
 *      -------- -------- -------- ------01
 *      30-bit signed integer
 *
 * [Character]
 *      -------- -------- -------- -----010
 *      29-bit
 *
 * [Miscellaneous]
 *      -------- -------- -------- ----0110
 *      #f, #t, '(), eof-object, undefined
 *
 * [VM Instructions]
 *      -------- -------- -------- ----1110
 *      Only appears in a compiled code.
 */

何が面白いかというと、ScmObj は本来何らかのデータ構造へのポインタなのですが、各種定数等も表すためにも使っているということです。何故こういうことができるかというと、割り当てられるデータは 4 バイトでアラインされるので、そのアドレスの下位 2 ビットは常に 0 なのです。これを利用すれば下位 2 ビットは別の情報 (この場合はポインタか否か) を表すために使えます。

よくこんなこと思いつくよ。すごいなー。

ルービックキューブが熱い

2005-03-15T22:44:00 / rubik / comment

数日前にたまたまルービックキューブを行うソフトを発見して、少し遊んでいたのですが、何だか熱くなってきました。

昔、初めてルーブックキューブを触ってみたときは、何をどう動かしていいやらさっぱりでほとんど楽しめませんでした。

が、改めて考え直してみると、「この場合にはどう動かせばいいか」のパターンがいくつか見えてきました。今なら面を 1 つとその側面 1 段分を揃えるくらいならできます。もうちょっと頑張れば 2 段目も揃えることができると思うのですが、まだ無理です。

まあ、探せばいくらでも解法が見つかるのですけど、最初からそういうものを見るのはプライドが許しませんし、パターンが見えてきはじめた今だと楽しみが殺がれますからね。

ただ、スクリーン上のキューブをマウスでちまちま弄るのは疲れるし効率も悪いので、できれば実物でやった方がいいでしょう。今は実物を持ってませんし、近所に売ってそうな店もなかったので、Amazon で注文してしまいました。

そこで気付いたのですが、(1 面が 3*3 に分割されている) 通常のルービックキューブ 以外にも、2*2 の簡易版4*4 の上位版、果てには 5*5 のものまであるようです。

「単に分割数を増やしただけじゃないか」と思うかも知れませんが、5*5 についてはその通りだと思います。手間がかかるだけで 3*3 と基本は変わらないはずです。ただ 4*4 は違うでしょうね。3*3 や 5*5 の場合は中央のマスが存在し、これは回し方によっては位置が変わりません。一方、4*4 の場合は中央のマスが存在しません。言い換えれば回し方によって位置が変わらないマスが存在しません。これがポイントで、実際に解くとなればかなり厄介なものになると思います (なので 2*2 はある意味 3*3 以上に難しい気がします。「適当に回したら揃っちゃった」という可能性は高いのでしょうけど)。

生産技術的に5×5が限界だそうですが、確かにこれ以上は回す際に崩れないようにすることが難しいでしょうね。まあ、仮に 6*6 だか 54718294*54718299 が作れたとしても、解き方の基本は 3*3 や 4*4 と変わらない (はずな) ので、面白みに欠けます。

しかし内部の構造はどうなってるんでしょうね。昔、安いパチモンを分解したことがあるので、3*3 については大体予想が付くのですが、他はどうなんでしょう。5*5 は基本的に 3*3 のものの応用でしょうけど、中央付近の 3*3 部分がどうなっているのか気になります。でも 4*4 はちょっと見当が付きません。それをいうと 2*2 の方もどうなってるんだか。

「真・女神転生」がやりたくなってきた

2005-03-09T02:10:00 / game / comment

何だか妙に「真・女神転生」がやりたくなってきたので買ってきました (ファミコン版「女神転生」も見つけたのですが、手元にファミコンが残ってたかどうか怪しいので買いませんでした)。

で、スーパーファミコン引っ張り出してプレイ中なのですが……あーもう懐かしいなー。昔 (もう 1X 年も前か) やったときとはまた違う印象があって楽しいです。

Cygwin における HOME の設定順序

2005-03-04T18:03:00 / prog, cygwin / comment
# Here is how HOME is set, in order of priority, when starting from Windows
#  1) From existing HOME in the Windows environment, translated to a Posix path
#  2) from /etc/passwd, if there is an entry with a non empty directory field
#  3) from HOMEDRIVE/HOMEPATH
#  4) / (root)

今まで Windows 側で /home/kana 等と設定してました。Cygwin 外から HOME を使うにはどうすればいいかと悩んでましたよ。

よくよく探してみれば FAQ (My `HOME' environment variable is not what I want.) にも説明がありました。

BBTaskSwitch 0.1.1

2005-03-02T22:56:00 / bb4w, release / comment

BBTaskSwitch 0.1.1 をリリースしました。細かいことを色々と修正しただけで 0.1.0 と特に差はありません。

XSLT - 一部のドキュメントでのみテンプレートを変更するにはどうすればいい

2005-03-02T00:02:00 / prog / comment

さあどうしろと。2.7 Embedding Stylesheets の例が答えに近いような近くないような。