2012年02月08日

iPhoneアプリ「インフルエンザ予防」を公開しました

「インフルエンザ予防」は、iPhone、iPod 対応のアプリです。
温度と相対湿度の値から絶対湿度を計算し、季節性インフルエンザウイルスの環境による感染レベルをグラフで表示します。

インフルエンザの感染を予防するために、適切な湿度になるようにアプリを活用してください。

mzl.wfmgpakb.320x480-75.jpg icon_114.png App Store はこちら


posted by ラクサス at 00:58| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2011年10月21日

産業交流展2011に出展します

ラクサスは、産業交流展2011に出展します。

クラウドシステムを自社内で安全に運用できる、
セキュアプライベークラウドのアプライアンス製品を展示します。

簡単に設置でき、No Limitで大容量の添付ファイル付きの
メール送受信やNo Limitで大容量のクラウドストレージを
利用できます。

ブースは「情報64」です。

産業交流展2011
10月26日(水)・27日(木)・28日(金)
東京ビックサイト 東5・6ホール

是非お越しください。

posted by ラクサス at 16:23| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2011年01月25日

ラクサス公式スマートフォンサイトオープン!

ラクサスホームページの公式携帯サイトにつづき、公式スマートフォンサイトをオープンしました。

http://www.raxus.co.jp/s/

スマートフォン向けに最適化されているため、タッチ操作で快適に各種情報がご覧いただけます。
posted by ラクサス at 00:49| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2011年01月21日

ラクサス公式携帯サイトオープン!

ラクサスホームページの公式携帯サイトをオープンしました。

http://www.raxus.co.jp/m/

ケータイから各種情報がご覧いただけます。


posted by ラクサス at 23:07| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2010年10月07日

プレミアムクーポンサイト「茨城おでかけナビ」をオープンしました

プレミアムクーポンサイト「茨城おでかけナビ」をオープンしました。

http://ibaraki.odekakenavi.com

odekakenavi.gif QR.GIF

茨城のおトクな情報満載を満載しております。パソコン、携帯からアクセスできますのでぜひご利用ください。

 

posted by ラクサス at 17:25| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2010年09月17日

第0x08回 画像の表示〜グラフィカルなアプリケーションのために〜

昨今のPCはスペックが上がり、OSやアプリケーションも
よりグラフィカルに、より美しい見た目になってきました。
よって、これからアプリケーションを作成する上で、
「見た目」も重要なファクターとなります。

その「見た目」を構成する上で重要になるのが、画像の表示です。
今回から数回に分けて、Windows上で画像を表示する方法を考えていきたいと思います。

Windowsで画像を表示する方法として、次の方法が考えられます。
@Win32APIの関数を使い、表示する(DDBとDIBなど)
ADirectXを使用し、表示する(DirectGraphicsなど)
BOpenGLを使用し、表示する
このブログでは、@Aを中心に解説していきたいと思っています。
Bは、完全に3Dとしての方法になってしまうので、省略します。

今回は、まず@のWin32APIを用いた方法を解説していきたいと思います。
Win32APIを用いてビットマップを表示するとき、
2つのタイプに描画の方法が分かれます。
ひとつはDDBで、もうひとつがDIBです。

DDB(DeviceDependentBitmap)とは、デバイス依存ビットマップと呼ばれ、
現在表示しているデバイス(=デバイスコンテキスト、HDC)に依存する形で
ビットマップを描画するものです。
DIB(DeviceIndependentBitmap)とは、デバイス独立ビットマップと呼ばれ、
DDBに対し、デバイスに依存することなくビットマップを描画します。

それぞれのメリット、デメリットは次のようになります。
〔DDB〕
 ●メリット
  現在のデバイスと親和性が高く(Compatible)、
  多くの場合、ビデオメモリ上に作成されるので
  描画が非常に高速
 ●デメリット
  CPUから遠い、ビデオメモリ上にビットマップが
  置かれるため、自前でのピクセル演算が低速(画像解析など)

〔DIB〕
 ●メリット
  メインメモリ上に確保されるため、
  自前でのピクセル演算が高速
 ●デメリット
  メインメモリ上に確保されるため、
  描画が低速


今回は、@のDDBの方法を使い画像を表示してみます。
早速サンプルを見てみましょう。


(サンプル:プロジェクトファイル)
sample008.zip

(サンプル:ソースファイルのみ)
WinMain008.cpp


まず、ビットマップのファイルをロードします。
その際に、ハンドル越しに操作を行うため、
ビットマップハンドルの変数を宣言します。
// ビットマップハンドル
HANDLE g_hBitmap = NULL;

ビットマップファイルをロードするには、下の関数を使用します。
// ビットマップをロードする
g_hBitmap = LoadImage( NULL , TEXT( "bitmap.bmp" ) , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE | LR_DEFAULTSIZE );
この関数は、第6引数のフラグによって、ロード元をファイルにすることができ、
フラグによっては、実行ファイルに関連付けられているリソースをロードすることもできます。

ハンドルは、その使用を終えた時点で解放してあげる必要があります。
// ビットマップを解放する
CloseHandle( g_hBitmap );

ここまでで、ビットマップのロードが完了しました。
ここからは、実際にデバイスコンテキストにビットマップを割り当て
画面のデバイスコンテキストに転送することにより表示を行います。

まず、画面と互換性のあるデバイスコンテキストを作成し、
そのデバイスコンテキストに先ほどロードしたビットマップを関連付けます。
// 互換デバイスコンテキスト作成
hMemDC = CreateCompatibleDC( hDC );
// 互換デバイスコンテキストにビットマップを設定する
SelectObject( hMemDC , g_hBitmap );

デバイスコンテキスト間の転送は下の関数を使います。
// ビットマップを表示
BitBlt( hDC , 0 , 0 , 800 , 600 , hMemDC , 0 , 0 , SRCCOPY );
BitBltの引数は次のとおりになります。
第1引数:転送先デバイスコンテキスト
第2引数:転送先左上座標X
第3引数:転送先左上座標Y
第4引数:転送サイズ幅
第5引数:転送サイズ高さ
第6引数:転送元デバイスコンテキスト
第7引数:転送元左上座標X
第8引数:転送元左上座標Y
第9引数:転送方法


以上で、DDBによるビットマップを表示することができました。
次回は、ビットマップのファイル構造について触れてみたいと思います。
タグ:ふわ猫

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編 | このブログの読者になる | 更新情報をチェックする