ページ

2014年7月29日火曜日

GAEと戯れる 8 - Cookie -

今回はCookieについて

いつもの参考サイトURL
http://libro.tuyano.com/index3?id=877002&page=2

HTML5の登場前はブラウザに保存できるデータといえばCookieだけだったらしい。
ブラウザとサーバ間でデータのやりとりができる。

・Cookieの作成
Cookie 変数 = new Cookie( 名前 , 値 );

・クッキーの保存
response.addCookie( 《Cookie》 );

・クッキーの取得
Cookie[] 変数 = request.getCookies();

※responseは暗黙オブジェクト

・クッキーの名前を得る
String 変数 = 《Cookie》.getName();

・クッキーの値を得る
String 変数 = 《Cookie》.getValue();

・有効期限を設定する
《Cookie》.setMaxAge( 秒数 );


サンプル
<%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
<%@ page import="java.net.*" %>
<%
// エンコードを設定しておく
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
req = request;
// 入力フィールドの値を得る
String input = request.getParameter("input");
if (input == null) input = "";
// messageとcountのクッキーを得る
Cookie msg = getCookie("message");
Cookie count = getCookie("count");
// msgが空なら新たにクッキーを作る
if (msg == null){
    input = URLEncoder.encode(input,"utf-8");
    msg = new Cookie("message",input);
    response.addCookie(msg);
}
// countが空なら新たにクッキーを作る
if (count == null){
    count = new Cookie("count", "0");
    response.addCookie(count);
} else { // 空でないなら、countの数字を1増やして設定する
    String num = count.getValue();
    int n = Integer.parseInt(num);
    n++;
    count = new Cookie("count",String.valueOf(n));
    response.addCookie(count);
}
// 入力フィールドに何か書かれていたらクッキーを新たに設定し直す
if (!input.equals("")) {
    input = URLEncoder.encode(input,"utf-8");
    msg = new Cookie("message",input);
    response.addCookie(msg);
    count = new Cookie("count","1");
    response.addCookie(count);
}
%>
<%!
HttpServletRequest req;
// 指定の名前のクッキーを取り出すメソッドの定義
Cookie getCookie(String s){
    Cookie[] cookies = req.getCookies();
    Cookie res = null;
    if (cookies != null){
        for(Cookie c : cookies){
            if (s.equals(c.getName())){
                res = c;
                break;
            }
        }
    }
    return res;
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Sample jsp</title>
<style>
h1{
    font-size: 16pt;
    background: #AAFFAA;
    padding: 5px;
}
</style>
</head>
<body>
    <h1>Sample jsp page</h1>
    <p>これはサンプルで用意したページです。</p>
    <p><%=count.getValue() + ": " + URLDecoder.decode(msg.getValue(),"utf-8") %></p>
    <table>
        <form method="post" action="hello.jsp">
            <tr>
                <td>入力</td>
                <td>
                    <input type="text" id="input" name="input">
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="送信">
                </td>
            </tr>
        </form>
    </table>
</body>
</html>


↓実行結果


2014年7月26日土曜日

AndroidStudioと戯れる 2 - Module名変更 -

なかなか使いこなせていないAndroidStudioですが、、
Projectを新規作成して、Module名を変更する時のメモ。


1. プロジェクト新規作成








こうしてプロジェクトを新規作成すると必ずモジュール名が「app」となっている。


2. Module名の変更


Module名右クリック > Refactor > Rename


名前の変更には2種類ある。


変更するにはディレクトリ名とモジュール名両方を変更


名称変更完了

3. コンパイル

この状態でコンパイルするとエラーとなるorz



設定ファイルにまだ「app」のままで登録されている為。


settings.gradleのinclude:XXXXを変更したモジュール名に修正し、
右上の「Sync Now」をクリック

無事コンパイルが通り、実行できるようになる。





追記
AVD Nexus5に新しいAndroid L Previewを作成





↓起動


ついでにテスト簡単なテストプログラムを書いて実行。



なかなかまだ使い慣れていないので、eclipse程できないが、
今後のためにも使いこなせる様にしていきたい ><;

GAEと戯れる 7 - エスケープ処理 -

エスケープ処理のお勉強

参考サイトURL


XXS攻撃への対策。
HTMLで頻繁に使われる文字参照
文字文字実体参照説明 
  &nbsp; ノーブレークスペース - 折り返しを起こさない
               (ホワイトスペースではない)空白
< &lt; 小なり記号(半角)
> &gt; 大なり記号(半角)
& &amp; アンパサンド(半角)
“ &quot; 二重引用符(半角)


・実際にエスケープ処理を行わない場合
























↓スクリプトタグがそのまま展開される









・エスケープ処理をした場合














↓エスケープされた状態で表示される
















2014年7月21日月曜日

GAEと戯れる 6 - フォーム送信 -

GAEでJSP/サーブレットのお勉強。今回はフォームの送信。


フォームで送信されたテキストも「getParameter」で取得できるらしい。
※ただしIDでなく名前をキーとして値を取得する。<input id = “”, name = “☆必要”>


同じ名前が複数ある場合に全て取得するには「getParameterValues」を使用。





〜 一部省略 〜




実行結果





次にAjaxを用いてJSPからデータを受け取る。
ajaxindex.htmlとajax.jspを使用。

※JSPファイルは結果テキストを返すだけなので’text/plain’となっている。




実行結果


Cent OSでOpenGL 7 - 3Dプログラミング -

いよいよ、OpenGLで3Dプログラミングを開始。


以下サイトを参考
http://seesaawiki.jp/w/mikk_ni3_92/d/%B4%F0%CB%DC%CA%D403

・3D描画の流れ

  1. ビューポートの設定
  2. 視体積設定
  3. 視点の設定
これらの設定をウィンドウズ変更時のイベントで行う。

void glutReshapeFunc(void (*func)( int width, int height))
機能
GLUTのウィンドウの大きさが変ったときや、移動したときに呼び出されるコールバック関数を登録する。
この関数を使用しない場合、funcにNULLを設定した場合は、デフォルトの動作として、glViewport(0, 0, width, height)を呼び出す。
引数
funcウィンドウのサイズが変更されたときに呼び出されるコールバック関数。ウィンドウの幅と高さを表す2つのint型の引数をとる。
戻り値
なし

1. ビューポートの設定

glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
x, y ・・・左隅(左下)の座標
width・・・幅
height・・・高さ


2. 視体積(視野)の設定

どの範囲まで視野に入れるか?

glMatrixMode(GL_PROJECTION)
まずは視体積の設定を有効にする。

次に投影方法の設定
・透視投影
・並行投影


透視投影には「glFrustum」関数と「glPerspective」関数がある。
glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble znear, GLdoble zfar)
「left」、「right」:「左」、「右」の垂直座標を指定
「bottom」、「top」:「下」、「上」の水平座標を指定
「znear」、「zfar」:「手前」、「奥行き」を指定

gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
「fovy」:「y座標」、すなわち「縦方向の視野角」を指定
「sapect」:「視野角」に対する、「比率」で「水平方向の視野角」を決定
「zNear」、「zFar」:「手前」、「奥行き」を指定


並行投影
視点に影響されず、常に正しいサイズで表示される。2次元で画像表示等に使用される。
glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zbear, GLdoble zfar)
「引数」については、「glFrustum()関数」と同じ

3. 視点の設定

視点の位置設定には「gluLookAt」関数を使う
gluLookAt(GLdouble ex,GLdouble ey,GLdouble ez,
     GLdouble cx,GLdouble cy,GLdouble cz,
     GLdouble ux,GLdouble uy,GLdouble uz,)


「(ex,ey,ez)」:「視点の位置」
「(cx,cy,cz)」:「見たいもの位置」
「(ux,uy,uz)」:画像のどこが「上」なのかを指定(ベクトル)

void reshape(int w, int h)
{
  glViewport(0, 0, w, h);

  glMatrixMode(GL_PROJECTION); // モードの切り替え
  glLoadIdentity();
  gluPerspective(45.0, (double)w / (double)h, 0.1, 100.0);

  glMatrixMode(GL_MODELVIEW); // モードを元に戻す
  glLoadIdentity();
  gluLookAt(0.5, 1.5, 2.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

以下サイトのサンプルコードを実行

コンパイルgcc -o sample sample.c -lglut -lGLU -lGL -lm



三井グリーンランドで花火大会

遊園地の三井グリーンランドで花火大会があるとの事だったので、
連休を利用して行ってきました。





途中雨も降りましたが、タイミングが良く濡れませんでした^^
なぜなら丁度観覧車に乗っていたので(笑)


夕方になって薄暗くなっていく中綺麗な一枚が撮れました










花火が開始した時に室内のアトラクションに並んでいたのでorz
最初は見れませんでしたが、後半何とか見れました^^;




2014年7月16日水曜日

GAEと戯れる 5 - JSP/サーブレット -

前回に引き続き、GAE環境を使ってJSP/サーブレットのお勉強。

前回現在時刻を表示したjspを以下に変更。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy月 MM月 dd日");
String result = format.format(calendar.getTime());
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample jsp</title>
    <style>
    h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
    </style>
</head>
<body>
    <h1>Sample jsp page</h1>
    <p>これはサンプルで用意したページです。</p>
    <p><% out.println(result); %></p>
</body>

</html>

⬇️実行結果












次にメソッドの定義や変数の宣言を行う。
<%! %>のタグ内に行う。以下に修正。
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%!
String format_str = "yyyy-MM-dd";
String result = "none.";

void setFormatStr(String s){
    format_str = s;
}
void printToday(){
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat(format_str);
    result = format.format(calendar.getTime());
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample jsp</title>
    <style>
    h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
    </style>
</head>
<body>
    <h1>Sample jsp page</h1>
    <p>これはサンプルで用意したページです。</p>
    <% printToday(); %>
    <p><%=result  %></p>
    <% setFormatStr("yyyy年 MM月 dd日"); %>
    <% printToday(); %>
    <p><%=result  %></p>
</body>
</html>
















クエリー文字列で値を受け取る。

次はクライアント->サーバー->クライアントの順で値の受け渡しを行う。
・クエリー文字列


http://ドメイン/ファイルの指定?名前1=値1&名前2=値2&……

値は半角、英数字以外はURLエンコードを使って表す。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
String str = request.getParameter("param");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Sample jsp</title>
    <style>
    h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
    </style>
    <script type="text/javascript">
    function doAction(){
        var s = document.getElementById('input').value;
        var url = 'hello.jsp?param=' + encodeURI(s);
        window.location.href = url;
    }
    </script>
</head>
<body>
    <h1>Sample jsp page</h1>
    <p>これはサンプルで用意したページです。</p>
    <p>パラメータ:<%=str  %></p>
    <input type="text" id="input">
    <button onclick="doAction();">Click</button>
    </body>
</html>

⬇️実行結果


2014年7月15日火曜日

AndroidStudioと戯れる 1 - インストール -

eclipseでGAE開発を行っているので、混同しないように
AndroidはAndroidStudioで開発してみる。

ダウンロード&インストール
https://developer.android.com/sdk/installing/index.html?pkg=studio

インストール後起動してみる。

















Android WearやAndroidTVのスキンが入っている。















何がなにやらさっぱりなので、eclipseとAndroidStduioの比較表を見てみる。
EclipseAndroid Studio
WorkspaceProject
ProjectModule
Project-specific JREModule JDK
User libraryGlobal library
Classpath variablePath variable
Project dependencyModule dependency
LibraryModule library


AndroidStudioのProjectはeclipseのworkspaceだが、eclipseと異なり、
関連のあるmoduleのみで構成

AndroidStudioがProjectやModuleに対して行える設定手段は3種類。

1. ProjectStructure
    Moduleの依存関係、ProjectやModuleのパス設定、SDKやライブラリの指定など
    主にファイルパスまわりの設定。

2. ProjectSettings
    コードフォーマットのスタイル設定、ファイルのエンコード指定、バージョン管理
     Project Structureで設定できないものは全て設定を行う。

3. Run/Debug Configuration
    エミュレータで実行/テストするといったプロジェクトの実行構成を定義。

上記の構成情報は.ideaディレクトリと.imlファイルに格納される。
,idea -> eclipseでいう.project
.iml  -> eclipseでいう.classpath

eclipseとAndroidStudioとのショートカットキー対応
http://d.hatena.ne.jp/esmasui/20130607/1370621300

2014年7月13日日曜日

Wii U 購入

棒茄子が入ったので、勢い余って購入。






思った以上にGamePadでかい。

Cent OSでOpenGL 6 - 線と矩形の描画 -

線をひく&矩形描画


今まで、GLUTを使用しない場合いかに大変かを見てきたので、
今回からはOpenGLの内容を見て行く為GLUTを使用。


#include <GL/glut.h>

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3d(1.0, 0.0, 0.0); /* 赤色の線を指定 */

  glBegin(GL_LINES);
  glVertex2d(-0.9, -0.9);
  glVertex2d(0.9, 0.6);
  glEnd();

  glFlush();
}

void init(void)
{
  glClearColor(1.0, 1.0, 1.0, 1.0);
}

int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  init();
  glutMainLoop();
  return 0;
}

実行結果



今回は分かり易い様に、背景を白色に設定。
また線の色をglColor3d関数で赤に設定。

次はglBegin関数に「GL_LINE_LOOP」を指定。
void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3d(1.0, 0.0, 0.0); /* 赤色の線を指定 */

  glBegin(GL_LINE_LOOP);
  glVertex2d(-0.9, -0.9);
  glVertex2d(0.9, -0.9);
  glVertex2d(0.9, 0.9);
  glVertex2d(-0.9, 0.9);
  glEnd();

  glFlush();
}

実行結果



四角形を塗りつぶす為にglBeginに「GL_POLYGON」を指定
void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3d(1.0, 0.0, 0.0); /* 赤色の線を指定 */

  glBegin(GL_POLYGON);
  glVertex2d(-0.9, -0.9);
  glVertex2d(0.9, -0.9);
  glVertex2d(0.9, 0.9);
  glVertex2d(-0.9, 0.9);
  glEnd();

  glFlush();
}

実行結果