自動的に元日にTweetしてみる

G* Advent Calendar の 12/16 記事に触発されて書いてみました。
AkeomeJobから呼び出すメソッドを変えると画像付きと画像なしが選べるようにしたつもり。

http://samuraism.jp/diary/2011/12/16/1323962040000.html

これとは別にtwitter4j.propertiesを用意しないといけないです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@Grab("org.twitter4j:twitter4j-core:*")
@Grab("org.twitter4j:twitter4j-media-support:*")
@Grab("quartz:quartz:*")
import twitter4j.*
import twitter4j.media.*
import org.quartz.*
import org.quartz.impl.*
class AkeomeTask{
def akeome(){
TwitterFactory.singleton.updateStatus("あけました! #バルス")
println "TEST" + new Date()
}
def akeomeWithPicture(){
def imageUri = new ImageUploadFactory().instance.upload(new File("akeome.jpg"), "あけました! #バルス")
println imageUri
}
}
public class AkeomeJob implements Job{
@Override void execute(JobExecutionContext context){
context.getJobDetail().getJobDataMap().get("akeomeTask").akeomeWithPicture()
}
}
def job = new JobDetail()
job.name = "akoeomeJob"
job.jobClass = AkeomeJob.class
job.jobDataMap << ["akeomeTask": new AkeomeTask()]
def trigger = new CronTrigger()
trigger.name = "akeomeTrriger"
trigger.cronExpression = "0 0 0 1 1 ?"
def scheduler = new StdSchedulerFactory().getScheduler()
scheduler.start()
scheduler.scheduleJob(job, trigger)

まぁ、喪中なので使いませんがw。

apache で server should be ssl-aware but has no certificate configured hint sslcertificatefile null 0 となった。

解決方法はここにあったとおり

http://serverfault.com/questions/232782/debian-squeeze-upgrade-breaks-apache-ssl

SSLEngine on
SSLCertificateFile をVirtualHostごとに書けば良いのですが、

VirtualHostごとに設定ファイルIncludeして、
そのファイルでこいつを書いていたのですが同じエラーが出続けてはまりました。

ダメなパターン

httpd-ssl.conf

1
2
3
4
5
6
7
<VirtualHost *:443>
DocumentRoot ...
<Location "/">
...
</Location>
Include conf/sslcert.conf
</VirtualHost>

sslcert.conf

1
2
3
SSLEngine on
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key

いけたパターン

httpd-ssl.conf

1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:443>
DocumentRoot ...
SSLEngine on
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key
<Location "/">
...
</Location>
Include conf/sslcert.conf
</VirtualHost>

同じ設定でapache2.2.17@Ubuntuはいけたのに、2.2.20@MacOSXはダメとか。。。
ディレクティブの記述順のもんだい?

[Groovy]ファイルをファイルの最終更新日時別のディレクトリに仕分ける

雑多に保存していた画像を日付で仕分けしたくなったので。

ホントはExifの撮影日付を使おうと思っていたんですが、それはまたその機会に。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def destParent = new File("C:\\Users\\user\\Pictures\\dest")
new File("C:\\Users\\user\\Pictures\\src").listFiles().each(){
def date = null;
if( ! it.isDirectory() ){
date = new Date()
date.setTime(it.lastModified())
def destDir = new File(destParent, date.format("yyyyMMdd"))
if(!destDir.exists()){
destDir.mkdir()
}
def destFile = new File(destDir, it.name)
destFile << it.readBytes()
destFile.setLastModified(date.time)
}
}

Strutsでresetメソッドを使わないでcheckboxをいいかんじにする

助かったのでメモ。

毎回POSTすればいいということは分かるんですが、
ActionFormのスコープをSessionにしたいときに困るんですよね。

他の所では、そこのパラメータを毎回POSTすれ!って書いてあったけど、
それもいけてない気がするし。

ただ、知らない人がソースを見るとhiddenタグが意味不明なので、
うっかり消してハマるとかバグるとか危険性はあるかもしれないですね。。。

[Groovy]astah* の ER図からliquibase の createtable を生成したい

