flycheckをアップデートしたらOmnisharpが正しく起動しなくなった件

はじめに

適当な時に適当にM-x list-packagesをして, Uを押して, xを押す癖があるのですが, そのせいでうっかり色々アップデートされてしまい, 気付いたらomnisharp-emacs(melpa 20151210.1114)が上手く動かなくなっていました.

原因

どうやら, flycheckのバージョンが上がって(melpa 20160912.814), 全てのsyntax checkerに:modesを指定する事が必須となりましたが, omnisharp-emacs側ではそれに追従できておらず, :modesが設定されていないために動かなくなったようです.

対策

omnisharp.elのflycheck-define-checkerでcsharp-omnisharp-codecheckを定義している処に,

    :modes (csharp-mode)

を追記し, byte compile.

これで, 正常に動くようになります. omnisharp-emacsが対応するまではこれで運用しようと思います.

続 org-modeで記述した文章のプレビューをewwで行うようにする

bocchies.hatenablog.com

これを書いて2週間程. ふと M-x list-packages すると, statusがnewの処に org-preview-html という文字列が.

なんだ……この……とても……便利な……ものは……

また一つ書く必要のないコードを書いてしまっていたようだ……

org-mode + MobileOrg + Box(WebDAV)

はじめに

org-modeを利用していると, タスクリストやスケジュールをiOS等のモバイル環境からも確認したくなる事があります. そういう用途のために, MobileOrg というアプリがAppStore上に存在しています. これはDropBoxまたはWebDAVを介して, org-agendaで利用するファイルを閲覧, 編集できるものです. 私はDropBoxではなく, Boxを利用しているため, BoxのWebDAVに接続してMobileOrgを使っています. その設定方法を記述しようと思います.

環境

  • OSX El Capitan 10.11.6
  • Emacs 24.5.1
  • Org mode 8.3.5

EmacsにMobileOrg用の設定をする

まずは, org-mobile-directory変数にMobileOrgとやりとりするためのディレクトリを設定します. これはBoxで同期される場所を設定する必要があります.

(setq org-mobile-directory ("/path/to/your/Box Sync/mobileorg"))

この時, org-directoryと同一の場所を指定すると, 実際に利用する際にエラーが発生してしまうため, 日頃のorgファイル類の管理もBoxでしている場合でも別のディレクトリを指定する必要があります.

MobileOrgと同期するファイルのリストはorg-mobile-filesに設定します. デフォルトではorg-agenda-filesが設定されているので, org-agenda-filesが設定されていて, それをそのまま同期したい場合はそのままで問題ありません. 私の場合はorg-agenda-filesにorg-directoryをそのまま適用しており, それをそのまま同期しています.

