2009年06月16日

ゲーム数学5(円と線分の当たり判定)

円と線分との当たり判定

ソースを見ていたら、昔作った円と線分との当たり判定の関数が出てきましたので公開してみます。

内容としましては、半径rの円の中心(x, y)(sx1, sy1)(sx2, sy2)を結ぶ線分との当たり判定です。
考え方としては円の中心から線分へ垂直に交わる直線を想定し、その交点を求めます。
その交点は円と直線との最短距離になりますのでその点から円の中心の距離と半径の長さを比べて当たり判定しています。



  /**
   * 円と線分の当たり判定
   */
  public void judgeHitScopeLine(int sx1, int sy1, int sx2, int sy2) {
      int dx, dy;
      
      // 線分の端と端の距離をx,y軸個別に求めます
      int sx = sx2 - sx1;
      int sy = sy2 - sy1;
      
      // x軸方向に位相差が存在する場合は円の中心から線分へ垂直に交わる直線と線分の交点を求めます。
      if(sx != 0) dx = ((y-sy1)*sx*sy + x*sx*sx - sx1*sy*sy) / (sx*sx + sy*sy);
      // 位相差がない場合はsx1=sx2になっているので線分のx方向の位相差はない
      else dx = sx1;
      
      // y軸方向の位相差が存在する場合は円の中心から線分へ垂直に交わる直線と線分の交点を求めます。
      if(sy != 0) dy = ((x-sx1)*sx*sy + y*sy*sy - sy1*sx*sx) / (sy*sy +sx*sx);
      // 位相差がない場合はsy1=sy2になっているので線分のy方向の位相差はない
      else dy = sy1;
      
      // 当たり判定する必要があるか
      if(isjudgeHitScopeLine(sx1, sy1, sx2, sy2)) {
          // 円の中心から求めた交点の距離と半径を比べて当たり判定する
          if((x-dx)*(x-dx)+(y-dy)*(y-dy) < r*r) return true; 
      }
      return false;
  }
  /**
   * 当たり判定するかどうかの判定
   */
  private boolean isjudgeHitScopeLine(int sx1, int sy1, int sx2, int sy2) {
      // 線分の端から円と接触している可能性があるかどうか判定する
      if(x <= (Math.max(sx1, sx2) + r) && x >= (Math.min(sx1, sx2) - r)) {
          if(y <= (Math.max(sy1, sy2) + r) && y >= (Math.min(sy1, sy2) - r)) return true;
      }
      return false;
  }

タグ:六本木店長
posted by ラクサス at 11:53| Comment(0) | TrackBack(0) | 技術情報 | このブログの読者になる | 更新情報をチェックする

2009年06月15日

閑話休題その1 国際対応プログラミング〜UNICODE〜

2009年現在、UNICODEというものが徐々に浸透しつつあります。
WindowsでもWindows2000から完全にUNICODEに対応し、
WindowsVistaやWindows7で、標準的な位置づけになっています。
これからプログラミングを行う上で、UNICODEを考慮することは
必須条件であり、特に日本語というコンピュータで扱いにくい言語を
取り扱うためには、避けられないものです。


それでは、文字列がどのように処理されているのか
見ていくことにしましょう。

C言語では文字列を次のように取り扱います。

char str[256] = "ABC日本語もオッケー";


char型は1バイトの整数です。
これを1文字として、その配列で基本的には表現されています。
ANSI(ASCII)(※1)では、'A'〜'Z'をそれぞれ0x41〜0x5A、
'a'〜'z'を0x61〜0x7Aに割り当てています。(ShiftJISでも同様です)
全角文字や特殊文字などは、2バイトを使用して表現されています。
ShiftJIS(※2)では、1バイト目に0x81〜0x0x9Fと0xE0〜0xEFまで使われ、
2バイト目に0x40〜0xFC(0x7F除く)までが割り当てられています。

はじめ、コンピュータ発祥の英語圏などではアルファベット26文字と
数字やいくつかの記号しかなく、1バイト(256種類)を
1つの文字として割り当てられていたのですが、
のちに日本語などを表現する上で、漢字など膨大にある文字を1バイトで
表現する手段がなく、2バイトに拡張していったという経緯があります。

