sakaki のすべての投稿

WindowsでPyCharmの高DPIスケーリング問題に対処する

TL;DR

IDEのHelp > Find Action > Switch IDE Boot JDK にてIDE起動に用いるJDKをJetBrainsが提供する[bundled]の物からOracleが提供する物に変更する。

本文

普段からPyCharmにお世話になっているのですが、少し前からPyCharmを起動するたびにこの警告が出ていました。

PyCharm(というかJavaの問題らしいですが)でWindowsのUIスケール(設定>システム>ディスプレイ>拡大縮小とレイアウト から設定できます)に対応できていないらしく、画面の実際の大きさに対応して適切なフォントサイズで描画できないようです。

もともとの原因はJava8でのUIスケールのサポートが限定的らしく、最新のJava9にしないと完全サポートされない事らしいですが、残念ながらPyCharmはJava9では動かないようです(公式サイトより)。

実際、現在ラップトップディスプレイで作業を行っていますが、家の32インチディスプレイの設定が引き継がれており文字がとても小さいです・・・

これに対処するために、公式サイトではいくつかの設定案を提案しています。

  1. フォントサイズを変更してみる
  2. 互換性設定からウィンドウ全体を拡大するよう変更する

1はディスプレイを変更した際にいちいちフォントを設定しなおすのが面倒で、2は単なる画像拡大なので文字がぼやけて大変見づらいです。

そこで、JetBrainsが自社のIDE用にOpenJDKベースのカスタム版JDKを提供しているような話を思い出したので、そちらに変更することで問題が修正されていないか期待しました。

IDEを起動する際のJDKの変更は、Help > Find Action > Switch IDE Boot JDK から行えます。

ここでは、[bundled]と書かれているものがバンドルされているもので、もう片方がOracle公式の物のようです。

なんと、設定を見てみると既にJetBrainsのカスタム版JDKで起動するように設定されていました・・・

ならば物は試しということでOracle版のJDKを選択して再起動すると、驚いたことに警告が出ません。

設定からスケーリングを変更してみましたが、設定に合わせてフォントサイズが見事にスケールしてくれます。

スケーリング問題は公式JDKには発生しておらず、OpenJDKのみの問題だったということでしょうか・・・

よくわかりませんが、無事に解決できてよかったです。

フォントはかなり昔に作ったRicty for Powerlineを使っているのですが、そろそろ変えたいですね・・・

「ご注文はうさぎですか?? ~Dear My Sister~」を観てきた

日記です。

11月11日に公開された「ご注文はうさぎですか?? ~Dear My Sister~」を観てきました。

12日と合わせて2回行ったので、その感想を書きたいと思います。

いろいろ書く予定ですが、言いたいことはただ一つ。完全完璧に最高でした。

ネタバレは少しあるのでご注意。しかし基本的に最高と叫んでるだけです。

良かった点

  • ストーリーが最高
  • 作画がすごく良い
  • 監督と福監督が最強で最強
  • ココアちゃんがかわいい
  • もちろん全員かわいい

ストーリーが最高

私は原作は2巻までしか読んでいないのですが、5巻に収録されている3話分を元に制作しているみたいです。

ラビットハウスとココアちゃんの帰省先で繰り広げられるそれぞれの話が良い。

テンポも良くかわいい・ほっこりの波動が次々と押し寄せてくる。でもちゃんと面白い。

ココアちゃんの帰省先が素敵すぎる。

お祭りと花火が最高。好きって感じです。

作画がすごく良い

作画がめっちゃくちゃ良いです。

EDクレジットの人数がかなり多かった気がします。

制作はアニメ1期2期を手掛けたWhite Foxではない?

かわいいキャラがかわいく動いて最強に見えます。

キャラデザが神。特に7人の私服および浴衣とモカ姉・ココアのお母さんのラビットハウス服とココアちゃんの私服がすごく良い(重複)。

髪の動きとかもしっかり付いててかわいかったです。

監督と副監督が最強

監督はアニメ1期2期の橋本監督です。本当に信頼できる。

かわいくて素敵な女の子たちの演出について、彼の右に出るものはいません。

そして副監督がなんとアニメゆゆ式の監督であるかおりさんです。

初見でクレジットに載っているの見て驚きましたが、2回目に意識しながら見るとかおり節が全開でしたね。。

ツッコミの間の取り方や中盤のチマメ隊とリゼちゃんのやりとりはゆゆ式でも見たような雰囲気がありました。

橋本監督の素敵な演出とかおり副監督のノリと面白さが合わさる・・・

これはもう日常系の最強完全体といっても過言ではありません。

ココアちゃんがかわいい

今作の主人公は特に決まっていないのですが、やっぱり全体の流れはココアちゃん手動で話が進みます。

ココアちゃんの喜怒哀楽の表情変化はどれも素晴らしいです。

感情を全身で表現する姿は本当にかわいいく最高に癒されます。

この世の物とは思えません。(この世の物ではない)

作画も良く、感情も良く、服装も動きも良い。

こんなにかわいい女の子は他にいません。(異論は認めます)

もちろん全員かわいい

