2011年10月21日金曜日

【メモ】MySQLのトレース

【参考サイト】
http://ameblo.jp/oyayubi-giken/entry-10773127548.html

パラメーターは[mysqld]の中に入れてあげること。

2011年10月11日火曜日

JSP/Servletの入門(1)

ブログ立ち上げ以来、全くサボってたw
マッタク ベンキョウ シテ イナカッタ ワケジャ ナイデスヨ、ブログ カク ジカンガ ナカッタ ダケ ナンダカラネ。

ってことで、今日から会社でJSP/Servletを使ったWebアプリのお勉強を始めたので、そのことをメモ程度にまとめてみる。

【やること】
Eclipseでプロジェクトを立ち上げて、JSP/ServletのWEBアプリを作る。
WEBアプリは、「input.jsp」で文字を入力し送信ボタンを押すと、「input.java(サーブレット)」で受けて、それを「InputView.jsp」で表示させる。
入力する文字に日本語があっても、文字化けをしないように注意すること。

【プロジェクトの立ち上げ】
・「ファイル」→「新規作成」
・「新規プロジェクト」が出てくるので、「動的Webプロジェクト」を選択し「次へ」をクリック
・プロジェクト名には「ServletTest」、ターゲットランタイムは「Apache Tomcat5.5」、動的Webモジュールバージョンは「2.4」を選択し「次へ」をクリック。※この辺は会社でやったときと違うかも。。。
・「デフォルト出力フォルダ」を「WebContent\WEB-INF\classes」にし「次へ」をクリック
・次の画面はデフォルトのまま「完了」をクリック

【パッケージの作成】
・「Java Resouces」の下の「src」を右クリックし「新規」→「パッケージ」
・パッケージ名はとりあえず「jp.co.shamei_hoge.servlettest」とでもしとく(PKG名にはハイフンは使えないらしい。アンダーバーで代用)

【Servletを作ってみる】
・「jp.co.shamei_hoge.servlettest」を右クリックし「新規」→「サーブレット」を選択。クラス名は「input」とでもして「次へ」
・次の画面はデフォルトのまま「次へ」
・次の画面は「スーパークラスからの~」「継承された~」「doPost」を選択し「完了」を選択。※他のオプションは後述予定(予定、予定、予定・・)
・この時点でweb.xmlを開くと、「input」に関する記載があるはず。確認。(web.xmlも少し勉強した方がよさそうだね)

で、ここまでできたら、ソースを書いていきましょうと。

【まずは入力フォーム「input.jsp」】
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<!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=windows-31j">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="input">
<input type="text" name="input"><br><br>
<button type="submit">送信</button><br><br>
</form>
</body>
</html>

念のため書いておくと、「action="input"」の部分は飛ばし先のServlet名。

【サーブレット「input.java」】
package jp.co.shamei_hoge.servlettest;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class input
 */
public class input extends HttpServlet {
 private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public input() {
        super();
        // TODO Auto-generated constructor stub
    }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub

  //エンコーディング(パラメータをもらう前に行うこと!)
  request.setCharacterEncoding("Shift_JIS");

  String param = request.getParameter("input");

  request.setAttribute("msg", param);
  request.getRequestDispatcher("/InputView.jsp").forward(request, response);
 }

}

自動生成された物に追加していったと。
ソース中のコメントにも書いたけど「request.setCharacterEncoding("Shift_JIS")」は、パラメータをもらってくる前に書くこと。
「request.getParameter("input")」で、input.jspから送られてきたinputパラメータの内容を取得(&String param変数に代入)。
「request.setAttribute("msg",param)」で、第一引数にデータ名、第二引数にデータ値を指定し、スコープにデータを登録します。すでにデータ名が存在する場合は、新しく指定されたデータ値が上書きされます。(Javaの道より引用)
最後の行で、forwardメソッドを使用し、InputView.jspへフォワードします。引数に指定されたrequestオブジェクトを通し、フォワード先のプログラムでrequestスコープのデータを取得できます。(またもやJavaの道より引用)

【サーブレット「InputView.jsp」】
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>

<%
 String msg = (String)request.getAttribute("msg");
%>
<!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=windows-31j">
<title>Insert title here</title>
</head>
<body>
これはJSPです。<br>
input.jspで入力された文字⇒<b><%=msg %></b>
</body>
</html>

String msgのところでパラメータを取得するときにStringにキャストしてあげなきゃ行けないところに注意(なんでだっけ?説明してもらったけど忘れた・・)。

こんな感じ。

疲れたから今日はこのくらいにしておこうかな。
あとはdoPost、doGet、Serviceの説明とか教わったからその辺も近々纏めなくちゃか。
あと自分はエンコーディングをバイト列に戻してそれを再度Shift-JISに直すという非効率な事をやっていたことの説明とかもかな。