上記str配列には1バイト文字と2バイト文字の混在状態になっています。
この混在している状態というのが厄介で、例えば

str[4] = 'D'; // 文字化けする


このようにしてしまうと、たちまち文字化けしてしまいます。
アメリカ製のプログラムで、日本語が使用できないのは、
このあたりの考慮がされていないことが、原因のひとつです。

このようなタイプの文字コードの代表は次のとおりです。

ANSI(ASCII)アメリカ圏で古くから使われている
ShiftJIS  日本語圏のWindowsで主に使われている
EUC    日本語圏のUNIX(Linux)で主に使われている
その他、国ごとに文字コードが存在する




脱線しますが、文字化けの原因としてもうひとつに
WindowsとUNIX(Linux)間での改行文字の持ち方の違いがあります。

UNIX(Linux)
"1行目です\n2行目です"

Windows
"1行目です\r\n2行目です"


Windowsでは、\rすなわち、キャリッジリターンが含まれます。
UNIX(Linux)では、キャリッジリターンは不要です。
この違いにより、WindowsのファイルをLinuxなどに転送した場合
文字化けすることがあります。


さて、国ごとに文字コードが違い、取り扱い方も違うので
複数の言語に対応することが困難になったことから
策定されたのがUNICODEという規格です。
基本的な考え方として、全ての文字を2バイト(※3)として扱い、
文字に使用できるコードを多くしたという点です。

このようなタイプの文字コードの代表は次のとおりです。

UTF-8   LinuxやMac OS Xなどの標準文字コード
UTF-16 Windowsなどで多く使われている



C言語で表現すると次のようになります。

wchar_t str[256] = L"ABC日本語もオッケー";


wchar_t型は2バイト整数です。
この2バイト整数の配列として文字列を表現しています。
これにより、さきほどの問題が解決されることになります。

str[4] = L'D'; // 文字化けしない


ちなみにLは2バイト文字列を指定するためのプレフィックスです。

また、C標準関数なども、2バイト文字列に対応するものを
使用しなくてはなりません。
例えば、次のようになります。

(非UNICODE)
char str[256] = "文字列の表示です";
printf( "%s" , str );

(UNICODE)
wchar_t str[256] = L"文字列の表示です";
wprintf( L"%s" , str );



プログラムを行う上で、以上のことを考慮すれば、
国際的に対応したプログラムを作成することが容易となります。
変数の持ち方や、関数の変更など、
既存のプログラムを修正するのは非常に困難なため、
新たに作成するプログラムは、はじめからこれらのことを
考慮したほうが、スムーズに保守することができます。



(※1)
ANSI(American National Standards Institute)
米国規格協会
アメリカにおける工業分野の標準規格

(※2)
JIS(Japanese Industrial Standards)
日本工業規格
日本における工業分野の標準規格

ANSIもJISもその国の標準規格で、
国際的な規格としてはISOなどがある。

(※3)
しかし、それでも足りず、Unicode 2.0以降では
さらなる拡張が行われている。



(参考資料)
C言語による最新アルゴリズム事典(奥村晴彦著)
技術評論社

タグ:ふわ猫

2009年06月09日

tail -f でログファイルを出力するときに、文字コードを変換する方法

linuxなどで、OSの文字コードとログファイルの文字コードが異なるため、「tail -f test.log」 でログを出力すると文字化けする場合は、以下のコマンドで解決します。


tail -f test.log | nkf -u -e (EUCに変換)
※OSがEUCで、ファイルがUTF-8などの場合

tail -f test.log | nkf -u -w
 (UTF-8に変換)
※OSがUTF-8で、ファイルがEUCなどの場合

ポイントはnkfの「-u」オプションです。
-u : 出力時に、バッファリングしない。
タグ:どなん
posted by ラクサス at 19:36| Comment(0) | TrackBack(0) | 技術情報 | このブログの読者になる | 更新情報をチェックする

2009年06月08日

第2回 開発環境を整えよう