さっきも書きましたが、本作に明確な主人公は存在しません。

わずかにココアちゃんの出番が多かった気はしますが、全員がしっかりと話に絡んで良い味を出しています。

さらにリゼのお父さんやモカ姉・ココアのお母さんなど、今まであまり出ていなかったキャラが観れたのも良かったです。

それぞれの登場人物にそれぞれの”ここすき”。是非探してみてください。

まとめ

観て。

Azureのgit cloneで500が出た際の対処

Azureのプロジェクトをgit経由でクローンしようとしたのですが、非常に長い時間がかかる上にレスポンスが500でした。

$ git clone https://user@subdomain.scm.azurewebsites.net:port/project.git
fatal: unable to access 'https://user@subdomain.scm.azurewebsites.net:port/project.git/': The requested URL returned error: 500

この時、URLを以下のように変更すると何故かうまくいきます。

https://user@subdomain.scm.azurewebsites.net:port/project.git

から

https://subdomain.scm.azurewebsites.net:port/project.git

と変更します(ユーザー名を除去しただけですが)。

ユーザー名とパスワードはクローン時に入力するなど、URLに含めない形です。

Azureのバグなのかわかりませんが、早く治るといいですね・・・

Nexus 5Xの起動ループを修理

※データ消失の可能性がありますので、自己責任でお願いいたします

Nexus 5Xが起動画面から再起動のループに陥り、正常に起動しなくなりました。

調べたところこの現象は一定数のNexus 5Xに発生するらしく、BLOD(Boot loop of death)と呼ばれています。

また、この現象はNexus 5Xのブートローダーを有志が作成したものに書き換える事で解決できるようです。

今回は復旧が成功しましたので、ノウハウをメモしておきます。

方針

このページを参考に、Nexus 5Xにカスタムブートローダーを入れます。

Nexus 5XにインストールされているAndroidバージョンによって必要なファイルが異なりますので、注意が必要です。

作業をする前に

今回作業を行う対象はブートローダー領域・リカバリー領域・システム領域の3つです。

Googleが配布しているファクトリーイメージにはこれら3つが含まれています。

また、Nexusシリーズは毎月アップデートが行われており、ファクトリーイメージもそれに合わせて毎月更新されています。

それぞれ必要なブートローダーが異なりますので、対応する月のブートローダーが必要となります。

クリーンインストール

この操作によりユーザー領域のデータなどすべて消えますのでご注意ください。

Nexus 5Xをすべてリセットして再インストールする場合は、公式の配布ページから対応するファクトリーイメージをダウンロードします。

解凍後、flash-all.batを実行して、Nexus 5Xにイメージをインストールします。

最後にこのサイトで公式ファームウェアに対応するブートローダーをインストールして完了です。

ブートローダーだけ入れ替え

このPOSTの”Process for System image”の項を参考にしてください。

OTAでアップデートしたらBLODが再発した

このPOSTの”Process for OTA”に従って手動でアップデートを適用してください。

ただし、この場合は既にリカバリーイメージがロードされていますので、手順6のadb sideload update-oprXXXXXX.zipのコマンドは必要ありません(勝手にアップデートが始まります)。

また、BLODが再発した場合、その時点でOTA経由でダウンロードしたアップデートはインストールできていませんので、そのアップデートより1つ前のバージョンのブートローダーとリカバリーが必要な点に注意してください。

例えば11月のアップデートをOTA経由で適用してBLODに陥った場合、まずは10月版のブートローダーおよびリカバリーを入れる必要があります。

これについてはリンク先にも書いてありますので、手順通りに進めれば問題ありません。

fastbootをインストール

初めにAndroid SDKをインストールします。

Android Studioを丸ごと入れるとすごく重いので、SDKツールのみダウンロードしてください。

開くとtoolsというディレクトリが入っていますので、適当な場所に解凍してください。

Windowsの場合はtools/bin/sdkmanager.exeをコマンドラインから実行します。

.\sdkmanager.exe platform-tools

これでtoolsと同じディレクトリにplatform-toolsディレクトリが作成され、adbやfastbootが入ります。

うまくいかない時は

platform-toolsを入れなおしてみる

既にfastbootコマンドが入っており、それを使って失敗してしまう場合はplatform-toolsを入れなおしてみると良いと思います。

platform-toolsは頻繁に更新が行われており、古いものはすぐに使えなくなります。

いっそのことクリーンインストールを試してみる

データは消えますが、一番成功する確率が高い気がします。

ファクトリーイメージ内のスクリプト(flash-all.bat)はリカバリーと同時にいろいろとクリーニングをしてくれているみたいなので、工場出荷時に戻すことで諸問題を解決できる可能性があります。

リンク

Djangoのテンプレートでbodyに変な文字列が入る際の対処法

AzureのDjangoの最初から入っていたテンプレート(layout.html)を使用する際、bodyタグのすぐ下によくわからない文字が入ってコンテンツの位置がずれていたので対策。

以下サイトに原因と解決策が書いてありました。

https://stackoverflow.com/questions/21204834/django-template-extends-tag-added-extra-space-on-top

