amazon-linux-extrasがNo module named amazon_linux_extrasとなって動作しない問題
問題
Amazon Linuxでいろんなパッケージを簡単にインストールしてくれるamazon-linux-extrasなんですが、pyenvがPython3になっていると上手く動作しない問題があるみたい。
amazon-linux-extras /root/.pyenv/versions/3.9.12/bin/python: No module named amazon_linux_extras
その場合、Python3のsite-packagesにリンクを作ってあげれば良いという解決方法がみつかるけれど、Python3のバージョンが変わるたびに変更するのも面倒なので、別の解決方法を備忘録として残す。
解決方法
Python2で動かせば良いね
python2 -m amazon_linux_extras
※ 注意点
amazon_linux_extrasは本来shellで起動するようになっており、そこで環境変数やconfigファイルの読み込みが行われている。
一通り読んで、自分のやりたいことにこのshellが必要ないことがわかったのでこの対応を取ったが、shellでの設定が必要な環境の場合、期待した動作にならない可能性があるので注意すること。
所感
この機能をサポートしているなら、多少環境変えてもAmazon Linuxでちゃんと動作するように作って欲しいところではある。
2024年6月30日までサポートされるみたいだけど、その後はどうなのか疑問。
よくある質問 - Amazon Linux 2 | AWS
Python2の時代はとっくに終わってる中で、pyenvのバージョン変えただけで動かなくなるような初歩的な問題が改善されない点からみても、この機能自体を使っていくかは悩ましい。
今あるものを根本から変えるのは面倒くさかったけど、今後新しく何かを作るときにこの機能を使うかというと、避けたほうが良いかもしれない。
Guzzle利用時のwrong signature typeエラーの対応
問題
Guzzleを利用したアクセス時に、接続先のSSLバージョンが古めだったためエラーが発生した。
[previous exception] [object] (GuzzleHttp\\Exception\\ConnectException(code: 0): cURL error 35: error:1414D172:SSL routines:tls12_check_peer_sigalg:wrong signature type (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://stbfep.sps-system.com/api/xmlapi.do at /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:210)
解決方法
GuzzleのOptionで必要な暗号を設定する。
$client = new Client([ 'base_uri' => 'https://example.com', 'timeout' => 5.0, 'curl' => [ CURLOPT_SSL_CIPHER_LIST => 'SSLv3' ], ]);
Compose Multiplatformのそれっぽいドロップダウンの書き方
Desktopアプリ作成でドロップダウンメニューを作ろうとしたが、意外と実装するのに苦労した。
Boxを上手に使うと表示周りの表現を柔軟にできそう。
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.DropdownMenu import androidx.compose.material.DropdownMenuItem import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowDropDown import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp @Composable fun Dropdown() { val options = listOf("Option 1", "Option 2", "Option 3", "Option 4", "Option 5") val expanded = remember { mutableStateOf(false) } val selectedOptionText = remember { mutableStateOf(options[0]) } Box( contentAlignment = Alignment.CenterStart, modifier = Modifier .size(250.dp, 50.dp) .clip(RoundedCornerShape(4.dp)) .border(BorderStroke(1.dp, Color.LightGray), RoundedCornerShape(4.dp)) .clickable { expanded.value = !expanded.value }, ) { Text( text = selectedOptionText.value, modifier = Modifier.padding(start = 10.dp) ) Icon( Icons.Filled.ArrowDropDown, "contentDescription", Modifier.align(Alignment.CenterEnd) ) DropdownMenu( expanded = expanded.value, onDismissRequest = { expanded.value = false } ) { options.forEach { selectionOption -> DropdownMenuItem( onClick = { selectedOptionText.value = selectionOption expanded.value = false } ) { Text(text = selectionOption) } } } } }
Windowsデスクトップアプリのデータディレクトリ
Windowsで動作するデスクトップアプリで、アプリで使うファイル(設定ファイル等)の配置場所について悩んだのでメモ
開発環境
FW:Compose Multiplatform, by JetBrains
言語:Kotlin
解決した方法
System.getenv("APPDATA") // C:\Users\<user>\AppData\Roaming System.getenv("LOCALAPPDATA") // C:\Users\<user>\AppData\Local
個人で使うアプリケーションならどちらを使っても問題なさそう。 組織で利用するアプリケーションの場合、APPDATAの方は同じアカウントで共有される模様。
qmk_firmwareのcompileに失敗する
自作キーボードのキーマップ設定時にコンパイルエラーが発生したのでメモ
現象
以下のようなエラーが出てコンパイルに失敗する
$ qmk compile Ψ Compiling keymap with make ergodash/rev1:snicmakino QMK Firmware 0.8.22 WARNING: Some git submodules are out of date or modified. Please consider running make git-submodule. Making ergodash/rev1 with keymap snicmakino tmk_core/protocol/lufa.mk:14: lib/lufa/LUFA/makefile: そのようなファイルやディレクトリはありません make[1]: *** ターゲット 'lib/lufa/LUFA/makefile' を make するルールがありません. 中止. Make finished with errors Makefile:560: recipe for target 'ergodash/rev1:snicmakino' failed make: *** [ergodash/rev1:snicmakino] Error 1
lib配下のlufaの中身が無いよというエラー
解決策
git でサブモジュールがインストールできていなかったため、以下のコマンドでインストールする
git submodule update --init --recursive
rustlingsはじめました
rustlingsとは
Rustの読み書きになれるための演習ができるツール。
https://github.com/rust-lang/rustlings
インストールをしたら、rustlings watch
コマンドで頭から順番に演習することができる。
(個別の問題がやりたい場合等は別のコマンドを使う)
進捗
- variables
- if
- quiz1
- functios
- primitive_types
所感
機能はシンプルでわかりやすいし、問題もテーマがはっきりしていて、コンパイルを通したり、assertを通したりするのがわかりやすくて良い。
やった範囲は十分知っている範囲だったけど、Rustの読み書きが久しぶりだったので、なんていうか丁度いい感じのエクササイズになった。 同じ用に昔勉強したけど忘れたわーって人には丁度いいレベルなのかもしれない。
進めていけば理解を放置していたライフタイム等もわかるようになると嬉しいので、年末のうちにやりきる。