2016年11月20日日曜日

犬・猫用のGPS付き首輪でNuzzleっていうのが素晴らしい(アメリカ限定)

Nuzzleっていう首輪がデザイン的にも使い勝手もとても良さそう。
http://hellonuzzle.com/

外観はこんな感じ。





GPS、3G通信などそういった機能が乗った上で料金が18000円くらい。月額利用料0円!激安!
なんで、安いかというとビジネスモデルとしては、ペット用の保険をターゲットにしているかららしい。
「ペットの健康管理」しましょう、っていうのがテーマである。

バッテリー部分だけ取り外せるところは使い勝手が良さそう。


専用アプリのUIも美しい。





紹介ムービーはこちら。(英語)


以前の記事、「ネコ用のGPSロガーPawtrack面白いね」で紹介したPawtrackより完成度が高い。
まぁ、どちらも日本では使えないですけどね(笑)

2016年8月9日火曜日

山口県の移住・創業支援一覧

山口県がやってた移住・創業セミナーで配布してた資料が良くまとまってたので記録がてらアップ。

表紙




相談窓口


補助金等




店舗改修・家賃補助等




資金融資




こんだけまとめたなら、サイトのどこかに上げればいいのに。。(上がってるのかな?)
こういった一覧の資料は中々ないんだよね。

山口県以外の資料見たことないし、あまり情報知らないけど山口県の移住・創業支援は充実してると思う。

私的に魅力的な支援とは「賃貸補助」「起業支援」の2つ。1人暮らしなので子育て支援とかはいらん。


他にも沢山パンフもらったけど、例えばこんなのもあって市町村毎になんの支援あるかがビジュアルで見れる!




こっちの資料は、住居のサポートは見やすかったけど、詳細な情報が無いので概要を知る用。

ざっくり、魅力的な市町村をメモ。
宇部市・・・UIJターン奨励助成金。引っ越し費用、不動産仲介手数料、家屋回収費用の一部を助成。
下関市・・・人口定住促進住宅「豊北ハイツ」。33,000~50,000円で2LDKの賃貸。最長5年。
萩市・・・UIJターン促進住宅。1DK~3DK、家賃7,000~19,000円。最長3年。
萩市・・・萩市起業化支援助成制度。起業にかかる設備等の費用を1/2の割合で最大50万円支援。

こんなとこかな。
瀬戸内海側にあこがれてるのと、都市部や東京へのアクセスがいいことから、下関と宇部市が魅力的に見える。


個人的に興味ある宇部市、下関市の支援

「おいしい創業やまぐち」の資料から、実際に私が利用できるかもしれない制度を書き出しておく。
※お金貰える要件があるので注意すること

宇部市

・ふるさと起業家支援金(最大150万円)。ただし、「認定連携創業支援事業者から推薦があること」と要件がついており、地域に知人がいないから難しいかもしれん。
・メイド・イン・ウベものづくり支援事業(2/3以内。上限100万円)。年1回の公募だから結構難しい。
・新技術・新商品研究開発事業(2/3以内。上限100万円)。年1回の公募だから結構難しい。

・中央町地区創業施設家賃支援事業補助金(家賃の1/2。上限10万。3年)対象業種であること。(対象ってなんだろ?)中央町1~3丁目の指定場所で操業すること。

この4つ。

下関市

・創業者販路開拓等補助金(1/2。上限20万)特定創業支援事業の利用者。(これ良くわからんけど多分大丈夫だろ。)

・創業支援施設(14,400円/月。2年)。現在満室!

創業希望地現地視察旅費等補助事業(補助金等・山口県)

現地視察用の旅費を上限3万円で支援してくれるそう。これはいいね。



ITで始める場合、人件費が主な出費だから、住居とオフィスの家賃支援が分かりやすくてすごい助かるんだよね。宇部市と下関市を基準にしていこうと思う。

2016年7月31日日曜日

無料の回路図CADはオープンソースのKiCAD(キキャド)が良さそう

回路図すらまともに書けないけど、プリント基板作りたいなぁと思ったのでプリント基板の勉強始めた。(プリント基板の勉強してたら回路図もできるようになるんじゃね?的発想。)

以前に、Designspark PCBというものをインストールして使ってみたのだが、なんとなく使いにくかった。ドキュメントも英語ばっかだし、ビジュアルもいまいちだし、使い方よくわからないしツラタン。。



そんな時、出会ったのが皇潤。




で、CAD探したらKiCADというオープンソースで無料で商用利用可能で、なんら制限のない素晴らしいプロダクトが見つかった。
http://kicad-pcb.org/

何がすごいって、ツールが日本語対応済み!


日本語ドキュメントも用意されてる!
KiCadことはじめ

このドキュメントの「3. 電子回路図の描画」と「4. プリント基板のレイアウト」をやってみた。うむ、何となくイメージつかめた。

ただ、つっかえたところがあるのでメモ。

1.フットプリントの無いネットリストを作成していたのでプリント基板エディタ(Pcbnew)で取り込めない

ドキュメントを上から順にやっていくと、「3.1. Eeschema の使用」の48にてネットリストの作成が行われ、54、55でCvPcbの保存を行う。
それでいいかなぁって、「4.1. Pcbnew の使用」の5でネットリストを取り込むとエラー!
「フットプリントが割り当てられていません。」と言われる。。

そのままの日本語で検索してもいいの出てこないから、仕方なく「kicad pcbnew footprint error」でググったら掲示板で質問を発見。

結論としては、CvPcbでコンポーネントとフットプリントの関連付けを行った後で、48のネットリストを出力する必要があった。(ここは、ドキュメントの記載順変えたほうがいいね。)


2.PCBの外形を定義するときの「Edge.Cuts」のメニューどこ?

「4.1. Pcbnew の使用」の手順11で指定される、Edge.Cutsがすぐに分からなかった。
言われたらすぐわかるんだけど、

ここか、

ここ。

レイヤーというまとまりで、配線とか枠線とかを管理出来て便利!今回は2面だから表面の(F.Cu)と裏面の(B.Cu)で線を引いたけど、もっと層増やしてもこれなら安心やで。


しばらくは、KiCADで頑張ってみようと思う。

2016年7月18日月曜日

IT企業を地方に作ってそこで生活するときの地域を選ぶ基準

東京で仕事してるとあまりにも便利で、「どうやったら地方で仕事になるんだろ?」ってときどき思う。
もし自分が地方で会社を作ってそこで生活するならどんな基準で選ぶか考えてみた。

地方には人もお金も無いので、クライアント(お金を出す人)は東京の人を前提にビジネスを設計するべきというのが持論なので、インターネットを使うビジネスを地方でやることを前提にしている。
別にGoogle検索みたいなサービスじゃなくてインターネットで卵売るとかでもOK。この記事では、大きな採掘場作るとか、工場作るとか単純労働が多く発生する業務は考慮してない。

会社はIT企業と仮定して、評価基準を大きく次の項目に分類した。

  1. 仕事のしやすさ
  2. 人材確保のしやすさ
  3. 一人暮らしのしやすさ
  4. 地域住民との相性
  5. 長く住みたいと思える地域の魅力
