2013年5月23日木曜日

FreeMarkerのハッシュの要素にアクセスする

T/Oなんですが。FTLのお話。

こんなハッシュがあったとして
[java]
<#assign hoge = [

{
"title":"fuga",
"id":"piyo"
}
] />
[/java]

ずらーっとね。で、特定要素にアクセスするときは、こんな感じで書けるっぽい。
[java]
<#list foo.hoge as bar>
    <#if bar.id == "piyo">
    ぴよぴよ
    

[/java]
みたいな。

2013年5月15日水曜日

ドキュメントについてのリンク集

書きかけ

ウォーターフォール



  • 即活用!業務システムの開発ドキュメント標準化


    • http://thinkit.co.jp/free/project/4/1/1.html


  • グラス片手にアジャイル開発 第4回 - ハイブリッドアジャイルの実践法


    • http://codezine.jp/article/detail/5498



アジャイル



  • ドキュメントを効果的に利用する


    • http://it.impressbm.co.jp/e/2010/08/20/2665


2013年4月20日土曜日

EclipseがWorkbenchのロード中で止まっちゃうとき

環境は

  • MacOS X Lion

  • Eclipse 3.7 (英語版/JavaEE)

  • Java 6




間違って電プチしちゃったときとか、バッテリー切れて落ちたとか、Eclipseが突然死するとかで、
不意に落ちるとworkspace選択->workbenchのロードで止まっちゃうことが多いです。

その時用のまとめ。

やること1.ログを見よう


このへんのログを見る。解決の糸口があるはず。

workspace/.metadata/.log


やること2.cleanで立ち上げよう


こんな感じのログの場合

!ENTRY org.eclipse.core.resources 2 10035 2013-04-20 02:00:14.017
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.

ワークスペースをリフレッシュせよとあるので、一旦

./eclipse -clean

を試してみる。ケースにもよるけどこれで割りと復活する。

やること3.snap的なファイルを消してみる


こいつらが居たら消す

.metadata/.plugins/org.eclipse.core.resources/.snap
.metadata/.plugins/org.eclipse.core.resources/.projects/*/.*.snap


だいたいこれで治る。

とても参考になりました


http://www.andr0o0id.com/?p=854

2013年4月18日木曜日

シェルスクリプトで添付ファイル付メール送信

例によって、備忘録。CentOS 5系にて

※ わかりにくい箇所を書き直した 2015.10.13

uuencodeが入ってなければInstall
$ sudo yum install sharutils


mailコマンドでメールが送信できる前提での、
動作サンプル:本文+添付ファイル
$ (echo "mail_body"; uuencode file_path file_name) | mail -s 'mail_title' mail_address

見にくいので、ちょっと補足すると、

mail_body : 本文
file_path : 添付するファイルのpath
file_name : 添付ファイル名
mail_title : メールの件名
mail_address : 宛先メールアドレス(to)

ちなみに、日本語とか文字化けするので、
mailコマンドに渡す前に、nkf -j をパイプで通すとよい。

2013年4月16日火曜日

シェルスクリプトで自身のフルパスを取得

T/Oです。
いっつも忘れるので。
[bash]
#!/bin/sh

hoge=$(cd `dirname $0`; pwd)/`basename $0`
echo $hoge
[/bash]

こんな感じで。

2013年4月7日日曜日

スタンドアローンで動作する祝日判定スクリプト

タイトルどおりなんですが、仕事で必要なので作ってみました。(ついでに社内のレポートもあったので)。
でも、最近仕事が忙しくて、悲しいかな業務時間に作業してないので、せっかくなのでブログにも置いときます。
社内のレポートは業務時間を使ってもいいことになっているので、有難い制度なんですけどねー。

やりたいこと


日本の祝日を判定したい

1.元データ


スタンドアローンということで、何らかの元データをローカルに保持しないといかんわけで、今回はGoogle カレンダーのAPIを利用しました。

今回利用したXMLリクエスト


http://www.google.com/calendar/feeds/outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com/public/full-noattendees?start-min=2013-01-01&start-max=2013-12-31

リクエストパラメータの意味


詳細は、Google Calendar API v2 Atom Referenceを。























outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com比較的信頼度が高いとされる、mozillaプロジェクトの祝日一覧(mozzila Calendar Project)
 full-noattendees full版からgg:whoを抜いたもの(今回は不要なので)
 start-min=2013-01-01 期間の始まり
start-max=2014-01-31 期間の終わり

2.実際のコード


[python]
#!/usr/bin/env python

from xml.dom.minidom import parse
import sys
import re

def get_parse(fileName):
try:
obj = parse(fileName)
except IOError:
obj = 0

return obj

def get_arg2(arg2):
pattern = re.compile("^\d{4}-\d{2}-\d{2}$")
matched = pattern.search(arg2)

if matched:
argDate = arg2
else:
argDate = 0

return argDate


def main():
fileName=sys.argv[1]
obj = get_parse(fileName)

if obj == 0:
print "file not found"
return 1

argDate = get_arg2(sys.argv[2])

if argDate == 0:
print "argument is unjust. ex)2013-01-01"
return 1

obj_list = obj.getElementsByTagName("gd:when")

for i in obj_list:
if argDate == i.getAttribute("startTime"):
return 0

print "unmatch holiday"
return 2


if __name__=='__main__':
sys.exit(main())
[/python]

3.ざっくり仕様



  • 第一引数に元xmlのファイルパス

  • 第二引数に確認したい日付をyyyy-MM-ddにて渡す

  • 祝日であれば、0、祝日でない場合は2、その他のエラーは1を返す


4.動作イメージ


[bash]
shase$ ./holidayCheck.py japanHoriday.xml 2013-10-15
unmatch holiday
shase$ ./holidayCheck.py japanHoriday.xml 2013-05-05
shase$ echo $?
0
[/bash]

2013年3月26日火曜日

Linuxでのhostsの反映

前に、macでのhostsの変更の反映メモを書いたけど、Linuxでも似たような話があるので、メモ代わりに。


Linuxはリゾルバキャッシュがありましぇーん、とかよく(古い)記事とかであったりしますが、最近のディストロだとだいたい、nscdっていうネームサービスキャッシュデーモンたんが動いており、時々、hostsやらpasswdやらの変更が反映されないみたいな悪さをしてくれやがります。(LDAP関連のトラブルでもよくでてくるんじゃないかな?)

余談だけど、最近のFreeBSDでも動いてるらしい(余談おわり)。

詳細は「man nscd」してもらえればいいんですが、とりあえずhostsのキャッシュをクリアしたいとき(nscdの再起動:nscd restartでもいけるけど)。

/usr/sbin/nscd -i hosts

とかすればおk