HOME

コミックマーケット 84 に参加して

8月10~12日に開催されたコミックマーケット84に参加。
参加日程は、11日に一般参加、12日にサークル参加という感じ。今回、友人が会場すぐ側のホテルを予約するという大技を決めていたので、ホテルで10日、11日の2泊という豪華な行程となった。ホテル宿泊+サークル参加とか、何か物凄いコミケセレブ感…!(気のせい)
ちなみに、10日はサークル準備と移動に費やした。仕事が忙しくて予定が遅れに遅れてた上、数日前に風邪でダウンしてしまい、とんでもなくギリギリなスケジュールで動いてたもので…。

11日は一般参加という事で、ホテルから普通に並んで普通に会場入り。ちなみに朝はホテルの窓から念願の「人がゴミのようだ」ごっこができました。

C84 ホテルの窓より

この日は朝から物凄い蒸し暑さだった。後で知ったけれど、この日は観測史上初めて、東京の最低気温が30度を下回らなかった日だったそうで。そのため、朝並んでる時からちょっと異常なレベルで汗がダラダラ流れてきて辛かった。行き先は企業スペースのファルコムブースと、評論系のサークル…だったのだけど、ファルコムブースで目的のFalcom jdk BAND 2012 Super Live in NIHONBASHI MITSUI HALLのBlu-rayと、ふぁるこむフィールドざんまいを購入した辺りで暑さでだいぶやられてしまい、評論系は数サークルを流した時点で早々に引き上げてしまった。ホテルに戻ると頭痛が酷く体調がおかしかったのでベッドでダウン。完全に熱中症です、本当にありがとうございました。今回はホテルがあってくれて助かった…。いや-、何年か参加してるけど、ここまで酷いのは初めてだった。会場でも車椅子や人を乗せた台車が激しく往来してて、明らかにこの日は色々おかしかったなぁ。病み上がりだった自分も良くなかったのだけど。
その後ホテルでしばらく休んだところ、何とか体調も回復。

12日はサークル参加ということで、朝ゆっくりホテルから出発して直接会場に乗り込む。スペースに辿り着いて準備、スタッフに見本誌と参加証渡して手続き完了。

C84 スペースにて

とりあえず体調の心配もあり、ファルコムスペース等に買い物に行った以外はほぼ売り子に徹する。
今回は「音楽ファイル管理の手引き」という48ページの本を出してみた。ただ終わってみると、前回・前々回に比べてあまり売れなかった。むしろ前回出した本の方が売れてたような。もっとも、12日は月曜日の平日だったので普通に出社してる人も多かったという理由もあるのだろうけれど…。こういうい技術系の本を買いに来る層は、普通に社会人の人も多そうだしなぁ。ただ個人的には、自分で本作ってそれを自分で売って、それを買いに来てくれる人がいるという一連のイベントや作業全体を楽しんでるので、特に問題はない。
まぁ何はともあれ、来訪して頂いた方、本を購入して頂いた方、本当にありがとうございました。

そんなこんなで今回のコミケも終了。直前まで仕事やプライベートな用事やらで目の回るような忙しさだったけど、何とか無事乗り越えられたので良かった。今回はスケジュールに全く余裕が無かったので、またもや自前搬入となってしまったのが心残り。次の機会があれば印刷屋に出したいな-、と。

余談1。参加中はホテルのビッフェで食事をしたのだけれど、そこの客がキャラTシャツ着てるような人がいっぱいだったのが印象深かった。ちなみに、友人は半年前の予約受付開始時から予約を入れてたそうで(それぐらいやらないと予約できないそうな)、そりゃ半年前からこの日に予約入れるような客層は9割9分ぐらいコミケ客だよねー、と妙に感心した記憶。

余談2。今回、11日はザナドゥのTシャツ、12日はぐるみんのTシャツを着て参加。いつもは普通の格好で参加してたけれど、今回は何となくそれっぽい格好で参加してみた。特に深い意味は無く、気分的な物。ぐるみんTシャツでファルコムサークルの前をウロウロするのはちょっと気恥ずかしかった…。

関連

Melog: コミックマーケット84 サークル参加のお知らせ

コミックマーケット84 サークル参加のお知らせ

もう1週間切ってるけれど、一応告知。
8月10~12日にかけて開催されるコミックマーケット84の3日目にサークル参加します。

  • 参加サークル名:Melog
  • 日程:8月12日(月)
  • スペース:東地区 ペ 11a (画像)

今回は、以下のコピー本を出します。

  • タイトル:音楽ファイル管理の手引き
  • ページ数:48ページ
  • 価格:300円

表紙は、以下のような感じです。相変わらず適当です…。

C84 音楽ファイル管理の手引き 表紙

内容は、タイトルの通り音楽ファイルの管理について…と書いてしまうと身も蓋もないですが。技術的な内容というより、ノウハウ本みたいな感じです。大した内容ではないですが、割と色々書いたつもりです。章の構成は以下の通り。

  • はじめに
  • 1. 概要
  • 2. 音楽ファイル
  • 3. タグ情報
  • 4. アルバムアート
  • 5. 歌詞データ
  • 6. 音楽ファイルの運用・管理
  • 7. 音楽配信サービスの利用
  • 8. おまけ
  • 9. あとがき

