2018/03/27

pyenvとpyenv-virtualenvのインストール

同一PCで複数のPythonのバージョンを使い分ける必要ができてしまったので、調べてみるとpyenvというものがあるそうです。
また、pyenv-virtualenvも使うと幸せになれるそうです。

簡単に説明すると、以下。
  • pyenv
同一PC内に複数のバージョンのPythonの共存させるソフト。
2系と3系とかのレベルではなく、3.5.2と3.6.4を共存させたりできる。
  • pyenv-virtualenv
pyenvを使いやすくするためのソフト。
virtualenvとは別物(かなりややこしい。ネットでは一緒のものとして誤って説明されていたりするのでググるときには要注意!!)
pyenvだけでも使えるが、pyenv-virtualenvを使うことで何が嬉しいかというと。。。

(以下、URLからの引用)
https://qiita.com/maskedw/items/aaa2fd7abfd493cf2820
pyenv-virtualenvはpyenvのプラグインです。pyenvでは複数のPythonバージョンをインストールできますが、各Pythonバージョンのモジュールを管理するsite-packagesというディレクトリは共通です。pyenv-virtualenvを使用すると同じPythonバージョンで別々のsite-packagesを管理することができます。
開発中のアプリーケーションで使用しているモジュールのバージョンを全て固定したり、必要最小限だけのモジュールをインストールしたりすることによって、開発環境と実行環境の違いを最小限にすることができます。



pyenvのインストール

基本的にGithubのREADMEと同じです。
https://github.com/pyenv/pyenv
gitから持ってきます(pipでインストールできればいいのに。。。)
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
次に、設定をしていきます。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc
pyenvコマンドを実行して使えるかどうかを確認してください。

pyenv-virtualenvのインストール

こちらもGithubの説明と同様です。
https://github.com/pyenv/pyenv-virtualenv
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

使い方

#Pythonのコンパイルに必要なライブラリ軍をまずはインストール
sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

#pyenvでインストールできるバージョンの確認
pyenv install --list
#使用するバージョンのPythonをコンパイル
pyenv install 3.6.4

#仮想環境を作成
#ENV_NAMEは仮想環境の名前を入れます
pyenv virtualenv 3.6.4 ENV_NAME

#現在ある仮想環境を確認
pyenv virtualenvs

#仮想環境の有効化、無効化
pyenv activate ENV_NAME
pyenv deactivate

#仮想環境の削除
pyenv uninstall ENV_NAME

参考にしたサイト

https://qiita.com/akito1986/items/be5dcd1a502aaf22010b

2018/03/23

Jupyter Notebookを起動するとAttributeError: type object 'IOLoop' has no attribute 'initialized'とエラーが出る

Jupyterをインストール後、Jupyter Notebookを起動すると、下記のようなエラーが出てしまいます。

AttributeError: type object 'IOLoop' has no attribute 'initialized'

GitHubにはissueがすでに上がっているそうで、
https://github.com/ipython/ipython/issues/8374

下記コマンドを実行して、tornadoというソフトをダウングレードすることで、一時的に回避できるそうです。
pip3 uninstall tornado
pip3 install tornado==4.5.3

2018/03/21

Tensorflowが"Illegal instruction (コアダンプ)"で動かない

Tensorflowをインストールして実行しようとしたところ、エラーで動かなくなってしまいました。
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Illegal instruction (コアダンプ)
環境は下記です。
  • Tensorflow 1.6
  • Python 3.5
原因はよくわかっていませんが、一応TensorflowのVerを1.5にすることでエラーが出なくなりました。
(Ver 1.5.1では同様のエラーが出てしまいました。)
とりあえずはこれでやっていきます。
pip uninstall tensorflow tensorflow-tensorboard
pip install tensorflow==1.5

2018/01/26

Galaxy S7 Edge SC-02H をAndroid6にダウングレード

Galaxy S7 Edge SC-02HをAndroid6にダウングレードしてみました。

ROMを書き込むにはOdinを使用するので、ダウンロードします。
現時点での最新3.12.3をとってきました。
https://samsungodin.com/

次にSC-02H用Android6のROMをダウンロードし、展開しておきます。
下記URLのStock ODIN firmwareを落とします。
https://forum.xda-developers.com/s7-edge/samsung-galaxy-s7-edge-snapdragon-roms-kernels-recoveries--other-development/rom-kernel-twrp-snapdragon-sm-g935d-t3540431

次はGalaxy S7 Edgeの設定です。
  1. 開発者モード内のOEMロック解除をON
  2. 一度電源を切り、電源ボタン+音量下ボタン+ホームボタンを同時長押ししてDownloadモードで起動
  3. 注意事項を読み、音量上ボタンで承諾
  4. USBでPCとつなぐ
  5. Galaxy S7 Edgeが認識されたか(ドライバは入ったか)確認
