2011年5月3日

AndroidでURLを開く度に自作のアプリを起動する (1) インテントを受け取る



最近、ようやく少しずつAndroidのプログラムを作り始めている。

とりあえず必要に迫られて試して見たのが、

「ブラウザで開く」というインテントを受け取ってURLの履歴を保存し、再度そのURLをブラウザで開く

というアプリ。
単純なアプリだが、実際に作って見るとインテントの面白さを実感出来る。



動作の概要


例えば「はてなブックマーク」のアプリからリストの項目をタップすると「ブラウザで開く」インテントが発行される。(もちろんアプリはURLからブラウザを開く事が出来るものであれば何でも良い。)

インテントに対応出来るアプリが複数ある場合は選択ダイアログが表示される。

自作アプリ「intent01」を選択すると、標準ブラウザーが開く。

「戻る」ボタンでブラウザを閉じると自作アプリに戻る。開いたURLの履歴が表示されている。



インテントを受け取る


Androidのインテントには、起動するコンポーネントを指定して発行される明示的インテントと、特に指定しない暗黙的インテントがある。面白いのは暗黙的インテントの場合だ。

暗黙的インテントが発行された場合は、システムがそれを処理出来るアプリを自動的に見つけて起動してくれる。候補となるアプリが複数見つかった場合は、選択する為のダイアログが表示され、ユーザーがどれを起動するか選択出来る仕組みになっている。

つまり自作のアプリを「"ブラウザでURLを開く"インテントの処理が可能です」と宣言しておけば、システムがそれを認識して該当の暗黙的インテントが発行された時に選択ダイアログに表示してくれる訳だ。

この宣言をするには、AndroidManifest.xmlファイルのactivityタグの下に次の記述を追加するだけで良い。

<intent-filter>
    <action android:name="android.intent.action.VIEW"  />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="http" />
    <data android:scheme="https" />
</intent-filter>

アプリ内では、getIntent()でインテントを取得出来る。単にホーム画面のランチャーから起動されたのか、別のアプリで「URLをブラウザで開く」操作をされて暗黙的インテント経由で起動されたのかは、取得したIntentのgetAction()で判断可能だ。


if (Intent.ACTION_VIEW.equals(intent.getAction()) ){
    //暗黙的インテント経由で起動された時の処理
} else {
    //ランチャーから起動された時の処理
}



ListViewに表示する


インテントに詰め込まれたURLは、
String url = intent.getDataString();

で取得出来る。

ここまで来れば、後はListViewにURLの文字列を追加する部分さえ作れば履歴の表示が出来る。

注意が必要だったのは、ListViewに表示するArrayAdapterをstaticで宣言する事。でないと起動される度に毎回newされてしまい、リストには最後の1件しか表示されなくなってしまう。



標準ブラウザでURLを開く


ListViewに追加した後、標準ブラウザでこのURLを開く為には、明示的にブラウザを指定して同じインテントを発行し直せば良い。
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);

setClassNameの1つ目の引数はパッケージ名、2つ目はクラス名なので、これらを変えればもちろんFireFoxなど他のブラウザを呼び出す事も可能だ。(オプションで設定可能にしたら便利かも知れない。)

ブラウザからハードウェアのバックボタンで自作アプリの画面に戻るとちゃんとListViewにURLが追加されている。素晴らしい。(笑)

もちろんこのままだとリストの内容はstatic変数で保持しているだけなので、アプリのプロセスが終了した時点できれいさっぱり失われてしまう。本来ならローカルデータベースに保存するなどの処理を追加する必要がある。(それは次回以降のネタとして取って置きたい。)



結局何がしたかったのか


で、実は何がしたかったかと言うと、この履歴一覧の内容をPCに送りたいのだった。

最近寝る前に携帯で気になるニュースやブログ記事をピックアップしておいて、翌日の空き時間にPCでじっくり読むというスタイルが定着して来たので、出来るだけ簡単にURLの一覧をPCに送信する方法はないかと考えていて思いついた方法がこれだ。

もちろん「Read It Later」やその類のアプリもちょっと試しては見たけれども、いちいちユーザーアカウントを作るのも面倒だし、そもそも送信元のアプリから「共有」もしくは「送る」という操作をしないといけないのが面倒に感じていたのだ。例えば、「Google Reader」からだと一覧の記事を長押ししてもそこには「送る」メニューは無く、記事の詳細を開いた上でメニューボタンを押して、「その他」から「Send」を選んで、それからようやく送り先のアプリを選べる事になる。

記事のタイトルだけチェックしてさくさくとPCに送りたいと思うと、いちいち「送る」メニューを選ぶのはどうも使い辛い。

今回の自作アプリだと、一度デフォルトブラウザとして選択しておけば、後はリンクをタップして行くだけで裏で履歴を取ってくれるのでかなり時間が短縮出来そうな気がする。

という事で、次回からメール送信やローカルデータベースへの保存の部分を作ってみたい。

ちなみにここまでのプロジェクト全体のソースはこちらからダウンロード可能になっている。(初めてGitHubに上げて見た。^^)
https://github.com/mikehibm/android-browser-intent01

設定ファイルを除いた本体のソース(Intent01Activity.java)は68行しかないので興味がある方はぜひどうぞ。






追記: 標準ブラウザが格納している履歴を取得する方法

こちらに標準ブラウザが保存している履歴をコンテントプロバイダー経由で取得する例を見つけた。機会があればこの方法も試して見たい。
furafura times: 標準ブラウザのコンテントプロバイダから履歴を取得
WebView逆引き - でこちく備忘録



AndroidでURLを開く度に自作のアプリを起動する









.

2011年4月22日

XOOMよりすごいかも! ASUS Eee Pad Transfomerが米国などで発売へ

「ASUS Eee Pad Transfomer」が4月26日から米国などで発売されるとの事。




タブレットとしてのスペック的にはMotorola XOOMとほとんど変わらない感じだが、キーボードと合体出来るという点が面白そうだ。合体するとバッテリーで16時間駆動というのも素晴らしい。

しかもUSBポートに普通のPC用のキーボードやマウスをつないで操作出来るらしい。さらに標準でPCをリモート操作するアプリ(MyCloud=Splashtop Remote)が入っているのも良い。

画面解像度も1280x800あるので、いよいよ開発マシンにリモート接続して仕事がバリバリ出来そうな端末の登場かも知れない。

価格面でも、キーボード付きで比較してもXOOMより安くなりそうだ。

となるとこれはひとまず買ってみるしかなさそうだ。^^



ASUS、「Eee Pad Transformer」を北米で4月26日に発売、価格は$399~ | juggly.cn

Eee Pad Transformer(EPTF)新着動画5 « 恐ろしき寒さののちも桜花

Asus Eee Pad Transformer 発表、キーボード合体で16時間駆動
10.1型1280 x 800 IPS液晶、静電容量式マルチタッチ、1080p動画再生にも対応するデュアルコアのNVIDIA Tegra 2 プロセッサ、512MB / 1GB RAMと16GB / 32GB Flashストレージ、デュアルカメラ、microSDポートにミニHDMIといった基本仕様はスライダーとほぼ同一。OSもおなじAndroid 3.0を採用します。

