買ってよかったもの2018年版

文字アウトプットリハビリです。サクッといきたい

一応、背景として「自宅で仕事をしている」というのがあります。ゴーゴーゴー

デスクライト PHIVE CL-2

デスクが部屋の隅っこに置いてあるので、デスクライトのお世話になってます。

もともと使っていたデスクライトが「ジージー鳴ってうるさい」「フレキシブルケーブルがぼろぼろ」「角度に自由が効かない」と散々だったので買い替えました。

良いところは

  • 調光が無段階調節(程よい光量に調節できる)
  • 可動部が3箇所あるので光源位置・向きの調整にかなり自由が効く
  • クランプ式なのでデスクスペースを取らない

あとあとあと、

光源が目に入らないってすごい快適で良いです

いやもうそれだけを伝えたかった 。
あ、導光板方式がうんぬんで光源見えてもそんなに目に痛くないのも良いところだと思います

2月初旬あたりに購入して、寝る時に読書の間接照明代わりにつけっぱなしにしてしまったりしてますが、ちゃんと故障せず動いてくれてます。(すごく高い買い物でもないので、もっと簡単に壊れちゃうかと思ってました)

Google Home

store.google.com

朝いつも時計を見て二度寝しちゃうんですが、寝床から見える位置に時計を置くのをやめてGoogle Homeを置いてみました。 そうすると時間を確かめるのに声を出す必要があって、ちょっと意識が覚醒しやすくなった気がしてます。1(アラームはダメでした。気づいたら止まっている……)

ソフトウェア(開発環境) JetBrains IDE Subscription

www.jetbrains.com

正式名称なんて言うのかちょっとよくわかってないのでそれっぽい題
PhpStormとRubyMineのお世話になってます。

「まあ全く触ったことないわけじゃないならなんとかなるよ〜」みたいなノリでPHPRubyの仕事のアサインもらってしまったんですが、これなかったらたぶん仕事ができてなかったです。

Docker composeの設定読ませることができたりで「ほんと頭いいな……」みたいな、あたまわるい感想ですがとても助かってます。

その他(良かったけどそんなに語ることがない)

  • [PC] MacBook Pro 13inch (2018)
    スリープがベンリ2

  • [椅子] コンテッサ セコンダ
    元がボロだったので座っていられる時間増えました。メッシュタイプにしたので湿気が籠もらなくて快適

  • [ディスプレイ] Eizo FlexScan 2785
    ディスプレイとPCの接続がUSB Type-C一本で済むのがすごく良くてMacBook Proの電源ずっとカバンに放り込んでおけてます

  • [Androidスマホ] Google Pixel 3
    ありがとう最新OS開発機


  1. Google Homeじゃなくてもスマートスピーカーなら満足してたかもしれない。TTSとか絡めて何か良さそうな事できないかなーと思って開発方面で触りもしたんですが、自分で使いたいと思えるようなものはまだ作れてないです

  2. 元はThinkPad T460sっていう機種にArch Linux入れて使ってました。LaptopにLinuxでスリープって結構問題を踏むことがあって、macOSに変えて一番便利だったことがスリープになってます

ArchLinux libalpm.so.10: cannot open shared object file を踏んだので解消する

libalpm.so.10: cannot open shared object file

パッケージを更新しようとしたらpackage-queryでエラー

$ yaourt -Syua --noconfirm

