2009年12月25日金曜日

GAE/Jでメール送信

Java.mailクラスを使えるようにする為に

mail.jar
activation.jar
クラスをeclipseから参照できるように設定。

importは下記項目をimport
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


ソースは下記ソースで送信可能
//メールを送信する。
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

try {

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("aaa@gmail.com", "送信者の名前", "ISO-2022-JP"));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress("bbb@yahoo.co.jp")); //送信先のメールアドレス
msg.setSubject("メールの件名", "ISO-2022-JP");
msg.setText("メールの本文", "ISO-2022-JP");
Transport.send(msg);

} catch (UnsupportedEncodingException e) {

// } catch (AddressException e) {
// ...
} catch (MessagingException e) {
// ...
}
}

2009年12月24日木曜日

ExcelVBA SUM関数をセットするsub関数

Sub setSumKansuu(ByVal taisyouCol As Integer, ByVal lastRow As Integer)
MaxUpRow = 2
セル範囲 = "R" & MaxUpRow & "C" & taisyouCol & ":R" & lastRow & "C" & taisyouCol
数式 = "=SUM(" & セル範囲 & ")"
Range(Cells(lastRow + 1, taisyouCol), Cells(lastRow + 1, taisyouCol)).FormulaR1C1 = 数式
End Sub

引数に対称列と最終行を渡す。
また
最終行を取得は下記関数で取得できる。
ActiveCell.SpecialCells(xlLastCell).Select
最終行を変数にセット
MaxDownRow = ActiveCell.Row

2009年12月18日金曜日

Excelマクロ シートの値取得、検索

シートの値を取得する方法
Worksheets("シート名").Cells(列, 行).Value



検索ロジック
Set objFind = Worksheets("シート名").Cells.Find(What:=検索する値, LookAt:=xlWhole, After:=Cells(1, 2), SearchOrder:=xlByRows)

If Not objFind Is Nothing Then
strAddress = objFind.Address

Do While Not objFind Is Nothing
lngYLine = objFind.Cells.Row
intXLine = objFind.Cells.Column
  MsgBox ""

IF 見つかった場合の処理


'次のデータを検索
Set objFind = Worksheets("出力").Cells.FindNext(objFind)

'最後のデータの場合
If strAddress = objFind.Address Then
Exit Do
End If
Loop

End If

Excelマクロ シートの値取得、検索

シートの値を取得する方法
Worksheets("シート名").Cells(列, 行).Value



検索ロジック
Set objFind = Worksheets("シート名").Cells.Find(What:=検索する値, LookAt:=xlWhole, After:=Cells(1, 2), SearchOrder:=xlByRows)

If Not objFind Is Nothing Then
strAddress = objFind.Address

Do While Not objFind Is Nothing
lngYLine = objFind.Cells.Row
intXLine = objFind.Cells.Column
  MsgBox ""

IF 見つかった場合の処理


'次のデータを検索
Set objFind = Worksheets("出力").Cells.FindNext(objFind)

'最後のデータの場合
If strAddress = objFind.Address Then
Exit Do
End If
Loop

End If

2009年12月10日木曜日

google app engineでpicasa web albumと連携(初期設定)

開発環境の初期設定
http://code.google.com/p/gdata-java-client/downloads/list
gdata-src.java-1.x.x.java.zipを落とし、jarファイルをインポートする。

appengine-web.xmlに



を追加する。

コーディングして実行した所
java.lang.NoClassDefFoundError: com/google/common/collect/Maps
と言うエラーが発生した。
google-collect-1.0-rc5.zip
と言うファイルを解凍し、jafファイルをインポートする事で解決する。

phpの開発環境

vertrigoservを教えてもらったけど
初期設定ほぼ不必要でphp実行環境を手に入れられる。
またwebサーバーを簡易に立てたい時にお勧めかも。

2009年12月9日水曜日

google app engineでSessionを利用する方法

GAEでSessionを使用可能にする方法
appengine-web.xmlに下の一行を追加する。
true

後は普通にJAVAで記述すれば良い
HttpSession session = request.getSession(true);
session.setAttribute("Id", Id);

google app engineのインストール

今回JDK+プラグイン+日本語化がセットになっているのがあったらので
そちらを使用する事に。
(日本語 Eclipse Pleiades All in One Java)
個別にインストール + Eclipse 3.5(Galileo)も使えるみたいなのでそちらを使用
(google App Engineと日本語化パッチも3.5用の物を使用する。)


