スキップしてメイン コンテンツに移動

投稿

Windows 11のインストール失敗 (0xC1900101 - 0x30018)

TPM2.0未対応の自作パソコンにWindows 11をインストールする方法はいろんなサイトで紹介されています。 筆者の古い自作PCもせっかくなのでWindows 11にアップグレードを試してみました。PCは下記のような構成です。 マザーボード: TA890GXE CPU: Phenom II X4 910e メモリ: DDR3-1333 4GB x 2 HDD: Seagateの2TB 筆者は下記の動画で紹介されているようにWindows 11のISOイメージをダウンロードして、そこから appraiserres.dll の中身を空ファイルにすることで、TPM2.0のチェックを回避する方法でインストールを試みました。 【23H2対応】古いパソコンをWindows11へアップグレードさせる方法【簡単】 (youtube.com) インストールまでは完了したのですが、Windows 11の初期起動に失敗したというメッセージが出て、Windows 10に強制的にロールバックされてしまいました😭。 ロールバックされたWindows 10に下記のダイアログが表示されました。 Windows 11をインストールできませんでした お使いの PC は、Windows 11 のインストールを開始する直前の状態に戻りました。 0xC1900101 - 0x30018 SYSPREP_SPECIALIZE 操作中にエラーが発生したため、インストールは > FIRST_BOOT フェーズで失敗しました。 ネット上を色々検索したところ、上記のエラーはハードウェアのドライバがWindows 11に対応していないことが原因の可能性が高いというところまでは当が付きました。 インストール失敗のログからデバイスIDを割り出して特定する方法が王道のようですが、筆者の技量では、ログを見てもすぐに原因となるデバイスを特定できませんでした。 周辺機器はゼロの状態だったこともあり、ならば、しらみつぶしにということで、Windows 10の時点で、サウンド、チップセットのグラフィックとドライバを変えていって、最後にマザーボードに載っているRealtekネットワークドライバをRealtekのサイトから ダウンロード したものに変えたところ無事インストール、エラ...

PowerShellのStart-Processで起動したプロセスのExitCodeを取得する方法

PowerShellのStart-Processで起動したプロセスのExitCodeの取得方法を下記に示します。 $p = Start-Process - NoNewWindow - PassThru - FilePath "some_exe" $dummy = $p . Handle # Cache the handle $p . WaitForExit ( ) Write-Host " $p .ExitCode" 「なんでこんな単純なことを記事にするの?」と思う人もいるかもしれませんが、上記の Cache the handle の行がないと正しいExitCodeは取得できません! -Wait とかをつけてもだめです。 詳細は下記のGitHubのissueを参考にしてください。 https://github.com/PowerShell/PowerShell/issues/20400#issuecomment-1740954070

PowerShellでStart-Processで起動したアプリケーションのログをファイルとコンソールの両方に出力