次に、Odinを起動します。
ログ画面に"Added."と出力されていれば、スマホが認識されています。

Odinの画面の右側に"BL"、"AP"、"CP"、"CSC"の入力欄があります。そこにダウンロードしたROMファイルの先頭の名前が対応するように選択していきます。
(APなどの容量の大きいファイルを選択した際には、認識までに時間がかかるので、待ちます。)

次に"Start"を押します。

これでOKです。
しばらく待つと、スマホが自動的に再起動して、初期設定画面になります。

参考にしたサイト
http://reviewdays.com/archives/56765

2017/11/25

pybluezを利用すると"untimeError: Channel or attrib not ready"とエラーになる

pybluezをインストールしたので、サンプルなどを動作させようとしたのですが、、、
https://github.com/karulis/pybluez/tree/master/examples/ble
"read_name.py"を実行したのですが、下記のエラーで動作しません。
Connecting... Traceback (most recent call last):
  File "read_name.py", line 41, in 
    Reader("C7:7A:98:EA:17:17")
  File "read_name.py", line 16, in __init__
    self.connect()
  File "read_name.py", line 23, in connect
    self.requester.connect(True)
RuntimeError: Channel or attrib not ready
エラー名でぐぐってみると、gattlibが古いことが原因かもしれないと書いてあるので、
https://github.com/ev3dev/ev3dev/issues/775
pybluez, pygattlibともにソースからインストールしましたが、現状変わりません。
https://github.com/karulis/pybluez
https://bitbucket.org/OscarAcena/pygattlib
(というか、pygattlibは2年更新があまり無いですね。。。)

解決したら、また記事にする予定ですが、一応pybluez以外も試してみます。。。


2017/10/31

Choregrapheで独自ライブラリの作成方法

Choregrapheで分散開発を行う時に、各モジュールを「ボックスライブラリ」として分割することで、
各人でモジュールごとに開発して、別プロジェクトで利用することができます。

今回は例として"hello"というボックスライブラリを新規作成して、別プロジェクトに持っていき、実行してみます。

"Hello"というプロジェクトを新規作成して、サンプルとしてsayボックスを配置します。

次に全ボックスを選択し、右クリック->ボックスに変換 を行います。
このようにすることで、複数あるボックスを1つにまとめることができます。
今回は"Hello"というボックス名としました。

次に空のボックスライブラリを作成します。
下記画面部で新規作成します。
今回は"Hello"というライブラリ名にしました。
cblという拡張子で保存します。

ボックスライブラリはできました。
しかし、中身が空なので展開等はできません。


次に、先ほど1つのボックスにした"Hello"ボックスを"Hello"ボックスライブラリにドラッグ&ドロップします。そして、ボックスライブラリを保存します。
これで、"Hello"という独自ボックスを他のプロジェクトでも利用できるようになります。

次は、独自ボックスを利用したいプロジェクトでの利用方法です。
"Main"というプロジェクトを新規作成します。
次に、「ボックスライブラリを開く」で"Hello.cbl"を選択します。
このようにすることで、利用側でも"Hello"ボックスを使うことができるようになります。
利用方法は他のボックスと同じです。

参考にしたサイト
https://qiita.com/Atelier-Akihabara/items/db907ed319b8af0984db

https://qiita.com/ForexRobotics/items/5258892f1588319d0204

2017/09/04

Ubuntuにpybluezをインストール

UbuntuでBLEアプリを開発するので、pybluezをインストールします。

まずは、BlueZをインストールします。
ネットでは、ソースコードをコンパイルしている記事が多いですが、apt-getでインストールしたものでも動作確認できました。
sudo apt-get install bluez
次は、pybluezをインストールしていきます。
これもapt-getで入れてみたんですが、pythonで使おうとすると、「bluetooth.bleパッケージがない」と怒られてしまいます。。。

pipでインストールすると、bluetooth.bleパッケージができました。
(apt-getでもpipでもどちらでも0.22が入るはずなので、同じだろうと思うのですが、
実際にはpipではbleパッケージが追加されていました。)
pip install pybluez
pipでインストールにエラーが出てしまう場合は、下記のサイトのトラブルシューティングで解決できました。
http://qiita.com/dz_/items/4e858e4d50db19b57491

2017/08/21

PCE-AC55BTを購入しました

Bluetooth Low Energyを利用したソフトの開発を行うにあたって、デスクトップPCにBluetoothがついていなかったので、PCI Expressで拡張しました。

