2024年10月12日土曜日

QIDI X-Smart のノズル交換手順

QIDI X-Smart のノズル交換手順

概要

購入から4年ほどたちノズルがよく詰まるようになったので交換してみました

環境

  • QIDI X-Smart
  • 六角ドライバ 2mm、2.5mm
  • 付属の交換セット (レンチ、サポート用ネジ、交換用ノズル)

カバーを外す

2mm の六角ドライバを使います

上にネジが一つあるので外します

あとは上に上げればカバーが取れます
平らなケーブルとつながっておりそこに引っ掛かるかもしれないので気をつけます

モーター部分を外す

2.5mm の六角ドライバを使います

後ろ部分に二箇所ネジがあるので外します

ネジが外れるとこんな感じであとは上からモーターがスポっと取れます

モーターに電力を供給する平らなケーブルがあるので外します
ケーブルの左右に固定しているボタンがあるのでこれを押しながらゆっくり抜けば OK です
入れるときは差し込むだけで OK です

ノズルを外す

ノズル部分を外していきます
支え用のネジとレンチを使っていきます

支え用のネジを取り付けてレンチで回していきます
4年も交換してなかったのでかなり固くなっているので大変でした
最初はトンカチで衝撃を加えて回していきました
ある程度トンカチで緩めたらあとは支え用のネジとレンチを逆方向(ネジは時計回り、ノズルのレンチは反時計回り)に回しながら外せば OK です

ここが一番大変だと思います

ノズルの交換と掃除

最後までレンチで緩めるとノズルが外れます

ノズルのプラスチック部分も抜けにくくなっているのでペンチでテコを使いつつ抜くと簡単です

ノズル部分もフィラメントの焦げがありかなり汚れています
またプラスチックのノズル部分は中に焦げがたまっている状態でした
さらにその焦げのせいで溶けてないフィラメントもつまっていました

今回はこのプラスチック部分だけ交換します

つまりがないかチェック

ちょっとわかりにくいですがフィラメントが写真のように貫通する状態にならないとどこかしらでフィラメントが詰まっていることになります
自分は内部に折れたフィラメントが詰まっている状態になってしまっていたのでフィラメントを手動で挿管して上から押して詰まっているフィラメントを外しました

手動で挿管する場合はバネのような挿管パーツがありそれを使って挿管する必要があるので注意しましょう

無事モーターの挿入口から排出口までフィラメントが通れば完了です

最後に、教訓

今回フィラメントが詰まった原因は以下でした

  • ノズルのプラスチック部分に焦げがたまりプラスチック部分にフィラメントがつまった
  • モーター内部にも折れたフィラメントがつまりフィラメントを挿管できない状態になっていた

これの特に「折れたフィラメント」というのがポイントでフィラメントは湿度に弱く水分を含むと簡単に折れる状態になってしまいます
今回自分はその非常に折れやすくなったフィラメントを使ってプリントしてしまいノズルを詰まらせてしまいました

極論を言うと折れやすいフィラメントは絶対に3Dプリンタで使ってはいけません
折れやすいフィラメントかどうか判断する材料として以下があります

  • フィラメントをセットするときに「パキパキ」と音を立てながら挿管されている
  • セット時にフィラメントが出るか確認する際につながってフィラメントが排出されずに水のようにポタポタと落ちてくる
  • プリント中にフィラメントが折れて終了してしまう

このような現象が確認できる場合にはそのフィラメントは使わないようにしましょう
自分はそうだったのですが細かく折れたフィラメントがモーター内部にかなり溜まっており最悪故障につながるところでした

一応折れやすくなったフィラメントを復活させる方法はあるらしいのですが結局詰まる可能性もあるので素直に新しいものを買うのがいいかなと思います

2024年10月11日金曜日

指定の期間における GCP インスタンスのネットワーク転送量を計算するスクリプト

指定の期間における GCP インスタンスのネットワーク転送量を計算するスクリプト

概要

例えば前月や当月の本日までの特定の VM におけるネットワーク転送量が知りたいケースがあるかなと思います
コンソールだと合計値が見れないのでスクリプトを作成してみました

環境

  • macOS 15.0.1
  • Python python 3.11.10
  • gcloud 491.0.0
    • google-cloud-monitoring 2.22.2
  • GCP (2024/10/08 時点)

インストール

  • pipenv install google-cloud-monitoring

認証

  • gcloud auth application-default login

集計スクリプト

前月分集計する場合は以下のようになります
プロジェクトIDとVM名の部分は適宜変更してください

from datetime import datetime, timedelta

from google.cloud import monitoring_v3