サークル参加は3回目なので、割と慣れてきた感じですが、相変わらずの計画性の無さと仕事の忙しさのせいで、今回も印刷屋を逃しました…。またもや自前搬入です。
あと、前々回の「HTPC構築の手引き」、前回の「リモート再生の手引き」も併せて出します。
撤収予定時間の2時頃。前回は新刊70部刷ったら午後1時で完売したので、今回の新刊は100部刷ります。これぐらいあれば多分、撤収時間まで残ってると思いますが…。

お暇ができた際にお立ち寄りいただけるだけでも嬉しいです。声を掛けていただけるともっと嬉しいです。
それでは、当日よろしくお願いします。

XBMCで音楽再生時に歌詞を表示する方法

XBMCで以下の画像のように、曲に同期した歌詞を表示させる方法について。

XBMCの歌詞表示

この内容は、以下のような環境があることが前提。

  • XBMCがインストールされている。なお、ここではWindows環境を前提とする。
  • XBMCのアドオンであるCU LRC Lyricsがインストールされている。
  • 再生する音楽ファイルと同じフォルダに、「音楽ファイルのファイル名.lrc」というファイル名の同期歌詞ファイルが置かれている。
  • XBMC標準のスキンConfluenceを使用している。(多分、他のスキンでも良いと思う)

これらの条件を整えた状態で音楽ファイルを再生すると、全画面でビジュアライザー表示した時、またはプレイヤーコントロールの子ウィンドウを表示した時、以下のような歌詞アイコンが表示されるので、これを押すと画面上に歌詞が表示される。

全画面表示の歌詞表示ボタン

プレイヤーコントロールの歌詞表示ボタン

ただ、このアイコンを押すためにはいくつかの操作が必要になり面倒なため、あまり頻繁に表示することはない。でも、たまには歌詞が見た時もある。そこで、曲再生時に自動的に表示させる方法はないかと探してみたところ、以下のページを発見。

Automatic display of Lyrics

これによると、現在利用しているスキンに含まれている「MusicVisualisation.xml」というファイルの「<controls>」タグの直前に、「<onload>RunScript(script.cu.lrclyrics)</onload>」という一文を追加する事で、全画面ビジュアライザーを表示した際に自動的に歌詞が表示される。
MusicVisualisation.xmlファイルは、Confluenceスキンの場合は「(XBMCインストールフォルダ)\addons\skin.confluence\720p\」フォルダの中にある。なお、skin.confluenceフォルダを「(Windowsユーザーフォルダ)\AppData\Roaming\XBMC\addons\」フォルダにコピーすると、そちらが優先して使用される。元データを変更せずに、XMLファイルに修正を加えられるため、どちらかと言えばこちらの方がお勧め。

ちなみに、プレイリストから再生した場合やファイルリストから再生した場合など、別のタイミングで自動的に歌詞表示をしたい場合は、同フォルダ内のXMLファイルに、同様の変更を加える。それぞれのファイルが何れかのタイミングの画面(もしくは画面部品)を示しているはずなので、そのファイルで「<onload>RunScript(script.cu.lrclyrics)</onload>」を記述すれば良い。
どのファイルがどの画面かは自分も知らない。ファイル名とファイルの中身を見て勘で判断するか、XBMC Skinning Manual – XBMCから調べるしかない。

Androidのストレージ種別

今夏に向けて書いてる本用に書いてた内容を、せっかくなので一部ここにも書いておく。
Androidのストレージ種別について。何でこんなモノ書こうと思ったのかは自分でもよく分からない。

Androidのストレージ構成はやや複雑な上、メーカーや携帯キャリアによって表記も統一されていません(そのため、場合によっては似たような表記が別の領域を指す場合もあります)。インターネットで検索しても、発言者によってかなり表記が揺れるため、発言者がどの領域に対して言及しているのか、特に注意を払う必要があります。

内部・外部

分類

概要・用途

内部ストレージ
(本体メモリ、
内蔵メモリ)
システム領域 システムデータが収められている/system領域等。OSやシステムデータ、プリインストールアプリ等が保存されています。通常アクセスすることはありませんし、サイズを気にすることもありません。
データ領域 アプリ本体やアプリデータが保存される/data領域。Androidのストレージ確認した際に、アプリがインストール可能な残りサイズとして表示されるのがここです。システムメモリ、アプリケーションストレージ等と表記されます。
ユーザー領域 ユーザーデータを保存する領域。写真やダウンロードデータ等が保存され、利用者が自由にアクセスできる外部ストレージ(SDカード)と同様に振る舞います。古い機種の中には、これが存在せずに、外部ストレージに依存するものもあります。ユーザーメモリ、内蔵ストレージ等と表記されます。
外部ストレージ
(外部メモリ)
SDカード

 

内臓のカードスロットに挿入したSDカード。通常はmicroSDを利用します。SDカードの領域なので、当然サイズは挿入したSDカードに依存します。ユーザー領域の容量が多い場合は特に利用しなくて問題ありません。カードスロットが存在しない機種は、当然ながら利用することはできません。
USBストレージデバイス USBホスト機能(OTG [On-The-Go])を持つ一部の機種では、USB端子に接続したストレージデバイスをマウントすることができます。USBホストに対応した機種はそれほど多くはありませんが、外部ストレージから直接読み書きできる点がメリットです。

