Vapor Trail

明るく楽しく元気よく

Ubuntuのフリーズを解消する

環境

System:    Kernel: 5.0.0-23-generic x86_64 bits: 64 Desktop: Gnome 3.28.4
           Distro: Ubuntu 18.04.3 LTS
CPU:       Quad core AMD Ryzen 5 PRO 2400G with Radeon Vega Graphics (-MT-MCP-) cache: 2048 KB
           clock speeds: max: 3600 MHz 1: 1554 MHz 2: 1464 MHz 3: 1668 MHz 4: 1560 MHz 5: 1506 MHz 6: 1456 MHz
           7: 1781 MHz 8: 1550 MHz
Graphics:  Card: Advanced Micro Devices [AMD/ATI] Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
           Display Server: x11 (X.Org 1.20.4 ) driver: amdgpu Resolution: 1920x1080@60.00hz, 1920x1080@60.00hz
           OpenGL: renderer: AMD RAVEN (DRM 3.27.0, 5.0.0-23-generic, LLVM 8.0.0) version: 4.5 Mesa 19.0.2

いろいろめんどくさくなって最近WindowsからUbuntuに変えました。
Dockerもちゃんと動くしサクサクだし快適だと思って使用していると1日に2~3回フリーズします。しかも、いつもフリーズするのはChromeで新しいタブを開いたときです。
フリーズするとマウスのカーソルだけ動かすことはできるがマウスクリックもキーボードも反応しない状態になります。

/var/log/syslog

Aug  6 12:49:12 org.gnome.Shell.desktop[2640]: [3210:3210:0806/124912.201719:ERROR:buffer_manager.cc(488)] [.DisplayCompositor]GL ERROR :GL_INVALID_OPERATION : glBufferData: <- error from previous GL command
Aug  6 12:49:14 org.gnome.Shell.desktop[2640]: [3210:3210:0806/124914.701683:ERROR:buffer_manager.cc(488)] [.DisplayCompositor]GL ERROR :GL_INVALID_OPERATION : glBufferData: <- error from previous GL command
Aug  6 12:49:35 kernel: [ 4602.229503] [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring sdma0 timeout, signaled seq=73443, emitted seq=73446
Aug  6 12:49:35 kernel: [ 4602.229579] [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Process information: process chrome pid 3210 thread chrome:cs0 pid 3280
Aug  6 12:49:35 kernel: [ 4602.229582] [drm] GPU recovery disabled.

終了直前のログを見ると、やっぱりChromeAMDGPUが怪しかったので、Chromeハードウェア アクセラレーションが使用可能な場合は使用するのチェックを外して数日使用してみたらフリーズしなくなりました。

Ryzen 5 2400Gを使用していて他にもフリーズするユーザがいるみたいです。

askubuntu.com

askubuntu.com

UbuntuにEclipseをインストール・日本語化する

環境

Eclipse IDE 2019‑06

$ uname -a
Linux 5.0.0-23-generic #24~18.04.1-Ubuntu SMP Mon Jul 29 16:12:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

はじめにSnapからEclipseをインストール・日本語化を試してみたが「読み込みが~」とエラーになってうまくいかなかった。

Eclipseのインストール

Eclipse Downloads | The Eclipse Foundationからダウンロード

解凍→インストール
/home/eclipseにインストールされる

日本語化

-Xverify:none
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

エラーが出る

!SESSION Wed Aug 07 10:32:05 JST 2019 ------------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2019-08-07 10:32:05.018
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
    at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:807)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:886)
    at java.awt.Toolkit.getEventQueue(Toolkit.java:1736)
    at java.awt.EventQueue.invokeLater(EventQueue.java:1294)
    at jp.sourceforge.mergedoc.pleiades.runtime.CleanMessage.show(CleanMessage.java:44)
    at jp.sourceforge.mergedoc.pleiades.runtime.LauncherEclipseTransformer.showCleanMessage(LauncherEclipseTransformer.java:271)
    at org.eclipse.equinox.launcher.Main.getSplashLocation(Main.java:2223)
    at org.eclipse.equinox.launcher.Main.handleSplash(Main.java:2151)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1468)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1441)