Eclipseインストール後、タブの中から
Help→Software Updates
→Available Software→Add site
※最後の3.5とかはバージョンらしいので各バージョンにあった物を使用

http://dl.google.com/eclipse/plugin/3.5




●JSPについて

基本的に
JSP → サーブレット → JSP
の流れになる模様。

・JSPはhtmlタブとJAVAの混合
・サーブレットは完全にJAVAによって動くページ?

上記のJSPとサーブレットを組合す事によって分離コードにする事ができる。
サーブレット/JSPを使ったアプリケーションでは、サーブレットで処理を行い
JSPで表示するといった使いが可能。

またサーブレットにアクセスする際の設定をweb.xmlでマッピングを行い設定する。
サーブレットからJSPに処理を移すには、RequestDispatcherオブジェクトのfowardメソッドを使う。
RequestDispatcherオブジェクトは、requestから、getRequestDispatcherメソッドに処理移行先の
JSPファイル名を指定して呼び出す。
fowardメソッドの引数にはrequestとreaponseを渡す。

2009年12月4日金曜日

クラウドについて

amazonからAWS(amazon web service)と
googleからGWE(google app engine)の
二つのクラウドを開発する環境が提供されているが、
AWSはOSの選択を選択肢、全て自分で実装する事が可能みたい。
Windows + IIS + asp.netでも
Linux + apatch&tomcat + jsp/php でも
どちらでも使用可能
しかもウィンドウズのイメージ等容易されていて
Windows2003Serverを使い始めるのに物の数分で構築できるらしい。

google App engineは使用できるのはjspのみで動作環境は
google側で用意されている。DBもgoogle側で用意されているので
いきなりプログラムが始める事が可能。
500MBまで無料使えるしメンテ等考えたら個人で使うにはgoogleの
方がよさそう。

2009年11月11日水曜日

LinuxでFTP接続する方法

・ftpコマンドを実行する。
ftp [アドレス]
でFTP接続できる。

接続後、userとpasswordを聞かれるので入力
helpコマンドでコマンドを見る事ができる。

!でftpモードから抜ける事が可能
get [ファイル名] でファイルをダウンロードする事ができる。

2009年10月28日水曜日

日付の加算

日付の加算だが、型によって加算方法が違うのでメモ

●DATE型
一ヶ月後
+CAST('1 months' AS INTERVAL)

例)
TO_DATE('2009-09-01' , 'YYYY-MM-DD') + CAST('1 months' AS INTERVAL)

●TIMESTAMP型
一ヶ月後
+ '1 month'

2009年10月13日火曜日

在庫数調整

・現在在庫数は下記個数から求める事ができる。
現在在庫数 = 月末在庫数 + 入庫数(納品数) - 出荷数 + 再生数 - 移動入庫数 + 移動出庫数


・月末在庫数は棚卸画面で変更可能とする。
ただし上記の式より、月末在庫数を変更させると現在在庫数も変更させる必要がある。


先月納品分を入力の場合は月未在庫数と現在在庫数を増加させる。
ただし、棚卸調整後は上記を反映させない。

各在庫が動くと思われる動作に反映させる
・納品
・出荷完了
・オーダーキャンセル
・返品
・移動
・再生

また在庫数は上記計算より、Viewで求める事ができるが、
速度の関係上計算後の結果をtableで保持した方が良い?(要検討)

2009年9月30日水曜日

動作を中断する方法

①psコマンドでプロセスIDを確認する。
②killコマンドを使用し該当のプロセスIDを終了させる。

在庫管理システム

在庫管理システムの設計のヒント

在庫の増減がある場合

・納品時
・在庫場所移動時
・オーダーがあり出荷完了時
・オーダー返品時
・棚卸時(月末在庫調整) ←※特殊 月末繰越数調整


・在庫数調整 ←在庫数をいきなり変えてしまう。
 (これを行うと下記計算に狂いがでるので使うかは要検討が必要)


●月末在庫調整の考え方

月末繰越数 + 納品数 - 出荷完了数 = 現在在庫数

となるので月末繰越数を動かす場合には現在在庫数も同時に
増減させる必要がある。

2009年9月16日水曜日

郵便番号データ(CSV)

郵便局からダウンロードしたCSVデータのテーブルの生成SQL

