目的はないけど、自宅サーバーがほしい

この一年、PC周りを色々と新調した。
特に意味はないけど、使用しているガジェットを羅列してみる。

PC: MacBook Pro (Retina, 15-inch, Early 2013)
ディスプレイ: acer G276HL
マウス: Logicool G700S
キーボード: Logicool G105
PCクーラー: NOTEPAL ERGOSTAND LITE
USB HUB: Anker AH232
マウスパッド: Logicool G240
外付けHDD: G-Technology (HGST) G-DRIVE with Thunderbolt 3TB
外付けHDD(Backup): I-O DATA 3.0TB HDC-LA3.0
外付けHDD(Mobile): BUFFALO 1TB HD-PA1.0TU3

G700Sはいいんだけど、しばらく使い続けているとハングアップでもしているのか、クリックの反応がにぶくなったりする。

Anker AH232は13ポートとか言うアホみたいに便利なhubなんだが、接続方法の問題か、最近3ポートしか認識しなくなった・・・初期不良なのか、これに更にhub指しているのが問題なのか。でもそのhub抜いても認識治らないし・・・。

G-DRIVEは単純にブランドで選んだ。
Backup用のHDDはヤマダ電機で安売りしていたので買っただけ。
毎晩0:30にG-DRIVEのデータをBackup用のHDDにコピーするようにしている。

暇ができれば、個別にレビュー的なことも書いていきたい。


最近、MMD動画を見るのにハマってしまっている。
昔はあまり好きじゃなかったんだけどな。違和感が全く無くなっていて、技術の進歩って凄いな。
東方やったことないのに二次設定ばかり覚えてしまっている。

MacでScriptを定期実行する方法

以前、Macでファイルを定期的にバックアップする設定で、
Scriptを定期実行するために、Macの標準カレンダーを使って擬似的に実現していた。
だけど、本当ならcronとか、まともな方法でやりたい。

Macではcronでなくlaunchdというものが推奨されているようなので、
これで実行するように仕込んだ。

上記のようなファイルを
/Users/UserName/Library/LaunchAgents
に保存し、ターミナルから以下のコマンドを実行する。

以上でタスク登録完了である。
タスクの登録状況は以下のコマンドで確認できる。

(本当は実行権限とか色々あるけど俺の使用範囲ではないので割愛します)

ただ、launchdはイチイチコマンドでやるので分かりにくい。
GUIで使えないのかな、と思っていたが、Lingonというツールがあった。
タスク内容の編集には有料ライセンスが必要だが、内容の確認は無料でもできる。
むしろLingonでタスクの内容を確認し、そのplistファイルを見比べることでplistファイルの書き方を勉強することができたのが、自分にとって大きな収穫だった。

参考
OS XのLaunchdデーモンをGUIで編集できるMac用ユーティリティ「Lingon X 2.0」を使ってみた。
launchdをcronの代わりに使うための簡易メモ
launchd.plistの書き方


Windowsならタスクスケジューラで一発なんだけどな。
Macはシステム的なことは極力見せない方針っぽいし、今後も実装される予定はないだろうな。

HP DL360サーバーで論理ディスクを作成する方法

社内で結構サーバーやインフラ関連に関わるようになってしまった。
わが社はHPのDL360シリーズのサーバーにWindows Serverをインストールして使っている。
論理ディスクはBIOSからささっと設定することができる。

で、それはいいんだけど、運用後にさらにHDDを追加し、これで論理ディスクを作成するようにお達しが来た。
「え?BIOSからやる=システム止めなきゃ無理じゃね?」と思ったが、どうもHPのツール
「HP ProLiantアレイ コンフィギュレーション ユーティリティ for Windows 64ビット」
を使えばシステムを止めずに論理ディスクの作成ができるらしい。
上記ツールはWeb上で入手可能だ。
実際に導入したが、GUIに従うだけで論理ディスクの作成、削除ができる。いやぁ簡単でいい。
(ちなみに、HPプロビジョニングでOSインストールしていれば初期から入っている筈である。最初からプロビジョニングでインストールすればよかったんだけど、何か上手くインストールできないから直に入れた経緯がある)

