2018年、最近の僕の暮らしのお話

  1. 1. 消費的趣味、ゲームと映画と読書と
  2. 2. エンジニアとして
  3. 3. 日々の生活はというと

なんとなく日記的なことを書きたい夜なので、最近の暮らしの話を。

消費的趣味、ゲームと映画と読書と

僕の中で消費的趣味には3種類あって、それがぐるぐるとサイクルしていたんだけど最近は映画は少なくなったかもしれない。昔はどっぷりゲームばっかりする期間、映画ばっかり見る期間、本ばっかり読む期間、っていうのがわかれていてそれがサイクルみたいに回ってたんだけど、最近はどうも同時進行な感じ。

このGW、二つ映画を見にいった。一つ目はレディ・プレイヤーワン。各所で大絶賛されてるしレビューはそういうところを見てください。僕の感想も、最高でした、の一言。ほんと、俺、ゲーマーで良かったわ、って思わせられた。熱い展開もあったし、良かった。
もう一つはジュマンジ。やっぱりこれもゲームつながりなんだけど、最高だった。特に僕はジャックブラック大好きなので、かなり気持ちよく笑わせてもらった。

最近はもうこういうあんまり深いこと考えずに見てワーっと発散するような映画が好き。なんだか小難しい映画をあえてみようとは思わない。もしかしたら映画は僕の中で消費的趣味とわりきったからかもしれない。以前ならともかく、今はもう映画を見て何かを考えようとは思わない。

ゲームはモンハンの波が一段落つき、友人とやっていたフォートナイトにも少し疲れて最近あまりやってない。それよりもゲームするならエンジニア的な勉強やら試しになんかやってみたり、あとは実用書的なものを読んでる時間のほうが欲しいし、そうしてる。こういうのも一つの波なんだけど。
ただまぁそういうのに疲れてくるとゲームやりたいな、って思うんだけどガっと夢中になれるようなゲームもなくてちょっとモヤモヤしてる。

読書のほうは、楽しむための読書はずーっと寝る前にちょこちょこ読んでるの。最近はラノベチックなものが多くなったなぁ。テンプレ的な異世界転生モノも読むんだけどあんまり楽しめず、割と硬派なダークファンタジーみたいなものが好きな気がする。そういえば最近時代劇読んでないなぁ。以前は読む小説の8割は時代劇だったし、今でも好き。というか時代劇って一種のファンタジーだと思ってる。

エンジニアとして

職業エンジニアになって1年ちょっと。ふりかえってみるとまぁ進捗悪くないような気がする。まだまだ足りないことも多いんだけど。年度が変わっていろいろあって、後輩に教えるようなこともでてきた。というか誰もそういうの積極的にやらないから勝手出ただけなんだけど。

教えることから教わることも多いのでやってるし、教えた人が評価されたら僕の評価もあがるんじゃないか、という打算8割で動いてる。そういうのは先日あえて後輩ちゃんに伝えた。変に気をつかって遠慮するより、こっちもメリットがあってやってんだぜ、っていうことをちゃんと開示したほうが良さそうに思えて。あとの2割は、放置はダメだろ!という憤り。

会社に対してはいろいろ思うところがあるけど、やれる道を探してやっていくしかないな。割とマジメに戦略的に僕の立ち位置を確保しに行ってる。それでも上手くいかなかったら環境を変えるだけだし、環境を変えれるように動いていくしかない。不満を言うだけでは何にもならないので現実的にいろいろ手を打っていってる。
それが会社から評価されたかは別として、この1年ちょっとを振り返ってみてわりと納得行く形でレベルアップしてるのであながち的外れでもなさそうという実感がある。

日々の生活はというと

昨年度、妻の仕事のほうがちょっと大変そうだったけど部署移動とかもあり、すこしは良くなったような気がする。僕の人生は僕の夢だった世界旅行を終えた今はすでにボーナスステージ。なので妻と楽しく暮らせたらなにより。もうすぐ結婚して丸3年。小さな波はあれどそれなりに上手くのりこなしてると思う。
妻はいろいろ心配性なようで、もうちょっと気楽に生きてくれたらなーと思う。僕はずっとずっと一人でいることを基準にした加点法の世界で生きているので二人で居ることがすでにプラスだと言っているんだけどなぁ。

なんかこう、日々生きてきて、良い意味で諦めが良くなった気がする。コントロールできない物事に振り回されないことを念頭に置くというか。例えば妻の機嫌はコントロールできないし、妻の考えてることはエスパーじゃないので読めない。だから必要以上に気にしないし、深い入りしないようにした。もちろん気遣いや思いを汲むように努力はしてる上で。
ただ、自分がコントロールできるの自分の肉体だけ、という考えが強くなった。自分の気持ちすらもコントロールがままならないので、肉体をコントロールすることで自分の気持ちを動かすようなアプローチに変更した。そうしたら割とやることはシンプルになって良い感じ。

話変わって日々の週末はというと会社の同僚さんとキャンプに行ったり、ゲーム仲間と定期的にボードゲームに興じたり、エンジニア的な勉強会やセミナーに行ってみたり、わりと日々充実してる気がする。予定がなければジムに行くのも続いてるし、体が休みを欲っしていなければ技術の勉強をしてる。後輩ちゃん達に教える立場に身を投じたため、割と必死で勉強してる。なるべく形にしようと先日紹介したモンハンの弱点表示ツールとか、あとGoogleChrome用の拡張を作ってみたり、ちょこちょこいろいろやってる。

今年度も粛々と虎視眈々とやっていく。

二年たっても買って正解だったと思える新生活グッズ

  1. 1. 食洗機
  2. 2. シャワーヘッド
  3. 3. パンチングボウル
  4. 4. シリコンスパチュラとシリコンおたま
  5. 5. ヨーグルトメーカー
  6. 6. 匙つき菜箸
  7. 7. 光目覚し時計
  8. 8. マキタの掃除機
  9. 9. テンマの衣装ケース

新生活シーズンですね。僕等夫婦は今のところに引っ越してきて約2年半。それまで実家暮しだったのでいろいろと買いそろえた中でこれは買って良かったと思うのを書いていこうと思う。だいたいの家にあるだろうものは除いて。

食洗機

よっぽど手洗い好きじゃない限りはなぜ導入しないかがわからない。僕は機械でできることは人がやるべきじゃない、という哲学があるので食洗機を導入しない理由がない。高温で洗うので油汚れなんて手洗いよりはるかに綺麗に落ちる。この世には食器洗いきっかけで勃発する夫婦喧嘩あるらしいけど、そもそも食器手洗いが発生しないから無縁。ちなみにウチはタイマーにして夜中に回してる。

がんばれば自分で取りつけれる。というか僕は自分でとりつけた。なお電気代、水道代は知らん。でもメリットがでかすぎるので異常に高くなければ使わない理由がない。食べ終ったあと、サっと水で流してつっこむのですぐに洗わなくてもシンクに洗いものがたまらない。何より食器洗いがめんどくさいという心理障壁がなくなる。これが一番でかい。めんどくさいものをめんどくさく感じなくなるというはソリューションとして大正義だと僕は思ってる。

残念な点は、やっぱり場所を少し大きく取ること。それと事実上パナソニック一択なところ。

シャワーヘッド

うちのシャワーの水圧が低い。シャワーがあんまり気持ちよくない。シャワーヘッドはたぶんみんなが思ってるより簡単に交換できる上、素晴しく効果が高い。水圧が低い備えつけのヘッドだったのを、穴の細かいヘッドに変えたら水圧は上がるわ細かい粒で気持ち良いわで最高になった。シャワーの出る穴が小さいってことは単純に水圧が上がる。ホースを潰して持つような原理ね。

で、水の粒が細く細かくなったことで体に当ったとき気持ちいい。ウチの実家はいろいろ良い設備が整ってるけど、シャワーヘッドだけはウチのほうが気持ちいいのを年末年始に帰省した時に実感した。ふふん。

マジでオススメ。

パンチングボウル

ザルじゃなくてパンチがいいよ。紹介してるやつは普通のボウルとパンチングのボウルそれぞれ3種類でそれぞれの大きさがピッタリだからスタッキングもできるし。なんでザルじゃなくてパンチングがいいかってとザルだと細かいものがひっかかって取りにくいから。100均とかでよくあるプラスチッキーなザルよりも金属のほうが断然耐久製あるし、2年半、ずっと使ってるけどまだまだずっと使えそう。これだけでいろいろ事足りる。

シリコンスパチュラとシリコンおたま

木ベラとかあるけど、基本的にたいていのことは耐熱ゴムヘラで十分。しかも鍋に少し残っちゃう、ってこともゴムヘラだとない。精神衛生的に凄くいい。汎用性高すぎる。
おたまも形が変形するからキッチリとれる。熱にも普通に使う分には心配ないし便利。

ヨーグルトメーカー

朝食で夫婦でヨーグルト食べてるとすぐになくなるので、ヨーグルトを買って牛乳で増殖させる作戦に移行。牛乳パックのまんま作れるので無理なく続けられてる。だいぶコスパは良いと思う。

匙つき菜箸

厳密にはこれと違って使ってるのは木製なんだけど、ほぼ同じ感じ。持ち手側がスプーンになってるようなやつはいくつかあるなか、普通に丸型だと干渉して使いにくい。ちょっとすくうので十分なのでこの程度の凹みで十分。シリコン菜箸も使ってみたけどなんか重くて取り回しづらかった。

光目覚し時計

最近はスマートスピーカーの流れでタイマー的に付くライトも注目を浴びてるけど、フィリップスはだいぶ前から光目覚ましを作ってる。どうしても起きれないときもあるけど、基本的には寝起きはわりとやんわり起こしてくれる。もちろん音もなる。あと時間でゆっくり暗くなるようにもできるのでベッドサイドランプとしても良い感じ。

