AONEKO × Program × Life

AONEKO × Program × Life

Programer になりたい とあるエンジニア の日記

Amebaでブログを始めよう!
3.3.3 ファイルIO

InputStream と OutputStreamを使用
ハイスコアやゲーム設定を保存するとき、ゲーム状態を中断、保存し再会するとき



3.3.4 オーディ

ひとつの環境にある、すべての音波が組み合わされ、音楽を聴いたときに聞こえる音色になる。

録音の原理:音波を形成する分子によって空間内にどれくらいの圧力がかかったかを記録する。

再生の原理:スピーカーの周囲のっ空気の分子を振動させる。

デジタル方式の原理:

①サンプリング
膜が外もしくは内に押される。
録音した際に、マイクの膜の状態がここのタイムステップとして測定、記録される。
タイムステップは秒数指定、単位はヘルツ。

膜が外もしくは内に押されたかどうかで、
正の距離値を127個、負の距離値を128個記録記録できる。

マイクを2品使うと別々の場所で音を拾えるためステレオサウンドを得られるが
サンプル数は2倍になる。
3.3 コード:ゲームの詳細

3.3.1 アプリケーションとウィンドウ管理

管理しなければならないアプリケーションの状態とウィンドウイベント

・Create:ウィンドウを起動したとき、一回だけ呼び出される

・Pause:アプリケーションが何らかのメカニズムにより一時停止したときに呼び出される

・Resume:アプリケーションが再会され、ウィンドウが再びフォアグラウンドに戻ったときに呼び出される

3.3.2入力

入力(イベントの登録や記録を行う)

・ポーリング:入力デバイスの最新状態をチェック
→加速度センサー

・イベントベースの処理:イベントが発生した順序に基づくその他のタスク
→タッチスクリーン(タッチダウン、ドラッグ、アップ)、キーボード(キーダウン、アップ)/トラックボール

キーボードイベントについて
・キーダウンイベント:押されたキーのコードを保持、キー入力により実際に生成される文字については何もわからない
・キーアップイベント:キーのコードと実際のUnicode文字を保持

・加速度センサーの状態をポーリングする
加速度センサーはx軸、y軸、z軸で報告する。
各軸の重力加速度 9.8m/s2(9.8メートル毎秒毎秒)





スーパーサンシールドEX
スーパーサンシールドEX 店頭サンプルプレゼント

サンプル当選した・・ので投稿。

使用感:長所、短所は以下のとおり。
メリットのほうが多いから、最近、いい日焼け止めを探している方にはいいかも。

長所
・伸びがよい。
・保湿もしっかりとしてくれる。
・普通のクレンジング剤でちゃんと落とせる。

短所
・薄く塗らないと塗った顔が白くなる。(でも、量の調節は可能。)
・厚塗りをしているような、少し重い感じがする。(でも、ちゃんと肌を保護している感じはする。)




JAVAのメソッドたち

戻り値  メソッド名
Insets    getInsets() コンテナの境界のサイズを示す、このコンテナのインセットを判定します。
void           setvisible()パラメータ b の値に応じて、このコンポーネントを表示するか、または非表示にします。


マウスイベント
http://wisdom.sakura.ne.jp/system/java/awt/Gjava16.html
イベントを受けるのにはComponentクラスのaddMouseListener()メソッドを利用します

voidaddMouseListener(MouseListener l)
このコンポーネントからマウスイベントを受け取るために、指定されたマウスリスナーを追加します。
voidsetBackground(Color c)
このコンポーネントのバックグラウンドカラーを設定します。
mouseClicked
void mouseClicked(MouseEvent e)
コンポーネント上でマウスボタンをクリック (押してから離す) したときに呼
び出されます。

色の表現
http://wisdom.sakura.ne.jp/system/java/awt/Gjava5.html

public abstract Color getColor()
public abstract void setColor( Color c )


