月別アーカイブ: 2009年6月

create_small_image Nautilus-Script

次の覚書は GtkUIManager を利用してツールバーに独自画像を。
とやりたかったけどストック以外を指定する方法が無いみたい。
一旦個別に抜きだしして割り当てるならできそうだけどどうしよう。

ところで

gtk.gdk.Pixbuf

GDK-PixBuf には save というメソッドがあるんだね。
これは…上手く使えそう。

たとえば blog に使う大きな画像へのリンク用の小さな画像作りなんかに。
これを Nautilus スクリプトにしてしまえばそのためだけに Gimp を利用する手間が省ける。
ということで試しに書いてみる。
生成する画像の名前は WordPress が付ける名前に合わせサイズを付加する例。

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

"""
    create_small_image Nautilus-Script
    written in Python.
"""

import gtk
import os

path_array = os.environ["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"].split("\n")
for picfile in path_array:
    try:
        pixbuf = gtk.gdk.pixbuf_new_from_file(picfile)
    except:
        continue
    # Under 300*300 image
    d_width = 300
    d_height = 300
    # GdkPixbuf size
    p_width = pixbuf.get_width()
    p_height = pixbuf.get_height()
    # Calculated to fit the smaller
    width = 0
    height = 0
    if (d_width * p_height) > (d_height * p_width):
        width = p_width * d_height / p_height
        height = d_height
    else:
        width = d_width
        height = p_height * d_width / p_width
    # Create Resizeing GtkPixbuf
    small_image = pixbuf.scale_simple(width, height, gtk.gdk.INTERP_BILINEAR)
    # Create small_image Name
    pos = picfile.rindex(".")
    image_name = "%s-%dx%d.png" % (picfile[:pos], width, height)
    small_image.save(image_name, "png")

で、Nautilus script に登録する。
Nautilus で画像を選択状態にして右クリックメニューからスクリプトを選択。

sclipt_menu

で、画像があるディレクトリに縮小された画像が生成されているはず。
てかおいおい、こんな簡単にスモール画像が作れちゃったよ。
今まで書いたスクリプトを組み合わせただけなので製作時間 15 分。

さてコレを覚書ページに…どこに入れればいいのだ?
よく解らないから blog に書いてみた。

追記

また script を sclipt と書いていた…ので書き換えておます。

Enjoy!

Who wants to program

Pythonの’,’.join()がキモいと思ってた時代が僕にもありました – by edvakf in hatena

そういえば join なんて一度も使ったことがないや。
というか join なんて実用アプリを作るのに必要な場面があるのだろうか?
リストにしたデータを全部くっつけるという場面が思い浮かばなくて困った。

オタクをピクっとさせる10の発言 | WIRED VISION

第10位の PHP を否定って意味すら解らない。
PHP は HTML 中に書け拡張子を php にして実効パーミッションを与えるだけで動かせんだよ。
だからココまで広まったし私も利用している、私はそんなにヲタクでは無かったようだ。

Ubuntu日本語フォーラム / PythonのIDEを教えてください

Python がやりたいの? IDE が使いたいの?みたいな。
IronPython Studio に至っては検索すると皆「インストールしました」で終わっている。
俺 Ubuntu では Gedit、Windows では EmEditor Professional ですけど。
ココで Emacs といかないからやっぱりヲタクにはなれない。

以前から思っていたけど趣味でプログラミングをする人は大きく分けて二種類いる。

とにかく何かアプリケーションが作りたいからプログラミングをやっている人。
それとプログラミングがやりたいからプログラミングをやっている人。

IDE がどうとかって完全にプログラミングがやりたい人でしょ。
アプリケーションが作りたい人は適材適所で言語を選んでいるだけなわけで。
文法がどうとかマジどうでもいい、所詮他人が作った言語なので従うのみ。
言語は作品を作る道具としてしか見ていないわけで。

んでアプリケーション作りで覚える必要が無いことには興味も持たない。
ラムダ式とかって普通に関数を書けばいいだけだし利用する気にもならん。

「こんなことができないかな?」
とはいつも思うが
「こんな書き方ができないかな?」
なんて思ったことなんか私は色々な言語で十年やっているけど一度も無いんですけど。

私は Python が気に入ったのではなく PyGtk が気に入ったわけだから。
Gtk+ や WPF を利用する道具として Python, IronPython を選んでいるだけ。
きっと日本の Python マニアから見ると変な人なんだろう。
ま、元々が Windows のオンラインソフト作者だもので。

Python is doing in Linux

ぱぇぽぃ2 ? Blog Archive ? ラジオメニューとトグルボタンの同期

をもう少しまともに解説、やはり実際に使えるコードでないと動作を実感しないだろうから。

GtkRadioAction でラヂオメニューとツールバーを同期させる

しかし GtkRadioActionEntry の value 引数に直接値を入れたのは我ながらナイス。
ついでにココも大幅に追記、これも以前 Blog のほうで書いたコードだったりする。

テキストや図形を描写する

思いつきを Blog でやって覚書ページにまとめると決めていたがサボってばかりだ。
しかし自分で書いたコードを探すのに自分の Blog を検索するのって何か変な気分。