askubuntu.com

sudo sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties

このコマンドを実行

再度起動すると、無事日本語化できた

『入門Goプログラミング』を読んだ

 

入門Goプログラミング

入門Goプログラミング

 

 

 GoでAPIサーバを作ったことをきっかけにGoをちゃんと学びたいと思ったので読んだ。

「A Tour of Go」をやったものの正直あまり理解できていない部分が多いままであったが、この本を読んで理解が深まった。

スライス、構造体、インターフェース、レシーバ、ゴルーチンなどの基本的な使い方だけではなく、結局どう使うの?いつ使ったら便利なの?ということも書かれているのがよい。コード例が豊富なので手を動かしながら学べる。

以下の文は、インターフェースを説明した文の引用だが、インターフェースとはなんたるのか非常にわかりやすい説明をしてくれている。

メモを書くのに使えるのは、ペンと紙だけではありません。手元にクレヨンとナプキンがあれば、同じ目的に使えます。クレヨンでも、マーカーでも、シャープペンシルでも、「メモ帳にメモを書く」というニーズを満たすことが可能ですし、「厚紙にスローガンを書く」のにも、「雑誌に記事を書く」のにも使えます。このように、「書く」は、非常に柔軟性が高いのです。Goの標準ライブラリには、書くための「インターフェイス」があります。それにはWriterという呼び名があり、それを使って、テキストも、画像も、CSVも、アーカイブの圧縮出力も、書くことができます。あるいは、画面に書くことも、ディスクのファイルに書くことも、Web要求に対する応答を書くこともできます。1個のインターフェイスによる援助によって、Goでは、いくらでも多くのことを、いくらでも多くの場所に書くことができます。Writerも、非常に柔軟性が高いのです。「0.5ミリの青インクのボールペン」は、具体的なものです。それに対して「筆記用具」は、もっとファジーな(輪郭が曖昧な)概念です。インターフェイスを使うと、コードは「なにか書くもの」というような「抽象概念」を表現できできます。「それは何か」ではなく「それで何ができるか」を考えるのです。こういう考え方を、インターフェイスを通じて表現すると、変更に対応できるコードを書きやすくなります。

NathanYoungman;RogerPeppé.入門Goプログラミング(Kindleの位置No.4496-4508).株式会社翔泳社.Kindle版.

 

あとは特にコラムの中でRobPikeの言葉を引用している部分もいくつかあり、Goの設計思想も学べる。

Goは継承よりもコンポジションを推奨します。シンプルな、しばしば1個のメソッドによるインターフェイス(…)が、コンポーネント間のクリーンで理解しやすい境界として働きます。-RobPike,"GoatGoogle:LanguageDesignintheServiceofSoftwareEngineering"

NathanYoungman;RogerPeppé.入門Goプログラミング(Kindleの位置No.4629-4633).株式会社翔泳社.Kindle版.

 

エラーは値だ。
エラーは、ただチェックするのではなく、きちんと処理すべきだ。
パニックは禁物。
ゼロ値を有効にせよ。
インターフェイスが大きいほど抽象性が弱まる。
空のインターフェイスは、何も言わないのと同じ。
gofmtのスタイルは誰も好きではないが、gofmtは誰にも好ましいツールだ。
ドキュメントはユーザーが使うもの。
ちょっとコピーするほうが、ちょっと依存するより良い。
賢いコーディングより、明快なコードが良い。
並行性は並列処理ではない。
メモリ共有で通信するな。通信でメモリを共有せよ。
チャネルは編成する。ミューテックスは直列化する。
-RobPike,"GoProverbs"

NathanYoungman;RogerPeppé.入門Goプログラミング(Kindleの位置No.5470-5478).株式会社翔泳社.Kindle版.