2010/09/30

ボリンジャーバンドを書き直す

BolingerBands_CI.mq4- Project Hosting on Google Code

MetaTrader4のカスタムインディケータです。なんの変哲もないボリンジャーバンドです。

標準の"Bands"が±σ2と中央の移動平均の3本しか引いてくれないので、±σ1も合わせて5本引いています。

インディケーターの計算式はちょうど忘れた頃に限って内容が気になり、その度にwikipedia行って調べたりしているので、3ヶ月毎に「標準偏差ってなんだっけ?」と調べ直さなくても良い様に、3ヶ月後の自分でもコードを読めば解る様に書いたものです。

一度、自分でコードを書くと割と頭に入るので、多分3ヶ月後には見直さないと思いますが、1年後にはまた見るかもしれません。

2010/09/24

TortoiseSVNのインストールが失敗

少し前から、バージョンアップの通知が出ていたので、1.6.10をダウンロード&インストールしたところ、コンテキストメニューに表示されなくなりました。

インストーラーをもう一度起動して、修復(repair)する必要があるらしい。

 [TortoiseSVN]バージョンアップしたら日本語パックがチェック通らない!⇒また【修復】で回復。 - Project Note

  1. 1.6.10をインストール
  2. PC再起動
  3. 1.6.10を再インストール(修復)
  4. PC再起動

としたら、ちゃんと表示されました。

LaG更新

Launcher_As_Gesture - Google Code

以前作った、マウスジェスチャの様なランチャAutoHotkeyでマウスポインタの移動を感知するセンサーを組み合わせてみました。

Windowsに触る時間自体が減っていますが、ずっとMacに触った後だと、適当に自作したアプリのUIのもっさり感がいかんともしがたい。

Macでも同じような物を作りたいですが、AutoHotkeyに変わるような物がないので、とりあえずXcodeを入れましたが、全く実装の見当がつきません。

2010/09/15

AutoHotkeyでマウスポインタの移動を感知する

doughnutSensor

AutoHotkeyはキーバインディングを目的としたスクリプト実効環境なので、キーイベントに関しては詳細な設定ができますが、ポインティングデバイスに関しては思った様には行きません。

マウスポインタが移動したかどうかを判定するには、一定間隔で座標を監視するタイマーを作るか、GUIを作成してOnMessageでウィンドウイベントを取るかしないと思われます。好きな場所でポインタが1ドット移動した、といったイベントをとる事ができません。

以前作成した、マウスジェスチャの様なランチャでは、中クリックがないMagicMouseのために、↓ジェスチャに中クリックを割り当てていました。

しかし構造上、ボタン押し下げと同時にランチャウィンドウがポインタの下に割り込むため、アクティブウィンドウが変更され、プルダウン等の一時的に表示されるコントロールが消えてしまう、という問題が発生。

何が困るかと言うと、Firefoxのブックマークツールバーにあるフォルダの中のブックマークを新しいタブで開く、という動作はプルダウンの要素を中クリックする必要があったのです。ランチャを実運用してみると、普段意識しない操作を意外に多く行っている事が判明しました。

Firefoxだけならば、タブの動作を変更もできますが、全てのアプリでそうとは行かず、ランチャ側で対応することに。

ということで、右ボタンを押し下げている間にポインタを動かさないと中クリック、動かした場合、改めてランチャを起動という仕様を実装するために、動いた/動いてないを判断する部分を作成したものです。

ランチャに組み込まないと、ただ右クリックが不便になるだけです。

2010/09/12

iOS4でもパケット下限

iOS4になってからマルチタスクに対応したため、アプリがバックグラウンドで常駐可能になりました。そのため、予期しないタイミングでパケット通信が発生し、パケット代が増える可能性があります。パケット上限で使っている場合、どうでも良い話ですが、パケット下限に抑える派には由々しき問題です。

そもそも、最近どのアプリでもオンラインでの同期機能が当たり前になってきたため、アプリを開くだけで(望まなくても)パケット通信をする可能性があります。

  • 標準のメモアプリ(GmailとIMAPで同期)
  • 標準のカレンダーアプリ(Exchangeで同期)
  • 標準の連絡先アプリ(同上)