なお、これ以外にPCでお馴染みのメインメモリも存在します。日本語環境の場合、ストレージ領域も「メモリ」と表現する場合が多々ありますが、単に「メモリ」と表記した場合はこちらを指す可能性もある点に十分注意しましょう。
また、キャリア表記では、RAM=データ領域、ROM=ユーザー領域を指している点にも注意。

X-Finderでフォルダ設定を共通化する

タブファイラー・X-Finder

高機能なタブファイラ、X-Finder(現バージョン:11-12)について。

このツールは、カスタマイズ性が高く様々な変更を行う事ができるが、その反面設定がとても面倒臭いというデメリットもある。
そんな設定の中で(個人的に)特に面倒なのが、フォルダ設定について。フォルダ設定とは、フォルダとそれを開いてるタブの表示方法等(カラム幅やソート順、タブ色等)を、フォルダパス別に設定する事ができる。
メニューの「ツール」→「フォルダ設定」から設定できるほか、「表示」→「フォルダの表示設定を保存」で現在のフォルダ表示をフォルダ設定に追加することができる。

X-Finder フォルダ設定

この設定の厄介な所は、普通に設定を入力しても「表示設定が継承されない」という点。全てのフォルダや特定のサブフォルダ内で共通で設定したい内容(ソート順や表示項目)等があったとしても、全てに同じ内容を設定しなくてはいけない。

例えば、以下のようにCドライブ以下を対象とした設定があったとする。

Cドライブ設定

ここでは、以下のような設定となっている。これは、フォルダを詳細表示、カラム内容及び横幅自動調整、名前順でソート、という設定。

ViewStyle:4
Columns:名前,-2,サイズ,-2,種類,-2,更新日時,-2
Sort:名前

次に、C:\User\以下のユーザーフォルダを対象とした設定を追加したとする。

X-Finder ユーザーフォルダ設定

ここでは、以下のような設定となっている。これは、タブの色を変更する設定。

Set:TabColor=#FF0000,#F0F0F0

この場合、ユーザーフォルダ以下のフォルダを開いた場合、Cドライブの設定は無視されて後から追加した設定のみが適用される。つまり、フォルダの表示内容はデフォルトに戻され、タブの色変更のみが適用される。なお、優先されるのはフォルダ設定の中で該当する設定のうち、最も後方にあるものとなる。もし、最初の設定も同時に適用させようと思うなら、以下のように全く同じ設定を追加する必要がある。

ViewStyle:4
Columns:名前,-2,サイズ,-2,種類,-2,更新日時,-2
Sort:名前
Set:TabColor=#FF0000,#F0F0F0

もちろん、さらにフォルダ設定を追加した場合、その都度これを行う必要がある。そのため、フォルダ設定が多くなると面倒な事になる。

そこで自分の場合は、スクリプトを利用することで設定を共通化してしまうことにした。
まず、スクリプトのフォルダを確認する。メニューの「ツール」→「基本オプション」→ 「その他」の中にある「スクリプトフォルダ」の位置を確認し、そこにスクリプトを配置する。

X-Finder スクリプトフォルダ設定

とりあえず、ここに「folder.js」というファイルを作成し、その中に以下のテキストを記述する。これは、上で行ったCドライブの設定と全く同じ動作をする。

function setFolderStyle()
{
	WScript.Exec("ViewStyle:4");
	WScript.Exec("Columns:名前,-2,サイズ,-2,項目の種類,-2,更新日時,-2");
	WScript.Exec("Sort:名前");
}

またフォルダ設定を以下のようにして、作成したスクリプトの関数「setFolderStyle」を呼び出す。これで、上で設定したものと全く同じフォルダ設定になる。

Cドライブ

Include:JScript folder.js /r setFolderStyle

ユーザーフォルダ

Include:JScript folder.js /r setFolderStyle
Set:TabColor=#FF0000,#F0F0F0

このように、スクリプトを使用する事で設定を共通化する事ができる。
もちろん、スクリプトはいくらでも自由に記述できるので、アイデアさえあればもっと色々と自由なカスタマイズが行える。例えば自分の場合は以下のような感じになる。

//
// 表示種別指定
// [viewType]
// list  :一覧表示
// image :画像表示
//
function setFolderStyle(viewType)
{
	var path = WScript.Env("Current"); // パス
	var pathType = 0; // パス種別
	if (path.match(/^[A-Z]\:\\/) != null) pathType = 1; // ローカルパス
	else if (path.match(/^\\\\/) != null) pathType = 2; // ネットワークパス

	// タブ名設定
	if (pathType != 0)
	{
		// オブジェクト
		var fs = new ActiveXObject("Scripting.FileSystemObject");
		var currentName = fs.GetFileName(path); // フォルダ名
		var parentName = fs.GetFileName(fs.GetParentFolderName(path)); // 親フォルダ名
		var driveName = "";  // ドライブ名
		
		if (pathType == 1) {
			driveName = "[" + fs.GetDriveName(path).charAt(0) + "]"; // ドライブ名
		}
		else if (pathType == 2) {
			driveName = "\\\\"; // ドライブ名
			var d = path.split("\\");
			currentName == "" ? currentName = d[d.length - 1] : ""; // フォルダ名
			parentName == "" && d.length >= 3 ? parentName = d[d.length - 2] : ""; // 親フォルダ名
		}
		
		// タブ名
		var tabName =
			driveName +
			currentName +
			((parentName != "") ? " (" + parentName + ")" : "");
		WScript.Exec("Set:TabName=" + tabName);
	}
	// タブ色設定s
	WScript.Exec("Set:TabColor=#F0F0F0,#FFFFFF");
	
	// フォルダ表示設定
	if (viewType == "list")
	{
		// 通常フォルダ
		WScript.Exec("Columns:名前,-2,サイズ,-2,項目の種類,-2,更新日時,-2"); // カラム
		WScript.Exec("ViewStyle:4"); // 詳細
		WScript.Exec("Sort:名前"); // ソート
	}
	else if (viewType == "image")
	{
		// 画像フォルダ
		WScript.Exec("Columns:名前,-2,サイズ,-2,項目の種類,-2,更新日時,-2"); // カラム
		WScript.Exec("ViewStyle:5"); // 縮小版
		WScript.Exec("Sort:名前"); // ソート
	}
	else
	{
		// デフォルト
		setColumnWidthAuto();
		WScript.Exec("ViewStyle:4"); // 詳細
		WScript.Exec("Sort:名前"); // ソート
	}
}



