2016年11月19日土曜日

ownCloud BackupScript一部変更


せっかく6時間ごとにSQLDUMPしているのに無くなってしまうのはもったいないので、
`date +"%Y%m%d_%H%M%S"`にしておいた。

んで、バックアップで残す日付は +3 じゃなくて +0 にしておいた。
わりとSQLDUMPの容量がでかくて、19Mくらいになってる。

2016年11月12日土曜日

ownCloud on Raspberry Pi with Backup

今日、HDDが届いたのでバックアップするように設定する。
まずは普通につなぐ

sudo fdisk -l

Device     Boot Start        End    Sectors  Size Id Type

/dev/sdb1          64 3907029119 3907029056  1.8T  7 HPFS/NTFS/exFAT

今度はsdb1なんだな

では、フォーマット
sudo mkfs.ext4 -m 0.001 /dev/sdb1

マウント場所を作る
sudo mkdir /mnt/hdd2

んで、マウント
sudo mount /dev/sdb1 /mnt/hdd2

UUIDを確認
sudo blkid /dev/sdb1

fstabに書き込み
sudo vi /etc/fstab
UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" /mnt/hdd2 ext4 defaults 0 0

XXXのとこはUUIDを書く

バックアップ用のフォルダを作る
mkdir /mnt/hdd2/backup
mkdir /mnt/hdd2/log
mkdir /mnt/hdd2/sqldump

んで、Scripts作る
sudo vi scripts/oc-backup.sh

#!/bin/bash

date
sudo rsync -avz --delete /var/www/owncloud/config /mnt/hdd1/data /mnt/hdd2/backup | tail -n 2

sudo mysqldump --lock-tables -h localhost -u ユーザ名 -pXXXXXXXX データベース > /mnt/hdd2/sqldump/owncloud-dbbackup_`date +"%Y%m%d"`.bak | tail -n 2

exit 0

んで、スクリプトにx付けとく
chomod +x oc-backup.sh


Cronに書いとく
sudo crontab -e

0 0,6,12,18 * * * /home/UserName/scripts/oc-backup.sh >> /mnt/hdd2/log/oc-backup.log

これで、6時間おきにバックアップが行われる。
sqldumpは日付ごとに作られるから、たまに様子見て消さないと・・・てのが面倒な気がする・・・
ので、以下のコマンドもさっきのスクリプトに追加


sudo find /mnt/hdd2/sqldump/ -name '*.bak' -mtime +3 -delete





2016年11月7日月曜日

ownCloud on Raspberry Pi

こちらを参考に、ownCloudをRaspberryPiModel3に設定した。
https://normally.online/2016/04/29/owncloud-9-0-1-on-raspberry-pi-3-step-by-step/

LetsEncryptてのがあるんですね、知りませんでした。
証明書はCronで毎月更新するようにしておきました。
やり方はまるっきりサイトの通りです
UserNameのホームにletsencrypt入れてるので、それを動くようにしときました。


00 06 24 * * /etc/init.d/nginx stop && /home/UserName/letsencrypt/letsencrypt-auto renew --force-renew && /etc/init.d/nginx start


DDNSはこちらのサイトを参考に設定しました。
http://qiita.com/ukatawagatik/items/d087008a14beb509b846

まだバックアップ先が無いので、
今度HDDを増設し、rsyncで同期させたり、cronでDBのバックアップしとかないとなぁ

それにしてもownCloudはめちゃ便利、
去年Pydioサーバが落雷のサージで壊れてから、
ようやくownCloudで会社用の共有スペースが用意できました。

それとHDDの停止についてはこちらを参考にしました。
http://kassyjp.ninja-web.net/ras/jessie/spindown.htm

適当な場所に以下のスクリプトを作成

#!/bin/sh

