Hatena::ブログ(Diary)

CREST’S WEBLOG (跡地)


プロフィール
Bitbucket
Pixiv
Twitter
Qiita

わんくま同盟

2015-12-31

プログラミング

今まで修得してきた知識を整理(まとめ)していくのでとりあえずインデックスを作っておく.内容は順次増やしていきますが,記事追加は不定期.

サイトマップ代わりにどうぞ.

言語修得編

C言語

  1. 概要
  2. 変数と型
  3. 入出力の基本
  4. 計算の基本
  5. 条件分岐(1)
  6. 条件分岐(2)
  7. 繰り返し(1)
  8. 繰り返し(2)
  9. より高度な制御の仕方
  10. 1次元配列
  11. 多次元配列
  12. 文字列と配列
  13. ポインタの基礎(1)
  14. ポインタの基礎(2)
  15. ポインタの基礎(3)
  16. 文字列とポインタ
  17. 関数とは
  18. 関数原型宣言
  19. 再帰
  20. 引数の値渡しと参照渡し
  21. コマンドライン引数
  22. 構造体(1)
  23. 構造体(2)
  24. 構造体(3)
  25. 構造体(4)
  26. 共用体
  27. ファイル入出力(1)
  28. ファイル入出力(2)
  29. ファイル入出力(3)
  30. ポインタの応用(1)
  31. ポインタの応用(2)
  32. 型修飾子
  33. 列挙型
  34. 定数の取り扱い
  35. プリプロセッサ(1)
  36. プリプロセッサ(2)
  37. プリプロセッサ(3)
  38. ロケール
  39. ワイド文字
  40. 記憶クラス指定子
  41. 型変換の規則
  42. C標準ライブラリ-文字列操作関数
  43. C標準ライブラリ-ユティリティー関数
  44. デバッグ

C++言語

  1. C++の概要
  2. 基本入出力ストリーム
  3. クラス入門
  4. 構築と破壊
  5. オブジェクト
  6. インライン関数
  7. リファレンス
  8. thisポインタ
  9. newとdelete
  10. 関数オーバーロード
  11. 関数オーバーロード(2)
  12. オペレーターオーバーロード
  13. オペレーターオーバーロード(2)
  14. フレンド
  15. 継承
  16. 仮想関数
  17. 継承とアクセス制御
  18. 継承における構築と破壊
  19. 抽象クラスとインタフェース
  20. 多重継承
  21. テンプレート
  22. テンプレート特殊化
  23. 例外処理(1)
  24. 例外処理(2)
  25. static
  26. const
  27. 新しいキャスト
  28. 実行時型情報
  29. 名前空間(1)
  30. 名前空間(2)
  31. 実引数依存名前探索(ADL)
  32. new/deleteのカスタマイズ
  33. STLの構造
  34. std::vector
  35. std::string
  36. std::list
  37. std::map,std::multimap
  38. std::set,std::multiset
  39. std::stringstream
  40. functor
  41. algorithm
  42. inner class
  43. nullptr
  44. NonCopyable Mixin
  45. handle・body
  46. 参考文献

C#

  1. 概要
  2. 標準入出力
  3. 変数と演算
  4. 条件分岐
  5. 繰り返し
  6. クラス

Perl

  1. 概要から設定

Lua

  1. 概要〜設定まで
  2. 変数と型
  3. 演算子
  4. 制御構文
  5. テーブル
  6. 関数
  7. メタテーブル
  8. C/C++へLuaを組み込む(1)
  9. C/C++へLuaを組み込む(2)

アルゴリズム

  1. 整列
    1. バブルソート
    2. 選択ソート
    3. 挿入ソート
    4. シェルソート
    5. クイックソート
    6. マージソート
    7. ビンソート
  2. 探索
    1. 線形探索
    2. 2分探索
  3. 文字列検索
    1. 力まかせ法
    2. KMP法
    3. BM法
  4. 数理

数学

  1. 3次元ベクトル

API修得編