//
// カラム幅自動調整
// [type]
// 0: カラム名による幅調整
// 1: カラムインデックスによる幅調整
//
function setColumnWidthAuto(type)
{
	if (type == null || type == "" || type == 0)
	{
		WScript.Exec("Columns: " + WScript.Env('Columns').replace(/,\d+(,|$)/g,",-2$1"));
	}
	else if (type == 1)
	{
		var columnNum = WScript.Env("Columns").split(",").length / 2;
		for (var i = 1; i <= columnNum; i++)
			WScript.Exec("Columns: " + i + "=-1");
	}
}

使い方は、以下の何れか。
Include:JScript folder.js /r setFolderStyle
Include:JScript folder.js /r setFolderStyle list
Include:JScript folder.js /r setFolderStyle image

この場合、以下のような動作をする。
ローカルパス及びネットワークパスは、タブ名を[ルート][フォルダ名]([親フォルダ名])とする。
ローカルパスの場合、ルートには「[ドライブレター]」を表示。ネットワークパスの場合、ルートには「\\」を表示。親フォルダ名は一つ上位のフォルダ名を表示し、無ければ表示しない(ネットワークパスの場合、ホスト名や共有ルートも上位フォルダと見なす)。
初期タブ色を設定(これが無いと、以前開いてたタブ色を勝手に引き継いでしまうため)。
引数に”list”が与えられた場合、詳細表示、カラム固定、表示幅自動設定、名前ソート。
引数に”image”が与えられた場合、縮小表示、カラム固定、表示幅自動設定、名前ソート。
それ以外の場合、詳細表示、カラム初期値、表示幅自動設定、名前ソート。

とりあえず、自分のX-Finder設定は以上の通り。これをフォルダ設定に適用することで、自分好みのフォルダ設定を行える。また、更新時にカラム幅を自動的に変更するよう、「更新」ボタンを押した時やF5キーを押した時の動作を、以下のようにする。。

Refresh:
Include:JScript folder.js /r setColumnWidthAuto

ちなみに、表示幅の自動調整方法は、カラム名を使った方法とカラムインデックスを使った方法に2種類があり、動作が微妙に異なるので、好きな方を使う。あと、自動調整時のカラム名の分割が超適当なのであしからず。自分の環境で問題なければいい、というスタンスなので。
このように、自分の好きなように設定が作れるので、慣れてしまえば結構便利な感じ。

参考

X-Finder
フォルダの表示設定 – X-Finder備忘録

KeePassのデータベースを複数の端末で同期する

自分のIDやパスワードを保存して管理するKeePass(現バージョン: 2.22)というソフトがある。自分は元々、IDやパスワードの管理にID Managerというソフトウェアを使用していたが、今回このKeePassに乗換えることにした。
乗り換えの一番の理由としては、IDやパスワードをAndroid携帯端末で参照したかったため。ID ManagerはWindows限定のため、使用できる環境が限られるが、一方のKeePassはマルチプラットフォーム対応で、AndroidやiOS等、様々な環境で使用できる。
ところがここで問題になるのは、複数の端末同士でデータを同期させる方法について。複数端末で使用するには当然、PCで入力した情報がAndroid端末で参照できないといったような、データの齟齬を発生させないような運用にしたいところ。
ここでは、そんな複数端末で情報を同期させる方法について調べたことについて書いておく。

ID ManagerからKeePassへデータ移行

今回の話とは直接関係ないけれど、ID ManagerからKeePassへデータ移行する方法について、とりあえず書き残しておく…とはいえ、世の中にはやはり同じ事を考える方がいるようで、以下のページにある「IDM2KeePass」を使うと簡単に終わる。

[I2K]IDM2KeePass 1.00 – MoonWing

これを使うと、ID ManagerからエクスポートしたXMLファイルを、KeePassでインポートできるXMLファイルに変換してくれるので、それをKeePassでインポートすれば良い。なお、XMLファイルには生のパスワードがテキストで保存されているため、インポートした後のXMLファイルを必ず削除すること。

IDM2KeePass

同期方法

