Sierraでenthumbleキーバインドを使う方法(2017年4月時点)

こんにちは。

この記事に辿り着いた方はみなさんご存知のenthumbleキーバインド
一度使うとやめられないのですが、vimキーバインド等と比べてマイナーな存在なため、設定が簡単ではありません。

先日Sierraにアップグレードしたところ、Karabinerが動かなくなり、enthumbleを諦めるしか無いのか?!と思っていた所、
なんとか設定ができ、上手く動いていますので、設定方法をご紹介します。

必要なソフトは2つ

  • wwwjfy/Karabiner-Elements
  • Hammerspoon

github.com
github.com

Karabiner-Elementsのインストール

github.com
Karabiner-Elementsは通常版ではなく、wwwjfyさんがカスタマイズしたバージョンをインストールしてください。
すでに通常版をインストールしている方は、アンインストールしてからwwwjfy版をインストールしてください。
DownloadsのKarabiner-Elements-バージョン番号.dmg からインストーラがダウンロードできます。
(2017/4/10時点ではKarabiner-Elements-0.90.92.dmg)

インストーラの指示に従って、インストールしてください。

Karabiner-Elementsの設定

Karabiner-Elementsを開き、Virtual Keyboardタブを選択します。
Keyboard TypeがANSI(US配列)になっているので、JISに変更します。
変更できたら、Simple Modificationsタブを選択し、Quit Karabiner-Elementsをクリックして終了してください。
Finderを開き、画面最上部のメニューバーの「移動」→「フォルダへ移動」を選択し、
「~/.config/Karabiner」と入力して、移動を押してください。
karabiner.jsonというファイルがあるので、それをCotEditorで開いてください。
(標準のテキストエディットを使う場合は、環境設定で「標準テキスト」を選択し、「スマート引用符」のチェックを外してください)
以下のように書き換えを行います。赤文字が修正箇所です。
=======================================
{
"global": {
"check_for_updates_on_startup": true,
"show_in_menu_bar": true,
"show_profile_name_in_menu_bar": false
},
"profiles": [
{
"devices": [],
"fn_function_keys": {
"f1": "display_brightness_decrement",
"f10": "mute",
"f11": "volume_decrement",
"f12": "volume_increment",
"f2": "display_brightness_increment",
"f3": "mission_control",
"f4": "launchpad",
"f5": "illumination_decrement",
"f6": "illumination_increment",
"f7": "rewind",
"f8": "play_or_pause",
"f9": "fastforward"
},
"name": "Default profile",
"one_to_many_mappings": {
"japanese_eisuu": ["right_option", "right_control", "right_shift", "right_command"]
},
"selected": true,
"simple_modifications": {},
"standalone_keys": {
"japanese_eisuu": "japanese_eisuu"
},
"virtual_hid_keyboard": {
"caps_lock_delay_milliseconds": 0,
"keyboard_type": "jis",
"standalone_keys_delay_milliseconds": 200
}
}
]
}
=======================================

上書き保存すれば、Karabiner-Elementsの設定は完了です。
Karabiner-Elementsを起動すれば、設定が有効になります。

この設定内容の説明は以下です。

  1. 英数キーをoption+control+shift+commandに置き換える
  2. 英数キーを単独で押したときは英数キーとして認識されるようにする
Hammerspoonのインストール

github.com
Hammerspoon-バージョン番号.zipをダウンロードし、解凍します。
(2017/4/10時点ではHammerspoon-0.9.52.zip)
Hammerspoonをアプリケーションフォルダにコピーしてください。

Hammerspoonの設定

Hammerspoonを起動すると、画面最上部のメニューバーにかなづちのアイコンが追加されます。
アイコンをクリックして、「Preferences」を選択します。
Launch Hammerspoon at loginにチェックを入れ、Enable Accessibilityボタンを押して、Hammerspoonを有効にします。
有効にしたら、Preferencesウィンドウは閉じます。

再びかなづちアイコンをクリックして、「Open Config」を選択します。
(標準のテキストエディットが開いた場合は、環境設定で「標準テキスト」を選択し、「スマート引用符」のチェックを外してください)

以下の内容を貼り付けて上書き保存します。

local function keyCode(key, modifiers)
   modifiers = modifiers or {}
   return function()
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), true):post()
      hs.timer.usleep(1000)
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), false):post()      
   end
end

local function remapKey(modifiers, key, keyCode)
   hs.hotkey.bind(modifiers, key, keyCode, nil, keyCode)
end

-- カーソル移動
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'l', keyCode('right'))
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'h', keyCode('left'))
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'j', keyCode('left'))
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'k', keyCode('down'))
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'i', keyCode('up'))

-- 削除
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'u', keyCode('delete'))
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'o', keyCode('forwarddelete'))

