kozyonikkiのブログ

どこか知の旅に出たときのことを書いていきます。

物理乱数サイコロを作った話

↓↓ 参考にさせてもらったもの ↓↓
github.com
www.zenken.co.jp

今回は物理現象によって作られる乱数を作ってみました。トランジスタを逆接続してなだれ降伏という予測できない雑音を生成しています。

乱数の品質を高めるために雑音発生器を2つ作り、2ビット取得します。その2ビットの値が同じであればその結果を捨てて、違うビットになるまで取得します。

例として...

雑音1雑音2処理
結果を捨てて、もう一度取得する
違うビットなので、雑音2のビット(1)を結果とする  
違うビットなので、雑音2のビット(0)を結果とする
結果を捨てて、もう一度取得する


pdf と違うところ
LCDに表示ではなく7セグメント表示にすることにしました。
2n3904というトランジスタが手元になかったので2SC1815を使っています。

Arduinoのランダム関数と今回作った物理関数を比べてみるとどうだったかというと...

f:id:kozyonikki:20190516193719p:plain
↑ ランダム関数のやつ ↑

f:id:kozyonikki:20190516194305p:plain
↑ 物理乱数のやつ ↑

出やすい数字が固まってしまいました。
今回pdfとは違うトランジスタを使っているため出やすい数字が固まってしまったのかもしれません。

↓↓ 完成品の様子 ↓↓
f:id:kozyonikki:20190516204435j:plain

↓↓ コード ↓↓

/*3ビットの物理乱数を得る
   条件
   ・0,0 → 同じビットが連続しているので捨てて再度2ビット取得する
   ・0,1 → 違うビット同士なので1つ目の「0」を結果として扱う 
   ・1,0 → 違うビット同士なので1つ目の「1」を結果として扱う
   ・1,1 → 同じビットが連続しているので捨てて再度2ビット取得する

   追加で頑張ること
   ・スイッチを押したら乱数を7セグに表示する。
   ・一秒経たないでで押されたら7セグを消す
   ・経ったあと押されたら数字を表示する

*/
#include <MsTimer2.h>

//物理乱数生成の変数
const byte sbit = 13;
const byte rbit = 12;
const int sw = 2;
const int sw1 = 3;

volatile int point = 7;

//sw のチャタリングに関してのプログラム
boolean sw_stable = false;
boolean sw_flag = false;
int sw_stable_count = 0;
const int sw_count_threshold = 1;

boolean sw_stable1 = false;
boolean sw_flag1 = false;
int sw_stable_count1 = 0;
const int sw_count_threshold1 = 1;

byte m = B00000000;
byte a = B00000000;
byte b = B00000000;

void setup() {
  pinMode(sbit, INPUT);
  pinMode(rbit, INPUT);
  pinMode(sw, INPUT);

  //7セグメントで使う変数
  for (int i = 5; i < 12; i++) {
    pinMode(i, OUTPUT);
  }
  Serial.begin(9600);

  MsTimer2::set(20, Timer);
  MsTimer2::start();
}

//ランダムな数値を返す
int PhysicsRnd() {
  m = B00000000;
  for (int i = 1; i < 4;) {

    a = digitalRead(sbit);
    b = digitalRead(rbit);

    if (a == b) {
      //やり直し
    }
    else {
      m <<= 1;
      m |= a;
      i++;
    }
  }
  if (m != 0 && m != 7) {
    return m;
  }
}

//LEDレイアウトを定義
boolean Num_Array[10][7] = {
  {0, 0, 0, 0, 0, 0, 1}, //0
  {1, 1, 0, 0, 1, 1, 1}, //1
  {0, 0, 1, 0, 0, 1, 0}, //2
  {1, 0, 0, 0, 0, 1, 0}, //3
  {1, 1, 0, 0, 1, 0, 0}, //4
  {1, 0, 0, 1, 0, 0, 0}, //5
  {0, 0, 0, 1, 0, 0, 0}, //6
  {1, 1, 0, 0, 0, 0, 1}, //7
  {0, 0, 0, 0, 0, 0, 0}, //8
  {1, 1, 0, 0, 0, 0, 0}  //9
};

//LED表示関数を定義
void NumPrint(int Number) {
  for (int w = 0; w <= 7; w++) {
    digitalWrite(w + 5, -Num_Array[Number][w]);
  }
}

//全てのLEDを非表示にする
void off7SegLED() {
  //for文で2番ピンから8番ピンまでをOFFにする
  for (int i = 5; i < 12; i++) {
    digitalWrite(i, HIGH);
  }
}

