2007年12月アーカイブ

Adobe Max Japan 2007に行った時は、まだ、Twitterをやってなかったから、何も思わなかったんですけど、

最近、友人から、何の前触れもなくTwitterの招待メールが届き、英語の文章がよく分からないまま登録してしまったわけなんですが、

AIRで、Twitterのクライアントが出てるんですね


名前はTweetrで、ココからダウンロードできます。


起動して最小化しておくと、右下のタスクバーに隠れて、メッセージを受け取ったら、音と共に表示してくれるようです
表示してくれる場所は、デフォルトで画面右上になってるんですが、メッセのおかげで反射神経が鍛えられた右下に変更してみました。

あと、本家にもあるのか分かりませんが、

add a webcamera photo
  と
send files
というアイコンが・・・


ファイルは、AIRが力を入れている(?)Drag&Dropで選択できるみたいで


<リンク>
Tweetr 2.0
最近、結城さんの、『Java言語で学ぶリファクタリング入門』でリファクタリングを勉強していて、
著作権的に、リファクタリングについてそのまま解説することはしませんが、

ある、一部分の、これはメモしとかなきゃ忘れるなって部分を、
説明を一部変えるとか、より詳しくする感じで、メモを残していきます。


それでは、第1回目。(たぶんシリーズ化する・・・かも)
シンボリック定数っていう、設定なんかをfinalなフィールドとして、一箇所で宣言して
ソースコードではリテラルを使わず、その定数を使うっていうリファクタリングっていうか常識?があるんですけど(詳しい説明は本書で)

その、シンボリック定数っていうのは、あくまでリテラル(10とか20とか)に名前をつけてソースコードを見やすくするためのもの、修正しやすくするためのものであり、コンパイルすると、その定数がリテラルとして直接プログラムに埋め込まれちゃうんですね


で、何が問題かというと、シンボリック定数が複数のクラスにまたがって利用されている場合、

つまり、宣言するクラスと、利用するクラスが分かれている場合に、
先ほども書きましたが、コンパイルすると、参照ではなく、リテラルが埋め込まれるため


宣言するクラスを変更し、再コンパイルをしても、利用するクラスも再コンパイルしないと変更を反映しない

という点です。


具体的に言うと、
オセロのボードは8×8です(フツーは)。なので、ソースコードないでは、その8というリテラルをそのまま埋め込まずに、
public static final int BOARD_SIZE = 8;
みたいなことをします。そうすることで、10×10に変更したい時に、そこだけ変更すれば良いようにソースを書きます。
例えは、↓のように、Othelloというクラスに、オセロの処理を書いて、
その他諸々の設定をConfigクラスに書くといった風にしたとき





Othelloクラスをコンパイルすると、このクラスはConfigを利用しているので、Configも一緒にコンパイルされますが、
Configをコンパイルしても、Othelloはコンパイルされません(少なくとも↑のソースでは)

つまり、Configの値を変更して、Configクラスを再コンパイルしても、Othelloの機械コードには、"ConfigのBOARD_SIZEを参照せよ"ではなく”8”が入っているので、変更が反映されないのです。



まぁ、これが原因で問題が・・・ということは滅多にないと思いますが、一応、そういう風になっているんで覚えておこうかな



IT media Newsによると、米スタンフォード大が、バッテリーの寿命を10倍にする仕組みを発明したらしい

仕組みはよくわかんないけど、

ノートパソコンのバッテリーが10倍になれば、一日や二日ならヘーキで使えるってコトだよね??
電源アダプタすら持ち歩かなくていいってことだよね???

商品化されたらソッコーで買いに行こう



<参考>
バッテリー駆動時間を10倍にする技術、米大学が開発 IT media



CNET JAPANによると

2.5GHz帯の割り当てを受けたKDDIは、

2009年夏からサービスを開始し、
ここ東京では、2009年2月から試験的にスタート!!!

価格は、月額5000円以下で、平均3200円程度になるらしい

速度は、数十MHzと問題なし



2009年2月って・・・よく考えたらあと一年ちょっとじゃん!!
ってことは、e-mobileの二年契約はしない方がよさげ???

これに対抗してe-mobileがもっと値下げしてくれないかなぁー




XREAでsubversionを使い始めました。
再設定する時のために、忘れないうちにやり方をメモっておきます。


①ssh接続のための準備
まず、sshでログインするための設定
XREAの管理画面にホスト情報登録というのがあるので、SSH登録のボタンを押す。

②コーヒーを飲みながら5~10分ほど待つ

