Posted by & filed under Linux, tips.

Raspberry pi に Arch linuxを入れて家の録画サーバからビデオを視聴する環境を構築したので、メモ。
このドキュメントを見られた方へ、xbmcを主体で考えておられるならおそらくraspbmcをインストールするのが正しい運用だと思われる。Archにする強い動機がなければ選択しない方が良いだろう。

mpeg2デコーダライセンスを購入する

地デジ放送をデコードするにはraspberry piでは有償のライセンスが必要となる。
ソフトウェアデコーダでは視聴に耐えない。なお、ライセンスはmpeg2のハードウェアデコードにのみ要求されているので、h264に変換したものしか再生しないのであれば、必要ない。
その辺りはこちらの記事に詳しい。

http://www.raspberrypi.com/mpeg-2-license-key/

届いたキーは/boot/config.txtに書く。

xbmcのインストール

pacman -S xbmc
※ git最新版はビデオ再生中にハングするなど運用に適さないので避けること。

mplusフォントの導入

Archのxbmcのデフォルトテーマは日本語フォントをサポートしていない。
幸いスタイリッシュなフォントがフリーで入手できるので、それを利用する。
以下のURLからMPlusフォントのtarをダウンロードする。

http://mplus-fonts.sourceforge.jp/

一度xbmcを起動すると作成される .xbmc の addons 以下、もしくは /usr/share/xbmc/addons 以下のいずれかのskin.confluence(confluenceはテーマ名。違うテーマを利用している場合は名称がマッチするディレクトリを選択する)

録画ストレージとのリンク

xbmc内蔵機能でnfsを始めとする沢山のプロトコルが利用可能だが、ビデオ再生に関連する部分については敢えて切り離すこととした。録画サーバではnfsv4が動いていて、デフォルトではtcp接続になるためだ。

omxplayerで検証したところ、tcpでは処理コストが高く、オーバークロックしてもスループットが追い付かなかった。BSの録画に関しては3秒程でバッファが枯渇して再生がブツ切りされるという有様だった。

ブート時にはネットワークが起動しない為、遅延マウントとした。

chinachu.local:/var/videos /mnt/chinachu nfs vers=3,udp,nolock,noauto,x-systemd.automount

録画ストレージは遅延マウントにする録画ストレージとはnfsで接続する形にした。
avahiでホスト名参照させると、ブート直後には名前解決ができないため、遅延マウントにする。

nfsは敢えてv3, udp, nolockで構築する v4のtcpでは遅延しまくりで視聴に耐えなかった。(rbp向けのomxplayerで比較)

今日はここまで。

Posted by & filed under excel, メモ.

開いた複数のExcelブックを行単位でコピーし、1つのシートに連結するマクロ。 依頼があって書いた。

Option Explicit

Function writeRow(ByVal t As Range, ByVal s As Range) As Range
    s.Copy t
    Set writeRow = t.Cells(2)
End Function

Sub concatenate(ByVal target As Workbook, ByVal sources As Collection)
    Dim t As Range
    Dim src
    Set t = target.Sheets(1).Range("A1")
    For Each src In sources
        Dim srcsh As Worksheet
        For Each srcsh In src.Sheets
            Dim lastRow As Long
            Dim cur As Range
            Set cur = srcsh.Range("A1")
            lastRow = cur.SpecialCells(xlCellTypeLastCell).Row
            Do While cur.Row <= lastRow
                Set t = writeRow(t, cur.EntireRow)
                Set cur = cur.Cells(2)
            Loop
        Next
    Next
End Sub

Sub main()
    Dim target As Workbook
    Dim sources As New Collection
    Dim wb
    
    For Each wb In Application.Workbooks
        sources.Add wb
    Next

    Set target = Application.Workbooks.Add()
    
    concatenate target, sources
End Sub

Posted by & filed under langrid, メモ.

忘れるのでメモ
言語グリッド内のサービスを複合サービスで呼び出す場合は、サービスIDを以下のフォーマットにする。

http://yourhost.com/your/service/?wsdl

認証が必要な場合

http://id:password@yourhost.com/your/service/?wsdl

Posted by & filed under java, langrid.

ドキュメントがないので、ソース から確認した。

