SlideShare une entreprise Scribd logo
1  sur  74
Télécharger pour lire hors ligne
Ruby講座




    メイカーを目指す人のための
         mruby
        にむけた試み
         事例(ソーシャル電力需給センサーネットワーク)



             CACAnet Fukuoka/近畿大学
                   山崎重一郎
Ruby講座




      mrubyで
   ゴールドラッシュに
     参加しよう!

          
Ruby講座




 799円のイケアのテーブル
Ruby講座




   人件費競争フリーな製造業
 p  中国製はなぜ安いの?(理由:人件費が安いから)

 p  レーザカッター+CADデータの製造業

         •    レーザーカッターの価格は中国でも日本でも同じ

         •    IKEAは原材料に最適化した国で製造
Ruby講座




        じゃあ、自分も
    IKEAになれるんじゃない?
 p レーザカッターがどんどん安くなっている

 p デザイン=CADデータが勝負!
Ruby講座




              ひょっとして、IKEAより
               上いけるんじゃない?
 p 大量生産しなくてもメーカになれる

         •    顧客の家のスペースに最適化した家具

 p ネットの人々の力を利用できる

         •    世界一のデザインを採用(世界一の階段とか)
Ruby講座
Ruby講座




    サプライチェーンの個人利用
p もとは日本の自動車メーカが作ったシステム

  •    ジャストインタイム方式

p 「個人メーカー」も利用可能

  •    ネット仕入れのアリババとか
Ruby講座




    サプライチェーンの個人利用
p もとは日本の自動車産業が作ったシステム

  •    ジャストインタイム方式

p 個人もネット経由で利用可能になった

  •    ネット仕入れのアリババとか
Ruby講座




   クラウドファウンディング
p ネットで資金調達

   •     銀行  (利息が必要)
   •     ベンチャーキャピタル (上場しろって言われる)
   •     キックスターター ○
         •  開発中の製品の「予約」=「投資」

         •  最低調達目標金額を設定 + 募集期間は30日

         •  目標額が集まらなければ、予約はなしになる

         •  集まれば、カードから引落されて開発資金になる
Ruby講座




  
Ruby講座




 僕が予約=投資したもの
Ruby講座



 arduinoで制御する3Dプリンタ
         15万円!
     福岡市西区にある株式会社ホットプロシード(夫婦でメーカー)
     制御ソフトは「超高性能」オープンソースを利用(原価は極秘)
Ruby講座




   ゴールドラッシュ!


          
Ruby講座




         ビットからアトムへ
 p いまやソフトを商品にするのは難しい

         •    スマフォアプリで一攫千金?

 p ものにすれば、値段を付けて売りやすい

         •    「∼装置」と言い張ればいい
Ruby講座




                 予約=投資
 p ゲームみたいに沢山小さな失敗ができる

         •    期限内に目標額が集まらなければなしになる

 p 予約=市場調査

         •    資金が集まれば、売れることはわかっている

 p コメントで客のニーズが直接わかる

         •    製品化までにどんどん改良できる
Ruby講座




  自分で製造しないメーカー
         クワーキィ社が製品化、製造、販売を受け持つ
          企画やアイデアを投稿した人に売り上げから還元
          試作は3Dプリンタ
          予約が目標まで集まったら製品化はキックスタータと同じ	

                                 デザイン


                               キャッチフレーズ	


                                 商品企画
                                  値付け
Ruby講座
Ruby講座




          
 p  
Ruby講座




         で、本題
p mruby(組み込み用軽量Ruby)

      +
p メーカーズムーブメントの文脈
Ruby講座




                       mruby
 p 軽量Ruby

         •    コンパクト、高速、モジュラリティがすごく高い
         •    コア以外のクラスはmrbgem で組み込む
               •  mrbgemは、make   で静的に組み込む仕組む仕組み

                           アプリ

              http     Regexp       Socket   mrbgem

                         mruby VM
Ruby講座



               組み込みソフトとしての
                 mrubyの使い方
 p C言語が適しているところはCで書く

 p mrubyが便利なところ

         •    テキスト処理、Web接続とか




                httpアクセス
  リモコン	
        テキスト処理
Ruby講座




         mrubyボード登場
 p Enzi、EAPL-Trainer

 p arduinoピン互換(シールドが使える)
Ruby講座




    enziの宣伝
 p 福岡CSKさん

         •    予約だと5980円!
         •    4月に届く予定∼

 p PDF
     file://localhost/Users/yamasaki/
     Desktop/enzi.pdf
Ruby講座




  
         ということで
          僕の発明品
Ruby講座




         フクオカRuby大賞優秀賞
Ruby講座




  
         それがこれ
Ruby講座




         AC電源周波数
         検知アンテナ
 電源コンセントの周波数を測定できます。
            50Hz 東日本
            60Hz 西日本
Ruby講座




         電力の需要と供給
需要が増えると   発電機のトルクが増える
                                     おもいなあ	
                                        	


         モーター	
                                 手回し発電機	

          	
      電球	
   LED
Ruby講座




          電力の需要と供給
需要が増えると   発電機のトルクが増える




         mortar	

         電力需要	
          発電所	

    周波数変動で瞬時に需給関係がわかる!