前回の終わりに今回は実際のプログラミングの説明を初めて行くと言いましたが、その前に一つ重要な事がありましたね。

Javaを動かしたり開発するための環境作りです。

Javaを使ってのプログラム開発には、Java開発キット(JDK=Java Development Kit)が必要です。Javaでプログラムを開発するために必要なものと開発されたものを実行するものは厳密に言えば別のものなのですが、このツールには、Javaで作られたプログラムを実行するために必要な環境、Java実行環境(JRE = Java Runtime Environment)も含まれています。

2009年6月現在、こちらのページから無料でダウンロードできます

Java SE ダウンロード(日本語ページ)

http://java.sun.com/javase/ja/6/download.html


同じJDKでも様々な種類が見られますが、これは開発したプログラムが実際に使われる用途であったり、開発に必要なオプションや追加機能によって分けられています。Javaで作ったプログラムを別の場所から持って来て自分のマシンで実行したいだけならJREを個別にダウンロードする事も可能ですが、今回は実際にプログラムも書いて行きたいので、JDKをダウンロードしましょう。

一般的には常に公開されている最新のバージョンを使用するのが良いとされていますが、プログラムの用途、設計、周りの開発環境などにもよりますので迷った時には経験者の方に聞くのが良いでしょう。

利用規約に同意したら、使っているOSに応じてダウンロードを開始して、好きな場所に保存しましょう。


先日Javaで作ったプログラムは、どのOSにも左右される事も無く動かせると説明しましたね。

書かれて世に出されたプログラムはどのOSでも実行する事はできますが(run anywhere)、実際にプログラムを書く(write once)開発環境の実装の手順はお使いのOSによって少々異なる点もあるということです。


ちなみにMacの場合はすでにPC内に開発キット(JDK)や実行環境(JRE)が実装されている場合が多いので、バージョンを確認したい場合や最新のバージョンにアップデートしたい場合などはアップルメニューからのソフトウェア・アップデートから確認すると良いでしょう。定期的に自動で行われるアップデートで最新のバージョンが内蔵されている場合が多いですが、PC内に既にインストールされている環境やほかのアプリケーションによってはうまくいかない場合もあります。Macの場合はApple社が無料で配布していますので例えばMac OS X 10.5 をお使いの方でしたらこちらのページから別にダウンロードすると良いでしょう。

Java for Mac OS X 10.5 Update 2(日本語ページ)

http://www.apple.com/jp/ftp-info/reference/javaformacosx105update2.html


JDKをインストールして開発環境を整えるのはそれほど時間もかからず複雑な作業ではありませんが、区切りが良いので実際のプログラミングは次回からにしましょう。

次回は、画面に文字を表示させたり基本的な文法について説明していきます。
タグ:G

2009年06月04日

第0x03回 初めてのグラフィックプログラム

前回までで、ウィンドウを表示することができました。
実際にウィンドウを表示したら次の段階として、
ウィンドウの中に画像やテキストなどを描画するという
要求が発生します。
今回は、それらの基本的な描画について
説明していきたいと思います。

Windowsでは、テキストや画像をする際に、
ウィンドウに直接要求を出さず、一段階クッションをおき、
抽象化を行っています。
この抽象化の部分を『デバイスコンテキスト』と呼んでいます。
デバイスコンテキストを用いることで、
ウィンドウへの表示はもちろんのこと、
印刷などの作業もデバイステキストを用いて行うので、
共通化させることができるなどのメリットがあります。

描画処理 → デバイスコンテキスト →ウィンドウ
→印刷



それでは早速サンプルプログラムを見ていくことにしましょう。

sample003.cpp(ソースコードのみ)
sample003.zip(VS.NET 2008プロジェクト)


順を追って重要なポイント見ていきましょう。

case WM_PAINT:


WM_PAINTメッセージとは、ウィンドウが再描画されるべきタイミングで
呼ばれるものです。
具体的には、次のような状況でWM_PAINTメッセージが発生します。

・ウィンドウのサイズが変更された
・ウィンドウが最小化から最大化など状態が変化した
・ウィンドウで隠されていた部分が表示された