ASUS「Eee Pad Transformer」のスペック・特徴まとめ(着脱式キーボード付) - NAVER まとめ

ASUS Eee Pad TransformerにSplashtop Remote Desktopが標準搭載~アンドロイド端末からWindowsを操作可能に~(ドリームニュース) - livedoor ニュース
「Splashtop Remoteが搭載された‘Tranformer’は、アンドロイド画面をタップするだけで、WindowsやMacにアクセスでき、一つの端末で複数を楽しむことができる、まさに‘Transformer’です。」とスプラッシュトップ社のCEOである Mark Leeは述べています。
Splashtop Remoteは、アンドロイドマーケットにおいて$4.99で入手できますが、Eee Pad Transformerには標準搭載されており、無料です。



2011/6/24 追記:
より詳しいレビュー記事。
XOOM/Optimus Padとの比較も:タブレットとノートの“いいとこ取り”か?――「Eee Pad Transformer TF101」発売直前レビュー (1/5) - ITmedia +D PC USER
AndroidタブレットはiPadへの対抗意識から、結果として見た目も中身も画一的な仕様になりがちだが、そうした中でEee Pad Transformer TF101は、Android 3.0+Tegra 2による高速な起動やレスポンスと、ノートPCならではの使い勝手のよさがうまくブレンドされ、ほかのタブレットにはない魅力を獲得できた貴重な存在といえる。

日本でも発売されて、さらに詳しい情報が増えて来そうだ。
ASUS Eee Pad Transformer 開封の儀 - Kazzzの日記
「デフォルトではオフになっているがキーボードから一発でスクリーンショットを撮ることが出来る。」 < これはいいな〜。
キーボードつきでノートPCライクに使えるAndroidタブレット「Transformer TF101」ファーストインプレッション - カイ士伝









.

2011年4月16日

Android版Skypeの内部データベースを確認して見た

SkypeのAndroid版にセキュリティ上の問題がある事がニュースになっている。
【注意】Android版skypeで個人情報ダダ漏れ。アンインストールしましょう。 - Hacking My Way ~ itogのhack日記

元々の発見者のブログ記事はこれの様だ。
[Updated] Exclusive: Vulnerability In Skype For Android Is Exposing Your Name, Phone Number, Chat Logs, And A Lot More | Android Police

興味があったので早速自分の携帯でチェックして見た。

とりあえずAstro File Managerで /data ディレクトリを開いて見たが、何も見れなかった。

次に、Android SDKの adb コマンドを試す。
> adb shell
で adb のシェルに入る。
$ ls -l /data
ls -l /data
opendir failed, Permission denied
$
やはり /data ディレクトリの中味は見れない。ただ、/data/data だと一覧が表示された。
$ls -l /data/data
drwxr-x--x app_135 app_135 2011-04-13 16:10 org.openintents.filemanager
drwxr-x--x app_132 app_132 2011-04-13 16:11 com.android.keepass
drwxr-x--x app_130 app_130 2011-04-10 00:41 com.thedeck.android.app
drwxr-x--x app_1 app_1 2010-08-03 20:03 com.htc.weather.agent
drwxr-xr-x app_1 app_1 2010-08-03 19:33 com.htc.CustomizationSetup
drwxr-x--x app_71 app_71 2010-10-05 01:34 com.skype.raider
...
「com.skype.raider」というのが問題のディレクトリらしい。
$ ls -l /data/data/com.skype.raider
ls -l /data/data/com.skype.raider
opendir failed, Permission denied
$
/data/data/com.skype.raider ディレクトリの一覧表示は出来なかった。もちろんこれはRoot化していないAndroid端末では当然の事(のはず)。

次に、/data/data/com.skype.raider/files/shared.xml の存在を確認してみる。
$ ls -l /data/data/com.skype.raider/files/shared.xml
ls -l /data/data/com.skype.raider/files/shared.xml
-rw-rw-rw- app_71 app_71 51210 2011-03-08 15:24 shared.xml
$
おぉ~、確かにあるある! しかもパーミションは「全ユーザーが読み書きOK」になっている。

ではいよいよファイルの中味を表示して見よう。
$ cat /data/data/com.skype.raider/files/shared.xml
cat /data/data/com.skype.raider/files/shared.xml
<?xml version="1.0"?>
<config version="1.0" serial="168" timestamp="1299633891.14">
<lib>
<account>
<default>(Skype ID)</Default>
</Account>
<audio>
<sidipckeyprefix>/tmp/</SidIpcKeyPrefix>
確かに自分のSkype IDが表示された!

さて、さらに内部データベースが格納されているディレクトリを一覧表示。
$ls -l /data/data/com.skype.raider/files/(Skype ID)/

-rw-rw-rw- app_71 app_71 0 2010-10-05 01:35 config.lck
-rw-rw-rw- app_71 app_71 12824 2010-10-05 01:35 keyval.db-journal
drwxrwxrwx app_71 app_71 2010-10-05 01:38 chatsync
-rw-rw-rw- app_71 app_71 40960 2010-10-05 01:35 keyval.db
-rw-rw-rw- app_71 app_71 5776 2011-03-08 15:24 config.xml
-rw-rw-rw- app_71 app_71 12824 2010-10-05 01:35 griffin.db-journal
-rw-rw-rw- app_71 app_71 28672 2010-10-05 01:35 griffin.db
drwxrwxrwx app_71 app_71 2010-10-05 01:35 voicemail
-rw-rw-rw- app_71 app_71 164672 2011-03-08 15:25 main.db-journal
-rw-rw-rw- app_71 app_71 33344 2011-03-08 15:25 bistats.db-journal
-rw-rw-rw- app_71 app_71 487424 2011-03-08 15:25 main.db
-rw-rw-rw- app_71 app_71 69632 2011-03-08 15:25 bistats.db
確かに全部のファイルがパーミッション全開だ。

ではいよいよ main.db というファイルをPC側にダウンロードする。

adbのシェルから抜けてPC側で、
> adb pull /data/data/com.skype.raider/files/(Skype Id)/main.db \work\main.db
を実行すると、一瞬でPC側にmain.dbがコピーされた。

さてこの内容をどうやって確認しようかと思ったが、「SQLite Manager」というFireFoxのアドオンがあったのでこれをインストールして開いてみた。

「SQLite Manager 0.7.0」FireFox Add On
https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/


左側にテーブルの一覧が表示されている。


Accountsテーブルのフィールド一覧はこんな感じ。

(画像をクリックして拡大可能)



EmailアドレスやSkypeクレジットの残高、Call Forward用の電話番号などがあるのが分かる。

公開する為にプロフィールに登録している情報だけでなく、残高やCall Forward用の電話番号など公開するべきでない情報までが平文のままで保存されているのは困る。

