2017年10月13日

洗面台の水栓に合う後付けレバーを作ってみた

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

3Dプリンターで、古い洗面台の水栓に取り付けられるハンドルレバーを作ってみたお話。

実家は築25年超。
洗面台やトイレなど色々なところに、今の最新式と比べれば劣る設備がついています。
その最たるものが洗面台(親父曰く)であり、今風のシングルレバーではなく、昔はおしゃれであったであろう2つのハンドルがそこには付いています。
しかし「手を洗う時に水を止めたり出したりしたいけど、握るのは嫌」という親父の意見もなるほど確かに理解できます。

というわけで... 今回は3Dプリンタでぴったり合うハンドルレバーを作ってみることにしました。

まずは、ハンドルの寸法を測ります。
洗面台に付いていたハンドルは、王冠のようなギザギザ8個付いたタイプ。
このギザギザの頂点から頂点まで、ハンドルの中心を通る長さを計測すると48mm。
さらに、ギザギザの間の窪みから対向側の窪みまでの長さを計測すると40mm。
これを元にFusion360で図面を引いていきます。

ハンドルは、下に行くにつれて少し大きくなる形状だったので、余裕を持って50mmの円を描き、さらに内側に同じ中心点を持つ40mmの円を描きます。
この円を8等分する線を引き、等分した線と外側の円が交わる部分を終点にして円弧を描きます。この時の円弧の頂点は内側の円にします。

...これを繰り返してハンドルとほぼ同じ大きさの輪郭を作成。
外側に円を描き、取っ手となる部分を描いて、押し出しツールで7mmの厚さにしたのが以下。


これをSTL形式で出力して、3Dプリンタの付属ソフトでオブジェクトをスライスしてプリント開始。


30分程度で出力完了。


実際にハンドルに取り付けてみると...


いい感じ!

2Dで描いて押し出しで3D化するという超手抜きで飾り気のないデザインですが、Simple is BESTということで。

2017年10月4日

Nano Pi NEOをコンパクトにスタックしてみる

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

秋月電子通商やaitendoでも販売開始されたNano Pi NEO/NEO2を複数個買って、キレイにまとめてみた話です。

どうでもいい話ですが、大きいこと片付けてからブログ書こうとすると永遠に書けなさそうな気がしてきたので、小さい細々したもので外に出せそうな話は書いていくことにしました。
#続くか分からないけど...

Nano Pi NEO/NEO2は、Allwinner H3/H5が搭載された、非常にコンパクトなシングルボードコンピュータです。
Raspberry Piと違ってHDMIや4つのUSBポートは搭載されていませんが、GPIOピンヘッダからUSBが2本出てたり、NEO2ではGigabit Ethernetを搭載していたりと、ヘッドレスでサーバ的に使ったり、何かに組み込んだりするには安くてコンパクトで使い勝手が良いボードです。

とある目的でNEOにUSBドングルタイプの装置を繋げてみたところ、うまいこと認識してくれたので複数個買って束ねて使うと便利かも...というわけでキレイにまとめる方法を探し始めました。

Nano Pi NEOの製造販売元であるFriendly Elecからは"4-layer Dual Stack Acrylic Case for Cluster DIY"という2個x4段重ねできるアクリル製の公式の製品がありますが、これがなかなかゴツい。

4-layer Dual Stack Acrylic Case for Cluster DIY (Friendly Elecより)

また、ヒートシンクの下に(穴がいくつか空いているものの)アクリル面が来るため、少し放熱の面では効率悪そう...

ということで、もっとスリムで熱も逃げやすそうなものを作ってみることに。
今回は、以下の条件で設計してみました。

・Nano Pi NEOの四隅の穴は35.4mm間隔
・Nano Pi NEO自体のサイズは40mm四方
・50x100mmに収まるようにする(コストを抑えるため)
・配線をするときにケーブルなどを結束バンドで留められるようする
・Nano Pi NEOを3mmのネジで固定できるようにする(2.5mm, 2.6mmネジは高いため)

