プログラミング検定

プログラミング検定 – 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 問正解、まだまだサルだな。
こういうのって面白くて勉強になるから大手にもっとやってほしい。

ネタとして MonoDevelop で WindowsForm を作ってみる。

WindowsForm を散々バカにしてきた私だが。
ネタとして MonoDevelop で WindowsForm を作ってみる。

空の新規ソリューションを作成する。
ソリューションエクスプリーラの参照の所を右クリックして下記メニューを選択。
こんなところまで Visual Studio のパクリかよ。

migimenu

出てきたダイアログから以下をチェック。
System.Windows.Forms
System.Drawing

02

次にプロジェクト部分を右クリックして「追加」「新しいファイル」
空のクラスを選択し OK でコードが書けるようになる。

main_class

コードを書いてみる

using System;
using System.IO;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;

namespace winform_test
{
	/// <summary>
	/// WindowsForm 継承クラス
	/// </summary>
	public class MainWindow: Form
	{
		TextBox textBox;

		public MainWindow()
		{
			this.Size = new Size(320, 320);
			this.Text = "WindowsForm はこんなに酷い";
			// 第一ボタン
			Button button = new Button();
			button.Text = "ポチッと押してちょ!";
			button.Location = new Point(10, 10);
			this.Controls.Add(button);
			button.Click += delegate {
				MessageBox.Show("クリックしたね!", "タイトル");
			};
			// 第二ボタン
			Button button2 = new Button();
			button2.Text = "Dialog";
			button2.Location = new Point(10, 30);
			this.Controls.Add(button2);
			button2.Click += HandleClick;
			// テキストボックス
			textBox = new TextBox();
			textBox.Multiline = true;
			textBox.AcceptsReturn = true;
			textBox.AcceptsTab = true;
			// サイズ変更追従にこんな面倒なことをやる必要がある
			textBox.Location = new Point(0, 40);
			textBox.Size = new Size(320, 280);
			textBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | 
				AnchorStyles.Left | AnchorStyles.Right;
			this.Controls.Add(textBox);
		}

		void HandleClick(object sender, EventArgs e)
		{
			OpenFileDialog dlg = new OpenFileDialog();
			if (dlg.ShowDialog() == DialogResult.OK)
			{
				StreamReader sr = null;
				try
				{
					sr = new StreamReader(dlg.FileName);
					string s = sr.ReadToEnd();
					textBox.Text = s;
				}
				finally
				{
					if (sr != null)
						sr.Close();
				}
			}
		}
	}
	
	public class main_class
	{
		/// <summary>
		/// エントリポイント
		/// </summary>
		public static void Main(string[] args)
		{
			MainWindow win = new MainWindow ();
			Application.Run (win);
		}
	}
}

winform

たったこれだけでも死ぬほど遅い。
Windows は最終的に Win32API だが mono の WindowsForm は全部ソフトウエア描写だから。
Gtk# なら最終的に GTK+ がやってくれるので少しマシ、それにダイアログに違和感バリバリ。

何より絶対位置配置しかできないので重なったりはみ出したりする。
これは意図的にそう書いたけど GTK+ や WPF ではこんなことはおこらないんだよ。
GTK+ でも GtkFixed レイアウタを使うと同じようになるけど。
自分の目で確かめればいいと思うならテーマを色々変えてみれば何を言いたいのかが解る。

同じものを PyGtk で作る。
もちろん GtkHBox, GtkVBox レイアウタを使う。

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

import gtk

