2013-01-05

初輪行、どこまでいけるのかやってみた

この年末年始は珍しく9連休と長期休暇なので、なにかやってみたいと思っていた。
旅行もやってみようかと思ったが、最近ロードバイクに乗れていないので、やっぱり乗りたいと思い、よく乗っている。

琵琶湖は雪らしいので除外。
1日でどこまでいけるか、輪行袋も買っていたが輪行したことがなかったので初の輪行をした。

自宅から三宮まで行って輪行で帰った。
国道171号線をひた走るので路線は安定、だが景色はほぼ変わらないので、ひたすら走ってた。
なぜこんなことをしているのか走っているときはそう思った。

だが、目標とした地まで到達したら、それは達成感があった。
今の自分の能力の確認と可能性の追求、それがしたかったのだとわかった。
思い出にもなるしね。



概要
距離:83.36 km
タイム:3:33:35
平均スピード:23.4 km/h
高度上昇値:372 m
カロリー:1,522 C
平均気温:7.1 °C


タイミング
タイム:3:33:35
移動時間:3:30:35
経過時間:8:02:14
平均スピード:23.4 km/h
平均移動速度:23.8 km/h
最高速:45.4 km/h
スピード
ペース
高度
高度上昇値:372 m
高度下降値:353 m
最低高度:23 m
最高高度:108 m
心拍
平均心拍:133 bpm
最高心拍:172 bpm
ゾーン
最大%
bpm
ケイデンス
平均バイクケイデンス:80 rpm
最高バイクケイデンス:111 rpm
温度
平均気温:7.1 °C
毎分気温:4.0 °C
最高気温:13.0 °C

2010-09-07

SQL Serverでのファイル出力込みのバッチ処理

SQL Serverで考える機会があったため、エントリー。

SQL Serverではストアドプロシージャを使用した複数レコードのファイル出力はコマンドレベルでサポートされていない。
sqlcmdを使用して出力できるのはPRINT文やメッセージ、あるいはSELECT文での結果の出力に限定される。

だがこれだと1レコード毎に処理しつつファイル出力できない。
カーソルを使用して処理を行い、正常処理されたレコードのみ出力するにはどうするか?

そんな時はファイル出力用のテーブルを用意しよう。
ストアドプロシージャで正常処理された結果のみそのテーブルに追加し、その後sqlcmdでselect文でファイル出力すれば良い。
処理中エラーが発生した時はエラーコードをかえしたり、エラーメッセージを返すストアドプロシージャを作成すればなお良い。

2010-04-11

SQLで複雑な条件で絞り込み

SQLで以下の問題を考えてみたのでメモ。

お題:人ごとに最高点のレコードのみ抽出する。最高点が複数あるときは受験日の最新のレコード1件のみとする。


-- create table
create table record (
user_id varchar(8) not null,
record_date date not null,
score integer not null,
note text,
primary key (user_id, record_date));



-- 人ごとの最高点のみだが、同点の場合複数表示(max使用)
select * from record a
where score = (select max(score) from record b
where b.user_id = a.user_id);


ALL句でも同じことができる。でもそれ以上の条件をつけられない。

-- 人ごとの最高点のみだが、同点の場合複数表示(all句使用)
select * from record a
where score >= all(select score from record b
where b.user_id = a.user_id);



まず、人ごとの最高点で最新の日付項目で絞り込み。

select user_id,score,max(record_date) from record a
where (user_id,score) in (
select user_id,max(score) from record b group by user_id) group by user_id,score;


それをキーとして使用して全フィールドを表示する。

select * from record c
where (user_id,record_date) in
(select user_id,max(record_date) from record a
where (user_id,score) in (
select user_id,max(score) from record b group by user_id) group by user_id,score);

できた!

2010-03-08

Tomcat6.xでのマルチレベルコンテキストの設定

マルチレベルコンテキストとは以下のようなもの

/parent/child1/
/parent/child2/


ディレクトリ階層を深く指定したWeb Application。

フォルダの配置は以下の様にする。
webapps/parent#child1/
webapps/parent#child2/


warファイルの場合
webapps/parent#child1.war
webapps/parent#child2.war


コンテキストファイル(context.xml)は以下の様なファイル名とする。
conf/Catalina/localhost/parent#child1.xml
conf/Catalina/localhost/parent#child2.xml


コンテキストファイルの中身のパスは階層フォルダ構成で記載する。
path="/parent/child1"


親階層、子階層でWebApplicationを構成することも可能。
webapps/parent#child/
webapps/parent/


conf/Catalina/localhost/parent#child.xml
conf/Catalina/localhost/parent.xml

2009-08-15

MySQLでリモート接続および日本語設定

Ubuntu(8.04, VMWare)でMySQLを立ち上げてホストOS側からアクセスできるようにしてみた。また日本語を扱う方法についてメモ。

/etc/mysql/my.cnf

[mysqld]
...
#bind-address=127.0.0.1 (ローカルからのみとなっているのでコメントした)
...
character_set_server=utf8 (サーバー設定をUTF8にするように追加)
...
[mysql]
default-character-set=utf8 (コマンドラインをUTF8にするように追加)
...


あとはmysql再起動でOK
sudo /etc/init.d/mysql restart

参照:http://h50146.www5.hp.com/products/software/oe/linux/summary/reference/pdfs/mysql-50-japanese-v10.pdf

2009-07-27

SAStrutsでエラーメッセージを設定してエラー画面に遷移する方法 2

前回のSAStrutsでエラーメッセージを設定してエラー画面に遷移する方法だと記述量が多いので扱いにくい。
static importや可変長パラメータを使用して書きやすくしてみた。

ユーティリティクラス
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

public class AppUtil {
public static ActionMessages getErrors(String msgKey, String ...args) {
ActionMessages errors = new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage(msgKey, args));
return errors;
}
}


使用クラスメソッド(ここではアクションクラスのメソッド)
import static org.seasar.struts.util.ActionMessagesUtil.*;
import static org.seasar.struts.util.MessageResourcesUtil.*;
import org.seasar.struts.util.RequestUtil;
import static sample.AppUtil.*;
・・・
Integer id;
try {
id = Integer.parseInt(form.id);
} catch(NumberFormatException e) {
addErrors(RequestUtil.getRequest(),
getErrors("errors.integer", getMessage("labels.workstyleId")));
return "/error/";
}
・・・

2009-07-26

SAStrutsで時間の条件チェック

開始時間と終了時間の条件チェックを行う。
Validwhenで挑戦してみたが、できなかったのでメソッドを作成。
ミソは終了時間の最大を00:00としているところ。
画面表示時に24:00に書きかえる。

import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.seasar.framework.beans.converter.TimeConverter;

public ActionMessages validate() {
ActionMessages errors = new ActionMessages();
if (!endTime.equals("00:00")) {
TimeConverter timeConverter = new TimeConverter("HH:mm");
java.sql.Time startTimeValue
= (java.sql.Time) timeConverter.getAsObject(startTime);
java.sql.Time endTimeValue
= (java.sql.Time) timeConverter.getAsObject(endTime);
if (!startTimeValue.before(endTimeValue)) {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
"errors.startTimeBeforeEndTime"));
}
}
return errors;
}