IPC の使い方

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) この記事を作った動機 electron で何かアプリを作ろうかなと思ったとき、心理的障壁として、IPC によるやり取りがあったので、それについて、間違ってもいいのでとにかく自分なりにノートを作ろうと思っただけ。 IPC なにそれおいしいの? IPC(Inter Process Communication) とは、複数のプログラム間で、データをやり取りしたりするための仕組みの一つ。いろんな仕組みがある。ネットワークを使うとか特定のメモリ領域を共有するとか。。。 electron と何が関係あるの? 今の私の理解だと、electron は複数のプロセスからなっていて、単に一つのプログラムに対して、一つのプロセスが起動しているという感じではない。少なくとも、OS側の処理を担う、main と呼ばれているプロセスと、chromiumベースの描画用のプロセス(renderer.jsもここ)が存在している。 セキュリティの関係上、一つのプロセスとして全てが処理されておらず、分離されている。そのため、例えばファイル操作を実装したいとなったときなどには、main プロセスと、renderer.js などが動いている描画用プロセス間でデータをやり取りする必要がある。 そこで、データをやり取りする手段として、IPCがある。 やり方 以下は適当に、Using Preload Scripts | Electronあたりから、IPCを使って main プロセスと描画プロセスがやり取りするために必要であると思われる部分を、部分的に引っ張っていじくりまわして試したコードである。 main.js preload.js を指定 ipcMain.handle const { app, BrowserWindow, ipcMain } = require('electron/main') const path = require("node:path") const createWindow = () => { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') } }) win.loadFile('src/index.html') } function scandir(){ return ["aaa.txt","bbb.txt"] } app.whenReady().then(() => { createWindow() ipcMain.handle("ping",() => "pong") ipcMain.handle("scandir",scandir) app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) preload.js renderer.js内での呼び出し方の決定 const { contextBridge, ipcRenderer } = require('electron') contextBridge.exposeInMainWorld("callme",{ ping: () => ipcRenderer.invoke("ping"), scandir: () => ipcRenderer.invoke("scandir") }) // renderer.js // let response = await window.callme.ping() 以下は、Using Preload Scripts | Electronの引用 ...

May 11, 2025

自動化 shortcode

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) この記事を作った動機 markdown のテンプレートを作るにおいて、テンプレートを作ったついでに、そのテンプレート内で初めて真面目に hugo の機能を使った気がするので次いでにその例を記録するだけ。ただの自己満と言われればそうなのかもしれない。 内容 layouts/shortcodes/Images/MMD/Data.html {{ $folder := .Get "folder" }} <ul> {{$path := printf "static/Images/MMD/%s" $folder}} {{range readDir $path}} {{$filepath := printf "%s/%s" $path .Name}} {{$filepath := replace $filepath "static" ""}} {{if strings.Contains .Name ".blend"}} <li> <a download href="{{$filepath}}">{{.Name}}</a> </li> {{end}} {{if strings.Contains .Name ".zip"}} <li> <a download href="{{$filepath}}">{{.Name}}</a> </li> {{end}} {{end}} </ul> archetypes/Images/MMD.md +++ date = '{{ .Date }}' draft = false title = '{{ replace .File.ContentBaseName "-" " " | title }}' +++ ## data \{\{<Images/MMD/Data folder="\{\{.File.ContentBaseName}}">}} ## Images and Videos \{\{<Images/MMD/ShowImageAndVideo folder="\{\{.File.ContentBaseName}}">}} readDir strings.Contains replace 参考にしたサイトとか https://gohugo.io/functions/os/readdir/#article https://gohugo.io/functions/strings/contains/#article https://gohugo.io/functions/strings/replace/#article

May 8, 2025

Android アプリで最初に起動するアクテビティを指定する

この記事を作った動機 自分用の android studio におけるアプリ開発時に引っかかる部分の記録です。単にアクテビティなしのテンプレートからアプリを作ろうとしたとき、アプリ起動時のアクテビティを指定する必要があり、そのやり方を毎回忘れるというのが、この記事を書くきっかけです。 重要な部分(引用部分) <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> AndroidManifest.xml の全体像の例 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.FileShareViewsmb" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 参考にしたサイトとか android - Change application’s starting activity - Stack Overflow https://stackoverflow.com/questions/3631982/change-applications-starting-activity (2025年5月1日)

May 1, 2025

markdown のテンプレートを作る

