WindowsでChromiumをビルドする

諸事情によりオレオレビルドをしたくなった。ちょろっと修正したバイナリが欲しかったのだ。
今回はWindowsで使う必要があったのだが、我が家で一番パワーのあるCPUであるRyzen 3700XなマシンにはArch Linuxが載っているので、ここでソース修正を試行錯誤した後、Windowsで同様のソース修正をしてバイナリを生成するって感じのことをしようと思う。
Arch LinuxでのビルドはPKGBUILD使えばなんにも難しくないので割愛。ここではWindowsでビルドするぞ。つっても基本的にはChecking out and Building Chromium for Windowsに従うだけ。 必要なものは以下。カッコ書きは今回の環境。
・64bitなIntel CPU(Core i7 6700K)
・RAMは16GB以上推奨(48GB)
・NTFSでフォーマットされた100GB以上のストレージ(Samsung 860 QVO 1TB)
・Visual Studio 2019
・Windows7以降(Windows 10 Pro 1909)

Visual Studio 2019のインストール

まずはVS2019のインストール。Communityで良いのでてきとうに。インストールするコンポーネントは、C++によるデスクトップ開発と、個別で最新の v142 ビルド ツールの C++ MFC (x86 および x64)最新の v142 ビルド ツールの C++ ATL (x86 および x64)を入れた。(ほんとにこれが必要なのかはちょっとわからん)
最後に、Windows 10 SDK (10.0.18362.0)が入っていることを確認して、インストール。 それから、以下の手順でデバッギングのためのツールをインストールしておく。
コントロールパネル→プログラム→プログラムと機能→Windows Software Development Kit - Windows 10.0.18362.1を右クリック→変更→Changeにチェックを入れてNext→Debugging Tools For Windowsにチェックを入れてChangeボタンでインストール。

depot_toolsのインストール

次、depot_toolsのインストール。手順サイトからスッとダウンロードできる。パスにスペースを含まないてきとうなところに展開して、PATHを通す。(中に色々ツールが入ってるので、これが優先されるように)
システム環境変数にDEPOT_TOOLS_WIN_TOOLCHAIN(値は0)を追加する。
この状態で、cmd.exeを開いて、gclientを実行すると、諸々の必要なツール郡がインストールされるので、これを待つ。
インストールが完了した状態で、where pythonを実行して、depot_tools内のpython.batが呼ばれていることを確認する。(インストール完了確認)

ソースの入手

つぎ。
まずはgitの初期設定から。

$ git config --global user.name "hoge"
$ git config --global user.email "hoge@fuga.com"
$ git config --global core.autocrlf false
$ git config --global core.filemode false
$ git config --global branch.autosetuprebase always

パスにスペースを含まない場所を選んで、てきとうにフォルダを作る。そこの中で、fetch chromiumでリポジトリをcloneする。フルで要らない場合は--no-historyとかしろって書いてあるけど気にしない。20GB超ダウンロードしたし、最終的には1時間半くらいかかったかな。

$ mkdir chromium
$ cd chromium
$ fetch chromium

ビルド

ChromiumではビルドツールとしてNinjaというものを使んだけど、そのための.ninjaファイルを生成するのがGNというツール。こいつを使ってコンフィグ(ビルドディレクトリ)を作成して、autoninjaコマンドでビルドする。
Visual StudioをIDEとして使う場合には--ideオプションをつけろとかあるけど、今回は修正内容がはっきりしているので、気にしない。

$ cd src
$ gn gen out/Default
$ autoninja -C out/Default chrome

0:50頃スタートして、バイナリのタイムスタンプが5:20だったので、4時間半かかった。他にも色々やってたしこんなもんか? 手順通りに進めるだけでうまくいくっていいよね(?)

ArchLinux+btrfsでストレージを組む練習

