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

Visual Studio x64 build test

時間が掛かりすぎるので休日にしかできない仮想 Vista 構築の続き。

前回はただ OS のインストールだけで終わったので Vista に SP を当てないと。
Windows Update では自動で当ててくれないのが忌々しい。

sp1 を当てないと sp2 が当てられないのね、面倒すぎ。
4 時間使ってやっと両方が終わったところで IE8 への自動更新が出る。
一度にやってくれよ、何回再起動させればいいのやら…

やっと Visual Studio をインストールする環境が揃う。
インストール DVD を立ち上げ今回は忘れずに「すべて」を選択。

vs_all

やっぱり一時間半掛かって、んで一時間使って MSDN ヘルプを入れて…
そして sp1 にするのにまた一時間半と、更に Update が掛かって…
そして今回も丸々一日使うはめになったとさ。

あーもうなるべくコイツは使いたく無い、Visual Studio 専用 OS にしよう。
FTP ができないと困るがこれでやればイイや。

[IE]Internet Explorer で FTP サイトのパスワードを入力する方法

Explorer のエディット部にコレやればとりあえずファイル転送はできるのよね。
パーミッション変更とかはできるはずがない、それらはホストの Mandriva からやる。
パスワードに記号とか入れている人は URI 変換をお忘れなく。
でも何故か Windows 7 ミニノートからではできない…

とにかく minipoli のソースを落として実験だ。
Visual Studio 起動、初回は遅いけど二回目以降は起動が早いというより一瞬。
仮想 OS になっても Vista の SuperFetch は完璧である。
でなきゃ困る、だから XP も 7 も持っているのに Vista を使うんだから。
7 の SuperFetch は効きがイマイチなんだよなぁ…

select_x64

「すべて」を選択したので今回はしっかり x64 の選択肢があった。
ソースコードはまったく弄くらずに minipoli をビルド、何事もなくビルド完了。
ちょっと拍子抜け、本当に 64bit 用にビルドされたのかな?
実験で 32bit であるこの Vista で使ってみる。

minipoli64.zip

32bit_test

わーい 64bit ですってエラーになった!
次に x64 Windows 7 であるミニノートに持っていき試す。

64bit_test

あたりまえのように動く、マジでコードは一行も変更しないで済みそうだ。
後は 64bit 用インストーラを作成すれば minipoli の x64 化は完了。
それがやりたいだけの為に二回も休日を全部使ってしまった…
好きでやっているのだから別にイイのだが。

OSASK 公開停止か? – スラッシュドット・ジャパン

いやいや、皆が何を言いたいかよく解るなぁ。
開発者が望んでいるようなユーザーが一人でもいるなんて奇跡に等しい世界ですから。
情報公開もオープンソースも自己満足、それでいいじゃない。

get the X Window ID from gtk.Drawingarea

私は Y901x という GStreamer フロントエンドな動画プレイヤーを作った。
もちろん自分で使っているのだが Mandriva 2010.0 に乗り換えたら落ちまくる。
でもタマに問題なく動く場合もがあるからややこしい。

ついでに、ソースディレクトリに pyc キャッシュを作成しなくなっているのだが…
Mandriva 2010.0 だからなのか? Python がヤメたのか?それとも他の場所にあるのか?

0.1.9 を色々弄くって以下の処理を行っている場所
GtkDrawingArea の X Window ID を得ようとすると X server Error になると解った。

imagesink.set_xwindow_id(self.video_window.window.xid)
# これさえも error
print self.video_window.window.xid

gtk.DrawingArea.window は gtk.gdk.Window であり gtk.gdk.Drawable のメソッドを持つ。
なので xid アトリビュートで X Window ID が得られるようになっている。

コレが現行の GTK+ ではできなくなったのかな?
と疑って xwininfo をインストールして使ってみた。

xwininfo

何も問題無く root window の xid が得られている。
それなら root な gtk.Window.window に割り当てたらどうなる?

imagesink.set_xwindow_id(self.w.window.xid)
#imagesink.set_xwindow_id(self.video_window.window.xid)

fullwindow

コントローラやメニューが塗りつぶされたけどコレなら問題無く xid が指定できる。
ということは gtk.DrawingArea の window.xid の取得方法がマズイということだろう。
ならば簡易なコードを書いて試してみる。

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

import pygtk
pygtk.require('2.0')
import gtk

class Xid():
    def __init__(self):
        w = gtk.Window()
        vbox = gtk.VBox()
        self.da = gtk.DrawingArea()
        button = gtk.Button("Press me")
        button.connect("clicked", self.show_xid)
        vbox.pack_start(button)
        vbox.pack_start(self.da)
        w.add(vbox)
        w.set_title("xid")
        w.connect("delete-event", gtk.main_quit)
        w.show_all()

    def show_xid(self, widget):
        widget.set_label("gtk.DrawingArea xid: %s" % (self.da.window.xid))

if __name__ == '__main__':
    w = Xid()
    gtk.main()

あらら、この方法では問題無く取得できてしまった。
ということはタイミングが問題なのか、何か event が起こった時に取得すればイケそうだ。
ということで検索しまくった、日本語で見つかるはずがないのでやはりメリケンの Google で。

Re: [pygtk] get the XID from gtk.Drawingarea

