月別アーカイブ: 2010年8月

text in liststore

そろそろ Y901x に機能追加をしようと先日より少しづつ弄くっております。
作った本人以外に使っている人がいないかもしれないがイイじゃないか。
少なくとも作っている本人は使っているんだから。

とりあえずファイルリストを Y901 と同様な下に位置変更できるようにしたい。
変更方法は Y901 と同じリストの右クリックメニューと Ctrl+F12 でいいだろう。
ということでリストに右クリックメニューを付けて上手く動くか実験中。
位置変更は空の GtkBox を配置してパレント変更するだけなので難しくないと思う。

そういえば現行では辞書で保持している設定を __slots__ 付き class に変更したい。
そうしておいたほうが後々の変更で凡ミスを防げる確率が高くなるはず。

self.setting = {"mimes": mimes,
                "position": False,
                "init_size_on": False,
                "init_size_val": 0,
                "esc_exit": False,
                "mem_rep": False,
                "mem_aspect": False,
                "loop": False,
                "severity": 25,
                "aspect_rate": [1,1],
                "set_size": [[320,240],[640,480],[1280,720]]}

# ↓

class CSetting(object):
    __slots__ = [
            "mimes", "position", "init_size_on", "init_size_val", "esc_exit",
            "mem_rep", "mem_aspect", "endressloop", "severity", "aspect_rate",
            "set_size"]
    def __init__(self):
        self.mimes = MIMES
        self.position = False
        self.init_size_on = False
        self.init_size_val = 0
        self.esc_exit = False
        self.mem_rep = False
        self.mem_aspect = False
        self.endressloop = False
        self.severity = 25
        self.aspect_rate = [1,1]
        self.set_size = [[320,240],[640,480],[1280,720]]

定数扱いなのに小文字だった mimes とかはキチンと大文字に変えて…
loop とか自分でもドレに相当するか解りにくい変数名は解りやすく変えて…
今になって見ると我ながら初心者丸出しで切ないよ。

