DB2のSUM関数やAVG関数で算術オーバーフローを回避する方法

データ型がintegerなどのカラムの演算で算術オーバーフロー(SQL0802N Arithmetic overflow or other arithmetic exception occurred. SQLSTATE=22003)が発生したときの対処法。

SELECT SUM(BIGINT(xxx)) FROM table

bigint関数やdecimal関数でデータ型を変換すれば、オーバーフローを防ぐことができます。

日本語ファイル名の文字コードを変換するスクリプト

以下はSJISの日本語ファイル名をUTF-8に変換する例。
コマンドはiconvを使用するので、ほとんどのOSで動作するはず。


追記:文字列と文字コードの組み合わせによっては上手く動作しない(文字化けしたファイルのmvで失敗する)ことがわかったので、Perlで書き直しました。
日本語ファイル名の文字コードを変換するスクリプト(Perl版) - myhd

#!/bin/sh
for sjis_name in `find .`
do
  utf8_name=`echo "${sjis_name}" | iconv -f SJIS -t UTF-8`
  if [ "${sjis_name}" != "${utf8_name}" ]; then
    mv "${sjis_name}" "${utf8_name}"
  fi
done


使える文字コード

iconv -l

で確認できます。


ちなみに、世の中にはconvmvというツールがあるらしいので、リッチな環境の方はそちらを。

Linuxでファイル名の文字コードを変換する(文字化けを直す):while(1) { ;}:So-netブログ

psコマンドの結果からプロセスIDを取得するときはcutではなくawkを使う

cutとawkの違いを読み間違えた件について、懺悔というか反省文。


目的:
以下の出力結果からpsコマンドのプロセスID(1234)を取得したい。

$ ps -ef | head -n 3
UID        PID  PPID  C STIME TTY          TIME CMD
myokoym   1234     0  0 12:34 pts/0    00:00:00 ps -ef
myokoym 999999     0  0 12:34 pts/0    00:00:00 head


手順:
該当行をgrepコマンドで抽出し、スペース区切りで2番目のフィールド(カラム)を取得する。

cutの場合

最初はcutを使ってみます。

$ ps -ef | head -n 3 | grep "ps -ef" | cut -d" " -f2

何も出力されません。試しにheadのプロセスIDを取得すると、

$ ps -ef | head -n 3 | grep "head" | cut -d" " -f2
999999

こちらは取れました。どうも、cutだとスペースが連続する場合に上手く取れない様子。スペースの数だけフィールド数が増えてしまっています。

$ ps -ef | head -n 3 | grep "ps -ef" | cut -d" " -f4
1234

ちなみに、cutのデフォルトの区切り文字は「タブ」です。

awkの場合

それに対して、awk(オーク)ではデフォルトで「1個以上の連続スペース」または「タブ」が区切り文字として扱われるため、以下の通り、きちんと取得できます。

$ ps -ef | head -n 3 | grep "ps -ef" | awk '{ print $2 }'
1234

(特殊変数の$1、$2・・・に、1番目のフィールド、2番目のフィールド・・・が入っている)





というわけで、スペース数が不定の場合はcutではなくawkを使うのが賢明だと思います。Mさん、ごめんなさい。今度ワイン一杯おごります。

Ubuntu11.04の端末にバックスラッシュを表示する方法

Ubuntu11.04日本語環境の端末は、デフォルトではバックスラッシュが半角¥記号で表示されています。しばらくはそのまま使っていたのですが、Linuxならバックスラッシュだろう!と思い立ち、変更できないか挑戦してみました。


調べてみると、使用するフォントに拠るとのこと。昔のUbuntuVLゴシックというものがデフォルトだったそうなので、それを採用することにします。


http://vlgothic.dicey.org/


まずはフォントをインストール。Ubuntuソフトウェアセンターから「vlgothic」で検索するか、端末で以下のコマンドを実行します。

$ sudo apt-get install ttf-vlgothic


端末を開いてみると、デフォルトではこの通り。牛さんが残念なことになっています。


端末のフォントは右クリックメニューからプロファイルを選択して変更できます。


フォントの部分をクリックし、VLゴシックを選択。



こちらが変更後。牛さんがきちんと表示されました!


比べてみると、なんだか縦に長くなっています。見やすさはいい勝負かと。







日本語のフォントも少し特徴的ですが、個人的には嫌いじゃないので満足です。 ;-)

初スマホ(IS12SH)感想(1)導入編

ついに携帯をスマートフォンにしました。機種はIS12SH(Android au with Google)。
感想やauショップのお姉さんに聞いたことをつらつら書きます。

  • 初期費用0円(ショップによる?自分はオーロラタウンauショップで)
  • 毎月の上乗せ料金は24回分割で約3000円ー毎月割適用で1700円割引→機種代は実質3万くらい?
  • 今月はダブル定額のままだけど、PCサイトビューア使用時の金額と同じ扱いになる。
  • ISフラットは上記のダブル定額PCサイトビューア使用時の上限額より525円安い。ただし使わなくても定額。
  • 充電器はスマホ用を新たに購入。
  • 充電器はアダプタにUSBが刺さってる作りになってて、それをPCに繋げば通信可。
  • ガラケーからのデータ引継ぎはショップではやってくれない
  • アドレス帳はGMailの連絡先を経由して同期。
  • 具体的には、GMailエクスポートしてから、IS12SHで設定→アカウントと同期→Googleアカウント→連絡先を同期。
  • EZWebが使えなくなるため、有料サービスは事前に解約すると楽。(IS12SHは可能だけど、機種によっては解約不可)
  • ケースと保護シートは、au純正のシリコンケースとマット加工シートを別々に購入。とりあえずこれでしばらく使ってみる。
  • 白の本体に黒のケースつけたら見た目がアンドロイドっぽくなった。3D用のツインカメラが目に見える(笑)


auのEメール(@ezweb.ne.jp)も使えているので、特に問題はなかったです。今は無造作にアプリ入れたりアプリ開発の勉強したりしてます。とりあえずアラームアプリがちゃんと動くことを確認してから寝よう・・


スマートにプログラミング Android入門編

スマートにプログラミング Android入門編