データ取得方法を「手動」にする設定はありますが、ここでいう手動とは「更新」などのボタンを押したら同期、ではなく、アプリを開いたら同期という意味での手動です。バックグラウンドで自動で同期(プッシュ/定期フェッチ)はしませんよという意味での手動です。

そのため、同期設定のしてあるアプリを外出先で開くと、リアルタイムでの同期を必要としていなくても、開くたびにパケット通信が発生する可能性があります。

それを回避するために、オンラインサービスは一旦デスクトップのiCalやアドレスブックと同期し、iTunes経由で同期する、という方法もあります。しかしこれでは外出前にイチイチiPhoneをUSB接続して、iTunesを起動して同期する必要が有ります。(最近iPhoneの同期が早くなりましたが)面倒ですし、ヒューマンエラーによる同期忘れは避けられません。

そこで、最近ようやくバグが直った設定アプリを見ていると、「モバイルデータ通信」という項目が有りました。iOS4からの機能らしいですが、これを「オフ」に設定すると、データ通信のみを遮断できるようです。

データ通信をオフにしても、通話はできますしSMSもi.softbank.jpの着信通知も受け取れます。

利用可不可 備考
通話
SMS (080xxxxxxxx)
MMS (@softbank.ne.jp) × softbank携帯同士で
@softbank.ne.jp送受信はSMS扱い
IMAP (@i.softbank.jp) 着信通知は来る(SMS経由?)
送受信はWi-FiがONなら可能
ネット Wi-FiがONなら可能

[一般] > [ネットワーク]には[モバイルデータ通信]の他に、[3Gを有効にする]という項目も有ります。

一口に「3G網」といっても、その中には2種類の回線が有って、個別にオン/オフできるようです。電波状況しだいでは、メールは送れても電話が繋がらないといった状況もあり得ます。

デフォルトでは、恐らく両方オンになっていると思います。

[モバイルデータ通信]のみオフにすると、3Gアイコンが消え、通話回線のみになります。

[3Gを有効にする]をオフにすると、すぐに電波強度が1に下がり、その後「圏外」になります。

当然、3G網全体がオフの時にデータ回線のみオンにはできませんので、下図のような設定は無効です。このような設定でsafariを開いてもウェブサーバにはアクセスできませんでした。

[モバイルデータ通信]をオン/オフした際に、下位項目の[データローミング]の項目が連動して設定不可能になる様に、本来は[3Gを有効にする]をオン/オフしたら、下位項目である[モバイルデータ通信]は連動して設定不可能にすべきだと思います。

しかし、海外では3G網がオフでも2G網で接続する事も可能なようです。そのため、[通信回線を有効にする]ではなく[3Gを有効にする]という名称になっているようです。3Gをオフにしても、2Gのデータ回線を使用する事も考えられるため、「3G網のオフ=モバイルデータ通信のオフ」とはならないようです。

3G網しかない日本では実質「3Gのオフ=データ通信のオフ」ですが、ローカライズに際して、項目の入れ子関係まで変更できなかったと言ったところでしょうか。

まとめますと、設定アプリにて、

  • [一般] > [ネットワーク] > [3Gを有効にする]をオン
  • [一般] > [ネットワーク] > [モバイルデータ通信]をオフ
  • [Wi-Fi] > [Wi-Fi]をオン

としておく事で、

  • 電話、SMS、i.softbank.jp(着信通知のみ)が常に利用可能
  • MMSは常に利用不可能
  • IMAPメールやWebブラウザはWi-Fi環境下で利用可能

となり、パケット代は任意に[モバイルデータ通信]をオンにしない限り発生しない、という状態になります。

前提として、

  • softbankユーザとはSMSでメールする
  • MMSは利用しない
  • それ以外のキャリア、PCとはGmail -> i.softbank.jp経由で通知はプッシュ、送受信は手動
  • パケット通信は、自宅または公衆無線LANのWi-Fi環境で行う。

