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

Ramen Timer for Ubuntu sh

以前 bash を使ってラーメンタイマーを作った。

Ramen Timer for bash

しかしイマイチ気に入らない、Ubuntu の sh は dash へのリンクだ。
普通に #!/bin/sh で始めたり sh に渡すと逆順連番が展開されない。

Almquist Shell – Wikipedia

dash でヤルなら seq を使うしか無いかな、知識が足りないからだろうけど。
seq は逆順にできないので sort で反転させれば上手くいくと思う。

ところで printf なんてコマンドがある。

#!/bin/sh

read -p "何色? :" pantu
printf "%sのパンツ\n" $pantu

echo より遥に解りやすい、C 言語の使い方で括弧やカンマが無いだけだし。
\r や \n エスケープが必要なところが自然に思えて逆に嬉しい。
しかし for 文に使うと何故か %d でも %s でもエラーになって困っていた。
今頃知ったのだが for 文の場合は %g を指定すればイケた。

そんなこんなで dash 版ラーメンタイマーを作ってみる。

#!/bin/sh

for i in `seq 180 | sort -n -r`
do
    printf "残り %g 秒  \r" $i
    sleep 1
done
echo でっきあっがりぃー

ちょっぴり進化したけど何か無駄を感じる…

Ubuntu 10.10 for DotNet EXE

こんなタイトルだけどまず Python の話。
Python で文字列を得ようとしたけど None が戻る場合がある。
今まで if で確認していたけど or 演算子が使えるようだ。

>>> import os
>>> print os.environ.get("HOME") or "Hentai"
/home/sasakima-nao
>>> print os.environ.get("LOLI")
None
>>> print os.environ.get("LOLI") or "Hentai"
Hentai

便利だけど他の言語と互換性が無いよな…
最近使っていないけど超何でもあり言語な C# なら同じ事が可能かな?
と思い久々に Ubuntu 10.10 で C# コードを書いてみたけどダメだった。

しかし何だこれは!

実行パーミッションが付いていたら exe を起動できるようになっている。
「./」指定をすると Tab キーで exe 拡張子までを保管する親切さだよ。
いつからだろう?Ubuntu 10.04 までは mono に渡す必要があったと思うんだけど。
Nautilus から W クリックすると書庫マネージャが起動してしまうんだけどw

てゆーか…
そんなに .NET アプリを Linux で使いたいのだろうか…

標準以外のライブラリは使わない、P/Invoke も WPF も利用しない。
であるならソレでもいいのだが、逆に Windows で GtkSharp なんかもご勘弁。
ところで Ubuntu 10.10 デフォルトは WindowsForm さえ使えないみたいですけど。

GtkSharp も TomBoy が残っている間は有るわけだが、今後はどうだか。
趣味プログラミングならともかくアプリケーション作りはライブラリ次第だもの。
小物を作るにも Python のほうが便利だしライブラリは標準で豊富だし、なんだよね。

register_sinkfunc

Y901x を機動すると以下の推奨メッセージが出るようになった。

** Message: pygobject_register_sinkfunc is deprecated (GstObject)

問題なく動くからあまり気にしていなかったけどそろっそろ…
海外を探しても関係ないバグ情報ばかりで困っていたのだが…

ふと思いついて rhythmbox で試してみても同じだった。

どうせ見つからないと思うけど日本語で探してみた。
んー、これはもしかしなくても ATI なのが悪いのかな。

Ubuntu日本語フォーラム / Moovidaメディアセンターが起動できません

ということで GStreamer がおかしいのだろう。
お手上げだ。

ついでに発見。
Y901x のフルスクリーンは全体サイズをフルスクリーンにしていた。
けど GDK だけフルスクリーンでもイケたと何を今更知った。
GtkBox に配置しているパーツは hide しなきゃいけないみたいだけど。

