どこかのPython課題について

https://twitter.com/y_sni/status/964842009327427584

正規化の前後で変数を使い回しているのが気持ち悪いと思った。P言語の入門なんだからもっとわかりやすい変数名にしてほしい。

書いた(問13-1)

def bloodAB( AA, AB, BB, n ):
    sum = AA + AB + BB
    AA /= sum
    AB /= sum
    BB /= sum
    for i in range(0, n):
        nAA = AA*AA + AA*AB/2 + AB*AA/2 + AB*AB/4
        nAB = AA*BB + AA*AB/2 + AB*AA/2 + AB*AB/2 + AB*BB/2 + BB*AA + BB*AB/2
        nBB = BB*BB + AB*AB/4 + AB*BB/2 + BB*AB/2
        
        AA = nAA
        AB = nAB
        BB = nBB
        
    return( [AA, AB, BB] )

コード例ではAB型同士からはAA型, BB型は生まれないことになっている。謎。生物学わからない。

AB型同士からもAA型,BB型が生まれることにすると結果の正規化が必要なくなり, 次世代の確率を次のループの確率に代入するだけの見通しがいいコードになる。 (めちゃくちゃな入力がされる可能性がある最初だけ正規化している)

正規化したいなら〇〇=n〇〇のところでするときれい

(確率の合計を1にすることを「正規化」と呼んでいたが, 本当にそうなのか不安になってきた)

感想

スイッチを交換したキーボードを試すいい機会になった。

https://twitter.com/y_sni/status/964848216263962624

大学生は何らかの繋がりで情報学群生を頼るだろうから, N高のTAにでも応募してみますかね(来学期は忙しいからしない・できない)

学び

https://twitter.com/y_sni/status/964845683437060102

メカニカルキーボードのスイッチ交換(続き)

y-sni.hatenablog.com

地味〜に進めていたけど, 3日目にしていよいよ進捗しなくなったから諦めて新しいスイッチを取り付けた

f:id:y_sanagi:20180216200412j:plain

右手全部をSpeedSwitchに替えられれば良かったんだが, 5キー残したところでギブアップ

f:id:y_sanagi:20180217125750j:plain

f:id:y_sanagi:20180217133224j:plain

未交換部分の青色LEDが眩しい

感想

  • Enterキーが浅くなって良い
  • 元のoutemu青軸より静か
  • スペックシートからわかる事実だが, Copperスイッチはアクチュエートポイントの後にタクタイルポイントがあるから, 「カチッ」という前に入力される。 気持ち悪いからLiniarスイッチのほうが良さそう
    • 押してないつもりなのに入力される事例が多発している
    • Uがチャタってる?
    • 青軸で入力点の手前まで押しておく癖がついていると, 勝手に入力されて苦労する
    • カチッと言うだけで, タクタイル感がないような??
  • スペースキーも軸交換すればもっと満足度が上がっただろう
  • Magicforce標準のキーキャップはSpeedスイッチへの取り付けが硬い。

これから

はんだづけなしで軸交換できるキーボード良いなあって眺めてる。本体(キーキャップ・スイッチなし)で60ドルだから送料無料なら買っているだろう。

GMMK-TKL - Customizedwww.pcgamingrace.com

メカニカルキーボードのスイッチ交換

Kailh Speed Switchを使いたいから Magicforce 49key のスイッチを交換しようとした。

使った工具

スイッチ交換に失敗しても自作キーボードの組み立てにも使うと考えて買った。こて先はHAKKOの?900Mシリーズが使えるらしい。

参考

chocolatedevice2.blogspot.jp

簡単にできるように見えるやん??

過程

f:id:y_sanagi:20180215170226j:plain 1つ目はめっちゃ苦労した

  • 300℃くらいでやってたけど, 400℃にしたら吸い取りがうまくいくようになった
  • LEDは再取り付けしないことにしてはんだを温めながらドライバーでゴネて外した
  • はんだをうまく吸い取れなくて困る
  • 400℃だとはんだが飛び散って危ない。

結果

夕食前までの進捗: 5個 (キーが外れたのが嬉しくてSpeed Switchを付けたら外れなくなった……)

今日の進捗: 14個 f:id:y_sanagi:20180215225753j:plain

中華の吸い取り器ではなくちゃんとハッコースッポンを使ったらもう少しうまくいくのかな? 吸い取り口の内径は3mmだから変わらなそうだけど。

吸い取り方が雑で導通しなくなったのではないかと懸念していたが, ブレッドボード用のジャンパワイヤで短絡したらスイッチを外した全キーちゃんと反応していた。もう少しがんばってみるか……

あと3分の2じゃん!! すぐできそう!!

余談

f:id:y_sanagi:20180215170410j:plain

