‘疑問’ カテゴリーのアーカイブ

Windows Live Essentialsのアップデート

いつものようにブログを書こうと思ってWindows Live Writerを起動してみたら、最新版があるから更新しろというメッセージ。それならばとLive Essentials全体を更新かけてみたのだけど、Windows Live Writerはバージョン番号変わらず…えー。

ちなみにアップデート前のバージョン番号:Build 14.0.8089.726 ja

アップデート後のバージョン番号:Build 14.0.8089.726 ja

The Windows Blog

上記記事見る限り、小さなバグフィックスがあったということだけど…?


PHPのDateTimeの結果が-0001-11-30 00:00:00になる現象について

mySQLなどで、日時を0000-00-00 00:00:00としてデータベースに格納しておくことがありますが、これを読み込んでそのままPHPのDateTimeオブジェクトに渡すと、出力が-0001-11-30 00:00:00になってしまいます。

$a = new DateTime('0000-00-00 00:00:00');
echo $a->format('Y-m-d H:i:s');
// Output: -0001-11-30 00:00:00

PHP :: Bug #42971 :: DataTime::format(): not well formated data ‘0000-00-00 00:00:00’

で、これはバグではないと言われているので、どういうことかと考えてみると、0000-00-00は存在しない0月0日を指定しているので、0月は繰り下がって-1年12月0日、さらに0日も繰り下がって-1年11月30日、となるわけですね。

データベースとPHPの文化の違い、というところでしょうか。

ちなみにDateTime型、コンストラクタにNULLを渡すと現在時刻のインスタンスが生成されるので、データベースの値をNULLにしておくと、現在時刻になってしまいます。うーん…symfonyのDoctrineでNULL判定したい場合はどうすればいいんだ…

$row->getDateTimeObject('deleted_at')

みたいなことがやりたいのですが。

sfDoctrineRecordも

    $type = $this->getTable()->getTypeOf($dateFieldName);
    if ($type == 'date' || $type == 'timestamp')
    {
      return new DateTime($this->get($dateFieldName));
    }

こうなってるからオーバーライドするしかないのかな。


Windows 7でSynergyを使おう


※2012年4月20日追記

Macを含めないなら、Microsoft The Garageで公開されているMouse without Bordersがかなり便利です。
Microsoft download from The Garage: Mouse without Borders – Next at Microsoft – Site Home – TechNet Blogs

一番下にあるDownload Nowからダウンロードできます。

特に設定らしい設定も不要で、双方向にマウス・キーボード操作ができ(Synergyは片方向)、UAC上でも問題なく操作できます。Synergyのようにホストとクライアントの区別もありません。

あと、そんなに使う用事があるのかはわかりませんが、すべてのマシンで同時に同じ操作をさせることもできます。

おすすめです。

ライセンス版で数週間早く入手したものの、結局パッケージ版が発売されてからインストールしました。Windows 7。

XPの入っていたノートPC(Panasonic Let’snote R5)にWindows 7 Professionalをインストールしたので、とりあえずメインPCから操作できるようにしようと、Synergyをインストールするも…手動で起動すれば動作するものの、自動起動すると動作せず。管理権限で実行してサービスに登録しても動作せず。というか、繋がってはいるみたいなんですけどね。サーバ側のマウスがどこかに行ってしまうので。

で、synergyは2006年に更新が止まって、Vistaも対応していないし、何か後継があるハズ…と思って英語のWikipediaを見たら、synergy-plusというフォークプロジェクトがあったんですね。

Google先生も、「synergy」で検索したら、「もしかして synergy-plus」くらい出してほしいところですが…

32bit版、64bit版もあるので、7から64bitに乗り換えた人も安心ですね。

plusを入れる前に、一度synergyを入れていたので、設定情報を引き継いでくれているようです。といっても必要な設定項目はHost Nameの設定だけですけど。

とりあえずsynergy-plus-1.3.4-Windows-x86-r1.exeをダウンロードしてインストール。今回はクライアント側(操作される側)として使います。

やっぱり色々問題ありました…

  • ログイン画面では入力ができない
  • UACになると操作はできない

あぁ、微妙…というか、大して改善されてないですね…

自動ログインにしてWindows7のUACも無効にしてしまえばいいのかなぁ…複数ユーザ使いたい場合はどうしようもないしなぁ…

Vistaでの対策は以下のページ参照。

Fixing Problems with Synergy on Windows Vista :: the How-To Geek

Windows 7でUACを無効にするには以下のサイト参考。

Disable User Account Control(UAC) For Administrators Only :: the How-To Geek

ざっくり日本語版での対応を説明すると、

スタートメニューの検索からsecpol.mscと入力して実行。ローカルポリシーのセキュリティオプションから、「ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作」をダブルクリックして、「確認を要求しないで昇格する」を選択。

らしいですよ?試してないですが。

結論としては、今後に期待…

2011年3月20日追記

すっかり追ってなかったのですが、synergy-plusは本家synergyとマージして開発がバリバリ進んでいるようですね。

http://synergy-foss.org/

