2025年2月20日木曜日

Pod でインストールしたライブラリ側の IPHONEOS_DEPLOYMENT_TARGET を変更する方法

Pod でインストールしたライブラリ側の IPHONEOS_DEPLOYMENT_TARGET を変更する方法

概要

The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 12.0 to 18.2.99. (in target 'YouTubePlayer' from project 'Pods')

への対応です

環境

  • macOS 15.3.1
  • xcode 16.2

Podfile 編集

一番最後に追加すれば OK です

  • vim Podfile
post_install do | installer |
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
    end
  end
end

適用

  • pod update

確認

  • grep -ir 'IPHONEOS_DEPLOYMENT_TARGET'

最後に

pod install したときに上記の指定がないとライブラリ側でサポートしているバージョンが適用されます
プロジェクト側で指定しているバージョンよりも大きければ問題ないですが小さい場合には Pod 側のバージョンを上げる必要があるので注意しましょう

2025年2月19日水曜日

mac で pdf を結合する方法その2

mac で pdf を結合する方法その2

概要

過去に pdfunite を使った方法を紹介しましたが更に簡単にできる方法があるので紹介します

環境

  • macOS 15.3.1

方法

  • Finder で結合したい pdf ファイルを選択
    • 最初に選択したファイルが先に結合されます
  • クイックアクション -> PDF を作成

で結合できます

2025年2月12日水曜日

copilot-metrics-viewer を使ってみる

copilot-metrics-viewer を使ってみる

概要

copilot の無料枠を使い切ったかどうか確認するのに使えます
公式のイメージはないので自分でビルドします

また copilot/metrics の API を内部で使っているのですがこの API は Github エンタープライズ or 組織 にしか使えないので個人では使えません

環境

  • macOS 15.3
  • docker 27.5.1

事前準備

  • Enterprise または organization に対して、[Copilot metrics API access] ポリシーを有効にする必要があります
  • パーソナルアクセストークンを取得します

ビルド

  • git clone https://github.com/github-copilot-resources/copilot-metrics-viewer.git
  • cd copilot-metrics-viewer/
  • docker build -t copilot-metrics-viewer .

.env 修正

リポジトリ内にデフォルトの .env があるのでそれを流用すれば OK です
NUXT_GITHUB_TOKEN を修正しましょう

パーソナルアクセストークンに必要な権限は以下です

  • copilot
    • manage_billing:copilot
  • manage_billing:enterprise
  • read:enterprise
  • read:org

その他の設定はデフォルトのままです
今回個人用で誰でも使えるようなアプリではないので NUXT_OAUTH_GITHUB_CLIENT_ID 関連はコメントアウトします
NUXT_PUBLIC_IS_DATA_MOCKED=false にします
NUXT_PUBLIC_GITHUB_ORG は自身が所属する組織IDを入力します

  • vim .env
# Determines if mocked data should be used instead of making API calls.
NUXT_PUBLIC_IS_DATA_MOCKED=false

# Determines the scope of the API calls. 
# Can be 'enterprise' or 'organization' to target API calls to an enterprise or an organization respectively.
NUXT_PUBLIC_SCOPE=organization

# Determines the enterprise or organization name to target API calls.
NUXT_PUBLIC_GITHUB_ORG=xxx

NUXT_PUBLIC_GITHUB_ENT=

# Determines the team name if exists to target API calls.
NUXT_PUBLIC_GITHUB_TEAM=

NUXT_PUBLIC_USING_GITHUB_AUTH=false

# Determines the GitHub Personal Access Token to use for API calls.
# Create with scopes copilot, manage_billing:copilot or manage_billing:enterprise, read:enterprise AND read:org
NUXT_GITHUB_TOKEN=ghp_xxx

NUXT_SESSION_PASSWORD=something_long_and_random_thats_at_least_32_characters

# for Github OAuth
# NUXT_OAUTH_GITHUB_CLIENT_ID=
# NUXT_OAUTH_GITHUB_CLIENT_SECRET=

# to use a corporate proxy
# HTTP_PROXY=http://proxy.company.com:8080

起動

  • docker run -p 8080:80 --env-file ./.env copilot-metrics-viewer

動作確認

localhost:8080 にアクセスするとメトリックスが表示されます

最後に

Github エンタープライズ or 組織配下でないと取得できないので結構ハードルが高いかもです
個人の利用で取得する方法はないのだろうか

参考サイト

2025年2月11日火曜日

HEIC を jpeg に変換し更に exif 情報を削除するコマンド

HEIC を jpeg に変換し更に exif 情報を削除するコマンド

概要

exiftool が必要です

環境

  • macOS 15.2

コマンド

for file in `ls *.HEIC`; do
  filename=$file:t:r
  sips --setProperty format jpeg $file --out ${filename}.jpg
  exiftool -EXIF= -Orientation='Rotate 90 CW' ${filename}.jpg
done

最後に

Web サービスでもできますが一括でできるのでコマンドのほうが便利です

2025年2月10日月曜日

Windows にインストールした Minecraft Launcher が使っている java があるパス

Windows にインストールした Minecraft Launcher が使っている java があるパス

概要