NASていうかbtrfsを使う練習。 今は自宅内NASとして2TB*4で作ったRAID10なストレージをそのまま使っているのだけど、容量を大きくしたいというのと、組んだまま6年も使い続けているので、組み直したいという話。
同じようにRAID10で組み直すのも芸がないし、容量の変更に対応できるような構成にしたい。当初はZFSを検討していたのだけど、ライセンス的に面倒だし、Linuxのファイルシステム「Btrfs」を5年間使用した記録 – GIGAZINEとかによると、構成の変更が視野に入っているならbtrfsのほうが良さそう。 というわけでbtrfsを使う練習をしてみる。 取り敢えず4本一挙に買うお金が無いので、2本で構成→後からお金があるタイミングで4本に増やす、みたいなのを想定。
ただし、システムのパーティションは素直に組んで、NAS用ストレージだけbtrfsにする。
・ストレージ1本で構成
・1本追加してRAID1にする(メタデータもRAID1)
・1本壊れた想定で、差し替える
・2本追加して、4本で構成する
・1本壊れた想定で、差し替える
・1本を大容量のものに差し替える

ArchLinuxセットアップ

何はともあれ実験環境のセットアップ。物理マシン(物理ストレージ)を用意するのは面倒なので、仮想マシンで。
2020.04.01なISOを読ませて起動して、以下つらつらと構成。

// それっぽくパーティショニング
# fdisk /dev/sda
// マウントとpacstrap
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# pacstrap /mnt base base-devel linux linux-firmware
// fstab生成とchroot
# genfstab -U /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
// タイムゾーン、ロケール、ホスト名、パスワード
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/locale.gen
# locale-gen
# cat hostname > /etc/hostname
# pacman -S vim
# vim /etc/hosts
# passwd
// ネットワーク
# pacman -S dhcpcd
# systemctl enable dhcpcd.service
// ブートローダ
# pacman -S grub
# grub-install --target=i386-pc --recheck /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg
// 再起動
# exit
# umount -R /mnt
# reboot

お次は一般ユーザの作成。

// 一般ユーザの作成
# useradd -m tea
# passwd tea
# ln -s /usr/bin/vim /usr/bin/vi
# visudo
# su tea
$ sudo whoami

ストレージ1本で構成

デフォルトで入ってるストレージは/dev/sdaとして認識されている。ここにストレージを追加したところ、/dev/sdbとして認識されたので、これ1本で構成してみよう。

$ sudo pacman -S btrfs-progs
$ sudo mkfs.btrfs -L tank /dev/sdb
$ sudo sh -c "echo UUID=`ls -l /dev/disk/by-uuid/ | grep sdb | awk '{print $9}'` /mnt btrfs rw,relatime 0 0 >>/etc/fstab"
$ sudo mount -a
$ btrfs filesystem df /mnt
Data, single: total=8.00MiB, used=0.00B
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=112.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B

取り敢えずの作成とマウントはできたっぽい。snapshotはsubvolume単位で作成するので、subvolumeも触ってみる。

$ sudo btrfs subvolume create /mnt/sv1
$ sudo chown tea:tea /mnt/sv1
$ cd /mnt/sv1
// てきとうにファイルを作成
$ dd if=/dev/zero of=/mnt/sv1/data bs=10M count=1
$ ls -l
-rw-r--r-- 1 tea tea 10485760 Apr 28 03:56 data
$ btrfs filesystem df /mnt
Data, single: total=100.62MiB, used=10.06MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=128.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
// snapshotを作成する
$ sudo btrfs subvolume snapshot /mnt/sv1 /mnt/sv1.snap
$ btrfs filesystem df /mnt
Data, single: total=100.62MiB, used=10.06MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=144.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
// subvolume内をいじる
$ rm data
// snapshotは残っている
$ ls /mnt/sv1.snap/
data
$ btrfs filesystem df /mnt
Data, single: total=100.62MiB, used=10.06MiB
System, DUP: total=8.00MiB, used=16.00KiB
Metadata, DUP: total=51.19MiB, used=144.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
// 弄ったsubvolumeにsnapshotを差し替える
$ sudo btrfs subvolume delete /mnt/sv1
$ sudo btrfs subvolume snapshot /mnt/sv1.snap /mnt/sv1
$ ls /mnt/sv1/
data

