2011-08-15

[linux] shred でディレクトリを完全削除する

VPSを引っ越したり(通常盗み見できませんが念の為)、HDDを破棄する場合など、削除したつもりのファイルの内容を残したくない場合、shred(シュレッド?)を使うと、ファイルの内容を意味のないデータで上書きしつつ削除できます。今回はさらに、findを使ってディレクトリ内のファイルをすべて削除してみました。

shredが無いときは、ファイルを削除した後、ランダムデータを空き領域いっぱいに書き込む方式でも十分かもしれません。

OS XにはsrmというSecureなrmコマンドがあって、FreeBSDではrm -Pを使うと良いようです。

# 注意:TARGET_DIR内の全てのファイルが再帰的に削除されます
$ find TARGET_DIR -type f -print0 | xargs -0 shred --remove
$ rm -rf TARGET_DIR # ディレクトリが残っているので削除します

参考
DSAS開発者の部屋:shredのあれこれ

2011-08-04

Google Music Beta での文字化け回避方法 (foobar2000)

本日使い始めて気づいたのですが、音楽ファイルのアップロードに使用するクライアントの、ID3タグ中の日本語(Shift_JIS)の扱いに難があるようです。

クライアントは幸いにもUTF-8/UTF-16は理解してくれるので、ID3v2.4またはID3v2.3でUnicodeを使うように作り直すと上手くいきます。

ID3v1ではUnicodeは使われないみたいなので、削除した方が良いように思います。

ID3v2でも必ずしもUnicodeしかありえないかというとそうでもなく、Shift_JISが入っている場合もあるみたいです。

foobar2000では、Rebuild MP3 streamはタグを変更しないので、行ってもShift_JISのまま変化しません。Tag typeでID3v2.3→ID3v2.4の変更をするとついでにUnicodeになるようなので、この機能が使えます。このあとさらにID3v2.3に戻してもOKでした。
参考: foobar200 FAQ - MP3 tags (ID3v2) added or modified by foobar2000 are not read or are read improperly in application X or portable player Y. What can I do?
> foobar2000 writes ID3v2.4 tags encoded as UTF-8 by default.

Album ArtistはTPE2方式にのみ対応しているようなので、foobar2000の設定のAdvancedのところでTPE2方式を使うようにしてから、Album Artistの入っているファイルのタグを更新してください。

MusicManagerに更新日時の変化していないファイルのタグを再読み込みさせるにはServerDatabase.dbを削除します。

Windowsの場合は
C:\Users\_USERNAME_\AppData\Local\Google\MusicManager\ServerDatabase.db
SQLite Database Browser などで開いて、Table: XFILESを覗くとアップロード終了を待たずに文字化け状況が確認できます。

2011/08/05 8:21 追記
上手く読めないファイルのID3タグをダンプしてよく調べたところ、だいぶ間違っていたので修正しました。

2011-08-03

[gae] Google App Engine (Python) を始める人用 Tips

まず最初に読むべきところは、スタートガイド (いわゆるチュートリアル)
開発用サーバーでは、ファイルをいじってもサーバーを再起動する必要はなし。デプロイのコマンドは、appcfg.py update DIR
API リファレンスは英語版のみに情報がある場合あり Channel API, Receiving Email
実際に動くコードをもっと見たい人は、Google特製のサンプルコード集

JSON を扱うときは同梱されている simplejson を使う。

import simplejson
simplejson.dumps({'foo': u'あいう'}, ensure_ascii=False)

参考:After installing new SDK this : from django.utils import simplejson does work anymore

DEBUG ログが出るようにする方法と、PrettyPrinter を使ってネストしたデータを見る。

import logging, pprint

logging.getLogger().setLevel(logging.DEBUG)
pp = pprint.PrettyPrinter()

logging.debug(pp.pformat(['foo', {'bar': 'buzz'}]))

path のキャプチャの方法
class FooHandler(webapp.RequestHandler):
    def get(self, id):
        # /foo/123 へのリクエストなら、id = '123'

app = webapp.WSGIApplication([
    ('/foo/([0-9]+)', FooHandler), # 欲しいところを括弧しとく
], debug=True)

webapp.util.run_wsgi_app(app)

Windows の App Engine Launcher を使っていていちいちコマンドプロンプトが出てウザい:python.exe じゃなくて、pythonw.exe を指定すれば良い。

2011-08-02

[css] float や position:absolute についての詳しい資料

いくら検索しても、とりあえず目の前の仕事をこなそうという安直なサイトばかりが上位にヒットして、きちんと勉強できずイライラしている方も多いと思います。

そんな方には、W3C が公開している CSS2.1の仕様書 はいかがでしょうか。仕様書らしからぬヴィジュアルな例示が沢山あって、とても分かりやすく書かれています。

float や position はボックスの配置に関わるところなので、こちらのページに解説があります。 CSS2.1 Spec - Visual formatting model

勝手に要点をまとめると、
  1. float はマージンの相殺がどうなるかという点。
  2. position: absolute は、親要素であらかじめ意味なく position: relative しておくと、基準となる座標を選べる。
  3. その他:勉強中です。