class GtkForm(gtk.Window):
    """
        GtkWindow 継承クラス
    """
    def __init__(self):
        gtk.Window.__init__(self)
        self.resize(320, 320)
        # 第一ボタン
        button = gtk.Button()
        button.set_label("ポチッと押してちょ!")
        button.connect("clicked", self.messagebox)
        # 第一ボタン
        button2 = gtk.Button()
        button2.set_label("Dialog")
        button2.connect("clicked", self.opendlg)
        # テキストビュー
        self.textbox = gtk.TextView()
        # パッキング
        vbox = gtk.VBox()
        vbox.pack_start(button, False)
        vbox.pack_start(button2, False)
        vbox.pack_start(self.textbox)
        self.add(vbox)
        self.set_title("画像ビューア")
        self.connect("delete-event", self.on_quit)
        self.show_all()

    def on_quit(self, widget, event=None):
        gtk.main_quit()

    def messagebox(self, widget, event=None):
        dlg = gtk.MessageDialog(self, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, 
                                gtk.BUTTONS_OK, "クリックしたね!")
        dlg.set_title("タイトル")  
        r = dlg.run()  
        dlg.destroy()

    def opendlg(self, widget, event=None):
        dlg = gtk.FileChooserDialog(
            buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
        r = dlg.run()
        try:
            if r == gtk.RESPONSE_OK:
                f = open(dlg.get_filename())
                self.textbox.get_buffer().set_text(f.read())
                f.close()
        finally:
            dlg.destroy()

if __name__ == "__main__":
    """
        エントリポイント
    """
    w = GtkForm()
    gtk.main()

桁違いに早いし絶対に重なったりはみ出したりしない。
手抜きでスクロールバーを入れていないので小さいテキストファイルで試すのを勧める。

ネタが無いのでちょっと MonoDevelop を使ってみた。
9.04 にしてすぐ入れたのに結局使わなかったもの…

Mandriva 2009.1 on mono and IronPython

mono イラネェ…だけれど、もはや GNOME の一部みたいなものだし。
よく見ると GNOME Mandriva に入っている mono のバージョンが 2.2 だ。
これって IronPython 2.0 が普通に動くんでね?
サイトに行くと IronPython 2.6 が RC になっていた、2.6 正式版は近いようだ。

IronPython – Home

せっかくなので 2.0.2 と 2.6 RC を落として使ってみる。
2.6 RC はダメだった、2.0.2 は普通に動くでないの。

999

本家からのやつだから以前手に入れたものと違い日本語も通るようだ。
ぱぇぽぃ2 ? Blog Archive ? IronEditor

しかし矢印キーでカーソル位置を変更できない、 Windows 用キーバインドは効かない。
Linux で動かす場合は Ctrl+D で終了にしてくれよ、Ctrl+Z じゃ間違える。
GNOME 端末で使うのはちょっと簡便してくれという感じ。

つーか「ソフトウェアの管理」に 2.0.1 があるじゃないの。

mandriva_ipy

ASP.net で利用すると思われるライブラリがコレデモカ!というくらい付属。
2010.0 ではもっと増えそう、てか mono と IronPython のバージョンは何になる?
イラネ…利用するにしても本体だけを本家から落として使うと思う。

しかしローケルが UTF-8 である Linux のほうが StreamReader 等が使い易いのはこれいかに。
Encoding 指定しなければ BOM 無し UTF-8 で読み書きだものね。
Windows も過去の資産なんかどうでもいいからとっとと UTF-8 になってくれよ。

それより mono で動かしたほうが早いんだが…
標準 Python のほうが圧倒的に早いけどね。

checkinstall

Linux のスクリーンショットが沢山見られるサイトを見つけた。

Linux, BSD, Solaris & Other OS Screenshots | The Leader in Linux, BSD, Solaris & Other OS Screenshots | Screen Shots of Linux Distributions, BSD, Solaris & Other OSes | Linux, BSD, Solaris & Other OS Screenshot Gallery

GNOME と KDE ばかりとはいえ、なんだかんだで見た目は大事ですから。
最新版の見た目を見てどんな感じになったのか確かめたりする他
そういえば昔の Fedora はスタートメニューが赤い帽子だったなぁとか楽しめます。

Linux標準にPerlとPythonが追加 ? @IT

古い記事だが、だから今の Linux には Perl と Python が必ず入っているのか。

Linux Standard Base – Wikipedia

Debian 系がいつまでも deb に拘っているほうがどうかと思うのだが。
Opera とかも Debian 系のためだけに deb パッケージを用意するのは大変だろうに。
こういう点が面倒だから Desktop Linux ではアプリが偏る結果になるのに。
と思っていたけど…

3種類のパッケージを手軽に作成 checkinstall – 特選フリーソフト:ITpro

Ubuntu から apt-get で手に入るのでやってみた。

checkinstall

Y901x のインストールスクリプトを install.sh にして実効パーミッションを付加。
cd コマンドでインストールスクリプトのあるディレクトリに移動。

$ sudo checkinstall ./install.sh

y901x_dev

あらら、簡単に作れちゃった。
でも何故 root 所有になるの?もう少し調べると面白いかも。

Mandriva は GNOME を選んだほうがいい

多分もうすぐ Mandriva 2010.0 が出る、その時点で Ubuntu から完全に乗り換える。

しかし、Mandriva はやはり Mandrake の時代からの名残りで KDE だよ。
と思って色々試したはいいけど、どうにもシックリこない。
今まで利用していたアプリはほとんど GTK+ 製であることに今更気がつく私。
それどころか GNOME 標準アプリばかり使っているという事実を思い知る。

結局 Gedit や Nautilus を利用したくなるのなら GNOME 版を使えになる。
しかしそれだったら Ubuntu から乗り換える理由があんまり無いわけだが…
Qt のノウハウが高いはずなので GNOME でも Opera が Ubuntu よりは安定するかも。
何より Ubuntu しか知らないで Linux 使い面するなんてイヤだ!

そう思い直して素直に GNOME 版の One も VirtualBox にて試すことにした。

mandriva-linux-one-2009.1-GNOME-africa-asia-cdrom-i586.iso

どうでもいいが riken の FTP ディレクトリ名が mandrake のままなのね。
とにかく落とす、とっととインストール。
Live の使い方も インストールの方法も KDE 版と全部同じだ。

KDE 版と違ってフォントも最初から綺麗、けどなんか変な感じ。
って sans が UmePlus じゃない、ココは KDE と同じにしないの?
ウインドウのアクティヴ状態が GNOME のほうが解りやすい。

慣れも確かにあるけど明らかに GNOME のほうが標準状態がシッカリしている。
というか Mandriva の整理されたメニューってこういうことか、GNOME なら納得。

gnome_menu

なんというか…もしかして Mandriva は GNOME メインになっちゃったの?
それとも KDE4 ってそんなに酷いデスクトップなのか?よくわからん。
KDE 版との差を見ようと思ったけど VirtualBox から同時起動できなかった。

$ setxkbmap -model jp106

はやはり必要、てかバグ。

Opera の日本語入力はやはり scim-bridge-qt3 が必要。
んで検索バードロップ後も問題なく日本語入力が可能。
もう Opera を Linux で使いたいなら Mandriva を選んでおけみたいな。

nautilus, Gedit, gconf-editor は GNOME なので当然最初からある。
忘れていたけど gnome-screenshot も絶対に必要、これで KDE に移行は無理だ。
イラネェのに mono が入っている事がマジ気に入らないけど。
本当に雰囲気はそのままゴロッと GNOME になったという感じ。

wnck

ぅおい!GNOME 版なら wnck も dbus-python もデフォルトであるのかい。
Y901x, SeeMe 共まったくそのまんま動くぞこのやろう。
ただ GtkAspectFrame に白いラインが入ってしまう、次の更新はココをやろう。

mandriva_gnome_myapp

どうやらこれが一番良さそうだ。
2010.0 でコイツをホストにして KDE 版と Ubuntu を仮想で使おう。
どうでもいいが Vista も仮想にしようと思って 2GB メモリ 2 つ買ってきた。
換装したらホストの Ubuntu が超不安定になった、どうすべぇ…