Account情報の他に、通話記録、チャット履歴、友人の一覧などのテーブルがある。

これはマズイ。とりあえず今すぐSkypeはアンインストールした方が良さそうだ。
(2011/4/27 追記: この問題は既に修正済みなので最新版が入っていれば今は心配はない)

そうしないと、悪意を持った他のアプリケーションがこれらの情報を自由に利用したりどこかに送信したりする事があり得る。

「悪意を持ったアプリケーションなんてインストールしてないよ」と思い込むのは危険だ。既にインストールされている普通のアプリでも、開発者がその気になればアップデートでSkypeの情報を読み取って送信する機能を付け加える事が可能だ。つまり新規インストールでなく既存アプリのアップデートでもこの脆弱性を利用して情報を盗まれる危険性があるという事だ。



それにしても、どうしてこんな基本的なミスが起こってしまったのだろうか。通常のやり方でDBを作成すれば、自動的に自分のアプリからしか参照出来ない様なパーミッションが付加されるはずだ。
throw Life - AndroidのFile入出力サンプル

ただ、下の方法を使うと他のアプリからでも読み書き可能になるらしい。
OutputStream output = openFileOutput(dst,
Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

もしこれに似たようなミスが原因だとすると、Android版を開発したプログラマは今頃、職を失っているのではないだろうか。。。いや、テスト担当者の責任になるんだろうか。いずれにせよ、開発者としては身につまされる思いがする。





2011/4/20 追記:
早速Skypeアプリが更新された。更新後、下の通りパーミッションが適切に修正されているのが確認出来た。
$ ls -l /data/data/com.skype.raider/files/shared.xml
ls -l /data/data/com.skype.raider/files/shared.xml
-rw------- app_139 app_139 54794 2011-04-20 12:54 shared.xml
$ cat /data/data/com.skype.raider/files/shared.xml
cat /data/data/com.skype.raider/files/shared.xml
/data/data/com.skype.raider/files/shared.xml: Permission denied
$



2012/4/4 追記:
CodeZineにこんな記事があったのでメモ。
AndroidアプリにおけるDBファイルの正しい使い方:CodeZine
SQLiteDatabase#openOrCreateDatabase を使うとパーミションが644になる。
Context#openOrCreateDatabaseでかつMODE_PRIVATEを指定して使うと660になる。
との事。








.

2011年4月14日

SugarSyncをLinuxで動かして見た

人気急上昇中のファイル同期サービス SugarSyncをLinuxで利用する方法

上のエントリにも書いた通り、Linuxで(強引に)SugarSyncを利用する方法は2つある。

ひとつは、Linux上でWindowsの仮想マシンを動かして、そこにSugarSyncをインストールしておき、仮想化ソフトのフォルダ共有機能を使ってLinux側にあるフォルダを同期させる方法。

2つ目は、Linux上で「Wine」を使ってWindows用のSugarSyncクライアントソフトを動作させてしまう方法。

今回、この2番目の方法を実際にやってみたのでメモしておこう。

Linuxの環境は、Ubuntu 10.10 (32bit)を使用している。

まずはWineをインストール。
sudo apt-get install wine

次に、Windows用SugarSyncクライアント(「SugarSync Manager for Windows」)をダウンロード。
https://www.sugarsync.com/downloads/
ダウンロードしたファイル(SugarSyncSetup.exe)に実行可能属性を付けた後、実行。
chmod +x SugarSyncSetup.exe
./SugarSyncSetup.exe

おもむろにインストーラが立ち上がった。


デフォルト設定のまま続行してインストール完了。

問題無し! と思いきや、日本語が表示されない。

仕方なくアンインストールし、英語を選択してやり直す。


インストール完了。

今度は無事表示された。英語なので当たり前かww。

最初に同期対象のフォルダを選べと言われるが、とりあえず全てチェックを外しておいた。

「SugarSyncファイルマネージャ」のメイン画面

「同期フォルダの管理」

「ファイル転送状態」

この様に問題なくあっさりと動作してしまった。

SugarSyncも素晴らしいけれども、今回は「Wine」のすごさに驚かされた。今までほとんど使った事が無かったが、これからもWindows版しかないソフトをLinuxで動かす必要がある場合にはまずWineを試そうと思う。


今日の結論

Wineって美味しい!





2012/6/8 関連記事を追加:
Windows/Mac/LinuxでSugarSyncの代わりに使えそうな4つのクラウドストレージ

2012/8/7 追記:
 2012年8月7日現在、Ubuntu 11.10上で再度試した限りでは、インストール時にエラーが出て動作させる事が出来なかった。
Ubuntu 11.10+Wineの環境でインストーラを起動するとほぼ最後まで順調に進むものの…

この通り最後にエラーが出てインストール出来なかった。
残念!
なので僕はLinuxでSugarSyncを使うのはほぼ諦める事にして、Wualaに移行した。WualaならLinux(Ubuntu 11.10)上でも全く問題無く動作するし、機能的にもほぼ同等だ。










.


KeePass + SugarSync + KeePassDroidで安全なパスワード管理を

永らくパスワード管理は自分の記憶力に頼る派だったのだが、最近さすがにそれにも限界を感じ始めていた。

そこでぼちぼち何かツールを使ってみようかと、評判の良いパスワード管理ツールを探してみた。
最強のパスワード管理ツール5選! : ライフハッカー[日本版]

ちょっと見た所、KeePassというのが良さそうだ。Windows、Mac、Linux、iOS、Androidで動く。

それにソースコードが公開されているというのも安心感を与えてくれる。
KeePass Password Safe

Android版はこちら
KeePassDroid

インストール方法や大体の使い方はこの辺りで
KeePassでパスワードをより厳重に管理する方法 | nanapi [ナナピ]

『KeePassDroid』~複数のID・パスワードを簡単管理!PCとも連携できる~ | andronavi (アンドロナビ)

Windows版を使って見た感想

Windows版は2.X系と1.X系の2つがあり、両方がアクティブに開発され続けているらしい。その違いはこちらに書かれている。セキュリティ的にはほとんど変わらなさそうだが、2.X系の方が少し機能が多い。今回はVersion 2.15をインストールして見た。


正直、もっと早くから使っていれば良かったと思う。今までしょっちゅう「パスワード忘れました」ボタンをクリックするはめになっていたのが、KeePassさえあればこれからは大丈夫だ。強力なパスワードの自動生成機能やブラウザへの自動入力機能も使い出すと本当に便利で手放せなくなる。

Android版を使って見た感想

Android版(KeePassDroid)の2011年4月13日時点での最新バージョンの1.9.2では残念ながらKeePass 2.X系のデータベースは編集出来ず表示のみ可能との事。

ただ表示オンリーと割りきって使えば決して使い勝手は悪くない。アプリを起動して、エントリの詳細画面を開いた時点でステータス通知領域に「Copy username」と「Copy password」というメニューが表示されるので、これを使えばユーザー名やパスワードを打ち間違える事も無くなる。

SugarSyncでの同期

複数のPC間でKeePassデータベースを同期して使うには、SugarSyncの「同期フォルダの管理」画面からKeePassデータベースの保存されているフォルダを同期対象に指定するだけでOKだ。各PC毎に同期する/しないが設定出来るし、もちろん同期先のフォルダも個別に指定可能だ。

簡単過ぎて拍子抜けしてしまう。素晴らしい!


Androidとの同期もSugarSyncを使えば可能だ。ただ自動で同期する様にはなっていないので、定期的に同期元のPCを指定してデータベースファイルを「ダウンロード」している。



Linux版も試して見た

Linux版はここからダウンロード出来る。
KeePassX – Downloads

Ubuntu 10.10を使っているので、10.04対応バージョンの設定をリポジトリに追加して、後は「システム管理」メニューの「Synapticパッケージマネージャ」でKeePassXを選んでインストールすればOKだった。

ただ現在のバージョンのKeePassXはKeePass 2.Xのデータベースは読み込めない。そこで、Windows PC側で前もってデータベースをKeePass 1.X形式でエクスポートしておく必要がある。エクスポートしたファイルをLinux側へコピーして開けば問題なく読み込む事が出来る。

読み込んだ内容をLinux側で編集する事も出来るが、それをしてしまうと今度はWindows側のデータベース(KeePass2.X)と整合性が取れなくなってしまう。仕方が無いので今はLinux側で編集する事は諦めている。

もちろん、Windows側でもKeePass 1.X系を使うのであれば、上手く同期する事さえ出来ればどちらで編集しても問題なく使う事が出来るだろう。

WindowsとLinuxでデータベースファイルを同期するために、Linux側ではWineを使ってSugarSyncのWindows版クライアントを動かす事にした。
人気急上昇中のファイル同期サービス SugarSyncをLinuxで利用する方法

結果、意外とすんなりと動いたので驚いている。これについては詳しくは別のエントリに書くことにしたい。


今日の結論

パスワード管理は厳重に。KeePassいいね!




2011年8月/23日 追記:

Version 2と1を併用するのであれば下の方法を使うとさらに便利。
KeePass で kdbx と kdb を同時に保存する方法 | ru_426


2011年11月24日 追記:

LinuxでもVersion 2が使えるとの事。今度試そう。
KeePassをバージョンアップ | 電子虚数空間






2011年3月29日

Microsoft SQL Serverに関する些細な4つのTips

===========================================================
マザー・テレサの名言から考える「今、自分にできること。」 : earth in us.
===========================================================


自分の旧ブログからの転載です。


1. MS SQL Serverの@@IDENTITYで正しい値が取得出来ない時は。。。

SQLサーバーで@@IDENTITYを使うと、Insert直後にトリガーが走ってさらにその中で別のInsert文が実行される場合に意図した値が取得出来ないという問題に遭遇しました。
そこで調べて見た所、SCOPE_IDENTITY() という関数があるのを遅ればせながら今日知りました。^^;
これだとトリガーに関係なく自分の直前のInsert文の結果としての最新のIdentity値が取得出来るそうです。

SCOPE_IDENTITY (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms190315.aspx


Alternatives to @@IDENTITY in SQL Server 2000
http://www.sqlteam.com/article/alternatives-to-identity-in-sql-server-2000


Identity Crisis
http://msdn.microsoft.com/en-us/library/aa224821%28SQL.80%29.aspx


Getting the Wrong Identity in Microsoft SQL Server identity Columns?
http://www.databasejournal.com/features/mssql/article.php/10894_3307541_2/Getting-the-Wrong-Identity-in-Microsoft-SQL-Server-identity-Columns.htm


結論:

これからは@@IDENTITYではなく SCOPE_IDENTITY() を使おう!


注)もちろん場合によっては @@IDENTITYの方が望ましい場合もあるかも知れませんので、何でもかんでもという訳ではありません。。。



2. SQLServerのDB内の全テーブルのデータ容量を表示する

下の2つのサイトの情報を参考にして、全テーブルのデータ容量を表示するSQLを作ってみました。
レコード件数だけでなく、データ領域とインデックス領域の使用量も確認出来るので便利かなと。

[SQL]SQLServerのDB内に存際する全テーブルの件数取得(T-SQL)
http://genz0.blogspot.com/2009/04/sqlsqlserverdbt-sql.html


【SQL Server】テーブルの使用量を確認する
http://blog.livedoor.jp/akf0/archives/51427351.html



上記2つの作者様、情報ありがとうござました!

以下、SQLです。

SET NOCOUNT ON

--テーブル変数(結果格納用)
DECLARE @TEMP_TABLE table(
row_id int IDENTITY(1,1) NOT NULL
,T_NAME varchar(128) NULL
,T_CNT bigint
,T_DATA bigint -- KBytes
,T_INDEX bigint -- KBytes
PRIMARY KEY (row_id)
)

DECLARE @NAME nvarchar(128), @SQL nvarchar(256)
DECLARE @CNT bigint, @DATA bigint, @INDEX bigint
declare @row_id int


--カーソルの宣言
DECLARE cs CURSOR FOR
SELECT NAME FROM sysobjects where type='U' ORDER BY NAME

--カーソルのオープン
OPEN cs
FETCH NEXT FROM cs
INTO @NAME
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = N'EXEC sp_MStablespace [' + @NAME + ']'

INSERT INTO @TEMP_TABLE (T_CNT, T_DATA, T_INDEX)
EXECUTE sp_executesql @SQL

SET @row_id = @@IDENTITY
update @TEMP_TABLE SET T_NAME = @NAME WHERE row_id = @row_id

FETCH NEXT FROM cs
INTO @NAME
END

CLOSE cs
DEALLOCATE cs

--実行結果を表示する
SELECT T_NAME, T_CNT, T_DATA, T_INDEX, (T_DATA+T_INDEX) / 1024 AS TOTAL_MB
FROM @TEMP_TABLE ORDER BY (T_DATA+T_INDEX) / 1024 DESC
SET NOCOUNT OFF



3. MS SQL Serverからメールを送信する

EXEC master.dbo.xp_sendmail
@recipients = @mailto,
@query = @sql,
@subject = @sub,
@message = @msg,
@attach_results = 'True',
@width = 2000

注)使用するにはSQLサーバー側でメールサーバーの設定が必要。



