Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

任意カラムでのsort

これもまた覚え書き。

sort コマンドは通常、テキストファイルを行単位でソートできますが、デリミタを指定して、任意のカラムでsortできます。

例えば

# cat testfile 
2 8 hogehoge
1 9 hogehoge
3 7 hogehoge

という文字列があり、普通にsortすると

# sort textfile
1 9 hogehoge
2 8 hogehoge
3 7 hogehoge

となります。 このファイルは文字がスペースで区切られていて、2番目の数字でソートしたい場合

# sort -t " " -k 2,2 testfile
3 7 hogehoge
2 8 hogehoge
1 9 hogehoge

で可能です。-t で区切り文字を指定して、-k でソート対象のカラムを指定します。2,2はカラム2からカラム2まで、つまりカラム2のみでソートを意味します。

ちなみにスペースが2つ以上連続する場合はあらかじめtrコマンドで1つにまとめておきましょう。

or条件でのgrep

普段使ったことなかったので覚え書き。

grep で複数の文字列をor条件でマッチさせるには、

# grep -e "hoge1" -e "hoge2" -e "hoge3" textfile

で可能です。

iモーション作成@SH906i

携帯が壊れてしまったので先日SH906iを買いました。最近の携帯はめちゃくちゃ高いですねぇ~

昔使っていた携帯では、携帯動画変換君でmp3を3gpに変換してSDメモリにコピーしてあげると携帯で聞くことができたのですが、SH906iだとなぜか聞けない。 USBのケーブルを買えばWMAファイルを簡単に転送できるようですが、持ってないしあまり買う気もないので何かよい方法がないか調べてみました。 とりあえず成功したのでメモ。

dBpowerampというツールでAAC形式に変換して、SDカードの「PRIVATE」-「DOCOMO」-「MMFILE」のフォルダにMMFxxxx.M4A (xxxxは0001からの数字)で保存し、LifeKit-microSD管理→管理情報の更新 をしてあげることで、SDカード上のiモーションファイルを再生することができました。

なお、変換先のファイルフォーマットは、m4a Nero(AAC)で、Encoderには、"Force HE AAC"を選択しました。このフォーマットで変換するには、ツールの英語サイトを読めばわかると思いますが、サイト上にある別エンコーダと、Neroのサイトからzipファイルを別途ダウンロードする必要がありました。

オフラインファイルで特定のファイルの同期ができない

Windowsにはオフラインファイルという機能があります。この機能を用いることで、ネットワーク上で共有されているファイルをローカルにキャッシュして、オフラインでも使うようにすることができます。

再びネットワークに繋がった時に、オフラインで変更したファイルは同期することができますが、一部のファイルは同期できません。これはグループポリシーで設定されているようで、slm mdb ldb mdw mde pst db? といった拡張子のファイルが対象のようです。

よって、グループポリシーエディタで変更できます。グループポリシーエディタは以下のようにして開きます。※gpeditコマンドでも起動できます

  1. [ファイル名を指定して実行]を開く
  2. 「mmc」と入力し[OK]ボタンをクリック
  3. コンソール画面で[コンソール][ファイル]→[スナップインの追加と削除]を選択
  4. [スナップインの追加と削除]の[スタンドアロン]で[追加]ボタンをクリック
  5. [グループポリシー]を選択し、[追加]ボタンをクリック
  6. [グループポリシーオブジェクトの選択]で、[完了]ボタンをクリック
  7. 追加を完了したら[スタンドアロンスナップインの追加]ダイアログで[閉じる]ボタンをクリック
  8. スナップインの追加と削除]ダイアログで[OK]ボタンをクリック

左のペインで管理用テープレートのネットワークのオフラインから、「キャッシュしないファイルを指定する」を有効にし、例えばmd5だけ除外したい場合は、拡張子に".db?;.ldb;.mde;.mdw;.pst;.slm"を指定します。

そして、一度ログインし直すと全てのファイルが同期できるようになります。

参考 : http://www.atmarkit.co.jp/fwin2k/win2ktips/578offlf/offlf_02.html

OpenSSL, OpenSSH脆弱性@Debian

Debian etch以降のOpenSSL, OpenSSHで大きな脆弱性が発見されたようです。

apt-get update; apt-get upgradeしただけではだめなようで、鍵の再作成が必要ですので注意が必要そうです。

ps3のバックアップ

PS3の中に音楽ファイルが数千曲入っていて、通常のPS3の機能でバックアップをすると1時間半ぐらいで終わったのに、USBに繋げたハードディスクへ音楽だけコピーすると異様に遅いです。1フォルダに大量のファイルがある場合、PS3のFAT32を扱うアルゴリズムが悪いのでしょうか、25GBぐらいのmp3をハードディスクへコピーするのに6,7時間ぐらいかかりました。