Ruby講座




BeagleBoneでやってみた
     
    アナログポートにアンテナを刺すだけ
Ruby講座

    #!/usr/local/bin/ruby





                                                                                            Rubyで75行
    Process.daemon(nochdir=true,noclose=true)

    require	 'rest_client'

    require	 'eventmachine'

    include	 Math

    ANALOG_IN='/sys/devices/platform/omap/tsc/ain1'

    SERVER="http://yamalabo.joho.fuk.kindai.ac.jp/logs"

    SITE="http://yamalabo.joho.fuk.kindai.ac.jp/sites"

    SNAME='/home/root/ruby/id'

    C=60.0

    N=2**12

    DT=0.005

    RANGE=0.25

    W=N*DT

    addr=`ifconfig	 eth0`.split("n")[1].split('	 ')[1].split(':')[1]

    name=File.open(SNAME).gets.chomp

    if	 name=="999"

    	 	 name=rand(10000000).to_s

    	 	 p	 name

    	 	 p	 addr

    	 	 begin

    	 	 	 	 File.open(SNAME,'w'){|h|h.puts	 name}

    	 	 	 	 RestClient.post(SITE,{:site=>{:name=>name,:ip_address=>addr}})

    	 	 ensure

    	 	 end

    end

    fft=->a{n=a.size

    	 	 c=Complex.polar(1,-2*PI/n)

    	 	 b=a[0...(n/2)].map

    	 	 (n==1	 ?	 a	 :	 fft[b.with_index{|x,i|x+a[i+(n/2)]}].zip(fft[b.with_index{|y,i|(y-a[i+(n/2)])*(c**i)}]).flatten)}

                     

cycle=->list{r=fft[list][0...(N/2)].map.with_index{|v,i|h=(i*(1/W)).round(2)

    	 	 	 	 [h,(v.abs/(N/2)).round(2)]

    	 	 }	 }

    hamming=->i{m={};m[i]||=(0.54-0.46*cos(2*PI*i/N-1))}

    window=Fiber.new{i=0

    	 	 buf=Array.new(N)

    	 	 File.open(ANALOG_IN){|f|

    	 	 	 	 loop{r=Fiber.yield(buf)

    	 	 	 	 	 	 if	 r==0

    	 	 	 	 	 	 	 	 i=0

    	 	 	 	 	 	 else

    	 	 	 	 	 	 	 	 buf[i]=f.gets.chomp.to_f*hamming[i]

    	 	 	 	 	 	 	 	 f.rewind

    	 	 	 	 	 	 	 	 i+=1

    	 	 	 	 	 	 end

    	 	 }	 }	 }

    ave=->sfh{(sfh.map{|x|x[0]*x[1]}.reduce(:+))/(sfh.map{|x|x[1]}.reduce(:+))}

    loop	 {GC.disable

    	 	 t0=Time.now

    	 	 window.resume	 0

    	 	 EM.run	 {n=1

    	 	 	 	 EM.add_periodic_timer(DT){

    	 	 	 	 	 	 t1=Time.now

    	 	 	 	 	 	 m=((t1-t0)/DT).round(0)

    	 	 	 	 	 	 if	 m>n

    	 	 	 	 	 	 	 	 (m-n).times{window.resume}

    	 	 	 	 	 	 	 	 n=m

    	 	 	 	 	 	 end

    	 	 	 	 	 	 window.resume

    	 	 	 	 	 	 n+=1

    	 	 	 	 	 	 EM.stop	 if	 n>=N+1

    	 	 }	 }

    	 	 GC.enable

    	 	 begin

    	 	 	 	 r=cycle[window.resume[0..N-1]]

    	 	 	 	 fh=r.select{|d|((C-RANGE)..(C+RANGE)).member?(d[0])}

    	 	 	 	 sfh=fh.sort_by{|x|x[1]}.reverse

    	 	 	 	 c=ave[sfh[0..3]].round(2)

    	 	 	 	 RestClient.post(SERVER,{:log=>{:site_id=>name,:cycle=>c}})

    	 	 ensure

    	 	 	 GC.start

    	 	 end

                                            }
Ruby講座




   九州の主な電力網                 新小倉

                       福岡
                                 北九州        苅田
              玄海 唐津                          豊前
                                 飯塚
         松浦                                        大分

         相浦
                      天山
                            二日市
                            久留米
                                       日田
                                                        大分
                                                         新大分

                            熊本
               長崎



                            大平
              苓北
                                            (小丸川)


                      川内                      宮崎

                川内
                      鹿児島
Ruby講座




         実際に設置してみた
         飯塚市大学支援補助金に感謝!
                             新小倉
                        福岡
                                  北九州        苅田
福岡	
           玄海 唐津                          豊前
                                                                飯塚	
                                  飯塚
          松浦                                        大分
                             二日市                         大分
          相浦                            日田
                       天山    久留米
                                                          新大分
唐津	
                長崎
                             熊本
                                                                大分	

                             大平
               苓北
                                             (小丸川)
二日市	
                       川内                      宮崎               久留米	
                 川内
                       鹿児島


長崎
Ruby講座




         ソーシャルWebで情報共有
Ruby講座




         設置方法
 p 山崎の自宅(福岡)の設置風景