という環境を整えておく必要が有ります。しかし、メールをGmail経由にするのは、パケット代節約に関わらず、通信キャリアに囲い込まれないために有効なのでおすすめです。機種変更やキャリア変更のたびにアドレスをかえる必要がなく、スパム対策は有料サービスより優秀です。

関連 参考

2010/09/09

Re:後で調べる iOS4の不具合(一応解決)

iPhone構成ユーティリティ(iCU)3.1およびiTunes10にした時点では、今までと同様、

  • iPhoneから[設定] > [一般]を開くとフリーズする
  • iCUからiPhoneが正しく認識されない

iOS4.1にアップデート後、問題が解消

  • iPhoneから[設定] > [一般]が問題なく開ける
  • 構成プロファイルから自分の作ったプロファイルが消えている

softbank提供の「公衆無線LANし放題」というプロファイルは残っていました。

他に見かけなかったので、かなり特殊な条件が重なっての不具合だと思うのですが、iOSアップデートで直ったという事はOSのバグだったということでしょうか。

勝手プロファイルの扱いに問題があったのだと思いますが、プロファイル自体はテキストやバイナリで適当にいじった物ではなく、iCUから作った物です。

また、このプロファイルは自宅のWi-Fi情報を設定しただけの物だったのですが、強制削除された後も、得に設定していなくても自宅のWi-Fiには繋がっています。

iCUに関しても、これまでは

  • iPhoneをUSB接続しても、サイドバーの[デバイス]の下にiPhoneが表示されない
  • サイドバーの[ライブラリ] > [デバイス]の一覧にiPhoneが記憶されているが、詳細ペインの[構成プロファイル]タブに何も表示されない(プロファイルが二つ入っているはず)
  • iPhoneを接続したまま、iCUを終了させると「反応なし」になる。その状態でiPhoneの接続を解除すると終了する時もある。強制終了しないと終了しない時もある

と言った症状が全て改善されていました。

要するに、扱いに困っていたプロファイルを勝手に削除したダケみたいです。しかし問題が解消されたという事は、Appleが認識していたという事ですね。

今後、同様に問題のあるプロファイルは勝手に削除されるのか、もしくはOSアップデート時のクリーニング作業なのかがわかりません。再度、適当なプロファイル突っ込んだらフリーズが再発するのでしょうか・・・

関連

ソフトウェア アップデートで任意の項目だけ止める

Windowsにはマイクロソフトアップデートがありますが、MacにもApple Software Updateがあります。iTunesのWindows版等を利用していると、Windowsにもインストールされていると思います。Windows版は"Apple Software update"、Macの日本語環境では「ソフトウェア・アップデート」。

このアップデートツールは個別の項目に対して、更新通知をミュートできます。ミュートしたい項目を選択して

Macの場合

[アップデート] > [アップデートの使用を停止]

Winの場合

[ツール] > [選択された更新を無視]

iTunesと一緒に入れさせられたけど、QuickTime要らないなぁと言った場合等に。

また、一時期Windows版のiPhone構成ユーリティ(2.xの辺り)が何度更新しても、「新しいソフトウェアを入手できます」の一覧に入る無限アップデートになる時期が有りましたが、多分そういうのにも有効です。

WinからMacにFirefoxプロファイルの移行

ブックマーク

WinのFirefoxから標準の管理画面を使用して、HTMLでエクスポート、MacのFirefoxで標準の管理画面からインポート。

Stylish

Winのstylish.sqliteファイルをMacのstylish.sqliteに上書き。

  • win:%homedrive%%homepath%\Application Data\Mozilla\Firefox\Profiles\{fx user name}\stylish.sqlite
  • mac:~/Library/Firefox/Profiles/{fx user name}/stylish.sqlite

Adblock+

Winのpatterns.iniファイルをMacのpatterns.iniに上書き。

  • win:%homedrive%%homepath%\Application Data\Mozilla\Firefox\Profiles\{fx user name}\adblockplus\patterns.ini
  • mac:~/Library/Firefox/Profiles/{fx user name}/adblockplus/patterns.ini