KeePassのデータを同期させる方法は(自分が考えられる方法として)大きく分けて2種類。サーバ利用と、クラウドストレージ利用。
サーバ利用とは、HTTP(WebDav)やFTPといったデータ転送プロトコルを利用して、自分が管理するサーバを介してデータの同期を行う方法。クラウドストレージ利用とは、DropBoxやGoogle Drive等に代表されるクラウドストレージサービスを利用してデータの同期を行う方法。

各々のメリット・デメリットは以下の通り。

メリット デメリット
サーバ 個人で管理できるので(比較的)データが狙われにくい。
汎用プロトコルなので扱いやすい。
別途サーバが必要。
セキュリティ設定も個人で責任を負う必要あり。
クラウドストレージ 既存のサービスを利用するので管理が楽。
基本的にセキュリティの信頼性は高い。
外部サービスにデータを預けるので、サービスによってはデータ流出の懸念有。
データを必ず同期用フォルダに配置しなくてはいけない。
専用アプリが必要。

メリット、デメリットを考慮した上で、何れかを選択する。基本的に楽なのはクラウドストレージを利用する方法なので、よく分からない人はこちらが良いと思われる。なお、何れを選択するにせよ、KeePassデータベースファイルを開くパスワードは必ずサーバやクラウドストレージサービスのパスワードと異なる物に設定しておく事。そうすれば、仮にデータが流出しても、KeePassのデータが破られる可能性は低くなる。

以降では、それぞれの同期方法を使用したWindowsとAndroidの同期について簡単に説明する。
なおここでは、KeePassデータベースを読込・編集を行うソフトについて、Windows側は公式ソフト、Android側はKeepass2Android、またはそのオフライン版を使用することとする。

クラウドストレージによる同期

ここでは、クラウドストレージの代表格、Dropboxを利用する方法について説明する。

[Windows側]

Dropbox

通常の同期と同様、Dropboxのクライアントソフトをインストールする。その上で、KeePassのデータベースファイル(*.kdbx または *.kdb)をDropboxの同期用フォルダに置く。これでWindows側の同期は完了。
ちなみに、クライアントを使わずにDropBoxにデータを転送するKPDataSaveというプラグインもあるけれど、データの保存を行うだけで同期が出来なかった。どうもDropboxへのバックアップ用らしい。多分。

[Android側]

アプリケーションを選択

Androidについても、同様にDropbox のクライアントアプリをインストールする。
その上で、Keepass2Androidでデータベースの選択時にフォルダアイコンをタップし、「アプリケーションを選択」からDropboxアプリを選択する。するとDropboxフォルダのデータを参照できるので、同期されたKeePassデータベースファイルを選択する。これで、Dropboxに保存されたKeePassデータを読み込むことができる。
以降はDropboxアプリによりデータが同期されるので、最新データが反映されるようになる。
Dropboxによる同期の手順は以上。要は同期をDropboxアプリに任せてしまうというだけの話なので、面倒がなくてとても楽。

サーバによる同期

ここでは、FTPによる同期方法について説明する。なお、当然ながら同期を行う前に、FTPサーバをサポートした自前のサーバかホスティングサーバを用意する必要がある。加えて、SFTP(SSH File Transfer Protocol)かFTPS(File Transfer Protocol over SSL/TLS)といったセキュアな通信をサポートしている事が望ましい。

[Windows側]

KeePass URLから開く

KeePassで配布している公式ソフトウェアは、FTPやWebDAVといったプロトコルを標準でサポートしている。
ソフトウェアを開いて、「ファイル」→「データベースを開く」→「URLから開く」を選択して、KeePassデータベースファイル保存先のFTPパス及び、FTPのID及びパスワードを入力すると、自動的にFTPサーバにアクセスしてデータを取得する。以降はデータベースを開く度にFTPアクセスしてデータを更新するようになる。また、保存時は自動的にFTPにアップロードしてデータを更新する。
なお、標準ではFTPSやSFTPといった通信をサポートしていないので、それらを利用する場合はIOProtocolExtというプラグインを使用する。このプラグイン(IOProtocolExt.plgxファイルと、IOProtocolExt_WinSCPフォルダ)をKeePassインストールフォルダに置く(または、インストールフォルダにpluginという名前のフォルダがあればそちらを読み込む)。KeePassソフトウェアを起動すると「ツール」メニューに「IOProtocolExt Options」という項目が増えているので、FTPSを利用する場合はこれを選択して、「FTPS」の何れかの項目にチェックを入れる。(サーバ仕様によるので、利用サーバの仕様を確認すること、利用しない場合はチェックを入れないこと。)

例えば、自分が利用するさくらのレンタルサーバ スタンダードは以下のような設定になる。
FTPS接続の場合、URLは「ftps://(ドメイン名):21/home/(アカウント名)/(データベース保存パス)/(ファイル名)」で、「IOProtocolExt Options」の「Explicit SSL」にチェックを入れる。
SFTP接続の場合、URLは「sftp://(ドメイン名):22/home/(アカウント名)/(データベース保存パス)/(ファイル名)」となる。
なお、他のサーバの場合FTPSは990番ポートかもしれないので、その辺は自分のサーバの仕様を確認する。