subvolumeのsnapshotをとって、それからまるっと書き戻す、みたいなことができるようになった。

1本追加してRAID1にする(メタデータもRAID1)


$ sudo btrfs device add /mnt/sdc /mnt
$ sudo btrfs filesystem show /mnt
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.20MiB
        devid    1 size 1.00GiB used 238.38MiB path /dev/sdb
        devid    2 size 1.00GiB used 0.00B path /dev/sdc
// まずbalance
$ sudo btrfs balance start /mnt
// metadataがDUPなのでRAID0に変更ついでにbalance
$ sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
$ btrfs filesystem df /mnt
Data, RAID1: total=416.00MiB, used=10.12MiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=208.00MiB, used=160.00KiB
GlobalReserve, single: total=3.25MiB, used=0.00B
$ sudo btrfs filesystem show /mnt
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.30MiB
        devid    1 size 1.00GiB used 656.00MiB path /dev/sdb
        devid    2 size 1.00GiB used 656.00MiB path /dev/sdc

usedが増えすぎてる気がしてならない…が、dconvertmconvertを外してbalanceしても240.00MiBと448.00MiBなので、似たようなものか?raid1指定して再度balanceすると使用量が同じになったので間違っていなさそう(ふんいき)

1本壊れた想定で、差し替える

仮想マシンの設定でHDDを1本取り除いておく(そのままだと起動できないので、fstabから自動マウントしないようにしておくか、マウントオプションにdegradedを追加しておく)

$ sudo btrfs filesystem show
warning, device 1 is missing
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.30MiB
        devid    2 size 1.00GiB used 656.00MiB path /dev/sdc
        *** Some devices missing
// 強引にmount
$ sudo mount -o degraded /dev/sdb /mnt
// デバイスを取り除く
$ sudo btrfs device delete missing /mnt
ERROR: error removing device 'missing': unable to go below two devices on raid1

RAIDを組んでいる時に、必要台数を下回ることはできないエラー。RAID1なら2台を下回ってはいけない。Using Btrfs with Multiple Devices – btrfs Wikiによると、とにかく1台追加してからdeleteしろとのこと。

$ sudo btrfs device add /dev/sdb /mnt
$ sudo btrfs device delete missing /mnt
$ sudo btrfs balance start /mnt
$ sudo btrfs filesystem show
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.27MiB
        devid    2 size 1.00GiB used 416.00MiB path /dev/sdc
        devid    3 size 1.00GiB used 416.00MiB path /dev/sdb

2本追加して、4本で構成する

あとはもう同じようにやるだけ。

$ sudo btrfs filesystem show
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.27MiB
        devid    2 size 1.00GiB used 416.00MiB path /dev/sdc
        devid    3 size 1.00GiB used 416.00MiB path /dev/sdb
$ sudo btrfs device add /dev/sdd /dev/sde /mnt
$ sudo btrfs balance start /mnt
$ sudo btrfs filesystem show
Label: 'tank'  uuid: ~略~
        Total devices 2 FS bytes used 10.27MiB
        devid    2 size 1.00GiB used 288.00MiB path /dev/sdc
        devid    3 size 1.00GiB used 288.00MiB path /dev/sdb
        devid    4 size 1.00GiB used 416.00MiB path /dev/sdd
        devid    5 size 1.00GiB used 416.00MiB path /dev/sde

同じ使用量のセットが2つあるのでうまくいってそう。

1本壊れた想定で、差し替える

今や4台あるので、btrfs device delete missingして、差し替えのストレージをbtrfs device addするだけ。

1本を大容量のものに差し替える


