Creo Elements/Direct Modeling PE

フリーの3D CADとしてCreo Elements/Direct Modeling PEを使い始めました

http://ja.ptc.com/product/creo/

完全に自分用備忘録ですがメモを

  • 二次元描画はInkscapeでdxf出力するのが吉
  • 出力の際は出力のウィザード中で単位を「mm」にするのを忘れないように
  • ただ、読み込むと線と線がつながったりつながってなかったりなので繋がってないところを手動でつなげる必要ある
  • シェルで「非多様体が」うんたら言われるときは表面の文字とかを対象から外すといい?

研究観測

午前二時 大学に 研究テーマ担いでった
ベルトに結んだiPhone 雑用降らないらしい

二分後に教授来た 大げさなテーマしょって来た
始めようか 研究観測 新規性を探して

深い闇に飲まれないように 精一杯だった
教授の無茶なテーマ 断ろうとした あの日は

見えないモノを見ようとして 研究テーマ覗き込んだ
静寂を切り裂いて いくつも声が生まれたよ
教授が僕らを呼んだって 返事もろくにしなかった
成果という ほうき星 僕は一人追いかけていた

気が付けばいつだって ひたすら何か探している
数式の定義とか 哀しみの置き場とか

生まれたら死ぬまで ずっと探している
さぁ 始めようか 研究観測 新規性を探して

今まで見つけたモノは 全部覚えている
教授の無茶な雑用 断れなかった痛みも

知らないモノを知ろうとして 研究テーマ覗き込んだ
暗闇を照らす様な 微かな光 探したよ
そうして知った痛みを 未だに僕は覚えている
成果という ほうき星 今も一人追いかけている

背が伸びるにつれて 伝えたい事も増えてった
成果の無い結果も 崩れるほど 重なった

僕は元気でいるよ 新規性も少ないよ
ただひとつ 今も思い出すよ

予報外れの雑用振られて 泣き出しそうな
教授の無茶な雑用 断れなかった あの日も

見えてる成果 見落として 研究テーマまた担いで
静寂と暗闇の帰り道を 駆け抜けた
そうして知った痛みが 未だに僕を支えている
「成果」という ほうき星 今も一人追いかけている

もう一度成果出そうとして 研究テーマまた担いで
前と同じ 午前二時 大学まで駆けてくよ
始めようか 研究観測 二年後に成果出なくとも
修士という ほうき星

僕は一人追いかけている

※この歌詞はフィクションであり,実在の院生,学部生,それらの心の叫びとは一切関係ありません
※本当にフィクションです.大事なことなので2回言いました.

ホットスワップを用いたソフトウェアRAID復旧

気付いたら6月です。驚きですね。
他にもVM周りとか色々書きたいことはあるのですが、差し当たってソフトウェアRAIDを復旧した時のメモなどを書きたいと思います。
キーワード: mdadm, RAID, hotswap, hotplug, software RAID

さて、SASが12本刺さる2Uのサーバ(RAID箱ではない)という面白いものが研究室にありまして、それに2TのSASを12本刺し、mdでRAID1にして合計2T * 6 = 12Tという感じになっています。
で、今回壊れたのがsdgだったのですが、これがなかなか面倒な感じでした。パーティションの構成は以下です。

sdaとsdgをそれぞれ4パーティションに切って、そのうち2パーティションずつをmdでRAID1にし、1つずつをswapにし、1つずつを/bootにしています。
/bootはRAIDにはしておらず、単にそれぞれに/bootを用意しておいて、片方が壊れたときにも片方から起動できるようにしてあるだけです。
さて、状況を確認してみます。

# less /proc/mdstat

md5 : active raid1 sda3[0] sdg3[1]
      976562432 blocks [2/2] [UU]

md6 : active raid1 sda4[0] sdg4[2](F)
      944725376 blocks [2/1] [U_]

というわけで、sdg4が壊れているようです。
やらなければいけないことは

  • swapとRAIDからsdgを切り離す
  • sdgを抜いていい状態にし、ディスクを交換する
  • 以前と同じパーティションに切る
  • swaponとRAIDのresync
  • grubのインストール

という感じです。
では具体的な手順を。

swapとRAIDからsdgを切り離す

# swapoff /dev/sdg2
# mdadm --manage --fail /dev/md6 /dev/sdg4
# mdadm --manage --remove /dev/md6 /dev/sdg4
# mdadm --manage --fail /dev/md5 /dev/sdg3
# mdadm --manage --remove /dev/md5 /dev/sdg3

これでOK

sdgを抜いていい状態にし、ディスクを交換する

# echo 1 >  /sys/block/sdg/device/delete

これで抜いて大丈夫になったはず。
ディスクを交換。今回は自動的に新たなディスクがsdgとして認識された。

以前と同じパーティションに切る

はい。partedを使ってGPTで切っていたので、同じようにpartedで同じように切ればいいのですが、「見ながら同じように切る」なんて許せないですよね。コピーしたいですよね。

そこでこうしました。

# dd if=/dev/sda of=/dev/sdg count=100

先頭のMBRをコピーすればおk!
bsが512なので、51.2kBコピーすることになります。こんなにコピーする必要ありませんが、なんとなく。念のため。

確認してみます。

# parted /dev/sdg print
Model: SEAGATE ST32000444SS (scsi)
Disk /dev/sdg: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1000MB  1000MB  ext3                  boot
 2      1000MB  33.0GB  32.0GB	
 3      33.0GB  1033GB  1000GB                            raid
 4      1033GB  2000GB  967GB                             raid

