2025年12月 月 火 水 木 金 土 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 アーカイブ
カテゴリー
twitter
タグクラウド
- 7セグメントLED (5)
- Android (73)
- AndroidDevChallenge (5)
- AndroidStudio (66)
- Arduino (23)
- Bluetoothラジコン (7)
- Chrome拡張 (4)
- express (8)
- GoogleChrome (4)
- Javascript (8)
- JetpackCompose (5)
- Kotlin (4)
- LED (5)
- Linux (6)
- Mapbox (6)
- MariaDB (7)
- nginx (5)
- Node.js (10)
- PHP (4)
- Python (10)
- Raspberry Pi Zero WH (18)
- turf (4)
- Unity (9)
- まいにち詰将棋の検索サイト (9)
- アプリ (56)
- サンタレーダー (19)
- マスク (4)
- リバーシ (17)
- 地図 (10)
- 基本情報技術者試験 (11)
- 定点カメラ (11)
- 山梨県 (9)
- 恵方巻きコンパス (6)
- 東京パソコンクラブ (9)
- 栃木県 (6)
- 登山 (59)
- 福島県 (7)
- 簡易掲示板 (7)
- 群馬県 (9)
- 自作PC (12)
- 茨城県 (17)
- 行動ロガー (6)
- 長野県 (8)
- 電卓 (7)
- 電子工作 (31)
はじめての自作PC⑥【VGA】ASUS GT1030-SL-2G-BRK
ASUS GT1030-SL-2G-BRK
https://www.asus.com/jp/Motherboards-Components/Graphics-Cards/ASUS/GT1030-SL-2G-BRK/
はじめての自作PC④【メモリ】Corsair CMK32GX4M2E3200C16
Corsair CMK32GX4M2E3200C16
はじめての自作PC① 検討する
はじめての自作PC
AndroidStudioみたいなIDEを使っていると今使ってるPCの非力さが目立つ。もっとサクサクだと嬉しいなぁてとこと、最近のRyzenの評判を見ていると、使っていたい欲がムクムクと湧いてきた。出来合いのとかBTOとかもいいんだけど、昔から一回やってみたかった自作PCに挑戦してみることにした。
現在のスペック
https://www.ccleaner.com/speccy
こちらの結果
何を隠そうSandyBridgeおじさんなのです。ノートパソコンでLenovo ideapad Y570 0862JLJというモデル。それをSSDに変えたり、メモリ増やしてみたりして延命していた。今調べてみたら購入日が2012年07月22日…。もう9年使ってんだなぁ~、すでに販売店無くなってたわ。我ながら物持ちがよい。なんか懐かしくてウルっときてしまった。ぶっちゃけプログラミング以外のブラウジングやらに不満は特にないんだけどね。あぁでもたまーにやる動画エンコードも遅いなーて思ったりする。ここから変えてくのだ。
何を重視しようか
何かしらの基準がほしいなーと思って書き出してみると
- Ryzen使いたい
- 小さくて場所取らない
- あわよくばゲームとかもしたい
ぐらい。ざっくりしすぎかなー?でもこんなもんだよね。で、ネットをフラフラしながらぼんやり考えていたら、こんなレビューを見つけた。
https://review.kakaku.com/review/K0001172062/ReviewCD=1285603/
VELKASEというブランドの超小型ケース。これがかなり衝撃だった。超小さい筐体に最新CPUと性能の高いGPUがギッチギチに詰め込まれたこの感じ。自作PCといえばでかいケースにピカピカ光るパーツというステレオタイプな認識が壊された。こういう世界があるのか!ともうちょっと調べてみることにした。
Small Form Factor
主流のフォームファクターというと、ATXだったり、micro-ATXだったりする。それよりも小さいmini-ITXという形式がある。今までのmini-ITX用のケースというとキューブ型が主流だったみたい。グラフィックボードを使用するには、マザーボードのコネクタに対して垂直方向に挿入するためグラボの幅分の長さが必要なわけだ。で、昨今のグラボは大型化が顕著で、場所を取るし取り回しがしづらかったりする。そこでライザーケーブル(グラボスロットからの延長線みたいなケーブル)を使ってグラボとマザボを平行に設置し、よりコンパクトに運用できるようにしようというコンセプトで生まれたのがDAN Cases A4-SFXというケースだったようだ。こちらが始祖なんだろうか。
公式
https://www.dan-cases.com/index.html
当時のクラファン
https://www.kickstarter.com/projects/33753221/dan-cases-a4-sfx-the-worlds-smallest-gaming-tower
で、これがブレイクスルーになって、そっから火がついて現在までに様々なケースが発売されているらしー。(適当)これライザーケーブルはどういう目的で生まれてきたんでしょうね。マイニング需要とかなんかな。
著名なサイトとして
https://smallformfactor.net/forum/
https://www.reddit.com/r/sffpc/
とか。また、有志で作られている
https://docs.google.com/spreadsheets/d/1AddRvGWJ_f4B6UC7_IftDiVudVc8CJ8sxLUqlxVsCz4/
このリストが大変参考になる。ローカルに落としてエクセルで見るとよし。また、中国での半個人制作みたいなのが大変活発な分野らしく、taobaoやAliなどを覗くといっぱい売られてたりする。なるほどー、じゃあまずケースから決めようと思った。
どれにしよう
VELKA
最初に知ったVELKA 3はどうかなーと思って調べると
- CPUクーラーは37mmの高さまで
- CPUのTDPが65Wまで
- 電源はFlexATX
という制約があった。noctua NH-L9aを使用すること前提みたいな感じらしい。FlexATXって価格コムで調べてみると
https://kakaku.com/pc/power-supply/itemlist.aspx?pdf_Spec005=1
数種類しかない。さすがに不具合起きたときに取り戻せないのでは?とかCPUにRyzen 7を使ってみたい!というのがあったので違うのにすることにした。
AKKLA
ならば電源を、SFX, SFX-Lが使えるやつがいい。かつ、フットプリントが小さいやつ、ある程度の大きさのCPUクーラーが入るやつ、ショート基盤のグラボを入れられるようなやつ。そんなのを探していたらAKKLA A3 ITXというケースを見つけた。CPUクーラーは75mmまで、SFX対応、GPUサンドイッチ型で208mmまで。よさげなのでこれにしようと思う。
ケースの他を決める
と、いうことでケースが決まったので他のを決めた。5chの自作PC板にある構成スレをザーッと読んでおくと最近の潮流とかがわかるようになるのでオススメです。
| 【CPU】 | AMD Ryzen 7 5800X BOX |
| 【CPU-FAN】 | noctua NH-L12S |
| 【Memory】 | Corsair CMK32GX4M2E3200C16 |
| 【M/B】 | BIOSTAR B550T-SILVER |
| 【VGA】 | ASUS GT1030-SL-2G-BRK |
| 【SSD】 | CFD PG3VNF CSSD-M2B1TPG3VNF |
| 【電源】 | Corsair SF600 Platinum CP-9020182-JP |
| 【ケース】 | AKLLA A3 CNC ITX |
| 【ケースファン】 | SCYTHE KAZE FLEX 140 SQUARE PWM 1200rpm KF1425FD12S-P |
こうなった!これで組んでいこう~
パイこね変換器を作りたい
パイこね変換器
シリコンに色を付ける動画
https://twitter.com/nerimarina/status/1422921489230090249
を見ていたら、パイこね変換
https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%A4%E3%81%93%E3%81%AD%E5%A4%89%E6%8F%9B
という用語を知った。なんかやってみたいなーと思ったので、やってみることにした。
どうやろう
ローカルだけでやってもいいんだけど、どうせなら公開してみたいなーと思った。でもサーバーのリソース使うようなやり方だと、処理しきれるのかなー?となったのでブラウザ上だけでやれるような方法を探したい。まぁなんかあるだろ。
ファイルをアップロードして表示する
まずはこの部分を作って、パイ揉み処理は後で作ろう。
HTML
<input type="file" id="selectfile" name="selectfile" accept='image/*' required>
inputタグのtypeをファイルにするとファイル選択ボタンができる。accept=’image/*’でMinetype画像ファイルを限定できる。requiredで入力必須。
Javascript
const fileInput = document.getElementById('selectfile');
fileInput.addEventListener('change', func);
要素を取得して、リスナを設定する。changeっていうのが変更が確定したときに実行されるように設定するやつ。変更が発生するとfuncが実行されると。そんでfuncの中身を作ってく。この関数の書き方が色々あるから迷うんだよなー。
File
とりま
const loadImage = () => {
const file = fileInput.files[0];
console.log(file);
}
てして
素材を用意しまして、ファイルを選択してみると
読めたっぽい。じゃあ今度はこれを表示する。
FileReader
<div id="preview"></div>
inputタグの下に追加しとく。
上のconsole.logの行の代わりに
const reader = new FileReader();
reader.onload = function (e) {
const imageUrl = e.target.result;
const img = document.createElement("img");
img.src = imageUrl;
preview.appendChild(img);
}
reader.readAsDataURL(file);
これはまぁコピペです。fileをDataURLとして読み込んだ後に、imgタグを作成して、srcにDataURLを設定する。もっかい読み込んでみると
表示された!
画像を加工できるようにする
画像を読み込めたので今度は画像を加工できるようにしてく。読み込んだ時点で加工の処理を走らすこともできるんだろうけど、読み込んでからボタンを押して処理を実行する感じにしたい。
ボタンを設置したり
<h1>パイこね変換器</h1> <input type="file" id="selectfile" name="selectfile" accept='image/*' required><br> <button onclick="">実行</button> <h2>処理前</h2> <div id="preview"></div> <h2>処理後</h2> <div id="result"></div>
HTMLをこんな感じにした。
ボタンを押すと画像を表示する
要素を取得して、canvasに変換して、表示する。
function knead() {
const preimg = document.getElementById("preimg");
image = new Image();
image.onload = () => {
var canvas = document.getElementById("result");
var ctx = canvas.getContext("2d");
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0)
}
image.src = preimg.src;
console.log(preimg);
}
これなんか拡張機能作ったときやったな。
加工できるようにする
ImageData形式というものに変換すればいいみたい。context.getImageDataで取得。
var imagedata = ctx.getImageData(0,0,image.width,image.height);
ImageDataは画像を一次元の配列にしたものみたい。例えば4×4の画像の場合
| 0,0 | 0,1 | 0,2 | 0,3 | ||||||||||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 1,0 | 1,1 | 1,2 | 1,3 | ||||||||||||
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 2,0 | 2,1 | 2,2 | 2,3 | ||||||||||||
| 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
| 3,0 | 3,1 | 3,2 | 3,3 | ||||||||||||
| 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
インデックスはこう振られてる感じか。グレスケ化を調べてみて
image.onload = () => {
var canvas = document.getElementById("result");
var ctx = canvas.getContext("2d");
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
var imagedata = ctx.getImageData(0, 0, image.width, image.height);
for (let index = 0; index < imagedata.data.length; index += 4) {
var r = imagedata.data[index];
var g = imagedata.data[index + 1];
var b = imagedata.data[index + 2];
var gray = (r + g + b) / 3;
imagedata.data[index] = gray;
imagedata.data[index + 1] = gray;
imagedata.data[index + 2] = gray;
}
ctx.putImageData(imagedata,0,0)
}
こんな感じにしたら
できた!あとはいよいよパイ揉みすればいいんだな。
パイこねをコードで表現したい
流れは、拡大縮小して、半分に分割して、上下に並び替えるって感じ。言うのは簡単だよね…。
拡大縮小
うんうん唸りながら
image.onload = () => {
var canvas = document.getElementById("result");
var ctx = canvas.getContext("2d");
canvas.width = image.width;
canvas.height = image.height;
ctx.drawImage(image, 0, 0);
var imagedata = ctx.getImageData(0, 0, image.width, image.height);
var trnsdata = ctx.createImageData(image.width * 2, image.height / 2);
for (let idxw = 0; idxw < trnsdata.width - 1; idxw += 2) {
for (let idxh = 0; idxh < trnsdata.height - 1; idxh++) {
var idxt = trnsdata.width * 4 * idxh + idxw * 4;
var idxi = imagedata.width * 4 * (idxh * 2) + (idxw / 2) * 4;
trnsdata.data[idxt] = imagedata.data[idxi];
trnsdata.data[idxt + 1] = imagedata.data[idxi + 1];
trnsdata.data[idxt + 2] = imagedata.data[idxi + 2];
trnsdata.data[idxt + 3] = imagedata.data[idxi + 3];
}
}
canvas.width = canvas.width * 2;
canvas.height = canvas.height / 2;
ctx.putImageData(trnsdata, 0, 0)
}
縦方向は間引いて、横方向は伸長させた。半分で2倍なので考えることが少なくて済んだ。ただ横方向の補間をしてない。とりまここまでの結果
こうなった。そんで補間を効かすと
for (let index = 4; index < trnsdata.data.length; index += 8) {
var r = (trnsdata.data[index - 4] + trnsdata.data[index + 4]) / 2;
var g = (trnsdata.data[index - 4 + 1] + trnsdata.data[index + 4 + 1]) / 2;
var b = (trnsdata.data[index - 4 + 2] + trnsdata.data[index + 4 + 2]) / 2;
var a = (trnsdata.data[index - 4 + 3] + trnsdata.data[index + 4 + 3]) / 2;
trnsdata.data[index] = r;
trnsdata.data[index + 1] = g;
trnsdata.data[index + 2] = b;
trnsdata.data[index + 3] = a;
}
こんなー
おー、いーんじゃない?
分割して上下に結合
計算が大変。なんとか
var halfwidth = trnsdata.width / 2;
var rowsize = trnsdata.width * 4;
var ti = 0;
for (let ih = 1; ih <= trnsdata.height; ih++) {
for (let i = 0; i < halfwidth * 4; i++) {
var idxt = rowsize * ih - halfwidth * 4;
tempdata.data[ti] = trnsdata.data[idxt + i];
ti++;
}
}
for (let ih = 1; ih <= trnsdata.height; ih++) {
for (let i = 0; i < halfwidth * 4; i++) {
var idxt = i + trnsdata.width * 4 * (ih - 1);
tempdata.data[ti] = trnsdata.data[idxt];
ti++;
}
}
こんな感じに。実行すると
やったー!とりあえず1回こねれた~
複数回こねられるようにする
いっぱいこねたい。
回数を設定できるようにする
<input type="range" id="slider" min="1" max="10" value="5"><label> 5回こねる</label><br><br>
これなー。
var range = document.getElementById("slider");
function changeLabel() {
var label = document.getElementsByTagName("label");
label[0].innerText = " " + range.value + "回こねる";
}
range.addEventListener("input", changeLabel);
これもー。あとはfor?全部括って
for (let idxc = 0; idxc < tempdata.data.length; idxc++) {
imagedata.data[idxc] = tempdata.data[idxc];
}
これも追加。結果
右上になんか変なのがつくし水平中心が埋まんねーけどできた!
できあがり
https://dalomo.net/app/bakers_map.html
まんぞく~^^
参考
https://www.tam-tam.co.jp/tipsnote/javascript/post13538.html
https://mementoo.info/archives/1617
https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/change_event
https://developer.mozilla.org/ja/docs/Web/HTML/Element/button
https://code-kitchen.dev/html/button/
https://qiita.com/rubytomato@github/items/d4716c41a2d15c64f791#htmlformatmaxpreservenewlines
https://developer.mozilla.org/ja/docs/Web/API/ImageData
https://developer.mozilla.org/ja/docs/Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas
https://developer.mozilla.org/ja/docs/Web/HTML/Element/input/range
宇宙パズル 99ピースを作った ミルクパズル・ホワイトパズル・無地パズル
宇宙パズル
宇宙兄弟読んで、いつかやってみたいなーと思ってたんだけど、先日手に入ったのでやってみることにした。
パッケージは簡素。
時系列順
スタート
とりま端ピースと中ピースで分ける
3分経過
角と土と凹に分けた
13分経過
1辺完成。ほぼ総当たりである。
20分経過
2辺完成。意外とできる。
26分経過
3辺完成。ここまではヨユー?
29分経過
外枠完成。さぁここから。
33分経過
中ピースのうちでも、太いキと細いキのピースがあるみたいなので分けておいてみる。太いのと細いのは交互に並ぶみたいだ。
47分経過
太いキの中からようやく1ピース見つけ出す。
1時間31分経過
10ピース入ったよ記念。中やり始めてここまで1ピース6分ぐらいなのかな。ほんとか?
2時間8分経過
中の4分の1ぐらいかな。1行ずつやってくつもりが意外とあれ?これハマりそうっつって入ることがある。
2時間31分経過
ようやく半分いくかいかないかぐらい…。
ちょっと飽きてきたので引っくり返してやっていく。
3時間6分経過
もうちょい!ここまでくるともう早そう。
3時間12分経過
ラスト1ピース!
完成!!!やったね~!
完成
百均でポストカードフレームを買って飾ってみた。もっと何日もかかるかと思ってたけど、意外と早く終われてよかった^^



























































