どちらかというとごはん派

主に仕事用のメモブログ。

【bash】 ステータス

2008年10月31日 17時27分18秒 | linux bash
bash実行時のステータスは以下の2通り

0:正常終了
1:異常終了

設定ファイルで追加することは可能。

取得方法は「$?」で取得

■使用サンプル
 $ if [ "$?" == 1 ];then
 $ echo "異常終了しました。"
 $ fi
 exit 1
 
最後の「exit 1」は、このプログラムをエラーコード1で終わらせる。という意味。
これがないと、bashのファイルは、
続けられる限り処理を進めてしまうので、エラーを検知したら
ちゃんと終わらせましょう。

■ 2008 クリスマスコフレ 

2008年10月29日 10時03分26秒 | shop
今年の気になるクリスマスコフレ
個人的に気になったランキングを紹介。

■1位 ルナソル
 シルバーのクラッチ型のポーチに、
 アイシャドウとリキッドアイライナー。
 チークにネイルカラーのセットで6,825!
 これは絶対に買い!
 お買い得な上に、セットでよくある「これは使わないな」もないし!
 ルナソルを体験してみるにもオススメ♪
 
 普段アイシャドウだけでそれぐらいするから、CP高し。
 ルナソルのアイシャドウは発色がいいので、とっても気に入っている。
 カラーも、パール系とブラウン系とパステル系が入っているので
 季節を問わず長く使える。
 
 春先には目の際だけブラウンでピンク&パールで全体を華やかにしてみたい。
 
 
 ルナソルのページ
 http://www.kanebo-cosmetics.jp/lunasol/cofflet_08.html
 
 
■2位 ボビーブラウン
 クリスマスコフレぢゃないけど、限定品。
 基本的にBOBBIE大好きなので、ちょっと贔屓目。
 
 私はリップパレットは、あまり使い道ない色かなと思ってるけど、
 アイパレットはかなり琴線に触れました。
 ライトカラー1色、ミディアムカラー2色、ダークカラー1色ってなんて使いやすい!
 ルナソルのような華やかさとは違うけど、色味がはっきり出るBOBBIEならではのブラウン!
 
 BOBBIEはブラウン系はまずはずれがないので、かなり気になっています。
 ただ、ルナソルと比べるとちょっとお得感はないなーと。
 



 
 BOBBIEのページ
 http://www.bobbibrown.co.jp/templates/products/mp.tmpl?CATEGORY_ID=CAT14872
 
■3位 クリニーク
 実はクリニーク使ったことありません。
 でも、今回セットで挑戦しようと思いました!
 
 だってすごいお得なんです。
 白いポーチの方が、
 ●ダーマ ホワイト SP シティ ブロック 40[医薬部外品](30g/現品)
 ●テイク ザ デイ オフ クレンジング オイル(30mL)
 ●ダーマ ホワイト モイスチャー バー(30g)
 ●ダーマ ホワイト アドバンスト ブライトニング エッセンス[医薬部外品](9mL)
 ●ダーマ ホワイト モイスチャー クリーム[医薬部外品](6g)
 ●オリジナル ポーチ(H70×W180×D60mm)
これで6,825!
 

多分実物は1つ1つ小さいんだろうけど、
2週間位試してみるにはいいし、とってもお得だし、なんと言ってもポーチがかわいい!

もうひとつは
 ●「スーパーモイスチャー メークアップ」、「パーフェクトリー リアル メークアップ」、「パーフェクトリー リアル スーパーファイン コンパクト メークアップ 15」のうちひとつ選択(現品)
 ●テイク ザ デイ オフ クレンジング バーム(13g)
 ●シティ ブロック 25 N(7g)
 ●オール アバウト アイ コンシーラー 01(ミニサイズ)
 ●ラッシュ パワー マスカラ ロング ウェアリング フォーミュラ 01(ミニサイズ)
 ●オリジナル ポーチ(H90×W150×D55mm)

 これだけ入って6,300!
 
 
 ポーチが白いほうがかわいいので、私はこれを買うつもりです。
 それに、白いほうはスキンケア系でベージュのポーチのほうは
 ファンデーション系なので、クリニークはスキンケア系が気になっている私としてはこちらが気になる。


