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

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

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

FizzBuzz

どうしてプログラマに・・・プログラムが書けないのか?

Python でやってみた。

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

for i in range(100):
    j = i + 1
    if j % 3 == 0:
        if j % 5 == 0:
            print "FizzBuzz"
        else:
            print "Fizz"
    elif j % 5 == 0:
        print "Buzz"
    else:
        print j

何のヒネリも無いコードで 6 分も掛かった、私はこの人の会社にはいけないようだ。
というか後で気がついたが

for j in range(1, 101):

と書けばいいことを忘れていた、しょんぼり。

Fizz Buzz – Wikipedia

リンク先を見ると本当に日本人はワンライナーが大好きなんだなーと思う。
海外で FizzBuzz を探すとだいたいどの言語でもこんな感じなんですけどね。

Geek School ? Get Hired With FizzBuzz

実際の話、ワンライナーで書けたところで実践に役立つとは思えない。
剰余(%記号等)を用いないなんて何が目的なのかさえ解らないのだが。
そんなことよりユーザー入力がまったく無いプログラムに凝ってどうするの?と。

まず fizz と buzz という整数を保持する変数を用意してユーザーに数値を入力させる。
fizz の倍数のときは数の代わりに「Fizz」
buzz の倍数のときは「Buzz」
fizz, buzz 両方の倍数の場合には「FizzBuzz」
どちらにも該当しないなら数値そのままの文字列
の値を返す関数を使って 1 から 100 までの数をプリントするプログラムを書け。

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

print "\nFizz と Buzz の値を指定してください"
fizz = input("Fizz=")
buzz = input("Buzz=")

def fizzbuzz(n):
    if n % fizz == 0:
        if n % buzz == 0:
            return "FizzBuzz"
        else:
            return "Fizz"
    elif n % buzz == 0:
        return "Buzz"
    return str(n)

for i in range(1, 101):
    print fizzbuzz(i)

みたいな感じのほうが実践的かなと。
初めはつい関数の最後で else を入れちゃうんだよね、いらないのに。

GtkAspectFrame shadow_type

最近 PyGtk ネタを書いていないことに気がつく。
てかセ CULV セレロンの検索で何人も来ているという始末。

culva

やっぱり需要の高そうなネタに終始したほうが…とか思ってしまいます。

ということで Y901x の現状。
Mandriva で Y901x を使うと GtkAspectFrame に枠が入ってしまう件はなんとか解決。

gtk.Frame

GtkAspectFrame の set_shadow_type メソッドで gtk.SHADOW_NONE にするだけ。
つまり Ubuntu で使っているテーマでは影が元々まっ黒だっただけということかな?
後はとにかく Compiz 有効にできる HDD インストールを行って試してから更新の予定。
2010.0 は 15 日だったような覚えがあるんだけど…気のせいだったか。

DistroWatch.com: Put the fun back into computing. Use Linux, BSD.

それとずっと解らないこと。
Compiz 無効の 2D 描写時はリストグリップのラインが再描写で上手く描写されない。
expose-event ってどうも Windows の WM_PAINT のように完璧にはいかないようだ。

ダブルバッファリングを無効にすると少しマシだがダメな場合もある。
そういえば Windows では DC に線を書くより画像を表示したほうが負荷が軽い。
ならば画像でやってみよう、self.grip_pix という変数に GtkPixbuf を格納し

def __on_expose_event(self, widget, event):
    # GetDC()(Windows)
    gc = widget.style.fg_gc[gtk.STATE_NORMAL]
    # Draw Vertical Line
    area = widget.window
    area.draw_pixbuf(gc,
                    self.grip_pix.scale_simple(event.area.width, event.area.height, gtk.gdk.INTERP_NEAREST),
                    0, 0, 0, 0)

もっと負荷が大きくなった…
てか pixbuf を引き伸ばして描写するにはこういう方法しか無いのだろうか?
Win32API の BitBlt みたいな転送方法があると思うんだけど今は解らない。

いっそ GtkImage で…こいつは GtkEventBox が必要になるので嫌だし引き延ばしが無理そう。
おまけにやっぱり上手くいかない、3D で使えば何も問題無いので放置のままかな。

しかしちっとも需要が無い GStreamer Player の更新を続けてどうする…
だが Windows でソレをやり続けたから Linux でもアプリが作れるようになったのだからね。

プログラミング検定

プログラミング検定 – selfup検定—ITpro EXPO 2009:ITpro

オンラインソフト作者には関係無いことばかりだがやってみよう。
回答は後日メールで、になっているけどぶっちゃけ問題10以外は検索で解る。
Opera 使いなら知りたい単語を W クリックして「検索」メニューを選ぶだけだ。

問題1
私は逆に「リファクタリング」以外を見聞きしたことが無いぞ、このやろう!
Visual Studio を持っているからね、知らないものは検索して勉強だ!

問題2
間違える人いるの?
つか私には全部意味が解るけど…どうなのかな。

問題3
コレって二択ヤン、日本人プログラマをバカにしているの?
それより開発者の名前なんて知っている必要はあるの?
悪いが私は Python 開発者の名前を知らないぞ。

問題4
ンナモンシラネェよ!
それより自分のパソコン内以外でのテストをやっていない人が多すぎる!
今までは Windows 限定の問題だったが Linux ( つか Ubuntu ) で少し出てきたのは怖い。

問題5
コレは本当に知らなかったので勉強になった気がする。

問題6
検索してみて納得、配るアプリを作っているからにはそういうのを考えなければ。

問題7
一番勉強になった。
とはいえ一生涯お世話になることは無い気がするけど。

問題8
問題の作り方は良かったけど選択肢が悪かった例。
それなりのプログラミング本を読んでいれば必ず出てくるし。

問題9
First In First Out なら一つしか無いがコレも選択肢が悪いような…
ともいえるんだがソレさえ知らない人が公開アプリを作っている時代ですので…

問題10
インタプリタの幾つかはコンパイル済み EXE にできるんだが…
全部間違いのような…でも内部はインタプリタだったりするし…

動的言語と勘違いしていた…
インタプリタでなら A でいいはずだ。

結果、私は問題10を除いて 5 問正解、まだまだサルだな。
こういうのって面白くて勉強になるから大手にもっとやってほしい。