4. ストアド内のSQLのエラー

他社が開発したあるシステムで、データ取り込み処理の途中でSQLエラーが発生してしまいました。「文字列が長すぎるからフィールドに入らないよー」っていうワーニングでした。

諸般の事情で仕方なく無視して続行させたいのですが、デバッグしようにもものすごく長いストアドなので、なかなか厄介なんです。

結局、ストアドの最初に「SET ANSI_WARNINGS OFF」っていう1行を入れて逃げました。^^;
もちろん本当は良くないのですが、最悪の場合こう言う逃げ方もあると言う事で。




===========================================================
マザー・テレサの名言から考える「今、自分にできること。」 : earth in us.
===========================================================







.

2011年3月23日

Google App Engineで開発を始めるならチェックしたい本3冊

===========================================================
マザー・テレサの名言から考える「今、自分にできること。」 : earth in us.
===========================================================


はじめてのGoogle App Engine for Java―巨大サーバを利用したWebアプリ開発の基本! (I/O BOOKS)
image

まずは手早く概要を把握したいという人向きの入門書。
JDKのインストールやJavaとサーブレットの基本から説明されているので、今までJavaでの開発をした事が無い人には役に立ちそうだ。

逆にApp Engineの概要やJavaとサーブレットについては既に知っているという人には、全5章のうち始めの3章は必要ないかも知れない。

