「せばな」は言わない

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

【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も取り替えかなぁ…

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

【Azure+Nodered】Azure上にNoderedの環境を用意するメモ

f:id:tk_thunder:20180218091051p:plainf:id:tk_thunder:20180218091041p:plain

はじめに

前々回の記事について、Azure上のDBに向けてラズパイ上で動かすNoderedからデータを飛ばす旨で書いたんですが…何をトチ狂ったかAzure上にNoderedを展開することについても書いていました。混乱させてしまい申し訳ないです。あの時の僕はどうかしてたんだ。

tk-thunder.hateblo.jp


というわけで、分量も多くないのでこちらにメモ程度に記しておきます。

Azure上にNoderedの環境を用意する

※記事の中にgitのリポジトリを設定する部分がありますが、僕は2つめの記事に従って設定しました。
qiita.com

qiita.com