Programming」カテゴリーアーカイブ

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 のほうがイイと思うんだけどなぁ…

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 である。
注意しておかないとハマるかも。

glade

覚書ページの整理が全然進まない。
PyGtk はどの順番で widget 解説を進めるか考えると頭がおかしくなりそう。
TreeView や TextView の前に Scrollbar や Scale の前に Adjustments の知識が必要で…

それより、もう使わなくなった Glade 関連の解説なんかはどうしようかと。
なんたって今では普通 libglade ではなく GtkBuilder を選ぶだろうし。
最初の GUI アプリ作りのとっかかりは Glade ほど解りやすいものは無いだろうし。

いやまてよ。
C 言語から Glade を使う方法てか GTK+ コンパイル方法も併記すればいいんでない。
なんたってソレは私自身もやったことがないので勉強にもなる。

よし Mandriva One に Glade や GTK+ ヘッダをインストールしてみよう。
C でやるには別途でコンパイラの他に GTK+ ヘッダを入れる必要があるんだよね。
Ubuntu での需要ばかりだろうから Ubuntu には後で入れる。

libgtk+2.0_0-devel を導入。
依存関係で他のパッケージも沢山インストールされるが気にしない。

devhelp も導入。
/usr/share/gtk-doc 以下の doc はコレで見られるようになる。
libgtk+ を入れた後はこんな感じになる。

glade も一応入れてと。
んで海外からチュートリアルを探してみたら強烈なとこを見つけた。

GTK+ and Glade3 GUI Programming Tutorial – Part 3

とにかく tutorial.xml を落とし C コードをコピペしてコンパイルしてみる。

普通にコンパイルが通って動かせた。
ふむふむ、C から Glade ファイルを使うにはこうすればいいのか。
しかしこんなトコを見た後では何を書くのも気後れするわ。

でもコンパイルオプションが長くてメンドクセ!
メモリの解放処理をいちいち書かなければいけないのがメンドクセ!
つーかメソッドではなく関数を使うのがメンドクセ!
PyGtk がどれほど楽チンなのか改めて思い知る。

y901x-0.2.1

y901x-0.2.1 を誰も待っていないだろうけど更新しました。

やっと compiz 3D 無効状態でリストサイズ変更グリップラインが崩れるのを修正できた!
3D で使えば問題無いけど実はずっと気にしていた私であった。

def __on_expose_event(self, widget, event):
    # GetDC()(Windows)
    gc = widget.style.fg_gc[gtk.STATE_NORMAL]
    # Draw Vertical Line
    for i in range(10):
        if i%3 == 0:
            widget.window.draw_line(
                gc,
                event.area.x+i,
                event.area.y,
                event.area.x+i,
                event.area.height)

とやっていたのを

def __on_expose_event(self, widget, event):
    # GetDC()(Windows)
    gc = widget.style.fg_gc[gtk.STATE_NORMAL]
    # Draw Vertical Line
    for i in range(10):
        if i%3 == 0:
            widget.window.draw_line(gc, i, 0, i, widget.allocation.height)

に変更したらアッサリと。
つまり引数で渡される event.area から得られる値は 2D 状態ではアテにならないぞと。
widget から直接大きさを調べて計算すれば 2D でも 3D でも対応できるね。

今まで表示されない部分に一生懸命ラインを引いていたってことか、あーあ、早く気がつけ俺。
他にステータスグリップ描写が変な位置になる不具合も同じ理由だった。

他、覚書ページ作りで思いついたことを地味に導入して本サイトにて公開中。
しかし三ヶ月も放置したのに毎月ダウンロード数が地味に増えているのは何故だろう?
といってもたった二百程度なんだが、Linux 専用だし需要は微妙だしこんなものだろう。

どうでもいいけど本サイトトップページのスクリーンショットは取っ払った。
BlackBerry で見てみたら…まぁそういうわけで。
今後はサイトデザインもスマートフォンを考慮したほうがいいかもね。

gtk.EntryCompletion

gtk.Entry と gtk.EntryCompletion の覚書はこんなもんでいいだろう。
デフォルト機能でココまで至れり尽くせりにしなくてもいいと思うのだが。
gtk.Entry and gtk.EntryCompletion

前回はコード保管と書いたけど入力支援と書くほうが正しかったね。

他に ConfigParser と自作クラス覚書をまとめたり地味に書き換えや追記とかしているんだが…
相変わらず C# と Ubuntu の覚書ばかりアクセスされているままである、まぁそんなもんだろう。

しかし覚書ページばかり弄くっても Blog 更新が滞るばかりだ。
ということで何を考えたかケータイを BlackBerry Bold に変えた(関係無い!
本当は iPhone が欲しかったが色々な理由でコレにしたけど想像以上に面白い。
もう少し使い込んだら Blog はこのネタになるかもしれない。

BlackBerryアプリ開発講座 記事一覧 – できるネット+(できるネットプラス)

java か…