ただしこの方法の場合、必ずFTP上にデータが保存されローカルにデータが残らない、すなわちネット接続されていない場合は参照できないという問題がある。
この問題に対する解決作としては2通り考えられる。一つは通常ローカルに保存し、必要に応じてFTPに保存する方法。もう一つは、通常FTPに保存し、必要に応じてローカルに保存する方法。この場合、KeePassソフトウェアの「トリガー」という機能を使うことで、データ保存時に自動的にこれらを実行させることができる。トリガーの「イベント」を「データベースファイルを保存中」に、アクションを「使用中のデータをエクスポート」または「使用中のデータベースをファイル/URLと同期する」にすることで、データ保存時に自動的にデータベースを別の場所に保存させることができる。ちなみに推奨は、通常FTPに保存し、それと同時にデータベースにエクスポートする方法。理由は、アクションに「使用中のデータベースをファイル/URLと同期する」を指定した場合FTPのユーザー名とパスワードを入力することになるが、ソフトウェアの仕様上、これが生データとしてローカルに保存されてしまうというから。つまり、FTPのパスワードが簡単に見えてしまう状態になり、セキュリティ上望ましくない。

KeePassトリガー

[Android側]

アプリケーションを選択

Keepass2Android(オフライン版じゃない方)は、標準でHTTP(WebDAV)、FTPへのアクセス機能を持っているので、メニューから「Open URL」を選択してそのままFTPのパスを設定をすれば良い。
…が、携帯端末の場合これはあまりよろしくない。何故ならば、基本的にFTPはIDとパスワードが平文で流れるから(暗号化してないWebDAVも同様)。必ずプロバイダと接続するような固定回線の場合は比較的問題が起こりにくいが(それでも望ましくはない)、外で持ち歩く端末でIDとパスワードを流すことはとても危険となる。携帯キャリアの3GやLTE回線に接続するならまだ良いが、問題は外部のWi-Fiに接続する場合。外部のWi-Fiはアクセスポイントから先がどのような通信経路を辿っているのかが全く分からない。場所によってはわざと回線を開放して、通信を傍受するようなアクセスポイントも存在する。そんなわけで、携帯端末で素のFTPを利用するのは避けた方が無難。…とはいえ、今のところデータを上手く同期させるにはこのFTP接続を用いるしかない。WebDAVによるDigestも未対応とのこと。ちなみに、ftps://で繋ぎに行くと通常のFTPで接続しにいくので注意。この辺は将来に期待するしかない(と思う)。
また代替案として、ES ファイルエクスプローラーのようなFTP(FTPS/SFTP対応)接続可能なファイラを使用して、代わりにFTP接続してもらう方法がある。あらかじめ、ESファイルエクスプローラーにサーバのFTP情報を登録する。次に、Keepass2Android(オフライン版でも可)のファイル選択において、Dropboxと同様にデータベースファイルの選択時に「アプリケーションを選択」表示された際、「ESファイルエクスプローラ」を選択して、登録しておいたFTP接続先にアクセスし、データベースファイルを選択する。これにより、サーバ上のファイルを取得し、ファイルを開くことができる。
ただし、このデータは自動的に同期されることはないので、サーバ上のデータが更新された場合は再読込を行う必要があるし、端末で書き込んだデータはサーバに自動的に反映されない。なので、端末で閲覧するだけの用途なら使えるが、更新してデータを同期させるような用途には向かない。
そんなわけでサーバ利用の場合、Android端末は閲覧専用で運用するのが無難。

まとめ

なんか面倒なことをグダグダ書いてはみたけど、サーバ利用の方は設定が面倒な上に対応も中途半端なので、あまりお勧めはしない。特に拘りがなければ、クラウドストレージサービスを使って同期を行うのが無難。Dropboxyの他、GoogleDrive等でも同様の事はできるので、自分の好きなサービスで運用するのが良いと思われる。また、iPhoneでも多数のKeePassソフトウェアが存在するので、同様の運用は可能と思われる。

WordPressのUploadPlusプラグインでprefixが重複する事象を直す

WordPressUploadPlusプラグイン(現バージョン:3.2.1)は、ファイルアップロード時のファイルに対し、

  • プレフィックスの追加(固定文字、日時等)
  • 大文字・小文字の変換
  • 文字変換

等を自動で行ってくれるプラグイン。ところがこのプラグインが、最近(とは言ってもここ数ヶ月)になって、以下のようにプレフィックスを2重で出力する事象が出るようになった。(下記画像の場合、本来”20130628_xnview.pngとなるところが、”20130628_20130628_xnview.png”となっている)

UploadPlus

検索してみたところ、以下のページを発見。

WordPress › Support » File name get Double when using Custom Prefix

この通りにソースコード”(WordPressインストールディレクトリ)/wp-content/plugins/uploadplus/inc/core.class.php”を変更する。

変更前

        /*    sanitize uploaded file name    */
        function upp_mangle_filename($file_name){	
            global $sep;
        	$ext = self::find_extension($file_name);

            $utf8 = get_option('uploadplus_utf8toascii');
        	if( $utf8[0] == "1" ):
                $file_name = self::_utf8_transliteration( $file_name );
        	endif;

            $file_name = self::_clean_global( $file_name );
            $file_name = self::_clean_filename( $ext, $file_name );
            $file_name = self::_clean_case( $file_name );
            $file_name = self::_add_prefix( $file_name );

        	return $file_name;
        }