②sshでログイン
sshでログインするためのソフトはいっぱいあるけど、
今回はTeraTermProを使いました。SSH VersionはSSH2
IDとパスが聞かれるので、XREAのそれを入力しログイン。

③svnのプロジェクトを作成
ログインできたら、以下のコマンドを実行
user_name@sXXX:~> mkdir svn
user_name@sXXX:~> cd svn
user_name@sXXX:~/svn> svnadmin create project_name --fs-type fsfs

これで、sshじゃないといけない設定は終わり。


TortoiseSVNSVN チェックアウト
Windowsで適当なフォルダを作って、
右クリック⇒TortoiseSVN⇒設定 をクリック (※TortoiseSVNは日本語化済みを前提に進めます)
ネットワークを選び、SSHクライアントの欄を
C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe -ssh -l ユーザーネーム -pw パスワード
みたいな感じにする

それが出来たら、フォルダを
右クリック⇒SVN チェックアウト をクリック
リポジトリのURL に
svn+ssh://sXXX.xrea.com/virtual/user_name/svn/project_name
を入力して OK

※斜体の部分を自分の環境に合わせて変更してください

そうすると、
リビジョン 0 完了


ってなるので、その中に、trunk, branches, tagsっていうフォルダを作って、右クリック⇒更新



以上で設定完了



後で、sshのログインをID+パスじゃなくて、認証鍵で出来たら、そのやり方をアップします


<参考サイト>
XREA、sakuraサーバでのTortoiseSVNの設定 < GASOLINE STAND
XREAをSubversionリポジトリにする。 ぎじゅっやさん

ググッたら簡単に見つかったww

単なるメモです。

JPanelのスーパークラスであるJComponentのメソッドで出来ます。



以上

最近、アクセス修飾子やfinalとかをなるべく意識して書こうとしているのですが、
ふと、この変数の値は、~から~でしかありえないよなとか、if文がたくさんあるメソッドでどこかで絶対分岐するはずだから、最後までは絶対に行かないよな、でも最後にreturn文がないとコンパイルが通らない。
こんな、なんともイライラする状況があって、sjc-pの為に覚えたアサーションが使えるんじゃないのかって思って参考書を引っ張り出してきました。