でもねますノシ

〔2011/10/12追記〕
doGet、doPostの説明は以下のページがいい感じかも。
http://itpro.nikkeibp.co.jp/article/COLUMN/20050901/220438/
http://www.atmarkit.co.jp/fjava/rensai2/jspservlet11/jspsevlet11_1.html

2011年9月21日水曜日

置換するプログラム

せっかくの代休も台風で外に出られないし、ブログ立ち上げたからすこーし勉強してみようかなと思い立ってみる(完全気まぐれですが)。
と言っても、入門書とか読みながらコツコツやるのは絶対挫折するので、実際にテキトーに何か作ってみよう!

何作ろうかなーって考えてたとき、昨日SyntaxHighlighterの導入手順の時に"<"と">"をそれぞれ"&lt;"や"&gt;"に書き換えてやらなきゃ行けないのが面倒くさいと思ったので、これを置換してくれるプログラムを作ろう思います。
(テキストエディタで一発だろって突っ込みはなしで・・・)

まず、Visual Studioを起動して以下のフォームを作ります。



で、次にコードです。

//テキストボックスの内容を変数に格納
var stTarget = this.textBox1.Text;

// 文字列 "<" を "&lt;" に、">"を"&gt;置き換える
stTarget = stTarget.Replace("<", "&lt;");
stTarget = stTarget.Replace(">", "&gt;");

// 置換後の文字列をテキストボックスに入力する。
textBox1.Text = stTarget;

・・・たった4行でした。
動かしてみたら実際にできちゃいました。
ちゃんちゃん。
でもこれではあんまりなんで、Replaceが2行あるのがウザいので、1行に纏められないか調査。
どうやらドットでつなげてあげればいいみたいです。

//テキストボックスの内容を変数に格納
var stTarget = this.textBox1.Text;

// 文字列 "<" を "&lt;" に、">"を"&gt;置き換える
stTarget = stTarget.Replace("<", "&lt;").Replace(">", "&gt;");

// 置換後の文字列をテキストボックスに入力する。
textBox1.Text = stTarget;

おわっちゃった(笑)
最後にせっかくだからEXEにしてみました。
EXEの仕方は「デバッグ」→「ソリューションのビルド」です。
プロジェクトの保存先\obj\x86\Releaseにexeができていました。
ちゃんちゃん。

【追記】
なんか普通に"<"とか">"がSyntaxHighlighter上で表示されちゃってます。
当然"&lt;"って書いてある部分は"<"になってしまうので、仕方なく&を全角にしてあるんだけど、そもそも変換する必要が無いんじゃ無いかって気がしてきた(汗)
これに関しても要調査だな。
とりあえずプログラミングのお勉強なのでこれはこれということで~

2011年9月20日火曜日

頭の体操

社内SNSでこんな問題が出されてました。
1から100までの数をプリントするプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と、
5の倍数のときは「Buzz」とプリントし、
3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
で、自分が考えたのは以下の通り。

for(i = 1; i <= 100; i++) {
  if(i % 3 == 0 && i % 5 == 0) {
    printf("FizzBuzz");
  } else if(i % 3 == 0) {
    printf("Fizz");
  } else if(i % 5 == 0) {
    printf("Buzz");
  } else {
    printf(i);
  }
}
・・・もうまるで「はじめてのC」でも読みながら書いたような感じ(苦笑)

で、上司が最初に考えたのが以下。
# 改行は私が入れてます。間違ってたらごめんなさい。

static void Main(string[] args) {
  for (var i = 1; i < 101; i++)
  Console.Write((
   i % 15 == 0 ? "FizzBazz" :
   i % 5 == 0 ? "Fizz" :
   i % 3 == 0 ? "Bazz" :
   i.ToString())+"\n");
}

C#でした。
そしてFizzBaza出すには15の倍数って考え方でいいんですね。
i%3==0 && i%5==0とかやってる自分、はずかしい。。。

で、次に上司はやっぱりWriteLineの方が良かったと言うことで以下に訂正。

static void Main(string[] args) {
 for (var i = 1; i < 101; i++)
  Console.WriteLine((
   i % 15 == 0 ? "FizzBazz" :
   i % 5 == 0 ? "Fizz" :
   i % 3 == 0 ? "Bazz" :
   i.ToString()));
}

次に同僚の方が2つ。

for (var i = 1; i <= 100; i++) { 
Console.WriteLine(string.Format("{0}{1}{2}",
 i%3 == 0 ? "Fizz":string.Empty,
 i%5 == 0 ? "Buzz":string.Empty,
 (i%3 != 0 && i%5 != 0) ? i.ToString():string.Empty));
 }