■その他
 ①あとは、ラッシュのクリスマスセットも気になる。
  だけどラッシュって、セットで買っても全然お得ぢゃないし、
  むしろ箱代取られて高くつくし。
 
  気になるけど、お店でチェックして単品買いかな。
 
 
 ②あと、みんな大好きjillstuart!
  毎回毎回ほんとにかわいい!!
  クリスマスパーティーなんかに絶対いいよ。このアイパレット!!
  
  だけどやっぱパーティ仕様なんだよなー・・・。
  普段ブラウンメイクの私にはちょっとハードルが高い。。。
  
  ポーチやミラーもかわいいしね。
  きっとしばらくあのポーチ持ってる子見るだろうな♪
   

 ③NARS大好き!
  なので、買おうと思っていたけど、ちょっと今回はパスかな。
  アイパレットとペンシルとポーチで9,450だし、
  アイパレットがあまりいけてない・・・。
  
  ベージュ系が得意なNARSにはとっても期待していたけど、
  クリスマスコフレってことで多分ビビットな感じになったのかもね。
  
  かわいいけど、使わないかな。。。残念。
  使わなかったらもったいないもんね。
 
  
1位~3位は全部ほしいな~って思ってるけど、売り切れちゃったら悲しいから
しばらく近所のデパートをチェックしよう。

早く帰れたらね・・。

  

 
 

【java】 環境変数を取得する方法

2008年10月27日 17時33分37秒 | java
実行するOSの環境変数を取得するには

System.getenv("環境変数");
とする。

例:設定されている環境変数-------------------------
  $TEST=/usr/test/test.txt
  
  javaで実装-------------------------------------
  String str = System.getenv("TEST");
  System.out.println("環境変数$TESTの値:" + str);

  結果-------------------------------------------
  環境変数$TESTの値:/usr/test/test.txt
  


以上。

■ EATALY 代官山

2008年10月26日 05時00分46秒 | shop
オープンしたばかりの土曜日なのに、人は少なめ。
敷地はあまり広くないけど、テラスがあるので開放的。

お買い物スペースは、Dean&Delucaのイタリア版といった感じで、
日本のスーパーでは見れないような、生ハムの本体やパスタの形状があって
少しわくわくした。

お惣菜も買って帰れるので、家で作れそうにないものはとても魅力的。

ただ、食べるところは最悪。死ねばいいのに。

EATALYのために代官山に行ったわけではないので、
予備知識がなかったのがいけなかったのか、
みんなお買い物スペースのすぐ横で食べていたので(壁はなし)
お惣菜を買って食べているのか、システムがわからず、
「でも、食べれたら食べたいね~」なんてキョロキョロしていたのに、
ウェイターさんはフルシカト。

声をかけたのに「ちょっと・・」と待てのポーズ。
「ちょっとお待ちください。」も言えないの・・?
しかも偉そうな人だったから、尚更テンション↓でした。

メニューの説明もないし、お手洗いを聞いても「あっちです」と指差すだけ。
近くまでエスコートしろとは言わないが、あまりにもわかりにくいところで
遠いとこだったので(反対の建物の一番奥。しかも1個しかない。)、
もう少しきちんと対応するべきだと思う。

味は正直普通。価格は土地価格が入ってたとしても、高いと思った。
はっきりいっておいしくないし気分が悪かったので、二度といかない。

椅子も座りにくいし、定員が椅子にぶつかってくるし、とにかく最低の店だった。
オーナーらしきイタリア人風の男が、キッチンでいろいろ指導してたけど、
それより接客みとけよ。と思った。
支配人っぽい日本人も、接客は最低レベル。
アレが偉いなら、他はクズだと思う。

■EATALY 代官山
 http://www.eataly.co.jp/welcom.html

■場所

【java】 postgreSqlのオートコミットの対応

2008年10月26日 04時17分00秒 | java
oracleと違い、postgresqlはオートコミットである。
オートコミットとは、勝手にコミットされることである。

たとえば、日次のバッチ処理で、
テーブルをdeleteまたはtruncateして、
新しいデータをInsertしている業務などでは、
Insert中にこけてしまうと、とても困る。

①テーブルのデータをすべて削除する

②オートコミットでコミットされる。(テーブルは空)

③Insertするが、途中でこける

④エラーをキャッチし、ロールバックする。

こういう風になっていると、②でコミットされているから
④でロールバックしても②の後のじょうたいになるだけだから、
データは空っぽ。
オンラインの商品情報などを扱っていたらとても困る。

①→③→④と進めば、ロールバックしたとき
①の前になるので、運用としては理想。

そこで、javaではオートコミットをオフにすることが可能なので、紹介。

import java.sql.*;

public class Update {