NEOを2個横に並べると80mm、間に5mmの余白、左右両端に7.5mmずつ余白を設けて合計100mmとします。
短辺の長さは、NEOの幅(40mm)に合わせることでスッキリかつケーブルと干渉しないように。
ヒートシンクをアクリル板側に向けて固定しても放熱性能を出来る限り落とさないように、ネジ固定とアクリル板の強度を保つための最低限の余白を残して繰り抜き。
また、結束バンド固定穴としてNano Pi NEOの前後にくる面と各層の左右、計6個の長方形の穴を空ける。
さらに、アクリル板自体も上下段に連結できるようにするため、ボードをアクリル板に固定するためのネジとアクリル板を連結するためのシャフトが干渉し合わないように...


こんな感じにしてみました。
今までに何度かアクリル板のレーザーカット用図面を引くのに使っているDraftSightを今回も使用しました。

これに、埃除けのために最上段に付ける天板も同じ寸法で四隅の穴だけ空ける形で作ります。


この2つを念のため少し古いバージョンのdwg形式で書き出して、それぞれzip圧縮して発注。
発注先はElecrowで、アクリル板の色は透明(Transparent)、サイズは10cm Max * 10cm Maxの厚みは2.5mmにしました。
重さで送料が変わるので、送料が変わらないところまで枚数を増やしていったら合計で25段分くらいに...

製造と配送を含めて1週間くらいで届いたので、組み立てていきます。


NEOをアクリル板に固定するのは直径3mm 長さ20mmのなべ小ネジ、長さ5mmのナット(FB3-5)、長さ3mmのナット(FB3-3)。
各段を繋ぐシャフトは、長さ30mmの六角オネジ・メネジ(MB3-30)、最下段の足は長さ7mmの六角オネジ・メネジ(MB3-7)。


あとは、これを必要数に応じて積み重ねていって...


完成。今回はとりあえず手元にあった4個をスタックしてみました。

残り20数段分あるので、40個くらいのNEOをスタックできそうです。
そんなにあっても使いきれないので、欲しい方がいれば頒布します。

データはGitHubに置いてますので、自分でカットしたり発注できる人は以下よりどうぞ。
https://github.com/9SQ/Nano-Pi-NEO-Stack

2017年5月12日

iPod miniを勝手に(PRODUCT)REDっぽくしてみた

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

最近はスマホで音楽が聴けるので 携帯音楽プレーヤーを別に持つ人といえばハイレゾ趣味の人くらいになりつつある気がしますが、今回は12年前のiPod miniをリニューアルする話です。

まずは、ジャンクで購入した時のiPod miniがこちら。


起動しない問題がありましたが、これは内蔵Microdriveが故障しているのが原因だったので予備のMicrodriveに交換したら問題なく動作。
それよりも気になるのは、このクリックホイールに保護フィルムを貼ったまま日光に晒されたことが原因と思われるパンダ日焼け。
カラーアルマイトの色は紫外線で退色してしまいますが、プラの保護フィルムが貼ってあったところは元々の色に近い状態で残っています。

外装自体には傷一つないので、この日焼けだけが何とも残念... ということでiPod miniを再カラーアルマイト処理に出してみることに。


まずはアルミ外装から、ロジックボードやMicrodrive、バッテリー、クリックホイールなどの中身を取り出していきます。


クリックホイールと液晶部のアクリル窓も取り外し、アルミ外装側に接着剤や両面テープが残らないように掃除していきます。
アクリル窓を外すときは、窓の周囲をドライヤーで温めながら押し込むと簡単に外せます。


全部バラバラにして並べると、こんな感じに。
この完全にアルミだけになった外装を、アルマイトの再処理をしてくれる会社に送ります。
元々のカラーアルマイト処理をしていたのはYKKらしい...ですが今回は、ポスト投函して1週間程度でカラーアルマイト処理して返送してくれる株式会社コーケンの「光研アルパック10」を利用してみることに。
アルパックは秋葉原のヨドバシカメラにて3780円(税込)で購入。
10点、250gまでのパーツを入れることができるので、もう一つピンク色のiPod miniの外装を入れて合計2点でやってもらうことに。

今回依頼した会社は、普段は自動車やバイク、自転車の部品をアルマイト処理したり、ラジコンなどのホビーパーツをアルマイト処理するのがメインっぽい会社ですが、果たしてうまく行くだろうか...などと心配しつつパックに詰めてポストに投函したのが4月29日。

間にゴールデンウィークで休業が入っていたので、処理されて返って来たのが5月11日でした。


