2010年06月04日

閑話休題その3 変数の名前、どのように名づけますか?

プログラムを書いているときに、いつも悩むことがあります。
それは変数の名前です。
ひと目でどのような変数なのかわかり、短く、センスよく名づけたいものです。
int a = 0;
スコープがものすごく限定的で、for文などの一時変数でない限り
上記のような変数は論外です。
これがクラスのメンバ変数などだったら、そのプログラムの保守は
限りなく大変なものになることが予想されます。

変数の名前は、特にプログラムの動作に影響しないので、
各プログラマによって様々な手法があると思います。
前置きとして、ここに書かれていることはあくまで私が変数をつけるときの考えであり、
これが正しいというわけではありません。


私が変数の名前を決めるときに、根底として頭によぎるのは次のことです。
●クラスのメンバ変数(フィールド)
●グローバル変数
  長さにこだわらず、なるべく意味の通る名前にする

●ローカル変数
  できるだけ短い名前にし、できれば意味の通る名前にする

外部に公開する場合や、他のクラスと連携するような、多岐にスコープが渡る場合、
長さを気にせず、とにかく意味がわかるような名前にします。
こうすることで、ドキュメントを見ずとも、雰囲気でプログラムがわかるようになります。
グローバル変数の場合には、嫌味なほど長くてもかまわないと思っています。
そもそもグローバル変数は悪であり(と私は思っています)、多用を防ぐためでもあります。

逆に、ローカル変数など、スコープが限定される場合、特に長さにはこだわらず、
むしろ短くすることを良しとします。
これは外部に出す必要がなく、その関数内で完結するため、意味を持たせることにあまり意味を持たないからです。
ローカル変数を長くすることは、必然としてプログラムが長くなってしまい冗長となってしまいます。


大文字や小文字の取り扱いにも、色々な方法があります。
代表的なものは次のとおりです。
●アンダースコア記法
  単語ごとに区切り文字としてアンダースコアを用いるものです。
  (例)is_action_state
  
●ラクダ記法
  単語ごとにその先頭文字を大文字にするものです。
  (例)IsActionState
  
●ラクダ記法(第1単語小文字)
  ラクダ記法の第1単語を小文字にするものです。
  主に動詞が小文字になります。
  (例)isActionState
これらは、特にどれが良いというものはないので、個人的な好みになります。
但し、プログラムに一貫してその記法を突き通すというのが原則です。

また、関数の名前と記法を変えることにより、
それが関数であるか変数であるかを判断しやすくなる方法があります。
例えば、関数名にラクダ記法(第1単語小文字)を用い、
変数に、アンダースコア記法を用いるといった感じです。


さて、記法のひとつとしてハンガリアン記法というものがあります。
これは、接頭文字、もしくは接尾文字に特殊な意味を持たせるというものです。
実は、Win32APIもこのハンガリアン記法に則って記述されています。

具体的には、接頭文字に変数の型を表現するというものです。
次のようなものがあります。
型     文字    例     
BOOLbまたはfbFlag
BYTEbybyCount
LONGnnNumber
DWORDdwdwSize
floatffTax
doubleddPrice
ポインタpまたはlppPointer
ハンドルhhWnd
こうすることにより、その変数がどのような型であるのか、瞬時で判断できます。

これはあくまで一例であり、変数の型を接頭文字にすることが
すなわちハンガリアン記法ではありません。
重要なのは、接頭文字に特殊な意味を持たせるというところにあります。

この部分を強調したのは、この記法にはある変数の定義が変更されたときに、
リアルの型と、記述上での型が不一致になりうる可能性があるデメリットがあるからです。
実際にマイクロソフトでは、後発の.NETFrameforkでは、この記法が廃止されています。

あくまで、型を示すものに使用するのではなく、特殊な状況が生まれる場合に使用することに
そのメリットが生まれます。
例えば、その変数がメンバであるのかローカルであるのか、ポインタであるのか、配列であるのかなど、
また、その変数が税金なのか、貯金金額なのか、利率なのかなど、
誤用しそうなところに、接頭文字を持たせることでその効果が発揮されます。
ラベル:ふわ猫

