4月 24, 2012
U

こざくら食べメモ 001:小桜橋 浅野屋

会社の近辺はランチをするには少々さびしい立地なのですが、
たまには気分転換で外食する事もあります。
上司やお客様においしいお土産を頂いても配布係は決まって食べ担当(U)です。

開発とは全然関係ないような食べメモ。
腹が減っては開発できぬ…ということで広い心でおつきあいください。

第一回目は、こざらくラボの名称元ともなった小桜商店街、
橋のふもとにあるお蕎麦屋さん「小桜橋 浅野屋」さんです。

昭和初期からの創業のようですが、最近リニューアルされシックな佇まいのお店。
メニューも変わり、以前は東京ではちょっとめずらしいキツネ丼
(油揚げと葱を甘く煮て玉子でとじたもの)があったのですが、
残念ながらこちらは無くなってしまった模様。



写真は、玉子丼とつめたい蕎麦のお得なセット ¥900
こちらのおそば、かなりの細手打ち蕎麦で白くさっぱり味。
そば湯もきちんとついてくるので二日酔い時は染み入りますよ。
玉子丼には季節的なのか、タケノコが入ってました。
女子にはけっこうなボリュームでしたがごちそうさまです。

そしてこちらのお店、食後セルフサービスでコーヒー・紅茶飲み放題! 
ほうじ茶やお冷も感じのよい店主さんがマメにサービスしてくださいます。
意外とゆっくりできる穴場かも?(U)

4月 12, 2012
shigihara

ブラウザの設定・・・侮れません!

先日、お客様のWebシステムに機能追加をしたところ、
特定のブラウザの一バージョンだけが一部、体裁が崩れる。
という困った現象が発生しまた。

以前から、IE7とかIE8とか、特定のブラウザにだけ動作に
不具合が出るとか、ブラウザやバージョンの違いには
苦労してきたのですが、
更に、弊社端末では出なくてお客様環境では発生する。
という状況も重なり、調査は難航。

おかげでリリースも止まり、スケジュールにも影響します。
開発側としては「環境的要因」ということで、対処したくなる
部分もあるのですが、理由が環境であれ、端末であれ、
アプリが正常に動かないことには解決にはなりません。

そんな折、今まで不具合が出ていた箇所と、平行して改修を
進めていた別の機能でも新たに体裁崩れが発生。
困ったな…と思いつつ、担当者の調査を待っていたわけですが、
不幸中の幸い?今回は別の機能でも不具合が出たことが
逆に解決の糸口に繋がりました。

体裁が崩れるというのは、結局のところ、ブラウザの設定で、
メニューからの設定がオンかオフか、それだけでした。
(この設定というのは「互換表示」というものです)
端末環境やデフォルト設定、ネットワーク状況等は会社様に
よって違いますので、出たり出なかったりというのもそれが
原因のようです。

解ってしまえば、なんだそれだけか…ですが、
ブラウザの設定やブラウザの種類によって、表示や動作が
違う部分が出てしまうと、原因特定するまでが結構大変。
やはりまずアプリの不具合か!?と疑ってしまいます。
しかも、不具合が出るとやはり不具合部分に目が行きがちです。

別の視点、視野を変えて…と、普段から気を付けてはいても、
実際、障害対応をしているとそれが中々難しく、
改めて、気を付けなくてはと思い直しました。

無事に不具合が解決出来て、無事にリリース、お客様、
ユーザー様にシステムを使って頂くことが出来て良かったと
思いながら、しかし、ブラウザの設定、侮れません・・・。

(shigi)

3月 30, 2012
kamata

InDesignの電子書籍化では正規表現スタイルは通常スタイルに置換し直す

3月末にしてようやく春を感じられるようになってきました。
こざくら商店街のコザクラも週末に開花の予感がします。

さて、弊社でもいろいろな電子書籍化を行っています。その中で、InDesignから電子書籍化をすることも多いのですが、正規表現スタイルが適用されている場合、文字スタイルに置換しなおす作業をしています。例えば、

佐藤 今晩は、本日は鈴木さんをお招きしました。
鈴木 こんばんは、よろしくお願いします…

のような対談で用いられるスタイルですが、人名スペースお話の内容…..の場合、
行頭からの最初のスペースを判定して前をゴシックに、後ろを明朝にするといいう、正規表現スタイルが適用されていたりします。

この場合、これらの箇所をテキスト化しても(HTML書出ししても)、
<p style=”段落スタイル”>佐藤 今晩は、本日は鈴木さんをお招きしました。</p>