バインディング設定内容を以下に記載する。
「バインディング」やそもそもこの記事の主題が何なのか、という点については本家ドキュメントを参照のこと。

  1. MorphologicalAnalysisPL
    サービスタイプ MorphologilcalAnalysis が指定できる。指定されたサービスによる形態素解析が行きの翻訳対象の文に対して実行される。返りの翻訳には実行されない。(返りも要るんちゃうの?と思うが)
    補記2014/4/11: 形態素解析によって辞書単語の抽出精度を上げている。戻りの時には辞書単語の抽出を行わないので不要とのこと。
  2. ForwardTranslationPL
    サービスタイプ Translation が指定できる。指定されたサービスが行きの翻訳を実行する。
  3. BackwardTranslationPL
    同上。指定されたサービスが返りの翻訳を実行する。
  4. BilingualDictionaryWithLongestMatchSearchPL
    サービスタイプ BilingualDictionaryWithLongestMatchSearch が指定できる。指定されたサービスに登録されている単語について、翻訳実行前に置換され、専門用語などの翻訳がおおむね正しくなされるようになる。行きと返り両方について置換がなされる。ちなみにBilingualDictionaryWithLongestMatchSearchCrossSearchを挟む事で複数の辞書が使える。

Posted by & filed under debian, java, Linux.

やっと見つけた。debianでeclipse WTPが動かなくてダダ嵌りしていたが、eclipse.iniを編集して解決できるようだ。
Web browserのメニューを開こうとしたり、preferencesでWeb browserの設定を編集しようとすると、おもむろにeclipseが終了するというもの。

参考: crash: fatal error in soup_session_feature_detach with WebKitGTK+ >= 1.11.91

-Dorg.eclipse.swt.browser.DefaultType=mozilla
-Dorg.eclipse.swt.browser.XULRunnerPath=/usr/lib64/xulrunner/

Posted by & filed under Linux, ssh, tips.

たまにしかせず、忘れるのでここにメモ。
パブリックキーをなくしてしまったときの生成コマンド。

$ ssh-keygen -y -f ~/.ssh/id_rsa

Posted by & filed under excel, VBA.

三月に一回くらい同じようなロジックを公私共に書いてる気がするので、ここに記す。

実行と同時に開くインプットボックスにパスを書くと、そのパス以下のファイル全てをスキャンし、発見したExcelブックを開き、全シート毎に処理をして、保存して、閉じるという一連の処理を実行する。
 Option Explicit
 ' ここを実行する
 Sub StartProgram()
     Dim filepath As Variant
 
     filepath = InputBox("フォルダパスを入力してください" & vbCrLf & "Ex. C:\Users\Somewhere", "ターゲットフォルダの指定")
 
     ' キャンセルすると "" が入るから、そんときはやめる
     If filepath = "" Then Exit Sub
 
     Dim fso As Object ' FileSystemObject
     Dim a
     Dim fld As Object ' Folder
     Set fso = CreateObject("Scripting.FileSystemObject")
 
     Set fld = fso.GetFolder(filepath)
 
     FolderProcess fld
 End Sub
 
 ' フォルダの中を漁ってXLSファイルを処理する
 Sub FolderProcess(ByVal fld As Object)
 
     ' サブフォルダを掘る
     Dim childFld As Object ' Folder
 
     For Each childFld In fld.SubFolders
         FolderProcess childFld
     Next
 
    ' ファイルを一個づつ見る
    Dim xlsfileRe As Object ' RegExp
    Dim childFile As Object ' File
    Dim mths As Object
    Set xlsfileRe = CreateObject("VBScript.RegExp")
    xlsfileRe.Pattern = ".xlsx?$" ' xlsかxlsxか
    xlsfileRe.IgnoreCase = True

    For Each childFile In fld.Files
        Set mths = xlsfileRe.Execute(childFile.Name)
        ' マッチがなければ違うファイル。
        If mths.Count > 0 Then FileProcess childFile
    Next
End Sub

' ファイル一個の処理
Sub FileProcess(ByVal f As File)
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = Application.Workbooks.Open(f.Path)

    For Each ws In wb.Sheets
        SheetProcess ws
    Next

    ' なんか警告言うてくることがあるので、黙らせる
    ' とりあえずこれだけでなんとかなったけど、ならない場合はググってください。
    Application.DisplayAlerts = False
    wb.Save
    wb.Close

    ' 黙らせたやつを戻す
    Application.DisplayAlerts = True