マキタの掃除機

ダイソンとか高いじゃないですか、でもコードレス掃除機が良いじゃないですか。サッと使えるのは良い。掃除に対して心理障壁を小さくするのはサっと掃除するようになるから良い。掃除機をかけるのが面倒なんじゃなくて、大抵の場合は掃除機を出してきてコードにつないで、掃除機かけて、コードを外してしまう工程が面倒なわけで。やっぱり家事の基本は極限まで心理障壁をなくすことにフォーカスするべし、だ。

テンマの衣装ケース

衣装ケースにしては少し高めかもしれない。しかしながら定番の無印などには到底およばないようなスムーズさ。しっかり止まる。頻繁に使うし、買いかえるようなものでもないから奮発して購入。道具はデザインとかよりまず使い勝手。天馬のフィッツ最強伝説。

モンスターハンターワールド モンスター弱点早見システムを作った

  1. 1. 概要
    1. 1.1. 経緯的な話
    2. 1.2. 開発的な話
    3. 1.3. バズらせるというか知らしめる話

狩人のみなさまにおかれましては楽しいハンターライフを送っておりますか?

タイトル通りなんだけど、MHW向けにせっかくなのでスマホから簡単に見れるシステムを作った話。
作ったものはここ。
MHW 弱点検索

概要

こんな感じ。
サムネイル

  • 検索というよりフィルタ
  • ロード時間とか、準備時間にササッと確認できると良いなあ
  • 種類や名前を指定してそのモンスターの弱点とかを表示するシンプルなシステム
  • キーワードも対応してる、AND、ORも使える
  • なにげに英語対応した
  • PWA対応なのでスマホのホームに登録すると捗る

経緯的な話

以前にGoogle SpreadSheetに作ったやつがあるけど、あれでも十分だったところ、たまたま仕事の技術勉強会での発表の出番が周ってきて何か動くサンプルが欲しかったのでチャチャッとそれらしきものを作ったのがきっかけ。ちなみに発表の内容は、静的なページであってもJavaScriptで何か動いてるとしたらそこにテスト必要だよね、という感じ。

ちなみに勉強会には間に合わず、プロトタイプというかただボタン押すと動くやつ、みたいなので発表した。とはいえそこで原型はできたちゃったので、それをベースにちゃっちゃっと完成させた。勉強会でサンプルで書いたテスト以外は書いてない。本末転倒。

とはいえ実用十分だし、つながりのある人達がフィードバックしてくれるし、自分も使ってみてちょこちょこアップデートを繰り返してようやく一段落。

開発的な話

静的ページオンリーで行こうと思ったので、いっそのこと純SPA的に作ろうと思った。そして利用者のスタイルとしてゲームやりながらスマホをいじるのがメインと思われたことからPWAにしてみる。

スマホ特化なのでいろいろフレームワークを検討したけど、OnsenUIがてっとり早そうだったのと僕の好きなVue.js用があったので採用。使ってみての感想はいろいろとちゃちゃっと作るには良くできてるけど、混みいったことをやろうとすると癖とかが足枷になりえたり。まぁそれはどのフレームワーク使ってもそうなんだろうけど。

Vue.jsは以前作ったPentazemin以来しばらく間が開いたので、再入門的な感じになった。ただPentazeminの時にいろいろ頑張ったせいか、だいぶサクサク作れた。あそこで独力で頑張った努力は無駄どころか自分にとって大きな資産になってる感をすごく感じた。それとともに今回もちょっと違ったことやったりで知見が増えた感覚もある。

特にSPAにしつつもURLで言語環境分けたり、ローカライズ周りだったり。あとはキーワードの実装もなかなか頭をひねった。そう思うとこういう自分の好きな題材で好きなフレームワークや開発技術を持ちいて趣味開発するの最高に良い。ちょうどゲームのほうも落ちついてきたので気持ち的にも良かった。

最初はGitHub-Pagesで運用しようと思ったけどなんかファイルが上手く読まれないのでNetlifyで。このブログでも使っるNetlifyだけど改めて便利さを思い知った。静的なものであればNetlifyに上げさえすれば動くので、内部的に動的な要素を必要としないなら十分だし手軽で最高。SPAがっつり作れば動的っぽいけどフロントエンドでどうにでもできちゃうのでこれで事足りちゃうってのがまたすごい。便利な世の中で幸せ。

バズらせるというか知らしめる話

せっかく作ったのでいろんな人に使って欲しいのは当然だと思う。そうしていろいろと知らせてみたものの、バズらせるのって難しい。

Twitterでお知らせするも僕のフォロワーはそんな多くない。ハッシュタグつけたら良いんかと思ったけどこれが実は簡単な話じゃなかった。というのも、Twitter公式で見てるとハッシュタグつけても拾われるのは何らかのアルゴリズムが噛んでる。人気があるのが良く表示されるというか、表示される為の人気を取るハードルが高すぎる。特に同じタグでかなりの数のツイートされてる場合。
公式で見てない場合、時系列的に載るとは思うんだけどここも流れが早すぎて流れてしまう。画像がないからかな、と思ってプレビュー画像を作ってみたけど変わらず。これは時間帯とかも関係すると思うのでなかなか一概に言えず。

5chやまとめサイトで情報が載るのが一番良さそうだけど、5chってそういう宣伝的なのを嫌う傾向にありそうだし、まとめサイトってなにをどう拾ってるのかよくわからん。5chに載るのは、宣伝じゃなく上手く貼るような独特の手法が必要そうな気がする。5ch専用ステマというか。よくポジティブに話題になるのは、なんか上手いこと工作してるんだろうなあ、と思う。

一方で英語対応したので海外掲示板のRedditにも載せてみた。こっちは5chみたいな暗黙の了解みたいなのとかないので自分でバシっと。スレ立てて1時間も立たないうちに感謝のコメント付いたのでだいぶ嬉しかった。本当、日本には存在しない感謝や褒めるのを惜しまない文化は素敵。というか日本で感謝と褒めを惜しむ文化ってなんなんだろう。みんな褒めたり感謝しあったりするほうがハッピーに暮らせると思うよ。誇張じゃなくて、その文化の違いだけで移住する価値十分にあるケースも少なくないと思う。

そんなこんなで知らせるところでだいぶ苦戦してる。自分とその周りに役立てばそれで十分なんだけどね。

これがないと捗らない、僕のKarabiner設定(late 2017)

  1. 1. Karabiner-elements
    1. 1.1. GUI設定 Overview
      1. 1.1.1. Simple Modifications
      2. 1.1.2. Function Keys
      3. 1.1.3. Complex Modification
        1. 1.1.3.1. Change Space to R-Shift (if alone)
        2. 1.1.3.2. Change Delete to R-Ctrl (if alone)
        3. 1.1.3.3. Change L-Cmd + R-Opt to L-Cmd + Space
        4. 1.1.3.4. Change L-Opt + R-Opt to L-Opt + Space
        5. 1.1.3.5. Change L-Opt to TAB (if alone)
        6. 1.1.3.6. Change R-Opt to ESC (if alone)
        7. 1.1.3.7. コマンドキーを単体で押したときに、英数・かなキーを送信する。
        8. 1.1.3.8. Change FN1 to (, Shift + FN1 to <
        9. 1.1.3.9. Change FN2 to ), Shift + FN2 to >
    2. 1.2. JSON設定ファイル

昨年末から続いてる極まりつつある入力環境シリーズ、Karabiner編。
macOSユーザの大半が使ってるであろう、Karabiner(-elements)というキーボードセッティングユーティリティの設定のお話。ここの設定はもはや無いと使えないレベル。

Karabiner-elements

macOS Sierra以前にKarabinerというツールがあって(それ以前はKeyRemap4macbookという名称だった)。Sierraで内部的に大きく変更があって、簡易的な代替としてKarabiner-elementsが生まれた背景がある。その後アップデートを繰り返し今では以前のKarabinerにひけを取らない、もしくは以前よりも柔軟な設定ができるユーティリティとして生まれ変わっている。

で、もちろんGUIから設定もある程度できるんだけど、内部的にはJSONで設定ファイルが書かれている。さらに柔軟な設定となるとJSONを直接編集する方法になる。なので今回はGUI部分はさっと紹介に留めてJSONをメインで。というより、設定JSONさえ入れればすぐにその設定を使えるので良い。(Karabiner時代は独自のxmlだったので以前よりやりやすくなったと思う)

僕の場合、外付けキーボードを使っていて、そちらでファームウェアレベルでキーリマップはできるものの、外してノートのキーを直接叩く機会もあるので、共通する設定はKa rabiner-elements側で行なっている。また、僕の設定はかなりErgoDox特化の設定でもあるのでご注意を。

GUI設定 Overview

Simple Modifications

Caps LockCtrlにしているだけ。Caps Lockが無いと大変な人って多数派なんだろうか疑問である。システム環境設定側でもできるけど、いろいろ絡めるとこちらで設定するのが良い。

Function Keys

基本的に叩かないのでわりとどうでもいい。デフォルト。すごい偏見だけどWindows使ってた人ってFunctionキー好きだよね。

Complex Modification

Change Space to R-Shift (if alone)

SandS用。SandSとはSpaceShiftキーを両立させるキーで、単体で押したらSpace、他と組み合わせるとShiftになるようなキーのこと。ちなみに僕の使うErgodoxではDoubleFunctionとして設定できるけど、挙動はKarabinerでやるほうが好みの感じになるのでこちらでやってる。

Change Delete to R-Ctrl (if alone)

