2007年12月15日土曜日

アクセス修飾子(Accessibility)

private やら public やらですね。
毎回毎回調べてたのでまとめておきます。
C#3.0の言語仕様書を見てまとめてますが、
まー他の言語も大差ないと思います。(確認はしていませんが…)



















アクセス修飾子意味
public制限がありません
private宣言したクラスの中でのみ使用できる
protected宣言したクラスの中 と
派生したクラスの中で使用できる
internal宣言したアセンブリ(DLLやexe)の中でのみ使用できる
protected internal宣言したアセンブリ(DLLやexe)の中 と
派生したクラスの中 で使用できる



.

2007年12月7日金曜日

VB2005 DataSetにおいて CloseとDispose

現在まとめ中ですが
Dispose・・・オブジェクトのリソースの削除
clear・・・オブジェクトの中のデータの削除
か・・・な・・・・
跡で書き直す予定。

なお、なぜ今回このようなことを書いたかというと
データセットにてDisposeしたのにデータが保存されたままで
削除されないという問題にぶつかったためです。

この場合はClearを使うのが正しいんですね。
違いがようわからんわい。

追記:
大体あっていたようで・・・なのか?
自分の中でまとめてみると
clearはデータセットのテーブル及びデータを削除する
disposeはその場所つまりリソースを開放するのみ・・・
であってるのかな・・・

2007年12月4日火曜日

C++/CLI既定の名前空間の変更方法

環境はVC2005です。

新しくプロジェクトを作成したわいいが…
既定の名前空間がプロジェクト名で固定

C#やとプロジェクトの
[プロパティ][アプリケーション][既定の名前空間]
で簡単に変更可能。

C++/CLIで既定の名前空間を変更しようと
プロジェクトのプロパティ開いて探してみたが見当たらない

ということでプロジェクトファイル(拡張子.vcproj)を
テキストエディタで開くと10行目までに「RootNamespace」を
設定しているらしき部分がありました。
#ココからは直接プロジェクトファイルを変更するので
#一度バックアップをとっておいた方がいいですね。

RootNamespaceの値を変更すると規定の名前空間が変わりました!

こんな感じで書き換えます
-----------------
RootNamespace="既定の名前空間にしたい文字列"
-----------------

GUIで入力できると嬉しいのですがね…

.

2007年12月3日月曜日

スタバではグランデを買え!


様々なコストのお話。
商品の流れなど解りやすく解説してくれている本です。

同じ商品でも値段が異なってるのは何で?
金額以外の様々なコストって何だ?

作る側のコスト、使う側のコスト。
そういうのを意識してプロジェクトも動いていくんやろうなーと。

普段の生活でちょこっとコストのことを意識するだけでも
かなり楽しくなるんじゃないかなと思いました。

.

VB2005 エラー処理

エラー処理は基本的にTry ~ End Try で処理する。
エラーが起きれば自動的にcatchで捕まえてくれるが
意図的に起こしたい場合はThrow New Expetion()で例外を発生させる

また、End Tryの前にFinally処理を付け加えるとFinallyを必ず通る。
データベース切断などを入れておくといい。

関数を作ってboolean型判断でエラーを区別するのも使えそう?
Private Sub main()
Try
If a = false Then
Exit Try
End If

if b = false Then
exit Sub
end If
End Sub

catch ~~

End try
'---ここが飛ばされたりする
End sub

2007年11月21日水曜日

生産について(5000個のバグと戦ったMS)

こういう方法で開発してたのか~とちょっと感心した。
なるほど、効率的に感じる。
うちの社内じゃ難しそうだけどw
http://www.atmarkit.co.jp/news/200711/20/vs.html

2007年11月19日月曜日

[CrystalReport]横に表示する

VS2005付属 クリスタルレポート

右クリック>レポート>セクションエキスパートを選択
詳細>複数の列で表示
タブ(レイアウト)>横から縦
に変更

横幅を適当に変更すればOK

データグリッドビューの値を取得、表示

VB2005にて

DataGridViewに表示したものを選択、取得、表示する。
txtBox.Text = DataGridView.SelectedCells(i).Value
選択はFullRowSelect
iはColumnの値

これを忘れててうまいこといかず、20分悩んでたorz

ほかにも
txtBoxText = DataGridView.SelectedRows(0).Cells("columnName").Value
などがあるらしい

2007年11月8日木曜日

ファイルの読み込み例外処理

テストでファイルやフォルダのアクセス権なくしたり。
読み込むファイル削除したり。
ファイル消して同じ名前のフォルダ作ったり。
単なるファイルの読み込みだけでもテスト項目って豊富なんやなーと。

そのたびに例外が発生してたので処理書いて残しときます。
--------------------
using System;
using System.IO;

if (File.Exists(path) == false) {
// 読み取れるファイルで無い
}
try {
// ファイル読み込み
using (FileStream fs = new FileStream(path, FileMode.Open)) {
}
} catch (UnauthorizedAccessException) {
// アクセス権
} catch (IOException) {
// I/O エラー
}

--------------------

.

2007年11月5日月曜日

値クラス(value class)のコンストラクタ

値クラスにコンストラクタを宣言した所
コンパイルエラーとなり、原因を調べてましたので残しておきます。

値クラスの宣言方法:
public value class A{
...
};

値クラスにはデフォルトコンストラクタを宣言することができません。
(コピーコンストラクタも宣言できません)

値クラスにはデフォルトコンストラクタとコピーコンストラクタが
自動で生成されるようです。

デフォルトコンストラクタでは
数値は全て0(ゼロ)、参照型はnullで初期化されます。

コピーコンストラクタは
メンバ変数のたんなるバイトコピーです。
なので、ポインタで持ってるものを値クラスにする場合は気をつけましょう。
そういう値クラスを作らない方がよいかな。

てな仕様だそうです。

参考文献:
値クラス仕様:http://vene.wankuma.com/ecma372/22_value_type.aspx

.

2007年10月10日水曜日

AUの新料金体制(AU買い方セレクト)の問題点?

私は携帯でAUを使っています。
さて、AUのHPでAUの新料金について発表されたのだが。
参考HP:http://www.kddi.com/corporate/news_release/2007/1004/besshi.html
AU買い方セレクトというのだが、見てるとどうも違和感を感じる。

これって高いよなというもの。

なぜかというと、まだ調べ切れていないが
(店舗に行ってもまだ情報が入ってきてないと教えてくれない)
無料通話も付かず、基本料半額も付かないのようである。
つまり、一番高いプランLに基本料金が2,625円+通話料である。

例であらわすと
プランL               9975円(無料通話分6615円262分)
シンプルプランL(新しいプラン) 2625円(1分10.5円)

これを比較すると262分の料金は新プランだと2751円になるので
5376円
この状態だと、シンプルのほうが断然安いがここで問題になるのが
基本料金半額である。
プランLに誰でも割をつけると
4988円になり、プランL のほうが断然安くなる。

なんだ、この矛盾は。安くしたはずなのに高くなってるではないか。
プランSのほうもほとんど同じようなものだ。
ついでにいうと、ポイントも違っており、シンプルコースのポイントははっきり言って低い。
まして、機種代が高くなったのだから消費者が丸々損した形になってるではないか。
つまり、これらを見るとAUは機種負担を減らすと名目で自社の機種負担分を減らしたに過ぎない
ように見えるのは私だけか?
教えていただきたい、AUさん

