White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

Galaxy S10を買った

今更ながら、Galaxy S10を買いました。au版(一応SIMフリー化済み)を買ってUQモバイルで使っています。

 

なぜ買ったかというと、

  • もうすぐiPhoneが渡されるので、今持っているP20 lite + iPhone7の二台を1台に集約したい
  • iPhoneが渡されるので、集約する方はAndroidがいい
  • スクスタが動くスペックはほしい
  • mobile Suica使いたい
  • イヤホン端子は欲しい
  • 5万程度(これを大幅に超えるならiPhone SE2でいい)

等の理由によるからでした。

(続く?)

MacBookAir(2018)のUSB-Cポートが利かなくなった

なんか書いてた気がしたけど書かれていなかったので紹介。

5月上旬になんかのアップデートを取った後、バックアップを取ろうとUSBのHDD(A-C変換)をつなげたところ、突然電源が切れるようになりました。HDDだけでなく、RGBの出力でも同じことが起きました。

 

ネットを見たりサポートに問い合わせるなどして本体のROM周りをリセットしたのですが、今度はUSB-Cに繋いでも外部出力ができなくなる問題が発生しました。

 

5/21

社外品のケーブルを使ってるから動かないのでは?とサポートに疑われていたのですが、修理窓口に持っていったところApple純正のケーブルでも外部出力が出来ないことが判明しました。現在このMacBookは入院しています。

 

変わりのMacBookも無いため、Windowsマシンに環境構築して使えるようにしています。少し前まではあまり良くない感じでしたが、最近はWSL2だったりWindows Terminalだったりと、大分良くなってきましたね。あとは夜フクロウが使えればいいのですが・・(OpenTweenがToken公開してるせいでSPAMに使われて使用停止になっている)

解決: Pythonのreadlinesで^Mを含む文字列を読み込むと、勝手に改行される

これがPython3特有なのかPython全体でそうなのかは知らないですが、うちの環境だと^Mを文中に含むファイルをreadlines()で読み込んだところ、改行が行われました。

 

環境

Windows10上のWSL2, Ubuntu 20.04

Python 3.8.2

 

ソース

ファイル読み込み

 

データ

文字列で貼り付けると^Mが消えるので画像で貼ります。

f:id:showyou:20200516234402p:plain

^Mはctrl-Mです

結果