これは完全に僕の好み。しかもErgoDox特化。黄金の小指を捨てて鋼鉄の親指にするためのもの。要は親指位置にCtrlキーを持ってきていて、それが単体押しだとDeleteとして動作したらいいよね、って感じ。ちなみにノートのキーボードを直で叩く時は小指が黄金化せざるを得ない。

Change L-Cmd + R-Opt to L-Cmd + Space

Cmd+SpaceでAlfred呼び出しにしてるものをErgoDox使用時とキーボード直の時の差を吸収する設定。直の場合、左親指でCmd、右親指でShiftを叩いてAlfredを呼び出している。が、ErgoDoxのときは左側にSpaceキーがないのでOptキーと組み合わせることで同じ動作をするように。

Change L-Opt + R-Opt to L-Opt + Space

これも上と同様で、Opt+SpaceでOmniFocusのクイックエントリに設定しているから。

Change L-Opt to TAB (if alone)

左のOptを単体で押したらTABとして動作。僕の小指はそんなに長くないし。そしてErgoDox系が素晴しいのは親指の有効活用を目指しているからである。

Change R-Opt to ESC (if alone)

上記同様。

コマンドキーを単体で押したときに、英数・かなキーを送信する。

これは最初からプリセットされているものを読み込んで設定できる。US配列好きの日本ユーザーに割と常識になってる英数、かなキーのエミュレーション。僕の場合、AquaSKKでの設定を使うのであまり出番がないけど一応。

Change FN1 to (, Shift + FN1 to <

ErgoDoxにはb,gキーの右側に特殊キーがある。そこを括弧系の入力に割り当ててる。ErgoDox側でFN1を割り合てて、Karabiner側で実際に入力されるキーを指定。これは本来ならErgoDox側のハードウェア的にやるほうが望ましいけど、ErgoDox側でのShiftを絡めたキー指定が難しいため。

Change FN2 to ), Shift + FN2 to >

上記の逆。h,nの左にも同様のキーがあるので逆の閉じる側の括弧を。余談だけど、その上に配置されたキーは、[]{}を割り当てている。

余談だけどUSキーボード好きのJISキーボード使いずらい派は、括弧のキー配列が横並びじゃなくて縦並びになってるが嫌って人が多いと思ってる。あれはとても直感的じゃない。

JSON設定ファイル

上記までの設定が全部かかれたJSONファイル。ちなみに生成されるのファイルのインデントは4スペースだけど、個人的に見辛いので2スペースにしている。で、つまるところJSONなので、これをGitとかGitHub Gistで管理したりDropboxとSymlinkで同期させたりすると複数端末でも使い勝手が良いよね。

karabiner.json
{
"global": {
"check_for_updates_on_startup": true,
"show_in_menu_bar": true,
"show_profile_name_in_menu_bar": false
},
"profiles": [{
"complex_modifications": {
"parameters": {
"basic.to_delayed_action_delay_milliseconds": 500,
"basic.to_if_alone_timeout_milliseconds": 1000,
"basic.to_if_held_down_threshold_milliseconds": 500
},
"rules": [{
"description": "Change ␣ to R⇧ (if alone)",
"manipulators": [{
"from": {
"key_code": "spacebar",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "right_shift"
}],
"to_if_alone": [{
"key_code": "spacebar"
}],
"type": "basic"
}]
},
{
"description": "Change ⌦ to R⌃(if alone)",
"manipulators": [{
"from": {
"key_code": "delete_forward",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "right_control"
}],
"to_if_alone": [{
"key_code": "delete_forward"
}],
"type": "basic"
}]
},
{
"description": "Change L⌘ + R⌥ to L⌘ + ␣",
"manipulators": [{
"from": {
"key_code": "right_option",
"modifiers": {
"mandatory": [
"left_command"
],
"optional": [
"any"
]
}
},
"to": [{
"key_code": "spacebar",
"modifiers": [
"left_command"
]
}],
"type": "basic"
}]
},
{
"description": "Change L⌥ + R⌥ to L⌥ + ␣",
"manipulators": [{
"from": {
"key_code": "right_option",
"modifiers": {
"mandatory": [
"left_option"
],
"optional": [
"any"
]
}
},
"to": [{
"key_code": "spacebar",
"modifiers": [
"left_option"
]
}],
"type": "basic"
}]
},
{
"description": "Change L⌥ to ⇥(if alone)",
"manipulators": [{
"from": {
"key_code": "left_option",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "left_option"
}],
"to_if_alone": [{
"key_code": "tab"
}],
"type": "basic"
}]
},
{
"description": "Change R⌥ to ⎋(if alone)",
"manipulators": [{
"from": {
"key_code": "right_option",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "right_option"
}],
"to_if_alone": [{
"key_code": "escape"
}],
"type": "basic"
}]
},
{
"description": "コマンドキーを単体で押したときに、英数・かなキーを送信する。(左コマンドキーは英数、右コマンドキーはかな)",
"manipulators": [{
"from": {
"key_code": "left_command",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "left_command"
}],
"to_if_alone": [{
"key_code": "japanese_eisuu"
}],
"type": "basic"
},
{
"from": {
"key_code": "right_command",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "right_command"
}],
"to_if_alone": [{
"key_code": "japanese_kana"
}],
"type": "basic"
}
]
},
{
"description": "Change FN1 to (, ⇧ + FN1 to <",
"manipulators": [{
"from": {
"key_code": "international3",
"modifiers": {
"mandatory": [
"left_shift"
],
"optional": [
"shift"
]
}
},
"to": [{
"key_code": "comma",
"modifiers": [
"left_shift"
]
}],
"type": "basic"
},
{
"from": {
"key_code": "international3",
"modifiers": {
"mandatory": [
"right_shift"
],
"optional": [
"shift"
]
}
},
"to": [{
"key_code": "comma",
"modifiers": [
"right_shift"
]
}],
"type": "basic"
},
{
"from": {
"key_code": "international3",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "9",
"modifiers": [
"right_shift"
]
}],
"type": "basic"
}
]
},
{
"description": "Change FN2 to ), ⇧ + FN2 to >",
"manipulators": [{
"from": {
"key_code": "international1",
"modifiers": {
"mandatory": [
"left_shift"
],
"optional": [
"any"
]
}
},
"to": [{
"key_code": "period",
"modifiers": [
"left_shift"
]
}],
"type": "basic"
},
{
"from": {
"key_code": "international1",
"modifiers": {
"mandatory": [
"right_shift"
],
"optional": [
"any"
]
}
},
"to": [{
"key_code": "period",
"modifiers": [
"right_shift"
]
}],
"type": "basic"
},
{
"from": {
"key_code": "international1",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [{
"key_code": "0",
"modifiers": [
"right_shift"
]
}],
"type": "basic"
}
]
}
]
},
"devices": [{
"disable_built_in_keyboard_if_exists": true,
"fn_function_keys": [],
"identifiers": {
"is_keyboard": true,
"is_pointing_device": false,
"product_id": 4871,
"vendor_id": 65261
},
"ignore": false,
"manipulate_caps_lock_led": false,
"simple_modifications": []
},
{
"disable_built_in_keyboard_if_exists": false,
"fn_function_keys": [],
"identifiers": {
"is_keyboard": true,
"is_pointing_device": false,
"product_id": 630,
"vendor_id": 1452
},
"ignore": false,
"manipulate_caps_lock_led": true,
"simple_modifications": []
},
{
"disable_built_in_keyboard_if_exists": false,
"fn_function_keys": [],
"identifiers": {
"is_keyboard": true,
"is_pointing_device": false,
"product_id": 628,
"vendor_id": 1452
},
"ignore": false,
"manipulate_caps_lock_led": true,
"simple_modifications": []
}
],
"fn_function_keys": [{
"from": {
"key_code": "f1"
},
"to": {
"key_code": "display_brightness_decrement"
}
},
{
"from": {
"key_code": "f2"
},
"to": {
"key_code": "display_brightness_increment"
}
},
{
"from": {
"key_code": "f3"
},
"to": {
"key_code": "mission_control"
}
},
{
"from": {
"key_code": "f4"
},
"to": {
"key_code": "launchpad"
}
},
{
"from": {
"key_code": "f5"
},
"to": {
"key_code": "illumination_decrement"
}
},
{
"from": {
"key_code": "f6"
},
"to": {
"key_code": "illumination_increment"
}
},
{
"from": {
"key_code": "f7"
},
"to": {
"key_code": "rewind"
}
},
{
"from": {
"key_code": "f8"
},
"to": {
"key_code": "play_or_pause"
}
},
{
"from": {
"key_code": "f9"
},
"to": {
"key_code": "fastforward"
}
},
{
"from": {
"key_code": "f10"
},
"to": {
"key_code": "mute"
}
},
{
"from": {
"key_code": "f11"
},
"to": {
"key_code": "volume_decrement"
}
},
{
"from": {
"key_code": "f12"
},
"to": {
"key_code": "volume_increment"
}
}
],
"name": "Default profile",
"selected": true,
"simple_modifications": [{
"from": {
"key_code": "caps_lock"
},
"to": {
"key_code": "left_control"
}
}],
"virtual_hid_keyboard": {
"caps_lock_delay_milliseconds": 0,
"keyboard_type": "ansi"
}
}]
}

そんなこんなで年も明けてだいぶたつけど、去年末にもあとめた一連の入力環境カスタマイズシリーズはおしまい。
整理するにあたって確認しなおしたのでこれからはあんまり変わることはなさそう。

とはいえ、キーバインドあたりはまだまだ何とかしたい感ある。
装飾キーの押し分けによってスコープを変えたい、例えばCmd単体ならアクティブなウインドウの操作、Cmd+Ctlrならアクティブなアプリの操作、Cmd+Ctlr+Altでグローバルな操作、とか。

そうやりたいのはやまやまなんだけど、デフォルトで設定されてるキーバインドも大事にしたくて、その両方の落としどころが上手く見つからない感じ。