返って来た外装をシルバーのiPod miniと並べて撮影。
再度カラーアルマイト処理するときは、一旦元の色を抜いてから新しい色を入れるそうなので、ピンクが抜けているときはシルバーのような色になっていたはず...?
本来、iPodの刻印はアルマイト処理された上から行なっているので、再処理すると消えてしまうのは知っていましたが、なかなか良い具合に跡が残っています。


これを、CF変換に入れた128GBのSDカード、新しいバッテリーと共に組み上げていきます。
手順は分解と逆なので省略...


DockケーブルでMacと接続してiTunesで初期化すると、無事128GBのiPod miniとして認識。


12年前のiPodが最新のiTunesで問題なく認識、ファームウェアの復元、音楽の同期ができるのは地味にすごい。
Apple Lossless(ALAC)も同期、再生が可能なのでまだまだ長く使えそうです。


最後にiPod mini 2世代(ブルー、シルバー)、iPod Video(5.5世代)との比較写真を。
iPod 5.5世代は128GBのmSATA SSDに換装して、コンデンサも交換済みだけど... バッテリー持ちが少し悪いのとTriple.fi10で無音時にノイズが気になる問題があるので、これからはiPod miniがメインになりそう。

2017年4月19日

気象庁XML電文を「正しく」画像化するために必要な地図の話

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

皆さんは「地図」気にしていますか?
伊能忠敬が日本全国を歩いて測量してまわり、精巧な日本地図を作成してから約200年、今や誰もが手のひらの上で正確な日本地図・世界地図を自由な縮尺で見ることができる便利な時代です。

それにしても、久しぶりの投稿ですが...
今回は、気象庁が提供しているXML電文を画像化する、その時に使う地図の話をしようと思います。

以前、地震発生時の震源・震度情報をブラウザ上でグリグリ動かして閲覧可能なWebサービス「EVI 地震火山詳報」を作りました。
(参照: 地震とか火山噴火情報を閲覧できるWebサイトを作った)

このとき使用した地図は、国土交通省が提供している国土数値情報 行政区域というもので、行政区(雑に言うと市区町村)単位で日本を分割した地図です。
地震が発生した後に気象庁から発表される「震度速報」「震源・震度に関する情報」では、日本の行政区単位で震度が発表されます。

さて、気象庁防災情報XMLフォーマット電文では、地震以外にも多数の情報を配信しています。
例えば...
  • 気象特別警報・警報・注意報
  • 土砂災害警戒情報
  • 竜巻注意情報
  • 地方気象情報
  • 府県気象情報
  • 全般週間天気予報
  • 噴火に関する火山観測報
  • 台風解析・予報情報
などなど...
紫外線やスモッグ、生物季節観測では桜の開花や満開などの情報も配信されています。
こういった情報の多くは行政区単位ではなく、気象庁が定める4つの地域の分け方単位で発表されています。

気象庁|予報用語 特別警報・警報・注意報や天気予報の発表区域

簡単にまとめるとこんな分類です。下になるほど細かく分割されています。
つまり気象庁は、一番細かい単位として基本的に「二次細分区域」という地域の分け方で情報を発表していることになります。
この二次細分区域ですが、実は行政区域と1対1ではありません。
日本の市区町村数は1741ですが、二次細分区域は1775の地域からなっています。(2017年4月 現在)
ということは、行政区を更に何らかの基準で分割しているということになります。

ここまで、気象庁の用いる発表区域について簡単に説明しましたが、ここで少し気象庁防災情報XMLフォーマット電文を利用するうえでの話をしましょう。
気象庁防災情報XMLフォーマット電文(以下、気象庁XML電文)で配信される情報は、普段私たちがテレビやラジオ、新聞、Yahoo!天気やウェザーニューズなどで見る情報と根本は同じです。
私たちは、気象庁XMLを受信して処理することで、テレビなどのマスコミが発信している気象情報と同じ物を世の中に発信することができます。

ですが、これらの情報は、当然のことですが勝手に改変してはいけません。
例えば、とある市に住んでる人が「気象庁の発表する警報は大げさだ。うちの市は注意報くらいに修正しておこう。」などと勝手に書き換えて、この情報をインターネットに流してはいけません。
以下は、気象庁が公開している、気象庁XMLを利用するうえでの留意事項の抜粋です。
警報の取り扱いについて
警報は重要な情報であり、万が一、誤った警報事項や錯誤を生じさせる情報が流通した場合、気象業務法第23条へ抵触する可能性があるほか、社会への影響が大きいことから、元の電文の本質を損なうような編集は認められません。
公開XML電文の編集・加工について
気象庁が発表した予報内容と異なる独自の予報を発表することは予報業務に該当し、気象業務法により許可を受けた者しか行えません。
気象庁ホームページを通じて公開するXML形式電文のご利用にあたっての留意事項より引用
http://xml.kishou.go.jp/open_trial/considerationforxml.pdf (PDF)

