あるべるのIT関連メモ

素人エンジニアが何かするときに困ったものなどを参考程度にメモっておこうかと

Android Studio BumblebeeでBuild出力が文字化けする問題

Android Stduio 4.1 から Bumblebee にアップグレードしたところビルド出力が文字化けするようになったので対処する。

[Help]->[Edit Custom VM Option] を選択すると"studio64.exe.vmoptions"というファイルが開くので
-Dfile.encoding=UTF-8
の1行を追記し、Android Studioを再起動する。

こちらを参考にさせていただきました。 neet-rookie.hatenablog.com

Android 13 Preview SDKを使用する

Android 13 Developer Previewが公開されたと同時にSDKのプレビュー版もSDK Managerで配布が始まった。

developer.android.com

Themed App Iconなど新機能を評価するためにSDKを取り込もうとリンクの指示に従うとplatform 'Tiramisu' not found.とエラーが出てSDKを使用することができない。回避するには下記のように"Tiramisu"ではなく"android-Tiramisu"を指定してあげる必要がある。

android {
    compileSdkVersion "android-Tiramisu"
}

targetSdkVersionの方は未確認。。。

Android build-tools 31.0.0 ビルドエラー回避方法

windows環境について書いています。MacLinuxではパス名等を適宜読み替えてください。

// SDK version関連部分のみ

android {
    compileSdkVersion 31
    buildToolsVersion "31.0.0"

    defaultConfig {
        targetSdkVersion 31
    }
}

Android Appビルド環境をAndroid 12に対応させるためにcompileSdkVersionとあわせてbuildToolsVersionおよびtargetSdkVersionを31とすると

"Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager."

とエラーが出てgradleビルドが失敗する。 エラー内容をよく見るとdx.batやdx.jarが無いということらしい。

build-tools30.0.xではdx.bat、lib\dx.jarとともにd8.bat、lib\d8.jarがあるが31.0.0ではd8しか存在しない。

C:\Users{User Name}\AppData\Local\Android\Sdk\build-tools\31.0.0\d8.bat C:\Users{User Name}\AppData\Local\Android\Sdk\build-tools\31.0.0\lib\d8.jar

ファイルをそれぞれコピーしてdx.bat、lib\dx.jarとリネームしてあげればエラーは解消してビルドが通るようになる。 (コピーせずに単純にリネームするだけでも可)

Kotlin - ネストされたクラスから外側のフィールドへアクセス

クラスの内部で定義したネストされたクラスから外側のクラスのフィールドへアクセスする方法。

ネストされたクラスの定義にinnerを付与する。

class MyClass {
    val number = 10
    private val name = "Taro Yamada"

    inner class MyInnerClass {
        fun myInnerFunc() {
            println("My outer class name is $name, number is $number")
        }
    }
}

private修飾されていてもアクセス可能。

Visual Studio Code(VS code)で入力中の日本語がズレる問題

f:id:albel06:20210524183703p:plain

冒頭に添付した画像のように十数文字も入力すると約1文字近くズレが発生、日本語入力にストレスを感じていた。
今回の対応で普通に日本語入力ができるようになり人並みの幸福をゲットしました。

いろいろ試して最終的にFont Familyの指定で解消できた方法を記録。

  1. 設定画面を開く
    File > Preferences > Settingsと辿るもしくは"Ctrl + ,"ショートカットで開く。

  2. Font Familyを指定する
    私の場合は'BIZ UDゴシック'を現在設定されているFont Familyの先頭に追加することで問題が解消した。 日本語フォントであれば何を指定しても大丈夫そう(例えばMeiryo UIなど)。

別のWindowsマシンでは同様の現象は発生しないので原因はよくわからない…

環境:
OS: Windows 10 Enterprise (バージョンは関係なく発生するので省略)
IME: Microsoft IME

kaggleでmatplotlibに日本語を使う

kaggleのKernelにpackageをインストールする方法が分からなかったのでメモ。

  1. Kernelを開いて右側のカラムにあるSettings > Packagesを開く
  2. ダイアログが開くので"pip package name"に japanize-matplotlib を入力
  3. Install packageをclick
  4. インストール完了後、Kernelを再起動
  5. import japanize_matplotlib する

以上でmatplotlibで日本語表示ができる。

参考: pip install して import するだけで matplotlib を日本語表示対応させる - Qiita

xargsとgrepとパイプ

xargsがどんなコマンドで何をしているのかを簡単に解説。
普段CUIを使用していないとしても、パイプを使用して何らかの出力結果をgrepに渡した経験のある方は多いと思う。そのときxargsの引数としてgrepを実行することが多々あります。ぶっちゃけ個人的にはxargsはfindの結果をgrepに渡すときに使用するコマンドといっても過言ではない。そのときxargsは何をしているのだろうか。

xargsとは

man pageによると
xargs - 標準入力を読み込んでコマンドラインを作成し、それを実行する
Man page of XARGS
ナンノコッチャわかりませんね。

ポイントなのは"標準入力を読み込んでコマンドラインを作成"の部分(ほぼ全部)。

findのときだけgrepにxargsをつける理由

findの結果は標準出力に出力さるが、パイプ'|'でつなぐことでfindの出力を後ろのコマンドの入力として使用できる。例えばfindの結果、HelloWorld.javaとGreeting.javaが見つかったとする。

$ find . -name "*.java"
HelloWorld.java
Greeting.java

これをxargsなしのパイプで渡すと次のコマンドには「HelloWorld.java」と「Greeting.java」という出力そのものがgrepへの入力として渡される。

$ find . -name "*.java" | grep Hello
HelloWorld.java

それに対してパイプを使用してxargsに渡すとxargsは「(パイプで渡された)標準入力を読み込んで、(入力を引数とする)コマンドラインを作成」してくれる。

# Greeting.javaにgreet()メソッドがあるとして
$find . -name "*.java" | xargs grep greet
public String greet() {

まとめ

xargsはパイプで渡された標準入力を、xargsの引数に与えられるコマンドの引数として使用する。
これでfindとgrepの組み合わせ以外にも使用することができますね。