SDL

  1. 初期化処理と終了処理
  2. ウインドウ生成編
  3. イベント編
  4. キーボード入力編
  5. ジョイスティック入力編
  6. 画像処理編(1)
  7. 画像処理編(2)
  8. サウンド編

データベース

  1. SQLiteとは
  2. SQLiteのデータ型
  3. SQLiteのコマンド
  4. SQLをC/C++プログラムに組み込む(1)

並列技術編

  1. OpenMP

設計編

  1. デザインパターン
    1. Abstract Factory パターン
    2. Builder パターン
    3. Factory Method パターン
    4. Prototype パターン
    5. Singleton パターン
    6. Adapter パターン
    7. Bridge パターン
    8. Composite パターン
    9. Decorator パターン
    10. Facade パターン
    11. Flyweight パターン
    12. Proxy パターン
    13. Chain of Responsibility パターン
    14. Command パターン
    15. Interpreter パターン
    16. Iterator パターン
    17. Mediator パターン
    18. Memento パターン
    19. Observer パターン
    20. State パターン
    21. Strategy パターン
    22. Template Method パターン
    23. Visitor パターン
    24. 参考文献

ツール編

  1. cppcheckを使った静的コード解析
  2. pgomgrを使ったパフォーマンス解析
  3. VisualStudioによるビルドプロセスの自動化
  4. .NETとJenkinsで始めるCI開発

2014-02-23

中川かのん starring 東山奈央 2nd コンサート Ribbon Illusion

お久しぶりです.Crestです.さて,今週の木曜日と金曜日に東京に出張し,土曜日には舞浜で開催されるコンサートに参加してきました.

f:id:Crest:20140222155129j:image

UDXラフォーレ六本木日比谷公会堂パシフィコ横浜,そして今回は舞浜アンフィシアターでのコンサート.私は参加できませんでしたが,UDXの時からもう4年も経過しているんですね.時間の経過とは早いものです.

東山奈央という声優を知ったのは,神のみぞ知るセカイ中川かのんが登場するFLAG 5.0「IDOL BOMB」の時.この時に流れたハッピークレセント,そしてFLAG 7.0「Shining Star」の挿入歌らぶこーるを聴いてから大好きになりました.それ以降,彼女のコンサートには足繁く通うようになりました.私は本来,飽き性な方で一つの物事にはあまり執着しない性質なのですが,彼女はコンサートの度に新しくそして成長していて見ている側も次はどんな中川かのんを見せてくれるのだろうと,とても楽しみに思えてくるのです.

今回の2nd コンサートは,そんな中川かのんの集大成ともいえるようなコンサートでした.彼女は今回のコンサートで,中川かのんのソロ楽曲をすべて歌い切っただけでなく,恋に落ちたサンタのリズムに合わせてタップダンスを披露し,そしてらぶこーるではまさかのピアノ伴奏も披露してくれました.本当に彼女の成長ぶりには目を見張ります.

コンサートは,中川かのんの軌跡を辿るオープニングから始まり,Colorsの一曲目青春パラダイスを皮切りにかのん100%,ろまんてぃっく愛情,サマーボーイ,バレバレ・バレンタイン,秋色片思いと続きます.以降は,MCを交えColorsやBirthに収録されている楽曲だけでなくカバーアルバムや神のみぞ知るセカイのEDまで歌い上げてくれました.途中,かのんちゃんが袖に引っこんでいる間に女神アポロによるUDXのデビューイベント映像の紹介がありました.映像を見ると,やはり当時の彼女の所作・言動は今と比べると,とても固いものでした.ですが今回のコンサートでは,そのような固さはありません.

そして,ダーリンベイビを披露した後,一度終幕.観客席からは大勢の方からアンコールがあり,かのんちゃんはそれに応え思い出がいっぱい,歩いていくもんを歌ってくれました.もう本当に最高の時間でした.セットリストは,公式サイトから見ることができます.

会場に届けられた花束.

f:id:Crest:20140222164400j:image

