ファイル名を指定して実行でコントロールパネルを呼び出す
calcだと電卓
commandだとコマンドプロンプト
ここまではよく使う(?)ものではないだろうか?
コントロールパネルの呼び出しもファイル名を指定して実行ダイアログでできる。
http://www.atmarkit.co.jp/fwin2k/win2ktips/585cplcmd/cplcmd.html
« 2007年06月 | メイン | 2007年08月 »
calcだと電卓
commandだとコマンドプロンプト
ここまではよく使う(?)ものではないだろうか?
コントロールパネルの呼び出しもファイル名を指定して実行ダイアログでできる。
http://www.atmarkit.co.jp/fwin2k/win2ktips/585cplcmd/cplcmd.html
クライアントサーバーシステムでは当たり前のタブの順番制御。
とあるお客さんからシステムを使ってみた感想としてタブの順番をなんとかできないかとのこと
もちろんIE限定になってしまうがtabindexという属性を与えておけば制御できることはその場で思いついた。 しかしIE仕様におんぶに抱っこは非常に危険なので持ち帰って検討しますとその場は逃れた。
で、家かえって試したらもはやFirefoxでも対応していた。実際に使っているシステムなんてあまりないだろうが、 CSシステムになれた人がWebアプリに移ると必ず感じる不満点がタブの順番のいい加減さなので、 時間に余裕があれば対応してあげたいところ。
Windowsはハードウェアの認識はLinuxに比べると容易だがインストール後のセキュリティパッチあてがひどいものでSP2適用済みにもかかわらずその後81個ものセキュリティパッチを当てさせられて本体インストールに1時間としてもパッチあてにも同じぐらい時間がかかる。
一方Linuxはハードウェアの認識が自動でされないと結構面倒だが、比較的古いシステムにインストールを行うとすべて自動認識されインストール後のパッチ当てもWindows程ひどくはない。とくにサーバー用途でXを入れない場合は10分でインストールが終わる。
というわけでLinuxの圧勝。
検索キーワードを見ていると相変わらずStrutsのActionがスレッドセーフであるか否かを探していると見られるものが多い。
最近出たStruts2は知らんが、Struts1.x系においては一度作ったActionインスタンスはアプリケーションサーバー(Tomcat等)を再起動するまではずーとプールされる。
ためしにこんなコードをActionクラスのexecuteに入れてみれば一発だ。
System.out.println(this.hashCode());
なんどリロードしてもハッシュコードは一緒。つまり同一インスタンスなので読取専用以外のフィールドは持たせないほうがよいということになる。ユーザー固有の情報(たとえばHttpSessionなど)をフィールドにもたせてActionクラスを作ってしまうと自分一人のテストでは問題が発覚しなくても、結合テスト時などの複数人同時に利用したときに問題が発覚して大慌てになるので注意。
Actionがスレッドセーフでない理由はパフォーマンス的にリクエスト毎にActionをnewするのはよろしくないという設計者の思想があるからしょうがない。
ActionをスレッドセーフにするためにSpringなどのDIコンテナを利用してActionインスタンスをリクエスト固有で生成するようにしていたやり方もある。
デスクトップLinuxで最近赤丸急上昇なUbuntu
日本語ローカライズバージョンを4時間掛けてダウンロードしてインストール。
ちなみにそのまま1CDLinuxとしても使えるし、そのあとインストールすることもできる。 でも1CDLinuxの立ち上がりが遅いので直接インストールできる方法をあとで調べておこう。
ちなみにMBRにブートローダーを勝手に入れてしまうのが唯一の欠点か?
(注)インストールの最終ステップでgrubのインストール先を指定できることを発見した。
いままでのデスクトップLinuxと違い漢字入力モードの切り替えがwindowsと同じキーでできるようだ。 まだ使いこなしてないのでこれからこまめにレポートしていこうと思う。
ちなみにDebianベースではあるがまったくその面影を感じないほどである。
一昔前はWindowsのドライバを利用するndiswrapperを使わなければLinuxで無線LANを使うのは困難だった。
かつてndiswapperのインストールに挑戦したが、コンパイルエラーなどがでてそれでもうあきらめてしまっていた。
しかし最近になって状況が一変した。カーネル2.6.17あたりから主要な無線チップのドライバーが組み込まれてるようになったのだ。
ただしファームウェアなどがライセンス上100% フリーではないのが原因なのかファームウェアの組み込みは自分で行う必要がある場合もある。
自分の無線はCF-R3組込みはipw2200というインテルCentrinoの無線なので割とメジャーかな。 でこいつの場合はUbuntu7.0.4の日本語版を利用する限りにおいてはなんとそのまま設定さえすれば利用できる。
3連休のうち2日は台風で家に篭っていたのでLinuxで無線LANを成功させるまでは家からでない(!?) 意気込みでいろいろなディストリビューションでためしてみた。
わざわざインストール場合失敗したときが癪なので、1CDLinuxでやってみたところ見事連続成功。 後日個別Linuxごとの設定をまとめるとしよう。
悲劇は突然やってくるやもしれない。
運がよければ再起動で立ち上がってくるが、運が悪ければ別のマシンにつないでデータの救出を図ったことも
でもって今日Let's Note CF-R3でいきなりブルースクリーンで落ちた。 前回同じ状態に陥った直後に起動不能に陥ったが今回は上がってきたので急いでバックアップ。 どうもタッチパッドのドライバーが悪さをしているようだが・・・
仮想技術としてはVMwareと双璧をなす存在のVirtualPC
すでに無料化されて久しいが、新バージョンが出ているようだ。まだ日本語ページが準備中なので2007はでたてのほやほや
実は自分が仮想マシン技術にはじめて触れたのがVirtualPC2004の体験版だったわけで、 それ以来VMWarePlayerに浮気してしまったが、久々にインストールしてみることにしよう。
本番環境にUPする時など環境が変わったときに遭遇しやすいこのエラー
開発時は問題なかったのにいざ本番で出るとびびる上にだいたいそういう時はテンパリモード1000% なので冷静な判断ができないだろう。
しかし結局のところクラスパスの設定が間違っているというのがほとんどなのでクラスパスを列挙させてみるといい。 たとえばjspなら以下のコードを入れてみる。
<%そしてきちんと動く環境のクラスパスと比較してみる。 クラスパスがまったく一緒なのに動かない場合はJARファイルなどのライブラリがきちんと存在しているか? コンパイル環境ではコンパイルエラーとなるので気づくが、実行環境ではクラスをロードするときまでエラーが出ないので厄介だ。
たいていの場合において開発環境にはたくさんJARファイルが入っていてどれがどれに依存しているかわからなくなって、 必要なJARを本番環境にコピーし忘れてこのエラーに遭遇するというケースも多い。
UbuntuはDebianベースなのでDebianのパッケージ管理aptでOracle無償版のExpressEditionを利用できる。
結構インストールはいろいろなLinuxで試したのだが、Debianが一番楽なのは確実にいえる
しかしDebianといえばインストールや運用が大変というイメージがある人も多いのでは(実際は昔に比べれば楽勝なのだが)
その場合はUbuntuLinuxで入れてみるといいだろう。
http://www.rutake.com/wiki/DB/Oracle/ExpressEdition/#g080d2dc
インストールばっかりでその後の運用についての記載が一切ないのでこれからがんばります。
Oracleが出すRedHatEnterpriseLinuxクローン
それがunbreakable linux
unbreakable linuxのサポートコストはRedHatEnterpriseの半分になるとの挑戦的なコピーでOracleとRedHatの関係は冷え込んだようだが、実験用途としてはOracleが出しているぐらいだからOracleインストールの基盤としてunbreakable Linuxを選択するのもありかもしれない。バイナリはフリーで配布されている。
サポートでお金を取るってことだ
ドメイン名によってドキュメントルートを切替えるApacheのNameVirtualHost
レンタルサーバーなどではよく使われている手法である。これで問題となるのがテストしたいときにDNS登録されていないとhttpd.conf一番上にある設定が使われてしまうことである。
普通はDNSに登録されているものだが、既存で動いているサイトの設定変更のテストなどをやりたい場合にわざわざDNSを書き換えることなどできないだろう。そんな時に役立つテクニックを紹介する。
答えは簡単で、windowsでもlinuxでもデフォルトではhostsファイルの設定がDNSより優先されるのでhostsファイルに書き換えればいいのだ。
#LAN内からNameVirtualHostの設定を確認する
192.168.x.x www.myserver.com
192.168.x.x www2.myserver.com
192.168.x.x www.hoge.com
こんな感じでNameVirtualHostのServerNameに設定したドメインをIPと対応させればいいだろう。なおDNSはキャッシュされるので(特にWindowsはすぐに反映されない)すぐに変わらないからといって失敗と決め込んではいけない。
自分がレンタルサーバーを利用していてIPアドレスで打ち込んだときとドメイン名で打ち込んだときに違うドキュメントが表示されたらそれはNameVirtualHostの設定で共有されていると考えていい。
puttyとLinuxの連携は普段よく使っているが、LinuxからLinuxに公開鍵認証でログインしたことはほとんどなかったが、先週からLinuxで無線LANが利用できるようになったのでWindowsを捨てるべくLinuxデスクトップ環境で生きている(ほぼ80%)
で現状自宅メインサーバーはセキュリティ対策の為SSHログインは公開鍵認証しか許可していないのだが、Gnomeターミナルで公開鍵認証にチャレンジしてみた。
SSHクライアントが動くサーバーA
公開鍵認証を利用してログインされるサーバーB
まずはサーバーAのログインしたいユーザーのホームディレクトリで以下のコマンドを実行
ssh-keygen -t rsa
ユーザーディレクトリの.ssh/id_rsa(秘密鍵)と.ssh/id_rsa.pub(公開鍵)が作成される。公開鍵をログインしたいサーバーBに送る(SCPなりFTPなり)
ここからサーバーB側作業に移る。
公開鍵はログインさせたいユーザーの.ssh/authorized_keysに公開鍵を追記すればいい。
cat id_rsa.pub >> .ssh/authorized_keys
上記のコマンドでauthorized_keysがなければ新規作成、あれば追記される。なおこのauthorized_keysのパーミッションは600にしておかなければ公開鍵認証は失敗する。
でこれでうまくいくと思ったらデスクトップLinuxの本命として絶賛利用中のUbuntuLinuxからうまくいかない!!なんで?だいたいパスフレーズを聞いてこないのがおかしい。
しょうがない本命候補はもうひとつVineLinuxがあるさ。というわけでこちらで実行したところ即うまくいった。Ubuntuで公開鍵認証がうまくいかない理由がさっぱり見当つかないが継続調査。
普通のLinuxなら上記の手順で公開鍵認証でログインができる。公開鍵認証でログインできるようになったら、セキュリティ対策の為パスワード認証はNGにしておこう。
この技術メモかつては結構アクセスがあったのだが、サーバー移行のどたどたとドメイン消失で検索サーバーからクロールされなくなってしまった。
さらにいうとMT3.2の頃はデフォルトでblogpingサーバーが設定されていたはずなのだが、3.3からは設定メニューからも消えた(非常にわかりづらい操作をしないと設定できないので消えたも同然)
せっかく技術情報を書いていてもアクセスがないと面白くないし、どんな検索キーワードできていてそれに対して答えを出せているかというのも気になるのでやはり更新は通知すべきだろう。
というわけでBlog pingサーバーの設定方法
デフォルトでは環境設定の中にある設定メニューをクリックすると右上のほうに大変小さく「詳細設定へ切り替え」というのがある。その詳細設定に切り替えて新規投稿タブをクリックするとblogpingサーバーを入れるテキストエリアが下のほうに現れる筈だ。
Blog pingサーバーを設定することにより新規エントリーを投稿する時にパフォーマンスが落ちるが、たいしたことはないはず。あまりにひどいようなら有名どころだけに絞るべし。
http://api.my.yahoo.co.jp/RPC2
http://blogsearch.google.co.jp/ping/RPC2
http://blog.goo.ne.jp/XMLRPC
http://rpc.technorati.jp/rpc/ping
http://ping.ask.jp/xmlrpc.m
http://www.blogpeople.net/servlet/weblogUpdates
http://ping.rss.drecom.jp/
http://ping.bloggers.jp/rpc/
http://rpc.reader.livedoor.com/ping
JDKはすでに6.0が出ているというのに、いまだアプリケーションサーバー各種での採用があまりなく(特に商用)利用例が少ないのが実情ではないだろうか?
各いう自分も今やっているプロジェクトはJDK1.4系である。しかしTomcatなどのオープンソースプロダクトの最新版はもうJDK5.x以上しかサポートしていない。というわけで複数の別バージョンのJDKを入れるというニーズもあるだろうからそのやり方を書いておく。
Linuxと違いJDKのWindows版はインストーラーしかない。しかしデフォルトではバージョン名がフルに入ったディレクトリにインストールされるので別バージョンを入れたとしても上書きされるような事態にはならない。なので後は使うアプリケーションごとにJAVA_HOMEの値を切り替えて置けばよい。
Linuxではアーカイブ版があるので違ったディレクトリに解凍し、こちらも環境変数の値を使うバージョンにあわせて設定すれば共存ができる。
ちなみになんでJDK6を入れたかというとTomcat6を試してみたかったからなのである。
前回さまざまなLinuxで無線LANを試したと述べた。
今回はその中で一番導入のハードルが低かったUbuntu Linuxについて取り上げることにしよう。
まずバージョンはUbuntu7.0.4デスクトップ版かつ日本語ローカライズ版を利用した。日本語ローカライズ版に関してはミラーサイトが見つからなくって、ダウンロードに4時間ほどかかってしまった。
そして対象無線機器だが、これはチップ毎に取り上げてみることにする。今回実際に使ったマシンはLet's Note CF-R3である。
まず起動すると無線機器の認識がされているはずである
dmesg | grep ipw2200
エラーが出ていなければOK
その後はESSIDとWEPキー(とインデックス)を設定するだけ
sudo iwconfig eth1 essid ESSID
sudo iwconfig eth1 key restricted s:キー [キーのインデックス] key [キーのインデックス]
sudo iwconfig eth1 rate 54M
おそらくDHCPが有効になっていれば1分もすればIPアドレスが割り当てられるはずである。
毎回コレを実行するのが面倒なので
GUIツールではWEPキーのインデックスの設定ができないということなので/etc/network/interfacesを以下のように設定する。
auto eth1
iface eth1 inet static
wireless-essid ESSID
wireless-key s:WEPキー [WEPキーインデックス] key [WEPキーインデックス]
address 192.168.1.x
netmask 255.255.255.0
gateway 192.168.1.1
IPアドレスとgatewayはそれぞれ適宜変更。
WEPキーインデックスはコレを指定しないと普通つながらないと思うのだが、なぜか世の中の例を見ると設定していないところが多い。なんで?
一昔前にはワームが飛び交っていたのでそれを分離する設定が重宝した。
今は新規のロボットエンジンがスパムのごとくアクセスログを埋めてくれるのでロボットはロボットで別のログにまとめる必要に迫られる。
でhttpd.confに以下のようにCustomLogの設定を入れる
#主要なロボットと(迷惑な)新規ロボットをひとまとめに別ログにする
SetEnvIf User-Agent "(Googlebot)|(Slurp)|(Baiduspider)|(msnbot)|(Yeti)|(psbot)|(Ask Jeeves)|(Twiceler-0.9)" robots nolog
CustomLog logs/robot_log combined env=robots
CustomLog logs/access_log combined env=!nolog
終わったらapache再起動するべし。
新しいロボットがきたら
|(ロボットのUserAgent名)
組み合わせを増やしていけばいい。
正直いって現状ロボットアクセスが通常の2倍ぐらいありますです。うーむもっとがんばらねば!
ファイル名が長すぎます
英語だと
File name too long
とでる。実はあまり遭遇する機会はそう多くはないのだが、とある場面で100%遭遇する。
JDKのダウンロードURLである。とても長すぎるので毎回出てしまう
その対策は-Oオプションでファイル名を指定してやることである。
wget -O ファイル名 http://とても長いJDKのダウンロードURL
あまり役に立ちそうにないが豆知識としてどうぞ
FedoraCoreも7になり、相変わらずサイズが馬鹿でかいのでレスキューCDからネットワークインストールを行う
ところが過去Fedoraのネットワークインストールで成功した例は1回しかない。あまりに巨大なライブラリのため途中でネットワークに異変が起こるとそれで今までの努力がパーになる。
結局今回もインストーラーが動き出した直後にエラーが出て終了・・・・
VineLinuxなどは最小インストール(400M未満)であれ100%成功するのとは対称的だ。素直にDVDに焼くべきか・・・だれかFedoraのネットワークインストール成功した人がいたら教えてください。
かれこれ2年半ほど前に知人から格安で買ったThinkPadR40e
とりあえずパーティションを分割してLinuxを入れるのがその時の癖だったので(まだVMwarePlayerにはめぐりあってなかった)Linuxを入れてみるがほとんど入らなかった記憶がある。
最近でもUbuntuLinuxをインストールすることはできたのだが、マウスカーソルがコマ落ちするかのようにぎこちない動きでどうもおかしい。いろいろ検索していくとこのPCのacpi機能との相性がよろしくないらしい。
ブートパラメーターにacpi=offを記述すると、上記の現象は解決した。
そういえばVineLinuxを入れたときもacpi=offにしていた記憶がある。
特定の拡張子を持つファイルを再帰的に検索したい場合に役立つ
cd 検索したいディレクトリ
find . -name '*.bak'
とするとディレクトリ以下の該当ファイルが出てくる。
用途としてはバックアップファイルなどのごみを一気に消したい時に次のコマンドを打ち込んでみるとよい
find . -name '*.bak' | xargs rm
ただし一気に確認なしで消してしまうので一回画面に表示させてから実行すべし。
bakやemacsが作るbackup(ファイル名~)は公開領域に残しておくと思わぬセキュリティホールになるので上記コマンドで自分のマシンをチェックしてみよう。
最近Linuxで無線LANを調査するために片っ端から最新のLinuxを落としてきては試している。
無線LANといえばたいていノートPCなのでHDDが空いてないから、調査目的のためにわざわざインストールすることなどできない。この1CDLinuxで無線LANの設定に成功したものをHDDインストール候補として選別する狙いがある。
このタイトルに上げた順番がそのままその1CDLinuxの使いやすさかなと思った。特に後ろに行くほど1CDLinuxを出してから間もないので完成度が低い。KNOPPIXはディスクアクセスも最小限であり起動が早い。
で無線LANの話はまだ調査の途中で最終報告にはいたっていないのだが、中間インプレッションとしてあげておく
intelの無線チップipw2200はかなり導入が楽でUbuntu7.0.4ではドライバーもファームウェアもすでに導入済みで拍子抜けするほど簡単だ。一昔前はLinuxで54Mの無線LANを使うためには、Windowsの無線LANドライブをラッパーするndiswrapper画必須だったのにね。KNOPPIX,Fedoraではファームウェアの導入が必要。CentOSのLiveCD版はで手間もないので今回は評価対象外だ。これからに期待
カーネル2.6.17以降になると対応する無線LANチップが増えているようだ。最近のLinuxであればカーネルバージョンは2.6.17以降だろう。
javaのpropertiesファイルといえば日本語をnative2asciiして保存しなければならなく、 編集がかなりめんどくさい印象があった。
しかし現在はeclipseのpluginで日本語を含むpropertiesファイルも楽々編集できるのでいい時代になったもんだ。
その名もプロパティエディタ
それにしてもちょっとJavaの開発から離れているうちにいろんな動きがあるもんだ。浦島太郎状態から早く抜けたい。
Linuxの動向には注目していたつもりだが、 いつの間にか比較的バージョンアップの遅いDebianに4.0(etch)が出ていたことを昨日気づいた!!
Debianはpotatoの頃(もう4年前!)自宅サーバーとして採用した実績があるが、 その後他のディストリビューション(Vine中心)に移ったためご無沙汰である。
Debianから移った理由は当時Javaを動かすのが他のディストリビューションに比べると大変だったのであるが、 aptに代表されるパッケージ管理には感動してaptがあるVineに移っていったのだからすくなからずDebianを使ったことによる影響はあった。
で、Debian4.0インストールだが、ネットワークインストールイメージを利用して10分で終了。 2日前の寝る前に寝転がってrootパスワード設定したので、タイプミスしたらしくrootで入れない・・・ こんなときはシングルユーザーモードでパスワード再設定するのがrootパスワード忘れの常套手段なのだが、 Debianにはこれが通用しなかった。 結局後日それは調べることにしてどうせ10分でインストール完了するのでもう一回インストールすることにした。ミニマム構成ならば実に早い。
しかし、インストールが終わってさてこれからがんがん環境を整えようと思ったが、なんかaptがおかしい。 依存性を解決するのがaptなのにその依存性のエラーでとまってしまう。さらには3.1の頃に見つかるほとんどのパッケージが見つからない。 httpサーバーまで見つからないのはさすがにおかしいだろうと思った。sources.listの記述は正しいと思うのだが
これでは使い物にならないのでもう一回やり直しか?
天気が悪いからみんな家でネットをしているのだろうか?
だいたいうちのブログのような技術ネタは休日になるとぐっとアクセスが減るのだが(仕事で必要に迫られて検索)、 先週の土曜日はほぼ平日と同じアクセスを維持して、月曜日は前週同日の2倍のアクセスを記録した。翌日以後もほぼ同じ傾向で推移している。
休みや天気の良し悪しでネットの利用も左右されるのであれば、データを取ってうまく活用したいところ (ネットショップなどでは雨の日にキャンペーンをやるとか)
これから天気とアクセス数とその日のイベント(サッカーがあればサッカーに関するサイトが多少なりとも影響を受けるだろう) を注意深く見ることにしよう。
システムの操作説明書などを作成するときに画面のキャプチャーをすることがあると思う。
単純な一画面に収まるようなキャプチャーであればPrintScreenで間に合うのだが、 縦長のページでスクロールバーがあるようなページの場合はどうしているだろうか? 二つキャプチャーしたものを切れ目が目立たないようにつなげているのだとしたらこのキャプラを使うことにより大幅に労力が削減されるはずである。
このキャプラキャプチャ前にスクロールバーを上にあるとご丁寧に下までスクロールさせてすべてキャプチャをしてくれる。 さらにはウィンドウのコントロール単位でキャプチャができるのでマニュアルには不要なツールバーなどをのぞいてキャプチャできる。 さらにホットキーや連続保存などにも対応している。
ま、キャプチャをとるのが楽でも文章を書いたりレイアウトを考えたりすんのが面倒なのはしょうがない。 Linuxインストール手順を連続キャプチャしてディストリビューションごとに公開しようと模索しているのだが、なかなか時間が取れないな。
ApachetとTomcatといえばmod_jkで連携するのがこれまでの定番であった。 Apache2.2からはApacheの組み込みモジュールで連携することができる。
実験はVineLinux4.1で行った。 Apache2.2はaptでいれるとmod_proxyやmod_proxy_jspは入っているはずである。
Tomcatのバージョンは6.0.13だが、Tomcat側はajpプロトコルが使えればいいので5だろうと4だろうと多分大丈夫。
下の例は同じマシンで動くTomcatのexampleコンテキストに/exampleでアクセスできるように設定したものである。
#Tomcat Connect Setting
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
<Location /examples/>
ProxyPass ajp://127.0.0.1:8009/examples/
</Location>
Apache2.2が出て間もないのと、mod_jk並に細かい設定ができるかわからないので、 JKによる連携が急激に廃れることはないと思うが、 コンパイルする必要がなく設定だけで連携できるのは個人のテスト環境としては楽でいいのではないだろうか?
カーネルにドライバが組み込まれるようになってから無線LANの動作のハードルが大分低くなった気がした。
が、それはIntelのipw2200チップには当てはまるのだがBroadComのbcm43xx系はとても苦労する。
ドライバーがあるとはいえデフォルトではファームウェアが入っていないのでファームウェア切り出しソフトウェアのbcm43xx-cutterというソフトウェアでWindowsのドライバからファームウェアの切り出し。 しかしバージョンが古いだのC言語レベルのエラーが出たりでもうお手上げ。 いちおうUbuntuLinux7.0.4だけはうまくいったのだが、 ネットワークがやたら重くなる原因不明のトラブルがあるのでどうも実用にならずほかのディストリビューション(Fedora7,KNOPPIX)を試したが、 全滅だった。
もうあきらめかけていたころにVine4.1でWLI-CB-G54とndiswapperでうごかすエントリーを見つけそのとおりにやったら無事成功! すばらしい!bcm43xxにはまだndiswrapperが必須かもしれない。
PHPに比べるとめんどくさいのね。
入力はString型とする。
入力日付フォーマットをチェックしつつ日付の妥当性も検証する。 なお内部的にはCalendarクラスのsetLenientメソッドを呼んでいるので引数がintの場合はCalendarクラスを利用したサンプル (そっちは世の中にありふれてる)を使うといいだろう。
String dateString = "2007-07-30";
SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd");
// 日付解析を厳密に行う(2/31などはNG)
sdf.setLenient(false);
try {
Date date = sdf.parse(dateString);
return sdf.format(date);
} catch (ParseException e) {
// 不正な日付のときはこのブロックに到達
}
JavaScriptとかASPでも同種の処理を作った覚えがある。 たしかフォーマットをかける前とかけた後を比較して同じだったら正常日付、違ったら不正日付とみなしていた。
ちゃんとバージョン管理されていればいいのだが、個人のサーバーなどでそこまでやっていなくて、 どのファイルを変更したかよくわからなくなったという経験が誰でもあるのではないだろうか?そんなときに効く小技
まずは基準点となる日付ファイル(空のファイル)を作成する。
touch -t 200707302100 lastupdate
2007/7/30 21:00を基準点として、カレントディレクトリ以下にあるそれより新しいファイルを列挙する
find . -newer lastupdate
これで「たしかどっかの設定ファイルいじってから動きがおかしくなったんだけどどのファイルだったかな?」 という問題解決の一助となるはずである。
ここ二週間ほどWindowsをすててLinuxで生きていくためにさまざまなLinuxを試している。
条件としては
・無線LANの導入がスムーズに行くこと
・日本語環境がそろっていること
・動画はいいのでMP3などのオーディオ再生
・安定していること
今のところVineLinux4.1が本命でUbuntuLinuxが対抗。まぁデュアルブートすると思うけど。この二つは無線LANの導入が容易だった。Fedora7も試したいんだけどディスクが空いてないなぁ。
デスクトップLinuxを本格的に使い始めてまだ半月だけども、デスクトップ用途に関していえばまだWindowsのほうが安定しているかなという感じ。サーバー用途はLinuxでぜんぜんOK。