Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

太陽光発電の状況(H24〜29)

各月の売電状況

f:id:rahaema:20171228194746p:plain

ちょっと見辛いので、6年間の平均と今年のデータで比較してみたのが以下のグラフです。今年は6,7月の売電状況が良かったようです。

f:id:rahaema:20171228194725p:plain

年毎の売電状況

以下は年毎の売電状況を示したグラフです。昨年まで減少していたので、機器の劣化が影響していると思ったのですが、今年は増加しました。

f:id:rahaema:20171228194735p:plain

型式

  • シャープ ND-165AA 3.96KW

天気に応じてLEDの点灯パターンを変える

Raspberry PiからYahoo天気予報のピンポイント天気にアクセスし、現在の時刻の天気に応じてLEDの点灯パターンを変えるスクリプトです*1

タクトスイッチを押すと、Yahoo天気予報にアクセスし、天気に応じてLEDを点灯させます。

get_yahoo_weather.rb

実行の様子

続編

*1:今日は曇りでしたので、曇りの場合しか実装していません。

RubyでPOSTリクエストするには?(2)

昨日Macで行った「RubyでPOSTリクエストするには? - Mae向きなブログ」を、最近は電源を入れられることもなく、ホコリをかぶっているRaspberry Pi上のArch Linuxでやってみたところ、以下のようなエラーが発生しました。SSL証明書関係のエラーなのでしょうか?

[root@alarmpi ~]# ruby post_prac.rb
/usr/lib/ruby/2.4.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect returned=1 errno=0 state=error: certificate verify failed (OpenSSL::SSL::SSLError)
    from /usr/lib/ruby/2.4.0/net/protocol.rb:44:in `ssl_socket_connect'
    from /usr/lib/ruby/2.4.0/net/http.rb:948:in `connect'
    from /usr/lib/ruby/2.4.0/net/http.rb:887:in `do_start'
    from /usr/lib/ruby/2.4.0/net/http.rb:876:in `start'
    from /usr/lib/ruby/2.4.0/net/http.rb:1407:in `request'
    from post_prac.rb:27:in `<main>'

対処したこと

参考サイトを見ながら以下のように対処しました。

[root@alarmpi ~]# ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"/etc/ssl/cert.pem"
[root@alarmpi ~]# wget -O /etc/ssl/cert.pem http://curl.haxx.se/ca/cacert.pem

実行結果

[root@alarmpi ~]# ruby post_prac.rb
code -> 200
msg -> OK
body -> Congratulations! You've fired the mytest event

Raspberry Piからも、IFTTTを経由してGoogleスプレッドシートにデータを記録することができるようになりました。これまでやったこと(↓)と組み合わせると何か面白そうなことができそうな気がしてきました。

参考

RubyでPOSTリクエストするには?

Raspberry PiでIFTTTのMaker WebhooksにPOSTする - Qiita』では、Pythonを使っているのですが、Rubyでやろうとするとどんな感じになるんだろうということで書いて見ました。Pythonと比べて行数が多いのですが、Rubyでももっとシンプルに書けるものでしょうか?

post_prac.rb

実行結果

$ ruby post_prac.rb
code -> 200
msg -> OK
body -> Congratulations! You've fired the mytest event

f:id:rahaema:20171226173726p:plain

参考

浮動小数点数の誤差問題

どんな問題が潜んでいるのか?

この問題の空欄を補充したものが以下になります。

taxi.c

これを実行すると、

$ ./a.out
走行距離[km]は2.1
金額は800円です。
$ ./a.out
走行距離[km]は2.0
金額は710円です。
$ ./a.out
走行距離[km]は2.285
金額は890円です。

のようになります。

このタクシーに2.1km、2.0km乗った時には問題ないのですが、2.285km乗った時に、本来は800円の料金のはずなのですが、890円の請求となってしまいます。これは、実数をコンピュータ内で2進数で表現するのに限界があるためで丸め誤差と呼ばれています。