2007年10月9日火曜日

XPSP3

先週末よりXPのSP3のβテストが始まったそうで
http://pc.watch.impress.co.jp/docs/2007/1009/ubiq201.htm

Vistaを出した後の時期にSPを出すというのはどうも腑に落ちないけど
まだまだ、使う会社が多いと見越してのリリースだろうか。
2014年までサポートが延長したことを考えると妥当ともいえよう。

Vistaは来年の春ごろにはSP1が出されるであろうからそれを見てからの購入
でもよさそうだ。

リンク先の記事には安定性は増したとかいているが
周辺ソフトがそれについていけてるかが気になるところ。
つまり周辺ソフト環境が整ってきたらPCと一緒に買い換えるという選択肢を
おいておいた方がいいかもしれない。

2007年10月5日金曜日

Ruby インストール

ふとやってみようと思ったので
Rubyのイストールを行いました。

■One-Click Installer - Windows
http://rubyforge.org/projects/rubyinstaller/
ここからダウンロードして実行してインストール完了。
初期設定のままで必要最低限は入るので大丈夫でしょう。

ウィザードをホイホイ進めていけば...

インストール完了!出来たでしょ?

.

2007年10月3日水曜日

XAMPPのインストール

フリーのwebアプリを試してみようと思い
ローカル内にwebサーバーを立てましたので、その時のメモ。
mysql と php を使っているので Xampp を使いドカッとインストール。

気をつけないといけないのは、
IIS などのwebサーバーが起動していて、
80番ポートが使われていると Apache のインストールに失敗するので注意が必要です。
IIS を使うのであれば Apache のインストールに失敗したままでも大丈夫です。

下記のサイトからXAMPP Windows のInstallerをダウンロード。
http://www.apachefriends.org/en/xampp-windows.html

後はダウンロードした Installer を実行して
指示にしたがってウィザードを進めていくだけ。
ほら簡単。

Apache, Mysql, PHPを単体でインストールすることになると...
めちゃ面倒なんで...Xamppすばらしいですね!

.

2007年9月26日水曜日

アプリケーションの作業フォルダの取得

ディレクトリ削除時に例外が発生した事から
アプリケーションの現在の作業ディレクトリの取得方法を
調べたので残しておきます。

まず発生したメソッドです。
System.IO.Directory.Delete(String)時に IOException が発生した。
MSDNで調べた結果原因は以下通り
1、同名のファイルが存在する
2、アプリケーションの現在の作業ディレクトリである

今回は2の原因だったので
作業ディレクトリ取得方法を調べました。

※補足
1の場合は以下のメソッドで確認しておけば大丈夫なはず。
Directory.Exists(String)

----
// アプリケーションの現在の作業ディレクトリの取得
System.IO.Directory.GetCurrentDirectory()

// ついでに設定方法も
System.IO.Directory.SetCurrentDirectory(String)
----


.

2007年9月14日金曜日

古いメソッドが使われないように警告を出す

ObsoleteAttribute:メソッドや変数を使うとコンパイル時に警告を出してくれる。

リファクタリングを行った後に、
同じ動きを別の手段を使えば出来るようになったメソッドが出たが、
影響範囲が広いため、変更する時間が無かった。
その事を他の人に言葉で伝えたとしても間違って使うかもしれない。

そこで何かないかな~と探した結果
ObsoleteAttribute という属性を発見した。

この属性を付けておけば、
使って欲しくないメソッドを使ってコンパイルすると警告を出してくれます。
またメッセージも添えれるので、新しいメソッドを使ってもらうように促す事も可能。

めちゃ便利です。

使い方はこんな感じ。
----------
using System;

[ObsoleteAttribute("適当なメッセージ")]
bool function(); // 関数の宣言
----------

もしくは
----------
using System;

// 第二引数をfalseでWarning扱い trueにするとエラーになりコンパイルできなくなります。
[ObsoleteAttribute("適当なメッセージ", false)]
bool function(); // 関数の宣言
----------

#第二引数をtrueにするぐらいなら削除するべきな気もするけど...

.

2007年9月7日金曜日

使っているFireFoxアドオン集

FireFoxを使い始めてそろそろ1年が経ちました!
使ってて便利だったアドオン(拡張機能?)を紹介します。

■All-in-Gestures
真っ先に入れたアドインがこれ。
マウスジェスチャーで新しいタブを開いたり
ページの[戻る]、[進む]が出来るようになります。

■IE Tab
FireFox上でIEのエンジンで表示してくれます。
IEでしか表示出来ないサイト等もこれがあれば
わざわざIEを起動しなくても大丈夫!

■FoxyProxy
Proxyサーバーを簡単に切り替えれるもの

■Greasemonkey
サイト毎の読み込み時にJavascriptを起動してくれるアドオン
これがあればかなりいろんなことが出来ます!

■Daily Dilvert
暇つぶしや気分転換に読んでます。
英語の勉強がてら入れたのですが、面白いのでお気に入りですw

↓はwebアプリ作成時に使っています。
■FireBug
Javascriptのデバッガ。

■WebDeveloper
webアプリ開発者向けのアドオンみたいですが。。
画面みながらスタイルシート更新できたり、
div タグの id 属性や class 属性を表示できます。

■Live HTTP Headers
HTTP headerを見ることが出来る
間違ったデータを送信していないか?
ちゃんとPOSTで送信しているか?
取得したデータは正しいかなど確認できます。


他にも便利なアドオンが多々あると思いますので探してみてください。

.

2007年9月6日木曜日

ファイルを読み取り専用にする(.NET)

ファイルを読み取り専用にする

-----
String path = new String("C:\hogehoge\hoge.txt");
System.IO.File.SetAttributes(path , System.IO.FileAttributes.ReadOnly);
-----

他にも
第二引数の System.IO.FileAttributes を変更すれば
Hidden で隠しファイル
Direcotry でフォルダ
に出来ます。

また、System.IO.FileInfo クラスのインスタンスを生成することよって
ファイルに対するより詳細な操作が可能となります。

.

2007年9月5日水曜日

環境変数の取得(.NET)

環境変数の取得方法

指定して取得する。
USERPROFILEの環境変数の値を取得する場合
----
String str = System.Environment.GetEnvironmentVariable(L"USERPROFILE");
----

全ての環境変数を取得する場合
----
IDictionary dic = System.Environment.GetEnvironmentVariables()
foreach (DictionaryEntry data in dic ) {
System.Console.WriteLine("{0} = {1}", data.Key, data.Value);
}
----

.

L Sharp .NET (Lisp.NET?)

Lispで .NetFrameWorkを使えるというもの
■L Sharp .NET
http://www.lsharp.org/

Lispの基礎もしらんけど
とりあえずやってみた。

TextBoxとButtonが1つあるFormを作成。
------
(reference "System.Windows.Forms")
(reference "System.Drawing")
(reference "System")

(using "System")
(using "System.Windows.Forms")
(using "System.Drawing")

(= textbox1 (new TextBox))
(call set_Text textbox1 "textbox")