変更後

        /*    sanitize uploaded file name    */
        function upp_mangle_filename($file_name){	
            if(isset($GLOBALS['UPLOAD-PLUS-NAMES'][$file_name])) return $file_name;

            global $sep;
        	$ext = self::find_extension($file_name);

            $utf8 = get_option('uploadplus_utf8toascii');
        	if( $utf8[0] == "1" ):
                $file_name = self::_utf8_transliteration( $file_name );
        	endif;

            $file_name = self::_clean_global( $file_name );
            $file_name = self::_clean_filename( $ext, $file_name );
            $file_name = self::_clean_case( $file_name );
            $file_name = self::_add_prefix( $file_name );
            
            $GLOBALS['UPLOAD-PLUS-NAMES'][$file_name] = 1;
        	return $file_name;
        }

差分は以下のようになる。

--- core.class.php.old	Mon Feb 25 23:59:33 2013
+++ core.class.php	Sun Jun 30 11:23:59 2013
@@ -115,0 +116,2 @@
+            if(isset($GLOBALS['UPLOAD-PLUS-NAMES'][$file_name])) return $file_name;
+
@@ -128 +130,2 @@
-
+            
+            $GLOBALS['UPLOAD-PLUS-NAMES'][$file_name] = 1;

これで、プレフィックスの重複が発生しなくなる。

TVTestのキャプチャ画像を整理する

これは多分、他人には心底どうでもいい話。

自分はTVTestを使ってTVを見ていると、ちょくちょく静止画キャプチャキーを押してキャプチャ画像を保存する癖がある。んで、気がつくと保存フォルダに数百枚とか数千枚いう数のファイル数になる。そして保存癖があるので、せっかく取ったのだからとその画像をフォルダ分けして保存してしまう。

ここで問題になるのは、大量の画像をタイトル別にフォルダに仕分ける方法。特に毎週放送される番組、具体的にはTVアニメを同じフォルダに放り込むのは結構大変な作業になる。
とりあえず簡単に思いつくのは、画像のサムネイルを見ながら少しずつ移動させる方法。しかし、数百枚の数になるとこの方法すら時間がかかる。次にファイル名による分類。しかしTVTestはファイル名に年月日時分秒を入れてくれるだけで、番組名やチャンネル名等を入れてくれない。理由は知らない。
ただし、キャプチャ設定画面から「コメントを設定する」にチェックを入れると、画像のコメントに放送局や番組名が保存される。

TVTest 設定画面

この保存された情報を参照するには色々方法があると思うけれど、自分は愛用の画像ビュワーXnViewを使用する。
XnViewのファイルブラウザ機能を使って、ファイルを一覧表示させると、以下のように埋め込まれたコメントが参照できる。(表示されていない場合は、メニューの「表示」→「列」→「埋め込みコメント」をONにする。)

XnViewのブラウザ

次にCtrl + Fを押して検索画面を開く。すると、以下のような検索画面が開く。ここで「コメント」の欄に検索したい文字列を入れると、コメントの内容で検索できる。

XnView 検索画面

検索結果は以下の通り。

XnView 検索結果

この検索結果を全選択して、適当なフォルダに放り込めば、番組別のフォルダ分けを簡単に行う事ができる、という寸法。

多分こんな画像分類する人はあまりいないと思われるので、他人にとってはあまり役に立たないかもしれない。とにかく、TVTestの静止画キャプチャの番組情報は、画像ファイル内のコメント欄に書き込まれてるから、それを手がかりに色々できるよ、という話。

Janetterをポータブルに使おうと試みた

最近、Windowsデスクトップ環境で使用するTwitterクライアントをFirefoxプラグインのYoonoからJanetter(現バージョン:4.2.2.0)に変更した。
元々Yoonoを使ってた理由は、ブラウザにくっついたクライアントだと今ブラウザで見てるウェブサイトのURLが拾いやすい、というものだった。ところが最近、TwitterのAPI 1.0が廃止され1.1になったことによるものか、挙動が色々おかしくなってしまった。しばらく待ってみてもバージョンアップされず、痺れを切らしてクライアントの乗り換えを行った次第。

個人的にクライアントに求めるものは、画像アップロードが容易なこと(アップロード先が選択できるもの)と、インストーラを使用せずにフォルダのコピーでインストールが済むポータブルな代物。そんな条件で乗換え先を色々探してみたものの、Twitter API 1.1に未対応のクライアントばかり。そんな折、高機能なTwitterクライアント「Janetter」で望む形に近い利用方法ができることを知ったので試してみた次第。
個別クライアントの利用によりブラウザのURLが拾いにくくなるのは、諦めるか別途方法を考えることにする。

まず、Janetterはインストーラ版しか無い。インストーラを使いたくないので、インストーラを強引に展開する。ここで自分が使用したのはUniversal Extractor(現バージョン:1.6.1)。とりあえずJanetterのインストーラを放り込むと以下のようにファイルが展開される(一部を除きファイル名省略)。


.
├─embedded
└─{app}
    ├─bin
    │  │  avcodec-53.dll
    │  │  avformat-53.dll
    │  │  avutil-51.dll
    │  │  chrome.pak
    │  │  configuration.json.sample
    │  │  d3dcompiler_43.dll
    │  │  d3dx9_43.dll
    │  │  icudt.dll
    │  │  JaneAssist.exe
    │  │  janetset.ini
    │  │  Janetter.exe
    │  │  janetter.ini.sample
    │  │  JanetterSrv.exe
    │  │  JanetUp.exe
    │  │  libcef.dll
    │  │  libEGL.dll
    │  │  libGLESv2.dll
    │  │  limits.json.sample
    │  │  Microsoft.VC90.CRT.manifest
    │  │  MSVCR90.dll
    │  │  python27.dll
    │  │  SendWheel.dll
    │  │  ShortenUrlDomain.txt
    │  │  update.ini
    │  │  w9xpopen.exe
    │  ├─locale
    │  └─locales
    ├─documents
    ├─sponsors
    └─Theme