Ruby講座




         SynchroSitone
  
Ruby講座




          SynchroSitone
         すっごくシンクロしとうね
  
Ruby講座




     Rubyで実装した!
         はっきり言ってむいていない"
               "

               "
Ruby講座




         でもmrubyなら
           ばっちり
Ruby1.9で実装して
開発途上にあるmrubyへフィード
バックするのが目的
こういう用途にはこの機能が欲しいとか
0"
        500"
               1000"
                       1500"
                               2000"
                                        2500"
                                                3000"
                                                        3500"
                                                                4000"
                                                                        4500"
  1"




                                                                          る
                                                                                                                  Ruby講座




  5"
  9"
 13"
 17"
 21"
 25"
 29"
 33"
 37"
 41"
 45"
 49"
 53"
 57"
 61"
 65"
 69"
 73"
 77"
 81"
 85"
 89"
 93"
 97"
101"
105"
109"
113"
117"
121"
125"
129"
133"
137"
141"
145"
149"
153"
157"
161"
165"
169"
173"
177"
181"
185"
189"
193"
197"
201"
205"
209"
213"
217"
221"
225"
229"
233"
237"
241"
245"
249"
                                                                                                    アンテナからの生データ
                                                                                                    アナログポートに刺した




253"
                                                                          ノイズだらけだけど、60Hzあたりの成分も見え



                                 系列1"
Ruby講座




         FFT
          高速フーリエ変換ってやつ
Ruby講座




                時系列データを
              周波数成分に分解する
25"




20"




15"




10"




 5"




 0"
         1"
      59.93
               2"
              59.94
                        3"
                      59.96
                                4"
                              59.97   59.98
                                       5"     6"
                                              59.99
                                                       7"
                                                      60.00
                                                               8"
                                                              60.01
                                                                       9"
                                                                      60.02
Ruby講座




                 Rubyなら
fft=->a{n=a.size"
                 FFTは2行
 (n==1 ? a : fft[(0...n/2).map{|i|a[i]+a[i+n/2]}].zip(fft[(0...n/2).map{|i|(a[i]-a[i+n/2])*((Complex.polar(1,-2*PI/n))**i)}]).flatten)}
Ruby講座




  Rubyの記述力!
Ruby講座




     Rubyでできるの?
 "
 p 正確な時間間隔でサンプリング"
     • 1/60秒=16.7ミリ秒、その倍の速度が必要"

     • 5ミリ秒周期で正確にサンプリング"

 p 収集途中でGCが入ってはだめ!"

 p ずっと安定して動き続けないとだめ"
Ruby講座




          正確な時間間隔で
           サンプリング
 p リアクタパターンを利用"
         event machineで実装
         シングルスレッド主義で
         軽量イベント駆動
Ruby講座



          rubygemsの
         event machine

          ユーザ定義のイベント	



             リアクタ	
      応答性がいい



             プログラム
Ruby講座



          rubygemsの
         event machine

          ユーザ定義のイベント	
                       定期発生イベント	

             リアクタ	




             プログラム
Ruby講座




                サンプリングの周期?
 p 60Hzだと、

         •    1周期は、16ミリ秒くらい
         •    8ミリ秒で止まって見える
         •    8ミリ秒よりちょっと長いと逆転
         •    8ミリ秒より短いとOK


         •    で、5ミリ秒にします
Ruby講座




    Eventmachineの使い方の基礎

require	 'eventmachine'



EM.run	 {

	 	 EM.add_timer(5){

   

	 	 puts	 'どーん'

   

	 	 EM.stop

	 	 }

}
Ruby講座




    Eventmachineの使い方の基礎
require	 'eventmachine'



EM.run	 {

	 	 EM.add_timer(5){

   

	 	 puts	 'どーん'

   

	 	 EM.stop

	 	 }

	 	 EM.add_periodic_timer(1){puts('とん')}	 	 

}
Ruby講座




    Eventmachineの使い方の基礎
require	 'eventmachine'



EM.run	 {

	 	 EM.add_timer(5){

   

	 	 puts	 'どーん'

   

	 	 EM.stop

	 	 }

	 	 EM.add_periodic_timer(1){puts('とん')}

	 	 EM.add_periodic_timer(0.5){puts('た')}	 	 

}
Ruby講座




 5ミリ秒ごとに駆動されるプログラム
    (実際は微調整が必要!)
  require	 'eventmachine'

  

  EM.run	 {n=0

  	 	 	 	 EM.add_periodic_timer(0.005){	 	 	 	 	 	 	 	 	 
  	 	 	 	 	 	 (時刻を調べて補正)

     

 

 

サンプリング実行

  	 	 	 	 	 	 n+=1

  	 	 	 	 	 	 EM.stop	 if	 n==N

  	 	 }	 }
Ruby講座




         サンプリング中に
          GCを入れない
p RubyのFiberでバッファ(ウィンドウ)
    への書き込み処理をコルーチンにする"
p 継続で、配列オブジェクトを再利用"
Ruby講座




         Fiberで資源を節約