第4章はデータストアの説明。Low Level APIを使った追加・更新・削除と検索の例が載っている。エンティティグループとトランザクションについても触れられているので、一通りの知識は身に付けられる。

第5章はその他のサービスとして、ユーザー認証、URLフェッチと画像操作APIなどの説明。メールの送受信やタスクキューなどについても触れられているが、ざっと紹介している程度なのであまり深い内容ではない。タイトルにも「はじめての」とある通りGoogle App Engineに初めて触れる人には良いと思う。


すっきりわかるGoogle App Engine for Javaクラウドプログラミング
image

Google App Engineの隅から隅までを丁寧に解説してあるので、「こんな機能あったかな?」と思った時や、「これはどうするんだっけ?」という時にリファレンス的に活用出来る。

ただデータベースアクセスに「スピンアップが遅くなる」と言われているJDO(Java Data Objects)を使っているのがちょっと残念。

個人的には、以下の内容が今後役に立ちそうで有難かった。

第7章 7.6 「OAuthによる第3者からのアクセス」
第9章 9.6 「メールによる画像のアップロード」
第10章 10.4 「XMPPからTwitterへリダイレクトするサンプルプログラム」
第12章 12.4 「Twitterボットのサンプルプログラム」(タスクキュー使用)

第16章は、「本格的なアプリケーションの作成」という事でブログシステムを一から実装する例となっている。


オープンソース徹底活用 Slim3 on Google App Engine for Java
image

Google App Engineでデータストアを使うアプリケーションを開発するのであれば*必読*の1冊。

Slim3に限らず、BigTableやデータストアそのものの仕組みから解説されているので、「なぜこういう検索が出来ないのか」や「RDBで簡単に出来るあの機能はどうやって実現すればいいのか」という疑問に答えてくれる。

Capter 3~5はSlim3を使う使わないに関わらず、データストアを使うならば読んでおくべき。

今回の3冊の中では、最もお買い得感が高い一冊だった。





===========================================================
マザー・テレサの名言から考える「今、自分にできること。」 : earth in us.
===========================================================



.

2011年3月17日

jQuery UIのダイアログで特定のボタンをデフォルトにする方法

======================================================
漢(オトコ)のコンピュータ道: 地震による災害復旧に対して今我々が出来ること。
======================================================


jQuery UIのダイアログを使って見て、デフォルトボタンの指定をするオプションが見当たらなかったので、調査した結果をメモ。

今回の情報元:
javascript - jquery-ui Dialog: Make a button in the dialog the default action (Enter key) - Stack Overflow

javascript - Submit jQuery UI dialog on <Enter> - Stack Overflow

調べた結果によると、
$("#myDialog").dialog({
    open: function() {
        $(this).parents('.ui-dialog-buttonpane button:eq(0)').focus(); 
    }
});

という感じで、ダイアログを開いた時の処理でボタンにフォーカスを当ててあげれば良いとの事。このボタンの指定方法を自分で調べるのが面倒だったので時間の節約になった。

2番目のボタンをデフォルトにしたい場合は、eq(0)の所をeq(1)にすればOK。

同じ考え方で下の様にすればボタンのテキストの色を変える事も出来た。

$(this).parents('.ui-dialog-buttonpane button:eq(0)').css('color', '#F00');


なるほど!




======================================================
漢(オトコ)のコンピュータ道: 地震による災害復旧に対して今我々が出来ること。
======================================================



.

2011年3月9日

パスワードのクラッキングを難しくする「ソルト」と「ストレッチング」とは

今日下の記事を読んだ。
HBGary事件の顛末
セキュリティベンダーの HBGaryが先日 Anonymousによってハックされ話題になった。HBGaryはセキュリティ研究者である Greg Hoglundがファウンダーである。彼は長年 rootkit.comを運営しているほか、Exploiting Softwareや rootkitsなどのすばらしい書籍も書いており、この業界ではかなりの有名人だ。
この事件は一体どのようにして起きたのか。きっかけは、HBGary Federalという会社が Anonymousについて調査した結果を公表しようとしたことに対する、Anonymousの報復攻撃ということのようだ。(続き...)
SQL Injectionの脆弱性から、ソーシャルエンジニアリングも絡めて芋づる式にメールアカウントやサーバーのログインパスワードなどが取得されて行く過程が大変興味深い。

ここで言及されていた、パスワードハッシュを作成する際の「ソルト」と「ストレッチング」について、初耳だったのでメモ。

ソルトについては以下のエントリが詳しい。
塩加減は重要? - JULYの日記
(...)非可逆処理を行う際に、ランダムなデータをパスワードに付け加えてから処理を行うと、同じパスワードであっても、処理結果は違ったものになります。この付加されるデータを「ソルト」と言います。
パスワード情報を保存する時は、このソルトの値と処理結果の値を保存しておきます。検証する時には、入力されたパスワードと保存されているソルトの値を組み合わせて非可逆処理を行い、その結果と保存されている値を比較します。(...)

パスワードクラック - Wikipedia
レインボーテーブル - Wikipedia
という事で、ソルトを付加して非可逆処理を行うと「レインボーテーブル」を使ったクラッキングがやりにくくなるとの事。ただしこれだけだとブルートフォースアタックにはあまり効果が無い。

ストレッチングについては以下を参照。
Key stretching - Wikipedia, the free encyclopedia
(...)key stretching refers to techniques used to make a possibly weak key, typically a password or passphrase, more secure against a brute force attack by increasing the time it takes to test each possible key. (...)
Key stretching techniques generally work as follows. The initial key is fed into an algorithm that, running on a given speed of processor, takes a known constant time to apply. The algorithm is constructed so that the delay introduced is acceptable to most users, say one second on a typical personal computer. The output is the enhanced key. The enhanced key should be of sufficient size to make it unfeasible to break by brute force (e.g. at least 128 bits). The overall algorithm used should be secure in the sense that there should be no known way of taking a shortcut that would make it possible to calculate the enhanced key in less time (less processor work) than by using the key stretching algorithm itself.
要するに、最初のキーに対して何万回(上のページの例では65000回)も(ハッシュ関数などで)計算して求めたキー(enhanced key)を使ってパスワードを非可逆処理しておく。そうするとユーザーが入力したパスワードをチェックする時にも同じ回数の計算処理を行うので1秒程度の時間がかかってしまうが、利便性が損なわれる程ではない。
ところが悪意を持ったクラッカーがブルートフォースでパスワードを取得しようとした場合にも1回の試行につき1秒程度(コンピュータの性能にもよるが)の時間がかかり、合計すると通常のブルートフォースよりも桁違いに長い時間となってしまい現実的ではなくなる、という事らしい。