のようになってしまいます。
人名がゴシックだよという情報は書き出されません。
この表現は段落スタイルに吸収されてしまっています。

折角の正規表現スタイルですが、電子書籍化には昔ながらの文字スタイル、段落スタイルで行ったほうが、抽出しやすいということです。
ですので、このケースでは正規表現スタイルを、段落スタイルは明朝にして、スペースの前半はゴシックの文字スタイルに検索置換する前処理が必要になってきます。
この作業は面倒ではありません。IDの検索置換は便利なので、こうした前処理も正規表現検索置換を使って簡単に済ますことができます。

2月 24, 2012
inomoto

【Excel2008】スクリプト2件ご紹介

今回はExcel用のAppleScript2件です.

お客様からいただいたCSVやTSVを加工して色々する作業が多いのですが,もとの値がどうなっていたかを確認するために,それらをExcelで開いて確認することが多いです.
そのとき,それぞれの列に適した列幅を設定したり,オートフィルタで整理した状態にしたりと色々するのですが,ファイルが多いとそれも大変です.

1 コラム幅を設定し,適用する
setWidthPrefList内に入力した設定の通りに,列幅を変更します.
setWidthPrefList内のリストは,列のインデックスも合わせて入力する仕様なので,順番通りでなくても大丈夫です.

サンプルでは,
・1〜4列目はオートフィット
・5列目は100
・6列目は設定なし
となっています.
tell application "Microsoft Excel"
	tell active workbook
		set widthPrefList to setWidthPrefList() of me --コラム幅設定用のリストを作成
		setColumnWidth(widthPrefList) of me --設定リストに従いコラム幅を設定

	end tell
end tell

--設定リストに従いコラム幅を設定
on setColumnWidth(widthPrefList)
	set aConstant to 2.5142281 --変換用定数
	tell application "Microsoft Excel"
		tell active workbook
			tell active sheet
				repeat with aData in widthPrefList
					set {aNum, aWidth} to aData
					tell column aNum
						if aWidth is "auto" then
							autofit
						else
							set aWidth to aWidth / aConstant
							set column width to aWidth
						end if
					end tell
				end repeat
			end tell
		end tell
	end tell
end setColumnWidth

--コラム幅設定用のリストを作成
on setWidthPrefList()
	set widthPrefList to {} --定義

	(*{インデックス, 幅}で設定,"auto"でautofit.数字はダイアログに入力する数字*)
	set the end of widthPrefList to {1, "auto"}
	set the end of widthPrefList to {2, "auto"}
	set the end of widthPrefList to {3, "auto"}
	set the end of widthPrefList to {4, "auto"}
	set the end of widthPrefList to {5, 100}

	return widthPrefList
end setWidthPrefList


この状態が



こうなります.


2 オートフィルタを設定する
シートにオートフィルタを設定し,指定の列の指定の値でフィルタをかけます.

サンプルでは,2列目を「野菜」でフィルタしています.

tell application "Microsoft Excel"
	tell active workbook
		tell active sheet
			setAutofilter() of me
			setCriteria(2, "野菜") of me --オートフィルタのフィルタ内容を変更

		end tell
	end tell
end tell

--オートフィルタのフィルタ内容を変更
on setCriteria(aNum, c1)
	tell application "Microsoft Excel"
		tell active workbook
			tell active sheet
				tell used range
					if c1 is not "" then
						autofilter range field aNum criteria1 c1
					else
						autofilter range field aNum --第2パラメータが空なら全てを表示
					end if
				end tell
			end tell
		end tell
	end tell
end setCriteria

--used rangeにオートフィルタを設定
on setAutofilter()
	tell application "Microsoft Excel"
		tell active workbook
			tell active sheet
				set enable autofilter to true
				tell used range
					autofilter range
				end tell
			end tell
		end tell
	end tell
end setAutofilter

この状態が

こうなります.

2月 18, 2012
kamata

xml構造をリアルタイムでチェックする

InDesignCS5からeventにafterSelectionChangedが追加された。
例えばテキストを触って選択状態が変更すると、eventを発行する。

CS2の頃からやってみたかったことがあった。
IDでxmlを扱うとき、オペレータが誤ってxml構造を壊してしまうことがある。
オペ中にリアルタイムで構造チェックをしたかった。
(積極的にxmlの組版をしてこなかった理由もこんなところにある)

このeventを使えば、構造をオペ中にチェックできるのではないか? と思った次第。

サンプルのxmlはこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE object SYSTEM "sample.dtd">
<object>
	<document>
		<title>ハリー・ポッターと賢者の石</title>
		<text>Harry Potter and the Philosopher's Stone .</text>
		<text>日本語版単行本 ISBN 4-915512-37-1(1999年12月1日発売)</text>
		<text>日本語版携帯版 ISBN 4-915512-49-5(2003年発売)</text>
	</document>
	<document>
		<title>ハリー・ポッターと秘密の部屋</title>
		<text>Harry Potter and the Chamber of Secrets</text>
		<text>日本語版単行本 ISBN 4-915512-39-8(2000年発売)</text>
		<text>日本語版携帯版 ISBN 4-915512-54-1(2004年発売)</text>
	</document>
</object>



dtdはこんな感じ。

1
2
3
4
5
<!--sample.dtd-->
<!ELEMENT object (document+)>
<!ELEMENT document (title , text+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT text (#PCDATA)>


タイトルは1つ無くてはいけない。ここを消すとアラートを出すようにしたい。

まず、イベントを発生させるスクリプトは、

1
2
3
tell application "Adobe InDesign CS5"
	make event listener with properties {event type:"afterSelectionChanged",handler:"SnowLeopard:Users:yukio:Desktop:xmlValidationCheck.applescript"}
end tell



テストなのでhandlerの場所指定は、デスクトップ(SnowLeopard:Users:yukio:Desktop:)にxmlValidationCheck.applescriptという名称で置いています。
そのhandlerのスクリプトは、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tell application "Adobe InDesign CS5"
	tell document 1
		set validErrors to validate XML element 1
		if (length of validErrors) > 0 then
 
			set errMessage to ""
			set errCnt to 0
 
			repeat with anvalidError in validErrors
				set errCnt to errCnt + 1
				tell anvalidError
					tell element
						set errTag to name of markup tag
						select XML content
					end tell
					set errMessage to errMessage & (errCnt as text) & "<" & errTag & ">" & error message & return
				end tell
			end repeat
			display alert errMessage
		end if
	end tell
end tell



動作はこんな感じになる。クリックするとムービー始まります。




全てのeventを削除するのは、

1
2
3
4
5
tell application "Adobe InDesign CS5"
	repeat with myCounter from 1 to (count event listeners)
		delete event listener 1
	end repeat
end tell


2月 18, 2012
kamata

辞書を引く.appを作ってみた

ルビについて調べていたら、ルビとは無関係だが、辞書ということで、次のようなページにいきあたった。
http://sakito.jp/mac/dictionary.html#url-scheme
http://macscripter.net/viewtopic.php?id=26661

「辞書.app」って使ったことがなかった。
コピーした文字列を辞書で調べるってアプリ、上の情報からできるなっと思って作ってみた。

調べたい言葉をコピーして、アプリを実行すると、ダイアログにこんな感じで表示します。

Dictionaryをコピー後実行。


富士山をコピー後実行。


メインのapplesript部分は、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--* 自身のバンドル・パスを得る
set self to path to me
set scriptBundlePath to (path to resource "Scripts" in bundle self) as Unicode text
set iconPath to (path to resource "applet.icns" in bundle self) as Unicode text
--* スクリプトファイルのフルパスを作成する
set pyScriptFile to scriptBundlePath & "dict2.py"
--* Unix用のパスに変換する
set pyscriptpath to quoted form of (POSIX path of pyScriptFile)
--* paste値を変数にセット
set searchword to do shell script "pbpaste"
--* shell コマンド
set command to "/usr/bin/python2.5 " & pyscriptpath & " " & quoted form of searchword
--* コマンド実行
set theResult to do shell script command
--* 表示
display dialog theResult with title searchword buttons {"Close"} default button {"Close"} with icon file iconPath



Pythonスクリプトは、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python2.5
import sys
from DictionaryServices import *
 
def main():
    try:
        searchword = sys.argv[1].decode('utf-8')
    except IndexError:
        errmsg = 'You did not enter any terms to look up in the Dictionary.'
        print errmsg
        sys.exit()
    wordrange = (0, len(searchword))
    dictresult = DCSCopyTextDefinition(None, searchword, wordrange)
    if not dictresult:
        errmsg = "'%s' not found in Dictionary." % (searchword)
        print errmsg.encode('utf-8')
    else:
        print dictresult.encode('utf-8')
 
if __name__ == '__main__':
    main()



弊社ダウンロードサイトから取得できます。
http://www.web-cte.co.jp/tools/

2月 14, 2012
koiso

日本地図センター

先日(とは言っても昨年の9月の事ですが…)
“(財)日本地図センター”という所に行ってきました。

以前勤めていた会社の仕事でGIS(地理情報システム:
Geographic Information System)に携わっていた時に初めて知って以来、
その存在が気になっていたので、夏季休暇を利用して訪れることにしました。
(ここは土日祭日が休業日なので、基本的に平日でないと行く機会が無いので)

センターの中は日本全国の各種地形図をはじめ、道路地図、
地図に関する様々な書籍・グッズなどが陳列されており、
恐らく地図に関する物であれば、何でも置いてあるのではないかと思いました。

私が訪れた当初は東日本大震災から間もない頃だったので、
災害対策のハザードマップなどが平積みで置かれていたのが印象的でした。
その他ですと、近頃の乗り鉄・撮り鉄ブームを反映してか「廃線跡をめぐる」等の
趣旨の書籍がふんだんに置かれていたのが目立ちました。

場所は東急田園都市線の池尻大橋から歩いて5分程の所です。
駅から地図センターまで歩いていると、玉川通り(国道246)の脇に
首都高の大橋ジャンクションが出没します。
(コンクリートで出来た円柱型のループがある所です)

(財)日本地図センター http://www.jmc.or.jp/

2月 8, 2012
amemiya

Perl Script 習作

Perlのブラッシュアップのためにサブルーチン化した習作を投下します。元はInDesignから書き出したxmlテキストをタブ区切りテキストに成形するスクリプトの一部。内容は順不同に出現するフィールド名のタグで挟まれた部分を抽出して並び替えて揃えるというものです。↓こんな感じのタブ区切りテキストを表組に使えるテキストに加工するのに作りました。


ちょっと記述が長いかもしれないので、折りたたんでおきます。

(シンタックスハイライトを使って整形しました。2012/2/19)


Continue reading »

1月 23, 2012
kamata

備忘録:ミリ秒を取得する



1
2
3
4
5
6
on getMilSecond()
 
	set theCmnd to "perl -e 'use Time::HiRes;my ($wtime,$msec) = split(/\\./ , Time::HiRes::time);my @t = localtime($wtime);printf(\"%04d%02d%02d%02d%02d%02d.%03d\",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0],($msec/100));'"
	return do shell script theCmnd
 
end getMilSecond

1月 20, 2012
maro

近づくリリース。リジェクトされないことを祈りつつ

お客様より依頼のあったiPhoneアプリケーション開発が、目下佳境に入っています。精力的に開発に勤しんでいる毎日です。

アプリケーションが出来たら、即リリースということになるわけですが、App Storeの審査を通らない場合には、修正のうえ再提出ということになります(以下、審査を通らないと繰り返し)。

目下開発中のアプリケーションには、iPhone搭載のカメラを利用する機能が搭載されているのですが、これがカメラの一部の情報しか取得しないものの、プレビュー画像を保存する仕様になっています。

プレビュー画像を保存するものは、(いくら切手大の小さな画像でも)「カメラ」として使えてしまいます。

そして、このアプリはカメラの一部の情報しか取得しないので「シャッター音」が鳴らないのです。

開発側に「これはカメラではありませんよ~」という意図があったとしても、客観的に見て「カメラアプリ」と判断することが可能です。しかも、撮影が無音でできてしまうカメラアプリです。

AppStoreの審査担当から見れば、「盗撮にも使える不届きなアプリ」ということに。

電車の中で、つい女性の魅力にさからえず、この撮影時に音が出ないアプリを悪用して、あらぬアングルからの撮影を行ったことがテレビや新聞で報道された日には、Appleのブランド価値は失墜してしまいます。

なので、そういう危険性のあるアプリを審査で却下する可能性があることは、十分に認識しています。

AppStoreの審査で却下される危険性が高いため、お客様と相談のうえ、カメラからの取り込み時にわざと音を鳴らすことにしました。そして、撮影時にシャッター音ではなくアプリケーションの名前をつぶやかせてみよう、という話になりました。

とはいえ、レコーディングスタジオを借りてプロのナレーターさんにお願いするわけにもいかないので、デスクの自分の席で「ぼそぼそ」しゃべってMacBook Proの内蔵マイク(画面の上に付いているもの)で録音。



そのまま職場で録音したので、部署内の他のPCの放熱ファンの音が盛大に入ってしまいます。慌てずさわがず愛用の「Sound SOAP」でノイズリダクションを実施。

最後に、フリーの音声編集ツール「Audacity」で音声をモノラル化したあと、再生速度を速くするなどの編集を加えてみました。なんとなく、それっぽく聴こえます。



リリース後、電車の中でその音が聴こえたら感動モノですが……くれぐれも、悪用されないでほしいです。

ページ:1234567891011»