void Timer() {
  boolean sw_new = !digitalRead(sw);
  if (sw_stable != sw_new)
  {
    sw_stable_count++;

    if (sw_stable_count == sw_count_threshold) {
      sw_stable = sw_new;
      sw_flag = true;

      sw_stable_count = 0;
    }
  } else {
    sw_stable_count = 0;
  }
}

void Timer1() {
  boolean sw_new1 = !digitalRead(sw1);
  if (sw_stable1 != sw_new1)
  {
    sw_stable_count1++;

    if (sw_stable_count1 == sw_count_threshold1) {
      sw_stable1 = sw_new1;
      sw_flag1 = true;

      sw_stable_count1 = 0;
    }
  } else {
    sw_stable_count1 = 0;
  }
}

void loop() {
  int rnd = PhysicsRnd();
  int rnd1 = random(1,7);
  int a;
  Serial.println(digitalRead(sw));
  
  if (sw_flag && sw_stable) {
    sw_flag = false;
    // swを押したときにしたい処理
    a = rnd;
    NumPrint(a);

    if (sw_flag && !sw_stable)
    {
      sw_flag = false;
      // swを離したときにしたい処理
      NumPrint(a);
      off7SegLED();
    }
  }
  else  if (digitalRead(sw1) == 0) {
    sw_flag1 = false;
    // swを押したときにしたい処理
    a = rnd1;
    NumPrint(a);

    if (digitalRead(sw1) == 1)
    {
      sw_flag1 = false;
      // swを離したときにしたい処理
      NumPrint(a);
      off7SegLED();
    }
  }
}

感想
物理乱数で生成される値の確立が均等ではないのでこれは使えない感じではありますが、乱数の発生方法はいろんな形がありそれぞれメリット・デメリットがあることがわかりました。
物理現象を使った乱数はほかにないのか探してみたいなと思いました。

PyCon mini sappor 2019に行ってやりたいと思ったこと

PyCon mini sappor では、Pythonの歴史からどんなことができるのかがわかり、休憩時間にドーナツが配られ、それを食べつつ、いろんなやりたいがこみ上げたものになりました。

sapporo.pycon.jp

ameblo.jp
↑ スライド等のリンクがまとめられています ↑

その中で作りたいと思ったものがDonkey Car です。光センサーを使ってライントレースカーを作ったことはありますが画像を使って走らせたことはなかったのでどのようなものなのか気になりました。画像を使って車を走らせるには二値化処理という方法がありますが、機械学習をやって自分の車が賢くなっていく過程はどんな感じなのか、自分の思った通りに動くのか気になったのでやってみたいと思いました。

www.donkeycar.com

Donkey Carはセットになっているものがあり値段が結構高かったので(250ドルくらい)、セミナーで紹介されていたタミヤのギヤボックスで作ってみたいなと思いました。
あと、ラズパイカメラを使っていますが、家にあったwebカメラは使えないかと考えています。

自分の作りたい形に車体を作り替えることができ、作りたいものを想像するとわくわくするなと感じました。

自分のラジコンカーを自動操縦に。Donkey Carプロジェクト | FABSHOP.JP -デジタルでものづくり! ファブショップ !

Donkey Car はソースコードや作り方などの情報があるようなので今後作っていきたいです。

ラズパイでC#書けるようにした話

最近何も成長を感じられなかったのでラズパイで遊んでみました。

参考にしたもの
www.maketecheasier.com

まず、Mono公式サイトを見ながらインストール作業をしていきます。
https://www.mono-project.com/download/stable/#download-lin-raspbian

インストールされているかの確認でターミナルに打ち込むとMono C# Shell が起動できます。

$ csharp

インタプリタみたいな動きをしてくれます
f:id:kozyonikki:20190501201803p:plain

でも、C#コンパイラ言語のはずなので、もう少し違う書き方があるはず。

nano ファイル名.cs

nano でコードを書いていきます

例 コード)

using System;

public class Test
{
static void Main ()
{
Console.WriteLine ("これで書けるようになったぜ★");
}
}|

書けたら保存してこれを打つと .exe ファイルができます

mcs ファイル名.cs

最後にこれを書けば何か出力してくれます

mono ファイル名.exe

f:id:kozyonikki:20190501202340p:plain

という感じで今回はここまでです。次はGUI を使えるようにしていきたいと思います。

ゆるい勉強会 ~技術の高さと暖かさ~

今日の旅で出会った知識たち

自分用メモ

