2018年10月6日土曜日

pipenv2018.7.1とpip18.1の組み合わせはエラーになる

不具合に遭遇したのでメモ。

現象

$ pipenv install {some_package}
すると、エラー終了する。
Pipfileやパッケージのインストール自体は完了している
lockfileの作成あたりでコケている模様?

原因

エラーメッセージでググると同様の事象を見つけた。
https://github.com/pypa/pipenv/issues/2871

pipenv2018.7.1とpip18.1の組み合わせがエラーを起こしている模様。

解決方法

workaroundとしてはpipを18.0にする。
ポイントとしては、pipenvの環境のほうのpipを18.0にする。

$ pipenv run pip install pip==18.0

2018年9月23日日曜日

Pythonの環境構築にpipenvを使う

pipenvというPythonの仮想環境構築ツールを使い始めました。詳細は公式を見れば良いとして分かりづらかったところのメモ書き。

Pipenv: 人間のためのPython開発ワークフロー

書いている時点のバージョンは以下
$ pipenv --version
pipenv, version 2018.7.1

インストール

繰り返しだが詳細は上記の公式サイトのドキュメントを読めば良い。macOSの場合Homebrewとpipを使う方法があるようですが、私はPythonのバージョン管理にpyenvも使っていてHomebrewの方で入れるとバージョンが変になりそうな気がしたのでpipの方でインストールしました(Homebrewで試してはいない)。

$ pip install pipenv
すると、下記のようにpyenv配下にpipenvがインストールされてる模様。
$ which pipenv
/Users/hkuro/.pyenv/shims/pipenv

使い方

任意のディレクトリで
$ pipenv shell
とすると、"カレントディレクトリの名前-{hash}"という名前のvirtualenvが~/.local/share/virtualenvs/配下に作成される。hashの部分は詳しく調べてないけど何らかのハッシュみたいなので、別の同名ディレクトリでpipenv shellしても別のvirtualenvとして作成される(そりゃそうか)。

環境変数を設定することでカレントディレクトリに作成されるようにすることが可能(
PIPENV_VENV_IN_PROJECT)。これは環境によって違いそうなのでpipenv shellするときのオプションであったほうが便利そうな気もする。

カレントディレクトリにPipfileを作成してくれて、pipenv経由でパッケージをインストールするとPipfileの更新なども同時にやってくれる。これまでだとpip freezeとかいちいちしないといけなかった部分が、PHPでいうところのcomposerみたいな感じになっているということ、なんだと思った。

9/21追記:任意のディレクトリでpipenv shellして環境が作成されたあと、そのディレクトリを別のパスに移動したあとにpipenv shellすると新規のvirtualenvが作成される、元の場所に戻すと前のvirtualenvに戻れるので、やはりsuffixのハッシュはカレントディレクトと連動している模様。

virtualenvから抜けるには

pipenv shellした環境はvirtualenvでsource activateした場合と違ってサブシェル中で動作しているようなので、環境を抜けるにはCtrl+Dかexitする必要がある。deactivateしてしまうとvirtualenvな環境からは実質抜けてるけどpipenvが起動したサブシェルからは抜けられないみたいな中途半端な状態になってしまうので注意する。

環境の削除

普通のvirtualenvなので、上記の~/.local/share/virutualenv/配下の該当ディレクトリを丸ごと削除すれば良さそうだけど、もしくはpipenv shellしたのと同じディレクトリでpipenv --rmとすれば対応する環境は削除される。

その他

繰り返しだが作成されるのは普通のvirtualenvなので、
$ source ~/.local/share/virtualenv/hogehoge/bin/activate
とかすれば任意のディレクトリで特定のvirtualenvに入ることもできる。

2017年10月9日月曜日

Classic MacOSの文字化けしたファイル名を修正する

とある事情から、Classic MacOS上で作成したファイルを開く必要があり、フロッピーからバックアップを取っていた.imgファイルからファイルを復旧しました(.imgはディスクユーティリティで.dmg形式に変換する必要もあった)