はんだ吸い取りがうまくいくと現代芸術のようになる

世界一簡単な5000兆円ほしい!ボタンの作り方

ブレッドボードビュー

f:id:y_sanagi:20180203191931p:plain

コード

layout.write()の引数に"\n"を入れるとEnterキーを押す扱いになるらしい。

from digitalio import DigitalInOut, Direction, Pull
import touchio
import board
import time
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS


buttonpin = board.D0

kbd = Keyboard()
layout = KeyboardLayoutUS(kbd)

button = DigitalInOut(buttonpin)
button.direction = Direction.INPUT
button.pull = Pull.UP   

led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT
time.sleep(5)

print("Waiting for button presses")

press = False;

while True:
    if not button.value:
        if not press:
            led.value = True
            layout.write("5000chouenhoshii! \n\n")
            press = True
            #kbd.press
    else:
        if press:
            press = False
            led.value = False

    time.sleep(0.01)

ProMicroでポインティングスティックを作った

動作

  • ジョイスティックを傾けるとマウスポインタがその向きに動く
  • 2番ピンのボタンを押すとジョイスティックの初期位置がリセットされる
  • 3番ピンのボタンを押すとジョイスティックを傾けた方向にスクロールする
  • 4番ピンのボタンでマウスの左クリック

配線図

使ってるジョイスティックがライブラリになかったため, テキトーに繋いでる。

f:id:y_sanagi:20180114233813p:plain

コード

#include "Mouse.h"

const int _UDPIN = A2; // UD入力
const int _LRPIN = A1; // LR入力
//const int _SWPIN = 7; // デジタルピン
const int RESET_PIN = 2;
const int CENTER_PIN = 3;
const int CLICK_PIN = 4;

int range = 12;
int responseDelay = 20;
int threshold = 1;
int center = range / 2;

int init_lr = 512;
int init_ud = 512;

char scroll_count = 0;

void setup() {
 Serial.begin(9600);
// pinMode(_SWPIN,INPUT) ;
  pinMode(RESET_PIN, INPUT_PULLUP);
  pinMode(CENTER_PIN, INPUT_PULLUP);
  pinMode(CLICK_PIN, INPUT_PULLUP);
  
  init_lr = analogRead(_LRPIN);
  init_ud = analogRead(_UDPIN);
 Mouse.begin();
}
 
void loop() {
  if(digitalRead(RESET_PIN) == LOW) {
    init_lr = analogRead(_LRPIN);
    init_ud = analogRead(_UDPIN); 
  }
  
 int ud = readAxis(_UDPIN, init_ud);
 int lr = -readAxis(_LRPIN, init_lr);
 
 Serial.print("UP-DOWN:");
 Serial.print(ud, DEC); //DECは10進数フォーマットを表す
 Serial.print(" - Left-Rright:");
 Serial.println(lr, DEC);
// if (digitalRead(_SWPIN) == HIGH) {
// Serial.println("switch on");
// }
  if(digitalRead(CENTER_PIN) == LOW) {
    if( scroll_count == 3) {
      Mouse.move(0, 0, -lr);
      scroll_count = 0;
    } else {
      scroll_count++;
    }
  } else {
    Mouse.move(ud, lr, 0);
  }
  
  // read the mouse button and click or not click:
  // if the mouse button is pressed:
  if (digitalRead(CLICK_PIN) == LOW) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
    }
  }
  // else the mouse button is not pressed:
  else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }

 delay(responseDelay);
}

int readAxis(int pin, int init) {
  int reading = analogRead(pin);
//  reading = reading * range / 1023;
//  int distance = reading - center;
  int distance = NumLog( reading - init );
  if( abs(distance) < threshold ) {
    distance = 0;
  }

  return distance;
}

int NumLog(int i) {
  int tei = 2;
  
  int sign = 1;
  if(i<0) {
    sign = -1;
    i = -i;
  }
  int j=0;
  for(; i>tei; j++) {
    i /= tei;
  }
  return sign*j;
}

ちょっと長い区間の乗車券を買うことで往復割引の有効期間を延ばす

東京都区内から善通寺までは791kmで往復割引乗車券の有効期間が10日間になりギリギリ使えなかったが, あと9km付け足せば有効期間が12日に伸びて使うことができる。

さらに区間秋葉原を通る経路で東京都区外側に伸ばせば秋葉原での下車を途中下車扱いにできる。600km超だと運賃計算のキロ数が40kmごとに区切られているので思いの外遠くまで同じ運賃で行くことができる。

今回は南浦和経由で南流山まで買うことにした。越谷レイクタウンや新三郷で途中下車できる。 時間があるかは別の問題

往復割引乗車券の有効期間が少し足りないときは乗車券の購入区間の延長を検討してみるといいと思う。

ツイートまとめ