(= button1 (new Button))
(call set_Location button1 (new Point 100 100))
(call set_Text button1 "Button")

(= form1 (new Form))
(call set_Text form1 "title")
(call add (call Controls form1) textbox1)
(call add (call Controls form1) button1)

; apprication start
(call EnableVisualStyles Application)
(call Run Application form1)
------

関数型言語。
どことなーく気持ち悪い...しっくりこない
もう少し遊んでみようかな~。
.

2007年8月31日金曜日

予稿と議事録の大切さ

ミーティング(会議)を行う際にとても大切なのが予稿と議事録です。

■予稿
ミーティングで何をするのかの進行予定(スケジュール)を記述したもの。
内容としては以下のものである。
・何を話し合う予定なのか?
・どれぐらいの時間がかかりそうなのか?
・何を得たいのか?

■議事録
ミーティングの内容を記述したもの。
・決定事項
・その決定事項に至った経緯
・その他、重要だと思われる発言

予稿を事前に配布する事で、
参加者全員がこのミーティングで何をするのかの意識統一になります。
また、ミーティングの準備をして参加できるようになり、
進行予定の代わりにもなるためミーティングがスムーズに進む事でしょう。
予定より遅れている場合にはどうしても決めておきたいことなどを
先に決めるなどの対処も行いやすくなります。

ミーティング中はしっかり議事録をとりましょう。
何を話しあったのか何が決まったのかを記録しておくと
後で助かる事間違いなしです。
記録が無かったがために、問題になったりする事もあります。

そして、議事録は必ず参加した人全員に配布するようにしましょう。
議事内容を共有するために議事録を記述しているので、配布しなければ意味がありません。
時間があればミーティングの最後に
議事録の内容を確認してもらうようにすれば良いですね。


こんなことが解消されると思います。
・ミーティング中の時間がダラダラして無駄だな~
・話が脱線しすぎてミーティングの内容が薄い
・そもそも何を議論する場であったのかを忘れてしまう
・残りの議題が解らない。
・そのため、後どれぐらいミーティングが続くのかが解らない。


予稿と議事録で有意義なミーティングを!
.

2007年8月30日木曜日

全角スペースを判断(shift-jis)

全角スペースを取り除きたくて
Shift-Jisの文字コードについて調べた。

・1バイト目が0x81~0x9F、0xE0~0xFFの場合がマルチバイト(全角)文字扱いとなる。
・全角スペースの文字コードは 0x81,0x40 (カンマで区切って1バイトづつ表記)

C言語でちょこっと書いてみた。
------

for (int i = 0; i <= strlen(str); ++i) {

// shift-jis 全角文字判定
if (((char)0x81 <= str[i] && str[i] <= (char)0x9F) ||
((char)0xE0 <= str[i] && str[i] <= (char)0xFF)) {

if ((str[i] == (char)0x81) && (str[i + 1] == (char)0x40)) {
// 全角スペースの時の処理
} else {
// 全角スペース以外の全角文字の処理
}
++i; // 全角文字なので1つ進めておく
}
}
------


forの条件式内で関数呼び出すのはよろしくないけど…
直感的に解りやすくするためです。
.

2007年8月27日月曜日

愚痴の考え方

さて、私事ですが最近思いっきり愚痴ったときに感じたことをちょっと。
愚痴を言うのはかっこ悪いとか結構思われているようですが
考え方によってはなかなかいいものです。
あげるとすれば

・ストレス発散
・自分のことを相手に知ってもらえる
・自分の道標になる

ストレス発散はまぁ、言えばすっきりするというのは当たり前ですね。

次に自分のことを相手に知ってもらえるです。
愚痴を言うのにはやはり背景をしゃべって自然と自分の秘密の立場を
伝えてることになるんですね。
つまり、腹を割って話してもらえてる、信用されてる、頼られていると
感じられることだってあるかもしれないです。
少なくとも言われたとき私は少し感じます。

最後の道標。
愚痴ってのは結局、周りの気に入らないこと(自分の気に入らないこと)
が愚痴となって出てくるわけです。
つまり、そこを改善すれば自分は幸せになる可能性があるということ。
自分と周りへのクレームですね。
また、愚痴ってのは、言えば言うほど出てくることで
普段自分では気づかない一面も見えてくることがあります。
つまり、問題点を明確にできるわけです。

当たり前のことだったかもしれないですが自分で気づいたこと。
頭の片隅におきながら愚痴ってみると案外面白いかもしれないです。

ただやっぱり、愚痴の言い過ぎは相手に疎まれることもあるので
ほどほどが一番ですな。

2007年8月25日土曜日