何故僕はTumblrからHexo+Netlifyに移行したのか

  1. 1. Hexoについて
  2. 2. Netlifyについて
  3. 3. Tumblrについて
  4. 4. それでも僕がTumblrを離れたわけ
    1. 4.1. テーマの自作がやや面倒
      1. 4.1.1. TumblrのJavaScriptが避けれない
    2. 4.2. エントリが管理できない
    3. 4.3. Tumblr == リブログ というイメージが強すぎる
      1. 4.3.1. もにょる
  5. 5. じゃあHexo+Netlifyは?
  6. 6. 昔話

細々ながらも長らくブログをやってきまして。つい先日しれっとTumblrからHexoというブログ特化型の静的サイトジェネレータをNetlifyでホストする方法に移行しました。

Hexoについて

ブログ特化型の静的サイトジェネレータは今ではいろいろ豊富で、Jekyllなんかを皮きりにMiddleman、Hugo、Octopress、Gatsbyなどがある。

で、結果的にできることっていうのはどれもそんなに変わらないんだけど、過程としてそもそも動く言語が違う。ということで僕がHexoを選んだのはNode.jsで動くから、っていう理由だけ。特に僕は既存のテーマとか使うのは好きじゃなく自分で作りたい派だから慣れ親しんだPug、Stylusでテーマ作るのもNode.jsのほうがやりやすい。

と、書いて思ったけどわりとテーマ自作って少ないのかな。昔からいろんなブログを転々としてきたけど、いつだってテーマは自作してきた。それが普通だと思ってた。

まあそんなこんなでローカルで開発できてテストできて、デプロイも簡単なHexoにすることに。それにブログ程度、動的な要素はそんなに必要なくて静的で十分事足りるし。

Netlifyについて

静的サイトをホスティングするWebサービス。Git系リポジトリのWebhookからビルド、デプロイできるし、SSL/HTTPSもばっちり。カスタムドメインも使えるし至れり尽せりな上に基本無料(CDNを日本にしたり、パスワードかけたりは有料)。個人の静的サイトならもうNetlifyで全部いいんじゃないかって思う。

もちろんGitベースのソース管理してデプロイするのは開発に関する知識が少し必要だから使うユーザのレベルは少しだけ要求されるけど、逆に言えばその程度しか要求されないのですごく楽。

各エントリの内容はもちろん、テーマや設定系も全部Git管理できるのは本当にいい。それでpushするだけでデプロイ完了。めっちゃ楽チン。

Tumblrについて

僕はTumblr大好きだったし今でも好き。本当、知ってる人の認識が「リブログ専用ブログサービス」みたいな認識なことだけはクソだと思ってるけど、これは日本のユーザコミュニティの問題なのでもうしょうがない。

Tumblrをブログサービスとしてちゃんと見た時、意外にも使いやすい。文章を書くのに必要なフォーマットはあるし、Markdownだってもちろん対応。WebAPIも用意されてるからMarsEditのようなブログ用のアプリで更新できる。

できないのはOGPにテキストタイプの投稿ではOGPにアイキャッチ画像を載せれないぐらい。コメントはdisqus使ったり、関連記事とかも工夫しなきゃいけないけど不可能ではない。

むしろ、なんだかごちゃごちゃしてて無駄な情報が多いなか、Tumblrの主流はシンプルなミニマリスティックな感じはとてもいい。もう一度言うけど、Tumblrはリブログ専用ではない。

そしてリブログがあるが故に拡散能力が高いのもポイント。普通だとRSSとか巡回や検索流入だけだけど、TumblrはDashboardを潜る(Twitterで言えばTimeLineを眺める)人も多い。そしてRTならぬReblogがある。リブログされれば別の人のTumblrに自分の記事が載る。これはなかなか伝播力あるし、リブログがリブログで広がるより一時ソースお自分の記事としてリブログされるのはかなり楽しい。

何度でも言うぞ、Tumblrはリブログ専用サービスじゃねえ。

それでも僕がTumblrを離れたわけ

そんなTumblr好きなのに別れを決意したにはやっぱり理由がある。むしろ感覚的には好きだからこそ今まで使ってきた、に近い。

テーマの自作がやや面倒

テーマは自作できるし、公式ドキュメントをしっかり読んだり、既にあるもののソースを見ればそんな難しくない。1つのテンプレートファイルで分岐でなんとかしてるってのがわかってしまえば簡単。拡張性もそこそこある。

とはいえ、Tumblrの管理画面で操作することも多く、何度も修正を繰り返すのはちょっと難儀。
バージョン管理もないし、手元で書いたソースをコンパイルして圧縮してそれをコピペしてリロードするのはやっぱり面倒。

TumblrのJavaScriptが避けれない

つまりテーマに手を加えるだけじゃAMPが使えない。強制でJSが挿入されるので。まあ無料のWebサービス使っておいてなに言ってんだ、って話ではあるけども。
AMPに対応しようと思ったら外部のサービスを使う必要があるけど、それだと自動生成にしかならないのでリッチなAMP対応ページを作れない。

エントリが管理できない

Web上のエディタにそのまま書くという暴挙なんてしない。とはいえMarsEditでやるしかない。僕はそれでもまだ不満で、エディタは一つでいい。むしろ一つがいい。

どういうことかというと、自分用にフルカスタムしたエディタで書かかないとストレスたまる。補完とか、シンタックスハイライトとか。世にMarkdownエディタはポコポコ生まれるけど、ほんと意味わかんない。エディタは自分でカスタムして、みんなが欲しいのは管理ツールだけだと思ってる。

そういうわけで、Atomで書いてMarsEditにコピペしてポストするのがおっくう。
MarsEditが最近バージョン上がって、アップグレードフィーを要求されたことと、書いたものや下書きをファイルとして管理しにくいというところも大きな要因。

今後他のプラットフォームに移行したり取り回しを考えると、.mdで保存しておけないは苦痛

Tumblr == リブログ というイメージが強すぎる

テーマを上手くやれば、このサイトはTumblrです、って言わなきゃわかんないようにはできる。独自ドメインでも運用できるし、事実、特設サイトとか簡単なものならパっとTumblrで作って潰すほうがよっぽどスピーディにできると思う。

名前を出すのは失礼かもしれないけど「Tumblr酒場」なるイベントがあるらしい。集まって飲みながらリブログするイベントらしい。リブログはTumblrの機能の一つであって、それ以上ではない。だからTumblr酒場じゃなくてリブログ酒場と名乗るべきだと思う。もう一度言うぞ、Tumblrはリブログ専用サービスじゃねえ。

もにょる

今でこそ悟りを開いたけど、苦労して書いた記事がリブログされ、嬉しくて喜んだのもつかのま、リブログ先のほうが人気があって、そこが1次ソースみたいに扱われた時の悲しさ。手柄をかっさらわれたのような感覚。

そんなことが何度かおこってから、まあでも誰にも見られないような陽の目を浴びない扱いよりはマシか、と思いなおしたけどもね。そういうのがあるとやっぱりライトユーザーはここでブログを書こうとは思わないだろうなぁ。ましてや最近はTwitterやInstagramの波及で承認欲求を大人気なく発揮するのはダサいという風潮はなくなりつつあるのだから。

じゃあHexo+Netlifyは?

そんなこんなでTumblrでやりつづけることに鬱屈を感じつつもリブログされた時の楽しさを舐めながら今までやってきて。でもまあエンジニアの端くれとして自分でフルに管理できる環境でやるか、って思ってやってみた。

結果はというと、前半でも書いたけど、めっちゃいい。
いつものエディタでガーッと書いて、コミットしてプッシュしたら新しい記事がデプロイされる。最高。

細かい設定や拡張性もある。余談だけど、過去記事は全部従来のTumblrの記事から移行してURL変わったのは全部リダイレクトしてる。RSSフィードもリダイレクトしてるからパスは変わったけど、登録しなおさなくても問題ないはず(最初だけ過去記事が配信されなおしてしまうけど)。

リブログされやすい環境は手放してしまったものの、書き易さは格段に上がったのが良い。承認欲求はそんなに高くない僕には承認欲求が満たされやすい環境より、書く時のストレスが少ない環境のほうがよっぽど大事。

昔話

僕がブログを始めたきっかけはiBlogというアプリだった。当時のMacユーザ向けに無料で配布されたアプリで、今みたいなブログサービスがほとんどない時代だった。

今風に言えば静的サイトジェネータのGUI版。あれでブログを始めて、なんかカスタマイズして。

そういえば先日、そのころのiBlogコミュニティで今もつながりある友人と会った。僕も今やWebエンジニア、彼はWebサイト制作会社のやってる。当時の話と、二人ともiBlogがなかったら当時のコーディングをあんなにがんばらなかっただろうし、今につながってないよね、なんて話をした。

今思えばiBlogが半手作り感あったからこそ、自分でテーマを作るのは当たり前の感覚になったのかもしれない。

面白いもので、あれから、GoogleBlogger使ってみたりTumblr使ってみた後で、今こうして使い出したのも静的サイトジェネレータ。やってることはGUIからCUIベースに変わっただけで、なんかまた戻ってきた感ある。

そういうわけで、まだ作りが甘いところをちょいちょい直しつつも、新しくなった環境でこれからも細々とブログ書いていきます。(Tumblrはまた独自ドメイン取る前のURLに戻して、別のものとして楽しんでやっていきます)

モンスターハンターワールド 弱点早見表

攻略サイトがたくさんあるし、同様の弱点早見表もあったり、またTwitterで誰かが作ったやつが拡散されてたりするけど、個人的にはどれも見づらい(し、間違ってたりする)ので自分のために自分で作った。

