あけましておめでとうございます。

(今年は雲が多くてうまく見れなかった)初日の出を見て、家で過ごしてるところです。
去年は実家に閉じこもっており、夏場に鉄道旅行をした以外は何もしてないですね…
プログラムの進捗にも波があってOSでのマルチコアのサポートなどをしてました。
今年もよろしくお願いします。

セキュリティ・ネクストキャンプ2020参加記(チューター)

ドッタンバッタン大騒ぎして結局今までろくにまとめられなかったセキュリティキャンプの参加記。
感想も交えて詳しく書けたらいいなと思っています。

セキュリティキャンプ2017参加記

こんなことを書いて早3年、今度はセキュリティ・ネクストキャンプ2020にチューターとして参加させていただくことができました。というわけで前回と同じようにまとめたいと思います。
セキュリティキャンプの様子を知りたい方は以下のリンクをご覧ください。
セキュリティキャンプ2017参加記
セキュリティキャンプ2019参加記(チューター)
セキュリティキャンプ – カテゴリーアーカイブ

今年のセキュリティ・キャンプとセキュリティ・ネクストキャンプは史上初のオンライン開催となりました。
そのため、時系列でまとめるのは難しいですが、全体的な感想をまとめておきます。

全体的な進行形式

開会式と閉会式はYoutube Liveで行われ、講義自体はGoogle Meetで行われました。ブラウザから参加できるので、特別な設定無しで良かったです。(特にZoomは不調続きで大学で使用していてイライラしており使ってほしくなかったので、Meetを使ってもらえて良かったです。)
MeetのアドレスはKintoneで管理されており、講義ごとのスレッドが立っていてその講義に関する質問もできるようになっています。

良かった点

  • オンライン開催ながら講義の質はとても高く、チュータの自分でも多くのことを学べた(それでいいのかチューターよ)
  • Kintoneでの事前準備の情報確認はよく行われており、理解しやすかったと思う
  • オンライン開催だから、どこでも参加できた(普段は実家のある福岡で参加して、一回だけ旅行先の金沢の東横インから参加しました)
  • 録画が公開されており、わからないところは振り返ってみることができたのは助かりました。ただ、自分が担当していた講義以外は権限の調整が上手く行っていないところもあるらしくそこら辺は要改善かなと思います

反省点

  • 今回のチュータ業務は自分の専門外の分野も含んでいたため、事前準備をしてもサポートしにくい分野もあって力不足を感じた…
  • カメラをオンにするとCPU使用率が上がってファンがうるさくなるためつけられなかったが、できればオンにして参加したかった
  • オンラインコミュニケーションはやはり難しく、受講者同士の会話が少ないように思えました(モブプログラミングの回ではかなり活発になっていましたが)
  • オンラインで話すと割り込まれることが少ないのでついつい喋りすぎたと反省…

まとめ

オンラインで行っても質の高い講義があったのはさすがセキュリティキャンプだなと思いました。
ただ、例年の美味しいご飯と朝から晩までとことん打ち込める環境はセキュリティ・キャンプの醍醐味かなと思います。いつかまた現地で開催できるといいなと願っています。

自作OSとマルチコア

この記事は自作OS Advent Calendar 2020の9日目の記事です。

最近は大学の課題や様々な用事、精神的事情が重なってなかなかプログラムがかけてませんがアドベントカレンダーの枠が空いていたので短いですが急遽この記事を書いてみました。

最近、私の自作OS – Methylenixでマルチコア(SMP)対応を行いました。
https://github.com/PG-MANA/Methylenix

このOSはx86_64用に開発されているわけですが、x86_64では通常起動直後はBSP(BootStrap Processor)のみが動作しておりそれ以外のコアは停止しています。そのためにBSPがAP(Application Processor)を適切に初期化してあげる必要があり、これにはUEFIのMpServiceというものを使用するか(よく知らないので詳細はここでは説明できない)、LocalAPICのプロセッサ間通信を利用します。
Methylenixでは後者を選択しており、
https://github.com/PG-MANA/Methylenix/blob/11239235352ac46a051999edd47ae0590ba5f6c7/src/arch/x86_64/init.rs#L269で実装されています。
この方式ではAPが16bitリアルモードで立ち上がってきてしまうので、メモリアドレスが1MB以下の場所のメモリの確保やブートコードの転送などいろいろなことをしています…(ここらへんの設計が地味に辛かった…)

一方RISC-VなどのRISC系のCPUは起動と同時に全てのコアが一斉にエントリポイントを実行することが多く、この場合はコアIDを見ながらセマフォなどの排他処理を最初から行わないとスタックの競合やUARTの出力がダブるなど(HeHello,o, wwoorrldld!!となるなど)するので注意が必要です。RISC-VボードのSDKなどでif(core_id == 0){…}などあるのはこのためです。

x86_64でのマルチコア対応などをまとめてしっかりとした文章にしたいな…

Kyashの不正利用未遂にあった話

昨今なんちゃらPayの不正出金問題で「大変だなぁ〜」言うてたら自分も引っかかってたようで、夕方にメールが届いたので記録しておきます。

事の発端

Kyashの残高を確認しようとアプリを開いたところ、右上の通知マークが赤くなっていたので、確認すると「Kyash Visaカードが登録されました」との通知がありました。
「そんな覚えないんだが…」と詳細を確認したところ、以下のような登録内容でした。
Kyash Visaカード登録画面

はてさて、わしゃコスメには興味ないぞ?と思いながら文面通りカードロックして問い合わせてみたところ、そのメールの返信ではなくBCCで一斉に配信されたと思われる以下のメールがKyashからとどきました。

平素よりKyashをご利用いただき誠にありがとうございます。