一般的にはこのWM_PAINTメッセージ処理に
ウィンドウの描画処理を記述します。

ウィンドウに描画するためには、まずウィンドウの
デバイスコンテキストを取得する必要があります。
取得する方法として、次の2種類があります。

hdc = BeginPaint( hWnd , &ps );
// ... 描画処理 ...
EndPaint( hWnd , &ps );



hdc = GetDC( hWnd );
// ... 描画処理 ...
ReleaseDC( hWnd , hdc );


上と下は共にウィンドウのデバイスコンテキストを取得する関数です。
BeginPaint()もしくはGetDC()の戻り値としてHDCが返されます。
HDCは、デバイスコンテキストのハンドルになります。
WM_PAINT内では、GetDC()関数を使うことはできないので、
BeginPaint()関数でデバイスコンテキストを取得します。
取得したデバイスコンテキストは、使用後、解放する必要があります。

デバイスコンテキストが取得できたら、それを使い実際に
描画をしていきます。
線を描画する関数は次のとおりです。

MoveToEx( hdc , 150 , 200 , NULL );
LineTo( hdc , 400 , 450 );


描画を行う関数は、基本的にデバイスコンテキストを引数として
渡します。
まず、MoveToEx()関数で現在のカレントポジションを変更します。
第2引数、第3引数で、移動するカレントポジションを指定します。
続くLineTo()関数で、実際に線を描画します。
LineTo()関数は、現在のカレントポジションから
第2引数、第3引数で指定した座標まで線を引きます。
その後、カレントポジションは指定の場所まで移動します。

四角形や、円なども同様にデバイスコンテキストを用いて
描画することができます。
これらの図形を描画する関数を
『GDI(Graphics Device Interface)』と呼びます。
また、WindowsXPで新しく登場したGDI+というものもあり、
それを使うことにより高度な表現もできるようになりました。

テキストの描画を行う関数は次のとおりです。

TextOut( hdc , 100 , 400 , szBuffer , lstrlen( szBuffer ) );


第2引数、第3引数で表示する座標を指定し、
第4引数で文字列、第5引数で文字列のサイズを指定します。
この関数は、改行することができませんので、
改行が必要な場合、適切に配置する必要があります。


これらの図形描画を行う際に、色や種類を指定することも
できます。
線の形状を指定するものを『ペン』、
塗りつぶしの形状を指定するものを『ブラシ』と呼びます。
これらは、『リソース』と呼ばれているもので、
リソースは不要になった時に必ず解放を行わなければなりません。

ペンの作成は次のとおりです。

hPen = CreatePen( PS_SOLID , 2 , RGB(0,0,255) );
// ... ペンの使用 ...
DeleteObject( hPen );


CreatePen()関数で、ペンの作成を行います。
第1引数でペンのタイプ、第2引数で太さ、第3引数で色を指定します。
戻り値で、作成されたペンのハンドルが返ってきます。
不要になった場合、DeleteObject()関数で解放を行います。

作成されたペンを実際に使用するためには、
デバイスコンテキストに関連付けを行わなければなりません。

hOldPen	= (HPEN)SelectObject( hdc , hPen );


SelectObject()関数で、デバイスコンテキストに関連付けを行います。
この関数は少し特殊で、ペンやブラシなどのリソース全てを
この関数で行います。関数は、引数で渡された変数のタイプにより
判別することになります。
戻り値としてHGDIOBJが返されますが、これは入力された引数に
応じてキャストして使用することになります。
なお、戻り値として以前に関連付けられていたペンが返されます。
元に戻す場合には、このハンドルを使いSelectObject()で
戻すことになります。
関連付けられた状態で、DeleteObject()などで解放してしまうと
予想できない状態になってしまいますので、
DeleteObject()をする前に古いリソースに戻してから
解放するのが行儀のよいプログラムと言えます。
ペンを関連付けられたことにより、
これ以降、線描画などで新たなペンを使用して
描画するようになります。


以上で、基本的な描画ができるようになりました。
次回は、メニューやアイコン、カーソルなどについて
解説したいと思います。
タグ:ふわ猫

