アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

【Graph API】リクエストBodyが空の時にHTTP Error 411. The request must be chunked or have a content length.

kotlin/JVMでコードを書いている時の事。MicrosoftのGraph APIを使用していました。bodyは無いコードです。Content-Lengthは制限されていて、手動では設定できません。 val result = HttpClient.newHttpClient() .send( HttpRequest.newBuilder(URI(url)) .h…

MicrosoftのBusinessアカウントセキュリティキーによる認証を許可する

管理アカウントでEntra管理センターにログインします。 https://entra.microsoft.com/ 保護 > 認証方法 > ポリシーから任意のものを選択します。 有効にして保存します。 ユーザーアカウントで以下のページを開きます。 https://myprofile.microsoft.com/ セ…

YubiKey OTPを公開してしまった場合、どうすれば良いか

YubiKeyはディスクを押すとOTPが入力されます。最後にエンターが入力されるので、うっかりチャットで送信されてしまう人を極稀に見ます。そこで起きるセキュリティリスクは何かを調べました。 リスク まず、このキーがあればYubiKeyでの認証が突破される為、…

WindowsでVPN接続に専用のDNSを設定する

VPN接続してそのローカルネットワーク内のDNSに接続したい場合の設定。 プロパティ IPv4 or IPv6 DNSを設定 詳細設定でインターフェイスメトリックを低い値にする。 他のインターフェイスメトリック値は pwshで Get-NetIPInterfaceで確認できる。

Windows11で複数スケールのモニタを使用している時にSnippingToolでキャプチャできない領域ができる問題の修正

自分は以下の様にモニタを配置していますが、2版のモニタの右側がキャプチャできているように見えても、保存すると切れているという問題が発生しました。 1,3: 150% 2: 125% 解決方法 以下の方法で直りました。 設定を開きます。 リセットと修復をします。 …

フレッツ回線のUbuntuでsshできない

おそらく、IPv6やv6プラス環境で発生します。 解決方法 .ssh/config に以下の設定を追加します。 Host * IPQoS=0x00 調査 ssh -vvvT git@github.com で気になるログがありました。 debug2: channel 0: open confirm rwindow 32000 rmax 35000 調べたら以下の…

GoogleDomainsも終わるので、まずはDNSだけCloudflareに移してTerraformで管理する

GoogleDomainsのサービス終了がアナウンスされています。移行は来年行う予定ですが、とりあえずDNSだけ移す事にしました。また、これを機にTerraformでコード管理しようと思ったのでその設定までを紹介します。 DNS設定のImportはCloudFlareが行ってくれるの…

GitHub Actions Self-Hosted Runner(JIT Runner)をAWS CodeBuildで動かしてわかった微妙な点

GitHub ActionsよりもAWS CodeBuildの方が安かった為、AWS CodeBuildでSelf-Hosted RunnerのJust In Time Runnerを動かそうとしました。そこで調査をしたのですが、断念する事にしました。 これらは全て2023/11/19時点で観測した事象でです。 Just In Time R…

node jsでGitHubの/actions/runners/generate-jitconfig APIを叩く

import { createRequire } from 'module'; const require = createRequire(import.meta.url); const https = require('https'); async function generateJitConfig(fullName, id) { return new Promise((resolve, reject) => { const request = https.reques…

AWS LambdaでGitHubWebhookを検証してpayloadを取り出す

import { createRequire } from 'module'; const require = createRequire(import.meta.url); import crypto from 'crypto' const querystring = require('node:querystring'); export const handler = async (event) => { console.log(JSON.stringify(event…

AWS LambdaでIP制限をかける

Lambda Function URLsでは現状IP制限はかけられないみたいなので、API Gatewayが必須となります。 ドキュメントがどこにあったか忘れてしまいましたが、HTTP APIだとリソースポリシーが使えないようなので、REST APIを使用します。 トリガーを追加から API G…

GitHub Actions Self-Hosted-RunnerのJust In Time Runnerを動かすDockerイメージを作成する

Dockerfile ユーザー actions-runner を作成する ghコマンドをインストールする FROM docker.io/ubuntu:jammy ENV REPO_URL= ENV REPO_ORG= ENV REPO_NAME= ENV GITHUB_TOKEN= ENV RUNNER_BASE_NAME= ENV NONINTERACTIVE=1 RUN apt-get -y update RUN apt-ge…

はてなブログにWeb Share APIを使用した共有ボタンを設置する

SNSが多様化する中、特定のサービスの対応を待つのは不毛です。Web Share APIを使用しましょう。なんで公式で無いんですかね。MastodonとかMisskeyとかはあるのに。 コード <script type="text/javascript"> (function () { window.addEventListener('load', () => { if (!window.navigator.…

Android10以下でComposeのModifier.imePadding()が効かない時

Android10以下のComposeで Modifier.imePadding() が効かない事があります。 Issueが既に立っていて、調べた原因は以下に書いたので、そちらを見てもらっても良いです。 https://issuetracker.google.com/issues/266331465 修正方法 Activityに android:wind…

GitHub ActionsのPullRequestでcommit hashを取得する方法

commit hashを使用して、status check apiを叩きたい場合に有効です。 GitHub ActionsのPull Rquestの、${{ github.sha }}は、マージ先とマージしたcommit hashが入っているため、元のcommitのhashではありません。そのため、1つ前のコミットを取得する必要…

GitHub Actionsで全てのキャッシュを削除する

現状(2023/11/07)、UIでは用意されていないのでworkflow_dispatchで動作させる。 name: cleanup all caches on: workflow_dispatch: jobs: cleanup: runs-on: ubuntu-latest steps: - name: Cleanup run: | gh extension install actions/gh-actions-cache s…

【Jetpack Compose】新Modifierシステムの利点と書き方

変更点 Modifierのパフォーマンスが向上したのは以下の開発者ブログの通りです。 https://android-developers.googleblog.com/2023/08/whats-new-in-jetpack-compose-august-23-release.html Modifierには Modifier.composed {} という、ステートフルなModif…

KotlinのGenerics、in outについて理解する

Hoge<in T> とかはあまり使う機会が無い、あまり理解しないで使用していたので、これについてまとめます。 公式ドキュメントは以下。 https://kotlinlang.org/docs/generics.html#declaration-site-variance in Javaでは以下の様なStringをAnyにアップキャストの様</in>…

Kotlin MPP JSのその他のプラットフォームと動作が異なる正規表現【Lone quantifier brackets】

この様なコードがあります。Kotlin JVMでは問題なく動きます。 "}".toRegex() Kotlin/JSでは以下のエラーになります。 regex.kt:77 Uncaught SyntaxError: Invalid regular expression: /}/gu: Lone quantifier brackets この様に書かなければなりません。 "…

Kotlin2.0に備える

Kotlin1.9でlanguageVersion=2.0にした時に出たエラーを調べました。 enum内の可視性 enumのアノテーションからcompanion objectのprivateにアクセスする事が不可能になりました。 private enum class Version { @Deprecated(DEPRECATE_TEXT) VERSION_1, VER…

【Compose】movableContentOfの挙動を調べて見たらUIが更新されない

不具合である事が確認できました。 https://issuetracker.google.com/issues/270656235 movableContentOfとは movableContentOf は 1.2.0-alpha03 で追加されたAPIです。 https://developer.android.com/jetpack/androidx/releases/compose-ui#1.2.0-alpha03…

【環境作成】Logstashで遊ぼう

Logstashでの動作確認を簡単に行うための環境をDockerで作成します。 作ったものは以下にあります。 https://github.com/matsudamper/logstash_lab docker-compose.yml jdbcドライバをダウンロードしてファイル配置するのをDockerfileで行います。 パスワー…

Pagerのスクロールに合わせてバーが移動可能なTabLayoutを作る。

以下の記事に更に下のバーを付けたバージョン。 https://matsudamper.hatenablog.com/entry/2022/07/27/212056 Pagerとかのスクロールに合わせてタブのバーを移動させます。 imports import androidx.annotation.FloatRange import androidx.compose.animati…

【Compose】Pagerのためのイモムシインジゲータを作成する

以下のように、ページをスワイプするたびにイモムシみたいに動くインジゲータを作成します。 横幅は大きくなったり小さくなったり小さくなったりします。offsetは横幅が増加している時は動かず、小さくなっている時にだけ、小さくなっている分だけ進むことで…

Gradle Application Pluginで作成したアプリで特定モジュールのディレクトリの子ファイルを動的に取得する

以下のような構造のフォルダ構成から、graphql以下のファイルを全て取得します。これはMain-Classがあるモジュールから参照されているモジュールとします。jarファイルには既に含まれているとします。 graphql/filename1.graphqls graphql/filename2.graphql…

【WSL】クリーンな環境を作成する(Ubuntu)

WSL

追加でUbuntu環境を立てます。 作成 以下からダウンロードします。前は /jammy/current/ に合ったみたいですが、wsl専用にルートから生えてました。 https://cloud-images.ubuntu.com/wsl/jammy/current/ 自分はamd64環境なので以下をダウンロード。 ubuntu-…

【Let's Encrypt】certbotでワイルドカード証明書を発行する

以下では exsample.com と *.exsample.com で証明書を発行します。 発行 certbot certonly --manual \ -d *.exsample.com \ -d exsample.com \ --preferred-challenges dns-01 \ --agree-tos \ --manual-public-ip-logging-ok DNSの _acme-challenge.exsampl…

Jakarta Mailでメールを確認する【Kotlin】

Jakarta Mail(旧 Java Mail)でメールを取得します。 build.gradle implementation("jakarta.mail:jakarta.mail-api:2.1.2") implementation("org.eclipse.angus:jakarta.mail:2.0.2") imports import java.net.URLEncoder import jakarta.mail.Authenticator…

Compose Multiplatform Web(Wasm)で日本語を表示する

compose version: 1.4.0 中国語、日本語、絵文字等が表示できません。自前でダウンロードしてきて読み込めば表示できます。 適当にダウンロードしてきました。 https://fonts.google.com/noto/specimen/Noto+Sans+JP import androidx.compose.runtime.Compos…

Android8以下。Compose内のAndroidView内のEditText等でFocusを使用している。TalkBack, パスワードマネージャー等のUI要素を読み込むアクセシビリティ機能を使用している条件下でクラッシュする。

環境 androidx.compose:compose-bom:2023.03.00 androidx.navigation:navigation-compose:2.5.3 再現手順 全ての再現コードは以下の通り。 https://github.com/matsudamper/Navigation-TalkBack-Crash TalkBackやBitwaden等の、UI要素にアクセスするユーザー…