タブレットを TECLAST Ah-M403 に書い直して1ヶ月ほど使ったので使用感とかメモ

経緯

今まで使用していたのは Kindle Fire10。購入したのは2018年なので3年ほど使っていた計算だ。ただ大分動作が重くなってきたのと、去年末に自分で間違えて踏んで画面がバキバキに...

まあどっちみちそろそろと考えていて候補を探していたので気持ちはあっさりとしたもの

Kindle Fire 10

これは良い部分も悪い部分もある。Amazonの機能だけ使うなら問題は無く普通に使える。実際自分の使い方はほぼKindleのためだけ。たまにPrime Videoを見たり、ネットを見るがまあごくたまにだ

ちなみにブラウザがAmazon独自なのがちょっと気に食わないのはある。頑張ればインストールできるがこのあたりが不自由な所

他にもあげると、壁紙を設定できず毎回タブレットを使うたびにAmazonの広告的なのを見せられるのはちょっと嫌な気分にさせられたり、WiFi6には未対応で繋げられずネットが遅いのもネックだった。これは最新でも同じようでまだ待つ必要があるだろう

ということで正月のセールも開始したタイミングだったので他のタブレットを探してみることに

TECLAST Ah-M403

購入したのはTECLAST Ah-M403。中華だが性能や値段を比較してまあセールだし最悪失敗してもいいやと購入してみた

www.amazon.co.jp

感想としては70点といったところか

やはり性能はよくFire 100に比べたら動作速度が全然違う。WiFi6につながるのでそこも動作速度が全然違う。Kindle本のダウンロードがめっちゃ早いのでありがたい

またAndroidなのでGoogle Playなのでアプリも普通に入るしここでも可能性は広がるだろう。とは言ってもKindleしか使ってないけど....

気になるのは、Androidがまだ10でバージョンがちょっと古い。早く最新に追従して欲しいものだ。まあ頑張ったら入れれるだろうけどさ、そこまで頑張りたくはない

後はきっかけは不明だが定期的に勝手に再起動する点。ひどいとKindleで読書中に再起動がかかるし、一定時間放置していると再起動がかかってアプリが消えていたり、画面を横向きにしているのが再起動でリセットされたりとイラッとし続けている。なんとかならないものか

Kindleアプリ

いらっとするのはハードよりKindleアプリのほうが大きい

当たり前だが購入後はKindleアプリのインストールを行い初期化状態から始めるわけだが、これがめんどくさい

以前ダウンロードしたのが無いのは当たり前だが本の並び順がリセットされていて非常に使いづらい。ダウンロードをしなおししても一定量ダウンロードすると今度はアプリごとOSが動かなくなり、タブレットの初期化を繰り返した

どうもSDカードをつけていても設定が必要で、ダウンロードは本体側にされておそらく容量問題でOSごと駄目になるよう(に見える)で、アプリから設定を変更した所ある程度安定してダウンロードが出来て動作も安定した

なんかアプリとしては本当に使いづらい。これ開発者は普段使いしているんだろうか?? 不思議だ

まあとは言えとりあえずなんとか安定して使えるようになったし、以前よりは差し引きしても良い状態になったのは確かだ。まあ細かいイライラに我慢できなくなったら新しいの買うかもだけどね

Rubyの静的型解析を試してみる

最近少しRubyの型周りの設定をしていましたのでメモ程度に残しておきます

Rubyの静的型解析の概要

Ruby 3の静的解析機能のRBS、TypeProf、Steep、Sorbetの関係についてのノート - クックパッド開発者ブログ

を参考にする。

そもそもがややこしいので頭を整理する(ただ間違いもあるかも...)

  • RBS
    • Ruby の型情報を扱う言語自体。Ruby 3 からバンドルされる
  • TypeProf
    • Ruby 3 にバンドルされる。RBSファイルを生成する
    • typeprof コマンドとして実装されていて、 .rb ファイルを食わせると .rbs が生成される
  • Steep
    • RBSファイルを使用して型チェッカー。Ruby製なので動作は遅め
    • エディタの裏で動いてチェックしてエディタでエラー表示等をする
  • Sorbet
    • 役割はSteepと同じツール。Stripeが開発していてC++製なので動作が軽い
    • RBIというRBSとは異なる言語を利用する

RBSファイルの生成

RubyからRBSを生成する各方法の特徴 - pockestrap

ここが詳しかった