就職状況

弊社は2008年2月1日に会社を設立しましたが
当初、社員を募集するにあたりハローワークを利用しました。
3ヶ月間、掲載しましたが未経験の方が1名のみという応募状況でした。
その後、人材紹介会社のサービスを半年間利用し、
中途採用で1名の方に入社いただけました。
またその後、別の人材紹介会社のサービスを2ヶ月利用し、
中途採用合同フェアーにも参加し、
ようやくもう1名の方に入社いただけました。
そして初心に返り、またハローワークを利用したところ
1日に3名程度の応募があります。(2009年5月末時点)
この現象には、非常に驚きました。
人材紹介サービス以上の反響があり、正直驚きました。
ラクサスでは、若く優秀な人材を引き続き募集しております。
我こそはという方を、お待ちしております。
タグ:社長
posted by ラクサス at 14:10| Comment(0) | TrackBack(0) | お知らせ | このブログの読者になる | 更新情報をチェックする

2009年06月01日

バーコードスキャンアプリの製品を発表しました

バーコードスキャンアプリの製品を発表しました。

携帯アプリで複数商品のバーコードを読み取り、一括購入をサポートします。
従来の携帯アプリでは、ひとつの商品しか読み取ることが出来ないので、複数の商品を購入するには手間がかかりました。

バーコードスキャンアプリでは、複数商品のバーコードを連続で読み取り、商品情報をまとめて表示することができます。


デモサイトオープン!

アプリをダウンロードして、ECサイトでの購入と買取を体験できます。

携帯からアクセス↓↓
barcode.gifbarcodeqr.gif

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

2009年05月26日

第0x02回 対話をするWindows・メッセージ

前回では、ウィンドウの表示を行いました。
しかし、一部説明していない部分がありました。
それが『メッセージ』です。

Windowsからアプリケーションに対するアクションは、
全てメッセージで行われます。
アプリケーションでは、そのメッセージを受け取り
実際の処理を決定します。
Windowsから通知されるメッセージは膨大で、

「ウィンドウがドラックされた」
「ウィンドウがクリックされた」
「キーが入力された」
「ファイルがドロップされた」
「スクリーンセイバーを起動しようとしている」
「シャットダウンに入る」
など、ウィンドウに関することからシステムに関することまで、
様々な事象がメッセージによって通知されます。
例えば、「スクリーンセイバーを起動しようとしている」という
メッセージを受け取った場合に、アプリケーションでそれを阻止する
といったことも可能になります。

また、アプリケーションからメッセージを発行することも可能です。
これにより、他のウィンドウの動作を制御したり、
直接Windowsに対して処理を促すことができます。


メッセージは、その膨大な量があるため
全てをリアルタイムに処理することが困難です。
そのため、各アプリケーションは、メッセージキューと言われる
メッセージを一時的に保存しておく場所が提供されています。
Windowsは、メッセージキューにメッセージを送ります。
アプリケーション側では、定期的にメッセージキューの中身を参照し、
処理に余裕がある場合に、メッセージを処理していきます。

この処理は、前回のサンプルの中にあった以下の部分がそれにあたります。

MSG stMsg;
while( GetMessage( &stMsg , NULL , 0 , 0 ) != 0 )
{
TranslateMessage( &stMsg );
DispatchMessage( &stMsg );
}


GetMessage()関数で、メッセージキューからメッセージを取り出し、
同時にそのメッセージをキューから削除します。
TranslateMessage()関数で、メッセージを適切に変換し、
DispatchMessage()関数で、メッセージをアプリケーション側で
処理します。

このとき、この中で直接メッセージ処理を書かず、
一度Windowsに処理を渡し、コールバックしてもらうというのが
ミソです。
Windowsでは、1つのアプリケーションで、複数のウィンドウを
持つことが可能です。
DispatchMessage()関数は、メッセージの内容によって
どのウィンドウに送られたものなのか判断し、
適切な場所へコールバックします。
これにより、プログラマは複数のウィンドウを
素直に管理することが可能になります。

コールバック関数は次のフォーマットで定義します。

