CORNE CHERRYを買ってみた

背景

もともとHHKB Professional BTシリーズを使用していたけど、分割キーボードが肩こり対策に良いと聞いたので分割キーボードを試してみる。 自作の経験はなかったので、既製品のMiSTEL BAROCCO MD600が欲しかったのだけど、すでに生産終了で断念。 ならば自作をするか、、、と考えたが、夜の短い間に狭いスペースではんだ付けをする心身的余裕がなかったので、欲しかったキーボードのうちプラモデル感覚で作れるkitを購入。

購入したもの

キーボード本体


  • キースイッチx42個
内訳 用途
26個 赤軸静音 アルファベット
16個 赤軸 その他

個人的には青軸が好みなのだが、会社で使うことや子供が寝た後使用することを考えて静音の軸を選択。


  • キーキャップx42個(1u x 40個 + 1.5u x 2個)

PBT カラーキーキャップ | 遊舎工房

用途
エメラルドグリーン 全て


本当はアルファベットとその他で色を変えたいのだけど、まずは試しなので一色。

  • TRRSケーブル
    安いので、まずは動かすの優先で見た目は気にしない。
    実際はkitに入っていたので購入は不要だった。 TRRSケーブル 1m | 遊舎工房

** 金額

購入物 金額
Corne Cherry 18,000
赤軸静音 30個 2,700
赤軸   20個 1,800
キーキャップ 2個 2,000
TRRSケーブル 300

初期費用は約3万円。嗜好品といえば嗜好品。半年後のお仕事必需品になっているとよいな。

AWSのサーバ構築

概要

AWSで作ったサーバのメモ
最初に作成したということもあるので無料枠で構築

項目 選択
AMI Red Hat Enterprise Linux 8(x86)
インスタンスタイプ t2.micro
タグ Name:orcaPythonServer
セキュリティグループ 新規作成
自宅からのIP Addressのみの制限 (マイIP)


SSHでのアクセス

$ssh -l ec2-user -i ./■■■■■■■■■■.pem ServerIP


自身のIPは下記サイトで確認

www.cman.jp

AWSでPython自動実行まで

きっかけ

普段ノートPCで実行している家計簿(PythontweetからGoogleスプレッドシートに転記)を自動実行したくて、AWSにサーバ立ててみた。
ノートPCを家でつけっぱなしにしておくのも嫌だったのでAWSの無料枠で作成。 AWSでのサーバ構築内容はこちら。アクセス制限とかもしてみたよ。

実行コマンド

Python3 のインストール

$ sudo yum install python3

モジュールのインストール

$ sudo python3 -m pip install tweepy
$ sudo python3 -m pip install datetime
$ sudo python3 -m pip install gspread
$ sudo python3 -m pip install json
$ sudo python3 -m pip install oauth2client --upgrade

各種ファイルの移動
SCPで移動するのが正解な気がするけどviで新規したファイルにコピペ

$ mkdir writeTweet2GogleSpreadSheet
$ cd writeTweet2GogleSpreadSheet

## twitterの認証用ファイル
vi ./config.py

##スプレッドシートにアクセスするための認証用ファイル
vi ./■■■■■■■■■■■■■■.json

## Pythonファイル
vi ./writeTweet2GoogleSpreadSheet.py

crontabの設定

$ sudo crontab -e

### FILE PATH
FILE_PATH_WT2G="/■■■■■■■■■■■■■■"

#1Hごとに実施
0 9-23 * * *      cd $FILE_PATH_WT2G ; python3 ./writeTweet2GoogleSpreadSheet.py >> $FILE_PATH_WT2G/log/log_cron_writeTweet2GogleSpreadSheet.log 2>&1

# *     *     *   *    *        command to be executed
# -     -     -   -    -
# |     |     |   |    |
# |     |     |   |    +----- day of week (0 - 6) (Sunday=0)
# |     |     |   +------- month (1 - 12)
# |     |     +--------- day of        month (1 - 31)
# |     +----------- hour (0 - 23)
# +------------- min (0 - 59)
# minute  hour  day_of_month  month  weekday  command:

Windows10で定期実行

きっかけ

FXのエントリーポイントをtweetするスクリプトを作ったので次は定期的にスクリプトを実行したい。

Cygwinのインストール

標準アプリであるタスクスケジューラを使用してみたが、いまいち動かし方と実行状況がわからない。そしてなにより重い。
ということで、Cygwinに頼ることにした。
黒いターミナル■が画面にあると落ち着く、不思議!

GUIcygwin window10 で検索して一番上を参考にCygwinをインストール。
Windows 10 に Cygwin 64bit 版をインストールする | digitalbox

GUI:その後は下記を参考にcronとcygrunsrvのパッケージを追加でインストール。
Cygwinでcronを使うときのメモ - kkobayashi_a’s blog

