【本】Windowsダンプの極意

  • 2012.11.23 Friday
  • 21:50
JUGEMテーマ:コンピュータ
 
違う世界が見えるに違いないと思い、今週から読み始めました。
買ったのはずいぶん前だったのに、山積みの山の一部となっていました・・・(汗)

【雑記】Comってなんなの?

  • 2012.10.26 Friday
  • 20:05
JUGEMテーマ:コンピュータ
 
 昔から開発している人は知っているモノなんだと勝手に思っているのですが、私は「Com」というものが何なのかよく分かっていません。私がComと聞いて一番に思い浮かべるのはRS232CのComポートなんです(笑)しばらく、会社に入社して数年間、同期との会話で「Com」という単語を聞いて、RS232Cを使って何かしてるんだ〜って思ってました。どうやら違うらしいっていうのを.NET Framewrok関連の書籍で気づいたんですが、ただ、仕組みがよく分からない。それに使い方以前にどこにあるのかすらわからない。分からないものだと切り捨ててたのですが、最近、気になり始めました。ちゃんと理解すれば、もっとなんか見えるんじゃないか分かるんじゃないかって!たんなる妄想なんですけどね。
 しょっちゅうやりもしないのに、計画たてたり、まあ中二病なんですよね・・・。・・・見た目は中年病ぽくなってきましたが・・・。

【雑記】気になるドキュメントのメモ

  • 2012.10.03 Wednesday
  • 23:31
JUGEMテーマ:コンピュータ

コード生成と T4 テキスト テンプレート
http://msdn.microsoft.com/ja-jp/library/vstudio/bb126445.aspx

DBのテーブル群のスキームを読み込んでクラスファイルを生成するコードをStringBuilderを使って作ってみたが、T4を使えばもっと楽にできたのではないかと思ったので、ちょっと勉強してみようかなと思い、上記のURLをメモしておきます。

アプリ ページのレイアウト (JavaScript と HTML を使った Metro スタイル アプリ)
http://msdn.microsoft.com/ja-jp/library/windows/apps/hh872191.aspx

WEBデザインの世界ではメジャーと言われているグリッドシステム。マイクロソフトのサイトにもModern UIのデザイン設計として紹介されています。まったく分かっていないので説明になってなくてすみません。

【雑記】インサイドWindows 第6版 上

  • 2012.10.01 Monday
  • 00:45

マイクロソフト コンファレンス 2012に「インサイドWindows 第6版 上」が売られていたけど、あれは先行発売だったんですね。しかも20%オフで売られていたので、ほしい人にはヒャホーだったんですね。

第5版っていつ出たんだろうって思っただけでスルーした。まー持ってても私のスキルでは役に立たない(涙)C++から勉強し直さないといけないレベル・・・。

【雑記】自炊を代行してもらうのって違法なんかな?

  • 2012.07.20 Friday
  • 19:57
JUGEMテーマ:コンピュータ
 
今、家に大量の本があり、どうにかしたいと悩んでいるのですが
ふとネットサーフィンをしてると「自炊代行」の業者のHPをみつけました。
何かのニュースで自炊代行は違法で業者が廃業に追い込まれたって聞いたような気がするのですが
勘違いだったのかな・・・

技術書のお値段を考えれば、料金もそこまで高くなく。
電子書籍リーダーも購入すれば、
部屋も広くなるし、持ち運べるし、会社にだってもっていけるし、検索できるし、利点だらけなので
やってみたいなーなんて思ってます。

ていうか、日本の出版社さんは早く電子化してほしい・・・紙である必要なんてないとおもうんだけどなー。

【概念】述語(SQL)

  • 2012.07.16 Monday
  • 23:31

SQLの中にも述語ってありますね。

述語論理・・・・?

【雑記】プログラマは手が命

  • 2012.07.15 Sunday
  • 00:23

ただいま夏休み中です。といっても後、二日で終わりなのですが、
実家に帰って魚釣りなどを興じまして、見事に日焼けしてしまいました。

で、数年前から悩まされているのですが、
なぜか実家に帰って数週間後に手のひらの皮がボロボロとまるで脱皮のように皮がはげてしまいます。
一応、皮膚科に行ったりして水虫ではないというところまでは確認が取れているのですが原因不明。

皮がはげるまで微妙に赤みを帯びて、ぴりぴりとしたかゆみがあり
皮がはげたら手の感覚が鋭くなってしまい、