  public static void main(String[] args) throws SQLException {

  Connection conn = null;
  PreparedStatement stmt = null;
  String url = データベース接続アドレス;
  String name = ユーザー名;
  String password = パスワード;

  try {
   DriverManager.registerDriver(new org.postgresql.Driver());
   conn = DriverManager.getConnection(url,name,password);

   /* 自動コミットを無効にする。 */
   conn.setAutoCommit(false);

   stmt = conn.createStatement();
   /* SQLの実行 */
   stmt.execute("insert into sample_table values (08,'太郎');");
   /* コミットする。 */
   conn.commit();

   } catch (SQLException ex) {
   /* 例外発生時はロールバックする。 */
   conn.rollback();
  } finally {
   if ( stmt != null ) {
    /* Statement クローズ */
    stmt.close();
   }
   if ( conn != null ) {
    /* コネクションクローズ */
    conn.close();
   }
  }
 }
}

【postgres】 pgAdmin3

2008年10月25日 04時30分01秒 | postgres
■紹介
 コマンドが苦手、SQLが苦手の場合で、postgresを使用している方。
 pgAdminというものがあります。
 
 GUIの操作で、設定ファイルを書き換えたり、
 テーブルを作成したり、データを入力したりできます。

 cseなどのSQL開発支援ツール+Adminの操作もできる
 postgresを使用している人はとても便利だと思います。
 
 http://www.pgadmin.org/download/windows.php

 上記のURLにアクセスして、ダウンロードしましょう。

 ちなみに私はUNIXですべて設定終わってから知ったので、
 テーブルの構成を変えたり、データの確認にしか使ってませんが・・
 (しっかり使ってみたかったです。)
 とても使いやすいです。

 cseとかObjectBrowserとか使えれば、誰でも使えますよ!


【java】 prepareStatementとstatementの違い

2008年10月24日 04時01分43秒 | java
①statementと違い、SQLに?を含ませてから、
 値をセットするため、nullの処理が楽になる
 例:
 ■statementだと・・
  // 値を設定
  String id = "001";
  String name = "太郎";
  String phone = null; //nullにする
  
  StringBuffer sb = new StringBuffer();
  sb.append("insert into t_table (id, name, phone) values ('");
  sb.append(id);
  sb.append("','");
  sb.append(name);
  sb.append("','");
  sb.append(phone);
  sb.append("')");
  
  この場合t_tableというテーブルのphoneという値には、nullという
  文字列が入ってしまう。null許可している項目の場合、
  '←これが邪魔になる。
  if分で文章を構成しないといけない。
  
 ■prepareStatementだと・・・
  String str = "insert into t_table (id, name, phone) values ( ?, ?, ? )";
  st.setString(1, id);
  st.setString(2, name);
  st.setString(3, phone);
  
  とすれば勝手に文字列は文字列としてInsertされて
  null値の場合、nullが入るため、とても便利。
  
②①と似ているが、「'(シングルコート)」が入った文字列も問題なく入る。
 先ほどのnameが、「bobb'ie」とかいう名前(・・・。)の場合、statementだと
 正規表現せねばならないが、prepareStatementだと問題なし。

③スピードが違う
 1万件ほどのデータをInsertした場合、prepareStatementだとstatementの倍ぐらい早い。
 
◎結論◎
 DBの取り扱いはprepareStatementを使うこと!!!!
 
●最後に・・・
 主な使用方法を明記しておく
 
 Connection conn = null;

 try {
  conn = DriverManager.getConnection("DBに接続するためのURL", "ユーザID", "パスワード");

  String sql = "insert into kabukatable (code, company) values (?, ?)";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.setInt(1, 4755);
  pstmt.setString(2, "(株)ABC");

  int num = pstmt.executeUpdate();

 }catch (SQLException e){
  System.out.println("SQLException:" + e.getMessage());
 }
 
 ちなみに、executeUpdate()だと件数が帰ってくるので、
 いらない場合には、execute()だけでおk。
 
 あとあと、タイムスタンプを設定したい場合は、
 setTime(1, time);とかってする。

【bash】 配列のあれこれ

2008年10月21日 23時22分03秒 | linux bash
bashはshellと違って、foreachが使用できないので
もし同じような利用を求める場合には、配列を利用すること

■配列の設定
array=(1 2 3 4 5)

■使用方法
$ for num in ${array[@]};do

$  echo ${num}

$ done

■結果
1
2
3
4
5

