JavaFXで簡単ファイルマネージャを再現してみた
JavaFXの練習用途で作ってみた。
続きを読む機能的にはたったこれだけなのですが、Java でデスクトップアプリケーションを書くときには重宝しそうですね。
ということで、簡単ファイルマネージャーを作ってみました。ディレクトリにあるファイルの一覧を表示して、ダブルクリックするとオープンするというものです。。
Java SE 6 じゃじゃ馬ならし Desktop
スーツスタイル専門のブログを立ち上げてみた
ここNazo-log, mixi、そして3つ目のブログのご紹介です。スーツスタイルの基礎からスーツで自分らしさを表現するための方法など、色々と書いていきたいと思いますので、よろしくお願いします。
Expressionist Japan - スーツスタイルで自分を表現しよう
ちなみにモデルは大抵自分。モデル募集!? せんせん(笑)
ファイルシステムにアクセス可能なRIA
ちょっと興味があったので調べてみた。調べてみたのは以下の3つ。
Adobe AIRのファイルシステムへのアクセス
Adobe AIRはファイルシステムにアクセス可能との触れ込みが一番でかい。http://livedocs.adobe.com/labs/air/1/devappsflex/help.htmlのWorking with files and dataにあるように、ファイルの読み書きやファイルの移動・削除・複製なんかができる。
ただし至極残念なのは、以下の記述。
Will Adobe AIR applications be able to launch default applications for a file type?
No. This feature is not planned for version 1.0.
Adobe Labs | Previews, prereleases and beta software from Adobe
要するに指定したファイルを、ファイルタイプに関連付いたアプリケーションで開かせる、ということができない模様。それができなきゃ魅力半減なんだけどなぁ…。
例えば画像ファイルを開いて、AIR内で表示することは可能だけど、それをペイントで開かせることは無理。残念。ただし各種コンポーネントの使い勝手はよさそうなので、これからも多少注目。
Sun JavaFX
JavaFXはどないかと言いますと、Java6追加されたjava.awt.Desktopクラスを使えば可能。
あまりJavaFXは関係ないっちゃ関係ない。
Java で他のアプリケーションを起動するには、ProcessBuilder クラスを使用しますよね。これはこれでいいのですが、起動するアプリケーションが分からないときがあります。
たとえば、ブラウザ。
たぶん、ブラウザがあることは分かるんだけど IE なのか Firefox なのか Opera なのか、Java のアプリケーションからだとなかなか分からないんですよね。JNI を使えばできるのですが、それはちょっと...
また、普通は MIME タイプごとに起動するアプリケーションが決まっていますが、そのアプリケーションが何かを知りたいわけです。
でも、もうそんな悩みも過去のこと。Java SE 6 を使えば、あっという間にできるのです。
Java SE 6 じゃじゃ馬ならし Desktop
条件はクリアしているけれど、問題はいつ正式版がリリースされるか、ですかねぇ。
Microsoft Silverlight
上記3種類の中で、唯一正式版がリリースされているSilverlight。今日から調べてみたところ。
でも下記の内容が記載されており、さてさて…。
VB On Silverlightの中で、Silverlightで使えるVBの機能、使えないVBの機能という、簡単な一覧が出ているわけです。
http://blog.tk-engineering.com/?eid=634283
使えない機能は…
・My (Alphaにはあったけど、削除)
・XML リテラル (System.XML.Linq が使えないため)
・COM (考えてみれば当たり前)
・FileSystem Object (これまた当たり前)
作業ログの集計
せっかく作業ログを逐一収集しているのに、集計方法がないのでは意味がないのではないか、と考え、集計方法を考えてみました。
集計を行う前に、id:todogzm:20070429:1177858611 のスクリプトのうち、メイン文とWriteToFileを書き換えます。ダイアログが出ているときにEscキーを押すと空の内容が書き出されるのを防ぐ修正と、作業ログの出力方法の日時と作業内容の区切り文字をTabにする修正です。
出力フォーマットが変わったので、今までの作業ログもスペース区切りからTab区切りに置換してください。
Dim text
text = InputBox("Add to "&filename&":", "Quick Logger", prevtext)
If Not IsEmpty(text) Then
WriteToFile(text)
WritePrevFile(text)
End IfSub WriteToFile(text)
Dim fso
Dim textFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.OpenTextFile(filename, 8, True)
textFile.WriteLine Now & vbTab & text
textFile.Close
End Sub
続いて、Excelを使って作業内容を集計します。Excel中級以上の技術だと俺が勝手に思っているピボットテーブルを使えば、作業ログの修正も簡単。
まずはExcelにタブ区切りのテキストとして、作業ログを読み込ませます。その際には、ちゃんと日時と作業内容がタブで区切られるように読み込ませてください。読み込ませると、A列には日時、B列には作業内容が入るかと思います。
続いて、C列には作業時間を計算させます。1行上の作業時間との差分を計算する程度でいいかと思います。D列は、日時から「日にち」だけを取り出すように、day関数を使用します。
ピボットテーブルを使う上で、列名が必要になりますので、A1, B1, C1, D1にそれぞれ名称を挿入します。
ピボットテーブルは、メニューの「データ」→「ピボットテーブルとピボットグラフ レポート...」を選択してください。ウィザードが始まります。1ページ目は「Excelのリスト/データベース」を選択してください。2ページ目は使用する範囲なので、A列からD列までを範囲としてください。何行目から何行目まで、というのは、過去の作業ログの場合は明示的に指定したほうが良いです。3ページ目は、ピボットテーブルの出力先とレイアウトを指定できます。これらは後からでも変更可能ですが、とりあえず既存のページに、レイアウト指定なしで出力します。これでピボットテーブルの前準備は完了。
で、ピボットテーブルで何を分析させるかと言うと、私の場合は何に何時間費やしたかを分析したいので、縦軸に作業ログ、横軸に日付を入れ、データには所要時間の合計を入れるようにしています。データ部分は、デフォルトではデータの個数を表示するようになっているので、「フィールドの設定」を用いて、データの合計の算出、そして表示方法はhh:mmで表示すればよいでしょう。
ピボットテーブルを操作すれば、1日に行った作業内容と時間を表示する、なんてのも簡単に行えます。あとはピボットテーブルを駆使してください。
VBScriptからExcelを操作する案も考えたのですが、それはまだ実施していません。とりあえずこのくらいの分析機能があればいいかと考えています。
ロングホーズ
夏場でもロングホーズでスネを隠す努力はしてほしいですね。個人的には、ハリソンのクールマックス綿を用いたロングホーズがいいかなと思います。私も何足か持っていますが、快適さとダンディズムの維持(?)を両立するにはいいアイテムだと思います。もう何足か買い足そうかしら。
クールマックス綿 6×2リブ ロングホーズ(M)/ロングホーズ (No.66702) - HALISON(ハリソン)
クールビズなご時世ですね。
蒸し蒸ししてきましたねぇ…。そろそろこちら大阪も梅雨入りなのか入ってないのか…なんとも微妙な感じではあるものの、湿度はしっかり高くなってきています。
さて、クールビズも3年目に突入。オフィスでは定着してきたようですが、どうにもこうにも…、だらしなく見える。ノージャケットはともかく、ノーネクタイがだらしなさを伺わせる。シャツの第1ボタンを外して首もとを見せるあたりがだらしなさを助長させる。風呂上がりっぽいくたびれ感(笑) 多分、自分が寝る1時間前の姿にも似ているからなのか…まぁ風呂上がりにシャツを着直すことはないですけどね。
まず言いたいこと。第2ボタンまでは外してはいけない。少なくともオフィス内にいる限りでは、まだビジネスの時間であることを認識すべきで、カジュアルな場ではないんですよ〜ということを覚えておいてほしい。次に、第1ボタンを外すのは譲るとしても、そこから白シャツが覗くのはちょっとねぇ…。でも日本男児はこの姿がカッコイイと思っているのか単に気にしていないだけなのか、中シャツを見せている人が異様に多い。どういうこと?同じ日本男児だけど、どうも納得のいかない部分です。。。
…というわけで俺のクールビズ。まずはネクタイ必須。首周りはきっちりしています。その代わりに、湿度次第では中のシャツを着ない。湿度がある場合は汗を吸収させるために肌着を着る必要があるけれど、そうでない場合はドレスシャツ1枚だけの方がいい。ほんでシャツはなるべく麻が混じっているシャツがいいですね。麻が混じっていると、綿100%やポリエステルが混じっているシャツに比べて、通気性やシャリシャリの肌触りが夏向きでいいですねぇ。
ちなみに以下は1週間で着たシャツのうち、クリーニングに出したシャツ。大体着るものは似通っています。ほんで右から2番目のシャツがソブリンの麻混シャツ。セール品だったけど、やっぱソブリンの品はいいですねぇ。
…でも麻混のシャツって総じて値段が高い気がするのは気のせいじゃないはず orz...
あとは、ジャケットを着るには暑いけど、少しパリッとしたい場合は、スリーピースのベストを着る。
http://www.salaryman-style.com/fashion/QA.html#2003123とhttp://www.amazon.co.jp/gp/product/4569626750%3ftag=booklogjp084d-22%26link_code=xm2%26camp=2025%26dev-t=DVZ02IW2V71DT/ref=nosimを読む限りでは(まぁ前者は後者を引用しているんですけどね)、ベストは内着でありながら(予備着だけど)外着でもあるわけで、いいんじゃないですかねぇ。クールビズ自体も完成されたスタイルではないんだし、そういう実験的な試みもよいのではないかと。
作業ログに1コ前のログをデフォルト表示する改善
してみた。前の話は以下を参考に。
[id:todogzm:20070208:1170923433]
VBScriptのことがよく分からんので、チョー適当なわけですが、とりあえず2回目以降の作業ログには前回の作業ログをデフォルト値にセットするようにしてみました。似通った関数を抽象化してもよかったのですが、面倒だったのでまるまる別関数にしています。
こんな適当なスクリプトですが、ご容赦を。
'----------------------------------------------------------------------
' QuickLogger v.0.1
' Appends the date and a line of text to a file.
' Based on code written by Joshua Fitzgerald, 7/2005.
' Modified by Gina Trapani, 7/2006.
' Modified by Nazo-log (http://d.hatena.ne.jp/todogzm/), 4/2007.
'----------------------------------------------------------------------
Option ExplicitDim filename
filename = "c:\worklog\worklog.txt"
Dim prevfilename
prevfilename = "c:\worklog\prev.txt"Dim prevtext
prevtext = ReadPrevText()Dim text
text = InputBox("Add to "&filename&":", "Quick Logger", prevtext)
WriteToFile(text)
WritePrevFile(text)
'作業ログの保存
Sub WriteToFile(text)
Dim fso
Dim textFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.OpenTextFile(filename, 8, True)
textFile.WriteLine Now & " " & text
textFile.Close
End Sub
'今回の作業ログの保存
Sub WritePrevFile(text)
Dim fso
Dim textFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set textFile = fso.OpenTextFile(prevfilename, 2, True)
textFile.WriteLine text
textFile.Close
End Sub
'WritePrevFileの結果を読む
Function ReadPrevText()
Dim fso
Dim textFile
Dim result
Set fso = CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 And fso.FileExists(prevfilename) = True Then
Set textFile = fso.OpenTextFile(prevfilename)
If Err.Number = 0 Then
result = textFile.ReadLine
textFile.Close
Else
result = ""
End If
Else
result = ""
End If
ReadPrevText = result
End Function