・・・と安心していたら、さらに要望が来た。
「Hyper-V Server 2012の方にもHDD追加したから論理ディスク作成4649!」とのこと。
GUI使えないし、どうすりゃいいんじゃと思っていたが、CUIで論理ディスクを作成できるツールもHPがリリースしていることが分かった。
「HP ProLiantアレイ コンフィギュレーション ユーティリティ(CLI) for Windows 64ビット」
以下、使い方とコマンド例をメモしておく。

事前準備
1. HPのサポートページから利用しているサーバーを検索する
2. 商品のページに辿り着いたら「ドライバー、ソフトウェア、およびファームウェアを入手する。」をクリックする
3. OSで「Windows Server 2012」を選択する
4. 「ソフトウェア – システム管理」に「HP ProLiantアレイ コンフィギュレーション ユーティリティ(CLI) for Windows 64ビット」があるので、これをダウンロードする
5. ダウンロードしたインストーラをサーバー上で実行する。コマンドプロンプトでインストーラを実行すればGUIがでてくるのでそれに従う

実行方法
1. c:\Program Files\Compaq\Hpacucli\Bin\hpacucli.exeを実行する
2. アレイ設定ツールが立ち上がるので、各コマンドを実行する

なお、コマンドの説明と例はマニュアルを参照すれば良い。
が、やや難しいので、実際に自分が使ったコマンドを備忘も兼ねて記述する。


・現在の設定を確認するとき


・論理ディスクの設定を確認するとき

スロット番号、論理ディスク番号は上記のdetailから確認する。


・空いているディスクでRAID0のディスク(アレイ)を作成するとき

スロット番号は上記のdetailから確認する。


・空いているディスクでRAID 1 のディスク(アレイ)を作成するとき(ディスクを指定する)

スロット番号は上記のdetailから確認する。
driversもdetailから確認可能。どうやら<port>:<box>:<bay>の順になっている模様。detailで全論理ディスクのdriversを確認して、使われてないディスクを指定すればよい。


・論理ディスクを確認する

スロット番号は上記のdetailから確認する。


・論理ディスクを削除する

(スロット番号は上記のdetailから、論理ドライブ番号はlogicaldrive all showから確認する)
警告が出るので、yで続行し、削除する。


しかし、趣味でこういうことするのはいいけど、仕事という責任が伴う場合でサーバーやインフラ管理するのって疲れる。
しかも担当者が知識ゼロの俺だけとか。

もう少しミニマムに、単純に行きてゆきたい。

MonoでC#のコンパイル

C#で簡易的なツールを作ったとき、Xamarin Studioとかでコンパイルはできる。
できるが、ソリュージョンとして作るほどのものでもないしなぁ・・・ということが多い。

コマンドからMonoでコンパイルできないかな、と思ったら案の定できることがわかった。

ちなみに、参照追加が必要なコードの場合はオプションで追加できる。
例えば、僕はSystem.Xml.Linqをusingするコードをコンパイルしたかったので、以下のようにした。

何という内容の無さ。

「善意の半強制イベントが嫌い」という話から、よくわからない展開になってしまった実りのない雑記

何となく、心のなかで思っていたことを書き記してみる。
思考の言語化に近いので、支離滅裂な内容かもしれない。
思考自体、基本的に感情的で、非論理的なものだから、仕方ないと予防線を張っておく。

書き記したことに特にきっかけがあった訳ではない。
むしろ逆で、きっかけが無いからこそかける。
何かきっかけがあって書いたら、何だか自分を曝け出しすぎているようで、恥ずかしい。

さて、僕は送別会とか、誕生日パーティとか、そういうものがあまり好きではない。

こう言うと誤解を受けそうなので訂正しておく。
個人的な友人を祝ったりとか、そういうことは大好きだ、
ただ、学校のクラスとか、会社の部署とか、そういう単位で開かれるそれが嫌いなのだ。
こんな感覚自体は昔から持っていたが、具体的な思想押して持つようになったのは高校生ぐらいのときからだと思う。