$ btrfs filesystem usage /mnt
WARNING: cannot read detailed chunk info, per-device usage will not be show, run as root
Overall:
    Device size:                   4.00GiB
    Device allocated:              1.38GiB
    Device unallocated:            2.62GiB
    Device missing:                4.00GiB
    Used:                         20.66MiB
    Free (estimated):              1.71GiB      (min: 1.71GiB)
~以下略~
$ btrfs device delete /dev/sdc /mnt
$ btrfs device add /dev/sdf /mnt
$ btrfs filesystem usage /mnt
WARNING: cannot read detailed chunk info, per-device usage will not be show, run as root
Overall:
    Device size:                  11.00GiB
    Device allocated:              1.69GiB
    Device unallocated:            9.31GiB
    Device missing:               11.00GiB
    Used:                         20.78MiB
    Free (estimated):              5.21GiB      (min: 5.21GiB)
~以下略~

Device missingは何を表しているのだろうかな~ 取り敢えず使うぶんにはこんくらいあればいいんだろうかな、実際に使うときには、定期的にsnapshotとるとか、色々とメンテが必要なんだろうなとは思いつつ、今回はおしまい どうでも良いが、モニタの液晶とパネルの間に、小さい虫が入ってしまったようで、ず~~~っと画面中でうろうろ動き回っていてつらい。分解するのもしんどいしなぁ。どうするかなぁ

mirakurun-serverのCPUが100%で止まる

PX-Q3PE4で録画機の新調 – お茶漬けぶろぐで組んだ録画鯖なのだけど、最近録画ミスが増えてて、データが作られないまま、録画中リストに残り続けるという感じ。以前もたまにあったのだけど、再起動で直っていた。ところが、ここ数日は、再起動では直らず、リアルタイム視聴も数分で止まってしまう。chinachuのWebフロントも、まともに操作できない(応答が返ってこない)。 なんだろーと思って、録画機でpm2 statusを見ると、どうもmirakurun-serverのCPU使用率がぐんぐん上がっていって、100%になったときに死んでいるみたいだ。 ぐぐるとまず見つかったのがこちら。mirakurun-serverがおかしい – yotayota diary
契機はともかく、IPv6を殺せという事のようだ。mirakurun-serverのログ(/usr/local/var/log/mirakurun.stderr.logとか/usr/local/var/log/mirakurun.stdout.log)を見ていても、同じようなログが出ているわけではないのだけど、ダメ元で入れてみた…が直らず(違う現象だろうし、そりゃそうだろ感しかない) 次に見つかったのはこちら。Liuxでテレビ総合スレ 避難所 2 – 5ちゃんねる
違う構成だけど、ログにとくに怪しいものが出てこないというのも、ブラウザも繋がらないってのも共通。
同スレの>>287-288を見ながら、/usr/local/lib/node_modules/mirakurun/node_modules/aribts/lib/char.jsをてきとうに書き換えてみると、取り敢えずCPUの使用率がぐんぐん上がっていくことはなくなった。 rndomhack/node-aribtsにあるchar.jsを見に行くと、全く同じ修正が入っていたっぽい事がわかる。
確かに、システム組み上げた後、一切触っていなかったしなぁ。一旦動き始めたシステムでも、それなりに更新する必要性を感じた一件でした。

Nuxt.jsを使ってみる

参考:nuxtjsでtodo アプリケーションを作成 – Qiita
ま、内容自体はほぼ焼き直しだけど、自分の解釈を加えるって感じ。環境はてきとうなArchLinuxだよ。 まずは環境構築。

# pacman -S nodejs npm
# npm install -g vue @vue/cli @vue/cli-init

プロジェクトの作成。

$ vue init nuxt-community/starter-template todos

nuxt-community/starter-templateはテンプレート名。nuxt-community/starter-template: DEPRECATED: use create-nuxt-app insteadがネタ元か?templateとして使えるリポジトリを指定すれば良いのだろうか。このtemplateはDeprecatedらしいので今やるならリンクが張られているnuxt/create-nuxt-appをどうにかして使うのが良いのかな。

$ cd todos && npm install && npm run dev