1,2,3は会社の成長のために必要な基準、4,5は自分が住みたいと思える基準。それぞれの項目が被ってる部分もあるが、次にもう少し細かく理由を整理する。

仕事のしやすさ

仕事っていうのは結局、人と人が行うもの。機械と機械、動物と動物がするものではないし、人が一人で完結することもできない(普通は)。そうすると、必然と「打ち合わせ」というものが必要になってそれが東京だと圧倒的にやりやすい。地方でもSkypeで打ち合わせ出来ると思ってるようじゃ無理ですわ。東京のクライアントは、直接会える東京の人と契約します。

山手線は5分も待てば来るし、地下鉄も沢山走ってる。電車の時間なんてあまり気にせず駅に向かって、乗ればOKな便利さは東京ならでは。

あと、残業がしやすい。遅くまで電車はあるし、コンビニ、飲食店は空いてるし、タクシーは走ってるし、家に帰れない場合でもビジネスホテルやマンガ喫茶が沢山ある。

この辺を加味すると、地方選定のポイントはこうなった。
  • 都市部への交通の良さ(客や協力会社との連携のしやすさ)
  • 東京へのアクセス(客や協力会社との連携のしやすさ)
  • 飲食店、コンビニの数(残業のしやすさ)
本当は、ビジネスホテルやマンガ喫茶もある方が良いが、地方では車で出社する人も多いし車で帰宅すればいっか。

人材確保のしやすさ

企業を成長させる目標があるなら、ビジネスを大きくするために人材確保が必要になる。エンジニアが必要な企業の場合、高度な学習や思考が出来る人材がいないと仕事にならない。その人材確保が地方では特に問題になる。今まで畑仕事をやっていた50、60才の人がITエンジニアになれるかと言ったらまず無理である。

また、過疎地域にある企業は地元の人しか応募しないような状況にもなりやすいだろう。多く応募があればその中から業務に適切な人員を選べる。しかし、地元の人が時々応募するだけのような状況は強い戦力を追加できず、会社の競争力が失われていく。

高学歴の人間が必ず仕事できるとも思っていないが、やはり仕事を産めるのは高学歴の人間が多いと思っている。それなので、全員である必要はないが高学歴だったり、若い人材が欲しい。

それなので、ポイントは次のもの。
  • 地元以外の人間が応募するか
  • 高学歴の人間が応募するか
  • 若い人が応募するか
また、私がもし採用を担当するときに意識したいと思っているのは次の3点。
  • 正直であるか
  • 知性があるか
  • エネルギーがあるか
これは、Twitterで流れててなるほどと思ったので受け売りw

一人暮らし生活のしやすさ

人材確保と被るが一人暮らしの生活のしやすさも会社の成長を考えるうえで重要。

大学生が就職活動して東京に住み始めると大体一人暮らし。それで、生活がしやすいと残業が多少あっても文化的な生活ができる。生活が楽しくなればその仕事、その地域に長く所属するだろう。

持論だが、残業を平気で出来る人、家で学習できる人じゃないと社会人として成長が遅いし、周りから頼られるような仕事人にならない。残業した後でも、家で学習する時間をとれるように家事は省力化するのが好ましい。

地方でビックリするのは、賃貸アパート、賃貸マンションの少なさ。(家も少ないからそりゃそうなんだけどw)
若い一人暮らしの人が引っ越して来にくいので、賃貸が確保できる地域の方が良い。

あと、地味に天候が生活のしやすさ変える。(週末晴れてると洗濯物できるとか仕事が進む。)

私が考えるこの項目はこんなポイント。
  • コンビニ、飲食店の数
  • スーパーが近くにある
  • 賃貸がある
  • 天候が良いこと(晴れが多いこと)
本当は、娯楽もあった方がいいのかもしれないが、いかんせん私がインターネットがあれば割と楽しいので特に含めなかった。

地域住民との相性

ここからは、仕事のしやすさではなく、自分が長く住めるかどうかの基準。
  • 住民の価値観、倫理観の一致
  • 住民の社会性
  • 住民の経済力
この3つにした。
価値観違うと辛いだろうなというのは、例えば、原発反対する住民だらけの中で原発賛成したり、米軍基地反対する住民だらけの中で基地賛成したりとか。あと、倫理観は同じ方が良いよね。

社会性っていうのは、人と人の関わり合いが下手な地域があるようなので、そういう地域は遠慮したいなと。
例えば、秋田の上小阿仁村(かみこあにむら)とかは酷くて次の様なニュースがある。

村で唯一の医師が辞意。献身的な医師に対する村人の心無い罵声が背景か…秋田・上小阿仁村

【秋田】 上小阿仁村の公募医師がイジメに耐えかね辞意 3人連続1年で

秋田県上小阿仁村に乗り込んだ西村勇医師、体調不良のため退職へ

秋田の医者いじめ村、地域おこし協力隊員を追い出す

日照時間の長い地域の方が、比較的温厚な人は多いっぽい。あと、金持ちが多いとやっぱり心に余裕ある。

長く住みたいと思える地域の魅力

私が東京に長く住みたいと思わない一番の理由が人が多いから。新宿駅とかでも人避けながら歩かないといけないし、電車も人と押し合いながら乗らないといけないし、「なんでこんなに人いるんだよ」って思う。確かに仕事はしやすいし経済を回すための機能は素晴らしい。が、人口が増えすぎて近くの安い保育園や老人ホームには入れなかったり、社会としての機能がパンクしてる部分もある。人が集まりすぎてるのが問題だから、まずは自分が引っ越すか、というのも頭にある。

地方に引っ越した時に住居付近に欲しいものは次のようなもの。
  • 景観(自然と街並み)
  • 治安
  • 物価(住居や美味しい食べ物、飲み物)
  • 災害リスク(震災や津波、噴火、洪水、放射能とか)
  • 娯楽(人工物としては映画とレストランくらいあると良い。海や川、湖で釣りとかしたい。)
  • 学校(子供いないけど、子供育てるなら学校通学できる場所選ぶと思う)
  • 病院(今は殆どいかないので家の近くに無くても良い)



全部が完璧な地域なんてなくて、点数付けするならどういうところかなっていうのでまとめてみました。
前からぼんやり思ってたことを整理できてよかったです。まる。

2016年7月9日土曜日

DataNowにGoogle Maps API V3 で緯度経度を表示、取得できる機能乗せた

ネコ用GPSのPawtrackに刺激されて地図の上にトラック表示するの面白そうと思って、マップを使ったテストしようと思った。

Yahoo地図とかGoogleマップあたりが候補にあがるのだが、情報量も多いGoogleマップに落ち着いた。Googleマップは有料のビジネスプランも存在しており、使用方法は注意が必要。例えば、有料会員しか見えないページでしかGoogleマップを使った機能にアクセス出来ない等はビジネスプランの購入が必要。一方、オープンなページで利用できる機能なら無料プランで良いらしい。