今は安定版の1.3系列と、ベータ版の1.4系列、ゼロから(from scratch)書きなおす2.0系列があるようです。それぞれの機能やサポート状況は別の機会に調べてエントリーします。

ロードマップ – Synergy


Pythonのwin32comからSilverlightを使おうと試みる

最終的にはPythonで書かれたWindowsアプリケーションで、Silverlightのコンテンツをロードしたいという目的なのですが、とりあえずSilverlightのActiveXコントロールを読み込んで動作を確認してみたいので色々実験。

まず、インストールされているSilverlightのバージョンを調べてみる。

Javascriptで書かれたコードがいくつか見つかったのでそれを書き直す。

以下はJS版。

var control = new ActiveXObject('AgControl.AgControl');
alert(control.IsVersionSupported('3.0'));

これをPythonで書いてみる。

import win32com.client
control = win32com.client.Dispatch("AgControl.AgControl")
print control.IsVersionSupported('3.0')

Silverlight 3がインストールされていればTrueが表示されます。

他にどんなメソッドが定義されているのかを調べるために、Visual StudioからAgControlを参照して、オブジェクトブラウザで調査。

というか、Silverlightのプラグインのリファレンスがあった。

Silverlight プラグインのオブジェクト リファレンス

が…Sourceを指定してもIsLoadedプロパティがTrueにならない…うーん…もう少し調べてみる。


FON2202のファームウェアのビルド

La Fonera2.0ことFON2202のファームウェアのビルドに成功したのでメモ。

環境はDebian lenny。主な手順はここ。

build fon-ng

でもこのままやってもビルドできませんでした。

まずは手順にある通り、必要なパッケージをインストール。

$ sudo aptitude install subversion g++ libdigest-crc-perl ncurses-dev zlib1g-dev gawk bison flex autoconf intltool-debian intltool

他のサイトで、以下も必要みたいな記事を読んだのでインストール。

$ sudo aptitude install gettext pkg-config libz-dev ccache libncurses-dev unzip

libdigest-crc-perlがaptだと古いという話なので、CPANから最新をインストール。

$ cpan
CPAN> install Digest
CPAN> install Digest::CRC
CPAN> install YAML

で、手順通りレポジトリからtrunkを落とすとビルドできないので、tags/Flipper-2.2.5.0をダウンロードします。

$ svn co http://svn.fonosfera.org/fon-ng/tags/Flipper-2.2.5.0
$ cd Flipper-2.2.5.0/
$ ./install.sh
$ cd openwrt/
$ make menuconfig

メニュー画面ではとりあえず何もせずにそのままExitで設定を保存。

いざmake。V=99は詳細表示オプション。なくてもいい。

$ make V=99

超時間かかる。Core2QudaのVista上のVirtualPCで2時間くらい。

で、完了。

$ ll bin/
合計 8388
-rw-r–r– 1 dev dev   65536 2009-08-13 09:24 loader.bin
-rwxr-xr-x 1 dev dev   11860 2009-08-13 09:24 meraki-loader.elf
-rwxr-xr-x 1 dev dev 3039219 2009-08-13 09:24 openwrt-fonera2-vmlinux.elf
-rw-r–r– 1 dev dev  786432 2009-08-13 09:24 openwrt-fonera2-vmlinux.image
-rw-r–r– 1 dev dev 4653060 2009-08-13 09:24 openwrt-fonera2.image
drwxr-xr-x 3 dev dev    4096 2009-08-13 08:32 packages

packagesディレクトリにはipk形式のパッケージファイル一式ができてます。
これが
http://www.fonera.be/rep/FON2202/index.php
これってことか。サイトにはpackagesディレクトリに含まれていないものもたくさんあるけど。
逆に言うと、ipkファイルを作る必要性はなさそう。

このままでは正しくファームウェアを書き換えられたかわからないので、ちょっと軽くいじっておきます。
Fonera->facebookをスペースでチェックを外す

ちょっとここで通常のファームウェアの構成を調べる。

$ wget http://download.fonosfera.org/LATEST/20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz
$ tar xvzf ./20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz
20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.image
upgrade
fonera20_fon.image

できたファイルはディレクトリを含まず上記3つ。

$ ll
-rw-r–r– 1 dev dev 4653060 2009-04-22 01:05 20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.image
-rw-r–r– 1 dev dev 4529210 2009-04-22 02:50 20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.tar.gz
lrwxrwxrwx 1 dev dev      48 2009-08-13 19:25 fonera20_fon.image -> 20090421_FON2202_2.2.5.0_Flipper_DEVELOPER.image
-rwxr-xr-x 1 dev dev     305 2009-04-01 00:57 upgrade

fonera20_fon.imageはシンボリックリンクでimageファイルの実体へ。で、upgradeがシェルスクリプトになってて、これが実行される、と。

$ cat upgrade
#!/bin/ash

VERSION=$(cat /etc/fon_version)
FAILSAFE=$(cat /etc/failsafe)

if [ "$VERSION" = "2.2.1" -o "$VERSION" = "2.2.2" -o "$VERSION" = "2.2.3" -o "$VERSION" = "2.2.4" -o "$FAILSAFE" = 1 ]
then
mtd -r write fonera20_fon.image image > /dev/null 2>&1
#(sleep 4; reboot) &
return 0

