うならぼ

申し訳程度のアフィリエイトとか広告とか解析とかは/aboutを参照

昨年度の話、もしくは1年Mastodonで暮らした結果

芝が生えた*1

f:id:unarist:20180419130150p:plain

あとSKK*2使いになって半年は経った。割と肌に合うらしい*3

そういえば落書きもたくさんしたね*4iPad Pro ほしい*5

LTの雑スライドに使えそうな数字群*6

  • 52k posts
  • 59k favorites
  • 136 merged PRs
  • 30 commits on forks (kirakiratter/kktCSS, mstdn.maud.io, etc.)
  • 5 bookmarklets
  • 15 custom styles (rules)
  • 18 user scripts
  • 英文を読み書きした回数: たくさん(例年*7に比べて)

そうこうしてたら一年経っていたとお考えください。ツケがまわってきたので最近contributionも大人しくなってますが。

制作物もろもろ

Mastodon関係ないやつ

UserScript

2カラムレイアウト関連(最近のバージョンだとちょっと挙動が怪しい)

開発者向け

UserStyle

/* 単体のカスタム絵文字を大きくする(雑判定) */
p > .emojione[alt^=":"]:only-child {
  width: 2.5em; height: 2.5em; margin: 0;
}

/* 「アニメーションの動きを減らす」向けの調整 */
.compose-form > div:first-child { opacity: 1 !important; }
.modal-root { transition: opacity .2s }

/* 色々小さくする */
.search__input, .autosuggest-textarea__textarea { font-size: 13px !important; }
.status__info { font-size: 13px; }
.status__content, .reply-indicator__content { font-size: 13px; line-height: 19px; }
.status__action-bar { margin-top: 5px; }

/* ユーザー詳細でアバターにカーソル乗せた時のアニメーションを(ry */
.account__header__avatar { border-radius: 100% !important; transition: .5s;}
.account__header__avatar:hover { border-radius: 8% !important; transition: .5s; }

/* 縦に長い投稿を省略 */
.status__content--with-action {
    max-height: 30em;
    overflow: hidden;
}

/* リモート宛のメンションでドメインの頭文字を表示(可能なら) */
/*
[...Array(26).keys()].map(i => String.fromCharCode(97 + i)).map(c => `a.mention[title*="@${c}"]:after { content: "@${c}…" }`).join("\r\n")
*/
a.mention[title*="@a"]:after { content: "@a…" }
a.mention[title*="@b"]:after { content: "@b…" }
a.mention[title*="@c"]:after { content: "@c…" }
a.mention[title*="@d"]:after { content: "@d…" }
a.mention[title*="@e"]:after { content: "@e…" }
a.mention[title*="@f"]:after { content: "@f…" }
a.mention[title*="@g"]:after { content: "@g…" }
a.mention[title*="@h"]:after { content: "@h…" }
a.mention[title*="@i"]:after { content: "@i…" }
a.mention[title*="@j"]:after { content: "@j…" }
a.mention[title*="@k"]:after { content: "@k…" }
a.mention[title*="@l"]:after { content: "@l…" }
a.mention[title*="@m"]:after { content: "@m…" }
a.mention[title*="@n"]:after { content: "@n…" }
a.mention[title*="@o"]:after { content: "@o…" }
a.mention[title*="@p"]:after { content: "@p…" }
a.mention[title*="@q"]:after { content: "@q…" }
a.mention[title*="@r"]:after { content: "@r…" }
a.mention[title*="@s"]:after { content: "@s…" }
a.mention[title*="@t"]:after { content: "@t…" }
a.mention[title*="@u"]:after { content: "@u…" }
a.mention[title*="@v"]:after { content: "@v…" }
a.mention[title*="@w"]:after { content: "@w…" }
a.mention[title*="@x"]:after { content: "@x…" }
a.mention[title*="@y"]:after { content: "@y…" }
a.mention[title*="@z"]:after { content: "@z…" }

/* ピン留め投稿を折り畳む(微妙) */

article[data-id^="f-"] .status__wrapper:not(:focus) .status {
    padding-top: 0;
    min-height: 0;
    max-height: 0.5em;
    overflow: hidden;
}
article[data-id^="f-"] .status__wrapper:not(:focus) .status__avatar,
article[data-id^="f-"] .status__wrapper:not(:focus) .display-name {
    display: none
}

/* unlisted投稿の右下に鍵マーク表示 */

.status-unlisted:after {
    display: block;
    position: absolute;
    width: 14px; height: 14px;
    right: 10px; bottom: 8px;
    font: 14px/1 FontAwesome;
    content: "\F13E"; /* fa-unlock-alt */
    opacity: 0.3;
}

*1:このグラフはGithubのユーザーページに表示されているもので、過去一年間のGithub上での活動量を色で表現したものです(縦に曜日、横に週が並ぶ)。その一年間においてより多く活動をした日が濃い色で表示されるので、例えばまんべんなく色がついていれば毎日同じようにコミットしたりissue/pr投げたりしていたねという感じです。その色から芝生などと呼ばれています。

*2:変換する範囲や送り仮名の位置をキー操作で明示して変換する、ちょっと変わった日本語入力システム。一見面倒に思えるが熱狂的なファンも多い(よくあるやつ)。詳しくはお好みの百科辞典サイトで。

*3:彼のどこが一番好きかと言われると、ひらがなカタカナが意図せず変換されることがない(ひらカナを強制するのは普通のIMEでもできるが、変換候補に挙がってこないし学習もされないのが大きい)ところなのかなあ。同音異義語の出しわけに弱い(単語単位で変換するので文脈を全く読まないし送り仮名も最後まで見ない)のが難点だけれど。