End Sub

Sub SheetProcess(ByVal ws As Worksheet)
    ' ここでシートごとの処理

    ' 試しにA1セルにみたよと入れる。
    ws.Range("A1").Value = "みたよ"

End Sub

Posted by & filed under debian, Linux, RAID, tips.

前回の投稿からかなり経ったが、続き。

あれから難なくRAID5の構築自体は完了したのだが、GRUBからの起動時にちゃんとinitが実行されないという障害にドハマりして、記事の纏めに時間が掛かってしまった。

とりあえず前回作成したRAID5の癖にディスクが2本しかないアレイに、もう一つのディスクを追加する。

# fdisk -H224 -S56 /dev/sda
前回sdbとsdcをアレイ構築に使った。パーティションIDを'fd'に指定するとmdadmが自動識別してくれるので、やっておくと絶対によい。作ってしまったsdb, sdcのパーティションについても、後から変更できる。

# mdadm /dev/md0 --add /dev/sda1
スペアとしてディスクが追加される。

# mdadm --grow /dev/md0 --raid-devices=3
RAID5のアレイが3本になり、パーティションサイズが拡張される。操作はバックグラウンドで実行されるが、ディスクのサイズによって非常に時間が掛かる。ちなみに自分の古いPCでは操作の完了まで20時間かかった。

# cat /proc/mdstat
この結果で状況が監視できる。

# resize2fs /dev/md0
サイズ拡張。自動でパーティション最後まで拡張してくれる。
ここ以降は/(root)をRAID5にした場合に必要な操作
# dpkg-reconfigure grub-pc
障害時に起動しないトラブルを避ける為、アレイに属するディスク全てをgrubのインストール先ディスクとして選択し、再構成しておく。

# update-initramfs -u -k all
initrdを更新する

本来はここまでの操作で再起動すれば普通に立ち上がってくるのだが、自分のケースではRAID5アレイをROOTに使っていたために、GRUBでブートができなくてハマった。
原因はカーネルがディスクドライバをロードする前にinitrdスクリプトのmdadmコマンドが実行されてしまい、initrd中にROOTが発見できないということであった。
以降はinitrdでrootが見えずフォールバックしてしまう人向け。

# cp -a /usr/share/initramfs-tools/scripts/local-top/mdadm /etc/initramfs-tools/scripts/local-top
# vi /etc/initramfs-tools/scripts/local-top/mdadm
viで編集し、冒頭にsleep 5を挿入する。アレイ認識の実行前にディスクドライバがロードが完了するようにする。

# update-initramfs -u -k all
設定弄ったら、initrdは忘れず更新する

今日はここまで。

Posted by & filed under 未分類.

先日Chinachuサーバで愛用していた2TBのWD20EARSが2歳半という若年で他界したので、反省を生かし、今回はRAIDを組む事にした。
マザーボードに組込まれているRAIDコントローラはマザーボードが逝ったときに詰むことがあるので、ソフトウェアRAID(5)を利用する。

これまでWD20EARSを2本所有しそれぞれにmpegを満タンに近い状態まで保存していた。
よってデータを整理するにしてもRAID構築の為に3本購入することは避けられないかと考えていたが、実はそんな必要はなくRAID5をスモールスタートさせることができるという記事を見付けたので、それに従って操作をした。

参考 Convert Linux Software RAID1 to RAID5

# fdisk -H224 -S56 /dev/sdb
パーティションを切る…

# apt-get install mdadm
# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=2 /dev/sdb1 /dev/sdc1
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Jan 5 02:20:38 2014
Raid Level : raid5
Array Size : 1949087232 (1858.79 GiB 1995.87 GB)
Used Dev Size : 1949087232 (1858.79 GiB 1995.87 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Update Time : Sun Jan 5 02:20:38 2014
State : clean, degraded
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Name : debian:0 (local to host debian)
UUID : d2ce37ab:e16aa688:79e4e309:90078281
Events : 0

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 0 0 1 removed

2 8 33 - spare /dev/sdc1
detailの内容を出力するとraid5になっている
これで、データの移行が完了したところでmdadm –growを使いディスクを追加すると、リバランスが実行されて3本になる、らしい。

今日はここまで。続きは後日。