else return 1; fi

なるほど、バージョンチェックして必要ならmtdコマンドで書き換え実行ということね。ということは、すでに2.2.5になってるこのFONでは上書きできないということか。

というわけで書き換える。

$ vi ./upgrade

シンプルに以下の感じに。

#!/bin/ash

mtd -r write fonera20_fon.image image > /dev/null 2>&1
return 0

で、リンク先を書き直し。tar.gz作成。

$ rm fonera20_fon.image
$ ln -s openwrt-fonera2.image fonera20_fon.image
$ tar zcvf openwrt-fonera2.tar.gz openwrt-fonera2.image fonera20_fon.image upgrade

で、できあがったopenwrt-fonera2.tar.gzを管理画面経由でFONにアップロード。

Firmware Update
Failed to identify upload.

Σ(゚Д゚)ガーン

なんだろ。ちなみに公開されているtar.gzを展開→再圧縮しただけでも反映に失敗したので、何かtarの作り方に秘密があるっぽい。
仕方ないのでimageファイルを転送して、FON上のSSHで反映することに。
以下、FONのSSH。

# cd /tmp/
# mtd -r write fonera20_fon.image image
Unlocking image …
Writing from fonera20_fon.image to image …  [w]
Rebooting …

で、どうやら書き込み完了。wktkしながらブラウザで確認…

緑の画面から書き変わってオレンジの画面に…あれ?SSHが効かない…?ん?Facebookのアイコンは残ったまま…?

Facebookは画面から消すのに何か別の作業がいるのかもしれないと思うことにして、SSHは…?プラグインのところにも出てこないし…

しかもブラウザからファーム書き戻そうとしてもバージョンが同じだから上書きできないし!!

\(^o^)/オワタ

シリアルケーブル手に入れるまで放置で…

もしくは管理画面からアップできるtar.gzの作り方、か。

※追記(2009/10/12)

lostmanさんに教えていただいた方法で復旧できました。
FON2202をFailSafeモードで復旧させる : blog.loadlimit – digital matter –


Adobe AIR.dll

HKEY_LOCAL_MACHINESOFTWAREClassesAIR.InstallerPackageshellopencommand

c:PROGRA~1COMMON~1ADOBEA~1Versions1.0ADOBEA~1.EXE "%1"

と、謎のリスト。

LAUNCH
-launch
IS_INSTALLED
-isinstalled
WITH_RUNTIME
-withRuntime
URL
-url
RUNTIME
PLAYER_VERSION
-playerVersion
SANDBOX_TYPE
-sandboxType
SECURITY_DOMAIN
-securityDomain
HTTPS-https
USER_EVENT
-fromUserEvent
SEPARATOR
PSN_PREFIX
-psn_
SILENT
-silent
LOG_TO_STDOUT
-logToStdout
LOCATION
-location
DESKTOP_SHORTCUT
-desktopShortcut
PROGRAM_MENU
-programMenu
X1
-x1
UPDATE
-update
WITH_APP
-withApp
UPDATE_X1
-update:x1
INSTALL
-install
STDIO
-stdio
ARP_UNINSTALL
-arp:uninstall
UNINSTALL
-uninstall
INFO
-info
UPDATE_CHECK
-updatecheck
INSTALL_UPDATE_CHECK
-installupdatecheck
APPLY_UPDATES
-applyupdates
UPDATE_INSTALL
-updateinstall
EULA
-eula
EULA_ACCEPTED
-eulaAccepted
ELEVATED_INSTALL
-ei
ELEVATED_UNINSTALL
-eu

詳細不明。

Adobe AIR Application Installer.exe – AKABANA


GmailとWindows Live メールの相性がひどい件

いつもGmailでたくさんのメールに「Junk E-mail」というラベルが勝手につく。時々必要なメールにもつくので困っていた。

何が原因なんだろうと思っていたら、Windows Live メールのせいだった。

Gmailで受信したメールに対して、IMAPでアクセスしているWindows Live メールが勝手に迷惑メールを分類してしまうのが原因で、GmailのWeb側でいくら迷惑メールを処理しても、Windows Live メールが再読み込みするたびに元に戻される。

しかも何が困るってIMAPにはメールフィルタをかけられないこと。フィルタをかけられるなら、受信段階で処理を止めさせるとかできたと思うのだけど…

IMAP

そのくせ、迷惑メールの処理だけはするのに、それを特定のアカウントに対してやめることもできない。

一応、Gmail側のフィルタ処理を諦めれば、Windows Live メールのアカウント設定でIMAPのフォルダを設定してやることで、Gmail側の迷惑メールフォルダは使える。

IMAP2

と思ったら使えなかった。

IMAP3

あぁ…なんて微妙な…

ちなみにルートフォルダのパスを指定すれば迷惑メールフォルダにつっこめるようになるのだけど、ラベルが使えなくなるそうな。

Windows Live メールでGmail見るなってことですか、Hotmail使えってことですか、そうですか。