def change_fullscreen(self):
    if self.p_filename == "":
        return
    if self.fullscreen:
        self.fullscreen = False
        self.w.window.unfullscreen()
        #self.w.unfullscreen()
        self.fullobj.destroy()
        self.fullobj = None
        self.menubar.show()
        if self.full_list:
            self.listbox.show()
        #self.w.resize(self.fullsize.width, self.fullsize.height)
    else:
        self.fullscreen = True
        #cx, cy = self.w.get_size()
        #self.fullsize.width = cx
        #self.fullsize.height = cy
        self.full_list = self.listbox.get_property("visible")
        if self.full_list:
            self.listbox.hide()
        self.menubar.hide()
        self.fullobj = CFullCtrl(
                self.hbox_ctrl,
                self.toolbox,
                self.vbox_main,
                self.statusbar
            )
        #self.w.fullscreen()
        self.w.window.fullscreen()

つまり gtk.Window.window.fullscreen() 処理だけでよかった。
全体をフルスクリーンにして後でサイズを戻す処理は必要ないんだね。

コレならフルスクリーン中にリストを出す処理も簡単に実装できるかな?
そういえばリストを下に移動する処理を入れるって前書いたっけな。
ユーザーは多分自分だけだと思うからどうするのも勝手だけど。

WebKit for Python

Ubuntu 10.10 のアップデート、61MB もあるんかい!
ってよく見たら libwebkit なんてのがあるんだけど…

WebKit な Epiphany は GNOME 標準だけど Ubuntu では除かれているのに。
ライブラリだけは存在しますということなのかな?
まてよ、そういうことならデフォルト状態で Python から使えるかも。

>>>import webkit

10.10 はデフォルトで利用できるようです、てゆーか
/usr/share/doc/python-webkit/examples/browser.py
にサンプルコードがあるわな。

このサンプルコードを試してもいいけど最小限のコードを書いてみる。

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

import gtk
import webkit

class WebKitTest(gtk.Window):
    """
        WebKit test for Python
        from Ubuntu 10.10
    """
    def __init__(self):
        # Window
        gtk.Window.__init__(self)
        self.connect("delete-event", gtk.main_quit)
        self.resize(640, 480)
        # WebKit
        w = webkit.WebView()
        w.load_uri("http://google.co.jp/")
        # ScrollWindow
        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        # add
        sw.add(w)
        self.add(sw)
        self.show_all()

if __name__ == "__main__":
    w = WebKitTest()
    gtk.main()

おぉ、コレだけで使えるのか。
GtkScrolledWindow を噛まさないと縦長のページで悲惨になるので注意ね。
後はサンプルコードを見ながらチマチマ弄くれば立派な自作ブラウザになりそう。

とにかく Python だけで何でも作れてしまう。
デフォルト状態でも作って遊べるというのはやはり素晴らしい。
Windows ではこんなこと考えられないものなぁ。

Linux Trash GVfs

十月、Linux 関連は毎度のごとく半年に一度のバージョンアップ時期。
新しい環境を半年に一度楽しめる、何がどう進化したのか確認するのが楽しい。
グチャグチャになりかけた HDD 内データを整理するよい機会だから必ず別 HDD に新規インスコ。
その時点までの HDD バックアップができるオマケ付き、半年毎の OS 入れ替えはマジお勧め。
しかし…

GNOME 2.32 リリース・ノート

GNOME 3.0 で libgnomevfs が使えなくなるのをそろそろなんとかしなくては。
だって Y901x でしっかり利用しているんだもの。

ぱぇぽぃ2 ? Blog Archive ? Get MIME Type and Description

コレを使わずに MIME Type 取得か、どうやるのだ?
海外を探すと GObject や GIO を使えと出てくる。
色々探すと関係ないんだけど GVFS なんてものを見つけた。

GNOME には gvfs-trash なんてコマンドがあるのか。
もしかして…

$ gvfs-trash ファイル名

これでゴミ箱移動ができたのね…
トップページで公開している trash コマンドはどうしよう…