誤差があるからしょうがないという結論で終わってもいいのですが、実際にコンピュータ内でどのように表現されているのか調べてみました。

0.285(10進法)をIEEE 754 単精度で表現してみよう

参考サイトの例の手順に習って求めてみたいと思います。

まず、0.285を2進数に変換すると、以下のようになります。手計算でやってもよかったのですが、面倒なので「小数点つき10進数を2進数に変換する方法とツール - 具体例で学ぶ数学」を利用しました。

0.0100\ 1000\ 1111\ 0101\ 1100\ 0010\ 1000\ 1111\ 0101\ 1100\ 0010\ 1000\ 1111\ 01

小数点を左に移動させ、1だけを左に残すと、

1.0010\ 0011\ 1101\ 0111\ 0000\ 1010\ 0011\ 1101\ 0111\ 0000\ 1010\ 0011\ 1101 \times 2^{-2}

となります。

  • 正の数なので、符号は0
  • fractionは小数点の右側だけであり、23ビット分なので0010 0011 1101 0111 0000 101
  • 指数は-2であるが、バイアスを加える必要があり、-2+127=125。2進数に変換すると、01111101

この結果をまとめると、以下のようになり、コンピュータの中では

0011\ 1110\ 1001\ 0001\ 1110\ 1011\ 1000\ 0101

と表現されていることになります。fraction部を求めるときに、23ビット分の情報に丸め込んでしまってますので、ここで誤差が生じるのは明らかですね。

プログラムで何が起こったのか?

少し遠回りをしましたが、タクシー料金を求めるプログラムを実行したときに、実際、何が起こったのかをみてみたいと思います。参考サイトに共用体を利用して浮動小数点数の内部表現を取得する方法が紹介されていましたので以下のようなプログラムを作り、変数ryoukinの値の変化を追ってみました。

taxi_trace.c

実行結果

*** scanfで2.285が入力された。
2.285000 ( 40123D71 )
01000000000100100011110101110001
符号部 : 0
指数部 : 80
仮数部 : 123D71

*** 12行目実行直後
0.285000 ( 3E91EB88 )
00111110100100011110101110001000
符号部 : 0
指数部 : 7D
仮数部 : 11EB88

*** whileループ内:15行目実行直後
*** ここでkyoriが0になると思ってしまう!
0.000000 ( 33B851EC )
00110011101110000101000111101100
符号部 : 0
指数部 : 67
仮数部 : 3851EC

*** whileループ内:15行目実行直後
-0.285000 ( BE91EB82 )
10111110100100011110101110000010
符号部 : 1
指数部 : 7D
仮数部 : 11EB82

解決策

その1

タクシー料金産出の元となる距離をkmではなくm単位で扱う。

その2

計算機イプシロンを利用して以下のように変更する。

その3

何かありましたら、コメント欄にお願いします。

参考サイト

おまけ1

0.285(10進法)をIEEE 754 倍精度で表現してみました。

double_print.c

0.285000 ( 3FD23D70A3D70A3D )
0011111111010010001111010111000010100011110101110000101000111101
符号部 : 0
指数部 : 3FD
仮数部 : 23D70A3D70A3D

0.285は先に求めたように、 1.0010\ 0011\ 1101\ 0111\ 0000\ 1010\ 0011\ 1101\ 0111\ 0000\ 1010\ 0011\ 1101 \times 2^{-2} ですので、

  • 符号は0
  • fractionは52ビット分なので0010 0011 1101 0111 0000 1010 0011 1101 0111 0000 1010 0011 1101
  • 指数は-2であるが、バイアスを加えて -2+1023=1021。2進数で01111111101

この結果をまとめると、以下となり実行結果と同じになります。

0011\ 1111\ 1101\ 0010\ 0011\ 1101\ 0111\ 0000\ 1010\ 0011\ 1101\ 0111\ 0000\ 1010\ 0011\ 1101

