2019-12-11

Python: Unable to open 'parsers.pyx': Unable to read file (Error: File not found)が出たときの対処法

初歩的なネタです。
Pandasでcsvファイルを開こうとしたら、下記のエラーに遭遇。
  • Unable to open 'parsers.pyx': Unable to read file (Error: File not found (c:\users\XXXXXXXXXXX\pandas\_libs\parsers.pyx)).
このメッセージを真正面から解釈すると、
  • parsers.pyxがない?
ということになりますが、これはミスリード。単純に開こうとしているファイルがないか何か問題を抱えているということになります。今一度確認しておきましょう。


2019-11-13

zappaのインストールメモ

zappaをanacondaで作成した仮想環境にインストールした際に、zappa init でちょっと手間取ったところがあるのでメモ書きです。

AWSの環境設定
ここは大前提なので書かれてないことが多いですが、awsを使うので当然、AWS周りの環境設定は必要です。
・aws-cliをインストール
・Lambdaを動かすアカウントを作成しておき、Access Key などをメモっておく
・aws configureでAccess Key ID、Secret Access Key、region name、output formatの4つを設定する

zappa用の仮想環境の構築
仮想環境作って、下記のようにインストールしましょう。
$ pip install flask
$ pip install zappa
ネットに出てくる情報は、virtualenv を使ってってのが多いですが、Anaconda(GUI)で仮想環境作ってもOKです。ただ、Anaconda(GUI)の場合、デフォルトではzappaのインストールができなかったので、pipコマンド使いました。

AWSで権限の設定をしておく
これについての情報が非常に少なく、もしかしたら私が勘違いしているのかもしれませんが、zappaを使うということは、当然LambdaとかAPIGatewayなどをアクセスする権限(ロール)の設定が必要なはずで、このあたりの設定が不十分だと、zappa でのデプロイ時に権限がらみのエラーが出ます。とりあえず下記のロールを追加しとくとエラーはでないでしょう。
  •  AWSLambdaFullAccess
  •  IAMFullAccess
  •  AWSLambdaDynamoDBExecutionRole
  •  AmazonAPIGatewayAdministrator
  •  AWSCodeDeployRoleForLambda
  •  AWSLambdaExecute
  •  AWSCloudFormationFullAccess
なお、IAMのポリシー設定についてはGitHubで議論があります。

Zappa init で初期設定ファイルを作る

$ zappa init
このコマンドを実行することで、zappa_settings.js というファイルができます。
ここで以下のようなエラー出たときの対処法を書いておきます。

エラー:zappa init error: "Zappa requires an active virtual environment
このメッセージが出たときは、環境変数でVIRTUAL_ENV を設定してください。
(Windowsの場合)
$ set VIRTUAL_ENV=c:\users\xxxx\appdata\local\continuum\anaconda3\envs\flaskenv
エラー:zappa Init error 'utf8' codec can't decode byte 0x**
このエラーは単にディレクトリの(権限の?)問題だけのようです。(自分がこれから作成しようとしている)Pythonのプロジェクトファイルのフォルダに移動してみてから initを再度実行してみてください。

zappa_settings.jsonファイルの修正
必要に応じてファイルを修正しましょう。ここの肝は、project_nameという変数を変えることで、別プロジェクトのような扱いになります。つまり異なるLambda関数となり、APIGatewayでのURLも変わることになります。

zappaコマンド(デプロイ、更新、削除)
インストールに成功したら、あとの操作は下記のようになります。
(はじめてプロジェクトをデプロイする場合)
$ zappa deploy dev
(更新する場合)
$ zappa update dev
(削除する場合)
$zappa undeploy dev








2019-11-08

Googleシートでセルに入っている改行付きデータを行や列に分割する方法

1つのセル内に改行付き複数行データが入っている場合に、改行ごとに列や行に割り当てる関数の書き方です。

列に割り当てたい場合
split関数で改行コードごとに分割して出力すれば、各データは異なる列に反映されます
=split(join(char(10),A1),char(10))

行に割り当てたい場合
列のやり方の応用です。splitで列として出力される結果をtranspose関数を使うことで転置させることで行に反映されます
=transpose(split(join(char(10),A1),char(10)))



GAS:コピペした英文をグーグル翻訳にかける前の前処理(改行処理)

英語論文などを読むときには、なんだかんだとグーグル翻訳に頼る機会が少なくないかと思います。ただ、PDFのテキストをコピペすると、変な位置に改行が入っていたりして翻訳がおかしくなることがしばしばです。そこで、Google翻訳にかける前の改行処理を自動化するGASのスクリプトを書きました。
JavaScriptですから、いろいろ転用できるかと思います。なお、正規表現を使ってます。