window=Fiber.new{i=0

  "
	 	 	 	 buf=Array.new(SIZE)	 

	 	 	 	 loop{r=Fiber.yield(buf)

	 	 	 	 	 	 if	 r==0	 then	 i=0

	 	 	 	 	 	 else

	 	 	 	 	 	 	 	 buf[i]=	 サンプリング値*窓関数

	 	 	 	 	 	 	 	 i+=1

	 	 	 	 	 	 end	 

}	 	 	 }
Ruby講座




             Fiber使用法の例

順列の生成方法
> [1,2,3,4].permutation
=> #<Enumerator: [1, 2, 3, 4]:permutation>
 > [*1..10].permutation.to_a
 なかなか返ってこない〜
Ruby講座




          順列生成をFiberにする
f=->n{Fiber.new{
 [*1..n].permutation.each{|x|Fiber.yield x}}}

g=f[10]
=> #<Fiber:0x00000126282090>

g.resume
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
g.resume
=> [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]

g=f[100]
g.resume
Ruby講座




         Rubyのクロージャで
           窓関数をメモ化
 p 2回目からは計算しない"


hamming=->{m={}

 

->i{m[i]||=(0.54-0.46*cos(2*PI*i/
N-1))}}

h=hamming[]

h[1]

eval('m',h.binding)
Ruby講座




 びっくりするくらい正確になった
  
Ruby講座




         SynchroSitone 2.0
 p 赤外線LEDぴかぴか追加バージョン




                      赤外線LED
Ruby講座




        電源周波数が
    すっごくシンクロしている理由
  
Ruby講座



         九州電力の中央給電司令所が
         がんばって発電所を集中制御
                              新小倉
                                   北九州        苅田



                        ★	
                         福岡

                玄海 唐津                          豊前
                                   飯塚
           松浦                                        大分
                              二日市                         大分
           相浦                            日田
                        天山    久留米
                                                           新大分

                              熊本
                 長崎



                              大平
                苓北
                                              (小丸川)


                        川内                      宮崎

                  川内
                        鹿児島
Ruby講座




         発送電分離と電力逆潮流
                              新小倉

                         福岡
                                   北九州        苅田
                玄海 唐津                          豊前
                                   飯塚
           松浦
 たいよう                         二日市
                                                     大分
                                                          大分
           相浦                            日田
                        天山    久留米
                                                           新大分

                              熊本
                 長崎

 太陽光発電	
                              大平
                苓北
                                              (小丸川)
                                                                 風力発電	
                        川内                      宮崎

                  川内
                        鹿児島
Ruby講座




           電力事業者の
         3つの主要サービス
         •  電力供給"
          •    基本"


         •  電力余力供給"
          •    停電しないという品質"


         •  周波数調整力供給"
          •    電源の品質、発電機の保護"
Ruby講座




 周波数調整力の市場価値
    

揚水ポンプをインバーター
型にして"
"
周波数調整力取引でポンプ
の電力料金を2~3%削減"
Ruby講座




  九州中のエアコンの出力を
   瞬時にシンクロさせる
1分以内に九州中の10万台程度のオフィスのエアコンが
一斉に反応できれば電源周波数調整力として市場価値が
うまれる"
                             赤外線LED	




                    ぴかぴか	
         エアコン
         10万台規模
Ruby講座




 どこかで強風が吹いたら
 p 風力発電量が急増し、需給バランスが崩れる
Ruby講座




 九州中のエアコンがに即座に反応
                                   新小倉

                              福岡
                                        北九州        苅田
          ブォー        玄海 唐津                          ブォー
                                                    豊前
                                        飯塚
                松浦                                        大分
                                   二日市                         大分
                相浦                            日田
                             天山    久留米
                                                                新大分
    ブォー                            熊本
                      長崎                                            ブォー

                                   大平
                     苓北
                                                   (小丸川)
    ブォー
                                                                    ブォー
                             川内                      宮崎

                       川内
                             鹿児島
         ブォー
                                                    ブォー
Ruby講座




     需用者側の周波数調整
 p スマートグリッド"

 p 家庭用のLithium-ion   蓄電池"
 p 電気自動車、スマート家電、スマートメータ"

 "
Ruby講座




     SynchroSitone 2.0
家庭用蓄電池と同等のことがずっと安価に"
 "

 電力事業者との契約で電気料金を減らせるかも"

"
                    +	


                          赤外線LED" 温度センサー"
         ラズベリーパイ"          7円     100円
         (35ドル)"
Ruby講座




              エアコン消費電力の変化
         電源OFFすれば,消費電力1分以内に最低300W減少する
         10万台なら,3万KW
               エアコン1     エアコン1   エアコン2   エアコン2
              (12年前購入)   電源OFF (7年前購入)   (7年前購入)
         	
     電源ON     9時15分   電源ON     電源OFF
                9時5分             9時20分    9時42分
Ruby講座




         わかったこと
   Makersのmrubyはあり!
Ruby講座




 これからmrubyを使ってみたいもの
 p ロボット・メイカーにもなるぞ

Contenu connexe

Similaire à メイカーRuby講習会2013

電光掲示板を作ってみた
電光掲示板を作ってみた電光掲示板を作ってみた
電光掲示板を作ってみたAkira Kaneda
 
Yokohama.vim
Yokohama.vimYokohama.vim
Yokohama.vimgu4
 
