「デスクトップの表示」の作り方

cloned2006-04-18

こんな画像のショートカットがWindowsのデフォルトで付いていて、効果はWin+Dと同じ。
このデスクトップへのショートカットを使わないからといって消してしまうと、後で欲しくなったときに困ってしまう。
ということで作り方をご紹介。

  1. 「.scf」という拡張子のファイルを作成する(名前は何でも)。
  2. 中身を書く。

中身は以下のように書けばOK。

[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

ポイントは「.scf」という拡張子。Windows環境では拡張子が隠されてしまう(隠しファイルの表示と登録拡張子の表示を設定していても)ので解りにくい。
他にも「.lnk」とか「.url」とかが自動で隠される拡張子。表示する方法はありそうなんだけど全く知らない。

kbPodが欲しい

iPodってiTunesユーザー向けじゃない?」という思い込みがあってなかなか手を出せない。mp3の再生ハードとしてはとってもよく出来てる(ビジュアルなど含む)とは思うけど、KbMedia Playerユーザーとしては少々不満かな。
KbMedia Playerは乗り換えることのできないソフトの一つ。動作が軽かったり、インタフェースが使いやすかったりといったフリーソフトらしい利点は当然のことながら、驚くほどに再生フォーマットが広い。ゲーム音楽などのコアなフォーマットを楽しむには絶好のソフト。というかこのソフト以外の選択肢は知らないし、また必要もない。Kobarinさんには本当に感謝。
現実的な線ではWindows Mobileとの組み合わせでなんとかならないかなと。でも、別にWindows Mobileは要らないんだな。
kbPodがあればそれで良い。

Visual C#

Microsoftっぽい。惜しいって感じ。
いや、テキストエディタC#を書くことを思うと非常に便利。ビルドは一発だし、クラスやメンバーは自動で探してくれるし、勿論コード補完もあるし。あと、デバッグなんかも簡単だし、エラー内容も教えてくれるし。
不満なのはカスタマイズ性の低さと便利機能不足。
Microsoftの製品はほとんど全てだけど、思った場所に設定がない。オプションだかツールだか色々探してやっと見つけることがほとんど。外人(英語)には直感的な配置になってるんだろうか。
やっと探して見つけても少ししか設定の幅がないことが多い。Visual C#の場合はエディタの設定が細かく出来ないのが致命的。一番重要なところなのに。
あとは単純に便利な機能が少ない。自動でusingを書いてくれたり(2005では出来るらしい)、アクセサを自動生成したりEclipseユーザーには当たり前って機能が見当たらない。
そう考えるとEclipseは文句なかった。動作が重いくらい(これがEclipseの致命傷か)。
てか、未だにキーマクロとかだとサクラエディタ秀丸エディタの方が使いやすいってどうなんだ。適材適所ってことなんだろうけどエディタなんだから。

C# メモ 2

C#ではアクセサメソッドがJavaより簡易的に記述される。

public class Foo {
private string _name;
public string Name {
get { return _name; }
set { _name = value; }
}
}

としておくと

Foo foo = new Foo();
foo.Name = "Hoge";

とすれば代入(set)。

string myName = foo.Name;

とすれば取得(get)。
フィールド変数をプロパティーとして利用できるような感じで慣れるといいかも。

コメントを書かない

みんながコメントを書かない環境。これこそ望ましいと思う。

/**
*
*/

とか

//

とか書かない。言語がC#なので

/// <summary>
/// HelloWorld
/// </summary>

みたいなのくらいあっても良さそうなものだけど、書かない。
昨日作ったクラスは本当に一言一句のコメントも書かなかった。別に周りの人が書いていないから真似をするということではなく、必要ないから書かない。
実際に全く新たに見たコード(C#自体も初めてだったけど)だった訳だけど、困らなかった。何故なら解るように組まれているから。ややこしいロジックを書いた時、コメントで補うよりも簡素なプログラムに直す方が余程メリットが大きい。プログラマの土俵はあくまでプログラム(国語じゃなくて)なのだから。
あと、実際に無コメントの環境になって感じたのが誤解しないこと。コメントはよく騙される。コメントの説明が下手で誤解することもあるけれど、コードの改訂に対してコメントが改訂されないというケースが非常に多かったように思う。
未だにクラス名をよくわからないIDや連番で管理するプロジェクトがあるけど、そういう命名をしたがる動機が全然解らない。天文学的な数のクラス数を想定しているのだろうか。Javaならパッケージ、C#ならネームスペースがあって名前の衝突もそれ程心配しなくていいのに。
いつもコメントをいっぱい書いている人は「書かない」にチャレンジしてみるといいと思う。そしたら自然と

if (foo.equals("0")) {
} else if (foo.equals("1")) {
} else if (foo.equals("2")) {
} else if (foo.equals("3")) {
} else if (foo.equals("4")) {
}

というような意味不明な数字とかを使わないようになるので。

XSL 基本

ヘッダを書く。

<?xml version="1.0" encoding="UTF-8" ?>

最上位のタグを配置。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>

XML側のルートタグの出力を定義する。別の定義(テンプレート)を埋め込みたい時は<xsl:apply-templates />を挿入しておく。

<xsl:template match="/">
<html>
<head>
<title>HelloWorld</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:apply-templates />で適用されるテンプレートを書く。

<xsl:template match="message[@name='hello']">
<xsl:value-of select="." />
</xsl:template>

上のようにするとルート直下の<message>タグのname属性”hello”のinnerTextが配置される。
XMLのルートタグ以下に<message>タグしかなければこれでもいいけれど、いっぱいタグがあると全部出力されてしまう。回避方法は

<xsl:template match="/">
<html>
<head>
<title>HelloWorld</title>
</head>
<body>
<xsl:apply-templates select="message[@name='hello']" />
</body>
</html>
</xsl:template>

というように<xsl:apply-templates />のselect属性で指定する。
<img>や<a>タグのようなinnerTextではなく属性値に設定したい場合は

<xsl:template match="message[@name='src']">
<img>
<xsl:attribute name="src"><xsl:value-of select="." /></xsl:attribute>
</img>
</xsl:template>

というようにattributeで設定する。
XMLのネスト先を指定する時は

<xsl:template match="message/foo/hoge">

というようにそのままスラッシュ区切りで降りていけば指定できる。

C# メモ 1

通常のSystem.out(Javaでいう)は

System.Console.WriteLine("HelloWorld");

Web上だとコンソール出力が使えないので

System.Diagnostics.Debug.WriteLine("HelloWorld");

とする。但しデバッグのプロセスにアタッチしていることが条件。


Dispose()が必要な場合は

try {
Hoge foo = {コネクション系};
// 処理
} finally {
foo.Dispose();
}

みたいなJavaっぽい記述も出来るけれど、

using (Hoge foo = {コネクション系}) {
// 処理
}

の方がスマート。勝手にDisposeしてくれる。


JavaでThreadと言えば「extends Thread」か「implements Runnable」だけど、C#ではThreadクラスに実行するメソッドを渡す。コードはこんな感じ。

using System;
using System.Threading;
class HelloWorld
{
private static void hello()
{
Console.WriteLine("HelloWorld");
}
public static void Main()
{
Thread t = new Thread( new ThreadStart(hello) );
t.Start();
}
}

いっぱいマルチスレッドしたときに処理を待つには、それらのスレッドを

t.Join();

とかすると。何かメソッドの参照を渡すってのがJavaScriptみたいだ。


XMLJavaScriptっぽい。というかDOM基準なので当然か。

XmlDocument xml = new XmlDocument();

というのがJavaScriptのdocumentと同じような印象。

XmlElement div = xml.CreateElement("div");
XmlElement span = xml.CreateElement("span");
span.InnerText = "HelloWorld";
span.SetAttribute("id", "foo");
div.AppendChild(span);

というような感じでXMLの構築が可能。

C# 開始

独習C#

独習C#

机に無造作に到着した本。
今後しばらくはC#漬けになりそう。Visual Studioを使うのもほぼ初めて。2005のBetaを少し触ったことあるくらいなので。Eclipseよりいいのかな。