コーディング規約(C#)

C#の実装をしていて、統一的な変数や関数の命名方法がないかなと探してみた。

すぐに見つかりましたよ!
http://www.objectclub.jp/community/codingstandard/
さすがオブジェクト倶楽部ですね。

早速 PDF をダウンロードして参考にさせてもらっています。

.

Visual C# 2008 インストール

早速インストールしてみた。

1、以下のサイトより「Visual C# 2008 Express Edition Beta 2 日本語版」を選択し
setup.exeをダウンロードする。
http://www.microsoft.com/japan/msdn/vstudio/future/download.aspx

2、ダウンロードしたsetup.exeを実行

・・・

後はインストーラーの通りで
特に問題なくインストール完了しちゃいました。。。

VC2005の時はいろいろあったのに。今回はすんなりw

.

2007年8月16日木曜日

プロセスIDを取得する(.NET)

自分自身のプロセスのIDを取得する
Processクラスを使用すれば簡単に取得できた。

自分自身のプロセスIDの取得方法
---
using namespace System::Diagnostics;
Process^ process;
process = Process::GetCurrentProcess();//自分自身のプロセスを取得
int id(process->Id) // プロセスIdを取得する
---

他にもプロセスの一覧を取得する関数などもありました。
Process::GetProcess()

.

2007年8月7日火曜日

STL(for_eachでメンバ関数を使う)

STLの勉強中に詰まったところ。

#include <algorithm> に宣言されている for_each 関数を使用してみた。
for_each とは STL の iterator を使って全ての要素に対して処理を行なう関数です。
これがなかなかの曲者でして…

使用例
----
#include <algorithm>
#include <vector>
#include <cstdio>

void Print(int x) {
printf("[%d]\n", x);
}

int main() {
vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
for_each(v.begin(), v.end(), Print);
return 0;
}

----

これやと普通に使えるのですが、
メンバ関数を for_each で使おうと思うと…コンパイルエラー
↓これやとコンパイルエラー
----
#include <algorithm>
#include <vector>
#include <cstdio>

class hoge {
public:
hoge();
void Foo();
void Print(int x) { printf("[%d]\n", x); }
};

void hoge::Foo() {
std::vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::for_each(v.begin(), v.end(), &(this->Print));
}

int main() {
hoge h;
h.Foo();
return 0;
}

----

他いろいろ試してみたが…どれもダメやった。
std::for_each(v.begin(), v.end(), this->Print);
std::for_each(v.begin(), v.end(), hoge::Print);
std::for_each(v.begin(), v.end(), &(hoge::Print));

調べた結果
メンバ関数を使用するには
functional を include して
mem_fun と bind1st を使うといけるとのこと。
ソースを書き直してみたら見事コンパイル通った!
----
#include <algorithm>
#include <vector>
#include <cstdio>
#include <functional>

class hoge {
public:
hoge(){};
void Foo();
static void staticPrint(int x) { printf("[%d]\n", x); }
void Print(int x) { printf("[%d]\n", x); }
};

void hoge::Foo() {
std::vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::for_each(v.begin(), v.end(), std::bind1st(std::mem_fun(&hoge::Print), this));
std::for_each(v.begin(), v.end(), &hoge::staticPrint);
}

int main() {
hoge h;
h.Foo();
return 0;
}
----

こそっと static のメンバ関数も使ってみたけど
static のメンバ関数は普通に呼び出せる。

mem_fun とか bind1st を使う事を考えれば…
メンバ関数を使わない方がよさそう。

.

一行クラッシュ

1行のコードでIE6.0がクラッシュするコードです。
単なるブラクラですが、うん、華麗ですね。
ちなみにそのコードはこれ

<style>*{position:relative}</style><table><input></table>

IE7は落ちないそうな

2007年8月1日水曜日

Athlon64X2とCore2Duo

PCを新調しようかと思ったのでCPUについて調べたこと。
今のところAthlon64とCore2Duo(C2D略すw)は言われてるほど大差はなさそう。
Athlon 64 X2 4200+(2.2GHz,L2 512KB×2)とCore 2 Duo E6300(1.86GHz,L2 2MB)の
比較イベントがあったがAMD主催だし微妙・・・ (このときはもちろんAMDに軍配)
他サイトからの比較表(6000+とE6600の比較)
http://www.4gamer.net/news.php?url=/review/athlon_64_x2_6000/athlon_64_x2_6000.shtml
(こっちはAMD負けとる)
コストパフォーマンス的にはAthlonがいいらしい?(最新は違うみたい
だが、全体的にAMDのほうが能力は別にして安い
低発熱省電力はCore2DuoらしいがマザボがAMDのマザボに比べて
消費電力多いらしくどっこいどっこいになるらしい・・・
ゲームなどの3D処理系はAthlonがましらしい
エンコ、π処理はC2Dがいいらしい
複数処理?多重スレッド処理?多重起動だったかな?はデュアルコアは苦手らしく
とくにC2Dはもっさりするらしいがいまいち怪しい。
64BitはAthlonのほうが速いらしいが対応ソフト少なすぎて無視しても・・・
マザボを考えるとIntelのほうが安定性があるらしい
でも、そんなもの運のところが大きそう
ゲームするなら、好きなほう買ってメモリとグラボ強化したほうが効果的
・・・・
結論、好きなほう買っとけに収まりそう。
お金なければAMD、余裕あるしブランド好きはIntelかな・・・
個人的には安さからAMDに流れる予定。
昔からAMD好きだし、一応3Dはそれなりの
定評があり、昔からマルチコア設計をもくろんでのコア設計だったらしいので
まぁ、どちらにせよPen4やAthlonXPと比べると天と地なのは間違いない

USBキーボードの認識

USBキーボードを接続したところ半角全角キーが効かなかったので調べてみた。
どうやら106キーボードではなく101キーボードとして認識してるらしい。
キーボードのレジストリ値を変えれば難なく認識してくれた。
やる場合はバックアップ必須!へますると起動しなくなるよw

困ったときのレジストリ。
ファイル名指定実行の「regedit」レジストリエディタを実行し
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters\LayerDriver JPN
の値を101から106に変更
再起動で終了
ちなみに、今回はWIN2k
すべての実行は自己責任で

2007年7月26日木曜日

実行ファイルパス取得(WIN32)

これも紹介しとこ。
WinMainからやと実行ファイルパスを取得する方法が
よくわからんかって調べたのでメモ。
※gccでコンパイルして試しました。

まずは main 関数と同じように引数で渡ってこないかを考え
CmdLine の中身を調べて見たが・・・
CmdLine の中にはコマンドライン引数しか入っていなかったのでこれはだめ。

で、MSDNを探して見つけた。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_getmodulefilename.asp
GetModuleFileName 関数
これで実行ファイルの絶対パスが取得できる。

__argv というグローバル変数もあるみたいで
これやと実行ファイル名が取得できた。

以下に使い方を示す。
--------
#include <stdio.h>
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR CmdLine,
int CmdShow)
{
char buff[256] = {0};
printf("CmdLine = [%s]\n", CmdLine);
// この関数で buff に実行ファイルの絶対パスを取得できる。
GetModuleFileName(hInstance, buff, 256);
printf("[%s]\n",buff);

printf("[%s]\n",__argv[0]);
return 0;
}
--------

実行ファイルパスは取得できると何かと便利ですよね。
バックアップファイルの保存だの。
設定ファイルの読み込みだの。
使い方いろいろ!
変わった使い方してる人いないかな~?

.

2007年7月22日日曜日

vector class(メソッド)

いくつかメソッドを使ってみた

・assign
 vectorの内部メモリを全て解放して改めて確保しなおす。
 確保した各領域を引数で渡した値で初期化する関数
・begin
 iterator の先頭を返す
・end
 iterator の最後+1を返す
・push_back
 vectorの最後に値を追加する
・capacity
 内部で確保している領域を返す
・size
 現在使用している領域のサイズを返す(必ず size <= capacity となる)

msdnに詳しく書いてあります。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vcstdlib/html/vclrfvectormembers.asp


例:を示します。コメントは内部の値を表示
---------
#include <vector>
#include <cstdio>

int main(void) {
std::vector v(1); //v = {未確定}

v.push_back(10); // v = {未確定, 10}
v.push_back(20); // v = {未確定, 10, 20}

for (std::vector::iterator it = v.begin(); it != v.end(); ++it) {
printf("[%d]", *it); // 未確定 10 20 と順に表示される。
}

v.size(); // 3 を取得

return 0;
}

---------

こんな具合です。
上のソースコードコンパイルしてないから動かないかもしれません。

MSDNみれば大体の使い方がわかりますからメソッドはこんなもんで
次はアルゴリズムいってみよっと。
.

2007年7月19日木曜日

便利なwebサイト集

僕が普段使っている便利なサイトを紹介っと

はてなブックマーク
 あっ!と思ったサイトはとりあえずブックマーク!
 仕事中に見つけて家で読む時などにかなり重宝してます。
 
checkpad
 自分用のチェックリストを作成できる。
 メールでも登録できるためTODOリストとして活用。
 また毎朝通知するようにして毎日やらないといけない事を忘れないようにしてます。
 
R*PAD
 スケジュール管理ツール
 日付でスケジュールを登録し、その日付にメールが飛んでくる。
 期限が決まっているものはとりあえず登録してます。
 旅行の前日にスケジュール入れといて忘れ物確認とかにも使えます

iGoogle
 めちゃ便利。
 ガジェットも豊富やし自作も出来る。
 myポータルサイトみたいにして使っています
 GoogleReaderやGmailも便利サイトですね。

英辞郎 on the web
 和英、英和はここを活用
 簡単な例文が多々表示されるので関数名や変数名つけるときに大活躍

aguse
 URLからその際との情報を調査してくれる。
 このURL大丈夫かな?って思った時は
 とりあえずこのサイトで調査!


普段使ってる便利サイトでした。
これでちょこっと仕事の効率アップかな?
.

2007年7月18日水曜日

vector classを触ってみた。

vector class
動的に配列の大きさを変更できるクラス。
内部的では連続したメモリ領域を確保している

n = vectorのサイズ
・ランダムアクセスが可能。
・値の取得は O(1) の時間で取得できる。
・値の追加は O(1) なので速い、ただし vector のサイズを超える追加はメモリを確保し直すため遅くなる。
・値の挿入は 最大O(n) かかる。追加同様 vector のサイズを超える場合は遅くなる。
・値の削除は 最大O(n) かかる。

値の追加によって、メモリの再確保が起こる可能性があるため
あらかじめ大きさが解っている場合に使えそう。
値の取得も速いから使い勝手がよさそう。

とにかく使ってみる。
------------------------
#include <vector>
#include <cstdio>

int main (void) {
const int size = 10;
std::vector v(size); // 大きさ size の vector を作成
int i = 0;

// 値の設定
for (i = 0; i < size; ++i) {
v[i] = i;
}

// 値を出力
for (i = 0; i < size; ++i) {
printf("%d\n", v[i]);
}

}
------------------------

…と書いてみたが普通の配列やん!!!
いろいろメソッドもあるみたいやから
普通の配列よりは使い勝手がよいね。

2007年7月17日火曜日

STLをはじめる前に

忘れないうちにメモメモ。

STL(Standard Template Library)
まずこいつを学ぶにあたっての基礎知識をぶち込んだ

C言語には無かった、 template という概念
正直良くわからない。
ただ、今のところ型を不定にしてクラスや関数を宣言できると覚えておくことにする。

template関数

template<typename T>
T add(T a, T b) {
return a + b;
};

T という任意の型の和を計算して返す関数
関数の宣言時は型を意識していない
どの型が来ても +演算子が定義されていれば使えます

C言語やと下のように二つの関数を宣言しないといけなかった
-----------
int add_int(int a, int b) {
return a + b;
}

double add_double(double a, double b) {
return a + b;
}
-----------

それを一つの関数として宣言する事ができた。
なかなか優秀な奴や。

といってもプログラマが楽になるだけで、
コンパイル時に型にあわせて複数の関数を宣言しているので
バイナリサイズはほとんど変わらないみたい
使い方を間違うと大幅にサイズが増える事もあるようです

関数を複数定義しなくてよいのでソースコードの見た目もすっきりしますね。
(目が慣れるまでは気持悪いんですけど…)

実際にtemplate関数を使ってみよう
----
#include <cstdio>

template<typename T>
T add(T a, T b) {
return a + b;
};

int main(void) {
printf("%d\n", add((int)1, (int)3));
printf("%lf\n", add((double)1.5, (double)2.666));
return 0;
}
----
明示的にint型とdouble型にキャストして渡してみた
ちゃんとコンパイル通って実行できるはずです。

まだまだ便利さが良くわかりませんが…
次回は実際にvector classでも使ってみますかな。
.

2007年7月12日木曜日

CPRMに悩まされる

知り合いに保存したDVDが見れないといわれていってきた日のこと。
話を聞くと焼き等に問題もなく、何が問題かといろいろ調べてみたところ
CPRMというデジタルコンテンツ保護技術なるものがかかっていた。
これを再生するにはDVDドライブはもちろん、PCの場合も対応ソフトで
再生する必要がある。フリーで再生できるソフトは今のところ見つけられない。
あればご一報を。ちなみにWinDVDにはVUでCPRM Packがあるらしいが、
対応してるかは運次第

しかし、最近規制が厳しすぎだと思うふしがありますな~。
いくらデジタルは劣化しないからって、メディアは劣化するのに。
緩和しないとTVから人が離れていきそう。
http://www.intervideo.co.jp/download/updata/wd/wd5_HTCWD5.html
http://e-words.jp/w/CPRM.html

2007年7月11日水曜日

使っているフリーソフト

様々なフリーソフトがありますが
自分が良く使っているものでも書いておこうかなと
10コ紹介っと。どれも便利ですよお勧め!

FireFox
 毎日使うブラウザ日々のネットサーフィンはこれがないと!
 拡張機能が沢山あって自分なりにカスタマイズできるのが便利
 ただし…使い慣れるまで時間がかかります
 僕は2ヶ月ほど試行錯誤しましたからね

FreeMind
 マインドマップを作成するツール
 使うのにJavaをインストールしないといけませんが、
 自分のアイデアを出すのにはすごい便利!

IdeaFragment2
 マインドマップとは異なり発散してアイデアを出すのに凄い向いてる。
 FreeMindと用途別で使い分けてます。

bluewind
 コマンド式のランチャーです。
 初めはアイコンが出るタイプのを使っていたんやけど
 マウス使わんでいいからこっちの方が便利です

TeraTermPro
 Linuxへの接続はこれ使ってます。

FFFTP
 FTPを使ってのファイル転送はこれしかない!?
 非常に便利です。

Paint.NET
 マイクロソフトのサポートを得て開発されているそうです。
 フリーでここまで出来るのかーと驚きましたわ
 画像編集、作成時は必ず使ってます

ProcessExplorer
 Windows標準のタスクマネージャーと同じような機能を持ったソフト
 タスクマネージャーの基本的な機能は持ちつつ
 関連してるDLLとかも表示できてめちゃ便利
 仕事でも重宝してます

JUDE/Community
 UML図を各ツール、たまにIdeaFlagmentのようにアイデア出しにも使います
 操作性、デザイン共に大好きです。

WinShot
 パソコン画面のスクリーンショットを撮るのに凄い便利
 ウィンドウ単位での撮影や自分で範囲を選択して撮影が出来ます


他にもこんな便利なフリーソフトあるよーってのあれば教えてください!
.

2007年7月5日木曜日

オブジェクト指向でなぜつくるのか

オブジェクト指向でなぜつくるのか

ずっとC言語で構造化プログラミングしかしてなかった僕が
この本を読んでオブジェクト指向を勉強しました。

プログラムの歴史から書いてあり
なぜオブジェクト思考という考え方にいきついたのか?
という内容からはじまりUMLの基礎まで書いてありました。

かなりわかりやすく書いてあったので
これからオブジェクト指向を学んでいくという人にはお勧めです。

.

2007年7月3日火曜日

VC2005で作成したバイナリファイルのエラー

VC2005で作成したバイナリファイルを実行すると以下のエラーが出た。

「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。」

へ?
.NETFrameWork2.0はインストールしても同じエラーが出る。
なんで??
調べてみると、どうやらライブラリを動的にリンクかけてるっぽい。
Visual C++ ライブラリのランタイム コンポーネントをインストールする必要があるみたい
ということで取得してインストールするとばっちし動いた!

ダウンロード先
http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=ja

アンマネージコードやと
コンパイルオプションの「C/C++」「コード生成」で
/MD オプションを /MT に変更すると大丈夫っぽいけど

マネージコードやと解らんかった。
なんか方法ないもんやろか?

.

2007年7月2日月曜日

テストの異常系について

ちょうど自分が異常系の定義について考えていた時に
「悪態のプログラマ」にこんな投稿がありました
異常系とは何であるか考えよう

自分の中での異常系の定義とは
・警告のダイアログを表示する
・エラーメッセージを表示する
のことやと決め付けてた。

自己定義が原因でプロジェクト内で意見が食い違っていたことが多々あり、
これじゃまずい!と感じて、異常系の定義をプロジェクト内で話あって認識を合わせた
このことによってテストの異常系を記述する際に悩まなくなったし、
テストシナリオにも統一性がとれて読みやすくなった。

そんな後で「悪態のプログラマ」でのこの記事を見つけて
異常系の解釈の違いがあるのは仕方ないことなんやとホッとしました。
それに、テストを想定して異常系の処理をあらかじめ決めておくことは
すごい重要なんですね。
ここは今まであやふやにしてきたところもあったので
これを気にしっかり決めていくようにしよう!

.

2007年6月20日水曜日

ウィンドウの生成

ウィンドウを作る手順。
1、WNDCLASSEX構造体にデータを設定する
2、RegisterClassEx関数でクラスを登録する
3、CreateWindowEx関数でウィンドウを生成

CreateWindowEx関数でRegisterClassEx関数で登録した
WNDCLASSEX構造体の情報をもとにウィンドウを生成します

CreateWindowEx関数
http://msdn2.microsoft.com/en-us/library/aa930455.aspx

HWND CreateWindowEx( //戻り値 ウィンドウハンドル
DWORD dwExStyle, // ウィンドウの拡張スタイル
LPCTSTR lpClassName, // 生成するウィンドウクラスの名前
LPCTSTR lpWindowName, // ウィンドウの名前(タイトルバーに表示されます)
DWORD dwStyle, // ウィンドウスタイル
int x, // ウィンドウを表示する X座標
int y, // ウィンドウを表示する Y座標
int nWidth, // ウィンドウの幅
int nHeight, // ウィンドウの高さ
HWND hWndParent, // 親ウィンドウハンドル
HMENU hMenu, // メニューハンドル
HINSTANCE hInstance, // 実行exeのインスタンスハンドル
LPVOID lpParam // 生成時のメッセージで渡す引数
);

CreateWindowEx関数のリンク先に
拡張スタイルとスタイルの渡すべき値(Define定義されているもの)の一覧が
載っていますのでそれを参考にしてスタイルを指定します

次回簡単な例でものっけよ

仮想関数(virtual)

テストプログラム作成したので貼り付けとこっと
C++のメンバメソッドにvirtual付けたときと付けない時の動作確認
C言語には無い概念…これめっちゃ便利やね。
一応関数ポインタを使えばC言語でも作れるんやけどめんどい!

--------------

#include

class Base {
public:
Base(){};
virtual ~Base(){};
void print();
virtual void vprint();
};

void Base::print()
{
printf("Base printf \n");
}
void Base::vprint()
{
printf("Base virtual printf \n");
}

class Foo :public Base {
public:
Foo(){};
virtual ~Foo(){};
void print();
virtual void vprint();
};

void Foo::print()
{
printf("Foo printf \n");
}
void Foo::vprint()
{
printf("Foo virtual printf \n");
}

int main (void) {
Foo* instanceFoo = new Foo();
Base* instanceBase = (Base*)instanceFoo;
printf("instance Foo\n");
instanceFoo->print();
instanceFoo->vprint();
printf("instance Base\n");
instanceBase->print();
instanceBase->vprint();
return 0;
}

--------------

2007年6月14日木曜日

ウィンドウクラスの登録

ウィンドウを作る手順。
1、WNDCLASSEX構造体にデータを設定する
2、RegisterClassEx関数でクラスを登録する
3、CreateWindowEx関数でウィンドウを生成

今回は
2、RegisterClassEx関数でクラスを登録する
です

RegisterClassEx関数について
http://msdn2.microsoft.com/en-us/library/ms633587.aspx
ATOM RegisterClassEx(
CONST WNDCLASSEX *lpwcx // ウィンドウクラスのポインタ
);
RegisterClassExに登録する前に WNDCLASSEX の各値を設定しておかないと
失敗する。戻り値に0(ゼロ)が戻ってきた時が失敗した時である
その場合は WNDCLASSEX で設定したウィンドウを生成することが出来ない

RegisterClassExで登録した WNDCLASSEX のデータは
アプリケーションを終了するまで削除されない

よって一度登録しておくと、登録したWNDCLASSEXのデータで
何度もウィンドウを生成することができる

完全なメモになってしまったや
まっいいかw

2007年6月13日水曜日

実行ファイルパス取得(C言語)

過去の投稿で.NETでの実行ファイルパスの取得方法を記述しました
http://mzs184.blogspot.com/2007/02/blog-post_21.html
今回はC言語での実行ファイルパスを取得する方法を紹介します。

といってもいたって単純です
main 関数の引数として渡ってきているのそれを取り出すだけです
----
int main (int argc, char* argv[]);
----
argv[0] に実行ファイルパス(絶対パス)が格納されています

main関数の args, argv については別のサイトで詳しく調べて下さい
面倒だーって人は以下のソースをコンパイルして出来上がった exe に
ファイルをドロップしたりコマンドプロンプトで引数をつけて実行してみてください
いろいろわかるでしょう。
-----
#include <stdio.h>

int main (int argc, char* argv[]) {
int i = 0;
for (i = 0; i < argc;++i) {
printf("%s\n", argv[i]);
}
printf("press any key");
getchar();
return (1);
}

----

今日はwinapiはちょっと休憩^^;

2007年6月10日日曜日

ウィンドウを生成するのに必要な構造体(WNDCLASSEX)

ウィンドウを作る手順。
1、WNDCLASSEX構造体にデータを設定する
2、RegisterClassEx関数でクラスを登録する
3、CreateWindowEx関数でウィンドウを生成
こんだけw

今回は「1、WNDCLASSEX構造体にデータを設定する」の構造体について知る
MSDNを参照(http://msdn2.microsoft.com/en-us/library/ms633577.aspx)

英語で書いてあるのを訳せば終わりなんやけどね~。
ちょこっと記述してみた。
typedef struct {
UINT cbSize; //クラスのサイズを設定WNDCLASSとを識別するために必要
UINT style; // ウィンドウのスタイルを設定
WNDPROC lpfnWndProc; //メッセージを処理する関数を登録する
int cbClsExtra; // この構造体に付加する領域のbyteサイズ
int cbWndExtra; // ウィンドウのインスタンスに付加する領域のbyteサイズ
HINSTANCE hInstance; // 実行ファイルのインスタンスハンドル
HICON hIcon; // ウィンドウのアイコンのハンドル
HCURSOR hCursor; // ウィンドウ内のマウスカーソルのハンドル
HBRUSH hbrBackground; // ウィンドウ領域の背景色を塗りつぶすブラシのハンドル
LPCTSTR lpszMenuName; // ウィンドウに表示するメニューの名前
LPCTSTR lpszClassName; // ウィンドクラスの名前、生成する時に使う
HICON hIconSm; // 小さいアイコン
} WNDCLASSEX

ん~ハンドルが沢山あるな…
おいおい詳しくわかってくるやろ

2007年6月8日金曜日

WinMainのWINAPIというおまじないについて

前回の投稿(http://mzs184.blogspot.com/2007/06/mainwinmain.html)で

int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow);

のWINAPIってなんなんやろ~って疑問として残ってましたが、
windef.h内で以下のように定義されていました。

#define WINAPI __stdcall

__stdcallってなんやねん!って調べてたら。
関数の呼び出し規約とかいうものらしい

ここがすごいわかりやすかったので紹介
http://arton.no-ip.info/collabo/backyard/?StdDeclCDecl
-----紹介したサイトの抜粋です
__stdcallは、WIN32 APIの呼び出し規約で、スタックの解放を呼ばれた側が行い(したがって、varargは使用不可)、__cdeclは、スタックの解放を呼ぶ側が行う(したがって、varargを使用可能)。
----
実際にアセンブリコードとの混合モードで解説してあるので
すんごいわかりやすかった!

WINAPIというおまじないはこれで解決っと

2007年6月5日火曜日

mainじゃなくてWinMainなんやね!

仕事で.NET2.0を使ってるんですが、
もうちょと詳しくウィンドウアプリケーションを知っておこうと
C言語にてwindowを作ってみる。
もちろんコンパイラはMinGWのgccコンパイラです。
過去の日記でインストールした時にwinapi関連のライブラリも
インストールできているのでそのまま使います。

で…ネットを検索しまくって
こんなヘッダーをインクルードして。
#include <windows.h>

こんな関数がエントリーポイントになっていると知る。
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow);

そして、意味不明な大文字の型が…
WINAPI 良くわかりません。とりあえずおまじないと思って書いておく
HINSTANCE:void*をtypedefしたやつやった。
     「インスタンスハンドル」やねんて
PSTR:strっていうぐらいやから文字列の型「wchar*」or「char*」をtypedefしたもの
   UNICODEを使えるか使えないかで場合分けしてある

んで各引数の説明
HINSTANCE hInstance
:実行したプログラムを識別するためのもの

HINSTANCE hPrevInstance
:すんごい昔に多重起動を確認するために使われていた今はNULLしか入ってこない

PSTR szCmdLine
:コマンドラインで実行した時の引数、今までも同じものあったからこれは大丈夫かな

int iCmdShow
:ウィンドウの初期表示方法です ウィンドウを生成する時に使うそうな…


以下のコードを書いて簡単に呼び出してみた
メッセージボックスが表示されておしまい。
-------
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MessageBox (NULL, TEXT("text"), TEXT("caption"), MB_OK);
return 0;
}