■+@として・・
$ array=(a b c d)
$ i=0
$ while [ $count -le 4 ];do
$ echo "${array[i]}"
$ i=`expr $i + 1`
$ done
1
2
3
4
5
これも同様の結果を得る。
配列の要素は0からはじまる(cやjavaと同じ)

■豆知識
①まずは5つの変数に値を設定
str1=A
str2=B
str3=C
str4=D
str5=E

②変数を配列に格納
array=($str1 $str2 $str3 $str4 $str5)

③表示
$ for num in ${array[@]};do

$  echo ${num}

$ done
A
B
C
D
E

ここまでは問題ないが、、、、
もし①を下記のようにした場合
str1=A
str2=B
str3=
str4=D
str5=E

結果は以下のようになる
A
B
D
E

つまり配列は左詰めで格納されるということ。

仮にこんなロジックだと困ってしまう。
$ for num in ${array[@]};do
$ if [ "$num" = "" ];then #空白だった場合
$ echo "空白です。"
$ else
$ echo "値が入ってます。"
$ fi
$ done
値が入ってます。
値が入ってます。
値が入ってます。
値が入ってます。
空白です。

これ、3番目が空白なのに左詰にされたことで5番目が空白のように見える。
もし空白であるなしで処理を変えるようであれば、間違った処理をしてしまう。

もし結果を
値が入ってます。
値が入ってます。
空白です。
値が入ってます。
値が入ってます。

としたい場合には、

array=("$str1" "$str2" "$str3" "$str4" "$str5")
とダブルコート(")で囲ってあげましょう。

【bash】 シェルからjavaを呼ぶ ②文字コード編

2008年10月16日 17時59分05秒 | linux bash
【bash】 シェルからjavaを呼ぶ ①実行編では、
単純にシェルからjavaを呼んで、プロンプト表示させただけなので、
文字コードについて意識することはなかったと思いますが、

以下の様に、シェルとjavaで共通したファイルを使用することにより、
文字コードの問題にぶつかります。

まずはjavaファイル。これは①実行編と一緒です。
Test.javaの中身-----------------------------------------
public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  System.out.println("Javaファイルを実行!");
 }

}
--------------------------------------------------------

シェルのファイル。ここでちょっと細工します。
Test.shの中身-------------------------------------------
#!/bin/sh
LOG_FILE=/test/log/test.log    ←①ログファイルの場所とファイル名を設定
echo "Test.sh開始" > $LOG_FILE  ←②シェルログをログファイルに出力
java Test >> $LOG_FILE  ←③javaを実行、出力内容をログファイルに出力
echo "Test.sh終了" >> $LOG_FILE  ←④シェルログをログファイルに出力
--------------------------------------------------------

実行するコマンドを叩く
$ sh Test.sh

出力されたログファイルを確認します。
test.logの中身------------------------------------------
Test.sh開始
Java繝輔ぃ繧、繝ォ繧貞ョ溯。鯉シ・
Test.sh終了
--------------------------------------------------------

③ではいたJavaファイルの出力の部分が文字化けしています。
これは、シェルとログファイルがShift-JIS形式で、
JavaファイルがUTF-8形式であるために起こっているのです。

シェルは、Windows上でメモ帳か何かで作成してLinuxサーバに上げて実行すると、
特に文字化けせずに動作するので、Shift-JISになっていることが多いのです。
また、Shift-JISのシェルでログファイルを作成しているので(②の所)
ログファイルもShift-JISになる。

そしてJavaファイルは、Eclipceやメモ帳などで作成しLinuxサーバに上げても、
UTF-8でないとコンパイルできないので、ファイルをUTF-8に変換するかUTF-8でコンパイルし実行する。

結果、Shift-JISのログファイルにUTF-8のjavaのログが出力されるので、
上記の様な文字化けがおこる。

解決策は簡単。
シェルをUTF-8で保存、サーバに上げること。
そうすればシェルがUTF-8になる→ログもUTF-8になる。
→javaもUTF-8→みんなUTF-8になる。

以上。


ちなみに結果は以下の通り
test.logの中身------------------------------------------
Test.sh開始
Javaファイルを実行!
Test.sh終了
--------------------------------------------------------

余談ですが、シェルをShift-JISのまま実行させたい場合には、Javaファイルの出力をShift-JISにしてあげればよい。
つまり、合わせることが重要。

Javaファイルの出力をShift-JISにするのは、FileInputStreamクラスを使用して、
出力時の文字コード指定をする。
(やり方は書きません。UTF-8に合わせればよいと思っているので。)