2011年12月31日土曜日

応用情報処理 受験メモ

10月に受験した応用情報がこないだ結果返ってきて、まあ受かってたのでメモ。


<勉強期間>
期間としては8月〜10月でしたが、実質1ヶ月くらい。
→8月は週1しか勉強してないというやる気の無さ。でも、また同じ試験を受けたいとは全く思えなかったので9月中旬くらいから週2くらいに勉強時間を増やしました。

<勉強法>
○午前試験
ひたすら暗記。つかったのはこちら。

徹底攻略ポケット 応用情報技術者試験 午前対策 (ITプロ/ITエンジニアのための徹底攻略ポケット)

とにかくハードウェアやシステム監査などの知識がひどすぎました。
だいたい2~3周くらいしましたが、上2つのテーマのところは何度やっても覚えられず。
情報処理試験の午前は過去問から相当数出題されるというのを信じてとにかく何度も問題といたり、問題眺めたりしてました。

○午後試験

応用情報技術者 午後問題の重点対策〈2012〉 (情報処理技術者試験対策書)

私が選択しようと思っていたのは

  • マネジメント系
  • ネットワーク
  • データベース
  • セキュリティ
  • ソフトウェア開発

このへんでした。
問題集を全部解く気にはなれなかったし時間もそんななかった、けど受かりたいっていう贅沢な考えをしていたので、とにかく上記5つのテーマを解きまくりました。
解きまくったといっても結局1周しかできず。。。
「こういうかんじで問題出るのねー」で終わりました。


<試験>
○午前試験
かなり見覚えがある問題ばかり。
自信を持って解けたのもありましたが、「これ問題見た事はある。でも解き方忘れた」みたいなのが多くて、手応えは微妙。

○午後試験
ネットワークが難し過ぎて断念。正確には、覚えてなけりゃできない問題が出てきて、覚えてなかったので断念。
そのかわりマネジメントをもう一個余計にといて切り抜ける。。


<試験後>
各予備校とかが模範解答だしてて、午後がボーダーラインすぎてどうしようと大騒ぎ。
結果は、
○午前試験→76%
○午後試験→65%
で合格してました。


<振り返り>
市販の問題集(=つまり過去問ってことなんだけど)やればどうにかなる。
次はDBでも受けようかしら。


<全然関係ない話>
試験に申し込むのが若干遅く、家から1時間くらいのところに飛ばされました。電車では30分もかからないのにとにかく歩く歩く。。。
生まれて初めて「女子大」に足を踏み入れましたが、もうキャンパスの雰囲気がCan-Canなかんじでぽかんとしてしまいました。

Bronze DBA 11g 受験メモ

先日、Bronze DBA 11g を受けてきました。
んで、合格したので、Oracle Master Bronzeが取れたので、先日の記事と同様、どんなかんじで勉強してきたのかをメモ程度に残します。

<勉強期間>
実質1ヶ月くらい。
→電車の中とか、家に帰ってきてからとか。休みの日とかも。

<勉強法>
SQLは自分で書いたことがあったのでいきなり問題演習でOKだったのですが、DBAというかDBを管理したり自分でインストールしたり設定したりしたことが一切無かったので、まずは教科書を読んでとにかく勉強勉強。
実際に触れたことがないので、教科書を読むだけでは辛いかなと最初は思っていたのですが、勉強していくうちに色々知識がつながっていったのでどうにかなりました。
読んだのはこちら。

やさしく学ぶオラクルマスター Bronze DBA 11g

バックアップ系の知識がいまいちだったので補足として以下の本も読んだりしました。

Bronze Oracle Database【DBA11g】編(試験番号:1Z0-018J)(DVD付) (オラクルマスター教科書)

一通り読み終わったら(=読みながらノートとかにもメモしつつ)問題演習です。問題集はこちら。

徹底攻略 ORACLE MASTER Bronze DBA11g問題集 [1Z0-018J]対応 (ITプロ/ITエンジニアのための徹底攻略)

だいたい2周〜3周くらいしました。最初は正答率30%くらいで残念すぎる結果でしたが、何度も解いてくうちに7割〜9割できるようになりました。
ちなみに最後についている模擬試験は合格ラインは60%で、結果は65%くらい。なかなかぎりぎり。


<試験>
どっからどうみても見覚えがある問題ばかり。
SQL基礎のときは難しぎて泣きそうになりましたが、DBA 11gはかなり問題集通り。
試験時間は75分だったのですが、30~40分くらいで一通り問題を解き終えて、30分かけて見直して試験終了。

正答率77%で合格でした。


<振り返り>
市販の問題集やればどうにかなる。

2011年11月12日土曜日

11g SQL基礎Ⅰ 受験メモ

というわけで、今日は11g SQL基礎Ⅰを受けてきました。


Oracle Master Bronze ( Oracle Database 11g)を取得するためには
  • 11g SQL基礎Ⅰ
  • Bronze DBA 11g
の両方に合格せねばならず、Bronze取りたかったので今回はSQL基礎。どんなかんじで勉強してきたのかをメモ程度に残します。

<勉強期間>
実質1ヶ月くらい。
→電車の中とか、家に帰ってきてからとか。休みの日とかも。

<勉強法>
SQLの参考書を読みながら、問題を解く。シンプルです。使ったのはこれです。
1周といて、間違えたものをもう一回。

徹底攻略ORACLE MASTER Bronze 11gSQL 基礎I問題集[1Z0-051J]対応 (ITプロ/ITエンジニアのための徹底攻略) [単行本]


あとOracleではないですけど、OSSのDBに触れる機会があったのでそこでSQLを書いたりしてたのも、結構役立ちました。
SQLの構文とかは、やはり単なる暗記では飲み込みが悪いと思います。自分で打って、エラーを返されることで(笑)、身に付きます。
ただ、ルール的なものは座学で頑張りました。例えば、「SQL関数のネストはどのくらいのレベルまでいけるか」とか「V$ビューとはなんぞや」とか。
それで試験前日に模擬試験を解いてみる。合格ラインは60%で、結果は70%くらい。


<試験>
はじまって10秒で「ん?」ってなりました。
。。。模擬試験と違うぞと。
まず問題に出てくるSQLが長い。
要は、問題集でやってきたような1問1問が複合されて出てくるので問題集より難しく見えたというかんじでした。
とりあえずポチポチ押して回答をすすめて、最後10分を残して一通り終了。見直しは結局7問くらいしか終わらず、試験終了。


結果は合格。合格ライン60%の、正答率60%。ぎりっぎりでした。


<振り返り>
問題集はたぶんどれを使っても同じだと思います。どれも「これじゃ足りません」っていうレビューが1つくらいはついてるし(笑)
そういう前提で勉強すると良いかなと思いますー。

2011年9月8日木曜日

JBoss+PostgreSQLでコネクションプーリング

JBossとPostgreSQLでコネクションプーリングしてみました。
Javaです。