-------

TEXT()はマクロでUNICODE対応の場合は文字列の先頭に「L」を付ける

例TEXT("text")
 ⇒UNICODE対応 ⇒ L"text"
 ⇒UNICODE非対応 ⇒ "text"

まだウィンドウは作成できず…

2007年6月4日月曜日

ゴミ箱のパス

ゴミ箱のファイルパスを探してこられるかたが多いようなので
調べてみた。

ごみ箱は以下フォルダ内にありました
C:\RECYCLER

但しシステムファイルを表示するように設定していないと目視で確認できません。

WindowsXP Homeの環境です
システムファイルの表示方法は
「ツール」「フォルダオプション」の表示タブで
「保護されたオペレーティングシステムファイルを表示しない(推奨)」と
「すべてのファイルとフォルダを表示する」の二つにチェックを入れる
これでシステムのファイルかつ隠しフォルダであるC:\RECYCLER
を目で確認できると思います。

2007年6月1日金曜日

フォルダをダブルクリックすると検索ウィンドウが開くように…

フォルダオプションを弄ってたら
フォルダをダブルクリックすると検索ウィンドウが開くように…
右クリックから「開く」ではちゃんとフォルダを開いてくれるのに!!

ってことで調べてみた。
レジストリを弄らないと直らないみたいorz
レジストリを触ると何が起こるかわからないので自己責任のもとで触ってください。