f:id:Crest:20140222164348j:image

f:id:Crest:20140222164340j:image

f:id:Crest:20140222164333j:image

f:id:Crest:20140222164324j:image

f:id:Crest:20140222164317j:image

f:id:Crest:20140222164303j:image

f:id:Crest:20140222164256j:image

f:id:Crest:20140222164254j:image

戦利品のパンフレットとクリアファイル.

f:id:Crest:20140223204714j:image

なお,今回のコンサートも1stと同じようにBD/DVD化が決定です.発売は5/28です.

2013-11-13

クラス

クラスとは

クラスの概念はオブジェクト志向において非常に重要な概念です.クラスは,データとそれに対する操作の組で表現されます.クラスの持つデータ(属性)は,クラス内の変数として宣言され,フィールドの操作はメソッドというクラス内に定義された関数で行われます.なお,クラスにはモデリングしやすいという利点もあります.

オブジェクトの生成

クラスはコード上で概念を表現したものでありそれ自体は実体ではありません.クラスの実体(インスタンス,オブジェクト)を作るには,new 演算子を用います.list-1のようにしてオブジェクトを生成します.

list-1

型名 変数名 = new 型名

new演算子を呼び出した時には,コンストラクタという,オブジェクトを初期化するための型名と同じ特別な関数が呼ばれます.

list-2

	class クラス
	{
		public クラス() {
		   //初期化
		}
	}

例えば,点を表現するPointクラスであれば

list-3

	class Point
	{
		public Point() {
		    Console.WriteLine("コンストラクタを呼び出しました");
		}
		
	}

として書くことができます.

フィールド

クラスの持つ属性を,フィールドといいます.フィールドはクラス内の変数として表現されます.点を表現するクラスは当然座標を持っていますから,list4のように定義できます.フィールドはコンストラクタで初期化しなければ既定の値で初期化されます.

list-4

using System;

namespace Sample
{
	class Point
	{
		public Point() {
		    Console.WriteLine("コンストラクタを呼び出しました");
		}
		
		public Point(int x, int y) {
			_x = x;
			_y = y;
		    Console.WriteLine("コンストラクタでオブジェクトを({0},{1})で初期化しました。", x, y);
		}
		
		private int _x;
		private int _y;
	}
	
	class Program {
		[STAThread]
		public static void Main(string[] args) {
			Point p = new Point(10, 11);			
		}
	}

メソッド

メソッドはフィールドに対する操作を定義します.なんのことはないただの関数です.例えば,Pointクラスの座標値を表示するPrintメソッドをlist4に追加すると以下のようになります

list-5

	class Point
	{
		public Point() {
		    Console.WriteLine("コンストラクタを呼び出しました");
		}
		
		public Point(int x, int y) {
			_x = x;
			_y = y;
			
			Console.WriteLine("コンストラクタでオブジェクトを({0},{1})で初期化しました。", x, y);
		}
		
		public void Print() {
			Console.WriteLine("({0},{1})", _x, _y);
		}
		

		private int _x;
		private int _y;
	}
	
	class Program {
		[STAThread]
		public static void Main(string[] args) {
			Point p = new Point(10, 11);
			
			p.Print();
		}
	}

プロパティ

C++では,クラスのもつ属性に外部からアクセスしたいときは,公開レベルをpublicにして変数を公開するかget,setメソッドを実装する必要がありました.

C#では,フィールドに対してアクセスする手段としてプロパティがあります.

list-6

using System;

namespace Sample
{
	class Point
	{
		public Point() {
			Console.WriteLine("コンストラクタを呼び出しました");
		}
		
		public Point(int x, int y) {
			Console.WriteLine("コンストラクタを呼び出しました");
			X = x;
			Y = y;
			Console.WriteLine("{0}, {1}で初期化しました", x, y);
			
		}
		public void Print() {
			Console.WriteLine("({0},{1})", X, Y);
		}
		
		private int _x;
		public int X
		{
			get {
				return _x;
			}
			set {
				_x = value;
			}
		}
		