ちなみにデータはゲーム内の図鑑を参照してるので間違えないはず。
逆に言えばもっと細かいデータとかもあるんだろうけどそこには触れない。TA勢でもない限りはこれで十分だと思う。
一部表記(脚→後脚、胴など)変えたりしてるけど、普通にわかる範囲内で。
背中側と腹側とか厳密に分かれてるモンスターもいるけど、胴、でわかるはず。背中が堅いやつとか明らかにわかるので。

色のイメージと明度でわけて見やすくしてるつもりだけど、項目が多いのでまだゴチャゴチャした印象。もうちょっと淡い色が上手くつかえたらいいんだけど。
とはいえパっと見で「こいつにはコレが効く!ここが弱点!」ってのはわかりやすいかと。
使う場面は相手モンスターはわかってるので、何属性を持っていくか、自分の武器ならどこを狙えばいいか、をすぐわかるようにすることにフォーカスしたつもり。

まあ僕の主武装であるタメ砲撃メインガンスには弱点部位とか属性とか関係ないんですけどね。

それにしても夢中でやってると手に汗かいてくるので、コントローラスキンを買おうか迷ってる。以前使ってたのはかなり良かったものの貼るタイプで少し吸水性があったので汗のオイニーが気になったので一度捨てた。
赤いコントローラーとか好きなんだけど、純正マグマレッドが使いすぎで潰れたので今はもともとの黒。これにスキンでグリップ力つけて色も変えれば楽しいかなーと。値段も高くないので意外にオススメです。

Monster Hunter Worldに想いを寄せて

  1. 1. DOSのおもいで
  2. 2. Worldに向けて
  3. 3. World 所感
    1. 3.1. やりやすくなってるなぁ
    2. 3.2. 知らなくて徳したこと、損したこと
      1. 3.2.1. キャラクリエイト
      2. 3.2.2. 操作設定
      3. 3.2.3. アイテムプリセット
      4. 3.2.4. スリンガー有効利用
      5. 3.2.5. 無料コンテンツもあった
  4. 4. 楽しもう

先日、MonsterHunterWorld、いわゆるモンハンと称されるシリーズの最新作が発売されまして。僕は2作目であるDOS以来、十数年ぶりにプレイする運びとなりました。

DOSのおもいで

あのころはそう、ちょうど僕の仕事での中国駐在が決まってほとんど出発のタイミングと同時だった。仲の良い友人が餞別にってプレゼントしてくれてスーツケースにPS2とモンハン入れて旅立ったっけね。仕事でいろいろ生活にも制約がある海外暮らしだったので、今思えば、夢中になれてしかもオンラインでコミュニケーションできるゲームの存在はかなりありがたかったなぁ。

リアルの友人達でやってる人がいなかったので、野良で始めて、偶然とあるカップルさんと仲良くなってよく一緒にプレイしてたっけ。彼氏さんと僕、彼女さんと僕、もしくは両方と、という感じ。そこにその同僚さん(だったか?)と、たまたま一緒になったプレイヤー君と、というふんわりとした固定メンツでよく遊んでた。

カップルさんは雰囲気の良い二人で一緒にやってて楽しかったなぁ。同僚さんはなんかつかみどころのない人だった。もうひとりのプレイヤー君は多分まだ年齢が若かったんだろう、言動も若くワガママも多かったけどみんな「はいはい」って感じで微笑ましくそれにつきあってたような。みんな邪気がなく、あそこには平和なオンラインがあったなぁ。

ゲームの進行度があがって難しくなって。それとともに理不尽になった。単純に敵が速くなったりパターンが増えたりダメージが増えたり、そういう難度調整は僕は大歓迎。シビアなテクニックが要求される反面、テクニック次第でどうとでもなる、そういうゲーム性は大好き。だけどそういう感じではなく、雑魚敵をたくさん介入させてテクニカルにも回避しにくい、理不尽な方向性の難易度調整だった。

それとともに強い武器に要求される素材集めの出現度合いも低く、面白さを感じなくなる作業のような素材集めマラソン。効率を重視した装備じゃなかったり、非効率的な動きに排他的になるプレイヤー達。固定メンツと時間が合わない時に野良でやってたら、ギスギスオンラインで理不尽難易度で徐々に冷めてきた。

キャラの着せ替え要素を増やすためだけになんでこんな理不尽な作業ゲーしてるんだろう、と思って覚めた。時間が合いにくくなったか、仕事の都合か忘れたけど固定メンツともあまり遊ばなくなってたので、そうしてやらなくなった。彼らは今も平和な日常だろうか?

その後、駐在も終わって日本に戻って。テクニックで回避するものじゃなく理不尽な方向性の難易度調整に腹が立ったのと、海外の珠玉作に触れだして、モンハンを遠ざけるようになった。新作が出た時などリアルの友人から軽く誘われることもあった。自称ゲーマーの友人達が海外の珠玉作をプレイしないどころか名前すら知らない。ああ、もうゲームに対する立ち位置が僕と違うな、と思ったりもした。そんなこともあっていっそモンハンを忌避してて今に至る

Worldに向けて

今作のプレイを前向きに検討した一番の決めては妻さんが「モンハンやりたい」と珍しく自分からやりたいゲームを言ってたこと。ちょこちょこゲームはやるものの僕ほどガチでもない妻さんではあるので、自分からやりたいゲームを言うことは滅多にない、しかも今回はそれが協力プレイできるもの。僕にとっても固定メンツを一人確保できるし、一緒に楽しめるし、そういうゲームはかなり貴重。

昨今のFPSとかで野良でやるのに疲れてきたのも大きいと思う。野良の世界はいつだってギスギスオンラインで、DOSの頃から変わらないらしい。妻もやる、同僚さんもやる。しかも発売直前になって数多のゲームをジャンル問わず一緒に遊んできたゲーマーの友人もやると表明した。そうなったら、もうね。

ベータ版で体験できたのでやってみた。久々で懐しみありつつ、どうやらいろんな要素が変わったらしく純粋に楽しかった。DOSのころ、アクションゲームとして気に食わなかった部分もほとんどなくなってるし。操作体系も昔とちょっと変わってたり。

とはいえ一番大きな変化はきっと自分なんだろうなぁ。大人になったというか柔軟になったというか。以前のようにギスギスオンラインにならなそうだな。という予感。

World 所感

やりやすくなってるなぁ

エリアごとに分断されてなくロードがないのが良いね。箱庭感とオープンワールドのちょうど良いところっぽい感じ。痕跡を辿って案内が出たり、とかって賛否両論あるみたいだけどある種、今のオープンワールド系のデファクトスタンダードで良い。ウィッチャーやHorizon Zero Dawn、アサシンクリードとかいわゆるTPA系はほとんどそういう感じ。良い具合に寄せてきたと思う。マップもファストトラベルも親切。

反面、久々だと要素が多すぎて覚えることも多い。でもそのへんは良くも悪くも大人なのでゆっくり覚えていけばいいか。ちゃんと説明もあるし。

地形の起伏とかその場所にあるものを有効利用したり、落ちてるものがスリンガー(投擲補助武器)用の弾になったり。なんかサバイバルというかハンターらしくて良いと思います。あとは植物とか鉱物の採取とは別に魚や虫、動物の採取とかあってコレクションに増やしていくのも楽しい。ハンターがただモンスター狩るだけじゃなくて調査、探索っぽくなってるのは良いなぁ。

あとはシステム的にPSNのネットワークを使うので、ウチみたいなPS4が2台ならDL版1本、PS PlusのIDが1つあれば2人同時にオンラインプレイできるのは良いね。招待してパーティも組み易いし。
で、オンラインは最初こそエラー頻発オンラインだったものの、今は大丈夫そう。特にサークルという仲間内でできるシステムがあるので固定メンツでやるぶんには全く不自由なくなった。
サークルは基本サークルのメンバー専用だけど、部屋のIDを手打ちするとメンバー意外も入ってこれるのでそれがけっこう嬉しい。

クエストに入るまでのロード時間はやや長め。ただし、拠点で行動しながらプリロードもできるし、クエすと入ってからはロードがないのがかなり良いので特に大きな不満でもない。トイレいったりお茶いれたりしてる。SSDに換装するとだいぶ早いらしい。オンラインで他の人とやる時はタイミング的にどうなるんだろう。

Proとノーマルで違うのは主にはFPS(秒間フレーム:動きの滑らかさ)の多さと安定度っぽい。ウチの場合、2台ならんでるけど明らかにProのほうがヌルヌルしてる。(FPS優先モード)。といってもノーマルでも普通に遊ぶには十分。すごいなぁ。

知らなくて徳したこと、損したこと

キャラクリエイト

このゲームに限ったことじゃないんだけど、キャラクリエイトが細かくできるゲームなのに、何が後からでも変更できて何が変更できないのかその場でアナウンスがない点。どうやら髪、眉の色、ひげ、化粧・ペイント、インナーは変更できるみたいだけど、それが変更できるとこまで行かないと明確にわからない。最初にキャラメイクする時にこの要素は変更できる、この要素は変更できないってきっちり明示して欲しい

あ、名前もね。名前がPSN IDとは別につけれるのにこれもまた変更可能かわからなかった。結局名前はやっぱり変更不可 な模様。なんでここまで悩むかというとあとから変更したくてもやりなおしする気力も時間もオジサンにはないからだよ。最初の一発でキメないといけないからだよ。

MONSTER HUNTER: WORLD
公式Webマニュアル キャラクリエイション

操作設定

操作がわりと細かくカスタマイズできるようになったのは嬉しい。特にアイテムとかのショートカット。デフォルトだとスティックを離したらアイテム使用という誤爆がクソ多い仕様だけれども、ここはスティック押し込みに変更できるのは良い。とても良い。むしろゲーム開始直後真っ先に操作変更したぐらい良い。なぜこっちの操作をデフォルトにしなかったのか。

