ãã¼ãè²·ãéãã¦ãã¼ãã¼ã (Ergodox) çµã¿ç«ã¦ãã®ããã£ã¡ã楽ãã話
å æ Ergodox ãçµã¿ç«ã¦ãã®ã ãã©ï¼ããªã³ãåºæ¿ãçºæ³¨ãããã¯ãã ä»ããããã¨ï¼ãªããªã楽ããä½é¨ã ã£ãã®ã§è¨é²ãæ®ããã¨æãï¼
å ã«ã§ãããããã¾ã¼æ¸ãã¨ãã¨ï¼èªä½ãã¼ãã¼ãã®ã¬ãå¢ãªæ¹ã ã¯åºæ¿è¨è¨ããå§ã¾ãã£ã½ã*1ããï¼åããã£ãããã¼ãè²·ãéãã¦çµã¿ç«ã¦ããã¨ããã ã¼ãã¯ãã©ã¢ã説ææ¸éãã«ä½ã£ãã ãã§ï¼ã¨ã³ã¸ã§ã¤å¢ã¬ãã«ã«ãªãã¨æãï¼æè¡çã«ããããã¨ããã£ã¦ããããã§ã¯ãªãï¼ããããç解é ããä¸ã§ãèªã¿ãã ããï¼
ä¹ ã ã«ããã°æ¸ããã§æ¯è¨æ¬²ãæã¦ä½ãï¼ã¯ã½é·ãï¼ãããç¡é§è©±ãå ¥ããã©ã¾ããããï¼
Ergodox ã£ã¦ãªãããããª
Ergodox ã«ã¤ãã¦ã®è©³ãã説æã¯çããï¼åã 2016 å¹´é ããæç¨ãã¦ããï¼ãªã¼ãã³ã½ã¼ã¹ã®ã»ãã¼ã¬ãå¼ã¡ã«ãã«ã«ãã¼ãã¼ãã§ããï¼
ãã¼ãã¼ãããªã¼ãã³ã½ã¼ã¹ã¨ã¯ã©ããããã¨ãã¨è¨ãã¨ï¼ãã¼ãã¼ãã®ããªã³ãåºæ¿ (PCB) ã GitHub ã«å ¬éããã¦ãããï¼ããã¥ã¢ã«*2ããã¨ã«æå¿ãçµã¿ç«ã¦æé ããããã«ä¸ãã¦ãããï¼ãã¼ãã¼ããã¡ã¼ã ã¦ã§ã¢ã¨ãã¦ããããªã¼ãã³ã½ã¼ã¹ã® qmk_firmware ãæ¡ç¨ãã¦ãããï¼ã¿ãããªï¼PCB ã«ãã¼ã¹ã¤ãããåã諸ã ã®ãã¼ããã¯ãã ä»ãã§æ¥ç¶ãã¦ãããã¨ã«ãªãã®ã ãï¼å¿ è¦ãªãã¼ãã¯ç§èåãé販ã§æãããã¨ãã§ãã¦ï¼ãã£ã¡ãã£ã¡æ¢ãåãã®ã RPG ã¿ããã§ããããããï¼
ãã¡ã¼ã ã¦ã§ã¢ã¯ C è¨èªã§æ¸ããã¦ãã¦ï¼èªå好ã¿ã«ãã¼ã¬ã¤ã¢ã¦ããã«ã¹ã¿ãã¤ãºãããã¨ãåºæ¥ã*3ï¼åã®ãã¼ã¬ã¤ã¢ã¦ã㯠qmk_firmware ã fork ãã¦èªåã®ã¬ãã¸ããªã«ç½®ãã¦ããã®ã§ããã£ããè¦ã¦ã¿ã¦ãã ããï¼QWERTY ãã¼ã¹ãªã®ã§åºæ¬ããã¼ã ãã©ï¼
è¦ãã¨ãããã¼ã®æ°ãå¤ãã¦ï¼çæ 38 ãã¼ x 2 = 76 ãã¼ï¼ï¼ç¹ã«è¦ªæå¨ããå å®ãã¦ããã®ãå¬ããï¼åºæ¬çã« US ãã¼ãã¼ãã¬ã¤ã¢ã¦ãã§ä½¿ã£ã¦ãããï¼ãã¡ãããããããã¼ãã¼ãã¨åæ§ã« Karabiner-Elements ã¨çµã¿åããããã¨ã§ Mac ç´æ£æ¥æ¬èªãã¼ãã¼ãã®ããã«å·¦å³è¦ªæã§è±æ°/ããªåãæ¿ããå®ç¾ãããªã©ã®æ¡å¼µãå¯è½ï¼ãããã qmk_firmware ä¸ã®å®ç¾©ã ãã§ãããã¨è²ã ã§ãã¦ã³ã£ããããï¼ãã¨ãã°é³éããã¦ã¹æä½ãç¹å®ãã¼çµã¿åããã«å²ãå½ã¦ããã¨ãã§ãããï¼å㯠Copy/Cut/Paste ã Ctrl+F1 (Mac ã®ã¢ããªã±ã¼ã·ã§ã³ã¦ã£ã³ãã¦åãæ¿ã) ã親æã¯ã³ã¹ããã¼ã¯ã§çºè¡ã§ããããã«ãã¦ããï¼
ããã« Layer ãåãæ¿ãããã¨ã§ã¬ã¤ã¢ã¦ããããã£ã¨å¤ãããã¨ãåºæ¥ãï¼å㯠Layer #2 ã¯ã¡ã¼ã«ãæµãèªã¿ãã¦åé¤ãã©ã°ç«ã¦çã®ã¢ã¯ã·ã§ã³ãçæã§ã§ããã¢ã¼ãï¼Layer #3 ã¯æ°å¤ã¨è¨å·ã ãã®ãã³ãã¼ç¶æ ã«ãã¦ããï¼
ãã å å®ãããã¦ï¼æ£ç´äºæ®µç®ã®ãã¼ã親æ島ï¼å¤æ®µã¬ã¤ã¤ã¼ã 100% æ´»ç¨ãããã¦ãªãã¨æãï¼ãªããé¢ç½ãã¢ã¤ãã£ã¢ãã£ããæãã¦ãã ããï¼è©³ãã説æã¯çãã¨ãè¨ããªããå²ã¨èªã£ã¦ãã¾ã£ãï¼
Ergodox çµã¿ç«ã¦ã«è³ãçµç·¯
ãã¦ï¼Ergodox ã¯ãªã¼ãã³ã½ã¼ã¹...ã ãã©ï¼åã¯è»å¼±è ãªã®ã§ï¼Ergodox EZ ã®çµã¿ç«ã¦æ¸ãã¼ã¸ã§ã³ãè³¼å ¥ãã¦ä¸å¹´åã»ã©ä½¿ã£ã¦ããï¼ä¸ä¸åããããããã©æ¯æ¥ä»äºã«éã³ã«æ´»ç¨ãã¦ããããå®å ¨ã«æ¸ä¾¡åå´æ¸ã§ããï¼
ãããæ¨å¹´ï¼ã¤ãã«å£ããï¼ã¨ããããã¼ãããã¤ããã£ã¿ãªã³ã°ãèµ·ããããã«ãªã£ã¦ãã¦ï¼åãæ§é ãããç解ããªãã¾ã¾ï¼ã¯ãã ä»ãããããã¼ãå¤ããã¨åºæ¿ãç¡é§ã«ç¼ãã¦åããªããã¦ãã¾ã£ãã®ã§ç´ç¶ããèªçã§ããã¨ãè¨ããï¼
ã§ï¼è»å¼±è ãªã®ã§æ¬¡ã® Ergodox EZ ãè³¼å ¥ããï¼æ§ Ergodox EZ ã¯åºæ¿ã ãããã¡ã«ãªã£ã¦ããã¨ãäºæ³ã§ããã®ã§ï¼è³¼å ¥ã¤ãã§ã« Ergodox EZ 販売å ã§ãã ZSA Technology Labs ã«ãåºæ¿ã ãã£ã¦å£²ã£ã¦ãªãã®ãã¨èãã¦ã¿ãï¼åºæ¿ã ãè²·ã£ã¦å¾©æ´»ãããã°ï¼èªå® ã¨ä¼ç¤¾ï¼ä¸¡æ¹ã« Ergodox ã®ããçæ´»ãéããããã ï¼ããã¨ï¼
è¿ä¿¡ã§ CEO Erez ãããç´ã ã«ããªã¼ãã³ã½ã¼ã¹ã ããåºæ¿ manufacture ããã°ããããã¨ã¡ã¼ã«ãããã®ã§ã確ãã«ï¼ãããããï¼ãã¨ãè¿äºï¼Best of luck! :) ã¨ã®ãã¨ï¼å©çã«ãªããªãã®ã«è¦ªèº«ã«ãªã£ã¦ããã¦ããããï¼
ãªãã»ã©è£½é æ¥è ã«åºæ¿ãçºæ³¨ãã¦æ°ãããã¤ãå ¥æãã¤ã¤ï¼æ§ Ergodox EZ ãå解ãã¦ã±ã¼ãã«ãã±ã¼ã¹ãæµç¨ããã°ããã ããï¼ä»ã®äººã®çµã¿ç«ã¦ããã°ãèªãã§ã±ã¼ã¹çµæ§é«ããªã¨æã£ãè¨æ¶ãããï¼ä»ã®é»åé¨åã¯ã©ãã ããï¼ çæ³çã«ã¯åºæ¿ã ãæ°ãããã¦æ¢åã®ãã¼ãã¯æ§ Ergodox EZ ãã desoldering ãã¦ååããã°åããªãããªãã¨æãï¼ã§ããããã«ã¯ãã ä»ããåãå¤ããã¹ãã«ã¯ç¡ããï¼ãã£ããã ããé»åé¨åã¯æ°ããè²·ãéãã¦ä½ã£ã¦ã¿ããï¼
ããããå§ã¾ãã§ããï¼
åºæ¿ã®çºæ³¨
ã¾ãã¯ä½ã¯ã¨ããã PCB ã®çºæ³¨ï¼èª¿ã¹ãã¨ããï¼Ergodox ã® PCB å ãã¼ã¿ã¯ç¢ºãã« GitHub ä¸ã«ãããï¼ã©ãããã¬ã¼ãã¼ãã¡ã¤ã«ã¨ããå½¢å¼ã§çºæ³¨ããªããã°ãªããªããããï¼ããã§ï¼KiCad ããã¦ã³ãã¼ãã㦠Ergodox PCB ãã¡ã¤ã«ãéãï¼æåæ··ä¹±ãããã ãã©ï¼é¢ç½ããã¨ã« Ergodox 㯠1 æã®åºæ¿ã®ä¸¡é¢ãããããå·¦æç¨ã¨å³æç¨ã«ãªã£ã¦ããï¼ã ããï¼2 æåãåºæ¿ãçºæ³¨ããã°ãã*4ï¼ã»ãã¼ã¬ãå¼ãã¼ãã¼ãã ã¨ããããã®ããªï¼
ã§ï¼ãããã¬ã¼ãã¼ãã¡ã¤ã«å½¢å¼ã§åºåããï¼åè: ã¬ã¼ãã¼ãã¡ã¤ã«ãåºåããæ¹æ³ â Feedback & Ideas for seeedï¼ï¼ããã§ããï¼
次ã«ï¼çºæ³¨ï¼é¸ãã 製é æ¥è ã¯ï¼Speeed ã¨ããã¨ãããéå¶ãã Fusion PCB ãªãåºæ¿è£½é ãµã¼ãã¹ï¼å人å©ç¨ã®å°è¦æ¨¡ã¹ã±ã¼ã«ã§åºæ¿ä½ã£ã¦ããããµã¼ãã¹ãã£ããããã£ã½ãï¼
ããã¾ããã¬ã¼ãã¼ãã¡ã¤ã«ãããããããããã©... ã©ã渡ãã°ãããã§ãã (´ã»Ïã»ï½)ãã¨ã¡ã¼ã«ã§æ å½è ã«æ³£ãä»ããªããæãã¦é ãï¼ç¡äºçºæ³¨å®äºï¼æ å½è ã¯ä¸å½ã®æ¹ã ã£ãã¿ããï¼ä¸çã¯ããããï¼
以ä¸ã®ãã¡ã¤ã«ã zip ã«ã¾ã¨ã㦠web ããåºæ¿è£½ä½ãä¾é ¼ï¼éæè¾¼ã¿ã§ $73.2 (=~ Â¥7900) ãããããªãï¼
人çããã£ã¦ããã¨ï¼ç¢ºãä¸é±éãããã§ä¸å½ããåºæ¿ãå±ãï¼çµæ§éãï¼
ã¡ãªã¿ã«çºæ³¨å¾ï¼å®ã¯ã¬ã¼ãã¼ãã¡ã¤ã«ã GitHub ã¬ãã¸ããªã«åå¨ãããã¨ã«æ°ãä»ããã®ã§ KiCad ã®ãã ãã¯å®å ¨ã«ç¡é§è¶³ã§ãã£ãï¼ã§ãã¾ãåºæ¿è¨è¨ CAD ããããåãã¨ãããçµé¨ã ããï¼KiCad åè·¯å³ã®ãããã¯ã¼ã¯é ç·æ å ±ãä¸é¨ S å¼? ã§æ¸ããã¦ããããã§è³ã®é ç·ããã°ãï¼
ãªãæ¬ä»¶ã¯ç·ãã¦ãã®ãããªç¡é§è¶³ã«ããçµé¨ãç©ãã¦æé«ã ã£ãï¼ä»äºã ã¨ï¼ãªããªãç¥è欲ããªãã³ã®ç¡é§ãªé åãã楽ãããªãï¼
ãã¼ããæãã
Ergodox åºæ¿ãã²ããããã®ã§ï¼ãã®ä¸ã«ã¯ãã ä»ããã¦ãããã¼ããæããï¼å ¬å¼ãµã¤ãã«ããã¨å ¨ãã¼ããªã¹ãã¯ä»¥ä¸ã®éãï¼
æ´çããï¼
åæ° | å¤æ®µå°è¨ | è±èªå | 解é | å ¥æå ´æ |
---|---|---|---|---|
1 | Â¥7900 | Pair of pcbs (one for each hand) | PCB åºæ¿ 1 çµï¼å·¦å³ã®æã§è¨ 2 æï¼ï¼å ã®æ®µè½ã§çºæ³¨ããã㤠| Fusion PCB ã«ã¦æå°çºæ³¨ææ°ã® 5 æã§æ³¨æ |
1 | Â¥1200 | Teensy USB Board, Version 2.0 | Teensy ãªã USB ãã¤ã³ã³ | Teensy 2.0 USB Keyboard Mouse AVR for arduino ISP Board - AliExpress ããã²ãã |
24 | Â¥0 | Teensy header pins, male (unless pre-installed) | Teensy ãåºæ¿ããæµ®ãããå½¢ã§æããã²ãã²ããã㤠| â㧠Teensy 2.0 è²·ã£ããä»ãã¦ã |
1 | Â¥635 | MCP23018-E/SP I/O expander | æ大 16 æ¬ã® I/O ã I2C ãããã³ã«ã使ã£ã¦ 2 æ¬ã§èªã¿æ¸ãã§ããããã«ãã¦ããã | IC I/O EXPANDER I2C 16B 28SDIP MCP23018-E/SP - ãã«ããªã³ã©ã¤ã³ *5 |
76 | Â¥8500 | Cherry MX switches | åãã¼ã«ä¸åä¸åã¤ãããã¼ã¹ã¤ãã*6ï¼å¥½ã¿ã¯ç¡æ°ã ãã©å㯠Cherry 赤軸ãé¸æ | 10ã±ã»ãã Cherry MXãã¼ã¹ã¤ãã(赤軸) ã¡ã«ãã«ã«æ¼ããã¿ã³ã¹ã¤ãã ã¸ã§ã¤ããã«ã·ã¹ãã ã 8 å注æ |
76 | Â¥200 | 1N4148 diodes, SOD-123 package (Surface mount) or DO-35,(0.3â pitch) (through hole) | 76 åã®ãã¤ãªã¼ããå ¨ãã¼ã«ã¡ã¾ã¡ã¾ã¨ä»ããï¼ãã¤ãªã¼ãã¯é»æµãä¸æ¹åã«ããæµããªãï¼æåã«ã¨ã³ãã¬ã¹ã¯ãã ä»ãã§å¿ãæã£ã¦ãã | ç§æé»å㧠50 åã»ããã®ã 2 ãã㯠|
2 | Â¥100 | 2.2k Ω resistors (red, red, red) | æµæï¼ããããæµæå¤ã«ãã£ã¦ç·ã®è²ãéããã ã£ãï¼ä¸å¦ã®ææ¥ã§ãã£ã㪠| ç§æé»åã§æå°åä½ 100 æ¬ |
3 | Â¥0 | 3mm T1 LEDs | ããçµå±è²·ã£ã¦ãªãï¼ãªããåºæ¿ä¸ã«ä»ããå ´æãªããªã? USB æ¿ããæã«å ãããé¨åã ã¨æã | -- |
3 | Â¥100 | 220 Ω resistors, or match to LED. (red, red, brown) | âã® 2.2k ã¨ã¯éã 220 æµæï¼ç·ã®è²ã赤ã»èµ¤ã»è¶ã | ç§æé»åã§æå°åä½ 100 æ¬ |
5 | Â¥0 | Short jumpers (You can also use the clipped off legs from your resistors) | ãããªãã ãããããããã«ç§æã§ãã¸ã£ã³ãã¯ã¤ã¤ãã¿ãããªã®è²·ã£ã¡ãã£ããã ãã©ï¼ä¸è¦ã ã£ãï¼æµæã¯ãã ä»ããã¦åãåã£ãã´ã...ãããªãã¦è¶³é¨åã使ãã° OK | -- |
1 | Â¥100 | 0.1 µF ceramic capacitor (marked â104â for 10*104 picofarad) | ã»ã©ããã¯ã³ã³ãã³ãµï¼ã«ã¤ã¬ã©ã ã·ã¿ãããªå½¢ãã¦ãããï¼å¿ é ãããªããã©ããã°ãã¿ã¼*7ã¨ã®ãã¨ï¼é»å§ãå®å®ãããå¹æãããããã? | ç§æé»å |
1 | Â¥110 | USB mini B connector WM17115 | USB mini B ã®ã¡ã¹ï¼ã使ãã® PC ããç¹ãå£ | åç³é»å (ç§æé»åã«ã¯ãªãã£ã (ééãã¦è¡¨é¢å®è£ ã®ã¢ãã«ãè²·ã£ã¦ãã¾ã£ããã through hole ã¢ãã«ãè²·ãç´ãã¨ããäºåº¦æéãçºç)) |
1 | Â¥256 | USB mini B plug with short cable (such as H2955) | ããæå¤ã¨é£é¢ï¼ä½ãé²ãã¦ããããä½ã®ãã¨ãç解ããã®ã ãï¼USB mini B ã±ã¼ãã«ããç¨æãã¦USB ã±ã¼ãã«ãåã£ã¦ã»ããã¦ç¹ãã¨ããå¤ç§æè¡ãè¡ãå¿ è¦ãããï¼å解ããã®ãã£ãã大å¤ãªã®ã§ï¼ããããã㨠USB mini B ãªã¹å´ãè²·ã£ã¦ï¼èªåã§ã±ã¼ãã«ç¹ãã ã»ããè¯ãããç¥ããªã | ã¨ã¬ã³ã USBã±ã¼ãã« ãminiBã USB2.0 (USB A ãªã¹ to miniB ãªã¹) ãã¼ãã« 0.5m ãã©ã㯠U2C-M05BK |
1 | Â¥0 | USB cable male A to male mini B | ããã¯è¦ã¯ããã§ãï¼ã使ãã® PC ã¨ãã¼ãã¼ããç¹ãã㤠| æ§ Ergodox EZ ã«ã¤ãã¦ãããã¤ããã®ã¾ã¾å©ç¨ |
2 | Â¥700 | 3.5 mm TRRS sockets, CP-43514*8 | å·¦å³ã®ãã¼ãã¼ããæ¥ç¶ããéã®åãå£ï¼èª¿ã¹ã¦é©ãããã ãï¼TRRS ã£ã¦ ã¤ã¤ãã³ãå·®ãè¾¼ããã®ä¸¸ãã¸ã£ã³ã£ã¨ããæå¿ãã®ãã¤ã®è¦æ ¼ãããï¼ä¸æè°ï¼ | CONN JACK 4COND 3.5MM R/A SJ-43514 - ãã«ããªã³ã©ã¤ã³ |
1 | Â¥0 | Cable with two 3.5 mm TRRS plugs | å·¦å³ã®ãã¼ãã¼ããç¹ãç·ï¼âã® TRRS sockets éãç¹ãã | æ§ Ergodox EZ ã«ã¤ãã¦ãããã¤ããã®ã¾ã¾å©ç¨ |
1 | Â¥0 | Ergodox Keyboard case | è¦ãç®ãå·¦å³ãããã¤ã§ããï¼ãã¼ãã¼ãã±ã¼ã¹ï¼åã¯æ§ Ergodox EZ ã®ã±ã¼ã¹ãæµç¨ã§ãããã¨æ°æ¥½ã«èãã¦ãããã ãï¼å¾è¿°ããããã«ããã大å¤ã ã£ãï¼ | æ§ Ergodox EZ ã«ã¤ãã¦ãããã¤ããã®ã¾ã¾...ããï¼ä¸é¨å å·¥ãã¦å©ç¨ |
76 | Â¥0 | MX Keycaps | ãã¼ã¹ã¤ããã®ä¸ã«è¢«ãããã¤ï¼å㯠Ergodox EZ ç¡å»å°ã®é»ãæ°ã«å ¥ã£ã¦ãã®ã§ããã¤ãæµç¨ï¼ç¡å»å°ã§ããã¨ã¯ããªãã¡ãã¼ãã³ãã§çµã¿ç«ã¦ãå¿ è¦ãããã¨ããã㨠| æ§ Ergodox EZ ã«ã¤ãã¦ãããã¤ããã®ã¾ã¾å©ç¨ |
å®ç©åçãªã©ã¯ï¼ã¯ãã ä»ããã¦ãã段éã§æ¹ãã¦ä¹ããï¼
å¤æ®µï¼é販ã®å ´åã¯åã ã®éæå«ãï¼ãåè¨ãã㨠¥19800 ç¨ã«ãªãï¼ä¸æ¹ã§çµã¿ç«ã¦æ¸ Ergodox EZ ãè²·ãã¨ï¼ä»å±ãã¼ãçãå«ã㦠$325 (=~ Â¥35000) ããã*9ï¼èªä½ãã㨠Ergodox EZ ã§è²·ãæã¨æ¯ã¹ã¦ 60 % ç¨åº¦ã®ä¾¡æ ¼ã§å ¥æã§ãããï¼æ¿å®ï¼ã£ã¦ã»ã©ãããªããæéããããã®ã§ï¼çµã¿ç«ã¦ããã»ã¹èªä½ã«æ¥½ãã¿ãè¦ãã ãã人åãã®é¸æè¢ããªããã£ã±ãï¼ç´°ã ããé»åé¨åã¯èª¤å·®ã¬ãã«ã®å®ããªã®ã§ï¼åºæ¿ããã£ã¨å®ä¾¡ã«ä½ãæ段ãããã°ï¼ã»ã¼ãã¼ã¹ã¤ããã®å¤æ®µã ãã§ä½ããããªæ°ãããï¼ãï¼ãã¨åã¯ç¹æ®ã ã£ããã©ï¼ãµã¤ãã¯ããã«å ãã¦ãã¼ãã¼ãã±ã¼ã¹ãä½ããã®æ¹æ³ã§å ¥æããå¿ è¦ããããªï¼
ç§æé»åã¨åç³é»åã¯é販ããã£ã¦ãã¿ããã ãã©ï¼åãè²·ã£ãã®ã¯ç§èåã«ããå®åºèï¼ç§æé»åã»åç³é»åã«è¶³ãéã¶ã¤ãã§ã«ï¼ç§èåããæ©ãã¦è¡ããèªä½ãã¼ãã¼ãå°éåº éèå·¥æ¿ ã«ãå¯ã£ã¦ã¿ããï¼
楽ããï¼
ã¯ãã ä»ãã®ç´ æ¯ã
ããããã¯ãã ä»ãèªä½ããã¶ãå¦çæ代以æ¥*10ã ããã®ã¸ãã®æä½ (?) ãããããã£ã¦ããªãã®ã§ï¼ãããªãè²´éãªãã¼ãããã¡ã«ããæ²åãé¿ããã¹ãï¼ã¾ãã¯å®ãå·¥ä½ããããè²·ã£ã¦ï¼ãªãã¨ãªãç´ æ¯ãããã¦ãããï¼
ã§ããï¼
ã¯ãã ãã¦ãè²·ã£ãã®ã§å·¥ä½ãã¦éãã pic.twitter.com/VXlnXnerB7
— 俺ã®ãã¼ã ãåãã¦ã¿ã (@T_Hash) December 5, 2019
楽ããï¼
ã¯ãã ä»ã
ã¾ãã¯éå ·ãè²·ãã¾ããã
ä½ã¯ã¨ãããã¯ãã ãã¦ï¼åã¯ä¸åº¦ããããããå®ãã®è²·ã£ã¡ãã£ããã ãã©ï¼æåããç½å (HAKKO) ã®æ¸©åº¦èª¿ç¯æ©è½ä»ãã®ãã¤ãè²·ã£ãã»ããééããªãã¨æãï¼
ç½å ãã¤ã¤ã«å¼æ¸©åº¦å¶å¾¡ã¯ãã ã㦠FX600
- çºå£²æ¥: 2012/01/18
- ã¡ãã£ã¢: Tools & Hardware
ã¯ãã ä»ã㯠270 âï¼ã¯ãã ã溶ããã¦é¤å»ããæã¯æé«ã® 500 âã§ãã£ã¦ããï¼ä»¥ä¸ï¼ãã®ä»ã«åã®è²·ã£ããã®ï¼
- ç½å (HAKKO) å·»ã¯ãã 150g ç´å¾0.8mm FS402-02
- ã¯ãã ãã¦å°: goot ã¯ãã ãã¦å° ST-11
- ç¹ç´°ãªãã³ã»ãã: ã¨ã³ã¸ã㢠éè ãã³ã»ãã PT-17
- ç¥ãããã¼: goot ãããã¼ YN-10
- ããã³ã¨åã£ããã¨ç ´çãé£ã³æ£ããªãï¼ãããï¼
- 3M ã·ã¼ã«ã¯ãã ã¯ãªã¼ãã¼30 å¼·å ãã¼ãã¿ã¤ã 100ml Cleaner30 MINI
- Ergodox "EZ" ãå解ããéã«ã¯è£ã®ã·ã¼ã«ãå¥ããã¦ãã¸ãå¤ãå¿ è¦ãããã®ã ãï¼ãã®ã·ã¼ã«ãçµæ§ã¹ãã¤ãï¼ãªã®ã§ãæé¤ã®ããã«ã·ã¼ã«ã¯ãããè³¼å ¥ï¼ãã£ã¡ãã¡ã®ç²çå¤ãè½ã¡ã¦æ°æã¡ããï¼
- ã¯ãã å¸ãåãå¨: ã¨ã³ã¸ã㢠ãã³ãå¸åå¨ SS-01
- å¾è¿°ãããï¼æ§ Ergodox ããã±ã¼ã¹ãå ¥æããããã«ï¼ãã¹ã¦ã®ãã¼ï¼ã¤ã¾ã 76 åã§ããï¼ã®ã¯ãã ä»ããåãå¤ãå¿ è¦ããã£ãï¼
以ä¸ã®ä»²éãã¡ã使ã£ã¦ã¯ãã ä»ããã¦ããï¼
çµã¿ç«ã¦æé ã¯ä½åº¦ãè¨åãã¦ãã Ergodox å ¬å¼ãµã¤ã ã®ã»ãï¼æ§ Massdrop ã®ãã¼ã¸ ããããããã (archive ã ãã©)ï¼ã¾ãã§ãï¼å®éã®ä½æ¥ãã¤ã¡ã¼ã¸ããããã«ã¯åç»ããã¹ãããï¼
é£ãããã¼ããããå ´å㯠ErgoDox Assembly Part 7: Soldering the MCP23018 I/0 Expander - YouTube ãã®äººã®ã·ãªã¼ãºãããã¨æãï¼åã ã®ãã¼ããã¯ãã ä»ãããæé ãä¸å¯§ã«è§£èª¬ãã¦ããï¼
ãã¤ãªã¼ã * 76
æåã®ã¹ãããããã¤ãªã¼ãä»ããªãã ãã©ï¼æåã®æåã§ããã¤ãªã¼ãã®é°æ¥µã»é½æ¥µãã¨ãåºæ¿ã®è¡¨ã»è£ããã¡ããã¨ç解ãã¦ã¹ã¿ã¼ãããã¨ãããã¡ãã£ã¨ãã¼ãã«é«ãï¼æ°ãããï¼ï¼
ãããããã¤ãªã¼ãã¨ã¯ï¼ã¨ãã説æã Wikipedia ã®ãã¤ãªã¼ãé ç® ããå¼ç¨ããï¼
ã¢ãã¼ãï¼é½æ¥µï¼ããã³ã«ã½ã¼ãï¼é°æ¥µï¼ã®äºã¤ã®ç«¯åãæã¡ï¼ãã®ç¨èªã¯ç空管ããæ¥ã¦ããï¼ãé»æµãä¸æ¹åã«ããæµããªããããªãã¡ãã¢ãã¼ãããã«ã½ã¼ãã¸ã¯é»æµãæµãããã«ã½ã¼ãããã¢ãã¼ãã¸ã¯ã»ã¨ãã©æµããªãããã®ãããªä½ç¨ãæ´æµä½ç¨ã¨ããã
ã¤ãå æ¥ä¼ç¤¾ã§ä½ã¬ã¤ã¤ã¼åå¼·ä¼ãããï¼ã¡ããã©éååå¦ã®ãã³ãçè«ã¨åå°ä½ï¼PN æ¥åãã¤ãªã¼ãããããåå¼·ããæãªã®ã§ã¿ã¤ãã³ã°ãããã£ãï¼
ãã¦ï¼ã¾ãå®éã®ã¯ãã ä»ãä½æ¥ã«ãããããã¤ãªã¼ãã®é°æ¥µã»é½æ¥µãã«ã¤ãã¦ï¼ãã¤ãªã¼ããä»ããç©´ã¯åãã¼ã®ä¸é¨ã«ãããã ãã©ï¼ãã¼ã¼ã¼ãè¦ãã¨ï¼ã¯ãã ä»ãã®ç©´ã®å¨ãã®éå±ãã丸ãã¨ãåè§ãã§å¾®å¦ã«å·®ãä»ãããã¦ããï¼ãã¤ãªã¼ãã®ã«ã½ã¼ãï¼Cathode/Kathode: é°æ¥µï¼å´ã«ã¯é»ç·ãªã©ã§å°ãä»ãããã¦ãããã®ãããï¼
ã¨ããã§ï¼ãã¤ãªã¼ãã«ã¯ "through hole (足ãåºæ¿ã«ã¶ã£åºããã¤)" vs "surface mount (表é¢å®è£ )" ã¨ããåºå¥ãããï¼ãã¤ãªã¼ãã«ã¯ã¨ãããï¼å²ã¨ããããåé¡ã£ã½ãï¼åã¯æ·±ãç解ãã through hole ãé¸æãããã足ãã¶ã£åºãã¦è£ããã¯ãã ä»ãããå½¢ã§ä½æ¥ãé²ãããã©ï¼surface mount ã®æ¹ãï¼ã¡ã¾ã¡ã¾ã¨ãã¦é£ãããªãããã ãã©ï¼ãã£ããã¾ã¨ã¾ã£ã¦è¯ãã£ãããç¥ããªã *11ï¼
次ã«ãåºæ¿ã®è¡¨ã»è£ãã«ã¤ãã¦ï¼æªæ¥ã®è©±ãããã¨ï¼ãã¤ãªã¼ããä»ãçµãã£ããåºæ¿ãã²ã£ããè¿ããã¨ã«ãªãï¼å¥ã®è¡¨ç¾ãããã¨ï¼ãã¤ãªã¼ãããå¾ã®ã¯ãã ä»ãã¯ï¼ãã¹ã¦ããã¤ãªã¼ãã¨ã¯éå´ã«ä»ãã¦ãããï¼ã ããå³æç¨ã«ä½¿ãåºæ¿ã§ããã° "LEFT HAND" ã¨å°å·ããã¦ããå´ã«ãã¤ãªã¼ãã 38 åã¤ãã¦ï¼å·¦æç¨ã«ä½¿ãåºæ¿ã¨ã㦠"RIGHT HAND" ã¨ããé¢ã«ãã¤ãªã¼ãã 38 åä»ããã®ã§ããï¼
æ°åï¼ã¡ãªã¿ã«å
¨ãã¼ã«ãã¤ãªã¼ããå¿
è¦ãªçç±ã¯ Keyboard Matrix Help ã® 8. Getting Rid Of Ghosting and Masking
ã«æ¸ãã¦ãï¼
å ã«ããã¤ãªã¼ããä»ãçµãã£ããåºæ¿ãã²ã£ããè¿ããã¨ã«ãªããã¨æ¸ããã¨ããï¼ãã®ã¿ã¤ãã³ã°ã§åºæ¿ãè£è¿ãï¼æ¬¡ã®é»åé¨åãæµæã以éã®ã¯ãã ä»ãã¯ï¼ãã¹ã¦ãã¤ãªã¼ãã¨ã¯å対å´ã«ãã£ã¦ããï¼
æµæ (2.2k Ω * 2 / 220 Ω * 3)
ãã¤ãªã¼ãå°çãçµãããæµæï¼ããã¤ã¯æ¥½ãã³ï¼ã¯ãã ä»ãããããã¡ããã©è¯ãï¼ãã¤ãªã¼ãã¥ããã®ä¸ã§ãã£ããç½ãããªåå¨ã ï¼
åºæ¿ä¸ï¼å·¦å´ã«ã¯ãã ä»ãããããã¤ã 赤ã»èµ¤ã»èµ¤ ããªãã¡ 2.2k Ω æµæã§ï¼ä¸å¤®ã¨å³å´ã«ã¯ãã ä»ãããã¦ããã®ã 赤ã»èµ¤ã»è¶ ã㨠220 Ω æµæï¼
ããã§ä¸ç¹ï¼æ°ãã¤ããã¹ããã¨ãããï¼å
ã®é¨åãªã¹ã㧠Short jumpers
* äºæ¬ã¨ãããã®ããã£ãã®ã ãï¼You can also use the clipped off legs from your resistors
ã¨ããããã«ï¼ã¯ãã ä»ããçµããæµæãã¡ã®è¶³ãããã³ã¨åã£ããï¼ãããæ¨ã¦ãã«åã£ã¦ããï¼
ãããªããä½ã«ä½¿ãã®ãã¨ããã¨â¦
è¦ããããªï¼åãåã£ãæµæã®è¶³ã使ã£ã¦ï¼å·¦å³åºæ¿ 3.5 mm TRRS ã½ã±ããåä»ç®æã®ã¾ããã«ããç½ã丸ã§å²ããããç©´ãé£çµããã¦ããï¼è²ããªãã¨ãããã ãªï¼
3.5 mm TRRS ã½ã±ãã
ããã次ã¯äºç©´é£çµã«ãã£ã¦ãè³ç«ã¦ã®çµãã£ã 3.5 mm TRRS ã½ã±ãããã¯ãã ä»ãï¼
ããããã¯ãã ä»ãã«ãæ £ãã¦ããï¼
Teensy 2.0
Teensy 2.0 㯠Ergodox ã®é è³ã§ããï¼Ergodox ã "programmable" ã«ãã¦ããã¦ããç«å½¹è ã *12ï¼Teensy 2.0 㯠ATmega32U4 ããã»ããµ ãä¹ã£ã¦ãã 8bit ãã¤ã³ã³ãã¼ãã§ï¼ãã¼å ¥åãã³ã³ãã¥ã¼ã¿ã«éãã·ã°ãã«ã«å¤æããï¼ATmega32U4 㯠Arduino ã·ãªã¼ãºã®ä¸é¨ã«ã使ããã¦ãããã®ãããï¼
Teensy ã®ãã¼ã¸ã§ã³ 2.0 ã¯å°ã æ代é ãã ã£ããããï¼ã®ãï¼å ¥æçµè·¯ãä¹ããã¦ã¡ãã£ã¨å°ã£ãï¼ã¹ã¤ãããµã¤ã¨ã³ã¹ã¯ v3.x+ ç³»ãããã売ã£ã¦ãªãã£ã½ãï¼åç³é»åã«ããããããã¼ããè¦ã¤ãããï¼ç¢ºã Teensy 2.0++ ã ã£ãï¼çµå± Teensy ã®ããã« Aliexpress ã¢ã«ã¦ã³ãä½ã£ãã...
ããããããã¦
ããï¼ã¯ãã ä»ãï¼ãã
ã¨ãã㧠Ergodox ã¯ã¡ã«ãã«ã«ãã¼ãã¼ãã®ä¸ç¨®ã§ããï¼ã¡ã«ãã«ã«ãã¼ãã¼ãã®ã¡ã«ãã«ã«ããæ以ã¯ï¼åãã¼ãç©ççãªã¹ã¤ããã¨ãã¦æ©è½ããã¨ããï¼ã¨ç解ãã¦ããï¼ç¥ãããã©ï¼ããªãã¡ï¼ã¡ã«ãã«ã«ãã¼ãã¼ãã®ãã¼ãæ¼ããã¦éé»ãã¦ï¼ããã Teensy ã¸ã®å ¥å (I/O) ã¨ãã¦ç¾ããï¼
ã§ãï¼Ergodox ã®ãã¼ã¯å ¨é¨ã§ 76 åï¼çæã§ã 38 åï¼Teensy ã¯ãããªã«æ²¢å±±ã®ãã¼ I/O ãåãåãããã®ã ãããï¼Teensy and Teensy++ Schematic Diagrams ããï¼Teensy 2.0 ã®ã¹ãã¼ããè¦ã¦ã¿ããï¼
å³å´ã® F0, F1... B0 ã¨ä¸¦ãã§ããã¨ããã I/O ãã³ã®ã¯ãã§ï¼ãããã 20 åããããã¨ãã£ãã¨ããï¼1 I/O ã 1 ãã¼ã«å²ãå½ã¦ãããã«ã¯å ¨ç¶è¶³ããªãï¼
ãã㧠Ergodox ã¯ã©ããã¦ãããã¨ããã¨ãçµã¿åãããã使ã£ã¦ããï¼Ergodox ã¯ãã¼ã®é ç½®ãç¬ç¹ã ãã©ï¼é ç·ã¨ãã¦ã¯çæããã 6 x 7 ã®ãããªãã¯ã¹ã§å®ç¾©ããã¦ããï¼6 x 7 ã®çµã¿åããã§ãã¼ãç¹å®ããããï¼åãåã I/O ã¨ãã¦ã¯çæ 6 + 7 = 13 åã® I/O ãå²ãå½ã¦ãã°äºè¶³ããï¼å è¿°ã®åè·¯å³ã§ "ROW", "COLUMN" ç³»ã®ã©ãã«ãç¹ãã§ããã°ï¼ä»¥ä¸ã®ãããªå³ãç¾ãã*13ï¼
ãã㧠6 x 7 (以ä¸) ã®ã¹ã¤ãã ON/OFF ã 13 åã® I/O ã§è³ããã¨ãåºæ¥ãï¼Teensy ã¯åãåã I/O ããããã°ã©ã ã«ãã¨ã¥ãã¦ï¼ã©ã®ãã¼ãæ¼ããã¦ããã®ãã¨ããæ å ±ãéç®ãããã¨ãåºæ¥ãï¼
ãã®"ããã°ã©ã "ã qmk_firmware ã§ãã£ã¦ï¼å ã«åã® GitHub ã¬ãã¸ããªãä¾ã¨ãã¦ãããããã«ï¼åæã«ã«ã¹ã¿ãã¤ãºãã¦ãã«ããããã¨ãå¯è½ï¼ãã«ãããããã¡ã¤ã«ã¯ Teensy Loader ã¨ããã¢ããªã±ã¼ã·ã§ã³ã使ã£ã¦ Ergodox ã«éãè¾¼ãã¨ã©ã¯ï¼ãã®å¾ Teensy 2.0 ä¸ã®ç©ççãªãã¿ã³ (ãªã»ãããã¿ã³) ãæ¼ãã¨ï¼éãè¾¼ãã ããã°ã©ã ãæå¹ã«ãªãï¼
å³æã¯ããã§ãããå·¦æã¯ã©ãããã®ï¼ã¨ããçåãæµ®ãã¶ããç¥ããªããããã¯å¾ã§ï¼
USB mini B ã®å·¥ä½
ãããæå¤ãªé£æï¼æ¬ä»¶ã®ã´ã¼ã«ã¯åç´ã§ï¼ã¯ãã ä»ãã®æ¹åã®é½åä¸ Teensy ã«ä»ãã¦ã USB mini B ã®å£ããã¼ãã¼ãã«å¯¾ãã¦ãã¨ã³ããåãã¡ããã®ã§ï¼ã±ã¼ãã«ãç¶ã足ãã¦ãã¿ããã¨ãããä¸ã£ããã«å£ãéãããï¼ã¨ããã ãã®ãã®ï¼ã¨ç解ãã¦ããï¼ï¼
ã¨ãããåç´ã« mini B ã±ã¼ãã«ãçªã£è¾¼ãã¨ï¼ä¸ã®å³ãããããããã«ï¼ããæ ¹æ¬ã®"æã¡æ"ã ãã§ãµã¤ãºãªã¼ãã¼ãã¦ãã¾ãï¼ã ãã...
ãã¨ã¯...
æå¾ã® USB mini B ã®å£ã¯ç©´ã«ã¶ã£åºãã¦ã¯ãã ä»ãããå¿ è¦ãããã®ã§ãåºæ¿å®è£ ãåãããªãã¦ãthrough holeãåãé¸ã¶ãã¨ï¼ä»¥ä¸ï¼é»åå·¥ä½ã«æ £ãã¦ããªããã¨ããã£ã¦ãï¼ãã®ãã§ã¤ãºãçµæ§é¢åã ã£ã*14ï¼
MCP23018-E/SP I/O Expander
ãã¦æ¬¡ã¯ I/O Expander ã ã... åã¯ããã®åå¨æ義ãä»ã²ã¨ã¤ãã³ã¨ããªãã¦ï¼ãã£ã¨ãããããã¦ããï¼ã§ãä»åçµã¿ç«ã¦ãæ©ã«èª¿ã¹ã¦ã¿ã¦ï¼ãªãã¨ãªãèªåãªãã«è ã«è½ã¡ãã®ã§ï¼ã¡ãã£ã¨æ´çãã¦ã¿ããã¨æãï¼
å³æãã¼ãã¼ãã«ã¯ Teensy 2.0 ããã¦ï¼ãã¼å ¥åãã·ã°ãã«ã«å¤æãã¦ããã¦ããï¼å³æå´ã®ãã¼å ¥åãããã 13 åã®ãã³ã«ç¹ãã ãã§æãåããã¨ãã§ããï¼ãããããï¼ã§ãå·¦æã¯ã©ãããã®ï¼ã¨ããçåãå®ã¶ãããã«ãªã£ã¦ããï¼å·¦æã®ãã¼å ¥åã¯èª°ãé¢åãè¦ã¦ãããã®ãï¼å·¦æã«ãããä¸å Teensy 2.0 ãé ç½®ããï¼ããã¨ãï¼å ¨ãã¼ããã®åºåãä½æ¬ãã®ã±ã¼ãã«ã§å³æå´ã«ç¹ãï¼...ã©ãããã¾ããªãï¼ããã§ï¼ãã¼ãã¼ã®å¦ã颯ç½ã¨ç»å ´ããã®ã MCP23018-E/SP I/O Expander ã§ããï¼
å㯠Teensy 2.0 ãå³æå´ã®åºæ¿ã«ãã£ã¤ããï¼ä¸æ¹ã§ MCP23018-E/SP I/O Expander ã¯å·¦æå´ã«ããï¼ããã¯å¶ç¶ã§ã¯ãªãï¼
MCP23018-E/SP I/O Expander ã®ãã¼ã¿ã·ã¼ã ããä»çµã¿ãèªã¿è§£ãã¦ã¿ããï¼ã¾ã MCP23018-E/SP ã® E
㯠temperature range ã§ããï¼E = -40°C to +125°C
ã表ãï¼/SP
㯠Package ã示ãã¦ããï¼SP = Skinny Plastic DIP (300 mil Body), 28-Lead
ã ããã ï¼SPDIP package ã¨ãè¨è¼ãããï¼ã¢ã¼ããã¯ãã£ã¨ãã¦ã¯ MCP23018
ã®ç®æã ãæ°ã«ããã°ããï¼ä»¥ä¸ã®éãï¼
大åãªã®ã¯ï¼Open-drain ã¨è¨è¼ããã¦ããå³å´ã®ãGPA0-GPA7, GPB0-GPB7 ã®è¨ 16 æ¬ãã¨ï¼I2C ã¨æ¸ããã¦ããããã¯ã¹ããåºã¦ãããSCL (Serial Clock Line), SDA (Serial Data Line)ã® 2 æ¬ãï¼MCP23018-E/SP I/O Expander ã使ãã¨ï¼æ大 16 ã® GPIO (General Purpose I/O) ãï¼ããã 2 æ¬ã® SCL, SDA ã©ã¤ã³ã§èªã¿æ¸ããããã¨ãåºæ¥ãããã«ãªãï¼16 I/O ããã° Ergodox çæåã§ãã 6 + 7 = 13 æ¬ã® I/O ãã«ãã¼ã§ããï¼ããã§å·¦æ 38 ãã¼ãè³ã I/O 13 æ¬ãããã 2 æ¬ã«éç´ãã¦ï¼I2C ã¨å¼ã°ããã·ã³ãã«ãªãããã³ã«ã§ TRRS ãä»ãã¦ãå³æå´ (Teensy ãåå¨ããå´)ãã«éããã¨ãåºæ¥ãï¼ã ããï¼PC ãã Teensy ã®åå¨ããå³æå´ã®ã¿ã« USB ã±ã¼ãã«ãç¹ãã°ï¼ä¸¡æåã®ãã¼å ¥åãã²ããã§ããã¨ããæ¦ç¥ãªã®ã§ããï¼
ããã¦åãã³ã®ååï¼
ã¨ããããã§ï¼MCP23018-E/SP I/O Expander ãã¯ãã ä»ããã¦ããï¼
ã¨ããã§ï¼MCP23018-E/SP I/O Expander ã§ã¯ï¼ä¸ã®ç»åã®é»è²ã§å²ã£ã 3 ç©´ã ãç©´ã®å¨è¾ºã«ã¯ãã ä»ãããéå±é¨åããªã. ããã©ãããã®? ã¨è¿·ã£ããã© ErgoDox Assembly Part 7: Soldering the MCP23018 I/0 Expander - YouTube ãè¦ãã¨é£ã°ãã¦ãããããï¼INTA, INTB, NC ãå©ç¨ãã¦ããªãã£ã½ãï¼
次ã«ï¼MCP23018-E/SP I/O Expander ã®è¬ã®å ´æã«ã»ã©ããã¯ã³ã³ãã³ãµï¼ãã£ãã·ã¿ï¼ã追å ããï¼
åèã« General Purpose I/O: How To Get More | Hackaday ãã¸ããèªãã§ããã¨ï¼ã«ã¦ã³ã¿ã¼ããã CD4017 ãè¨åããã¦ããï¼ããã¯ï¼å ã® "ã¯ãã ä»ãç·´ç¿å°" ã¨ãã¦ä½ã£ãããã¡ãã«ä½¿ããã¦ããé»åé¨åã ï¼"CD" 㯠CMOS Decade counter IC ã®åé ããæ¥ã¦ããï¼é話ä¼é¡ï¼ã³ã³ãã³ãµï¼ãã£ãã·ã¿ï¼ã¯é»è·ãèãå®å®ãããé»åé¨åï¼ref: ã³ã³ãã³ãµã¨ã¯? | æç°è£½ä½æ æè¡è¨äºï¼ï¼ä½æ I/O Expander ã®ãã®è¶³ã«ãã£ã¤ããã®? å ã®è¶³ã®é ç½®ã¨å¯¾å¿ãããã¨ä½ãè¦ããããªã¨æã£ããï¼ãããã¨ãã¨è£å´ã§ Teensy ã®ã¯ãã ä»ãã«ä½¿ããã¦ãç©´ã ãä½ã®æå³ããã®ãããããããªãï¼é»å§ãå®å®ãããå¹æããããããï¼ã¨ããã¨ããã¾ã§ããç解ã§ãã¦ããªã...
ã±ã¼ã¹ããããå°é£ã»å解編
ãã¦ï¼åºæ¿ã«ãã¼ããã¯ãã ä»ããã¦ä½ã£ã¦ããã®ã¯ãããï¼æçµçã«å¥ãåºãã®ã¾ã¾ä½¿ãããã«ãè¡ããªã*15ï¼ãã¼ãã¼ãã±ã¼ã¹ãå¿ è¦ã«ãªãï¼å®ã¯ Ergodox GitHub ã¬ãã¸ããªã«ã¯ãã¼ãã¼ãã±ã¼ã¹ã®è¨è¨å³ãå ¥ã£ã¦ãããï¼ãããã©ãã 3D ããªã³ã¿ã§åºåããã°ã±ã¼ã¹ãåºæ¥ä¸ããã£ã½ãï¼
åã®å ´åã¯å¹¸ãã¨ãããä½ã¨ãããä¸å¹´å使ã£ã¦ããæ§ Ergodox EZ ã®ã±ã¼ã¹ãããã®ã§ï¼ãããæµç¨ããã楽åãããï¼ã¨ï¼
ãããå°çã®å§ã¾ãã ã£ãï¼
ãã¸ãå¤ãã¦å解ãã¦ãã£ã¦ãï¼ä¸åã«å¤ãåºæ¿ãã±ã¼ã¹ããå¤ãã¦ãããªãï¼ããããæ§é ã観å¯ããã¨ï¼ä¸ãããåºæ¿ - ã±ã¼ã¹ - ãã¼ã¹ã¤ãããã®é ã«ãªã£ã¦ãã¦ï¼ãã¼ã¹ã¤ããã§ã±ã¼ã¹ã®æ ãæã¿è¾¼ãã§ã¯ãã ä»ãããã¦ããï¼ã¤ã¾ãï¼å ¨é¨ã®åãä»ãæ¸ãã¼ã®ã¯ãã ãä¸åä¸å溶ããï¼desolderingï¼ã¦åºæ¿ããåãå¤ãåããªãã¨ã±ã¼ã¹ãããªã¼ã«ãªããªãï¼ã¾ãããï¼
ã¨ããããã§...
æå㯠goot ã¯ãã å¸åãç· CP-30Y ã使ã£ã¦ãããã ãï¼å¸ãåãå¨ã®æ¹ãå¹çè¯ãã£ãï¼ã¯ãã ãã¦ã§æº¶ãããã¨ãããããããå¸ãåãï¼åã«ãããããã§ç©ºæ°ãå¸ã£ã¦ããã ãã§ãã£ããã®ããã¯ããã£ãã ããï¼æ°ãããªãã¨å²ã¨ãããã¿ãï¼
ç¡é§ã«æéãããã¦å ¨ãã¼ã desolderingï¼ã±ã¼ã¹ãå ¥æï¼
ä¸çªç°¡åã¨æã£ã¦ããã±ã¼ã¹ã®å解ãä¸çªå¤§å¤ã ã£ãã¨ããï¼ã¾ãã§äººçã®ããã ï¼
ã±ã¼ã¹ããããå°é£ã»åä½ç·¨
ã±ã¼ã¹ãå解ã§ããããã¨ã¯è¢«ããã ã... ã¨æãããï¼ããã¤ãåé¡ã«ééï¼ã©ããã Ergodox EZ ã¯ãªã¼ãã³ã½ã¼ã¹ã® PCB ãã¼ãããã®ã¾ã¾ä½¿ã£ã¦ããã®ã§ã¯ãªãï¼ãã¶ãçµã¿ç«ã¦ã®å¹çã®ããã ã¨æããï¼ããã¤ãã«ã¹ã¿ãã¤ãºãã¦ããããã ã£ãï¼
ãã¨ãã°âã®ãããªéããããï¼ã±ã¼ã¹ã被ããã¨åºã£å¼µããã¶ã¤ãã£ããããã®ã§
ãããåã£ããï¼
ã±ã¼ã¹ã®ç©´ã Teensy RESET ç©çãã¿ã³ã®å ´æããããã¦ãã¦ï¼
ã¯ãã ãã¦ã§éé (& ã«ãã¿ã¼ã§åã) ãããï¼
è²ã è¦æ¦ãã¾ãããï¼ãªãã¨ãåã¾ãï¼
ãã¼ã¹ã¤ãã
ããããã¯ã©ã¤ããã¯ã¹ï¼å㯠Cherry MX 赤軸 ã好ã¿ï¼
ããã¤ãä¸ãããåºæ¿ - ã±ã¼ã¹ - ãã¼ã¹ã¤ãããã®é ã«ãªãããã«ã±ã¼ã¹ãæã¿è¾¼ãã§ã¶ã£åºãã¦ï¼ã¯ãã ä»ãï¼76 ãã¼å ¨é¨ï¼
ã´ã¼ã«ãè¿ãã®ã¨ï¼ãã¼ãã²ã¨ã¤ã²ã¨ã¤ä»ãã¦ããã¨ããå®æãã楽ãããããã¯ã¹ï¼
ããã¼ã
ã¸ã°ã½ã¼ããºã«ã®ãã¼ãã£ãã
ãã¼ã¹ã¤ãããã¤ããã®ã§ï¼ãã®æç¹ã§ USB ã±ã¼ãã«ãæ¥ç¶ãã¦ï¼ã¡ããã¨ãã¼æä½ãæ¤ç¥ããããã¨ã確èªï¼ãï½ï¼
ããããæå¾ã¯ãã¼ãã£ããã被ãã¦ããã ãï¼ç¡å»å°ãé¸ãã ã®ã§ï¼ã©ã®ãã¼ãã©ã®ãã£ãããããããªãã¦ã»ã¼ã¸ã°ã½ã¼ããºã«ã§ãããï¼
å®æï¼
ãã¾ã®ã¨ããåé¡ãªãåãã¦ã¾ãï¼ãªããå¬ããï¼
ããã
éä¸ã§ãã£ããèªãã¹ããã¨ã¯èªã£ã¦ãã¾ã£ãã®ã§ã·ã¡ã«æ¸ãã¹ããã¨ã¯ç¹æ®µ... ã¾ãï¼ã¼ãã社ä¼ã«åºã¦åãå§ã 2020 å¹´ã§ã¾ã 10 å¹´ã«ãªãã¾ãï¼æ©ã ã«ä¸çãããã§ã¤ãã¢ã¦ããããã¨æããããã¶ã¨ã楽ããçãã¦ãã¾ãï¼ãã£ã¦ããã¾ãããï¼
*1:èªä½ãã¼ãã¼ãè¨è¨å ¥é ã¯åãè²·ããã¦ããã ãã¾ããï¼KiCad ã®ä½¿ãæ¹ãªããã¯ç¹ã«åèã«ãªã£ã
*2:å è¿°ã®å ¬å¼ãµã¤ã 2.2 ASSEMBLY GUIDE ãä¸å¿å ¬å¼ãªãã®ã«ãªãã ããã
*3:ã¾ãå¥ã« C ã®ç¥èã¯å¿ è¦ãªããã©
*4:ã§ãæä½çºæ³¨ææ°ã 5 æã ã£ãã®ã§ï¼å·¦æã¨å³æã«ä½¿ã£ãã㨠3 æä½ã£ã¦ããã ããª
*5:ç§æé»åã« MCP23017 ã¯ãã£ãã MCP23018-E/SP ããªã
*6:æ¨æº Ergodox ã¬ã¤ã¢ã¦ãã 㨠76 åã ã¨æããã ãã©ï¼å ¬å¼ãã¼ã¸ã§ã¯ 76-80, depending on your layout ã¨ã®è¨è¼ï¼80 å使ãã¬ã¤ã¢ã¦ããããã®ï¼
*7:Not strictly necessary but suggested
*8:FC68129 will also work if its extra pins are snipped off
*9:Ergodox EZ ã¯å°æ¹¾ããã®çºéã¨ãªãï¼éæç¡æï¼ãããã¨ãå°æ¹¾
*10:大å¦é¢æ代ã«çä½ååã®è³ªéè¨æ¸¬å¨ãèªä½ããç 究室ã«ããã®ã§ã¡ãã£ã¨ã ããã£ãè¨æ¶ããããï¼ãããã®åã¨ããã°ä¸å¦æ ¡ã¨ãã«é¡ã£ã¦ãã¾ã
*11:Ergodox EZ ãå解ãã¦ã¿ãã¨ãã surface mount ã¿ã¤ãã®ãã¤ãªã¼ãã§ãã
*12:ãã¶ã
*13:å³ã¯ https://kandepet.com/dissecting-the-ergodox-the-ergonomic-programmable-keyboard/ ããæå
*14:ãããã¼æãã«èªä¿¡ããªãããäºåã®ããã«ç¡é§ã« mini B ã±ã¼ãã«è²·ã£ã¡ãã£ã¦ä½ã£ã¦ã
*15:ãããªãµã ï¼å¼ç¨å ï¼ã«è£¸ã§ä½¿ãã®ãï¼ããã¯ããã§ã«ãã³è¯ãããã ãã©
ã¤ã³ãåºå¼µããå¾ãè±ä¼è©±ã®å¦ã³
ä¸é±éã»ã©æµ·å¤ã«åºå¼µãã¦ããï¼ã¤ã³ãã§ããï¼è¶£æ¨ã¨ãã¦ã¯ï¼åãæã¤ããã¤ãã®é åã«ãããå°éç¥èã¨çµé¨ããã¡ãã®ã¨ã³ã¸ãã¢ã«å±éããï¼å çå½¹ã¨ãã¦å¼ã°ããå½¢..ã«ãªãã ãããï¼åã«ã»ããã¼ã¨ããèãã ãã®åºå¼µãªãä»å¤ã«ãè¡ã£ãã¨ããã ãï¼ä¸é±éã¿ã£ã¡ãå çãããã¨ãªãã¨ãã¬ãã·ã£ã¼ãéããï¼äºåã«ã¤ã³ãã®ãã¼ã ã¨åã£ãã¨ããåã«å¯¾ããæå¾ å¤ãç°æ§ã«é«ãï¼èã®çãæããããªããçªå ¥ãããã¨ã«ãªã£ãï¼
ååã¯è¬ç¾©ãè¡ãï¼åå¾ã¯è¡åã®ã§ãã Hash ç¸è«æï¼å¤ã¯ããã«ã«æ»ã£ã¦ç¿æ¥ã®ãã¬ã¼ãã³ã°è³æãä½ã... ã¨ããããã¼ãã£ã·å¤åæ代ã彷彿ã¨ããã社çæ¥ã«å¤ãã¿è¦³å ã©ããã§ã¯ãªãã£ã (ãã¾ãã¾åããã§åãã¦ããåéã«ä¼ã£ãã®ã¨ï¼ã¤ã³ããã¼ã ã¨ãã¼ã«é£²ã¿ã«ç¹°ãåºãããã¯ãã) ã®ã§ï¼è²»ãããæéåã¯å½¹ã«ç«ã£ããã¨ãé¡ãï¼é»ãé«ããããããå³ã¤ãã¨ã³ã¸ãã¢ãéãç¼å ã®åªç§ãªè¥è ãã¿ããªè¯ã人ã§ï¼è±èªã®å¤å°ã®ä¸åã¯ä¿ç®¡ãã¦ããããç解ãããã¨ãã¦ãããï¼åã¨ãã¦ã¯ãã£ããæ°ã«å ¥ã£ãã®ã§ã¾ãå¼ã°ãããè¡ãããã¨æãï¼
ã§ï¼è±èªèªã¿æ¸ãã¯ãããªãã«é¦´æãã§ã¯ãããã©ï¼è¬ç¾©ãã質çå¿çãã (æ¥æ¬èªã§ãè¦æãª) é ã®å¸ã®éè«ããï¼å ¨é¨è±èªã§èãã¦åã£ã¦ãä½é±éãç¶ããçµé¨ã¯äººçã§åã¨è¨ã£ã¦ããï¼ãããªãã«å¦ã¶ã¨ããããã£ãã®ã§ç®æ¡æ¸ãã§æãããã¨ã«ããï¼æãåºããããã£ãã追è¨ããï¼
it depends è¶ ä¾¿å©
- ä½ãèãããã¨ãã« (ç¹ã«æè¡çãªè³ªåã¨ã) ãã®å ´ã§ Yes/No ãã確å®ããçããè¿ããªããã¨ããã¨æããã ãã©ï¼ããããã¨ãã«ã¨ãããããå ´åã«ãããªãã¨åç½®ããã¦ï¼ããããã® "å ´å" ã説æãã¦å¯¾è©±ãç¶ãã
- ãã®å ´ã§èª¬æåºæ¥ãªãã¦ã "it depends" ã ãè¿ãã° "depends on what?" ã¿ããã«è¿ãã¦ãã¦ä¼è©±ãåã«é²ã
I mean... / what I said is... ã§èª¬æãè£è¶³ãã
- ãã¡ãã®åã£ãå 容ãã©ããç¸æã«ãã³ã¨æ¥ã¦ããªãããã§ããï¼ãã¤ããã«è³ªåãè¿ã£ã¦ããªãã¨ãã¯ï¼åãå 容ãå¥ã®è¨ãæ¹ã§ä¼ãç´ã
- ãã®é ç®ã«éããã ãã©æ¥æ¬èªã§ãã¹ã ã¼ãºãªã³ãã¥ãã±ã¼ã·ã§ã³ã®ããã«ãããã¨ã ãªãã
well... / let me xxx... ã§å ´ãç¹ã
- è¬ç¾©ä¸ã«è³ªåãåãããï¼èª¬æã®ããã«æºåãå¿ è¦ãªã¨ãã«å£ããã (?) ãã¬ã¼ãºã¨ãã¦ä½¿ã£ã¦ãã
- ãã©ãã«èª¿æ»ããã¨ãã«ãã°ãã¡ã¤ã«éããªãã let me check the log file... ã¨ã
- ããã¯ã©ã¡ããã¨ããã¨ç¸æã«ä½ãä¼ããã¨ããããï¼èªåã®ããã®é¢ã大ããï¼å°ãªãã¨ãåã¯ï¼è³å ã§å¸¸ã«è±èªã§ã®æèãç¶ãã¦ãªãºã ãä¿ããªãã¨ãã¡ã«ãªãã®ã§ãã£ã¦ãã
é²æã©ãã§ãã ... How's xxx going? / ãããã¯åã« How is it going?
- It's going well, çµãã£ã話ã ã£ãã It went well, åé¡ãããã° we have some problems
- xxxer than I expected
I'd like to ãå¤æ§
- ãã¤ãã£ãçã«èªç¶ãã©ããã¯ç¥ããªããã©ï¼ãã使ã£ã¦ãï¼ãã¨ãªããèãããã I prefer
I feel (felt) ã§ã»ãã®ãæè¦
Let's say, ã§ä¾ç¤º
- ä¸è¬çãªèª¬æããããã¨ãä¾ãã°ãã§å ·ä½çãªè©±ãããæµãã¯ããããã¨æãï¼ããã§ä»®å®ãç½®ãã¨ãã« lets' say... ã便å©ã ã£ã
- for example, ã§ããããã ãã©ï¼æ°åçã«ã¯ for example ã§ãã·ãã¨åå¥ä¾ãåºãã¨ããããã¯ããå°ã軽ãï¼ä»®ã« xxx ã ã¨ãããï¼ãããªã¨ã㯠yyy ã«ãªããã ãï¼ã¨ããçããã¬ã¼ãºã®ä¾ç¤ºã«ä½¿ããããã®ããªã¨ããå°è±¡ãåãã
å¦æ ¡è±èªã§ç¿ã£ã¦ãã®ã¾ã¾å¿ãã¦ã isn't it? ã¿ãããªãå°»ã«ä»ãã質åæ, å®æ¦ã§ã¯ä¾¿å©
- çåæã«ãå¿ãã¦åãå§ãã¦ãã¾ã£ãã¨ãã«æå¾ã«ä»ããã°ä½è£ãæ´ã
- ææ³ç¨èªçã«ã¯ tag question ã¨ããããã
seriously? ã¯ã»ã¼ããã¸ã§?ãã¿ããã«ä½¿ãã
- seriouslyâ, seriouslyâ!? ãªã©ã¤ã³ããã¼ã·ã§ã³ã§ãã¥ã¢ã³ã¹ãå¤ããã¨ãããããã¸ã§ãã£ã½ã
- really? ãåæ§ã«ä½¿ãã模æ§
èãåããªãã£ãã sorry? ã§èãè¿ã
- ã»ãã¨å®æãããã©ããããªãã¨ãèãè¿ãã®è¶
大äºï¼ããããªãã®ã¯æ®éï¼
- ãäºãã«ä¸çºã§ã³ãã¥ãã±ã¼ã·ã§ã³ãéããªããã¨ãæ³å®ãã¦åãããã«ãã
- pardon? ã¯å¤±ç¤¼ã¨ãã話ãã©ããã§èãããå®éåããã§ã使ã£ã¦ã人ã¯è¦ãªãã£ãã®ã§, sorry (ããã㯠I'm sorry?) ä¸æ¬ã§èãè¿ãç¶ãã
- é度ãéãããã sorry, could you speak slowly? ã¨ãé¡ããã
- ç¹å®ã®åèªã ãèãåããªãã£ã (ãã¨ãã° it was caused by xxx, 㧠xxx ãèãåããªãã£ãã¨ãã) ã®ãªãï¼sorry, you said... it was caused by... what? ã¨ããããªãã¨ããã what ã§ç½®ãæãã¦çåæã½ãã¤ã³ããã¼ã·ã§ã³ã§èãè¿ãã°ä¼ãã£ã *1
- ã»ãã¨å®æãããã©ããããªãã¨ãèãè¿ãã®è¶
大äºï¼ããããªãã®ã¯æ®éï¼
è¨èã¨ãã¦ã¯èãåãããã©æå³ããã³ã¨ããªãã£ãæã¯
- what do you mean? ã¨ãï¼what do you mean is ... ã¨ãã¡ãã®è¨èã§è¨ãæãã¦ã¿ã
- I couldn't get what you said, ã®ãã¨ã«ããã£ã¦ã¤ã¾ããããããã¨? ã¨ç¶ããã®ã§ããã
- get ããç解ãããã¨ããæèã§ä½¿ããããã«ãªã£ã¦ãããã¯ãã«ã«ãªå 容ã話ãã®ãããã楽ã«ãªã£ã
- ãã¨ã¯ for example? ã§ããå°ãç´°ãã話ãèãåºã
ok, ok... ã§ç¸æ§ãæã¤ã®ããã¡ã
- ããããªãã§ãã·ã£ã¨åæãããã¨ã㯠"exactly"
- ä½ã許å¯ã¨ãåæãæ±ããããã¨ã㯠"sure"
- ã¨ããã§ã¤ã³ã人ã®ã¸ã§ã¹ãã£ã¼ã§æåæ··ä¹±ããã®ã é ãããããã¨ããï¼ä¸è¦ No ã«è¦ãã Yes ã§ï¼ä¼è©±ã®ä¸ã§ãããé ããããããã¦ãï¼åãå½±é¿ããã¦æå¾ã®æ¹ã¯ãããããã¦ãæ°ããã
"cool"
- ãã , ã¿ãããªçºé³ã§ç¸æ§ã«ä½¿ã£ã¦ããï¼ok, ãããä¼è©±ã®æµããçµããããå¾åãå¼·ã
- 女ã®åã¯ãã¾ã使ããªãã¿ããã ã£ã
è¬ç¾©ã®ä¸ã§ does it make sense? so far any question? ã¨ãã§è³ªåãå¼ãåºãã¦ã¿ã
- ããã¯å çå½¹ã§è¡ã£ãã®ã§ãã使ã£ããã¬ã¼ãº
- ã¨ã¯ããåºæ¬çã«ã¿ããªç©æ¥µçã«è¬ç¾©ä¸ã«å²ãè¾¼ãã§è³ªåãã¦ããã®ã§ï¼æ¥æ¬äººç¸æã¿ããã«è³ªåã¿ã¼ã¤ã ãè¨ããå¿ è¦ã¯ããã¾ãªãã£ã
-
- "Royal We" ã¨ããæ¦å¿µãè±ä¼è©±æ室 (å¾è¿°) ã§æãã¦ããã£ã¦ï¼å人çã«æ°ã«å ¥ã£ãã®ã§ We ãæèçã«ãã使ã£ãã¨ãã話
- I 㨠You ã§åããã«åãåé¡ã«åãçµã仲éã¨ã㦠"We" ã使ã
- ãã¼ã ã®ããã©ã¼ãã³ã¹ãä¸ããããã«ãããããããã¨è¯ãã¨æãï¼ã¨ããã¨ãã« "you" ã¨ã "your team" ã§ã¯ãªã "we" ã使ãï¼çãª
ã¤ã³ãã¯ãã³ãã£ã¼èªãå ¬ç¨èªã¨ãã¦å®ãããã¦ãããã®ã®ï¼å®éã¯å°æ¹ãã¨ã«ã¾ã£ããå¥ã®è¨èªãåã£ã¦ãã¦ï¼ãªãã£ã¹ã«å± ãã¨ã³ã¸ãã¢ãã¡ãããããã® home town language ãç°ãªãããã ï¼ããã§ã³ãã¥ãã±ã¼ã·ã§ã³ãåãããã«ã¯ bridge language ã¨ãã¦ã®è±èªã使ããããªãï¼ããããæå³ã§å½¼ãã«ã¨ã£ã¦ãè±èªã¯ã第äºå¤å½èªãã¨è¨ã£ã¦ããï¼ã¼ãã®ãããªå¤å½äººãè±èªã«ä¸æ £ããªã¨ãããè¦ãã¦ãé常ã«å¯å®¹ã ã£ããï¼ãäºãã®ãã¨ãç解ãããã¨ãã姿å¢ã¯ã¨ã¦ãåªããã£ãï¼ã¤ã³ãè±èªã¯çºé³ãç¬ç¹ã§ãã¤ãã£ã¡ãéãï¼ã¨ããè¨ããããå®éã«ã¤ã³ã人ã®éã§æ¬æ°ã§äº¤ããããè±èªã®ä¼è©±ã«ã¯ä»ãã¦ããã®ãé£ãããï¼ç¹ã« educated ãªäººã¯åºæ¬çã«ç解ãããããè±èªãåããã¹ãç¥ã£ã¦ããããã§*2ï¼åããã¡ãã£ã¨ãããããã¨ããåå¿ãããã¨ï¼æ¬¡ããã¯ã¨ã¦ãèãåããããåã£ã¦ãããï¼
ä¸æ¹ã§ Uber ã®ãã©ã¤ãã¼ã¨ããã¼ã«ã«ã®ãåºã®åºå¡ã¯ããããè±èªãªã®ããã³ãã£ã¼èªãªã®ãã¾ãå¥ã®è¨èªãªã®ãããããããï¼ãããã©ã¤ãã¼ã¯ãã¤ã¯ã¤ãã¦ã¦é»è©±ã®ç¸æã¨åããªããããããã«åã«è©±ãããã¦æ¥ãã®ã§è¾ãã£ã*3ï¼
ã¨ããã§ãæ¥æ¬ã£ã¦ããã¤è¨èªããããï¼ãã¨ãã質åã«æåã¯æ¸æã£ããï¼å½¼ãã¯åãå½ã®ä¸ã§ãéãè¨èãåãã®ãå½ããåãªã®ã ã¨æ°ãä»ãï¼ãã¿ããªæ¥æ¬èªä½¿ã£ã¦ããï¼æ¹è¨ (dialect) ã§ã¤ã³ããã¼ã·ã§ã³ã¨ãã¢ã¯ã»ã³ãã¯éããã©ï¼æ¸ãè¨èã¯ã©ãã§ãä¼ãããã¨çããã¨ãone country one language, ããã¯æé«ãããã¿ããã«æå¿ãã¦ããï¼
éå¤ãªè©±é¡
ãã¨æ¥æ¬ã«é¢ãã話é¡ã§é¢ç½ãã£ãã®ã¯
- ã¤ã®ãªã¹ã«ã¯ Queen ããããã©ï¼æ¥æ¬ã«ã King ãããããï¼ããã§ä»åº¦ Akihito è¾ãããã§ãã (ããç¥ã£ã¦ã)
- æ¥æ¬ã®å¦æ ¡ã§ã¯ãµã ã©ã¤ã»ã¯ã©ã¹ã«ã¼ã ãããã®ã? ãã³ã¸ã£ã»ã¯ã©ã¹ã«ã¼ã ã¯?
- å£éãªãææ¥ãããã©..
- ä¸ãã¿ã¯ä¸çå ±éï¼å¤©ä¸¼ãç¬ãã®æèã¨ãã¦å ±é
- å®æã®è©±ãããã¨ã«ã¸ã¥ã¢ã«ã«æ¯ãããã®ãã¡ãã£ã¨å°ã£ã
- åã¯å®æã¨ãããã¼ã èªä½å«æªãã¦ãã... ã¿ãããªè©±ã¯ãã¾ãé©åã¨ã¯è¨ããªãã®ã§ï¼æ¥æ¬ã§ã¯ä¸è¬çã«ï¼ã¨ãã話ããã¦ãè¶ãæ¿ã
- æ¥æ¬ã§ã¯éå´æ»ãã²ã©ãããããï¼åãããã人ãé端ã§æ»ãã§ãã®ã
- useful Japanese ã¨ã㦠"do-mo" ãæãï¼æ¥æ¬ã§ã¯ respect ã示ãããååã« "-san" ãä»ããã®ã ã¨ä¼ããçµæ "do-mo, Hashimoto-san" ã¨å¼ã³ãããããäºæ¡ãçºç
åºå¼µä»¥åã®è±ä¼è©±ã®ãåå¼·
åºæ¬çã«ãå¸ã«åº§ã£ã¦å°éã«ãã "ãåå¼·" ã大好ããªäººéãªã®ã§ï¼ãã®ç¹æ§ãå©ç¨ãã¦ï¼ç¾å ´ã«é£ã³è¾¼ã以åã«ãªãã¹ãããã©ã¼ãã³ã¹ãé«ãããã¨è©¦ã¿ãï¼ã²ã¨ã¤ã¯å°éç¥èã®ã¶ãã£ãã ãã£ã·ã¨ãã¬ã¼ãã³ã°è¨ç» *4 ã ãï¼è±èªåã¨ããé¢ã§ãä½ããã£ã¦ãããï¼ã¨èããï¼
- ãã¡ãã¨ãããã¸ãã¹è±ä¼è©±åãä»ããã¹ã Berlitz è±ä¼è©± ã§çæéä¸åè¬
- è±ä¼è©±æ室ãããã¤ãæ¯è¼ããçµæï¼Berlitz ã«æ±ºããï¼ãã³ãã¼ãã³ã§ãã£ããåããã¨ãåºæ¥ãã®ã¨ï¼"Berlitz Method" ã¨å¼ã°ããï¼é°å²æ°ã§ä¼è©±ãé²ããã«ææ³çã«æ£ããæãä½ãã¾ã§ãã¤ããç¹°ãè¿ãããããã¨ããã¹ãã«ã¿æ¹å¼ãæ°ã«å
¥ã£ã
- ãã¸ãã¹è±èªã¯å¿ è¦ãªãã¦é°å²æ°ã§ä¼è©±ã§ããã°è¯ãã®ãªãï¼å¾è¿°ã® DMM è±ä¼è©±ãã¡ããã©ããã¨æã
- Berlitz ã¯èèã ãããæ´å²ççµç·¯ãæãå»ãã¦ããªãã·ã¹ãã ãã¡ãã£ã¨éå¹çã ãã©ï¼å çãã«ã¦ã³ã»ã©ãã¨ã¦ãååçã§åã®äºæ ããã¼ãºã«åããã¦ã¹ã±ã¸ã¥ã¼ã«ãã«ã¹ã¿ãã¤ãºãã¦ããï¼å¿å°ããã¬ãã¹ã³ãåãããã¨ãåºæ¥ã
- Gaba ããã³ãã¼ãã³ã§ã³ã¹ãçã«ã¯ã»ã¼ Berlitz ã¨ä¸¦ãã§ããï¼ã·ã¹ãã çã«ã¯ãããæ´ç¤¼ããã¦ããã®ã ãï¼å¶æ¥ã®æ¼ãä»ããèã«åããªãã£ã *5 ã®ã¨ï¼å室ã§ã¯ãªãã¦é©å½ã«åºåããããã¼ã¹ã§ã¬ãã¹ã³ããã®ã§å¨ããæ°ã«ãªã£ã¦ã¤ãã¤ã
- ã·ã§ã¼ã³è±ä¼è©± ã®é°å²æ°ã¨ã³ã¹ãã¯ããã£ããã©ï¼åä¾å¡¾ã¿ãããªæãã§ï¼äººçã«ä½è£ã®ããã家åºãæé¤ã¨ãã¦ããã£ã½ããã£ãï¼ãã¨çæéä¸ã«ã¹ã¿ãã¤ãºã¨ãç¡çããã ã£ã
- è±ä¼è©±æ室ãããã¤ãæ¯è¼ããçµæï¼Berlitz ã«æ±ºããï¼ãã³ãã¼ãã³ã§ãã£ããåããã¨ãåºæ¥ãã®ã¨ï¼"Berlitz Method" ã¨å¼ã°ããï¼é°å²æ°ã§ä¼è©±ãé²ããã«ææ³çã«æ£ããæãä½ãã¾ã§ãã¤ããç¹°ãè¿ãããããã¨ããã¹ãã«ã¿æ¹å¼ãæ°ã«å
¥ã£ã
人çå»èª²éå¨ãªã®ã§æåãå¢å ´ã«ç´é, è±ä¼è©±çæéä¸ã³ã¼ã¹ãå¬åãããªã©ã®ãã¬ã¤ãè¡ã
— 俺ã®ãã¼ã ãåãã¦ã¿ã (@T_Hash) October 31, 2017
è±ä¼è©±ã®ãã£ã¼ãããã¯, èªå·±èªèãããè¯ãè©ä¾¡ã ã£ããã©ãéè«ã®ããã®è©±é¡ãç¨æãããã£ã¦è±èªé¢ä¿ãªããªãï¼è©±é¡æ§ã®ãªã人çã⦠pic.twitter.com/1AjqOgxi0n
— 俺ã®ãã¼ã ãåãã¦ã¿ã (@T_Hash) November 25, 2017
- 以åãã DMM è±ä¼è©± ãã¡ã¾ã¡ã¾ãã£ã¦ããï¼ãã®ãã¼ã¹ãä¸ãã¦ã¤ã³ãåºèº«ã®å
çã¨åãããã«ãã *6
- DMM è±ä¼è©±ãå§ããã®ã¯ä¸å¹´ååãããã«ãªãã ãããï¼ä»è¦ããè±ä¼è©±æéãã¡ããã© 2000 åã«ãªã£ã¦ã
- æ師ã®ãããã§ãã·ã§ãã«æã¨ãã¦ã¯ãã¯ã Berlitz ã«ã¯å£ãå°è±¡ã ãã©ï¼ããããªã¿ã¤ãã®äººã¨åãæ©ä¼ãå¾ãï¼ã¨ããæå³ã§ã¯ããªãã³ã¹ããããã¨æãï¼æ 5000 åãããã ã
- ãã ã¾ãåºå¼µã«è¡ã£ã¦è±èªã§ 1 é±éä»äºããã ãã§
8 * 60 * 5 = 2400
åä¼è©±ãåºæ¥ãã¨æãã¨ï¼æ¥ã ã®ã³ãã³ãï¼ããããç¥ãã¦ããã¨ããè¦æ¹ãã§ãã
- ãã©ãã©ã話ãããã®ç¬éè±ä½æãã¬ã¼ãã³ã°ãã§ä¸å¦çã¬ãã«ã®è±èªãç¬éçã«åºãããã«éãã
- æ§ã ãªè±èªå¦ç¿æ³ãæ¯ã¹ã¦ã¿ã¦ï¼ç¾å¨èªåã«æãé©å½ã¨æãããã®ã§è³¼å ¥
- æ¥æ¬èªã®åæããï¼è±æãç¬éçã«ä½ãå復ãã¬ã¼ãã³ã°ï¼èªã¿æ¸ãã¯ãããªãã«è¤éãªäºãã§ããã®ã«åãã«èªèº«ããªã.. ã¨ãã人ã«è¯ãããã ã£ãã®ã§
ã©ãã©ã話ãããã®ç¬éè±ä½æãã¬ã¼ãã³ã° (CD BOOK)
- ä½è : 森沢æ´ä»
- åºç社/ã¡ã¼ã«ã¼: ãã¬åºç
- çºå£²æ¥: 2006/10/25
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 80人 ã¯ãªãã¯: 383å
- ãã®ååãå«ãããã° (174件) ãè¦ã
ã¤ã³ãã§è ¹ãå£ããªãããã®ãã£ã N ãã®å´ããæ¹æ³
å ã«ã¤ã³ããçµé¨ããå 人ããè ¹ãå£ãã¦ããã®ãè¦ã¦ (åèªèº«ã 6 å¹´åã«ã¤ã³ãã訪ããéã¯ããããã®ã§)ï¼å½¼ãã®æè¦ãåãå ¥ããçµæï¼æå¾ã¾ã§ä½èª¿ãå´©ããå æ°ã«éãããã¨ãã§ããï¼ãã¤ã³ãã¯ä»¥ä¸:
- æ´è ¸å¤ (ã¤ã¯ã«ã BL æ´è ¸å¤, ä¸è¨ãªã³ã¯ãã) ãæ¯é£å¾é£²ã
- æ°´ã¯ãããããã«ã®æ°´ã ããæåãããã¨
- ã¸ã¥ã¼ã¹ãã«ã¯ãã«ã«å ¥ã£ã¦ãæ°·ã«æ°ãã¤ãã
- æ¯ç£¨ãããããããã«ã®æ°´ã§ããâ¦ã¨ãã話ãèãããåã¯ããã¾ã§ã¯ãããªãã£ãï¼æ®éã«æ°´éæ°´ã§æ¯ã磨ãããã¨ï¼æ°æã¡ãããããã«æ°´ã§ãããããããã
- å±å°ã®é£äºã¯é£ããªã
- 6 å¹´åã¯åãã§å±å°ã®ãã£ããã£ã¨ãã©ãã·ã¼ã¨ãé£ãã¾ãã£ã¦ã
- åãªãæ é¤æåã§äºè¶³ããé£äºã¯ COMP ã§æ¸ã¾ã
- ååã¨ã®ã©ã³ãããã£ãã¼ã¯æ®éã«é£ããï¼ä¸äººã®é£äºã§ã¯èãããããï¼ã¨ããæ¹é
- ã¤ã³ãï¼åºæ¬çã«ã¹ãã¤ã·ã¼ãªé£äºãããªãã®ã§ï¼ä¸é£ç¾å°é£ãé£ã£ã¦ãã¨æ¥æ¬äººã®èã¯å復æéã足ããªããã ã¨æã
ã¤ã¯ã«ãBLæ´è ¸è¬ 36å [æå®å»è¬é¨å¤å]
- åºç社/ã¡ã¼ã«ã¼: ã¤ã¯ã«ãæ¬ç¤¾
- ã¡ãã£ã¢: ãã«ã¹ã±ã¢&ã±ã¢ç¨å
- è³¼å ¥: 4人 ã¯ãªãã¯: 64å
- ãã®ååãå«ãããã°ãè¦ã
COMP飲ãï¼ https://t.co/7j4zipbQwI pic.twitter.com/m3XSUeoCza
— COMP.JP (@comp_official) March 11, 2017
ããã
æå¾ã«ï¼ãã®ã¾ã¾ã§ã¯å³æ°ãªãé£äºã«ãªããã¡ãª COMP ã飲ãéã®ã³ãã§ããï¼ä¸è¨ COMP ã¡ããã«é£²ã¾ãã¦ããã£ã¦ãã¨æãã¨ããã¿ãããæºè¶³æãä¸ããã¾ãï¼
*1:ææ³çã«ãããããªãæ°ã¯ãã
*2:é«çæè²ã®ææ¥ã¯è±èªã§è¡ãããã¨ããã®ãããããã
*3:ããæ¥æ¬èªã§ãè¾ãã¨æããã©
*4:ãªãã¤ã³ãã«çãã¦ããããããã¨æ°ããªè¦æãåºã¦ãã¦ï¼åã®è¨ç»ã¯å¤§åã¡ãã¶å°è¿ãã¨ãªã£ãï¼æ ã«æ¯æ©ã®ãã¬ã¼ãã³ã°è³æä½ãã«è¿½ãããããã§ãããã
*5:顧客ã®ããã§ã¯ãªãèªåãã¡ã®å©çã®ããã«å¥ç´ããããã¨ããå°è±¡ãåãããã
*6:ãã¾ãå± ãªãã£ããã©
ãªãä½ããªãã®ã§ã¯ãªãä½ããããã®ã
æ¸ããããã¨ããªãï¼æ¸ããããã¨ã¯ãããï¼ãããããã¹ãåã®ããã¼ã«è¼ãã¦ãããã¨ãåºæ¥ã¦ããªãï¼ã¨ããããã§ããã¯ç¡çç¢çã«æç« ãåºåãã試ã¿ã§ããï¼è»½ã 2000 åãç®å¦ã«ï¼
ä¸ã¤ã®ææ³ã®çã®çå½ã¯ï¼ææ³ãã¾ãã«è¨èã«ãªããã¨ããå°ç¹ã«éããã¾ã§æç¶ããã«ãããªãï¼ãã®å°ç¹ã§ææ³ã¯ç³ã¨åãï¼ãã®å¾ã¯çå½ã失ãï¼ã ãåç³åãã太å¤ã®åæ¤ç©ã®ããã«ãã®ææ³ã¯èå»ãå ããï¼æã ã¯ææ³ã®ã¤ãã®ã¾ã®çå½ãï¼ã¾ãã«çµæ¶ããã¨ããç¬éã®çµæ¶ä½ã®çå½ã«æ¯ãããã¨ãã§ããï¼
ä»äºã§ã¯ãã£ããã³ã¼ããæ¸ãæ©ä¼ãæ¸ãï¼èªç¶è¨èªãæ¸ãã¦ããï¼æè¡è·ã§ã¯ãããï¼ãããéå ·ã¨ããªããæ¥æ¬èªã¨è±èªãèªã¿æ¸ããã¦äººéã¨ç¤¾ä¼ããã£ã¦ããï¼è±èªã¯ãã£ã¨åããããã«ãªããããªï¼è«çã¨èªç¶è¨èªãè£ åãã¦æ£è«ã¨äºå®ã§æ®´ããã¨ã®ã§ããä»ã®ä»äºã¯æ¡å¤æ§ã«åã£ã¦ãã¨ã¯æããï¼ã³ã¼ããæ¸ãã¦ãã®ãä½ãç¶ãã¦ãã人ã¯ã»ãã¨ãã«å°æ¬ã«å¤ããï¼
ä»äºã楽ããã®ã§ããã¨ç¤¾çã£ã½ãåãæ¹ããã¦ãããï¼IT æ¥çã®éã¿ãããªè¾ã話ããªãè·å ´ã§å¾ éçã«ãããªãæµã¾ãã¦ããã¨ã¯æãï¼ç¾ä¸ã«æ¥½åã¯åå¨ããªããã§å«ãªãã¨ããããç·ãã¦ãªï¼ææ測å®ã®é£ãããã¨ããã£ã¦ããã®ã§ï¼çµ¦æåã¯ãã¼ã ã®å½¹ã«ç«ã£ã¦ãããã¨ãé¡ãï¼
å¦çæ代ããå¾æã¨ãã絨毯çæçãªå¦ç¿ãæ¥å¸¸æ¥åã«æ´»ç¨ããæ¹æ³ãèªåã®ä¸ã§ãããã確ç«ã§ãã¦ããæ°ãããï¼ãã®æ¹æ³ã人éçãã£ã¦ããã®ç¬çºçé£ã³éå ·ã¨çµã¿åããï¼ããã¤ãããã£ã©ãªææãå¾ããã¨ãåºæ¥ãï¼1000 ãã¼ã¸ããããã¥ã¡ã³ããçã£ç«¯ããèªãã§ãã£ãããã人éã¯å°ãªãï¼ç¥èç²å¾ãã®ãã®ã«ã¢ããã¼ã·ã§ã³ãæãã¦ç¶ç¶ã§ããã¨ããã®ã¯ç¤¾ä¼å ¨ä½ããè¦ãã¨ã¬ã¢ãªæ¹ã®æ°è³ªã§ããããã (ã¨ã³ã¸ãã¢è·ã¯ããããæ°è³ªããã¨å¤ããããªæ°ããããã©)ï¼ã¨ãããï¼ããããåå·çãªå§¿å¢ã¯ä½¿ãããã«ãã£ã¦ã¯ç¤¾ä¼ã§ãå½¹ã«ç«ã¤ãããï¼é¢ãåºã¦å°±è·ããã°ããã®åã«èããã¦ããããå¸æã®ãã話ã§ããï¼ãããæ²¹æã¯ã§ããªãï¼ãã®ä¸ã«æ æ²ã¯ãªãåèªä½ã«ä¾¡å¤ã¯ãªãæ²¹æãããç¬éã«æ»ã¬ãã¨ã¯ç¢ºå®çã«æããã§ããï¼
æã¨å¤ã«100åãã¤ããã®ä¸ã«æ æ²ã¯ãªããã俺ã«ä¾¡å¤ã¯ãªãããã¿ããªæ®ºããã¨å±ãããã¨ã§äººçããããªã
— 俺ã®ãã¼ã ãåãã¦ã¿ã (@T_Hash) 19 December 2014
ãã¡ããåå·çãªã ãã§ã¯ç¤¾ä¼ããã£ã¦ãããã¨ãåºæ¥ãªãããï¼äººéã¨ã®ã³ãã¥ãã±ã¼ã·ã§ã³ã«ããã¦ã¯åºæ¬çãªè«çã使ã£ã¦ä¸å¯§ã«äºå®ãæ´çãã¦ã¿ãï¼æ´çããè«çãè¨èã«è½ã¨ãè¾¼ãã§ç解ã®ãã¤ã³ããããåããããã¨è©¦ã¿ãï¼ãããã人éã®é è³ã¯åºç¤çãªè«ç (ã¨ãã«å æé¢ä¿) ãã©ãããã©ã¼ã ã«ä¹ããããããã«ã¯æãï¼
ã¤ãå æ¥ ãç°ä¸çãããããè«æãå·¡ã£ã¦ï¼ æææ°ä¸ã«ãããABCäºæ³ãã®è¨¼æã¨ãæ°å¦çã®æ¦ã « WIRED.jp ãªãã¦è¨äºãèªãã ãããã¦ï¼"人éã®é è³ã®ç¨åº¦ãã ãããå ¨é¨åãããã" ã¨ã¯ã¨ã¦ã主張ã§ããªãã®ã ãã©ï¼åãã§ãããã¨ãªã天æã«ãªãããã£ãï¼å ã ãã®ãã¨ã®ç解åãæ ¼å¥åªãã¦ããããã§ããªãï¼ãããã¨ãã§ããªãåºç¤çã§èª°ãè¦åãããªããããªå ´æã®ç³ããã«èºãã¦ãã¤ã¾ã§ãããã§éæ¹ã«ããã¦ãããããªé è³ã§ãããªãï¼
é話ä¼é¡ï¼
ãçå½ã»ã¨ãã«ã®ã¼ã»é²åã
çªç¶ã§ããæè¿èªãã§ããã£ãæ¬ã®ç´¹ä»ã§ãï¼
ããã¯ã»ã¬ã¼ã³ã«ãããçå½ã»ã¨ãã«ã®ã¼ã»é²åãã¨ããæ¬ã§ï¼åé¡ã¯ “THE VITAL QUESTION – Why Is Life the Way It Is?"ï¼èè ããã¤ã¦ãããã³ã³ããªã¢ãé²åã決ãããã§å±éããè«ãããã«å ã¸é²ãããã®ï¼ã£ã½ãï¼ããæ±ç¨æ§ã®é«ãèªãå£ã¨ã㦠"é²åã«ã¯å®ã¯ï¼çå½ã®ãããã¦æ ¹æ¬çãªç¹æ§ã®ä¸é¨ã第ä¸åçããäºæ¸¬ã§ããããã«ããå¼·ãå¶ç´ – ã¨ãã«ã®ã¼ã®å¶ç´ – ãããã¨ããã㨔 ã主張ããï¼
ã¨ãã«ãã®å¶ç´ãé¡èã«æããããã®ã¯æã çæ ¸çç©ã¨ãã “ç°ç«¯” ã«ããã¦ã§ããï¼ç´°èãå¤ç´°èãï¼ãã®åå¦ã»éºä¼çç¹æ§ã®å¹ã£é£ã³æ¹ããã¯èããããªãã»ã©ï¼è¦ãç®ã«ã¯ã»ã¨ãã©åãã§ããï¼ “ã¾ãã§ããã«å å¨ããç©ççå¶ç´ãåæ ¸çç©ãè¤éãªå½¢æ ã«é²åã§ããªããã¦ãããã®ããã§ï¼ãã®å¶ç´ã¯ãªããçæ ¸çç©ã®é²åã§ã¯è§£ãããã®ã§ãã” (p.57) … ããããè¬ãæèµ·ããªããè«ãããããæ¬æ¸ã¯ãã種æ¨çå°èª¬çã¨ãããï¼è¬è§£ãã®æ¥½ãããä¸ãã¦ãããï¼ã¾ãè¬è§£ãã¨ãããèè ã«å°ããã¦"è¬ã®è§£ããã¦ãã" ãè¦ããã¨ã«ãªãããã ãï¼ãããã¸ãã®äºæ ã¯æ¨çå°èª¬ã§ããã»ã©å¤ããã¾ãï¼
ãçå½ãã¨ãã«ã®ã¼ãé²åãèªã¿ã¯ããããã©ããã¯ä¹ ã ã«ç±ãæ¬ã ãªâ¦ çãã¦ãããã¨ã¨ã¯ç©¶æ¥µçã«ã¯ãããã³åå¿ã§ããçãªè¦ç¹ãã, çå½ã®èµ·æºããå¤ç´°èã¨ç´°èã®åå²ãããèªãã£ã½ã pic.twitter.com/e2TOFms5dS
— 俺ã®ãã¼ã ãåãã¦ã¿ã (@T_Hash) 24 December 2016
å æå¿ããã¦æ¢ã¾ã£ã¦ããçå½ãã¨ãã«ã®ã¼ãé²åãããããèªäº. çæ ¸çç©ã®ç¹ç°ãããè¤éãªãçç©æ©è½ã®é²åçæ義ãçåå¦ã»ã¨ãã«ã®ã¼è¦³ç¹ãã説æãããã¨ãã¦ãã¦ãã£ã¡ãé¢ç½ã. æçåå¦ããå ¥ã£ã¦ã¿ã³ãã¯è³ªæ§é å¤å ÎG ã¨ããã£ã¦ãã®ã§ç¹ã«æ¥½ããã
— 俺ã®ãã¼ã ãåãã¦ã¿ã (@T_Hash) 4 February 2017
çå½ (life) ã¨ã¯ä½ãï¼ã§ã¯ãªãï¼çãã¦ãã (living) ã¨ã¯ä½ãªã®ãï¼çåå¦çã®å¦çã§ãã£ããã¨ãããå®ã«æ¥½ããèªæ¸ä½é¨ã§ãã£ãã¨è¨ããï¼
ã²ãããã®
ä»äºã¨çæ´»ã«ããç¨åº¦ã®å®å®æãåºã¦ããã¨ï¼ãã®å ã©ãããã¨ããæèãä»æãæ°´ã®åºããæµ®ãã³ä¸ãã£ã¦ããï¼ãã¾ã°ã°ã£ã¦ç¥ã£ããã©ä»æãæ°´ã®åºããã£ã¦ããã³ã³ã«ãªã£ã¦ãã®ãé ããããï¼äººçã§ãããããã¨ã¯ãããããããï¼åã¯æ¬å½ã«äººçã®é²æãé ãé åãã°ããã§ï¼ããããã¨ä½ãã®å¨ããæ©ãç¶ãã以å¤ã«ããã¨ãã£ãåå¨ã®ä½¿ãæ¹ããã¦ããªãããã«æãããï¼
ãããã¦ããããã¨æ©ãã¦ãããã¡ã«ããç¨åº¦ã¯èº«ã®ç¨ãç¥ã£ã¦ãã¾ãï¼èªèº«ã®ç¡è½ã¨ç¾å®ã®ç¾å®ããç¾å®ã«æã¡ã²ãããã¦ãããã¡ã«ããããåã£ã¦ããã¨ãã¯è¦ãã¦ããã¯ãã®ãã®ããã¤ã®ã¾ã«ãã²ã©ãã¼ãããã¨ãã¦æ¥ã¦ï¼è¦çä¸è¯ã¨å¹¸ç¦ã®å®ç¾©ã«æ©ã¿ãªããæ°ããç«è¬ãææã«å ããã¹ãå¨åã«ã¼ããå¤ãã¦ãã¦ã©ãªãçãã¦ãã以å¤ã«ä½ã
ããã¯ã¼ãã®æãããã æªããã¨ã°ããæãã¤ã ãã¤ãã®æ¥ææ¥ã®åå¾
– ã¹ã¬ã·ã«ãªãæ¥ææ¥ã®åå¾ã
Spark on EMR 㧠1000 Genomes Project ã®ãã¼ã¿ã触ã
ãªãããããã§å¹´å§ããè¨äºæ¸ãã¦ãªãã§ãã, å¤é¨è¦å ããªãã¨ããã°ãæ¸ããªãããã«ãªã£ã¦ãã. "Distributed computing (Apache Hadoop, Spark, ...) Advent Calendar 2016" ã® 12/11 æ å½ã¨ãã¦ä½ããæ¸ãã¾ã.
1000 Genomes Project public data set on S3
AWS S3 ã«ã¯ç¡é ä½ã«ããããªã³ã£ããªã§ã¼ããç½®ãã¦ãã,
ãã®ä¸ã« 1000 Genomes Project ã®ãã¼ã¿ãããã¾ã: 1000 Genomes Project and AWS.
1000 Genomes Project ã«ã¤ãã¦ã¯å ¬å¼ãã¼ã¸ 1000 Genomes | A Deep Catalog of Human Genetic Variation ãªã©ãåç §ãã¦é ããã°ã¨æãã¾ãã, è¤æ°æ°æãã½ã¼ã¹ã¨ãã¦å¿åã® 1000 人以ä¸ã®ã²ãã é åã決å®ããã, ã¨ããããã¸ã§ã¯ãã§æ¢ã«å®äºãã¦ãã¾ã. ãªã㧠1000 人ãè¦ããã£ã¦è¨ãã¨ããã®ã¿ãªããçç©ã£ã¦ã®ã¯åã種ã§ãåä½ãã¨ã«å¾®å¦ã«ã²ãã é åã«å·®ããã£ã¦ãã®å·®ããããã "ä½è³ª" ã¨ã "ç æ°ã®ãããããã" çãªå·®ãçã¿åºãã¦ããããã§, ããã®æ¨æºçãªã²ãã ã¯ä½ãªã®ã, ã¨ãããã¨ãç¥ãæå³ã§ãããç¨åº¦ã® N ãå¿ è¦ã ããã§ã. ã¨ããã, ãã®ãã¼ã¿ã¯å¿ååãããä¸ã§å ¬éããã¦ãã, S3 ä¸ã«ãä¸ãã£ã¦ããã¨ããããã§ã.
aws cli ã使ãããªã以ä¸ã®ã³ãã³ãã§ããã¢ã¯ã»ã¹ã§ãã¾ã.
$ aws s3 ls s3://1000genomes PRE alignment_indices/ PRE changelog_details/ PRE complete_genomics_indices/ PRE data/ PRE hgsv_sv_discovery/ PRE phase1/ PRE phase3/ PRE pilot_data/ PRE release/ PRE sequence_indices/ PRE technical/ 2015-09-09 06:16:09 1663 20131219.populations.tsv 2015-09-09 06:17:01 97 20131219.superpopulations.tsv 2015-09-09 00:01:44 257098 CHANGELOG 2014-09-03 00:39:53 15977 README.alignment_data 2014-01-30 20:13:29 5289 README.analysis_history 2014-01-31 12:44:08 5967 README.complete_genomics_data 2014-08-29 09:22:38 563 README.crams 2013-08-07 01:11:58 935 README.ebi_aspera_info 2013-08-07 01:11:58 8408 README.ftp_structure 2014-09-03 06:19:43 2082 README.pilot_data 2014-09-03 21:33:15 1938 README.populations 2013-08-07 01:11:58 7857 README.sequence_data 2015-06-19 03:28:31 672 README_missing_files_20150612 2015-06-04 04:43:32 136 README_phase3_alignments_sequence_20150526 2015-06-19 01:34:45 273 README_phase3_data_move_20150612 2014-09-03 21:34:30 3579471 alignment.index 2014-09-03 21:32:59 54743580 analysis.sequence.index 2014-09-03 21:34:57 3549051 exome.alignment.index 2014-09-03 21:35:15 67069489 sequence.index
Adam
ä»å㯠s3://1000genomes/release/
é
ä¸ã®å¤åãã¼ã¿ã使ãã¾ãã, ãã㯠Variant Call Format (VCF) ã¨ããå½¢å¼ã§ä¿åããã¦ãããã®ã¾ã¾ã§ã¯ Spark ã§æ±ããã¨ãåºæ¥ã¾ãã. ããã§ãã¨ã·ã§ãªãå¿
è¦ã«ãªã£ã¦ããã®ã§ãã, Spark ã§ã²ãã ãã¼ã¿è§£æãããé㯠Adam ã¨ããããã±ã¼ã¸ãããã¡ã¯ãã¹ã¿ã³ãã¼ãã£ã½ããªã£ã¦ããã®ã§, 以ä¸ããã使ã£ã¦ Parquet ãã¡ã¤ã« (ç¸å½) ã«å¤æãã¾ã.
EMR ã¯ã©ã¹ã¿ (Release label: emr-5.1.0 *1 ) ãç«ã¦, Adam ããã«ããã¾ã. maven, sbt ã¯é©å½ã«å
¥ãã¦ãããã®ã¨ãã¾ã. EMR 5.1.0 㯠Spark 2.0.1 ããã³ãã«ããã¦ãã Scala ã®ãã¼ã¸ã§ã³ã¯ 2.11.8 ãªã®ã§, ./scripts/
é
ä¸ã®é©åãªã¹ã¯ãªãããæµã.
$ git clone https://github.com/bigdatagenomics/adam.git ~/adam $ cd !$ $ ./scripts/move_to_scala_2.11.sh $ ./scripts/move_to_spark_2.sh $ MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m" mvn clean package -DskipTests
ã¢ãããã«ããããã¨, spark-shell, spark-submit ãæ¡å¼µãã adam-shell, adam-submit ãªãã³ãã³ãã使ããããã«ãªãã¾ã.
[hadoop@ip-172-31-12-100 adam]$ ./bin/adam-shell Using SPARK_SHELL=/usr/bin/spark-shell Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). 16/12/11 13:57:32 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME. 16/12/11 13:57:41 WARN SparkContext: Use an existing SparkContext, some configuration may not take effect. Spark context Web UI available at http://172.31.12.100:4040 Spark context available as 'sc' (master = yarn, app id = application_1479477268424_0036). Spark session available as 'spark'. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 2.0.1 /_/ Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_111) Type in expressions to have them evaluated. Type :help for more information. scala>
VCF to "Adam Format" (Parquet ã«æ¯ã®çãããã©ã¼ããã)
adam-submit ã®ãµãã³ãã³ãã« vcf2adam
ã¨ãããã®ããã, ãããåã¾ãããã¨ã§ VCF ãã¡ã¤ã«ã ADAM Format ã«å¤æãã¾ã. å¤æå
ã«å
è¿°ã® S3 1000genomes ãã±ãããæå®ã, åºåå
ã¨ãã¦èªåã®ææã¡ã®ãã±ãããæå®ããæãã§ã. ã²ãã ãã¼ã¿ã¯æè²ä½åä½ã§åããã¦è¨é²ããã¦ããã®ã§, ã¨ããããããªã½ãã¼ã«ãªãã¨ãã¦ã³çãçºçãã 21 çªæè²ä½ãé¸ãã§å¤æãã¦ã¿ããã¨æãã¾ãã, ã¾ãã¯æå
ã«è½ã¨ãã¦, å°ã VCF ãã¡ã¤ã«ãè¦ãã¦ã¿ã¾ã.
$ aws s3 cp s3://1000genomes/release/20130502/ALL.chr21.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz /home/hadoop/ // åé é¨å $ zcat ~/ALL.chr21.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz | head -n 6 ##fileformat=VCFv4.1 ##FILTER=<ID=PASS,Description="All filters passed"> ##fileDate=20150218 ##reference=ftp://ftp.1000genomes.ebi.ac.uk//vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz ##source=1000GenomesPhase3Pipeline ##contig=<ID=1,assembly=b37,length=249250621> // è¡ãæ¥ããªããæ¢ããã¨ãã 253 è¡ç®ããããã¼ã®æ¨¡æ§. $ zcat ~/ALL.chr21.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz | head -n 253 | tail -n 1 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG00096 HG00097 HG00099 HG00100 HG00101 HG00102 HG00103 HG00105 HG00106 HG00107 HG00108 HG00109 HG00110 HG00111 HG00112 HG00113 HG00114 HG00115 HG00116 HG00117 HG00118 ... (çç¥ // ãã¼ã¿ã®ä¸èº«. $ zcat ~/ALL.chr21.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz | head -n 1000 | tail -n 1 | head -c 200 21 9440889 rs574517239 A C 100 PASS AC=1;AF=0.000199681;AN=5008;NS=2504;DP=13457;EAS_AF=0;AMR_AF=0;AFR_AF=0.0008;EUR_AF=0;SAS_AF=0;AA=.|||;VT=SNP GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 ... (çç¥
ã§ã¯, adam-submit å©ãã¾ã. adam-submit ã³ãã³ã㯠spark ç¨ã®ãªãã·ã§ã³ã¨ adam ãªãã·ã§ã³ã®éã« --
ãå
¥ããå¿
è¦ãããã¾ã. ã¡ãã£ã¨ãããã¾ãã.
$ ./bin/adam-submit \ --deploy-mode cluster \ --master yarn \ --num-executors 10 \ --executor-memory 20G \ -- \ vcf2adam \ s3://1000genomes/release/20130502/ALL.chr21.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz \ s3://hash-genome-work/chr21.v5/
è¡ãã¾ããã. ã³ã¢ãã¼ã 2 å°ã§ãã£ã¦ãã¾ããã, ãã®è¾ºã§å¦çãé ããã¨ã«æ°ãä»ãéã§æ®´ãã¹ã m3.2xlarge x 10 å°ã«å¢è¨ãã¦ãã¾ã. ãã®ã¹ããã¯ã§ 21 çªæè²ä½ã® VCF ã® Adam ãã©ã¼ãããå¤æå¦çã«è¦ããæéã 1.5hr ç¨åº¦ã§ãã.
çµæ.
$ aws s3 ls --recursive s3://hash-genome-work/chr21.v5 2016-12-12 02:39:55 0 chr21.v5/_SUCCESS 2016-12-12 02:39:56 11895 chr21.v5/_common_metadata 2016-12-12 02:39:56 5548 chr21.v5/_header 2016-12-12 02:39:56 29687 chr21.v5/_metadata 2016-12-12 02:39:56 28835 chr21.v5/_samples.avro 2016-12-12 02:39:56 3466 chr21.v5/_seqdict.avro 2016-12-12 02:39:47 119661147 chr21.v5/part-r-00000.gz.parquet 2016-12-12 02:39:50 117920329 chr21.v5/part-r-00001.gz.parquet 2016-12-12 02:39:52 117938957 chr21.v5/part-r-00002.gz.parquet 2016-12-12 02:39:54 24165424 chr21.v5/part-r-00003.gz.parquet 2016-12-12 01:08:37 0 chr21.v5_$folder$
Parquet åãããå¤åãã¼ã¿ã adam-shell ããåç §
adam-shell ã§è²ã è¦ã¦ã¿ããã®ã§ãã, AdamContext ã 㨠S3 ããã¯ç´æ¥ãã¼ããåºæ¥ã HDFS ã«ç½®ãå¿ è¦ãããã£ã½ãã®ã§å ã« HDFS ã«æ¸ãåºãã¾ã.
$ aws s3 cp --recursive s3://hash-genome-work/chr21.v5 /home/hadoop/chr21.parquet $ hadoop fs -mkdir /user/hadoop/ch21 $ hadoop fs -put /home/hadoop/chr21.parquet/*.parquet /user/hadoop/ch21/ $ hadoop fs -ls /user/hadoop/ Found 2 items drwxr-xr-x - hadoop hadoop 0 2016-12-11 19:18 /user/hadoop/.sparkStaging drwxr-xr-x - hadoop hadoop 0 2016-12-11 19:35 /user/hadoop/ch21 $ hadoop fs -ls /user/hadoop/ch21/ Found 4 items -rw-r--r-- 3 hadoop hadoop 119661147 2016-12-11 19:35 /user/hadoop/ch21/part-r-00000.gz.parquet -rw-r--r-- 3 hadoop hadoop 117920329 2016-12-11 19:35 /user/hadoop/ch21/part-r-00001.gz.parquet -rw-r--r-- 3 hadoop hadoop 117938957 2016-12-11 19:35 /user/hadoop/ch21/part-r-00002.gz.parquet -rw-r--r-- 3 hadoop hadoop 24165424 2016-12-11 19:35 /user/hadoop/ch21/part-r-00003.gz.parquet
ãã¦, ãããã Adam Shell ãããã¼ã¿ãèªãããã§ã.
$ ./bin/adam-shell scala> val data = spark.read.parquet("/user/hadoop/ch21/*.parquet") data: org.apache.spark.sql.DataFrame = [variant: struct<contigName: string, start: bigint ... 8 more fields>, contigName: string ... 20 more fields] scala> data.count res13: Long = 2785018912
ç´ 27.8 åã¬ã³ã¼ãã¨, 21 çªæè²ä½ã® variant ã ãã§ãã£ãããªãã¼ã¿é. ã¹ãã¼ãè¦ã¦ã¿ã¾ã.
scala> data.first res14: org.apache.spark.sql.Row = [[null,null,null,WrappedArray(rs559462325),G,A,true,true,WrappedArray(),false],21,9411238,9411239,[true,true,WrappedArray(),null,null,null,null,null,null,null,WrappedArray(),WrappedArray(),null,null,Map()],HG00096,null,null,WrappedArray(REF, REF),null,null,null,null,null,null,WrappedArray(),WrappedArray(),WrappedArray(),false,true,null,null] scala> data.printSchema root |-- variant: struct (nullable = true) | |-- contigName: string (nullable = true) | |-- start: long (nullable = true) | |-- end: long (nullable = true) | |-- names: array (nullable = true) | | |-- element: string (containsNull = true) | |-- referenceAllele: string (nullable = true) | |-- alternateAllele: string (nullable = true) | |-- filtersApplied: boolean (nullable = true) | |-- filtersPassed: boolean (nullable = true) | |-- filtersFailed: array (nullable = true) | | |-- element: string (containsNull = true) | |-- somatic: boolean (nullable = true) |-- contigName: string (nullable = true) |-- start: long (nullable = true) |-- end: long (nullable = true) |-- variantCallingAnnotations: struct (nullable = true) | |-- filtersApplied: boolean (nullable = true) | |-- filtersPassed: boolean (nullable = true) | |-- filtersFailed: array (nullable = true) | | |-- element: string (containsNull = true) | |-- downsampled: boolean (nullable = true) | |-- baseQRankSum: float (nullable = true) | |-- fisherStrandBiasPValue: float (nullable = true) | |-- rmsMapQ: float (nullable = true) | |-- mapq0Reads: integer (nullable = true) | |-- mqRankSum: float (nullable = true) | |-- readPositionRankSum: float (nullable = true) | |-- genotypePriors: array (nullable = true) | | |-- element: float (containsNull = true) | |-- genotypePosteriors: array (nullable = true) | | |-- element: float (containsNull = true) | |-- vqslod: float (nullable = true) | |-- culprit: string (nullable = true) | |-- attributes: map (nullable = true) | | |-- key: string | | |-- value: string (valueContainsNull = true) |-- sampleId: string (nullable = true) |-- sampleDescription: string (nullable = true) |-- processingDescription: string (nullable = true) |-- alleles: array (nullable = true) | |-- element: string (containsNull = true) |-- expectedAlleleDosage: float (nullable = true) |-- referenceReadDepth: integer (nullable = true) |-- alternateReadDepth: integer (nullable = true) |-- readDepth: integer (nullable = true) |-- minReadDepth: integer (nullable = true) |-- genotypeQuality: integer (nullable = true) |-- genotypeLikelihoods: array (nullable = true) | |-- element: float (containsNull = true) |-- nonReferenceLikelihoods: array (nullable = true) | |-- element: float (containsNull = true) |-- strandBiasComponents: array (nullable = true) | |-- element: integer (containsNull = true) |-- splitFromMultiAllelic: boolean (nullable = true) |-- phased: boolean (nullable = true) |-- phaseSetId: integer (nullable = true) |-- phaseQuality: integer (nullable = true)
ãã. ããã¤ãåã£ã¦ã¿ã¾ã.
scala> data.first.get(1) // contigName. ãã®ãã¼ã¿ã§ã¯æè²ä½çªå·ãå ¥ã£ã¦ãã®ã§ 21 res15: Any = 21 scala> data.first.get(0) res17: Any = [null,null,null,WrappedArray(rs559462325),G,A,true,true,WrappedArray(),false] // variant ã®æ å ±. referenceAllele = G 㧠alternateAllele = A ãªã®ã§, // ãªãã¡ã¬ã³ã¹é åã§ã¯ G ã®ã¨ããã A ã«ãªã£ã¦ãå¤ç°ã®ã¬ã³ã¼ã, ã¨ãããã¨ã«ãªã scala> data.first.get(5) res21: Any = HG00096 // sampleId.
sampleId HG00096 ã«ã¤ãã¦å°ã調ã¹ã¦ã¿ãã¨, å¹´é½¢ä¸è©³ã¤ã®ãªã¹äººç·æ§ã® B ç´°èãããµã³ããªã³ã°ããããã®ã§ãããã¨ãããã.
ãªã«ãé¢ç½ã解æãåºæ¥ãã¨ããã£ãã®ã ãã©ã±ã£ã¨æãã¤ããªãã£ãã®ã§ä¸æ¦ããã¾ã§ã§å ¬é. ä½ãæãã¤ããã追è¨ãããã.
ã¨ããããä¸çºã§ã¢ã¯ã»ã¹å¯è½ãªå ´æ (S3) ã«ä¸ççãªç§å¦ç 究ã®ææã転ãã£ã¦ãã¦, ãã¼ã¿ã使ã£ã¦ããããå¼ããå½¢ã¾ã§æã£ã¦è¡ãã®ã¯æ¡å¤ç°¡åã§ãã, ã¨ããããããä¼ããã°å¹¸ãã§ã.
*1:ææ°ç㯠EMR 5.2.0 ã§ããæå ã«ç«ã£ã¦ãã®ã 5.1.0 ã ã£ãã®ã§...
ã«ã¬ã¼ã¯ãã¦ã¹ã®ç®±è£ã¬ã·ããè³é«
ã«ã¬ã¼ãä½ã£ãï¼
çãããçãã¾ã
ãã¼ã¡ããåã£ã¦ä¸ç·ã«
親ã®ä»ã®ããã«é£´è²ã«ãªãã¾ã§çãã¾ãï¼ããå ·åã«ãªã£ããéèãã¡ãåãåºãã¦ãã£ã¨éãæ´ã£ããããããã«
èã
å¼·ç«ã§ç¼ã
éèãã¡ãæ»ãã¦ã¢ã¹ãã©ã¨ãã¨ä¸ç·ã« 1L ã®æ°´ã§ç ®è¾¼ã¿ã¾ãï¼æ²¸é¨°ãã¦ãã 15 åï¼
è¨èã¨ç©â人æç§å¦ã®èå¤å¦
- ä½è : ãã·ã§ã«ã»ãã¼ã³ã¼,Michel Foucault,渡辺ä¸æ°,ä½ã æ¨æ
- åºç社/ã¡ã¼ã«ã¼: æ°æ½®ç¤¾
- çºå£²æ¥: 1974/06/07
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 5人 ã¯ãªãã¯: 55å
- ãã®ååãå«ãããã° (158件) ãè¦ã
ãã¼ã³ã¼ãè¨èã¨ç©ããèªã¿ãªããç°æ±ãæ¬ãï¼å¾ ã¡ã¾ãï¼
å ·æãã¡ãã£ã¨ã¨ãã£ã¨ãã¦æ¥ããã«ã¼ãæå ¥ï¼å人çãªãã¹ãã¯ãã¦ã¹ã®ãããã¾ã ä¸è¾ãã¨ãã¸ã£ã¯ã«ã¬ã¼ è¾å£ãã®çµã¿åããã§ãï¼
ãã¦ã¹ ããã¾ãã«ã¬ã¼ä¸è¾ 140gÃ3å
- åºç社/ã¡ã¼ã«ã¼: ãã¦ã¹é£å
- ã¡ãã£ã¢: é£å&飲æ
- ãã®ååãå«ãããã°ãè¦ã
ãã¦ã¹ ã¸ã£ã¯ã«ã¬ã¼ è¾å£ 185g
- åºç社/ã¡ã¼ã«ã¼: ãã¦ã¹é£å
- ã¡ãã£ã¢: ãã®ä»
- ãã®ååãå«ãããã°ãè¦ã
å¼±ç«ã§10åã³ãã³ããããï¼çããã¦ã飯ã«ããã¾ã
以ä¸ï¼ããã°ãããããã°ãæ¸ãã¦ã¿ããã£ãï¼ãªãã¯ãªãï¼
åãå¯ããæ¬ãå±ããã DynamoDB Stream ãå ã« Lambda çµç±ã§ Twitter ã«éç¥ããã
人éã¯å³æ¸é¤¨ãæ´»ç¨ãããã¨ã§ä½æ°ç¨ã®å ãåããã¨ãåºæ¥ãï¼åãå¯ãä¾é ¼ããæ¬ãå±ãããåãã¦ãæ¬ã®è¿å´æéãè¿ä»ããããã㨠Twitter bot ãéç¥ãã¦ãããããã«ãã¦ããï¼ãï¼åç´ã« cron ã§åãã¦ããã®ã§äººéå´ã®å¯¾å¿ãé ããã¨ä½åº¦ãåããã¨ãè¨ããã¦ãã¾ãï¼
ä»åãä»å¹´ããããï¼AWS Lambdaç¸ã Advent Calendar 2015 - Qiitaãã® 12/05 åæ å½ã¨ãã¦ï¼ä¸è¨ã®ä»çµã¿ãDynamoDB ã®æ´æ° Stream ãã¤ãã³ãã½ã¼ã¹ã¨ã㦠Lambda ã§ä¸åã ãéç¥ãã¦ãããããã«æ¹è¯ãã話ãæ¸ãï¼
åæ
å³æ¸é¤¨ã® web ãã¹ã¯ã¬ã¤ãã³ã°ã㦠DynamoDB ã«æ ¼ç´ãã... ã¨ãã㯠Lambda Advent Calendar ã¨ãã¦ã¯æ¬é¡ã§ã¯ãªãã®ã§çç¥*1ï¼
ãã¡ã®å°åºã¯ãããªæãã®ãã¼ã¸ï¼ã¨ãããã人éã
- æ¬ã®åãå¯ãä¾é ¼(äºç´)ãããã¨ã
- åãå¯ããæ¬ãå±ããæ
- æ¬ãåããæ
- æ¬ãè¿ããæ
ã¨ãã£ãè¡åãããéã«ï¼æ¥ä»ï¼æ¸ç± ISBNï¼è¡åã¿ã¤ãã以ä¸ã®æ§ãªå½¢å¼ã§ DynamoDB ã«æ ¼ç´ãããæ©è½ãå®è£ æ¸ã¨ãèããã ããï¼
{ "date": "2015-12-02", "hashed_title": "7f550dd47d40ea31eb84c092dbcdd2f66ff960db", "isbn": "9784000236218", "type": "borrow", "uuid": "b946c18b-0aa9-45fc-938e-be5b52d1fc33" }
ãªãæ¸ç±ãã¼ã¿æ¬ä½ã¯å¥ã®å ´æã« ISBN ãããã·ã¥ãã¼ã¨ãã¦æ ¼ç´ãã¦ããï¼ ...ã§ï¼è©²å½ãã¼ãã«ã«å¯¾ã㦠DynamoDB Stream ãæå¹åããï¼DynamoDB Stream ã¯ãªãªã¼ã¹å½å Preview çã§å©ç¨ç³è«ãå¿ è¦ã ã£ããä»ã¯èª°ã§ã使ããï¼
DynamoDB ã¹ããªã¼ã ã¯ãAmazon DynamoDB ãã¼ãã«å ã®é ç®ã«å ããããå¤æ´ã«é¢ããæ å ±ã®é åºä»ããããæ å ±ã§ãããã¼ãã«ã§ã¹ããªã¼ã ãæå¹ã«ããã¨ãDynamoDB ã¯ãã¼ãã«å ã®ãã¼ã¿é ç®ã«å ããããåå¤æ´ã«é¢ããæ å ±ããã£ããã£ãã¾ãã ...
DynamoDB ã¹ããªã¼ã ã¯ãã¹ããªã¼ã ã¬ã³ã¼ããã»ã¼ãªã¢ã«ã¿ã¤ã ã§æ¸ãè¾¼ãããããããã®ã¹ããªã¼ã ã使ç¨ããå 容ã«åºã¥ãã¦ã¢ã¯ã·ã§ã³ãå®è¡ããã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ã§ãã¾ãã
DynamoDB ããã¸ã¡ã³ãã³ã³ã½ã¼ã«ãããã¼ãã«ãé¸æãã¦ã½ã¡ã½ã¡ããã¨æå¹åãããï¼
ããã¨ï¼ãããªæãã® Stream ARN ãå¾ãããï¼
arn:aws:dynamodb:ap-northeast-1:<MY_AWS_ID>:table/<MY_TABLE_NAME>/stream/<Stream ãæå¹åããæå»>
ARN = Amazon Resource Names 㯠AWS ãµã¼ãã¹ã«ããã¦ä½ããã®ãªã½ã¼ã¹ (EC2 ã¤ã³ã¹ã¿ã³ã¹, IAM ã¦ã¼ã¶ï¼DynamoDB ã®ãã¼ãã« etc) ã URI ããããä¸æã«èå¥ãã ID ã®ãããªãã®ã§ï¼AWS ãµã¼ãã¹éã§ä½ãé£æºãããã¨ããã¨ããåºã¦ããï¼
Lambda 㧠DynamoDB Stream ãåãåã
ãããã Lambdaï¼å ã®æä½ã§å¾ããã Stream ARN ãã¤ãã³ãã½ã¼ã¹ã¨ãã¦åãåãçºç«ãããè¨å®ãè¡ãï¼ ã¼ãããæ¸ãå§ãã¦ããããã ãã©ï¼ããã¸ã¡ã³ãã³ã³ã½ã¼ã«ã§ "Create a Lambda Function" ãé¸æï¼"dynamodb-process-stream" ã¨ãã blueprint ãå ã«ããã¨è©±ãæ©ãï¼
console.log('Loading function'); exports.handler = function(event, context) { //console.log('Received event:', JSON.stringify(event, null, 2)); event.Records.forEach(function(record) { console.log(record.eventID); console.log(record.eventName); console.log('DynamoDB Record: %j', record.dynamodb); }); context.succeed("Successfully processed " + event.Records.length + " records."); };
event.Records
ã®ä¸ã« Stream ã®æ´æ°æ
å ±ãã©ã°ã£ã¨å
¥ã£ã¦ãã¦ããï¼ãã¨ãã°ä»¥ä¸ã®æ§ãªå½¢ï¼
{ "Records": [ { "eventID": "1", "eventVersion": "1.0", "dynamodb": { // æ´æ°ã¬ã³ã¼ãæ å ± "Keys": { "uuid": { "S": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } }, "NewImage": { "date": "2015-12-03", "hashed_title": "7f550dd47d40ea31eb84c092dbcdd2f66ff960db", "isbn": "9784000236218", "type": "return", "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, "StreamViewType": "NEW_AND_OLD_IMAGES", "SequenceNumber": "111", "SizeBytes": 26 }, "awsRegion": "ap-northeast-1", "eventName": "INSERT", // ã¬ã³ã¼ãã®æ°è¦ä½æ "eventSourceARN": "arn:aws:dynamodb:ap-northeast-1:<MY_AWS_ID>:table/<MY_TABLE_NAME>/stream/<Stream ãæå¹åããæå»>", "eventSource": "aws:dynamodb" } ] }
å ã® Stream æå¹åæã« "New and old Images" ãé¸æãã¦ããã¨ï¼æ´æ°å/æ´æ°å¾ã®ã¬ã³ã¼ãããã«ãã«ã§å ¥ã£ã¦ããï¼åã«ããªããæ´æ°åã£ãããã¨ããäºå®ãç¥ãããã ããªã "Keys Only" ã§ããã¨æãï¼ Stream ããåå¾ã§ãã "Records > dynamodb > NewImage ..." ãããã®å 容ã使ãã° Twitter éç¥ã«å¿ è¦ãªæ å ±ã¯åãããï¼
Twitter API
ä»åãããããã¨ã®ããã«ã¯ Twitter API ã Lambda ããå©ãå¿ è¦ããããï¼ãã®åã twittter ã¨ãã npm package ã§ç°¡åã«å®ç¾ã§ããï¼
var client = new Twitter({ consumer_key: <consumer_key>, consumer_secret: <consumer_secret>, access_token_key: <access_token_key>, access_token_secret: <access_token_secret> }); var msg = "äºç´ãã¦ããã" + event.Records[0].dynamodb.NewImage.title + "ããå³æ¸é¤¨ã§ç¢ºä¿æ¸ã§ã. (" + event.Records[0].dynamodb.NewImage.date + "è¿)"; client.post('/statuses/update.json', {status: msg}, function(err, ...) { // ... });
ãããªã¤ã¡ã¼ã¸ã®ã³ã¼ããæ¸ãã°ï¼Lambda ãã bot ãåããããã¨ãåºæ¥ãï¼
ã¨ããã§ã¡ãã£ã¨ä½è«æ°å³ã ãã©ï¼consumer_key
ã¨ã access_token_secret
ã¨ãã zip ã«å«ã㦠Lambda ã«ã¢ãããã¼ãï¼ã£ã¦ã®ã¯ã¡ãã£ã¨ããã
ãã¦ãçãªæå³ã§ãããããªãï¼ãã㧠AWS Key Management Service (KMS) ã使ãããã«ããï¼KMS ã®ã³ã³ã»ããã«ã¤ãã¦ã¯ã¯ã©ã¡ã½ããã® 10åã§ãããï¼Key Management Serviceã®ä»çµã¿ #cmdevio ï½ Developers.IO ãªã©ãåç
§ã«ããã¨ããããããæ°ãããï¼
æµãã¨ãã¦ã¯ï¼ããããã KMS ã® Master Key ãä½ã£ã¦ãããå¾ï¼ãã® key-id ãæå®ã㦠Twitter API ã®å種 API credentials æ å ±ãã«ã³ãã§æ¥ç¶ããããã¹ããæå·åï¼
$ aws kms encrypt --profile my-profile --key-id 9xxxxxx-9999-aaaa-a996-ffffffffffff --plaintext "consumer_key:<my_consumer_key>,consumer_secret:<my_consumer_secret>,access_token:<my_access_token>,access_token_secret:<my_access_token_secret>" --query CiphertextBlob --output text | base64 -D > ./encrypted-credentials
ãã® encrypted-credentials
ã zip ã«å«ãï¼ã½ã¼ã¹ã³ã¼ãã¨ä¸ç·ã« Lambda ã«ããã¦ããï¼
Lambda ä¸ã§ã¯æ¯åå®è¡æã« KMS ã¸ã®ãªã¯ã¨ã¹ããè¡ãï¼credentials ãè¤åããï¼Lambda Function ã«ç´ä»ãã Role ããã®ã¿å¾©å·å¯è½ã¨ãªãããã« IAM çã«å¶éãããã¨ãã§ããï¼ã¨ããä»çµã¿ï¼Lambda ä¸ã§åä½ãã KMS decrypt é¨åã®ã³ã¼ãã¯ä»¥ä¸ï¼
var encrypted = fs.readFileSync('./encrypted-credentials'); // ã³ã¼ãã¨ä¸ç·ã«ä¸ããæå·åæ¸ credentials æ å ± kms.decrypt({CiphertextBlob: encrypted}, function(err, data) { if (err) { console.log(err, err.stack); context.fail('failed'); } else { var decrypted = data['Plaintext'].toString(); // console.log(decrypted); obj = {}; decrypted.split(',').forEach(function(item) { var pair = item.split(':'); obj[pair[0]] = pair[1]; }); // Lambda ä¸ã§å¾©å·ãã credentials æ å ±ã使ã£ã¦ Twitter API ãå©ã var client = new Twitter({ consumer_key: obj.consumer_key, consumer_secret: obj.consumer_secret, access_token_key: obj.access_token_key, access_token_secret: obj.access_token_secret }); // ...
ããã
ããå°ã DynamoDB Stream + Lambda ã®æ±ç¨çãªè©±ã«ããã¤ããã ã£ããã ãã©ï¼ãã£ããç¨ä¾ãä¸ã¤ç´¹ä»ããè¨äºã«ãªã£ã¦ãã¾ã£ãï¼ããã°ãã¾ãï¼
*1:ä½è«ã ãå³æ¸é¤¨ã® web ã¯ãªããªãé ·ããã®ã®éè¡ç³»ã®ããã«æ¯ã¹ãã°ããªãç²¾ç¥è² è·ä½ãã¹ã¯ã¬ã¤ãã³ã°å¯è½ãªã¬ãã«
ãã¤ãªã¤ã³ãã©ï¼ç¥ï¼æè¡è 試é¨ã«ä¸æ¬æãªæ績ã§åæ ¼
ããã£ã½ã.
æ¨å¹´11æã«è©¦é¨ã§12æã«ã¯åæ ¼ããã£ã¦ããã ãã©, æ績ãããããä»æã«å ¥ã£ã¦å±ã.
èªçæ¥è¨è¼ããå¿ è¦ãªãã?
çãåãããã¦900ï¼1000ç¹æºç¹ï¼ã¯è¶ ãã¦ãã ãã¨æã£ã¦ãã, ãã¿ãéããã¨800ç¹ããåãã¦ãããæç¶ã¨ãã.
ç¹ã«ç¹æ°ã®ä½ããã¤ãªã¤ã³ãã©ããã£ã¯ã¹åéï¼å¾åï¼ã¯, ã¿ã³ãã¯è³ªç«ä½æ§é ç³»ã®åé¡ãå¤ãã¦ãã£ããã¨æã£ã¦ãã®ã«ä½ããã£ãã®ã... æ²ãã. 解çã®å ¬éãå¾ ããã.
å¹³æ26年度試é¨åé¡ï¼è§£ç
å¹³æ27å¹´1æä¸ã®å ¬éãäºå®ãã¦ãã¾ãã
ã¯ãã¯ã
試é¨ã«ã¤ãã¦
試é¨ã¯4ãã¼ãã«åããã¦ãã
- Bio
- Info
- BioInfo(1)
- BioInfo(2)
ããããã250ç¹ãã¤ã¨ããã¤ã¡ã¼ã¸. éå»åãå ¬å¼Webãµã¤ãããè½ã¨ããã®ã§ããã解ãã¦, ããããªãåé¡ã«ã¤ãã¦ã¯æç§æ¸ãªã©ã調ã¹ãã¨ããåå¼·æ³ã§åºç¤¾åã¨ãæ¼ä¼ã¿ã¨ãã«1.5ã¶æã»ã©.
ãã¤ãªã¤ã³ãã©ãªå®åã§ä½¿ãç¥èãã©ããããå«ã¾ãã¦ãã®ãããããã®ãæ£ç´ãªã¨ããã ãã©, ä¹ ãã¶ãã«å°éåéã®è¨æ¶ãå¼ã£å¼µãã ãã¦æ¥ãã¦ããããããã®ã¨, ãã¯ãèªåã¯å¦ç¿ã大好ããªãã¨ãå確èªã, ãããªã®ã«å°±å´ä»¥éæããã«ä½ä¸ãç¶ãã¦ããç¥æ§ã顧ã¿, ããã«æ£æã«å¼ã¨4,5å¹´ã¶ãã«é¡ãåããããã¤ãã¯ç系修士ããã®æè¡è·å°±è·ãã¦ã¦, 大å¦ã§å¦ãã ç¥èã°ãã°ã使ã£ã¦ã¨ã¦ã楽ãããã§ãããªã, 人çã¨ã¯... ã¿ãããªæ°åã«. 話ãé¸ãã. 人çã.
使ã£ãæç§æ¸çãªãã®ãã¢ãã£ãªã¨ã¤ã
ãã¤ãªã¤ã³ãã©ããã£ã¯ã¹ ã²ãã é åããæ©è½è§£æ㸠第2ç
ä½ã¯ã¨ããããã. ä»ã¾ã§è²·ããè²·ããã¨æãã¤ã¤å¤æ®µããè¸ãåããã¤ããªãã£ããã©è©¦é¨ææ¦ããã£ããã¨ãªãè³¼å ¥. è¯ãæ¬ã§ã
ã´ã©ã¼ã çåå¦ãä¸ã
ã´ã©ã¼ãã¯ã¾ã, ãã¾ãã¾åãå¦çæ代ã«ä½¿ã£ã¦ãçåå¦ã®æç§æ¸ãã³ã¬ã¨ããã ããªãã ãã©, çä½ååã®åããåå¦ã¬ãã«ããèå¯ããã¬ã¤ã¤ã¼ãã¨ã¦ãå¿å°ãã. ãã¤ãªåéã®å¦ç¿ã«.
ããªãã¿ã¶ã»ã»ã«ãã¨ç´°èã®ååçç©å¦. ããã¨ãã¯ããªãã¤ãªåéç¥èãæãã¦ããããã®ã§ããã¤ã§è£ã. å®éåãæã£ã¦ãã®ã¯éè²è¡¨ç´ã®ç¬¬4çãªãã ãã©, æ¨å¹´æ«ã«é表ç´ã®ç¬¬6æ¿ãåºãã®ã§è¨å¿µãã¦ãã£ã¡ãè²¼ã£ã¨ã. è²·ããããéæ¬ ã§è¾ã... Kindleçã ã¨1ä¸åå°ã§è²·ããã£ã½ãã¦æºãã¦ã.
ã§, ã¤ã³ãã©åéã®åé¡ã¯
- å®åã§é¦´æãã§ã¦ãã¯ãã¯ããã§åçã§ããåé¡
- ã°ã°ãã°ååãªæ å ±ãå¾ãããåé¡
ãå¤ãã¦ãããªæç§æ¸ã®åºçªãæããç¹ã«ç´¹ä»ãããã®ãªã. æ°å¦ï¼çµ±è¨ã»ç¢ºçï¼ããã¿ã®åé¡ãããæããã£ããã©, ååã®è¨äºã§ã触ããâã®æ¬ãæ¦å¿µãã¤ããå©ãã«ãªã£ã.
ããã
人çã