y901w-0.0.0

Linux 飽きた。
Python もなんか気が乗らない、というか開発系 Blog が軒並み止まっているような…
時期的に .NET Framework 4 前というのもあるし C# 屋達もイマイチだね。

ならばしばらく Windows で C/C++ といこう、なんて久しぶりな。
せっかくだからずっと放置の Cinema の更新でも。
いやいや Y901w と名前を変えて Y901x にデザイン等を合わせるほうがいいと思う。
というより x64 対応ビルドを少しやってみたい。

問題は Visual Studio を VirtualBox 上の x86 Vista に入れていることだ。
x64 で debug できないし VMR9 が動かない、まぁビルドはできるからなんとかなるさ。

とりあえずファイルドロップで再生できるだけのスケルトンを Cinema から抜き出し。
抜き出したわりにはファイルがイッパイある、SDK だけで作るとこうなるんだよなぁ。
ということで x64 ビルドプロジェクトを含めてソースコードのバックアップ。

y901w-0.0.0.zip

x64 で再生できるか試してみる。
って Windows 7 64bit だと wmv 以外はドエリャァ面倒くさいのね。
ffdshow を入れて haali ってのを入れてやっと H.264 が再生できる。

Linux ならリポジトリからアッサリとデコーダーを導入できるのに…
つか WMP は標準で H.264 を再生できるのにサードには提供してくれないという…

普通に検索すると怪しさ全快なページばかり当たるので wikipedia から辿る。
そうだった、Windows でこの手は既に無法地帯化しているんだったよなぁ…
やっぱりヤメようか、まぁ x64 で DirectX の実験だと思えばいいか。

おぉ x64 ネイティブで普通に動いた。
後は部品を付けてチマチマやればなんとかなりそうだ。
ところで今頃気がついたのだが…

Opera って GStreamer 使っているの?
というか Windows から使えるのなら使ってみたいわな。

get_user_special_dir

Linux でホームに作成されるデフォルトディレクトリ名は

~/.config/user-dirs.dirs

で指定及び確認ができることは大半の人が知っているだろう。
自分の都合で名前変更しても自動で追従する嬉しいのか迷惑なのかよく解らな(以下略

Windows も準拠してくれれば嬉しいのに…
というのは置いておいて英語表記のデフォルト名は

/etc/xdg/user-dirs.defaults

で私が知るかぎりでは確認できます、全部の Linux がそうなのかは知りません。

ということで。

アプリを自分で作るとデフォルトディレクトリ名を探したくなる場合がある。
自身が使う範囲のみであれば決め打ちでいいけど公開する場合は考える必要がある。
user-dirs.dirs を自己解析すればとも思うけどこの位置さえ決め打ちでいいのだろうか?
画像関連アプリで画像ファイルを保存しているだろう場所を指定みたいなくらいしか(以下略

glib Functions

glib に get_user_special_dir なんてメソッドがある。
コレを使えば PyGtk の GUI アプリでユーザー指定のディレクトリが見つけられそうだ。
get_user_cache_dir メソッドも後々で使いそうだし覚えておいたほうがいいかなと。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import glib

xdg_default = (
    "Desktop",
    "Documents",
    "Download",
    "Music",
    "Pictures",
    "Public",
    "Templates",
    "Videos"
    )

user_conf = (
    glib.USER_DIRECTORY_DESKTOP,
    glib.USER_DIRECTORY_DOCUMENTS,
    glib.USER_DIRECTORY_DOWNLOAD,
    glib.USER_DIRECTORY_MUSIC,
    glib.USER_DIRECTORY_PICTURES,
    glib.USER_DIRECTORY_PUBLIC_SHARE,
    glib.USER_DIRECTORY_TEMPLATES,
    glib.USER_DIRECTORY_VIDEOS
    )

for i in range(len(xdg_default)):
    print "%s: %s" % (xdg_default[i], glib.get_user_special_dir(user_conf[i]))

うん、これでいいんじゃない。
とにかくコレでフルパスが得られるので処理が簡単。
自身で何も指定していないなら None が戻るので処理が簡単。
よし、これで Y901x の初期選択ディレクトリを(理由はソレかい…

私が付けている名前を晒しているけど気にしない
動画の保存先名デフォルトは Videos より Movies のほうがイイと思うんだけどなぁ…

trash-0.0.1

Linux で端末から trash というコマンドでファイルをゴミ箱に捨てるアプリを新規公開。
いや自分で使いたかったんで、ちなみに中身はコレだ。

Linux でファイルをゴミ箱に捨てる

たったの 19 行w
man も pydoc も絶対にイラネェw
なんと親切なことにインストールスクリプト同梱w
GNOME だけでなく Mandriva KDE でもわざわざ動作確認済みw

Linux ゴミ箱を日本語で検索すると結構ヒットするんだけど…
g_file_trash を日本語でググってもウチしか当たらないんだが…

つーか Linux アプリを更新してもアクセス数は全然カワンネェwww
私は方向を間違えたのだろうか…

IronPython CRLF

Glade の覚書がちっとも進まない。
やっぱり普段使わないものの覚書って無理があるかも。
ということで Blog でやった IronPython ネタを地味にまとめている。

覚書のページ – L’Isola di Niente

つまりほとんどコピペ、でコードが IronPython 2.6 でキチンと動くか確認してみたんだが
IronPython の \n が CR/LF になるんだが…
以前は LF のみだったような気がするんだけど違ったかな。

追記

まてよ、もしかして System.IO と組み込み open では扱いが違うのかな?
というより IronPython では内部で \n はどう保持されているんだろう?
気になったのでテストコードを作って試してみた。

# -*- coding: UTF-8 -*-

import System

crlf_test = "a\nb"

# Inside is \n==LF
bytes = System.Text.Encoding.UTF8.GetBytes(crlf_test)
for i in range(len(bytes)):
    print bytes[i]

# The following code is \n==LF write
sr = System.IO.StreamWriter("test1.txt")
sr.Write(crlf_test)
sr.Close()

# The following code is \n==CR/LF write
f = open("test2.txt", "w")
f.write(crlf_test)
f.close()

やはり open() で書き込む時にのみ LF を CR/LF に変換しているようで。
標準 Python モジュールの関係あたりで CPython に無理やり合わせたのだろうと憶測。
以前は LF のみだったような気がしたのはコレに気が付かなかっただけかな。

ついでだから C# での内部も一応探ってみる。

using System;

class Program
{
	static void Main(string[] args)
	{
		System.Byte[] bytes = System.Text.Encoding.UTF8.GetBytes("a\nb");
		foreach(System.Byte b in bytes)
		{
			Console.WriteLine(b);
		}
	}
}

当然のように LF に、つまり .NET Framework なら内部では cli 仕様の \n==LF である。
注意しておかないとハマるかも。

Y901x-0.2.2

Y901x-0.2.2 公開。

button_release_event の callback で

if self.gesture["result"] == "":
↓
if self.gesture["result"] == "" and self.w.get_title() != "":

とチェックの追加をしてみただけなんだがまだテストが足らないかもしれない。
とりあえず現在までジェスチャと右メニューは同時に出なくなったので多分大丈夫だろう。
ついでに FileChooserDialog にフィルタリングを追加して公開してみる。
とにかくトップページつか公開アプリを更新したかっただけさ。

後はフルスクリーンでボタンやシークバー表示を追加すればプレイヤー基本機能は私的に終了。
Cinema(つまり WMP11 のパクリ) みたくバーのみ浮いた表示にしたいんだがどうすれば…
でもアレって GTK+ らしくないかもしれない。