All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)
All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)
All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)Shintaro Kakutani
 
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へakipii Oga
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜宏治 高尾
 
JRubyで作るapiサーバー
JRubyで作るapiサーバーJRubyで作るapiサーバー
JRubyで作るapiサーバーYamamoto Kazuhisa
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2Kuniaki Igarashi
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案nagachika t
 

Similaire à メイカーRuby講習会2013 (9)

電光掲示板を作ってみた
電光掲示板を作ってみた電光掲示板を作ってみた
電光掲示板を作ってみた
 
Yokohama.vim
Yokohama.vimYokohama.vim
Yokohama.vim
 
All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)
All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)
All about Nihon Ruby-no-kai Season6(TochigiRubyKaigi02 Edit)
 
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
【第7回redmine.tokyo勉強会】RedmineのFAQとアンチパターン集~WBS駆動からチケット駆動へ
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
 
RubyKaja 2013
RubyKaja 2013RubyKaja 2013
RubyKaja 2013
 
JRubyで作るapiサーバー
JRubyで作るapiサーバーJRubyで作るapiサーバー
JRubyで作るapiサーバー
 
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
 

Plus de Kindai University

Blockchain and Virtual Currency - Technical issues -
Blockchain and Virtual Currency- Technical issues -Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency - Technical issues -Kindai University
 
ブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンスブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンスKindai University
 
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナーKindai University
 
福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版Kindai University
 
ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築Kindai University
 
やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨Kindai University
 
FinTechと金融サービスの将来像
FinTechと金融サービスの将来像FinTechと金融サービスの将来像
FinTechと金融サービスの将来像Kindai University
 
仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTechKindai University
 
ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題Kindai University
 
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolKindai University
 
電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決Kindai University
 
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)Kindai University
 
薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクトKindai University
 

Plus de Kindai University (20)

Blockchain and Virtual Currency - Technical issues -
Blockchain and Virtual Currency- Technical issues -Blockchain and Virtual Currency- Technical issues -
Blockchain and Virtual Currency - Technical issues -
 
Gbec finance and blockchain
Gbec finance and blockchainGbec finance and blockchain
Gbec finance and blockchain
 
Blockchian definition
Blockchian definitionBlockchian definition
Blockchian definition
 
Blockchain economy
Blockchain economyBlockchain economy
Blockchain economy
 
ブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンスブロックチェーンエコノミーのコンセンサスとガバナンス
ブロックチェーンエコノミーのコンセンサスとガバナンス
 
福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー福岡ブロックチェーン・エコノミー勉強会セミナー
福岡ブロックチェーン・エコノミー勉強会セミナー
 
福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版福岡ブロックチェーン・エコノミー勉強会公開版
福岡ブロックチェーン・エコノミー勉強会公開版
 
ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築ブロックチェーンによるデータガバナンスと社会基盤の再構築
ブロックチェーンによるデータガバナンスと社会基盤の再構築
 
やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨やっぱりブロックチェインより仮想通貨
やっぱりブロックチェインより仮想通貨
 
FinTechと金融サービスの将来像
FinTechと金融サービスの将来像FinTechと金融サービスの将来像
FinTechと金融サービスの将来像
 
Congre chain説明資料
Congre chain説明資料Congre chain説明資料
Congre chain説明資料
 
仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech仮想通貨のブロックチェイン技術によるFinTech
仮想通貨のブロックチェイン技術によるFinTech
 
ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題ビットコイン福岡勉強会法的課題
ビットコイン福岡勉強会法的課題
 
ブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocolブロックチェインとOpen asset protocol
ブロックチェインとOpen asset protocol
 
Open fintech and Kachatter
Open fintech and KachatterOpen fintech and Kachatter
Open fintech and Kachatter
 
電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決電気マネーでエネルギー問題解決
電気マネーでエネルギー問題解決
 
仮想通貨実験計画
仮想通貨実験計画仮想通貨実験計画
仮想通貨実験計画
 
Bit Nexus
Bit NexusBit Nexus
Bit Nexus
 
電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)電子情報通信学会グローバル社会とビットコイン(山崎)
電子情報通信学会グローバル社会とビットコイン(山崎)
 
薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト薬院サルー仮想通貨プロジェクト
薬院サルー仮想通貨プロジェクト
 