と思ったので。間に合せで書いてみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import com.change_vision.jude.api.inf.model.*;
import com.change_vision.jude.api.inf.project.*;
import groovy.xml.MarkupBuilder
def PROJECT_PATH = args[0]
def OUTPUT_FILE = args[1]
println("Opening project...");
def prjAccessor = ProjectAccessorFactory.getProjectAccessor();
prjAccessor.open(PROJECT_PATH, true, false, true);
// 起点となるモデルを取得する。
def project = prjAccessor.getProject();
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
project.ownedElements.each(){ diagram ->
diagram.ownedElements.each(){ schema ->
if(schema instanceof IERSchema){
schema.entities.each(){ entity ->
xml.createTable(tableName : entity.physicalName.trim(),
remarks:"${entity.logicalName.trim()}\t${entity.definition.replace('\n',' ').trim()}"){
def columns = []
columns.addAll(entity.primaryKeys)
columns.addAll(entity.nonPrimaryKeys)
columns.each{ attr ->
columnAttr = [name: attr.physicalName.trim()]
if(attr.lengthPrecision){
columnAttr.type = "${attr.datatype}(${attr.lengthPrecision})"
}else{
columnAttr.type = "${attr.datatype}"
}
if(attr.defaultValue) {
columnAttr.defaultValue = attr.defaultValue
}
if(attr.definition){
columnAttr.remarks =
"${attr.logicalName.trim()}\t${attr.definition.replace('\n',' ').trim()}"
}else{
columnAttr.remarks = "${attr.logicalName.trim()}"
}
//データ型の読み替え処理とか
if("TIMESTAMP" == attr.datatype.name){
columnAttr.type = " TIMESTAMP"
}
//PKならautoincrement とか
if(attr.primaryKey){
columnAttr.autoIncrement = true
}
column(columnAttr){
if(attr.primaryKey) constraints(primaryKey:"true", nullable:"false")
if(! attr.primaryKey && attr.notNull) constraints(nullable:"false")
}
}
//共通カラム
column(name:"regist_date", type:" TIMESTAMP", remarks:"登録日")
}
}
}
}
}
// プロジェクトを閉じる
prjAccessor.close();
//結果を出力
if(OUTPUT_FILE){
new File(OUTPUT_FILE).withWriter(){
it << writer.toString()
}
}
println("Finished");

[Linux]Linuxで使っていたPCをWindowsにしようとしたら起動しなかったときの対処方法

MBRにGRUBがインストールされていると、
Windowsのセットアッププログラムが起動しないらしい。

今回の症状としては
+PCパワーon
+CDから起動させる
+画面に「Inspect なんとかかんとか」の表示
+ブラックアウトで進まなくなる

でした。

遥か昔にそんなことがあったような気もするけど、すっかり忘れてたよ。

というわけで
今回はたまたま手元にあったubuntu11.04 desktop CDでMBRのお掃除を実施

Linux で MBR をクリアする方法
デバイス名の確認

1
# fdisk -l

MBRクリア

1
# dd if=/dev/zero of=${DeviceName} bs=512 count=1

[アジャイル]Scrum道Burstに参加しました

6/24 に品川シーサイドの バンダイナムコゲームス未来研究所で開催された
Scrum道Burstに参加してきました。

バンダイナムコゲームス未来研究所は綺麗な建物で、
エントランス入ってすぐに池というか、川が流れていて危うくおちそうになりました。

1/12ガンダムと幼稚園児ほどの大きさのパックマンがお出迎えしてくれ、
会場はホールの様なすごい所でした。 (あるところにはあるんだなぁ。。。)

ーー閑話休題

毎回Scrum道ではお題を一つ決めて、それについて議論を行うそうなのですが、
今回のお題は「スプリント計画ミーティング」でした。

細かい流れとか、内容とかは twitter #scrumdo でhitする方々のblogや
http://togetter.com/li/153684 などが素晴らしいのでそちらを参照していただくとして、
私の感想などを。

私はラウンド1は観客として、
ラウンド2は @tw_takubon さんと @takaesu0 さんの手引きによって、選手として潜入しました。

いろいろな話があった中で特に個人的にキタのは 3+1つ

1つめは ラウンド1で