この記事を書いた動機 hugoで書いているとき、以下のようにして、フォルダごとに分けることで、記事を管理しています。それで、それらフォルダ内に、新しく記事をhugo newするときに、デフォルトで生成される記事のテンプレートを異なるものにして、管理できるらしいということがわかったので、メモを自分用に取るだけです。 やり方 hugo で作業しているルートディレクトリの “archetypes” というフォルダに、“content” 配下にあるフォルダ構造を意識して、[フォルダ名].mdのようにして、ファイルを作成し、テンプレートを作る。以下に、フォルダ構造やテンプレートファイルのマークダウンの例を一応乗せることにする。 archetypes archetypes ├── default.md ├── images.md └── posts.md content content ├── posts └── images posts.md +++ title = '{{ replace .File.ContentBaseName "-" " " | title }}' date = {{ .Date }} draft = true ShowToc = true +++ images.md +++ title = '{{ replace .File.ContentBaseName "-" " " | title }}' date = {{ .Date }} draft = true ShowToc = false +++ 補足(2025年5月8日) このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) ├── archetypes │ ├── Images │ │ └── MMD.md │ ├── default.md │ ├── posts.md │ └── think.md Leaf bundles hugo new --kind Images/MMD content/Images/MMD/DIYUSI.md archetypes/Images/MMD.md +++ date = '{{ .Date }}' draft = false title = '{{ replace .File.ContentBaseName "-" " " | title }}' +++ ## data \{\{<Images/MMD/Data folder="\{\{.File.ContentBaseName}}">}} ## Images and Videos \{\{<Images/MMD/ShowImageAndVideo folder="\{\{.File.ContentBaseName}}">}} https://gohugo.io/content-management/archetypes/#specify-archetype ...

March 16, 2025

リソースを追加する

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) 注意点 大文字小文字に気をつけること ファイル名であっても、その違いだけですぐ動かなくなる テクスチャの追加 テクスチャが正しく認識されていないときは、黒と紫のチェック柄が表示されてしまう。 言語ファイルの追加 言語ファイルがないと、正しく名前を表示できない 参考にしたサイト https://jabelarminecraft.blogspot.com/p/minecraft-modding-localization.html https://docs.minecraftforge.net/en/1.12.x/concepts/internationalization/#

March 4, 2025

MOD 開発環境構築

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) Forge 公式サイトからツールをダウンロード gradle の調整 gradle の実行 参考にしたサイト

March 4, 2025

アイテムを追加する

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日)

March 4, 2025

ブロックを追加する

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日)

March 4, 2025

マインクラフト Mod 開発記録 1.7.10

このページは、まだ未完成です。。。 nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日) 環境構築 MOD 開発環境構築 基本 ブロックを追加する アイテムを追加する リソースを追加する この記事を書いた動機 自分はマインクラフトのMODについては、ちょっと環境構築してとりあえずサンプルMODが動くところまでやっていたものの、そこから先が今まで何もできていない状態だったので、最近また触り始めました。 それで、記録してすぐ参照できる状態にしておきたいと思ったので、記録を残そうというわけです。ちなみのこの記事をリンク集として、適当にまとめていこうかなと思います。 参考にしたサイトとか ここはリンク集なので特になし

March 4, 2025

記事ごとにトップ画像を表示したい (hugo PaperMod)

この記事を書いた動機 hugo を使っていて、書いた記事のサムネイルというかトップ画像みたいなのを、記事のリストで表示したかったが、すぐにどうすればいいか見つけられないかったので忘れない内に記録するというだけです。 今回の場合は、Google 検索とかで適当に調べたり、 Paper Mod 公式サイト では直接どうするのかを見つけることは出来なかったのですが、そこで動いている例を無理やりChrome の開発者ツールで調べて、実際の開発環境側で、themes/PaperMod 配下にあるファイルと一致する記述を見るけることで対応しました。 Paper Mod 公式サイト の動いている例 うまく動いた例 PaperMod の場合 +++ date = '2025-02-15T00:46:54+09:00' draft = false title = 'Windows' weight = 2 [cover] image = "/posts/windows/indexIcon.svg" +++ ... 記事の内容(markdown) ちなみに画像は、staticフォルダ配下においている。 無理やり見つけた経緯 調査 Paper Mod 公式サイト のトップページにある動いているやるのタグやクラス名を調べる。 検索 VS code の検索機能で、<article class=" と調べる。以下の様な記述が見つかる。クラス名にentry-headerとあったりするなど、Paper Mod 公式サイト の動いている例と似ている点が見つかる。 themes/PaperMod/layouts/_default/list.html ... {{- partial "cover.html" (dict "cxt" . "IsSingle" false "isHidden" $isHidden) }} <header class="entry-header"> <h2 class="entry-hint-parent"> ... そして、画像のタグがある部分に該当するのが、cover.htmlというところにありそうなことが分かる。 ...

February 15, 2025