*4:日頃かわいいイラストをありがとうございます。こんなに描いてもらえるなんて思ってもみなかった。

*5:新しいiPad AirでもApplePencilは使えるけれど、スピーカー4つ魅力的じゃない?

*6:c.f. 林檎社とかの基調講演

*7:ほぼゼロ

*8:Mozilla Developer Network。JavaScriptに関して調べるとよく出てくる https://developer.mozilla.org/ja/docs/Web/JavaScript とかのことです。

*9:デスクトップ版Chromeでもflag立てれば使えるのです

EAPIの壁を越えてPortageを更新する

Windows使いとしては、1年以上GentooLinuxを更新せずに放置するとか、やっぱりあるわけです。で久々にうどんワールドしようかなとか思うと、大量のエラーに見舞われるわけです。

まあPortage更新すりゃいいんでしょ。

$ emerge -p1v portage

...

!!! All ebuilds that could satisfy "dev-python/pyblake2[python_targets_pypy(-)?,-python_single_target_pypy(-),python_targets_python2_7(-)?,-python_single_target_python2_7(-),python_targets_python3_4(-)?,-python_single_target_python3_4(-),python_targets_python3_5(-)?,-python_single_target_python3_5(-)]" have been masked.
!!! One of the following masked packages is required to complete your request:
- dev-python/pyblake2-1.1.0::gentoo (masked by: EAPI 6)
- dev-python/pyblake2-0.9.3-r1::gentoo (masked by: EAPI 6)

The current version of portage supports EAPI '5'. You must upgrade to a
newer version of portage before EAPI masked packages can be installed.
(dependency required by "sys-apps/portage-2.3.13-r1" [ebuild])
(dependency required by "portage" [argument])
For more information, see the MASKED PACKAGES section in the emerge
man page or refer to the Gentoo Handbook.

🙄

sys-apps/portage 自体は EAPI 5 であるものの、その依存パッケージが EAPI 6 だけになってしまったようです。

PortageはROOT環境変数ないし --root オプションを使うことでインストール先の環境を変更することができます。これを使って、正常にPortageが動作する環境、stage3から更新をかけてみます。

chrootまで

まずはインストール時と同様にchrootできる状態にします。

# mkdir /mnt/gentoo
# tar xvpf stage3-*.tar.xz -C /mnt/gentoo

# mount --rbind /dev /mnt/gentoo/dev
# mount --rbind /proc /mnt/gentoo/proc

Portageツリーは更新してしまったのがあるのでそれを、またインストール先である / を適当なディレクトリにbindマウントしておきます。

# mkdir /mnt/gentoo/usr/portage
# mount --bind /usr/portage /mnt/gentoo/usr/portage

# mkdir /mnt/gentoo/mnt/parent
# mount --bind / /mnt/gentoo/mnt/parent

ROOTを指定するとROOTにある /etc/portage/* が読み込まれますが、これをそのまま使うと依存関係がまたややこしくなるので、stage3のものをベースにします。MAKEOPTSやFEATURESはよしなに。

# mv /etc/portage /etc/portage_
# ln -s /mnt/gentoo/etc/portage /etc/portage

そしてROOTを毎回指定しなくていいように、chrootしたらexportしてしまいます。

# chroot /mnt/gentoo /bin/bash

# export ROOT=/mnt/parent

いつものemergeバトル

# emerge -p1u portage
...
[blocks B      ] <dev-lang/python-3.3.5-r4:3.3 ("<dev-lang/python-3.3.5-r4:3.3" is blocking dev-lang/python-exec-2.4.5)
[blocks B      ] app-emulation/emul-linux-x86-baselibs ("app-emulation/emul-linux-x86-baselibs" is blocking sys-libs/ncurses-6.0-r1)

手前のは例によって dev-lang/python-exec を足したら消えた、というか最初はこれ出てたはずなんだけど再現できない…。

問題は後者。amd64として構築したGentoo環境では基本的にamd64向けのバイナリしかビルドされないが、バイナリ配布しかないソフトウェアの中にはx86版しかないものがあります。ここでx86版のライブラリも同時にインストールしておこうというのがmultilibプロジェクトで、以前はemul-linux-なんちゃらというパッケージに定番ライブラリのx86バイナリを詰めこんで配布していました。ただこれだと個別のパッケージをユーザー側でどうこうできないしパッチ当ても別になるしで微妙だったので、USEフラグの仕組みでビルド・インストール・依存するABIを選択できるようにしたのがgx86-multilibと呼ばれるものです。

でー…なんかこの環境にはその移行から数年経ってそうなemul-linuxのパッケージが残っていたわけですね。かといってgx86-multilibに乗りかえると該当するパッケージのリビルドが走ってだるい…。

emerge -cpv emul-linux-x86-baselibs から始めて、emul-linuxパッケージを足していきながら、なにに要求されているのかを確認してみると nvidia-drivers だけでした。どのみちEFIブート周りではまって nouveau を検討していましたし、とりあえず今はXは全く使えなくても問題ないです。emerge -C で強引に消してしまう手もありますが、穏便に行きましょう。

# INPUT_DEVICES="" VIDEO_CARDS="" emerge -a1u xorg-drivers
# emerge -ac emul-linux-x86-{baselibs,db,medialibs,soundlibs,xlibs,opengl} nvidia-drivers

これであとは emerge -a1u portage して目標達成です。pythonふたつを含む10パッケージほどが更新されました。/etc/portage/ディレクトリじゃないからリネームしといたよとか言われてますが、まあいいでしょう。後で再mergeするだろうし…。

しかしここからが大変そうだなあ…。