for (var i = 1; i <= 100; i++)
 {
 var val = string.Empty;
 if(i % 3 == 0) val += "Fizz";
 if(i % 5 == 0) val += "Buzz";
 Console.WriteLine(string.Empty.Equals(val) ? i.ToString() : val);
 }

一瞬、これだと「FizzBuzz」が出てこない気がするのだが…、と思ったら違った!
なるほどなるほど、実際にVisual Studio入れて動かしてみてわかった。
特に下の方はすごく好きw

1つ目はstring.Format("{0}{1}{2}", 条件1,条件2,条件3)ってあったとして、{0}に条件1が、{1}に条件2が、{3}に条件3の結果が入って、最後にWriteLineされるってイメージ。

2つ目はvalって変数に3で割り切れたら"Fizz"と、5で割り切れたら"Buzz"と入れるようにしてあげれば、両方引っかかるときはvalが"FizzBuzz"になるって事なのね。
で、valが空っぽだったら(string.Empty.Equals)そのままiを表示してあげると。
(解釈あってるよね?)
目から鱗だわー。
※ちなみに上司から「string.Empty.Equals(val)はstring.IsNullOrEmpty(val)」とのコメントがあり。なんでだろー?

で、同僚の1つ目のロジックを見た上司が「だったらString.Formatいらなくねぇ?」って事で以下を。

for (var i = 1; i <= 100; i++)
 {
 Console.WriteLine(
 (i % 3 == 0 ? "Fizz" : string.Empty) +
 (i % 5 == 0 ? "Buzz" : string.Empty) +
 ((i % 3 != 0 && i % 5 != 0) ? i.ToString() : string.Empty)
 );
 }

なるほど。。。。

勉強になります。

Bloggerでコードをかっこよく表示させる(SyntaxHighlighter導入)

・・・ということで、いずれコーディングとかできるようになったら、その時学んだコードをblogに書いたりとかしたなと思うわけで。
よく技術系ブログとか読んでいると、ただコードをコピペしましたって感じじゃなくて、ちゃんとエディタ風に強調がかかってたりするのがあるじゃないですか。
それをBloggerでやるための準備を書きます。
SyntaxHighlighteとかってのを導入します。

まず、Bloggerのダッシュボードから「デザイン」タグ→「HTMLの編集」を選択します。
<head>中に以下のコードを追加。</head>の直前がいいでしょうとのこと。

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js' type='text/javascript'/>
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode=true;
SyntaxHighlighter.config.clipboardSwf='http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

これで準備は完了。
あとは記事投稿の時にHTML形式で以下の様に入力してあげればOK。

<pre class="brush: xxxx">
   ソース
</pre>

xxxxの所は、言語によって変更してあげる。
対応している言語は本家のサイトにあるので参照のこと。
なお、"<"や">"を書きたいときは、それぞれ"&lt;"や"&gt;"に書き換えてあげる必要があるので注意。

そんな感じ-。

はじめに

【プロフィール】
IT業界に飛びこんで4年目になる27歳(♂)。
今までの業務経歴は某製品のテスターとヘルプデスク。
こんな事やるためにIT業界に入ったわけじゃない!と思いつつもなかなか開発案件に行けない残念な状況。
高校も大学も情報系ではなく、全くの開発(というかプログラミング)未経験状態。
人に「職業は?」と聞かれ「SE」と答える度にいたたまれない気持ちになります。
でも意味のないプライドがあり「ヘルプデスクです」とは言いたくないという・・・。
こんな27歳がIT業界でどうやって食べていくのか、毎日不安に駆られています。

【blog開設の経緯】
今のヘルプデスク業務が9月末で終わり、上司からいよいよ次は開発案件に入れてあげると言われて意気揚々としてます(まだ決まってないけど)。
で、よく新人PGさんがblogを立ち上げて、学習したことや業務中に得た知識をblogに纏めているのをみて、こーゆーのって勉強になるだろうなぁ、と思ったので真似してみました。
今は開発案件に入ってないから、自分なりに事前知識として調べたこととか、気になるトピックとかをツラツラと書いていこうかなと考えてます。
将来開発案件に入れたら、問題の無い範囲でちょこっとコードとかも載せていって、成長が見られたらいいなと思っています。
このしょーもないblogを見られた方がいらっしゃったら、突っ込みやコメントを頂けるととても嬉しいです。

ちなみにタイトルの「気付かれないように」は、blog開設時にたまたま流れていたaikoの曲からです。(どーでもいいけど当方aiko好きです)
上司にこのblogが気付かれないようにという願いを込めてw(別に気付かれてもいいんだけど)