def get_network_usage(project_id, instance_name):
    now = datetime.now()
    current_month_start = datetime(now.year, now.month, 1)
    # 前月の開始日時を計算
    last_month_end = current_month_start - timedelta(
        seconds=1
    )  # 前月の終了日時(現在の月開始日の前日23:59:59)
    last_month_start = datetime(
        last_month_end.year, last_month_end.month, 1
    )  # 前月の開始日時
    print(last_month_end)
    print(last_month_start)
    # UNIX タイムスタンプに変換
    start_time = int(last_month_start.timestamp())
    end_time = int(last_month_end.timestamp())

    # クライアントの作成
    client = monitoring_v3.MetricServiceClient()

    # プロジェクト名の設定
    project_name = f"projects/{project_id}"
    # メトリックス取得期間の設定
    interval = monitoring_v3.TimeInterval(
        {
            "end_time": {"seconds": end_time},
            "start_time": {"seconds": start_time},
        }
    )
    # 取得するメトリクス情報の設定
    filter_str = (
        f'metric.type="compute.googleapis.com/instance/network/received_bytes_count" '
        # f'metric.type="compute.googleapis.com/instance/network/sent_bytes_count" '  # 送信量に関してはこちら
        f'AND metric.label.instance_name="{instance_name}"'
    )

    # メトリクスデータを取得
    results = client.list_time_series(
        name=project_name,
        filter=filter_str,
        interval=interval,
        view=monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,
    )
    # 合計値を計算
    total_received_bytes = sum(
        [point.value.int64_value for ts in results for point in ts.points]
    )
    print(f"Total received bytes: {total_received_bytes / 1024 / 1024} MB")


# 例: プロジェクト ID とインスタンス ID を使って前月分のネットワーク受信量を計算
get_network_usage("project-123456", "web")

当日までの今月分の転送量

当日分までの転送量の場合は以下です
日付の計算部分だけ変更しています

from datetime import datetime

from google.cloud import monitoring_v3


def get_network_usage(project_id, instance_name):
    # 現在の UTC 日付と時刻を取得
    now = datetime.now()
    # 今月の開始日時を設定
    current_month_start = datetime(now.year, now.month, 1)
    # UNIX タイムスタンプに変換
    start_time = int(current_month_start.timestamp())
    end_time = int(now.timestamp())

    # クライアントの作成
    client = monitoring_v3.MetricServiceClient()

    # プロジェクト名の設定
    project_name = f"projects/{project_id}"
    # メトリックス取得期間の設定
    interval = monitoring_v3.TimeInterval(
        {
            "end_time": {"seconds": end_time},
            "start_time": {"seconds": start_time},
        }
    )
    # 取得するメトリクス情報の設定
    filter_str = (
        f'metric.type="compute.googleapis.com/instance/network/received_bytes_count" '
        # f'metric.type="compute.googleapis.com/instance/network/sent_bytes_count" '  # 送信量に関してはこちら
        f'AND metric.label.instance_name="{instance_name}"'
    )

    # メトリクスデータを取得
    results = client.list_time_series(
        name=project_name,
        filter=filter_str,
        interval=interval,
        view=monitoring_v3.ListTimeSeriesRequest.TimeSeriesView.FULL,
    )
    # 合計値を計算
    total_received_bytes = sum(
        [point.value.int64_value for ts in results for point in ts.points]
    )
    print(f"Total received bytes: {total_received_bytes / 1024 / 1024} MB")


# 例: プロジェクト ID とインスタンス ID を使って前月分のネットワーク受信量を計算
get_network_usage("project-123456", "web")

最後に

GCP のインスタンスが一ヶ月でどれくらいネットワーク通信をしているのか確認するのに使えると思います
具体的な取得方法は GCP 側でブラックボックスになっているのでどこにどれくらい通信したのかはわかりませんがおおよその目安として使用量がわかるかなと思います

何もしていなくても数GBの通信はしていることが確認できました

参考サイト

2024年10月10日木曜日

Ubuntu 20 から 24 にアップグレードする手順

Ubuntu 20 から 24 にアップグレードする手順

概要

可能な限りインタラクティブな応答をなくしながらアップグレードする方法を紹介します
どうしても 20 -> 22 -> 24 というパスが必要になります

環境

  • Ubuntu 20.04