クラスの女子の誰かが、「誕生日の人がいたら、昼休みに祝おう」なんてことを言い出した。
この時点でウエッと思った。どうせ思いつきで、すぐに面倒くさくなるだろう。
その予想は見事にあたって、6月ぐらいになることには無かったことになっていた。

そこで思った。
これ、祝われない人の気持ちを一切考えていないな、と。
6月以降の人はまだいい。実際は4,5月でも祝われていない人がいるかも知れない。
その気持を考えると少し憂鬱になる。
祝って欲しい訳ではない。
しかし、同じ立場の者が祝われて、自分が祝われない。これは気分のいいものではないだろう。

クラスという単位で祝う以上、そこに例外が生まれてはいけないのだ。
しかし、じゃあ仮に全員が祝われるようになったらどうだろう。

やっぱり嫌だ。祝われたい人ばかりではないだろう。
今で言えばFacebookに勝手にタグ付けされて自分の写真がアップロードされるようなものだ。
「写真アップロードされれば嬉しいじゃん」とかいう単純な精神構造の人ばかりではないのだ。

大体、クラスというのは仲良しグループが集まったものではない。別に関わりのない人も居る。
その事自体は問題ない。むしろ自然だ。
だからこそ、システム的には全員平等、最低限の繋がりのみで構成されるべきだと思う。
あまり知らない人のことを祝うことに苦痛を感じないのだろうか。
少なくとも、僕は苦痛に感じる。
そして、逆の立場で、関わりのない人に祝われるのも、いい気分ではないだろう。独裁者のサイコパスじゃあるまいし。
お互い、なんの利益もない。何だこの苦痛。

そんな風にある程度、昔から思っていた感情を言語化出来た。それが高校生のときだった。

ついでに言いすぎておくと、送別会とか、こういうイベントで、食事に行くことって、本当に楽しいのだろうか。
僕は捻くれているのか、「え?送別するのに何で飯行くの?酒飲むの?」とか思ってしまうのだ。
普通に見送ればいいじゃない。
或いは移動先の情報とか教えてあげるほうが、遥かにありがたいだろう。

「コミュニケーションとしての食事を全否定かよ」と言われると思う。
概ねその通りだ。
「話すこと実際無いんじゃね?だから簡単に挨拶するぐらいでいいと思うよ」という感じだ。

食事しながら話すことはお互いに分かり合うための基本(口実)らしいが、そもそもみんながみんなと分かり合うなんて、疲れないだろうか。
もっと、人はそれぞれが孤立していたほうがいいと思う。

よく「まずは一緒に食事に行って仲良くなる」と言うが、一緒に食事って、俺の中では相当ハードルが高いのだが、如何だろうか。
食事なんて仲の良い友達とぐらいしか行かないし、そうでなくてはとても楽しめない。
初対面の人となんて、絶対にできない。
「仲良くなってから一緒に食事に行く」という流れが自然だと思っている。
「まずは一緒に食事に行って仲良くなる」という発想は「一緒に食事に行く人とは仲の良い人のことだ。だから一緒に食事に行けば仲良く慣れる」という仮定と結論が逆転した一種の帰納的思考法から導き出された詭弁にしか、僕には思えないのだ。

合コンや街コンって本当に楽しいのだろうか。
この歳になっても、狂気の沙汰にしか感じられないのだけど。

ちなみに、こんな思想を持った結果、出会いがこの歳まで一切なく来てしまった。
そして、「出会いとかいらないな」という思想に至りつつある。
こうなりたくないなら、上記に似たような思想は捨てた方がいい。

一般的な幸せを目指すなら、一般的な感性と思想が大切だ。

Macでファイルを定期的にバックアップする設定

僕はiTunesのメディアファイルを始め、動画、画像ファイルを全て外付けのHDDに保存して管理している。
昔はNASだったんだけど、引っ越してから無線の速度が遅くなったので単純な外付けHDDに回帰した。