しばらく IronPython ばかりやっていたのですがやはり Linux で PyGtk のほうが面白いです。
なんたってすぐに起動できる、簡単に書けるようにバインディングされている、端末操作も楽。
なにより、メソッドの先頭が大文字という違和感が PyGtk には無いのが一番嬉しい。
.NET Framework はクラス名なのかメソッドなのかプロパティなのか解りにくい。

というか… .NET Framework は単純なものを作る場合は短いコードで住ませられるんだけど。
少し凝ったことをしようとすると嫌がらせとしか思えないほど面倒になってタマラン。
.NET Framework とは仮想マシンであり Windows では無いのが少し解ってきた今日この頃。
要求する新たな知識がハンパないので新参プログラマーはカワイソウ。

Devhelp を見て
「ならば PyGtk ではこう書けばイケるだろう」
が通用する PyGtk って楽だなぁと感じた今日この頃。
SDK Help はこう作って欲しいです、MSDN 様。

Enjoy!

Python getter, setter

Python は 2.6 以降の property でゲッターセッターが使えるらしい。
IronPython 2.6 でも使えるのかな?両方で実験。

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

class Engine(object):
    """
        over 2.6 property getter,setter test
    """
    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value
        print "(%s) get!" % value

    @name.getter
    def name(self):
        print "out"
        return "name as %s" % self._name

if __name__ == "__main__":
    # static test
    #Engine.name = "Toyota"
    #print Engine.name
    # instance test
    eg = Engine()
    eg.name = "Honda"
    print eg.name

getset

static でも property はアクセスできるけどセッターやゲッターは無視される。
オブジェクト生成を行ったのであれば普通にセッターやゲッターとして使える。
IronPython でも 2.6 なら有効なのが嬉しいですね、まだ 2.6 はベータですが。

getter は書かなくても良い、普通は setter 時に何か event を起こすのに使うものですし。
C# と違い実体は書く必要は無いようです、しかしイマイチ解りにくい書き方ですよね。

これを利用して IronPython で ObservableCollection を作って ListView を…
とやっているんだけーが上手くいかないのでまたこんど。
PropertyChanged は IronPython ではどう書けばいい???

第2章 ListView 1/1 – 続・ひよ子のきもち

こんな強烈な IronPython 屋さんが日本にいたんだ。
今まで検索に引っかからなかったのは何故だろう、探し方が悪いのか?
とにかく参考にさせてもらおう、メモメモ。

Enjoy!

more WPF

Planet Python

私の blog はおもくそ日本語なのにまた見つけられちゃった。
IronPython でこんなことをやっているのは世界中で私しかいないからだろうけど。
本当はスパム対策で日本から以外のアクセスは遮断したいんですけど。

mojibake

しかし日本からのアクセスだと utf-8 でも化けてリンク先にアクセスできないんですね。
Error 404 – Not Found になってしまう、多分英語圏でないところは全部ダメだと思う。

今後タイトルくらいは英語にしておいたほうがよさそう、日本人が到達できないのでは困る。
ロクな語学力が無いけどソースコードのコメントもなるべく英語にするべぇ、それで十分だろう。
今回から練習、ありがちな Enjoy! というサフィックスも無意味に入れて。

しかし世界中探しても WindowsForm ばかり…

次期Visual Studio 2010と.NET Framework 4.0の新機能 ? @IT

Visual Studio 2010 は UI が WPF 製になるんだ、もはや完全なる .NET Framework の世界。
開発環境本体が WPF で WindowsForm を使う人はまずいないだろう。
WindowsForm って Windows SDK の単なるラッパーですよ、既に過去の遺物。
みんな早々に WPF に移行しませう、IronPython で(それはもしや私だけ…

WPF = 豪華なグラフィックス

な偏見はそろそろヤメようよ、この記事を書いた人もそれっぽいし。
PyGtk みたく普通の GUI 部品として使ってはいけないなんて MS も言っていないわけで。
GTK+ なり Swing なりを知っている人ならもっと WPF のレイアウトに興味を持とう、楽しいよ。

だいいち VirtualBox のゲストで動かす人もいるんだからエフェクトに凝られても困る。
グラフィック関係は味付け程度に考えればいいと思う。

でも Windows 7 に .NET Framework 4.0 が入り DLR が標準ならもう VS は不要のような…
IronPython 等が流行するならだけど、フリーな XAML デザイナが今後出てくるような気が。
MS は VS より .NET Framework を広めたいはずだから自社で出す戦略もアリ。

既に VC++ は API の追加によるヘッダの提供くらいしかやることが無いだろう。
WPF の開発が可能になった VS 2008 の時と比べてかなーり製品として魅力が薄い感じ。
IDE の親切機能自体は強化されているだろうし C# 4.0 がやりたい人にはいいかも。

*****

ついでに、 Ubuntu の PrintScreen でマウスカーソルは全部矢印になると解った。
書くまでもなく上の画像を撮影した時はリンクを示す手のカーソルになっていたのにこうなった。
マウスカーソルは本当は画像化できないので書き足しているというのがよく理解できます。

Windows のネタなのに全部ホストの Ubuntu + gedit でネタを作っている私であった。

Enjoy!