MW211 EXIT

devlog
TortoiseSVN/エクスプローラのアイコン
2013年03月15日
TortoiseSVNを導入するとエクスプローラ上のフォルダに
緑とか赤のアイコンが表示されて、変更中かとかがわかるようになる。

これはレジストリ上で管理されている。

スタートメニューのコマンドラインから「regedit」を入力すると
レジストリエディタが開き、レジストリの中身が表示される。
┌──────────────────────────────────────┐
│コンピューター                                                              │
│└HKEY_LOCAL_MACHINE                                                        │
│  └SOFTWARE                                                                │
│    └Microsoft                                                             │
│      └Windows                                                             │
│        └CurrentVersion                                                    │
│          └Explorer                                                        │
│            └ShellIconOverlayIdentifiers                                   │
│              ├1TortoiseNormal                                             │
│              ├2TortoiseModified                                           │
│              ├3TortoiseConflict                                           │
│              ├4TortoiseLocked                                             │
│              ├5TortoiseReadOnly                                           │
│              ├6TortoiseDeleted                                            │
│              ├7TortoiseAdded                                              │
│              ├8TortoiseIgnored                                            │
│              └9TortoiseUnversioned                                        │
└──────────────────────────────────────┘

「ShellIconOverlayIdentifiers」には15個までという制限があり
かつ先入先出で後から何らかのアイコンが追加されると、
前に設定していたアイコンが追い出されるらしい。

対策は不要なアイコンを削除して厳選することみたい。
分類:SVN
TortoiseSVN/コミットしたら即反映
2013年03月14日
テスト環境とかにコミットした都度自動でエクスポートしてくれる機能。

Linuxの場合。
SubVersionのリポジトリ配下に「hooks」というディレクトリがあるので
そこに「post-commit」というテキストファイルを作成し、
そこに処理を記述すれば、コミットの都度実行してくれる。
┌──────────────────────────────────────┐
│/svn update 出力先                                                          │
├──────────────────────────────────────┤
│/svn export 出力先                                                          │
└──────────────────────────────────────┘

Windowsの場合。
Linux同様に、TortoiseSVNのリポジトリ配下に
「hooks」というディレクトリがあるので、
そこに「post-commit.bat」(「post-commit.cmd」でも可)という
テキストファイルを作成し、そこに処理を記述する。
┌──────────────────────────────────────┐
│TortoiseProc.exe /command:update /url:"入力元リポジトリ"                    │
│                                                /path:"出力先" /closeonend:1│
├──────────────────────────────────────┤
│TortoiseProc.exe /command:export /url:"入力元リポジトリ"                    │
│                                                /path:"出力先" /closeonend:1│
└──────────────────────────────────────┘
exportの場合は、確認ダイアログやら何やら表示されるので、あまり使えないみたい。
updateの場合も、DOS窓が一瞬だけ開くが、こちらはご愛嬌ということで。

TortoiseSVNはGUIなのでダイアログが表示したりするのは限界らしい。
そういうのが嫌なら本家SubVersionからコマンドを打つしかないのか。
分類:SVN
シェル/クーロン(3)中身
2013年03月13日
「日時 シェルスクリプト」の順に記述する
┌──────────────────────────────────────┐
 #分 時 日 月 曜  シェルスクリプト                                            │
│ 0  0  1  1  0  /xxxx/xxxx.sh(値は最小値)                                   │
│59 23 31 12  6  /xxxx/xxxx.sh(値は最大値)                                   │
└──────────────────────────────────────┘

行頭に「#」をつけるとコメント行(無効行)となる。

曜日(曜)は「0=日曜日、1=月曜日、…、6=土曜日」である。

「*」を指定するとすべて対象となる(ワイルドカード)

例えば、月初(朔日)の正子(毎月01日の00時00分)に時刻したい場合は、以下の通り。
┌──────────────────────────────────────┐
 #分 時 日 月 曜  シェルスクリプト                                            │
│ 0  0  1  *  *  /xxxx/xxxx.sh                                               │
└──────────────────────────────────────┘
分類:Linuxシェル
シェル/クーロン(2)実行
2013年03月12日
cronを起動する。
┌──────────────────────────────────────┐
│# crond start                                                               │
└──────────────────────────────────────┘

cronを停止する。
┌──────────────────────────────────────┐
│# crond stop                                                                │
└──────────────────────────────────────┘

cronを再起動する。
┌──────────────────────────────────────┐
│# crond restart                                                             │
└──────────────────────────────────────┘