無料で使いたいので最近放置していたDataNowに乗せよう(笑)
それで、動かせるようにしたものが次のリンク。
Googleマップで緯度経度を確認できる。

まだ、機能は少なくて次の2つだけ。

  • 地図の中央の緯度、経度を表示
  • 入力した緯度、経度に移動

でも、こんなリッチなマップを誰でも自分のサイトに入れれるなんて便利な時代になったねぇ。



Googleマップの中央にアイコン画像出すならCSSが良い

ただ、地図、中央にアイコンを表示するのにちょっと手こずった。rails5でcoffeescript使ったせいで普通のjsと違ったところもあるかもしれないけど、Markerオブジェクトにiconで自分の作った画像入れると、coffeescriptのコンパイルがうまくいかなかった。。

hashオプションの初期化を1回じゃなくて、1つずつセットする方法だとコンパイルして画面表示まで出来たのだが、アイコンが中央からずれる不具合が出た。調べてみると、CSSの関係でそういうことが起きたりするらしい。。辛い。

Stackoverflowにあった「Is there a way to Fix a Google Maps Marker to the Center of its Map always?」をみて、CSSで実装した。JSでやるよりサクサク動くし、別に表示以外するつもりないし、こっちの方がいいや。

cssはこんな感じ。(実装はsassでやってる)。

  // google mapは高さを付けないと表示されない。
  #map {
    width: 100%;
    height: 400px;
    border: 2px #808080 solid;
  }

  // マーカーはcssで実装する。(jsでやるとcenterちゃんと取れなかった。)
  #map:after {
    width: 60px;
    height: 60px;
    position: absolute;
    top: 50%; left: 50%;
    background: image-url("ic_map_center.png") no-repeat;
    pointer-events: none; /* This disables clicks on the marker. Not fully supported by all major browsers, though */
    background-size: 60px 60px;
    content: ' ';
    margin: -30px 0 0 -30px;
  }

完璧!


緯度、経度から距離を求めるjsライブラリGeolib使ってみよう

次は、緯度、経度から距離も表示しようと思った。
ただ、緯度、経度の距離って結構面倒くさい。。なにより、緯度によって、経度の1度の距離が変わってしまうから。(参考: 緯度経度1度の距離、 経度1秒は何メートル? )

地図は60進数を使って「北緯35度39分30」のように表す時がある。Googleマップ等は小数点以下を全部10進数を利用するのでその辺の考え方ややこしい。
なんで60進数なんて使うんじゃい!と思ってググったら興味深いこと書いてあった。

それははるか昔、円を360度としたのは、約5000年前のメソポタミアのバビロニア人でした。彼らは月と太陽の動きから60進法を考案して、地球が1日で太陽の周りを回転する角度を1度とし、地球が太陽の周りを一周する一年は360日と決めたので、円一周が360度となったのです。
なる~。

話を戻すと、緯度、経度の距離計算がしたいと思いまして、自分でやるの少し面倒そうなのでライブラリを探しました。

Geolib が良さそう。MITライセンスだし、Star 1000以上付いてるしきっと大丈夫。
今度これを使ってみる。

2016年6月28日火曜日

Pawtrackみたいなもの作るための部品サイズについて

ネコをGPSで追いかけるPawtrack面白そうで作ってみたいけど、実際にコンパクトに収めることできるのか考えてみた。





まず、Pawtrackだけど、多分、機械(装置)が入ってる部分が2か所あって、上のオレンジの部分と、下の黒い部分。(オレンジの部分は中身ないかも?)
黒い部分は、1cmくらい厚みありそう?そしたら、結構もの入れれそうだな。


今、自分が作るなら小さくできなそうな部品が3つ。

  • モバイル通信モジュール
  • PIC+回路
  • バッテリー

これらのサイズを調べると次のような感じ。

モバイル通信モジュール

以前にも使ったことがある3GIMが小さいのでそれを基準に考える。
35mm×25mm×7mm
重さ 7.5g
値段 26,000円
http://tabrain.jp/3GIM_V2.0/Tabrain3GIMV2Press20160210.pdf
https://www.switch-science.com/catalog/2607/

PIC+回路

PIC32MXのDIPをイメージすると、
35mm×20mm×5mm (回路付きでザックリ)
重さ 8g  (回路付きでザックリ)

バッテリー

リチウムイオンポリマー電池の小さいの選ぶ。
容量:110mAh
サイズ:5.7mm×12mm×28mm
重さ: 2.65g
値段 1,000円
https://www.switch-science.com/catalog/506/


全部の長さ合わせると、 35mm + 35mm + 28mm ≒ 100mm

大体、pawtrackの黒い部分と同じじゃない?多分、これらみたいなものがあの中に入ってる。
あと、重さはpawtrackが50gらしいけど、上記3つを足して20g弱と思うので、重量も特別すごい感じはしない。

時間がたったらもっと性能良くて小さい電子部品になるはずだから、将来はもっといいの作れそう。

2016年6月26日日曜日

ネコ用のGPSロガーPawtrack面白いね

ネコって結構動いてるらしい。
このツイートでそのこと知った。
元になってる記事が「GPS Trackers That Show Cats’ Activity During The Night」 でいくつか写真も出てる。





家と道路の雰囲気が外国ですねぇ。

GPS付けるとネコの足取りが分かる!面白い!

Pawtrack という会社がネコ専用のGPSトラッカー販売している。



GPS情報を送信できる首輪を付けると、どこにいるかネット経由で見れると。



価格は日本円で2万円くらい。

テッククランチでも紹介してる。
猫専用のGPS首輪Pawtrack、家にいるときは電池を節約


ただ、日本だと利用できないらしい。Yahoo知恵袋に質問出てた。

pawtrackは2g、別名gsm、gsrm電波でインターネットにつながるるそうです。これの周波数は国際規格だそうで、使っていないのは、韓国、北朝鮮、日本、ツバルだけだそうです。
利用できない理由が、インターネット接続に利用する携帯電話の電波規格が原因みたい。GPSのログをとって、後で端末から回収するタイプは日本でも販売されている。

GPSロガー i-gotU GT-120 という商品だと、Amazonで6400円。



i-gotU GT-600という商品だと、8600円。



レビューを見ると結構好評だが、主な使い道は浮気調査っぽい。。(汗)


ネコ用のGPS発信機付き(ロガーだけではなく)首輪、良いの作れたら日本でも売れそうだな。

  • 小型で軽量であること
  • 充電なしに長時間利用できること
  • 防水でネコに負担をかけない事
のあたりを達成できるといいね。



2016年6月25日土曜日

Arduinoで液晶(M032C1289TP)表示できなくて心折れた。。

液晶に表示したくて買ってみたんですよM032C1289TPっていうの。
http://www.aitendo.com/product/3861

aitendoの3.2インチ液晶モジュールを動かす」とかはとても親切に書いてあるので自分でもできるかなと思ったけどダメだったorz

配線したけどバックライト付けるのが精一杯。