cronをサービスに登録。

$ cygrunsrv -I cron -p /usr/sbin/cron -a -n

cygrunsrv -S でスタートして、cygrunsrv -Q で状態を確認。

$ cygrunsrv -S cron
$ cygrunsrv -Q cron
Service             : cron
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/cron.exe -n

あとは crontab -e でcronの設定が可能。(管理者権限で実行をわすれないこと!)

PythonでRCI,MACD,移動平均線

RCI

RCIの説明は下記のサイトを参考
QuantXでRCIを実装してみた - Qiita

そのまま実装したのが下記。

# rci_short = get_rci(close,9)    で呼ぶ
# closeは各足の終値

def get_rci(close, period):
    rci = []
    table = [[0] * 4 for i in range(period)]
    df = pd.DataFrame(close, columns=(['close']))


    for i in range(len(close)):
        if i < period:
            rci.append(None)
        else:
            d_ = 0
            for j in range(period):
                table[j][0]=close[i]
                table[j][1]=period - j
            rank_price = df[i - period + 1: i + 1].rank(method='min', ascending = False).values
            for j in range(period):
                table[j][2]=int(rank_price[j])
            for j in range(period):
                d_ = d_ + (table[j][1] - table[j][2]) * (table[j][1] - table[j][2])

            rci.append( 6 * d_  / (period * (period*period -1)))
            rci[i] = (1-rci[i])*100

    return rci

MACD

インストールした際の経緯は下記

orcafamiliar.hatenablog.com

import talib

macd, macdsignal, macdhist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)

移動平均線

import talib

sma5 = talib.SMA(infected_count, timeperiod=5)

Python3でグラフを描画

f:id:orcafamiliar:20200503164255p:plain

きっかけ

コロナの棒グラフを見ていたら、5日移動平均線MACDRCIをプロットしてみたくなった。ふと、描画したいなと思ったときにできるようになっておきたく。

matplotlib のインストール

どうやら、matplotlibがよく使われるらしい。下記でインストール。
> py -m pip install matplotlib

補足:pipが最新版ではなかったので下記で更新。
> py -m pip install --upgrade pip

とりあえず matplotlib にて y=x でも描画

f:id:orcafamiliar:20200427233029p:plain

感染者数を手入力でもinputして、棒グラフで出力

f:id:orcafamiliar:20200427235338p:plain ※上の数は適当。ファイルかなにかから取得すれば簡単に配列には入れられそう。

感染者数を取得(できればlistから)

date = list()
infected_count = list()

try:
    f = open(path)
    lines = f.read().split()
except Excption as e:
    print(e)
finally:
    f.close()

#棒グラフ
for i in range(int(len(lines)/2)):
    date.append(lines[i*2])
    infected_count.append(int(lines[i*2+1]))

5,25日移動平均線の追加(7日、14日が適切?

f:id:orcafamiliar:20200430135053p:plain

MACDの追加

一度計算用の関数を作ったけど、モジュールがあったのでそちらを使用。
関数を作ったことで、MACDがどんな計算で算出されているのかをすることができたのは収穫。
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib にて下記をダウンロード
64bitOS ⇒ TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

pip install TA_Lib-0.4.17-cp36-cp36m-win_amd64.whl

codeでは下記のように使用。np.arrayに手間取った。

import talib

### 感染者数と日付のデータをlistに入れる
infected_count_int = list()
for i in range(int(len(lines)/2)):
    date.append(lines[i*2])
    infected_count_int.append(int(lines[2*i+1]))
infected_count = np.array([float(x) for x in infected_count_int])

#MACD
macd, macdsignal, macdhist = talib.MACD(infected_count, fastperiod=12, slowperiod=26, signalperiod=9)

下記サイトを参照しました。
python3でTA-Libをインストールする方法をまとめてみた - Qiita

日本語対応

タイトルなどに日本語を使用したかったので、下記をインストールして本文でimport > py -m pip install japanize-matplotlib

import japanize_matplotlib

次(計算めんどくさくて後日に...。

Paizaでよく使う関数

標準関数

入力

・input_line = input()

・input_line = input().rstrip().split(' ')
※ スペース" "で区切って格納 して下記のように変数に代入ができる
※ first = input_line[0]
※ second = input_line[1]

改行なしのprint

print("moji", end="")

配列の初期化

list = [0] * 3
[0,0,0]が作成される

リストの最小値、最大値

min(list)
mx(list)

辞書

dictionary = {"A":1,"B":2,"C":3,"D":4}

0埋め

moto = 1
zeroume = moto.zfill(2)  
print(zeroume)   → 01

。zfill(x)のx桁分だけゼロ埋め

import math

切り捨て切り上げ

  • 整数に切り捨て
    • math.floor
  • 整数に切り上げ
    • math.ceil