cronの実体パスを変更する。
┌──────────────────────────────────────┐
│# crond -c パス                                                             │
└──────────────────────────────────────┘
分類:Linuxシェル
シェル/クーロン(1)設定
2013年03月11日
「crontab」の内容を確認する。
┌──────────────────────────────────────┐
│# crontab -l                                                                │
└──────────────────────────────────────┘

「crontab」の内容を変更(または追加)する。
┌──────────────────────────────────────┐
│# crontab -e                                                                │
└──────────────────────────────────────┘

「crontab」を削除する(全部削除されるから注意)。
┌──────────────────────────────────────┐
│# crontab -r                                                                │
└──────────────────────────────────────┘

なお、それぞれ「crond」へのパスが必要。(「/etc/rc.d/init.d/」とか)

また、既定の「crontab」を使用せずに、
ユーザ定義の「crontab」を使用することもできる。
その場合は、任意の場所にエディタ等で同じような内容を記述保存する。
そして実行時に「-c」でパスを指定してあげる。
分類:Linuxシェル
シェル/リンクの見分け方
2013年03月10日
シンボリックリンクの見分け方。「ls -l」を実行する。
┌──────────────────────────────────────┐
│$ ls -l                                                                     │
│-rw-rw-r--    1 root     root            2 Jan  1  1970 A                   │
│lrwxrwxrwx    1 root     root            2 Jan  1  1970 B -> A              │
│-rw-rw-r--    1 root     root            2 Jan  1  1970 Z                   │
└──────────────────────────────────────┘
左から一番目のファイル属性の一番左がシンボリックリンクを表しており、
「l」(小文字のL)となっていればそれがシンボリックリンク。
また、リンク名の横に「-> ファイル名」がついているので一目瞭然。


ハードリンクの見分け方。「ls -l」を実行する。
┌──────────────────────────────────────┐
│$ ls -l                                                                     │
│-rw-rw-r--    3 root     root            2 Jan  1  1970 A                   │
│-rw-rw-r--    3 root     root            2 Jan  1  1970 B                   │
│-rw-rw-r--    3 root     root            2 Jan  1  1970 C                   │
│-rw-rw-r--    1 root     root            2 Jan  1  1970 Z                   │
└──────────────────────────────────────┘
左から二番目の項目がハードリンク数。
上記でいえば「A、B、C」が互いにハードリンクしているため「3」となっている。
分類:Linuxシェル
シェル/シンボリックリンク・補足
2013年03月09日
コピーとハードリンクとシンボリックリンクの比較。
┌───────┬───────┬───────┬──────────────┐
│    コピー    │ ハードリンク │ シンボリック │                            │
├───────┼───────┼───────┼──────────────┤
│$ echo "a" > A│$ echo "a" > A│$ echo "a" > A│←「A」を生成               │
│$ cat A       │$ cat A       │$ cat A       │←「A」の中身を確認         │
│a             │a             │a             │                            │
├───────┼───────┼───────┼──────────────┤
│$ cp A B      │$ ln A B      │$ ln -s A B   │←「B」を生成する           │
│$ cat B       │$ cat B       │$ cat B       │←「B」の中身を確認         │
│a             │a             │a             │←「A」の中身と同じ         │
├───────┼───────┼───────┼──────────────┤
│$ echo "b" > B│$ echo "b" > B│$ echo "b" > B│←「B」の中身を変更         │
│$ cat B       │$ cat B       │$ cat B       │                            │
│b             │b             │b             │                            │
│$ cat A       │$ cat A       │$ cat A       │←「A」の中身を確認         │
│a             │b             │b             │                            │
└───────┴───────┴───────┴──────────────┘
コピーの場合は、独立した二つのデータが生成されるので、互いに影響を与えない。
ハードリンクの場合は、一つのデータを共有するので、互いに影響を与える。
シンボリックリンクの場合は、シンボルが実体のようにふるまう。
よって、シンボルを更新すると実体が更新される。

シンボリックリンクの実体がなくなると、シンボルを指定しても該当なしエラーとなる。
┌──────────────────────────────────────┐
│$ ls -l                                                                     │
│lrwxrwxrwx    1 root     root            2 Jan  1  1970 B -> A              │
│$ rm A                                                                      │
│$ cat B                                                                     │
│cat: B: No such file or directory                                           │
└──────────────────────────────────────┘
分類:Linuxシェル
シェル/シンボリックリンク
2013年03月08日
リンクを生成する。
┌──────────────────────────────────────┐
│$ ln -s ファイル名 リンク名                                                 │
└──────────────────────────────────────┘