「ファイル名を指定して実行」 から regedit を起動
・HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell
・(既定) を右クリック「修正」でデータに none と記入して「OK」をクリックします

同じようにドライバをダブルクリックで検索ウィンドウが開く場合は
フォルダの場合と同じように
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shellの(既定)のデータを none に修正します

2007年5月30日水曜日

ハンガリアン記法

自分用の記法を作っとこうと
調べてたらこんなの発見
■間違ったコードは間違って見えるようにする
http://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B

ハンガリアン記法 = 型がわかるだけ
型がわかったからどないやねん!
コンパイル時に型が違ったらErrorかWarningを出してくれるから意味ないやん
って思ってたのにこの考え方が覆されましたよ
引数にin や out を付けるぐらいでしたが、
使われている意味を付けるってのはええ考え方やわ
参考にしよっと。

ちょーっと長い記事ですが読む価値あり!

2007年5月28日月曜日

void型のサイズは?

久々の投稿!

新人教育の際に調べたことを残しておきます。

新人さんがvoidポインタに加算…
VCやと見事にコンパイルエラーw
んで何で?って聞かれたから以下のようなコードを記述して
「void型はサイズが不定やからエラーが出るんやで…」といいながら
gccでコンパイルしてみてん。
----
void* a = 0;
a++;
----
そしたら、コンパイル通るやん!!!
新人さんもビックリやけど、僕はもっとビックリやわ!