メイカーRuby講習会2013

  • 1. Ruby講座 メイカーを目指す人のための mruby にむけた試み 事例(ソーシャル電力需給センサーネットワーク) CACAnet Fukuoka/近畿大学 山崎重一郎
  • 2. Ruby講座 mrubyで ゴールドラッシュに 参加しよう!  
  • 4. Ruby講座 人件費競争フリーな製造業 p  中国製はなぜ安いの?(理由:人件費が安いから) p  レーザカッター+CADデータの製造業 •  レーザーカッターの価格は中国でも日本でも同じ •  IKEAは原材料に最適化した国で製造
  • 5. Ruby講座 じゃあ、自分も IKEAになれるんじゃない? p レーザカッターがどんどん安くなっている p デザイン=CADデータが勝負!
  • 6. Ruby講座 ひょっとして、IKEAより 上いけるんじゃない? p 大量生産しなくてもメーカになれる •  顧客の家のスペースに最適化した家具 p ネットの人々の力を利用できる •  世界一のデザインを採用(世界一の階段とか)
  • 8. Ruby講座 サプライチェーンの個人利用 p もとは日本の自動車メーカが作ったシステム •  ジャストインタイム方式 p 「個人メーカー」も利用可能 •  ネット仕入れのアリババとか
  • 9. Ruby講座 サプライチェーンの個人利用 p もとは日本の自動車産業が作ったシステム •  ジャストインタイム方式 p 個人もネット経由で利用可能になった •  ネット仕入れのアリババとか
  • 10. Ruby講座 クラウドファウンディング p ネットで資金調達 •  銀行  (利息が必要) •  ベンチャーキャピタル (上場しろって言われる) •  キックスターター ○ •  開発中の製品の「予約」=「投資」 •  最低調達目標金額を設定 + 募集期間は30日 •  目標額が集まらなければ、予約はなしになる •  集まれば、カードから引落されて開発資金になる
  • 13. Ruby講座 arduinoで制御する3Dプリンタ 15万円! 福岡市西区にある株式会社ホットプロシード(夫婦でメーカー) 制御ソフトは「超高性能」オープンソースを利用(原価は極秘)
  • 14. Ruby講座 ゴールドラッシュ!  
  • 15. Ruby講座 ビットからアトムへ p いまやソフトを商品にするのは難しい •  スマフォアプリで一攫千金? p ものにすれば、値段を付けて売りやすい •  「∼装置」と言い張ればいい
  • 16. Ruby講座 予約=投資 p ゲームみたいに沢山小さな失敗ができる •  期限内に目標額が集まらなければなしになる p 予約=市場調査 •  資金が集まれば、売れることはわかっている p コメントで客のニーズが直接わかる •  製品化までにどんどん改良できる
  • 17. Ruby講座 自分で製造しないメーカー クワーキィ社が製品化、製造、販売を受け持つ  企画やアイデアを投稿した人に売り上げから還元  試作は3Dプリンタ  予約が目標まで集まったら製品化はキックスタータと同じ デザイン キャッチフレーズ 商品企画 値付け
  • 19. Ruby講座   p  
  • 20. Ruby講座 で、本題 p mruby(組み込み用軽量Ruby)       + p メーカーズムーブメントの文脈
  • 21. Ruby講座 mruby p 軽量Ruby •  コンパクト、高速、モジュラリティがすごく高い •  コア以外のクラスはmrbgem で組み込む •  mrbgemは、make で静的に組み込む仕組む仕組み アプリ http Regexp Socket mrbgem mruby VM
  • 22. Ruby講座 組み込みソフトとしての mrubyの使い方 p C言語が適しているところはCで書く p mrubyが便利なところ •  テキスト処理、Web接続とか httpアクセス リモコン テキスト処理
  • 23. Ruby講座 mrubyボード登場 p Enzi、EAPL-Trainer p arduinoピン互換(シールドが使える)
  • 24. Ruby講座 enziの宣伝 p 福岡CSKさん •  予約だと5980円! •  4月に届く予定∼ p PDF file://localhost/Users/yamasaki/ Desktop/enzi.pdf
  • 25. Ruby講座   ということで 僕の発明品
  • 26. Ruby講座 フクオカRuby大賞優秀賞
  • 27. Ruby講座   それがこれ
  • 28. Ruby講座 AC電源周波数 検知アンテナ 電源コンセントの周波数を測定できます。 50Hz 東日本 60Hz 西日本
  • 29. Ruby講座 電力の需要と供給 需要が増えると   発電機のトルクが増える おもいなあ モーター 手回し発電機 電球 LED
  • 30. Ruby講座 電力の需要と供給 需要が増えると   発電機のトルクが増える mortar 電力需要 発電所 周波数変動で瞬時に需給関係がわかる!
  • 31. Ruby講座 BeagleBoneでやってみた   アナログポートにアンテナを刺すだけ
  • 32. Ruby講座 #!/usr/local/bin/ruby Rubyで75行 Process.daemon(nochdir=true,noclose=true) require 'rest_client' require 'eventmachine' include Math ANALOG_IN='/sys/devices/platform/omap/tsc/ain1' SERVER="http://yamalabo.joho.fuk.kindai.ac.jp/logs" SITE="http://yamalabo.joho.fuk.kindai.ac.jp/sites" SNAME='/home/root/ruby/id' C=60.0 N=2**12 DT=0.005 RANGE=0.25 W=N*DT addr=`ifconfig eth0`.split("n")[1].split(' ')[1].split(':')[1] name=File.open(SNAME).gets.chomp if name=="999" name=rand(10000000).to_s p name p addr begin File.open(SNAME,'w'){|h|h.puts name} RestClient.post(SITE,{:site=>{:name=>name,:ip_address=>addr}}) ensure end end fft=->a{n=a.size c=Complex.polar(1,-2*PI/n) b=a[0...(n/2)].map (n==1 ? a : fft[b.with_index{|x,i|x+a[i+(n/2)]}].zip(fft[b.with_index{|y,i|(y-a[i+(n/2)])*(c**i)}]).flatten)} cycle=->list{r=fft[list][0...(N/2)].map.with_index{|v,i|h=(i*(1/W)).round(2) [h,(v.abs/(N/2)).round(2)] } } hamming=->i{m={};m[i]||=(0.54-0.46*cos(2*PI*i/N-1))} window=Fiber.new{i=0 buf=Array.new(N) File.open(ANALOG_IN){|f| loop{r=Fiber.yield(buf) if r==0 i=0 else buf[i]=f.gets.chomp.to_f*hamming[i] f.rewind i+=1 end } } } ave=->sfh{(sfh.map{|x|x[0]*x[1]}.reduce(:+))/(sfh.map{|x|x[1]}.reduce(:+))} loop {GC.disable t0=Time.now window.resume 0 EM.run {n=1 EM.add_periodic_timer(DT){ t1=Time.now m=((t1-t0)/DT).round(0) if m>n (m-n).times{window.resume} n=m end window.resume n+=1 EM.stop if n>=N+1 } } GC.enable begin r=cycle[window.resume[0..N-1]] fh=r.select{|d|((C-RANGE)..(C+RANGE)).member?(d[0])} sfh=fh.sort_by{|x|x[1]}.reverse c=ave[sfh[0..3]].round(2) RestClient.post(SERVER,{:log=>{:site_id=>name,:cycle=>c}}) ensure GC.start end }
  • 33. Ruby講座 九州の主な電力網 新小倉 福岡 北九州 苅田 玄海 唐津 豊前 飯塚 松浦 大分   相浦 天山 二日市 久留米 日田 大分 新大分 熊本 長崎 大平 苓北 (小丸川) 川内 宮崎 川内 鹿児島
  • 34. Ruby講座 実際に設置してみた 飯塚市大学支援補助金に感謝! 新小倉   福岡 北九州 苅田 福岡 玄海 唐津 豊前 飯塚 飯塚 松浦 大分 二日市 大分 相浦 日田 天山 久留米 新大分 唐津 長崎 熊本 大分 大平 苓北 (小丸川) 二日市 川内 宮崎 久留米 川内 鹿児島 長崎
  • 35. Ruby講座 ソーシャルWebで情報共有
  • 36. Ruby講座 設置方法 p 山崎の自宅(福岡)の設置風景
  • 37. Ruby講座 SynchroSitone  
  • 38. Ruby講座 SynchroSitone すっごくシンクロしとうね  
  • 39. Ruby講座 Rubyで実装した! はっきり言ってむいていない" " "
  • 40. Ruby講座 でもmrubyなら ばっちり Ruby1.9で実装して 開発途上にあるmrubyへフィード バックするのが目的 こういう用途にはこの機能が欲しいとか
  • 41. 0" 500" 1000" 1500" 2000" 2500" 3000" 3500" 4000" 4500" 1" る Ruby講座 5" 9" 13" 17" 21" 25" 29" 33" 37" 41" 45" 49" 53" 57" 61" 65" 69" 73" 77" 81" 85" 89" 93" 97" 101" 105" 109" 113" 117" 121" 125" 129" 133" 137" 141" 145" 149" 153" 157" 161" 165" 169" 173" 177" 181" 185" 189" 193" 197" 201" 205" 209" 213" 217" 221" 225" 229" 233" 237" 241" 245" 249" アンテナからの生データ アナログポートに刺した 253" ノイズだらけだけど、60Hzあたりの成分も見え 系列1"
  • 42. Ruby講座 FFT  高速フーリエ変換ってやつ
  • 43. Ruby講座 時系列データを 周波数成分に分解する 25" 20" 15" 10" 5" 0" 1" 59.93 2" 59.94 3" 59.96 4" 59.97 59.98 5" 6" 59.99 7" 60.00 8" 60.01 9" 60.02
  • 44. Ruby講座 Rubyなら fft=->a{n=a.size" FFTは2行 (n==1 ? a : fft[(0...n/2).map{|i|a[i]+a[i+n/2]}].zip(fft[(0...n/2).map{|i|(a[i]-a[i+n/2])*((Complex.polar(1,-2*PI/n))**i)}]).flatten)}
  • 46. Ruby講座 Rubyでできるの? " p 正確な時間間隔でサンプリング" • 1/60秒=16.7ミリ秒、その倍の速度が必要" • 5ミリ秒周期で正確にサンプリング" p 収集途中でGCが入ってはだめ!" p ずっと安定して動き続けないとだめ"
  • 47. Ruby講座 正確な時間間隔で サンプリング p リアクタパターンを利用" event machineで実装 シングルスレッド主義で 軽量イベント駆動
  • 48. Ruby講座 rubygemsの event machine ユーザ定義のイベント リアクタ 応答性がいい プログラム
  • 49. Ruby講座 rubygemsの event machine ユーザ定義のイベント 定期発生イベント リアクタ プログラム
  • 50. Ruby講座 サンプリングの周期? p 60Hzだと、 •  1周期は、16ミリ秒くらい •  8ミリ秒で止まって見える •  8ミリ秒よりちょっと長いと逆転 •  8ミリ秒より短いとOK •  で、5ミリ秒にします
  • 51. Ruby講座 Eventmachineの使い方の基礎 require 'eventmachine' EM.run { EM.add_timer(5){ puts 'どーん' EM.stop } }
  • 52. Ruby講座 Eventmachineの使い方の基礎 require 'eventmachine' EM.run { EM.add_timer(5){ puts 'どーん' EM.stop } EM.add_periodic_timer(1){puts('とん')} }
  • 53. Ruby講座 Eventmachineの使い方の基礎 require 'eventmachine' EM.run { EM.add_timer(5){ puts 'どーん' EM.stop } EM.add_periodic_timer(1){puts('とん')} EM.add_periodic_timer(0.5){puts('た')} }
  • 54. Ruby講座 5ミリ秒ごとに駆動されるプログラム (実際は微調整が必要!) require 'eventmachine' EM.run {n=0 EM.add_periodic_timer(0.005){ (時刻を調べて補正) サンプリング実行 n+=1 EM.stop if n==N } }
  • 55. Ruby講座 サンプリング中に GCを入れない p RubyのFiberでバッファ(ウィンドウ) への書き込み処理をコルーチンにする" p 継続で、配列オブジェクトを再利用"
  • 56. Ruby講座 Fiberで資源を節約 window=Fiber.new{i=0  " buf=Array.new(SIZE) loop{r=Fiber.yield(buf) if r==0 then i=0 else buf[i]= サンプリング値*窓関数 i+=1 end } }
  • 57. Ruby講座 Fiber使用法の例 順列の生成方法 > [1,2,3,4].permutation => #<Enumerator: [1, 2, 3, 4]:permutation> > [*1..10].permutation.to_a なかなか返ってこない〜
  • 58. Ruby講座 順列生成をFiberにする f=->n{Fiber.new{ [*1..n].permutation.each{|x|Fiber.yield x}}} g=f[10] => #<Fiber:0x00000126282090> g.resume => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] g.resume => [1, 2, 3, 4, 5, 6, 7, 8, 10, 9] g=f[100] g.resume
  • 59. Ruby講座 Rubyのクロージャで 窓関数をメモ化 p 2回目からは計算しない" hamming=->{m={} ->i{m[i]||=(0.54-0.46*cos(2*PI*i/ N-1))}} h=hamming[] h[1] eval('m',h.binding)
  • 61. Ruby講座 SynchroSitone 2.0 p 赤外線LEDぴかぴか追加バージョン 赤外線LED
  • 62. Ruby講座 電源周波数が すっごくシンクロしている理由  
  • 63. Ruby講座 九州電力の中央給電司令所が がんばって発電所を集中制御 新小倉 北九州 苅田 ★ 福岡 玄海 唐津 豊前 飯塚 松浦 大分 二日市 大分 相浦 日田 天山 久留米 新大分 熊本 長崎 大平 苓北 (小丸川) 川内 宮崎 川内 鹿児島
  • 64. Ruby講座 発送電分離と電力逆潮流 新小倉 福岡 北九州 苅田 玄海 唐津 豊前 飯塚 松浦 たいよう  二日市 大分 大分 相浦 日田 天山 久留米 新大分 熊本 長崎 太陽光発電 大平 苓北 (小丸川) 風力発電 川内 宮崎 川内 鹿児島
  • 65. Ruby講座 電力事業者の 3つの主要サービス •  電力供給" •  基本" •  電力余力供給" •  停電しないという品質" •  周波数調整力供給" •  電源の品質、発電機の保護"
  • 66. Ruby講座 周波数調整力の市場価値   揚水ポンプをインバーター 型にして" " 周波数調整力取引でポンプ の電力料金を2~3%削減"
  • 67. Ruby講座 九州中のエアコンの出力を 瞬時にシンクロさせる 1分以内に九州中の10万台程度のオフィスのエアコンが 一斉に反応できれば電源周波数調整力として市場価値が うまれる" 赤外線LED ぴかぴか エアコン 10万台規模
  • 69. Ruby講座 九州中のエアコンがに即座に反応 新小倉 福岡 北九州 苅田 ブォー 玄海 唐津 ブォー 豊前 飯塚 松浦 大分 二日市 大分 相浦 日田 天山 久留米 新大分 ブォー 熊本 長崎 ブォー 大平 苓北 (小丸川) ブォー ブォー 川内 宮崎 川内 鹿児島 ブォー ブォー
  • 70. Ruby講座 需用者側の周波数調整 p スマートグリッド" p 家庭用のLithium-ion 蓄電池" p 電気自動車、スマート家電、スマートメータ" "
  • 71. Ruby講座 SynchroSitone 2.0 家庭用蓄電池と同等のことがずっと安価に"  "  電力事業者との契約で電気料金を減らせるかも" " + 赤外線LED" 温度センサー" ラズベリーパイ"  7円 100円 (35ドル)"
  • 72. Ruby講座 エアコン消費電力の変化 電源OFFすれば,消費電力1分以内に最低300W減少する 10万台なら,3万KW エアコン1 エアコン1 エアコン2 エアコン2 (12年前購入) 電源OFF (7年前購入) (7年前購入) 電源ON 9時15分 電源ON 電源OFF 9時5分 9時20分 9時42分
  • 73. Ruby講座 わかったこと Makersのmrubyはあり!