CREATE TABLE zip_cod (
jiscode integer NOT NULL,
zip_old integer NOT NULL,
zipcode integer NOT NULL,
ken_kana varchar(100) NOT NULL,
shichoson_kana varchar(100) NOT NULL,
choiki_kana varchar(100) NOT NULL,
ken_kanji varchar(100) NOT NULL,
shichoson_kanji varchar(100) NOT NULL,
choiki_kanji varchar(100) NOT NULL,

flag10 varchar(100) NOT NULL,
flag11 integer NOT NULL,
flag12 integer NOT NULL,
flag13 integer NOT NULL,
info14 integer,
info15 integer
);

2009年9月7日月曜日

翌月頭と翌月末を求めるSQL

翌月頭
DATE(to_char(now() + '1 month','YYYYMM01')) as start_dt,

翌月末(二ヶ月頭から一日マイナス)
DATE(to_char(now() + '2 month','YYYYMM01')) - 1 as start_dt

2009年9月3日木曜日

postgresの実行中のプロセスと停止方法

●postresの実行中のプロセスを下記コマンドで取得

SELECT
procpid,
start,
now() - start AS lap,
current_query
FROM
(SELECT
backendid,
pg_stat_get_backend_pid(S.backendid) AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS start,
pg_stat_get_backend_activity(S.backendid) AS current_query
FROM
(SELECT pg_stat_get_backend_idset() AS backendid) AS S
) AS S
WHERE
current_query <> ''
ORDER BY
lap DESC;

●各項目の意味
・procpid プロセスID
・start プロセス実行開始時間
・lap 経過時間
・current_query 実行中のSQL


●プロセスは下記コマンドで停止できる。
SELECT pg_cancel_backend(プロセスID);

2009年8月24日月曜日

DBの命名規則(消費税)で悩む

DBの命名規則だが
消費税の場合

shouhizei_ritu_start_dt 消費税開始日
shouhizei_ritu 消費税率
shouhizei_gaku 消費税額
shouhizei_flg
shouhizei_gaku_gukei

とするのか

zeiritu 税率 を軸として
zeiritu_start_dt 税率開始日
shouhi_zeiritu 消費税率
shouhi_zei 消費税(額)
shouhi_zei_flg
にするのか・・・

上記は統一感があるが長い、もう一個は短いがバラバラな感じ
まあ、どちらかに統一されていれば良いのかと思う。
(上記の方がいいかなぁ。)

2009年8月11日火曜日

名寄せ方法(HashMap)

①HeaderのHashMapを作成する。(HeaderはIDと項目を結びつける為用意)
HashMap hdrMap = new HashMap();

②DetailのHashMapを作成する。(Detailは項目を入れる為用意)
HashMap dtlMap = new HashMap();


③DetailMapにKeyと実際の値を入れる。
dtlMap.put(担当名,実際の値)
dtlMap.put(取引先名,実際の値)
dtlMap.put(日付,実際の値)

④今まででこのdtlMapの値があるかを判別
(担当名、取引先名、日付で同じデータがあった場合、IDを返す。)
id = hdrMap.get(dtlMap)

⑤ある場合はそのidの値を取得して登録

ない場合は自動採番して、新しいIDと項目を結び付ける。
hdrMap.put(dtlMap, id );

2009年8月5日水曜日

SQLServerからCSVエクスポート

SQL Serverから
SQLを実行したデータをcsvでエクスポートする。

①データベースの所で右クリック
すべてのタスク、データのエクスポート

②バックアップ元を選択

③変換先でテキストを選択

2009年7月27日月曜日

Firefox お気に入りアドオン

Firefoxのお気に入りアドオン

Firebug
debug機能を追加する。
FireGestures
Gestureを追加する。
All-in-One Gestures
Gestureの動作に色々な役割を追加する。
IE Tab
IEと同じレタリングで表示する。
iMacros for Firefox
ブラウザに動作を記録させ再生できる。
TabRenamizer
Tabの名前を偽装する。

2009年7月17日金曜日

HDR/DTLパターン

HDR/DTLパターンにするか横の関係にするかで凄い悩んだので
基本に戻り、どのような場合にHDR/DTLにするか考えた。

・HDR/DTLはHDRを元にDTLが作成されている。
 つまり、HDRが削除されたら、DTLも削除される関係。

・HDRに対してDTLが複数存在する。1:多の関係

当たり前と言えば当たり前だが基礎に戻って考えるとすっきりする。