rbs コマンドもあるが、基本的には typeprof を利用すれば良いはず

ちなみに結構重いので注意。仕事のRailsプロジェクトで試してみたら10分どころでは無い時間が必要だった

$ typeprof hoge.rb > hoge.rbs

ちなみに Railsの場合は rbs_rails というgemを使うのが楽

Steep

設定方法は細かく書かないが最低限だけ。色々変わる可能性があるので詳しくは各自で調べてください

steep gemをインストールする

これで Steepfile が作成されるので適切に設定をする

$ steep init

RBSを作成したらチェックが可能となる

コマンドからチェックするには check で可能

$ steep check

RBSの配置

基本的には sig というディレクトリを作りその中に置けば良い

hoge.rb の場合 sig/hoge.rbs となる

初めて触った時にディレクトリ構成とかどうするべきかを悩んだが、 sig の下にディレクトリ構造も模倣すれば良いだけのようだ

hoge/fuga.rb の場合 sig/hoge/fuga.rbs となる

rbs_rails を使うと sig ディレクトリの下に自動で作成してくれるので楽でした

Vim + Steep

LSPで対応されている。

私は vim-lsp , vim-lsp-settings を使用しているので :LspInstallServer steep だけで使用できた

ただし、実際に仕事のプロジェクトを使用した場合 Vim が非常に重くなるが辛い

hijk での移動ですら止まる場合がある

設定でどうにかなるかもしれないがまだこの方法が見つからないので、ストレスなく実用レベルになるのはもう少し先かもしれない

Sorbet

Sorbet はまた違ったツールだが本質的には似ています

今現在はgem は sorbet , sorbet-runtime , typeprof が必要だが、これも将来どうなるか不明

初期化を行う。 RBI 等が生成されるようです

$ srb init

チェックは tc

$ srb tc

C++ 製だから動作は非常に軽いのが嬉しい。検索するとすでに Sorbet を現場で採用している会社もあるようでした

Vim + Sorbet

vim-lsp-settings には Sorbet が無いようです。というか vim-lsp に対応サーバがあるかも私は知りません...

感想

実際にエディタから使う場合は速度が命ですし、小さなコードやgem程度なら問題なく使えそうですが複雑なRailsアプリにはまだまだ厳しいという感覚でした

私は Vim 一辺倒なので使いませんが、VSCodeIDE ではまた違うかもしれません

他にも Steep 、 Sorbet の今後どうなるのか次第でも変わりそうです。せっかく採用しても選択した側が開発停止となった場合が少し面倒かもです

とは言え、まだまだこれから発展していくとは思いますので楽しみにしています

Linuxでペンタブレットを使ってみた

転職して半年以上ですが、コロナで弊社もリモートワークです。というか入社して以来ずーっとリモートワークでオフィスには1回しか出社しておらず上司とも1回もリアルで顔を合わせていないという職場です

ちなみに、コロナが収まったとしても弊社の開発者はずーっとリモートワークとなります。というかオフィスに席がないです。まあ移動時間が無いのは有り難いですね。まあ引きこもり体質とは言え、たまには皆と飲みや飯くらいは一緒にしたいですがそれより命大事です

 

リモートワーク

リモートワークで大変なのはコミュニケーションですが、弊社ではSlackが基本で会話はDiscordです。たまに対外的なMTGや全社的なMTGだとZoomですね

DiscordはZoomと違い、起動しっぱなしができライブ配信も楽です。ちょっとペアプロしようとか、ちょっと相談あるんでXXXさん今いいですか? とか気軽に話が出来てリモートワークでも問題無くコミュニケーションが取れています。個人的にはオフィスだと物理移動とかがあり会社によっては違う階に移動とか面倒すぎるのでリモートワークは良いですね

仕事内容はTech Lead + Manager

40代になって初めての管理職であり技術的にも役職が付いたという状態ですが、やることは本質的には代わりません。が、組織にもプロダクトにも歴史があり色々問題が多い状態ではあります。

入社して以来開発自体に参加するよりも開発周辺だったり組織的に問題が多くそちらを解決しないとプロダクトもコードレベルでも良くならないと判断し、開発そのものはあまり出来ず問題解決の日々です。最近はプロダクトにも多少手を出しますが設計とか重い処理の高速化とかそういうのですね。

ちなみに入社して1,2ヶ月で問題解決の為にSREチームを立ち上げたりもしています。さらには新卒含め若手メンバーが多く、いままで教育もされておらず現場で生き残っただけという状態でしたので教育も入社以来担当しています

 