インフラとかバックエンドのことを雑にしゃべる
ユーザ認証を強化していかないと質問箱みたいな感じでなりすましとか情報が盗まれてしまうことがわかった。
APIって結局何なの?初心者向けに徹底解説します! | CodeCampus
認証の種類や認証の分類 | しもた帳

Mastodon
マストドンって、なんでこんなに話題になっているの? |TIME&SPACE by KDDI

OAuth
OAuth(オーオース)認証とは | 仕組み・課題・利用例・背景 - 権限認可システム - データ連携ツール | ボクシルマガジン
twitter.com

奨学金返済計算プログラム
奨学金を返済計算するプログラムの結果をみてちょっと悲しくなった工女... だ、大学卒業後がちょっと恐ろしい。
twitter.com

ジョイコンとpythonのお話
switchのジョイスティックをBluetoothでつないで文字とか動かす。工女もやりたい!
↓それに近いことやってる記事かな?↓
https://sp7pc.com/gadget/switch/23121
twitter.com

昨日北海道アプリコンテストの二次審査に行ってきた話
アプリコンテストというのがあることを始めて知った。
↓たぶんこれじゃないかな↓
北海道学生アプリコンテスト2019

顔文字でものを評価できることでそのお店の評価のデータが増えて人気度が正確的になっていきそう。
twitter.com

人力ゲームをなんとかしたい
Unityで起こる失敗とか設定をミスると地獄になっていくんだなということが分かった。Unityでゲームを作れるようにこういうミスにも慣れていきたい。
twitter.com

SDLに触れてみた
くるまとスマホがつながる SDL
こんなコンテストもあるんだ!という発見。
トヨタ | スマートデバイスリンク(SDL)
↓コンテストのページ↓
クルマとスマホがつながるSDLアプリコンテスト|2018
twitter.com

今後の展開
乙4頑張って!
twitter.com
mimomimo-ryo-sakana.hatenablog.com


素因数分解ユークリッドの互除法+Brainfuckで脳みそが破壊された話
Brainfuck 文字書かない。記号だけという破壊力ありすぎ言語。もしかしたらおじいちゃん、おばあちゃん世代の人もかける言語になったり...しないか。
素因数分解ユークリッドの互除法とか計算はPythonが便利なんだなぁ~。
BrainFuckとは
twitter.com

PythonでつくるGUIアプリ
今度Pythonチャレンジしようかなと思わせてくれた発表。Pythonにはいろんなlibraryがあるなぁ~。
【わかりやすく解説】PythonのGUIライブラリを比較10選 おすすめはどれ? | ハジプロ!

機械学習、DeepLearningで精度を上げたりして手書きの文字を認識させるのは根気がいる作業だと思う。
        いぐち かなひろさん

Cloud Foundry を使ってみたオープンソースのクラウド基盤 / Cloud Foundryとは
もう少しほかでプログラミング力をつけてから挑戦したい分野。
twitter.com

DoFp+α ~前代未聞~
自分の発表枠で友人の優秀なドット絵エディタ
について発表をするというのも面白い!
友人のレベルが高くなるほど苦しくなっていきそう。
twitter.com
twitter.com

ターミナル雑記
自分の知識が足りなくて理解できないところもありましたがCUI、ターミナルの世界を知れて面白かったなぁ~。
Windowsで使えるターミナルとシェルのまとめ - Qiita
エスケープシーケンス(エスケープ文字)とは? ~見えない文字を表現する~|データ分析用語を解説 - データビジュアライズで経営を視える化する/graffe グラーフ
最後に明かされたスライド全部ターミナルで動かしているというのは衝撃。

↓ターミナルで動作する紹介記事あったかな?↓
ビジネス - プレゼンテーションのオープンソースは116件! MOONGIFT MOONGIFT

speakerdeck.com

twitter.com

WiFiBluetoothを嗜む
一番できるようになりたいと思った発表。
UDP
用語解説辞典|【公式】NTTPC
何もない日があればもう少しいろんな記事を探して最終的にWiiリモコンの加速度センサーの値が取れたらいいな。
RaspberryPiでWiiコントローラを使用してみる - uepon日々の備忘録
twitter.com

プレゼンをやった話とテクニック
プレゼンは最初の30秒が大切
自己紹介がくるたびに笑ってしまったな...
twitter.com

Androidアプリ開発のお勉強
じゃんけんアプリつくりたいなぁ~。スライドのカラーとかデザインが良かったし、見やすくて今度、発表する機会があれば参考にして作りたい!
twitter.com

最強のノートPC+α
デスクトップクラウドってなに?初心者のあなたもにも分かる!
データ転送レートの単位がkbpsというのが一番笑ってしまった。
twitter.com