ところがディスクイメージ形式の変換も終わりいざディスクイメージをマウントしてみると、日本語のファイル名が全て文字化けしている状態でした。 そもそもフロッピーからイメージ化したのもClassic OS上だし仕方ないことなのですが、いかんせんファイル名が見えないことには 何もわからないので、変換する方法を調べてみたところ、Apple自身がファイル名の修正ユーティリティを提供していました。

File Name Encoding Repair Utility v1.0 https://support.apple.com/kb/DL355?locale=ja_JP

使い方は、アプリを起動したあと対象のファイルをドック上のアイコンにドラッグ&ドロップすればOKで、その後はポップアップされるダイアログにしたがって処理を行えば良いです。

"Correct Text Encoding"は、この記事をみている人であれば"Japanese"にすると良いような気がします。

2017年8月26日土曜日

Raspbian上で仮想キーボードをインストールする

Raspberry pi 3を7インチ タッチスクリーンディスプレイで利用しているのですが、ちょっとしたキー操作の時にもUSBキーボードを繋がないといけなくて面倒だなと思っていました。本格的にタイプするときにはVNC経由でmacから操作するからいいとして、とりあえずちょっと操作したいときにタッチスクリーンだけで完結したいなと思って調べました。

Raspbirn上で仮想キーボードを表示して、タッチスクリーン上から文字入力を行うには、matchbox-keyboardというパッケージを導入すれば良いようです。

通常どおり
$ sudo aptitude install matchbox-keyboard
としてインストールするだけです。

どうでもいいけどネット上のblogみるとみんなapt-get使ってるけどなんでなんでしょう、aptitudeのほうが使いやすそうなんですが、Debianはあまり詳しくないのでよくわかりません

インストールするとメインメニュー>アクセサリ>Keyboardで起動できるはず…なのですが、私の場合はなぜか一度メインメニュー>設定>Main Menu Editorを起動して、 アクセサリのメニューからKeyboardの項目のチェックをOff→Onしないと表示されませんでした(キャッシュとかの関係でほっといてもそのうち出てくるのかもしれない)。


2017年8月21日月曜日

Technology RadarをCSVに対応させた

ThoughtWorksというところがTechnology Radarというレポートを半年に一回ぐらい発表しているのですが、それの可視化に使われているツールをオープンソースで提供しています。これを使えば私家版のTechnology Radarが作成できる、というわけです。
https://github.com/thoughtworks/build-your-own-radar

面白そうだと思ったのですが、難点があると思っていて、Google Docsにしか対応していないようでした。これが、github上でCSVとかに対応できていれば、みんなでcommitしたりして使えるので良いのではないかな、と思いました。
で、作ってみた。
https://github.com/hkurosawa/build-your-own-radar/tree/csvsupport

本家にpull requestも投げてみているけど、どうでしょうか。

2018/9/21追記: 取り込んでもらえました。

RasPi 3 でWiringPiでエラーがでたのでpigpioを使った

Raspberry pi 3でサーボの制御をやってみようと思ってSG90というサーボモーターを購入しました。電子工作の分野では最も手軽なモーターでネットで調べても情報が多そうだったので。これをうまく動作させるために少しハマったので、その記録です。結論としてはwiringPiは使わず、pigpioというライブラリを使うことにしました。

環境は以下。
pi@raspberrypi ~/src/wiringpi % cat /etc/issue
Raspbian GNU/Linux 8 \n \l

pi@raspberrypi ~/src/wiringpi % uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

RPi.GPIOでのPWM出力サンプルを試すとサーボは動作するのですが「ブルブル」と振動してしまってうまく静止してくれません。動作のチェックには十分ですが、なにか意味のあるものが作れる品質ではなさそう。

調べるとサーボモーターの制御にはPWM出力を使うのですが、精度の良い出力を得るためにはwiringPiというライブラリを使うのが定番のようでした。

ですが、サンプルプログラムの
import wiringpi
PIN = 18 pi.wiringPiSetupGpio()
pi.pinMode(PIN, pi.OUTPUT)