2009年7月9日木曜日

お金に関する仕様

お金に関する仕様は色々細かく設定する必要がある。
・入力時は税抜きなのか税込みなのか、

・税率計算をした時、小数点以下は切り捨てなのか四捨五入なのか

・各明細毎に消費税をかけてトータルした値を
 合計にトータルをかけると、値が違うのでこの辺もポイントかと

初めにきっちり決定しておかないと後で大変になりかねないので要注意です。

DBの項目を並び変える方法

postgresでDBの順番を並びかえる方法
新規カラム追加時もこれを応用すれば適性な位地にカラムを入れる事ができる。

--1.元テーブルからバックアップ用テーブルを作成
CREATE TABLE test_table_bak AS (
SELECT * FROM test_table
);

--2.元テーブルを削除
DROP TABLE test_table CASCADE;

--3.カラムを追加した新テーブルを作成
CREATE TABLE test_table
(
columnA integer,
columnB integer,
columnC integer
);


--4.バックアップ用テーブルから新テーブルにデータを挿入
INSERT INTO test_table(
columnA,
columnB,
columnC
)
(select
columnA,
columnB,
columnC
FROM test_table_bak);

--5.バックアップ用テーブルを削除
DROP TABLE test_table_bak;

2009年7月7日火曜日

linuxのログファイル

Linuxではログファイルは/var/log/に集中的に集められる?

tomcatは下記ファイルに格納されている。
/var/log/tomcat5/catalina.out

2009年6月29日月曜日

ファイル操作色々

ファイル編集したい
vi

ファイル閲覧したい
cat

ファイル作成だけしたい
touch

ファイルの最後だけ見たい
tail

なのかな?

Linuxでファイルを共有する方法

sambaまたは、
NFSサーバーを立て、exportコマンドで設定する事で可能。
(NFSはlinuxとlinux間のみ?)

2009年6月26日金曜日

プロセスの確認と削除

コマンド
ps -a
で現在使用しているコマンドを表示できる。

また
kill [プロセスID]
killall [プロセス名]
で使用しているプロセスを削除する事ができる。

2009年6月23日火曜日

LinuxOsのバックアップ方法

WindowsではTrueImageが一般的だが、
Linuxではフリーツールのmondorescue等でバックアップ可能、

バックアップコマンドでOSのISOイメージを作成し、
DVDやHDDに保存する事ができる。

コマンドは
/usr/sbin/mondoarchive -Oi -g -L -N -s 4200m -E "バックアップから除外するディレクトリ" -d "isoファイル保存先ディレクトリ"

2009年6月9日火曜日

ファイルの検索コマンド

・ファイル単品の場合
find / -name ファイル名

・フォルダの場合
find [path] -name '[フォルダ名(正規表現)]' -type d

2009年6月5日金曜日

DBの命名規則

DBのカラムの名前はできるだけ統一した方が良い。
気をつける為に失敗例を一例

例)
金額 → hacchuu_gaku, hacchuu_kingaku
量  → hacchuu_suu, hacchuu_suuryou
名前 → tantou_name, tantou_mei, tantou_nm

最初に付ける場合どちらでも良いと思われるが、日本語名にあわせるのが良いと思われる。
(日本語名が発注金額か、発注額なのか)
また日本語名も統一する方が良いと思われる。
javascript:void(0)
また合計の場合
金額 → hacchuu_goukei_gaku, hacchuu_goukei_kingaku
等ずれが出やすいので注意が必要である。

・ルールとして
id → 数値(自動採番)
cd → 文字列型
等できるだけ統一した方が良いと思われる。

・省略パターンとして
コード → cd, code
名前  → nm, name

請求  → seikyu, seikyuu

等ずれがない用注意が必要である。

2009年6月4日木曜日

DBの履歴管理

削除された最終データを保持する為には、
IDの他に連番のPKを付ける必要がある場合がある。
(同じIDに再度データを置きたい場合)

例)
連番1 商品ID 1 削除フラグ ON  ←削除済みデータ
連番2 商品ID 1 削除フラグ ON  ←削除済みデータ
連番3 商品ID 1 削除フラグ OFF ←最新データ

またこの仕組みを利用すると、更新時に最後のデータの削除フラグをONにして、
最新のデータをインサートする事により、履歴管理もできる。
ただし、期間でデータを管理したい場合は場合は別に開始日・終了日カラムを
用意した方が良いと思われる。