if [ $# -lt 2 ]; then
        echo "not enough arguments supplied."
        echo "hdd_spindown.sh [UUID] [INTERVAL]"
        exit 0
fi

disk=`findfs UUID="$1"`
interval=$2

count=$interval
up=1

if [ -z $disk ]; then
        #echo "findfs error"
        exit 1
fi

disk=`echo "$disk" |sed -e "s@/dev/@@"`

state=`grep " $disk " /proc/diskstats`

while [ true ]; do
        sleep 10
        count=$(($count-10))
        newstate=`grep " $disk " /proc/diskstats`
        if [ "$state" = "$newstate" ]; then
                if [ $count -lt 0 ]; then
                        count=$interval
                        if [ $up = 1 ]; then
                                #echo -e "spin-down"
                                sync
                                state=`grep " $disk " /proc/diskstats`
                                sdparm --command=stop -r /dev/$disk > /dev/null 2>&1
                                up=0
                        fi
                fi
        else
                #echo -e "drive is up"
                count=$interval
                state="$newstate"
                up=1
        fi
done


んで、サービスで停止するように設定
sudo vi /lib/systemd/system/user_hdd_spindown.service

[Unit]
Description=hdd spindown by sdparm
After=mnt-hdd1.mount

[Service]
ExecStart=/path to script/usbhdd_spindown.sh XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 60 > /dev/null 2>&1
KillMode=process
Type=simple
Restart=always

[Install]
WantedBy=multi-user.target

なぜか、元記事はRestart=noだったので、alwaysに変えときました。


2016年11月6日日曜日

お気に入りのマグカップ

10月30日、武蔵美に行く途中で売られてたマグカップ
すぐに割ってしまう方なので、数年ごとにこういうの買ってる。




2016年11月5日土曜日

iPhone7+モバイルSUICAの悲劇

自分の場合、様々な地雷を踏みまくりました。
モバイルSUICAにSUICA定期を取り込んで、
基本情報を入力、
その後、クレジットカードの登録をしようとして、登録できなかった。

そのうち、ログイン画面になったのだが、パスワードを入れてもログインできない(1)
パスワードリセットを試み、メアドに届いたリンクからパスワードリセットをしようとしても、基本情報が異なりますと言われ、そこから進めない(2)

八方塞がりだ。
ログイン出来ないから退会も出来ない・・・
仕方なくコールセンターにかけ続けた。

しかし、とにかくモバイルSUICA コールセンターはつながりません。
一度なんて10時ぴったりにかけ、何度かコールされて繋がった後、
「営業時間は午前10時から・・・」のメッセージが流れ、
向こう側から通話が切られたことも有りました。

んで、先日11月5日、
18時半にようやく繋がり、
メニュー番号の4を選んで、
「ただいま大変混雑していて・・・」のメッセージを三十分聞き続け、
辛抱して待ったところ、19時丁度にオペレータに繋がりました。

オペレータによると、、、
お財布携帯(ガラケー)を使っていた時に、
モバイルSUICAに登録していたクレジットカード履歴が残っていて、
そのカードの登録を何度も試みた結果、
ログインできないようにロックがかかっていた。
これが(1)の理由です。

SUICAの取り込みをすると、
登録情報の漢字姓名がカタカナで登録されます。
これが(2)の理由です。

そこで、
オペレータに漢字氏名に直してもらい、
パスワードも作り直し、
ロックも外し、カード登録し、
ようやく普通に使えるようになった。
嵌まりすぎです。
オペレータになんとかしてもらわないと、どうにもならないじゃん!

しかし、今回の件は、
オペレータが悪いわけでもなんでもなく、
JRという会社に問題があると言わざるを得ません。

同じようなことで困っている方へ、コールセンターにつながることをお祈りします。

2016年10月18日火曜日

秋月のLCFメーター

結構使えるなぁ、ゲルマニウムラジオのコイル作るの凄い楽
壊れたコンデンサも分かるしなぁ


2016年10月2日日曜日

Prometheus V2 届きました

KickStarterで、Prometheus V2前提のマルチフィラメントアダプターを支援したのだが、そのアダプターはPrometheus V2 前提のアダプターのため、必要になって手に入れてみた。
こちらが、そのプロジェクト
https://www.kickstarter.com/projects/811909269/the-prometheus-system-intuitive-multi-filament-3d?ref=user_menu

こちらは大体組み上がったところ
とってもコンパクトだ。


で、コレがPrometheusV2で刷ってる所だ。




巻のきつい曲がったフィラメントでもまっすぐすっきり入ってくれる。
しかし、もしかして・・・と思っていたら案の定、一度詰まってしまった。
説明にはリトラクションがTZの長さ以上にならないようにしろと書かれていて、PLAの場合2mmと書かれていたのでそういう構造になるように組み立てた。
しかし、自分のスライサー設定(CuraEngine)では6mmにしていたため、
もしかして詰まるかなぁと思っていた。

さて、早速詰まったので、なんとかしないといけない。
サイトの説明によると、Prometheus V2の軸は内部が化学的に加工されているので、
今までのようにガスで炙ったりしてはいけない。
Prometheus V2で詰まる場合、一度フィラメントを引き抜いてもう一度入れればちゃんと出てくる。
ヒートシンクファンがあるから、詰まるとしてもその下の2cmの範囲だけだ。
他に詰まったり、漏れたりする構造では無いので、
ノズルを温めてフィラメントを抜けば、プラスチックの解けた部分は軸を通ってくる間に冷えて整形される。
(このような構造のためKickStarterにあるような多色刷りアダプターが作れるのだ。)

引き抜いたフィラメントの先端をチェックし、
必要なら整えて入れ直せばちゃんと出てくる。
そういう内部構造なのだ。

うんうん、ちゃんと出てきた。
このクーラーファンは絶対に止めてはいけないな、止めたら最後だと思ったほうがいい。
もし止めたら、ヒーターの熱が軸に伝わり、
軸の大部分でフィラメントが溶けて詰まりまくってしまうはずだ。

治ったので、スライサーの設定でリトラクションを2mmにして刷り直した。
今度は詰まらずきちんと刷れたが、
レイヤーファンが無いため、このような有様・・・
こんな質の悪い仕上がりは初めて見た・・・
今までうまく出来ていたのはレイヤーファンがあったからなんだなぁ・・・

うーん、ひでー・・・
レイヤーファンが無いとこんなにグデグデなのか・・・
このときはRepetier Client+CuraEngineで刷ったので、文字の様子もいまいちだ・・・

オーバーハングも垂れまくり・・・
まぁでもファンは静かだし、安定度は上がったと思う。

Prometheus V2についているのはヒートシンクファンのみだ。
12Vで回しっぱなしにするべきだろう。
このファンとは別にレイヤーファンをつけるべきなのだが、いいデザインが無い・・・
どこにどうやってつけようか・・・

こんな形でつけたいんだよなぁ・・・
針金とか糸で巻いてつけちゃうかなぁ?


今のところこんな感じです。
がっかりはしていない。
正直予想通りだ。
レイヤーファンをつけたらまた投稿したい。

2016年9月21日水曜日

BIC SIM

BIC SIM に変えてみた。
ソフトバンクよりは安くなるだろう。
しかし、料金体系はBiglobe SIM と大差無さそうだ。
うちの嫁がBiglobe SIM を使っているが、あくまで感覚的に、BIC SIMと速度面での違いは無い。
BIC SIM  が遅いという評判はどこから立ったのだろうか?
感覚的にはソフトバンクより早い。

木質フィラメント

なかなか、味のある仕上がりになる。
ただの置物で有ればこのフイラメントは良い色合いと質感をもっている。
しかしながら、強度は全く無い。
用意に人力で破壊出来る。

2016年9月19日月曜日

キャリッジ作り直し

ColorfabbXT でキャリッジを作り直しました。

左のカエルは作り直す前で0.2mmピッチ
右のは作り直した後で、0.1mmピッチ



2016年9月17日土曜日

Prometheus V2

https://www.distechautomation.com/pages/user-guide
こちらのインストラクションを見ていたが、TZ に六角ナットが無いのに、軸が固定できるのかなとかなり疑問だった。
たぶん、クルクル回るとは思うのだが、そんなに回転トルクがかかるわけでは無いので、コードがノズルに固定されていれば、軸は回らないのだろう。

Prometheusの組み立て工程を見ていると、ファンは点けっぱなしにしておくのが良いようだ。Prometheusのフィラメント通り道は化学的加工がされているようで、もし詰まったとしてもガストーチで炙ってはいけない。
この化学的加工のために、フィラメントが食いついて外れないという状態にはならないのだと思われる。

オーバーハング対策にはレイヤーファンが必要だと思うが、今のところ良いデザインは見つかっていない。

2016年9月14日水曜日

Cheep Roller Carriage for DLT-180をColorFabbXT で再作成

こちらのデザインを使わせていただいている
http://www.thingiverse.com/thing:566093

とてもいいのだが、最近なんだかグラつくようになってきた。
ColorFabbXTが余っているので、それを使って作りなおすことにした。
250度でクーリング無しで作ったのがコレ


ColorFabbXTは、全然ヒケが無い。
このため、高精度なプリントが出来る。
出来上がった後、力を入れて歪ませてもちゃんと戻ってくれる。
今までPLAで作っていたが、こちらのほうが用途には適しているはずだ。

ところで、今回ファンを全く使わないでいたら、
もう一つ作っている最中に詰まってしまった。
ホットエンドはアッチッチ状態だったので、
やはりある程度はクーリングが必要だということを今回再認識した。

2016年9月13日火曜日

PIKACHU LEGO DUPLO

レゴデュプロというのがあるらしい。
ピカチュウのブロック作ってみた。
といっても単純にThingiverseの作品を組み合わせただけです。

2016年9月9日金曜日

Simplipy3D サポート生成

サポートを生成させてプリントしてみました。


はじめはこんな感じ


手で簡単に取り除けます


仕上がりも綺麗


2016年9月6日火曜日

PICO-8交換品が届いた

8/30 にPICO-8交換品が届きました。
すっかり書くの忘れてました。
これはきちんと動作します。
今までのは一体何が悪いんだろう・・・
金属のボタンの裏面が汚れてるんだろうか
なんにしろ、サポートの対応が意外に良かったのが驚きでした。

2016年9月5日月曜日

Simplify3D

Simplify3Dを導入
結構お高いので躊躇していたが、
Slic3rがまずダメダメで、CuraEngineへ移行ししばらく使っていたのだが、
どうしても刷れない造形物があり、Simplify3Dにお頼みしてみる気になった。

写真ではわかりづらいが、左がSimplify3D、右がCuraEngine
フィラメントの巻きがきつい部分で刷っているにもかかわらず、造形精度が上がった。
本当に写真だとクォリティがそこまで上がったようには見えないだろうが、
なんなのこれ、魔法なの?というくらい感動している。



こちらはCuraEngineではスライス出来なかったEiffel Tower
何も考えないでプリントすることが出来た。



2016年9月1日木曜日

etrex 30 用 マウント

最近余り使っていなかったetrex 30だが、バイクマウント無いかなとAmazon探したら千円しないで見つかった。
しかし、レビューが微妙で、もしかしたらとThingiverseを探したらなんとあるではないか!
プリントしたら結構キツキツだったので、ヤスリかけてみたらスッと入るようになった。
メーカー純正よりいいんじゃね?
あとはネジ止めすれば完成








2016年8月12日金曜日

PocketChip Flash

PocketChipだが、色々インストールしていた所、音が鳴らなくなったので、
Flashしなおしてみた。
1.ファイル退避
  といっても、pico-8で試し書きしたlifegame.p8
  くらいしか退避しておくものが無い・・・
  PICO-8のフォルダは
  ~/.lexaloffle/pico-8/carts 以下にある。
  ネットワークフォルダにでもコピペしておくと良い
  (使ったこと無いけど、USBドライブにバックアップしておいてもいいかも?)
2.コネクタ結線
  PocketChipからChipをはすし、
  GroundとFELをコネクタでつなぐ(自分はブレッドボード用の線で繋いだ)
3.Flash作業
  最初Macでやってみたがダメ、USB3だとダメらしい。
  ThinkpadX201TabletのUSB3じゃないUSB端子を使うことにした。
  Chromeをデフォルトブラウザにして、
  こちらのサイトへ行き、http://pcflash.getchip.com/
  PocketChip4.3をつつくと、最初にドライバを入れることになる。
  ドライバを認識させてから、USBでPocketChipと繋いで、
  Flash開始
  20分くらいかかったけど、なんとか終わり、音も出るようになった。
4.あとは ネットワーク設定をしたり、
  sudo apt-get update, sudo-apt-get upgrade したり、
  先程退避したファイルを戻しておしまい。

2016年8月10日水曜日

3D Printer Hot End

Hot Endについて書いておきたい
https://www.youtube.com/watch?v=icLKTOCH9VQ
詰まるのがよっぽど嫌だったのだろう、
とうとう水冷を作った人がいる。
上記URLのレビューによれば、品質は非常に残念な結果だ。

ノズルの重要な点は以下
(1)詰まりにくい
   詰まりにくくするには、溶ける部分が多いとダメ、
   ヒートシンク部分がきちんと冷やされないと、
   上の方まで溶けて、押しても押せなくなって詰まる。
   理想としてはノズルの直前まで、個体で居て欲しい。
(2)高温に出来る
   上の方が溶けないように樹脂を使った物もあるが、
   これだと高温に出来ない。
   高温にできないと様々な素材に対応出来ない。
   (例えば、ColorFabXTとか)
(3)仕上がりが綺麗
   ・アルミブロックに上下からネジが入り込む構造だと、
    アルミブロックの上下からから材料が漏れる。
    漏れる場合は、水道工事用のテープなどをノズルやネジに巻き、    ガスケットのようにして漏れを塞ぐと良い。
    さらに、加熱状態で、もう一度締め込むと良い。
     ノズルが長く、上方に伸び、
    PTFEチューブまで届く構造なら漏れるところが無い。
   ・糸を引かない構造    リトラクションをいくらやっても、
    溶けた材料がノズル内部に溜まっていれば糸をひく、
    シャッターや蓋をつけられないか等、色々アイデアもあるが、
    アルミブロックの体積が多いとその分溶けてるので、
    リトラクションしても無駄。
    引っ込めても、中で溶けてるので糸をひく。
    理想としては、本当に直前まで個体で居て欲しい。
    それが無理ならアルミブロックは5mm位の薄さで有って欲しい。
    VolcanoやPicoはアルミブロックの厚みがかなりあるので、
    相当糸を引くと思う。
   ・ノズルの加工が綺麗であること
    ノズルから出た材料は少し潰されながら引きずられて積層される。
    引きずられる時に前後左右どの方向に動いても、
    綺麗に押しつぶされるように綺麗な加工状態である必要がある。





2016年8月9日火曜日

PICO-8の書き方

https://www.youtube.com/watch?v=ZuaLuMhwcc8
こちらを参考にしました。


英語分からなくても動画見てりゃ分かると思う。

(実際、英語喋ってないで、「お!」とか「あぁ!」とか「ハァハァ」言ってるだけなんで)
まぁ、でも 分かんないかもしれないんで、やり方書いておきます。
(1)PICO-8が起動したらENTER押してコンソールへ
(2)コンソールからREBOOTと入れてENTER
(3)再起動するのでENTERを押すとEDITできます
(4)さらにENTERをするとコンソールへ移るのでRUNで実行
(5)コンソールでSAVE [ファイル名]で保存できます。

(6)コンソールでHELPと入れると色々出てくるんで、後は自分でやってみてください。
 

補足1:初期化は_INIT、画面書き換えの直前は_UPDATE、画面書き換えは_DRAWというファンクション名で記述すれば良いです。
 

補足2:言語はLUAだけど、Math系ライブラリは短縮形で実装されています。こちらを参考にしてください。https://gist.github.com/josefnpat/bfe4aaa5bbb44f572cd0 math.randomはrnd()を使えとか書かれています。

FLEKS3Dその後

みんな買え!
BuildTak より断然良いぞ!
ただし、ABSはやはりヒートベッドつけとかないとダメ!
面倒くさいんで最近ABS全然やってない。
PLAのが匂わないし、PLA系統がもっと進化してくれることを切に願います。

2016年8月1日月曜日

PocketChip Keyboard issue

https://bbs.nextthing.co/t/attempting-to-fix-non-working-keys-and-a-warning/6207/6

本当に残念なことだけど、PocketChipのキーボードが効かないという問題があるようだ。
BackSpaceとENTERをが効かないという人が多いが、自分の手持ちの1台もまったく同じ症状だった。
その1台は社員用に買ったもので、すぐに渡してしまったので、気がつくのが遅れた。
サポートに連絡して、「交換するよ」と返事を頂いている。

基盤に貼り付ける金属のシートがまずいようで、接触が悪いみたいだ。

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度程度では溶けないってことなんで、使ったら使ったでいい結果になるとか書いてありましたねぇ
もう青いテープ使うことはないでしょう!
 

2016年6月22日水曜日

平均貯蓄額から見るアベノミクスの効果


http://m.huffpost.com/jp/entry/10014818

これを見ると、過去最高の貯蓄額ということだが、一見すると老人がすごく貯蓄額をふやしたかのように見える。
しかし、実際老人世代でこんなに貯蓄している人は居ない。
おそらく日本の人口のほんの1パーセント以下の連中が、人口約一億×平均貯蓄額1800万円の貯蓄をしているのだろう。
つまり、この1パーセント以下の人々がアベノミクスで儲かった人です。
その他の人は儲かったとか言ってても誤差にもならないゴミみたいな額儲かったと言ってるんでしょうね

政治が経済に影響を与えらるわけがないのです。
政治が経済に口出すんじゃねぇよってことです。
この程度の影響力しかないのであればアベノミクスをすぐにやめるべきです。
マイナス金利なんて、ただの異常事態ですからね

2016年5月29日日曜日

小学校でのプログラミング教育必修化に反対

常日頃から思っていた。
「プログラマになりたいってのなら、小学生から勉強しやがれ」と、
しかしね、全員に必修てのはあり得ないと思うのだ。


====1.プログラムを勉強するとはどういうことか====

1.プログラムを書くには文章力が必要である。
2.文章を書くには論理的思考が欠かせない。
3.文章が書けても小説が書けるわけではないのと同じで、
  プログラムが書けてもプログラミングできるわけではない。
4.言語がいくらでも増えていくため、
  覚えた言語が使われなくなることは避けられない。

 1から3で、
「プログラムを勉強する前に素直に論理学を必修化しましょう」

4から、
「プログラムから勉強するのは無駄」 となる。

これで終わってもいいんだけど、
最近「頼むからプログラムを勉強しないでくれ」という論説も見るので、
それに倣って続けて考察してみる。



====2.プログラマの人間像====

ここからはプログラムを勉強した結果出来上がる人間像について考察する。

1.現在はマネージャーである。
2.現在もプログラマをしているが○○専門で✖✖等は分からない。
3.現在はなんでもできるスーパープログラマである。
4.承認欲求が強い。
5.わりと給料が安い

1から5まではAND結合ではない。
人間像を作り出すための、ピースである。
こんなもんだろうが、このピースからなる人間像が問題である。

1 AND 4からなる人間像は、たちが悪い。
「プログラマを続けられなくなった」=「論理的思考ができない」タイプが多いのだが、
自分はプログラマの気持ちが分かると勘違いをし、
無駄なプライドがあり、マネージメントを形だけでしか経験していないので、
無茶はスケジュールだけ組んで、何も準備をせず結局大失敗をする。
プログラマの敵であり、マネージャーでさえない。
プログラムをかじってもマネージメントができるようにはならないのだ。
結局彼は
「ただの勘違い野郎」である
この勘違い野郎は自分の記憶も改ざんする。
その結果、
「ああプログラム?あんなん簡単ですよ誰でも出来ますよ」と吹聴するのである。
こういうくだらない発言をくれぐれも信じないように!

2 AND 4からなる人間像は、いずれ仕事がなくなり、
新しいことが覚えられなくなるもプライドが高く現実と乖離することで
「鬱病患者」になる

 3は4ではない。
なんでもできる人間は承認される必要がない。
しかし、「なんでもできる」に近い人はいるが、
「本当になんでもできる」人はそんなに多くはいないだろう。
「なんでもできる」に近い人がいたとしよう、
しかしその人が他人に対しても「なんでもできるようになれ」と強要する場合、
それは「なんでもできる人」ではない。
本当に「なんでもできる人」は自分が「特別」であることを知っている。
だから他人に同じことをやれとは言わない。
そして結局自分が全部やることになり、「一人生産工場」の限界に達する。
その結果、
「社長」になる(ならざるを得なかった。なるべくして成った数少ない人である。)

5についても書いておこう。
「プログラムできても給料が安い」
それでもプログラマになりたいのか?
プログラムを勉強したいのか?
はなはだ疑問である。


====3.まとめ ====
そもそも「プログラムを勉強する」目的はなんだろう?
日本での事情や目論見も踏まえて目的から考え直そう。


1.論理的な思考をできるようになる
2.プログラマが足りないから増やしたい。
3.革新的ソフトウェアの開発ができる人材を増やしたい。
4.プログラマ出身の社長は優秀なので、プログラムを勉強させたい。

1のためには「プログラム」というのは良さそうな道具に見える。
しかし、実際には
「プログラムを勉強しても、論理的思考は手に入らない」

2のためだとすると
「大量の不幸な人が発生する」

3のためだとするとかなり勘違いである。 
「革新的ソフトを作るのはプログラマの仕事ではない」

4 のためだとするとかなり安易であり、間違っている。
彼らはプログラマ出身者だから優秀なのではない。
彼らは元々論理的思考に秀で、行動力があり、
夢を具現化する方法論を模索し続けた人々だ。
卵が先か鶏が先かということであり、
「プログラムを勉強したから社長になったわけではない。」


1から4までの目的はプログラムを勉強することで満たせない。
それどころか、「ただの勘違い野郎」「鬱病患者」そして、
「プログラムできても給料が安い」人を増やことになる。

3になるひとは、数少ない「社長」であり、
そうなる人は「プログラムを勉強したから社長になったわけではない」
そうなる人は素養として論理的であり、経営者向きであり、
これは「勉強して身につく物ではないのだ」

以上から「頼むから(誰彼構わず)プログラムを勉強させないでくれ」
言い直すなら「小学校でのプログラミング教育必修化に反対」である。

2016年5月19日木曜日

ThinkPad X201 Tablet 上のWindows10 からVMイメージを作成し、VMWareFusion8で起動までの流れ

1.ThinkPadX201TabletにVMWare VCenter Converter Standaloneをインストール
  VCenterは無料でダウンロード可能

  ※VMWareFusionからエージェントインストールができなかったので、
   直接ThinkPad側にエージェントをインストールして、
   接続も確立させようとしたのだが、イメージの取得まで進まない。
   Fusionからの取得を諦め、VCenterを使うことにした。
  
2.VCenterで外付けドライブにイメージを作成
  ここも結構難しいのだけど、
  自分のイメージを保存する先なのにUNCパスと、
  そこにアクセスするユーザー名とパスワードが必要になる。
  そこで、外付けドライブをフォルダにマップして、
  ネットワークから見れるように共有をかけ、
  そのUNCパスを入れ、
  ThinkPadX201Tabletのユーザー名とパスワードを入れてイメージを作成した。
3.VMWareFusion8でイメージを読み取り再生
  ログイン時点からまったくキーボードが動かない(USBもBluetoothも動かない)
4.スクリーンキーボードを使ってログイン
5.ThinkPadおよびLenovo関連のドライバを全部削除
6.Synapticsが削除できないので以下のコマンドをコマンドプロンプトから実行
rundll32.exe "C:\Program Files\Synaptics\SynTP\SynISDLL.dll",standAloneUninstall
  当然、キーは打てないので、スクリーンキーボードを使うか、
  WEBブラウザでこのページを表示してコマンドプロンプトにコピペして実行する と、
  めでたくアンインストール完了!!

結局このSynapticsが悪かったらしい。
ようやくキーボードが普通に動くようになって、ThinkPadX201Tabletのイメージが動くようになった。
念のため言っておくと、ThinkPadX201TabletにはWindows10がインストールされていたが、OEM版では無い。
おそらくVCenterを使うとOEMだろうがなんだろうがイメージが作れそうな気はする。

上記3の時点でVMWareのサポートに電話したが、まったく頼りにならなかった。
メーカー製PCにインストールされているOSイメージは動かない事が多いので、新規でOSを入れて移行アシスタントで移行して欲しいとのことだった。

VMWareの日本のサポートはその程度だった。
まったく残念である。

2016年5月10日火曜日

Cura Engine

あまり解説する気にはならないのだけど、
みなさんなぜCuraEngine使わないのだろうか?
自分はこれ一択です。
早いし、仕上がりも綺麗だし、サイズもきちんとしています。
Repetier-Hostなら簡単に使えるので、
是非使ってみていただきたい。

写真は、Blenderで作ったネコポストという貯金箱
今はフォントを補足したり、もう少し改良してます。
デザフェスが終わったらThingiverseに置く予定

2016年4月24日日曜日

再び積層ズレ


ものの見事に積層ズレが発生した。
またかなと思って、ファームを最新にしたりEEPROMを1にしたり2にしたけど治らず
何だろうとしばらく悩んで、Y軸のモーターを見てみたら、ギアがたまに空転してる!
おいおい、ネジ緩んでたよ、、、
締め直して積層ズレは直りました。
緩み防止の措置をとるべきかもしれないなぁ


2016年4月5日火曜日

adafruite nrf51822 + WireShark 1.12.1 sniffing BLE thermal Printer PT-280

I got PT-280 Thermal Printer, but I couldn't use it with iOS (iPhone), till I  found GPrinter App on App Store, and I could print QR code by using that app.


Next, I want to make my own App to control Printer, so I try to use console app for BLE devices, but I couldn't control Printer.
I investigate about BLE, but it is not simple protocol.
Maybe I need BLE Protocol Sniffer, I found adafruite nrf51822.

 

Finally I could sniff BLE Protcol between PT-280 and iOS(GPrinter App).
Sniffed data can display by WireShark.
I confirmed Advertising -> Connecting -> Master/Slave -> Sending Data process.
Steps are bellow.

1. Download WireShark 1.12.1 (OSX) and install it.
    (WireShark2 is not work with BLE sniffer)
    Install XQuartz if necessary.(Maybe from Apple)
2. Download ble-sniffer-osx_V1.2.3 from here, and install it.
3. Launch WireShark
   (You should set XQuartz Path <-- Path:Application/Utility/XQuartz)
   Terminate WireShark at this point.
4. Launch ble-sniffer-osx (Exist in Application folder)
    and follow bellow site.
https://learn.adafruit.com/introducing-the-adafruit-bluefruit-le-sniffer/os-x-support


2016年3月15日火曜日

やはりノズルは0.4mm

0.2mmノズルをしばらく使ってみたのだが、
木質素材や ColorFabbXT も試したところ全然出力が安定しない。

しかたないので、やはり0.4mmに戻した。
3Dプリンタの積層型は0.4mmがベストであり、
それ以下にしたい場合は素材も工夫しなければならなくなるだろう。

2016年3月7日月曜日

シタデルペイント

シタデルを使って、PLAの造形物に塗ってみた。
Blackプライマーから塗ったのだが、この通り、下地は完全に隠せる。
あるイベントに参加させていただき、シタデルを、思う存分使わせていただくことができたのだが、使いやすすぎる!
もう買うしか無いだろうこれは!
といいつつまだ買ってない、すみません
ミニチュアフィギュアの世界は初めてだったのだが、このサイズでも大きいそうで、全高25mm位でさらに細かく造形されていないとシタデルの塗り方が生かされないようなのだ。
この造形をした時は0.4mmノズルだったが、0.2mmを使ったところで全高25mmでは顔の造形までは再現できないだろう。
そのレベルだと光学造形でも厳しいと思われる。
CX5フィラメントなどで、後から手作業でディテールアップするとかで無ければ、そのレベルは作れないだろう。
てか、そう考えると人間の手は凄まじい
どうしたらもっともっと細かいものが安定して作れるようになるのだろうか、、、なんとなくカイコが繭を作る様子からやり方を学べたりしそうな気がするんだが、、、

0.2mm ノズル

0.4mmでは、エッフェル塔などのスライスがうまくできなかったので、0.2mmにしてみた。
試しにカエルやルークを刷ってみたが、温度が210度だとたまにコゲが発生し、強度も落ちた。
ルークを200度でプリントし直してみたところ、なかなか良好だった。
ノズルを小径にすると糸引きもかなり軽減される。
もしかしたら、もう少し温度下げたほうがいいのかも、、、以前は190度だったので、後日、試してみようと思う。

2016年3月4日金曜日

DRV8825 to TMC2100

Driver ICの取り付け方、VRefの調整の仕方は他サイトに任せます。
自分はRepetier-Firmを使っているので、
今回その調整したところを箇条書きにします。

1.Invert Directionをアンチェック(人によって違うと思うので最初と逆にすればよい)
2.Allow Quad StepをOff
3.Delay stepper high signalに1をセット
4.Delay stepper direction signalに1をセット
5.Steps/mmを100にセット

VRefとGND間は1.0Vにしても脱調したので、
上記3と4が結構重要なのではないかと思います。

今はVrefとGNDの間は0.74Vにセットしています。
それと1.0Vにするとスゲー発熱するので、危険だと思います。

 結果、ファンの音の方がうるさいと感じるくらい静かになりました。