setting[

で検索して地味に手書きで書き換えたけどドットを忘れるとかで間違えまくる。
ドット忘れだと動的言語は新規変数と扱ってしまうから間違いを見つけるのが大変。
問題なく動いている所をわざわざ書き換えてバグを作っているような気がするわな。

ところでリスト中にファイル名が存在するかを調べるのに

class CListBox(gtk.HBox):
    def __init__(self, window):
        self.sw = gtk.ScrolledWindow()
        self.view = gtk.TreeView()
        self.sw.add(self.view)
        self.liststore = gtk.ListStore(str)
        self.view.set_model(self.liststore)
        # etc...

    def is_text(self, text):
        # text in ListStore ?
        model = self.view.get_model()
        it = model.get_iter_first()
        while it:
            if model.get_value(it, 0) == text:
                return True
            it = model.iter_next(it)
        return False

こんな is_text というメソッドを作っていたのですが

def is_text(self, text):
    return text in [ r[0] for r in self.liststore ]

コレだけでイケたのね…
PyGtk って知れば知るほど親切な仕様だ。

とにかく書き換え箇所が多いので当面は自分でバグ探しになりそう。
ということでいつものようにバックアップ。
y901x-0.3.2b1.tar.gz

Ramen Timer for bash

時間を見つけては地味にシェルスクリプトの覚書に書きたししています。
ところで echo を man にてオプションを見てみると

-n で改行動作を行わない
-e でバックスラッシュによるエスケープ

ができるのか、単純に文字列そのままを stdout に出力するだけと勘違いしていた。

$ echo -e "きもー\tい\nあっちいけ\tてか死ね"
きもー い
あっちいけ   てか死ね
$

知ったからには何か作ってみないと気が済まない。
知って、積極的に書き出して、だけど何も作れない人、なんてマジで価値ゼロだもの。

#!/bin/bash

for i in {180..0}
do
    echo -e -n "$i  \r"
    sleep 1
done
echo timer_end

以上カップラーメンタイマーw

bash はこう書けば Python の range(整数) と同様に扱えるのね。
Ubuntu では bash 指定でないと dash になってしまうので /bin/bash 指定。
塗りつぶす必要がある部分は半角スペースで埋めておく、なるほどね。

よし新しいアプリとして公開、するようなシロモノじゃ無いよな。
ということで Blog に、どこかの知らない誰かの参考になればイイや。

どうでもいいが、先日原付でコケてしまい手を上げると鎖骨のあたりから激痛なう。
やっぱり折れている?
検索すると今の程度ならサポーター治療だけっぽいし、ほっとくべ。

shell

シェル・スクリプトの基本

こんなページをチマチマ作っているけど自分で勉強になるわ。
本や既存サイトから情報を集めて元 Windows ソフト作者っぽく書き換えているので。
C-c とかいう書き方はどうしても馴染めない、てか今の Linux でソレはないと思うし。

標準エラー出力のリダイレクトは 2> と書くなんて今日まで知らなかった。
C シェルは書き方が違うが Ubuntu 使いなら B シェルだけでいいだろう。

それと気がついたんだけど ImageMagic が入っていた、9.10 には無かったのを確認。
最初からなのか何かのパッケージにくっついていたのかは解らないけど。

display
convert
identify
import
xv
netpbm

のコマンドも使える、結構おもしろい。

$ convert -sample 160x90 input.jpg output.jpg
$ identify input.jpg

しかし SyntaxHighlighter 3.0.83 が出ていたので変更しようと思ったのだが…

Opera のフォントは相変わらずだな…
というか Opera も Chrome もアルファベットの下が欠けてしまう!
駄目だこりゃ、v2 のまま当面は様子見するか。

いや、アクセス状況を見ると Blog よりまとめページに力を入れたほうが良さそうなので。
Blog は終わったとかよく見かけるけど今まで日本人は使い方を間違えていたのが正されてきただけ。
とにかく結果として情報のまとめページのほうが検索上位に、つーことだろう。

しかし IronPython のまとめは全然アクセスが無い、まったく無い。
どうがんばっても Windows でスクリプトは受け入れられそうにないな、と感じる。

MP4 Container get_m4a Nautilus Script

以前 MPEG4 動画から AAC を抜く Nautilus Script にこんなことを書いた
BlackBerry Ubuntu Connect

これだと再生時間が変な表示になるしタグ編集もできない。
理由が解らなかったけど何を今ごろこんなのを見つけた。

iTunesのライブラリにAACファイルが追加できない | OKWave

そうか、素の AAC でなく MP4 コンテナとして抜かないと駄目なのか。
一応動画プレイヤーを作っている人なのにこんなのも知らないでいいのか俺…
とにかく、ならば ffmpeg に -vn オプションを付け拡張子を m4a 指定でイケそうだ。

#FFCOMMAND = "ffmpeg -y -i %s -acodec copy %s.aac"
FFCOMMAND = "ffmpeg -y -i %s -vn -acodec copy %s.m4a"

ついでに debug 用の表示メッセージボックスのコードも入れて
コマンド出力の確認をしたい場合はコメントアウトを外せばダイアログが出る。

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

"""
    get_m4a.py Nautilus Script
"""


import os
import commands
import gtk

FFCOMMAND = "ffmpeg -y -i %s -vn -acodec copy %s.m4a"

def debug_message(text, title):
    dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, text)
    dlg.set_title(title)  
    dlg.run()  
    dlg.destroy()

path_array = os.environ["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"].split("\n")
for f in path_array:
    pos = f.rindex(".")
    r = commands.getoutput(FFCOMMAND % (f, f[:pos]))
    #debug_message(r, "Get AAC Message")

うん、コレなら再生時間も正しいし Rhythmbox でタグ編集も可能になった。
ついでに以前のコマンドで抜いた AAC もそのまま丸ごと m4a に変換できる。

もちろん BlackBerry で再生…
音が飛ぶんだが…

素の AAC なら飛ばないけど再生時間表示が Rhythmbox での算出と違う。
なんだよコレ、get_aac.py は残して追加するほうがいいな。

ついでに以前書いた Nautilus の場所バー直接入力切り替えだが。
Mandriva to Ubuntu p3
Ctrl+L でよかったのね、戻すには Esc でいい。
toggle.sh はもういらないな、つか一度も使ったことが無いような…
Linux に慣れると端末から Tab キー保管が簡単にできるディレクトリ名にしちゃうからね。