2016年7月30日土曜日

Ultimaker のCubePazzleをうちのデルタプリンタで刷ってみた

なんかこのフィラメント、弱いんだよなぁ

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 作ってみた
短くするのが目的ではなく、何をしてるのか分かるように書いたつもり


=====html=====
<!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;
}



ようやく$9コンピュータのChipが届きました

一つは社員用、もう一つは俺用
とりあえず動作確認

Wi-Fi設定し、ターミナルでlsしてみた
スクロールバーも横に出る
いい感じです
perlも入ってる
vi で打ち込んでみた



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;
}

----js----
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月だ。