そうだったのか。pandasの`read_table()`が「非推奨ではない」になっていた。

うーん、pandasのread_table()は非推奨だよと書いてあるのを見かけるので使わないようにしていた。確かに一時期非推奨になるはずだったようだが、実は今では非推奨が取り消されていた。これだ。

Keep (un-deprecate) `read_table()` for API stability · Issue #25220 · pandas-dev/pandas · GitHub

そうだったのか。だったらAPIドキュメントには非推奨の記載を消すだけじゃなくて「一時期非推奨だったけど取り消されたよ。今は非推奨じゃないよ。」って書いてくれ。世の中まだread_table()は非推奨だって書いてある物がいっぱいあるよ。取り消されたの知らなかったよ。

そして、WinUI 3

マイクロソフトがいざなう僕らの旅は、やはり終わらない。

Introducing WinUI 3 Preview 1 - Windows Developer Blog

これまでの道は二又三又たくさん又あって、行き止まりって思ってた道も、結局全部また1つの道に集まってくる...。旧道もなんとか先を通して別れてた道を一つにつなげたのか。しかし、これでめでたし、な予感はしないぞ。私が生きているうちには、先が安心な一本の道はできないような。

ラズパイ用のRustのバイナリをMacでクロスコンパイルしたい。crossが便利だった。

Mac上で、Rust言語のプログラムを書いてラズパイ用のバイナリを生成したい(なるべくラズパイでビルドしたくない)。
Rustなのでクロスコンパイルできるのですが、Macにそれなりにラズパイ用のリンカとか入れないといけないし、テスト実行もできない...当たり前だ。
そんな時これだ。

github.com

環境構築も楽だし(ただしdockerはいるが)、実行までできちゃうぞ。

# インストール
$ cargo install cross
# ビルド
$ cross build --target armv7-unknown-linux-gnueabihf
# テスト!
$ cross test --target armv7-unknown-linux-gnueabihf
# 実行!!
$ cross run --target armv7-unknown-linux-gnueabihf

やったー。あっ、でもラズパイのGPIOとか使ってるコードは実行できないな。これまた、当たり前だ。

zsh Prezto でプロンプトのカレントディレクトリが短縮されるのをやめる

MaczshPrezto を使っている。デフォルトだと、プロンプトのカレントディレクトリは短縮表示される。こんな感じ。

f:id:osamuk:20200119222539p:plain
プロンプトのカレントディレクトリが短縮表示される
短縮してほしくなかったのでPreztoの設定変更法を調べた。プロンプトの設定は ~/.zpreztorc です。

# Set the working directory prompt display length.
# By default, it is set to 'short'. Set it to 'long' (without '~' expansion)
# for longer or 'full' (with '~' expansion) for even longer prompt display.
zstyle ':prezto:module:prompt' pwd-length 'long'

最後の行pwd-length 'long'で短縮されなくなります。こんな感じ。

f:id:osamuk:20200119222546p:plain
プロンプトのカレントディレクトリが短縮されてない

pandasのread_fwf()が日本語の固定長データだと残念な件

とある固定長データファイルをpandasのread_fwf()で読み込もうと思ったのですが。そのデータファイルは日本語の固定長データとしては一般的な、文字列は半角1バイト全角2バイトで数えてxxxバイト固定ってやつだったわけです。んでpandasで固定長データ読むならread_fwf()ってことで使ったのですが、なんかデータ区切りを正しく読めてない...。使い方どこが間違ってるのか、なかなか分からなくて...。で、結局read_fwf()はデータ長として"文字数"を数えているのでしたとさ。今回のような日本語固定長データには使えませーん。残念。

MacBook Pro 16インチモデル 来た!

MacBook Pro 16インチモデル 来た! ついに買ったのだ! いやあ嬉しいです。これまでMacBookPro15 2013 lateを使い続けていたので、とても嬉しいです。移行アシスタントは使わずクリーンな状態から必要な物を手作業で入れて育て中。夜な夜な作業して、あと何日かかるかなあ。しかし今はそれもまた楽しいのだ。

f:id:osamuk:20191121230803j:plain:w200
MacBook Pro 16inch

PythonでIMAPメール操作なら、IMAPClientが便利だった件

PythonIMAPでメール受信したくなった。標準のimaplibで基本的に可能なわけですが、実は結構めんどくさい。まずフォルダ名の取得からして、結果文字列がエンコードされたままで日本語だとそのままでは読めない...。読める文字列にするには何かと面倒...。メール読みたいだけなのに、正直辛い...。
で、手元にあった本、

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

を改めて読んでみたら、IMAPには「IMAPClient」というのを使っている。こっちの方がよかった。

pip install imapclient

してインストール。
違いは下のよう。

# 標準のimaplibの場合
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('foo@gmail.com', 'password')
mail.list()
#取得結果のままでは日本語文字列エンコードされてて読めない...
> ('OK',
 [b'(\\HasNoChildren) "/" "INBOX"',
  b'(\\HasChildren \\Noselect) "/" "[Gmail]"',
  b'(\\All \\HasNoChildren) "/" "[Gmail]/&MFkweTBmMG4w4TD8MOs-"',
  b'(\\HasNoChildren \\Trash) "/" "[Gmail]/&MLQw33ux-"',
  b'(\\HasNoChildren \\Sent) "/" "[Gmail]/&kAFP4W4IMH8w4TD8MOs-"'])
# IMAPClientの場合
import imapclient
server = imapclient.IMAPClient("imap.gmail.com", ssl=True)
server.login(foo@gmail.com', 'password')
server.list_folders()
#取得結果がすでにデコード済みの文字列、日本語も読める!!
> 
[((b'\\HasNoChildren',), b'/', 'INBOX'),
 ((b'\\HasChildren', b'\\Noselect'), b'/', '[Gmail]'),
 ((b'\\All', b'\\HasNoChildren'), b'/', '[Gmail]/すべてのメール'),
 ((b'\\HasNoChildren', b'\\Trash'), b'/', '[Gmail]/ゴミ箱'),
 ((b'\\HasNoChildren', b'\\Sent'), b'/', '[Gmail]/送信済みメール')]

これなら嬉しい。
IMAPメール本文を読むにはさらにひと工夫いるのですが、その辺は 上述の本退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミングでは、pyzmailを使っていて、確かに便利だ。pyzmailについてはまたいつか。