Yearly Archives: 2014

2014-12-21

腰痛回復の兆し

腰痛が始まってから一週間、今日ようやく症状の改善を感じました。

寝返りや起床をそれほど痛くならずに出来るようになりました。

立っていたりイスに座っているとまだ痛いのであまり活動する気にならないのですが、こういうときは休んだ方が良いのか動いた方が良いのかよく分からないですね。

2014-12-16

iOSとAndroidとの間でDeviceMotionEventの軸の向きが逆

JavaScriptで加速度センサーの値を取得した件ですが、どうもiOSとAndroidとでは加速度の軸の向きが逆みたいなのです。

W3Cではデバイス座標系を定義していて、

  • X軸正方向が端末デフォルト向きに対して右方向
  • Y軸正方向が端末デフォルト向きに対して上方向
  • Z軸正方向が端末デフォルト向きに対して手前方向

となっています。

DeviceMotionEventイベントのaccelerationプロパティやaccelerationIncludingGravityプロパティも当然この座標系に沿って、端末が右へ加速したならxが正の値に増加するというのが普通の解釈だと思います。

しかし、iOSではそうでは無いようです。右、上、手前へ加速するとx、y、zがそれぞれ負の値になります。逆向きに加速すると正の値になります。どうも座標軸の向き自体が逆になっているようなのです。同じChromeでもiOS版とAndroid版とで向きが異なります。これは困りました。

OSを判別してiOSなら向きを反転させるか、または、DeviceOrientationEventで済む事ならそちらを使うようにするのが良いのでしょうね。

そんなわけで、この間作ったスキーゲームも修正しました。傾けた方向とは逆きに動いてしまっていたので。

2014-12-16

腰痛

日曜の夜くらいから腰が痛い。

特に月曜の夜から火曜日の午前中くらいにかけては立つのも困難なほどだった。寝ながら体の体勢を変えるのにも痛くないように少しずつ動かすのに苦労し、何かに捕まらなければ立つことも出来ず、立ったとしても頭から血が引くような感じと共に目眩、吐き気、耳鳴りに襲われたりした。歩くこともままならないので四つん這いで移動。トイレに行くのにも苦労する始末だった。

そういえば大学生の頃にも一度同じようなことがあった気がする。

今は火曜日の夜。まだ痛みはあるが立って歩くことはできるようになった。

2014-12-13 ,

Windows8のスタートメニューアプリ

Windows8.1での環境を整えていたのですが、問題はアプリケーションの起動をどうするかでした。

私はWindows95からずっと、基本的にはスタートメニューをキー操作で使ってアプリを起動してきました。もちろんタスクバーやデスクトップから起動することもありますが、よく使うものはスタートメニューにフォルダを作ったり、ショートカットの名前を工夫したりして、最小限のキー操作で好きなアプリを素早く起動できるようにしていました。InternetフォルダのPuttyならば、Ctrl+Escでスタートメニューを開き、i→pと押すことで起動できました。Vistaでクラシックスタートメニューが使えなくなってからは、検索ボックスでアプリ名の数文字を入力してEnterで起動していました。今までの習慣を引き継ぐために、「ip Putty」という名前のショートカットを登録したりもしていました。そうすれば、スタートメニューを開いて i p Enter と入力すれば、ほぼ今まで通りPuttyが起動するという寸法です(Enterは必要になりましたが)。

Windows8からはスタートメニューが無くなりました。しかしWin+Qでアプリ名での検索が出来るので、アプリ名を数文字入力してEnterで起動はできます。スタート画面へのショートカットの登録も、ピン留め機能では好きな名前に出来ないようでしたが、エクスプローラを使えば任意の名前でショートカットを登録することもできました。一応最低限のカスタマイズで使うならこれで我慢することになるのだと思います。

しかし、私はWinキーを使うということが我慢なりませんでした。Winキーは正直押しづらいです。ノートだと特にそうです。自宅のデスクトップのキーボード(Realforce106)だとそもそもWinキーがありません。スタートメニューはCtrl(Capsの位置にリマップ済み)+Escで開いていました。でもWindows8ではCtrl+Escを押してもスタート画面が開くだけで検索ワードを入力する画面にはなりません。

仕方がないので噂のスタートメニューアプリを探すことにしました。

Windows8 でスタートメニューを取り戻す方法 - NAVER まとめ