-- Enter
remapKey({'alt', 'ctrl', 'shift', 'cmd'}, 'space', keyCode('return'))

-- テキスト編集
-- remapKey({'ctrl'}, 'w', keyCode('x', {'cmd'}))
-- remapKey({'ctrl'}, 'y', keyCode('v', {'cmd'}))

-- コマンド
-- remapKey({'ctrl'}, 's', keyCode('f', {'cmd'}))
-- remapKey({'ctrl'}, '/', keyCode('z', {'cmd'}))
-- remapKey({'ctrl'}, 'g', keyCode('escape'))

-- ページスクロール
-- remapKey({'ctrl', 'shift'}, 'k', keyCode('pagedown'))
-- remapKey({'ctrl', 'shift'}, 'i', keyCode('pageup'))
-- remapKey({'ctrl', 'shift'}, 'j', keyCode('home'))
-- remapKey({'ctrl', 'shift'}, 'l', keyCode('end'))

この設定の下部の「テキスト編集」以下はサンプルですので、消しても構いません。

この設定ではoption+control+shift+command+◯キーをenthumbleキーバインドに対応づけています。
各人お好みの設定があると思うので、適宜編集してください。

再びかなづちアイコンをクリックして、「Reload Config」を選択します。

以上でenthumbleキーバインドが使えるようになりました。

dアニメストアがエラーコード6013で見れない現象を直す

dアニメストアを試しに契約しましたが、エラーコード6013で見れなかったので、直しました。
直し方を書きます。

  1. Windowsキー(田マーク)と「R」を同時押しする。
  2. 「ファイル名を指定して実行」が出るので、「C:\ProgramData\Microsoft\PlayReady」と入力して「OK」を押す。
  3. フォルダが開かれ、中に「mspr.hds」というファイルがあるので、右クリック→削除で削除する。

これだけで直ります。dアニメストアにアクセスして確認してください。


「mspr.hds」は著作権保護のための認証ファイルですが、このファイルに異常があると、エラーコード6013になるようです。削除すると再作成されて直ります。

BILL ITUNES COM はiTunesを騙った不当請求なのか?

先日クレジットカードの請求明細を見ると見覚えのない請求元
「BILL ITUNES COM」から請求が来ていました。
f:id:ax3n_data:20150821201744p:plain
iTuensの名前を騙った店からの不当請求ではないか?と思いましたが、
Apple iTunes Store から BILL ITUNES COMに名前が変わっただけのようです。

