「せばな」は言わない

綱の上を歩いたり、壁を登ったりする田舎のプログラマーのおはなし

【雑記】2019年の振り返り

はじめに

2019年の終了まで1ヶ月をきったので、ここらへんで1年の振り返りをしようと思う。ちょっと早くね?とかいう意見は受け付けない。

本当に今年はあっという間で…といっても毎年そう思っているかもしれないが、群を抜いてあっという間だったように感じる。
それでは早速、思い出していこう。

IT分野

Python

予てより勉強中のpythonだが、今年はWebフレームワークであるFlaskを使用してAPI開発にトライしてみた。

Flask Web Development: Developing Web Applications with Python

Flask Web Development: Developing Web Applications with Python

  • 作者:Miguel Grinberg
  • 出版社/メーカー: O'Reilly Media
  • 発売日: 2018/03/25
  • メディア: ペーパーバック

僕は趣味でボルダリングをしているのだが、通っている施設がいろいろな制約で民間のボルダリングジムのようにできないため、以下のサービスを構築した。

  1. 自分で作成したルートを写真で撮ってクラウドにアップロード
  2. 難易度、壁の傾斜、課題の傾向(タグ)ごとにアップロードされたルートを検索して、表示
  3. 検索結果のサマリ表示

まぁ簡単なものだが個人的には今年一番の成果だった。5月にサービスをローンチしたが、やりたいことが増えて10月に大幅に改変した。当初DBなんて使う予定もなかったが、herokuを利用し、DBにPostgresを使うことにした。DBの設計はまだまだ微妙だが、とても勉強になった。

Vue.js

上に挙げたサービスのUIとして活躍しているのがVueになる。ずっと前から使ってみたいと思っていたのだが、公式サイトのチュートリアルで何度も挫折するほどの低能ぶりを発揮していた。(なぜVueにこだわったかは不明な模様)
そこで思い切って書籍を購入してみた。買っても分からんかった

これからはじめるVue.js実践入門

これからはじめるVue.js実践入門

  • 作者:山田 祥寛
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2019/08/22
  • メディア: 単行本

そして、「とりあえず何か作ってみないとわからん!」となり、VueのCDN版を使ってボルダリングのクラブの会員登録画面を作ってみた。
すると今まで意味不明の文字の羅列がはっきり理解できるようになった。ここからVueへの理解が一気に進んだ。

ゔゅーまぢさぃこぅ

今後も勉強を重ねていきたい。

Raspberry Pi

やはりこいつは手放せない。あらゆるところで活躍してくれる頼もしいやつ。そして電子工作は面白い。
仕事でWebカメラをバーコードリーダーにするという案件があったので、ラズパイと組み合わせてやってみた。
すごく便利で、今の業務もそのシステムがサポートしてくれている。

家のどこにいてもAlexaからお経を流せるシステムは家族の誰からも評価されなかったけどな。


「同期のサクラ」というドラマで引用していたガウディのセリフを改変して用いると
「諸君、来年はもっと面白いものを作ろう」
といったところだろうか。


余談だが、ラズパイ入門したいという方は以下の全部入りボックスがオススメだ。僕も2つくらい買った。

iPad Pro12.9

頑張った自分へのご褒美的な勢いで衝動買いしてしまったiPad。クソ高かったけどな
でも全然後悔はしていない(と言い聞かせているだけ)。

Apple iPad Pro (12.9インチ, Wi-Fi, 256GB) - スペースグレイ

Apple iPad Pro (12.9インチ, Wi-Fi, 256GB) - スペースグレイ

  • 発売日: 2017/06/06
  • メディア: Personal Computers

しかし、超便利であることに違いはない。
最近はスポーツの指導も行っているが、レッスンに通ってくる人のデータをクラウドに置いておいて、レッスン中に記録をつけながらデータをアップデートしたりしている。
他にもメモや資格の勉強、筋肉、トレーニングの勉強のノートもすべてipadにとっている。ペンが意外と便利で驚き。
ボルダリングのルートも写真を加工して、作ったサービスですぐにアップロードできるのも最高。アプリも標準の「メモ」で事足りるしね。