ちなみにWindowsに繋げて同じフォルダに何かファイルコピーしたらすぐ終わります。

ext3のジャーナル(lost+found)再作成

Linuxのext3ファイルシステムにあるlost+foundはファイルシステムのジャーナルです。これのおかげでfsckがすぐに終わります。これを間違って消した場合やおかしくなった場合は以下のようにして再作成ができます。

まずはファイルシステムをチェック

umount /dev/sdc1

e2fsck -fn /dev/sdc1

ext2にいったん戻して、ext3に変換。

tune2fs -Ohas_journal /dev/sdc1

tune2fs -j /dev/sdc1

nForceのマザーM2NPV-VMでのRAID (NVRAID) の使用

数年前に買ったASUSのnForceのマザーボード M2NPV-VMで使っていたIDEのハードディスクが壊れたので、SATAの500GBハードディスク(Hitachi HDP725050LA360)を2台購入してきました。インテルのチップセットと相性が悪いらしいですが、nForceのチップセットなので気にせず購入。←※ちなみに最新のドライバでは修正されているらしいです。

Windows XPにはソフトウェアRAID機能がありますが、ミラーリング(Raid 1)機能がないので仕方なく今まではWindows上にVMWAREを入れて、ゲストOSに物理的に異なる2台のハードディスクを割り当てて、その上でLinuxを動かしてソフトウェアRAIDを組んでファイルサーバにしてデータの保護を行っていました。しかしSATAのハードディスクの場合、マザーボードにハードウェアRAID機能がついているので、この機能を使うことにしました。よってSATAは同じ物を2台用意しました。

仕事柄サーバのハードディスクRAIDはよく使用するのですが、PCのマザーについているRAID機能はまったく使ったことなかったので、どれほど使えるものなのかわかりませんでしたので、まずは情報収集。

最初はマザーボードのマニュアルを読む。NVIDIA GeForce 6150 GPUとNVIDIA nForce 430 MCP chipsetsが搭載されていて、RAID 0, RAID 1, RAID 0+1, RAID 5, JBODに対応している。よしよし。問題なし。

さらに読み進める。RAIDの構築はサポートCDのRAIDマニュアルを参考にしろと。

ここで問題発生・・・・ サポートCDは持っているのですが、付属していたCDが壊れてて、購入当時読み取れず、店に文句いうのも面倒なのでネットからドライバ類をダウンロードしてセットアップした記憶が。今読んでいるマニュアルも実はネットからダウンロードしたPDFなのです。

ASUSのサイトからRAIDマニュアルをダウンロードしようと思ったけど・・・・・ないCry

困ったのでGoogle先生を頼りに調べたことや実際に実験してみたことを以下にメモ。

まず、今回の前提ですが、Windows XPが他のハードディスクにすでにインストールされているとし、このWindowsにRAIDのハードディスクを新たに追加することとします。RAIDのハードディスクにWindows XPをインストールする場合はインストーラがディスクを認識できないので、フロッピーにドライバを入れてインストール時に認識させるj等の別途手順が必要になります。

まずは買ったハードディスクをマザーボードに繋げます。マザーボードにはSATA1, 2, 3, 4 の4つのコネクタがあります。コネクタ1はすでに使っていたので、2,3でRAIDを構築しようとしましたが、後々わかったことで、2,3を使うとWindows上で2がセカンダリ、3がプライマリと表示され紛らわしくなるので、ここでは3,4を使用します。ちなみに、1,2がプライマリとセカンダリの関係、3,4がプライマリとセカンダリの関係になります。(IDE と同じなのか?)

ハードディスクを繋いだらBIOSの設定です。起動時にDELキーを押してBIOSを立ち上げます。そしてAdvanced → Onborad Device Configuration → NVRAID Configuration を選択し、RAID Enable を Enabledにし、以下のようにSATA3と4をEnabledにします。

bios_raid

そしてBIOS設定をセーブし再起動します。

再起動するとBIOSの画面で

Press F10 to enter RAID setup utility . . .

と表示されるのF10キーを押して、RAIDの設定画面(MediaShield Utility)に入ります。なにも設定していないと以下の画面が表示されます。

array_before

まずはRAID Modeで今回使用するMirroringを↑↓キーで選択しておきます。(デフォルトはMirroringなので変更しなくてよいです)

そして→キーを押して左側に表示されている二つのハードディスクを右に移動します。