2009年5月28日木曜日

SQLでWhere文を可変にする。

isnullが使える場合は
select * from foo where isnull(name,'') = isnull((case when @x is not null then '太郎' else name end),'')

postgresSQLの場合
COALESCE(A,0) = COALESCE((case when A is not null then B else A),0)
でいける。

2009年5月25日月曜日

Bespin

MozillaがWebベースの統合開発環境を今度出すらしい。
htmlとjavaの開発環境らしいけど、これなら外出先とかで低スペックのマシーンとかでも
開発可能だと思う。

2009年5月19日火曜日

修正について

影響範囲の大きい項目については、
修正ポイントと修正による影響の把握が必要。
影響しそうな部分については、簡単なチェックを全部行う。

①修正項目を全てなおしつつ、影響項目のメモかつ記録
②影響項目について関連画面のチェック

2009年5月13日水曜日

Viewについて

Viewを使った方が、変更に強いプログラムとなる。
(内部の計算方法が変更されても、ロジックを変更すれば表示される値が変わるため)
ただし、Viewは内部で計算されている為、表示が若干遅くなるが
よほど複雑な計算をしなければそこまで遅くならないと思われる。

2009年4月21日火曜日

ソフトのインストール

.rpmファイルと.scexeの2種類あるが

rpm -ivh [インストールファイル名.rpm]
sh [インストールファイル名.scexe]

でそれぞれインストールが可能である。

サービスの自動起動、起動

chkconfig --list
で現在のサービスを確認する事ができる
webアプリ開発で良く使いそうなサービスは以下の三つ
・sshd
・httpd
・tomcat5

chkconfig sshd on
でsshd等起動時に自動で起動するようにできる。

service shhd start
でsshの起動をする事ができる。

2009年4月9日木曜日

楽々FWのパラメータの渡し方

サーブレットから渡ってきたパラメーターを
遷移先の画面で

に入っている項目を使用してwhere句で処理する仕組み、
またに入っている項目が設定されたテーブルに直に入っていないと、
whereで選択されないので注意が必要となる。

2009年4月6日月曜日

共通カラムについて

・ 登録日時 : REGISTER_DATETIME
・ 登録ユーザ : REGISTER_USER
・ 登録プロセス : REGISTER_PROCESS
・ 更新日時 : UPDATE_DATETIME
・ 更新ユーザ : UPDATE_USER
・ 更新プロセス : UPDATE_PROCESS
のような新規登録・更新の(ユーザー・日時・プロセス)を自動で管理できる
ツールがあったらなぁと思っていたのですが、

DBFluteと言う物があるらしい。詳細は良く分からないので、今度調べてみよう・・・

2009年3月30日月曜日

データセンタの適切温度と湿度

サーバーの
適正温度:20~25℃
適正湿度:40~55%
らしい。

どうやら冷やしすぎ、乾燥しすぎの所とかが多そう。

2009年3月24日火曜日

暗号化ソフト

個人情報等を渡す際に暗号化かけるソフト
・アタッシェケース
・USBENC Lite for windows

アタッシェケースはメジャーな暗号化ソフトだが双方に暗号化するソフトをインストール必要がある、USBENCはUSBに保存するので環境構築が楽と言う利点がある。

ソフトのインストール

・現在インストールされているソフトの確認
rpm -qa --last
(--last'オプションを追加することにより最近インストールされたパッケージから順に表示することができる)

・ソフトをインストール/削除
yum install パッケージ名
yum remove パッケージ名

またyumコマンドはFedoraには初期でインストールされてるが、されていない場合
rpm -q yum
でダウンロードできる

javaでExcelファイルを使用する方法

poiライブラリーを使用する。
poiライブラリーでテンプレートファイルを開き、値を書き込みする事が可能。

2009年3月19日木曜日

Excelで特定のカラムが入力済みの行のみ色を変える

①書式→条件付き書式を選択
②数式を選択し「=B1>0」で対象のカラムを選択。
③「書式」→「パターン」タブで適当な色を指定→OK
④次の行にも反映させる場合は、書式のみコピーをすれば入力されている行にも反映可能。
投稿を公開

SQLで月始めを取得する方法

DATE(to_char(now(),'YYYYMM01'))

2009年3月12日木曜日

postgresでNULLを0にする方法

COALESCE(フィールド名,0)を使う事で可能
第1引数 フィールド名
第2引数 NULLの場合置換する値