なんか胡散臭そうな企業の製品が多いんですよね。今のご時世、あまり信用できない企業のアプリを入れるのは抵抗があるのですが……。まぁ、Windowsを使っていて、今更ですけどね。

秀丸スタートメニューなんかはその点で安心できそうですね。でも検索ボックスが無さそうなのでやめておきました(設定で出せたりする?)。

オープンソースのものがないのかなと検索すると、Classic Shell(SourceForge)というのが見つかりました。ただし、オープンソースなのはVersion3.6.8までで、Version3.9.0からはソース非公開になったようです。

Classic Shell - Start menu and other Windows enhancements

オープンソースじゃ無くなったことについてはFAQで理由が書いていますが(Classic Shell: FAQ)、第一にWindowsのシェル拡張などの開発方法について他の開発者と一般的な知識を共有したかったがアプリが複雑化するにつれてその意味が薄れていったこと、第二にClassic Shellをほとんど手を加えずそのままコピーして売るものが現れたこと(OSSのライセンス的には合法だが、作者の意図ではなかった)を挙げています。

作者は個人名のようですし、開発用フォーラムでバグ報告、機能リクエスト、翻訳作業などは行われていて、正当な理由があればソースコードを見せるとも言ってます。開発用フォーラムでは日本語への翻訳も行われています。

このあたりが無難かなぁと。私が必要とする機能は揃っていました。

2014-12-13

新ノートPC新調(VAIO Pro 13)

ノートPCを新調しました。現在使っていたLet's note CF-R8はWindows Vista世代で、OS的にもVisual Studio 2013が入りませんし、メモリも1GBと少なく、ちょっと何かするとすぐHDDカリカリでもっさりしてしまうので。

新しいPCを選定するにあたっての条件は以下のようなものでした。

  • 軽量 (1kgくらいまで)
  • 画面大きめ (12インチ以上)
  • タッチパネル必須
  • 十分な性能 (Visual StudioやPhotoshopを難なく使える程度)
  • 許容できるキー配列 (極端な変態配列は不可)
  • キックスタンドNG (限られた場所でも自立すること)

軽量と言えばNEC Lavie Z(Lavie G type Z)。持ってみるとその軽さにびっくりします。でもタッチパネルモデルはそこまで軽くないし、性能面でのバリエーションは限られます。i5/メモリ4GBが上限の割に価格はVAIOのi7/メモリ8GBモデルくらいなので、少し割高感もあります。(今SSDアップグレードが半額になるキャンペーン中らしいですが)

もう少し重い機種(1.5kgまでくらい)を許容するならLenovoのYOGA等、選択肢は広がるのですが、外で使うことを考えると重量はこだわりたいところ。現行のCF-R8が930gくらいなので、そこから大幅に増えるのはちょっと。

画面の大きさは、長いことCF-R8を使っていてもう少し大きい方が良いかなと思っていたので、今回は大きめで。

タッチパネルは必須。この条件を入れると大分機種が絞られるので便利。私は前々からPCにはデスクトップかノートかに関わらずタッチパネルが必要だと言い続けていたので、ようやく手が届くタッチパネル搭載機が出た今、選ばずにはいられない。

Let's note MX3はキーボード右下の超変態配列によって候補から外れました。?とか_とかまともに打てないよコレ。慣れれば打てるのかもしれないけど、慣れたくないでしょ。他の点では魅力がある製品なだけに惜しい。

Surface Pro 3はキックスタンドなので候補から外れました。ただ、良い点も色々あるのでもう少し詳しく検討したかったところ。

と、言うわけで、これらの条件を満たすものを探した結果、VAIO Pro 13となりました。

Intelの新しいCPUが出そうな時期なので、正直もう少し待とうかとも思ったのですが、我慢しきれず買ってしまいました。しばらくはこれを使っていこうかと思います。

今回は性能を重視したので、Visual StudioもPhotoshopも難なく動きます。SSD搭載機は初めてですが、素晴らしいですね。

今のところおおむね満足ですが、一つだけ悪いところが。それはタッチパッド。正直このタッチパッドはクソです。ホームポジションに手を置くと必ず手がタッチパッドに触れてしまいます。もちろん誤動作しないように、タッチする表面積が多いときは反応しないようになっているのですが、それでもキーを打っていると、たまにクリックしてしまいます。特に右クリックを押してしまいます。クリックすると別のウィンドウにフォーカスが移ったり、キャレットの位置があらぬ所に飛んで酷いことになります。あと、たまにキーを打っていると突然チャームが出現したり。タッチパッドの設定を調整したら大分マシになりましたが、それでもたまに誤操作してしまいます。完全に防ぐことは難しそうです。