起動完了したら、http://localhost:3000にアクセスしてそれっぽい画面が出ればおk。今後はソースを編集すると自動でリロードされるっぽい。 つぎ。ルーティングの追加。pages以下にディレクトリを作成すれば、それがそのままルーティングの設定になる。

$ mkdir pages/todos
$ vi pages/todos/index.vue


<template>
  <div>
    todos
  </div>
</template>

<script>
export default {}
</script>

<style>
</style>

そのままhttp://localhost:3000/todosにアクセスすればpages/todos/index.vueの内容が見れる。 さて、Vuexの話。まずは有効化。nuxt.config.jshead:の次に以下の記述を追加。

$ vi nuxt.config.js


  build: {
    vendor: [
      'vuex',
    ]
  },

storeの作成。

$ vi store/todos.js


export const state = () => ({
  list: []
})

export const mutations = {
  add (state, text) {
    state.list.push({
      text: text,
      done: false,
      id: state.list.length + 1,
    })
  },
  remove (state, { todo }) {
    state.list.splice(state.list.indexOf(todo), 1)
  },
  toggle (state, todo) {
    todo.done = !todo.done
  }
}

ところでVuexとかStoreとかってなんなのだ。 Vuexは状態管理パターン+ライブラリとかいう記述が公式サイトにある。ここでの状態管理とは、ページ上の見た目(内容)・状態・アクション(それぞれView, State, Actions)の管理のことのようだ。単純な場合は利用しなくても良いけれど、複数のViewがStateを共有したりとか、異なるViewのActionsから同一のStateを変更したりとかすると、脳みそで管理するのはしんどいので、使ってくれという事みたい。 Storeは、VuexでのStateを保持するためのコンテナらしい。これはstatemutationsから成っている。mutationsは英単語としての意味は「変化」であり、これを使って状態を変更する。 最後に、index.vueから機能を利用するように変更する。

$ vi pages/todos/index.vue


<template>
  <ul>
    <li v-for="todo in todos" :key="todo.id">
      <input type="checkbox" :checked="todo.done" @change="toggle(todo)">
      <span :class="{ done: todo.done }">{{ todo.text }}</span>
      <button @click="removeTodo(todo)">remove</button>
    </li>
    <li><input placeholder="What needs to be done?" @keyup.enter="addTodo"></li>
  </ul>
</template>

<script>
import { mapMutations } from 'vuex';

export default {
  computed: {
    todos () { return this.$store.state.todos.list }
  },
  methods: {
    removeTodo (todo) {
      this.$store.commit('todos/remove', todo);
    },
    addTodo (e) {
      this.$store.commit('todos/add', e.target.value);
      e.target.value = '';
    },
    ...mapMutations({
      toggle: 'todos/toggle'
    })
  }
}
</script>

<style>
.done {
  text-decoration: line-through;
}
</style>

mapMutationsを使っている意味はよくわからない。

toggle (todo) {
  this.$store.commit('todos/toggle', todo);
}

でも意図した動作はするのだけど…何か意味があるんかな? このままだとremoveがどのボタン押しても最新のやつからしか削除されないのでつらい。store/todos.jsの13行目にある{ todo }todoにすれば、押したものから削除されるが、寧ろ波括弧でくくったこの記述はどんなときに使うのだろう?VuexのMutationsについてのガイドを見ると、複数のデータを渡したい場合には、オブジェクトにして送れというような内容が書かれている。あんまり気にしないで良さそうかな。 以上。てきとうにイジればそれっぽく使える気配がしてきた。Node.js+ExpressでWebアプリを作って遊んでいたのだけど、それを作り直してみようかな?と思ったりもする。それか、まるっきり別のものを作ってみるのも良いかもね。
何にしろ、ろくすっぽ勉強せず取り敢えず触ってみるのは、手探りつらいってのもあるけど、やっぱり楽しいね。

yayでPKGBUILDを編集する

