タグ別アーカイブ: Mono

CsharpRepl

mono にはこんなのがあるらしい。
ようするに C# 言語のインタラクティブシェルだ。

CsharpRepl – Mono

Ubuntu 10.10 には最初から入っていたので試してみる。
公式の解説が思いっきり LINQ だけど普通に foreach とかはどうだ。

using System; は初期状態から行われている。
for 文は一行で終わらせるか中括弧を語尾に付けないとエラーになる。
日本語は入力時に化けるけど UNICODE として処理しているようだ。
class なんかは作れない。
終了は quit; となっているが普通に Ctrl+D でいい。

Ctrl+D に慣れすぎて Windows の cmd.exe で EXIT を打つのが面倒…
というか Windows でも cmd.exe のほうがある程度の処理は簡単な体に…
それはどうでもよくて。

インタラクティブシェルだと嫌でも Python と比較してしまう。
静的言語を無理やり使うのだから Python レベルを求めるのは無謀か。

GNOME 3.0 depends on Mono

4 月、新しい Linux がワンサカ出る季節になった。
ついに GNOME3 が Fedora に正式採用されるようです。

Linux Daily Topics:2011年4月5日 Fedora 15のGNOME 3は慣れるまでに時間がかかるかも─Fedoraアンバサダー|gihyo.jp … 技術評論社

って GTK+ も GTK3 になるのか、そりゃそうだ!
おいらの PyGtk アプリはどうなる、GTK2 のアプリは動くの?
Python も可能ならいいかげん 3 にならないか、2 に依存しすぎて無理かも。

fedora はコレを落としてみたけど完全に作りかけだよ…
独学Linux:Fedora15(Lovelock)の開発版

Ubuntu 11.04 はベータが出ている。
とにかく VirtualBox で動かして解る範囲でチェック。

Ubuntu は基本 GTK2 のままか、正式版で何がどうなるか解らないけど。

Python から PyGtk を使うと Fedora も GTK2 になる。
pygtk.require(‘3.0’)
とやりたくても現状 site-packages に gtk-2.0 ディレクトリしか無い。

そういうわけで Y901x も起動できる。
今までの GTK2 アプリも PyGtk も問題無しということでいいのかな。。

Ubuntu は GtkMenuBar が Mac 風になる、変則配置の Y901x はどうなる?

あれ、メニューがあるはずの部分が少しズレているけど問題無いみたい。
動画の縦ピクセル数も合っている、これなら得に変更する必要は無いかな。
GtkMenuBar.allocation.height がゼロを戻しているのだろうきっと。

とりあえず Ubuntu がこのままなら我がアプリは 11.04 でもイケるようだ。
今まで Ubuntu の更新毎にどこかがおかしくなっていたけど…
何も問題がないってのも逆に面白くないな…

ついでだから 11.04 のデフォルトアプリを見てみる。
OOo が LiberOffice に変わっている。
なんと Tomboy が残っている、今渡こそ Gnote になると思っていた。
Rhythmbox が Banshee に、だから何故 mono 製を選ぶかな…

GNOME3Myths – GNOME Live!

GNOME は mono 依存に戻ったのか。
Fedora にも mono が復活するのだろうか?アルファ版には無いんだが。
つか GTK3 が Gtk# から使えるということなのかな、Python はどうなる?

とにかく Fedora のベータ待ちだ、ディストリ側がどうするか解らないと。
場合によっては Fedora 移行に再挑戦するつもり。

ubuntu C# matome

とりあえず Ubuntu での C# をまとめてみた。
Ubuntu で C# – L’Isola di Niente

-pkg 指定で pkg-config 展開ができるはずなんだが方法が見つからない。
MonoDevelop 使えで済ませようか、とも思うけどインストールするかどうかも迷っている。
というか見ての通りコッソリと Python を勧めているわけでw

とりあえずこんな感じで覚書ページを小分けで移植していこうと思う。

Fake System.IO