pythonやjsも書けるし、概ね満足してます。

スポーツ

スポーツ推進委員

今年から地域のスポーツ推進委員に選任された。
ボルダリングやスラックラインというスポーツを指導できるということが選出の理由らしい。
確かにこちらの地域では新しい…というかエッジの効いたスポーツの広がりが薄い。
ただ、子どもの数も少なくなり、チームを組むという事自体が難しくなっている。嘘のようでもあるが、地方というのはこれほどまでに人口の減少が深刻なのだ。
こういう地方こそ、ボルダリングやスラックラインという「個人種目(相手がいなくても成立する)」を伸ばしていけるんじゃないのだろうか…ってことを少し考えた。

スラックライン

今年は秋田で初めてのインストラクター検定を開催することができた。それによってこの地域にも新たなインストラクターが誕生し、普及に協力してくれる人が増えた。
次は根本的なところで競技人口を増やしてかねばと思うことろである。

ボルダリング

夏にコンペに出場したのが印象的で、来年もぜひ参加したいと思う。
同時に強くなるために身体のことをもっと知りたくて、解剖学の触りを勉強し始めた。また、通っている施設にも少しずつキッズクライマーが増えてきており、教室を開催するなどして彼らが強くなることもサポートしたい。
秋田に帰ってきて久々に岩に行けたのもすごく楽しかったし嬉しかった。まずは2段を目指して春から岩場に通おう。

総評

こんな感じでこの一年を振り返ったが、一つダメなところがあるとすればそれは「体調を崩す」ということだ。
本当に2~3ヶ月のスパンで高熱をだす。
基本的に月~金は仕事+ボルダリングと土、日はスラックライン+ボルダリング、もしくは出張講習会など止まることを知らないライフサイクルが問題だ。
疲労がたまり、それが定期的に爆発する。つまり僕が忙しさを制御できずに、体調を崩すことでレストするというサイクルを甘んじて受け入れていることになる。
これはあまり良い傾向とはいえない。絶対カイゼンが必要だ。
来年の目標は、土か日に休息を確保することだ。ただ、土曜出勤が当たり前にある会社のため、完全週休二日を前提にできないところが辛い。こればかりは会社の変革を願おう。

地域における自分の役割も見えてきたし、来年も一層忙しくなるとは思うがスケジューリングという課題に取り組もう。

まぁ、気楽にいくか。

【SpreadSheet API】Internal error encountered.

Google SpreadSheet APIでエラー

単純作業の自動化でバーコードを読み取って記録をGoogleのSpreadSheetに記載するプログラムをPythonで書いた。
1ヶ月の間かなり順調に動いていて僕も大満足だったのだが、先週突如としてAPIがエラーを返すようになった。

gspread.exceptions.APIError: {
  "error": {
    "code": 500,
    "message": "Internal error encountered.",
    "status": "INTERNAL"
  }
}

code500って…原因を特定できるヒントがほぼなし。
とりあえずサービスアカウントを作り直したりしてみたもののエラーは変わらず。
ネットの海にダイブして片っ端から調べていたところ俺たちのstackOverflowパイセンにこんな投稿が。

stackoverflow.com

f:id:tk_thunder:20190910085850p:plain

f:id:tk_thunder:20190910090246p:plain

I added pie charts and after that it stopped working.
「円グラフを追加したら動かんくなったで」

そういえば追加したわ(白目)

読み取り対象のシートではない別のシートだがグラフを削除。
プログラム起動。無事動作!!!

まじかよ。ナンナンダヨこの仕様。
というわけでグラフを削除したら無事に動作したとさ。
でもグラフを削除したくないってときはどうするんだろう。