以下、自分がやったことの手順メモ。
(これやっても動かなかったよ!!)

1. M032C1289TPにピンソケットをはんだ付け(40ピンのソケット持ってなくて足りない部分をペンチで切ったりやすりがけして削ったりして40ピン分にするの大変だった)

2. UTFTのライブラリを本家サイトからダウンロード

3. Arduinoのエディタ起動して、「スケッチ」→「Include Library」→「Add .ZIP Library...」から、UTFTのライブラリを選択して登録する

4. Arduinoのライブラリが追加されるが、メモリエラーになるので次のファイルを変更
C:\Users\Hisao\Documents\Arduino\libraries\UTFT\memorysaver.h

//#define DISABLE_SSD1289 1
これを残した以外の、コメントアウトを外す。

5. 液晶のピンの数字を確認する(まず、19ピンを3.3V、1ピンをGNDに接続するとバックライト付くのでそれで確認すると間違いなさそう)

6. UTFT\Documentation\UTFT_Requirements.pdf みながら、Arduionoと液晶のピンを対応表通りに接続する
(液晶のRS、WR、CS、RESTをそれぞれA5、A4、A3、A2に接続してみた)

7. UTFT\examples\Arduino (AVR)\UTFT_Demo_320x240 に入っているスケッチを開く

8. 設定を使うハードウェアに合わせて変更
UTFT myGLCD(ITDB32S,38,39,40,41);

UTFT myGLCD(SSD1289_8,A5,A4,A3,A2);     // aitendoのM032C1289TP (QVGA)

9. 書き込み

10. 実行!

11. 動かない(絶望。。。)


きっと神様が液晶じゃないことやれって言ってるから、一旦諦めよう。

2016年6月10日金曜日

PIC32MXのsleepとかwaitとかdelayする関数について

結論: 無い。

PIC32はdelayするマクロが用意されていないらしい。( yahoo知恵袋 )
別に正確じゃなくていいから、sleep(3) とかそういうことがしたいのよ。。

いろいろ調べてTimer触ったので記念にメモ。

MPLAB Harmonyというものについて

PIC32MXの開発では、開発環境拡張のHarmonyを利用するようになってきているらしい。ネットで少し古いソースコード参考にすると、開発環境に含まれないライブラリをインクルードしてたりして困る。Harmonyには、設定を簡単にするGUI、コードジェネレータ+ライブラリがセットになってる感じだった。Harmonyを使うと20~40%も開発効率があがるとかなんとか。
便利そうだしPIC32の開発に使ってみようと思った。

インストールはググったページみながらやればOK。「MPLAB Harmonyのインストール手順


MPLAB Harmony使ってみる

MPLAB Harmonyの使い方」というページから順にやってみた。丁寧に書いてあるなぁ。。
まずは、コードジェネレータだけ試した。生成したコードをPICKIT3で焼いたらそのままできたのでOK。


タイマーについて

分からない。分からない。分からない。分からない。分からない。本当に分からない。
動かしたけどあってるか自信ない。よく、皆こんな情報だけで動かせるなぁ。。素人にはキツイぜ。

本家サイトの「Using Harmony to Control Timers」に次の表がある。


取りあえず、staticが簡単で使いやすいらしい。

考え方としては、タイマのオシレータに内部クロックを使う場合、
(ペリフェラルクロック) / (プリスケール) / (カウンタ) = 割り込みの頻度
になる。

MPLAB Harmonyの使い方(4)」は前ページで30MHzに設定しているので、それをベースに記述してある。

私は、オシロとか持ってないのでLEDチカチカで割り込みの頻度を確認することにした。PICはいつものPIC32MX120F032B。

タイマ確認手順

まず、harmonyのGUIでクロック設定。Auto-Calculateボタンを押して、表示されるダイアログで20MHzを設定した。


システムクロックを20MHzにすると、デフォルトでペリフェラルバスクロックが半分の10MHzになる。


次にタイマの設定で、MPLAB Harmonyの使い方(4)に書いてある図と自分の設定が合わなくて困った。使い方(4)にある図は次のもの。

一方、私のはこんな感じで若干選択できる項目違った。。


特に分からなかったのが、Clock Sourceで「DRV_TMR_CLKSOURCE_INTERNAL」のINTERNALってなんじゃい!!っていうとこ。参考にしたサイトはPERIPHERAL_CLOCKってあるのに、それが選べなくて悩んだ。
それで、途方にくれながらソースコード生成して、ソースコードジャンプしたら、INTERNALは、PERIPHERALとして取り扱ってるような記述だった。深く考える必要なし(笑)

で、私は10MHzで1秒ごとにLEDを点滅させる作戦だったので、プリスケール256として、timer周期が25.6㎲。よって、1秒の割り込みするなら1/25.6㎲=39063(Timer Period)とした。


設定をしたら、「Generate Code」ボタンを押してソースコード吐き出す。

あとは、Using Harmony Static Drivers to Control Timers を見ながら初期設定を書いてあげた。(最初、 MPLAB Harmonyの使い方(4) だけみながらやったがなんかうまくいかなかったので本家も見た)

app.c の初期化部分で、TRISAレジスタを設定して、RA0を使えるようにして、system_interrupt.c のLEDチカチカする部分こんな感じにした。
---------------------
int status = 0;
    
void __ISR(_TIMER_1_VECTOR, ipl4AUTO) IntHandlerDrvTmrInstance0(void)
{
    PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_TIMER_1);
    status = !status;
    PORTA = status;
}
---------------------

そしたらこんな感じ。



PICは難しいねぇ(笑)

2016年6月5日日曜日

PIC32MX120F032Bで液晶(ACM0802C-NLW-BBH)が動かしたかった。。

動かなかった。。
取りあえず勉強になったのでメモ。



まず、今回やりたかったことをやっていたサイトから。(ソースコードも大体書いてある)
ACM0802C-NLW-BBHを使ってみる ハード編
LCDモニターについて

簡単そうに書いてあるんだけど出来ない!!

今回調べて知ったこと

PIC32MXについて

delayっていうユーティリティメソッドが無い!32bitのpicではdelayが無いのでタイマーを利用したロジックを書かないといけない。
まず、これがすごい面倒くさいんですよ。
液晶の制御で○○㎲以内とか、○○㎲以上のウェイトするとか、指定あるから。

今回、こうしてみたけど多分、間違ってる。

まず、コンフィグで80MHzで動作してるはず。
次に、レジスタ設定でタイマーを有効化して、1/256を設定。
    T1CON = 0x8030; // TMR1 on, prescale 1:256 PB
こうすると、タイマーのカウンタが80MHzの1/256でカウントアップされるのではなかろうか?(推測)
それなので、waitの関数をこうやって定義してみた。

void wait_us(unsigned int us){

    // 今回のタイマー設定なら、80MHzの256分の1の割り込みで3usになるはず。

    unsigned int val = us / 3 + 1;

    TMR1 =  0;

    while ( TMR1 < val){}

}