(setq org-agenda-files `(,org-directory))

また, MobileOrgで編集したOutlinesやCaptureは, 後述するorg-mobile-pullでローカル環境に同期されますが, この時Captureしたデータはorg-mobile-inbox-for-pull変数に設定されているファイルに追記されます. この変数に設定されるファイルパスはorg-directory内にあり, また, org-mobile-directory以下ではない場所にある必要があります.

(setq org-mobile-inbox-for-pull (concat org-directory "/from-mobile.org"))

MobileOrg側で同期の設定をする

BoxはWebDAVをサポートしており, https://dav.box.com/dav/ よりアクセスできます.

MobileOrgアプリを立ち上げ, SettingsのServer ConfigでWebDAVを選択しURL, Username, Passwordを設定します. ここで設定するUsernameとPasswordはBoxへのログイン用と同一です.

今, Boxの同期フォルダのルート直下にmobileorgディレクトリがある場合, BoxのWebDAV接続用URLは, https://dav.box.com/dav/mobileorg/ となり, org-mobile-push時に生成されるインデックスファイル(org-mobile-index-fileで設定でき, デフォルトはindex.org)がindex.orgである場合にMobileOrgに設定するURLは https://dav.box.com/dav/mobileorg/index.org となります.

同期する

ローカル環境からMobileOrgへ

ローカルにあるorgファイル類をMobileOrgへ同期するためには, org-mobile-pushを行う必要があります. これはagendaファイル類をorg-mobile-directory内にコピーし, agendas.orgと, それらへのアクセスをMobileOrgで行うためのorg-mobile-index-fileで設定されたインデックスとなるファイルを生成します.

M-x org-mobile-push

MobileOrgからローカル環境へ

逆にMobileOrgで行った変更をローカル環境へ同期するためには, org-mobile-pullを行います.

M-x org-mobile-pull

同期対象のagendaを変更する

同期するagendaは (agenda), (alltodo)及びorg-agenda-custom-commandsで設定されているagendaがデフォルトでは設定されるようになっています. これはorg-mobile-agendasに'allが設定されているからで, 'defaultを設定すると(agenda)と(alltodo)のみ, customだとorg-agenda-custom-commandsで設定されているagendaが同期対象となります.

私のorg-agenda-custom-commandsはinstall時から変えておらず, (agenda)と(alltodo)を一つにまとめたもの(C-c a n)となっており, org-mobile-agendasが'allだと内容が重複してしまいます. そのため, org-mobile-agendasを'customに設定してorg-agenda-custom-commandsの内容のみを同期するように変更します. この時, カレンダーが今週分しか同期されないのは個人的に不都合ですので, スパンを長くした情報も同期するようにし, ついでに買い物リストも別で同期できるようにします.

    (when (require 'org-agenda nil t)
       ;; org-agenda-custom-commandsにコマンドを追加していく.
       ;; カスタムコマンドの詳細は http://orgmode.org/worg/org-tutorials/org-custom-agenda-commands.html
      (org-agenda-add-custom-command '("b" "Buy" todo "TODO" ((org-agenda-files "/path/to/you/buy.org"))))
      (org-agenda-add-custom-command '("2" "Two week calendar" agenda "" ((org-agenda-span 14)))))
    (when (require 'org-mobile nil t)
      (setq org-mobile-agendas 'custom))

問題点

この状態でしばらく運用してみて, 自分の用途としてはそこまで問題は発生していませんが,

  • アプリそのものの更新があまりされない(オープンソースなので最悪自分で改修すればよい)
  • pushとpullを正しく行わないとどちらかで行った変更が消滅する.
  • Boxのクライアントの同期がたまに遅い
  • なによりインターフェースがダサい

というのが気になる処です.

org-modeで記述した文章のプレビューをewwで行うようにする

はじめに

通常, org-modeで書いた文章(この記事もorg-modeで書かれています)をhtmlに変換しプレビューするとデフォルトのブラウザが開きます. これはorg-modeの設定により, WindowsではShellExecuteコマンドが, Mac OSXではopenコマンドが設定されているための動作ですが, プレビューする度にブラウザにフォーカスを奪われてしまうのが個人的な難点でした. そのため, htmlプレビューする時はEmacs24.4から内蔵されているewwを起動するようにして, Emacs内でプレビューを行えるようにしました.

org-file-appsにewwを起動するよう登録する

org-file-appsに拡張子毎に起動するコマンドが設定されているため, 拡張子がhtmlなものを対象にewwを起動するようにしました. ただ起動するだけでは今書いている文章のバッファがウィンドウから消えてしまうため, 2分割して表示するようにしています.

また, org-file-appsには既にhtmlに関するコマンドが設定されているため, 本来はそれを削除してからこの設定を加えるべきだとは思いますが, 同一のkeyが存在する場合はリストの前にある方が優先されるようなのでそのまま残してあります.

(when (emacs-version>= 24 4)
  (add-to-list 'org-file-apps '("\\.x?html?\\'" . ((lambda (url)
                                                     (if (string-match "\\`https?://.+\\.x?html?\\'" url)
                                                         default
                                                       (switch-to-buffer (window-buffer (select-window (let* ((windows (window-list)))
                                                                                                         (if (< (length windows) 2)
                                                                                                             (if (> (window-pixel-height) (window-pixel-width))
                                                                                                                 (split-window-below)
                                                                                                               (split-window-right))
                                                                                                           (let* ((org-buffer-name (concat (file-name-base url) ".org"))
                                                                                                                  (window (car (remove-if (lambda (w)
                                                                                                                                            (string= (buffer-name (window-buffer w)) org-buffer-name))
                                                                                                                                          windows))))
                                                                                                             (if (null window) ;; 同一バッファが複数並んでいる場合はnilになるので適当なwindowを返す
                                                                                                                 (car windows)
                                                                                                               window)))))))
                                                       (eww-open-file url)))
                                                   file))))

この設定を施した状態でorgファイルを開き, org-export-dispatch(C-c C-e)からhtml形式でexportして開く(h o)とewwが起動してプレビューできるようになります. また, 外部ブラウザでみたい時は, eww上で&を押下する事で外部ブラウザが開きます.

課題

  • 3分割以上された状態だとewwのバッファがあっても別のウィンドウにプレビューが表示されることがある

その他

emacs-version>= という関数は以下のようなもので, 今起動しているemacsのバージョンが, 引数で指定されたバージョン以上である時にtを返します.