MTGでの問題

教育や設計レベルの話をMTGで行うと問題なのはちょっと絵を書いて説明するというのが個人的には難しいです。リアルだと紙にさらっと図を書いて説明するのですが(絵は下手ですが...)これが難しい

弊社ではMiroも使っていますが、ぱっとなぐり書きして説明するというのにはちょっと難しい。資料を作るのには良いのですがちょと違う

ということで、お絵描きソフトを起動してマウスで説明するのですがこれが絵心0な人間で普段は当然絵を書く事は一切しないのでソフトの使い方すらおぼつかない。ましてや私のメインマシンはLinuxですのでWindowsほど良い環境では無いのです(開発環境としては最高ですが)

 

ペンタブレット購入

悩みに悩んだ結果ペンタブレットを購入することとしました。液タブやタブレットという選択肢もありますがたかがMTGでしかも購入しても実際に私が使えるかは不明すぎて今はお金を出す段階ではないと判断しました

色々調べるとLinuxだとWacomとXP-PENというのが良さそうでした。Wacomは最近のLinuxだとデフォでドライバが入っていて普通に使えるようです。XP-PENは公式にLInux用のドライバを公開しています

 

色々悩みましたがこの辺りを理由にWacomにしました

  • 安いペンタブレットであれば値段はあまり変わらない
  • XP-PENだといくつかの点で良さそうという記事を見た
  • デフォでドライバが対応しているなら、メーカがドライバを出していてもメーカ次第で使えなくなる可能性はある

 

購入したのは One by Wacom CTL-672/K0-C

https://www.amazon.co.jp/dp/B07583VVY5

 

使ってみた

実際に使ってみるとUSBに挿入しただけで普通に使えて問題なさそうです

ただ、たまに反応しなくなる場合があり対応としてドライバの再ロードすれば良さそうです。ドライバ名はそのままwacomです

 

`rmmod wacom && modprobe wacom`

 

ちなみにOne by Wacom、ペンタブ自体にボタン等は付いておらず、付属のペンもボタンが2つでマウスの左右に対応しています。多分本格的にお絵描きをしたい場合だと不便そう

 

アプリ

使うソフトですが、KritaがLinuxで使えるので使っています。ただ今日気づいたのですがフリーハンドだとどうもGimpの方が書きやすい。来週からGimpに移行しようかな

まあ絵とか普段一切書かないのでど素人の使い方ですし、MTGで相手に伝われば良いのでまあなんでも良いでしょう

しかし絵は全くだめで絵を書ける人は本当にすごい。どれだけ練習してるんでしょうね

ということで、ペンタブレットとか一生縁が無いと思っていたけど、まあ慣れていくしか無いのでがんばります

shellだけでdirenv的な事をする

direnv、便利ですが人によっては入れたくないという思いもありますし、職場でのアンケートを行うとそもそも知らない、という人もいるようです

 

今回のそのそもの目的は.ruby-version、.node-version等から値を環境変数にセットし、それを更にRails、Docker、Docker Compose等に渡したいという要望です

これを行うと、.ruby-version、.node-versionだけの変更で一括でバージョン変更が可能となりアップデートが簡単に行えます

 

Zsh

個人的には未だにBash愛用者ですが、仕事用環境はmacOSですが現在はデフォルトshellがZshとなっていますので対応が必要です

zshではコマンドにHookを行うことが可能です この機能を使って対応します

.zsh_config を対象ディレクトリに置きます 中身はこの様にします

function setter() {
  export HOGE=1
}

function unsetter() {
  unset HOGE
}

case $1 in
set)
  setter
  ;;
unset)
  unsetter
  ;;
esac

~/.zshrc 側でコマンドをHookします

# cdで移動前に現在のディレクトリの設定を削除
function unset_dir_config() {
  if [ `echo $1|awk '{print $1}'` = 'cd' ]; then
    if [ -r $PWD/.zsh_config ]; then
      source $PWD/.zsh_config unset
    fi
  fi
}

# cdで移動跡に現在のディレクトリの設定を行う
function set_dir_config() {
  if [ -r $PWD/.zsh_config ]; then
    source $PWD/.zsh_config set
  fi
}
add-zsh-hook chpwd set_dir_config
add-zsh-hook preexec unset_dir_config

非常に簡単に設定が行えます