何でや何でや?ってとりあえず
printf("%d",sizeof(void));
と打ち込んでgccでコンパイルして実行。
表示された値は「1」 いち?
gccやとvoid型のサイズは 1 とし認識されているようですわ。

※ちなみにVC6.0やとサイズ不定ってエラーが出ます。

C++では型が厳しくなってるからg++でもコンパイルエラーでます。

2007年2月28日水曜日

C言語のbool型

C言語にbool型って無いや!と最近知りました。

気が付いたらtureやらfalseってタイプしてる。
でどうせやったら定義してまえってことで考えてみた

typedef char bool;
#define true 1
#define false 0

typedef enum{
false = 0,
true = 1,
} bool;

2種類考えてみたが果たしてどちらが良いのやろうか?
個人的にはenumで定義したほうが感覚的にしっくりくるんですよね~。

2007年2月21日水曜日

実行ファイルのパスを取得

何度も調べたから残しておく

System.Windows.Forms.Applicationクラスの
ExecutablePathプロパティで実行ファイルパスを取得できる。

ファイルパスやディレクトリパスを操作する場合によく使うクラス。
System.IO.Pathクラスでディレクトリ名やファイル名を取得できる。
System.IO.FileクラスやSystem.IO.Directoryクラスも便利

.

2007年2月17日土曜日

ウィンドウの種類

モーダル:
 一度開くと他のウィンドウを操作できないウィンドウ
 他のウィンドウで値の変更をされた時に動作がおかしくなる場合などに使用する。
 確認ダイアログとかに使われる。

モーダレス:
 一度開いても他のウィンドウの操作が出来るウィンドウ
 常時開いていても動作に支障がない時にしようできる。
.

2007年2月3日土曜日

makefileについて(その2)

久々にmakefileを触ったのでメモ。

makeのオプション
makefileの中で別ディレクトリのmakefileを実行させたい時に使用したオプションです。