:: Synchronizing package databases...
 core                     129.4 KiB  2.11M/s 00:00 [######################] 100%
 extra                   1610.1 KiB  4.37M/s 00:00 [######################] 100%
 community                  4.4 MiB  3.61M/s 00:01 [######################] 100%
 multilib                 172.0 KiB  2.95M/s 00:00 [######################] 100%
 archlinuxfr               11.5 KiB  3.75M/s 00:00 [######################] 100%
 Foreign packages: - 10 / 10

==> Package upgrade only (new release):

(中略)

package-query: error while loading shared libraries: libalpm.so.10: cannot open shared object file: No such file or directory
==> ERROR: unable to update

うーんそこらへんのファイルをいじった記憶はない、ということで検索すると、package-queryをビルドし直せとのこと1 解消するために package-query をビルドしなおします

pushd /tmp
wget https://aur.archlinux.org/cgit/aur.git/snapshot/aur-98ce2515ad81e9d7efd444d4d61dfe00f5701100.tar.gz
tar xvf aur-98ce2515ad81e9d7efd444d4d61dfe00f5701100.tar.gz
cd aur-98ce2515ad81e9d7efd444d4d61dfe00f5701100
makepkg -i

package-query 落としてきて2、tar解凍してビルド

(中略)

==> Finished making: package-query 1.9-3 (Wed 30 May 2018 10:39:00 PM JST)
==> Installing package package-query with pacman -U...
loading packages...
resolving dependencies...
looking for conflicting packages...

Packages (1) package-query-1.9-3

Total Installed Size:   0.06 MiB
Net Upgrade Size:      -0.02 MiB

:: Proceed with installation? [Y/n]

インストールすれば終わりですお疲れ様でした

余談

この記事自体しばらく使ってなかったラップトップPCでビルドし直すのに楽するために書いていて、コマンド履歴と起動しっぱなしのターミナルからコピってきたので参考リンクがシュッと出てこない……

調べてる最中に「俺はシンボリックリンクを作って直したぜ」「おいやめろ」みたいなやり取りが見れて楽しかったので思い出したい、思い出したい気持ちです


  1. ページが思い出せないのでリンクがありません

  2. snapshotを落としてくるときに AUR (en) - package-query とか通った気がするのでよくわからないダウンロードリンクではなく自分でこれだと思う自分だけのpackage-queryをダウンロードしてください

GithubアカウントのSSH接続鍵を使い分ける

設定

SSHのconfigで別のHostを用意し、別の鍵を指定する

$ cat ~/.ssh/config
Host github.com
  Hostname github.com
  User git
  IdentitiesOnly yes
  IdentityFile ~/.ssh/github

Host hoge.github.com
  Hostname github.com
  User git
  IdentitiesOnly yes
  IdentityFile ~/.ssh/hoge/github

Hostnamegithub.comのままで、Host だけ別名に変えます

接続

あとはremoteのurlに hoge.github.com を使用すればOK

例としてhttps://github.com/tjmmm/DotFilesをcloneする場合をあげます

Host【github.com】に使用した鍵を使ってclone

git clone git@github.com:tjmmm/DotFiles.git

Host 【hoge.github.com】に使用した鍵を使ってclone

git clone git@hoge.github.com:tjmmm/DotFiles.git

既にリポジトリがある場合は git remote set-url を使って書き換える、origin以外のurlを追加する等でも良いと思います!

なぜこんなことを?

Q: こんなのわざわざする必要あるの?
A: 事情があれば別アカウントを使用しなければならないこともあります、ありますよね。プライベートリポジトリの権限もらったりするのにアカウントがわけられてしまうとかね。(少し悲しい)

Q: 接続先の設定にSSHのconfig使うのは当たり前じゃないですか?
A: よく別ドメインのために設定したりはしてましたけど、同じドメインでも使えるじゃんみたいなのを完全に見落としてました、ということですやめやめ!!!

以上です

お疲れ様でした!

Android NDK(Cmake)を使ったプロジェクトで native libraryのsoの場所を android_gradle_build.json を使って探す

小ネタです。プロジェクトのフォルダで以下のコマンド叩けばsoの場所がわかります。

Linuxです。楽したいのでjqも使ってます。

例:

$ find . -name "android_gradle_build.json" | grep debug | grep armeabi-v7a | xargs jq '.libraries | .[].output'
"/home/kaki/Practice/Android/GlApplication/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so"

途中に挟まってるgrepを消すと、各flaver、各abiのjsonファイルが見つかるはずです。

そもそも出来る場所くらい知ってるよという話はあってそれはそうなんですが、勝手に用意してくれる android_gradle_build.json からコンパイルオプションだとかファイルだとかが取れるので何か便利に使いたいなーという気持ちがありました。 android_gradle_build.json については

CMake  |  Android NDK  |  Android Developers

に記述がありました。そのほか「releaseビルドでもstripされてない(APKにするときにstripされる)」とか、一通り読むとへぇ〜な事が書いてありました。 上の例ではsoの場所を出してるだけですがそれなりに情報が入ったjsonになってます。

buildCommandとか書かれてるので、ここらへんに何かねじ込んで実験してみるのも面白そうですねどうなるんでしょう

 GlApplication find . -name "android_gradle_build.json" | grep debug | grep armeabi-v7a | xargs jq '.libraries'
{
  "native-lib-Debug-armeabi-v7a": {
    "abi": "armeabi-v7a",
    "artifactName": "native-lib",
    "buildCommand": "/home/kaki/sdk/android-sdk-linux/cmake/3.6.4111459/bin/cmake --build /home/kaki/Practice/Android/GlApplication/app/.externalNativeBuild/cmake/debug/armeabi-v7a --target native-lib",
    "buildType": "debug",
    "files": [
      {
        "flags": "  --target=armv7-none-linux-androideabi --gcc-toolchain=/home/kaki/sdk/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/kaki/sdk/android-sdk-linux/ndk-bundle/sysroot  -Dnative_lib_EXPORTS -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward  -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=23 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++14 -fexceptions -O0 -fno-limit-debug-info  -fPIC    -c ",
        "src": "/home/kaki/Practice/Android/GlApplication/app/src/main/cpp/native-lib.cpp",
        "workingDirectory": "/home/kaki/Practice/Android/GlApplication/app/.externalNativeBuild/cmake/debug/armeabi-v7a"
      }
    ],
    "output": "/home/kaki/Practice/Android/GlApplication/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so",
    "toolchain": "2304076354519640188"
  }
}

NDK使った開発も compilation_database みたいなものが入って、どんどんベンリになっていくのは嬉しいですね! そんなに開発してないですけど!!

以上です、お疲れ様でした。

Thinkpad T460s で ArchLinux の カーネルを 4.13.3-1 にしたら正常にシャットダウンできなくなったときの話

解決(回避方法)を見つけたし、現在 core に上がっている linux 4.13.5-1 では問題は発生しませんが最近書いてないなと思ったのでメモを残します。

発生していた問題&回避方法

備考

shutdown したときに cgroup: group2: unknown option "" とか出たあと数行画面に進行状態を出した上で進まなくなっちゃう状態でした。

ただ、 この表示は別問題で 、shutdownが最後まで正常に終わらないのは別の要因だったのです。なんてまぎわらしいんだ!(ちゃんと調べましょう

この問題は所有しているThinkpad X230では発生しなかったこと、Dell XPSや最近のLenovo Thinkpadでの発生報告が多いこと、少し前にSumsung PM961でATSの問題を踏んだことから、「またnvme ssd絡みかなー」なんて勝手に思ってたんですが バグ報告とか見る限りYoga460とかT460とかでも起こっているようで、じゃあ何が原因なんだろうか…という感じによくわかっていません。

年内にちょっとここらへんのハードに近い保護機能を調べてちょっとまとめたいなと思いつつ終わり

参考

Arch Linux Android Studio cmake "OPENSSL_1.0.0 not found" を解決する

/usr/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found

Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':project:externalNativeBuildCleanDebug'.
> Build command failed.
  Error while executing process ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake with arguments {--build ${HOME}/Project/project/.externalNativeBuild/cmake/debug/armeabi --target clean}
  ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake: /usr/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake)
  ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake: /usr/lib/libssl.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake)
  ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake: /usr/lib/libssl.so.1.0.0: version `OPENSSL_1.0.1' not found (required by ${HOME}/sdk/android-sdk-linux/cmake/3.6.3155560/bin/cmake)


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

適当にアップデートしてたら遭遇してしまいました。

とりあえずぐぐると一番上にStack Overflow、さすが。

stackoverflow.com

この中ではopensslパッケージをダウングレードすれば良いと書かれてますが、個人的に嫌でした。

下の方までスクロールしていくと「studio.shを編集する」という回答があります。

これでも良かったんですが、Android Studioのアップデートでパッチを当てるたびにconflictが出るのもめんどくさそうなので、別の対処法を取りました。

対処法

opensslをビルドして専用のディレクトリにインストールする。起動時にLD_LIBRARY_PATHを指定する。

微妙といえば微妙ですが、Android StudioやArch Linuxのパッケージアップデートのたびに問題起こるよりマシな感があったので……。

  1. libresslをダウンロードする。
  2. インストールフォルダを指定してビルドする。
  3. インストールする。ちょっと小細工する。
  4. 起動時に LD_LIBRARY_PREFIX で専用ディレクトリを指定する。

∠( ゚д゚)/

1. libresslをダウンロードする。

https://www.libressl.org/

wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.5.4.tar.gz

2. インストールフォルダを指定してビルドする。

cmakeを使っているので./configureを使う場合は適宜読み替え。

tar xvf libressl-2.5.4.tar.gz
mkdir libressl-2.5.4-build && cd libressl-2.5.4-build
cmake -D CMAKE_INSTALL_PREFIX=${YOUR_INSTALL_DIRECTORY} ../libressl-2.5.4
make -j`nproc`

3. インストールする。ちょっと小細工する。

CMAKE_INSTALL_PREFIXをつけてるのでmake installすればインストールはできるんですが、

Android Studioで入るcmakelibXXX.so.1.0.0を探すようです。 インストールしても上記のシンボリックリンクは作られないので適当に作ります。

make install
cd ${YOUR_INSTALL_DIRECTORY}/lib
ln -s libssl.so{,.1.0.0}
ln -s libcrypto.so{,.1.0.0}
# libtlsは使わないのでスルー

4. 起動時に LD_LIBRARY_PREFIX で専用ディレクトリを指定する

自分の起動方法に合わせて読み替えて下さい。僕はDesktop Entryから起動するので、

vim ~/.local/share/applications/jetbrains-studio.desktop

ファイルの内容は以下ですが、${HOME}${YOUR_INSTALL_DIRECTORY} のようなシェル変数の書き方をしてる部分は実際のパスに置き換えて下さい

[Desktop Entry]
Version=1.0
Type=Application
Name=Android Studio
Icon=${HOME}/Tools/android-studio/bin/studio.png
Exec=env LD_LIBRARY_PATH=${YOUR_INSTALL_DIRECTORY}/lib "${HOME}/Tools/android-studio/bin/studio.sh" %f
Comment=Develop with pleasure!
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-studio

Execのところでenv LD_LIBRARY_PATH=${YOUR_INSTALL_DIRECTORY} を指定してます。

これで解決しました。お疲れ様でした。

Rust: bindgenで生成したコードのdoctestがコケる

RustでCのラッパーライブラリを作ろうとしてたときに発生しました。

以下で対処

[lib]
doctest = false

Cargo.tomlに書き加える。

The Manifest Format

そもそもコメント形式が違うのになんでdoctestに引っかかってるのかはわかってないけどモチベがないのでこれでよしとする。

20170410 00:18 追記:

普通にbindgenにコメント生成しないようにするメソッドがありました

bindgen::Builder - Rust

Comments are copied verbatim without checking if they might be invalid · Issue #426 · servo/rust-bindgen · GitHub

    for fname in &files {
        let _ = bindgen::builder()
            .header(format!("{}/{}.h", &header_dir, &fname))
            .raw_line("pub use super::*;")
            .hide_type("max_align_t")
            .generate_comments(false)
            .clang_arg("-std=c11")
            .generate().unwrap()
            .write_to_file(Path::new(&out_dir).join(format!("{}.rs", &fname)));
    }

手元で作業してるものはこんな感じになりました。ドキュメントはちゃんと見ましょうということで、はい。