(この考え方が本当にあってるのか、今度、LEDチカチカでざっくり測定してみよう)

2016/6/10 追記:

上の考え方間違ってる。ブログ記事書いた。


液晶(ACM0802C-NLW-BBH)について

どうやって制御するのか全く知らなかったのでとっつき方が分からなくて大変だった。
まず、データシート開いて、全14ピンの機能を確認。


4bitモードで利用するときは、DB0~3は未使用なのでGND。
また、R/Wピンは、今回writeしかしないのでGNDでOK。(そのため、ソースコードに書かなくてよい)

初めてタイミングチャートなるものを見た。書き込みの場合のタイミングチャートが次のもの。



この図があらわしているのは、RSピンを1or0にして、R/Wピンを0にして、Eピンを1にして、DBピンでデータ書き込むということ。
へぇ、なるほどねぇ。

液晶のピンとPICのピン(BRとか)を1つずつ接続してあげれば、PICから命令できるようになるようだ。(出来なかったけど!)

一応、ソース。

Lib_LCD.h
================
#ifndef LIB_LCD_H
#define LIB_LCD_H

#include <xc.h>

// 参考1: http://amahime.main.jp/lcd/main.php?name=lcd
// 参考2 : http://minkara.carview.co.jp/userid/1540421/blog/27503415/

/********************************************
 * 液晶表示器用ライブラリ ACM0802C-NLW-BBH専用
 ********************************************/
#define LCD_PORT    PORTB   // DBピンの出力ポート(RB0~RB3を使う)
#define LCD_RS      PORTBbits.RB5     // RSピンの接続ポート
#define LCD_E       PORTBbits.RB6     // E(STB)信号
// LCDのデータシートに書いてあるタイムチャートには次の4つが書いてある
// 1. レジスタ選択信号(RS)
// 2. 読み出し/書き込みの選択信号(R/W)
// 3. 動作起動信号(E)端子
// 4. 入出力データ信号(DB0~DB7)

#define RS_CMD  0
#define RS_DATA 1


void lcd_send(char code, int rs);
void lcd_str(char *str);
void lcd_data(char data, int);
void wait_us(unsigned int);
void wait_ms(unsigned int);


void lcd_init(void){
    wait_ms(30);

    // Function set
    lcd_send(0x02, RS_CMD);
    lcd_send(0x02, RS_CMD);
    lcd_send(0x08, RS_CMD);
    wait_us(50);

    // Display ON/OFF control
    lcd_send(0x00, RS_CMD);
    lcd_send(0x0C, RS_CMD);
    wait_us(50);
 
    // Display Clear
    lcd_send(0x00, RS_CMD);
    lcd_send(0x01, RS_CMD);
    wait_ms(2);
 
    // Entry Mode Set
    lcd_send(0x00, RS_CMD);
    lcd_send(0x06, RS_CMD);
    wait_ms(5);
 
}

// ビットチェンジ及び信号制御
void lcd_send(char code, int rs){
    // 4bit命令用のマスク(RB0~RB3までを使い、他のbitは状態を残す。)
    LCD_PORT = (LCD_PORT & 0xF0) | (code & 0x0F);
 
    LCD_RS = rs;     // 0: コマンド、1: データ
    wait_us(40);
    LCD_E = 1;
    wait_us(1);
    LCD_E = 0;
}

// 文字列を出力する
void lcd_str(char *str){
    while(*str != 0x00){
        lcd_data(*str, RS_DATA);
        str++;
    }
}

void lcd_data(char data, int rs){
    lcd_send(data >> 4, rs);
    lcd_send(data, rs);
    wait_us(50);
}

// 指定した時間だけ待機する(ただし、正確ではない。)
void wait_us(unsigned int us){
    // 今回のタイマー設定なら、80MHzの256分の1の割り込みで3usになるはず。
    unsigned int val = us / 3 + 1;
    TMR1 = 0;
    while ( TMR1 < val){}
}

void wait_ms(unsigned int ms){
    int i;
    for(i=0; i<ms; i++){
        wait_us(1000);
    }
}

#endif /* LIB_LCD_H */
================


main.c
================
#include <xc.h>
#include "Lib_LCD.h"

// Config settings
// POSCMOD = HS, FNOSC = PRIPLL, FWDTEN = OFF
// PLLIDIV = DIV_2, PLLMUL = MUL_16
// PBDIV = 8 (default)
// Main clock = 8MHz /2 * 16    = 80MHz
// Peripheral clock = 80MHz /8  =  10MHz

// Configuration Bit settings
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 10 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
//
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8

char dispText[] = "HELLO";

void init_pic(){
    // disable JTAG port
    DDPCONbits.JTAGEN = 0;

    TRISA = 0;      // all PORTA as output
    TRISB = 0;

    // wait関数のためにタイマ設定
    T1CON = 0x8030; // TMR1 on, prescale 1:256 PB
}

void main(void) {
    init_pic();
    lcd_init();
    
    //lcd_data(0x81, RS_CMD);
    //lcd_data(0x30, RS_DATA);    // 0
    
    // 液晶に表示
    lcd_send(0xC0, RS_CMD);
    lcd_str(dispText);
     
    while(1){
    }
    return;
}
================


まとめ


今回、まずPICの回路で電解コンデンサ付ける場所間違えてて、
Failed to program device
Selected device and target: memory mismatch.
ってエラー出たのでハマってた。(19,20で繋がないといけないのに、18,19で繋いでた)

今回失敗した原因と思わしき場所
・waitの時間が正しくない
・回路でLCDが5V(アダプタから供給)、PICが3V(PICKITから供給)と2つ使ってるからダメ
・回路間違ってる?

次の装置は動くようにお祈りしましょう。

2016年6月2日木曜日

彼女とボートでクルージングするために小型船舶免許を取得しました

皆さん、海は好きですか?

海ってほんといいですよね。のびのびしてて。
海・川・湖のレジャーの幅を広げようと思いまして、小型船舶免許(2級)を取得しました!
(海好きな子けっこう多いですよ。)

私も国家資格である「小型船舶操縦士」になったわけです。
この試験、1億人が受験したら1000万人不合格者が出るというほど難しいそうなので、気合を入れて勉強しました。努力の甲斐あって、見事一発合格です!!

免許があるとできること

小型船舶免許がありますとこんな船で釣りしたりできます。


免許的には20トン(容積なのでかなり大きい)までOKなので全長20mくらいまでは大体大丈夫かと思います。
高級なタイプだとこういうのもOK。


内装も立派。


このくらいのボートで遊ぶのが現実的かな。


一級と二級の違い

小型船舶免許は「一級小型船舶操縦士」と「二級小型船舶操縦士」の2種類あって、今回私が取ったのが2級の方です。一級と二級の免許の違いは、海において陸からどこまで離れて良いかだけで、一級は無制限、二級は5海里(約9km)となります。

試験内容は、一級の出題範囲が増えますが、二級と実技は同じなので、二級と一級と難易度的には大きく変わらない印象です。