DDQNで山登り
【強化学習初心者向け】シンプルな実装例で学ぶQ学習、DQN、DDQN【CartPoleで棒立て:1ファイルで完結、Kearas使用】 - Qiita
数学苦手マンなので難しいそうだけど、Unityで役立ちそう。物理っぽいところも多そう。
twitter.com


ライブコーディングから始めるVJ入門 - karaage. [からあげ]
UnityでVJシステム作ってパフォーマンスした - マルシテイア

ライブコーディングを少し
かっこいい後ろ画面でコード書けるのはいいかも。ライブコーディングの練習したらコード書けるようになってないかな...
これは、チャレンジしてみたい!
twitter.com
northprint.net


感想

悔しさとレベルアップしたい気持ちが襲った勉強会でした。暖かい人たちが集まった楽しい場で、いいところで踏切の音が鳴って笑いをとってくれました。やってみてわかったことを発表、できなかったことも発表してみるというのも大切だなと思いました。

最後に
発表機会をくださって、つたない発表でしたが最後まで聞いてくださってありがとうございました.

Unityでシリアル通信 その1

Arduino のシリアルモニターに映るデータを Unity のゲーム画面で出す

参考にしたもの

UnityとArduinoでSerial通信 - Taka8’s blog
光センサーでArduinoへの入力を試してみる! | Device Plus - デバプラ
Unity側のコードが書けたらスクリーンカメラにコードをドラッグ&ドロップすればいけるはず

作る上で分かったこと

「Edit」から「Project Settings」を選択して「Player」「Other Setting」の中にある「Configuration」の欄のApi Compatibility Level」の選択欄を「.NET 4.x」にする。
f:id:kozyonikki:20190208170823p:plain

なぜこれにしないと動かないかの理由はたぶんこのページに書いてあるはず
Unity で.NET 4.x を使用する - Visual Studio | Microsoft Docs


Arduino のシリアルモニターを開いたまま Unity の再生ボタンを押すとエラーが出る → シリアルモニターを消してもう一度再生ボタンを押すと表示される
Unity でArduino の情報を出力しているときはシリアルモニターで入力された値が見れな

今後やってみたいこと

Arduino を使ってゲームのコントローラーを作る

頑張ること

いろんな人のやったことをコピーさせてもらうのは良いと思うが、そこから応用、自分で考えてものを作っていけるようにする

16歳からみたいい働き方 ~クラウド、ITを駆使しよう!~

富良野市で働き方についての講演があったので行ってみました。

   ↓↓ 講演してくださった方 ↓↓
twitter.com

結論

地域活動や副業でいろんな人に支えてもらいながら社会に貢献できて、仕事に生活が振り回されないよう、仕事の負荷分散がうまくできている会社に働きたいです。


↓↓↓ 以下 まとめられなかった内容たちです。 ↓↓↓

クラウドとITを駆使できると働き方にバリエーションができて一人ひとりの生活の質が上がる!!

10時に出社して1日5時間働く人は正社員になってはいけないのか。
クラウドとITを駆使できれば解決できる。

より長く働ける、クラウドを活用できて、成長できる = 自立した社員を育てる 

自立とは?
孤独に耐えて一人で生きてゆくスキルではない。たくさんの人に支えられて生活すること。会社に寄り掛かるり過ぎると会社がなくなったとき自分も苦しいことになる。
だから、地域活動や副業をすることによってたくさんの人と助け合え、苦しい状況のダメージ軽減をはかる。

↓↓ ITとクラウドで片付けられるものたち ↓↓

・社員のスケージュールをクラウドで共有、確認して仕事をしやすくする
・タイムカードでその人が会社に行かなくても仕事をしているか確認できる。
 (場所情報をクラウドに送って作業管理をしたり...)
・仕事の内容を他の場所にいる人と話す必要が出たらSkypeを使うとか
・FAXもクラウドを使って紙ではなくPDFとかのデータでその人宛に送ってあげる
・伝票も商談だってできる。

ITを使って助け合いを行う ~地域通貨

例)
おじいさんが空き缶が町の落ちてたから町にこれを拾って捨てろといったとする。でもそれは時間がかかるし人の動きとしても悪いから、そのおじいさんが空き缶を捨てて、その証拠に写真でも撮ってそのデータを送れたら3円分の地域通貨をあげるみたいな感じ?

仕事は人間性を問うものなんじゃ...

昔は飛び込み営業でもよかったけど今は違う
今は契約してくれてる人を大切にしてどれだけ長く自社のものを使ってもらうか
= 人間性が重要視されそう