Bash

私は普段 はBashを使用しています。そろそろZshにしても良いかもとは思ってますが、あまり慣れるとBash環境を触る時に辛そうだなぁと思いまだ躊躇していますね

さて、Bashではデフォルトの機能ではコマンドをHookする機能が無い?ようでbash-preexecを利用します github.com

.bash_config.zsh_config とファイル名が違うだけで同じで内容は同じなので省略します

~/.bashrc もほぼ同じです

source ~/bash-preexec.sh
preexec_functions+=(unset_dir_config)
precmd_functions+=(set_dir_config)
unset_dir_config() {
  PRECMD=`echo $1|awk '{print $1}'`
  if [ "$PRECMD" == 'cd' ]; then
    if [ -f $PWD/.bash_config ]; then
      source $PWD/.bash_config unset
    fi
  fi
}

set_dir_config() {
  if [ "$PRECMD" == 'cd' ]; then
    if [ -f $PWD/.bash_config ]; then
      source $PWD/.bash_config set
    fi
  fi
  unset PRECMD
}

応用

特定のコマンドをHook出来るのでそのコマンド専用の環境変数を設定する、何か専用の処理を行う事ができます。 例えば、弊社はCircleCIを利用していますのでCircleCI CLIも利用しています。ローカルでcircleciコマンドを実行する場合にだけ設定を行うという事が可能です

以前から環境変数について悩みどころだったのですが今回必要に迫られたとは言え調べて対応できたので良かったですね 今後色々な場面で利用できそうです

参考

note.hibariya.org

pulseaudioでネットワーク越しに再生する

自宅ではPCを2台併用をしていますが、ヘッドホンは当然1つで使用したいのでオーディオ分配ケーブルを利用していました。

ただこれはケーブルが邪魔で仕方がないのです。他にもヘッドセットを利用しようとすると分配ケーブルを利用しているとマイク機能が利用できないなど色々問題があります。

物理的には解決が難しい事が分かってきましたので重い腰を挙げてソフトウェア的に解決出来ないものかと調査したところ、pulseaudioはネットワーク機能がある事が分かりました。ということでなんとか設定できたので自分用にメモしておきます。

サーバとクライアントの関係

まず、オーディオはクライアントからサーバに送信してサーバ側の音声として再生する流れです

逆に録音や入力の場合はサーバのマイクからクライアントへオーディオが送信されます

 

設定

Ubuntu 20.04で設定しましたが、他のディストリでもそう変わりは無いでしょう

 

まず、 `pulseaudio-zeroconf` をサーバ、クライアントでインストールします

 

``` 

# apt install pulseaudio-zeroconf

 ```

サーバ、クライアント共通の設定

`/etc/pulse/default.pa` に以下を設定します

 

```

load-module module-native-protocol-tcp

 ```

サーバ

`/etc/pulse/default.pa` に以下を設定します

IPはクライアントとして許可するIPです

 

```

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24

 ```

 

クライアント

同じく `etc/pulse/default.pa` に以下を設定します

 

```

load-module module-zeroconf-discover

 ```

確認

まずは、`pulseaudio` を再起動します

pulseaudioプロセスをkillすれば自動的に再起動されます

 

まずは適当な音声ファイルを用意して、クライアントで再生して確認します

サーバ側で音声が再生できれば成功です

 

```

$ PULSE_SERVER=<server ipd> aplay 音声ファイル

```

 

次はクライアント側でpavucontrolを起動します。再生先のデバイスにサーバ側のデバイスが選択出来ているはずです。

選択して再生できれば成功です。

Steam ProtonでWindowsなアプリを起動する方法

さて、つい先日ついにUbuntu 19.04のaptが死亡した。色々あって先延ばしにしていたのだが諦めて19.10に上げざるを得なくなった。

 