必要なのはこれくらいでした。あとはボタン配置をいじるのが手作業、オプションもいくつか手作業でいじりましたが、Macにした事で変更した物も有りました。

ブックマークはWebクリップ目的で残している物は全部Googleブックマークなので、GMarksを入れれば同期は不要です。しかしブックマークレットとそのfaviconはローカルのブックマークなので、これらの移行が目的です。他にいくつか未整理のブックマークも有りましたが。

StylishとAdblock+の必要性は言わずもがなですが、ファイルコピーだけで問題なく移行されるのは意外でした。昔聞きかじった話だとMac-Win間のファイルコピーは色々と問題ありげに記憶していたんですが、最近はよくできてるみたいです。

そろそろ同期ツールの導入を検討しようかと思っていますが、問題は今現在導入の必要がない事です。

関連

2010/09/07

少し誤解を招く、Google Readerのフルスクリーンモード

Google Readerをディスプレイ全体に表示する機能ではありません。ヘッダ/フッタ/サイドバー等を非表示にして、記事表示領域をウィンドウ内で最大化する機能です。ショートカットキーは修飾キーなしの"f"を押すだけでトグルします。

最大化した状態では、上部に「▼」が表示されており、マウスオーバーするとフィードに関するメニューが表示されます。

個人的にいままでStylishのuser styleで実現していた事が公式に実装されたので、一つ管理するスタイル指定が減って御の字です。

最大化(日本語のヘルプでは「全画面表示」)した状態では、"u"キーによるサイドバーのトグルはできません。また、サイドバー非表示状態で、最大化→最大化解除とすると、なぜかサイドバーの非表示まで解除されます。この辺はマイナーバージョンアップでその内直るでしょうか。

2010/09/06

WIndowsとMacのキー設定の差

Windowsではショートカットキーが概ね次のような傾向で割り振られていました。
Ctrl+

当該アプリケーションの機能を呼び出すキー。Ctrl+TABでタブを切り替えたり、Ctrl+Tでタブを開いたり、Ctrl+Rでリロードしたり。

Alt+

ウィンドウ操作に関する機能を呼び出すキー。アプリケーション横断的に、というかウィンドウマネージャに関する操作を行う機能。Alt+アルファベットでアクセラレータキー、Alt+F4で終了、Alt+Spaceでウィンドウメニュー、Alt+TABでウィンドウ切り替えなど。

Shift+

上記二つと組み合わせて、その機能を逆転させるキー。Ctrl+Tがタブを開く、ならばShift+Ctrl+Tは閉じたタブを開き直す。Ctrl+TABが右のタブにフォーカス、ならばShift+Ctrl+TABは左のタブにフォーカス。

ところがMacでは、アプリ内の機能であるリロードがCmd+R、タブを開くがCmd+Tでありながら、アプリケーションの終了(ウィンドウを閉じる)もCmd+Q、ウィンドウの最小化もCmd+Hと、WindowsでいうCtrlとAltの役割がCmdでごった煮にされている感じがします。

とくに逆転させる意図でもないところでShiftが使われていたり、Alt(Option)の使いどころも脈絡が読めなかったりします。

それ以前に、合間合間でWindowsに触るとCtrlのつもりでAltを押し間違いまくる。

両者で統一するにせよ、何か根本的にキー設定を見直さないといけない感じがします。

2010/09/05

Mac版Firefoxでもブックマークツールバーをfavicon化

