2014-07-13

AppleScript: iTunesの曲を指定時間ずつ再生(レーティング考慮)

iTunes Storeの全曲プレビューみたいに手元の曲も1分くらいずつ再生できるとたくさんの曲を聴きやすいかなと思って方法を調べたらAppleScriptでやる方法が出てきたので少し改造してみました。

  • レーティングによって時間を追加
    (★0: ±0秒(★3と同じ), ★1: -20秒, ★2: -10秒, ★3: ±0秒, ★4: +30秒, ★5: +60秒 )
  • 曲の切り替わり時に擬似クロスフェード(ボリュームをフェードアウト / フェードイン)する

AppleScript初めて書いたんですけどrebuild.fmで言われてたことがすこしわかりました。書きづらい

2014-07-12

iOS 7 + フルスクリーンモードのアプリケーションキャッシュが初回時失敗する?

  • iOS 7.1.2 + iPad 4th
  • あるページでアプリケーションキャッシュのマニフェストファイルに25MBを超えるサイズのファイルをキャッシュ指定する
  • フルスクリーンモード (apple-mobile-web-app-capableがyesのページをホーム画面起動した状態)

という条件で

  • 初回起動時に必ずキャッシュに失敗
    • 全ファイル読み込んだ後にapplicationCacheがerrorイベントを投げる
    • Webインスペクタで見るとコンソールに「Application Cache update failed, because size quota was exceeded」と出力される
  • error発生後リロードするとキャッシュに成功する
    • (errorを一回発生させないと成功しない)

という状態になっていました。

コンソールの上記エラーはMobile Safariでキャッシュが25MBを超えた時に出る「ローカルストレージを増やしますか」のダイアログでキャンセルを押したときのものと同じ文言なので、フルスクリーンモードのときはダイアログ出さずに無条件でエラーにしているのではないかと思います…

ただフルスクリーンモード時はアプリケーションキャッシュの容量が無制限(50MB超えてもキャッシュできる。ただこの問題にひっかかって1回はエラーになる)のようなのでそのあたりがよくわかっていません。


参考

(もともと書いていたもの)


(その他)

2014-03-30

Photoshop(CC): スクリプト経由でPNG保存

画像を大量にPNG保存する必要があったのでスクリプト(ExtendScript)経由で保存してみたんですけどファイルサイズが普段よりちょっと大きいことに気付きました。

いろいろ調べたり試したりしたところ、最初に使っていたDocument#saveAs(file, options)よりPhotoshopの「Web用に保存」にあたるDocument#exportDocument(file, ExportType.SAVEFORWEB, options)の方がサイズを抑えて保存できるようです。

手元の画像だとsaveAsだと50KBくらいだったのがexportDocumentだと5KBくらいになっていました。

2014-03-09

PostgreSQL: テーブルの主キーを列順に取得する

以前Postgresで複合主キーのテーブル群から主キー一覧を取ってくる必要があったので、また必要になった時のために残しておきます(あまりないかも…)。

    SELECT c.table_name       -- テーブル名
         , c.column_name      -- 列名
         , c.data_type        -- データ型
         , c.ordinal_position -- 列順

      FROM information_schema.columns c

INNER JOIN information_schema.constraint_column_usage ccu
        ON c.table_name       = ccu.table_name
       AND c.column_name      = ccu.column_name 

INNER JOIN information_schema.table_constraints tc
        ON tc.table_catalog   = c.table_catalog
       AND tc.table_schema    = c.table_schema
       AND tc.table_name      = c.table_name
       AND tc.constraint_name = ccu.constraint_name

     WHERE tc.constraint_type = 'PRIMARY KEY'
     --AND c.table_name       = '' -- 必要ならテーブル名で絞込み

  ORDER BY c.table_name
         , c.ordinal_position

今までinformation_schemaから値を取ってくることがなかったのであまり知識がないんですけど、columns → constraint_column_usage → table_constraints まで辿らないと「列に紐付く制約名が何で」(constraint_name)、「その制約名が主キーか」(constarint_type = ‘PRIMARY KEY’)が判断できないみたいです。

2014-02-16

C#: log4net RollingFileAppenderの継承

log4netで既存のRollingFileAppender(ファイルサイズ等でログローテートするクラス)の動作を少し変える必要があったので拡張の方法を調べていました。

RollingFileAppenderを継承したクラスでパラメータの初期化時(ActivateOptions())とログ出力時(Append())のメソッドがoverride可能なので、そこで処理を調整すれば良さそうです。 (ローテートで生成したファイルのリストを取得するメソッド(GetExistingFiles())等はprivateなので、使いたい場合は継承先のクラスに同じメソッドをコピーするか自分で作るかが必要そうです…)