getColor()メソッドは、指定されたオブジェクトの現在の色のColorオブジェクトを返します
setColor()メソッドはColorクラスのオブジェクトを受け取り、そのオブジェクトの色を設定します

public abstract void mouseClicked( MouseEvent e ) コンポーネント上でクリック
public abstract void mouseEntered( MouseEvent e ) コンポーネントに入る
public abstract void mouseExited( MouseEvent e ) コンポーネントから出る
public abstract void mousePressed( MouseEvent e ) コンポーネント上でマウスボタンを押す
public abstract void mouseReleased( MouseEvent e ) コンポーネント上でマウスボタンを離す

public void init()
ブラウザまたはアプレットビューアによって呼び出され、このアプレット
がシステムにロードされたことを通知します。このメソッドは、start メ
ソッドが最初に呼び出される前に常に呼び出されます。

Applet のサブクラスで初期化処理を行う場合は、このメソッドをオーバー
ライドする必要があります。たとえば、スレッドを使用するアプレットの
場合は、init メソッドでスレッドを作成し、destroy メソッドでスレッド
を破棄します。

Applet クラスのこのメソッドでは何も行いません。

 サーブレットでHttpリクエストのヘッダ情報を取得する際に使用したメソッドを記載。

【サーブレットでHttpリクエストのヘッダ情報を取得する際に使用したメソッド】
・hasMoreElements():headerNames変数に格納された値をwhile文で繰り返しhasMoreElementsメソッドで検索し、値の有無を確認
・nextElement():値がある場合はnextElementメソッドで取得を行う。
・getMethod():GetやPostなどのHttpリクエストメソッドの取得を行う
・getRequestURL():クライアントがリクエストを生成するのに使ったURLを再構築
・getProtocol():リクエスト名のプロトコルとバージョンをプロトコル名/メジャーバージョン番号.マイナーバージョン番号
・getHeaderNames():このリクエストに含まれるリクエストヘッダの値をEnumerationタイプで返す。

EclipseでwarファイルをC:\pleiades\tomcat\6.0\webapps配下に配置し、Tomcatを起動するとwarファイルは自動で展開される。
しかしTomcatを起動した際にEclipseのコンソールには以下の警告メッセージが出る。

~~~~~~~~~~~~~~~~~~~~~メッセージ~~~~~~~~~~~~~~~~~~~~~~~

情報: Starting Servlet Engine: Apache Tomcat/6.0.35
2012/06/25 0:18:42 org.apache.catalina.startup.HostConfig deployDescriptor
情報: 設定記述子 host-manager.xml を配備します
2012/06/25 0:18:42 org.apache.catalina.startup.HostConfig deployDescriptor
情報: 設定記述子 manager.xml を配備します
2012/06/25 0:18:42 org.apache.catalina.startup.HostConfig deployDescriptor
情報: 設定記述子 sample.xml を配備します
2012/06/25 0:18:42 org.apache.catalina.startup.HostConfig deployDescriptor
警告: A docBase C:\pleiades\tomcat\6.0\webapps\sample inside the host appBase has been specified, and will be ignored
- DWR Version 2.0.2 starting.
- - Servlet Engine: Apache Tomcat/6.0.35
- - Java Version: 1.6.0_31
- - Java Vendor: Sun Microsystems Inc.
- Adding class to.msn.wings.chap4.GoogleMap as GoogleMap
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

これをとある人に聞いたところ、以下のような回答が。
********************************************************************************************

Tomcatの conf にあるsever.xmlを見ると、appBase="webapps"と記述されていると思います。

docBaseには、C:\pleiades\tomcat\6.0\webapps\sampleを指定していて、ここにappBaseであるwebappsを含んでいるから、appBaseのほうは無視される、という警告です。

appBaseは、war を、webappsに配置して、展開するときに参照されますが、warがすでに展開されている、という状態で、プログラムを呼び出すときは、docBaseが参照されて動作しますから、このときappBaseが無視されても、影響ないです。