【Raspberry Pi】7inchタッチディスプレイの180°回転

f:id:tk_thunder:20190731083023j:plain

ベーシックな回転について

以前の記事はRaspberry Pi用7インチタッチディスプレイについてちょっとトリッキーな回転について記したが、今回は一番多いであろう180°の回転について記す。
てかこっちのほうが先だよね

tk-thunder.hateblo.jp


ディスプレイ

Raspberry Pi 公式 7

Raspberry Pi 公式 7" タッチスクリーン LCD Element14

ケース

まず、上のデバイスの組み合わせ(ディスプレイ+ケース)で実際にラズパイを組み込んで起動すると、画面の上下が逆になってしまう。

1. /boot/config.txt を編集

sudo nano /boot/config.txt

2. 末尾に以下の設定を追加

lcd_rotate=2

0 = 0°、1=90°、2=180°、3=270°

3. ラズパイを再起動
ちなみにdisplay_rotateを使用することでも画面を反転させることができるが、こちらはタッチパネルには作用しない。
これをやっちゃうと画面のみが反転する地獄となるため注意すべしと古事記にも書いてる。
まぁ俺はやったんだけどね

【Raspberry Pi】ラズパイで7inch タッチディスプレイの回転

f:id:tk_thunder:20190223000715j:plain

ラズパイで7inch タッチディスプレイの回転

タッチディスプレイの画面とタッチ座標を回転させる方法。

3週間くらいかかったので記念にブログに書いておきます。

ディスプレイ

Raspberry Pi 公式 7

Raspberry Pi 公式 7" タッチスクリーン LCD Element14

ケース


仕事でラズパイに7inchのディスプレイを接続して、「縦置き」するということがありました。
もちろん横に表示されている画面を縦にしないといけないのでハードのみならず、ソフト的にも画面を回転させなければいけません。
いろんな数値をいじったりキャリブレーションしたりあらゆる手段を講じて、なんとか希望通りになりました。
過去の記事もたくさん参考にしたのですが、どれもそのままの方法ではうまく行かず…試行した内容を整理しました。

今回の内容は画面を縦に使用する場合の内容です。通常の横置きならば "lcd_rotate=0" or "lcd_rotate=2" で対応できます。
ちなみにHDMIのディスプレイでは試していないので、このままの内容は適用できるかは分かりません。

手順
  • 接続されているタッチディスプレイの名前を調べる※sshからはコマンドが通らないので端末から操作する。ディスプレイとキーボード、マウスを接続する
xinput list

自分の結果(接続ディスプレイで違う結果になると思います)

Virtual core pointer                          id=2    [master pointer  (3)]
    Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    Compx 2.4G Receiver                       id=7    [slave  pointer  (2)]
    これ!→ FT5406 memory based driver                id=8    [slave  pointer  (2)]
    HID 04f3:0103                             id=10   [slave  pointer  (2)]
Virtual core keyboard                         id=3    [master keyboard (2)]
    Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    Compx 2.4G Receiver                       id=6    [slave  keyboard (3)]
    Compx 2.4G Receiver                       id=9    [slave  keyboard (3)]
    HID 04f3:0103
  • /etc/X11に"xorg.conf.d"というディレクトリを作成する。
cd /etc/X11/
sudo mkdir xorg.conf.d
  • "xorg.conf.d"内に"99-calibration.conf"というファイルを作成する。
sudo nano 99-calibration.conf
  • "99-calibration.conf"に以下の内容を記述する
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "FT5406 memory based driver"
        Option          "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"
EndSection

"MatchProduct"は1で調べたタッチディスプレイの名前
"Option"は90°か270°かで変わる。

90° : "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"
270° : "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"

数値も""で囲わないと起動時にデスクトップが表示されなくなったりするので注意。
そうなってもコマンドで操作できるので問題なかったです(やらかし)

  • 再起動する
sudo reboot