expose-event を吐いた所で xid を保存してソレをブチ込めばいいということかな?
でも expose-event を待つ必要があるので __init__ で sys.argv を処理できない。
show シグナルにて sys.argv を処理するように書き換えて実験。
コードの解説は長くなりすぎるからバックアップを見てくれで済ます。

y901x-0.1.10beta.tar.gz

kkobato

あぁやっと Ubuntu 9.04 で使っていた頃のように Mandriva で動くようになった。
GTK+ が厳密になったのか Ubuntu がいいかげんだったのかは今は解らない。
ところで Mandriva でも Ubuntu と同じインストールスクリプトが使えるね。

もうしばらく自分で試してから本サイトの奴は更新します。
Ubuntu 9.10 でも試さなきゃなぁ、多分同じだと思うけど…
てか RPM にしたほうがいいのだろうか?需要はシラネ。

Mandriva 2010 GStreamer Check

DeskTop Linux を Mandriva に乗り換え快適な毎日である。
しかし自作動画プレイヤー Y901x が落ちまくって使えないのは困った。
コイツの操作性に慣れきってしまったのよ、自分が作ったのだから当然。

VirtualBox 上だったとはいえ 2009.1 では Y901x は問題無かったはずなのに。
SeeMe for Linux は我ながら完璧だ、32bit 限定での話だが。
怪しそうなものを考えてみる。

Mandriva のセキュリティ関連が邪魔をしているのか?
GNOME や GTK+ のバージョンが上がったせいなのか?
それとも GStreamer 自体のバージョンのせいなのか?

OS のバージョンアップで以前のアプリが動かなくなるなんて当たり前の話だからね。
過去の資産?はぁ…ドキュメントを読めない人ですかアナタ、漢字文化圏用も用意したのに。
と、Microsoft は強気でいても全然構わないと私的には思うんですけど。
でなきゃ以後の Windows の進化にまで影響が出てしまう…
Windows 7 はその点だけは残らず褒めろ、コイツの開発者達は恐るべき執念、以上脱線。

ということで。
複雑(でもないが)な Y901x では解らないので以前自分で書いたコ以下のコードで試す。
複雑でもないというのはベースである Windows 版 Y901 はトンデモネェ程複雑だから。
自身で何故こうなっているかワカンネェ、だから Cinema は超単純化…まぁそれは関係なくて。

動画プレイヤーを作る

やっぱり動かない…

bus.enable_sync_message_emission()
imagesink.set_xwindow_id(self[“drawingarea1”].window.xid)

のどちらかをコメントアウトすると別個ウインドウになって普通に動く。
つか enable_sync_message_emission ってそういうことだったのね。
知らないで以下のコードをまるまるコピペしたよ。

2. Playbin

そういえば Mandriva の GStreamer のバージョンは何?

gst_ver

0.10.25 なのか、超最新版じゃないの。

GStreamer: open source multimedia framework

むーどうやらこの辺が怪しいな。
もう少し調べてみます。

で。

seiki

Vista は普通に認証通ったよ、何時スナップショットを取ろうかな?

xml:lang

ぱぇぽぃ2 ? Blog Archive ? SeeMe is to IronPython

で XAML から読み込んだ menu が文字化けしていた件がやっと解決。
XAML に xml:lang=”ja-JP” を追記すればよい。

#-*- coding:utf-8 -*-

menu_str = """<Menu
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xml:lang="ja-JP">
    <MenuItem Header="ファイル(_F)" TabIndex="1">
        <MenuItem Header="保存(_S)" Name="save" InputGestureText="Ctrl+S" />
        <MenuItem Header="読み直し(_R)" Name="reload" />
        <Separator />
        ...

xml_lang

2009-10-29 – 当面C#と.NETな記録 # WPF のカルチャー

これを見てカルチャー指定を IronPython でやってみたけど化けたまま。
というか元である C# SeeMe はこんな処理していないけど文字化けしていない。
動的読み込みだからなのだろうか?
IronPython で WPF は全部コードで作ったほうが面倒が無いかも。

Identify the x64 Windows for IronPython

そういえば Opera のインストール先を得る必要があったんだ。
結局 x86 か x64 かをコードで見分ける必要があるのだってことだね。

チャチャっと探してみると WMI を使えば簡単だと解った。

C# WMI
WMIを使ってOSの情報を取得する: .NET Tips: C#, VB.NET, Visual Studio

ここらを見ると .NET 経由でも WMI から様々な情報が得られるようで。
私はとりあえず x64 かどうかさえ見分けられればいいので下記のように。

#-*- coding:utf-8 -*-

"""
    cpu_check.py
    Check Windows Architecture
"""

import clr

clr.AddReference("System.Management")

from System import *
from System.Management import *

# Create ManagementClass
mc = ManagementClass("Win32_Processor")
# Get ManagementObjectCollection
moc = mc.GetInstances()
# mo is ManagementObject
for mo in moc:
    bit = mo["AddressWidth"]
    if bit == 32:
        print "x86 Windows"
    elif bit == 64:
        print "x64 Windows"
    else:
        print "Unknown Windows"

何故か IronPython コード、だってコンパイルするのが面倒くさい。
Win32_Processor 指定で x64 も判別できるようだ。
以下私の環境でテスト。

My 32bit Windows Vista
check_x86

My 64bit Windows 7
check_x64

これで見分けは簡単に行えそうだ。
でももっと簡単な方法がありそうな…