aurヘルパーとしてyayを使っているのだけど、PKGBUILDを編集したいときに、デフォルトでは何も聞いてくれずに進んでいってしまう。かなしい。

$ yay --nodiffmenu --editmenu --editor vim --save

上記を実行すれば良い。引数はそれぞれ、
・PKGBUILDのdiff見る?をオフにする
・PKGBUILD編集する?をオンにする
・編集時のエディターをvimにする
・以上変更を保存する
を意味する。参考[https://github.com/Jguer/yay/blob/6cd47dd83c49689f0bd84c650feea9c71ed1aaf2/cmd.go] もともとはgnome-python-desktopのビルドが通らず、コメント見に行ったらconfigureの引数変えとけって書いてあったので、それがやりたかったのでした。置いてあるPKGBUILD編集してもyay実行するとcheckoutされてしまって…

Windows Terminalを使う

そういえば、とふと思い出してStoreを見てみたら入手できそうじゃないですか。取り敢えず入れてみましょう。
Preview版がインストールできそう
Preview版だけど入手できそう!
ところが、入手ボタンを押しても反応しない…なぜだ?と思ってよくよく見ていると、入手ボタンのちょい下の方に「システム要件を確認」つーのがある。これを押してみると…
システム必要条件
更新しないとダメくさい
最新のを入れましょう…更新ボタンから画面の指示に従っててきとうにアップデート。
Windowsを更新するぞ
さて、次はどの設定を崩してくれるのかな…
更新が完了するとインストールできるようになるので(なんだかんだ1時間くらいかかった気がする)ぶち込み。 背景がいじれるらしいのでやってみる。以下みたいなノリでprofiles.jsonの好きなprofileに書き加えて保存すると、即時適用される。

"backgroundImage": "C:\\temp\\bg.bmp",
"backgroundImageOpacity": 0.75,
"backgroundImageStrechMode": "fill",

背景画像を設定
文字色がアウツッ
てきとうにいじって、WSLなUbuntuで、文字が見えなくもないColor schemeに変えて、アイコンを変えたのが以下。
見えなくもないColor shemeとそれっぽいアイコン
背景画像指定を切って、useAcrylicをtrueにすれば、背景が透けてウィンドウの向こうが見えたりもする。
背景が透けて奥が見える
背景が透けて奥が見える
なんかいろいろ弄れそうなのだけど、設定について解説してるとこがあんま見当たらなくて(ジェネリックなネーミングなので検索がクソめんどい)面倒だったので、以上。

ArchLinuxでAndroidビルド

久々にAndroidビルドの需要が自分の中で高まった。何年も前にP-01D向けCyanogenmodのビルドにチャレンジした事はあるが、その時のソースコードは人の作ったものだったので、今回は自分でやってみたい。自分で試行錯誤したい。 大抵Ubuntu向け記事ばかりだが(そもそも公式の文書がUbuntu向け)急にUbuntuホストを用意するのも面倒。手元のArchLinuxでそのままやりたい。というわけで、一先ずソース修正の類は何もせず、Pixel用でビルドしてみる。 それっぽいパッケージ群のインストール。必要なもののみかどうかは自信無い。

$ yay -S base-devel
$ yay -S git gperf zip curl zlib lib32-glibc ccache mesa libxslt unzip jdk8-openjdk rsync
$ yay -S multilib-devel # lib32-ncurses5-compat-libsに必要
$ yay -S lib32-ncurses5-compat-libs # 実際必要かどうかは不明
$ yay -S ncurses5-compat-libs
$ yay -S python2

repoコマンドのインストール、pythonリンク作成、git初期設定。

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ ln -s /usr/bin/python2 ~/bin/python
$ ln -s /usr/bin/python2-config ~/bin/python-config
$ git config --global user.email "hoge@fuga.com"
$ git config --global user.name "hoge"

Androidソースコードの入手。バージョンは8.0.0の最新にしてみる。

$ mkdir ~/git/aosp/android-8.0.0_r36
$ cd ~/git/aosp/android-8.0.0_r36
$ repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r36 # すぐ終わる
$ repo sync # めっちゃかかる

ビルド。

$ source build/envsetup.sh
$ lunch # 好きなデバイスを選択。今回はsailfish向けにしていた
$ make -j2

エラー出るので修正。pythonが無いよって言うけど、まさかパス決め打ちじゃないよね…?

/bin/bash: prebuilts/clang/host/linux-x86/clang-3859424/bin/clang++: /usr/bin/python: bad interpreter: No such file or directory
$ cd /usr/bin
$ sudo ln -s /usr/bin/python2 python
$ sudo ln -s /usr/bin/python2-config python-config

Jack serverと通信できないみたいなエラーが出るのでぐぐって対応。

Communiction error with Jack server (52). Try 'jack-diagnose'
$ ./prebuilts/sdk/tools/jack-admin stop-server
Stopping background server
No Jack server running. Try 'jack-admin start-server'
$ ./prebuilts/sdk/tools/jack-admin start-server

メモリがいっぱいになる件。

Out of memory error (version 1.3-rc6 'Douarn' (4418000 22a11d4b264ae70e366aed3025ef47362d1522bb
by android-jack-team@google.com)).
Java heap space.   
Try increasing heap size with java option '-Xmx<size>'.
$ ./prebuilts/sdk/tools/jack-admin stop-server
Stopping background server
$ ./prebuilts/sdk/tools/jack-admin cleanup-server
$ export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
$ ./prebuilts/sdk/tools/jack-admin start-server

あとはビルドが終わるまでひたすら待ち。Pixelデバイスが手元に無いので動作確認すら取れない。どうしよう…買うか…?

aurヘルパーyayの導入

長らくyaourtを使っていたが、どうもディスコンのようなので。

$ mkdir ~/yay &amp;&amp; cd ~/yay
$ git clone https://aur.archliunx.org/yay.git
$ cd yay
$ makepkg -si

基本的にはこれで終了。もし既にaurヘルパーがいるなら、それを使うとらくちん。

$ yaourt -S yay
$ yay -Rs yaourt

新規環境でいじるときとか、base-develを入れ忘れていると「Cannot find the strip binary required for object file stripping.」とか怒られるのでお気をつけて。

LinuxでGoogle Keepのデスクトップクライアント

あると便利かな〜と思って検索していたら発見したので使ってみる。 https://github.com/andrepolischuk/keep Releaseにあるバイナリを使ってもいいんだけど、折角なので(?)cloneして使ってみる。

$ git clone https://github.com/andrepolischuk/keep.git
$ ./keep
$ npm install
$ npm start

うまくいけばこれで起動できる。んで、あとは普通に使える。 さて、このままだと起動しにくいので起動スクリプトでも用意しておこう。ランチャでdmenuを利用しているので(Super+Rでdmenuを起動するようにしてあるので諸々の起動が楽)、パスが通った場所に起動スクリプトを置いておけると便利だ。

$ cat /usr/local/bin/keep-client
#!/bin/bash

cd ~/keep
npm start

わざわざ記事に書くまでもない感じの内容だった…。

WordPress5でAmazonJSを使う

気付いたらエディタが前のやつからブロックエディタに変わっていてびびった上に、AmazonJSをどこで呼び出すのかわからなかったのでメモ。

Wordpress5になって、以前はプラグイン扱いだったGutenbergというのがデフォルトで使われるようになったらしい。まぁ使い勝手も良いし楽しいので良いのだけど、AmazonJSが使えなくなるのはかなしい。というわけで使い方。

つかいかた

  1. ブロックを用意する
  2. ブロックタイプを「クラシック」にする
  3. 以前まで使えていたエディタが表示される
  4. AmazonJSを呼び出せそうなアイコンがあると思うので、あとは従来どおりに
単純な話でした。ブロックエディタを使いたくてこんな記事を書いているというのもある。