他にも視点操作感度とか、ボタン操作。いろいろカスタムできる。DOSのころから考えてできること自体はあんまり変わってないものの、操作体系が変わってるし、それを決められた範囲でとはいえかなり柔軟にカスタムできるのでありがたい。

こういう操作変更は意外と見落すので最初に隅々まで試すといいと思う。他にもロックオンの設定とかあるので。ほんと全部ひととおり触ってみたほうがいいと思う。

ちなみにこれとはちょっと異なるけど自動調合も最初からいくつかセットしてあるから、必要ないものは外したほうが良さげ。欲しいアイテムを素のままで欲しいのでオンだと勝手に調合してしまったりもあるので。

アイテムプリセット

アイテムのショートカットが使い易くなってうれしい反面、なんかデフォルトに戻るなーと思ったら倉庫のマイセットにショートカットも保存される仕様だった。目立つようにアナウンスされてないから最初困ってた。

要は、ショートカットを編集した後に倉庫のマイセットをキャラに適用すると、アイテム欄と一緒にショートカットまでキャラに適用されてしまう。なので、ショートカットを設定したら先にまずマイセット登録しないといけない。これはちょっとわかりにくかった。

スリンガー有効利用

スリンガーの各種弾がけっこう有用なのはやってみるとわかってくるけど、楔虫を知ったらびっくり、移動が楽になった。楔虫というなんか下向きの花みたいな奴がスリンガー構えて◯ボタンでひっかけられる。ターザン移動的に使えるのでサクサク移動したい時にはだいぶ助かる。しかも今作は上下移動多いしショートカットできるのでうれしい。

あとは虫系小型モンスターを散らさず(採取できるように)倒したり、松明弾で瘴気消したり。思いの他、やれることは多い。片手剣は火力のなさからあんまり人気がないけど納刀せずにスリンガー打てるので使いこなせればいろいろ化けそう(という期待)。

無料コンテンツもあった

事前にはDLできなかったけど発売以後、ひそかに無料コンテンツが追加されてた。今のところ髪型とジェスチャー。お遊び要素とはいえ、無料で配信されるのはうれしい。

あとは予約特典の護石がマイルームに行かないと取得できないのを知らずにしばらく進んでた。最初にとっておけば良かった。

楽しもう

こんなにゲームが楽しみになるのは去年のFor Honorぶり。For Honorは素材は凄くよかったんだけど、マッチングとかキャラバランスとかいろいろアレでもう全然やってない。楽しかったんだけどな。半ば対戦格闘に近かったから固定の仲間や相手に巡り合えたら良かったのかもだけど、まあいろいろ残念だった。

そういうマイナー珠玉ゲーも良いんだけど、メジャータイトル、国産、みんなやる、っていうのはメンツ集めるのに楽だなぁと思った。そのぶん野良だと民度も下がるとは言え、固定メンツでやってるぶんには関係ないし。

まぁそんなことはいろいろあるけど、ぜーんぶ抜きにして十数年ぶりのモンハンを久々に堪能しようと思う。



これがないと捗らない、僕のErgoDoxファームウェア(late 2017)

  1. 1. ErgoDox
    1. 1.1. ErgoDoxEZ
      1. 1.1.1. Kinesisとの使用感比較
      2. 1.1.2. ErgoDoxのキーカスタム
        1. 1.1.2.1. 基本
        2. 1.1.2.2. 親指まわり
        3. 1.1.2.3. 周りのキー
        4. 1.1.2.4. レイヤー系
  2. 2. Karabiner-element Required

昨年末から続いてる極まりつつある入力環境シリーズ、今回はソフト的な設定ではなく外付けキーボードのハードウェア的な設定の話。普段家でも職場でもMacBookProを使っていて持ち運ばない時はErgoDoxEZという外付けキーボードを使っている。これがいろいろ柔軟に設定できるのでその話。

ErgoDox

ErgoDoxという風変りなキーボードを知っているだろうか?以前エンジニア界隈で話題になったけど、左右セパレート型かつ親指周りに多めにキーを配置したのが基本形のキーボードがある。昔からある最強にして変態キーボードと名高いKinesisと似てる使用感がありつつ、左右セパレートを実現している。そして、ファームウェア(押したキーに対する挙動の設定)をキーボード側に書き替えれるので自分の好みの配置にできるのが素晴しい。

ErgoDoxEZ

ErgoDoxとは半自作キーボードであり、通常はキットで自分ではんだ付けして組み立てる。が、組み立て済みのセットとして、ErgoDoxEZというのもある。こちらはフルセットかつ作りもしっかりしていて、保証もある。逆にキットで自作するほうが色とか本当に自分好みにできる。

そんなわけで僕はEZのほうを使ってるけど、一度トラブルがあったもののすぐに、本当にすぐに交換対応してくれたので保証があって良かったなぁ、と思う。そして備え付けの角度調節用の足も良い感じ。EZでもCherry MX軸の中のいくつかから軸は選べる(僕は赤軸使用。欲を言えばピンク軸が欲しかった。)し、キーキャップはEZの販売サイト以外でも手に入る。

もちろんキットで自作するよりは高く付くものの、保証や出来を考えるとEZも値段的バリューは悪くないと思う。特に台湾から発送なので送料はキットよりも安い(キットはヨーロッパから)。ドル立てとユーロ立ての為替も関係してくるけど。

Kinesisとの使用感比較

ErgoDox以前はKinesisユーザだったので、簡単に思い出せる範囲内で使用感を比較してみよう。

打鍵感は、今のErgoDoxのほうが良いかな。でもKinesisの時はデフォルトの茶軸、今のErgoDoxは好みに合った赤軸を使ってるからな気がする。正直、Kinesisの赤軸と比較しないとなんとも。あとはキーキャップ替えたりO-ring噛ませたりでタッチは変わってくる。

キーキャップはKinesisは専用で選択の余地がないけど、エルゴノミクスデザインが素晴らしい。手の自然な形状に合うような気がする。ErgoDoxはキーキャップの選択の余地があるものの、一つ一つが専用の傾斜があるわけではない。ただし、足などでキーボード全体の傾斜を整えれば結構肉薄できてると思う。

パームレストはErgoDoxは必須だと思う。専用がもちろん良いけど、下で紹介してるような安価な物でも十分。Kinesisは本体がパームレストも兼ねてるし、固いなら付属のパッドをくっつければ十分だと思う。

大きさと置き場所的には断然ErgoDoxのほうが上。セパレート型は慣れると素晴しい。左右の手の間隔を自分で決められるのは思ってる以上にデカい。その証拠に僕の自宅のイスの写真を載せておこう。もはやキーボードは机に置く必要すらない。Kinesisだとこうは行かず机に置かざるを得ない。しかも単体の大きさがそれなりにあるのでいろいろ物理的制約が出てくる。ErgoDoxだとセパレートなので左右の間にMacBookProを挟んで(僕の職場仕様はこのスタイル)も全く問題ない。

キーカスタマイズはErgoDoxのほうがやや上かな。ファームウェアを自分でビルドして書き替えなきゃいけないものの、ビルドはDockerで、書き替えは専用ソフトでやっちゃえば良いので一度やれば変更はそんなに大変じゃない。最初はちょっと戸惑うけど。ただそのぶん、柔軟性は随一。Kinesisのキー設定も必要十分でキーの入れ替えはもちろんマクロ登録もできる。加えてレイヤーにも分けれるのでErgoDoxにもひけを取らない。

ErgoDoxのキーカスタム

ここでようやく本題。とりあえずソースを。

// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
// make clean && make keyboard=ergodox subproject=ez keymap=my-keymap
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"