2019-11-04

Flutter for Webの環境構築について

FlutterがWeb対応したようなので、その環境構築について。なお、Flutterの環境自体はできているものとします。

Flutter for Webのライブラリをとってくる
gitでとってきます。。。
$ git clone https://github.com/flutter/flutter_web.git
パッケージの更新
Githubからダウンロードしたら、そのディレクトリからexamples/hello_world/へ移動(cd)した後、下記のコマンドを実行します。
$ flutter packages upgrade
$ flutter packages pub global activate webdev
$ pub get
ここで1つ注意点が。。。 pubのコマンドを実行する前に、下記の2つについてパスを通しましょう(パスは自分の環境に合わせて下さい)。.bash_profileに書いておくといいです。

  • $ export PATH="$PATH":"$HOME/flutter/.pub-cache/bin"
  • $ export PATH="$PATH":"$HOME/flutter/bin/cache/dart-sdk/bin"
ウェブサーバーの立ち上げ
下記のコマンドでウェブサーバーを立ち上げると、http://localhost:8080 でアクセスできます。
$ webdev serve
Hello worldの文字が出てくれば成功です。




bashの設定ファイルについて

bashの設定ファイルについて超初歩ネタです。bashの初期設定ファイルは、.bashrcと.bash_profileの2種類があります。知識のアップデートのできていないオールドタイプの私としては、.bash_profileなにこれ?というか、.bashrcファイルがない!(Macの場合)と慌てたわけですが、
  • .bash_profile ・・・ログイン時に読み込まれる
  • .bashrc ・・・ シェル起動時に読み込まれる
という違いがあるようです。適材適所で使い分けましょう。


2019-10-18

GoogleSheetのセルを線形探索する

GoogleSheet内のある列を対象に線形探索するケースが対象です。この時によく言われるTIPは、
  • Sheetにアクセスする回数をできるだけ減らすこと
です。つまり、列のデータを全部とってきて配列に格納し、配列に対して線形探索をするというのが速度向上にも繋がります。で、これをfor文とかでループする。。っていうコードをついつい書いてしまう年頃なんですが、配列に実装されているメソッドを使ってシンプルなコードがかけるじゃんというのが、今日のネタです。
下記はそのサンプルですが、ちょっと1箇所だけ、getValues()とJavaScriptのobjectの使い方がよくわからなかったので、ちょっと細工をしてますがそこは適当に解釈してください(要は、文字列配列にしたかっただけです)。


2019-10-02

Google Hangouts Meet でパワーポイントスライドの画面共有

(2020/05/02追記)
下記の最新記事を書きましたのでこちらを御覧ください (以下は元記事として残してますがちょっとネタが古いかも。。。新記事のほうがスマートです)

Google Hangoutsは、チャットの他にビデオ会議も利用でき、複数人(25名まで)とも同時に接続できるという便利なツールです。ビデオ会議についてはGoogle Hangouts Meet に移行していくという話もあり、現在(2019/10/02)はG Suiteに加入してるユーザのみ利用できるサービスとなっています。というわけで、本記事はHangouts Meetが利用できるG Suteユーザー限定の話になります。

※なお、G Suite限定のサービスと書きましたが、一般のGoogleアカウントを持っている場合でもHangouts Meetには「参加」できます。ホストになれない(ミーティング作成できない)だけです。

旧Hangoutsでパワーポイントのスライドが画面共有できない
普段は旧Hangoutを使う派だったのですが、パワーポイントのスライドを画面共有しようとしたら、スライドショーの画面が表示されないということに気づきました。いろいろ試行錯誤したのですが、全画面表示しない限りは無理っぽい感じ?

Hangouts Meetでスライドショーを共有する
旧Hangoutsの後継という話でもあるHangouts Meetを利用できる環境でしたので、試してみたら以下の手順でできました。

(1)パワポとHangouts Meetを起動
まずは、Hangouts Meetとパワポを起動しましょう。



(2)スライドショーの実行
続いて、パワーポイントのスライドショーを実行します。下記のように画面にスライドが表示されたと思います。









(3)Alt+TabでHangouts Meetの画面に戻る
ここが一番のポイントです。スライドショーが実行されている状態で、Alt+Tabを選びます。これがWindowsのウィンドウ切り替えのショートカットになります。実行中のアプリのウィンドウが下記のように並んでいるはずですから、Alt+Tab(MacならCommand+Tab)を押しながらHangouts Meetのウィンドウにフォーカスを移動させて、Hangouts Meetの画面に戻りましょう。