2010年05月10日

SoftBank VGA端末に画像を対応する時

携帯サイトで画像を使用する時、大抵の場合は現在多くの機種に使われている横画面解像度240ピクセルを標準に使用することが多いと思います。

最近の機種で横解像度が240ピクセル以上であっても自動で拡大してくれる機種が多いので(画質は少々粗くなりますが)ほぼ問題ないのですが、SoftBankのVGA端末など、自動で拡大してくれない機種もあるので、これらの機種に対応する場合はいくつかのやり方があります。

基本的なやり方としてはphpなどで振り分ける方法などがありますが、おそらく一番簡単な方法としては画像を直接パーセントでサイズを指定してしまう方法でしょう。例えば:

<img src="image"  width="240">

となっている所を

<img src="image"  width="100%">

と指定してやるのです。

元の画像が240ピクセルでした場合、横解像度が240より大きい端末で見ると画像が拡大され粗く表示されますが、手軽に横いっぱいに表示したい場合はこのやり方が良いでしょう。

画像が240より小さい場合は、240を標準に計算するとよいでしょう。

<img src="image"  width="120">

となっている所を

<img src="image"  width="50%">

と指定してやるのです。

画像サイズが中途半端だった場合、小数点以下のパーセント指定も大抵の機種でできますが、しなかった場合とも画像の見栄えはほぼ変わらないように見えます。
ラベル:G
posted by ラクサス at 10:38| Comment(0) | TrackBack(0) | web | このブログの読者になる | 更新情報をチェックする

2010年04月27日

au携帯サイトとpタグの使用

携帯電話用サイトを制作する上で配慮すべきポイントの一つが国内主要3キャリア(Docomo, au, Softbank)に対応するサイトを作る事、というのがあります。

やり方としてはphp等を使いUser-Agentを判別して振りわける方法が主流ですが、時にはphpが使えない場合や、一つのファイルで3キャリアに対応したい場合もあります。

一つのhtmlファイルで3キャリア全てに対応する場合には、いくつか気をつけなくてはならない所があります。
そのひとつが<p>タグ使用による見栄えの違いです。

<p>タグを使用するのは主に背景色や文字色、文字位置などのスタイルの設定をする時に使用する場合があります。

全ての機種では確認できていませんが、auの携帯機種ではhtmlファイルに<p>タグを使用した場合、Docomoの機種と違い<p>でまとめた文の前後が改行されないことがあります。

大手の携帯サイトでもこの仕様の違いに対応していない所があるのでほとんどのユーザーは気にしていないと思われます。

それでも全3キャリアで同じようにサイトを表示したい場合は、<p>タグの代わりに<div>タグと<br />を使用する手段があります。

<div>タグを使用しても<p>タグと同じように改行されるのかと思いましたが、こちらはDocomoの機種で確認した所、前後に間が開かず、<p>タグが違うように表示されたauの機種でも同じように表示される場合があります。

このように変更することによって新たな問題が出てくるかもしれませんが、とりあえずの策として考えておくのも良いかもしれません。
ラベル:G
posted by ラクサス at 10:55| Comment(0) | TrackBack(0) | web | このブログの読者になる | 更新情報をチェックする

2010年01月04日

DNA鎖をコドン変換する簡単コマンド

仕事とあまり関係ないのですが、バクテリア等の実験で得られたDNA鎖をコドン表という表に従ってペプチドの配列に変換したいことがあります。
多分よくやられる変換だと思うのですが、そのようなプログラムが
google検索ですぐに見つからなかったので自分で書いてみました。
中身はあまり洗練されていませんが、よかったらお使いください。
使用、再配布自由です。

gcc -o dna2codon dna2codon.c

でコンパイルし、

./dna2codon ATCGGGCTTACC

でペプチド配列が表示されます。
また、途中にストップコドンがある場合はそこでカットするようにしています。
大量の配列を変換する場合は、シェルスクリプトの中でこれを使ってください。