ちゃんと読んでいませんが、layout.htmlファイルのエンコーディングがBOM付きUTF-8になっていたことが原因の模様。

これをBOMなしUTF-8で保存してあげると問題は改善しました。

しかし、ファイルのエンコーディングが違ってもちゃんと出力してくれるのは素晴らしいですね(そのせいで今回の問題が発生したとも言えるのですが・・・

Golangで実行可能なパッケージ(main)とライブラリ(main以外)を混在させる方法

ちゃんと理解できていない可能性もありますが、備忘録としてメモ。

Goでeasy_ntpdateという時刻を合わせるだけのちょっとしたプログラムを作ったのですが、これを別のプログラムからも使いたくなったのが発端です。

もともとバイナリにして実行するだけの想定だったので、main関数に処理を書いていました。

package main

func main() {
  (処理など)
}

これを、バイナリとしてコンパイルできるようにしつつ、ライブラリとしても使えるようにするのが目的です。

そのままだと利用先でmainパッケージが重複してしまいますので、main関数を残しつつプログラムの内容だけを別パッケージに移します。

goは同一ディレクトリに複数のパッケージは置けないので、ディレクトリを分けて配置します。

今回はeasy_ntpdateというパッケージ名で作成しました。

rootdir
│  main.go(mainパッケージ)
│
└─easy_ntpdate
        easy_ntpdate.go(easy_ntpdateパッケージ)

main.goではライブラリをimportして叩く処理のみを記述します。

package main

import "./easy_ntpdate"

func main() {
    easy_ntpdate.SetDate()
}
package easy_ntpdate

func SetDate() {
  (処理など)
}

これでimportすればeasy_ntpdateとして利用できます。

最初は戸惑いましたが、goのパッケージ管理はgithubとの相性も良く作りやすいですね。

rivarunが404になる時

結論だけ言うと、チャンネルのオートスキャンで治る時がありますよって事なのですが・・・

ちなみに、オートスキャンは次のコマンドで実行できます(参考:公式サイト)。

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

localhostは適宜変えてください。

これで地上波のみですがチャンネルが自動でスキャンされて設定が保存されます。

経緯

ChinachuのDockerレポジトリからセットアップを試していたのですが、Mirakurunがうまく動いていないようでChinachu側で番組表が取れませんでした。

rivarunを叩くと接続はできるものの404になってしまいます。そこで、

$ mirakurun log

でログを出したところ、次のようなエラー文を発見。

stream has closed before get network

調べてみるとチャンネル設定がうまくいっていない時に出るエラーのようです。

さらに調べると、mirakurunにはチャンネルスキャンという便利機能もあるようなので、

$ curl -X PUT "http://mirakurun-host:40772/api/config/channels/scan"

を実行したところ番組表が取れるようになっていました。

オートスキャン便利ですね。次から自動で実行するようにしておこう・・・

aptでDocker更新時にエラー

自宅サーバーのメンテナンス作業をしていたら、以下のエラーに遭遇しました。

# apt upgrade
(中略)
docker-ce (17.09.0~ce-0~ubuntu) を設定しています ...
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
invoke-rc.d: initscript docker, action "start" failed.
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since 日 2017-10-15 15:27:25 JST; 31ms ago
     Docs: https://docs.docker.com
  Process: 15537 ExecStart=/usr/bin/dockerd -H fd:// (code=exited, status=1/FAILURE)
 Main PID: 15537 (code=exited, status=1/FAILURE)

10月 15 15:27:25 luka.home systemd[1]: Failed to start Docker Application Container Engine.
10月 15 15:27:25 luka.home systemd[1]: docker.service: Unit entered failed state.
10月 15 15:27:25 luka.home systemd[1]: docker.service: Failed with result 'exit-code'.
dpkg: パッケージ docker-ce の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:

どうやら、Docker起動時にホストを指定する項目が/etc/docker/daemon.jsonと/lib/systemd/system/docker.serviceの両方で指定されていたため、重複してエラーになっていたようです。

私の環境ではswarm modeでクラスタを組んでいるため、エラー文にもある ExecStart=/usr/bin/dockerd -H fd:// の部分は必要ありません。

/lib/systemd/system/docker.service を編集して、

ExecStart=/usr/bin/dockerd -H fd://

ExecStart=/usr/bin/dockerd

に書き換えを行い apt upgrade を実行したところ、エラーは解消されました。

fd:// オプションを保持したい場合は、 /etc/docker/daemon.json に設定を行う形になりそうです。

ElectronでMarkdownビュワーを作ってみた

最近Electronを触っているのですが、サクサク作れるのでどんどんアプリを作りたくなってしまいます。

ということで、Markdownの表示専用のアプリを作ってみました。

githubはこちらとなります。

バイナリはこちらで配布しています。

動作画面はこんな感じです。

タブ表示ができるので複数ファイルも快適に表示できます。

ファイルのオープンはダイアログとドラッグアンドドロップに対応し、複数ファイルもすべて開くことができます。

また、ローカルの画像も読み込むことができます。

今後もちょっとずつ機能を追加しようと思うので、よければ使ってみてください。