参考文献
キャリブレーションについて
https://a244.hateblo.jp/entry/2016/10/09/014932

ラズパイフォーラム
https://www.raspberrypi.org/forums/viewtopic.php?t=194273

【Raspberry Pi】Rasbian Stretch Liteのセットアップ

f:id:tk_thunder:20180203223050j:plain

はじめに

仕事で使うRaspberry Piと趣味用のRaspberry Pi Zero WにRasbian Stretch Liteをインストールしてセットアップしたのでその時の作業メモを残す。
もし同じようにセットアップする人がいれば参考にしてもらえればと思う。

前提とする環境

  • 本体:Raspberry Pi3 Model B / Raspberry Pi Zero W
  • OS:Rasbian Stretch Lite(GUIなし)
  • SSHに使用するPC:Windows 10 64bit

※使用するOSは2018/05/19現在最新のもの

  • HDMIケーブルもしくはHDMI-DVI(D-SUB)変換ケーブルを通して画面に出力できること

※外部モニタが必要

やること

今回やることは以下の通りの基本的な設定ですよ。

  • OSインストール
  • 起動確認とログイン
  • ローカライゼーション設定(タイムゾーン、キーボードレイアウト、Wi-Fi)
  • インターフェース設定(SSH、I2C)
  • Wi-Fi(IPアドレス固定)
  • パッケージ管理システム設定

それでは細かい所をやっていこう。

起動確認

Raspberry Piに下記を接続し、最後に電源を入れる
電源スイッチは存在せず、ケーブルを接続した瞬間に電源が入る。

  1. MicroSD
  2. HDMI(ディスプレイへ)
  3. キーボード
  4. 電源ケーブル

ログイン

初期設定では下記のアカウントになる

  • ログインユーザ:pi
  • 初期パスワード:raspberry

設定

コンフィグ画面から下記を設定していく

$raspi-config

1.言語

1.1[4 Localisation Options]
地域、言語関係の設定を行う

1.1.1 [I2 Change Timezone]
タイムゾーンを日本の設定にする

Geographic area:Asia
Time zone:Tokyo

1.1.2 [I3 Change Keyboard Layout]
キーボードレイアウトを日本向けにする

Generic 105-key (Intl) PC
Japanese - Japanese (OADG 109A)
The default for the keyboard layout
No compose key

1.1.3 [I4 Change Wi-fi Country]
Wifiの設定を日本向けにする

JP Japan

2.インターフェース

2.1 [5 Interfacing Options]
接続機器の制御に関する設定を行う

2.1.1 [P2 SSH]
セキュアシェルの接続を許可する

Would you like the SSH server to be enabled?
Yesを選択。

2.1.2 [P5 I2C]

Would you like the ARM I2C interface to be enabled?
Yesを選択。

一度リブートする。

$ sudo reboot

WifiとSSH設定

1. Wifi設定

1.1 SSIDとパスワードをファイルに書き込む
下記のコマンドでSSIDとパスワードをファイルに書き込む。
[SSID]:接続先SSID
[PASSPHRASE]:接続先SSIDのパスワード

$sudo sh -c 'wpa_passphrase [SSID] [PASSPHRASE] >> /etc/wpa_supplicant/wpa_supplicant.conf'

書き込み先のファイルを参照する

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

生のパスワードがコメントアウトで書き込まれているため、これを削除する。
※アクセスポイントがステルスの場合は、SSIDサーチする下記コマンドを追記する。

scan_ssid=1

書き込みが終了したらCtrl + xを押下。Yを押下し、保存する。

1.2 IPアドレスを固定する
常に同じIPでSSH接続するためにIPアドレスを固定する。
設定に使用するファイルを開く。

$ sudo nano /etc/dhcpcd.conf

ファイルを開いたら下記の情報を書き込む。

interface wlan0
static ip_address=192.168.xx.xx(例)
static routers=xxx.xxx.xx.xx
static domain_name_servers=xxx.xxx.xx.xx