-C directory:
カレントディレクトリをdirectoryとしてmakeを実行する

-f filename:
filenameのファイルをmakefileとして実行する

.

2007年2月2日金曜日

変わるのは自分だけ

人を育てるとか変えてやる!とよく言う人がいますが、
人は外部からは変わりません。
自分自身が行動する、もしくは考え方を改めないと
変わることは出来ないのです。

でも、他人を変えるきっかけを作ってあげることは出来ると思っています。
「~してみたら?」など相手に行動を促すような言葉などがきっかけになったりします。
新人研修など人に何かを教える時は、「自分がその人を育ててやる!」と考えているとなかなかうまくいきません。
その人自身が、学びたくなるようなきっかけを作ってあげてはどうでしょう?
勉強する環境を用意してあげることも良いきっかけになります。

相手にあったきっかけを作ってあげる事が出来れば、
よく学んで、自分から成長してくれると信じています。

人を変えるのではなく人が変わるきっかけを作って
あげることが出来るようになりたいですね。
.

2007年1月29日月曜日

あいさつをしない会社員

あいさつをしない会社員

この記事に書いてあるように、ほんと"あいさつ"しない人多いです。
あいさつは一番身近で、気軽に出来るコミュニケーションやと考えているのですよ
あいさつをするのとしないのとでは、その人に対する印象も変わってきますよ?

初めて入った職場で「おはようございます」って言って、
返事が無い人とはちょっと話をしにくいですね。
返事をしてくれる人とは会話をしていなくても良い印象を抱きます。

小さい頃にしっかりあいさつしなさい!と叱られたものです。
しかし、社会人になってあいさつをしない人を見たときはあれ?って
僕の親世代の人でもあいさつしない人が多々います。
最近の学生はあいさつをしない人が多いですから…
親が親なら子も子かと…感じますね。

「おはようございます」皆さんはしっかり言えてますか?
今からでも遅くありません、「おはようございます」と言ってみましょう!
.

2007年1月28日日曜日

若者はなぜ3年で辞めるのか?

若者はなぜ3年で辞めるのか?

なぜ、若者が転職したくなるようになったのか?
なぜ、会社がやりたいことを明確に持っている人を採用するようになったのか?
年功序列?成果物主義?なーんてことが書いてありました。

個人的には就職する前に読んでおきたかった一冊でした。

是非これから就職活動を
行なおうと思っている人、行なう人
は一読する価値はあると思います。

2007年1月24日水曜日

すごい会議

すごい会議

---商品の説明を抜粋---
・会議での話し方、聞き方が変わる!
・問題の解決のしかたが変わる!
・意志決定の方法が明確になる!
・各自がなにをするのかがはっきりわかるようになる!
------

よく脱線する会議もこれを読めばましになる?
出来れば会議に参加する人全員に読んで欲しいものです。

一度に全てを実践すると挫折してしまうかも?
全員に読んでもらうのは現実的ではない。
書いてあることで自分一人でも実践してみよう!

プロジェクトでも同じように、会議でも「目的を参加者全員が統一すること」これが一番重要だと感じた

.

2007年1月23日火曜日

PowerPoint

久々に触って思い出した昔の失敗

学生の頃の失敗:
・文字が多かった
・絵が全く無かった
・内容が複雑
・1ページ中の内容が多い
・文字が小さい
・伝えたいことがまとまっていない

こうやって書き出してみると、
昔はどえらいものを作ってたんやな…

下の2点気をつければ、上記の失敗をふせげそう
・1ページ1ページで伝えたい内容をシンプルにする。
・読む人のことを考える。

.

2007年1月21日日曜日

makefileについて(その1)

コメント:
「#」から始まる行は行末までがコメントとなる。

変数:
cc = gcc #ccという変数にgccという値を代入
$(cc) #ccという変数の値を取得(gccが得られる)

#こんな書き方もある。(C言語のポインタみたい?)
a=cc
$($(a)) #gccが得られる

.

2007年1月20日土曜日

MinGWインストール

Windowsでフリーのコンパイラツール
MinGW」のインストールを行なったのでメモを残しておく。

ダウンロードのページからインストールexeを取得。
http://www.mingw.org/download.shtml
ProposedのMinGW-5.0.2.exe(2007.01.20現在)をダウンロードして実行する。

環境変数のPathに"MinGWをインストールしたフォルダ\bin"を追加する。
デフォルトのフォルダ(C:\MInGW)にインストールした場合は
環境変数のPathの最後に ";C:\MinGW\bin"を追加する。

インストールできたか確認
コマンドプロンプトを開いて「gcc -v」を実行する。
gccのバージョン情報が表示されていれば完了!

---
MinGWの公式サイト:http://www.mingw.org/


次はmakefileの勉強やな。
.

2007年1月15日月曜日

解らなかったことが解らない

入社して、自分が解らなかったことが、
今考えてみると、思い出せない。
何が解らなかったのかが解らなくなっている。

自分が成長したという証かもしれない。
しかし、自分の中で昔解らなかったことが、
今では当たり前になっているかもしれない。

相手に教える立場に立って考えた時に、
相手が解らなくて困っていても、
自分が当たり前だと思っていることについては
相手も解って当たり前だと考えてしまう。

今自分が悩んでいることなどは、
どこかにまとめておいた方が
後々教える立場に立った時に約に立つ。

こういったものがドキュメントとして
プロジェクトで残っていくのではないか?

.

2007年1月13日土曜日

unsinedの減算

C言語にて嵌ってしまったこと。

unsigned int a = 3;
unsigned int b = 1;
unsigned int c = 0;

c = a - b;

てなソースを書いてしまい…
c の値が意味不明な数値に!

原因は、unsigned なのに減算を行ってしまっていた事でした。
signed の場合は最上位1ビットが符号をあらわしている。
そのため、マイナス符号をつけた b は b 値の"2の補数"となる。
その結果、 a - b の期待結果としては 2 という値が欲しいが、
-b 値は 1 の2の補数となっているため
a - b の値は(4294967293)となってしまいました。

unsigned の減算には気をつけましょう。
.

2007年1月12日金曜日

綺麗なソースを書きたい!

@IT「キミのコードが汚い理由」
をざ~っと読んでみた。

日々綺麗なソースを書きたいな~とは思ってても、
時間的な理由で「あ~汚くなってもうた」ってその場で思うことってあるもんね。
そんな時はとりあえずコメント書いて、次回修正時に直すようにしてます。


リスト1とリスト2のソースコードがあったけど、
個人的には
リスト2は if 文の中がゴタゴタしているので嫌い。
リスト1の方が感覚的に解りやすいし読みやすい!

リスト2の良いところはローカル変数を利用して、
games[1]などを意味のある変数に置き換えていた。
表示するメッセージなども共通部分は共通化して使いまわしている。
効率的なコードだとリスト2の方が良いと感じた。

最終的に思ったことは、
コメントがあったほうが良いねってこと…

.

2007年1月11日木曜日

デバッグとテスト

デバッグとは、
プログラムが動くか?を確認すること

テストとは、
プログラムが動かない?を確認すること

2007年1月7日日曜日

はじめまして

日々勉強した事や、
失敗した事などを書き溜めていこうかなと。

ラベル