Yahoo! ボックスのデスクトップ版アプリ

Web上でのファイルの置き場自体はDTIのVPS上にWebDAVとして確保してあるんですが・・・なんせVPS自体が遅くて正直使えない。ほとんど緊急用途ぐらいの使い道しかない。

マイクロソフトのSkydriveは、標準でWindowsのフォルダーのように扱えない。次期バージョンのWindows8(仮称)では、ちょっと違った感じでSkydriveとの連携が実装されるのかもしれないけど。

他にもいろんなDropBoxとか探せばいろんなサービスとかあるんですが・・・イマイチ。
悩んでいたところにYahoo!ボックスが使えるようになったので、YahooのブリーフケースとPhotoからデータを移行することにしました。

幸いなことに?Yahooはプレアカだったので50GBも使える! プラス300円で1TBの容量が! というわけで?パソコン用のアプリもインストール。iPhone用のアプリがまだリリースされていない、ということでちょっと使い勝手が悪いですが・・・パソコンでは十分に使えてます。

が、二つだけ不満あり。

一つ目は・・・
パソコン用のアプリ、フォルダーにアクセスする際になんか認証とかかけられてたらいいな、と思う。インストール時にYahooのアカウントを入力するだけ。家のデスクトップならいいんだけど、ノートパソコンや、会社のパソコンにインストールするにはセキュリティー的にちょっと不安です。

二つ目は・・・
ブラウザからのアップロード時のファイル指定。アップロードするファイルを一個一個指定していくやり方は、いまどきのスマートさが感じられず。せめてFlashを使った複数一括アップローダーか、どうせなら、ブラウザへのドラッグ&ドロップ(HTML5)に対応して欲しかったなぁ。

Yahooってテクニカルな部分で、進んでいるのか、フツーなのか、よく分からない。

javascript コードをウェブページに注入

ブックマークレットって、意外に便利ですよね。

でも、ネット(主にWeb)にベッタリ依存している人は別として(笑)、一般的にはあんまり浸透していないんじゃないかと思います。というか、言葉を知ってても、一体何なのか分かっている人は、もっと少ない感じ。