彼女とクルージングするために必要なもの

  • 小型船舶免許
  • ボート
  • 彼女
あと2つ!!

2016年5月7日土曜日

カメラで撮影して画像比較するのマイコンでやりたくて本買ってみた

温泉行った時に、コインロッカー使ってて中身の有無ってどうやって確認してるんだろ?って思ったのが始まり。
温泉のコインロッカーって職員が毎日チェックしてるのかな?
靴箱と更衣室にコインロッカーあったけど、結構の数があったな。

最近のコインロッカーは、suicaで決済できたり、インターネットに繋がってて使用状況を確認できたりするらしい。でも、カギのON/OFFで使用状態みるだけだと、ロッカー内の物の有無は分からない。
物が入っているかどうかを判定する方法はパッと次のようなもの思いついた。
  • カメラで見る
  • 重さ測定する
  • 物理的に触る(センサー)
  • レーザーとかで光学的に触る(センサー)
最初、レーザーとかで触るのが簡単そうかなと思ったけど、値段が高いのとセンサーで全部を触るの難しそうな感じがした。距離を測る装置で超音波使うのもあったけど、コインロッカーの中で超音波計測が上手くいく気がしなかったので却下。

安く、簡単に、素早くやる方法、何がいいのか分からないけど、とりあえず一番シンプルなカメラで検討してみることにした。

3dスキャナ調べてて見つけたもの

物の有無ってどうやって判断するか全く知らんのですが、3Dスキャナーというものもあるし原理を調べてたんですよ。

そしたら、こんなことやってる人見つけた。
【ニコニコ動画】1000円で立体スキャナ作ってみた

なるほど、光の線を読むことで物の形を把握できるのか。これなら安くできそうw
物の有無判断するときは、同じ位置から撮影して、同じ光のあて方した2つの画像比較したらできそうって思った。

買ってみた本

カメラモジュールの使い方が知りたかったのと、画像の比較するときのプログラムが知りたかったので次の2冊。



この2冊がどっちもAmazonレビュー酷くて買うの躊躇するレベルw

まず、「カメラ・モジュールの動かし方と応用製作(トランジスタ技術SPECIAL)」のレビューは星1の1件しか入ってない。

買いにくいなぁ。。買ったけどw


「これほど誤りのある専門書を今まで見たことがありません。しかも、数式での誤字が多く見受けられ、読者を混乱させる致命的なミスもあります。」ワロタ。。。

星5付けてる人もいるしまだ安心だが、星1付けてる人のレビューも辛辣。

買いにくいなぁ。。買ったけどw


レビューを無視して買う僕、勇者。カッコいい。

というか、他に適当な本が見つからないから買った。
まぁ、本書いた人が間違ってたとしても、それなりの経験者が調べながら書いているはずだから、全くの素人の私からすると知らない情報ばかりで勉強になるだろう。

今の目標: マイコンで写真撮影して画像比較する!

2016年5月1日日曜日

日本酒の酒蔵っていくつあるのか調べた

日本酒を好んで飲む北村です。

そういえば、日本酒の酒蔵ってどのくらいの数があるんだっけ?というので調べてみました。
国税庁の「清酒製造業の概況(平成26年度調査分)」を見ればいいかな。

清酒製造業者数について

平成25年度は、大企業、中小企業合わせて1479者が清酒製造業者として登録されていたらしい。
へぇ、結構ある。
参考にした清酒製造業者数の推移には、平成10年からの数値が書いてあって、当時は2073者が登録されていたみたい。年々、減り続けているようだ。(毎年で30~40くらい減っているみたい。)


地域ごとの清酒企業数について

企業数の推移に都道府県別の企業数が書いてある。
ざっと、1400くらいある企業を取り出して、多い順に並べたのが次の表とグラフ。

1位~24位



25位~47位




以下、感想。

新潟は知名度もあるしやはりという感じ。
長野って日本酒を沢山作ってるイメージ無かったけど多いんだね。
大学が石川にあって、沢山日本酒飲んだから石川って日本酒が有名かとおもったらそうでもないのかも。
暖かい地域は日本酒作りにくいと思ってたけど、宮城、大分、佐賀は、私の故郷、群馬より多い。
へぇ、暖かいっていっても九州くらいなら問題ないんだな。(昨日飲んだ佐賀の純米大吟醸美味しかったよ♡)
東京、大阪、神奈川の都市部が日本酒は弱いっぽい。水源から遠いからかな?
よく水不足で話題になる香川は、水が貴重だから日本酒が少ないのかもと思った。


2016年4月9日土曜日

リアルタイムチャート表示サービスDataNowの使い方

DataNow公開しました!!
ちょこっと、DataNowの紹介しますよ。
みんな使ってね!(いつまでサービス続けるか分からないけどw)




背景

IoT機器の数値を確認するときに、xively的なwebホスティングサービスが便利。
ただ、登録数に制限があったり、セキュアなせいで使い勝手が悪かった。
テスト中だけ値確認出来ればいいんだよ!という個人的な要望があった。

DataNowの使い方

  1. 無料でアカウント作成
  2. データゲート(データの入り口)を追加
  3. モニタリング画面をブラウザで表示
  4. データをgetかpostで送信
とっても簡単!

リアルタイムチャート

こんなのをすぐに表示してくれる。


チャートのオプションとか増やしてもいいな。

テクノロジー

新しいバージョンをテストしたかったのもあったので、安定していないものを使ってみた。nodeは初めてだったのでLTS付いてる4.2系にしといた。

リアルタイムチャートにwebsocket使ってみたくてnodeを使ってみた。(あんまりwebsocketが生きていないがw)

今は1台のwebサーバでやっているのでredisでセッション管理をやっていない。
複数サーバになったらwebsocketのセッションとか考慮しないといけなそう。
  • Rails 5 beta3 (これのテストも兼ねた)
  • Node.js 4.2.6(初めて触ってみた)
  • Bootstrap 4 (使ってみた)
  • websocket (socket.io使ってみた)
  • epoch (リアルタイムチャート描ける)
  • PostgreSQL (railsとnodeで使ってる)
  • AWS (2インスタンス使ってるから稼働中はミニマム毎月5000円くらいかな)

あとがき

疲れた。

2016年3月30日水曜日

node.jsディレクトリ構造のベストプラクティス

nodejsは右も左も分からない初心者なのですがディレクトリ構造しっかりしたいなと思ってググりました。日本語であんまり出てこなかったから英語のサイトに行ったら充実したページがあった。
Best practices for Express app structure

細かい内容は本サイト見てもらうとして、概要だけメモで残しておきます。
ベストプラクティスはこれだ!!

project/
  controllers/
    comments.js
    index.js
    users.js
  helpers/
    dates.js
  middlewares/
    auth.js
    users.js
  models/
    comment.js
    user.js
  public/
    libs/
    css/
    img/
  views/
    comments/
      comment.jade
    users/
    index.jade
  tests/
    controllers/
    models/
      comment.js
    middlewares/
    integration/
    ui/
  .gitignore
  app.js
  package.json