で、それはいいんだけど、最近ファイルが壊れていたりすることに気付いた。
古いHDDのせいだろうか。
幸か不幸か、大して重要じゃないファイルなのでよかったが、流石にこの大容量の資産にバックアップがないこの状況が少し怖くなってきた。
今までもたまに気が向いたときに別の外付けHDDにバックアップを取ったりしていたが、気が向いた時だけじゃ心もとなさ過ぎる。
バックアップを毎晩、自動実行しようと思うに至った。

で、Windowsのようにrobocopyコマンドを使おうとしたけど、当然Macにはrobocopyなんてコマンドは無い。
その上、定期実行しようにもWindowsで言うタスクスケジューラが無い。Windows脳の僕はこれで少しパニックになった。

そんな色んな障害を乗り越えた(乗り超えるほど大きい壁じゃない)作業メモを残そうかなと思う。
なお、前提として僕はシェルスクリプトなんて書いたこともない素人である。
cron?良くワカンネ」というレベルである。
実際、良くわからなくて今回使わなかった。今度また挑戦する。


1. バックアップを行うコマンド(シェルスクリプト)を書く

最悪手動でも、バックアップを1クリックで行えるコマンドファイルを作成できれば、
Macでバッチファイル的なものを作成する
のようにして1クリックバックアップシステムが作れるはず。
まずはバックアップを行えるようなコマンドを探した。

2秒で見つかった。

rsync

差分更新まで行ってくれるイカした奴。
僕の望む同期の形を考え、以下のようなオプションを設定した。

-a…元の権限を保持する
-t…元のタイムスタンプを保持する
-u…追加、更新されたファイルだけをコピーする
-v…処理中の経過ファイルを表示する(後述のログ出力のため)
–delete…コピー元にないファイルがコピー先にあった場合、削除する

要するに、バックアップ元と寸分たがわぬ構成をコピーする、という趣旨だ。
それで、最初は単純に以下のような1行コマンドで済ませていた。

だけど、あんまり好きじゃない点が一つあった。
Macで外付けHDDに接続した場合、”.”から始まる不可視ファイルが作成されるが、これらまでバックアップ先にコピーされてしまう。
なので、バックアップ元の外付けHDD内の通常フォルダのみに対してrsyncを行うようなコマンドに修正した。
ついでにrsyncの出力をログとしてファイルに残すようにした。

これでバックアップ元HDD直下のフォルダについて、全てバックアップ先にコピーされる。
ただ、上記スクリプトの欠点は、バックアップ元HDD直下にスペースを含むフォルダが有る場合、上手く動作しないことだ。
つまり、”test folder”というフォルダがあると、”test”と”folder”という2フォルダと認識されてしまう。
工夫すればどうにでもなると思うけど、スクリプトをシンプルにしたかったのでこのままにしておいた。
工夫する知識も気力も無いです。

2. シェルスクリプトを定期実行する

さて、スクリプトはできたが、定期実行はできるのか。
ちゃんとやるならcronやlaunchで設定するのが良いらしい。
でも、よくわからないので、原始的な方法を採った。
Macの標準カレンダー(旧iCal)とAutomatorを用いる方法だ。

MacのAutomatorで新規作成を行う。
書類の種類は「カレンダーアラーム」にする。(アプリケーションでも良い。その場合は後述の設定が必要)
アクションで、「ユーティリティ」→「シェルスクリプトを実行」を選択する。
上記のスクリプトを記述し、保存する。

以上により、Macの標準カレンダーにイベントが登録される。
時刻や繰り返しの設定を適宜変更すれば、定期タスクの設定が簡単に可能だ。