LRESULT CALLBACK WndProc( HWND hWnd , UINT uMsg , WPARAM wParam , LPARAM lParam )
{
// 処理を行う
return 0;
}

ここではWndProc()というコールバック関数を定義しています。
ちなみに関数の名前は任意のものです。
引数について説明します。

第1引数
どのウィンドウからメッセージが送られたのかを示す
ウィンドウハンドルです。
例えば、クリックされたときの応答として、
Windowを非表示にする、などといったときにこのHWNDを使用します。

第2引数
メッセージの種類が入ります。
メッセージは実際には4バイトの符号なし整数値で、
switch文などで分岐させ、メッセージ処理を行います。
メッセージの一例として次のものがあります。
WM_LBUTTONDOWN : マウスの左ボタンが押し下げられたWM_LBUTTONUP : マウスの左ボタンが押し上げられたWM_RBUTTONDOWN : マウスの右ボタンが押し下げられたWM_RBUTTONUP : マウスの右ボタンが押し上げられた
WM_KEYDOWN : キーボタンが押し下げられた
WM_KEYUP : キーボタンが押し上げられた
WM_ACTIVATE : ウィンドウのアクティブ状態が変更されたことを通知
WM_PAINT : ウィンドウの内容を再描画するよう通知

第3引数
メッセージの内容を補足するパラメータが渡されます。
この内容はメッセージによって異なります。
例えばWM_KEYDOWNでは、入力されたキーの種類が入ります。

第4引数
メッセージの内容を補足するパラメータが渡されます。
この内容はメッセージによって異なります。
例えばWM_LBUTTONDOWNでは、マウスの座標が入ります。

ここまでが、Windowsのプログラムを行う上での作法になります。
これらはどのプログラムにも何かしらの形ででてきますので、
定型文として覚えてしまってもよいと思います。

試しに、前回のサンプルにマウスをクリックしたときのメッセージ処理を
追加してみましょう。
次のようになります。

sample002.cpp(ソースコードのみ)
sample002.zip(VS.NET 2008プロジェクト)



MessageBox( hWnd , szMessage , TEXT("確認") , MB_OK | MB_ICONINFORMATION );


これは、メッセージボックスを表示する関数です。
第1引数は、メッセージボックスの親ウィンドウハンドルを指定します。
第2引数は、メッセージボックスの本文を指定します。
第3引数は、メッセージボックスのタイトルを指定します。
第4引数は、メッセージボックスのタイプを指定します。

サンプルでは、WM_LBUTTONDOWNメッセージの処理を追加しています。
これにより、ウィンドウをクリックしたことにより
メッセージボックスを表示するプログラムが記述できました。


次回はウィンドウに線などを描画するプログラムについて
解説したいと思います。
タグ:ふわ猫

2009年05月25日

第1回 Javaの誕生と発展

新人が学んで行くJava 第一回

今世界では多くのプログラミング言語が様々な目的や用途に使われています。

数多くあるプログラミング言語の中で、今回私は世界中で幅広く使われている言語の一つ、Javaについて書いていこうと思います。

時には自分の感想も交えながら、筆者が勉強しながら感じたより重要な、もしくは使われる頻度の高いだろうと感じた箇所をできるだけわかりやすく簡潔に説明して行こうと思います。
そのためより専門的な知識をお求めの方やすでにJavaを熟達されている方には物足りなく感じられると思われますが、筆者も勉強中ということもあり、長い目でお読みいただければと思います。

第1回 Javaの誕生と発展

1991年、米国 Sun Microsystems 社は家電製品等を制御するプログラムを開発していました。後に改良を重ね、1995年、Javaとして世界に発表されました。


ウェブブラウザ上で動くアプリケーション、Appletを始め、そのいくつかの特徴からJavaは幅広く普及し始めました。ここではその代表的な特徴をいくつか説明します。