#define BASE 0 // default layer
#define MOVE 1 // Cursol keys and Mouse Keys
#define CALC 2 // Keys like a calculator
/* period of tapping(ms) */
#ifndef TAPPING_TERM
/* #define TAPPING_TERM 200 */
#define TAPPING_TERM 75
#endif

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | `~ | | '" | 6 | 7 | 8 | 9 | 0 | \| |
* |--------+------+------+------+---------+-------------| |------+------+---------+------+------+------+--------|
* | TAB | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | '" |
* |--------+------+------+------+---------+------| { | | } |------+---------+------+------+------+--------|
* | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ;: | -_ |
* |--------+------+------+------+---------+------| |------+---------+------+------+------+--------|
* | LShift | Z | X | C | V | B | ( | | ) | N | M | , | /? | += |
* `--------+------+------+------+---------+-------------' `-------------+---------+------+------+------+--------'
* | ~L2 | ~L1 | Left | Right|LGui/Eisu| |RGui/Kana| Up | Down | ~L1 | ~L2 |
* `-------------------------------------' `-------------------------------------'
* ,-----------------. ,-----------------.
* |LCtrl | LAlt | | RAlt | RCtrl |
* ,------|--------|--------| |--------+--------+------.
* | | | Tab | | Tab | | |
* | Space| Del |--------| |--------| BKspc |Enter |
* |LShift| LCtrl |LAlt/TAB| |RAlt/ESC| | |
* `------------------------' `------------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_JYEN,
// MO(CALC), MO(MOVE), KC_LEFT, KC_RGHT, MT(MOD_LGUI, KC_LANG2),
MO(CALC), KC_LALT, KC_LEFT, KC_RGHT, KC_LGUI,
KC_LCTL, KC_LALT,
KC_TAB,
// MT(MOD_LSFT, KC_SPC), MT(MOD_LCTL, KC_DEL), MT(MOD_LALT, KC_TAB),
KC_SPC, KC_DEL, KC_LALT,
// right hand
KC_QUOTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_MINS,
KC_RO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_EQL,
// MT(MOD_RGUI, KC_LANG1), KC_UP, KC_DOWN, MO(MOVE), MO(CALC),
KC_RGUI, KC_UP, KC_DOWN, KC_RALT, MO(MOVE),
KC_RALT, KC_RCTL,
KC_TAB,
// MT(MOD_RALT, KC_ESC), KC_BSPC, KC_ENT
KC_RALT, KC_BSPC, KC_ENT
),
/* Keymap 1: Media and mouse keys
*
* ,--------------------------------------------------------. ,--------------------------------------------------.
* | TRANS | F1 | F2 | F3 | F4 | F5 | | | Power| F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+--------+--------+--------+-------------| |------+------+------+------+------+------+--------|
* | TRANS | | | MsUp | | | WhUp | | WhUp | | | UP | | | F12 |
* |--------+------+--------+--------+--------+------| | | |------+------+------+------+------+--------|
* | TRANS |WhLeft| MsLeft | MsDown | MsRght |WhRght|------| |------| | Left | Down | Right| | VolU |
* |--------+------+--------+--------+--------+------|WhDown| |WhDown|------+------+------+------+------+--------|
* | TRANS | | | | | | | | | | | | | | VolD |
* `--------+------+--------+--------+--------+-------------' `-------------+------+------+------+------+--------'
* | TRANS| TRANS| TRANS | TRANS | TRANS | | TRANS| TRANS|TRANS | TRANS| TRANS |
* `----------------------------------------' `------------------------------------'
* ,-------------. ,-------------.
* | TRANS| TRANS| | TRANS| TRANS|
* ,------|------|------| |------+------+------.
* | | | TRANS| | TRANS| | |
* | Lclk | Rclk |------| |------|MsAcl2|MsAcl1|
* | | | WhClk| |MsAcl0| | |
* `--------------------' `--------------------'
*/
// Cursor Keys and Mouse Keys
[MOVE] = KEYMAP(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE,
KC_TRNS, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_WH_D,
KC_TRNS, KC_WH_L, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_R,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_BTN1, KC_BTN2, KC_BTN3,
// right hand
KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_WH_D, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_F12,
KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_VOLU,
KC_WH_U, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_ACL0, KC_ACL2, KC_ACL1
),


/* Keymap 2: Keys like a Culculator
*
* ,---------------------------------------------------. ,--------------------------------------------------.
* | TRANS | | | | | | | | | | 7 | 8 | 9 | | |
* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* | TRANS | | | UP | | |WhDown| |WhDown| | 4 | 5 | 6 | * | / |
* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | TRANS |WhLEFT| LEFT | DOWN | RIGHT|WhRght|------| |------| | 1 | 2 | 3 | + | - |
* |---------+------+------+------+------+------|WhUp | |WhUp |------+------+------+------+------+--------|
* | TRANS | | | | | | | | | | 0 | 0 | . | + | = |
* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | TRANS | TRANS| TRANS| TRANS| TRANS| | TRANS| TRANS| TRANS| TRANS| TRANS |
* `-----------------------------------' `------------------------------------'
* ,-------------. ,-------------.
* | TRANS| TRANS| | TRANS| TRANS|
* ,------|------|------| |------+------+------.
* | | | TRANS| | TRANS| | |
* | TRANS|TRANS |------| |------| TRANS| TRANS|
* | | | TRANS| | TRANS| | |
* `--------------------' `--------------------'
*/
// act like ten keys
[CALC] = KEYMAP(
// left hand
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_WH_D,
KC_TRNS, KC_WH_L, KC_LEFT, KC_DOWN, KC_RIGHT,KC_WH_R,
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_NO, KC_NO,
KC_WH_D, KC_NO, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS,
KC_NO, KC_P1, KC_P2, KC_P3, KC_PLUS, KC_PMNS,
KC_WH_U, KC_NO, KC_P0, KC_PDOT, KC_PEQL, KC_PLUS, KC_PEQL,
KC_TRNS,KC_P0, KC_PDOT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),


};
enum function_id {
LEFT_BRACE, RIGHT_BRACE
};
const uint16_t PROGMEM fn_actions[] = {
// [13] = ACTION_KEY(KC_LPRN), // FN13 - (
// [14] = ACTION_KEY(KC_RPRN) // FN14 - ) >
};
// #define MY_FN13 KC_LPRN
// #define MY_FN14 KC_RPRN
// #define S(MY_FN13) KC_LABK
// #define S(MY_FN14) KC_RABK
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {

};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {

uint8_t layer = biton32(layer_state);

ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}

};

基本

基本はQWERTY配列。外出時などMacBookPro側のキーを叩くこともあるし、自分のじゃないキーボードを触る時に戸惑うのでQWERTYからなるべく外れないように指の互換性をキープ。

親指まわり

ErgoDoxの特徴的な配置の親指周りのキー。ここはKarabiner設定でも紹介するけど、SandS(単体押しがSpace、他のキーと組み合わせるとShift)が大活躍。一番使うところ左にSandSキー、その隣はDelete(Forwerd) OR Ctrl。右はEnterとBackSpace。あとはOptionやTABやESCなど。

ちなみに単体押しと同時押しで違う挙動をさせるのはファームウェアでも設定できるけど僕の場合はKarabinerでやってる。実は厳密な挙動が少し違う。

例えば、単体だとAキー、他のキーと押すとBキーとして動作させたいとする。
ErgoDox DoubleFunctionだと、キーを押しつづけると一定時間後にBキーになる。これだとほぼ同時押しに近いような場合、Bキーとして動作しない。単体の時も一定時間以上の場合はBキーだけが入力される。要はKey-Downの時間が一定以上でKey-Up時に入力されるキーが変わる仕様。もっとわかりやすく言えば、普通に押す時と長押しで変わる、という感じ。

Karabinerの場合、まずBキーとして認識され、一定時間以内に他のキーの入力なく離した場合だけAキーとして認識される。この挙動の場合、同時押ししてもBキーになるし、キーを押したまま組み合わせるキーを迷っていてもBキーのまま。単体で入力する時のKey-downからKey-upの時間はわりと一定に収束するので、その時にだけAキーとして入力されるほうが都合が良い。

すごく細かい話だけど、やってみるとかなり使い勝手が変わってくるので重要。本来ならErgoDox側で設定できるならそちらでやるほうが設定と動くものの整合性というかレイヤー的に理に叶ってるんだけど、この違いはデカいのでしょうがない感。

周りのキー

外側一列と内側一列にあるキー達。左手外側には普通のUSキーボードと同じような感じで特殊キーを配置。右手外側も同じ感じで記号キーを配置。左手内側にはカッコ郡を配置。

具体的に、左手内側上は[,{、右手内側上に],}、左手内側下には独自キー用にFN1を指定、逆にはFN2。そしてこれをKarabinerで(,、),>に割り当てる。これはErgoDoxのファームウェア側だと単押しがすでにShiftと組み合わせる入力の場合、さらにShiftを追加する入力が上手く設定できなかったため。FNキーに設定して一旦逃がしてから、FN1単押しでShift+9Shift+FN1ではShift+,が入力されるように設定して実現させている。

レイヤー系

レイヤーはメイン以外に2つ設定していて、1つは上下左右への矢印キーを直感的にしたものと、マウス操作。もうひとつはテンキー操作。これはKinesisにもあったのでなかなか良い。

ちなみに内側の特殊キーにマウスホイールのエミュレート(つまりスクロール)を割り当ててるけどこれもなかなか良い。

必要ないところはぜんぶ割り当てない設定にしてる。

Karabiner-element Required

シリーズ内別記事でKarabinerカスタマイズを紹介する(してる)けど、上記に書いてあるようにかなり頼ってる部分というか密結合してる。本当はあまりよろしくないとは思いつつも他に手段がない上、使い勝手には替えられないのでしかたなし。

小気味良いSandS入力なしにSKKと親指多用のErgoDoxは実現しえない。

これがないと捗らない、僕のAquaSKKカスタマイズ(late 2017)

  1. 1. AquaSKK
    1. 1.1. そもそもAquaSKKって?
    2. 1.2. AquaSKKの設定について
    3. 1.3. keymap.conf
    4. 1.4. カスタムルール
  2. 2. ついでに

昨年(2017年末)僕がメインで使ってるテキストエディタAtomのカスタマイズ記事を書いたんだけど、付随してAquaSKKの設定も書いておこうと思ってたら年が明けちゃった。
表題は(early 2018)とすべきかもしれないけど、変わってないので関連製を持たせるために(late 2017)で。

AquaSKK

そもそもAquaSKKって?

mac OS用のSKKIME。
これについてはだいぶ前に書いた記事「僕が日本語 IM「SKK」に憑かれた訳」を参照していただければ。

AquaSKKの設定について

AquaSKKはただ単にSKK入力を実現するだけじゃなくて、キーバインドや入力ルールもカスタマイズできる。そのへんを弄くる話。

keymap.conf

キー割り当てのセッティング。これをAtomでのキーバインドと相互に寄せてることで入力に関して割と近い統一性を保つようにしてる。

設定の方法についてはkeymap.confの文法を参照のこと。

今の設定はこんな感じ

###
### keymap.conf
### https://ja.osdn.net/projects/aquaskk/wiki/keymap.conf%E3%81%AE%E6%96%87%E6%B3%95

# ======================================================================
# event section
# ======================================================================

SKK_JMODE ctrl::j||keycode::0x68
SKK_ENTER group::hex::0x03,0x0a,0x0d||ctrl::m
SKK_CANCEL ctrl::g||hex::0x1b
SKK_BACKSPACE hex::0x08||ctrl::h
SKK_DELETE hex::0x7f||ctrl::d
SKK_TAB ctrl::n
# SKK_PASTE ctrl::v
SKK_PING ctrl::l
SKK_UNDO ctrl::/