(defun emacs-version>= (major minor)
  (and (numberp major)
       (numberp minor)
       (or (> emacs-major-version major)
           (and (= emacs-major-version major) (>= emacs-minor-version minor)))))

metal-modeを書いた

長い間, EmacsmacOS, iOS用にMetalのshaderを書くのにc++-modeを使っていたけれど, 主にキーワードがハイライトされないのにイラっとしたので, カッとなってmetal-modeを書いた.

github.com

骨折して1年経った記念に傷病時における関東IT健保の福利厚生について語ります

経緯

2015年6月21日(日)15時40頃, アルドノア・ゼロ EXTRA DAY SIDE A(昼公演)終了後の東京ドームシティホール前. 小雨が降る中, 小走りしていたら地面に設置されていた金属のプレートのようなものに足を取られ転倒, 左肘を強く打ち付け(猛烈に痛いけどとはいえ打撲だろうと軽くみていた私はそのままSIDE Z(夜公演)も観覧した), 翌日病院に行くと肘頭骨折と診断され, 手術と4日間の入院を余儀なくされました. 入院そして手術という事で安くない費用がかかるであろう事は想像に難くありませんでした. ですが, 自分が所属している会社は関東ITソフトウェア健康保険組合に加入しているため, その福利厚生機能をフル活用することにより, 自分で加入している医療保険と併用する事で支出をほぼ0に抑えられました.

限度額認定証

予め医療費が高額になる事がわかっている場合, 限度額認定証を取得する事で, 支払う金額を最初からおさえる事が可能です(後から帰ってくるお金を最初から払わないようにしているだけなのでこれがなくても収支だけみると変わりません). この限度額認定証を医療機関に提示する事で, 自身の月額報酬による区分毎に支払う最大額が決められ, それ以上は支払う必要がなくなります. 加入している保険組合のWebサイトなどから限度額認定証申請手続を行う事で限度額認定証が貰えます(最大有効期限は1年). 不慮の事故等はいつ自分の身にふりかかるかわかりません. 1年経過しても延長が可能ですし, 健康保険組合に加入していれば誰でも申請できますので, とりあえず申請手続して限度額認定証を手元に置いておくと良いと思います.

一部負担還元金等(付加金)

関東IT健保に加入していると, 医療費が20,000円を超えた場合, 最短3ヶ月後に超えた分が全額返ってきます. この制度のおかげで支出がほぼ0になりました. 詳しくは限度額適用認定証の申請についてをご確認ください.

傷病手当金

療養のため労務不能で4日以上休みその間給料が貰えない場合, 要申請ではありますが, 1年6ヶ月を限度に傷病手当金が給付されます. この時3日の待機期間が発生(有給休暇でも構わない)し4日目分から支払われる計算になりますが, 待機期間は営業日で計算"されない"ので, 土日も待機期間に含まれます. 詳しくは病気やケガで働けないときをご確認ください.

その他の知見

関東IT健保ではありませんが, 他に得た知見としては以下のようなものがあります.

  • 東京ドームシティホール付近にいる警備員等は痛みでのたうち回ってる時に目があっても何もしてくれない.
  • イベントスタッフも目を反らし何もしてくれない.
  • 通りすがりの同じイベントにきていたお兄さんや, 東京ドームシティ付近に遊びにきていたらしいお姉さんたちは色々心配して声をかけてくれたり傘をさして濡れないようにしてくれたりする(本当にありがとうございました. あなたがたのおかげで今の私があります).
  • 雨の日にVANSのスリッポンをはいてはいけない. ましてやその状態で走ってはいけない.
  • 腕の骨が折れて腫れ上がっていると服の着脱が難しいのでTシャツなどではなくボタンで止める服を着るようにする.
  • 大部屋に入院した時, 隣人がクズだと入院生活が苦痛.
  • 腕の骨が折れて猛烈に痛くても案外イベント観覧はできる.
  • 澤野弘之氏は本当に素晴しい劇伴を作る.
  • スレインは許した.
  • クランカイン, お前は絶対に許さない.

Microsoft Remote Desktop経由でWindowsの画面を表示するとウィンドウが真っ黒問題

Mac OSXからリモートでWindowsを利用するのに, Microsoft Remote Desktopを利用すると, OpenGLWebKitなどの画面を表示しようとした時にそのウィンドウだけ黒くなって描画されない事がある.

これは, 描画時のColor設定があっていないから発生するので, Microsoft Remote Descktop側でウィンドウが黒く表示される接続先を選択した状態でEditを表示, ColorsがTrue Color(24bit)になっていたら, Highest Quality(32bit)にすると良い.