(4)スライドショーのウィンドウ共有を選択
Hangouts Meetの画面共有は旧Hangoutsと少しだけやり方が異なります。画面右下に「今すぐ表示」というボタンがあります。ここを押すと、画面共有の設定メニューが出てきます。
「ウィンドウ」を選んで「スライドショー」の画面を選びます。パワーポイント本体ではないことに注意してください。



これで解決です。同じことを旧Hangoutsでやると、画面が真っ黒になったりスライドを変更しても変わらなかったりなど、ちょっと意味不明な状態になってましたが、Hangouts MeetならOKです。G Suiteを利用されてるなら、これを機会にHangouts Meetに移行もいいかもしれません。

2019-09-25

Windows10からフレッツ光のルーターにVPN接続できない問題の解決方法

Macでは問題なく接続できたのに、Windowsだと、、、ということがあるようで、ネットでググると出てきますが、1点だけ追加事項があります(下記2つ目)。

(1)「チャレンジ ハンドシェイク認証プロトコル (CHAP)(H)」にチェック
「ネットワークとインターネット」 → 「VPN」 → 「アダプターのオプションを変更する」で、ネットワーク接続を開きます。続いて、対応する VPN アダプターの「プロパティ」から、「セキュリティ」を選んで、チェックを入れましょう。

(2)IPv6を無効にする
これはすべてのケースではないと思いますが、
  • フレッツの環境:IPv4とIPv6に両対応
  • アクセス環境:IPv4のみ