これのpinModeをコールした時点で、なぜかSDカードがイジェクトされたというメッセージがデスクトップに現れ、OSも事実上フリーズ(?)電源のOFF/ONを強いられるというよくわからない挙動に遭遇しました(実際にはインタラクティブシェル上)

wiringPiをpipからでなくソースからビルドしたりしても挙動は変わらず、ネットを検索してみてもそれらしい情報がなかなか見つからなかったのですが、カーネルのバージョンが新しすぎてwiringPiが対応してないっぽいという記事を見つけました。

WiringPiで「Unable to determine hardware version. I see: Hardware : BCM2835」エラー
http://qiita.com/jollyjoester/items/ba59e5d43e28b701f120


カーネルをダウングレードするのも嫌なので代替のものがないのか調べてみたところ、

pigpioというライブラリがもともとRaspbianには設定されているようで、以下の記事のとおりにやったら動作し、RPi.GPIOを利用したときの「ブルブル」という振動も発生しないようでした。


pigpioでサーボモーターを動かす。
http://blue-black.ink/?p=294

2017年7月8日土曜日

ANKERのPowerCore 10000とSeriaのUSB-CケーブルでPowerBook Proに充電できるか試した

SeriaでUSB-A/USB-Cケーブルが売られていたので、モバイルバッテリーのPowerCore 10000でPowerBook Proが充電できるのかを試してみました。 PowerBook Proは13インチの2016年タッチバーなしモデル、 モバイルバッテリーはANKER社のPowerCore 10000です。以下。
  結論。ぎりぎり充電できました。

USBケーブルはSeriaで108円で売られていた以下のケーブル。念のため3.0A対応と明記されているものを選びました。
   
注意しないといけない点は、アプリケーションを利用していない状態なら充電状態になったが、ただしFireFoxとかが「エネルギーを激しく消費中」と表示されているようなケースでは、いわゆる「給電モード」になるようで、ようするに利用しながら充電という、いわゆる電源アダプターと同じような利用方法は無理そう。持ち運び時のスリープ中などに充電する、という使い方ぐらいならそれなりに使えそうです。

PowerCore 10000の出力は5V/2.4Aでケーブルは5V/3.0A対応ということで、理論上12Wの給電が可能なはず。念のためシステムレポートで確認してみました。
スペック通り、12Wの電源として認識されているようです。

ちなみに純正のアダプタで充電している状態では以下。
60Wなので、ようするにおよそ1/5の充電速度、ということで良いんでしょうか。

PowerBook Proのシステムレポートだと、本体のバッテリー容量は
完全充電時の容量(mAh): 4602
ということのようなので、カタログスペック上はPowerCore 10000は10000mAhなので、2回できる計算になりそう(そんなにできるのかな、これは試してない)。ただしPowerBook Proが半分ぐらいの充電状態でも満充電まで8時間とか表示されていたので、本格的な充電の用途には期待せず、あくまで保険的なものと考えたほうが良さそうです。

いずれにしても、PowerCore 10000はメインがスマホの充電用でAmazonだと2,000円ちょっとと非常に安価に買えるバッテリーだし、普段は携帯の充電用として持ち歩き、万が一PowerBook Proの充電が危ないときには緊急回避的に充電できるという意味では、非常に便利に使えると思う。ちなみに私はすぐ必要だったので店舗で買ったんだけど、Amazonの倍ぐらいして5,000円ぐらいで買った記憶がある。なんでそんな安いんだAmazon。

PowerBook ProのUSB-Cコネクタは賛否両論あるけれど、こんな風に充電に関して汎用的な製品が利用できるというのは、大きなメリットの一つだと思うし、PowerCore 10000もとても小さいのに容量も十分にある製品なんで、PowerBook Proを持っているならば一つ持っておいて損はない製品だと思いました。

追記。PowerCore 10000にはQuick Charge 3.0対応の新モデルが出ているようでした。こちらだともう少し性能が良いのかな。