0    /⌒ヽ
1   / ´_ゝ`)すいません、ちょっと通りますよ・・・
2   |    /
3   | /| |
4   // | |
5  U  U

 

何が困るって、csvでデータを管理していて複数行に分けたくないのがあるので^Mを除去したいのですが、そもそも読み込んでる途中で改行として認識されるのでうまく読み込めないという・・

 

sedでも使って変換しろって話でしょうか。

 

2020/05/17 追記

上の記事を書いたところ、nishioさんからコメント頂きました。readlinesではなく、open関数の仕様だったのですね・・

https://docs.python.org/3/library/functions.html#open

 

open(filename)をopen(filename, newline='\r\n')にしたところ、^Mで読み込み途中で改行されることはなくなりました。

m75q-1 tinyのACアダプタを65Wから90Wに変えた

他のblogでも言われている通り、m75q-1 tiny(Ryzen3400ge)のGPU性能はACアダプタ変えるだけでグンと伸びますね・・

当然ですがCPUの性能は変わりませんでした。

Versa H17 と m75q-1 tiny

Versa H17は以前Geforce GTX 1060を別のケースに入れようとした時に、入らなかったので購入しました。確か送料込みで2700円くらいと激安。その割にはストレージの固定場所などしっかりしていて、前面端子と横幅広いのを除けばいい出来だと思います。これにRyzenGeforce GTX 1060入れてます。

ただこれだと引っ越し等で持ち運ぶのが大変なのと、ちょうど価格も割安でガジェット好きの間で有名になっていたので、m75q-1 tinyを購入しました。

詳細はこちら(https://www.ragemax.com/2020/01/m75q-1-tiny.html)の記事をご覧になればわかるかと思いますが、

  • nucを一回り大きくした程度のサイズ
  • Ryzen5 3500GE
  • 8GB DDR4 SO-DIMM
  • 128GB M.2 SSD
  • ギガビット有線LAN
  • Windows 10 Home
  • HDMI 
  • Intel 無線LAN 
  • 縦置きスタンド

以上の構成で、大体37000円程度でした(注:価格com限定モデルにしないとCPUが残念になります)。

下の写真は左がH17で右がm75q-1 tinyです。H17が大きいというのもあるんですが、ひと目でm75q-1 tinyの小ささがわかると思います。

f:id:showyou:20200307203628j:plain

左H17, 右m75q-1 tiny

1月末に予約して、当初は春節やコロナウィルスの影響もあって、発送が3月中旬となってました。それが2月末になって、急に翌日届くということになりました。

んでWindows環境でポチポチ操作してますが、色々速いですね。CPUもRyzenの4コア8スレッドで、GPUintelのCPU内蔵に比べ相当速いらしいので、重いゲームをしなければこれで十分な気もします。

さて、他にもRyzen7 3700XとGeforce 1080 Ti積んだ高火力マシンがあるんだけど、H17マシンどうしよう・・

10年間溜まったPython2 Twitter botの技術的負債を返済した話

(この記事は以前Qiitaに書いたものの転載になります) この記事はPython2アドベントカレンダー(https://qiita.com/advent-calendar/2019/python2 )の12/23分の記事です。(え?Python2ってPythonアドベントカレンダーって意味で、Python2のカレンダーじゃないんですか?)

TL;DR

Python2で動いてたシステムをPython3で動くようにしましている最中です

はじめに

10年ほど前に、Twitterで自動的に応答する人工無脳を作成しました。この人工無脳マルコフ連鎖によるテキストの自動生成と、特定の文字列に対する返信する機能をもっていました。

https://twitter.com/ha_ma

しゅうまい君ほど注目は浴びていないですが、一時期は(自分の知らない間に)NHKに取り上げられたりはしました。その時身につけたデータ収集に関する知識や自然言語処理の初歩知識等は、その後のキャリアに生かされております。 その後、東日本大震災の影響もあり自宅でマシンを常時稼働しておく余力も無くなったため、テキストの自動生成機能は止めて応答機能だけ残しております。 そうこうして10年近く回してきたのですが、Python2が2020年1月でメンテされなくなるのと、Python3の機能がそろって来たのとあり、Python3を中心としたシステムに置き換えることにしました。

構成

Before

After

ソース: https://github.com/showyou/docker-chatbot-lite/tree/add_db 使用に当たっては設定が必要なのと、一部まだ不完全なので、そこを後ほど修正します。

移行にあたって

Python2->3への移行は、割と簡単でした。ただし条件がありまして、Mecabを現在動かしてないのでその部分の移行は行っておりません。 うちのシステムの場合、Python2から3へ移行した時に変更した箇所は、次の部分くらいです。 - Print関数に()をつける - Unicode関数を削る

SQLAlchemyをバージョンアップさせた際にも、少し手直しが発生しました。 - BigIntegerが桁数を引数に取らなくなっているっぽいので、引数削除

他にも - tweepyのauth.access_token.keyがauth.access_token, 同access_token.secretがaccess_token_secretへ変わってるので変更

KVM(QEMU)からdockerへ

これは別にコード化してモダンにしようと思ったわけではありません。Ubuntuをアップデートした時にQEMU仮想マシンのネットワーク機能がおかしくなり、否が応でも変えざるを得ないからでした。

Serverlessについて

今動かしてる部分のコードであれば、データを貯めるDBさえなんとかなれば自分のサーバは破棄してAmazonとかのFunctionサービスあたり使ってもいいかもしれません。ただしバッチで既存のデータを学習させるのに使えるのかどうかは怪しいところです。

JenkinsからDigdagへ

digdagのWebUIに認証機能がないので、セキュリティ的にはかなり心配です。

Python2を使うか3を使うか

時期の問題はあります。少なくとも今から新規で開発するのにPython2はありえないです。しかしPython3出たての頃は、色々機能が足りない部分があったりしたので、早期に「Python3に移行しろ」って言ってた人は筋違いだと感じます。

最後に

ありがとう、さようならPython2

・・と思ったらサポートが2020/1から2020/4まで延長してるんだけど!どういうことだよ! http://pyfound.blogspot.com/2019/12/python-2-sunset.html

参考

https://qiita.com/kojisuganuma/items/15a6c50c05d80fbd60b1 https://qiita.com/kanga/items/7f2849ad5a2a625a662c

12/24追記

  • digdagをコンテナに入れて
  • 同じdockerクラスタmysqlのコンテナを入れて
  • digdagからbotのコンテナを起動する

場合、botのコンテナとmysqlのコンテナでネットワークが違って繋げないように見えるのですが、いかがなのでしょうか・・ f:id:showyou:20200328122640p:plain

DockerでGeforceを使ってSpleeterを回す

(この記事は以前Qiitaに投稿したものの転載になります。)

Spleeter(https://github.com/deezer/spleeter) という、python+Tensorflowを使った、音声分離アプリケーションがあります。これを使うと楽曲のファイルからヴォーカルだけを抜き出したりできます。

使い方も上のサイトやこちらに書いてあったりするのですが、nvidia-dockerが古いだとか、GPU使ってないだとかで決め手に欠けています。ですので今まとも?な方法のメモ書きを残します。(本当は漏れのない手順書を書きたいとこでしたが、実施から時間が経って記憶から抜けている部分もあります・・)

自分で構築するのが面倒な人は、参考の1, 2を使うとよいでしょう。ただし録音に使ったデータがクラウド上に保存されるのかどうかは保証できません。

動作確認環境

  1. AMD Ryzen 3700X
  2. ASRock B450M Steel Regend
  3. メモリ: 32GB
  4. (ブランド不明)Geforce GTX 1080Ti
  5. Ubuntu 18.04 server
  6. nvidia公式driver

導入手順

ホストマシン(Dockerを呼び出すマシン)にnvidiaの公式ドライバを入れます。おそらくCUDAドライバあたりも必要です。

  • Docker ceを入れる

最新のnvidia-dockerがDocker ce 19.03を要求するので、入れます。Ubuntu標準dockerではダメです。 https://docs.docker.com/install/linux/docker-ce/ubuntu/

最近のはnvidia-docker2がdeprecatedされており、最新のnvidia-dockerではspleeterに書かれているコマンドでは実行出来ないので注意してください。

https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(Native-GPU-Support)

  • spleeterを入れて使う

https://github.com/deezer/spleeter/wiki/2.-Getting-started#using-docker-image

nvidia-dockerではなく、docker run --gpus all等を使う必要があります(allは手持ちのGPUによって変えてください)。

例: docker run --gpus all -v $(pwd)/output:/output deezer/spleeter:gpu separate -i audio_example.mp3 -o /output

参考

  1. spleeter使って分離してくれるサービス https://moises.ai/

  2. Spleeterを簡単に使えるGoogle colaboratoryのノートを作成しました. https://qiita.com/Ryo0o0oOO/items/65acd38f4034800388c0