紡ぎ出すのは麺か、はたまたしょうもない呟きか。
神乃木製麺所

仕事で携帯向けHTMLを生成するプログラムを書いていたのだけど、テンプレートの半角カタカナがことごく全角カタカナに変換してくれるので原因を探っていたら、どうやらKconvのtosjisが原因らしい。
以下のブログにあるようなコードを追加することでうまく半角カタカナのままになってくれた。

[ruby] kconvと半角カナ
http://photoq-1989.blogspot.com/2010/04/kconv.html

できれば全角カタカナも全部半角カタカナにしたいのだけど、私のruby1.9.2ではnkfの最新オプション「Z4」に対応していないらしく、全角カタカナ→半角カタカナへの置き換えはできなかった。
Linux/Unix環境限定であれば、この手のはシェルでnkfを叩いたほうが早そうですね。

すでに幾つかのブログなどでも紹介されていますが、IE8以前のIEでJQueryを用いている場合に、Selectタグ内のOptionを追加しようとすると、なぜか正しく値を追加できないことがあるようです。
JQuery1.7.1 + IE7.0 / IE8.0にて下記問題を確認しました。

以下がIE8以前で動作しないスクリプト。

$("#item").append(new Option("ほげ",”hoge"));

以下が動作するスクリプト。

$("#item").append($("<option></option>").val("hoge").html("ほげ"));

もちろんこれでも動きます。

$("#item").append($('<option value="hoge">ほげ</option>'));

ダサいですが、タグを直接書くしかなさそうです……。

ルーティングを弄っていると、正しいURLを指定してアクセスしているのに「Invalid モデル名」というCakePHPのエラー画面が出て進めなくなってしまうことがあった。
しばらくして理由を考えてみると、以下のようなURL指定が原因だった。

Router::connect('/admin/managers/:id',           array('controller' => 'managers', 'action' => 'view'), array('pass' => array('id')));

これは、/admin/managers/の後にIDを付加してアクセスする形式で、例えば「/admin/managers/3」とあればIDが3のマネージャの情報を表示することを想定しているわけだが、「/admin/managers/create」のようなURLでアクセスした場合、IDが「create」のマネージャの情報を表示しようとするため、エラーが発生する。

これを回避するには、上記のようなIDの記述は当該コントローラの一番下に記述すれば良い。

Router::connect('/admin/managers/create',             array('controller' => 'managers', 'action' => 'create'));
Router::connect('/admin/managers/:id',           array('controller' => 'managers', 'action' => 'view'), array('pass' => array('id')));

こうしておくと、createのほうが先に照合されるため、さっきのようなエラーは起きなくなる。
Routerは上から読んでいく、ということを覚えておくべし。


Shadowbeats


使用音源:BFD Eco, HALion Sonic, Nexus2など

新年明けましておめでとうございます。
新しく3990円のドラム音源「BFD eco」を購入したので、その使い心地を確かめる意味をこめて1曲オリジナルで作りました。
カッコいいリフを使った曲を作ってみたかったので、ギターとかベースのループが続く仕様の曲です。
各種動画のBGM等にもご自由にご利用ください。

BPMは128で前後に余裕がありますので、適当に切り出して使用することもできると思います。

※画像は拾い物です

割りとバッドノウハウなので、あまりおすすめできない記事です。

投稿フォームを作っていると、「名前 *」といった具合に、その項目が必須であることのサインをつけたくなることがある。
しかし、フォームヘルパーにはそういう機能はなく、ctpファイルを全て1つずつ手動で触っていかなくてはならない。

もし、大規模なシステムを作っていて、途中で「あ、やっぱこの項目は入力必須にしてください」とか言われたときに、テンプレートを一つ一つ書き換えて「*」印を足していくのは非常に面倒だろう。
ここでは、フォームヘルパーを拡張することで、入力対象のモデルのカラムがnullを許しているかどうかチェックし、それに応じて「*」マークを出力するヘルパーを作る。

1.Formヘルパーの拡張

まずはフォームヘルパーを拡張する。新しくExFormHelperというクラス名で、ExFormHelper.phpをHelperディレクトリに保存する。
次に対象コントローラでExFormヘルパーを読み込むように設定する。

var $helpers = array('AdminPage','ExForm');

2.テンプレートファイルの変更

今後はExFormを使用するため、$this->Formとなっている部分を全て$this->ExFormに変更。

<?php echo $this->ExForm->input('name'); ?>

3.フォームヘルパーに以下のメソッドを挿入

class ExFormHelper extends FormHelper  {
  function essentialTag($varName) {
    $modelName = $this->model();
    if(!isset($this->_models[$modelName]->_schema[$varName])){
      return null;
    }
    if ($this->_models[$modelName]->_schema[$varName]["null"]) {
      return null;
    } else {
      return '<spEan class="essential">*</span>';
    }
  }
}

4.テンプレートファイルの好きな場所で使う

 
<th><?php echo $this->AdminForm->label('name'); ?><?php echo $this->AdminForm->essentialTag('name');?></th

これで、指定したカラム(ここではname)のnullが許されていない場合には必須マークのタグが出力される。

#モデルのバリデーションルールを付け加え(入力時必須項目にする)、それを参照する形にしても良いかもしれません。
#結構強引な書き方をしているので、もっとスマートな解決方法があれば教えてください……。

Rubyには1.9系と1.8系があって、だいたいは1.8.7か1.9.2のバージョンが選ばれることが多い。
これらはプロジェクトごとに違うことも多く、必要に応じた切り替えが必要であるが、通常の方法で混在させると結構面倒な事になったりするので、そういう場合のためにRubyには、バージョン管理用のソフトェアが存在する。

参考サイト:http://d.hatena.ne.jp/holypp/20110407/1302193459

両方とも、「rvm use 1.9.2」のように、使うバージョンを指定してやればそれ以降のrubyコマンドは全部指定したバージョンで実行できるようになる。

1.OS X / Linux向け RVM
RVM=Ruby Version Managerのこと。
インストールはgemから簡単に行える。

2.Windows向け pik
これもgemからインストールできる。
僕は1.8.7のrubyがインストールされてる状態で「gem install pik」を行ったが、下記のようなエラーが出たのでメモ。

There was an error.
Error: can't dup NilClass
 
in: pathname.rb:205:in `dup'
in: pathname.rb:205:in `initialize'
in: pik/commands/add_command.rb:17:in `new'
in: pik/commands/add_command.rb:17:in `add'
in: pik/commands/add_command.rb:13:in `execute'
in: pik_runner:27

どうやらこれ、pikがrubyを認識していないために起こるエラーらしい。
なので、パスを通した状態で pik add C:\ruby1.8.7\bin\ruby.exe といった具合でpikにrubyを認識させてやると動くようになる。

こうして無事1.9.2と1.8.7を混在させることができた。

久々の更新です。

最近はクラウドストレージサービスが増えてきて、大容量化が進んでいますね。Yahoo!ボックスやNドライブといったストレージサービスは、安価で数十GBまで簡単に使えてしまうため、便利に使っているユーザも多いかと思います。
そんな中で一つ私が気になっていたのは、1日あたりの転送量規制があるプロバイダは、クラウドストレージを使っても規制されるのか? ということ。

今回私がイメージししているクラウドストレージサービスとは、Dropboxのようにローカルにフォルダを作り、そのフォルダがネットワークと同期するタイプのものです。
すなわち、デカいファイルをフォルダに入れると、そのファイルをクラウドサーバと同期するために大量のデータアップロードが発生します

一方で、プロバイダの中には、1日のデータ転送量を規制しているプロバイダがあります。OCNの1日送信量30GB、IIJの1日送信量15GBなどがそれにあたります。
今回私はPlalaとIIJのダブルルートオプションを使用しているため、もし私が50GBのY!ボックスを使って、30GBくらいのファイルを同期しようとした場合、IIJの送信制限15GBにひっかかる可能性が出てきます

そういった、ある意味意図しない通信で15GBを超えた場合にも、転送量規制やプロバイダ契約解除の可能性があるのかどうか、契約しているPlalaサポートに聞いてみました。
以下が問い合わせの文章です。

いつもお世話になっております。
IIJ回線でのダブルルートオプションについて質問なのですが、
IIJは1日あたり15GBまでのアップロード帯域制限があり、それを超えて使用した場合には警告があり、場合によっては契約停止の可能性もあると聞きました。 

こちらの帯域制限についてなのですが、例えば最近サービスを開始したYahoo! BOXやNドライブなどのクラウドストレージサービスは、最大容量が数十GBもあり、大きな容量のファイルを置いた場合にかなりの容量の通信を行うと思います。

それらの、直接ユーザが意図しない通信の場合でも、上り15GBの帯域制限は行われるのでしょうか?
また、制限が行われた場合の契約停止などの可能性もあるのでしょうか?
ご回答お待ちしております。

これに対する返答が先ほど到着しましたが、実に残念な内容でした。

いつもご利用ありがとうございます。
本件につきましては、お客様自身が意図しない通信につきましても、
規定量の通信を超えた場合には、ダブルルートオプションサービスの利用制限や停止を実施させて頂きます。
詳しくは以下をご覧ください。 

http://www.plala.or.jp/option/w_route/attend/

といった内容(返答メール内容は転載禁止であるため、大まかな意味が通るよう編集してあります)でした。

つまり大容量のファイルをクラウドストレージで同期すると、プロバイダ契約→契約解除を食らう可能性が十分にあるということじゃないですか

うーん、せっかく便利なサービスが出てきたとしても、インフラ側の対応がこれじゃあなかなか使う気になれませんよね……。
というか、プロバイダの制限なんか知らない初心者がいきなり使って、家族が「なんか警告来たんだけど!」とか言って怒られるパターンがあってもおかしくないと思うんですが、そのあたりどうにかならないんですかね。

今回問い合わせたのはPlalaですが、他のプロバイダに問い合わせたことのある方などいらっしゃれば教えて頂けると嬉しいです。

※ちなみにDropboxについては、無料アカウントは1日10GBまでしか同期できないらしいので、IIJでも安全と言えるようです(まぁ私もどうせ最大数GBまでしか使えませんが)

先日、自宅サーバのWebサイトを観ていると突然、PHPのディスク関連のエラーが出た。
どうやらパーミッションがおかしいという内容らしいので、「おかしいなぁ、パーミッションなんて変えたはずないのになぁ」と思ってパーミッションを元に戻そうとすると、パーミッションが変更できないと言われる。
そしてよくよく調べていくと、システム用に使っているHDDが故障しており、Linuxがディスクを読み出し専用として認識していることがわかる。

そこで今回は、故障したハードディスク(160GB)のCentOS5.3(LVM使用)を新しいハードディスク(500GB)に載せ替え、今後のためにもLVMをやめるということを行った。
LVMはCentOSで標準的に使用されるHDDの構成方式で、容量の拡張やスナップショット等便利な機能が満載ではあるが、こういうトラブルが起きたときに上手く扱うことができないケースが多い。
そもそもスナップショット機能なんて使ったことがないので、今回は可能な限りシンプルに行こうと考えた。

具体的な方法については、以下のサイトが参考になる。

-Linux環境のDISKのコピーについて LVMをやめて普通のDISKにする場合

このページではCentOSのLiveCDを使って復旧させているが、ウチの場合はなぜか新しいHDDが認識されなかったりするトラブルが多かったため、KNOPPIXの最新版(6.7.1)をLiveCDとして起動して復旧させた。
具体的な手順は以下のとおりだ。

1.新しいHDDで、ブート用、データ用、スワップ用の3つのパーティションを作る

KNOPPIXにはGPartedというパーティション編集ソフトがある。そいつを使って、ブート用に150MB、データ用に420GB、あとはスワップ用でパーティションを作った。
GParted起動中にはKNOPPIXのエクスプローラからHDDにアクセスできないので注意。
また、ブート用パーティションは右クリックで「フラグの編集」を行い、ブートフラグを立てておくこと。スワップ用パーティションはext3等ではなくswapでフォーマットすること。

2.古いHDDをマウントし、ブート用とデータ用それぞれを新しいHDDのそれにコピーする

これも先のURLのコマンドを参考にします。↓のコマンドだけではデータ用しかコピーされないので注意ね。/bootにマウントしているなら大丈夫です。

cd /mydir &amp;&amp; echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-disk | sh

この作業、ウチの環境(データ120GB程度)で30時間くらいかかりました。死ぬほど時間がかかるので注意しましょう。
というか日頃からサイズを小さくする努力が必要ですね。
恐らくddコマンドで書きだせばシーケンシャルアクセスなので速いが、cpコマンドベースのコピーだとランダムアクセスになっているから遅いのだと思われる。

3.grub.confとfstabを修正する

これについては先ほどのURLをご覧ください。

4.grubのインストール

これについても先ほどのURLの通りでOKです。

あとは普通に起動することができます。

続いて、注意点というか気づいたことを書いておきます。

・HDDを2台繋げているときのhda1とかhdb1の関係

KNOPPIXに繋いでコピーしているときは、壊れたHDDがsda1~3、新しいHDDはsdb1~3として認識されていたが、復旧後は新しいHDDはSATAの1つめに差し替える(故障したHDDと入れ替え)ため、fstabなどの修正は全て、復旧後の環境に合わせてhda1~hda3になるよう行う必要がある。
つまり、復旧中のKNOPPIXでのHDDのパス(ドライブレター?)と、復旧後のCentOSでのHDDのパスは異なるので注意ということ。

・CentOSは「hda」でKNOPPIXは「sda」になる

繋いでいるのはSATAのHDD。このような名前の変更が発生するので注意だ。

ちなみに、ハードディスクが壊れたタイミングはおそらくここ数年で最悪のタイミング(値段的意味で)だったので、新しいHDDは買わずに3年前から2年間使っていたHDDを急遽使っています。
そのうち値下がりしたらまたHDD交換しないとなぁ……。

次はddでダンプできることを願うしかないですね。

表題の通り。見事にハマりました。

appleのフォーラムでも議論になっているようです。

https://discussionsjapan.apple.com/thread/10098529?start=0&tstart=0

どうやら理由は、同梱されているVC80(Visual  C++ 2005再頒布可能パッケージ)のバージョンがwindows7 64bitではインストールできないバージョンであるためのようです。
実際、iTunes同梱のインストーラでインストールできない再頒布可能パッケージは、手動で入れようとしてもエラーになるっぽいです。

新しいバージョンが出るまではインストールしないが吉ですねぇ。

私は結局10.4.1に戻して使うことに。
するとapple mobile serviceのゴミが残っていたようで、iphoneの同期だけできなくなったので、そいつも削除して個別にインストールすることに。
統合されてるiTunes64setup.exeは解凍ソフトでバラすとmsiの集合体になるので、それで個別にインストールできます。

走行距離約350km、日数は2泊3日(9/19-21)
まったくもって何がしたいか分からない旅行をしてきました。

事の発端。

「あ~なんかこのままだと色々マンネリ化してて嫌だな」

「どっか出かけるか~」

「電車はいつも使ってるし、自転車旅行でもするか」

福島・東北方面:色々厳しい
長野方面:坂道きつい
千葉方面:距離が短い
消去法で静岡方面が決まる

「静岡いけるなら名古屋行けるんじゃね?」

「まぁ無理なら帰ってくればいいしなwww」

これで旅行がスタートしました。

正直なところ、かなり辛かったです。
それまで自転車で1日10キロも走ったことのないような人間が、突然1日100キロ(2日目は140キロ近く)x3日走るわけですから、これはもう無謀としか言いようがありません。

1日目は度々スコールに見まわれ、全身びしょ濡れになりながら自転車を漕ぎました。
2日目の夕方くらいには熱中症と疲れで体が本当に動かなくなり、フラフラになりました。
3日目にはペースをつかみ、干し梅とスポーツドリンクのお世話になりながらひたすら走りましたが、ゴールの名古屋駅に着いた瞬間大雨でびしょ濡れになりました。

以上のことを総合するに、今回の旅行は色々な意味でひどいと言えます。

今回の自転車旅行をしてみて、感じたこととかをまとめておきたいと思います。

よかったこと

  • 県境を超えて、新しい町に入るたびに達成感を味わえる。
  • 自分の足でペダルを漕ぐことで、進んでいることを実感できる。
  • 漕いでる間は余計なことを考えなくてもいい。
  • 風景がきれい。
  • よく眠れる。

わるかったこと

  • 雨と炎天下のダブルコンボで体が死ぬ
  • 日焼けがヤバい
  • 宿を探すのに苦労する(2日目)
  • そもそもの行程に無理があり、観光する余裕など無かった
  • 自転車の陸送手配がめちゃくちゃ面倒(分解できないタイプだったので)

わかったこと

  • 自転車旅行は想像以上に金がかかる。自転車の装備、食費、ドリンク代、宿泊費、帰りの陸送費用、電車賃含めて、2泊3日で4万近く使っている。
  • 道の駅の存在がもの凄くありがたいということ。旅行中は目についた道の駅殆どに寄って休憩した。
  • iphoneがあれば、地図が無くても旅行できる。そう、iphoneならね。
  • 神奈川~名古屋はとても遠いということ。
  • それを2泊3日で走るのは無茶ということ。
  • 電車と新幹線は神のように偉大な乗り物だということ。

2泊3日、1日のうち自転車に乗ってる時間のほうが長いという日を経験すると、時間や距離に対する考え方が変わってくるのがわかります。
あと、色々と頭の中で考えてたことが一旦全て放棄されるので、それまで悩んでたこととかがどうでもよくなります。
そういう意味では、「色々マンネリ化してて嫌だなー」という問題についてはある意味解決したのかもしれません。
というより、すでに何で悩んでいたのかよく分からなくなっているので、結果としては大成功だったのかもしれないですね。

では、旅行記録に移りたいと思います。

続きを読む

他のキーワードで検索 »