ちゃんと切れています。flagも立っていて、ちゃんとgptにもなっています。
フォーマットはまだしていませんが、先頭のパーティションだけはさきほどのddで一部コピーされてext3と判断されているようです。

3と4はRAIDでresyncするのでフォーマットする必要はありませんが、1と2はそれぞれext3とswapにフォーマットする必要があります。

# mkfs.ext3 /dev/sdg1
# mkswap /dev/sdg2

swaponとRAIDのresync

swaponします。

# swapon /dev/sdg2

次にRAIDをresyncします。

mdadm --manage --add /dev/md5 /dev/sd3
mdadm --manage --add /dev/md6 /dev/sd4

以上でだいたい終わりです。あとは

grubのインストール

で、じつはgrubのインストールはまだやっていません。
まぁ、いざとなったらCDブートすればいいし・・・

awkで$0出力するときにOFS指定が無視られる問題

awkでOFS指定しても出力のセパレータが無視される時がある問題がやっと解決しました.

やりたいこと

  • 何らかのセパレータで区切られたcsvファイルの中から,特定の条件を満たす行を,セパレータを変えて出力する

まぁ,こう言われればみんなawkでやろうとしますよね?そうでもない?

例えば以下のようなカンマ区切りのcsvファイル

a,b
d,c
a,e
e,d

この中から,一つ目のフィールドが"a"の行のみ,セパレータをカンマからプラスに変えて出力したいとします.
つまり,

a+b
a+e

が望む形.

この時,とりあえず思いつくのは,

% awk -F "," 'BEGIN{OFS="+"}{ if($1=="a"){print $0}}' test.csv

ですよね.OFSは出力セパレータ.始めに出力セパレータにプラスを指定しておいて,$0で全フィールド出力.

ところが,これだとうまくいきません.結果はこうなります.

a,b
a,e

ちゃんと条件は取れているのですが,セパレータが変更されていません.ですが,実は以下のように書くと意図した通りに動きます.

% awk -F "," 'BEGIN{OFS="+"}{ if($1=="a"){print $1,$2}}' test.csv

結果が以下です

a+b
a+e

何故$0(全出力)ではうまくいかず,$1,$2と全部指定するとうまくいくのかずっと謎でした.この例ではフィールドが二つだからいいですが,多くなってくると,さらにフィールドの数が可変になってくると,for文を使って全フィールド出力することになり,たったこれだけの処理なのにやけにコマンドが汚くなります.

実は理由は今でも謎ですが,以下のようにするとうまくいくことが分かりました.

% awk -F "," 'BEGIN{OFS="+"}{$1=$1; if($1=="a"){print $0}}' test.csv

結果が以下です

a+b
a+e

上記のように,$1=$1というおまじないを入れることでうまくいくようになります.

理由はかなり謎ですが,どうやら$1=$1とすることでカラムの再構成が行われてどうとか・・・?
どちらにせよ,$0で指定する場合と$1,$2...$NFで指定する場合で結果が違うというのは何か気持ち悪いです.

VMWare Player でブリッジ接続をする

はてな始めてみました.
主に,VMWare Playerでブリッジ接続をするのに無駄に時間を費やしてしまったことに対するやり場の無い怒りを吐き出して成仏させるためです.

結論から言うと,VMWare Bridge Protocolが使いたいネットワークデバイス以外でもONになっていたのが原因でした.

VMWare Playerをお使いの方は多いと思いますが,ゲストOSのネットワークはどうなっているでしょうか.その辺気にせずできるのが良いところですが,デフォルトではホストOSがNATをすることで繋がっていると思います.その場合,ホストOSとゲストOSは同じネットワークにいるのでお互いに直接通信することができると思いますが,ホストOSの外からゲストOSへは直接アクセスすることはできません.
そんな時,ブリッジ接続というものを利用することができます.NAT接続だと,元々ホストOSが属していたネットワークと別のネットワークをホストOSとゲストOSの間で作成する形になりますが,ブリッジ接続であれば元々ホストOSが属していたネットワークに直接ゲストOSがぶら下がる形になります.ホストOSがスイッチみたいな感じの役割を果たします.

で,まぁそんなことはどうでもいいんですが,このブリッジ接続,なかなか上手くいきませんでした.ホストOSはWindows7, ゲストOSはdebian 6.0 squeeze, VMWare Player 3.1.3です.とりあえず,

VMWare Player 仮想マシンの設定->ネットワーク・アダプタ->ブリッジにチェック,物理ネットワーク接続の状態を複製にチェック
また,IPはdhcpではなくstaticにしたかったのでsqueezeの/etc/network/interfacesを以下のように書き換えました.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.23
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
gateway 192.168.1.1

192.168.1.1はうちで使ってるブロードバンドルータIPアドレス,192.168.1.23はこのゲストOSに振りたいIPアドレスです.
これも色々いじってみて色々追加した挙句こうなってるわけですが,結局ここでは問題特定できず.

で,色々ググっていると,どうやらVMWare Bridge Protocolというものが必要だとかなんとか?
コントロールパネル -> ネットワークとインターネット -> ネットワーク接続
ローカルエリア接続 -> プロパティ -> VMWare Bridge Protocolにチェック!・・・・と思ったが入ってる.

ここで,hamachiというVPNソフトを入れているので,その仮想ネットワークデバイスがあることに気付く.
そのプロパティを見てみると,こっちにもVMWare Bridge Protocolのチェックが入っている.これはもしや?ということでそっちのチェックを切ってみて,再起動.

動いた!

どうやら,複数のネットワークデバイスVMWare Bridge ProtocolがONになっていたのが良くなかったようです.
ということで外からのアクセスが可能になったので,何か働いてもらおうと思います.