Tomcatの下ではなく、全然別のディレクトリにプログラムを置き、Tomcatとプログラムの置き場所を分離する場合は、
上記のようにTomcatのwebappsとは、まったく重ならない場所になり、警告はでなくなります。

また、絶対パスではなく、相対パスで書くことができます。

C:\pleiades\tomcat\6.0\webapps\sample の場合、webappsまでは、デフォルトで定義されているので、そこから先だけの相対パスで記述する、
つまり、docBase="/sample"という記述なら、重複にはならないはずです。

ただ、Eclipseから設定するときの都合で、C:\pleiadesからの絶対パスの書き方になっているなら、下手に自分でsever.xmlを編集するより、そのままでもいいのじゃないでしょうか。

********************************************************************************************
まず、server.xmlには今までに作成したプロジェクトのコンテキストパスが記載してあったが、
docBaseには「C:\pleiades\tomcat\6.0\webapps\sample」は記載されていなかった。

今までに作成したプロジェクトのコンテキストパスをserver.xmlから削除しTomcatを起動したところ、大量のエラーが。

対処しきれないので、Eclipseごと削除することに。

これ実際の業務でこんな事になったら・・・ぞっとする。

回答をみる限り、害はなさそうなので、ほっとくのが一番かも。

フィルタを使う。

フィルタはクライアントからのリクエストを受け取ったタイミングで呼び出され、リクエストデータに対し、補助的な処理を施す仕組み。

文字エンコーディングをjspファイルやサーブレットクラス毎にやるのは面倒。

そこでフィルタクラスのEncodeUtilを利用し、すべてのリクエスト処理に対して文字エンコーディングに対し自動設定を行う。

文字エンコーディング名はweb.xmlで初期化パラメータとして指定。

初期化パラメータは<servlet>タグ内の<init-param>タグで指定される
以下のように記載する。

***********コード***********

  <init-param>
   <description>Encoding Name</description> 
   <param-name>EncodeName</param-name>   
   <param-value>Shift_JIS</param-value>
  </init-param>

***************************


<param-name>:パラメータ指定
<param-name>:パラメータ名に対するパラメータ値を指定
descliption : パラメータの説明を記載

フィルタは明示的に呼び出されるものではないが、web.xml上であらかじめフィルタクラスの論理名とフィルタを起動するURLの範囲をマッピング
する必要がある。
ここではアプリケーションルート配下の全パターンURLを適用、EncodeUtilでフィルタする。

***********コード***********
 <!--Filter Mapping-->
 <filter-mapping>
  <filter-name>EncodeUtil</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
 </filter-mapping>

***************************

EncodeUtil.javaの中身は下記の記述。
***********コード***********
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
  request.setCharacterEncoding(
   config.getInitParameter("EncodeName"));
  chain.doFilter(request,response);
 }
***************************
getInitParameterメソッド
引数に指定されたパラメータ名に対するパラメータ値を返します。パラメータ名がない場合は、Nullを返す。

 【事象】
EclipseでTomcatのmanagerにアクセスしようとすると、
ユーザー名とパスワードを何回か聞かれ、401エラーがでてログインできない状態


【対処法】
1.Eclipseの設定 - Tomcat - Tomcatアプリケーションマネージャで アプリケーションマネージャのURLと、アプリケーションマネージャのユーザ名、パスワードを指定し、「tomcat-users.xmlにユーザを追加」ボタンを押す。


 
  
  
2. Eclipseは、ユーザとパスワードを追加してくれるのに、roleを追加してくれないため、以下を試す。
 
tomcatのあるフォルダの /conf/tomcat-users.xmlをエディタで開き自分で追加したユーザが追加する。
 <user username="ユーザ名" password="パスワード" roles="manager"/>

 さらに、この上にroleを追加する。
 
<role rolename="manager"/>
 <user username="ユーザ名" password="パスワード" roles="manager"/>
 
3.Tomcatを再起動。

これでなんとかmanagerにログインできました!!