Slide 1

Slide 1 text

ΩʔϘʔυΛΧελϜ͠ ͯϓϩάϥϛϯά؀ڥΛ ྑͨ͘͠࿩ builderscon tokyo 2018 @ma2ge

Slide 2

Slide 2 text

PowerAssertEx ⭐ 160+ github.com/ma2gedev/power_assert_ex

Slide 3

Slide 3 text

! Elixir

Slide 4

Slide 4 text

|> ύΠϓԋࢉࢠ https://elixir-lang.org/getting-started/enumerables-and-streams.html#the-pipe-operator

Slide 5

Slide 5 text

ύΠϓԋࢉࢠͷ࢖ΘΕํ # without pipe Enum.sum(Enum.map(1..100_000, &(&1 * 3))) # with pipe 1..100_000 |> Enum.map(&(&1 * 3)) |> Enum.sum

Slide 6

Slide 6 text

͔͍͍ͬ͜ɻɻɻ͕ͩ |> ͸࠷ߴʹଧͪʹ͍͘

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

3

Slide 9

Slide 9 text

3 to 1

Slide 10

Slide 10 text

!

Slide 11

Slide 11 text

QMK https://github.com/qmk/qmk_firmware

Slide 12

Slide 12 text

ࣄલʹඞཁͳ෺ Firmware Λॻ͖ࠐΊΔΩʔϘʔυ

Slide 13

Slide 13 text

۩ମతʹ͸ ErgoDox EZ, Infinity ErgoDox, Planck, Helix ͳͲͷࣗ࡞Ω ʔϘʔυք۾ͰΑ͘ݟΔΩʔϘʔυ https://github.com/qmk/qmk_firmware/blob/master/keyboards/readme.md

Slide 14

Slide 14 text

! ͜ΕΒΛপ1ʹམͪͳ͍Α͏ʹؾ Λ͚ͭͭͭखʹೖΕ·͢(ࣗݾ੹೚) 1 ΩʔΩϟοϓ͔Β࢝·ΓɺΩʔεΠον΍έʔεΛม͑ͨ͘ͳͬͨΓɺଞͷΩʔϘʔυ΋ཉ͘͠ͳͬͨΓɻ͔ͳ ΓͷপͰ͢ɻ

Slide 15

Slide 15 text

QMK ͰಠࣗΩʔϚοϓ࡞Δ४උ # fork ͨ͠΋ͷΛ clone ͢Δͷ͕ΦεεϝͰ͢ $ git clone [email protected]:qmk/qmk_firmware.git $ cd qmk_firmware # ରԠ͢ΔΩʔϘʔυͷ keymap.c Λมߋ͢Δײ͡ɻ # ҎԼ͸ Infinity ErgoDox ͷྫ $ cp -r keyboards/ergodox_infinity/keymaps/{default,your_own} $ vi keyboards/ergodox_infinity/keymaps/your_own/keymap.c

Slide 16

Slide 16 text

QMK Λ࢖͏͜ͱͰΩʔϚοϓม͑ΒΕΔ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | Del | | |> | 6 | 7 | 8 | 9 | 0 | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | Q | W | E | R | T | ` | | ' | Y | U | I | O | P | BkSp | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | LCtrl | A | S | D | F | G |------| |------| H | J | K | L |; / L1| Enter | * |--------+------+------+------+------+------| Hyper| | B |------+------+------+------+------+--------| * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |Grv/L1| Meh |AltShf| LALT | LGui| | \ | = | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | Up | Down | | Left | Right | * ,------|------|------| |------+--------+------. * | | | Home | | PgUp | | | * | Space| LANG1|------| |------| LANG2 |Enter | * | | | End | | PgDn | | /L2 | * `--------------------' `----------------------' */ https://github.com/ma2gedev/qmk_firmware/blob/ma2gedev/keyboards/ergodox/keymaps/ma2gedev/keymap.c

Slide 17

Slide 17 text

͞ΒʹϚΫϩͷػೳ͕͋Γ·͢ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case 0: if (record->event.pressed) { SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); } break; /* লུ */ } return MACRO_NONE; };

Slide 18

Slide 18 text

keycode ͷ୅ΘΓʹϚΫϩΛݺͼग़͢ /* ௨ৗΩʔίʔυΛॻ͘ͱ͜Ζ΁ */ KEYMAP(..., KC_1, ...) /* action_get_macro Λݺͼग़ͨ͢Ίͷ M ϚΫϩΛઃఆ͢Δ */ KEYMAP(..., M(0), ...)

Slide 19

Slide 19 text

ϚΫϩΛ௥Ճ͢Δ͜ͱͰύΠϓԋࢉࢠΛ ࣮ݱͯ͠Έ·͠ΐ͏ /* @action_get_macro ʹҎԼΛ௥Ճ */ case 2: if (record->event.pressed) { // For Elixir pipe operator SEND_STRING ("|>"); } break; /* keymaps ͷ഑ྻͰΧελϚΠζ͍ͨ͠ΩʔͷϚοϐϯάΛҎԼʹมߋ */ KEYMAP(..., M(2), ...)

Slide 20

Slide 20 text

ϑΝʔϜ΢ΣΞͷॻ͖ࠐΈํ๏ # ҎԼͷΩʔϘʔυ͝ͱͷσΟϨΫτϦʹ readme.md ͕͍͍ͩͨೖ͍ͬͯΔͷͰͦΕݟΔ https://github.com/qmk/qmk_firmware/tree/master/keyboards/ # Infinity ErgoDox ͷ৔߹ https://github.com/qmk/qmk_firmware/blob/master/keyboards/ergodox_infinity/readme.md

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

!!!

Slide 23

Slide 23 text

3 to 1

Slide 24

Slide 24 text

twitter: @ma2ge M3, Inc. / ΤϜεϦʔגࣜձࣾ https://www.m3tech.blog