上げていなかった問題はPython2に依存したアプリを愛用していたからで、案の定19.10にしたら使えなくなりました。めでたしめでたし(いや目出度くないよorz

 

代替ソフトを探すとこれがやはりなく、どうしてもWindowsのアプリぐらいしか見当たらない。しかも見つけたのも機能不足だがまあ最低限使えはする。

自分で開発というのも考えたが無職な現状であっても色々やることがありもはや時間を確保するのも難しい状態だし開発時間考えるととてもじゃあないが無理がある。

 

ということで一先ずWindowsアプリを起動することを考えるが、VirtalBox等は大げさすぎるのでじゃあWineかなぁと思うがこれが環境構築が結構めんどくさい。

別PCではテスト的には動作しているが、もう一度やりたいかと言われるとこれが辛い。年を取ると体力も気力も落ちるよね...。

 

そしてふと思いついたのがProton。これはSteamが開発しているものでwineをforkして改良しWindowsのゲームをLinuxで動かそうというプロジェクト。実際すでに自分の実機では購入済みのいくつかのゲームを普通に遊ぶことが出来ている。起動しないのもあるけどそれでも大分良い。昔はLinuxでゲームはかなり厳しかったがProtonから状況は大分変わって来ている。

この記事によると50.4%が問題なく遊べるようだ。

 

gigazine.net

 

 

SteamのProtonを使う方法

ということはSteamにインストールされているProtonを使うとゲーム以外でもWindowsのアプリを使えるのではないかと思い、挑戦してみると使えたのでここに使い方をメモしておきます

 

ProtonはGitHubで公開されていますが、色々設定がめんどくさそうなのでSteamをインストールするのが早いでしょうし自分はすでにSteamユーザなのでこれを使いたいと思います。

 

まずはProtonがアプリごとにデータを保存するらしく、そのディレクトリを作ります

どこでもよいのですが、とりあえず`~/.proton`を作ります

 

$ mkdir ~/.proton

 

次に使用するアプリ名で~/.proton以下にディレクトリを作ります。

 

$ mkdir ~/.proton/<app name>

 

SteamのProtonはデフォルトインストールではここにあります。

/home/<user>/.local/share/Steam/steamapps/common/Proton <version>/proton

 

起動方法は以下の通り

STEAM_COMPAT_DATA_PATH=~/.proton/<app name> ~/.local/share/Steam/steamapps/common/Proton\ <version>/proton waitforexitandrun <app path>

 

これで起動できるはずです。

Wineよりも楽に起動ができるはずです。Wineだとfontやドライバーが等設定が多いので...

これで1つ楽が出来るようになりました。

 

しかしまだ面倒なのでなんかスクリプト書いてこのあたり自動化しようかな...

Linux用のkeybordをフックするアプリを作ってみた

私はVimmerなのでvimキーバインドに慣れすぎていてなんでもvimキーバインドで操作できれば嬉しい。まあ現実考えると流石になんでもとは行かないのだけどWebブラウザは長く触るので対応してほしい。

 

さて、最近はChromeをメインに使っているが、これがブラウザを起動しっぱなしで運用しているが、時間が経てば経つほどメモリを食い尽くし、最終的にはシステムのほぼすべてをChromeが奪ってしまってついにはSwap化までするという酷さ。

こうなるとプラウザを再起動してSwapを手動で開放してやらないとダメという酷さ。もう付き合うのが辛いが、他のブラウザに乗り換えるのもちょっと腰が引けている。

 

で、原因を探すとその大きな原因の1つがChromeの操作をvimキーバインドで出来るようにする拡張機能だった。いくつか乗り換えたが結局はどれでも同じ結果となったのでもう色々無理なので拡張機能を削除した。が、操作が不便になってしまって困ってしまった。

 

色々考えたのだが、結局キーボードで操作さえできれば良いのでそういうソフトを探すが、WindowsだとAutoHotKeyというのがあったはずだが、Linuxだと意外と無かったり機能がいまいちだったり。

 

昔からここは悩みどころだったのだけど、ちょと検索してみると作れなくはなさそうというのに気づく、というか知っていたけど時間的に余裕がないので手が出せなかったというのもある。

 

ということで、とりあえずコードを書いてみると最低限は動いたし先も見えたので多少真面目にコードを書いてレポジトリを作ってみました。

https://github.com/longicorn/xremapkey

 

現状はすべてのkeybordの入力をhookしてhjklのときにだけ入力を変更している。

~~すべての入力時に動くけど、とりあえずChromeの動きだけを対象にしている~~

~~どうも一部バグっているようで動作しないようだ。別途対応が必要そう~~

対応終わった

 

 

とりあえず、ここからは対象アプリ、設定ファイルの対応、複数key入力対応辺りをなんとかしてみたい

 

 

しかし、久々にCを書いたけど多少忘れているのもあったけど、まあ普通に書けたので良いリハビリになるかもしれない

時間があるときに頑張りたい

 

さて、そろそろ無職をやめないとまずいなぁ。次どうしよう?