ちなみにコドン表はここの表を使いました。
RNAバージョンもここのテーブルを使って同じように作れると思います。

///////////////////////////////////////////////////////////////////
// @create 2009.12.6
// @author t.mimori @ RAXUS Co. Ltd.
// @name dna2codon
// @stdin DNA鎖
//
// @stdout codon配列
// @brief
// DNA鎖をcodon配列に変換するプログラム
// MAX_CODON × 3個以内に限る
//
///////////////////////////////////////////////////////////////////

#define MAX_CODON 2000
//#define DEBUG

#include <stdio.h>
#include <ctype.h> //tolower()で必要

typedef enum {inv = -1, t = 0, c, a, g} tcag;

tcag baseNum(char base)
{
switch ((int) base)
{
case 't':
return t;
case 'c':
return c;
case 'a':
return a;
case 'g':
return g;
default:
return inv;
}
return inv;
}

int getCodonNum(const char *bases)
{
//計算の順番に注意
return baseNum(bases[2])
+ baseNum(bases[1]) * 4 * 4
+ baseNum(bases[0]) * 4;
}

char getCodonNameFromNum(int codonNum)
{
if (codonNum <= getCodonNum("ttc")) return 'F';
if (codonNum <= getCodonNum("ctg")) return 'L';
if (codonNum <= getCodonNum("ata")) return 'I';
if (codonNum <= getCodonNum("atg")) return 'M'; //開始
if (codonNum <= getCodonNum("gtg")) return 'V';
if (codonNum <= getCodonNum("tcg")) return 'S';
if (codonNum <= getCodonNum("ccg")) return 'P';
if (codonNum <= getCodonNum("acg")) return 'T';
if (codonNum <= getCodonNum("gcg")) return 'A';
if (codonNum <= getCodonNum("tac")) return 'Y';
if (codonNum <= getCodonNum("tag")) return '$'; //終了codon(出力されない)
if (codonNum <= getCodonNum("cac")) return 'H';
if (codonNum <= getCodonNum("cag")) return 'Q';
if (codonNum <= getCodonNum("aac")) return 'N';
if (codonNum <= getCodonNum("aag")) return 'K';
if (codonNum <= getCodonNum("gac")) return 'D';
if (codonNum <= getCodonNum("gag")) return 'E';
if (codonNum <= getCodonNum("tgc")) return 'C';
if (codonNum <= getCodonNum("tga")) return '$';
if (codonNum <= getCodonNum("tgg")) return 'W';
if (codonNum <= getCodonNum("cgg")) return 'R';
if (codonNum <= getCodonNum("agc")) return 'S';
if (codonNum <= getCodonNum("agg")) return 'R';
if (codonNum <= getCodonNum("ggg")) return 'G';
return '-'; //Error
}

int output(const char *codons)
{
printf("%s", codons);
return 0;
}