array_after

そしてF7キーを押して終了すると、下記のように作成したRAID一覧が表示されます。StatusがHelthyならば正常です。これで正しければCtrl-xを押して終了します。

array_list

設定を終了すると普通にWindowsを起動します。初めてBIOSでRAIDをEnabledにした場合、Widows起動後に新しい ハードウェアを認識しますので、RAIDドライバをインストールします。今回はAUSUのサイトで公開されているRAIDMakeDisk_XP.zipのドライバを使用しました。ドライバインストール後は確か再起動を求められたと思います。

再起動完了後、Windows上でRAIDを操作ツールというのがないことに気づき、調べたところMediaShieldというツールがあるらしいのですが、サポートCDが使えないのでネットを探したところ、サイトからダウンロードできました。サイトの左にある"Get the latest drivers for your NVIDIA nForce MCP"より

Product Type    : nForce

Product Series  : nForce 4 Series

Product         : GeForce 6150/nForce 430

Download Type   : Driver

Operating System: Windows XP

Language        : Japanese

を選択しserchをクリックすると、ダウンロードページに移動しますので、ダウンロード、インストール、再起動します。インストールすると、現在導入されているドライバが置き換えられますので注意です。

これでMediaShieldが使用できるようになりましたので立ち上げますと、以下のような画面が表示されます。2台のハードディスクが正常に動作しているのがわかります。

media_shield

あとはコントロールパネルのコンピュータの管理のディスク管理からパーティションを作ることで、普通に使うことができます。普通のハードディスクと同じ方法ですので、割愛します。 これで使うことができるようになりましたが、ディスク故障時にどのようになるかわからないので、意図的にRAID破壊してみました。

まずはポート4のSATAケーブルを抜いてみます。すると以下のようにWindow上でメッセージが表示されますが、ミラーリングなのでSATA3に繋がっているディスクだけで正常に読み書きすることができます。

broken_popup

この時、MediaShieldにはステータスに劣化と表示され、ディスクが一つになります。 ※ディスクを物理的に壊すことはできないので、物理的に壊れた時はディスクは二つ見え、表示も変わると思います。

broken

ちなみにSATAケーブルを抜いたディスクを他のPCに繋いでみましたが、問題なく読み取ることができましので、データがきちんとミラーリングされていることも確認しました。

抜いたディスクをすぐにSATA4のポートに繋ぐと、以下のようなメッセージが表示され、何事もなかったように正常動作に戻りました。これは抜いた後に残ったディスクに何もアクセスしていない上、抜いたディスクにも何もアクセスしていないからだと思います。

add_disk_popup

よって、再びSATA4のディスクを抜いて、次はWindows上でディスクにアクセスすると以下のようなメッセージが表示されました。

search_popup

抜いたディスクも他のPCに繋いでフォーマットし、再びSATA4のポートに繋ぐと、ミラーリングのポートなのに別のディスクとして認識され、サーバのように自動でRAIDの再構築は始まりません。このときMediaShieldは以下のような状態です。

add_new_disk

再構築にはMediaShieldを操作して、再構築を手動で行う必要があるようです。よって、Windowsが必須になります。 RAIDの再構築(リビルド)は、セカンダリマスターのディスクを右クリックして、配列の削除を選択します。 ※今回抜き差ししたのがSATAのポート4のディスクなので、セカンダリマスターを削除します。SATA3を抜き差しした場合削除するのはプライマリマスターです。間違った方のディスクを削除してしまうと、データが復旧できなくなるので要注意です。SATA1と3, SATA2と4でRAIDを組むと、どちらの表示もおそらくプライマリマスター、またはセカンダリマスターになってしまい区別がつかなくなる可能性がありますので、上でも書いたとおり、SATA1と2, または3,4でRAIDを組むのがよいと思います。

del_array

すると下記のように、 削除したディスクが空きディスクとして認識されます。

before_rebuild

さらにこの空きディスクを使って自動で再構築が始まりました。rebuild

再構築は500GBのハードディスクで4時間程度かかりました。なお再構築中は以下のようなメッセージがたまに表示されます。

rebuild_popup

ちなみにリビルド中にたまたま強い地震が発生したので PCの電源を一度落としましたが、Windows再起動後は正常に続きからリビルドが動き出しました。

== 2010/1/31 追記 ==

Windows XPの場合、システムドライブにRAIDを使うとWindowsインストール時にドライバーを求められますが、Windows 7では特に何もしなくてもディスクは使用できました。

XREAでのWordpressのファイルアップロード

初めてファイルアップロード機能を使おうとしたら動かなかったのでメモ。

