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

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 はまだやってません。
取り替えるの面倒なのです。
ヒートベッド使わないでもいいと聞いてますが、100度程度では溶けないってことなんで、使ったら使ったでいい結果になるとか書いてありましたねぇ
もう青いテープ使うことはないでしょう!