Appleからメールで来ていた明細書と照らし合わせると同じ価格で請求されてました。
請求額がすごいことになってましたけど、正当請求です(どっちにしろ怖い
これで安心して課金ができますね(*'▽')

Forest: スマホ中毒の解決法

Forest: スマホ中毒の解決法

  • ShaoKan Pi
  • 仕事効率化
  • ¥240

ezoeコマンドをElixirで実装して分かったことまとめ

ezoeというのが何か知りませんが、
世間でezoeコマンドというものを作るのが流行ってると聞いたので、Elixirで作ってみました。
名づけてEzoelixirです。github.com

2015/06/21現在、質問機能が未実装なので、
質問ではない。
を直接もらえないというissue?がありますが。また今度実装しますw

さて今回の本題、
Elixirでコマンドラインツールを作るためのノウハウが少しだけ分かったので、まとめ。
(おそらくElixirに詳しい人にとっては当たり前のことだと思いますが)

依存パッケージの管理やビルドはmixでやる

`$ mix new myproject ` でプロジェクトを作成できる

自動でmix.exsやREADME.mdを作成してくれます。githubにpushする準備もできて超べんり。

`$ mix deps.get ` で依存パッケージをインストールできる

mix.exsに

  defp deps do
    [
      {:feeder_ex, git: "https://github.com/manukall/feeder_ex.git"},
      {:httpoison, "~> 0.7"}
    ]
  end

のようにして、使いたいパッケージ(依存パッケージ)を記入してから`mix deps.get `を実行すると、パッケージをインストールしてくれます。

コマンドラインツールを作成するときは、main関数を作成して、mix.exsに設定を追記する

実装はlibフォルダ内のmyproject.exに行います。
その中にmain関数を作っておいて、mix.exsに
`escript: [ main_module: Myproject ],`
を追記します。

def project do
    [app: :ezoelixir,
     version: "0.0.1",
     elixir: "~> 1.0",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     escript: [ main_module: Ezoelixir ],
     deps: deps]
  end

その後、
`$ mix escript.build ` を実行すると、コマンドラインツールとしてビルドされます。

iex内でモジュールの関数を実行できる

`$ iex -S mix `
と実行すると、iexに作成したモジュールがロードされて、関数を実行できます。
今回は作りながら試すのにこの方法を用いました。割りとやりやすかったです。

今回はこんなもんですかね。書き忘れがあったら追記します。
mix testとかもやってみたいですね。
作成にあたっては「Elixir in Action」が大変参考になりました↓

Elixir in Action

Elixir in Action

6/21追記: nikuさんのスライドにまとめられている内容も大変参考になります。
Techmix Hokkaido 2014 Elixir - niku - Rabbit Slide Show
Elixirなかなかいいですね。関数型の利点を活かしつつ手続き型の書き方もできますし。
何より文法がわかりやすくていい感じです。
それでは、お疲れ様でした。ごきげんよう。

Ubuntu 14.04 (Linux Mint 17)にElixirをインストールする方法

公式ページの方法ではインストールできなかったのでメモ。
Download Elixir | Erlang Solutions
このページを参考にしました。

リポジトリの追加

「ソフトウェアソース」を開いて「追加リポジトリ」を選択する。
左下の「新しいリポジトリを追加...」ボタンをクリックし、
deb http://packages.erlang-solutions.com/ubuntu trusty contrib」
と入力する。これでリポジトリが追加されました。

公開鍵の登録

ターミナルを開き、以下を実行
$ wget http://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc
$ sudo apt-key add erlang_solutions.asc

Erlangのインストール

$ sudo apt-get update
$ sudo apt-get install erlang erlang-dev erlang-xmerl

Elixirのインストール

$ sudo apt-get update
$ sudo apt-get install elixir

以上でインストール完了です。
$ iex で対話環境が起動すれば、正しくインストールできています。

IntellijのGroovy/GrailsプロジェクトのRun時のエラー対処法

Grailsの実行時にエラーが出るので対処法をメモします。
メニューバーのRun→Edit Configurationsを開く。
VM Optionsに「-noverify」と記入して、OK。

(試しに動かしてみただけなので、今後使うことはなさそうです)

Golang+Martiniを使ってHTMLテンプレート(html/template)内で四則演算を行う方法

MartiniでWebアプリ作ってるときに一瞬詰まったので、紹介します。
HTMLテンプレートを使っていると、テンプレート内で変数の演算を行いたいときがあると思います。
例えば、{{.IntValue}}を簡単な計算をしてから表示したいような場合です。
1を加算したい場合、単純に考えると{{.IntValue+1}}のようにすると思います。
しかし、Golangのテンプレート内では足し算や引き算等の演算が標準ではできません。
(Rubyならできるのですが...)
Golangのテンプレート内で演算を行うには、テンプレート用の関数を作成して登録する必要があります。template.FuncMapで関数の登録ができ、Martiniでもこれを使って登録をします。
main.go

package main

import (
	"github.com/codegangsta/martini-contrib/render"
	"github.com/go-martini/martini"
	"html/template"
)

type Value struct {
	IntValue int
}

func main() {
	m := martini.Classic()
	// render html template
	m.Use(render.Renderer(render.Options{
		Funcs: []template.FuncMap{ // レンダラにテンプレート関数を登録します。
			{
				"add": func(a, b int) int { return a + b },
				"sub": func(a, b int) int { return a - b },
				"mul": func(a, b int) int { return a * b },
				"div": func(a, b int) int { return a / b },
			},
		},
	}))
	m.Get("/", top)
        m.Run()
}

// トップページ
func top(ren render.Render) {
        var value Value
        value.IntValue = 10
	ren.HTML(200, "top", value) // top.tmplにvalueを渡してレンダリングします。
}

今回のポイントは以下の部分です。

m.Use(render.Renderer(render.Options{
		Funcs: []template.FuncMap{
			{
				"add": func(a, b int) int { return a + b },
			},
		},
	}))

render.Optionsに以上のようにして関数を定義して登録することができます。

top.tmplというテンプレートに値を渡します。templatesディレクトリを作成して、その中にtop.tmplファイルを作ってください。

top.tmpl

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8" />
        <title>Untitled Document</title>
    </head>
    <body>
      <h3>{{.IntValue}}足す1は{{add .IntValue 1}}です。</h3>
    </body>
</html>

関数は{{関数名 引数1 引数2}}のようにして使います。
go run main.goを実行して、http://localhost:3000にアクセスすると結果が表示されます。
f:id:ax3n_data:20150506185538p:plain
こんな感じでテンプレート内で演算することができます。

ちなみにテンプレート内で変数を宣言して使うこともできます。
テンプレート内変数を使う場合
top.tmpl

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8" />
        <title>Untitled Document</title>
    </head>
    <body>
      {{$addValue:=1}}
      <h3>{{.IntValue}}足す{{$addValue}}は{{add .IntValue $addValue}}です。</h3>
    </body>
</html>

応用すると色々なことができそうですね。
Goのテンプレートでは独自の関数を定義することで、様々な処理を追加することができます。
今日もいいお天気ですね。Golangでよい午後を!
参考リンク