つまりキーボードがとっても打ちづらくなります。


プログラマは頭を使うものだ!なんて言いたいんですが

手も大事ですね(笑)

【アルゴリズム】計算量を求めるっていうのをやりたいんだが・・・

  • 2012.07.03 Tuesday
  • 22:52
JUGEMテーマ:コンピュータ

はずかしい話、計算量を求める計算をしたことがありません。
一応、大学では物理を専攻していたので、
logNがどのくらいで増えるとか2のN乗がどのくらい増えるかなどは直感的に分かりますが、
アルゴリズムに関しては、実際に手を動かして計算したことがありません。

アルゴリズムとその計算途中の解法が、猫以下でも分かるように解説してくれてるサイトとかないかなーって

探してます。まだ見つかりません。


-----
私が関連している組織(その組織を具体的に書くと怒られそうなのでこんな書き方にしています)では
計算量がどうのこうのっておっしゃられる方を一人しか存じ上げていません。
世の中ってそんなものなんですかね・・・。

まあ計算したことないって言い放った私言うことじゃないんですけどね。
-----
(追記)
どうもランダウ表記は物理の講義で習った気がしてきた・・・。
忘れてしまっただけか・・・・。

プログラマとSE

  • 2012.07.03 Tuesday
  • 20:37

SEをプログラマの上級職と考えている人間を相手にすると本当にうんざりする。

【アルゴリズム】バブルソートはプログラミング入門者には難しい。

  • 2012.07.01 Sunday
  • 18:58
JUGEMテーマ:コンピュータ

「バブルソートはプログラミング入門者には難しく、アルゴリズム入門者にとっては簡単な題材」と、個人的には思っています。今回は、「プログラミング入門者」という観点からこのバブルソートを考察してみたいと思います。

バブルソートはプログラミング入門者には難しいという根拠は、私の経験からくる経験則です私自身、ソートの勉強は、プログラミング入門時に合わせて勉強した内容であり、繰り返し処理や、条件分岐などの組み合わせの学習の題材として用意されたものでした。

バブルソートのアルゴリズムは
すべての要素に対して、隣接する要素を比較し、順序が逆であれば入れ替える。これを要素の数ー1回繰り返す(自明になった順序の範囲は繰り返す必要はない)
というものです。

想像力が欠如している私などは、とりあえず具体的な数列を用意して手で実際にソートしてみたりしました。

6, 5, 7, 1, 2, 4, 8, 3
5, 6, 7, 1, 2, 4, 8, 3 (6, 5)の順序が逆なので交換した。
5, 6, 7, 1, 2, 4, 8, 3
5, 6, 1, 7, 2, 4, 8, 3 (7, 1)の順序が逆なので交換した。
5, 6, 1, 2, 7, 4, 8, 3 (7, 2)の順序が逆なので交換した。
5, 6, 1, 2, 4, 7, 8, 3
5, 6, 1, 2, 7, 4, 8, 3 (8, 3)の順序が逆なので交換した。
5, 6, 1, 2, 7, 4, 3, 8 <- 8は確定
5, 6, 1, 2, 7, 4, 3, 8
5, 1, 6, 2, 7, 4, 3, 8
5, 1, 2, 6, 7, 4, 3, 8
5, 1, 2, 6, 7, 4, 3, 8
5, 1, 2, 6, 4, 7, 3, 8
5, 1, 2, 6, 4, 3, 7, 8 <- 7は確定
1, 5, 2, 6, 4, 3, 7, 8
1, 2, 5, 6, 4, 3, 7, 8
1, 2, 5, 6, 4, 3, 7, 8
1, 2, 5, 4, 6, 3, 7, 8
1, 2, 5, 4, 3, 6, 7, 8 <- 6は確定
1, 2, 5, 4, 3, 6, 7, 8
1, 2, 5, 4, 3, 6, 7, 8
1, 2, 4, 5, 3, 6, 7, 8
1, 2, 4, 3, 5, 6, 7, 8 <- 5は確定
1, 2, 4, 3, 5, 6, 7, 8
1, 2, 4, 3, 5, 6, 7, 8
1, 2, 3, 4, 5, 6, 7, 8 <- 4は確定
1, 2, 3, 4, 5, 6, 7, 8
1, 2, 3, 4, 5, 6, 7, 8 <- 3は確定
1, 2, 3, 4, 5, 6, 7, 8 <- 1, 2は確定