さてさて、そこで地図の話です。
気象庁が発表する情報は、気象庁の定める発表区域で出る訳ですが、もし気象庁の情報を国交省国土数値情報の行政区域を使って塗ったらどうなるでしょうか?

これは、とある会社がTwitterや独自のアプリ内で配信している気象警報・注意報の画像です。
そして、こちらはゲヒルン株式会社が許諾して特務機関NERVで配信している気象警報・注意報の画像です。

注目して頂きたいのはここです。


和歌山県の田辺市は、行政区域としては画像上段のようになっていますが、気象庁の二次細分区域としては画像下段のように5つの地域に別れています。
ここで、2017年 4月18日 3:23に発表された気象警報・注意報を確認すると、田辺市龍神には大雨警報が発表されていますが、田辺市の他の地域には発表されていないことが分かります。

(画像が横に長いので、拡大してご覧ください)

別の地域でも見てみましょう。

以下は北海道の渡島・檜山(おしま・ひやま)地方に発表された気象警報・注意報です。

もう見ただけでお分かり頂けると思いますが...


北海道二海郡八雲町は、気象庁二次細分区域では八雲町八雲と八雲町熊石に分割されています。

そもそも、分割された地域は、市町村等をまとめた地域でも同一の地域に属していません。


更にその上の一次細分区域でも同一地域ではありません。


ここで、2017年 4月18日 8:13に発表された気象警報・注意報を確認すると、八雲町熊石には暴風警報が発表されていますが、八雲町八雲には発表されていないことが分かります。


さてさて...
ここまで例を挙げながら解説してきましたが、いかがでしたでしょうか。
気象警報が出ていない地域に警報が出ている、あるいはその逆という情報を、あたかも真実のように世の中に配信してしまう、そんなことはあってはいけません。

ゲヒルン株式会社では、正しい情報を迅速かつ確実に分かりやすく伝えるために、気象庁二次細分区域の地図データセットやレンダリングエンジンを開発しています。

実は、気象庁二次細分区域よりも更に細かい地域分けとして、土砂災害警戒情報で使用する地域という発表区域もありますが、これに対応する地図データセットも開発しています。


ふう、だいぶ長々と書いてしまいましたが...
こういうシステムを作っている人たちの気持ちは「一人でも多くの人に、安全で安心できる生活を送ってもらいたい」だと思います。
そのためにも、現在気象庁XMLを受信して活用している方も、これから利用して何か作ろうと思っている方も、正確な防災情報を配信するように心がけましょう!

2016年12月11日

SECCON 2016 online "PNG over Telegraph"

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

SECCON 2016 online CTFに参加された皆様、お疲れさまでした。
今回は初めて問題を作る側に参加させてもらい、たくさんの高評価を頂いてとても嬉しいです!

https://www.youtube.com/watch?v=Y6voaURtKlM


さて、このSECCON TOWERこと腕木通信の塔について、少しだけ解説をしようと思います。
(解き方については、解けたチームがWrite Upなどを公開してくれる...と思いますので)

腕木通信(Semaphore Line)は、18世紀末から19世紀にかけてフランスで考案されて使われた、世界で最初の大規模通信網です。 考案したのはクロード・シャップというフランス人で、フランスに存在する腕木通信の塔のことを「シャップの塔」と呼ぶこともあるようです。
そもそも「セマフォ(Semaphore)」や「テレグラフ(Telegraph)」という用語は、このシャップさんが考案しました。
この辺りの詳しい話は、各言語版Wikipedia(日本語, 英語, フランス語)あたりを参照してください。

https://ja.wikipedia.org/wiki/%E8%85%95%E6%9C%A8%E9%80%9A%E4%BF%A1
https://en.wikipedia.org/wiki/Semaphore_line
https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)

この腕木通信を再現したのが、今回のSECCON TOWERです。


素材は割り箸と秋月電子で800円で売っているサーボモーター3個、制御はArduinoで行なっています。

背景には、私が撮影した桜島の写真をネットプリントでA3サイズに印刷して使っています。
DSC_4693 | 鹿児島大学教育学部より桜島を望む | Kei Yoshimura | Flickr

ちなみに土台の部分にはセ○ンカフェの紙コップを使用し、塔の質感を演出しています。


Arduinoのコードはこちら
9SQ/SECCON_TOWER: Semaphore tower (Chappe tower) made by Arduino

Serialで待ち受けるArduinoに対して、1文字ずつ文字を送ることで動作します。
送られた文字に対応する腕木の形は、基本的に フランス語版 Wikipediaに記載されているChappe Code表を基準にしています。


https://fr.wikipedia.org/wiki/S%C3%A9maphore_(communication)#/media/File:Chappe.svg

しかし、このコード表には J が存在しません。使われている腕木のパターンは 36通りしかないため、使用頻度の低い J は文献によっては I で代替されていたりしました。
とはいえ J と I が混同されると何かと不便なので、今回の SECCON TOWER では & を J として扱っています。
このことは、問題動画の冒頭で紙に書き写している文章の一部から、補完可能です。


WELCOME TO SECCON CTF.
WE HOPE YOU WILL ENJOY THE GAME.
GOOD LUCK.

これに、flagの入っている PNG 画像をBASE32エンコードして流しました。

なぜ、BASE32なのか... 前述の通り Chappe Code では、36通りの組み合わせが使われています。素直に考えると BASE36 という選択肢もあります。
しかし今回は様々な理由で BASE32 を使った方が都合が良いことが多かったので、そうしています。
(特に、冒頭の8文字をデコードするだけで PNG のシグネチャを得られるのが最重要でした)
参考: RFC 4648 - The Base16, Base32, and Base64 Data Encodings


というわけで、作問者側が想定していた正攻法な解き方としては...

1. 腕木通信であることを認識し、Semaphore、Chappe towerなどのワードからChappe Code表にたどり着く
2. 50分の動画から、対応表を元に文字に戻す。(この手段は問わない)
3. BASE32デコードする
4. PNGファイルが出てくるので、開く
5. flagをget

そう。この腕木から文字を復元する作業について、手段は全く問わないのです。
画像処理が得意な人は画像処理で解くもよし、機械学習で解くもよし、人力で解くもよし。

この点について、発案者のきくちゃん先生からの熱いメッセージがあります。
時間内に効率よく文字に戻すにはどうしたらよいか、という命題に対し、各々が持てるリソースをどのように配分して投入するか。手段は問わない。
それこそが CTF における問題解決能力の腕の見せ所だと思います。
もし何らかのプログラム的な手法で解くことだけを狙うなら、動画の長さは50分程度ではなく5時間くらいにしちゃいます。
むしろ画像処理や機械学習を使わないと解けない、と思いこませることこそがミスリードでした。
人力で読むにしても、ある程度コンピュータに手助けしてもらったり、様々な工夫や手法があると思います。

私が解くとしたら... 動画から各形のフレームを取り出して、同じ形状をしているものは同じ文字として... やはり人力でやると思います。
プログラムで解くと思わせて、実は人力が最短?(かもしれない)問題なのです。

ちなみに... こんな裏話もあったり。

それから、今年はQRコードがなかった!!というあなた...

flag の PNG画像 は QRコードなので、半分ぐらい入力すれば、それっぽい画像が得られます。
読み取りに失敗してQRコードが壊れてた? QRコードの復元は、みなさんお手の物、ですよね!

解けた方は、ぜひWrite upを書いてくださいね!


追記:この問題について記述されているWrite upを貼っていきます。

SECCON 2016 Online CTF に参加しました (Write-up) | monolog
http://blog.monora.me/2016/12/seccon-2016-online-ctf-write-up/

SECCON 2016 予選 - /home/cympfh/
http://cympfh.hatenablog.jp/entry/2016/12/11/215023

PNG over Teregraph - TomoriNao SECCON 2016 Online
https://hackmd.io/s/SJVWBNtXx

SECCON TOWER 参加記のようなもの - Unpronounceable Name
http://tatarhy.hatenablog.jp/entry/2016/12/16/014821

SECCON 2016 Online CTF Write up PNG over Telegraph - Qiita
http://qiita.com/Liesegang/items/f6ac10b18064906a3808

Recent Photos from Atelier (Flickr)

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