しっぽをくるん

ぺらねこのにっき

月に住む

私たちは月の坑道に住んでいる。月は軽すぎてめぼしい資源はない。そのかわり、軌道エレベータには近い。大きな貨物船は、月に資材を置いて、次の旅に出ることが多い。

地球向け荷物の積替え港。それが月に乞われた役割であり、そのために整備されてきた。

私たちが住んでいるのは、月の内側に掘られた採掘用の坑道ではない。これらのトンネルもメッシュ状に広がっているが、我々の住む幹線は月の赤道に平行に作られている。

この大きなトンネルには、1000人ほどが暮らすコロニーがいくつか走行しているのだ。月の中を高速で走り続けることで、この乗り物はほぼ1Gの擬似重力を生む。

私たちは月の真ん中に頭を向けて、この巨大な乗り物の中で生まれ育ってきた。

地表に設置された太陽光電化パネルによる安定した発電により、コロニーのなかでは、酸素や水もほとんど自由につかえる。

私たちの親世代は、ここで初めての子をなし、私たちはその次の世代を担うことが期待されている。おそらく、月から地球に降りない最初の世代になるのだろう。なぜなら、地球には魂の置き場がないから。

私たちの魂の置き場は、このコロニーなのだ。

「悪い魔法使い」にならないために。

人間と人間をが関わると、社会や政治が始まるのですが、早い段階で「悪い魔法高い」という存在が現れます。

 

「悪い魔法使い」の定義は、誰かに災いが降りかかるとか、チャレンジが失敗するとか予言する人間。これだけです。

多くの場合「悪い魔法使い」は、そのコミュニティで知恵や権力のある人間だったりします。多くの場合「悪い魔法使い」はコミュニティの存続を願っていますし、何かにチャレンジする人に対して経験量などでアドバンテージを持っています。

なので、新しいことにチャレンジする人に向かって、「うまくいかないと思うよ」とか、「それ失敗するよ」と予言してしまうわけです。

もうちょっとEvilなら、コミュニティを存続させるための障害になると感じたことについて、成功の見込みが高くても「失敗するよ」と予言するかも知れません。

 

このとき「悪い魔法使い」は自分の判断に自信を持っています。チャレンジャーは「悪い魔法使い」が把握できない不可視の下準備を積んでいるのですが、「悪い魔法使い」は下準備のことを知りません。自分の過去の体験やチャレンジャーの過去の実績、業界の動向など、「悪い魔法使い」の直感で判断しているだけなのです。

 

物事を行うとき、ほとんどの事には、なんらかのチャレンジが付いて回ります。

「悪い魔法使い」は、色々な理由をつけてチャレンジャーの勇気を挫き、チャレンジする前に諦めさせます。

これは、コミュニティの成長を阻害する要因になります。動きのないコミュニティはそれだけで価値が下がります。構成員がどんどん老化するわけですから、仕方のないことなのですが。

 

このように、魔法使いが善意ベースで判断していても、簡単に「悪の魔法使い」になってしまうのが恐ろしさの本質なのです。

 

さて、本稿は「悪の魔法使い」にならないために。と題されています。

「悪の魔法使い」は、チャレンジャーの勇気を挫いてきまうのが問題なのです。しかし、本来持っている知識や経験を、チャレンジャーのために使えば、一転して「良い魔法使い」になり得ます。

「良い魔法使い」であろうとすれば、魔法使いの持っている知識や知恵は、チャレンジャーへの助言や応援として表出するでしょう。その時に、一緒に手を動かすことが、「良い魔法使い」として慕われる人の特徴です。

 

魔法使いが直感的に無理のあると判断しても、自分が過去に体験した失敗とおなじパターンに見えても、過去の事例をチャレンジャーと共有し、成功させる方法を一緒に探すことで、魔法使いとチャレンジャーのコンビは機能し、コミュニティは動き始めます。

 

自分が「悪の魔法使い」になっていないか、時々自分の行いを省みるのは重要です。いかに自分に影響力がないと思っていても、ある分野ではそうでもなかったりするからです。

 

そしてできれば「良い魔法使い」になるために、同じ内容でもより優しく、易しい言葉を使いたいなあと思っています。

言葉こそが魔法であるがゆえに。

 

いわゆる退職エントリです

冒険企画局を辞し、フリーランスとなりました。

新しい連絡先は、下記のメールアドレスになります。

peraneko@peraneko.com

これまで、写真撮影・執筆・イベント企画・イベントの運営などをやってきましたが、今後は自作キーボードキットの製作販売などを加えて頑張っていきます。

どうぞよろしくお願い申し上げます。

TONE スペシャルギャングスタエディションの組み立て方です

天下一キーボードわいわい会Vol.2で先行販売した名刺サイズマクロキーボードTONEの組立手順です。

 

必要なもの

ロータリーエンコーダ ALPS EC-12シリーズ 1つ

 EC12シリーズ|インクリメンタルタイプエンコーダ|アルプスアルパイン

 手に入れやすいのはこちら。

 http://akizukidenshi.com/catalog/g/gP-06357/

 EC12E2420801がおすすめっぽい。

 

キースイッチ 

 MX互換 トッププレートがないため5ピンを推奨

ProMicro+コンスル

 基板の両面にパーツをはんだ付けするのでコンスルー必須です。

リセットスイッチ

 付属しています。

M2 6mmのスペーサー 5個

 ギリの高さは6mmです。

M2 3mmの皿ネジ 5個

 ボトムプレートが生み出せればあと5こですね。

 

手順

1 ProMicroにコンスルーを取り付けておきます。

2 基板(ウラ面)にリセットスイッチをはんだ付けします。

