あまり色々と終わらないうちに終わってしまいました。
何か凶悪そうな字面ですね。とりあえず今回のキャッチフレーズです。
たとえば高機能で網羅的なシステムを考えます。色々なことは出来ますがその半面ものすごく簡単に出来て欲しいことが簡単程度になってしまっています。
やりたいことを100%とした時大抵のことは凄く簡単なことで終わるはずな場合を考えます。
全体としてどうでしょうか?
何が言いたいかというと「分離」です。非網羅的で簡単なことが凄く簡単にしかできないようにしてしまいます。反対に網羅的なものは利用手順が数段階難しくなります。ですが、全体としての簡単さは上がります。
もちろんこれは偏った難しさレベルを持つものについて言っている場合です。ですが、これは意外と色んな所にあるものでプログラマーは日常的にその片鱗に触れています。
私としては「網羅的であるか」よりも「全体としてどれだけ簡単になるか」を考えれば上手くいくのではないかと思います。
というわけでそれを実践していきます。結果は・・・数年後にはでると思います。
思えば、物事の解説も「非網羅的」な方が大抵利用しやすいです。つまり、「簡単なことをするのだから簡単に知りたい」ということを叶えているわけですね。もちろん、網羅的も必要です。むしろ網羅的に対してフィルターをかけるだけです。
うん。「非網羅的」万歳ですね。ただし、網羅的なものへのアクセス方法を残しておいて欲しいですね。たとえ数%でも網羅的でなければ解決できなものもありますから。
朝晩が冷えてきました。窓を開けていると寒いですね。
完成する目処のまったく立たないスクリプターを作成しています。色々と迷走しています。とりあえず、LexerとParserを間違えました。修正しなくては。
バグ取り、キャプチャ時のちらつき改善。その他、機能追加。詳細は「WindowSnap」にあります。
やっと5問分作成。先は長い。
掲示板作成、MDX2.0、DirectSound,DirectDraw,IL翻訳・・・。げんなり。
パソコン甲子園のページを更新しようと思ったら、その支援ソフトを思いついて1日作ってしまいました。
このソフトは、選択範囲のスクリーンショットを撮り、ウィンドウ化して表示するものです。
使い所としては次の通り。
ウィンドウズの制約上ちょっと不思議なマウスさばきをします(嘘です。もっと直感的な操作が出来るようなソフトもあります)。
詳細は「WindowSnap」にあります。一度使ってみていただけるとありがたいです。
さぁ。なぜでしょうかねぇ。
後ろのウィンドウを呼び出すのがめんどくさすぎる気がする。ただ単にウィンドウがあるだけで使いやすい気がしない。かといって、タイル分割のウィンドウシステムを求めているわけではない。もっと手軽にたくさんのウィンドウを扱えるシステムが欲しい。
それぞれのウィンドウには欲しい面積がある。また、同時に並べなければいけないウィンドウもある。重なっても良いけど、一発でウィンドウを呼び出せるシステム・・・。まあ、そこら辺は下にあるバーにウィンドウリストを出して対処しているけど、情報量が足りないような・・・。
別に、角が丸かったり、モーションしてくれたり、バーだけが半透明になっていたりという機能なんていらない。
私としては、ユーザーの操作を調べ、ウィンドウサイズと、ウィンドウの透過率を調節してくれるシステムが欲しい。
それが、難しいのであれば、対象ウィンドウの選択カ所を残して半透明化という機能でも試験的に実装してほしい。対象への操作は同時に一つだが、参照は同時に複数になるからである。
また、選択カ所をスナップにして最前面表示にするソフトウェアも良いと思う。
要するに面積が足りないだけなのだから、画面を360度の全展開出来れば私は不満がないのだけど。
するプログラムを作成中。キャプチャ取得までは完成。後は、選択範囲をもっと直感的に取得できるようにしなければ。
・・・できた。紹介は次の日の雑記にあります。
足りない。いつの間にか後夏休みが10数日。ああ、パソコン甲子園間に合わない。
極端に低下して、いっこうに進みません。ダメダメですね。
次のコードをILに落とすと違うコードが出来る。ただし、コンパイラ依存だけど。
using System; class program{ public static void Main(){ object o = new Random(); Random a; a = o as Random; if (a != null) { Console.WriteLine(a.ToString()); } if((a = o as Random) != null){ Console.WriteLine(a.ToString()); } } }
一つ目のコードは、「stloc」「ldloc」というコードが出来るが、二つ目は「dup」「stloc」というコードになる。どちらがよいかは非常に微妙だろう。いや、最終的には違いがなくなるかもしれないけど。
ちょっと前に本を読んで以来私の例外方針は次のようになっています。
これをちゃんと実践するために、例外関係についてもう一回勉強中。ちなみに、Direct3Dのコードは「何か起こったらすべて終了」という方法で動いているのでこれまでのサンプルはとりあえず無修正。新しく項目を作って例外についてはその中で触れたいと思います。
ユーザー入力に反応するようなプログラムじゃない時点で例外処理=終了処理が多いような気がする。
デバイスの初期化は成功、メッシュは失敗。サンプルでは起動している意味がないからね。
.Netの逆アセンブラだけど、結構遊べる。Reflectorはデータ閲覧用にして、ildasmの結果を編集、再アセンブルしながら遊ぶ。難読かが掛けられていると結構分かり難い。
でも、継承や、文字列を検索すると結構いける。問題は日本語が「\uXXXX」になっている点。仕方がないので、ビューワーを作成。結構面白い。
一つ注意を。たとえば一つの変数に状態を記録するとする。すると、ILのコードでは「st~」系の命令で記述される事になる。だから、機能制限をその変数に頼ると、その変数に対して書き込んでいるところをことごとく変える事で機能制限を解除できる。もっとも、書き換えたとたんに別の現象が起きてダメだったのだけれども。
もう少しお勉強かな。
ちなみに。Reflectorには継承追っかけ機能がついているからクラスの関係はそれで。あと、閲覧しているデータがリンクを作っているからコードを辿りやすい。だけど、特定のコードの呼び出しはエディタの検索の方が断然楽。あとは、再アセンブル時にどのデータならいじっても大丈夫かの調査(または、どのデータを修正すべきかの調査)をすれば大丈夫かな。
ちゃんとC++/CLIも覚えたくなってきたな。
私は結構忘れっぽいです。何かをやろうと思っていてもいつの間にか忘却の彼方へ・・・となってしまいます。そう言うわけでメモを残すのですが、役に立たないんですよね。見ようと思って忘れてしまうんですよ。それにメモを書くのすらも忘れてしまったり。何か良い方法はないものか。
父方は母方の実家にお墓参りに。母方の方に行ったら、小さい子が何人か。最近子供と触れ合っていないなと。まあ、自分が十分子供でけど。
ちょっと例外処理を本格的に直さねばと。
ずっと考えていたのですが、こういうサイトの解説って印刷しますか?そうであれば画像はあまり入れない方が読みやすいのかなと考えたり。偏見かな?
書き始めて分かったのですが、やっぱり理解すべき事柄が多いなと。というわけで「最初は命令を少なく汎用的なものに、そしてなるべく多くの概念の基礎をしっかりと身につける」という方針でいきたいと思います。私としては、ldc.i4.0とかを飛ばすのちょっとと思わないでもないですが、この際それには目をつぶります。そんな事をいちいち説明していては先に進めないからです。まあ、完全じゃない知識ではじめた入門なので最初は浅く広くなのは仕方ないですね。
とりあえずは、理論と、コード書きを交互にしていくようなイメージで進めていきたいとおもいます。
昨日の夜は、ごろごろと雷が鳴っていました。当然の事ながら、コンセントを抜いてパソコンを保護していたのですが、今鳴ってみると、ルータのコンセントを抜き忘れていたために、実際に雷が落ちたらLANを伝ってダメになっていたかなと思います。もう少し管理しやすくしておかないと、いつか本当に大変な目に遭いそうです。
ILの中で、メモリの安全性を確保するために「検証」というものが実行時に行われます。この動作の事は「Verification」にあたり、「検証」で問題ないでしょう。
「Instead, the CLI can test a stronger restriction, called verifiability.」という原文で触れられている「verifiability」。訳すと「代わりに、CLIは、verifiabilityと呼ばれるより強い制限のテストすることができます。」とでもなるでしょうか。さて、「verifiability」いったい何と訳せばいいのでしょうか?色々あさると、「コードの検証」というものにたどり着きました。
という事は「Verifiable」は安全と訳せば良いというわけ(かな)。
色々と謎なものです。
どういう訳か知らないが、常時CPUを使用するアプリケーションの一つ。ちなみにどちらも2000です。古いからかな?
それにしても、バックグラウンドで勝手にCPUを使われると気持ち悪い。
先日お目にかかった方を見て考えた事なんですが、「プログラマはコードで書けると楽しくなる」のではないかなと。私も割とそうです。物覚えが悪いのでとっかかりは遅いですが、ちょっとできはじめると単純な事でもわざわざコードを書きたくなってみたり・・・。やっぱり、絵を描く、文章を書く、と同じようにプログラムを書くが成り立つのだなと。
今私の手元には「プログラミング .Net Framework」という本があります。ものすごい厚さなのですが、この中では.Netの型を中心に説明が展開されています。問題はILを学ぶとすれば、最終的にはこの本全部+ILの言語使用を覚える事になるという事です(あくまで目標ですが)。かなりくじけそうな量です。一応頭の中でまとめてからアウトプットするのですが、全部をカバーしきれずに後から色々追加されたりしそうです。
これと同時に思うのが、ILを読もうとする人は何となくILが分かっていそうな気がするという事です。まあ、アセンブリをして、オブジェクト指向を学べば分からない事はないと思います。考える事で色々と理解しようとする姿勢は大事です。でも、しっかりとした知識を身につける事も大事だと思います。と、自分に言い聞かせながら学んでいきたいと思います。
えー早速頓挫しています。更新は明日かな?
私は自作パソコンを使っているのですが、ファンのパワーが足りないようで、日中にはパソコンに扇風機を向けながら作業しています。空調設計が悪いなぁ、と。
次のようにすると、「今からはじめるIL」という名前のクラスが作れる。
.class private '今からはじめるIL' { }
また、これを応用すると、次のような事も出来る。
.class private 'private' { }
これで「private」という名前のクラスが出来る。これでDLLを作って配ればちょっと呼び出しづらいクラスやメソッドが作れます。一体どう使えばいいのやら・・・。究極例としては次。
.class private 'asd123!"#$%&()==~|-^\`{@[+*};:]<>?_,./\'\\\t\a\r\n' { }
これ、コンパイル通ります。凄すぎです。また、「\0」を利用するとそれ以降の名前が無効になるらしい。それを確かめる事が出来るのが、下。
.assembly 'jap-test' { } .method public static void 'asd123!"#$%&()==~|-^\`{@[+*};:]<>?_,./\a\'\\\0\t\r\n'() { ldstr "asd" call void [mscorlib]System.Console::WriteLine(string) } .method public static void Main() { .entrypoint ldstr "123" call void [mscorlib]System.Console::WriteLine(string) call void 'asd123!"#$%&()==~|-^\`{@[+*};:]<>?_,./\a\'\\'() ret }
有意義にどうぞ。
と言ったものの第3回目で私の守備範囲外に到達しました(いや、1回目からぶっ飛んでたけど)。とりあえず頑張ります。お時間のある方、フォローよろしくお願いします。
東京から帰って参りました。公式ではないのですが、7位相当の順位です(たぶん)。まあ、私としては上出来です。入賞とかではないですが、嬉しいです。チューターやスタッフの方々、坂本さんありがとうございました。私としてはスパコンにさわれる事も嬉しかった事ですが、先輩方とお話しできた事の方が大きな思い出です。
というわけで、サイト更新再開です。まあ、スローリスタートですが頑張りますのでよろしくお願いします。質問等もしっかりとお返事書かせていただきますのでそちらもどうぞ。
読みやすさを追求するのであれば、C#では色つけした方が良いでしょう。そのようなわけでソフトを使って色つけしていたのですが、考えてみれば、「ソースコードをコピー」「ワードに貼り付け」「HTMLとして保存」で、色つきが出来る。
まあ、理屈上層であり、それで出来るのではあるが、あんな気持ち悪いHTMLソースはちょっと抵抗がある。
わたしはこれを今さっきまでディスプレイの事だと思っていました。実際にはビデオボードの事を指すようです。Direct3D入門のその記述は修正しておきました。すいませんでした。