		private int _y;
		public int Y 
		{
			get {
				return _y;
			}
			set {
				_y = value;
			}
		}
	}
	
	class Program {
		[STAThread]
		public static void Main(string[] args) {
			Point p = new Point(10, 11);
			p.Print();
			
			p.X = 12;
			p.Y = 13;
			p.Print();
		}
	}
}

get, setアクセサを用意することで,変数を公開レベルをpublicにするより,フィールドの入力値をチェックしたり変更点を追跡できるようになるため,安全になります.

また,get setの定義を省略した場合には,コンパイラがコンパイル時にプロパティを自動的に生成してくれます.これを自動実装プロパティといいます.

list-7

using System;

namespace Sample
{
	class Point
	{
		public Point() {
			Console.WriteLine("コンストラクタを呼び出しました");
		}
		
		public Point(int x, int y) {
			Console.WriteLine("コンストラクタを呼び出しました");
			X = x;
			Y = y;
			Console.WriteLine("{0}, {1}で初期化しました", x, y);
			
		}
	
		public void Print() {
			Console.WriteLine("({0},{1})", X, Y);
		}
		
		public int X
		{
			get;
			set;
		}
	
		public int Y 
		{
			get;
			set;
		}
	}
	
	class Program {
		[STAThread]
		public static void Main(string[] args) {
			Point p = new Point(10, 11);
			p.Print();
			
			p.X = 12;
			p.Y = 13;
			p.Print();
		}
	}
}

また,プロパティはnew statementでも呼び出すことができます。

list-8

class Program {
     [STAThread]
      public static void Main(string[] args) {
	  Point p = new Point()
	  {
                X = 10,
                Y = 11
          };
			
	  p.Print();
	}
}

2013-10-06

近況

お久しぶりです.Crestです.4月に入社してから半年が過ぎました.その半年の間に本当に色々なことが有りました.

今回は半年間を軽く振り返ってみようと思います

入社〜現在

とりあえずまぁ職場について.古き良き工程管理といいますか.vss+エクセルによる工程管理redmine+svn(最近はgit)で慣れた身にとっては,ブランチも切れない環境というのは辛いです.ええ.しかも,vssってリポジトリがよく壊れるんですよね.修復するのに20~30分ぐらいかかるし.道具を使ってるんじゃなくて道具に使わされてる感があります.

上期は某社さんの工程管理システムの開発に従事してました.現在はこれとは別に,3Dモデルのビューアの開発に従事してます.私は途中から動員されたんで詳しい事は把握してないのですが,「なんでこんな設計になってんの?!」って毎日頭を悩ましています.これはひどい.エラー処理はきちんとしてるのですが,契約的でもないし表明もしないノーガードプログラミング.防衛的プログラミングとは一体何だったのか.プログラマーというかプログラミングってもっと楽しいものだと思ってたので,面食らいましたね.まぁ現実はこんなもんなのでしょうか.もっと自動化・可視化をしようというと,「偉そうに言うな」と怒られました(´・ω・`)ショボーン.現代のソフトウェア開発は複雑さとの戦いですよと言いたくなりもしましたがグッと堪えました.

とりあえず自分の出来る範囲での自衛はやるようにしてます.静的コード解析(やまほど警告が出る)とかビルド単体テストの自動化(CIサーバも近々動かすことができそう)などですね.


生活スタイルの変化

大学院と比べると規則正しい生活にはなりました.逆に命削ってる感はあります.だいたい以下の感じ

  • 7:30-8:00 起床
  • 8:30-8:50頃 職場に向かう.通勤途中にラノベを読む
  • 9:00-9:30頃 職場着,朝1時間は勉強時間として確保
  • 10:00-10:30頃 仕事始め(フレックスタイム制なんでこれで問題ない)
  • 19:00- 2 3:00 仕事終わり.帰りもラノベ読む
  • 帰宅後:サークルマネジメント,Unityでゲーム制作,C#のまとめかいたり,勉強会の資料書いたりとか.
  • 3:00前後 寝る

こう見るとヤバイな.死にそう.ここ数ヶ月でラノベ20冊ぐらい読みました.面白かったのは星刻のドラグナーや魔弾の王とヴァナディース,アブソリュートデュオあたりですね.インフィニットストラトスも新装版になってから読み始めましたがなかなかおもしろいです最新の8巻は萌え要素だけでバトル要素が皆無なのでちょっとがっかりですがキャラクターがかわいいので許します.なおMF文庫Jから星刻のドラグナー,魔弾の王とヴァナディース,精霊使いの剣舞,魔法戦争,のゲームノーライフの5作品がアニメ化するそうで,ドラグナーヴァナディースには期待したい.特に,エーコの声は釘宮理恵で是非お願いします!

魔弾の王と戦姫<魔弾の王と戦姫> (MF文庫J)

魔弾の王と戦姫<魔弾の王と戦姫> (MF文庫J)

星刻の竜騎士(1) (MF文庫J)

星刻の竜騎士(1) (MF文庫J)

精霊使いの剣舞<精霊使いの剣舞> (MF文庫J)

精霊使いの剣舞<精霊使いの剣舞> (MF文庫J)

神のみぞ知るセカイジョイントコンサートの参戦

中川かのんこと東山奈央さんが出演されるコンサートに今回も行ってきました.出演は,中川かのん東山奈央さん,桂ヒナギク伊藤静さん,水蓮寺ルカ山崎はるかさん,ハクアドロットヘルミニウム役早見沙織さんでした.東山奈央さんはもちろん,早見沙織さんや伊藤静さん,山崎はるかさんも私の好きな声優さんなので,この4名によるコンサートはとても楽しかったです.BDももちろん買いました.山崎はるかさんは初めて顔を拝見しましたが美人さんでしたね.


今年の末には,中川かのんの2ndアルバムもでますし,来年はなんと2ndコンサート決定なので,チケットが取れたら来年も遠征するかと思います.

博士(情報学)の学位を戴いた

9/27にようやくと言いますかなんとかと言いますか,大学院を修了することができました.無事とれたっていうのと,大学からのしがらみから解放されるっていうのと,おいらみたいなのが戴いてもいいのかっていう複雑な心境です.肩書に恥じないようにこれからも精進します.

ついでに宣伝.型システム入門(Types and Programming Languages)の読書会の6回目が開催されます.今度は9章の単純型付ラムダ式から読みます.よろしくお願いいたします.

TAPL読書会

2013-08-30

繰り返し

  • 繰り返し回数が決まっている場合にはfor文
  • 繰り返し回数が決まっていない場合にはwhile文
  • 配列などのコレクションを全て走査する場合はforeach文

for文

…から…まで同じ処理を繰り返すということを表現するには,for文を用います

for (1.初期化子; 2.条件式; 3.反復子)
{
 反復したい処理
}

1の初期化子には,繰り返しの初期値を設定します.この部分は,繰り返しが実行される前に1度だけ実行されます.

2の条件式には,繰り返しを続行するか終了するかを決定する条件式を,記述します

3の反復子には,ループの後に実行される処理を記述子ます.通常はここにインクリメント/デクリメントといったループの更新処理を記述します.ここで,インクリメントとは変数の値を1増やす処理の事です.デクリメントは逆に変数の値を1減らす処理です.

例えば,0から10まで加算を繰り返すには,次のように記述します.

list-1

using System;

class Program
{
	static void Main(string[] args)
	{	
		int sum = 0;
		for (int i=0; i <= 10; i+=1) 
		{
			sum = sum + i;
		}
		
		Console.WriteLine("{0}から{1}までの和は,{2}です。", 0, 10, sum);
	}
}

インクリメントとデクリメント

インクリメントは

int i = 0;
i += 1;

とも書けますが,C#ではインクリメントにを行うのに簡便な,++演算子(インクリメント演算子)が用意されています.デクリメントも同様に,--演算子(デクリメント演算子)が用意されています.

list-1をインクリメントを使うように書き直すと,次のようになります.

list-2

using System;

class Program
{
	static void Main(string[] args)
	{	
		int sum = 0;
		for (int i=0; i <= 10; i++) 
		{
			sum = sum + i;
		}
		
		Console.WriteLine("{0}から{1}までの和は,{2}です。", 0, 10, sum);
	}
}

また,++演算子(--演算子)には,2種類の形式があり変数の前に置く形式を前置インクリメント(デクリメント),変数の後ろに置く形式を後置インクリメント(デクリメント)といいます.

int value = 0;
++value; //(1) 前置インクリメント
value++; //(2) 後置インクリメント

前置インクリメント(デクリメント)と後置インクリメント(デクリメント)の違いは,評価の順番です.例えば,次のコード.

list-3

using System;
using System.Linq;

class Program
{
	static void Main(string[] args)
	{
			int v1 = 1;
			int v2 = 2;
			int i = ++v1;
			int j = v2++;
			Console.WriteLine("v1を前置インクリメントすると{0}", i);
			Console.WriteLine("v2を後置インクリメントすると{0}", j);
	}
}

これの実行結果は

v1を前置インクリメントすると2
v2を後置インクリメントすると2

となり,v1を前置インクリメントすると値が増えて代入されているのに,v2を後置インクリメントして代入しても2のままです.これは前置インクリメントが式を評価する前に実行されるのに対して,後置インクリメントは式を評価した後に実行するからです.

while

...まで処理を繰り返すということを表現するには,while文を用います.while文は,特定の条件式が成立するまで反復します.

while (条件式)
{
 反復したい処理
}

for文と異なり,繰り返しの初期化や繰り返しの更新処理は不要です.必要な場合は,while文の内外に記述します.

例えば,ユーザの入力が正の間は和を計算して,負の入力になったら和を表示して繰り返しを抜ける場合には次のようにかけます.

list-4

using System;

class Program
{
	static void Main(string[] args)
	{
		int sum = 0;
		while (true) {
			string line = Console.ReadLine();
			int value = Int32.Parse(line);
			
			if (value < 0) {
				Console.WriteLine("入力値の和は{0}です", sum);
				break;
			}
			
			sum += value;
		}
	}
}

また,for文とwhile文は相互に書き換えが可能で,list-1のコードは次のように書くこともできます.

list-5

using System;

class Program
{
	static void Main(string[] args)
	{	
		int sum = 0;
		int i = 0;
		while (i <= 10) 
		{
			sum = sum + i;
			++i;
		}
		
		Console.WriteLine("{0}から{1}までの和は,{2}です。", 0, 10, sum);
	}
}

do-while文

while文とよく似た制御構造を提供するdo-while文もあります.do-whileはwhile文と異なり必ず1回は実行されます.

do
{
 反復したい処理
}while (条件式);

list-2の内容をdo-whileで書き下すと次のようになります.

list-6

using System;

class Program
{
	static void Main(string[] args)
	{	
		int sum = 0;
		int i = 0;
		do 
		{
			sum = sum + i;
			++i;
		}
		while(i<=10);
		
		Console.WriteLine("{0}から{1}までの和は,{2}です。", 0, 10, sum);
	}
}

foreach文

C#には,配列やコレクションの全ての要素を走査するforeach文があります.foreachはLinqと相性がいいのでLinqを積極的に使う場合には,for文などよりforeachのほうが使う機会が増えると思います.

例えば,1-10までの和を求めるには次のようにかけます.

list-7

using System;
using System.Linq;

class Program
{
	static void Main(string[] args)
        {
		//1から数えて10個の整数のシーケンスを作成する
		var range = Enumerable.Range(1, 10);
		
		int sum = 0;
		foreach (var item in range) 
		{
			sum += item;
		}
		
		Console.WriteLine("{0}から{1}までの和は{2}です.", 1, 10, sum);

	}
}