シェルスクリプトの初心者本

今月の日経 Linx を買った、付録の「シェルスクリプトの基本 10 項目」目当てです。

実はシェルスクリプトを今ひとつ使いこなせない現在の私である。
Python もいいけどシェルスクリプトくらい普通に書けないとエラそうにできないし。

パッと付録を読んだけどコレはいい。
分厚くてウンザリする bash の解説本とは違い基本の基本だけを解りやすく書いている。
Web だけじゃ解りにくい解説しか無いから買っておいたほうがいいよ。

このたった 34 ページの付録だけで 1490 円の価値はある。
久々に良い本を見つけたが Amazon に無かったのでアフィリにならん。
クソォ適当にまとめと追記をして覚書ページを作ってやるぞこのやろう。

でもせっかくの有用な付録なのに本の記事はフリーソフトの紹介ってのがどうなんだ?
bash のコマンドって実は CUI アプリだよと初心者に教えたほうが理解が早いのに。

それも紹介しているアプリがチト、w3m って Ubuntu には標準で…
リポジトリに Apache や PHP があるのに XAMPP とか Wine で秀丸を動かすとか…
だから FTP なんて Nautilus でも Dolphin でも簡単に可能なのに…

何より Opera が無いってどういうことだ!
KeepassX も無い、GHex も無い、つーかテキストエディタが無い、何故か Rails を紹介。
ワケワカンネェこのライター、ターゲットはどんな人を想定したの?

でも Ubuntu は標準で Memtest86+ が使えると知ったのは発見だった。
早速先日買ったはいいけど超不安定な 2GBx2 のメモリに換装してチェック。
動かしてイキナリまっ赤っ赤、こりゃ不安定なわけだ。

BIOS の設定を変更したり一枚ずつ付け替えたりして地味に実験。
どうやら片方が不良品のようだ、もう一枚買ってくるかトホホ。

対する日経ソフなんとかは ○uby 本が付録しているよ…
この雑誌もいいかげんに Python をやったらどうなのだ?と思うんだが。
ま、Windows じゃどっちも使い道が無い言語なのだが。

プログラミング検定

プログラミング検定 – 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 所有になるの?もう少し調べると面白いかも。