wp-adminのディレクトリに以下の.htaccessを作成

<files upload.php>
AddHandler application/x-httpd-phpcgi .php
</files>

同ディレクトリに以下のphp.iniを作成

 session.save_path = /virtual/{ユーザID}/tmp

ディレクトリを作成

# mkdir /virtual/{ユーザID}/tmp
# chmod 700  /virtual/{ユーザID}/tmp

アイソレーションレベル

データベースはあまり詳しくないので、メモ書き。

SQL-92の仕様では、アイソレーションレベルというものがあり、READ_UNCOMMITTED, READ_COMMITED, REPAETABLE_READ, SERIALIZABLEという4つのレベルがあります。これを"SET TRANSACTION ISOLATION LEVEL"文で設定できます。これを設定することで、データベースからデータを読み込む際の挙動がかわります。

それぞれの意味は以下の通り。下にいくほど同時実効効率が悪くります。(NONEを除く)

アイソレーションレベル トランザクションサポート 不正な読み込み
ダーティリード ノンリピータブルリード ファントムリード
READ_UNCOMMITTED 発生 発生 発生
READ_COMMITETED 未発生 発生 発生
REPEATABLE_READ 未発生 未発生 発生
SERIALIZABLE 未発生 未発生 未発生
NONE × 発生 発生 発生

ここでの なんとかリードっていうのは以下のような意味です。

  • ダーティリード
    • トランザクションAとBがあって、Aが更新内容をコミットしていないのにBにはその内容が見えてしまうこと
  • ノンリピータブルリード
    • トランザクションAとBがあって、Aが更新している最中にBが複数回のSELECTをした場合に、複数回のSELECTの結果が違うこと
  • ファントムリード
    • トランザクションAとBがあって、Aがrowの追加・削除している最中にBが複数回のSELECTをした場合に、複数回のSELECTの結果が違うこと

マネージドBeanのスレッドセーフについて

サーブレットは、web.xmlのservlet要素毎にひとつつくられるため、複数スレッドから同時にアクセスされる可能性があります。そのため、スレッドセーフでなければなりません。

JSFのマネージドBeanもサーブレットです。ただし、条件がスコープの範囲によって変わってきます。アプリケーションスコープ、セッションスコープはアプリケーション毎にひとつ、セッション毎にひとつオブジェクトが生成されます。そのため複数スレッドからの同時アクセスの可能性がありえます。しかしリクエストスコープはリクエスト毎にひとつオブジェクトが生成されるので、複数スレッドは考慮する必要はありません。

PAM認証でのchroot

サーバのセキュリティを確保するためにchrootを使用する方法がありますが、サーバが対応していないと諦めていましたが、OpenSSHサーバのようにPAM認証を利用するサーバではPAMの機能で実現することができます。

参考 : http://www.asahi-net.or.jp/~AA4T-NNGK/jail2.html

この方法を使うことで、OpenSSHでscpやsftpだけ許可したい場合、ユーザをjailの中に閉じこめることができます。

createrepoコマンド@ RHEL5

createrepoコマンドはyumのリポジトリを作成するためのコマンドです。

基本的にrpmファイルを用意して、このコマンドを以下のように叩くだけでOKです。

# cd RPMのあるディレクトリ
# createrepo .

RHELのDVDの中身をそのままリポジトリにしたい場合もあると思います。この時も上記のようにコマンドを叩けばよいのですが、それだけだとアプリケーションの追加と削除で表示されるアプリケーションのグループが表示されません。グループはcompファイルに記述されているので、createrepo時にこのファイルをコピーしてあげればOKです。

まずはDVDをまるごと適当な所にコピーし、 RPMが格納されている Serverディレクトリに移動。repodataディレクトリをバックアップし、createrepoで新たにリポジトリ情報を作成します。

# cd Server
# mv repodata ..
# createrepo -v -g ../repodata/comps-rhel5-server-core.xml .

PS3のアップデートチェック

PS3をインターネットに繋いでいると、起動時にソニーのサイトにアップデートチェックをしにいきます。つまり、ソニーが日本全国のPS3ユーザのPS3使用頻度を監視できるということです。パケットチェックを行ったことがないので、実際にはアップデートチェック以外の情報、例えば起動したゲーム情報やログインユーザなどがソニーのサーバーに送信されているかもしれません。これって恐くないですか?

DNSをLAN内で構築してIPを偽装したり、Proxyサーバやファイアウォールを使ってフィルタリングしたりすることで、 アップデートチェックを回避することは簡単にできそうですが、こんな疑い持たれないように、自動アップデートチェックをオフにする機能とかつけて欲しいものです。