System.IO.File.ReadLines は .NET 3.5 や mono で使えない。
だったら自分で作ってしまえ、と思ったのでやってみた。

どうでもいいけど gmcs も csc.exe と同じオプションが使えるんだね。
/out:FILENAME は -out:FILENAME みたくハイフンにするだけ。

いや、yield を使ったことが無いのでやってみようかと。
こんな強引というよりアホなメソッド追加なんてできるのかな?

using System;
using System.Collections.Generic; //IEnumerable

namespace System.IO
{
    public static partial class File
    {
        public static IEnumerable ReadLines(string path)
        {
            using(var sr = new System.IO.StreamReader(path))
            {
                string buf;
                while ((buf = sr.ReadLine()) != null)
                {
                    yield return buf;
                }
            }
        }
    }
}

File クラス (System.IO)
File クラスは partial class では無いみたいだけど。

コンフリクトか、やっぱりダメだった。
Windows でもやってみたけど同じ、こんなことをやろうと考えるほうがおかしい。
しかたがない、名前空間には追加できるはずだから違うクラス名にしてみる。

fakeio.cs

using System;
using System.Collections.Generic; //IEnumerable

namespace System.IO
{
    public static class FakeFile
    {
        public static IEnumerable ReadLines(string path)
        {
            using(var sr = new System.IO.StreamReader(path))
            {
                string buf;
                while ((buf = sr.ReadLine()) != null)
                {
                    yield return buf;
                }
            }
        }
    }
}

readlines.cs

using System;
using System.IO;

class __main__
{
    [STAThread]
    public static void Main(string[] args)
    {
        if (args.Length == 0)
        {
            Console.WriteLine("no arg...");
            return;
        }
        int n = 0;
        foreach (var line in FakeFile.ReadLines(args[0]))
        {
            n++;
            Console.WriteLine("{0}: {1}", n.ToString("000"), line);
        }
    }
}

で、cat.exe という実行ファイルを作るコマンド。

gmcs -out:cat.exe *.cs

何故か exe という拡張子を付けないとエラーになる。
Linux でも強制するんかい、まぁ解りやすいと思えばいいし。
アスタリスクでディレクトリ内をまるごとコンパイルしてくれるのはありがたい。

なるほど、yield はこういう時に使うと確かに便利だ。
C#4.0 の ReadLines って上記を自作する以上のメリットがあるのかな?

Ubuntu 10.10 for DotNet EXE

こんなタイトルだけどまず Python の話。
Python で文字列を得ようとしたけど None が戻る場合がある。
今まで if で確認していたけど or 演算子が使えるようだ。

>>> import os
>>> print os.environ.get("HOME") or "Hentai"
/home/sasakima-nao
>>> print os.environ.get("LOLI")
None
>>> print os.environ.get("LOLI") or "Hentai"
Hentai

便利だけど他の言語と互換性が無いよな…
最近使っていないけど超何でもあり言語な C# なら同じ事が可能かな?
と思い久々に Ubuntu 10.10 で C# コードを書いてみたけどダメだった。

しかし何だこれは!

実行パーミッションが付いていたら exe を起動できるようになっている。
「./」指定をすると Tab キーで exe 拡張子までを保管する親切さだよ。
いつからだろう?Ubuntu 10.04 までは mono に渡す必要があったと思うんだけど。
Nautilus から W クリックすると書庫マネージャが起動してしまうんだけどw

てゆーか…
そんなに .NET アプリを Linux で使いたいのだろうか…

標準以外のライブラリは使わない、P/Invoke も WPF も利用しない。
であるならソレでもいいのだが、逆に Windows で GtkSharp なんかもご勘弁。
ところで Ubuntu 10.10 デフォルトは WindowsForm さえ使えないみたいですけど。

GtkSharp も TomBoy が残っている間は有るわけだが、今後はどうだか。
趣味プログラミングならともかくアプリケーション作りはライブラリ次第だもの。
小物を作るにも Python のほうが便利だしライブラリは標準で豊富だし、なんだよね。