まずは、JBossのほうに設定。deployディレクトリに設定ファイルであるpostgres-ds.xmlを入れます。
このdsファイルは、docファイルに各種データベース用のサンプルがあるので、例えばMySQLとつなぎたいとかOracleとつなぎたいという場合でも簡単にできます。

postgres-ds.xml

<datasources>
  <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://localhost:5454/test</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>postgres</user-name>
    <password>postgres</password>
    <metadata>
         <type-mapping>PostgreSQL 7.2</type-mapping>
      </metadata>
  </local-tx-datasource>
</datasources>


ではではJavaで実装。
ちょっとクラス分けしてみました。
まずはコネクションを取得するためのクラス。

ConnectionManager.java

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionManager {
 /**
  * コネクションを取得するメソッド
  * @return Connection
  * @throws SQLException
  * @throws NamingException
  */
 public Connection getConnection() throws SQLException, NamingException {
  InitialContext icx = new InitialContext();
  //postgres-ds.xmlに書いたJNDI名を書く。
  //JBossを起動したときにコンソールに表示されるので、それを書くと尚確実。
  DataSource ds = (DataSource) icx.lookup("java:PostgresDS");
  Connection conn = ds.getConnection();
  return conn;
 }

}


こちらはちゃんと実行できるかどうかのテスト用Servlet。