ここでは、{app}フォルダの中身だけあれば良いので、それ以外は削除。また、sponsorsフォルダ(Yahoo!ツールバーが入ってる)も不要。削除後、自分の場合は{app}フォルダの中身を「D:\Tools\Net\Janetter」に置いた。
次に、フォルダ内に userdata フォルダを作成(”D:\Tools\Net\Janetter\userdata”)。ユーザー設定ファイル(通常”%APPDATA%\Jane\Janetter2\”に保存されるファイル)をここに保存することにする。
次に、binフォルダ内のjanetset.iniにある以下の記載を変更する。(先頭のセミコロン「;」を除いて、userdataフォルダの絶対パスを指定する。)


変更前:
[OPTION]
;work_folder = C:\Janetter

変更後:
[OPTION]
work_folder = D:\Tools\Net\Janetter\userdata

ちなみに、「work_folder」に相対パス(..\userdata)を指定すると、一見普通に動いているように見えるものの、ユーザー設定CSSが無効になる等の問題が発生する様子。ツイート入力欄の縦幅を伸ばそうとCSSを編集したが、全く有効にならずに頭を捻って無駄に時間を費やしてしまったという個人的な経緯があるので、ここは絶対パスを指定しておくのが無難だと思う。もしかしたら何か対策方法があるかもしれないけれど、現時点では見つけられなかった。絶対パスを指定してしまうことで、単純なファイルのコピーで運用できなくなる点については、とりあえずここでは諦める。

以上を完了した上でbinフォルダ内のJanetter.exeを実行すると、Janetterが起動し、設定が”D:\Tools\Net\Janetter\userdata”に保存される。これで、インストーラを使用せずに使用するという目的は一応達成された。

インストール先の変更時は、インストールフォルダを丸ごとコピーした上で、janetset.iniの「work_folder」をコピー先のフォルダに変更する。
アップデート時は、再度インストーラを展開した上で、{app}フォルダの中身を上書きする。ただし、その時にjanetset.iniが上書きされてしまうので、別途バックアップを保存しておいて書き戻す必要がある。
ちょっと中途半端なので運用が面倒になってしまったけれど、まぁ通常使っている分には特に問題ないと思う。多分。
もしもっと上手い使い方をご存知の方は教えてください。

ちなみに、この利用方法はJanetterの通常の利用方法ではないため、この利用で問題が起こっても自分は一切関知しないのであしからず。加えて書いておくと、通常のインストーラからの利用を一度もしたことがないので、「○○の機能が使えなくなった」とか言われても「そんなの知らん」しか言えない。

参考

FAQ – よくあるご質問 | 国産Twitterクライアント「Janetter」
Janetterにはポータブル版がないようなので設定をDropboxで共有するように設定してみた | 情報科学屋さんを目指す人のメモ

10周年

このサイトが始まったのが2003年6月15日なので、2013年6月15日をもって10周年となりました。

http://melog.info/archives/2003/06/15000000.html

10年前がこれ。まだ大学生だったけれど、今と大して変わってないなぁ、という。まるで成長していない…。

サイトを立ち上げてから、ツールを変えたり、ドメインとったり、就職したり、公私共にいろいろな変化がありましたが、まぁ本質はあまり変わってないし、変えるつもりもありません。
始めた頃は、ブログブームが起こり始めた頃なので、その辺に便乗して自分の意見や知識を書き綴るサイトが欲しいなぁ、と思って立ち上げた代物でした。今はTwitteにばかり書き込んで、サイトにはあまり書いていませんが、たまにTwitterでは書ききれないような事をいろいろ書きたくなることもあるので、閉鎖したりするつもりは毛頭ありません。

10年も続いているのは、あまり気張らず、自分の書きたいことを書きたいように書いているせいだと思います。他人の視線とか期待とか、そういう重荷を背負わなければ、割と何とか続くんじゃないかと思ってたりします。たぶん、これからもダラダラ続けていくのでしょう。

10年前から今まで、世界は色々と変わり、技術も大きく変遷していきました。10年後はもっと色々変わっていくのでしょう。それをこれからも見つめていきたいと思いますし、その都度ここにも何か書いていくのだろうと思います。そして10年後に、また色々と書けるといいな、と思います。

実は今、諸事情によりこれを中国の上海で書いています。Android端末にBluetoothキーボードな環境です。まさか10周年を日本以外で過ごすとは思いませんでしたが…。 なお、諸事情といっても別に隠すようなことでもなく、父親が仕事関係で中国に行っているので、それにくっついて行ってる感じです。
ちなみに中国は1時間時差があるので、これ書いてる時点ではまだ6月15日だから10周年の書き込みとしては(たぶん)セーフ。

10年後の自分が一体何をしてるのかはしらないけれど、10年後の自分はもう少し成長しいるといいな、と思います。あと、できれば結婚していてくれるといいなぁ…と。

そんなわけで、これからもよろしくお願いします。