リンクの内容を確認する。
┌──────────────────────────────────────┐
│$ ls -l                                                                     │
│lrwxrwxrwx    1 root     root          8 Jan  1  1970 リンク名 -> ファイル名│
└──────────────────────────────────────┘

リンクを削除する。
┌──────────────────────────────────────┐
│$ rm リンク名                                                               │
└──────────────────────────────────────┘

ちなみに「-s」をつけないとハードリンクをの生成となる。
┌──────────────────────────────────────┐
│$ ln ファイル名 リンク名                                                    │
└──────────────────────────────────────┘

以下の違いをまとめてみた。
・コピー            …実体が二つになる。
・ハードリンク      …実体は一つで窓口が二つになる。
                      一方の窓口から変更をすると、他方へも反映された形となる。
                      窓口がすべてなくなった時点で実体もなくなる。
・シンボリックリンク…ショートカット(実体がなくなってもリンク切れ状態で残る)。
                      ハードリンクに対してソフトリンクとも呼ばれる。

注意点としては
・ハードリンクはパーティーションをまたがると使えない。
・シンボリックリンクが使えない特殊なシステムもある。
分類:Linuxシェル
設計/ユークリッドの互除法(最大公約数)
2013年03月07日
「x ≧ y」が前提で、以下の再帰関数を使えば最大公約数が求まるらしい。
┌──────────────────────────────────────┐
│int gcd(int x, int y) {                                                     │
│    return (y == 0) ? x : gcd(y, x % y);                                    │
│}                                                                           │
└──────────────────────────────────────┘
大きい方から小さい方を削除する。
それを繰り返すだけで最大公約数が求まるってことらしい。
もちろん、最後にきれいにゼロになった時だけで、
そのゼロになる瞬間の直前の値が最大公約数ってこと。
ま、たいていは「1」になってしまうもんだけど、「2」以上の場合もある。
(っていうか「2」以上の場合の方が最大公約数の代表みたいな感じだけど)

以下に例をあげてみた。大きい方か小さい方を削っていくだけだ
┌──────────────────────────────────────┐
│24→ 6→ 6→ 6      ←最大公約数 6                                          │
│18→18→12→ 6→ 0                                                          │
├──────────────────────────────────────┤
│ 4→ 1              ←最大公約数 1                                          │
│ 3→ 3→ 2→ 1→ 0                                                          │
└──────────────────────────────────────┘

大きい方と小さい方が変わらず何回か繰り返す部分があるが
これを端折ってくれるのが剰余(プログラムでいうところの「%」)。
┌──────────────────────────────────────┐
│24→ 6              ←最大公約数 6                                          │
│18→18→ 0                                                                  │
├──────────────────────────────────────┤
│ 4→ 1              ←最大公約数 1                                          │
│ 3→ 3→ 0                                                                  │
└──────────────────────────────────────┘
こんな感じでショートカットしてくれる。

プログラムっていうよりこれ考えたユークリッドが偉い!って感じ。
因数分解とかして求めるより断然速いらしい。

設計の上をいく設計って感じだ。
分類:設計
C言語/文字型←→数値型(2)
2013年03月06日
数値型から文字型に変換するなら、書式付き変換できるsprint系がいいかも。
┌──────────────────────────────────────┐
│sprintf(文字列, "%d", 数値);                                                │
│snprintf(文字列, sizeof(文字列), "%d", 数値);                               │
└──────────────────────────────────────┘
ファイルとかに出力するなら、「fprintf()」とかもあるけど。

これの対応馬(っていうと類似っぽな、真逆な存在)は、sscanf系。
文字型(文字列)から数値に変換してくれる。
┌──────────────────────────────────────┐
│int  sscanf(文字列, "%d", 数値);                                            │
└──────────────────────────────────────┘

sprintf系もsscanf系も複数の変換も一気にできるところが魅力か。
┌──────────────────────────────────────┐
│sprintf(文字列, "%d,%d", 数値, 数値);                                       │
│snprintf(文字列, sizeof(文字列), "%d,%d", 数値, 数値);                      │
├──────────────────────────────────────┤
│int  sscanf(文字列, "%d,%d", 数値, 数値);                                   │
└──────────────────────────────────────┘
分類:C/C++
前へ 1 2 3 次へ