例えば、PTAとか地域活動をしてくれてる八百屋さんの人がいたら、他の八百屋さんがあったときしてない人と比べたら、してる人のところに行きたくなるよね。

働き方改革で必須の2つの要素

労働力の負荷分散 = ウーバーみたいな感じ(好きな時間にタクシードライバーになるみたいなやつ)
他社のは真似できない高い価値の仕事  ↓ 例えば ↓  

saiyoroken.jimdo.com


マルチタスク = コンビニ... 誰でも働けるように分かりやすい操作とか仕事内容に整理されてる → 機械化できそう  

労働の負荷分散によってよくなったもの

www.sbbit.jp


新しいチームワークが生まれる
ひとりの人が一人の人を担当するのではなく複数の人その一人の人を見守る

もし一人だったら、その患者さんが具合悪くなったら旅行に行こうとしていてもその人を助けにいかないといけないという感じになる。

クラウドを使ってその人の情報を見れるようにする。でも、ケアマネージャーさんが医療カルテを見ることはできないようにしてるとかはあるらしい。けれど、薬を飲んだかとかはクラウドで共有して確認する。

複数でやるからこそ私生活を乱されることなく働けてるよねという感じ。

クラウドを駆使して働ける、眠ってる人材を見つけて即戦力になるようにもっていくことが今後必要

良い会社

若い人が将来設計できる
子育て中の人も高齢者も障害者も持てる力が発揮できる
共働きで対等に夫婦が働き続けられることができる
地域内での助け合いができる
働きたいときに働けて、休みたいときに休める
お母さんの介護とかもできて、働ける環境

質問等

パソコンとかを使いたくない高齢者にどう導入していくか? Lineをたくさん使ってもらう。何かと高齢者の方もメッセージアプリを使っているから。とにかくまずはパソコンを使ってもらう。不満だらけだろうが... その中でこれはだめだとかそういうのが出てきたときに見直しをかけていければいいんじゃないだろうか...

セキュリティは書類とデータどっちのほうが危ないか?
書類にGPSつけてあるのみたことないし、取られたら誰が持ってるか特定できそうにないよね。 = 書類のほうが危ない

↓↓ 今回の勉強会で考えた事 ↓↓

仕事の負荷分散をしていかないと一人の人が今は二人分の働きをしてるとしたときに来年には5人分の仕事をしていかなくちゃいけなくなる可能性もありそう。絶対やだ!

負荷分散の難しいところは誰かが仕事内容とかを簡単にするとか、誰でもできるようなものに変換をかけて複数人でやるということをしてくれる人を作らないといけないのでは?

仕事内容を簡単にして仕事を振り分けてくれてかつbotにできることはやってもらうシステムを学校祭期間中に欲しい。

旭川Unity勉強会に参加してみました!

はじめてのUnity


技術を高めるために自分がやってみたいことをやろうということでUnityを始めてみました。Unityをやるうえで知らないと困ること、わからない単語がたくさん。プログラミング、ものを作ることをあまりしてこなかった私にとってなかなか難しい。そんなときに参加させてもらったのが旭川Unity勉強会でした。

どんなことをしていたのか

f:id:kozyonikki:20190126224603p:plain:w400

f:id:kozyonikki:20190126223332p:plain:w400

f:id:kozyonikki:20190126223000p:plain:w400

最初にUnityの操作や機能、使い方の説明をしてもらいました。

次に、コンソールの中にログとしてi に1を足していったものを表示したり、文字を出力しました。 Unityをやった事がない人に説明すると、visual Studio の出力に”Hello World!” を表示してみるようなことをやりました。

最後はドラッグ&ドロップ以外でイラストやゲーム画面に表示させたいものを表示させました。最後のやつは結構難しめではあったのですがとても便利なことを教えてもらいました。

例)
Prefabで同じイラストを他のところでも使いまわせるようにどうするかとか...
Vector 3 でイラストの座標を決めるプログラムをかいたり...
Transform を使ってイラストの位置やサイズを変更したり...
ワールド座標とローカル座標があるということを知ったり...    など

個人的収穫としてはドラッグ&ドロップ以外でイラストや表示させたいものを表示させること、ゲームの規模、やることによってはファイルを自分で作ってわかりやすくしていくテクニックが必要なんだ! という発見がありました。

こんな感じの 第二回 旭川Unity勉強会でした。ありがとうございました。

楽しかった! 次回は 2月9日 を開催予定 としているそうなので興味がある人はぜひ旭川Unity勉強会にきてみてくださいね。

最後に今回の様子が映っているものを張っておこうと思います。
twitter.com