int main(int argc, char *argv[])
{
//引数の数をチェック
if (argc != 2)
{
return -1;
}

char *dna = argv[1];

int i, j, k;
i = j = k = 0;
char codons[MAX_CODON] = ""; //出力codon配列
char unitCodon[4] = ""; //1codonとなる3つの塩基

while (dna[i])
{

#ifdef DEBUG
printf("dna[%d]: %c\n", i, dna[i]);
#endif
char base = tolower(dna[i]);
if (baseNum(base) < 0)
{
return output(codons);
}
else
{
unitCodon[j] = base;
j++;
}

if (j == 3)
{
#ifdef DEBUG
printf("unitCodon: %s\n", unitCodon);
#endif
char codon = getCodonNameFromNum(getCodonNum(unitCodon));
if (codon == '$') return output(codons);
else codons[k] = codon;
#ifdef DEBUG
printf("codons: %s\n", codons);
#endif
k++;
j = 0;
}

i++;


return output(codons);
}


ラベル:leopard
posted by ラクサス at 09:32| Comment(1) | TrackBack(0) | 【プログラミング】C編 | このブログの読者になる | 更新情報をチェックする

2009年12月22日

phpでdocomo携帯のguidを自動取得

スマートフォン以外のモバイル環境では、まだCookieを使えないことが多く、
webページのセッションを維持するにはCookieに頼らない手法が必要です。
その代わり、契約会社がユーザーに割り振っている固有IDを使うことで、
「簡単ログイン」のようにパスワード入力を省略した認証を作ることができます。
こちらに各キャリアのUID情報をまとめた詳しい表があります。

IDには数種類あり、送信に確認が必要なIDもありますが、
ページを移る度に確認が必要なのはさすがにメンドウです。
幸いdocomo, au, softbank各社とも送信確認不要のIDが用意されています。
これらはphpでは

・docomo
$_SERVER['HTTP_X_DCMGUID']
・au
$_SERVER['HTTP_X_UP_SUBNO']
・softbank
$_SERVER['HTTP_X_JPHONE_UID']

で取得することができます。
※ただしユーザーがIDの送信をOFFに設定していると取得できません。


ところでdocomoの場合、urlの中に必ず"guid=ON"というパラメーターが
入っていないとUIDが送信されないようになっています。
そこで、認証機能が必要なページは全て"guid=ON"を付けることになります。
しかし"guid=ON"でないようなアクセスがある場合もありうるので、
その場合に自動的にリロードするようなphpプログラムを書きました。
ただしリロードするので基本的にPOST変数を受けるページでは使えません。

require_once 'HTTP.php'; //urlのリダイレクトに必要

function reloadWithGuid()
{
if ($_GET['guid'] != 'ON')
{
$uri = setQuery('guid', 'ON');
HTTP::redirect($uri);
}
}

この中で、setQuery()という関数は、urlパラメーターのGET変数に
値をセットする自前の関数です(使用、再配布自由です)。
  1. 書き換えたい変数が?var=, &var=のどちらの形でも使える
  2. すでに同じ名前の変数があれば上書きする
  3. 他の変数に影響を与えないようにする
という条件が満たされるようにしています。

/*
 * @create 09.12.16
 * @author mimori @ RAXUS.Co.Ltd.
 * @param $name 変数名
 * @param $value
 * @param $uri 指定なしなら現在のURIを使う
 * @return 新しいuri
 * @brief uriのget値の$nameを$valueにする。元のuriのvalidationは考慮せず。
 */

function setQuery($name, $value, $uri = "")
{
//$uri指定がなかった場合現在のuriを使う
if ($uri == "") $uri = $_SERVER['REQUEST_URI'];

//ベース部とクエリー部に分け、各name=valueを取り出す
list ($uri_base, $uri_query) = explode('?', $uri);
$params = explode('&', $uri_query);

//空白でなくかつ$nameと一致していない変数だけ残す
$new_params = array();
foreach ($params as $param)
{
list($n, $v) = explode('=', $param);
if ($n && $n != $name) $new_params[] = $param;

//新しい$name=$valueのセット
$new_params[] = $name. '='. $value;

//uriに戻す
return $uri_base. '?'. implode('&', $new_params);
}

セッションが使えない場合、GET値で値を維持したいことが多いので
意外と使い出があると思います。

*urlエンコードはされません。
*正規表現をフル活用すればより短く速くなる気もします。




ラベル:leopard
posted by ラクサス at 08:32| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2009年10月19日

iPhoneのプロビジョニング更新

自分で作ったiPhoneのアプリを実機で動かすには、Appleのデベロッパーに登録し、証明書とプロビジョニング プロファイルをインストールする必要があります。
登録のやり方は

http://www.codeanimato.com/blog/archives/2008/10/iphone-2.html

のブログなどが分かりやすかったです。

証明書の方は1年間有効ですが、プロビジョニングの期限は3ヶ月で切れてしまいます。
3ヶ月も経つとやり方も忘れてしまうもので色々試行錯誤してしまいましたが、
結局以下のようにカンタンにできました。

1.iPhone Developer ProgramにログインしProgram Portalに入ります。
2.メニューで「Provisioning」を選び「Renew」ボタンを押すと、ダウンロードできるようになります。

Provisioning.jpg

3.ダウンロードしたファイルをダブルクリックしてインストール完了です。




ラベル:leopard
posted by ラクサス at 16:30| Comment(0) | TrackBack(0) | 【モバイル開発】iPhone | このブログの読者になる | 更新情報をチェックする

2009年10月08日

『らくらくスキャン』ASPサービス開始

携帯アプリ『らくらくスキャン』は、携帯電話から複数のバーコードを読み込み、一括購入、一括買取をサポートする携帯電話用のアプリで、ASPによるアプリの自動配信によりECサイトへの導入がさらに簡単になりました。
APIキーを取得するだけで、既存のECサイトやネットスーバーなどとの接続も簡単にできます。アプリの配信や管理は当社で行いますので、すぐに導入が可能です。

image22591.jpg

1ヶ月間無料でバーコードアプリをご使用できます!

検証用のAPIライセンスキー発行しておりますので、バーコードアプリをすぐにご利用いただけます。アプリを実際に使用していただき、導入するECサイトへの検証などにご利用ください。

APIライセンスキーの発行はこちらから↓

RAXUS API SERVICE


ASPサービスを利用した「ゲームソフト買取アプリ」デモアプリを体験いただけます。詳しくは「ASPを利用したデモ」ページをご覧ください。


image23391.jpg


製品に関するお問い合わせ
Mail:info@raxus.co.jp
TEL:048-851-5620
担当:長倉
ラベル:raxus
posted by ラクサス at 10:03| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2009年09月25日

ラクサスHPリニューアル日記:黄金比の使用

そろそろ弊社のホームページを新しくしようということで、部長から

「まずはページ上部のグローバルナビゲーションから新しく作成するように」

との指令を受けました。

考慮する点は2つ:

  • ナビゲーションの構造はそのままに
  • 現在使用している色もそのまま使う事

いくつかのイメージは頭の中にありましたが、
角丸のアイコンを作ればよいのではないかと考えまずこのような物を作成しました。

raxusbutton95news.jpgserviceicon2.jpgproductsicon4.jpg
company3.jpgrecruitmenticon3.jpgblogicon3.jpg

これらを見た部長からの指摘:

「バランスが悪い。繋げてみては?」

この指摘を受け新しく作り直したのがこちらのセットになります。

newssquare107.jpgservicesquare (2).jpgproductssquare.jpg
companysquare (2).jpgrecruitsquare (2).jpgblogsquare107.jpg

これらは採用され8月下旬現在使用されています。

次にページ選択時に必要な、色が変わったバージョンをもう1セット作成するのが次の段階でした。

取り掛かると同時に、これらアイコンの少しぼてぼてした感じを少しすっきりさせたかったのでどうしたらよいのか悩んでいた所、どこかで読んだ黄金比の話を思い出し、試してみることにしました。

黄金比とはもっともバランスが良く見えるとされている比で、近似値は 1:1.618 の比からなっています。

黄金比を基に作成した新しいアイコンがこれらです。

news.jpgservice.jpgproducts.jpg
company.jpgrecruit.jpgblog.jpg

newswhite.jpgservicewhite.jpgproductswhite.jpg
companywhite.jpgrecruitwhite.jpgblogwhite.jpg

アイコンの縦幅は30ピクセルになっているのですが(外枠を除けば28ピクセル)、文字と上下余白のサイズが約 1:1.6 の比になるように作成しました(上余白:文字:下余白 の比が約 1 : 1.6 : 1 。ただ1ピクセル単位での作業が限界でしたので厳密には少しずれていると思いますが)。

黄金比は自分みたいな素人でもバランスの良いデザインが作成できるので、何かのサイズを決めるのに迷ったときにおススメです。

自分としてはこれらのアイコンは会心の出来だったのですが、8月現在使用されていません。それは部長からの指摘で没になってしまったからです。

「文字が見えない。やり直し」

これからのラクサスのホームページの変化ぶりにご期待ください。
ラベル:G
posted by ラクサス at 14:03| Comment(0) | TrackBack(0) | web | このブログの読者になる | 更新情報をチェックする

2009年09月24日

第0x07回 データの保存〜ファイルアクセス〜

C言語の標準関数に定義されているファイルアクセスですが、
Win32APIでも、関数が定義されています。
どちらの関数を使っても、結局同一のWindowsネイティブの関数が呼び出されるので、
結果は同じですが、Win32APIの関数では、細かいオプション指定ができます。
まず、ざっとファイルアクセスに関する関数を見ていきましょう。


●ファイルオープン
HANDLE CreateFile(
LPCTSTR lpFileName, // ファイル名
DWORD dwDesiredAccess, // アクセスモード
DWORD dwShareMode, // 共有モード
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子
DWORD dwCreationDisposition, // 作成方法
DWORD dwFlagsAndAttributes, // ファイル属性
HANDLE hTemplateFile // テンプレートファイルのハンドル
);

戻り値:ファイルのハンドル
(失敗時には、INVALID_HANDLE_VALUEが返る)
この関数は、ファイルのハンドルをオープンする関数です。
ファイルをロードする、ファイルを作成するなど、全ての処理は、
まずこの関数を呼び出し、ファイルハンドルをオープンしなければなりません。

dwDesiredAccessでは、オープンされるハンドルを用いて、どのようなアクセスをするか指定します。
アクセスモードとして、次の値が定義されています。
0             : デバイス属性のみアクセス
GENERIC_READ : 読み取りアクセス
GENERIC_WRITE : 書き込みアクセス

dwShareModeでは、オープンするファイルの共有方法を指定します。
この値を指定しない場合には、このファイルはロックされ、他のアプリケーションからアクセスできなくなります。
共有方法として、次の値が定義されています。
FILE_SHARE_READ   : ファイルの読み取りを許可する
FILE_SHARE_WRITE : ファイルの書き込みを許可する
FILE_SHARE_DELETE : ファイルの削除を許可する(Windows NT/2000以降)

dwCreationDispositionでは、ファイルの作成方法を指定します。
ファイルの作成方法として、次の値が定義されています。
CREATE_NEW     : 新しいファイルを作成します。指定したファイルが既に存在する場合、この関数は失敗します。
CREATE_ALWAYS : 新しいファイルを作成します。指定したファイルが既に存在する場合、上書きされます。
OPEN_EXISTING : ファイルを開きます。指定したファイルが存在しない場合、この関数は失敗します。
OPEN_ALWAYS : ファイルを開きます。指定したファイルが存在しない場合、CREATE_NEWと仮定し、新たに作成します。

dwFlagsAndAttributesでは、ファイルの属性を指定します。
属性として、次の値が定義されています。
FILE_ATTRIBUTE_ARCHIVE    : アーカイブ属性
FILE_ATTRIBUTE_ENCRYPTED : ファイル暗号化属性
FILE_ATTRIBUTE_HIDDEN : 隠しファイル属性
FILE_ATTRIBUTE_NORMAL : 通常ファイル属性
FILE_ATTRIBUTE_READONLY : 読み取り専用属性


●ファイルクローズ
BOOL CloseHandle( 
HANDLE hObject // オブジェクトのハンドル
);

戻り値:(成功時)0以外の値が返る (失敗時)0が返る
CreateFile()関数でオープンしたハンドルの使用が終了した時点で、
この関数を使い、ハンドルをクローズしなければなりません。
クローズしなかったハンドルは、リソースリークとして残り、そのハンドルの処理は未定義となります。


●データ読み取り
BOOL ReadFile(
HANDLE hFile, // ファイルのハンドル
LPVOID lpBuffer, // データバッファ
DWORD nNumberOfBytesToRead, // 読み取り対象のバイト数
LPDWORD lpNumberOfBytesRead, // 読み取ったバイト数
LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ
);

戻り値:(成功時)0以外の値が返る (失敗時)0が返る

ファイルハンドルを使用し、ファイルのデータを読み取ります。
lpBufferは、受け取るデータのバッファになります。
nNumberOfBytesToReadは、何バイトデータを読み取るかを指定します。
lpNumberOfBytesReadは、読み取ったデータのサイズが返されます。
nNumberOfBytesToReadより小さい値の場合、何らかのエラーが発生した可能性があります。


●データ書き込み
BOOL WriteFile(
HANDLE hFile, // ファイルのハンドル
LPCVOID lpBuffer, // データバッファ
DWORD nNumberOfBytesToWrite, // 書き込み対象のバイト数
LPDWORD lpNumberOfBytesWritten, // 書き込んだバイト数
LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ
);

戻り値:(成功時)0以外の値が返る (失敗時)0が返る

ファイルハンドルを使用し、ファイルにデータを書き込みます。
lpBufferは、書き込むデータのバッファになります。
以降は、基本的に読み取りと同じように指定します。


●ファイルポインタ移動
DWORD SetFilePointer(
HANDLE hFile, // ファイルハンドル
LONG lDistance, // 下位オフセット
PLONG pDistanceHigh, // 上位オフセットの変数
DWORD dwMoveMethod // 移動開始点
);

戻り値:成功時には、新しいファイルポインタの位置を示す
符号なし数値の下位32ビットが返ります。
(失敗時には、INVALID_SET_FILE_POINTERが返ります)
ファイルの読み書きするポイントを移動します。
dwMoveMethodは、移動開始点をします。
値は、次のように定義されています。
FILE_BEGIN   : ファイルの先頭を移動開始点にします
FILE_CURRENT : 現在のファイルポイントを移動開始点にします
FILE_END : ファイルの終端を移動開始点にします



さて、これらを踏まえて、前回までの環境設定の保存先をファイルに変更してみます。
サンプルは次のとおりになります。


(サンプル)
sample007.zip


以前までの処理を変更し、CConfigクラスに環境設定の処理を実装しました。
メンバ変数として、環境設定の内容を保持し、クラスの生成時、破棄時に、
それぞれ、ファイルのロード、セーブを行っています。
ファイルに保存することにより、環境設定の内容がアプリケーションを終了した状態でも
保持されることになります。
ラベル:ふわ猫

2009年08月22日

世界が注目!日本で新たな経済システム

公益資本主義ってご存知でしょうか?
アメリカ発の金融危機「サブプライム・ローン問題」は、市場万能・株主至上の金融資本主義の欠陥を露呈しました。米国が世界に誇る直接金融、資本市場による自由かつ競合的な資金調達を間接金融より優位にしてきた世界の終焉がささやかれている中で、いま世界で注目されている「新しい資本主義 (原丈人著 PHP新書)」 で語られている経済システムです。一読の価値があります。
今まで、日本企業は米国企業の会計や企業評価の手法を鵜呑みをやり方を止めて(ほぼ押付けられた)、米国のシステムを上回るようなものを作ればいいと考えます。
そもそも、米国の「会杜は株主のもの(松下幸之助のような人格者が要れば別ですが)」「時価総額の大きさを追うような経営」は、企業の資産を軽くするための産業である人材派遣業を提供する産業は発展しますが、本来の価値を生む産業はその間にむしぱまれ、資本主義が破綻することにもなりかねません。産業を通じて雇用、サービスをつくり、そこに働く人や社会の人を幸せにするための新しい資本主義のルールが今、世界でも必要になっているのです。
これからは、企業の目的は、株主にとっての価値を上げること、すなわち株価を上げることではなく、社会に対する貢献を行うことで、社会貢献の度合いによって自然と株価が上昇し、長期的な売買で運営する新しい株式市場が必要です。

弊社も社会に貢献するサービスを提供する目指している企業です。
これからは、全ての企業人、経営者、会社員に、社会を思う「公益」の自覚がなくては
共倒れが待っているということを認識する必要があると考えています。

ラベル:明鏡止水
posted by ラクサス at 12:53| Comment(0) | TrackBack(0) | 徒然 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。