突然のご連絡となり誠に恐縮ではございますが、お客さまのカード番号に対して不審な請求が確認されました。
誠に勝手ながら、安全のために弊社にて一時的にKyash Cardを停止し、利用ができない設定とさせていただきました。

今後の不正利用を防止する為、Kyash Cardを再発行させていただきたく、以下の通りご案内いたします。

Kyash Supportからのメールより

調べてみると同様の被害にあった人が多数存在するようで全員同じ店舗で登録されていました。
再度Kyashのアプリを開くと
カード削除後のKyash

Kyashカードが削除され決済できないようになってました。「突然の連絡」とはありますが本当に突然で出先で決済しようとしてた人がいたら大変そうだな…と思いましたが、とりあえず自分はカードの利用予定は土日までないので、詳細の発表を待って再発行しようと思います。(事の次第では他のサービスへの移行も検討するので)

不審な決済はなく実害がゼロで当日中に通知が来たので一安心するとともにKyashの対応の速さに感心しました。
金融機関のセキュリティが色々問題となってますが、不正利用されてないか常に監視しないといけないですね…Kyashをメインに使用してデビットカードやクレジットカードの情報漏洩を防ぐ目的もあったのでKyashアカウントだけの被害であれば今回の事件はその備えがうまく行ったと言えるのですがどうなることでしょう…

続報があれば追記します。

Twitterに上げる動画をffmpegで再圧縮する

一眼レフカメラで撮った動画をTwitterにあげようにも「互換性のない」と却下されるのでffmpegで変換することに。
変換前後でVLCのコーディック情報を比べると色空間情報が消えてるのでAdobeRGBなどを使ってると弾かれる模様?

ffmpeg -i “input/file/path.mp4” -c:v libx264 -c:a aac -vf fps=30 -aspect 16:9 outputfilepath.mp4

場合によってはこれ以上のオプションをつけないといけないかもしれない

セキュキャン△(セキュリティキャンプのススメ)

タイトルでコケてますね。流行に乗りたかったんです、ゴメンナサイ。(2020年になっては流行りでもなくなった…)

さて
セキュリティ・キャンプ全国大会2018
セキュリティ・キャンプ全国大会2019
セキュリティ・キャンプ全国大会2020(オンライン)

セキュリティ・キャンプ全国大会の受講者の募集が始まりましたよ。
今年もまた、あの熱い夏が来るんですね…どんな方が参加するのか…
今年は、講師の方との交流時間が増やされていたり、小中学生でも参加しやすいように就寝時間が早めのジュニアユースができていたりと、去年参加した私たちの感想や意見が反映されててとてもいい感じです。

2020年追記: 今年はオンラインで長期間実施するそうですが、オンラインでも多くのことが得られるのではないかと思います。また「受講生としての参加は一回のみ」という原則がありますが今年ばかりは特例が出て来年も応募できるみたいです。二度行けるなんてお得じゃないですか、今すぐ応募しましょう。

私自身のセキュリティキャンプの応募用紙や体験記はカテゴリー: セキュリティキャンプにある記事を参照してください。
数個リンクを貼っておきます。
セキュリティキャンプ 応募課題晒し
セキュリティキャンプ 応募から結果発表まで
セキュリティキャンプ2017参加記
セキュリティキャンプ2019参加記(チューター)

今回これを書いたのは、セキュリティキャンプに応募しようか迷ってる人に一つでもいいから情報を渡せたらいいなと書いたものです。SEO的に検索結果の下の方に出てたかと思いますが、それにもかかわらず、わざわざ見ていただきありがとうございます。

参加すると何がいいのか

突然ですが、あなたはどこに住んでますか。
都会でしょうか、それとも田舎でしょうか。
そして、あなたの周りに80人くらいのITに熱意ある学生はいますか。

私は参加当時福岡に住んでいたのですが当時周りに自分の興味のあることを詳細に語り合える人はいませんでした。
また、IT関係のイベントにも参加していませんでした。
TwitterではITに詳しい人を見かけるけど、どう話したらいいかわからない、という気持ちでした。
(詳しい経緯は応募課題を見てもらえればわかりますが)そんなある日、ふと脳裏にセキュリティキャンプが浮かびました。
無我夢中で応募用紙を書き上げて応募し、結果ありがたく参加させていただけることになり実際参加してみると多くのIT関係者の方にお会いできました。
自分より年下の参加者や年上の学生の方、中には協賛企業の方、有名な本を書かれているプログラマーの方とお話できる機会もあり、それは今でも心の中に焼き付くほどの経験です。
キャンプの間は様座な人の意見や得意分野の話、将来の目標などを聞きました。
その後帰ってくるとOSCやLT大会と実は周りにも話を聞いたり発信できる場があることを発見しました。
いや、正確には行く勇気が出ました。セキュリティキャンプに行って、「情報は情報を発信するところに集まる」という言葉に背中を押されやる気が出ました。
「セキュリティキャンプに行って自分はまだまだだと挫折を感じた。」という文章を多く見たかと思います。たしかに私も失敗をたくさんしましたし、挫折も感じました。
ただ挫折で終わらせないのがセキュリティキャンプです。きっとあなたの背中を押してくれるような体験も待ってるはずです。

セキュリティキャンプの良さはあなたの視野をグッと広げてくれて、さらなる挑戦への勇気を与えてくれるということです。(他にもたくさんあります)

セキュリティに詳しくないよ…

私はx86OS自作入門コースにいましたが、みなさんが想像するような、アンチウイルスソフトや、不正アクセス検知などは一切していません。
RustでOS(といえるのか?)を書いてましたが、Rustはセキュアな言語を目指してるのでそんな言語でOSを作ればセキュリティに貢献するかもしれないと思ってました。
集中コースでプログラムを書いてみたいなら、セキュリティに深くこだわる必要もないかもしれません。
また、選択コースでは以前耳にした暗号技術や興味のある分野のセキュリティについての講義を受けるのも良いかもしれません。
いずれにせよ準備期間があり、その間にオンライン上で事前学習ができますのでそこでわからないことを詳しく聞けるでしょう。