へぇ。分かった。
expressのgenerator使うとroutesっていうディレクトリできるんだけど、それがcontrollersに対応するって勝手に解釈した。

helper・・・機能(ディレクトリ)でまたがって必要になる処理
middleware・・・コントローラーの共通処理をまとめる。直接のDBアクセスは禁止な。って書いてあるけど、初心者の私が作る小さなプロジェクトならここまで細分化しなくていいやって思った。
models・・・DB処理まとめる。

他はrailsに似てるなという感想。
やってみよう。

2016年3月21日月曜日

備長炭とかの「炭」について調べる

この前、テレビで備長炭の職人の年収が1000万円位だが、後継者がいないと言っていた。子供たちは、都市で仕事しているそう。なんだと!炭ってそんなに儲かるのか!?というところから少し調べてみます。

炭の需要はあるの?

備長炭等の高級な炭の需要は安定的にあるそうで、供給が足りていないそうです。特に高級な飲食店では、高品質な炭を利用しているそう。

茶道具を取り扱ってる石橋静友堂というサイトで次のような炭不足のお知らせが出てるくらい。
十年ほど前から 原木の不足・職人の減少 等々の理由により 「炭」が不足する状況が発生し、弊店でも (しばしばブログで取り上げ) かつ 安定供給に努めて参りましたが、東日本大震災 以降、状況は 悪化の一途をたどり、この度、現在の仕入先でも 安定的な入荷がかなわぬ 事態となってしまいました。
へぇ、そうなんだ。


年収は?

自分で釜持ってて、質のいい備長炭を安定して出荷できるなら1000万円は超えそう。
和歌山県南部川村特産備長炭最硬質というページにこんな記載がある。
このお二人は、まだ脱サラ2,3年目で、「3回できればいい方。」との事であった。聞いてみると、二つの窯を持ち、月4回このサイクルをこなせれば、ほぼ大企業の部長クラスの年収に匹敵しそうな炭の単価だった。
高知のトピックだと「2013.12.04 【室戸市】高知で働く。『土佐備長炭 窯元 炭玄』」にはこんな記述がある。
一回の窯だしで炭の出来によるけど、だいだい60万円くらいになる。室戸で十分暮らせる仕事になります!
十分暮らせる、っていうのはこの60万円を数人で割るのかもしれないが、個人でやってるなら結構の収入になりそう。


ただし、これは備長炭等の高級な炭を取り扱える場合!!中国産の安い炭と競合になる炭を生産する場合は、もっと安い給料になる。週間ポストの記事では月収20万円くらいは頑張れば行けると書いてある。
「炭焼き職人」は月額20万円程度の収入を得られる仕事

元記事は既に消えているけど、2chに残ってる新潟県魚沼の炭焼き体験募集のニュースには、
市によると、昨年は30人以上が参加したが、後継者候補は出てこなかった。市農林課は「生業とするには難しい点も多いが、体験を通して関心を持ってもらいたい」と呼びかけている。
と、生業にするには難しい位の収入にしかならないそう。この感じだと20万円切るかもしれない。


備長炭とは


本来木炭(白炭)の一種であり、ウバメガシのみを備長炭と呼ぶが、広義において樫全般、青樫等を使用した炭を指す場合もある。ただし、外国産のものを備長炭として販売する業者があるが、広義においてもそれらは外れるので注意が必要である。
 紀州備長炭、土佐備長炭、日向備長炭などが存在し、また偽物も存在する。
 白炭はなるべくなら製造所から直接購入し、短期間で使い切るのが好ましい。保管する場合は湿気が入らないよう厚手のビニール袋に密封し、場合によっては乾燥剤を添えるのが適切である。
ウバメガシというカシの木を使って、白炭にするのが王道の備長炭。湿気に弱い。っていうのを理解した。

最近は、紀州(和歌山)で生産された備長炭を「紀州備長炭(商標登録)」としてブランド化しているそう。

紀州備長炭とはのページに書いてある備長炭のメリットで、際立ったものは次のような感じ。

  • 赤外線の量が多い(ガスの火より多い)
  • 安定した火力
  • 長時間燃焼
  • 炎が少ない
  • 無煙
  • 臭気無し

デメリットは、

  • 高価
  • 着火しにくい

などがあげられると。あと、湿気に弱いを追加してもいいけど、それは他の炭も同じかな。


炭の種類

備長炭は白炭(はくたん)で黒炭(こくたん)とは違う、みたいな説明があったので、それぞれなんじゃいということで調べる。

wikiの白炭より。
白炭(はくたん、しろずみ、英: Hard charcoal)とは、木材を炭化させた木炭のなかから、高温で焼成し、窯の外へ掻き出して素灰を掛けて急冷させ消火して作るものを指す[1]。主に備長炭などが知られる。主成分は、ほぼ炭素であり、ごく少量アルカリ塩を含んでいる。
白炭は生成過程での高温処理の為に黒炭より炭素率が高い傾向にあり、その分、低温処理された黒炭よりは余分な燃焼ガスの放出も少ないことから炎や燻煙で食材に焦げ目や雑味が付くことも少なく、焼きもの調理に適していると言われていた。 しかし、近年に於いては1000度に達する高温で処理された黒炭も存在し、一概に白炭の炭素率だけが高いとは言い切れない様になりつつある。
煙や臭いが出にくくて良い炭は白炭にまとまりそうだなぁ。ここでちょろっと書いてある、高温で処理された黒炭の性能が分からん。

wikiの黒炭より。
黒炭(こくたん、くろずみ、英: Soft charcoal)とは、木材を土窯を使い炭化させた木炭である。主成分はほぼ炭素であり、ごく少量アルカリ塩を含んでいる。
黒炭は主にナラ、カシ、クヌギなどが専用の土窯で比較的低温で炭焼され、密閉鎮火して製造された木炭である。備長炭に代表される白炭との大きな違いは製法にあり、白炭は精錬時に内部温度が1000度ほどになるのに比べ、黒炭は400度から700度ほどとされている[1]。ただし、近年では白炭精錬時と同等の1000度に達する高温で精錬し、炭化率も白炭と同等のユーカリ材等を使用した高品位な黒炭も存在する。黒炭と白炭の大きな違いは消火方法であり、白炭は灼熱した状態で窯の外へ掻きだし、白色の消し粉を掛けて急冷鎮火させるが、黒炭は焚き口に蓋をしたうえで煙突にも蓋をし、酸欠下で消し壺のように時間をかけて鎮火させる点にある。黒炭は白炭に比べて柔らかく、白炭よりは比較的容易に着火剤やバーナーで着火することができ、燃焼温度や火勢自体は強く、着火しやすい。
白炭と黒炭は消火方法で色が変わるそう。白炭の方が高く売れるなら白炭にすればいいじゃんと思ったけど、良質な木材とブランドが無いと売れないから、バーベキュー向けの黒炭の方が良くなるのかなと思った。


木材の産地について