ブックマークツールバーボタンに関するCSS

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /* 下記のa-dを適宜選択して下さい。 全部一度に適用する必要は有りません。*/ /* inline:表示 none:非表示 */ /* a-1.ブックマークツールバーのボタンアイコン(フォルダ/非フォルダ両方) */ #bookmarksBarContent toolbarbutton.bookmark-item .toolbarbutton-icon { display : inline !important; } /* a-2.ブックマークツールバーのボタンテキスト(フォルダ/非フォルダ両方) */ #bookmarksBarContent toolbarbutton.bookmark-item .toolbarbutton-text { display : none !important; } /* b-1.ブックマークツールバーのボタンアイコン(フォルダ) */ #bookmarksBarContent toolbarbutton.bookmark-item[container="true"] .toolbarbutton-icon { display : inline !important; } /* b-2.ブックマークツールバーのボタンテキスト(フォルダ) */ #bookmarksBarContent toolbarbutton.bookmark-item[container="true"] .toolbarbutton-text { display : none !important; } /* c-1.ブックマークツールバーのボタンアイコン(非フォルダ) */ #bookmarksBarContent toolbarbutton.bookmark-item:not([container="true"]) .toolbarbutton-icon { display : inline !important; } /* c-2.ブックマークツールバーのボタンテキスト(非フォルダ) */ #bookmarksBarContent toolbarbutton.bookmark-item:not([container="true"]) .toolbarbutton-text { display : none !important; } /* d.ブックマークツールバーのボタンアイコン(フォルダ)横の▼ */ #bookmarksBarContent toolbarbutton.bookmark-item[container="true"] dropmarker { display : none !important; }

上記の中から必要な物を適宜Stylishで適用します。

Mac版Firefoxのブックマークツールバーは、テキストのみでfaviconが表示されません。恐らくこれはSafariの仕様に合わせている物と思います。

Mac版Firefox(デフォルト)

Mac版Safari

しかし、個人的にWindows版では全く逆の、faviconのみでテキストなしに設定していたためできれば統一させたいところです。

Mac版Firefox(変更後)

そこで調べたところ、どうやら(Safariは解りませんが)Firefoxに関しては、データとして存在している物をスタイルで隠しているだけらしいとの事。

もともとWindows版ではブックマークの「名前」欄を空欄にすることでテキストを非表示にしていたのですが、これもスタイルで隠せるとの事。管理画面で解りにくくなるので、名前を入れられるのならその方が良いですね。

各パーツのセレクタ

/* ツールバーボタン(全体)のセレクタ */ toolbarbutton /* ツールバーボタン(アイコン)のセレクタ */ .toolbarbutton-icon /* ツールバーボタン(テキスト)のセレクタ */ .toolbarbutton-text /* ツールバーボタン(フォルダ)のセレクタ */ toolbarbutton[container="true"] /* ツールバーボタン(非フォルダ)のセレクタ */ toolbarbutton:not([container="true"]) /* ツールバーボタン(フォルダ)横の▼(プルダウン)のセレクタ */ dropmarker /* ブックマークツールバーのセレクタ */ #bookmarksBarContent /* ブックマークツールバー配下のツールバーボタンのセレクタ */ .bookmark-item

単純に全てのツールバーボタンのテキスト部分を非表示にしてしまうと、ブックマークツールバー以外、たとえばグーグルツールバのボタンテキストなども消えてしまいます。

ブックマークツールバー配下のツールバーボタンには全て".bookmark-item"というクラスが適用されているようです。なので、ブックマークツールバーを限定する意図で「このクラスの配下にあるツールバーボタン」を指定する事もできます。

ただし、他のどこかの要素でこのクラスを使っていないとも限らないので(他のアドオンのツールーバ等)、限定する事を目的とするなら、一意性の保証されているIDセレクタを使用すべきかと思われます。

逆に、ブックマークツールバーに限定しない広範囲で適用したい場合は、クラス名のセレクタを使用する方が効果的な場合が有るかもしれません。

と言った理由から、冒頭のCSSは少し回りくどいセレクタになっています。また、参考にした鳥獣保護区さんでは、Mac版でfaviconがデフォルト非表示なのを利用して少ない指定で望む結果を実現していますが、私はWindows版と共用したいので個別に指定しています。

また、Mac版Firefoxでは、フォルダの横にプルダウンの▼が表示されているので、faviconは要らないかと思ったのですが、Windows版ではデフォルトで非表示でした。そのため、MacWin共用のスタイルを、となると、faviconは全表示で▼は消す、という状態に落ち着きました。

冒頭のCSSで言うと個人的には、ボタンアイコン(a-1)を表示、ボタンテキスト(a-2)を非表示、フォルダの▼(d)を非表示で使っています。