流れ

  • パッケージの最新化 (再起動
  • 22 アップグレード (再起動
  • 24 アップグレード (再起動

という感じで最低でも3回再起動が必要です

手順

まずは 20 -> 22 に上げます

先にすべてのパッケージをアップグレードします
サービスの再起動や設定ファイルの上書きなどインタラクティブに聞いてくる項目をすべてスルーする設定をいろいろ入れています
どうしてもここで一度再起動が走ります

apt -y update
cat << 'EOF' > /etc/needrestart/conf.d/99_restart.conf
$nrconf{kernelhints} = '0';
$nrconf{restart} = 'a';
EOF
DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
sudo reboot -h now

そしてアップグレードします
これで 20 -> 22 になります
22 後も再起動する必要があります

do-release-upgrade -f DistUpgradeViewNonInteractive
sudo reboot -h now

更に 22 -> 24 にします

do-release-upgrade -f DistUpgradeViewNonInteractive
sudo reboot -h now

最後はアップグレード後に更新したほうがいいです
自分の環境では /var/run/reboot-required が生成されていたためです

トラブルシューティング

No candidate ver: linux-modules-extra-5.15.0-92-geenric というエラーが出る場合は /boot 領域を空けましょう
apt -y autoremove やそれでもダメなら使っていない古いカーネルモジュールがある場合があるのでそのファイルを削除して何とか /boot 領域を空けましょう

最後に

全部でだいたい20分ほどで完了しました

2024年10月9日水曜日

Xcode で double-quoted include エラー

Xcode で double-quoted include エラー

概要

対応方法を紹介します

環境

  • macOS 15.0.1
  • Xcode 16.0

Quoted include in Framework Header を No にする

プロジェクト本体と Pods の Build Settings の Quoted include in Framework Header を設定します

プロジェクト本体は No にし Pods 側を Yes にします

pod update

  • pod install
  • pod update

を実施します

Xcode 再起動

再起動します

動作確認

これでエラーが解消されるはずです

最後に

なぞのエラーはまだ出るようです

参考サイト

2024年10月8日火曜日

自宅で Google Photo のような写真管理ができる immich を起動する

自宅で Google Photo のような写真管理ができる immich を起動する

概要

immich というツールを試してみました
Web 版もありアプリから写真の同期もできるようです
今回は推奨の docker での起動を試します

環境

  • macOS 15.0.1 (M1 Macbook Air)
  • docker 27.2.0
  • immich 1.117.0

作業ディレクトリ作成

  • mkdir ./immich-app
  • cd ./immich-app

docker-compose ファイルの作成

今回は公式のものをそのまま使います

  • wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

.env ファイルの作成

各種設定は .env ファイルで行うようです
docker-compose.yml 内で読み込んでいる感じなので直接 docker-compose.yml を編集したり環境変数として引数で渡しても OK だと思います

  • wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

ファイルの中身を確認すると写真を保存するパスや postgresql のデータベース情報を設定する変数があるのが確認できます

起動

2つのファイルが配置できたら起動するだけです

  • docker compose up -d

いくつかイメージを pull するので初回は少し時間がかかります

docker compose ps
NAME                      IMAGE                                                                                                                  COMMAND                   SERVICE                   CREATED          STATUS                             PORTS
immich_machine_learning   ghcr.io/immich-app/immich-machine-learning:release                                                                     "tini -- ./start.sh"      immich-machine-learning   46 seconds ago   Up 45 seconds (healthy)            
immich_postgres           docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0   "docker-entrypoint.s…"   database                  46 seconds ago   Up 13 seconds (health: starting)   5432/tcp
immich_redis              docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792                     "docker-entrypoint.s…"   redis                     46 seconds ago   Up 13 seconds (health: starting)   6379/tcp
immich_server             ghcr.io/immich-app/immich-server:release                                                                               "tini -- /bin/bash s…"   immich-server             46 seconds ago   Up 13 seconds (health: starting)   0.0.0.0:2283->3001/tcp

動作確認

localhost:2283 ポートにブラウザでアクセスすると Web の管理画面が表示できます

まず管理者アカウントを作成します

次に基本設定をいくつか行います
基本はすべてデフォルトの設定でいいかなと思います

すべての設定が完了すると見慣れた画面になります
ここにファイルをアップロードすると写真の管理が自身のマシン上で行えるようになります

最後に

immich を試してみました
iPhone アプリもあるようなので iPhone アプリをインストールし写真の同期を有効にすれば Web と iPhone 側で同じ写真が見れるようになります

今回はプライベートネットワーク内に構築しましたがサーバをクラウド上に構築したり自宅で構築した immich を公開すれば外出先からでもアクセスできるようになるかなと思います

内部的にモデルが動作しているようなのである程度のマシンスペックが要求されると思います

まだまだ絶賛開発中なので非互換な変更や新機能が追加されたりするので頻繁にコンテナを再作成するといいかなと思います

お掃除

  • docker compose down
  • rm -rf ./immich-app

参考サイト

2024年10月7日月曜日

AltStore で公開するアプリを作成する方法

AltStore で公開するアプリを作成する方法

概要

ipa ファイルを作成する方法を紹介します
ポイントは既存の Apple Developer Program に登録していたメンバーシップ期限切れのアカウントを使わないことです

環境

  • macOS 15.0.1
  • AltServer 1.7.2
  • Xcode 16.0

AltServer および AltStore にログインした Apple ID で Xcode にログイン

すでに Apple Developer Program のメンバーシップが切れているユーザでログインしても ipa が作成できないので AltStore 用に新規で作成した Apple ID を使ってログインします

Settings -> Accounts

でログインしましょう
また開発用の証明書がない場合は

Settings -> Accounts -> Manage Certificates -> プラスボタン

で新規に証明書を作成しましょう

Bundle Identifier の確認

すでに公開していたアプリを AltStore 用にビルドする際に Bundle Identifier を変更する必要があります

アプリのビルド時に Team および Bundle Identitifier を調整しましょう

Apple Developer Program へのログイン

https://developer.apple.com/ へログインだけしましょう
Developer Program への登録は不要です

Any iOS Device にしてビルド

Product -> Archive -> Distribute App -> Custom -> Release Testing

.app フォルダをアーカイブして .ipa にする

  • mkdir ~/Downloads/Payload
  • cp -ipr ~/Library/Developer/Xcode/DerivedData/app_name-cuzoqdebxqlaksegeoxfmmsaetqz/Build/Products/Debug-iphoneos/app_name.app ~/Downloads/Payload

あとは Payload を圧縮して .zip -> .ipa に拡張子を変更するだけです

おまけ: .ipa を iPhone にダウンロードして AltStore に追加する

nginx を使います

  • brew install nginx
  • cp ~/Downloads/Payload.ipa /opt/homebrew/var/www/

iPhone 側で 192.168.1.100:8080/Payload.ipa (IP の部分は適宜変更してください) にアクセスし Chrome にダウンロードします

あとは AltStore を開いて MyApps -> プラスボタン -> Chrome 内の Payload.ipa を参照すれば AltStore 内にインストールできます

インストールしたアプリは普通に iPhone のホーム画面上にいます
またアプリを開く際に「信頼できないなんちゃら」という警告が出る場合は

設定 -> 一般 -> VPNとデバイス管理 -> デベロッパアプリ -> AltStore インストール時のアドレスを選択して信頼

をしてください

トラブルシューティング

個人の開発アカウントでは1週間に10個までしかアプリを追加できない

Your maximum App ID limit has been reached. You may create up to 10 App IDs every 7 days.

基本 AltStore にインストールするためには2つIDを使うことになります
また AltStore ですでに2つ使うので実質一週間で8IDしか使えないので一週間の間で ipa を作成できるのは4アプリになります

最後に

.ipa ファイルはただのアーカイブファイルだということに注意が必要です

.ipa ファイルが追加できる条件として AltServer と通信できている状態でないとインストールできないので注意してください

また AltStore に追加できるアプリは3つ以上は追加できない(AltStoreがあるので実質2つ)ので注意してください

参考サイト

2024年10月6日日曜日

Mac に AltServer をインストールする

Mac に AltServer をインストールする

概要

iPhone に AltStore アプリをインストールするのに必要です
Apple Developer Program への登録が非チュウ用になるので注意です

環境

  • macOS 15.0.1
  • iOS 18.0.0 (iPhone14)
  • AltServer 1.7.2

ダウンロード

https://cdn.altstore.io/file/altstore/altserver.zip ここからダウンロードし展開します

配置

ダウンロードした zip を展開します
AltServer.app をアプリケーション配下に配置します

起動

AltServer.app を起動します
初回は警告が出るので「開く」を選択します

自動更新の設定も出るのでオンにしておきましょう

Mac と iPhone の Wifi 経由接続設定

Finder で同一 Wifi にいる場合に iPhone を検出するようにします

表示されない場合は一度優先で接続してオンにします

iPhone の開発者モードの有効化

Xcode が必要になります
Xcode を起動し iPhone と有線接続し以下を設定します

設定 -> プライバシーとセキュリティ -> 開発者モード -> オン

AltStore のインストール

iPhone にインストールします

ツールバー -> AltServer -> Install AltStore -> Wifi 同期している iPhone の選択

Apple ID を入力する画面になるので入力します

アドレスの信頼

設定 -> 一般 -> VPNとデバイス管理 -> デベロッパアプリ -> AltStore インストール時のアドレスを選択して信頼

AltStore で AppleID のログインをする

先ほど転送する際に使用した Apple ID でログインしましょう

AltStore アプリを iPhone 側で開いて

Settings -> Sign in with Apple ID

でログインできます

トラブルシューティング

Your device could not be registered with your development team. Your development team has reached the maximum number of registered iPhone devices.

別の Apple ID を使いましょう
ない場合は作成すれば OK です

また Apple Developer の問い合わせ窓口にメールで問い合わせたら裏から登録デバイスを削除してくれるかもしれません

Apple Developer Program を見るとメンバーシップの期限切れから180日後にすべてのデバイスを削除するとあるのですが削除されていないのかもしれません

最後に

あとは ipa をダウンロードし AltStore に転送すれば OK です

参考サイト