実は僕もブックマークレットの便利さを、つい最近知ったんで(^^;;;

ブックマークレットの実体はブラウザのブックマークに登録された、javascriptなどの極少量のスクリプトコードなんですが・・・、この「極少量」っていうところがミソで、FireFoxやChromeのブラウザのアドオンや拡張機能を実装するほどでもない機能をブックマークレットで・・・ってとこでしょうか。

要は、任意のページにjavascriptコードを注入できる、ということ。

僕がよく使うのはブログなどに表示される広告削除。。。だって読みづらいったらありゃしねー。ブログサイト毎に作ってブックマークに登録しとけば非常に便利。

特に、iPhone のSafariブラウザでのブログ閲覧は、もう最悪。狭い領域にパカパカ広告開いて、ご丁寧にもタッチ操作するたびに違う広告を呼び出すので、3G回線で使うときは固まっちまう。

iPhoneのSafariブラウザも、ブックマークレットは使えるのですが、ブックマークの登録時はURLを変更できないので、一度どこのサイトのどのページでもいいのでブックマークを登録して、そのブックマークを編集・修正することでブックマークレットを登録できます。2度手間なので、なんか一発で登録できるアプリないのかな・・・?

たとえば、アメブロのスマートフォン用ページ(iPhoneでしかアクセスしたことないので他のスマホは知らない)では、↓ のように、広告バー?が表示されます。

画像

アメバさんには悪いけど、これヒジョーにうっとおしい。固定されていれば文句はないんですが、タッチ操作するたびに消えたり・表示されたりするので、動作が遅くなるし、誤ってクリックしようもんなら・・・

ムカーーーーーー!金麦なんて、ぜってー、飲まねーーーー!

とくるんですよね(笑) ちなみに、僕はビール類とかお酒自体飲まないんで。そんなの知ったことねーか(^^;;; とにかく、どんなブログサイトでも、こんなスタイルで表示されてるんじゃないでしょうか? ブックマークレットで消しましょう。

あくまで、アメブロの例にしますが、他でも同じ感じです。 手順は簡単で、

  1. この広告に使用されているDOMノードを特定
  2. DOMノードを削除

これだけ。具体的なコードは・・・

javascript:(function(){var ads=document.getElementsByClassName("adBanner");for(var i=0;i<ads.length;i++){ads.item(i).parentNode.removeChild(ads.item(i));}})();

アメブロの広告は、<div class=”adBanner”>というタグが使われているので、getElementsByClassNameで取得して削除しているだけ。

DOMノードの解析に、僕はPCでGoogle Chromeの「デベロッパー・ツール」を使ってます。Chromeを起ち上げる際、起動オプションとして、

--user-agent="Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5"

を付けて起動すると、ブラウザの表示がスマートフォンと同じようになりますので、そこでデベロッパーツールを表示させて広告表示に使用されているDOMノードを特定できます。FireFoxやIE/Operaでも同様のツールが使えると思います。

で、上記コードをコピペして、ブックマークに登録。
ただ問題は、ページ毎にブックマークを選択しないといけないので、PCのブラウザならワンクリックでいけますが、iPhoneだとメンドクサイですね~

ノードを特定したいときにjQueryとか使いたいとか、もっと長いコードを登録したい場合は、document.createElement(“script”)などで外部スクリプトファイルを読み込ます方法があります。

正しく使えば非常に有用なんですが、少し考えると分かりますが、非常に危険なコードを簡単に注入することが可能です。使用者本人のコードなら問題はないと思いますが、他人が作ったブックマークレットは、リスクが伴います。諸刃の剣ですかね。

Out of sync with server ??

VIsual C# 2008 と MySQL Connector / NET 6.4.3 で、ブロードキャストされるUDPパケットを受信してDBのテーブルへ格納する、という一連のコードをC#で組んでましたら、ローカルに立てたMySQLには普通に接続できてSQLクエリーも処理されるんだけど、LAN内の他のマシン上のMySQLサーバーへSQL文を投げると・・・

Out of sync with server

という今まで見たことのないメッセージとともに例外がスローされてしまって困ってました。

コードはごく普通のものなんだけど・・・。

/*
  myInsertQuery は、テーブルへINSERTするSQL文(string型)
*/
using System.Data.Common;
...
try
{
  lock(DBConnection)
    {
      DBConnection.Open();
      
      DbCommand command = DBConnection.CreateCommand();
      command.CommandText = myInsertQuery;
      command.ExecuteNonQuery();
      
      DBConnection.Close();
    }
}
catch(Exception e)
{
  MessageBox.Show(e.Message);
  return false;
}

クライアントと同じマシン上のMySQLサーバーへのクエリーは成功するんですが、LAN内の他のマシン上のMySQLサーバーへのクエリーがどうやっても “Out of sync with server”というエラー。

ローカルマシンは、WindowsXP + MySQL 5.1 (正常に処理される)
リモートマシンは、CentOS 5.5 + MySQL 5.0.77 (エラーが出る)

訳が分からない。で、MySQL Connector/NET が6.4.4にマイナーアップしていたので、入れ替えたら、普通に成功した。

なんだよ! ただのConnectorのバグかよ・・・orz

ググったら、同じエラー・メッセージでbugレポート出てた・・・。

Tried to use Windows Developer Preview a little.

先週から、Windows8 の開発者用のお試し版? がダウンロードできるようになりましたね。ちなみに、名前には「8」がついていないので、正式な製品リリースの名称は、「Windows8」 ではないのでしょうね。

Windows Developer Preview Download

僕も当初Windows7上のWindows VIrtual PCにインストールを試みようと思っていろいろ情報を集めてたんですが、Virtual PC上ではインストールができない、というようなブログ記事がほとんど。

自分は別にデベロッパーではないけど(^^;;;・・・ミーハーな僕も興味本位でもなんでもいいので、なんか試してみたい!!!、というわけで、先月VAIO Zを買って休眠している VAIO Type T(TZ90NS)を引っ張り出してきて、 Windows Developer Preview を インストールしてみました。単にインストールして、ちょっとだけMetroUIを試したい、というだけですので、あしからず….

VAIO Type Tの主な仕様は、

  • Core2Duo U7600(1.2GHz)
  • DDR2 533 2GB
  • チップセット内蔵 インテル グラフィックス・メディア・アクセラレーター 950
    また、メモリが2GBしかない関係上、64bit ではなく、32bit(x86)版のものをインストールしました。まだ、前の環境(Windows7)が残っていたので、一度Windows7を起ち上げ、Windows Developer Preview の setup.exe を使ってインストールしました。

DSC00259

実は、この画面に行くまで30分ぐらいかかってます(^^;;;  やっぱクリーンインストールにしておけばよかったかな・・・。

とは、いいつつ、インストールにかかる時間は思ったよりかからなかった。ベータ版とか製品版だともっと時間かかるようになるのかも。1~2度再起動がかかり、設定画面でWindows Liveアカウントの入力とかをした後、やっとインストール完了。

DSC00267

インストール直後の画面は、800×600 の解像度のままで、ドライバは標準のVGAドライバみたいで、動作は遅いです。で、まず、チップセット内蔵のグラフィックドライバをインストール。すると、やっと Windows8らしい、ロック画面に。。。

DSC00270

このロック画面、、タブレット端末を想定しているみたいで、画面をドラッグして上の方へマウス移動すると(画面をめくると)、ログイン画面が出てきます。何から何まで、画面タッチデバイスありきのUI、という印象です。

画面表示は全部英語リソースですが、入力(IME)と表示に日本語が使用できますが、あくまでDeveloper Preview なので、スクロールバーとか細かいところを見れば、画面表示はほとんど未完成。未完成というより、まだUIデザインが決定されていないんでしょうねぇ。

start

Metro UIも、タッチデバイスがないと全く意味をなしません(笑) マウスのホイールをクルクル回すとスクロールしますが・・・

で、デスクトップ上のウィンドウフレームはWindows7と変わらず。ウィンドウが角丸ではなく、角張っているぐらいで、エクスプローラはかなり様変わりしてますね。

コントロールパネルも真っ白(^_^;)

control-panel

で、一つ、気になったのが・・・コレ↓

16bit-support

Windows7では、16ビットアプリのネイティブサポートは終わった、と思ってたんですが・・・(動かしたいときはXPモードで)、Windows7のコントロールパネルでこんなのあったっけ??? 僕がインストールしたのが32bit版だったので、32bit版のみに含まれているだけかもしれません。

64bit版のWindows8では、機能限定版の?Hyper-Vが入るみたいなので、レガシーアプリは完全に仮想環境で、という風になるんでしょうねぇ。

感想

肝心のMetro UIは、マウス操作の環境では、全く意味ないです(笑)MBAのタッチパッドみたいなデバイスが最低限必要す。

従来のデスクトップはWindows7とほぼ変わらず。エクスプローラのメニュー、ツールバー、コマンドバーが一掃されて、リボンUIになってるとことか、タスクマネージャが、まともな情報を表示するようになったとか、32bit版なので試してないけどHyper-Vとか、内部動作の細かいところがブラッシュアップされている感じ。ちょっと使ってみた感じだと・・・

Windows 8(Developer Preview) = Windows7.5  + スマートフォン(MetroUI)

というような印象を持ちました。CPUとかメモリはそこそこのものでも、動くけど・・・古いチップセット内蔵のグラフィック機能だけだと、使えない!です。

画面切替のアニメーションなんかはスムーズなんだけど、チップセット内蔵のGPUが非力すぎて、ムービーが再生されてる状態で画面を切り替えたりすると、GUIアニメーションの優先度が高いのか、動画再生がカクカクする。CPUより、GPU(グラフィック)の重要度を再認識させられた感じ。

結論

画面タッチデバイスがないと、まったくもって楽しくないです(笑)

PHPにはもうウンザリ

自分の知識の無さが恥ずかったこと。

PHPで組んである、動かない入力フォームのメール送信スクリプトを、ちょっと見てくれないか? と言われ見てみたんですが・・・、はじめ、見たとき正直、なんでこれが動くんだ? と思ったんですね。

いきなり、初期化されていないグローバル変数で分岐してあるような、理解不能なコード。
だいたい要点は ↓↓↓↓ こんなん。

&lt;?php
include('function.php');

$NAME = stripslashes($NAME);
$PHONE = stripslashes($PHONE);

if($send == 'ok')
{
 /* ゴニョゴニョ*/
}
else
{
/* こそこそ */
}

/* だいたい上記のようなコードから始まる。*/

文字列比較に == を使っているところなど、ツッコミどころ満載なんですが・・・
$NAMEって? $PHONE って? $send って? どこから来たん???
しばしPHP配布サイトのマニュアル見ながら、考える・・・・。
WAMPで立ててる、Windowsのテストサーバーで動かしても、当然ながら動かず。

(他の仕事をしながら、数時間経過)

は!? これがもしや register_globals 問題か???? と思って、実際上がってるサーバーの仕様を教えてもらうと、
register_globals は off 。まぁ・・・当たり前ですが・・・。気付けばなんてことない。

というか、PHPのバージョン 4以前から組んでいる人からすれば、すぐに気付くんでしょうけど・・・、
僕がPHPを触りだしたのは PHP5 から。当然、入力は $_GET[]や$_POST[]で取るもんだと思ってました。
「動くはずがない!」と断言してしまってました(笑) あー、恥ずかしや・・・(T-T)

っていうか、PHPってなんちゅー仕様なんだ???
register_globals を on にするメリットが全く理解できない。というか、なんでこんな設定があるのかが分からない。

ネットにアンチ・PHPって人をよく見かけるけど・・・分かる気がする。昔の人は、よくこんなキモイ仕様で書いてたもんだ。

<?php ?> で括れば、容易にサーバーサイドのコードを埋め込めるのは、便利なように見えるんですが・・・ HTMLタグとPHPコードがスパゲッティー状にこんがらかったファイルを見ると・・・たとえ自分が書いたコードでも読む気がしない・・・というか、自分で書いたものさえ2~3日したら解読不能になる orz…