の件、DevLoveで@sandayuuさんのセッションを聞いてからずっと思っていた
POが価値について考えることを支援する。と言うか一緒に価値について考えていくと言う姿勢でした。
私の場合PO&SMが両方オッサンなので、寄り添うのはどうかと思いますが。

2つめは ラウンド2で

実は、自分と同じような状況でプロダクトオーナー不在ってどうなの?と悩んでいる方がいて、
自分のケースを
「ステークホルダー(社長)と一番話が出来る人をプロダクトオーナーとして、
バックログはチーム全員で作る。」
と言いはなって見ました。(実際はScrum的にはアンチパターン?)

自分と同じ様な状況でだったので、テンション上がってちょっと支離滅裂になったかも知れませんが、
同じような悩みの人が他にもいることを知ることが出来て、すごく勇気づけられました。

(実際はPOをやってもらいたい人の、要件を正確に把握する能力とかも気にしてます。
 と誰となくフォローしてみる。)

結果的には @nawoto さんに生々しいと言われたのである意味成功。

3つめは その後の飲みの席で @callas1900 さんが言っていた

アジャイルのプラクティスは、その裏にあるマインドの実現手段である、
だからマインドを意識しながらプラクティスを適用しないと本当の意味はない。

的な趣旨のことです。
この意見には私も常々そう思っていたので、心中ガッツポーズでした。

ただその直後に ちゃんげ( @changeworlds )さんが言っていた、
「マインドの話を表に出すととアンチの人には反発される」というのもそうだなとおもい、
いろいろ難しさを感じました。

おまけの一つは
会場から、飲みの席に移動する途中
圧倒的な前評判だった「スクラムマスター」の読み手であったにもかかわらず、
まさかの落選を喫してしまった @kappa4 さんの一言。

これはいろんな意味で刺さりました。

議論の時間が足りないと感じるほど、楽しくもあり、参考にもなったのに、
無料とかどうなってるんだとそのすごさ、素晴らしさを感じました。

スタッフの皆様有難うございました。

[Groovy]GroovyでtomcatのWebappを再起動してみる

Jenkins の DeployプラグインでTomcatにDeployし続けていたところTomcatのPermGenSpaceが枯渇しておちてしまったので、
対応方法を模索中。。。

定期的な再起動とかがいいのですかねぇ。

で、Groovyとかでどうにかできないか調べたところ。Webapp単位では再起動できたので、メモ。

1
2
3
4
5
6
7
8
9
10
11
12
13
import groovyx.net.http.*;
def tomcatHost = "http://tomcat:8080/"
def userId = "user"
def passwd = "passwd"
def appName = "/app-name"
def tomcatManage = new HTTPBuilder( tomcatHost )
tomcatManage.auth.basic userId, passwd
tomcatManage.get( path:'manager/stop', query: [path: appName])?.dump()
tomcatManage.get( path:'manager/start', query: [path: appName])?.dump()

でも、あんまり意味がないか。。。

WinXPさんが hal.dll が見つかりません とおっしゃいます

ある日、リモートから会社のPCをWOLで起動したところ、
待てど暮らせどログインできるようにならないため、
会社に居る同僚に実機を確認してもらったところ。

「hal.dll が見つかりません」

などという、メッセージが画面に出ているとの事。

以下、復旧のために試したこと。

1.修復コンソールから bootcfg /rebuid
「メモリ不足のため、セットアップを続行できません
セットアップを終了するには、F3 キーを押してください。」
2.knoppix で起動 -> boot.ini を手書きで追加
状況変わらず
3.修復コンソールから fixmbr
コマンド成功するも状況変わらず。。。
4.修復コンソールから chkdsk /r
半日かかって「いくつかのエラーを修復しました。」ざっくり過ぎて何だか分かりません。状況かわらず。
5.knoppixで起動。もしやと思いパーティションテーブルを確認
fdisk -l
あった、dellはDISK先頭にメンテナンス用パーティションがあるとな。
 リカバリ領域が末尾についていたりとかは何か記憶があったのですが。まさか先頭とはっ。
6.boot.ini を手書きで ”2番めのパーティション”から起動するように変更

復活しました。よかった。。。

丸一日つぶれたよ。。。orz