3 基板(おもて面)にロータリーエンコーダとキースイッチを取り付けます。

  ProMicroと干渉する2キーについては、キースイッチの足とケーブルを基板の高さに切ってからハンダ付けしてください。

 4 ProMicroを取り付けます。

  向きはこっちむき

f:id:peraneko:20190505000613j:plain

 

ファームウェアは下記URLからDLしてください。

www.dropbox.com

.hexファイルについては、Adobe Photoshop Lightroom用のマクロが書き込まれています。

  [0] = LAYOUT(
  LCTL(LSFT(KC_E)), LSFT(KC_TAB), KC_TAB, KC_0,\
  KC_LSFT, LCTL(KC_LEFT), LCTL(KC_RIGHT), LCTL(KC_Z),\
  KC_UP, KC_DOWN\
),

上段左から
CTRL+SHIFT+E(書き出し)
SHIFT+TAB(編集項目を上に移動)
TAB(編集項目を下に移動)
0(数字の0)

下段左から
左SHIFT
CTRL+←(前画像)
CTRL+→(次画像)
CTRL+Z(UNDO)

 ロータリーエンコーダー

下(反転させたい場合は上下をいれかえてください)

 

カスタマイズ

¥qmk_firmware-master¥keyboardsにtoneフォルダを作成し、ダウンロードしたZIPファイルを解凍して保存してください。

他のキーボード同様にQMKファームウェアで動作していますので、通常の変更であれば、keymap.c のみの書き換えで使用できます。
コンパイルして.hexファイルを作成し、利用してください。

 

hexファイルの書き込みには、qmk_toolboxの利用をおすすめします。

 

 

QMKでロータリーエンコーダを利用する手順がわからない件が解決した件!!

すいません。

初っ端からアレですが自作キーボードのファームウエアを自力で書く記事です。

 

QMKの説明は省きます。

今回作成するキーボードの名前はTONE(トーンor利根)です。

 

本題です。

キーボードの論理レイアウトなのですが、こんなかんじです。

tone.hから引用

#define LAYOUT( \
    K00,K01,K02,K03,K04,K05,K06,K07,K08,K09 \
) \
{ \
    { K00,K01,K02,K03,K04,K05,K06,K07,K08,K09 }, \
}


上段 

 K00,K01,K02,K03,

下段

 K04,K05,K06,K07,

ロータリーエンコーダ

 K08,K09

定義したつもりです。

 

f:id:peraneko:20190428213931j:plain

keymap.cには下記のように定義しており、キースイッチは正常に入力できています。

const uint16_t PROGMEM keymaps[MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT(
    KC_A, KC_B, KC_C, KC_B,\
    KC_E, KC_F, KC_G, KC_H,\
    KC_0, KC_1 \
  ),
};

 

 

問題点

ロータリーエンコーダを回すと、KC_0, KC_1 が入力される。
KC_UP,KC_DOWNが入力したいのにできたりできなかったりする。無念。悲しい。

  

QMK Firmware
コレがオフィシャルのロータリーエンコーダを使う場合の説明なんですけど、この通りにしているつもりが、動かないのです。

 

ロータリーエンコーダを使うために変更した場所
rules.mkに下記の記述を追加

#define ENCODER_RESOLUTION 4
ENCODER_ENABLE = yes 

 

config.hにはこのように記述しています。

#define MATRIX_ROW_PINS { NO_PIN }
#define MATRIX_COL_PINS { F6,F7,B1,B3,D4,C6,D7,E6,B4,B5 }
/*#define UNUSED_PINS*/

/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW

#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B4 }
#define ENCODERS_PAD_B { B5 }

 

B4とB5がロータリーエンコーダにつながっているのがわかるかと思います。

f:id:peraneko:20190428221318p:plain

f:id:peraneko:20190428221525p:plain

基板上も問題ないはず……。

 

 

keymap.cは下記のとおりです。

const uint16_t PROGMEM keymaps[MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT(
    KC_A, KC_B, KC_C, KC_B,\
    KC_E, KC_F, KC_G, KC_H,\
    KC_0, KC_1 \
  ),
};

void encoder_update_user(uint16_t index, bool clockwise) {
  if (index == 0) {
    if (clockwise) {
      tap_code(KC_UP);
    } else {
      tap_code(KC_DOWN);
    }
  }
  else if (index == 1){
    if (clockwise) {
      tap_code(KC_UP); 
    } else
    {
      tap_code(KC_DOWN);
    }
  }
}

 indexの値は(暗黙に)0しか入らないと思うのですが、BDN9のkeymap.c参照した結果今現在はこう書いています。
indexが漏れた場合の処理も書いてないので不安なのですが、BDN9は動いてるしとりあえず動いているものを尊重する構えでこうなっています。

 

下記のように簡略化しても(乂'ω')でした。せつない。

void encoder_update_user(uint16_t index, bool clockwise) {
  if (clockwise) {
    tap_code(KC_UP);
  } else {
    tap_code(KC_DOWN);
  }
}

 

どなたか、ロータリエンコーダーを実装した方がいらっしゃいましたら、問題点や確認するべき点を教えていただけませんでしょうか。

教えていただいて、期待通りの挙動をするようになりました。
原因はconfig.hのMATRIX_COL_PINSと、ロータリーエンコーダのピンが二重に設定されていたためでした。
赤線+訂正線の部分をコメントアウトすることで正常に動きます。

 

みなさま、ご指摘ありがとうございました。


それはそれとして、DIRECT_PINSで設定したいけど何故かうまく行かぬので続きもあります。

とりあえず自作基板で自作キーボードうごいたから今日は寝る! もうだめだー。