ガチプロじゃないから落ちそう

「ガチプロじゃないけど受かった」って文章、たっぷり見てきたでしょう。
ガチプロじゃなくても受かるらしいですよ。中にはガチプロなのに偽…なんでもないです。
私はやってきたことをイキってイキりまくってドヤ顔で書きました、もうそれはあとから見てしょうもないことまで書いてるなぁと思うほど。
とりあえず、書いてみましょう。

多くの講師の方がよくおっしゃってることは「課題ではやる気を見ている」ということです。
「調べてみてこういうところがわかったけど、〇〇がよくわからなかった」よりも「調べてみたけど、○○がわからなかった。だからサイトを参考にこんなプログラムを書いてみた、どうしてもわからないここの部分だけはサイトのコードを真似したけど、それ以外は自分なりの理解で書いてみた。書いたプログラムを実行したところ、大方動くけどたまにクラッシュするから解析したところ、△△な処理でおかしくなってるみたいなので修正を試みたが、うまく行かなかった。」のほうが自分なりの解釈と解決方法を提示していて、成功はしていないものの様々な事を試したことがわかります。
参加記を見ていただくとわかりますが、キャンプの中では複雑怪奇な不具合に遭遇することもあり、単純なネットサーフィンだけでは解決できないこともあります。その時に様々な手段で解決しようとすることが重要となってきます。講師の方はその手段を取る熱意があるかを見ているのだと思います。

セキュリティ・キャンプは修了してもそこで終わるわけではありません。
続けてこそだと思います。
今でも修了生とのつながりもありますし、修了生の主催したLTにも行ったことがあります。
あなたがセキュリティキャンプで素敵な経験をできることを願っています。

Zen言語で配列ポインタに詰まった話

オンライン授業で課題が多くてバタバタしているPG_MANAです。