となっている場合、うまくいかないことがあるようです(というか私の場合がそうでした。上記の手順で対応する VPN アダプターの「プロパティ」から、「ネットワーク」を選んで、「インターネットプロトコルバージョン6」を無効にしましょう。

2019-09-17

UUIDとその生成方法

UUIDとはUniversally Unique Identifierの略で
  • (世界的レベルでみても)重複することのないID
のことです。BLEなどの通信ではこれを利用してデバイスの区別をし、データを受信します。UUIDは基本的に自由に設定できるものですが、上記の条件を満たすことが条件です。
ただ、IPアドレスやURLのように厳密性はないので、ネットなどのサンプルプログラムに載っているUUIDを使ってもとりあえず動きますが、実運用上、絶対に重複することはないという確証がないかぎり、変更したほうがいいです。

UUIDの作り方
日付、時間、MACアドレス、緯度経度、乱数、組織名、個人名などを組み合わせて作るのが基本です。が、いちいち考えるのがめんどくさいので
を使いましょう。プログラムで動的に生成したい場合は、過去記事
のようなライブラリを用いることをオススメします。




2019-09-11

Python: CarbonSound/CarbonSound.h' file not foundが出た場合

MacにAdafruit_BluefruitLEをインストールしようとして
  • python setup.py install
を実行すると表題のようなエラー。

解決策は、最新のPythonでバージョンアップしろ。。ということでした。私の場合は、なぜか2.7系で実行されていたので、3系に変更したらなんなくコンパイル成功しました。

2019-09-06

MacでM5Burnerがうまく動かなかったときのメモ書き

2019/09/05現在のバグと思われるので、将来的には解消される一時的なネタのメモです。
MacでM5StackのUIFlowを試してみようかと思い、ファームウェアを焼こうとM5Burnerをダウンロード。M5Burner上でファームウェア選択してダウンロード&Burnという手順を踏むことになるのですが、ダウンロードアイコンをクリックしても反応なし。Burnボタンを押してもダウンロードしろというエラーメッセージ。意味不明。。やっぱりMac版はまともに動かないのかな?

解決策:M5Burner.app内のM5Burnerを実行せよ
実行ファイルであるM5Burner.appを実行するのは、この記事を書いている段階ではだめらしい。M5Burner.appのコンテキストメニューを開いて(Ctl+Click)、「パッケージの内容を表示」を実行。それから、
  • Contents->MacOS->M5Burner を実行
で、正しく動作するM5Burnerが起動します。

この手の情報は朝令暮改で、どんどん情報が変わっていくので要注意です。

2019-05-24

PythonでOpenCVでのラベリング処理

PythonでOpenCVでのラベリング処理を行う場合は、下記のコード通りに行います。注意点は
  • 画像を2値化すること
  • ラベリング結果は画像によっては画像全体を抽出する場合がある
後者については、最大の面積を持つ領域を取り出したい場合に要注意です。



2019-05-22

Python:マルチページTIFFを読み込んで1ページずつ処理する(imreadmulti利用)

PythonでマルチページTIFFを処理する方法。過去記事では、
  • OpenCVでは未対応
と書いていましたが、OpenCV3からはimreadmultiが使えるようなので、それでシンプルに解決です。戻り値は、読み取り成功か失敗かのboolと、イメージのリスト(matの配列)が返ってきます。


2019-02-25

Python: pandasでCSVファイルを読み込む際の文字コードによる使い分け

CSV形式のファイルをpandasを利用して読み込む場合、Shift-JISの場合にうまくいかなかったのでそのメモ書きです。 UTF-8の場合はread_csvファイルを使えばいいですが、Shift-JISの場合は、codecsでopenしてからread_tableでdataFrameに変換しましょう。




2019-01-29

Proxy環境下でDropboxをアップデートする方法

Proxyの環境下ではいろいろネットワークのポートが塞がれているため、意外なサービスが利用できなかったりします。Dropboxもその1つですが、DropboxはProxy設定ができるのでそれを設定しておけば、たいていの場合はうまくいくでしょう。
しかし、うまくいかないのがDropboxそのもののアップデートです。基本的に自動的にアップデートしてくれるはずなのですが、それがうまくいかないことがあります。

解決策:オフラインインストーラーをダウンロードする
Dropboxの通常のインストーラは、インストーラー自体が実際の最新ファイルをダウンロードしてアップデートを行います。このインストーラーにProxy設定はできないようです。そこで、 にアクセスしましょう。これを用いれば、問題なくアップデートをできるでしょう。

2019-01-22

Azure Table Storageの使い方 ~テーブルへの接続~

Azure Table Storageとは
Azure Table Storageは、AWSでいうDynamoDBの位置づけのようです。料金的にも容量とアクセス数のみらしいので(誤解しているかもしれないが)、いろいろ考えた末、Azure Table StorageをラボのメインDBに変えていこうか、、という結論に至りました。

Azure Table Storageのセッティング
Azure Table Storageは、Azure Storageの機能の一つとなっています。セッティングは簡単です。ポイントだけ書いていきます。
  • AzurePortalサイトからStorageアカウントは作成しておく
  • テーブルは事前に作成しなくても良い
  • Storageアカウントのアクセスキーより、接続文字列を入手しておく

Visual Studio の設定
下記の2つのライブラリをNugetで明示的に取得しておく
  • WindowsAzure.Storage
  • Microsoft.WindowsAzure.ConfigurationManager
Nugetマネージャーを見てみると他のライブラリも登録されていましたが、これらに付随してインストールされた可能性あり。

サンプルコード
アカウント情報(アクセスキーなど)はコードに直接記述せず、App.configファイルに記述してプログラムにアクセスするのが基本です。下記のようにApp.configファイルに記述します。
<appSettings> <add key="StorageConnectionString" value="XXXXXXX" /> </appSettings>
XXXXXのところは、上記で取得した接続文字列をそのままコピペしてください。

下記のコードは、"SampleTable"というテーブルに接続している例です。



2019-01-07

論文の図作成にはDrow.IOが良いみたいです

ラボでは、原則図などはパワポを使って作成するように指示してきました。これは、
  • 発表スライドとしてそのまま使える
  • パワポはまずこの世から無くなることはないだろう(データの持続性)
という狙いがあったからですが、ここ数年前からゼミ内では、Drow.IOというのが流行っているようで。。。個人的には、勝手に変なものを使われると困るなぁと思っていたのですが、意外とそうでもない?ことに気づきました。

Drow.IOの特徴と利点
個人的におすすめできる点は下記です。
フリーのやつって、急にサービスが終了されたりすることがありますが、これは、オープンソースで保守されているのでちょっと安心かな。頻繁に更新されているようですし。個人的に気に入ったのは、PDFに出力するときに、該当部分だけトリミングしてくれる、いわゆるcropの機能があることです。Tex用に画像を作るときは便利だと思います。

Drow.IOの欠点
Wordへの貼り付けには注意が必要です。PNG等の画像にして貼り付けると確実に画像が劣化します。おすすめは、PDF→emf(拡張メタファイル)と変換してからWordに貼り付けることです。pdfをemfに変換するには Inkscape などのアプリを利用しましょう。こういった手間がかかるのが欠点といえますね。