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

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データを利用されている方にとっては当然なのでしょうが、個人であれこれやるとぶつかりそうな問題だなぁと思ったので書いておきます。

Recent Photos from Atelier (Flickr)

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