書き込みが終了したらCtrl + xを押下。Yを押下し、保存する。
保存後、再起動を実行する。

$ sudo reboot

1.3 接続確認
再起動後、下記コマンドでネットワーク環境の確認を行う

$ ifconfig

先程設定したIPがwlanの項目に表示されていれば、設定完了。

また、外のネットワークに接続可能か下記のコマンドで確認する。
※ ping先は任意でかまわない

$ ping www.yahoo.co.jp

下記のように通信が成功すればWifi設定は終了。
64 bytes from 182.22.25.124 (182.22.25.124): icmp_seq=1 ttl=54 time=20.2 ms
64 bytes from 182.22.25.124 (182.22.25.124): icmp_seq=2 ttl=54 time=22.1 ms
64 bytes from 182.22.25.124 (182.22.25.124): icmp_seq=3 ttl=54 time=22.1 ms
64 bytes from 182.22.25.124 (182.22.25.124): icmp_seq=4 ttl=54 time=24.9 ms

1.4 ロケール設定
ネットワークに接続できるようになったため、日本語のフォントをインストールする。

$ sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

コンフィグ画面からロケールを日本に設定する

$raspi-config

[4 Localisation Options]→[I1 Change Locale]
下記を選択する。スペースキーを押下すると[*]マークをつけて複数選択できる。

en_GB.ISO-8859-15 ISO 8859-15
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8

デフォルトロケールを [ja_JP.UTF-8] にする。

参考
qiita.com

1.5 SSH接続
最後に個人のPCからWifi経由で制御できるようSSHの設定を実施する。
Raspberry Piに接続するPCに下記のソフトをインストールする。
[Tera Term Pro]
https://forest.watch.impress.co.jp/library/software/utf8teraterm/
ファイルをダウンロード後に開く。

参考
nw-electric.way-nifty.com

パッケージ管理システム設定

Raspberry Piには機能を拡張させるためのパッケージ管理システム「apt-get」がプリインストールされている。
Raspberry Piで保持しているパッケージ情報のリストを最新にする。下記のコマンドを入力する。
最新のリストがダウンロードされる。

$ sudo apt-get update

上で得たリストを元に、Raspberry Piにインストール済みのアプリケーションを最新に更新する。

$ sudo apt-get upgrade

OSのディストリビューションを最新に更新する。

$ sudo apt-get dist-upgrade

ファームウェアを最新に更新する。

$ sudo rpi-update

こんな感じですね。
アカウントの設定はデフォルトのまま進めていますが、セキュリティを向上させるために変更することをおすすめします。

【朗報】ワイのPC、復活を遂げる


はじめに

先日物理的に火を吹いた僕のPCだが、タイトルの通り復活を遂げたことをここに報告する。
tk-thunder.hateblo.jp

電源が火花を散らしたのでマザーボードを始め、すべてのパーツがお逝きになったのかと内心ヒヤヒヤだったが電源の交換のみで事なきを得た。

電源

ちなみに電源はこれ。

玄人志向 NEXTシリーズ 80 PLUS Bronze 600W ATX電源 KRPW-N600W/85+

玄人志向 NEXTシリーズ 80 PLUS Bronze 600W ATX電源 KRPW-N600W/85+

圧倒的なコストパフォーマンスだったので即決。

CPUファン

せっかくなので、CPUファンを取り付けたときの紹介もしておく。

サイズ オリジナルCPUクーラー 虎徹 Mark II

サイズ オリジナルCPUクーラー 虎徹 Mark II

このフィルムに気が付かずにそのままマザーボードに付けちゃう事例があるみたいなのでみなさまもお気をつけください。

結構でかい。

僕のマザーボードはソケットがLGA 1366なので、裏面にベースプレートを取り付ける必要がある。取り付けるとこんな感じ。