日本は山が多くて、どこでも木が手に入りそうだが、備長炭の場合はその材料の調達が大変で高価になっている部分があるそうだ。
備長炭の材料になる木は、ウバメガシの他、本ガシ、アラカシも利用するそう。(知られていない カシ、その他の原木の紀州備長炭

ウバメガシは、丈夫なので街路樹などにも利用されるが、温暖な気候を好み神奈川県以南でないと自生していない。特に、四国や紀伊半島の温暖で乾燥しやすい地域に林を形成しているそう。

ウバメガシは手に入れるのが中々難しそう。じゃあ、カシはどうなの?ということで、wikiの他のカシについてのページを順に確認。

アカガシ・・・本州の宮城県・新潟県以西、四国、九州、朝鮮半島南部、中華人民共和国、台湾に分布する常緑高木。

イチイガシ・・・本州(関東以西の太平洋側)・四国・九州・済州島・台湾・中国に分布する。

アラカシ・・・中国、台湾、日本(本州東北以南、四国、九州)に分布する。

ハナガカシ・・・宮崎県以外では、鹿児島県、大分県、高知県、愛媛県に稀産する常緑高木。絶滅危惧種。

オキナワウラジロガシ・・・日本の固有種で、奄美大島、徳之島、沖縄島、久米島、石垣島、西表島の湿潤で肥沃な非石灰岩地に分布する。

シラカシ・・・福島県以西、朝鮮半島南部の山地に自生するが、主に関東地方の照葉樹林帯に多い。照葉樹林の構成種ではあるが、この森林帯の北限付近で多く見られる。本州南岸以南では数が少ない。

ツクバネガシ・・・宮城県・富山県以西の本州、四国、九州、台湾に分布する常緑高木。(なんで、東北は宮城県だけ生えてるんだろ?)

ウラジロガシ・・・日本では本州の宮城県・新潟県以南から四国、九州、琉球列島に分布する。日本国外では朝鮮半島南部と台湾に分布する。

ウバメガシ・・・日本での分布は本州の神奈川県以南、四国、九州、それに琉球列島に分布する。日本国外では中国中部、南部、西部とヒマラヤ方向へ分布が広がっている。また、沖縄県が分布の南限である。


関東より北はカシが必要になる備長炭作るの難しそう。でも、結構広い範囲で炭は作れそうだね。


epochを使って簡単にリアルタイムチャートを作る手順

リアルタイムチャートを作りたくて、ブログとか少し調べてました。
【Javascript】グラフ・チャート描画用のjsライブラリまとめ  に色々書いてあって比較しやすかったです。
簡単に使えて、キレイで無料で、商用にも使えるライセンス等のごくごく入門的な観点で選んでいたのですが、Epochというのが良さそうだったので今回はEpochを使います。

Epoch本家サイト を見ると次のように書いてあります。
A general purpose real-time charting library for building beautiful, smooth, and high performance visualizations.
「リアルタイムチャート作りたいなら黙ってEpoch使っとけ。」とのこと。はい、分かりました。

手順1. デモを動かす

Epochのリアルタイムチャートのドキュメントページ見ただけだと情弱の私には分からなかった。
それなので、デモを動かします。

次の様なリアルタイムチャートを描画したいと思います。


まず必須のライブラリを読み込みます。

  • <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  • <script src="//d3js.org/d3.v3.min.js"></script>
  • <script src="/javascripts/epoch.min.js"></script>

次に、データ取得部分がわからなかったので、ドキュメントページのHTMLを見るとたったこれだけの記述。

========================
<div id="real-time-line" class="epoch" style="height: 200px"></div>

<script>
$(function() {
    var data = new RealTimeData(2);

    var chart = $('#real-time-line').epoch({
        type: 'time.line',
        data: data.history(),
        axes: ['left', 'bottom', 'right']
    });

    setInterval(function() { chart.push(data.next()); }, 1000);
    chart.push(data.next());
});
</script>
========================

newしてるRealTimeDataってなんじゃい!と思ったら、html丈夫のdata.jsに書いてありました。このjsも持ってきて読み込みます。

はい、これで動きました。jsの読み込みとか間違って無ければ、短いhtml書くだけで大丈夫なはず。


手順2. 描画に必要な処理をザックリ理解する

デモを動かすところまでに出てきたメソッドの意味などを一応確認します。
  • 必須ライブラリ(jquery, d3, epoch)の読み込み
  • 描画に必要なデータフォーマット(ドキュメント参考)を作る処理の実装 ※デモではdata.jsの部分
  • divにidふって描画領域の確保
  • $().epochメソッドで初期化
  • pushメソッドでデータ追加
  • setIntervalで定期処理実施
このくらいですね。

手順3. nodejs+websocketに応用する

前回の記事「Xivelyみたいに投げられた値をリアルタイム描画してみたい」を目指していたので、投げられた値をそのまま描画したかったのです。websocketならnodejsの評判が良さそうなのでnodejsをテストしてました。

D3.jsベースのEpochを使ってリアルタイムチャートを描いてみる」のページがまさにそれで、詳しく書いてあります。


以下、私がやったメモ。

・nodejsの実行環境用意

・expressのジェネレータ使ってパッケージ作成

・socket.io使う準備
ここ、このやり方で正しいのか分からんけど、www/binでserverオブジェクト作ってて、socket.ioのオブジェクト欲しくて、ただ、別のファイルでsocket.ioのオブジェクト使いたかったのでグローバルにした。グローバル変数あんまり使いたくないんだけど、本当はどうやるのがいいんだろ。誰か教えて。。
======
/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * websocketを使うために接続
 */
global.socketio = require("socket.io").listen(server);
======

・app.jsにfeedsっていうエンドポイント追加。
======
var feeds = require('./routes/feeds');
======

・そんで、feeds.jsってファイル作って、websocketで接続できるようにした。
=====
var express = require('express');
var router = express.Router();

/* GET feeds listing. */
router.get('/', function(req, res, next) {
  res.send('thanks!');

  value = req.query.value | 0;
  global.socketio.emit("paramData", {message: 'hello', value: value});
});

module.exports = router;
=====

サーバサイドここまで。

クライアントサイドのは、デモで作ったリアルタイムチャートのコードをベースにする。
変更部分は、ランダムでデータ出力していた部分をサーバから受け取った値を表示するようにすること。
currentValueというグローバル変数を用意して、この値を変更、描画するように改造する。

・websocketの部分はこんな感じ。
======
var socketio = io.connect(window.location.href);
socketio.on("paramData", function(d) {
  $('#messages').append(d.value);
  // グラフデータ受信
  currentValue = d.value;
});
======

・グラフ描画部分はこんな感じ。
======
$(function() {
    var data = new RealTimeData(2);

    var chart = $('#lineChart').epoch({
        type: 'time.line',
        data: data.history(),
        axes: ['left', 'bottom', 'right']
    });

    setInterval(function() { chart.push(data.next(currentValue)); }, 1000);
    chart.push(data.next(currentValue));
});
======

・あとは、data.nextで受け取った値を描画するようにすればOK!


epoch君、これからよろしく。