ConnectionGetSample.java

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConnectionGetSample extends HttpServlet {

 private static final long serialVersionUID = 1L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  // 準備
  ConnectionManager cm = new ConnectionManager();
  Connection conn = null;
  PreparedStatement ps = null;
  ResultSet rs = null;

  // SQL文(ここではテストでpostgresユーザーを出すSQLにしてみる)
  String sql = "select * from pg_user";

  try {
   // コネクション取得。
   // ConnectionManagerクラスでthrowしてるExceptionを
   // こっちでcatchする。
   conn = cm.getConnection();

   // SQL実行
   ps = conn.prepareStatement(sql);
   rs = ps.executeQuery();

   // 結果取得→出力
   while (rs.next()) {
    System.out.println(rs.getString(1));
   }

  } catch (SQLException e) {
   e.printStackTrace();
  } catch (NamingException e) {
   e.printStackTrace();
  } finally {
   // クローズ処理
   if (rs != null) {
    try {
     rs.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   if (ps != null) {
    try {
     ps.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
  }

 }

}




で、できました。

2011年8月20日土曜日

PostgreSQLでポート番号変更

PostgreSQLを起動しようとして、以下なメッセージが出た場合、ポート番号がかぶってます。


$ pg_ctl start
server starting

$ LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? 
If not, wait a few seconds and retry.
LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? 
If not, wait a few seconds and retry.
LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432?
 If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "localhost"
FATAL:  could not create any TCP/IP sockets

何回も言われてるますが、5432が使われてるとか。
PostgreSQLはデフォルトではポート番号5432を使うようになってます。かぶってたら違う番号を使うように設定します。

設定はだいたいpostgresql.confというファイルで行います。
最初、portが指定されているところは#でコメントアウトされてますので、#を外して5432以外の番号を指定してあげるだけでOKです。
ここでは5433にしてみました。


$ cd /Library/PostgreSQL/9.0/data //ディレクトリ移動
$ vi postgresql.conf //以下のように編集




では、起動やってみます。

$ pg_ctl start
server starting


できたー!

PostgreSQLのセットアップその2

先の記事で、軽くいい加減なPostgreSQLのインストールを紹介したので、もうちょっと色々設定してみます。

「ターミナルからサーバー起動&停止ができるようにする」ってことしました。

*ここではHogeユーザーがPostgreSQLの実行ユーザーとしてます。セキュリティの観点からroot権限のユーザーだとPostgreSQlは実行できないようになってるのでお気をつけ。

(1)パスを設定する
環境設定ファイルの.bash_profileファイルを開きます。

//ファイルのあるディレクトリに移動
$ cd ~

//ファイルあるか確認
$ ls -a

.
..
.DS_Store
.RData
~~中略~~
.bash_history
.bash_profile
.bashrc

//ファイルを編集
$ vi .bash_profile

//以下の行を追加して上書き
export PATH=$PATH:/Library/PostgreSQL/9.0/bin
export PG_HOME=/Library/PostgreSQL/9.0
export PGDATA=$PG_HOME/data
export PG_LIB=$PG_HOME/lib

//ファイルを再読み込みして設定を反映させる
$ source .bash_profile


PATHにサーバー起動コマンドが入っているディレクトリ(ここでは/Library/PostgreSQL/9.0/bin)を追加することで、どこからでも起動や停止ができるようしています。

また、サーバーを起動する場合には、データベースに格納するデータなどをどのディレクトリに保存するかを設定してあげる必要があります。
それがPGDATAの環境変数で指定してあげた場所です。もちろんこれも任意の場所です。



(2)PostgreSQLのディレクトリの所有者をHogeさんにしてあげる。
コマンドを実行するためには、そのコマンドが入ったディレクトリをPostgreSQLの管理ユーザーの所有物にしなければ!というわけで、しました(これしないと、Permission deniedとかいって怒られます)
この作業はroot権限のユーザーではないとできないので、一度rootになってから、コマンド実行します。


//rootになる。パスワードを求められるので入力。
$ sudo su - 

//PostgreSQLがはいったディレクトリをHogeさんの所有物にする。
# chown -R Hoge /Library/PostgreSQL/9.0 

# ls -l //確認
total 16
-rw-------   1 Hoge  daemon   230 Aug 20 01:15 .bash_history
drwx------   3 Hoge  daemon   102 Aug 20 01:09 Library
drwxr-xr-x  32 Hoge  daemon  1088 Jun  4 19:08 bin
drwxr-xr-x   7 Hoge  daemon   238 Jun  4 19:07 doc
drwxr-xr-x  29 Hoge  daemon   986 Jun  4 19:08 include
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:07 installer
drwxr-xr-x  32 Hoge  daemon  1088 Jun  4 19:08 lib
drwx------  19 Hoge  daemon   646 Aug 20 01:10 olddata
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:07 pgAdmin3.app
-rwxr-xr-x   1 Hoge  daemon   373 Jun  4 19:09 pg_env.sh
drwxr-xr-x  14 Hoge  daemon   476 Jun  4 19:09 scripts
drwxr-xr-x   5 Hoge  daemon   170 Jun  4 19:07 share
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:07 stackbuilder.app
drwxr-xr-x   3 Hoge  daemon   102 Jun  4 19:09 uninstall-postgresql.app

# exit //元にもどる
logout


厳密にやるなら、パーミッションを700(所有者以外には一切触らせない)とかにすべきなのかもですがローカルで使うだけなので特に設定はしませんでした。


(3)PGDATAフォルダ作成
もともとインストーラーでインストールする時点でこのフォルダは設定してあるのですが、改めて作成します。
私の場合は、現在あるdataフォルダのバックアップをとってから削除をしました。その後、「文字コードUTF8で日本語対応」なデータベースがつくれるような設定をdataフォルダにしてあげました。


//ディレクトリをコピー
$ cp -R /Library/PostgreSQL/9.0/data/ /Library/PostgreSQL/9.0/cdata/ 

//削除
$rm -rf /Library/PostgreSQL/9.0/data/  

$ ls //確認
Library				pgAdmin3.app
bin				pg_env.sh
doc				scripts
include				share
installer			stackbuilder.app
lib				uninstall-postgresql.app
cdata


//initdbというコマンドで、dataディレクトリを作成。
//いろいろ出てくるけど、最後にSuccessって出てくればOK

$ initdb -E UTF8 --no-locale 

creating directory /Library/PostgreSQL/9.0/data ... ok
creating subdirectories ... ok

~中略~
Success. You can now start the database server using:

postgres -D /Library/PostgreSQL/9.0/data
or
pg_ctl -D /Library/PostgreSQL/9.0/data -l logfile start


以上で設定完了です。では、やってみます。

■サーバーの稼働状態を確認します(pg_ctl status)

$ pg_ctl status
pg_ctl: no server running

■サーバー起動(pg_ctl start)

$ pg_ctl start
server starting

■サーバー停止

$ pg_ctl stop
waiting for server to shut down....
LOG:  received smart shutdown request
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down
done
server stopped

できたー!






2011年7月31日日曜日

crontabメモ

crontabの使い方メモ。

■crontabとは?

設定した時間になったら、設定したコマンドを実行する子です。

■crontabの設定例

crontabに-eオプションをつけることで、設定ができます。
実行すると、画面が切り替わります。初めて設定する場合は白紙?な画面。
以降は、viエディタなかんじで記述します。
設定項目は左から「分」「時」「日」「月」「曜日」「実行コマンド」で書く。


$crontab -e

//(例1)毎時10分になると「hello」と出力。
10 * * * * echo "hello"

//(例2)毎日12時になると「iitomo」と出力
00 12 * * *  echo "hello"

//(例3)2分おきにdateコマンドを実行して、ログファイルに出力
*/2 * * * * date >> /Users/dateLog.log


■crontabの確認


crontab に -lオプションをつける。

$ crontab -l
*/2 * * * * date >> /Users/dateLog.log

//実行確認
$ ls
dateLog.log

$ view dateLog.log
Sun Jul 31 15:14:01 JST 2011
~
~
~
~
~
~
~
~
~
~                                                     
"dateLog.log" [readonly] 1L, 29C

■実行するユーザーを限定したいとき

-u オプションをつけてユーザーを限定します。

//user1さんの設定するcrontabを表示する
$crontab -u user1 -l


以上!

2011年7月30日土曜日

Redmineを試してみた。

今回はRedmineというOSSの紹介してみようかと思います。


Redmineというのは、プロジェクト管理のソフトウェアでウェブブラウザを介して使われるものなのですが、OSSなので自由に誰でも使えます。
(ベースはruby on railsらしい)

とりあえず試しにインストールしてみました。

ここ(http://redmine.jp/download/)からダウンロードして、All in oneインストーラを使っていれてみました。オフィシャルじゃないのですが、ちょろっと試してみる分には、こっちでいいかなと思ってこっちにしました。

Macに入れたので、Macを選んで、zipを落として解凍してウィザードたちあげーの、インストール!

とりあえず試しに「飲み会プロジェクト」を立ち上げてみました。



で、一人でやるわけものでもないので、メンバーも追加できたりします。このメンバーにつける権限によって、プロジェクトそのものを管理できる人にしたり、報告だけさせる人にしたりなどいろいろできます。



またまたプロジェクト管理に必要な、wikiだったり共有すべき情報を発進するニュース掲示場所だったり、プロジェクトの進捗管理ができるガントチャートが作成できるようになります。

Redmineでは「チケット」と呼ばれるものがあって、これが要はたぶん「タスク」ってことになってると思います。これを追加/更新していくと、ガントチャートに反映されるようになってます。




















ガントチャートも、スケジュール予定と現在の進捗割合、そして今日の日付が赤いラインで表現されるので、現在の進捗割合がスケジュール予定と比較してどうなのかが一目で分かります。







こういうのを、(すごい地味だけど)エクセルで管理することもできますが、まあなんか自動化してくれるほうが楽だし嬉しいですねー。

10分くらいしかいじってないですが、まあなんか使いやすそうなので試してみると良いんじゃないかなーと思いました!

*チュートリアル?みたいなのがあって、見るだけでもなんとなく雰囲気がわかるのですが、実際自分で触ると結構楽しいので、おすすめ。

2011年7月23日土曜日

【振り返り】プロジェクトマネージメント的な。


前にプロジェクトマネジメントなメモとかいって、投稿したのですが
それについての振り返りをしようかと。

特に「進捗状況の「見える化」」について。

結論としては

・ちょっと工夫した進捗報告の方法が案外良かった!
・自分ができてるとおもっても、できてないってことを実感した

っていう2点です。




では長々と書いてみます。

今回いろいろ縁あって?プロジェクトマネージャーという役割をいただいて、約2週間程行動していたわけですが、まあいろいろありました。
難しいなと感じることがたくさんあって、メンバーに迷惑をかけたなと思うことが今でもたくさんあって。それでも最終日に「お世話になりました」とか丁寧に声をかけてくださったりするメンバーもいて。

そんな中で、進捗をどう周知させるか、っていうのが私の中の一つの課題でした。

私が進捗を把握するのは、ぶっちゃけ簡単で、「どうなってますか?」と聞けばいいのだけど、メンバーが他のメンバーの進捗を知ったり全体の進捗を知るのは難しそうだったので(それぞれやることがおおくて、それで精一杯的な)、
1~2時間に1回のペースでチーム内の進捗報告会を行うことにしてました。そうすることで、私も進捗を把握できるし、メンバー同士も進捗を把握できると思ったから。



そう思ったんですけど、実際はできてませんでした。



あるチームメンバーから「もっと全体の状況を把握したい」と言われて、「え、チーム内進捗会してんじゃん」と思ったんですが、、、

要は、自分の進捗をどうまとめるか、どう表現するかに夢中で、他のメンバーの進捗報告に耳を傾ける余裕はあまりなかったようです。。。

原因としては2点かなと。

(1)余裕をなくしてしまうほどのスケジュールの詰めっぷり(原因は私の時間管理ミス)

(2)「このチーム進捗会は、チームとして全員で進捗を把握するもの」というのを明確に示していなかった(たぶんメンバーは、私のための時間だと思っていたと思われる)

もちろん、「メンバーに聞く気がないのがそもそも!」っていう意見もあるかもしれないけど、たぶんそんなもんだと思う。
中学/高校のときのホームルームの日直の話なんて、誰も聞かないのと一緒でw

そして、どうしたらいいかなーとかんがえて、上の人とも相談した結果

「メンバーの進捗報告を他のメンバーにさせる」ってことをしてみました。

つまり、普通はAさんの報告はAさん自身がするんだけど、そうではなくて、Aさんの報告はBさん、Bさんの進捗はAさんが報告する。というかんじにしました。

そうすると

・他人の進捗をまず「理解」するところから始まるので、その人の進捗は嫌でも把握することになる。
・他人の進捗をしどろもどろながら代わりに報告してるとなぜか「聞いてあげよう」的な空気が生まれるw
・よくわからないけど、盛り上がる

ってことになって、結構いいかんじになりました。

ーーーーー
何かしなければならないことがあって、それに対しての対策を何かしらしたとします。
それだけで「よし、できてる」と思うのは、かなりおバカさんでした。

もっとちゃんと、ある意味「疑いの目」を持って、状況をじっくりと観察して、目標を達成できているかどうかを判断することが重要だな思った訳です。

ーーーーー

#なにこれ、日記?w

2011年7月18日月曜日

【Linux】root に パスワード

メモすぎるメモ。

Ubuntuでいろいろやっててroot権限になろうと思ったらパスワードを聞かれた。
でもパスワード設定した覚えがない。。。と思って調べてたら、
インストール時にはrootのパスワードは設定しないらしい。
なので、設定。


gunso@ubuntu-vm:~$ sudo su -
[sudo] password for gunso: 
root@ubuntu-vm:~# 

2行目で、現在のユーザー(ここではgunsoさん)のパスワードを聞かれている。入力すると3行目のようにrootに変身したことがわかる。

とりあえずrootにはなった。今度はパスワード設定。

root@ubuntu-vm:~# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully


#passwdでパスワード設定。
設定したいパスワードを2回入力して、successfullyでした。

一応、できたかどうかテスト。


root@ubuntu-vm:~# su - gunso
gunso@ubuntu-vm:~$ su
パスワード: 
root@ubuntu-vm:/home/gunso# 


gunsoさんになってからの、rootさん。
無事できました。

【参考ページ】

2011年7月16日土曜日

VMware PlayerでUbuntu

というわけで仮想化ってみました。

VMwareとは、ホストOS(普通にPCに入ってるほう)上で仮想的にもう一つのOS(ゲストOSともいう)を動かしてしまうデキル子です。

今回はWindowsVistaにVMware Playerを使ってUbuntuを入れてみました。その手順をメモメモ。

【VMWare Playerのダウンロード&インストール】

・まずはダウンロードです。以下のサイトからダウンロードします。

会員登録(といっても、名前とアドレスくらい)をして、VMware Playerをダウンロードします。


・exeファイルを実行するとウィザードが立ち上がるので、それに沿ってインストールをします。
・基本的には「次へ」でOK。保存先とかを変更したいときは適宜変更してください。
・インストール完了後、再起動が求められるので、再起動しておきます。
・デスクトップにショートカットをつくるとこんなかんじです。


【Ubuntuのダウンロード】
・以下のページにある、「ubuntu-ja-8.04-vmware-i386.zip(仮想マシン本体) (md5sum: 4a4bfa740222d7adb6855dd53fcc646f) 」からzipファイルをダウンロードします。

740Mくらいあって、重いので(さらにイーモバだと遅い)、昼寝でもしましょう。

・出来たら、解凍します。



【Ubuntu起動!】

・まずは、VMware Playerを起動しましょう。起動したら「開く」を選択します。


・先ほど解凍したフォルダの中にある、「Ubuntu.vmx」を選びます。

・そうすると、Ubuntuが動いたっぽい画面に出ます。



・しばらくすると、勝手に色々セットアップに向けて頑張ってくれます。



・きれいなGUIが出てきて、いよいよセットアップです。まずは言語。日本語がいいので、日本語にします。キーボードも日本語。タイムゾーンも東京です。




・最後のユーザー作成。ごくごく普通です。



・これでほぼ完了です。最後に以下のようなウィンドウが出ます。これに関しては以下のURLにいろいろ対処法が書かれていますが、私は無視しました。。。ちなみにVMwareToolがあると、ゲストOSとホストOS間でテキストのコピペができるなど便利な感じなります。



【ログイン→色々遊ぶ】

・セットアップ完了したので、早速ログインしてみます。ログイン画面にユーザーIDとパスワードを入力して、ログインします(ちなみに私はここでログイン名を勘違いして10分くらいムダにしました)。VMのウィンドウを最大化するとこんな感じの画面です。リモートデスクトップ的な感じですね。




・ログインできたら、とりあえずウェブみたりコンソール立ち上げて、lsコマンドとかで遊んでました。これで完成です!

 


というわけで、Linux環境で勉強します。。。


#本当はLPICの勉強とかもするわけだから、CentOSのほうがよかったみたい。。。
#このブログもVistaから更新なわけですが、Vistaはもうアレすぎてアレ。

2011年6月25日土曜日

JFreeChartによるグラフ描画

JFreeChartを使うと、javaで割と簡単にグラフを作成することができる。
グラフの種類も様々で、円グラフや棒グラフ、折れ線グラフなど基本どころはもちろん、3DグラフなどExcelでできることはだいたいできそう(たぶん)。
例えば、DBと接続してればそのデータをすぐに可視化できたりする。

まずは、ここからダウンロードしてjarファイルを読み込みます。
ちなみにJFreeChartのwebページはこちら。このページにもサンプルがあるのでおしゃれです。


今回はサンプルということで書いてみました(なので、DBは使わず)。

まずはデータ準備。本の売り上げを表すグラフをつくろうかなということで、Bookクラスと売り上げを管理するクラスをつくります。


public class Book {
 
 /** 本のタイトル */
 private String title;
 /** 本の売れた総数 */
 private int amount;
 /** 月*/
 private int month;
 
 public Book(String t,int a, int m){
  this.title=t;
  this.amount=a;
  this.month=m;
 }
 
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public int getAmount() {
  return amount;
 }
 public void setAmount(int amount) {
  this.amount = amount;
 }
 public int getMonth() {
  return month;
 }
 public void setMonth(int month) {
  this.month = month;
 }

}

import java.util.ArrayList;
import java.util.List;

public class AmountManager {
 private List list;

 /**
  * 売り上げ情報(1月から4月までとする)をリストにいれる。
  */
 public AmountManager() {
  List books = new ArrayList();
  Book b1 = new Book("もしド○", 30, 1);
  Book b2 = new Book("もしド○", 10, 2);
  Book b3 = new Book("もしド○", 40, 3);
  Book b4 = new Book("もしド○", 100, 4);
  Book b5 = new Book("△△コナン", 60, 1);
  Book b6 = new Book("△△コナン", 90, 2);
  Book b7 = new Book("△△コナン", 10, 3);
  Book b8 = new Book("△△コナン", 40, 4);
  books.add(b1);
  books.add(b2);
  books.add(b3);
  books.add(b4);
  books.add(b5);
  books.add(b6);
  books.add(b7);
  books.add(b8);
  this.list = books;
 } 
 
 /**
  * リストを返す
  */
 public List showAll(){
  return this.list;
 }
}

以下はグラフを書くためのクラスです。ウェブで使えるようにしたのでサーブレットになっています。

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;


public class ChartSample extends HttpServlet{
 @Override
 protected void doGet
  (HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {

  // グラフ生成用の元データを用意
 //(データベースとかでひろってきた場合もリストでもってくれば良いかと)
  AmountManager amountManager = new AmountManager();
  List list=amountManager.showAll();

     // グラフの基となるデータセットを用意
  DefaultCategoryDataset data=new DefaultCategoryDataset();

     // データセットに項目名と値のを順にセット
  for (Book book : list) {
   //addValueの引き数は「縦軸の値, 項目, 横軸の値」の順番
   //ただし、第2引数と第3引数は文字列なので変換が必要
   String xValue=Integer.toString(book.getMonth());
   data.addValue(book.getAmount(), book.getTitle(), xValue);
  }
  
     //グラフを生成
     //第1引数:グラフのタイトル
     //第2引数:横軸ラベル
     //第3引数:縦軸ラベル
     //第4引数:dataset()でつくったオブジェクト
     //第5引数:値の向き
     //第6引数:凡例を表示かどうか
     //第7引数:オンマウスにした際に情報を表示を作成するか
     //第8引数:URLを作成するかどうか
     JFreeChart objCht=ChartFactory.createLineChart
    ("カテゴリーA内商品別 月次売上","月","万円",
    data, PlotOrientation.VERTICAL,
                true,false,false);

      //バイナリ出力ストリームにJPEG形式で画像を出力600×400ピクセル)
     resp.setContentType("image/jpeg"); 
     ServletOutputStream objSos=resp.getOutputStream();
     ChartUtilities.writeChartAsJPEG(objSos,objCht,600,400);      
 }
}



#なんかソースのところに</book>みたいなのが表示されるの何でしょう。。。そんなの書いてないのに、、、(java書くときは抜いてください)



このサーブレットを実行すると、結果が出ます。




割と簡単だし、サンプルみるといろんなグラフが書けそうです。



2011年6月18日土曜日

プロジェクトマネジメントなメモ

プロジェクトマネージャーとかその辺についてググッてみた。
気になったところを箇条書き。あと考えたこととか。
ちなみに、お客様とのやり取りとかはあまり考えず(考えなきゃいけないんだけど)
どう内部をまとめるかというところに、特に注目。

「んー、まあそうだよな」ってことが多いけど、
食事内容をメモするダイエットのように、ブログに残しておけばなんか自分の中で意識が変わるんじゃないかと期待してやってみる。

■PMは座らず動き続ける

→メンバーに安心感を与える意味を込めて、あたふたする必要はないけれども、逆にどっしり構えすぎているのもどうかと。座ってないで立って動いてメンバーの状況を確認する。以下のことについては常に配慮をすべきとのこと。
  • メンバーのスキル,得意分野,苦手分野
  • メンバーの体調,睡眠状況,持病の有無
  • メンバーのモチベーション
  • メンバー間のコンフリクト発生有無

→たぶん自分の場合、上記4点について気を配ることはできるけど、これらに関する問題に気が付いたところでどう対処していいのか、どう行動すべきなのかというスキルが身に付いてないように思われ。

キックオフから「プロジェクトの目的」と「絶対に成功させる」ことを伝え続け、メンバーに「できる」という意識を植え付ける

→「宜しくお願いしまーす」ではなくて「成功させる」ことを伝えるというのは忘れがちかもしれない。これたぶん今日のベストヒットなメッセージ。
言葉ではそんなようなことを言っていたとしても、こっちが強く意識しなければ伝わらないよなー。




進捗状況の「見える化」

→確かに。PMにとっても大事だけど、メンバーに対しても大事。もちろんお客様にも。些細なことでも見える化して共有しよう。ちなみにポストイットをぺたぺた貼るのが自分の身の回り流行ってるけど、なんかもっといい方法ないかなと思っている。
個人的には、ポストイットぺたぺた壁に貼るのってブレスト向きだと思っていて、多人数でリマインド目的で何かを共有するにはあまり向いていない気が。。。(単なる思い込みかもしれないけど)
紙を大きくすればいいのかもしれないけど、そうするとポストイットみたいな貼りやすく剥がしやすい利便性が消え失せる。自分のリマインド用にPCにポストイット貼るのは良いと思うけど、、、むー。


人の意見をよく聞き、アプローチされやすい雰囲気を作り出す
→本当に大事。自分の場合は、ちょっと違うかもしれないけど、笑いの絶えないチームにしたい!wだからくだらないことでも話しかけてくれるような人になりたい。。。



んーやっぱりちゃんとしたページで記事として書いている人たちの、見出しのネーミングセンスの良さと来たら、もうね。


【参考ウェブページ】

2011年6月10日金曜日

jQueryで遊んだ

jQueryなるもので遊んでみました。


jQueryというのは、簡単にいうとすごく短いコードで色々とエフェクトの効いたスクリプトを記述することができるってかんじです。
下にリンク貼ったページに色々とサンプルがあるので、そんなのに比べると非常に中途半端なものなんですけど汗、自分が気に入ったものを色々と合体させてちょっとつくってみました。

ということで、以上のことを実際に実装したテストページはこちら

【その1】折り畳み式のメニュー的なもの
htmlは以下。<dd>と<dl>を組み合わせた単純なもの。
ちなみにスタイルシートでおしゃれにしてます。

<div>
    <dl id="menu">
        <dt>
            <a href="" id="cat1">
            <font color="white">親カテゴリ1</font> 
            </a>
        </dt>
        <dd>
            <a href="#">サブカテゴリー1</a> 
            <a href="#">サブカテゴリー2</a>
        </dd>
        <dt>
            <a href="" id="cat2">
            <font color="white">親カテゴリ2</font> 
            </a>
        </dt>
        <dd>
            <a href="#">サブカテゴリー1</a>
        </dd>
        <dt>
            <a href="" id="cat3">
            <font color="white">親カテゴリ3</font> 
            </a>
        </dt>
        <dd>
              <a href="#">サブカテゴリー1</a>
              <br>
    <a href="#">サブカテゴリー2</a>
        </dd>
    </dl>
</div>

scriptのほうがちょっとややこしいかもです(たぶんもっといい書き方があるんだろうけど。。。)

<!-- 親カテゴリごとにidを振って動作を独立させる。-->
<!-- slideDownで下に出しslideupでしまう。flagをつくって、-->
<!--下に出ているときにクリックしたらしまう。-->
<!--しまった状態なら下に出す。-->

$(function() {
 var flag=0;
 $('#menu dd').hide();
    $('#cat1').click(function(){    
     if(flag==0){
        $(this).parent().next().slideDown();
        flag=1;
        return false;
     }
        if(flag==1){
        $(this).parent().next().slideUp();
        flag=0;
        return false;
        }
       
    });
    
    var flag2=0;
  $('#menu dd').hide();
     $('#cat2').click(function(){    
      if(flag2==0){
         $(this).parent().next().slideDown();
         flag2=1;
         return false;
      }
         if(flag2==1){
         $(this).parent().next().slideUp();
         flag2=0;
         return false;
         }
        
     });
     
     
     var flag3=0;
   $('#menu dd').hide();
      $('#cat3').click(function(){    
       if(flag3==0){
          $(this).parent().next().slideDown();
          flag3=1;
          return false;
       }
          if(flag3==1){
          $(this).parent().next().slideUp();
          flag3=0;
          return false;
          }
         
      });
});


【その2】文字数カウント
htmlは単純にtextフィールドと文字数をカウントしてくれるものを付け足しました。

<div>
        <table>
            <tr>
                <td>感想を一言</td>
                <td><input type="text" class="focus" 
                value="キーワードを入力" size="50" />
                </td>
                <td></td>
                <td><div id="count">0</div></td>
        </table>
    </div>

scriptのほうは、以下なかんじです。

<!-- val()とはテキストフィールドやドロップダウンメニュー等の
value属性を取得・操作するのに使用-->
<!-- focusとはカーソルが合っているとき。blurは離れているとき。-->
<!-- カーソルが合わせたとき書かれている文字が
「キーワードを入力」なら(つまり初期状態なら)空にする-->
<!-- カーソルが合わせたとき書かれている文字が-->
<!--「空」以外なら初期状態にする-->


$(function(){
    $(".focus").focus(function(){
         if(this.value == "キーワードを入力"){
              $(this).val("").css("color","black");
         }
    });
    $(".focus").blur(function(){
         if(this.value == ""){
              $(this).val("キーワードを入力").css("color","gray");
         }
    });
});

<!-- 字数を数える.30字の上限超えたら赤くする.セーフなら青-->
<!-- val()とはテキストフィールドやドロップダウンメニュー等の-->
value属性を取得・操作するのに使用-->
<!-- ここでは、$(this)、つまり指定したエリアのvalue属性を取得-->
その長さを.lengthで取ってきているということ-->
<!-- そしてその結果をcounterという変数に格納。-->
<!-- その後、countというidが振られた
パラグラフエリア(pタグが振られているところ)に
.textで書き出す-->


$(function () {
    $(".focus").keyup(function(){
         var counter = $(this).val().length;
       $("#count").text(counter);
       if(counter == 0){
           $("#count").text("0");
       }
       if(counter >= 30){
           $("#count").css("color","red");
       } else{$("#count").css("color","blue");}
   });
});


いろいろと参考にさせていただいたのは→少しのコードで実装可能な20のjQuery小技集

2011年6月5日日曜日

MySQLにおけるテーブルの作成と更新

MySQLでテーブルをつくってみる。
今回つくるのは


  • タレント表(タレントのID、タレントの名前、所属事務所のID)
  • 事務所表(事務所のID、事務所の名前)


という感じの表をMySQLでコマンドを打ってやっていきます。
また、ここでは事務所表を親表、タレントを子表として、主キーや外部キーも設定してみます。

create table officeTable
(o_id int AUTO_INCREMENT, o_name VARCHAR(20), 
PRIMARY KEY(o_id),index(o_id)) auto_increment=1000, 
engine=INNODB;


o_idというのが事務所IDで、o_nameが事務所の名前。o_idはこのテーブルにおける主キーで、auto increment、つまり自動でどんどん振られていく番号として設定します。そうすることで、だぶりなく、無駄無くIDが振られるわけです。

insert into officeTable(o_name) values('aaaOffice');
insert into officeTable(o_name) values('bbbOffice');

insert文で、レコードを挿入。この後、いろいろやっていくと以下のようになってくれます。



特にo_idを設定しなくても、1000から順番にIDが振られているのがわかります。



次に、タレント表をつくります。

create table t_meibo
(t_id int auto_increment, t_name varchar(20), o_id int, 
primary key(t_id),index (o_id),foreign key(o_id) 
references officeTable(o_id)) 
AUTO_INCREMENT=1, engine=INNODB;

タレントIDであるt_idを主キーとしています。また、先ほどauto incrementとすることで、1から順番にIDを振っていくこととします。さらに、所属事務所のIDは親表である事務所表の事務所IDと同一のものにしたいので、外部キーとして設定します。

では、レコードを登録していきます。

insert into t_meibo(t_name,o_id) values('takahashi',1000);
insert into t_meibo(t_name,o_id) values('tanaka',1000)


無事、登録されました。
ここで、事務所IDとして存在し得ないものを書くと、エラーが起きます。



insert into t_meibo(t_name,o_id) values('takahashi',999);

次回まっではもっとレコードを増やして、テーブル同士の結合などなどに挑戦していきたいと思います。

2011年6月4日土曜日

VBAにおける分岐とループ

分岐とループをテーマに、お年玉プログラムを作成。


からの〜



仕様は以下な感じ。

  • 名前をユーザーに入力させる。
  • 次に年齢を入力させる。
  • お年玉の金額が表示される。
  • 入力がなかった場合は無限に質問を繰り返す。
  • 一行ずつの処理



つかった構文などの紹介はプログラム内にコメントとして書きました。


 Sub Otoshidama()

 'とりあえずA2からスタート。
 '指定したセルに飛ぶには[指定したいセル].Select
 [A2].Select
    
    '現在のセルが空セルになるまでループを回す
    'if を始めたら必ず最後はend ifでif文を閉じる
    Do Until ActiveCell.Value = ""
         If (ActiveCell.Value <> "") Then
             ActiveCell.Offset(1, 0).Select
         End If
    Loop
    
    '----名前入力部分------
    
    '変数定義
    Dim name As String
    
    '値が入力されるまで質問を続ける
    '<>は「〜ではない」、""は空文字を示す。
    Do Until ActiveCell.Value <> ""
    
        'ユーザーに入力させるウィンドウはInputBox
        name = InputBox("お名前は?", "質問その1", "")
         If (name <> "") Then
             ActiveCell.Value = name
         End If
    Loop
    
    
    '----年齢入力部分------
    
    '移動して年齢入力にうつる
    ActiveCell.Offset(0, 1).Select
    
    '変数定義
    Dim ageString As String
    Dim age As Integer
    
    '値が入力されるまで質問を続ける
    Do Until ageString <> ""
        ageString = InputBox("年齢は?", "質問その2", "")
    Loop
    
    '文字列を整数型に変換し、0以上ならセルに入力させる
     age = CInt(ageString)
     If (age >= 0) Then
        ActiveCell.Value = age
    End If
    
    
    '----お年玉金額判定&入力部分------
    
    '移動して年齢入力にうつる
    ActiveCell.Offset(0, 1).Select
    
    If (age < 5) Then
         ActiveCell.Value = 500
    ElseIf (age < 10) Then
        ActiveCell.Value = 1000
    ElseIf (age < 15) Then
         ActiveCell.Value = 5000
    Else
        ActiveCell.Value = "自分で働け"
        
    End If
    
 End Sub


ちなみに、ifの中の条件はカッコでくくってても、カッコが無くてもあっても大丈夫みたいです。
VBAでメソッド分け的なことはどうするんでしょ。。。読みにくくて仕方ない(長いから)。

勉強します。

Mac OS XにPostgreSQLをインストール

今度はPostgreSQLをインストールしてみた。

とりあえず、dmgファイルを、Webからダウンロードするところから始めました。
Download PostgreSQL

そして実行すると以下のようなウィンドウが出てくるので、その中にあるインストーラ的なものをダブルクリック。


パスワードなどを入れて、「いざインストール!」と思いきや、
「Your system seems to be configured with less than 32MB of shared memory ...」的なエラーメッセージが出てきてしまいました。
つまり、共有メモリが足りないらしい。さらに、「READ MEファイルを読みなさい」と書いてあったので、読んでみると、その設定方法っぽいものが書いてあるので、言われた通りにしてみます。

 $ sudo vi /etc/sysctl.conf                                                                      

コマンドを入れると、以下のようなものができます。
(sudoというのは、すべてのファイルに無制限で入れるroot権限でプログラムを実行できるコマンド。viというのは、編集できるテキストエディター的なものらしい。参考ページには、「使いこなすにはすごく苦労するテキストエディターです」と書いてありました。
つまり、/etc/sysctl.confというファイルをroot権限で編集するというコマンドなわけでした)



そして、「esc」を押し、「:wq」を入力してenterを押して、内容保存。
ここでreboot、つまりOS自体を再起動しなければならないので、再起動。
そこからもう一度、インストーラーを開くと、ウィザードが立ち上がりました。

あとは以下のページを参考にするとできます。

参考にしたのは、このページ→Mac OS X で PostgreSQL を使ってみよう

インストールが完了すると、同時に「スタックビルダー」のウィザードが立ち上がりました。これはここで設定しなくても、のちのちできるので別によいのですが、JDBCも使いたかったので、一緒にインストールをしてしまいました。

完成したあとのアプリケーションフォルダはこんなかんじです。



とりあえず試しに起動だけしみます。
一番下にある、「SQL Shell (psql)」を起動します。そうすると、PostgreSQLが起動し(見た目はターミナルですが)、「データベースどうするか」「localhostでいいのか」などなど聞かれるので、特に設定が無い限りはenterを押し続けます。

終了するときは、¥qで終了です。


ひとまず、無事にインストールもできたようなので、今後いじっていこうと思います。


参考ウェブページ:

2011年6月1日水曜日

MySQLでwikipediaデータを遊んでみる~part2

前回のエントリーに引き継き、sqlコマンドをひたすら叩く。

(再び)テーブル要素について整理しますと、

  • cl_to→カテゴリー名
  • cl_sortkey→記事名(厳密にはソートするためにある列だが、英語なので、そのまま記事名となる。例えばこれが日本語だと、「日本語」という記事に対して「にほんご」と振ってある(らしい))
  • cat_page→そのカテゴリに属する記事ページの数


という感じです。

では本題です。

今回は以下の関数を主に扱いました。

<グループ関数>

  • ave(平均を求める)
  • max(最大値を求める)
  • sum(合計を求める)
  • count(行数をカウント)
  • group by(グループ化)
  • having




【各カテゴリーに属してるページ数の各種データを表示】
select AVG(`cat_pages`), MAX(`cat_pages`), sum(`cat_pages`) , 
COUNT(`cat_pages`) from `category`;

他にも、min(最小値を求める)もあります。





【タイプごとのページ数(のべ)を出す】
select `cl_type` , count(*) from categorylinks group by `cl_type`


groupe byは複数の列でグループ化、ここではタイプごとにグループ化しています。




【記事ごとにカテゴリー数を表示する(10以上のカテゴリーに属するもののみ)】
select `cl_sortkey` ArticleName, count(*) CategoryCount 
from categorylinks 
group by `cl_sortkey` having count(*) > 10



havingは中に集合関数を入れたいときにwhere句の代わりに使用します。



結合や副問い合わせについては、別途テーブルを用意したほうがいいなーと感じたので、また後日。

2011年5月31日火曜日

MySQLでwikipediaデータを遊んでみる~part1


今回はwikipediaのデータを使ってちょっと遊んでみました。
Wikipediaは全ての言語版において全てのデータを公開しています。
形式はsqlだったりxmlだったり、ファイルサイズもキロバイトからギガバイト(英語だとテラとか)まで様々です。
今回は、サイズもそこそこで文字化けの心配もないsimpleEnglishのwikipediaのデータを使用しました(特にこの中のこの中のcategoryというものとcategorylinkを使用しました。)。
→データはこちら:http://dumps.wikimedia.org/simplewiki/latest/

この記事で取り上げた句や関数は以下の通りです。

<導入>
  • source
  • describe
  • select
<データの制限&ソート>
  • where
  • 算術式
  • between
  • order by
  • like
  • and と or
<単一行関数>
  • length
  • round
  • mod


どんな脈絡かと言われると非常に困ります。ごめんなさい。


sqlファイルを読み込む際は、以下のようなコマンドを使用します。



【sqlファイルの読み込み】
source filename; 

そうすると以下のようにばーーーーと処理が進み、読み込みが完了します。


中身がはいっているかどうか確認します。
テーブルがどんな構造をしているのか、このようなGUIアプリではだいたいそういう機能がついていますが
コマンドでももちろんそういうものを表示するものがあります。




【テーブル構造を把握する:describe】
describe category;


このように見ていくと、とりあえずたくさん項目があるのがわかります。
簡単に、各項目がどんなことを表しているのかを整理したいと思います(相当ざっくり)。


  • cat_title→カテゴリー名
  • cat_page→そのカテゴリに属する記事ページの数
  • cl_timestamp→記事にカテゴリーが割り振られた時間の記録
  • cl_sortkey→記事名(厳密にはソートするためにある列だが、英語なので、そのまま記事名となる。例えばこれが日本語だと、「日本語」という記事に対して「にほんご」と振ってある(らしい))
では、本格的にSQL文を叩いていきます。


(ここからはGUIアプリのSquel Proで)




【ページ数(降順)で並び替え。カテゴリー名も表示してTitleという別名で表示】
select `cat_title` Title, `cat_pages` from category 
order by `cat_pages` desc


別名を付けたいときは、スペースを空けて、その別名を書く。
並び替えは、order byで出来ます。デフォルトは昇順。降順にするには最後にdescをつけます。
→とにかくstub系(短い記事であんまり役に立たなさそうなもの)が多いようです。




【カテゴリー名の中に[you]という文字列を含むものを表示】
select `cat_title` from category where `cat_title` like '%you%'














likeによって比較してあげています。
%を前につけると、「you で終わる文字列(指定した文字列以前はしばりをつけない)」ということになり、逆に%を後につけると「youで始まる文字列(指定した文字列以後はしばりをつけない)」ということになります。






【カテゴリーページが100より大きいものをカテゴリー名(降順)で並び替える】
select * from category where `cat_pages`>100 
order by `cat_title` desc






【タイムスタンプが2011年5月以降のものを降順で出力する】
select `cl_to` CategoryName,`cl_timestamp` from `categorylinks` 
where cl_timestamp > '2011-05-01 00:00:00' order by `cl_timestamp` 






【上記について、2011年4月から2011年5月までに限定する】
select `cl_to` CategoryName,`cl_timestamp` from `categorylinks` 
where cl_timestamp 
between '2011-05-01 00:00:00' and '2011-04-01 00:00:00'
order by `cl_timestamp` 



算術式が使えます。whereは出したいレコードの制限条件を入れたいときに使います。また、数値だけでなく、日付なんかにも使うことができるようです。
また、○日〜○日みたいな間をとりたいときはbetweenが使えます。
ただし、betweenの場合は、between A and BのAとBの順番に縛りがあります。必ず、A<Bにしないとうまく動きません。
*をつけると、特定の列でなく、すべての列を表示することができます。





【カテゴリーの振られたページが100ページ以上で、かつ、
カテゴリーの名前に「phy」が含まれているものをタイトル降順で表示】


select * from category 
where `cat_pages`>100 and `cat_title` like '%phy%'
order by `cat_title` desc



and は「かつ」、orは「もしくは」の意味を持ちます。2つ以上条件があるときには、andかorでつなぎます。




【カテゴリー名が10文字以上のものを選び出す】
select `cat_title` Title, length(`cat_title`) Length
from category where length(`cat_title`) > 10 


length関数を使うと文字列の長さを測ることができます。






【カテゴリーに属するページ数を四捨五入(1の位)する。
さらに、その結果を7で割って余りが0のものだけを降順表示】

select cat_id, cat_title, round(`cat_pages`,-1) PageCount 
from `category` 
where mod(round(`cat_pages`,-1),7)=0 order by PageCount desc




mod(p,q)で、pをqで割った余りを返します。
また、round(a,b)で、aを小数第b位までの数になるように四捨五入してくれます。マイナスの値を指定すると、1の位/10の位と小数以上のところを指定することになります。

また、ここでは、関数roundとmodを実践しましたが、その他にもwhere句の中で関数を「ネスト」させる(modの中に、さらにroundを入れてあげる)ということもやってみました。

-------
次回は結合や集合関数あたりを頑張ろうと思います。

2011年5月30日月曜日

mainメソッドの引数を可変長引数リストにしてみる

筆記な勉強をしていたら出てきたので、メモ。

普通mainメソッドは(ここでいう「普通」とは、教科書とか参考書とかEclipseの補完的な意味で)mainメソッドはこんな感じで書くはず。

public static void main(String[] args) {
  //なにかしらの処理
}

String[]的な。
だけども、ここで、[]の代わりに「...」なるものが使えるなど。
可変長引数の定義として、可変長にしたい引数の型の後ろに「...」をつけるとできる。
つまり、以下のような形です。


public class VariableArgument { 
 public static void main(String... args) {
  for (int i = 0; i < args.length; i++) {
   System.out.println(i+":"+args[i]);
  }
 }
}

で、試しに引数に色々入れてみた結果、ちゃんと動きました。



2011年5月28日土曜日

MySQLの設定など

MySQLをインストール&ダウンロード&いろいろ設定。

1年くらい前にはwindowsマシンに入れたけど、失敗したりして、アンインストールとインストールを繰り返していたら、おかしなことになったので、今回はMacに。かつ慎重に。
(なのでこれから初めてインストールする人も気をつけてください。ちゃんとアンインストールすればいいのだけど、たまにゴミが残ったりして非常に面倒です)

まず、ダウンロード&インストールはこちらを参考にさせていただきました。
MacOSXにMySQLをインストールする方法

また、以前Windowsに入れたときには、こちらのページを参考にさせていただきました。SQLについても色々書いてあるので、初心者にとってはとても丁寧なページで感謝感謝です。
MySQL初心者入門講座


で、本題に戻りますと、ダウンロードに関しては、イーモバでも20〜25分程度で完了しました。インストールも若干バージョンが違ったりしますが、たいていは問題なく進めます。
最後のシステム環境設定のところで、いちいちサーバーをstartさせたりstopさせるのが面倒くさい人は、チェックボックスにチェックを入れると良いと思いますが、なんか重くなったら嫌だなと思って(たぶん大丈夫ですけど)、チェックを入れませんでした。私は。まあ毎日使うもんでもないし、データベースでなんか研究するわけでもないし。。。

そして最後に設定。ターミナル上で以下のコマンドを打ちます。

$ cd /usr/local/mysql
$ ./bin/mysqladmin -u root password '設定したいパスワード'

これで完了です。試しにターミナルから接続してみます。
EnterPasswordのとこで先ほど設定したパスワードを入力すると以下のようになり、接続完了(文字ちっちゃ。。。)。

今まで「$」だったのに、「mysql」になってることを確認してください。
というわけで、ちょっといじってみる。
mysql> show databases;


データベースの中を確認。デフォルトで入っている3つが示されました。


で、さらにさらに、ターミナルで操作するのはちょっと味気なかったら、GUIアプリケーションをダウンロードするのがbetterです。
今回は、Sequel Proというものを入れてみました。

参考→高機能なMySQLフロントエンド「Sequel Pro」


ダウンロードして解凍し、中にあるファイルを実行すると以下のようなウィンドウが開くのでこのアイコンをそのままアプリケーションにコピー。

実行すると、以下のようなアプリケーションが起動するので色々入力してみる。


私の環境では、

Name:適当
Host:localhost
Username:root
Password: MySQLのときに設定したパスワード

で、何度も入力するのはめんどくさいので「Add to Favorite」をクリックして、「Connect」。

そうすると、先ほどのターミナルで表示したときと同じように、SQL文を入れれば色々と操作ができるようになったわけです。

次の記事では具体的にデータを入れて、色々遊びたいと思います。

2011年5月26日木曜日

Eclipseの文字コード問題

他の人がつくったJavaプロジェクト(Eclipseからエクスポートされたもの)を
自分の環境でインポートするとき、結構な頻度で文字化けが起こる。
コメント等を英語で書けば、別にそんなことを考えなくても良いけど
そんなことも言えないときがある。

いままで、ファイル単位で文字コードを直してたんだけど、Eclipseの設定として出来るのを最近知った。。。

Win:「ウィンドウ→設定→一般→ワークスペース」
Mac:「環境設定→一般→ワークススペース」




ちなみに、ファイル単位も。

「右クリック→プロパティ」もしくは「編集→「エンコードの設定」