と、まあ具体的な操作を手で書くと、なんとなく「分かった感じ」になるわけです。
アルゴリズム的にはこれでいいのかもしれません。

ただ、これをプログラミングで実装しようとしたときに問題が発生するのです。

ええと、さっき手で操作する事をよりも前に、
コードを記述してみたのですが、なぜかうまくいきませんでした(汗)
コードを書き直し3回ぐらいコンパイルしてみたのですが、うまくいかず。

時系列的には

バブルソート書いてみよって思い立つ!
コードを書く
コンパイル
実行
ソートの結果まちがってますね!
コードのどこが間違っているのかチェックしてみる。
コードを書く
コンパイル
実行
ソートの結果まちがってますね!
コードを書く
コンパイル
実行
ソートの結果まちがってますね!
・・・ちょっと手で書いてみるか・・・
アルゴリズムを眺める。
コードをチェックしてみる。
何を勘違いしているのか気づく。
コードを一から書き直してみる。
コードを書く
コンパイル
実行
とりあえずソートはされていることを確認。

と、まあただしくアルゴリズムと向き合って、
そのアルゴリズムを実現させるためにはどういった概念が必要なのかきちんと考察しなければ
実装するのは危ういってことですね。

で、実装は

static void Main(string[] args)
{
    var arrary = new[] { 6, 5, 7, 1, 2, 4, 8, 3 };
    BobbleSort(arrary);
    arrary.ToList().ForEach(Console.WriteLine);
}

private static void BobbleSort(int[] arrary)
{
    if (arrary == null)
    {
        throw new ArgumentNullException("arrary");
    }

    for (int range = arrary.Length; range > 0; range--)
    {
        for (int leftIndex = 0; leftIndex < range - 1; leftIndex++)
        {
            if (arrary[leftIndex] > arrary[leftIndex + 1])
            {
                int largeValue = arrary[leftIndex];
                arrary[leftIndex] = arrary[leftIndex + 1];
                arrary[leftIndex + 1] = largeValue;
            }
        }
    }
}

どういう風に間違ってしまったかというと、

for (int i = ...; ...; ...)
{
    for (int j = ...; ...; ...)
    {
        ...
    }
}

とりあえずこう書いちゃったんですね。
なんかネストされたループがあって、配列のインデックスを2回回せばいいじゃね!?
みたいな「雰囲気」で書いてしまったんです。

iの意味は?・・・添え字だよな・・・jも添え字。
穴あき問題を解くがごとくコードを書いてしまったんです。
そりゃうまくいかないと何が間違えているのかさっぱり検討もつきません(笑)

正しくは
外のループは、隣接する要素の比較を行う範囲。
順序が自明になった範囲をチェックしないように、比較する範囲を一つずつ狭めていきます。
なので間違っても外のループのiの意味は添え字ではなくrangeです。
range - 1で、その範囲に存在する最大の添え字として見ることは可能です。
書き直すと下記のようになります。

    for (int maxIndex = arrary.Length - 1; maxIndex >= 0; maxIndex--)
    {
        for (int leftIndex = 0; leftIndex < maxIndex; leftIndex++)
        {
            if (arrary[leftIndex] > arrary[leftIndex + 1])
            {
                int largeValue = arrary[leftIndex];
                arrary[leftIndex] = arrary[leftIndex + 1];
                arrary[leftIndex + 1] = largeValue;
            }
        }
    }

うちにあるループは、隣接する要素の左側のインデックス。
これがひとつずつインクリメントされ、となりにあるleftIndexにある要素と順序を比較して
必要であれば交換する。

という実装をすればいいわけですね。

私がそうだったから皆さんもそうだとはかぎらないのですが、
私はfor内のiとかjは、配列のインデックスであると思い込んでいました。
なのでなんとかして、みたい要素のインデックスに帳尻があるようにプログラミングする。
というスタイルのコーディングを、初学の当時はやっていました。
いまは・・・いや、いまも・・・・その癖は直っていないのかもしれません(笑)

ということで、プログラミングとしてバブルソートのお話は終わり。
アルゴリズムとしてバルブソートの考察もできればここに書きたいと思います。
まあ気まぐれなので約束はできませんが・・・。

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     
<< April 2018 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM