Recent Photos from Atelier (Flickr)

作業場で撮影した写真をアップロードしています。記事にする前の試作なども公開中です。

2016年11月13日

AkiCartをちょっとだけアップデートしました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

初めての東京の冬。いきなり寒くなって風邪気味です...

さて、6月に公開した、秋月電子通商のパーツで電子部品リストを作って一発で買い物かごに放り込めるサービス AkiCart について、少しだけ機能追加したのでご報告です。

1. パーツリストにコメント投稿できるようにしました
自分や他人が作ったリストに対してコメントを付けられるようにしました。
DISQUSを利用しています。(画像とかも投稿できます)
Qiitaのコメント欄やクックパッドのつくれぽ...みたいに使われれば理想的ですが、まぁ、とりあえず感想やら質問やらを書き込む場所としてお使いください。

AkiCartはリストの説明欄に特定のHTMLタグが使用可能で、説明や作り方などの記載もできるようになっています。
参考: ESP-WROOM-02でミニマルなIRKitクローンを作る | AkiCart

リストを公開する方も、完成後の画像や簡単なコード、GitHubリポジトリへのリンクなどを記入していただければ、もっと便利になると思います。(説明欄をリッチに使ってる人が自分しかいなくて悲しい...)
AkiCartだけで、パーツの一覧と個数、作り方、そしてコミュニティが完成すれば素敵だなぁと願っています。

2. 匿名公開を実装しました
今までは、リストの表示権限について3つ用意していました。

公開 : 誰でもリストを閲覧できる。トップページに表示される
限定公開 : URLを知っている人だけが閲覧できる。トップページには表示されない
非公開 : 自分以外は誰も閲覧できない。トップページにはもちろん表示されない

ここに新たに「匿名公開」という権限を追加しました。
匿名公開は、公開と基本的に同じですが、リスト作成者の名前が伏せられます。
アノニマス パーツ リストです。
リスト作って公開したいけど、自分の名前(Twitterアカウント)が晒されるのは嫌だ...という方は是非使ってみてください。

3. 検索機能を実装しました
簡易的ですが、検索することが出来るようにしました。
スペース区切りでAND検索できます。
現時点では、リスト名とリストの説明に含まれるキーワードで検索を掛けるため、リストに含まれている部品名では検索できません。(近いうちに対応させたい)
利用者のみなさん、リストに簡単で良いので説明を書きましょう!

4. HTTPSに対応しました。
Let's Encryptが正式サービスとなったので、これを使ってhttps化しました。
今のところ、まだhttpでもアクセス可能です。
近いうちにリダイレクトを掛けようと思っています。

とりあえず、こんなところです。

そのうちやりたいこと、としては
・パーツ1つに対して補足情報を付けられるようにする
・秋月電子以外にも対応(共立とか?)
などなど...

こんな機能が欲しいなどありましたら、このブログへのコメントやTwitter @9SQ で緩く受け付けています。


AkiCart

https://aki.prioris.jp/

2016年10月15日

e-statのshpを全国分取り込んで国交省の行政区域shpと比べてみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

久々にGISネタです。

国交省の国土数値情報ダウンロードサービスでダウンロードできる行政区域のShapefileは以前の記事でも取り扱いました。
国土数値情報 行政区域データは全国の行政界を記録したものですが、これは市区町村界レベルであって、大字(〜丁目)レベルの境界ではありません。(行政界なので当然なのですが)
そこで、現状無料で手に入る大字レベルのshpとして、総務省統計局のデータを利用してみることに。

e-Stat 政府統計の総合窓口

地図で見る統計(統計GIS) → データダウンロード → 国勢調査 → 平成22年国勢調査(小地域) 2010/10/01 → 男女別人口総数及び世帯総数 → 市区町村を選択 → 世界測地系平面直角座標系・Shape形式

これをダウンロードします。
ダウンロードするのですが... これを全国分となると、市区町村を選択してShapeを選んで...という作業をおよそ1900回繰り返さなければなりません。
一括でダウンロード出来ない理由は負荷軽減のためで、全国分欲しい人は地図屋からデータ買ってねという記載があるので、ちゃんと正攻法で買いましょう。
そもそも、このShapefileは数値情報を上に重ねたりグラフ化したりするためのもので、境界域を得る為に使用するものではありません。

...ただ、今回はスクリプト書いて全部ダウンロードさせてもらいました。(ごめんなさい)
一括ダウンロードのためのスクリプトは載せません。

結論としては、やはり地図屋から買った方がいいです。
しかし、同じことを企む人たちのために、何故そういう結論に至ったのか書き残そうと思います。

まずは、視覚的に比較するためにShapefileを取り込みます。
e-Statから手に入れたデータはzip化されてますので、まずは解凍。

unzip \*.zip

出てきたShapefileをQGISで結合します

1. ベクタ → データマネジメントツール → 複数のシェープファイルを1つに結合する
2. フォルダのレイヤによって選択する にチェック
3. 入力ファイルで .shpファイルを全て選択して、エンコードにSift_JISを選択 → Open
4. 出力シェープファイルで保存先を選んでエンコードにUTF-8を選択 → Save
5. OK で処理開始

この段階で結合されたshpができあがるのですが、CRS(測地系)がEPSG2454(JGD2000)になっていると思うので、今後扱いやすいようにEPSG4326(WGS84)で保存し直します。

1. 結合処理が終了して、レイヤに追加されたデータを右クリックして名前を付けて保存
2. パスに保存先を選び、CRSにEPSG4326(WGS84)を選択してOK

これで準備完了。


千代田区の大手町1丁目を選択してみました。
なんだか良さそうな雰囲気。

では、すこしズームアウトして湾岸部を見ましょう。


なんだか海岸線とは思えない鋭利なラインが目立ちます。
この上に国交省 行政区域データを重ねてみます。


どうやら、海域の一部も含まれているので、陸地の境界域として利用するにはイマイチでしょう。
(こういう海域が取り込まれている部分が全国の海岸部分に沢山あるので、1つ1つ手で除去とかアホみたいに時間掛かることはしません)

それと、もう1点。
これは統計局のデータではなく国交省のデータの問題なのですが...


中央の濃い赤は統計局shpの皇居、周囲の赤は国交省shpの千代田区です。
周囲の境界をよーく見てみると...


濃い赤の選択部分は統計局shpの八重洲1丁目、周囲の赤は国交省shpの千代田区です。
八重洲1丁目が千代田区と中央区に跨がっています。
こういうポイントが全国各地に山ほどあります。

どちらのデータに問題があるのか、原典として使われている地図を調べてみないと分からないですが、おそらく国交省行政区域データの方が粗いのではないかと思われます。
ベクタなので、点の数が増えれば複雑な形状にもフィットする境界を描けて、逆に点の数が少ないと簡素な境界しか描けません。
もちろん、点を増やせばデータサイズも増えます。

ということで、結論ですが...

1. 大字レベルのShapefileが必要なら地図屋さんから買いましょう。
2. 厳密な市区町村界が欲しいなら、購入した大字レベルのShapefileから市区町村レベルで地物の結合をして生成しましょう。

以上です。

普通、業務でこういったGISデータを利用されている方にとっては当然なのでしょうが、個人であれこれやるとぶつかりそうな問題だなぁと思ったので書いておきます。

2016年9月20日

ミニマルなIRKitクローンを作ってiOSから家電を制御する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
どうも、お久しぶりです。生きてます。

さて、iOS 10が配信開始されて新たに登場した「ホーム」アプリのおかげで、日本ではあんまり注目されてなかったHomeKitが熱くなってるみたいです。(個人的感想)

HomeKitではPhilips Hueを操作できたりするのですが、そもそも対応していない家電を対応させるためのDIY的手法も色々存在しています。
例えば、HomebridgeとIRKitを組み合わせた方法。
Raspberry PiにHomebridgeを入れて、homebridge-irkitでIRKitを叩くみたいなお手軽スマートハウスのやり方は検索すれば山ほど出てきます。
そしてここで使われるIRKit、赤外線リモコンの信号を送受信できるオープンソースハードウェアなのですが、大人気なんですね。
在庫切れ入荷予定無しで手に入らないんだけど(キレ)という声も周囲にチラホラあったり。

というわけで、欲しいけど無いなら作りましょう。
自分で作ると安いし、面白いですし...

回路はこんな感じ。

必要な部品は以下の通り。
ESP-WROOM-02でミニマルなIRKitクローンを作る



もしESP-WROOM-02とかブレッドボードとか抵抗とか...持ってるなら、赤外線LEDと赤外線リモコン受信モジュールだけ買っちゃってください。

私はオリジナルのESP-WROOM-02搭載ボードとプロトタイプ・シールド基板を作っているので、これを使ってサクッと作りました。


中身のソフトウェアはIRremoteESP8266とaJSONを使って100行程度で実現しています。
コードはこちら。
9SQ/minIRum: A minimal implementation of infrared sender/receiver like IRKit by ESP8266

Arduino core for ESP8266をArduinoに入れて、コードをビルドしてESP-WROOM-02に書き込んであげてください。

あとは、IRKitみたいに GET /messages で最後に受信したリモコンのコードが取得できるので、これをメモしておいて...
POST /messages にこれを投げてあげれば、リモコンと同じように発光してくれます。
もし、エアコンなどの長めのコードを飛ばすリモコンの場合は、IRremoteESP8266/IRremoteESP8266.hの#define RAWBUF 100を200とかにしてあげれば取れるかも。

あとはHomebridgeと組み合わせれば、このようなことが出来ます。

Raspberry PiにHomebridge諸々を入れるのは、検索すればいっぱい記事が出てくると思います。
ただ、Raspbianはapt-getで取れるnodeが古かったりするので、楽をしたいならArch Linux(RasPi2/RasPi3)をお勧めします...
pacman -S git python2 nodejs npm nss-mdns avahi
systemctl enable avahi-daemon
systemctl start avahi-daemon
npm install -g homebridge
npm install -g homebridge-irkit
mkdir .homebridge
cd .homebridge
nano config.json
config.jsonは以下のような感じで。
irkit_hostは適宜変更してください。
{
    "bridge":
    {
       "name": "Homebridge",
       "username": "B8:27:EB:4D:31:D7",
       "port": 51826,
       "pin": "031-45-154"
    },

    "accessories": [
        {
            "accessory": "IRKit",
            "name": "ライト",
            "irkit_host": "minirum-a492cd.local",
            "on_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,500,400,450,1300,500,400,500,400,450,450,450,1300,500,400,500,400,450,1300,450,450,450,1300,500,400,450,1300,500,450,500,400,500,1300,500,400,500,400,450,450,450,450,450,1300,500,400,500,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,450,450,500,1300,500,400,500,450,450,1300,500,400,500,400,450]},
            "off_form": {"format":"raw","freq":38,"data":[3550,1700,500,400,500,400,450,1300,500,1300,450,450,500,1300,500,400,500,400,500,400,500,1300,500,400,500,400,500,1300,500,400,450,1300,500,400,500,1300,450,450,500,400,450,1300,500,400,500,400,450,450,450,450,500,1300,450,1300,450,1300,450,1300,450,450,500,1300,450,450,450,450,450,450,450,1300,500,1300,500,400,500,400,450,1300,500,400,500,400,500]}
        }
    ]
}
ちなみに、この赤外線コードはPanasonic製のシーリングライトのON/OFFです。

homebridgeを立ち上げて、iPhoneとペアリングします。
homebridge
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded plugin: homebridge-irkit
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Registering accessory 'homebridge-irkit.IRKit'
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loaded config.json with 1 accessories and 0 platforms.
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] ---
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Loading 1 accessories...
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] [ライト] Initializing IRKit accessory...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
                       
    ┌────────────┐     
    │ 031-45-154 │     
    └────────────┘     
                       
[Tue Sep 20 2016 03:31:29 GMT+0900 (JST)] Homebridge is running on port 51826.

iOS 10のデバイスで「ホーム」アプリを起動して「アクセサリを追加」、Homebridgeが表示されるのでコードを入力してペアリングを完了させます。
Homebridgeを追加したら、configに書いたアクセサリ(上記例では「ライト」)が表示されると思うので、これを追加すれば制御できるようになります。

Raspberry PiでのHomebridgeの自動起動は以下を読むと早いです。
Arch Linuxなら、Running Homebridge on Bootup (systemd)のセクションです。
https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi

homebridge-irkitではON/OFFの単純操作しかできないので、そのうち色々なコードを叩けるhomebridgeのプラグインでも書こうかな...
ちなみに、Raspberry Piにhomebridge-cmdを入れて、GPIOにSSRを繋いであげれば、リモコンの無いAC100Vの機器もON/OFFできます。

2016年6月4日

秋月で買える電子部品でリスト作成して色々できるサービスを作った

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

大きな地震があったりでバタバタしてたら4月5月と過ぎて6月になっていました...
というわけで2か月ぶりのブログ更新。

タイトル通り、秋月電子通商で扱っている電子パーツでパーツリストを作成、公開、共有、そして秋月の買い物かごに一括して放り込めるWebサービスを作りました。

その名も AkiCart
http://aki.prioris.jp/
(ちょっとダサいネーミングだったかも)

そう、秋月通販をよく使っている人は知っている... 秋月の買い物かごはセッション切れで放置してるとすぐに消えることを...

そこで、このサービスでは秋月で扱っている商品をリストに登録して保存し、リストのページにある「まとめてカートに入れる」ボタンを押すことで、いつでも秋月の買い物かごに商品をまとめて登録できるようにしました。


Twitterでログインすると、ダッシュボードが登場、ここから新しいパーツリストを作成できます。
作成するパーツリストは、アクセスレベルが公開(Public)、限定公開(Unlisted)、非公開(Private)の3種類から選択可能。
公開を選ぶとAkiCartのトップページにリストされる(こともある)ようになり、限定公開を選ぶとリンクを知っている人だけが閲覧可能なリストになり、非公開は文字通り自分しか見れないリストができます。


商品の追加はリストの画面からもできるのですが...
AkiCartの一番の特徴は、超超超便利なブックマークレット。
秋月の商品画面でブックマークレットをクリックすると、一発で作成したリストに追加できます。


ブックマークレットをブラウザに追加しておくと、秋月のページでクリック→個数の変更がない場合はそのままEnterを押すだけでドンドン追加できます。
AkiCartのブックマークを押して登録完了するまで最短2秒くらい。


作ったリストは一括して買い物かごに入れるだけでなく、CSV形式でダウンロードしたり、印刷専用のレイアウトで印刷することもできます。
高専とか大学とかで、事務の人に「これ買ってください」って渡すのも楽チンですね。

〜ここからはちょっとだけ技術的な話〜

今までは、買いたい商品のページをブラウザでブックマークしておいて、買うときに一挙に開いてカートに追加するという作業で購入していました。
流石にこれどうにかならんのか?というのと、何やら秋月の一括通販コード入力画面はリファラをチェックしてないから別サイトからPOSTできるという話を聞きまして...


一括通販コード入力画面からの遷移を見てみると、いつものカート画面(cart.aspx)に対して quick: True を指定して、あとはclass1_xに通販コードのハイフンの左側の英字1文字、goodsにハイフン右側の数字5文字、そしてqtyに数量を入れて、これを繰り返したものをPOSTしてあげればカートに入ることが分かりました。
そしてやはりリファラをチェックしてないので、このページ以外からPOSTしても普通にカートに入ることも確認。
これらを元にして、AkiCartができた...という訳です。
ちなみに、AkiCartの任意のリストページのソースを見ると、まとめてカートに入れるボタンの近くにtype="hidden"でいっぱいinputが転がってますw

バックエンドはEVI(地震火山詳報)でも使っているDjango(Python)です。
ここ数ヶ月触ってなかったので結構忘れてて、調べながらコード書いてたので時間が掛かりました...
6/3のAM2時頃に作り始めて、途中寝たり飯食ったりした時間を抜くと15時間くらいかな...?
バグとかセキュリティ的なアレを発見したら、Twitterでリプライ頂けると非常にありがたいです。

早速要望として、リスト間で商品を移動できるようにしたいとか、リストをブログなどに埋め込めるようにしたい、という意見が出ているので、ぼちぼちアップデートしていきたいと思います。

これとは別件で、そこそこ実用的かつ面白いものづくりのプロジェクトも進んでいるので、また報告できるタイミングになったらブログなどなどに書きたいと思います。

追記 : ブログパーツ(埋め込み用コード)できました。


公開もしくは限定公開のリストであれば、リストページの右サイドバー下に「埋め込みコード」の欄があるので、これをコピーして貼り付ければOK!

2016年3月18日

DMM 3Dプリントを試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

3Dプリンタ、便利ですよね。
サクッと3Dモデルを現実に出来るのは素敵... なんだけど、数万円程度の3Dプリンタでは精度が出ない... ということで前々から試してみたかったDMM 3Dプリントを使ってみました。

今回注文したのは以下のようなモデル。


うちの3Dプリンタでは出せなかったポイントは...


直径1.5mmのピンが2.54mm間隔で並んでいるところ。
0.02mm余裕を持って直径1.52mmで開けてます。

ちなみに、発注時は同じものを8個並べて注文。
お値段は...

ナイロン 4,251円
ナイロン カラー 4,338円
アクリル(Ultra Mode) 12,381円
アクリル(Ultra Mode) カラー 12,489円
アクリル(Xtreme Mode) 19,340円

ちなみに、8個のデータを投げる前に6個のデータを投げたのですが

ナイロン 3,555円
ナイロン カラー 3,641円
アクリル(Ultra Mode) 9,771円
アクリル(Ultra Mode) カラー 9,879円
アクリル(Xtreme Mode) 14,991円

みたいな価格でした。

ナイロンだと、8個の場合 531.375円/個、6個の場合 592.5円/個
アクリル(Ultra Mode)だと、8個の場合 1547.625円/個、6個の場合 1628.5/個

というわけで、今回はナイロンを選択。

stlで書き出したものをDMM 3Dプリントに注文したのが3/8の16時くらい、造形開始が3/9、発送が3/15、到着が3/17でした。


運送会社は佐川急便、梱包は以下のような感じ。


全体の写真は記事の一番上に貼りましたが、アップで見ると以下。


うちの3Dプリンタ(ダヴィンチ1.0 Jr)で出力したものと比較 (寸法が違うけど穴のサイズは同じ)


ダヴィンチJrだと1.52mmの穴が潰れたり大きさが揃ってなかったりするのが、DMM 3Dプリントで作ったものは綺麗に空いています。

で、これで何をするのかというと... この2つを組み合わせます。


ポゴピン(オス/メス)とネオジム磁石。


ポゴピンは、先端がバネになっているもの&先端が受け皿になっているもので1組。

ネオジム磁石も取り付けると...


こうなります。


そして、最終的にはこんな感じで、littleBits的な何かになる訳です。



写真右端のブロック以外はダミーなのでハンダ付けしてません。 (もう少し暇になったら作り込みたい...)
これについては、また改めて記事を書こうと思います。

P.S. スマートミラーのソフトもぼちぼち進めてます... (ソフト編の記事はまだかと言われたので...)