はじめてのC# (3) – LINQを使用してXMLファイルの保存/読み込みを試してみた

2014.2.25

ご無沙汰しております。

週末でC言語のポインタ本読了してました。
Web系にいるものの、最近こういう低級言語に触れ合っているとなんとも言えない楽しさを感じるので 会社が終わるとそっちの方ばっかりいじってます。

ところで、ここ数日は色々と細かいタスクが増えてきたので 自分用に簡単なGTDのツールをつくろうとLINQまわりをいじっていました。
今回はXMLの保存・読み込みということで記事投稿。

準備


using System.Xml.Linq; // XDocument オブジェクトを使用する。
using System.IO; // ファイルの保存・読み出し時に必要。

とりあえずアセンブリ参照の追加。

XMLをつくってみる。


XDocument F = new XDocument();
F.Add(new XElement("RootNode")); // ノードの追加
F.Save(FileName);

これで FileName に指定したパス・ファイル名でxmlデータが保存される。
今回はこんな感じ。


<?xml version="1.0" encoding="utf-8"?>
<todolist />

※ XMLにルート要素の追加をせずに保存すると読み出しの際にランタイムエラー吐くので注意。

ちょっといじってみた感じ、よくあるXML操作関連のAPIのような操作性で直感的に操作できて良い感じ。

(続きを読む…)

はじめてのC# (2) – 通常のC#クラスをエントリポイントにしてWPFを使用する

2014.2.13

お久しぶりです。

ブログを更新していないしばらくの間、WPFをいじくり倒してました。おかげさまで、超簡単なデスクトップアプリケーションならなんとかつくれるようになりました。
というわけで週末は勉強がてらWPFでクッキークリッカーっぽいものをつくって遊んでました。

そこで感じたのが、
複数ウィンドウでデリゲートとかイベントとか書いてるうちにクラス間の関係が密結合になってしまうということ。
こういう場合、一つのクラスの規模が大きくなってきて ある属性をクラス化して分離したくなった時とかになかなか面倒くさいので、
一つメディエータみたいな感じのクラスが欲しい。

でもエントリポイントがWPFの一クラスだとあまり綺麗な構造になりそうもないので、
いっそのことエントリポイントをWPFのクラスじゃなくて通常のC#クラスにしてしまって、WPFを分離してはどうか
さらに各描画用インスタンスを保持するクラスを用意して、複数ウィンドウ間でのイベント処理を楽にしてはどうかという発想に至った。
(API化すれば良い気もするが)

*なお、この記事はC#/WPF超初心者が執筆しているので、参考にする場合は十分に注意してください。また、「いやそもそもこうした方が楽じゃね」っていうところに関してはどんどんご指摘いただければ幸いです。

(続きを読む…)

はじめてのC# – インデクサをいじってみた

2014.1.20

つくりたいものがあったので、趣味グラマーとしてC#を始めました、Niseiです。

重い方の言語はあまりガッツリやり込んだ経験が無かったので内心ワクワクしてます。

文法やらポリモーフィズムやら継承やら基本的な部分は他の言語と同じ感じでだけど、今回ちょっと新たに「インデクサ」というやつが出て来た。

なんじゃそりゃ ということでちゃんと勉強してアウトプットしてみた次第です。

インデクサ?

クラスを配列っぽく操作できる子。

この説明だけだと「ん?」ってなるけど、身近な例としては 文字列操作がある。

using System;

class Hoge
{
  public static void Main()
  {
    string foo = "bar";
    Console.WriteLine( foo[2] );
  }
}

こんな感じで何気なく使ってる foo[2]の正体こそまさにインデクサでした。

(続きを読む…)

はじめてのVagrant ~ CentOS6.5 + ApacheでWebサーバを立ててみる

2014.1.17

logo_vagrant

Vagrant?

簡単に言うとインフラ構築の自動化
例えば 手動でやろうとすると、OS入れる度に VMでディスクイメージ読み込ませて あれやこれやと細かい初期設定しないといけないけど、Vagrantを使えばたった3つのコマンドで上に書いた事を勝手にやってくれる。
Vagrantは chefのようなツールと合わせて使えば超強力と巷では言われていて、要するにソフトウェアのインストールまで自動化してくれる
これはどういうことかというと…

インフラ構築にいちいち時間かける必要もなくなるし、ミスも防げるし、チーム開発の場合は 新しく入ってきた人でもすぐに環境構築できるし、何より「俺の環境では動いたよ」も減る。

個人で勉強用に開発環境立てては壊しまくったりする場合にもかなり便利だけど、チーム開発でも圧倒的な力を発揮。

とりあえず 今回に関しては Chef を使用せずに VagrantでOSだけ入れてもらって、動作確認の意味合いを込めてWebサーバの立ち上げをやってみる。

因みにVMを動作させる環境はフリーで落とせる VirtualBox を使用。

(続きを読む…)

プログラマの成長について考えてみる

2013.12.16

Anonymous_evolution_steps

プログラムを書いていて、次に何を学習するべきか と考えることが度々あった。
その度に

「プログラマ 成長」
「プログラマ ロールモデル」
「プログラマ 1年目 本」

なんておもむろにGoogleの検索フォームに入力して、

世の中で話題になっている人のロールモデルを参考にしようと色々見ては、その人が「小さな頃から親にハードを与えられていじって遊んでいて…」というように、幼少の頃からコンピュータに深い馴染みがあることを知って「ああ 自分のケースとは合わないな」なんて思ったり

ウィザードと呼ばれている人達の論文を読んでは「もっとコンピュータに詳しくなろう」と思い立って、
Web系にも関わらず 何の脈絡も無く、突然 SICP分厚いアルゴリズム本をかじり出しては途中で挫折したり、
( 学習した事が現実的にどういった形で結びついているのかわからないから現実感が湧かない )

そんな事を繰り返していた。

正直、「プログラマとして成長をするには何をするべきか」なんて考えている時点でナンセンスだなというのはよくわかっている
考えている暇があったら情熱や好奇心に突き動かされてどんどん探検していくべきだっていうのもわかっている。
分かっているけど、ずっとどこか腑に落ちないままモヤモヤしたままだった。

というわけで「これではいけない」と思い直し、成長が遅い自分に対する反省の意味も込め、自分の中で「成長する人」の定義を文献を参考にしたり先輩に聞いたりしてはっきりさせてみた。

結果、以下の結論にたどり着いた。

学ぶ技術を現実の具体的なシーンに落とし込み、
何らかの目標達成に結びつけることができているかどうか

プログラマとして成長の遅い自分の場合

(続きを読む…)