なるほど、勉強になりました。^^

ついでに検索にヒットした下の記事も読んで改めて参考になった。
Rg00dP@55Wrd53z―奥深きパスワードの世界 - 世界のセキュリティ・ラボから:ITpro

人の造りしもの――“パスワード”の破られ方と守り方 - @IT
くれぐれも簡単なパスワードの使用には注意したい。





2011/04/22 追記:
パスワードについて非常に分りやすい説明を見つけたので、リンクを。
パスワードの話


2011/05/10 追記:
こちらも必見。
これからの「パスワード」の話をしよう
パスワードをハッシュ化(暗号化)保存することを法律で義務化するくらいのことが必要だと思う


2011/10/10 追記:
また新しい記事が出たのでリンクを追加。
本当は怖いパスワードの話(1/4) - @IT 









.

2011年3月1日

auからHTC Evoが発売へ。でも電池の持ちにはご注意を。

日本でauからHTC Evoが発売されるとの事。
asahi.com(朝日新聞社):KDDI田中社長「もう戻れない感覚」、WiMAX搭載「htc EVO WiMAX ISW11HT」に自信

+525円でWiMAXつなぎ放題、Wi-Fiルータにも:auがスマホのテザリング解禁――WiMAX対応Android端末「htc EVO WiMAX ISW11HT」

WiMAXで快適テザリングできるAndroidスマホ『htc EVO WiMAX ISW11HT』
追加料金がたったの525円で下り最大40MbpsというWiMaxが利用出来るとは、全く羨ましい限りだ。

米国ではWiMaxを使ったかどうかに関わらず(例え対象エリア外であっても)、HTC Evoを持っているというだけでSprintから月10ドルの追加料金を請求される。しかも標準のテザリング機能は4G接続でしか使えず、使う場合は別途月29.99ドルのオプション契約が必要になる。

しかもこの4G(WiMax)というのがそんなに速くない。去年の6月にEvoを買った時は喜び勇んでスピードテストをやったものだが、結果は散々だった。場合によっては3Gよりも遅かったので、ハードウェアの故障を疑ったくらいだった。
ハワイのWiMax
ところが、今日数カ月ぶりに4G接続をオンにして今測ってみたら、この通り8Mbps弱のスピードが出ている。Sprintの通信設備も徐々に良くなって来ているみたいだ。

auの通信事情がどうなのかは分からないが、きっとハワイとは比べ物にならないぐらいに整備されているだろうから、最大40Mbpsという速度も誇大広告ではないのかも知れない。もし本当に20Mbpsとか30Mbpsとかという速度が出るのであれば素晴らしい。

ただ、一つ見落としては行けない点がある。これは4月にauから発売されるEvoも(バッテリー容量が変更されていない限り)多分同じだろう。

それはWiMaxを使った場合の極端なバッテリーの持ちの悪さだ。正確に測った訳ではないが、体感的には3G接続で使用している時の10倍ぐらいの早さでバッテリー残量が減って行く感じだ。実際、今4G接続している10分ほどの間に、バッテリー残量が10%も減った。その間にやった事といえば、メールのチェックと3回ほどのスピードテストだけだ。

つまり、ずっとWiMaxで接続してアクティブにネットを使っていたら、大体100分ほどでバッテリーが無くなる。

購入した時にはデフォルトで4G接続がONになっていて、使ってもいないのに数時間で電池が切れるのでびっくりしてショップに交換しに行こうかと思ったほどだった。

これが理由で、僕は購入以来ずっとEvoでの4G接続を実用的に使った事がない。今回の様にたまに実験的にスピードテストをやってみるだけだ。

Evoでバッテリーを長持ちさせる秘訣は、4Gに限らず3GもWifiもGPSも、使わない機能はとにかくオフにしておいて、必要な時にだけオンにする事だ。僕の場合はこれで50時間は充電せずに使えている。月曜の朝に充電しておけば水曜の朝まで持つという感じなので、これならまあ問題ない。

という事で、auのHTC Evoを購入予定の方はWiMax使用時のバッテリーの持ちの悪さについてはご覚悟を。

しかしテザリング機能が標準なのは、羨ましいなぁ。。。






.

2011年2月22日

前から気になっていた超小型省電力PCを試してみた - その2 リベンジ編

FIT-PC2iについて、前回は購入して3日で電源がうんともすんとも言わなくなってしまったと言う所まで書いた。

さて、あれから早速(実際には2~3日ぐずぐずしてから)メーカーへ状況を説明するメールを送った。すると割と迅速に「修理もしくは交換するから米国支社へ送り返してくれ」という旨の回答が来た。郵便局から指定された住所へ送って待つ事約2週間、思っていたよりも早く交換品が届いた。「修理して戻されてもいやだな~」と思っていたら、シリアルナンバーとかも別のものになっているので、多分新品と交換してくれたのだろう、、、と思う事にする。

前回はおそらくHDDの発熱がまずかったでのはないかと思っているので、今回はさすがにHDDはやめたい。SSDにしようかとも思ったが、Intelの40GBだと100ドル以上もする。正直言って予算オーバーだ。

16GB Compact Flash+SATAアダプタの組み合わせだとAmazonで合わせて約30ドルといった所なので、これならいいかも知れない。でも正直やっぱり予算オーバー。^^;

と思っていたところに、手元に16GBのUSBフラッシュドライブがある事に気がついた。

「これで行ってみよう!」


ととりあえず Ubuntu 10.10をフラッシュドライブにインストールして起動して見た。すると案外普通に動く。ターミナルで作業する分にはほとんど問題無い。でもやはりGUIのアプリケーションを使い出すと動作はHDDの時と比べても1テンポか2テンポ待たされる感じで、遅い。使えなくはないけど、使いたくない感じだ。

そこで、今回は「Puppy Linux」に登場してもらう事にする。

初めてPuppy Linuxを使った時は衝撃的だった。古いラップトップで動かしても、そのサクサク感は快感だ。なんせ最新のVersion 5.20でも約127MBしかない。一度起動したらOSを全てメモリーに読み込んで動作するので、ディスクアクセスで待たされる事が無い。データの書き込みもOSの終了時(または一定期間経過時?)にまとめて行われる(多分)ので頻繁に書き込みをしてフラッシュドライブの寿命を縮めるという心配も少ない(多分)。


Chromeブラウザだって使える。


iptablesは標準で入っているのでFirewall設定も出来た。opensshが見当たらなかったがダウンロードしてソースからコンパイルしたら問題なく動いた。Ubuntu 10.04 (lucid lynx)がベースになっているそうなのでその辺はかなり融通が効きそうだ。エディタもGUIのGeanyというものしか無い様だったので、nanoをソースからコンパイル。これも問題なし。rdesktopもソースコンパイルでOK。

