Keep on moving

あんまりまとまってないことを書きますよ

dataclassと __slots__ について調べた

対象バージョン Python 3.7以降

TL;DR

  • dataclassでも __slots__ を使える
  • __slots__ をつかうとpropertyの追加ができなくなる(自由度が下るが、コードをおいやすくなる)

slots とは

docs.python.org

__slots__ を使うと、(プロパティのように) データメンバを明示的に宣言し、 (明示的に __slots__ で宣言しているか親クラスに存在しているかでない限り) __dict____weakref__ を作成しないようにできます。 __dict__ を使うのに比べて、節約できるメモリ空間はかなり大きいです。 属性探索のスピードもかなり向上できます。

ということらしい。

dataclassの動作

dataclassを自分で使うときは私の用途だと関数の返り値/引数とかで使うときがおおいのでメモリ空間の節約できると便利だと思ってしらべてみました。 また、データ型の表現で使うときはプロパティの追加ができないほうが便利かなーと。

>>> import dataclasses
>>> @dataclasses.dataclass
... class A:
...    b: int
>>> a = A(1)
>>> a.b
1
>>> a.c =2 # propertyを追加できる
>>> a.c
2
>>> dir(a) # __dict__ や __weakref__ が作成される
['__annotations__', '__class__', '__dataclass_fields__', '__dataclass_params__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'b', 'c']

というわけでdataclassでは __slots__ が有効ではないみたい。 dataclassの動作を見てる感じだと、__slots__ を有効にするオプションはないみたい docs.python.org

dataclss with __slots__

www.python.org PEP-557では自動的に追加することは一旦やめる的なことが書かれている。 実際に使うにはこんならしい。

>>> @dataclasses.dataclass
... class B:
...   __slots__ = ('b',) # __slots__ 追加
...   b: int
... 
>>> b = B(2)
>>> dir(b)
['__annotations__', '__class__', '__dataclass_fields__', '__dataclass_params__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 'b']
>>> b.d =3 # propetyの追加不可
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'B' object has no attribute 'd'

まとめ

ということで dataclassをつかったクラスでも __slots__ を定義すれば設定できる。ただ、これ何回も書くのめんどいので なんかいも設定するならば attrs 使ったほうがよさそう。明日はattrsを使ったパターンを書こうと思う

Ubuntu 19.10でSony WF-1000XM3 を利用する

Ubunto19.10でSony WF-1000XM3 をつかおうとしたらすぐに使えなかったのでメモを残します。

2020/06/22 追記: Ubuntu20.04でも同様に利用可能なことを確認済み

TL;DR

  • pulseaudio-modules-bt のインストールが必要。公式ではないのでppaなどでいれる。
  • 音量コントロールをイヤホン側でできるようにすると便利

Ubuntu19.10から使えるようになるまで

Ubuntu19.10 ではBluetoothでの接続はできるのですが、なぜか音声の出力で選択できません。というわけで 以下のインストールが必要です。

必要なdebファイルをインストールする。以下のgithub issueに書かれているものを入れること。

github.com

試して見た感じだと pulseaudio-modules-bt がインストールできていれば 無事Ubuntuから使える様子

https://f.bytefuse.net/pulseaudio-modules-bt-ppa/

音量の調整

どうやらUbuntuだけでつかっているとイヤホン本体の音量は調整できない様子。 公式のサポートにならってiOS/Androidのアプリから設定する or L側のタッチセンサー機能を[外音コントロール]から[音量コントロール]へ変更するのがいいみたい。 knowledge.support.sony.jp

私はL側のタッチセンサー機能を[外音コントロール]から[音量コントロール]へ変更するほうにしました。

まとめ

ちょっとひと手間必要でしたが、無事Ubuntu19.10 からつかえるようになりました。 イヤホンを長時間つけ続けるのが苦手なんですが、こちらをつかうことで会議等で長い時間つけ続けるのも楽になりそうです。 ビデオ会議は音声(マイク、スピーカー)で疲れが変わるのでいいものを使う価値は大きいと思います。

先人の皆様に感謝

参考

github.com

https://www.labohyt.net/blog/server/post-4563/

Amazon WorkspacesをUbuntu 19.10で動かす

Amazon WorkSpacesのクライアントをUbuntu 19.10で動かせたのでメモを残します。

TL;DR

  • ArchのAURは探すとなんでもある
  • debファイルのインストール先が探せればうごかせる(ちゃんと動くかは別ですが。。。

Amazon Workspacesとは

Amazon WorkSpaces というマネージド型のデスクトップ (DaaS) ソリューションがあります。 詳しくはこちらを。 aws.amazon.com

公式クライアント

Windows, Macでは公式クライアントが存在します。ありがたいことにLinuxでもうごくとのこと。 しかし、今日現在だとUbuntu 18.04にしか対応してないです。

clients.amazonworkspaces.com

ただ残念ながら最新版の19.10には対応してない。 残念ながらこのぺーじだとaptのレポジトリ経由しかインストール方法が書かれていません。 困ったなーと思ったら友達がおしえてくれました。

ArchのAURレポジトリ

ArchとかAURってなんなのかはここでは省きます。 ちなみにこちらです。

aur.archlinux.org

ここをみると debファイルのダウンロードができます。 ちなみに これをふつうにdebコマンドでインストールできました。

$ sudo dpkg -i workspacesclient_amd64.deb

私はubuntu(gtk)を使ってるのでそのまま動きましたが、gtkを入れてない方はインストールが必要そうです。 ちゃんと試してないですが動かすにはいかが必要そうです。

  • gtk3
  • webkit2gtk
  • libsoup

ひとまず動作するところまでは確認できました。たまにマウスの動きが怪しくなるんですが、いまのところ動いています。

先人に感謝

余談

Archでも以下のような感じでそのまま展開してるだけっぽいです。

package() {
    cd "$srcdir"
    tar axfv data.tar.xz -C "${pkgdir}"
}

作業環境を XPS 13 2-in-1 7390 にした(Windows10/Ubuntu 19.10)

お正月どこも行かなすぎ君です。 お正月に久々に持ち歩いてるノートPCを変えました。Ubnutu19.10でそこそこいい感じで使えています。

TL;DR

  • Linux Desktopでそこそこ便利につかえている
  • 仕事でMacつかっていて便利な辞書とかMagicTouchpadとかは対応してないけど一応なんとかなってる

選び方

想定していた用途はこんな感じ。

  • 持ち歩いて気になることを調べたい。 
  • カフェでコード書きたい
    • PythonJava/Scala(切実) をいい感じで書きたい
    • IntelliJをつかってもそこそこいいDXになってほしい

選定のポイントは - 1.3kg以下 - 英語キーボード - メモリ16GB - Linuxで動かす実績がある - [Optional] 4K (3840x2160)液晶

で、前回も買ったけどnew XPS13にしました。1.27Kgで正月なのでちょっとお安く売ってたこともありこれにしました。

www.dell.com

ひとまず Linuxをいれる

www.eisbahn.jp

買ってからyoichiro さんのブログを見つけてこりゃArch入れるしかないかなーと思ったけど ひとまずUbuntu19.10いれたらそこそこ動いているのでそのまま使っている。 Linuxカーネルのバージョンが 5.3系だからかもしれない。やっぱりダメそうならArchに切り替える予定。 Windowsはちょっとなんかするときにあると便利なので一旦残すことにした。

キーボードの設定

  • CapsLockをCtrlに

こちらを参考にいれてみた

linux.just4fun.biz

MacOSっぽく 右alt でime-on, 左altでime-offがしたくてこちらを設定

qiita.com

辞書

MacOSだと便利な辞書が入っているんだけど、Linux Desktopだとないのでこちらを導入

chrome.google.com

これに英辞郎の辞書をいれた. v144.8のテキストの方は使えた(最新版は暗号化されてるけどいろいろ考えるとしょうがない)

www.eijiro.jp

まだできていないこと

Dell/XPS/XPS-13-7390-2-in-1 - Ubuntu Wiki

ここにも書かれているけどやっぱ以下はうまくいってない.

  • 指紋認証(finger print)
  • suspend/resume
    • 蓋を閉じておいてもそれなりに動いているらしくバッテリーを消費する

あとカメラが使えないはずなのにつかえているっぽい。Google Meetとかでも使えた 実はPyCon mini shizuokaではこのpcから配信したんだけどうまくカメラもつかえていた。 masahito.hatenablog.com

参考

medium.com

まとめ

一部使えない機能があるけどLinux Desktopでそこそこつかえています。 LaptopでLinux Desktopで使いたい人には良いかもです。これで指紋認証とかつかえると最強なんすけどねぇ。 それにしても前にxps 13 9343にUbuntuいれたときはタッチパッドとかが使えるようになるまでに相当設定入れないと動かなかったんですが、 インストールしただけでスルッと動くようになってきましたね。

Dell XPS 13 (9343) - ArchWiki

PyCon mini Shizuoka 2020(online) #python_shizu でスピーカーとして話した

PyCon mini Shizuoka 2020(online) でスピーカーとして話したので感じたことをざっくり書いておきたいと思います。 参加者として

TL;DR

  • オンライン開催楽しかった。Live配信で2トラックで流してくれたおかげで両方話が追えたのがすごい
  • 運営の皆さんお疲れ様でした。
  • スピーカーは話しているときに観衆の反応がわからないのですごい不安になってくる。

オンライン開催について

昨今のコロナウィルスの話に対応してオンライン開催になりました。 決定してから10日くらいで環境を用意したとのことでスタッフの皆さん非常にお疲れ様でした。

shizuoka.pycon.jp

発表内容

仕事でもお世話になっているデータ基盤環境について今回は発表しました。 ここ一年くらいの勉強の成果をまとめた感じです。 マネージドサービスの利用の進めと定型化(template化, framework化)が大事だよってのが伝えたかったことです。

speakerdeck.com

オンラインで話してみた感想

  • スピーカーは話しているときに観衆の反応がわからないのですごい不安になってくる。
    • 思っていた以上に自分が観客の反応をみながら話してたんだなってのが実感できました。
    • 実は 香港 とか 台湾 とか海外で話したとき以上に緊張しました。
    • Twiterで反応があったときはすごい嬉しかった。24motzさんのツイートが話してる側の癒やしでした。

  • 録画をみた感じだと配信がちゃんと成功していてすごい安心感がありました。スタッフの皆さんGJ
  • 緊張するとえーとかまーとかがふえて時間が伸びがちですね。
  • 実はオンライン用に3日くらい前に内容を練り直したので練習不足もたたって時間オーバーしてしまった。練習もっと増やせばよかった。

まとめ

現地に行かずに家から参加するのって初めてで予想がつかなかったんですが参加して本当に良かったなと思います。 実はオンラインで話すかを確認いただいたときにやるかどうか悩んでいたんですが、いまとなってはやってみて本当に良かったと思います。 良いチャレンジの機会になったかなと。なんども書いていますがスタッフのみなさんありがとうございました。

またリアルな場で開催するときには是非参加させてください。

react-static をTypeScriptで始める

React Staticでよく遊んでるのでいくつかTipsをまとめておこうと思います。 今日は React Static でTypeScriptを使うときのTipsをご紹介します。

react-static をTypeScriptで始める

CLIツールをglobalにインストールする

$ npm i -g react-static

or

$ yarn global add react-static

新しいプロジェクトを作る

$ react-static create

ちなみに npxコマンドからでもプロジェクトを作ることができます。 globaに入れなくて済むので、僕はこっちが好きです 😄

npx react-static create

or

npx react-static create --template typescript --name=my-static-site

実行方法

cd "my-static-site"

yarn start - Start the development server
yarn build - Build for production
yarn serve - Test a production build locally

さて

しかしこのまま yarn startしても実行時にエラーが出てうまく動きません(2019/07/09現在) templateで作成される yarn.lockに書いてあるreact-staticに不具合があるためです。

yarn upgrade-interactive

で最新版のreact-staticにアップグレードすれば起動できます.

一応修正をPRで送って無事取り込まれたので、次のreact-staticがリリースされるとこの辺の作業がいらないはず....

github.com

ま、ここだけ抜けちゃえばハマることはないはずなので、ぜひReact Staticで遊んでみてください!