ローポリピカチュウ!
2016年7月31日日曜日
2016年7月30日土曜日
PocketChipのPico-8でLifeGame作ってみた
とりあえず定番から、
以下にソースも載せとく
JavaScript版と比べてみると、わりとそのままだなってのがわかると思う
ar={}
function _init()
cls()
for i=0,31 do
ar[i] = {}
for j=0,31 do
ar[i][j] = flr(rnd(2))
end
end
end
function lput(x,y,c,f)
xx = x*4
yy = y*4
if f==1 then
rectfill(xx,yy,xx+4,yy+4,c)
else
rect(xx,yy,xx+4,yy+4,c)
end
end
function copybuff()
for i=1,30 do
ar[i][0] = ar[i][30]
ar[i][31] = ar[i][1]
end
for j=1,30 do
ar[0][j] = ar[30][j]
ar[31][j] = ar[1][j]
end
ar[0][0] = ar[30][30]
ar[31][31] = ar[1][1]
ar[0][31] = ar[30][1]
ar[31][0] = ar[1][30]
end
function deadoralive()
br = {}
for i=0,31 do
br[i] = {}
for j=0,31 do
br[i][j] = ar[i][j]
end
end
for i=1,30 do
br[i] = {}
for j=0,31 do
br[i][j] = ar[i][j]
end
end
for i=1,30 do
for j=1,30 do
cnt = br[i-1][j-1] + br[i][j-1] + br[i+1][j-1]
+ br[i-1][j ] + br[i+1][j ]
+ br[i-1][j+1] + br[i][j+1] + br[i+1][j+1]
if br[i][j]==1 and (cnt==2 or cnt==3) then
elseif br[i][j]==0 and cnt==2 then
elseif br[i][j]==0 and cnt==3 then
ar[i][j] = 1
else
ar[i][j] = 0
end
end
end
end
function draw()
for i=1,30 do
for j=1,30 do
lput(i,j,1,1)
if ar[i][j]==1 then
lput(i,j,7,1)
else
lput(i,j,2,0)
end
end
end
end
function _draw()
copybuff()
deadoralive()
draw()
end
2016年7月26日火曜日
lifegame (JavaScript)
lifegame 作ってみた
短くするのが目的ではなく、何をしてるのか分かるように書いたつもり
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width" />
<title>lifegame</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>lifegame</h1>
<canvas id ="c" width="300" height="300" />
<script src="script.js"></script>
</body>
</html>
=====Javascript=====
window.addEventListener('load', init(30,30), false);
function init(m,n){
// 横方向の配列作って、
var la = new Array();
// 縦方向に配列を追加する
for(i=0;i<m+2;i++){
la[i] = new Array();
for(j=0;j<n+2;j++){
la[i][j] = Math.floor(Math.random()*2);
}
}
DrawProc(la,m,n);
}
function DrawProc(la,m,n)
{
CopyBuff(la,m,n);
DeadOrAlive(la,m,n);
draw(la,m,n);
setTimeout(DrawProc, 100,la,m,n);
}
function CopyBuff(la,m,n)
{
// 上下をコピー
for(i=1;i<m+1;i++){
la[i][0] = la[i][n];
la[i][n+1] = la[i][1];
}
// 左右をコピー
for(j=1;j<n+1;j++){
la[0 ][j] = la[m][j];
la[m+1][j] = la[1][j];
}
// 四隅をコピー
la[ 0][ 0] = la[m][n];
la[m+1][n+1] = la[1][1];
la[ 0][n+1] = la[m][1];
la[m+1][ 0] = la[1][n];
}
function DeadOrAlive(la,m,n)
{
// la から lbにコピー
var lb = new Array();
for(i=0;i<m+2;i++){
lb[i] = new Array();
for(j=0;j<n+2;j++){
lb[i][j] = la[i][j];
}
}
// lb を評価しながらla に設定
for(i=1;i<m+1;i++){
for(j=1;j<n+1;j++){
var cnt = lb[i-1][j-1]+lb[i][j-1]+lb[i+1][j-1]
+ lb[i-1][j ] +lb[i+1][j ]
+ lb[i-1][j+1]+lb[i][j+1]+lb[i+1][j+1];
if(lb[i][j]==1&&(cnt==2||cnt==3)){
// 生きててカウントが2か3
// そのまま生きる
}else if(lb[i][j]==0&&cnt==2){
// そのまま死んどく
}else if(lb[i][j]==0&&cnt==3){
// 生まれる
la[i][j] = 1;
}else{
// それ以外は死
la[i][j] = 0;
}
}
}
}
function draw(la,m,n){
var canvas = document.getElementById('c');
var ctx = canvas.getContext('2d');
ctx.beginPath();
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if (la[i+1][j+1]==1){
ctx.fillStyle = "white";
ctx.fillRect(i*10, j*10, 10, 10);
}else{
ctx.fillStyle = "gray";
ctx.fillRect(i*10, j*10, 10, 10);
ctx.strokeStyle = "white";
ctx.strokeRect(i*10, j*10, 10, 10);
}
}
}
}
=====css=====
@charset "UTF-8";
#c {
color: gray;
background-color:gray;
}
2016年7月17日日曜日
重複しない乱数生成(JavaScript)
あまりにも考えなしに重複しない乱数生成とかウェブで公開している連中がいるので、正解をここに上げとく
ちなみに不正解なのは、
一度出た乱数を除外したり、配列に入れといてかき混ぜたりするやり方です。
なんで不正解なのかよく考えて欲しい。
下のやり方は、配列に入れといて、出たらその数を消すやり方
いわゆる物理的世界でのビンゴゲームと一緒のやり方だ。
ついでに左からのゼロ補完もやってる
文字の妥当性チェックは面倒なので数値かどうかだけ、マイナスだったり小数だったりはチェックしてない
----html----
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width" />
<title>重複のない乱数</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>重複のない乱数</h1>
乱数の個数<br>
<input type=text id="num" /><input type =button value = "開始" onClick="Start()" />
<div id="test"></div>
<script src="script.js"></script>
</body>
</html>
----css----
@charset "UTF-8";
#test {
color: blue;
}
window.addEventListener('load', function(e) {
// ここでは特に何もしない
}, false);
function initCollection(n,nums) {
// nums 配列に1-nをセットする
for(var i=0;i<n;i++){
nums[i] = i+1;
}
}
function Start(){
// 配列を定義
var nums = new Array();
// test のエリアを消す
document.querySelector('#test').innerHTML = "";
// 入力された値を取得
var n = document.getElementById("num").value;
// 数値判定
if(isNaN(n)){
window.alert("数値を入れてください");
document.getElementById("num").value = "";
return;
}
// nums 配列を初期化
initCollection(n,nums);
// zero 補完用文字列を準備
var nLen = n.length
var zero='';
for(var i=0;i<nLen;i++){
zero += '0';
}
var cnt = 1;
for(var i=n;i>0;i--){
// 乱数生成
var rnd = Math.floor(Math.random()*i);
// カウントとnums のrnd番目を表示
document.querySelector('#test').innerHTML +=
(zero+cnt).slice(-nLen) +':' + nums[rnd]+ '<br>';
// rnd 番目を削除
nums.splice(rnd,1);
// カウントをインクリメント
cnt++;
}
}
2016年7月11日月曜日
THA-8 (DN-12898)オペアンプ交換
THA-8は上海問屋の真空管ポタアンなのだが、イーケージャパンのTU-HP01と構成が似ていて、オペアンプもMUSE8820が使われている。
しかも、おあつらえ向きに基板にソケットを介してささってる。
分解には100均の六角レンチを使って、1.3mmでボリュームを外し、1.5mmで四隅のネジを外せばいい
ということでお約束のオペアンプ交換をしてみた。
秋月でMUSE02を求めたが今日は切れてて二時に仕入れるので三時くらいに来てもらえればあると思うとのこと、あちこちフラついて三時に行って目的の物をようやくゲットした。
家で取り替えてみたところ、
やはりかなり変わる。
音質は全く別物になった。
真空管の力とか余り感じないが、
それでも人の声の帯域には艶がでたかな?
MUSE02 で音は全体域で粒が揃った感じになった。
iPhone6 Plus + NePlayer + DN-10101 USB DAC + THA-8(MUSE02)という構成だが、この変化には結構満足している。
DN-10101 は音がガシャガシャになるのだが、ポタアンを介すと聞きやすくなる。
2016年7月2日土曜日
Repetier Host 1.6.2
随分動きが変わった。
というかまともに動くようになったらしい。
まだ調整中だが、
1.モーターのアクセラレーションがきちんと反映されているようだ
2.RodRadiusがきちんと反映されるようだ。
上記2点は確実じゃないけど、モータのアクセラレーションが今まで1000とかだったのだが、100くらいにしないとおもいっきり脱調したので1はほぼ確定。今までなぜ1000で動いていたのか不明でもある。
2に関しては、その後XYZのオフセット調整をしていて、中心位置の設定を今まですごい感覚的にやっていたのだが、きちんと測った通りになった(ような気がする)ので多分ここも変わったのだと思う。
ファームを変えていないで動きが変わったということなので、おそらく今までずっと長いことおかしな挙動をし続けていたということになる。
ちなみに自分が3DプリンタをRepetierで動かし始めたのが去年の8月だ。
というかまともに動くようになったらしい。
まだ調整中だが、
1.モーターのアクセラレーションがきちんと反映されているようだ
2.RodRadiusがきちんと反映されるようだ。
上記2点は確実じゃないけど、モータのアクセラレーションが今まで1000とかだったのだが、100くらいにしないとおもいっきり脱調したので1はほぼ確定。今までなぜ1000で動いていたのか不明でもある。
2に関しては、その後XYZのオフセット調整をしていて、中心位置の設定を今まですごい感覚的にやっていたのだが、きちんと測った通りになった(ような気がする)ので多分ここも変わったのだと思う。
ファームを変えていないで動きが変わったということなので、おそらく今までずっと長いことおかしな挙動をし続けていたということになる。
ちなみに自分が3DプリンタをRepetierで動かし始めたのが去年の8月だ。
2016年6月29日水曜日
Win7SP1でADOのプログラムする際のヤバい話
これはWin7SP1で開発してる人限定の話だが、ADOのGUID が変わってて、他のマシンでは実行出来無いものがビルドされるらしい。
今更ADOとか関係ない人が多いと思うけど、Win7SP1で開発してる人は要注意だ。
対策としては
対策としては
#import msado15.dll というのをやめて
#import msado60.tlb にするといいらしい。
https://support.microsoft.com/en-us/kb/2640696
んで、そもそもそのmsado60.tlbがない場合、
上記サイトから落としてパッチを充てるってことになる。
全マシンじゃない。
繰り返して言うけどWin7SP1で開発している場合の話だ。
2016年6月25日土曜日
論理、倫理、哲学の話
結論から書きますが、この3つの中で一番重要なのは論理である。
倫理やら道徳やらで人間を殺してはいけない理由を説明しても理解できないだろう
論理的に、それがどんなに特にならないことかを説明することはできるだろうが、
人を殺したら地獄に落ちますよ!とか便所から手が出てくるよ!って説明しても、
今の子に通じるわけがない。
哲学なんてのは、自分から見たらそもそもソクラテスで終わってることなんで、
勝手にごちゃごちゃ言ってりゃいいと思う。
どうぞ勝手に論理の伴わない議論をなさってください。
論理が身につかないまま育ってしまうと、
たとえばどっかの国の首相のように、
国民に説明しますと言っておいて何の説明にもなっていなかったり、
聞いていた国民も、何か説明したんだなぁ程度で分かった気になったりするのである。
こういう論理的思考ができない人間を駆逐するためにも、
小学生から論理的思考を身につけさせる教育は重要である。
倫理やら道徳やらで人間を殺してはいけない理由を説明しても理解できないだろう
論理的に、それがどんなに特にならないことかを説明することはできるだろうが、
人を殺したら地獄に落ちますよ!とか便所から手が出てくるよ!って説明しても、
今の子に通じるわけがない。
哲学なんてのは、自分から見たらそもそもソクラテスで終わってることなんで、
勝手にごちゃごちゃ言ってりゃいいと思う。
どうぞ勝手に論理の伴わない議論をなさってください。
論理が身につかないまま育ってしまうと、
たとえばどっかの国の首相のように、
国民に説明しますと言っておいて何の説明にもなっていなかったり、
聞いていた国民も、何か説明したんだなぁ程度で分かった気になったりするのである。
こういう論理的思考ができない人間を駆逐するためにも、
小学生から論理的思考を身につけさせる教育は重要である。
FLEKS3D
すげーですよこれ!
しっかりと食いつきます!
そんで、ぺりっと剥がれます!
BuildTak も使いましたが、こちらのが良い!
思わず4枚購入しましたが、劣化しないんじゃないかなぁ?
ABS はまだやってません。
取り替えるの面倒なのです。
登録:
投稿 (Atom)
-
どうも書かなくてはならないネタが出来てしまった。 マルチスレッドには欠かせないSleep(0)についてだ。 自分はSleep(0)を多用していた。 MSDNの記述 によると 「中断時間として 0ms を指定してこの関数を呼び出すと、現在のスレッドは自らに割り当てられている...
-
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-bindi...