# ======================================================================
# attribute section(for SKK_CHAR)
# ======================================================================

ToggleKana q
# ToggleJisx0201Kana ctrl::q
SwitchToAscii l||hex::0x1b
# SwitchToJisx0208Latin L

EnterAbbrev /
EnterJapanese Q
NextCompletion hex::0x09
PrevCompletion ctrl::p
NextCandidate hex::0x20||ctrl::f
PrevCandidate x||ctrl::b
RemoveTrigger X

UpperCases group::A-K,M-P,R-Z
Direct group::keycode::0x41,0x43,0x45,0x4b,0x4e,0x51-0x59,0x5b,0x5c,0x5f
InputChars group::hex::0x20-0x7e

CompConversion shift::hex::0x0D||shift::hex::0x20

# ======================================================================
# handle option
# ======================================================================

AlwaysHandled group::keycode::0x66,0x68
PseudoHandled ctrl::0||hex::0x1b

ちょっと解説すると、ベースはAquaSKKのデフォルトを踏襲しつつ、自動補完に関してはEmacsのCtrl+p,nによる上下で送り、戻りをできるようにしつつ、Shift+Enterで補完して変換決定をしてる。これはAtomでやってるAutocompleteとほぼ同様になるように寄せている。

変換候補の送り、戻りもCtrl+b,fで対応するようにしてるけど大概の場合はSpaceを何度か叩くことで問題ないのであまり使ってない。

余談だけどSKKになれると日本語/直接入力の切り変えはSKK側のショートカットで行えるので、USキーボードのようにかなキー、英数キーが無くても全く問題ない。(一応僕はKarabiner-elementsで設定してるけどほとんど使ってない)

カスタムルール

AquaSKKでは日本語入力時の入力に対する出力をカスタムできる設定がある。
設定方法についてはかな変換のカスタマイズをご参照あれ。

簡単に言えば、入力,ひらがな時の出力,カタカナ入力時の出力,半角カナ時の出力を書けば、それぞれ適宜出力されるようになる。これによって、使わない全角入力文字の排除と日本語入力時にも半角英数(記号)の直接入力の両方が実現できる。さらに慣例的にz+何かでよく使われる記号を入力することもできる。これもなかなかありがたい。

ファイルで分割すればチェックボックスでオン/オフが設定できるけど、そもそもオン/オフしたい時がないので1つのファイルに自分用は全部書いて適用してる。注意すべきは文字コードをEUC-JPで保存しなければいけない点。

###
### custom-symbols.rule -- 日本語入力時の記号入力
###

### 日本語で良く使うもの
!,!,!,!
?,?,?,?
~,〜,〜,~
(,(,(,(
),),),)

### FEPベース全角記号
z1,○,○,z1
z!,●,●,z!
z2,▽,▽,z2
z@,▼,▼,z@
z3,△,△,z3
z#,▲,▲,z#
z4,□,□,z4
z$,■,■,z$
z5,◇,◇,z5
z%,◆,◆,z%
z6,☆,☆,z6
z^,★,★,z^
z7,◎,◎,z7
z8,∞,∞,z8
z*,×,×,z*
z+,±,±,z+
z~,≠,≠,z~
z=,≒,≒,z=
z`,※,※,z`
z|,|,|,z|
z\,¥,¥,z\
z{,【,【,z{
z},】,】,z}

### HTML escapes
z&,&,&,z&
zc,©,©,zc
z",",",z"
z',',',z'
z,>,>,z>

### PNBF emacs arrows
zp,↑,↑,zp
zn,↓,↓,zn
zb,←,←,zb
zf,→,→,zf

### コロン/セミコロン
;,;,;,;
:,:,:,:
z;,;,;,z;
z:,:,:,z:

簡単に解説すると、

  • !,?,〜,()についてはちゃんと全角で入力できるようにしてる。
  • Windows用SKK「FEP」で設定されている記号入力をベースにしつつ自分用にカスタマイズしたもの
  • HTMLで使われる記号用エスケープの入力ショートカット
  • Emacsの操作に基づく矢印キー入力(ちなみにHJKLはデフォルトで対応してる)
  • コロン/セミコロンは半角を入力するようにし、zをつけたときだけ全角で入力できるようにする

ついでに

ほとんど関係ない余談だけど、僕はキーボードは変態用として名高いKinesisを経て、今はErgoDox EZを使ってる。US配列なので英数キー、かなキーがないけどAquaSKK使いなので困ったことがない。

2018年を始める

  1. 1. 2017年を振りかえって
    1. 1.1. エンジニアとして禄を食むようになった
    2. 1.2. Pentazemin というアプリをリリースした
    3. 1.3. 結婚式した
    4. 1.4. ゲームにいそしむ
    5. 1.5. ジム通い
  2. 2. 2018年をどう生きるか
    1. 2.1. 謙虚に生きる
    2. 2.2. 胸を張って生きる(やや物理的に)
    3. 2.3. 時間をもっと上手く使いこなすようになる

新年、あけましておめでとうございます。また今年も細々ながらもブログを書いていこうと思います。
そんなこんなでKPT的な振りかえりと今年をどうするか的な話。

2017年を振りかえって

エンジニアとして禄を食むようになった

いちばんの変化は2018年の頭に職業Webエンジニアになりました。いろんな職についてきて周り道してきたけど今は楽しくやれてる。やっぱり「自分には無理そう」みたいな思い込みは良くないな、とつくづく思った。

とりあえずまず1年、なんとかなった。自分の技術力的な要因で不安と恐怖は拭えなかったけどなんとかなった。というよりむしろ技術力がネックでそれ以外のところは今まで他のことやってきたからこそ得たモノが力になってたのを実感できた。だから悩みがシンプルでわりと楽しくやってこれた。2018年も粛々とやっていきたい。

Pentazemin というアプリをリリースした

少し技術力もついてきたのでオレオレアプリでToDoマネジメント的なポモドーロタイマー的なアプリを作った。作ったこともそうだけど、ちゃんと紹介ページも作って、一般にリリースという作業まで行なったことによって得れた知見が大きかった。

年末、なんか紹介されたりしてたのでやっぱり作りっぱなしじゃなくて、ブログに書くとかQiitaみたいなのに書く、とかじゃまだ弱くてちゃんとした紹介ページ、しかも英語、日本語の両方ってのはけっこう効果として大きいっぽい。2018年はこれをもっと育てていきたい。

結婚式した

すごく最近、12月の話だけど結婚式をした。入籍から早2年半。だいぶ時間がたってしまったものの結婚式した。一つの良いきっかけになった。もちろん圧縮しまくった式と言え、出費はけっして安くはなかったんだけど、やって良かった。

ゲームにいそしむ

ボドゲをする集まりを定期的に開催するようになった。旅とかする前にゲームする会を3ヶ月に一度やってたんだけど、それのボドゲ版というか。都合がつかないことはあるけどそれでも上手く回ってると思う。飲みながら喋りながらゲームする時間はすごく良い。趣味の集まりってのはすごく精神衛生的に良い。

それとは別に家で一人や妻さんとゲームしたり。もうハードはPS4一択。Switchに興味がないわけじゃないけど、二つもハードがあっても今は遊びつくせないのでPS4だけにしてる。

年末のゲムマでボドゲとボドゲグッズをたくさんかってしまったし、PS4もまだまだ面白そうなのたくさんでるのでこれからも精神衛生的にゲームは積極的にやっていく。

ジム通い

家トレからジムトレに移行した。昔と同じようなメニューでやってる。体つきは少しづつ戻りつつある。ジムでみっちりやるっていうのは肉体的な効果はもちろんのこと、運動やテストステロンの増加による精神的な作用がかなり良い。本当はジムじゃなくて稽古通いたいんだけどね。

2018年をどう生きるか

謙虚に生きる

去年は、特に職場で自分のスキルがないことからの恐怖から、自分の事をオープンにするのに必死だった。技術で勝負できないから技術以外の面で「僕は使える人間ですよ」とアピールするのに必死だった。

割とそれが功を奏してそれなりな評価は(同僚から)得られたような気がする。ただ、逆にそれが過ぎるとうっとおしい奴になってしまうと思うし、俺が俺が、というのは僕自身が好きじゃないので今年は謙虚に生きようと思う。

エンジニア35歳限界説を真っ向から否定するかのようなエンジニア35歳から人生。正直言えば年齢に対する実力が足りないことは実感してるし、恐怖でしかたない。だけどジタバタしてもしかたないので粛々と経験値を稼ぎレベルアップに勤しむだけ。つまりレベルアップ方法が分からなかった今までに比べればやることがはっきりしてるので気楽ではある。

胸を張って生きる(やや物理的に)

以前にも増して画面に向かい合う時間が増加したので眼精疲労や肩の疲れ、背中の疲れが増した。それにもともと猫背気味なのが相まってるので、物理的に胸を張り気味で居ることを心掛けたい。

同時に精神的にも胸を張っていきたい。生きたい。

時間をもっと上手く使いこなすようになる

何かに注力するとしたら今年はこれ。前からもふんわりと思ってはいたけど今年こそは本腰入れてやろうと思う。

無為な時間を減らす。有意義にすごす。行動には時間の余裕を持つ。具体的な施策はまだまだこれからだけど本気で取りくむことにした。

テキパキとやる、素早く動く、とかそういう感じではなく、静かに着実に処理していく、という感じ。ガっとやってダラーという感じではなく、力強く前に進むイメージというか。結果的に高効率な動き方というか。

上手く説明できないけど「時間のつかいかた」というものに注力してみようと思ってる。

直したいこと、新たにやりたいことは無数にあるけどまず第一に注力すべきは時間を使いこなすことだな、と思った。そんなこんなで本年もよろしくどうぞ。