2014-11-19 ,

window.orientationプロパティ

window.orientationというプロパティがあるみたいですね?

公式の資料として見つかったのはこれくらいでした。MDNには書いてませんでしたし。

IEはどうか分かりませんが、iOSやAndroidでは対応しているようです。対応しているのはモバイル版のみで、デスクトップ版では対応していないとか何とか。実際AndroidのChromeでは数値が返ってきますが、デスクトップ版のChromeではundefinedになります。

以前DeviceOrientationの使い方について書きましたが、その際にscreen.orientation.angleを使って画面の向き(回転角)を取得する方法についても言及しました。

DeviceOrientationイベントは画面の向きを考慮しない値を提供するだけなので、画面の向き(角度)を別途取得するか、画面の向きをロックするかしないと全く使い物にならないんですよね。

このwindow.orientationが使えれば、screen.orientation.angleが使えない場合でも画面の向きを角度で取得することが可能です。

なので、js_deviceorientationjs_skigameを修正してみました。これで加速度センサーで操作できるかな。

2014-11-18

HTML+CSSで縦書き

そういえば結局縦書きってどうなったんだっけ? と思ったのでテスト。

隴西(ろうさい)の李徴(りちょう)は博学才穎(さいえい)、天宝の末年、若くして名を虎榜(こぼう)に連ね、ついで江南尉(こうなんい)に補せられたが、性、狷介(けんかい)、自(みずか)ら恃(たの)むところ頗(すこぶ)る厚く、賤吏(せんり)に甘んずるを潔(いさぎよ)しとしなかった。いくばくもなく官を退いた後は、故山(こざん)、※(「埒のつくり+虎」、第3水準1-91-48)略(かくりゃく)に帰臥(きが)し、人と交(まじわり)を絶って、ひたすら詩作に耽(ふけ)った。下吏となって長く膝(ひざ)を俗悪な大官の前に屈するよりは、詩家としての名を死後百年に遺(のこ)そうとしたのである。しかし、文名は容易に揚らず、生活は日を逐(お)うて苦しくなる。李徴は漸(ようや)く焦躁(しょうそう)に駆られて来た。この頃(ころ)からその容貌(ようぼう)も峭刻(しょうこく)となり、肉落ち骨秀(ひい)で、眼光のみ徒(いたず)らに炯々(けいけい)として、曾(かつ)て進士に登第(とうだい)した頃の豊頬(ほうきょう)の美少年の俤(おもかげ)は、何処(どこ)に求めようもない。数年の後、貧窮に堪(た)えず、妻子の衣食のために遂(つい)に節を屈して、再び東へ赴き、一地方官吏の職を奉ずることになった。一方、これは、己(おのれ)の詩業に半ば絶望したためでもある。曾ての同輩は既に遥(はる)か高位に進み、彼が昔、鈍物として歯牙(しが)にもかけなかったその連中の下命を拝さねばならぬことが、往年の儁才(しゅんさい)李徴の自尊心を如何(いか)に傷(きずつ)けたかは、想像に難(かた)くない。彼は怏々(おうおう)として楽しまず、狂悖(きょうはい)の性は愈々(いよいよ)抑え難(がた)くなった。一年の後、公用で旅に出、汝水(じょすい)のほとりに宿った時、遂に発狂した。或(ある)夜半、急に顔色を変えて寝床から起上ると、何か訳の分らぬことを叫びつつそのまま下にとび下りて、闇(やみ)の中へ駈出(かけだ)した。彼は二度と戻(もど)って来なかった。附近の山野を捜索しても、何の手掛りもない。その後李徴がどうなったかを知る者は、誰(だれ)もなかった。
<div style="width:100%; height:30em; overflow:scroll; padding: 1em; font-family: '@MS 明朝'; writing-mode: tb-rl; writing-mode: vertical-rl; -moz-writing-mode: vertical-rl; -webkit-writing-mode: vertical-rl; ">
本文
</div>

(本文は中島敦 山月記より)

WebKit系とIEはいけるみたいですね。