おまけ2

ウインターカップ2017男子出場選手を高い身長順に並べ替え

今年もウインターカップが楽しみな時期になってきました。例年通り、今年も「出場校 | ウインターカップ2017 平成29年度 第70回全国高等学校バスケットボール選手権大会」で公開されているデータを元に出場選手の中で身長の高い選手をピックアップしてみました。

男子(180cm以上)

身長(cm) 氏名
206 ワン ジェンイー(日本航空)
205 バトゥマニ クリバリ(中部大学第一)
203 ブバカー ンディアイエ(中部大学第一)
ジョセフネリー ジュニア(高知中央)
クベマジョセフ スティーブ(福岡第一)
202 ダンテ スレイマニ(北陸)
アデオラシェウン アデロラ(高知中央)
201 ババカルアイダラ ジャロ(八王子学園八王子)
200 ジェン アビブ(北陸)
井上 宗一郎(福岡大学附属大濠)
199 細割 駿佑(土浦日本大学)
張 正亮(東海大学付属諏訪)
196 吉田 崇紘(土浦日本大学)
平子 啓太(福岡第一)
浅井 修伍(福岡大学附属大濠)
木林 優(福岡大学附属大濠)
八村 阿蓮(明成)
195 佐藤 脩緒(県立一関工業)
楊 博(船橋市船橋)
ブラ グロリダ(帝京長岡)
バムアンゲイ ジョナサン(福岡第一)
194 中村 吏(正智深谷)
米沢 仁志(東海大学付属諏訪)
小澤 幸平(中部大学第一)
193 田中 透希(大阪学院大学)
金田 龍弥(大阪学院大学)
小島 基嵩(育英)
下地 海斗(明成)
192 溝口 月斗(東海大学付属札幌)
石川 竜生(八王子学園八王子)
ティレラ タヒロウ(帝京長岡)
早川 和輝(美濃加茂)
リュウ ヤハオ(飛龍)
津田 誠人(洛南)
原田 太一(洛南)
中崎 圭斗(福岡大学附属大濠)
191 長牛 翼(聖和学園)
結城 智史(土浦日本大学)
山崎 凜(土浦日本大学)
増田 英寿(正智深谷)
渡部 琉(正智深谷)
遠藤 涼真(八王子学園八王子)
吉江 凌(高岡第一)
高島 紳司(北陸)
深渡瀬 海(県立広島皆実)
川島 渉平(県立広島皆実)
藤井 宏治(福岡大学附属大濠)
横地 聖真(福岡大学附属大濠)
本間 紗斗(明成)
190 鈴木 エドワード(八戸学院光星)
先﨑 慎之助(県立福島南)
青山 明(八王子学園八王子)
ザン ズージェイ(日本航空)
寺澤 大夢(東海大学付属諏訪)
村本 実勇士(北陸学院)
二上 耀(北陸)
范 浩靖(美濃加茂)
西田 航(県立四日市工業)
藤本 翔己(育英)
三谷 桂司朗(県立広島皆実)
西山 遼(県立高松商業)
松崎 裕樹(福岡第一)
伊藤 陸斗(九州学院)
木部 翔太(柳ヶ浦)
江原 信太朗(実践学園)
バブシキン ダニエル(明成)
菱倉 崇人(明成)
189 西田 瑛哉(県立草津東)
星川 堅信(洛南)
島田 龍太郎(岡山学芸館)
林 龍之介(県立広島皆実)
赤葉 玲音(県立鳴門渦潮)
山内 彩聖(柳ヶ浦)
相原 アレクサンダー学(明成)
188 赤川 塁(東海大学付属札幌)
草富 公徳(東海大学付属札幌)
古川 洸暉(八戸学院光星)
遠藤 由空(聖和学園)
宮野 良(県立秋田工業)
山本 翔太(日本大学山形)
半澤 凌太(県立福島南)
阿比留 将太(北陸)
張本 正登(中部大学第一)
佐藤 優光(中部大学第一)
水谷 祐葵(県立四日市工業)
吉門 広晶(県立四日市工業)
水谷 航(県立四日市工業)
小松 柾貴(大阪学院大学)
松本 直之(新田)
池田 武尊(高知中央)
園部 毅(九州学院)
岩崎 壮一郎(九州学院)
野口 侑真(県立川内)
多田 竜之介(実践学園)
187 山本 鳴海(東海大学付属札幌)
成田 篤志(聖和学園)
小川 裕太郎(日本大学山形)
勝山 大輝(正智深谷)
渡辺 諒一(正智深谷)
小宮 優大(県立厚木東)
米山 ジャバ偉生(東海大学付属諏訪)
森島 瑞樹(北陸学院)
後藤 優仁(美濃加茂)
野田 憲吾(県立四日市工業)
川崎 凱(県立草津東)
納土 修汰(洛南)
山中 敦(天理)
久保田 唯楓(県立和歌山工業)
横山 恵斗(松江西)
大内 一慶(九州学院)
阿川 佳樹(実践学園)
田邉 太一(福岡大学附属大濠)
186 千葉 大和(県立一関工業)
穂積 颯人(県立福島南)
吉原 怜勇(県立宇都宮工業)
常田 耕平(正智深谷)
庄司 理宇(船橋市船橋)
兼重 パトリック(船橋市船橋)
高原 伊吹(東海大学付属諏訪)
梶 康二郎(高岡第一)
元田 大陽(北陸学院)
梅田 竜太(美濃加茂)
奥村 大翔(飛龍)
青木 遥平(中部大学第一)
仲宗根 弘(中部大学第一)
大八木 数馬(県立草津東)
澁谷 錬(洛南)
田淵 和音(県立鳥取西)
近藤 優斗(県立豊浦)
仲田 泰利(福岡第一)
今村 楓(県立長崎西)
沖中 湧哉(九州学院)
梅林 滉樹(九州学院)
酒井 柊汰(実践学園)
川島 聖那(福岡大学附属大濠)
蒔苗 勇人(明成)
185 藤村 悠生(県立一関工業)
山野 光太(県立秋田工業)
相馬 俊介(県立宇都宮工業)
瀧 稜太(前橋育英)
萩原 健斗(前橋育英)
菊池 允(県立厚木東)
加藤 樹(県立厚木東)
宮田 大倭(日本航空)
古田 哲平(日本航空)
修斗(日本航空)
板谷 卓(東海大学付属諏訪)
関矢 透弥(帝京長岡)
中屋 龍之介(北陸学院)
岩本 舟路(北陸)
渡邊 優豪(美濃加茂)
深田 怜音(中部大学第一)
笹山 陸(洛南)
飯尾 文哉(洛南)
井ノ元 孝多朗(洛南)
神野 力哉(大阪学院大学)
山口 健彦(天理)
小浦 利輝(県立和歌山工業)
今西 崇文(県立和歌山工業)
伊井野 大河(県立鳥取西)
二見 健太(県立豊浦)
森 瞬也(県立鳴門渦潮)
吉居 大誓(福岡第一)
神田 壮一郎(福岡第一)
松本 礼太(福岡第一)
江頭 優雅(県立佐賀東)
福田 大斗(九州学院)
藤田 恵吾(柳ヶ浦)
青山 晃也(県立小林)
川満 大我(興南)
木村 拓郎(明成)
184 菅原 隼輔(県立一関工業)
小松 亮人(県立秋田工業)
松本 健(県立福島南)
新山 航希(土浦日本大学)
陳岡 燈生(土浦日本大学)
川和 千馬(県立宇都宮工業)
山口 大成(正智深谷)
鴇田 風真(八王子学園八王子)
木村 圭吾(八王子学園八王子)
大倉 颯太(北陸学院)
植木 将太郎(中部大学第一)
西村 晴人(県立草津東)
西村 洋人(県立和歌山工業)
小谷 快斗(松江西)
石田 達也(岡山学芸館)
堀川 樹(岡山学芸館)
松浦 圭吾(県立高松商業)
藪中 智也(県立高松商業)
小川 真興(県立小林)
斎藤 颯斗(実践学園)
183 蛯名 隼大(八戸学院光星)
工藤 丈留(八戸学院光星)
坂尻 侑生(八戸学院光星)
槻山 拓海(県立一関工業)
横地 太一(日本大学山形)
渡邊 優希(県立福島南)
宮澤 亘(土浦日本大学)
山口 湧史(県立宇都宮工業)
加藤 穂高(東海大学付属諏訪)
星野 颯太(東海大学付属諏訪)
林 大成(高岡第一)
堀川 隆弥(高岡第一)
纓坂 宇翔(高岡第一)
水谷 拓真(美濃加茂)
杉山 裕介(飛龍)
星野 京介(中部大学第一)
中村 拓人(中部大学第一)
野田 巧真(県立四日市工業)
佐治 智紀(県立草津東)
大森 航(県立草津東)
小西 聖也(洛南)
下田平 翔(育英)
真田 光彩(県立和歌山工業)
濱田 真魂(県立豊浦)
森川 優(高知中央)
古橋 正義(福岡第一)
宮川 雅己(県立長崎西)
野中 和希(九州学院)
仮屋崎 元(県立川内)
182 古川 義人(東海大学付属札幌)
斉藤 幹大(東海大学付属札幌)
川上 遥(県立一関工業)
岩崎 琉依(聖和学園)
片村 俊介(県立秋田工業)
市川 竜大(日本大学山形)
関 日向(日本大学山形)
高原 晟也(土浦日本大学)
吉村 公汰(土浦日本大学)
田中 勇颯(前橋育英)
碓氷 真吾(船橋市船橋)
野村 弘樹(八王子学園八王子)
佐野 龍之介(県立厚木東)
東野 恒紀(県立厚木東)
勇上 ヴィシュワ慧悟(日本航空)
小林 大祐(東海大学付属諏訪)
浅野 魁人(高岡第一)
若月 遼(北陸)
原田 未央(飛龍)
杉本 諒(飛龍)
原 千容(飛龍)
矢澤 樹(中部大学第一)
廣瀬 元也(大阪学院大学)
牛尾 慶斗(育英)
木内 光輝(県立高松商業)
山中 馨斗(県立高松商業)
小比賀 翔(県立高松商業)
高橋 冴歩(県立高松商業)
三宅 翔 リーディローチ(福岡第一)
武藤 悠平(県立佐賀東)
岩本 大地(県立長崎西)
手島 諒喜(県立小林)
仲間 史(興南)
知名 龍輝(興南)
長嶺 尚史(興南)
町井 丈太(実践学園)
山口 浩太郎(実践学園)
西田 公陽(福岡大学附属大濠)
古見 成(福岡大学附属大濠)
井上 耀(明成)
181 葛西 誉紀(八戸学院光星)
佐々木 剛(聖和学園)
長谷部 佑斗(県立秋田工業)
門馬 爽(県立福島南)
鍋田 亜廉(土浦日本大学)
千葉 僚大(県立宇都宮工業)
津川 駿平(県立宇都宮工業)
入澤 翔(前橋育英)
保泉 遼(船橋市船橋)
前田 悟司(船橋市船橋)
浅沼 友惟(船橋市船橋)
福山 恋(八王子学園八王子)
吉田 烈(県立厚木東)
佐野 翔太(帝京長岡)
荒木 優斗(高岡第一)
石瀬 泰斗(高岡第一)
勝木 蓮(北陸)
都築 健人(美濃加茂)
坂本 聖芽(中部大学第一)
副島 光生(中部大学第一)
伊藤 佑一郎(県立四日市工業)
北橋 岳洋(洛南)
小川 智樹(大阪学院大学)
宮田 渚生(育英)
福家 柊都(育英)
平岡 大詩(育英)
喜志永 修斗(県立豊浦)
坂口 竜也(県立豊浦)
田中 壱歩(県立豊浦)
中矢 夏樹(新田)
内尾 聡理(福岡第一)
阿保 柊ニ(実践学園)
矢口 拓歩(実践学園)
180 原田 一真(東海大学付属札幌)
越後 元貴(東海大学付属札幌)
後藤 汰知(県立一関工業)
佐藤 陸(県立一関工業)
門間 大翔(聖和学園)
田口 竜誓(県立秋田工業)
岸 佳杜(日本大学山形)
柏倉 神威(日本大学山形)
鈴木 偉(日本大学山形)
塚越 胤信(土浦日本大学)
伊藤 学(県立宇都宮工業)
伊藤 陵(正智深谷)
野﨑 由之(船橋市船橋)
大川 颯斗(船橋市船橋)
金森 優星(高岡第一)
蓮野 加成(北陸学院)
仲嶺 凌汰(美濃加茂)
河東 礼磨(美濃加茂)
山原 誠也(県立四日市工業)
田中 智也(洛南)
高田 知毅(大阪学院大学)
江木 亮太(大阪学院大学)
宗和 風汰(育英)
上田 琉司(育英)
桝見 爵(育英)
虎走 太輔(天理)
森田 健太郎(天理)
松島 盛裕(天理)
辰巳 雄馬(天理)
弘末 武(県立和歌山工業)
中澤 航大(県立鳥取西)
石原 奏志(県立広島皆実)
藤井 翔太朗(県立豊浦)
梅田 陽向(県立豊浦)
濱田 秀斗(県立高松商業)
平 将輝(新田)
濵田 朋知(高知中央)
井手 響己(県立長崎西)
平山 大成(県立小林)
西 瑛介(県立小林)
山田 響生(県立川内)
江川 航希(実践学園)
上塚 亮河(福岡大学附属大濠)

