2005年10月
iTunesに登録してある曲の管理をしたいけど
iTunesはちょっと重いしぃ、エクセルとかで管理できないかな
csv形式とかで吐き出せないかと探してみたら
iTunesのファイル メニューに
「ライブラリをエクスポート」ってのがあるじゃん
早速エクスポートしてみるとxml形式のみの吐き出しみたいです
(バージョン4.8.0.31 で確認)
これをcsvに変換するツールを作ろうと思い立ったわけです
xmlファイルを読み込んで必要なキーワードをピックアップして
csvファイルに吐き出す、単純な処理です(と思う)
気になる点としては
・xmlファイルの文字コードがUTF-8である → Shift_JISに変換しないと
・文字列の比較が大量に発生するので、実用的なスピードがでるか?
ま、近いうちにやってみます
続きを読む
iTunesはちょっと重いしぃ、エクセルとかで管理できないかな
csv形式とかで吐き出せないかと探してみたら
iTunesのファイル メニューに
「ライブラリをエクスポート」ってのがあるじゃん
早速エクスポートしてみるとxml形式のみの吐き出しみたいです
(バージョン4.8.0.31 で確認)
これをcsvに変換するツールを作ろうと思い立ったわけです
xmlファイルを読み込んで必要なキーワードをピックアップして
csvファイルに吐き出す、単純な処理です(と思う)
気になる点としては
・xmlファイルの文字コードがUTF-8である → Shift_JISに変換しないと
・文字列の比較が大量に発生するので、実用的なスピードがでるか?
ま、近いうちにやってみます
続きを読む
やっとコーディングを始める事が出来そうです
「ボタンを1つ追加して、それを押すと Hello World と表示」
こんな事をやってみましょう
左の Resource View から Hello リソース¥Dialog¥IDD_HELLO_DIALOG
をダブルクリックしてリソースエディタに表示させます
そしてコントロールウィンドウを探してください(^^;
画面のどこかにドッキングしているか、フローティングしているか…
無ければツールメニューからカスタマイズを選び
ツールバータブ内のツールバーリストボックスの
コントロールにチェックを入れると、ほうら出てきた
コントロールウィンドウのボタンのボタン(笑)を
ドラッグしてダイアログ上の適当な場所に配置します
配置したボタンを右クリックしてプロパティを表示して
IDとキャプションを適当に変更しましょう
MS的なIDの付け方は ID+IDの種類_名前 でしょうか
ID+Control_HelloWorld って事で
IDC_HELLO にしときましょう
キャプションも Hello World にします
これでボタンが Hello World になったと思います
続いて Hello World ボタンを右クリックして
ClassWizawdを選びます
メッセージマップタブのオブジェクトIDの
IDC_HELLO が選択された状態だと思うので
右のメッセージリストボックスの BN_CLICKED を選択して
さらに右の関数の追加ボタンをクリック!
メンバ関数の追加ダイアログが出て
デフォルトで関数名 OnHello が入っているのでそのままOK
そしてクラスウィザードをOK
左の Class View の CHelloDialog を展開すると
関数 OnHello が出来ているので
ダブルクリックしてソースを開きます
関数の中身はカラでコメント
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
とあるだけです
このコメントが既に意味不明ですが(^^;
とりあえずここにコードを追加していきます
コメントの下の行に以下のように書きましょう
AfxMessageBox( _T("Hello World") );
以上です、早速
F5キーを押して、ビルド→実行しましょう
Hello World ボタンを押して Hello World のメッセージボックスが
出たら大成功!やったー!
今回の操作については次回解説する事にしまする
「ボタンを1つ追加して、それを押すと Hello World と表示」
こんな事をやってみましょう
左の Resource View から Hello リソース¥Dialog¥IDD_HELLO_DIALOG
をダブルクリックしてリソースエディタに表示させます
そしてコントロールウィンドウを探してください(^^;
画面のどこかにドッキングしているか、フローティングしているか…
無ければツールメニューからカスタマイズを選び
ツールバータブ内のツールバーリストボックスの
コントロールにチェックを入れると、ほうら出てきた
コントロールウィンドウのボタンのボタン(笑)を
ドラッグしてダイアログ上の適当な場所に配置します
配置したボタンを右クリックしてプロパティを表示して
IDとキャプションを適当に変更しましょう
MS的なIDの付け方は ID+IDの種類_名前 でしょうか
ID+Control_HelloWorld って事で
IDC_HELLO にしときましょう
キャプションも Hello World にします
これでボタンが Hello World になったと思います
続いて Hello World ボタンを右クリックして
ClassWizawdを選びます
メッセージマップタブのオブジェクトIDの
IDC_HELLO が選択された状態だと思うので
右のメッセージリストボックスの BN_CLICKED を選択して
さらに右の関数の追加ボタンをクリック!
メンバ関数の追加ダイアログが出て
デフォルトで関数名 OnHello が入っているのでそのままOK
そしてクラスウィザードをOK
左の Class View の CHelloDialog を展開すると
関数 OnHello が出来ているので
ダブルクリックしてソースを開きます
関数の中身はカラでコメント
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
とあるだけです
このコメントが既に意味不明ですが(^^;
とりあえずここにコードを追加していきます
コメントの下の行に以下のように書きましょう
AfxMessageBox( _T("Hello World") );
以上です、早速
F5キーを押して、ビルド→実行しましょう
Hello World ボタンを押して Hello World のメッセージボックスが
出たら大成功!やったー!
今回の操作については次回解説する事にしまする
いよいよコーディングしましょう!
と前回書いたけど、その前にちょっとだけ
Visual Studio の操作などについて
以前作成したワークスペース Hello を開きます
そうすると Visual Studio の画面は3分割されていると思います
(自由に動かせるドッキングウィンドウなので不確かだけど…)
多分右側にあるのがワークスペースウィンドウで
「Class View」「Resource View」「File View」の3つのタブがあります
右上の×ボタンで表示を消せるし
再度表示したかったら表示メニューのワークスペースで出ます
それぞれのViewのタブも右クリックで表示・非表示できます
Class View はクラスごとにツリー表示してくれて
クラス宣言や関数などにジャンプできます
Resource View はダイアログなどのリソースを管理
File View はプロジェクト内のファイルをツリー表示
と言った感じでその時に応じて使い分けましょう
次に、下にあるのがアウトプットウィンドウで
ビルドログの表示や、デバッグ時の変数の値の表示や
検索結果の表示など、さまざまなアウトプットがなされます
最後に一番大きいウィンドウ
ソースエディタやダイアログエディタの部分です
ここはこれからイヤってぐらい使うのでそのうち覚えるでしょう
それぞれのウィンドウにフォーカスがある状態でF1キーを押すと
簡単なヘルプが表示されるので、読んでおくといいかな
ただしMSDNライブラリがインストールされている状態だと
(じゃなくても、かもしれないけど(^^;)
ソースエディタでF1キーを押すとMSDNライブラリが起動して
カーソルのある場所の単語についてのトピックが表示されます
知らない関数やクラスが出てきたらとりあえずF1を押してみましょう!
難しい話はこれぐらいにして
次回こそコーディングに入りたいと思います
と前回書いたけど、その前にちょっとだけ
Visual Studio の操作などについて
以前作成したワークスペース Hello を開きます
そうすると Visual Studio の画面は3分割されていると思います
(自由に動かせるドッキングウィンドウなので不確かだけど…)
多分右側にあるのがワークスペースウィンドウで
「Class View」「Resource View」「File View」の3つのタブがあります
右上の×ボタンで表示を消せるし
再度表示したかったら表示メニューのワークスペースで出ます
それぞれのViewのタブも右クリックで表示・非表示できます
Class View はクラスごとにツリー表示してくれて
クラス宣言や関数などにジャンプできます
Resource View はダイアログなどのリソースを管理
File View はプロジェクト内のファイルをツリー表示
と言った感じでその時に応じて使い分けましょう
次に、下にあるのがアウトプットウィンドウで
ビルドログの表示や、デバッグ時の変数の値の表示や
検索結果の表示など、さまざまなアウトプットがなされます
最後に一番大きいウィンドウ
ソースエディタやダイアログエディタの部分です
ここはこれからイヤってぐらい使うのでそのうち覚えるでしょう
それぞれのウィンドウにフォーカスがある状態でF1キーを押すと
簡単なヘルプが表示されるので、読んでおくといいかな
ただしMSDNライブラリがインストールされている状態だと
(じゃなくても、かもしれないけど(^^;)
ソースエディタでF1キーを押すとMSDNライブラリが起動して
カーソルのある場所の単語についてのトピックが表示されます
知らない関数やクラスが出てきたらとりあえずF1を押してみましょう!
難しい話はこれぐらいにして
次回こそコーディングに入りたいと思います
実際にソースファイルを見てみましょう!
Hello.h
Hello.cpp
HelloDlg.h
HelloDlg.cpp
の4つのファイルです
Javaでは1つのファイルに宣言と実装部分を同時に書いたけど
C++では以下のように
拡張子hのヘッダファイルにクラス宣言
拡張子cppのソースファイルに関数の中身を実装
をそれぞれ記述します
(ヘッダファイルに実装する事もできるけど)
簡単に説明すると
Hello.h
Hello.cpp
アプリケーション本体について記述
CWinAppから派生したCHelloAppがアプリケーション本体
↑このリンク、IE以外だと上手く表示できないようです
○IE、Sleipnir2 △Firefox1.0.6 ×Sleipnir1.66 でした
関数InitInstance()でダイアログを生成、呼び出してます
InitInstanceは名前が示す通り
インスタンスが生成されたら最初に呼び出される関数です
アプリケーションの初期化処理なんかを記述します
Java的に言うとmainメソッドがあるクラスになります
CWinAppも実際はmain関数でインスタンス生成されて
InitInstanceが呼ばれているんじゃないかと思うけどね
HelloDlg.h
HelloDlg.cpp
今回作成したダイアログについて記述
現状で出来ている関数については
DoDataExchange
ダイアログに配置したコントロールからデータを取得したり
コントロールクラスとの関連付けを行ったりします
OnInitDialog
ダイアログの初期化処理を記述
OnSysCommand
右上のアイコンをクリックしたら出てくるメニューの
コマンドを実行した時の処理を記述
OnPaint
ダイアログ描画に関する記述
OnQueryDragIcon
その名の通り、ドラッグした時のアイコンイメージの問合せです
Microsoft的な命名規則として
On〜は何らかのイベントが発生した時
Query〜は何かの問合せ
システム・フレームワークからの問合せ、かな
前置きはこのぐらいにして
次回からコーディングしていきましょう
Hello.h
Hello.cpp
HelloDlg.h
HelloDlg.cpp
の4つのファイルです
Javaでは1つのファイルに宣言と実装部分を同時に書いたけど
C++では以下のように
拡張子hのヘッダファイルにクラス宣言
拡張子cppのソースファイルに関数の中身を実装
をそれぞれ記述します
(ヘッダファイルに実装する事もできるけど)
簡単に説明すると
Hello.h
Hello.cpp
アプリケーション本体について記述
CWinAppから派生したCHelloAppがアプリケーション本体
↑このリンク、IE以外だと上手く表示できないようです
○IE、Sleipnir2 △Firefox1.0.6 ×Sleipnir1.66 でした
関数InitInstance()でダイアログを生成、呼び出してます
InitInstanceは名前が示す通り
インスタンスが生成されたら最初に呼び出される関数です
アプリケーションの初期化処理なんかを記述します
Java的に言うとmainメソッドがあるクラスになります
CWinAppも実際はmain関数でインスタンス生成されて
InitInstanceが呼ばれているんじゃないかと思うけどね
HelloDlg.h
HelloDlg.cpp
今回作成したダイアログについて記述
現状で出来ている関数については
DoDataExchange
ダイアログに配置したコントロールからデータを取得したり
コントロールクラスとの関連付けを行ったりします
OnInitDialog
ダイアログの初期化処理を記述
OnSysCommand
右上のアイコンをクリックしたら出てくるメニューの
コマンドを実行した時の処理を記述
OnPaint
ダイアログ描画に関する記述
OnQueryDragIcon
その名の通り、ドラッグした時のアイコンイメージの問合せです
Microsoft的な命名規則として
On〜は何らかのイベントが発生した時
Query〜は何かの問合せ
システム・フレームワークからの問合せ、かな
前置きはこのぐらいにして
次回からコーディングしていきましょう
その1で作った開発環境の構成ファイルについて
C:\test\Hello の中には
フォルダが2つ、Debug と res とファイルが16個あります
ファイル名でソートされているとして
~VC1A.tmp
~VC19.tmp
Hello.aps
何のファイルかわかりません
Hello.clw
クラスウィザードのファイルです
詳しくはまた今度書きます
Hello.cpp
拡張子cppのファイルがC++のソースファイルです
Hello.dsp
プロジェクトファイル
プロジェクトの設定などが記述されている
Hello.dsw
プロジェクトワークスペース
これをダブルクリックでVisualStudioが起動する
Hello.h
拡張子hのファイルがヘッダファイル
Hello.ncb
Hello.opt
何のファイルかわかりません
Hello.plg
HTML Document ビルドログがHTMLで出力される
コンソールに出力されているものと同じ
Hello.rc
リソースファイル
ダイアログのサイズや配置してあるボタンなどのコントロールの詳細が記述されています
リソースエディタが記述してくれるのでほとんど触ることはない
HelloDlg.cpp
今回作成したダイアログが記述されているソースファイル
HelloDlg.h
今回作成したダイアログが記述されているヘッダファイル
ReadMe.txt
MFC AppWizardが吐き出したReadMe
簡単な説明や使用方法などが書いてあります
Resource.h
リソースのヘッダファイル
StdAfx.cpp
#include "StdAfx.h" だけ書いてある
なぜあるのかよくわかりません
StdAfx.h
プロジェクトに共通の include を記述
Debugフォルダ
Hello.exe
デバッグビルドされたexeファイル
デバッグ情報が含まれているのでファイルサイズが大きい
他全部
同名のcppファイルをコンパイルした中間ファイルなど
とりあえずは気にしなくてもいいでしょう
resフォルダ
Hello.ico
アイコンファイル
Hello.rc2
拡張(?)リソースファイル
とりあえず触る事は無いでしょう
C:\test\Hello の中には
フォルダが2つ、Debug と res とファイルが16個あります
ファイル名でソートされているとして
~VC1A.tmp
~VC19.tmp
Hello.aps
何のファイルかわかりません
Hello.clw
クラスウィザードのファイルです
詳しくはまた今度書きます
Hello.cpp
拡張子cppのファイルがC++のソースファイルです
Hello.dsp
プロジェクトファイル
プロジェクトの設定などが記述されている
Hello.dsw
プロジェクトワークスペース
これをダブルクリックでVisualStudioが起動する
Hello.h
拡張子hのファイルがヘッダファイル
Hello.ncb
Hello.opt
何のファイルかわかりません
Hello.plg
HTML Document ビルドログがHTMLで出力される
コンソールに出力されているものと同じ
Hello.rc
リソースファイル
ダイアログのサイズや配置してあるボタンなどのコントロールの詳細が記述されています
リソースエディタが記述してくれるのでほとんど触ることはない
HelloDlg.cpp
今回作成したダイアログが記述されているソースファイル
HelloDlg.h
今回作成したダイアログが記述されているヘッダファイル
ReadMe.txt
MFC AppWizardが吐き出したReadMe
簡単な説明や使用方法などが書いてあります
Resource.h
リソースのヘッダファイル
StdAfx.cpp
#include "StdAfx.h" だけ書いてある
なぜあるのかよくわかりません
StdAfx.h
プロジェクトに共通の include を記述
Debugフォルダ
Hello.exe
デバッグビルドされたexeファイル
デバッグ情報が含まれているのでファイルサイズが大きい
他全部
同名のcppファイルをコンパイルした中間ファイルなど
とりあえずは気にしなくてもいいでしょう
resフォルダ
Hello.ico
アイコンファイル
Hello.rc2
拡張(?)リソースファイル
とりあえず触る事は無いでしょう
って事でこれからVC++でのプログラム開発について書いていきまーす
開発環境、と言うかこれを書く上でのテスト環境は
Microsoft Visual C++ 6.0 ServicePack5
MFC(Microsoft Foundation Class)使用
OSはWindowsXP HomeEdition
早速VC++を起動!
メニューから[ファイル] - [新規作成]を選ぶ(またはCtrl+N)と
「新規作成」のダイアログが出てきます
初期状態では「プロジェクト」タブが開いていて
ATL COM AppWizard が選ばれていると思います
右側にはプロジェクト名と位置の設定があります
位置はデフォルトではC:\Program Files〜 かな
とりあえずC:\testぐらいにしておきましょう
そしてプロジェクト名はHelloぐらいで
位置がC:\test\Helloになっているのを確認して
左のリストの中からMFC AppWizard(exe)を選んでOKをクリック!
MFC AppWizard - ステップ1ではダイアログベースを選んで[次へ]
MFC AppWizard - ステップ2/4 〜 4/4 はそのままで終了!
新規プロジェクト情報もOKすると、これでプロジェクトの出来上がり〜
ここで[ビルド] - [ビルド Hello.exe](またはF7キー)で
コンパイルされHello.exeが作られます
[ビルド] - [実行 Hello.exe](またはCtrl+F5キー)で
プログラムの実行、ダイアログが表示されますね
OKでもキャンセルでも×でもプログラムの終了です
これだけじゃ寂しいので表示を変えましょう
TODO:ダイアログの〜 を右クリックしてプロパティを選ぶと
キャプションの中にさっきTODO:〜がありますね
それを「Hello World」に変更してEnter
再度ビルドして実行! Hello World が表示されましたね
テキストのみでわかりにくかった? 次回ちょっと詳しく書いてみます
開発環境、と言うかこれを書く上でのテスト環境は
Microsoft Visual C++ 6.0 ServicePack5
MFC(Microsoft Foundation Class)使用
OSはWindowsXP HomeEdition
早速VC++を起動!
メニューから[ファイル] - [新規作成]を選ぶ(またはCtrl+N)と
「新規作成」のダイアログが出てきます
初期状態では「プロジェクト」タブが開いていて
ATL COM AppWizard が選ばれていると思います
右側にはプロジェクト名と位置の設定があります
位置はデフォルトではC:\Program Files〜 かな
とりあえずC:\testぐらいにしておきましょう
そしてプロジェクト名はHelloぐらいで
位置がC:\test\Helloになっているのを確認して
左のリストの中からMFC AppWizard(exe)を選んでOKをクリック!
MFC AppWizard - ステップ1ではダイアログベースを選んで[次へ]
MFC AppWizard - ステップ2/4 〜 4/4 はそのままで終了!
新規プロジェクト情報もOKすると、これでプロジェクトの出来上がり〜
ここで[ビルド] - [ビルド Hello.exe](またはF7キー)で
コンパイルされHello.exeが作られます
[ビルド] - [実行 Hello.exe](またはCtrl+F5キー)で
プログラムの実行、ダイアログが表示されますね
OKでもキャンセルでも×でもプログラムの終了です
これだけじゃ寂しいので表示を変えましょう
TODO:ダイアログの〜 を右クリックしてプロパティを選ぶと
キャプションの中にさっきTODO:〜がありますね
それを「Hello World」に変更してEnter
再度ビルドして実行! Hello World が表示されましたね
テキストのみでわかりにくかった? 次回ちょっと詳しく書いてみます
つい最近「D言語」なるものを知りました
Dとその他の言語の比較を見ると C/C++,C#やJavaのいい所どりな言語みたいです
C++プログラマの立場から見たD言語は
・ガベージコレクションがある
(メモリの解放を支配できないので、最初はなじみにくい)
・文字列によるswitchができる
(誰もがやりたいと思ったことがあるはず)
・多重継承が無い
(なくても困らなそう)
・foreach
(コレクションを全ループしてくれて便利。sizeやPOSITIONなどが不要)
などなど
まだ発展途上の言語のようなので今後が楽しみです
続きを読む
Dとその他の言語の比較を見ると C/C++,C#やJavaのいい所どりな言語みたいです
C++プログラマの立場から見たD言語は
・ガベージコレクションがある
(メモリの解放を支配できないので、最初はなじみにくい)
・文字列によるswitchができる
(誰もがやりたいと思ったことがあるはず)
・多重継承が無い
(なくても困らなそう)
・foreach
(コレクションを全ループしてくれて便利。sizeやPOSITIONなどが不要)
などなど
まだ発展途上の言語のようなので今後が楽しみです
続きを読む
Hotwired Japanに面白い記事がありました
C++やJavaなどのプログラミング言語の基本を楽しみながら遊べるボードゲーム
その名もc-jump
すごろくチックなボードゲームでマスにはいろんな制御文が並んでいて
次のマスに進むにはそこにかかれている制御文を理解しなきゃいけない
よくあるテキストのように難解な文章で書かれるよりは
わかりやすく楽しく学べるんじゃないでしょうか
会社の新人研修とかで使うと面白いんじゃないかな
プログラマ同士であれこれ言いながらやってみたりね
ゲームとして面白いかどうかが問題だけどね
C++やJavaなどのプログラミング言語の基本を楽しみながら遊べるボードゲーム
その名もc-jump
すごろくチックなボードゲームでマスにはいろんな制御文が並んでいて
次のマスに進むにはそこにかかれている制御文を理解しなきゃいけない
よくあるテキストのように難解な文章で書かれるよりは
わかりやすく楽しく学べるんじゃないでしょうか
会社の新人研修とかで使うと面白いんじゃないかな
プログラマ同士であれこれ言いながらやってみたりね
ゲームとして面白いかどうかが問題だけどね
2005年10月03日│Comments(0)│TrackBack(0)