ついでにVNC Serverも入れて見ようかとソースをダウンロードしてコンパイルして見たが、これはmakeの途中でエラーになって出来なかった。原因を追求するパワーが今は無いのでとりあえず諦める。

という訳で、新しいFIT-PC2iは1週間を経過した今も順調に動いている。
メインのFirewallとして使うのはまだちょっと怖いので、しばらくはこのままバックアップ用(もしくは僕のテスト環境)として動かそうと思っている。(実際の所Puppyを入れた時点でほぼサーバーとしての運用は諦めた。)

これからFIT-PC2iを購入予定の場合は、くれぐれも熱対策にはご注意を。(笑)




2011/05/25 追記:
やはりPuppu Linuxでは用途が限られるので、Ubuntu 10.04 Serverを入れる事にした。最初64bit版をインストールしようとしたら、「このCPUは対応していません」という旨のメッセージが表示されてダメだったが、32bit版は問題無くインストール出来た。それから1週間ほど常時電源ONで動かしているが、快調に動いている。HDDもSSDも入れずにUSBメモリから起動している。これだとディスクアクセスの遅さがネックになってデスクトップ版のGUIを動かすのは辛かったが、サーバーとして使う分には特にストレスは感じない。ちょっと心配だった温度の方も、本体の外側から触ってみて「温かいな」と感じる程度なのでこれなら大丈夫そうだ。


2012/05/31 続編追加:
UbuntuでFIT-PC2iの無線LANを有効にするには?









.

2011年2月19日

Amazon S3で静的なWebサイトをホスティングする方法

昨日、Amazonからこんなメールが送られて来た。

Dear Amazon S3 Customer,

We're excited to announce new features that make it easy to host static websites on Amazon S3. Customers already use Amazon S3 to host images, video, and other content for their websites, but until now they haven't been able to effectively host their entire website on Amazon S3. That's because even though customers can configure an Amazon S3 bucket as a website, users accessing the root of the website (e.g. http://www.mywebsite.com/) would see the list of objects in the Amazon S3 bucket instead of the website's home page. Also, if an error occurred, users would see an Amazon S3 error message instead of a website specific error message. In response to customer requests, we've added support for root and custom error documents to address these issues.
(...)