今回、Zen言語(https://zen-lang.org/ja-JP/)に新しいバージョンが登場し言語仕様が一部変わったようで、build.zenの書き換えが必要になりました。

それとは別にZen言語でVRAMに書き込もうとしたときに躓いたので備忘録して残しておきます。

環境

  • Solus Linux(Linux Kernel 5.6.4-152.current) x86_64
  • Zen(v0.8.20200706LTS)

ソースコードと解析

今回書いていたコードはi386な環境でfreestandingで起動して画面を白で塗りつぶすというものです。(hariboteOSのブートローダを使用)(一部コードを削除)

export fn HariMain() linksection(".text.hari_main") noreturn {
    var p: usize = 0;

    if (binfo.vmode == 16) {
        const vram = @intToPtr(*volatile [*]mut u16,0xfd000000).*; // 0xfd000000はVRAMのアドレス
        const max: usize = 1024 * 768;
        while (p < max) {
            vram[p] = 0xffff;
            p += 1;
        }
    }

    while (true) {
        asm volatile ("hlt");
    }
}

これがうまく動かないのでobjdumpを覗いたところ

...
  48:   b8 00 00 00 fd          mov    eax,0xfd000000
  4d:   8b 00                   mov    eax,DWORD PTR [eax]
  4f:   89 45 f8                mov    DWORD PTR [ebp-0x8],eax
  52:   81 7d fc 00 00 0c 00    cmp    DWORD PTR [ebp-0x4],0xc0000
  59:   73 1c                   jae    77 <HariMain+0x47>
  5b:   8b 45 fc                mov    eax,DWORD PTR [ebp-0x4]
  5e:   8b 4d f8                mov    ecx,DWORD PTR [ebp-0x8]
  61:   66 c7 04 41 ff ff       mov    WORD PTR [ecx+eax*2],0xffff
  67:   8b 45 fc                mov    eax,DWORD PTR [ebp-0x4]
  6a:   83 c0 01                add    eax,0x1
...

となっています。
これをみるとVRAMにアクセスする際の手続きが
*(*(0xfd000000) + 2 * p)となっています。これではうまく動きません。

一瞬コンパイラのバグを疑ったのですが、よくよく考えると配列型の実態は配列の最初の要素のポインターに過ぎないので@intToPtr(*volatile [*]mut u16,0xfd000000).*と書くとそうなるのは、まあそれはそうです。@intToPtr()につられてついつい一番前に*をつけてしまいました。良くない良くない。

さて原因がわかったので単なる配列型にキャストすべく、const vram = @intToPtr(volatile [*]mut u16,0xfd000000);としてもコンパイルエラーになるので、どうしたものか悩みながら試行錯誤していたところ、順序を入れ替えて
const vram = @intToPtr([*]volatile mut u16,0xfd000000);としたらできました。

結論

export fn HariMain() linksection(".text.hari_main") noreturn {
    var p: usize = 0;

    if (binfo.vmode == 16) {
        const vram = @intToPtr([*]volatile mut u16,0xfd000000); // 0xfd000000はVRAMのアドレス
        const max: usize = 1024 * 768;
        while (p < max) {
            vram[p] = 0xffff;
            p += 1;
        }
    }

    while (true) {
        asm volatile ("hlt");
    }
}

@intToPtrなどビルドイン関数を利用する時はその意味をよく吟味して使いましょう…

MouseProのLTEモジュール(Telit LN940)をLinuxで使う

HPのノートパソコンでハズレを引いて落ち込んでいたのですが、ラストチャンスということでもう一台購入するチャンスを手に入れました。変な欲を出してLTEモジュールがついたPCを選ぼうとMouseProのノートパソコンを購入しました。LenovoのThinkPadも考えましたが、HPのサポートの件でサポート評判の悪いメーカは却下されました。
さて、動作確認用OS・Windowsでは大体のテストは完了しopenSUSEを入れたわけですが、LTEモジュールはすぐには認識してくれませんでした。まあこれは想定していたことでしたし、lsusbやusb-devicesでは表示されているのでいろいろ調べてみることにしました。

環境

  • MousePro-NB510HL
  • openSUSE Tumbleweed
  • KDE Plasma Desktop

搭載されているデバイスを確認

$ usb-devices
...(略)...
T:  Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
D:  Ver= 3.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs=  3
P:  Vendor=1bc7 ProdID=1900 Rev=03.10
S:  Manufacturer=Telit
S:  Product=Telit LN940 Mobile Broadband
...(略)...

USBデバイスとして接続されていて、Telit社のLN940というデバイスらしいです。
調べてみるとLinux用のドライバあるようで、マニュアルもあり(https://www.telit.com/wp-content/uploads/2018/03/Telit_LN940_Linux_SW_User-Guide_v1.2.pdf)それを読むと、Linuxカーネルにドライバが存在してそうだなと解析しました。

cdc_mbimとqmi_wwan

どうやらWWAN用のモジュールとしてcdc_mbimとqmi_wwanの二種類があるようで、どういう関係でどういう歴史があるかは今後調べていきたいと思いますが、とりあえずデバイスがどういう風に認識しているか確認します。

$ dmesg | grep ww

とするとcdc_etherとしてLTEモジュールが認識されていることを確認できます。
明らかに認識が間違っているのですが、無理やりudevなどでモジュールを変更しようとしても失敗するのでネットを漁っていると、 https://techship.com/faq/how-to-configure-telit-ln94-series-cellular-modules-to-qmi-mode-used-by-linux-systems-with-qmi-wwan-or-gobinet-driver/ を発見しました。
usb_modeswitchを使うらしいです。とりあえずusb_modeswitchやlibqmiやmodemmanagerをインストールします。(ModemManagerはsystemctlでenableしてstartしておきます)

設定


先にKDEのネットワーク設定からMobile Broadband Connectionを追加しておきます。
Docomo系のMVNO(OCN Mobile ONE)の場合は”Any CDMA device”=>”日本”=>”NTTdocomo”=>”My plan is not listed”=>”lte-d.ocn.ne.jp”=>”完了”で設定を追加して、ユーザ名(mobileid@ocn)とパスワード(mobile)とPIN(初期設定では0000)を設定して保存します。
次に

$ sudo usb_modeswitch -v 1bc7 -p 1900 -u 3

としてみます。再度usb_devicesで確認してみますと、cdc_mbimとして登録されています。
この状態でモバイルブロードバンドを「接続」をやってみると接続に一瞬成功するのですがすぐに切れてしまいます。usb_modeswitchで確認してみますとモードが2に戻っています。
仕方ないので

$ sudo usb_modeswitch -v 1bc7 -p 1900 -u 1

としてみますと、今度はqmi_wwanとして登録されています。
これで接続してみますとうまく接続されています。

接続が成功している状態

これを永続化させるためにudevに設定を追加します。

$sudo vi /etc/udev/rules.d/15-lte.rules

ATTR{idVendor}=="1bc7", ATTR{idProduct}=="1900", RUN+="/usr/sbin/usb_modeswitch -v 1bc7 -p 1900 -u 1"

これで再起動時に再接続されるようになります。(Wifiを優先させたい場合は自動接続を着ると良いと思います)

書き忘れていることもあるかもしれないのでうまく行かない場合はコメントをください…

埋伏智歯(親不知)を2本抜いたお話

新型コロナウイルスで世間は様々な場面で痛手を負ってますが、抜歯でそれどころではないPG_MANAです。
今回は親知らずを春休みを利用して抜いてきたのでそれの記録をしておきます。
書いて需要があるかはわかんないですが、この雑記は自分でも見返すので後々「あ〜あのときはすごかったなぁ」と振り返るために書いておきます。
これから親不知を抜く人や暇潰しをしたい方に読んでいただければと思います。

抜歯の理由

自分の親不知は、上下4本すべて完全に埋まっていて(完全埋伏歯というらしいです)、レントゲンを見ると見事に斜めになって埋まっています。この内下二本は内側を向いており歯並びに悪影響を及ぼし噛み合わせが悪くなることから、かかりつけ歯科医の先生から大学生での抜歯を勧められていました。抜歯手術と聞いて気が進みませんでしたが、噛み合わせが悪くなって頭痛に悩ませられるのも嫌なので長期休暇を利用して抜くことにしました。
完全に埋伏歯の手術は高度な技術が必要らしく、かかりつけ医の先生では時間がかかってしまうとのことでしたので、別の病院で抜くことになりました。

1本目抜歯当日

さて1本目抜く日が来てしまいました。
朝から「嫌だなぁ〜嫌だなぁ」と言いつつも病院まで自転車で移動しました。
診察が始まり紹介状を渡してレントゲンを撮った後、すぐさま手術が始まりました。
数回麻酔を打たれるんですが、だんだん奥歯の根本に鈍痛が来てその後痺れてきます。
麻酔が効くまで10分位待たされるんですがそれがまた地獄で、いらぬ予想を膨らませて冷や汗が止まらなくなっていきます。
待たされた後、「では始めます〜」と言われて口の中にメスが入ります。歯肉を切るのでメスを使うのは至極当然なのですが、生まれてこのかた口の中にメスを入れるなんて想像もしたことがなかった自分は早くも顔面蒼白。歯肉が開かれエアタービン(キュイーンとなるやつ)を使って親不知を削ります。その後リムービングドライバと呼ばれるマイナスドライバ状の器具で歯を割っていくと言われたんですがこれが一番の地獄でして、ガッツガッツ顎を突かれるので顎が疲弊するわ、「メリメリメリ…パキッ」という口の中で聞きたくない音が顎を伝って直接耳に届くわ、涎が溜まって舌を動かしたくなるがドライバで間違って刺されたらひとたまりもないと思い必死に我慢するわ、とにかく耐える時間が続きました。おかげで背中は汗でびっしょりになりました。時々口から何かを取り出す度に「これで終わりか?」と期待しては再びドライバが入って目をつぶって耐えるを繰り返した後、縫合が行われて終了しました。わずか30分で終了したようです。ガーゼを噛んで圧迫止血した後会計を済ませて(治療費は6000円)病院を後にして薬局で抗生剤と解熱鎮痛剤(ロキソニン)をもらって帰りました。夜までは麻酔が効いてましたが徐々に切れたので鎮痛剤を飲んで寝ました。

抜歯1日後

抜歯の後は腫れると聞いていましたが、大して腫れずに痛みも口内炎のような痛みで鎮痛剤でどうにかなるレベル。口も炎症があって大きくは開きませんが噛むことはできる程度。
「なんとかなりそうだし、柔らかいものなら食べよう」と焼きそばや煮魚を平らげて実家の作業を手伝ってました、後の苦しむとは知らずに…

抜歯2,3日後

朝起きて鎮痛剤を飲んで昼に鎮痛剤が切れた頃から痛みの種類が変わってることに気づきます。口内炎のような広く痛いのではなく、穴が空いた部分がクリティカルに痛い神経痛に変わり激痛になって襲いかかってきます。鋭い痛みは頭痛をも誘って頭と顎を抱えながら寝込む羽目に…鎮痛剤は最低でも6時間開けないといけないので痛みに耐えて時間が経ったら即座に鎮痛剤を飲むを繰り返す日々になり食欲も失せてしまいました。夜中に鎮痛剤が切れて「イッテェェ」と叫びながら起きて鎮痛剤を飲んで効果が出るまで30分程度顎を押さえて耐え、効果が出てきて耐えられる程度に収まり穏やかな眠りについたのもつかの間、4時間しか持たず激痛に叩き起こされ寝不足になりました。それでも段々痛みが引いてきて3日後の昼には耐えられる程度になっていきました、が…

抜歯4〜7日後

今度は抜歯傷付近から非常に不味い汁(アルカリ性だと判断)が出てきて口の中を襲います。
おまけに口の中から強烈な腐敗臭がして、周囲からもしかめっ面をされるのでマスクを室内でも着用するようになりました。
最初は麻酔が打たれた部分が化膿したのかと思いましたがそのような雰囲気でもないので謎の苦汁に苦しむ羽目に…痛みは完全に引かないので唾液が出てそれが苦くなり舌がしびれるような感覚に苦しみそれを中和をしようと余計に唾液が出てまた苦くなるの悪循環に陥り鼻水まで垂らして苦しみました。アルカリ性なら中和すればいいとレモン飲料や梅干しを舐めるなど涙ぐましい努力で耐え抜きました。
後にかかりつけ医の先生に「食べかすが親不知周辺の歯にくっついて腐敗したんですよ」と教えてもらいました。激痛で親不知周辺を触らないように、磨かないようにしていたのと抜歯後調子に乗って色々食べたのが仇になっていたようです。
苦汁を舐め続けて舌も痺れて、おまけに急に肩と顎が凝ってガクガクと震えるので湿布を貼って寝るなどいろいろ辛くて、ろくに思考もまとまらなくなりチマチマGoogle App Engineをいじる程度しかできなくなりました。

抜歯8〜12日後

苦汁は相変わらず出続けご飯も美味しく食べられない日々ですが段々とくさやのような匂いになり味も魚の乳酸発酵したような味になり不味いことに変わらないのですが多少耐えられるようになりました。痛みも大分引いてきて鎮痛剤は手放せないですが気にならない程度になりました。しかしながら炎症は引いてないようで倦怠感に襲われ眠気が取れず午前中は寝ながらボォ〜とコロナショックで乱高下する株価を見て、午後になってApp Engine移行作業をする日々が続きました。眠気も普段より早く来て11:00までは眠りについてることが多くなりました。それでも段々と回復してそろそろ本調子と行こうとした時にその時は来るのです…

2本目抜歯当日

「嫌だなぁ」と思えどその時は来るのです。
診察台によだれかけをつけられて寝かされ、先生が来るのを待ってると前回と違う先生が登場し「抜歯後の調子はどうですか?」と訊かれて、「きつかったです…」と疲れた顔で答えました。抜歯時の縫合糸は本来一週間後に抜いてもらうのですが、今回は抜歯と同時にしてもらおうと「あっ、『バッシ』(抜糸)を先にお願いできますか?」「『バッシ』(抜歯)を先にですね、わかりました〜麻酔しますね〜」「あっ、ごめんなさい、糸の方です」「糸の方ですね、失礼しました」というやり取りもしながら抜糸・麻酔・歯肉切開と進んでいきます。現在の状況を親切に説明してくださり、智歯を砕いて割ってそれから引っこ抜くみたいなのですが、そこで例のマイナスドライバが出てくるわけでてきます。智歯が大きくなかなか割れないため何回も突いている時に勢い余って歯茎に刺さりそうになりながら「アッすみません」と言われて冷や汗をながすなどしているうちに糸で縫って終了。今回も30分程度で終わり、また薬をもらって家に帰りました。前回と違いもう抜かなくて良いという気の軽さはありましたが、明日から苦しまないといけないという暗い気持ちは残りました。

2本目抜歯1日後

朝起きたら頬が腫れてました。
明らかに一本目よりも酷く腫れており周りも見てわかる程度です。
一方で神経痛や口内炎のような痛みがなくただ頬が腫れてそれによる熱を持った痛みがあるだけで鎮痛剤がなくても耐えられる程度でした。しかしこの後が怖いので服用しておきました。
前回の反省を踏まえ食事は栄養ゼリーと野菜ジュースという普段なら絶対食べない、噛まなくていい加工食品のみで直接胃に流し込みます。
倦怠感は相変わらず発生しますが、痛みがないだけマシかなと思いながらこたつで寝るなどしていました。

2本目抜歯2日後

朝起きたら頬がパンパンに腫れてました。それはもう輪郭がわからなくなるほどでおたふく状態です。朝から微熱があり布団で横になっていたところ、親が緊急外来に駆け込むという事態が発生しまして、朝からドタバタしました。命には別状はないもののやはり焦るものでアドレナリンが出て体調不良なんて強制的になかったことにされ発熱も倦怠感もなくなりキビキビ動けました。鎮痛剤より遥かに効くアドレナリン…
午後に無事に帰宅できたわけですが、その日はわけのわからない体調が続きました。
アドレナリンの影響で体はエネルギーに満ち溢れてるしキビキビ動くけど発熱で頭がボォーとして倦怠感はひどいという寝てようか作業しようか悩ましい状況になりました。
とはいえ作業しても仕方ないので寝ました。
食事は相変わらず栄養ゼリーで凍らせて晴れた頬に当てて解かして飲んでました。

2本目抜歯3,4日後

更に頬が腫れ熱も38.1℃も出て汗をダラダラ流しながら布団で寝続ける日々を送りました。
と言っても3日目午前中は発熱していることにも気づかず家の作業を手伝っていたのですが、途中から強い倦怠感に襲われて寝ました。
痛みが我慢できるからという理由で服用を止めていたロキソニンですが、鎮痛目的でなく解熱目的で使用することに。
腫れは首にまで及び呼吸しにくいこともあり、腫れの中にはとても硬い部分もありました。
頬の腫れにより何かを噛むと必ず口の中の皮まで噛んでしまうため、ヨーグルトや栄養ゼリーしか食べれなくなり、さらに口を開けようとすると頬が攣るという人生初めての経験をするはめに…
食べては寝るを繰り返し耐えました。

2本目抜歯5,6日後

腫れも引いてきて、長かったお布団生活も終わり起き上がって作業できるようになりました。
倦怠感はありますが、数日前とは比べ物にならないほどに改善しました。
口も徐々に開くようになりましたが、こちらはまだ時間がかかるようです。

2本目抜歯7日後

この日にかかりつけ医の先生に抜糸してもらい今回の件で病院行くのは最後となりました。
最初に抜いた方は段々と元通りになっていっており、後一週間たてば2本目もほぼいつもどおりに使えるようになるとのことです。
たまに神経痛がする程度で腫れも9割方なくなりました。

感想

抜歯で一ヶ月近く四苦八苦にしたわけですが、新型コロナウイルスでイベントも全滅していたので生活面での悪影響はプログラムがかけなかったくらいです(頭が回らないのでコードがかけない、かけないと何もしてないという感覚が精神を蝕むという悪影響)。
通常の抜歯より遥かにきつかった埋伏智歯抜歯ですが、無事に後遺症に悩まされることもなく治りそうなので良かったです。
今後抜く予定の人は以下のことに気をつけたら良いと思います。

  • 抜歯1日後に食事ができると判断した場合でも肉類は食べない(抜歯部分は歯磨きができないため、そこについて腐ってしまう)
  • 抜歯前に噛まずに食べられるゼリーなどをかっておく(場合によっては全く噛むことができなくなります)
  • 液体歯磨きを口に含んで数分待って吐き出すをすると腐敗臭が減る
  • 痛くなくても抜歯後数日間は処方された解熱鎮痛剤は飲む

Linuxディストリビューションの比較

なかなかWordPressが完璧に動かないで悩んでいたら、いつの間にか動くようになっていて気がついたら、8月が終わってしまいました。
何かあるたびにログ見て悩むのはめんどくさいですが楽しくもありますよね。

今回はとりあえず、今まで扱ってきたことのあるLinuxディストリビューションについてざっと特徴をまとめてみたいと思います。

注意してもらいたいことは、Linuxディストリビューションとデスクトップ環境(GNOMEやKDE)というのは別物であり、それぞれのディストリビューションで対応していたりしていなかったりするのでご注意ください。

2017/09/30:改定
2018/09/07:改定
2020/01/31:改定
2020/10/25:改定

Debian系

Debian

これはUbutnuを使用する前後とラズベリーパイ(Raspbian)で使っていたのですが、GNUの精神の完全自由を目指すコミュニティベースのディストロです。

昔からあるディストリビューションですので、情報はかなり豊富です。ソフトもapt(-get)で一発で入ることが多く、わざわざビルドしなくて良いことが多いですね。
ただ、自由の定義が他のディストロより厳格で、オープンソースであってもDebian Projectが自由でないと判断したソフトはNon-Freeリポジトリに取り入れられる、名称が変わるなどされるため、混乱することがあるかもしれません。(FirefoxとIceweaselの関係がよく知られた例です。)デスクトップ環境環境はGNOME3やKDE Plasma Desktopなどおおよそのものは揃っています。

安定版のパッケージリポジトリから降ってくるアプリのバージョンは古く、メジャーバージョンが1から2古いです。バージョンが古いのが気になる方は、安定版ではなくtesting(次期リリース予定)か、”sid”と呼ばれる不安定版を利用されると良いと思います。もちろんバグに遭遇する可能性はありますが、testingはそんなに困ることはないと思います。パッケージメンテナーの方には日本人も多くいらっしゃりOSCなどでお会いして話すこともあります。

Ubuntu

Debianを親とする大規模なディストロです。Linux入門としてWindowsからの乗り換え先として有名で、Windowsのサポートが切れると「Ubuntuへの乗り換える方法」なんて本が出ています。

Unityというちょっと(名前と動作が)ややこしいUIを持っています。Windowsから来た人がこのUIに慣れるかでその後のLinux人生が決まる…かもしれませんGNOME3に移行しました。

ネットを漁れば情報は山ほど出てきます。初心者に優しく、CUIを知らなくてもなんとかなるんじゃないでしょうか。
パッケージのバージョンはそこそこ古いです。Server版でnginxでHTTP2.0に対応した時は、待ちきれずにnginx公式リポジトリ追加しました。Debian同様安定性重視だと思われるので、新しいパッケージが使いたい場合は開発版を使うか他のディストリビューションに行きましょう。
デスクトップ環境はGNOME3以外にもLXDEやKDE Plasma Desktop、MATEなどをサポートしたflavourがあり、それぞれの環境に最適化されたインストールメディアがあります。
初心者に焦点を当てているようで初心者にはおすすめできるディストロですが、慣れてくると不満が出てくるかもしれません。

Linux Mint

Ubuntuに不満がある人が駆け込んでるイメージがあるディストリビューションです。上記2つのディストロより、非オープンソースに対して寛大で音声コーディックなどが標準で入っています。標準デスクトップ環境のCinnamonは、GNOME3と違ってWindowsライクなUIで安心する人が多いようです。日本語環境も昔よりかなり充実しており、初心者の方も戸惑うことなく安心して使えると思います。ただし、安定版でもWifi関係で不具合が生じたりしておりカーネルの切り替え(LTS版と最新版の切り替えやロールバックなど)の知識が必要になるかもしれません。おおよその知識はUbuntuやDebianの技術を流用できると思いますし、Linux Mint Japanのフォーラムもあるので、そこで質問しながら勉強していくと良いと思います。

Zorin OS

WindowsとそっくりのUIとMacとそっくりのUIを持つディストリビューションです。爽やかなUIが好感が持てます。ただし、有料版があるので、無料版に若干の機能制限がかかってます。日本語対応はバージョン9でかなり良くなりました。隠れたLinux入門の道と言うところでしょうか。
最近は使ってないのでもしかしたら変わっているかもしれませんが、Wine(Windowsアプリケーションを動かすためのライブラリ群)の調整がうまく行っており、3Dゲームも一発で動くことが多かったです。(もっともWineはだいぶ前から使ってないのでそこらへんの事情はだいぶ変わっているかもしれません。)

Red Hat系

CentOS

RHEL(有料)のソースコードから商標や商用パッケージが削除されたものを使用しているディストリビューションです(クローンではなく、CentOS独自の変更も存在します)。サーバー用途で使用されることが多く感じますがデスクトップ環境も利用できます。Linuxでサーバを構築したい場合には、サーバ関係の情報がネットに落ちているこのディストリビューションがやりやすいのではないでしょうか。
前述のディストリビューション同様安定重視ですが、バージョンはそれほど古くなく各アプリケーションのメインバージョンに近いものが降ってきます。
個人的な感想ではデスクトップ利用者はこちらより後述のFedoraの方が人気である感じがします。一方で大学などのラボではこれが使われている所を見ます。

Fedora

かつて存在していたRed Hat Linux(現在はRHEL)の後継のような存在です。Red Hat社の支援を受けたコミュニティが開発しており、かなり活発に開発されています。パッケージ管理システムもDebian系列のdpkgと違いRPMを用いています。個人的にはUbuntuとFedoraがLinuxディストリビューションの双璧をなしている感じがします。6ヶ月ごとにメジャーアップデートが行われ、パッケージのバージョンも新しいのが多いです。ここで変更によって得られた改善などがRHELに還元されることもあります。仕様変更も発生し、最近ではパッケージマネージャーがyumからDNFに変更されました。昔使っていたときより安定性が高くなってると聞きますが最近使ってないのでわかりません。昔自分が使っていた時、パッケージ依存関係がぶっ壊れたり起動しなくなったりと苦い思い出があるディストリビューションですが、パッケージマネージャも置き換えられましたし、ユーザも増えたので現在はかなり良くなっていると思います。通常のリリースに対してRawhideという不安定版があります。ただしこれは名前の通り結構な不安定で仮想マシンで動かしていたときは不具合が発生することもありました。Linuxの最新が知りたいという人には良いディストロだと思いますし、ある程度の知識が身についた後に長く愛用するディストリビューションとしては最適かもしれません。

Vine Linux

国産のディストリビューションであり、これが好感されることも多いです。フォーラムでも気軽に日本語で質問できますし、日本語環境はしっかり整っています。ただし、すべてのエラーメッセージが日本語であることではなく、もちろん英語のエラーメッセージも存在します。パッケージマネージャはAPT-RPMというdpkgのフロントエンドとして用いられるAPTをFedoraで使われているRPMに移植したものを使っています。開発はかなりゆっくりでメジャーアップデートも多くないのですが、最近は特に開発が停滞しているような気がします。Firefoxのバージョンも古いのでセキュリティ的な不安は残ります。
かつては人に勧めていましたが、今は勧めづらいです。

Berry Linux

軽量なディストリビューションです。描画が綺麗で、起動時の猫の写真はかわいく映ります。あまりつかったことがないので詳しい事はわかりませんが、シンプルで良さそうです。

Slackware系

openSUSE

現在サーバで使用しているディストリビューションです。
公式リポから降ってくるソフトは少し古いですがDebianほどではありません。
日本ではシェアが少ないですが、海外では多いため有名なソフトではopenSUSEでのインストール方法が書かれています。SlackやChromeなどのrpmパッケージはおおよそ流用できますが、Fedoraなどとパッケージ命名が違うこともあるので依存パッケージが多いと依存関係を手動で解決する必要があります。
Arch Linuxと同じくローリングリリースのTumbleweedがあり、最新のパッケージが落ちてきます。最新と言っても不安定版が降ってくることはあまりないのでおおよそ安定して使うことができます。デスクトップ環境は初期インストールではGNOME3かKDE Plasma Desktopの二択ですが、あとで他のデスクトップ環境に切り替えられます。デスクトップではTumbleweedで新しいパッケージを、サーバーは安定したLeapを使い、openSUSEで固めることでディストロ間の設定の仕方の違いで悩むことをなくすこともできます。

Yastがコントロールパネルのように強くまとまっています。
弱点としては上記の通り日本でのシェアが低いため、情報が見つけにくい、Slackwareの血を引いているので設定が若干難しい、などが挙げられます。
長らく利用していましたが、最近はパッケージの更新が滞っていたり、削除される(nginx-modulesとandorid-toolsが消えたのは痛かったです)など自分でビルドすることが多くなってきたので他のディストリビューションを利用しています。特にVLCの公式ページに置かれているopenSUSE用のパッケージが長らく更新されてません(と思って今確認したところ、更新が再開されていました)。
日本のコミュニティもありOSCなどにも参加されているので連携しながら対応していくのも手かと思います。
2020/10現在このサーバーはopenSUSEで動いてますが、特に問題はないです。

Puppy Linux(Ver.5以前)

起動時にワンワンと大音量でなってびっくりした思い出があるディストリビューションです。バージョン5以降はいろいろあってubuntu系になったそうですが、使っていないのでここでは述べません。
メモリ128MBでも動く軽さです。XP時代のPCでもなんなく動かすことができ、CDから起動するときは起動時にファイルをRAMに転送するようなので起動後にCDを取り出しても作業を続行することができます。ただし、最新のデバイスには対応していないので、そのような状況下では正常動作しません。自分はデータ救出用として重宝しています。

独立系

Arch Linux

Linuxについて調べていると必ず遭遇するArch Wikiでよく知られているディストリビューションです。組み立て型OSというべきディストリビューションでデベロッパーフレンドリーを掲げています。インストールはGUIインストーラが存在せず、CUI環境下で行います。インストール作業はそこまで難解ではなくむしろ自由で、他のディストリビューションのGUIインストーラでもどかしさを感じるようになるくらいです。ローリングリリースモデルをさいようしているのでメジャーアップデートがありません。GUIだけで全てが完結することはまずないと思いますので、コマンドあたりの知識は必須となります。公式リポジトリも最新版のパッケージが利用されています。一週間使用しないと1000件のアップデートが溜まっていることもしばしばあります。

デスクトップ環境もおおよそのものは用意されています。Xorg環境の整備に若干戸惑うことはあるかもしれませんが、良い勉強になるでしょう。AURという非公式のパッケージ群もありそこからChromeなども手に入ります。(余談ですが、知識が古いのでyaourtがなくなってyayが主流になっていたことを知らなかったです。)

デベロッパーフレンドリーを掲げているために細かい微調整が必要になる部分があるため、環境構築にはじっくり時間をかける必要がありますが、自分好みに調整しやすいでしょう。

Solus Linux

よくSolarisと聞き間違えられますが、「ソーラス」です。デスクトップ環境専用ディストリビューションとして開発されており、かなりすっきりにまとまっています。重複したパッケージを導入しないという目標を掲げているようですが、様々な選択肢があるのがLinuxエコシステムの特徴とも言えるので、これに関しては微妙な気持ちになっています。
日本で常用している人はほとんど見かけません(自分は現在メインで使っていますが)。パッケージ管理システムはeopkgという独自のシステムですが、GUIのパッケージマネージャーを使うことでChromeやSlackは導入できます。落ちてくるパッケージは概ね最新版で不満はない程度ですがopenSSLなど一部古いものもあります。Budgieというデスクトップ環境を開発しており、モダンなデザインで扱いやすいものになっています(Budgie自体は他のディストリビューションでも利用できます)。

ibus-mozcが公式リポジトリに存在しないため、スクリプトを書いてパッケージリクエストを行いましたが途中で返信がなくなっているためリポジトリには取り込まれていません。そのため日本語環境は整っているとは言い難いです。しかしながらGNOME3やKDE Plasma Desktop自体は日本語化は十分なされているので普段使いで困ることはないと思います。
追記(2020/10/25):mozcが追加されました。

(Pear OS)

今はなきディストリビューションで林檎じゃなくて梨です。要は林檎のそっくりデザインさんでして林檎社に食われて死んだという噂が流れています。軽くて快適でしたがアプリが案外少なかったと思います。ネットに情報が少なくどこの部類に入るか悩みますが、リポジトリがUbutnuのものだった気がするのでDebian系であると思います。消滅したディストリビューションですのでここでは一番下においてます。今でもインストールDVDは持っているのですが、UI部分のアップデートがなく不具合が起きそうなので使用しておりません。似たようなデザインのディストリビューションとして、elementary OSがあるので、使ってみてはいかがでしょうか。自分はelementary OSを使ったことがないのでここでは紹介しません。

まとめ

初心者におすすめしたいと思うのはLinux Mint、Ubuntu、CentOS、openSUSEです。
多くのOSでは安定志向が強いので古いパッケージが降ってきますが最初のうちはこだわらない限り気にならないでしょう。(開発をしない限り気にならない気もしますがLinuxユーザーの多くは開発者であると思うので)
なお、この記事は個人の意見なのであくまで参考程度で利用してください。
ほとんどのディストリビューションは無料ですので、慣れてきたら別のディストリビューションに挑戦するのも良いでしょう。