non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

金欠で自作PC組めずに在宅勤務をSurface Goでやり過ごそうとしている話

おはようございます。奥さんから子供たちの学校関連のチェックを全くしない!とよく怒られている@kjunichiです。

背景

surface go、もちろんMS純正のキーボードと購入して使っている。

が、液晶ディスプレイにすると、単体のキーボードが欲しくなる。

太古の昔、マイクロソフトの携帯用Bluetoothキーボード

を持っているのだが、Windowsキーキートップが外れやすくなってしまっており、 業務中気になってします。

購入候補

Bluetooth一択w

USB-C端子がSurface Goには一つだけで、手持ちのマルチアダプターだと、VGAモニタ出力が突然使えなくなることが頻発w。 仕方なく、USB-Cの単体のディスプレイアダプタを使用。

そうなると外部USB端子経由でのキーボードが使えない。Bluetoothキーボード一択となる。

これにした!

打鍵感はさすがロジクールブランドだけあって文句なしだった。 が、白い部分が実物は大理石調のラバーで滑りにくくスマホをさせる様になっているが、自分のテイストではなかった。。

関連記事

15年前の記事

6年前の記事

cartopyでGPSデータを国土地理院のタイル地図にプロットして動画を作成して学んだこと

こんばんは。先日次男のPCR検査に行って来た@kjunichiです。ちなみに検査結果は陰性でした。この際に初めてタクシーをスマホから呼ぶアプリを入れました。

背景

子供たちと近所をサイクリングした際のサイコンのログを航空写真地図にプロットして どれくらい遠くまで行ったのか見返せたりしたら楽しそうと思うのと、 ソロで長めに走った際のペース配分や次回周辺を散策する際の面白そうな場所を調べるのに 役立つかもと思い、Pythonで取り組んでみた。

TL;DR

www.youtube.com

Python全般の学んだこと

配列の扱い

for hoge in hoges:

まぁ、割と問題ない

これまでの道のりを表示する際に必要になった、特定のインデックスまで配列要素を参照するには

for i in range(count + 1):
            tp = locations[i]

と記述することで対応できた。

複数条件のあるif文の書き方

pythonだと&&ではなく、andやorキーワードで連結する模様

長いif文の折り返し方法

if(hoge): とカッコで囲む

if (tp[1] < p[1] + zone*16.0/9 and tp[1] > p[1] - zone*16.0/9 
                and tp[0] < p[0] + zone and tp[0] > p[0] - zone):

cartopy

日本語でググると割とBasemapなるmatplotlibの拡張ライブラリ?が見つかるが、 どうも開発終了が予定されている模様。そこで、今回はBasemapの後継とされているcartopyを用いることに。

国土地理院の地図を使う

GoogleTilesでurlに国土地理院のタイルのURLを以下の様に指定して出来た。

import cartopy.io.img_tiles as cimgt

request = cimgt.GoogleTiles(url="https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg")
ax = fig.add_subplot(1, 1, 1, projection=request.crs)
ax.add_image(request, level)

余白の消し方

matplotlibで黙ってプロットした結果を保存すると余白がついてしまう。 以下の様に指定することで、余白を取り除けた。

plt.savefig(filename,bbox_inches='tight', pad_inches = 0)

地図上に線を引く

緯度、経度を指定して

ax.plot([old_p[1],tp[1]],[old_p[0],tp[0]],
                color='red', linestyle='-',
                transform=ccrs.PlateCarree())

地図上に点を打つ

一度通った道を戻る際に、現在地を表示しないと、分かりずらいことが分かったので、 現在地表示を行った。

ax.plot(p[1],p[0],marker='o', color='w', transform=ccrs.PlateCarree())

地図上に文字列を表示する

緯度、経度を指定して文字列を描画できた。

ax.text(x, y, "文字列",color='red', size=15, ha='center', va='center', transform=ccrs.PlateCarree())

ha,vaで描画位置の基準を設定できる模様。

matplotlib

画像サイズの変更

matplotlibの一般的な描画の場合は、figsize=(w,h)でfigureオブジェクト作成時に 指定してこれでよい様だが、今回のcartopyでは、

ax.set_extent

に指定する緯度経度の範囲でアスペクト比が決まる模様。 解像度の指定を

        plt.savefig(filename,bbox_inches='tight', pad_inches = 0,dpi=300)

とdpiを指定することで、画像サイズを変更できた。

ffmpeg

実は、画像のサイズ変更が分からなかったときにデフォルトの状態で ffmpegを使って過去のノウハウ

abrakatabura.hatenablog.com

を駆使しつつ試したら、アスペクト比に文句言われて

qiita.com

を見つけて、これで解決した。

ffmpeg -r 30 -i map%04d.png -vcodec libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" mapWadaPass_v0.3.mp4

関連記事

3年前の記事

pyenvがぶっ壊れて何故かpython3が/usr/bin/python3になってしまう??

こんにちは、梅雨が明けませんが、子供たちはインドア派で、小学校が始まってからは、徐々に学校の同級生とフォートナイトをプレイしてます。@kjunichiです。

背景

Brytonのサイコンのデータと激安アクションカメラのデータを自前で連動させたくて、まずは、サイコンのFITファイルを読み込む方法を探してみたところ、Pythonでできることが分かった

yyatsuo.com

問題発生!

pip3 install fitdecode

で入れたモジュールが見つからない!

python3 sample.py

    import fitdecode
ModuleNotFoundError: No module named 'fitdecode'
pyenv global

で確認すると

system
3.7.7

なのに、

python3 -V

の結果が

Python 3.7.3

どうもこれはApple?のPythonの模様

import sys
print(sys.path)

すると

['', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Users/kjunichi/Library/Python/3.7/lib/python/site-packages', '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages']
which python3

の結果は

/Users/kjunichi/.pyenv/shims/python3

なので、pyenvは有効になってっぽい??

とりあえず解決

ダメもとで

pyenv global 3.7.7

としたら、

python3 -V
Python 3.7.7

当然この状態で

python -V

の結果は

Python 3.7.7

となり、2系のpythonが使えない状態になるが、まぁとりあえず解決した。

関連記事

16年前の記事