JBossのHypersonicSQL(hsql)管理ツール起動方法

JBossには気軽に使用できるHSQLが組み込まれています。ちょっとしたDBを使いたい場合に便利です。

JBossのトップページからアクセスできるJMXコンソールのservice=Hypersonicをクリック後、startDatabaseManager()のInvokeをクリックすることで管理コンソールにアクセスできます。

JSPのJSTLとJSFの混在 - Unified EL(Expression Language)

JSFだけでJSPを書いていると、JSPのタグも使いたくなることがあります。今回maznがやりたいと思ったことは、JSFで複数のテーブルを繰り返し出力させる方法です。

単一のテーブルならばJSFのタグ( <h:dataTable>)を使って簡単に作成できますが、さらにこのテーブルを以下のように複数作りたい時に、JSFだけのタグだとうまくいきません。

名前 hogehoge
年齢 21
性別
名前 gehogeho
年齢 45
性別

そこで少し調べて見たところ、JavaEE5からのJSP2.1とJSF1.2からサポートされているUnified-EL (Unified Expression Language)で簡単に実現できました。

JSPはEL式を"${ ... } "と、JSFでは "#{ ... }"と書きます。JavaEE5からはこの二つを混ぜることができます。つまり複数テーブルを出したい場合はJSTLの<c:forEach>タグを使ってループさせ、中でJSFのタグを使って以下のような感じで複数テーブルを作成することができます。

<c:forEach item="#{personManagedBean.datas}" value="data">
    <table>
    <tr><td>名前</td><td><h:outputText value="#{data.name}"/></td></tr>
    <tr><td>年齢</td><td><h:outputText value="#{data.old}"/></td></tr>
    <tr><td>性別</td><td><h:outputText value="#{data.sex}"/></td></tr>
    </table>
</c:forEach>
 ※なにも見ずに書いたので間違ってるかも

personManagedBeanというマネージドビーンのdatasはList型で、1テーブルに必要なデータが複数入っています。この中の1データをdataという変数で取り出し、JSFの<h:outputText>で内容を出力しています。今回は<table>を使っていますが、<h:dataTable>でも動くと思います。

ちなみにJBoss4.2のJSP, JSFは対応しています。

RD-S601の不具合

少し前にVARDIAを購入した記事を書きましたが、先日録画で不具合が発生してしまいました。

VARDIAのRD-S601で録画した番組の映像と音声が微妙にずれる事象です。地上アナログ放送の録画で、0.5秒ほど音声が遅れていました。PCで録画したときはこのような事象がよく発生していたのですが、VARDIAでも発生するとは・・・ 残念です。

あと、いろいろ使用していると、いろいろと改善して欲しい点がでてきましてので書いておきます。(東芝社員さんが見ていたらよろしくお願いします)

  1. いろいろな所で書かれているから有名ですが、起動が遅いです。電源をいれっぱなしにしておきたくなります。
  2. ADAMSでテレビ番組を受信していると、かなり操作が制限されてしまいます。基本的にADAMSが動き出すと今見ている録画番組以外が見られなくなってしまいます。
  3. 録画番組の削除ですごく待たされます。ゴミ箱への移動は早いので、今はしかたなくゴミ箱にある程度ためてから一気に消しています。
  4. 録画中に他の番組を見ていると、録画終了時に自動電源OFFがキャンセルされるのですが、今見ている番組の最中に他の録画が始まった場合、今見ている番組が終了しているのに録画終了後に電源がOFFになりません。(たぶん) なので、気づいたら電源が入りっぱなしになっていることがあります。
  5. 東芝がHD-DVD撤退したので、早くBlueray対応のVARDIAを作った欲しい。
  6. 追従機能が安全側に倒れてくれるのは嬉しいですが、精度がいまいちです。特に延長になっていないのに、頻繁に追従機能が動いているようです。
  7. ネット機能があるのは嬉しいですが、JavascrpitやJAVAが多様されているのでリバースプロキシなどでうまく動かない部分があります(こんな使い方する人あまりいないと思いますが)。もっと、シンプルなネット機能(WEBベースのAPI)をつけて欲しいです。
  8. 省電力モードにするとWOL機能もOFFになってしまいます。

いろいろ書いてしまいましたが、基本的にVARDIAの多機能に満足しています。これからもっと使いやすい機種がでれば、S601が壊れた後も是非VARDIAを使いたいですね。

このブログについて
プライバシーポリシー・お問い合わせ等
購読する(RSS)
記事検索
アーカイブ
カテゴリー
  • ライブドアブログ