まず、アサーションとは、
プログラムの前提条件を表すもので、プログラムのある部分で必ず真でならなければならないと主張(assert)する条件式を書き、実際にこの条件が満たされる機能を言うらしい。(参考:Wikipedia


じゃぁ、プログラムとして実際にどういう式を書けば良いかというと、
①assert 式;
②assert 式 : 文字列;
という2パターンがある。式には、trueかfalseが返るようなものを、②の文字列には、falseになった時に表示されるエラーメッセージが書ける。
実際に、式がfalseを返すと、AssertionErrorがスローされるが、これはバグを示すためcatchしてはいけない。


・アサーションを有効にする
アサーションを有効にすると、その分評価する式が増えて、パフォーマンスが低下する
なので、実行時に切り替えが出来るようになっている。
javaコマンドで実行するとに、-ea(-enableassertions)オプションをつけると有効に、-da(-disableassertion)をつけると無効になる。
また、このクラスは有効で、このクラスは無効でという風に細かく設定したい場合は、
-ea                    :全てのクラスでアサーションを有効
-ea:<クラス名>    :そのクラスでアサーションが有効
-ea:...                :デフォルトのパッケージとそのサブパッケージに対するアサーションが有効(よくわからんww)
-ea:<パッケージ名>:そのパッケージとそのサブパッケージでアサーションが有効

これの組み合わせにより、
-ea ClassA -da PackageA (パッケージAは無効だけど、クラスAは有効)
-ea -da ClassA                  (クラスA以外は有効)
-da ClassA -ea ClassA      (クラスAが有効)

ここで順番は、後に記述したものが優先されるらしい。ただし、より細かいレベルの指定が優先されるので、上の例だと、後で指定した-da PackageAより、細かいレベルの-ea ClassAが優先される


・アサーションを使うべきところと、使うべきでないところ
アサーションを使うべきところは、プログラム内部の不変条件・制御フローの不変条件、クラスの不変条件である。
プログラムの不変条件とは、冒頭で述べたように





のように、条件的にありえない状態をはじくように使うときで、フロー制御の不変条件は、ほとんど一緒なんだけど
絶対到達しない場所にassert false;を入れる。

クラスの不変条件は、例えば、処理するデータがある条件を満たしているかを確認し、



のように、途中にチェックをデータがおかしくないかチェックを入れるものである。


では、逆に、アサーションを使わないほうがいい場合は、
・publicメソッドの引数チェック
  引数は必ず真であって欲しい条件はあるけど、これはメソッドの仕様であるので、アサーションでチェックするべきではないらしい
・アサーションの式の部分に、その式を評価することによって変数などに変化が起こるものは使用してはいけない。
  これは、アサーションを有効にした場合と無効にした場合で、異なった結果がでてはいけないからである。
  例を出すと、



のように、booleanを返すが、処理が行われるものは、アサーションが無効になった時に実行されないので



のようにしなければならない。

最後に、ユーザの入力に対するチェックはアサーションではなく、
Exceptionや正しく入力するよう促すメッセージを表示するなど、アサーションではないものでやるらしい
これは、アサーションは、プログラムのバグを見つけるための機能であるので、こういうときには使わないらしい

友人から教えてもらって始めたのだが、
SNS機能っていうより、学習用のFlashがメインって感じたくらい超ハイクオリティ
ぇ?これマジで無料????って思うくらい
しかも、ここに私たちはむしろ、「The best things in life are free. (世の中で最も価値あるものは無償だ)」と考えます。』と書いてある。なんて粋なやつらだ

ただ、ビリーにしても、こういう勉強にしても、やっぱ三日後にはモチベーションが下がってしまう。
それを防ぐ意味でも、SNSなのは決して無駄ではない。


簡単に機能を紹介すると、
・SNS機能
 これは説明しなくてもいいっしょ、日記とかフレンド機能
・チャンネル - 学習アプリ
 まず新規に単語の意味を覚え、覚えれたか確認し、聞き取ってスペルがかけるか確認し、日本語からスペルが書けるか確認
みたいなコトを10単語ずつやって、全部終わったら記憶定着率が30%くらいになる。

んで、一度覚えた単語は、次に出てくるときは、いきなり意味とかスペルチェック
久々だと忘れてたりして、間違えることも
間違えるともう一度、意味とか表示してくれるんだけど、記憶定着率がノーミスよりも低くなる

解説によれば、解答までにかかった時間とかもちゃんとカウントして、どのくらいの期間があいたらもっかい確認として出題するとかやってるみたい。ホンキで脳科学者まで巻き込んで、マジで頑張ってる。

駅前留学に高いお金をつぎ込むくらいなら、こっちやった方がいいんじゃね?って思う。フレンドで外国人とかと仲良くなれば、英語で日記を書いたりして、実践的なこともできるし、なによりモチベーションが勉強じゃなくて、日記を書くっていうかコミュニケーションの為に必要だからってなってくる。海外に行って、英語をしゃべるしかなくなる状況に陥るのと同じで、英語で日記を書いたり読んだりしなきゃいけなくなる状況に自分を追いやることが簡単にできる。


ブログパーツに、現在の学習状況を貼り付けれるので、↓に貼ってみた


なんで高校の時に無かったんだろう・・・ww


もっと詳しく知りたい方は実際にやってみるか、最強Web2.0サービス「iKnow」登場、ただし英語勉強したい人だけ!を見てください
Javaには、Class.forName(String className)というメソッドがあり、指定したクラス名のClassオブジェクトを返すstaticメソッドがありますが、flexでもそれがないか探してみました。

すると


というプログラムが見つかった。

また、次に次のようなプログラムも見つかった。


さらには、次のようなものも



まだちゃんと検証とかまで手が回ってないので、出来次第まとめます。
今回はとりあえずメモでー


<参考>
Flex2 リファレンスガイド (http://livedocs.adobe.com/flex/201_jp/langref/)
Java 5 と ActionScript 3 の構文比較 (http://d.hatena.ne.jp/flashrod/20061212)
Flex User Group(http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=1241)
アプリケーションレベルのMVC [FLEX2] (http://blog.so-net.ne.jp/yoshimoto/2006-12-24)
SJC-Pの時に勉強したんだけど、ごっちゃになってきたので、整理しておきます。


あるサブクラスのオブジェクトをスーパークラスの変数として扱ったときに、
フィールドとメソッドで異なった動きをする。

どっちがどっちかわかんなくなったので、実際にプログラムを書いて走らせてみた。



このようなSuperクラスとSubクラスがあったときに、次のプログラムを実行




まとめ
・フィールドは、オブジェクトの型ではなく、変数の型のものが呼ばれる
・メソッドは、変数の型ではなく、オブジェクトの型のものが呼ばれる


strutsに入っているstruts-htmlのタグライブラリには、
html:img
html:image
と、画像を表示するっぽいのが2つある。

前者は、コンパイラによって、<img src="~~~">に変換され、後者のが今回のテーマである、送信ボタンで使うものである。


送信フォームをフツーのボタンにしたとき、jspは、


となるのだが、このhtml:submitを次のように、html:imageとして、propertyにimage_bottun,valueにsendを設定すると、この画像が送信ボタンになってくれる


ソートと言えば、クイックソートやマージソートなどが有名だが、トポロジカルソートというソートがある。
だが、このソートは、前述したクイックソートなどの与えられた数列を昇順(降順)に並び替えるものではない。

じゃぁ、トポロジカルソートって何だ??ってというと、
ある有向グラフが与えられた時に、矢印(アーク)の向きと大小関係が一致するように、それぞれ異なった整数をノードに割り当てることである(らしい


例えば、左のような有向グラフが与えられたなら、矢印の先のノードの方が大きくなるように数字を振っていくと
右のようになる

t1.gift2.gif  















ここで、矢印の向きと大小関係が一致するということから、双方向の矢印は存在してはいけない。

また、グラフに閉路(循環)が存在してもいけない。それは下のグラフを見れば分かると思うが、このグラフにトポロジカルソートを行うのは不可能だ。
下の状態では、3→1のところで、条件を満たしていない
t3.gif













で、これをどういうアルゴリズムで出来てるのかというと・・・


あー、もうメンドクサイからレポートのコピペ

下のようなメソッドを書いて、for文でこのメソッドの引数を変えながら順番に呼び出していけばよい







最後に、せっかくレポートで書いたので外部仕様を

【visitメソッドの外部仕様】
閉路検出機能付きのトポロジカルソートを行う。
トポロジカルソートとは、ある有向グラフが与えられた時に、矢印(アーク)の向きと大小関係が一致するように、それぞれ異なった整数をノードに割り当てることである。

○入力
・iは現在いるノードの位置
・nはノードの数

○出力
・jは、ノードを順番に調べる際のカウンタ
・vは、ノードiからアークのあるノードを保持する一時変数
・adjacentは、あるノードから別のノードへのアーク(矢印)が存在するかを示す2次元配列。アークは一方方向のみであるので、adjacent[i][j]==CONNECTEDである場合、adjacent[j][i]は常にUNCONNECTEDでなければならない。また、adjacent[i][i]は常にUNCONNECTEDである。
・visited、そのノードは訪問済みか、訪問中か、まだ訪問していないかを示す配列
・resultは、そのノードにおいて、トポロジカルソートの結果割り当てられた、トポロジカルソート値を示す保持する配列。また、resultの各要素はゼロから始まる自然数のいずれかで、数値が飛ぶことも重複することもない。
・    戻り値は、与えられた有向グラフから閉路が検出できればfalse、そうでなければtrue


昨日、レイトンクリアした~っていう記事を書いたところ、

「レイトン 間違い探し」とか「レイトン教授と悪魔の箱 間違い探し」で検索されてたので、


需要があるのかなと思いつつ、載せてみる



001
・中央左のドアノブの位置
・左の鏡の下の小物
・右奥のライト

002
・手前ちょい右のビン
・中央置くの布
・左上の家の窓

003
・中央ちょい右の家の窓
・手前左ゴミ箱のふた
・中央のドア左の段差

004
・中央左の服の袖
・右のディスプレイ内の数
・中央右の背景の地図の島

005
・中央手前の赤いしみ
・中央の鏡のひび
・右上の赤いにんにく?の一番上の一個

006
・右下のトロッコから出ている棒
・炭鉱入り口右のしげみ
・炭鉱入り口左の丸いヤツの数

007
・左下のきのこの数
・中央奥の切り株
・右上の木のもじゃもじゃの数

008
・広場中央のなにか
・家の煙突?
・家の左の下のほうの枝

009
・真ん中のスイッチ
・穴の手前右の柵の数
・手前左の柵のゆがみ

マジ頭使ったよ

ネタバレにならない程度に書こうと思うけど、無理だったらスマソ


不思議な街との変化としては、

まず、メモの書き方が変わったのと、


前回のロボット犬に相当する、ハムスターが飼えるのと、


部屋機能に相当する、ハーブティーの調合と


カメラで撮った写真の間違い探しかな










以下軽くネタバレ




英国紳士はさんざん他人の部屋を捜索した後、人の部屋に入ってはいけない的なコトを言う。

英国紳士は、ロンドン学会の講演より恩師への感謝を忘れてはいけない。

今回はストーリー内に138個なぞがある。

最後の謎で、一瞬フリーズしたかと思う




次回作の『レイトン教授と最後の時間旅行』が楽しみだ

iKnow

あわせて読みたいブログパーツ
Firefox meter