関連

winter_cup2017_2.rb

ウインターカップ2017男子出場校を平均身長で並べ替え

今年もウインターカップが楽しみな時期になってきました。例年通り、今年も「出場校 | ウインターカップ2017 平成29年度 第70回全国高等学校バスケットボール選手権大会」で公開されているデータを元に出場校を平均身長順に並べてみました。

男子*1

学校名 平均身長(cm)
中部大学第一 186.6
福岡大学附属大濠 185.2
福岡第一 184.1
明成 183.9
土浦日本大学 183.5
北陸 182.9
東海大学付属諏訪 182.6
洛南 182.3
大阪学院大学 181.9
正智深谷 181.4
県立四日市工業 181.1
八王子学園八王子 181.1
実践学園 180.6
東海大学付属札幌 180.5
九州学院 180.3
美濃加茂 180.0
船橋市船橋 180.0
高岡第一 179.8
日本航空 179.6
聖和学園 179.6
育英 179.5
県立一関工業 179.3
北陸学院 179.1
日本大学山形 179.1
県立高松商業 179.0
八戸学院光星 178.9
県立宇都宮工業 178.3
飛龍 178.3
高知中央 178.3
県立厚木東 178.1
県立福島南 177.9
県立広島皆実 177.8
県立豊浦 177.8
県立草津東 177.7
興南 177.6
県立秋田工業 177.4
帝京長岡 177.1
前橋育英 176.5
県立和歌山工業 176.1
岡山学芸館 175.8
天理 175.7
県立小林 175.6
柳ヶ浦 175.4
新田 175.3
県立長崎西 175.1
松江西 174.9
県立鳴門渦潮 174.8
県立川内 174.4
県立鳥取西 174.1
県立佐賀東 173.3

関連

winter_cup2017.rb

*1:追記:ベスト8進出校を赤字で示しています