ちなみに、「カレンダーアラーム」でなく、「アプリケーション」を作成した場合、appファイルが作成される。
このappファイルを開くと、シェルスクリプトが実行されるので、後はこのappを定期的に実行するように、手動で標準カレンダーに登録すれば良い。
カレンダーで普通にイベントを追加し、
「通知」→「カスタム」を選択する。
初期状態では通知が「メッセージ」となっていると思うので、ここを「ファイルを開く」にする。
ファイルの種類がカレンダーになっているので、ここで「その他」を選択し、先程のappファイルを選択する。
2015-03-02 22.53.29
ちなみに、GoogleカレンダーやiCloudのカレンダー等、クラウド上のカレンダーではこの通知の設定が保存されなかった。
未検証だが、クラウド上と動機する過程で「ファイルを開く」通知が消えてしまうのだろう。
ローカルのMac上のイベントとして設定したほうが確実だ。

後は時刻や繰り返しを設定することで、定期的にスクリプトが実行できる環境が完成する。

基本的に「カレンダーアラーム」で設定したほうが簡単だと思う。
ちなみに「カレンダーアラーム」で作成した場合、そのappファイルは以下の場所に保存されている。
/Users/UserName/Library/Workflows/Applications/Calendar
appファイルを常に手元においておきたい場合は「アプリケーション」で作成するのもありだと思う。

・参考にしたページ
rsync – 高速なファイル同期(バックアップ) – Linuxコマンド
iCalで指定時刻にアプリを呼び出す
【Linux】bashで指定したディレクトリ内のファイルを取得する
lsでディレクトリのみ,ファイルのみ,表示する


追記(2015/05/30)

定期実行でカレンダーを使うのは負けた気がしてきたので結局launchdを使うことにしました。
MacでScriptを定期実行する方法

VirtualBoxの仮想環境で容量を増やす方法とその注意点

僕はMac使いだが、C#しか基本的に使わないので、コーディングするときはVirtualBoxでWindows8.1を起動してその中でやっている。
Windowsもクリーンインストールだとスッキリしていて悪くない。仕事関係の勉強にもなるし。

で、どんどん使っていると容量が無くなってくる。
当初は20GBもあればいいだろ、と思っていたのに、今では40GBに増やしたくなっている。
VirtualBox上では「容量の拡張」みたいなメニューが無いので無理だと思っていたが、調べてみたらコマンドから実行可能だった。

やり方自体は簡単。Macなのでターミナルから実行することを想定しているが、Windowsでもコマンドプロンプトから同じように実行できる。

ちなみに、一つ落とし穴がありハマったので、それについては後述する。


VirtualBox仮想環境(Windows)のディスク拡張方法

  1. 仮想ディスクファイルのバックアップをとっておく
  2. VBoxManage modifyhd 仮想マシンの仮想ディスクのパス —-resize 拡張後のディスク容量(MB単位)
    を実行する。
    ex)VBoxManage modifyhd /Users/Administrator/VirtualBox/VMs/TestMachine/TestMachine.vdi --resize 40960
  3. コマンドが完了したら、仮想マシンを起動する。(この時点ではまだ容量が増えていない)
  4. 「コントロールパネル」→「システムとセキュリティ」→「ハードディスク パーティションの作成とフォーマット」を開く
  5. 画面下部で、Cドライブに割り当てられている領域を右クリックし、「ボリュームの拡張」をクリックする。

以上で仮想マシンの容量が拡張される。
2以降の手順はWindows固有の操作なので、Windows以外の場合はそのOSのパーティション割り当て方法に従ってください。

・・・で、1で仮想ディスクを拡張したとき、仮想マシンが一切起動しなくなる場合がある。
どうやら原因は仮想ディスクファイルの形式のようだ。
VHD形式の仮想ディスクファイルは上記コマンドで拡張すると壊れてしまい、起動できなくなるのだ。

VHD形式の仮想ディスクを拡張するには、一度別形式に変換してから拡張を行うと良い。

VBoxManage clonehd --format VDI 仮想マシンの仮想ディスクのパス 変換後の仮想ディスクのパス

ex)VBoxManage clonehd --format VDI /Users/Administrator/VirtualBox/VMs/TestMachine/TestMachine.vhd /Users/Administrator/VirtualBox/VMs/TestMachine/TestMachine.vdi
上記コマンドでVDI形式に変換された仮想ディスクファイルが作成されるので、それを拡張すれば良い。
拡張後は形式をVHD形式に戻してもいいし、戻さなくてもいいし、好みにすればいいと思う。