わざわざ Java をインストールしなくてもこれを使えます

環境

  • Windows 11
  • Minecraft Launcher

パス

"%LOCALAPPDATA%\Packages\Microsoft.4297127D64EC6_8wekyb3d8bbwe\LocalCache\Local\Microsoft\WritablePackageRoot\runtime\java-runtime-alpha\windows-x64\java-runtime-alpha\bin\javaw.exe"

Mod などをインストールのに使うには

上記の %LOCALAPPDATA%\Packages\Microsoft.4297127D64EC6_8wekyb3d8bbwe\LocalCache\Local\Microsoft\WritablePackageRoot\runtime\java-runtime-alpha\windows-x64\java-runtime-alpha\bin に jar を移動して

  • java -jar xxx.jar

すれば起動できます
ダウンロードフォルダにおいて上記の java.exe を指定して実行してもクラスパスが見つからずにエラーになるので jar を移動してから実行しましょう

最後に

Minecraft Launcher のバージョンによってパスが変わるっぽいですが LOCALAPPDATA にあるのは間違いないっぽいのでその配下を探せばいいかなと思います

2025年2月9日日曜日

NeoForge で開発環境構築

NeoForge で開発環境構築

概要

これまでは forge の MDK を使ってきました
NeoForge は forge のチームが新たに作成したプロジェクトで forge のフォークになります
別プロジェクトになった経緯などはこちらに詳しく載っているので興味があれば見てください
今回は NeoForge の開発環境を作成しとりあえずビルドできるところまでやってみました

環境

  • macOS 15.2
  • Java 21.0.5
  • NeoForrge MDK 21.4.75-beta
  • minecraft 1.21.4

事前準備: OpenJdk のインストール

NeoForge MDK は Java21 が推奨なのでインストールしましょう

  • brew install openjdk@21
  • sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

MDK のダウンロード

ここから MDK を生成しダウンロードすることができます
Forge の MDK では最初から MODID などが決まっていましたが NeoForge ではそれらを MDK 生成時に決めることができます

今回はとりあえずデフォルトの examplemod にしましたが別の ID でも OK です

Gradle Plugin は「ModDevGradle」を選択しましょう
Minecraft Version は最新でも OK ですが最新だと MDK がまだベータなので注意しましょう

展開とビルド

ダウンロードできた zip ファイルを展開しビルドします

  • mkdir test
  • cd test
  • mv ~/Downloads/examplemod-template-1.21.4.zip .
  • unzip examplemod-template-1.21.4.zip

で展開します
gradlew コマンドに権限がないので付与します

  • chmod +x gradlew

あとはビルドすれば OK です

  • ./gradlew build

動作確認

ビルドやテスト用のコマンドは Forge と同じでした
起動して Mod 用のブロックがあることを確認します
Forge と違い NeoForge ではリソースに lang だけ初回からあるようです

  • ./gradlew runClient

最後に

NeoForge の MDK でとりあえず開発できるところまで構築してみました
このあとは普通に MOD を開発するだけです

機会があれば Forge で開発したコードを NeoForge にマイグレーションする作業もやってみたいです

参考サイト

2025年2月8日土曜日

gradle で管理しているプロジェクトに google-java-format を導入する方法

gradle で管理しているプロジェクトに google-java-format を導入する方法

概要

google-java-format は Java のコードをフォーマットしてくれるツールです
CLI でも使えますが別途インストールしたりプロジェクトごとに管理できないので今回は gradle 配下でインストールし実行する方法を紹介します

環境

  • macOS 15.2
  • Java 21.0.5
  • google-java-format 1.17.0

build.gradle の編集

主に2箇所追記します

plugins

まずは spotless というプラグインをインストールします

plugins {
	id 'com.diffplug.spotless' version '7.0.2'
}

spotless

format 用の定義を追加します
Java21 の場合は google-java-format は 1.17.0 以下を指定します

設定でいろいろなフォーマットが可能です
インデントはスペースではなくタブにしたりヘッダのコピーライト文も自動で追加したりできます

spotless {
    format 'misc', {
        // define the files to apply `misc` to
        target '*.gradle', '.gitattributes', '.gitignore'

        // define the steps to apply to those files
        trimTrailingWhitespace()
        leadingTabsToSpaces()
        endWithNewline()
    }
    java {
        // don't need to set target, it is inferred from java

        // apply a specific flavor of google-java-format
        googleJavaFormat('1.17.0').aosp().reflowLongStrings().skipJavadocFormatting()
        // fix formatting of type annotations
        formatAnnotations()
        // make sure every file has the following copyright header.
        // optionally, Spotless can set copyright years by digging
        // through git history (see "license" section below)
        licenseHeader '/* (C)$YEAR */'
    }
}

動作確認

  • ./gradlew spotlessApply

これで自動的にフォーマットされます

Tips

emacs で lsp-java を使っている際にエディタ側で自動でフォーマットされてしまうのを防ぐ方法は以下です

(setq lsp-java-format-enabled nil)
(setq lsp-java-format-on-type-enabled nil)

最後に

これでコードのフォーマットは統一することができます
エディタ側には google-java-format 用の linter がほしいところです

参考サイト