USBドングルでも拡張できますが、ほとんどがBluetooth 4.0までしか対応していないですし、ものによって動作の安定性が異なるのでPCI Expressでの拡張を行いました。

実際に取り付けたかったのは「Intel Dual Band Wireless-AC8260」.。
https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/dual-band-wireless-ac-8260-brief.pdf

アマゾンでも単体で売っていますが、m2をPCI Expressに変換するものを別途買う必要があります。

そこで注目したのが、PCE-AC55BTです。PCI Expressへの変換ボードも含めて売られています。
http://akiba-pc.watch.impress.co.jp/docs/news/news/1063334.html

こちらもアマゾンでも見つけたんですが。。。
https://www.amazon.co.jp/gp/product/B071PDKP7F/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

ん!?
画像がちょっと違うくね!?
端子がmini PCI Expressじゃね?
説明にもBluetooth 4.0ってかいてね?
しかも、ついてんの「Intel Dual Band Wireless-AC 7260」じゃね!??


詳しく調べると、今までは7260がついていたのですが、最近8260がついた新モデルが出たらしい。
だけど、どちらも同じ型番なので区別がつかない。。。

一か八かでアマゾンから買ってみました。

届いたのを見てみるとアマゾンの画像のものではなく、記事と同じもの。
8260がついていて、Bluetooth 4.2まで対応と書いていました。


おー。よかった。
これからUWPやXamarinでBLEアプリケーションを開発していきます!

2017/08/13

global::System.Diagnostics.Debugger.Breakdeでデバッグが止まったら・・・

UWPでサンプルプログラムを作成したとき、次の下記の位置でデバッグが停止してしまいました。。。
ちなみに、環境は、
  • Windows 10 64bit
  • Visual Studio 2015 Express
  • UWPアプリケーション
  • NugetでPrism.Unityをインストール済み
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();


そこで、エラーとなっている内容を確認すると、、、
Could not load file or assembly 'System.Runtime.WindowsRuntime, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

どうやら、WindowsRuntimeのバージョンが悪いそうです。
また、ビルドしたとき下記のWarningも出ています。
Warning        Detected package downgrade: Microsoft.NETCore.UniversalWindowsPlatform from 5.2.2 to 5.1.0
 uwp_sample (>= 1.0.0) -> Prism.Unity (>= 6.3.0) -> Prism.Windows (>= 6.3.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.2.2)
 uwp_sample (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.1.0)            0   
そこで、NugetでMicrosoft.NETCore.UniversalWindowsPlattformのバージョンを5.1.0→5.2.2にへんこうしたら、デバッグで止まらなくなりました。
本当は最新の5.4.0にしたかったんですが、VisualStudio2017のみそうだったので、5.2.2で、

2017/07/25

Androidへファクトリーイメージをインストール

Androidのダウングレードを実施したので、その記録を残します。
 今回はNexus6をAndroid 6.0.1へダウングレードしました。

はじめに、下記URLにあるように以下の作業が必要です
  •  AndroidでのUSBデバッグの有効化
  •  WindowsへのJava, Android Studioのインストール
  •  Android StudioのSDK Managerでplatform-toolsをインストール 
  •  platform-toolsフォルダをPATHに追加する(現時点では"C:\Users\(USER_NAME)\AppData\Local\Android\sdk\platform-tools"です。)
  • ファクトリーイメージ(Nexus6のAndroid6.0.1のイメージ)をダウンロード。解凍
http://denshikousaku.net/downgrade-android-lollipop
https://plaza.rakuten.co.jp/jashi/diary/201506200000/
http://androidlover.net/android-os/android-5-0-lollipop/android-5-0-lollipop-android-4-4-4-kitkat-download.html

後は、Googleの公式にあるようにコマンドを打っていくだけです。
https://developers.google.com/android/images

まず、デバイスをPCが認識しているか確認します。下記コマンドで、デバイス名が出てくれはOKです。
adb devices

この時に、他ページでは「○○ボタンと○○ボタンを長押しして、fastbootモードで起動する」という作業をやっていますが、以下のコマンドでその作業が行えるので、通常起動のままで下記コマンドを打ってください。
adb reboot bootloader

これでfastmodeになります。
ですが、"Device is LOCKED"となっていて、ブートローダーがアンロックされていません。
下記コマンドでアンロックします。
fastboot oem unlock

//もしデバイスがNexus 5X or Nexus 6Pだったらこちら
fastboot flashing unlock

"Device is UNLOCKED"と表示が変わったと思います。
最後に、ファクトリーイメージのflash-all.batをコマンドプロンプトで叩けばOKです。


参考になったサイト
http://taka-hama.sakura.ne.jp/blog/?p=731