余談ですが、Javaのロゴにはコーヒーの絵が描かれていますね。
Javaという名前自体は開発者の頭文字から取ったですとかコーヒーのブランドから取った等の説がありますが、ロゴのコーヒーは開発者達が近くのコーヒーショップで命名したという所から取られたそうです。



  • Write Once, Run Anywhere

  • 大概のプログラムは指定された環境のみで動くというのが一般的ですが、Javaで作成したプログラムはJavaが動作する環境さえあれば、WindowsでもMacでもOSに依存することなく動きます。
    まさに一度書いてしまえば(Write Once) どこでも動かせる(Run Anywhere)という親切な設計を兼ね備えています。


  • オブジェクト指向プログラミング

  • Javaは個々の機能や役割を持ったオブジェクトに関係を持たせプログラムを動かして行くオブジェクト指向プログラミングに特化した言語です。
    クラスの継承やカプセル化を始め、ガーベジコレクションによる記憶管理や、パッケージによるクラスの分類などサポートされている技術を駆使して、開発、保守性の効率を高める事ができます。

  • ミッションクリティカル

  • プログラムは実数や文字列など様々なデータを扱いますが、各データ型の処理においてJavaは厳密にチェックしますので、強い型付けを行う事ができます。万が一予期せぬエラー等が起きた時も、例外処理を行う事ができます。そのため頑丈なプログラムを作成することができ、セキュリティなどに強いプログラムを作成することが可能です。

  • ネットワーク

  • Appletが注目された当時は、ネットワーク関連のプログラム用の言語だという認識が広まっていたようですが、Javaはどちらかというと、Appletなども作る事ができる万能の言語だという方が正しいようです。
    ただその特徴からセキュリティに強いプログラムを作成する事ができたり、事実ネットワーク関連の機能が多々搭載されているので、現在多くのウェブサービスでJavaは使われています。

  • 多数のライブラリ

  • Javaには作り手の用途に応じて様々なコマンドが用意されていますが、存在するすべてのコマンドを把握して使用するのはとても大変です。
    そこでJavaに用意されているAPIのライブラリ(便利なコマンドの集まり)を使えば、目的に応じて比較的簡単に開発を進める事ができます。


発表されて間もない当時は、環境によってい動作が異なったり、動作が異様に重いなどという事もありましたが、マシンや技術の向上により、現在はそのような点も大幅に改善されつつあります。


次回は、実際のプログラミングの説明を始めて行こうと思います。
タグ:G

2009年05月22日

MacとWindowsの橋渡しコラム

第1回:Excel初心者のための「Excelでウェブページの画面設計書を作ろう」

私は学生時代ずっとMacを使っており、WindowsやOfficeはほとんど初心者でした。
しかし、やはりまだまだWindowsの世の中。
職場ではExcelを使って書類を作らなければならない場面もあり、
避けてばかりもいられなくなってきました。

このコラムではそんな私が『本当はMacを使いたいのに』という心の叫びをこらえつつ
Windowsを使って苦労したことや、周りの人に助けてもらって身に着けた仕事術を紹介しようと思います。

※Excelはバージョン2003を使用しています。


ところで、画面設計書とはなんでしょうか?

m001a.gif

簡単に言えば、上図のようにウェブページの
レイアウトと機能の説明を兼ねた文書のことです。

このような書類はExcelで作ることが多いです。なぜでしょうか?
まずソフトに必要な条件を考えてみると、

1.簡単な図形を組み合わせて図を描けること
2.図形と箇条書きなどの文章を自由にレイアウトできること
3.複数のページを一つの書類で管理できること(タブ機能など)

があります。さらに、仕事用の文書として通用するためには

4.印刷した時のレイアウトをコントロールできること
5.各ページにヘッダが付けられること(プロジェクト名、作成者、作成日、更新日などを書きます。)
6.他の社員が再編集できるようになっていること

が望まれるでしょう。

そう考えてみると、Excelは確かにこれらの条件を全て満たしていると言えます。

ただし、Excelは特有のクセがありますので、それを
知らないまま作業にとりかかると、後で大修正が必要になってしまうかもしれません。

今回は、その注意すべき性質と、Excelの便利な機能を紹介しようと思います。

Excelの注意すべき性質