あと、フォントは縦書き用じゃないと色々と不都合が出る気が。

JavaScriptライブラリも色々あるみたいですね。

2014-11-18 ,

org-mode文書をHTMLでエクスポートするときにLaTeX部分をMathMLへ変換する

先日の修正をdefadviceの形に直した。HTMLエクスポート時にMathjaxを使わずに直接MathMLでエクスポートする。

;; org-html-mathml-export.el

;; 次の二つの関数はhtmlエクスポート時にlatex部分をhtmlへ変換する。
;; - org-html-latex-environment
;; - org-html-latex-fragment
;; この関数において、processing-typeがmathmlのときはmathjaxのときと同じように
;; org-html-format-latexを呼び出すようにする。
;; org-html-format-latexはorg-format-latexを呼び出す。
;; org-format-latexはprocessing-typeがmathmlのときorg-format-latex-as-mathmlを呼び出す。

(defadvice org-html-latex-environment
  (around org-html-latex-environment--html-mathml
          (latex-environment contents info)
          activate)
  (setq ad-return-value
        (let ((processing-type (plist-get info :with-latex)))
          (case processing-type
            ((mathml)
             (let ((org-format-latex-as-mathml-format 'mathml))
               (org-html-format-latex
                (org-remove-indentation
                 (org-element-property :value latex-environment)) ;;latex-frag
                'mathml
                info)))
            ((t)
             ad-do-it)))))

(defadvice org-html-latex-fragment
  (around org-html-latex-fragment--html-mathml
          (latex-fragment contents info)
          activate)

  (setq ad-return-value
        (let ((processing-type (plist-get info :with-latex)))
          (case processing-type
            ((mathml)
             (let ((org-format-latex-as-mathml-format 'mathml))
               (org-html-format-latex
                (org-element-property :value latex-fragment) ;;latex-frag
                'mathml
                info)))
            ((t)
             ad-do-it)))))


(defvar org-format-latex-as-mathml-format 'link
  "org-format-latex-as-mathml関数がどのような形式の文字列を返すかどうかを指定する変数。'linkのときMathMLファイルへのリンクを返す。'mathmlのときMathMLの文字列自体を返す(XMLヘッダー無し)。")

;;
;; org-format-latex-as-mathmlはLaTeX表記をMathMLへ変換する。
;; OpenDocumentエクスポートの時はファイルへのリンクへ変換する。
;; HTMLエクスポートの時はMathMLそのものへ変換する。
;;

(defadvice org-format-latex-as-mathml
  (around org-format-latex-as-mathml--html-mathml
          (latex-frag latex-frag-type prefix &optional dir)
          activate)

  (setq ad-return-value
        (if (eq org-format-latex-as-mathml-format 'mathml)
            (org-format-latex-as-mathml-not-file latex-frag latex-frag-type prefix dir)
          ad-do-it)))

(defun org-format-latex-as-mathml-not-file (latex-frag latex-frag-type
                                                       prefix &optional dir)
  "Use `org-create-math-formula' but check local cache first."
  (let* ((print-length nil) (print-level nil) ;;必要?
         (mathml (org-create-math-formula latex-frag)))

    ;; Successful conversion.  Return the MathML.
    (if mathml
        (progn
          ;; Erase XML header
          (if (eql (string-match "^<\\?xml [^>]+>" mathml) 0)
              (setq mathml (replace-match "" t t mathml)))
          ;; Erase all line breaks
          (setq mathml (replace-regexp-in-string "[\n\r]" "" mathml))

          ;; Add props
          (org-add-props
              mathml

              (list 'org-latex-src (replace-regexp-in-string "\"" "" latex-frag)
                    'org-latex-src-embed-type (if latex-frag-type
                                                  'paragraph 'character))))
      ;; Failed conversion.  Return the LaTeX fragment verbatim
      latex-frag)))

使い方:

  • これを適当な場所でloadする。
  • mathtoweb.jarをダウンロードして適当な所に置く。
  • 変数をカスタマイズする。
    • org-latex-to-mathml-convert-command を "java -jar %j -unicode -force -df %o %I"
    • org-latex-to-mathml-jar-file を "(ファイルを置いた場所)/mathtoweb.jar"
  • org文書の #+OPTIONS:tex:mathml を書き加える。

Org2Blogでこれを使うなら:

  • org2blog/wp-use-wp-latex を nil にする。