しかし、最近自分にITの適正が無いのが分かり始めた。
何かこう、薄給で責任の少ない仕事がしたい。
田舎の公園の清掃員とかが理想なのだ。
(清掃員を下に見る意図ではありません。ただ、田舎に帰るとどうしても羨ましくなってしまうのです。)

EvernoteにWebクリップするときの画像の扱い

EvernoteのWebクリップを酷使しているのだが、昔のノートを見直していると
画像が表示されないことがよくある。
どうやらネット上から元画像が削除されてしまっているようだ。

これが仕様なら諦める所だが、しかし、元画像が消えていてもEvernote上に残っている場合と残っていない場合があるようだ。
画像が相対パスで指定されているときは残らないようだ。

・・・ってのが昔調べた時の話だったんだけど、最近再検証した所、
どうも今は相対パスで指定されている画像でも問題なくEvernote上にクリップされるようだ。

確かめ方は以下のようにWeb版のEvernoteにアクセスし、画像を右クリックし、
「新しいタブで画像を開く」をクリックする。
そのアドレスが Evernte内ならOKだ。

2014-10-01_00_35_05

2014-10-01_00_35_42

まぁ、それでも一般にサムネは実画像より画質が悪いし、どうせならWebクリップするならサムネでなく、実画像をクリップしたい。
そんなときは以下のjavascriptをクリップ前に実行すると良い。

面白いように上からサムネ画像が実画像に置換される。
ついでに実画像へのリンクもなくなってすっきりする。

参考:EvernoteのWebクリップした画像は元サーバから消えると…orz

2014/10/5追記
Pocketからwebクリップすると画像がリンクになる場合があることを確認。
でも、どういう条件の画像がリンクになるのかは分からないんだよなぁ・・・

Crayon Syntax Highlighterが良いなぁという、そんな日記

WordPressでコードを書くとき、WP-Syntaxというプラグインを使っていた。
だけど、何故かWindows7のChromeで表示すると、C#のコードが上手く表示されない。
具体的には、コードの一部が左詰めになって、その上”.”以降は意図した位置に来たりしてちぐはぐになっている。
調べてみたらこのプラグイン、最終更新が2年前だった。ちょっと今のWordPressとは噛み合ってないのかもしれない。

折角Blogを再作成したので、プラグインも新しいものに変更した。
Crayon Syntax Highlighter
これもプラグインで検索すればすぐに出てきます。
WP-Syntaxより表示がしっかりしているし、コピーや表示変更などのメニューまで自動でつくようになっている。

↑みたいな奴が簡単にできるのだ。
WP-Syntaxとも互換性があり、WP-Syntax用に書いたコードもそのままCrayon Syntax Highlighter形式で表示される。

編集はこんな感じ↓

Crayon_Syntax_Highlighter_1

Crayon_Syntax_Highlighter_2

本当に簡単。素晴らC。


Skitchが思いの外使いやすいので無駄に使ってみた。

サーバー不具合で記事消失

サーバーの不具合のせいで、2014/7/10以降の記事が消えてしまった。

消えてしまった。

どうせ大した内容も無いからいいけど。

・・・って拗ねてたらGoogleキャッシュから消えた記事が見れることが分かった!
http://the-takeo.com/wp-content/uploads/2014/09/20140907.png

とりあえず、記事内容自体は取り戻せたので隙を見て復旧する予定。

まだドメイン関係やWORDPRESS関係で変な挙動になっているところがあるけど、
これらも少しずつ解消していこう。
ブロガーじゃなくて本当に良かった。

・・・ブロガーならバックアップはとっているか。反省。
定期バックアップとかできんのかね。

・追記(2014/09/08)
全記事復旧できたお。
どうせ大した内容じゃないけど。
DBの再構築とか色々やって勉強になった(小学生並みの感想)