表面には裏面のベースプレートを固定するためのスペーサー蒹固定具をつける。

そんで上に乗っける。おぉ~。サイドフローのファンって初めて。

ケースファン

ケースファンもお世辞には回っていると言えない惨状だったので購入。

別にこだわりとかないのでコスト重視。
写真撮り忘れちゃたけど、ギュンギュン回って最高です。

Bluetooth

Bluetoothもついてねーのかよ!って言われそうだけど、昔のPCなもんでね!
ちなみに無線LANも搭載してないよ!!!

これも特にこだわりはないのでテキトウに。

電源投入

ホントにめっちゃ恐る恐る電源を入れたら静かに稼働しだした。異常があるのか?って疑いたくなるほど今のファンって静かなんですね。
でもマザーボードは未だに古いものを使用しているまま。いつ逝ってもおかしくはないので、徐々に新しいものを揃えていこうと思う。

ちなみにデュアルディスプレイだったのも今は1枚壊れてシングル状態になっている。
ついでに、新しいディスプレイを注文した。


これでやっと快適な開発環境がもどってくる!!

【悲報】ワイのPCが火を噴く(物理)

f:id:tk_thunder:20180226225235p:plain

比喩表現でよくある、「俺の○○が火を噴くぜ」という言葉が現実になりました。
比較的分かりやすくお伝えすると、デスクトップPCが火を吹きました。

以上です。


さて、いったいなぜこんなことになったのか…

デスクトップPCは8〜9年位前に大学生の僕がせっせとアルバイトをしてBTOで買ったものだ。

そして1年前に起動しなくなった。僕のスマホアプリ開発やその他もろもろのプログラミングを支えてくれた相棒だった。

それ以来、MacBook Airでおおよそすべてのことを凌いでいたが、やはりマシンパワーが足りない。

そして思い立った。ケース、OSはそのままでマザボとか諸々換装すればよくね?と。

まずは現状把握ということで、軽くPC内を掃除をして試しに起動させてみた。

普通に起動した。

あ、あれ…。起動してるやんけ…

もしかして、グリス塗り直してCPUクーラーをつけ直したからかな。

でも、起動時にFan errorが出てる。所定の回転数まで届いてないのかな?

というわけで、CPUファンを変えることにしました。少しずつ部品を変えていく作戦です。

そして新たに購入したのが 虎徹 弐(コテツ マークツー)

サイズ オリジナルCPUクーラー 虎徹 Mark II

サイズ オリジナルCPUクーラー 虎徹 Mark II

超ウキウキで取り付けをすませ、電源をONにする。

勢い良くコテツが回り始める。

うぉぉ!回ってる!!!(あたりまえ)

しかし今度はCMOS Errorが発生。

BIOSで時間とかをセットして、再起動するとなかなかWindowsの画面が表示されない。

う〜んと思いつつ、一旦再起動する。

CMOSエラーは出なくなったけど、またもやWindowsの画面が表示されない。

一旦電源切ろう…と電源ボタンを押した瞬間…

バチバチバチっという音とともに電源ユニットのあたりから激しく火花が散る。

f:id:tk_thunder:20180226225235p:plain

「うぉぉ!?」という叫びが止む頃にはPCは沈黙していた。

部屋の中にプラスチックが焦げる匂いが立ち込める。

すぐさま電源プラグを引っこ抜き、PCをバラす。

電源が死んでいるのでどこまでぶっ壊れたか確認できないが、とりあえずHDDは無事だった。

電源から火花が出ていたので、電源を外してバラしてみると…

こんなにホコリが詰まっている。もはやスパークしてくれと言っているようなものである。

そういえば電源の掃除だけは一回もしていなかった。一生の不覚である。

家が火事にならなくて本当に良かったと思いながら、電源ユニットを注文した。

こりゃマザボもメモリもCPUも取り替えかなぁ…

みなさんも電源周りのホコリには十分お気をつけください。