Excelには、文字列の長さが編集中と印刷プレビューとで変わってしまうという厄介な問題があります。また、この変化の度合いはプリンターのドライバーに依存しており、
ユーザーの環境によって変わるようです。職場のプリンターではかなりの違いが見られました。

特に文字がテキストボックスやセルの端で切れてしまったりするので、
入力する文字に対してセルやボックスの幅に余裕を持たせておくことが望ましいです。
(印刷プレビューでダメならフォントを小さくするという手もありますが・・・)

m001b.gif


とにかく印刷時のトラブルを避けるために、
レイアウトが直しやすいような文書を作ることをお勧めします。

また、改行をセルの端での自動改行にしていると、上記の問題で端が切れてしまうことがあるので、
改行は手動で入れるようにしておいた方が安全です。

印刷範囲を決める

印刷範囲は後でも変更できますが、初めに決めておいた方が後々ラクです。
範囲指定と微調整は、上のツールバーの【印刷プレビュー】でできます。
印刷範囲を設定すると、シートの中に目安の点線が描かれます。

1ページに印刷されるセルの範囲を大きく変えたいときは、
【表示】メニューの【改ページプレビュー】を選んで範囲を設定します。

すると印刷範囲だけが表示されるモードになるので、
シート全体を見たいときには【表示】の【標準】を選びなおしてください。

【改ページプレビュー】では印刷範囲に納める領域を広げられて便利ですが、
当然その分全体が縮小されてしまうので気をつけてください。


セルの形を決める

さて、次にシート全体のセルの形を決めましょう。

レイアウトを自由に作りたいときは、列を短くしてグリッドにしてしまうことをお勧めします。
シート全体を選択してから列の幅を変えると、全部の列幅を一斉に変化させることができます。

セルの中に文字を書くとき、エクセルの仕様で端で切れてしまうことがありますが、
セルの幅を変えると全ての行に影響してしまうので、印刷範囲を直すのが大変です。

セルをグリッドにしておけば、セルの幅を調節せずに文章を好きな位置に動かせる
ので、レイアウトの修正が簡単になります。

m001c.gif


図形を描く

デフォルトでは下にツールバーがあります。
かなり多種多様な図形が用意されているので、バリエーションには困らないでしょう。

図形やテキストボックスは、
新しいオブジェクトが上に被さるレイヤー式になっているので、
図形の順番を変えたいときには右クリックのメニューで変えます。

また、ツールバーの一番左の矢印を使えば、複数の図形をまとめて選択することができます。


・その他のTips

a. Excelはメニューの階層が深いので、なるべくツールバーの中から機能を使う方が早いです。
b. 罫線のツールは上にあります。また、オプションで自由に罫線を引けるツールバーがあります。
c. f2ボタンでセルの中身を編集できます。
d. 1つのセルの中で改行するにはAltキー + Enterを押します。
e. 【書式】メニューの【行】からセルの幅を文字の大きさに合わせる自動調整ができます。
f. 【セルの結合】は上のツールバーにあります。
g. 下のタブで複数のシートを切り替えることができます。


以上、Excelを使って自由なレイアウトの文書を作る方法を紹介させていただきました。
普段から使っている方には常識だったかもしれませんが、何かの役に立てば幸いです。

ところで、以上の性質を理解すればExcelでなくても同じような文書を作ることができます。

たとえばOpenOfficeやApple iWorkのNumbersなどでは、ほぼ完璧に図形入りのExcel文書
の読み書きを行うことができます。
(googleDocsのスプレッドシートは今のところ、表を作る機能しかないので無理そうです。)

特にNumbersでは、一枚のシートに複数の表をオブジェクトのように自由に配置できるので、
簡単に美しい文書を作ることができてしまいます。

残念ながら表のフリーレイアウトはExcelでサポートされていない機能なので、
最後にxls形式に戻す場合は、そのようなレイアウトは再現できません。
しかしMacを持っていたらぜひ使ってみてほしいツールの一つです。
タグ:leopard
posted by ラクサス at 14:55| Comment(0) | TrackBack(0) | システム開発 | このブログの読者になる | 更新情報をチェックする
×

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