はじめに PowerShell上で Start-Process コマンドを使って起動したアプリケーションは -RedirectStandardOutput や RedirectStandardError オプションを指定することで、ログを ファイルに出力 できます(コンソールには出力できないので注意)。 このログを同時にコンソールにも表示させたかったのですが、思いのほか苦戦したので備忘録として共有します。 できた方法 結局出力されたログファイルを、別起動したプロセスでTailするという方法を採用しました。 下記はsomethig.logに書き込みつつ同時にコンソールにもログの内容を出力するPowerShellの例です。 try { $logJobObj = Start-Job - ScriptBlock { Get-Content - Path ".\something.log" - Wait } $mainProcessObj = Start-Process - PassThru - FilePath process . exe - ArgumentList "-something_argument... -RedirectStandardOutput " . \something . log " RedirectStandardError " . \something . log" / / アプリケーションが終了するまで待つ While ( ! $mainProcessObj . HasExited ) { / / ログをTailしているJobの出力を受け取る Receive-Job $logJobObj / / 適当な秒数待つ Start-Sleep - Seconds 1 } Receive-Job $logJobObj } finally { if ( $logJobObj ) { Receive-Job $logJobObj / / ログをTailしているJobを終了 Stop-Job $logJobObj Re...

C#でUDPデータ受信

受信側サンプルコード // 基本 var receiveIpAddress = "127.0.0.1" ; var local = new IPEndPoint ( IPAddress . Parse ( receiveIpAddress ) , Port ) ; var remote = new IPEndPoint ( IPAddress . Any , 8006 ) as EndPoint ; socket . Bind ( local ) ; var buffer = new byte [ 3 ] ; while ( true ) { Console . WriteLine ( "Start Receiving" ) ; // var length = socket.ReceiveFrom(buffer, ref remote); var length = socket . Receive ( buffer ) ; var requiredBuffer = new byte [ length ] ; Buffer . BlockCopy ( buffer , 0 , requiredBuffer , 0 , length ) ; var data = Encoding . UTF8 . GetString ( requiredBuffer ) ; Console . WriteLine ( "data received: " + data ) ; } 受信側コードの注意点 bufferの配列サイズがdatagramサイズより小さいと、下記のようなエラーが出る System.Net.Sockets.SocketException (10040): A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datag...

IntelliJ IDEAでWSL2上のJDKを追加しようとするとMicrosoft Defenderのスキャンが走って固まってしまう問題

問題 IntelliJ IDEAでWSL2上のJDKを追加しようとすると、Microsoft Defenderのスキャンが走ってファイルのIndexingプロセスでほぼフリーズしてしまうという問題が発生しました。 ネットで検索 下記のページで同様の問題に遭遇した人がissueを上げていました。 https://youtrack.jetbrains.com/issue/IDEA-308995 こちらに暫定的な解決方法が記載されていたので試したところ、筆者の場合は解決しました。 https://github.com/microsoft/WSL/issues/8995#issuecomment-1377515755 解決手順 Windows Defenderのスキャン除外リストにfsnotifier-wsl, idea64.exeの2つのプロセスを追加するという方法です。 手順は下記になります。 Windows Security設定を開く(Windowsのタスクバーの検索まどから検索すると早いです) Virus & threat protectionを開く Virus & threat protection settingsのManage settingsを開く ExclusionsのAdd or remove exlclusionsを開く Add an exclusionでProcessを選択し、fsnotifier-wsl, idea64.exeの2つのプロセスを追加

Firebase Hostingで取得できるinit.jsからFirebaseの環境情報を抜き出すjavascript

はじめに Firebase Hostingでデプロイ先のプロジェクト(開発、ステージング、本番)ごとにinitializeAppに渡すFirebaseの環境情報を簡単に切り替える方法はないか調査して、FirebaseのHostingのinit.jsを読み込む方法を試してみました。 FirebaseのHostingのmodule形式でないサンプルで、下記のように、init.jsが読み込まれている行が見つかります。 < script defer src = " /__/firebase/init.js?useEmulator=true " > </ script > 中身はこんな感じです。 if ( typeof firebase === 'undefined' ) throw new Error ( 'hosting/init-error: Firebase SDK not detected. You must include it before /__/firebase/init.js' ) ; firebase . initializeApp ( { "apiKey" : "{API Key}" , "appId" : "{App ID}" , "authDomain" : "{domain}" , "databaseURL" : "" , "projectId" : "{projectId}" , "storageBucket" : "{Storage Bucket Domain}" } ) ; initializeApp に渡しているJavascript Object部分を抜き出せば、コードがデプロイされているFirebaseのHosting情報を実行時に取得することができます。 コード init.jsの中身を読み込み、正規表現で欲しい部分を抜き出し、JSON.p...

ダイソーで購入した5.5インチスマホガラスフィルムのレビュー

ダイソーでスマホの5.5インチ ガラスフィルムが販売されているというのを知り、近所のダイソーを何店か回って、ようやくお目当ての商品を見つけて購入したので、簡単にレビューします。 あくまで私個人の環境での使用感です。 スマホ用液晶保護強化ガラス 5.5インチ MSGS-29 https://jp.daisonet.com/collections/electricity0215/products/4968583144626 良い点 安い。 自分のスマホの画面をぴったり覆える。 ダメな点 透明度がいまいち:機種専用のガラスフィルムにくらべると、透明度が低いような気がしました。 画面部分しか覆えないので見た目がいまいち。 割れちゃいました。。。 結局、画面の透明度が気になったので、機種専用のガラスフィルムの方に貼りなおして、はがしたMSGS-29に保護シートを貼り直し、保管しておこうと(余計なことをして)いじっていたら、あっさりフィルムが割れてしまいました。😭 ( 普通にスマホに貼った状態で割れたわけではなく、商品の欠陥とかではないので誤解ないように! )。 当たり前ですが、ガラスフィルムは ・面に対して垂直でない力に相当弱い ・特定の箇所に力が集中するといきなり破断する というのを実感しました。 MSGS-29についてはこんな構造になっていました。粘着シートのおかげでフィルムが割れてもガラスが飛散しないようになっているようです。 結論 機種専用のフィルムが手に入るならそちらの方がよい。品質はある程度価格に比例しそう。(iPhone用のガラスフィルムはダイソーでもたくさん販売されていますが、そちらの品質はわかりません)。 ガラスフィルムの扱いは丁寧に。

Linuxで任意の文字列をbase64エンコードする方法

Linuxでbase64エンコードをするにはbase64コマンドを使えばOKです。 base64コマンド ファイルであれば下記のようにファイル名を指定すると、ファイルの中身をbase64エンコードした結果が標準出力に出力されます。 base64 {エンコード対象のファイル} ファイルに保存したい場合は、リダイレクトを使います。 base64 {エンコード対象のファイル} > {エンコードされたファイル} ファイルではなく文字列をbase64エンコードする場合 echoコマンドとパイプを使えば容易に実現できます。注意点として、base64コマンドでオプションを何も与えないと76文字ごとに改行が勝手に入るので、改行を除きたい場合は -w 0 をオプションに指定します。 echo "エンコードしたい文字列" | base64 -w 0

Google Datastoreのインデックス削除

大昔にGoogle App Engineの開発で作成したGoogle Datastoreのインデックスを見つけたので掃除方法を検索したところ、公式の https://cloud.google.com/sdk/gcloud/reference/datastore/indexes/cleanup を見つけました。 筆者の場合は、インデックスを全削除したかったので、下記のような空のindex.yamlを作成し、 indexes: 下記のコマンドを実行しました。 gcloud datastore indexes cleanup index.yaml

Thymeleafのthymeleaf-layout-dialectライブラリはGraalVMで使えない (2023年2月時点)

筆者の開発しているプロジェクトでは、Spring BootのテンプレートエンジンにThymeleafを使っており、全画面共通のレイアウトテンプレートを定義するために thymeleaf-layout-dialect を利用していました。 このプロジェクトでGraalVMを使ってネイティブコードを生成しようと悪戦苦闘していたのですが、2023年2月時点では thymeleaf-layout-dialect がネイティブコンパイルに対応していないため無理という結論になりました。 native-imageのコマンド実行時にエラーになるクラスを --initialize-at-build-time 、 --initialize-at-run-time で手作業で追加していたのですが、追加する数が多すぎて無理でした。。。 それほどページ数は多くなかったので、泣く泣く thymeleaf-layout-dialect の利用をあきらめ、重複は増えてしまいますが、Thymeleaf標準機能だけで全テンプレートを書き換えました。 GitHub上のissueを見ていたところ、ライブラリの作成者も問題に気づいているようなので、今後対応されるかもしれません。 https://github.com/ultraq/thymeleaf-layout-dialect/issues/232

Spring Bootのコンテンツ配信でgzip圧縮を有効にする方法

Google App EngineのJava 17のStandard EnvironmentでSpring Bootアプリケーションを運用していたところ、サーバーから送信されるhtmlにgzip圧縮が効いていないことに気が付きました。 gzip圧縮が効いているかどうかは、下記のようなサイトに調べたいページのURLを入力すれば確認できます。 https://pagespeed.web.dev/ https://www.giftofspeed.com/gzip-test/ Spring Bootでgzip圧縮を有効にするにはapplication.propertiesに下記のように追記すればOKでした。ちなみにGoogle App Engine側の設定は特にいじっていません。 # 圧縮を有効にするかどうか server.compression.enabled = true # 圧縮対象のmite type server.compression.mime-types = text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json # 圧縮を効かせる最小レスポンスサイズ server.compression.min-response-size = 1024 Google App EngineのDash Boardで確認したところ、見事にネットワークの使用帯域が1/5になりました!

Spring BootでThymeleafのキャッシュをオフにする方法

Spring BootでテンプレートエンジンとしてThymeleafを使っていると、デフォルトではキャッシュが効いて、開発時にテンプレートを修正するたびにアプリケーションを再起動する必要があます。 Thymeleafのキャッシュをオフにするにはapplication.propertiesに下記の設定を加えればOKです。 spring.thymeleaf.cache: false これによりページリロードの度に毎回テンプレートの解析が行われ、編集内容がすぐに反映されるようになります。 本番デプロイ時は設定を無効にすることを忘れないようにしてください。

WSL2上のUbuntuでgloudコマンドの実行が遅い時の対処法

gcloudコマンドの実行が遅い! 筆者はwsl2を利用してWindows上のUbuntuで開発を行っています。 開発中にgcloud コマンドの実行が非常に遅くなってしまうという問題に度々遭遇し、困っていました。例えば gcloud config set project {project_id} といった単純なコマンドでも実行に数分かかってしまうような状況でした。 調査したところ、下記のStack Over Flowの投稿を見つけ、解決しました。 https://stackoverflow.com/questions/61953082/why-is-my-gcloud-command-suddenly-very-slow-inside-wsl2 解決法 Ubuntu上で実行されていたのは、Windows上にインストールされたgcloudコマンドで、そのことが遅くなっている原因でした。 Ubuntu上で /etc/wsl.conf に下記のように追記 (ファイルが存在しない場合は作成)してWindows側のパス設定を読み込まなくすることで、Windows上のgcloudをUbuntu側から参照できないようにする。 [interop] appendWindowsPath = false wsl.exe --terminate {Linuxディストリビューション名、大抵はubuntu} でwslを一度落とし、そのあと再度wslを起動。 起動したUbuntu上でLinuxネイティブのgcloudをインストール。 筆者の場合はこれで普通のLinux環境とそん色ないぐらいコマンドの実行が速くなりました(今までのは何だったのか orz…)。

Windows側のMySQL Workbenchから、WSL2上のUbuntuにインストールしたMySQLへ接続する方法

Windows側のMySQL Workbenchから、WSL2上のUbuntuにインストールしたMySQLへ接続する方法をまとめました。 Ubuntu側 (WSL2) MySQLのインストール 普通にUbuntuへMySQLをインストールする手順に従う。 https://takake-blog.com/wsl2-ubuntu2004-mysql/ を参考に進めた。 MySQLの起動コマンドは sudo service mysql start MySQLの設定修正 ■ MySQLのユーザを作成 外部のホストからログインできるようにするために、ホスト部分は%指定 。ホストを固定したい場合はホスト名やIPアドレスを指定。 CREATE USER 'user' @ '%' IDENTIFIED BY 'password' ; FLUSH PRIVILEGES ; CREATE SCHEMA some_schema CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' ; GRANT ALL PRIVILEGES ON ` some_schema ` .* TO 'user' @ '%' ; ■ Listenするアドレスを0.0.0.0に修正 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf #bind-address = 127.0.0.1 bind-address = 0.0.0.0 sudo service mysql restart を実行してMySQL再起動 ■ ifconfigコマンドを実行して接続先のIPアドレスを調べる user@host:~$ ifconfig Command 'ifconfig' not found, but can be installed with: sudo apt install net-tools 自分の環境では、上記のメッセージが出て、ifconfigがインストールされていなかったので、 sudo apt install ne...

Windowsのユーザフォルダ名の変更方法

背景 日本語ユーザ名でWindowsのユーザを作成すると、ユーザフォルダ(C:\Users{ユーザ名})も日本語で作成されてしまいます。 日本語のフォルダ名だとアプリケーションによっては不具合が生じることもあったので、英語のフォルダ名に変更を実施しました。 注意点 色々と面倒で、レジストリを修正する必要がありリスクの高い方法なので、実施する場合は自己責任でお願いします。 特にユーザ名が固有名詞や日本語名でない場合は、レジストリエディタで文字列を一括置換する場合に、置換する必要のない文字列まで置換してしまう可能性が高いので、実施はお勧めしません。 ユーザ作成直後であれば、ユーザを作り直す方が楽ですかも知れません。 対応方法 下記の流れでのように実施しました。 How to Change User Folder Name in Windows 10 – 2 Ways (minitool.com) の記事を参考に コマンドプロンプトで net user Administrator /active:yes と打ってAdministratorユーザを一時的に作成 ログアウトして作成したAdministratorアカウントでログイン CドライブのUsersフォルダ配下にある対象のユーザ名のフォルダを、変更したい名前に修正 レジストリエディタを開いて HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<User SID>\ を検索して、 ProfileImagePath に登録されているフォルダ名を修正。 netplwiz を実行してユーザ名を変更。Microsoftアカウントと紐づいている場合、表示されるユーザ名は変更できないのでスキップしてOK。 Administratorアカウントからログアウトして、ユーザ名を変更し終わったアカウントでログイン net user Administrator /active:no とコマンドプロンプトに入力して、Administratorアカウントを削除。 環境変数の修正 特に環境変数のPathにユーザフォルダが含まれている場合、ユーザ個人でインストールしたアプリケーションを実行...

JOGLのプログラムが起動しない問題

JOGLのエラー JOGL - Java™ Binding for the OpenGL® API のプログラムを久しぶりに動かそうとしたところ、下記のエラーが出てしまい動きませんでした。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1 at jogamp.opengl.windows.wgl.awt.WindowsAWTWGLGraphicsConfigurationFactory.chooseGraphicsConfigurationImpl(WindowsAWTWGLGraphicsConfigurationFactory.java:171) at com.jogamp.nativewindow.GraphicsConfigurationFactory.chooseGraphicsConfiguration(GraphicsConfigurationFactory.java:424) at com.jogamp.opengl.awt.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:1560) at com.jogamp.opengl.awt.GLCanvas.addNotify(GLCanvas.java:611) at java.desktop/java.awt.Container.addNotify(Container.java:2804) at java.desktop/java.awt.Window.addNotify(Window.java:791) at java.desktop/java.awt.Frame.addNotify(Frame.java:495) at java.desktop/java.awt.Window.show(Window.java:1053) at java.desktop/java.awt.Component.show(Component.java:1728) at java.desktop/java.awt.Component.setVisible(Compon...

EclipseのGoogle Cloud ToolsがインストールするGoogle Cloud SDKの場所

EclipseのGoogle Cloud ToolsからCloud SDKをインストールするように設定して(Window > Preferences > Google Cloud Toolsから設定できます)、Eclipse上でCloud SDKをアップデートしたところ下記のエラーメッセージが表示されました。 WARNING: There are other instances of Google Cloud tools on your system PATH. Please remove the following to avoid confusion or accidental invocation: C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\java_dev_appserver.sh C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\gsutil C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\java_dev_appserver.cmd C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\endpointscfg.py C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\bq.cmd C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\gcloud.ps1 C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\docker-credential-gcloud.cmd C:\Users\ { user名 } \AppData\Local\Google\Cloud SDK\g...