Amazon S3を使って静的なWebサイトを簡単にホストする為の新機能についてお知らせします。既にS3で画像や動画その他のコンテンツをホストしてWebサイトから利用されているお客様はおられますが、今まではサイト全体を効果的にホスティングする事は出来ませでした。その理由は、Amazon S3のBucketをWebサイトとして設定する事は出来ても、そのサイトのルート(例: http://www.mywebsite.com/)にアクセスしたユーザーにはBucket内のオブジェクトの一覧が表示されてしまうからです。また、もしエラーが起きた場合は、Webサイトに特化したエラーメッセージではなくAmazon S3のエラーメッセージが表示されます。お客様からの要望にお答えして、これらの問題に対処する為にルートドキュメントおよびカスタムエラーメッセージのサポートを追加しました。
(略)

Sincerely,
The Amazon S3 Team

との事なので、早速久しぶりにS3を使って見た。

管理画面からBucketを作成。

Bucketのプロパティを開いてパーミッションタブで公開範囲を設定し、WebSiteタブでWebサイトとしてアクセス可能にするかどうか、Indexページのファイル名、エラーページのファイル名を指定する。

Bucketにindexページとエラーページ、画像ファイルとCSSやScriptのフォルダなどをアップロード。
今回はテスト用に自分のWebサイトからコピーして見る。

BucketのURLをブラウザで開くと...表示された!

「静的なWebサイト」と言っても、サーバー側が静的なだけでもちろんクライアント側ではAjaxで色々する事は出来るので、使い方によっては重宝するのではないだろうか。

あるいは、通常のWebサーバーが落ちた時など、緊急時のバックアップ用とかにも良いと思う。











.

2011年2月15日

人気急上昇中のファイル同期サービス SugarSyncをLinuxで利用する方法

去年からSugarSyncを使っていて、お気に入りのサービスになっている。

スマートフォンから写真をアップロードしておけば、勝手にPCに同期されるのがとても良い。このおかげでスマートフォンをUSB接続する事がほとんど無くなってしまったぐらいだ。

複数のPC間でドキュメント類を同期する際にも、フォルダ単位でどのPCとどのPCを同期させるか指定出来るのが嬉しい。


SugarSyncは便利.もっと評価されるべき.: tadachi-net 出張所

5GBまで無料の“クラウド”ストレージ SugarSyncはDropboxを超えたか? - デジタル - 日経トレンディネット

tasigi.com - 比較表


ただ、悲しい事に現在の所SugarSyncからはLinux用のクライアントソフトウェアが出されていない。ライバルのDropBoxにはあるのに、全くもって惜しい限り。何かLinuxをサポート出来ない理由でもあるんだろうか?

そこで何とかする方法は無いものかと、例のごとくGoogle先生に聞いてみた。

仮想マシンでWindows XPを動かしてLinuxホストとのフォルダ共有を利用するというアイデアを見つけた。なるほど、そういう手があったか。

Mr. Shiney’s Blog of Goodness » Blog Archive » Using SugarSync under Linux


またこちらのフォーラムの2月9日の書き込みには、Wineを使ってWindows版のクライアントソフトが動いたという情報があった。

SugarSync for Linux . Archive (153) . Feature Request . Forums . SugarSync Community

どちらかの方法でとりあえずやって見ようと思う。

いずれにせよ、早くLinuxクライアント出した方がいいと思うけど、、、SugarSync様。



2011/4/13 追記:
「Wine」を使う方法を試して見たのでこちらのエントリに書きました。
SugarSyncをLinuxで動かして見た

2012/6/8 関連記事を追加:
Windows/Mac/LinuxでSugarSyncの代わりに使えそうな4つのクラウドストレージ








.

2011年2月5日

Androidのブラウザでリンクをタップした時の枠線と背景色を消す方法

Androidのブラウザでは、リンクをタップするとその瞬間から次のページに移るまでの間、リンク部分に緑色の枠線と薄い緑色の背景が表示される。

機種によってはオレンジ色の場合もあるらしい。




とにかく、この枠線と背景色がとても目障りになる場合がある。JavaScriptを使ったゲームなどを動かしている時は特にそうだ。

そこでこの枠線と背景色が表示されない様にする方法を調べてみた。

Android browser GREEN border on click... - Stack Overflow

-webkit-tap-highlight-color: rgba(0, 0, 0, 0);

というスタイルを該当のリンクに適用すればOKとの事。

実際に試した見たところ、これでバッチリだった。
良かった良かった。









.

2011年1月29日

GoogleのCDNを使ってjQueryを読み込む時の注意点

今日、この記事を読んだ。

Easy HTML5 Template
http://www.impressivewebs.com/easy-html5-template/

HTML5についての良記事だ。

コメント欄の中にjQueryの読み込みにGoogleのCDNを使っている部分についてのやり取りがあって、そこが興味深かったのでメモしておこう。

常に最新版を使う様にする為には、マイナーバージョンを指定せずに、

http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js

の様に書いた方が良いのでは? という指摘に対して、

But regarding the versioning, that’s not the best choice, and it’s strongly discouraged. (...) there WILL be breaking changes even within a 1.4.x release. But mostly it’s for the caching. If you use the “1.4″ reference or the “1″ reference, you get zero cache benefit.

(注:かなり意訳)
それは最良の方法ではないし、むしろやらない方がいいと思う。同じ1.4.x系バージョンの中でも互換性の無い変更が行われる事が有り得るからね。でももっと大きな理由は、キャッシュの問題。"1.4"や"1"という表記を使った場合は、せっかくのキャッシュの恩恵を得られなくなってしまうんだ。

と回答している。

え、そうなの? と思ってさらにその下に示されていたリンクを読んでみた。

6,953 reasons why I still let Google host jQuery for me
http://encosia.com/2010/09/15/6953-reasons-why-i-still-let-google-host-jquery-for-me/


Caching and Google's Ajax Libraries API — Cache your jQuery
http://paulirish.com/2009/caching-and-googles-ajax-libraries-api/

これらによると、

「1.4.4」を指定すると取得した内容はブラウザによって1年間キャッシュされるが、
「1.4」または「1」の指定だと、1時間しかキャッシュされない

のだそうだ。


You should never do this in production.

本番環境では決して使うべきではない。

とまで書かれている。

実際にFiddlerを使ってGoogleからのレスポンスヘッダを確認して見た。

「1.4.4」を指定した場合

「1.4」を指定した場合



「1」を指定した場合


確かに、上の記事で指摘されている通りの様だ。

結論:
GoogleのCDNを使ってjQueryを読み込む時は、マイナーバージョンまで指定しよう。










.

2011年1月28日

「目標の公言は必ずしも目標達成に役立つわけではない」とは思わない

「他人に自分の目標を公言するよりも、黙っているほうが目標達成につながりやすい」という説を紹介している記事があった。

Lifehacker - 目標の公言は、必ずしも目標達成に役立つわけではないらしい
http://www.lifehacker.jp/2010/10/101022keepyourgoals.html

 どうも納得が行かないので個人的に腑に落ちなかった点を書いておきたい。

 この説の理由として、「他人に話してしまうとそれだけで「やった気」になってしまい、その満足感ゆえ、実際に目標を達成しようというモチベーションが上がりづらくなってしまう」という事が挙げられているが、果たして本当にそうだろうか。
 
 自分の体験から言うと「目標を公言しただけでやった気になった」という様な事は今までに一度も無い。むしろ公言する事によって目標とする状態と今現在の自分の状態の間のギャップの存在を公に認めて宣言する事になるので、モチベーションは上がりこそすれ下がる事は無いと思う。

 もしモチベーションが維持出来ずに目標を達成出来なかったのなら、それは公言したかどうかに関わらず、その人の「想い」がその目標にこもっていなかったからではないだろうか。本当に心の底から「こうなりたい」と想う自分を想像してそこから導き出した目標であればその様な事にはならないはずだ。

 2009年に心理学の教授が行ったという実験の結果が引用されているが、たった45分間の実験の結果で、1年~数年という長いスパンで見た場合の効果についても判断出来るとは到底思えない。

 そもそも、目標を公言したくない(出来ない)、という人は、どこかで最初から達成出来なかった場合の逃げ道を用意したいという気持ちがあるのではないだろうか。「絶対に達成するのだ」と思って、実際に達成した後の自分の姿を明確にイメージ出来ている人は、それを他人とシェアする事によってむしろ楽しくなるはずだ。

 自分はこれからも目標を公言してそれを達成して行く人間でありたいと思う。







.

2011年1月25日

前から気になっていた超小型省電力PCを試してみた

消費電力がたったの8Wという超小型PC「FIT-PC2i」を購入した。
標準でNICが2つ付いているので、Firewall用途にぴったりだと思ったからだ。

参考: hkatou Lab - fit-PC2i の導入


メーカー(CompuLab)のWebサイトでオーダーしてから、2週間もしない内に届いた。なんとイスラエルからの発送だったが、梱包状態は完璧だった。

パッケージはこんな感じ。


早速キーボード、ディスプレイ、マウス、CD-ROMドライブを接続した。

DELLの縦置きサーバー機と比べるとその小ささがよく分かる。

とりあえずWindows7をインストール。
何の問題も無く全てのハードウェアが認識された。無線LANもバッチリ。
グラフィック性能は決して高くはないが、通常のGUI操作なら問題は無い。Youtubeでの動画閲覧も試してみたが、ほぼ問題無しだった。ただし高解像度になると少しもたつく。

次はUbuntu10.10デスクトップ版を入れて見る。
こちらも何の問題も無し。無線LANもWindowsと同様にちゃんと認識された。インストール直後の状態だと画面の動きがWindowsよりも若干遅く感じられた。

ちなみにハードディスクは裏側のねじを2つ外せば簡単に取り付けられる。今回は手元に用意していた80GBのHDDを使用した。(SSDにしておけば良かったかも、と後から思ったがこの時点ではなんの不安も感じていなかった。)

さて、今回はFirewallサーバーとして使うのが目的なので、一度全パーティションを削除してから Ubuntu10.04LTSサーバー版を改めてインストールした。サーバー版だからなのか無線LANが認識されなかったが、無線LANを使う予定は無いのでとりあえず気にせず続行。インストール後、2つの有線LANをStaticで設定して、iptablesでパケットフィルタリングを開始。これでFirewallとして動く様になった。後はApacheの設定ファイルをいじってリバースプロキシを有効にして外部に公開するサイトの設定を書き込んだらひとまず完成だ。

ここまで全く問題無く順調に進んだ。素晴らしい。CPUは1.6GHz、メモリは1GBもあるので処理能力的にも余裕だ。ハードディスクからの発熱が直にアルミのケースから伝わって来るので手で触ると結構熱くなっているが、これによって放熱する構造になっているらしいのでまあ大丈夫だろう。

ついでにもう一台買おうかな。。。

と思いながら2晩ほど電源を付けっ放しにしておいた。

その結果、なんと3日目の朝、出社してみるとFIT-PC2iの電源が切れているではないか。「誰か間違えて電源落としたのか、困るなあ。」と思いながら電源ボタンを押すが、は、入らない。


電源を入れてもうんともすんとも言わない。


という訳で、今回買ったFIT-PC2iは3日目にして無用の長物となってしまった。
ああ、これからメーカーのサポートに連絡して状況を説明して返品手続きとか、面倒くさいなあ。

これからの顛末はまたの機会に。^^;

---
追記 (2月8日)
米国支社へ返品してから、約2週間弱で交換品が送られて来ました!
これから再度試してみます。詳細はリベンジ編としてまた別の記事に書きます。











.