IoT企業社内便利ツール③ IoT製品なら必須の地味だけど大切なバイナリ置換の話 / Akerun Advent Calendar 20日目

みなさん、Akerunしてますか?(挨拶)

この記事はAkerun Advent Calendar 2016 - Qiitaの20日目の記事です。

今日は社内バイナリ職人のkazuphが担当します。

IoT企業ならバイナリ置換するよね??

Linuxじゃないマイコンレベルの組み込み前提

あ、いきなりですがしない方法もあります。マイコンへはすべての個体で一律にファームウェアバイナリを書き込んでおいて、別個でユニークなIDをメモリに書き込むパターン。 僕らはやったことないですが、そうやっている企業も多い?でもメモリへ直接のインターフェースをつくるか、工場出荷時のみマイコン経由でメモリへつながるインターフェースをつくるか?そういう悩みが発生しそう。

あとはソースコードが参照している認証情報をまとめているファイル自体を置換して、その後コンパイルするパターン。これならバイナリ自体は置換する必要ない。

で、最後にコンパイル後に生成されるバイナリの中身を置換しにいくパターン。

単にガジェットならID管理する必要すらないかもだけど、ネットにつながるなら、BLE使うなら認証系の鍵・証明書はもちろんユニークに埋め込むわけで。何かしらの方法でやっているはずかなーって。

で、この前は発表自体はしなかったのですが、アップロード時の資料にはこんなスライドを追加していました。

f:id:photosynth-inc:20161221000409p:plain

f:id:photosynth-inc:20161221000412p:plain

f:id:photosynth-inc:20161221000414p:plain

f:id:photosynth-inc:20161221000417p:plain

f:id:photosynth-inc:20161221000419p:plain

カジュアルにUnix上でmakeできるような良心設計なマイコンSDKが提供されているならまだいいですが、Windows環境でしか条件を満たすバイナリを生成できないケースもあったりするので、どうせ置換するならバイナリ置換に倒してもいいかなと。

一応ソース置換の話

#!bin/bash
perl -i -p -e "s/(__ID) (.*)?$/\$1 ${ID}/" $CONFIG_SOURCE_PATH

#define で定義してある箇所をPerlワンライナーで置換する。それをシェルスクリプトで束ねて、引数でIDや認証情報を食わせればそれで完了。 まあ実装は楽でしたね。一瞬。

バイナリ置換の話

で、メイン。

うわー、俺Web系だからバイナリとか置換できないょぉ、みたいな感じだったのですが、やったら案外できたみたいな。

まず親しみを込めてVimからバイナリを眺める

普通に開くとこんなん。

$ vim hoge.bin

f:id:photosynth-inc:20161221002439p:plain

蕁麻疹出るやつ。

でもこの状態で、

:%!xxd

とするとこうなる。

f:id:photosynth-inc:20161221002550p:plain

ちなみに -g オプションを付けると、区切る間隔を変更できる。

:%!xxd -g16

f:id:photosynth-inc:20161221002801p:plain

(;´Д`)ハァハァ このままVimで置換しょぉ

$ vim -b <IMAGE_NAME>.bin +'%!xxd' +'%s/9999 9999/7777 7777/g' +'%!xxd -r' +wq

一応1行に必ず出てくる一部の文字列ならこれで対応できます。

VimからPerl

そうそうに"それVim"を切り上げてPerlで置換しにいきます。ですが、今回はバイナリです。どうやるのでしょうか?

こうやります。

# 文字(数字)をPerlが認識するバイナリ形式に変更
num_to_binary () {
  echo $1 | perl -ane '@ary = $_ =~ /.{2}/g; @x = map{"\\x".$_} @ary;print @x;'
}

perl -pi -e "s/`num_to_binary $BEFORE_ID`/`num_to_binary $AFTER_ID`/" ${FW_PATH}.bin

$BEFORE_ID などに入っているのは 8F3A145B...みたいな1バイトを16進数表示で並べた文字列です。2文字ずつ区切って処理しています。 これなら、一度binを人間が読めるテキスト形式にせずともバイナリの世界のまま置換してくれます。

元データが文字列の場合は以下の様になります。

# 文字(ASCII)をPerlが認識するバイナリ形式に変更
string_to_binary () {
  echo $1 | perl -ane 'map{$str = unpack("H*", $_);@ary = $str =~ /.{2}/g; @x=map{"\\x".$_} @ary;print @x;}@F'
}

perl -pi -e "s/`string_to_binary $BEFORE_NAME`/`string_to_binary $AFTER_NAME`/" ${FW_PATH}.bin

BEFORE_NAME へは akerun_name みたいな文字列が入ります。

単純なバイナリなら、これで完璧です。

IntelHex形式をbin形式へ

ここでmake時にデフォルトでIntelHex形式を吐き出すツールチェインもあります。

Intel HEXはバイナリ情報をASCIIテキスト形式で運ぶためのファイル形式である。マイクロコントローラやEPROMなどのプログラム可能なデバイスのプログラム書き込みのために広く用いられている。典型的な利用用途としてはコンパイラアセンブラがプログラムのC言語アセンブリ言語などのソースコード機械語に変換し、HEXファイルとして出力する。

Intel HEX - Wikipedia

詳しくはウィキってもらうとして、マイコンに書き込むバイナリは、単なる01を羅列したバイナリじゃなくて、このIntelHex形式じゃないと正しく動作しない場合もあります(IntelHexからbinへの変換は書き込む位置の情報が失われる)。

見た目はこんな感じのやつです。

f:id:photosynth-inc:20161221010633p:plain

今までの方法を使いたいなら、単純にIntelHex形式をbinに変換しましょう。binにした結果必要な情報が失われて結果正しく動作しないファームウェアになってしまう可能性もありますが、その場合は後で示すIntelHexを直接置換する方法を実践しましょう。

ここでPythonさんの登場です。

github.com

pip install intelhex

これでhexからbinに変換するコマンドも一緒にインストールされます。

$ hex2bin.py $FW_PATH.{hex,bin}

これでOKですね!

IntelHex形式に対して直接置換行為をはたらきたい

これはちょっと苦しめられました。特にPerlワンライナーで全部やろうと腹を決めていた自分に取っては屈辱的でしたが、ここでRubyさんを召集することにしました。

#!/usr/bin/env ruby

# チェックサムを計算する
def calculate_checksum (line)
  ary = line.sub(":", "").each_char.each_slice(2).map(&:join)
  sum = ary.map{|x| x.to_i(16)}.inject(0){|a, i| a + i }
  "%02X" % (((sum ^ 0xffff) + 1) & 0x00ff)
end

# バイナリデータの部分だけ抽出する
# 本当はもっと色々やってる
File.open("org_intelhex_file.hex") do |file|
      leading_codes << line.slice(0, 9)
      data += line.slice(9, 32)
end

# ソース中で使ってるデフォルト設定を引数で受け取ったデータで置換する
replaced_data = data.sub("1A3F56...", ARGV[1].upcase)

# データ部分を元のIntelHexの形式であるn文字区切りにする
data_ary = replaced_data.each_char.each_slice(n).map(&:join)

# データの先頭についていたコードを付け直す
leading_codes.each_with_index do |code, i|
  line = code + data_ary[i]
  # 末尾のチェックサムは計算し直し
  checksum = calculate_checksum line
  hex += (line + checksum + "\r\n")
end

# 最後に書き出して完了
File.open("new_intelhex_file.hex", "w") do |f|
  f.puts bin
end

端折ったのでこのソースのままでは動作しませんが、やりことはなんとなくわかるかなと思います。 IntelHexのデータ部分だけ抽出したあとに、置換処理を実行し、元のIntelHex形式に戻しているだけです。

固定長のデータの置換であることが前提ですが、これでIntelHex形式のファイルすら置換できました。

まとめ

日夜自分が書いた置換ツールが工場で動き続けていると思うと (;´Д`)ハァハァ しちゃうなぁという感じです。 日本でこんなにバイナリの置換行為をしている(させている)のは自分だけなんじゃないかと思ったりもしますが、上には上がいると思うのでその辺はコメントをお待ちしております。


Akerunをつくっている株式会社フォトシンスでは、APIやWeb管理画面を良くしてくれる、Railsエンジニアを募集しています! www.wantedly.com

Akerun Developersサイトもやってます。Akerun APIについては、こちらをご覧ください。 photosynth-inc.github.io

Akerun Proのご購入はこちらからどうぞ! akerun.com

AkerunPro x さくらIoTが最高にかっこよかった \( IoT )/

こんにちは。 す〜 ( @ksksue ) です。 Akerun Advent Calendar 19 日目の記事です。

これまで、ざっくりこんな感じで書き進めてきました。

  1. さくらIoTさわってみる
  2. nRF52 BLEとつなげてみる
  3. Akerun Pro 遠隔で開けてみる ← イマココ

今回はAkerunProにさくらIoTをI2Cで繋いで遠隔開閉をしてみたいと思います。

さくらIoTをAkerun Proにくっつける

ということで、できました

\( IoT )/

f:id:photosynth-inc:20161219211349p:plain

\( IoT)/

f:id:photosynth-inc:20161219211651p:plain

\( i□t )/

f:id:photosynth-inc:20161219211819p:plain

か、かっこいいです///

仮面◯イダー スーパー1 的なかっこよさがあります。

そして、緑の基板がかっぱの頭のようでとってもかわいいです

(女子社員に見せたらおもわず「かわいい」ともらしていました)

さくらIoT経由でAkerun Proをあける

あけました しめました


Akerun Pro with Sakura IoT Platform beta module

反応がはやいところもかっこいいです。

コマンドを叩くとクラウド経由でも1〜2秒ほどで鍵が開いてしまいます。

 $ ./akerun_close

※ 上記コマンド中身は前回記事pythonコード参照

ということで、とってもカンタンにAkerun ProをLTE化できました。

まとめ

最後は駆け足でしたがボクがやりたかったことができたので満足です。

さくらIoTをさわってみての感想は

  • さくっとIoT化できるからおもしろい
  • 低消費電力化は今のところ厳しそう(いくつかあるローパワーの仕組みが未サポート。今後に期待)

ということでホビーユースではいろいろ遊べるいいツールです。

全3回にわたりご拝読ありがとうございました。

別の機会に、今度はFPGA x LTEとかわりとロマンなのでそのあたり妄想中です。

それでは。

※ 本記事の写真は開発機Akerunです。製品版ではこのような改造はできません。

参考

nRF52 I2C Driver for Sakura IoT Platform beta https://github.com/ksksue/sakura_iot_beta_nrf52_i2c

告知

2016年12月中にブログ経由で申込みしていただいた方限定でキャンペーン実施中。 詳しくは資料請求からお問い合わせください! akerun.com

Akerunをつくっている株式会社フォトシンスではRailsエンジニアを募集しています! www.wantedly.com

Akerun Developersサイトもやってます。Akerun APIについては、こちらをご覧ください。 photosynth-inc.github.io

IoTデバイスのアップデート管理 / Akeurn Advent Calendar 18日目

qiita.com

この記事はAkerun Advent Calendar 18日目の記事です。 Akerun Remote開発担当 @KoheiAKitaが担当します。

一度リリースしたら組み込みのソフトウェアは更新できないは過去の話、ユーザー自身でCD-ROMを用いてソフトウェアアップデートを行ったり、OS自体が自動でアップデートを行ったりなど、ソフトウェアの更新を行い、最新のプログラムを提供するのが当たり前になっています。

IoTデバイスもネットワーク機能を有している端末が多く、搭載しているソフトウェアを常に最新にアップデートを行いたいと思うことでしょう。もしくは、不具合を見つけてしまい、不具合修正版を配信したいという場面もあるでしょう。

弊社で採用している手法、パッケージ管理のtipsについて紹介したいと思います。

1. IoT アップデートシステム

弊社でのソフトウェアアップデートは、端末自身が行う自発的アップデート方式でなく、命令して初めて実行するアップデート方式です。 端末管理者がアップデート操作 → MQTTサーバー → Akerun Remote という流れでアップデート指示を出すことで、端末一つ一つにアップデートを行います。なぜ命令によるアップデート方式を採用したかについては、

  1. バイスの使用状況に応じ、きめ細かい対応が必要である。
    (自発的アップデートの場合は、状況ごとの処理わけをあらかじめ組み込んでおかなければならない)
  2. エラー発生時に人間の判断で様々な対応ができる
    (自発的アップデートの場合は、ありとあらゆるエラー時の処理を組み込んでおく必要がある)
  3. 端末でのアップデート処理をシンプルにできる
    (自発的アップデートは処理が膨大、テストが複雑に)

という大きな3つの理由からです。 そして、IoTデバイス側に、MQTTメッセージを用いてサーバーへ端末状況をPublish(発行)するようにしておけば、MQTTサーバー側でそのメッセージをSubscribe(購読)するようにし、細かい処理を組むというポリシーにすることで、柔軟な変更が可能になるメリットがあります。アップデート時の処理に変更がある場合でも、IoTデバイス側に影響なく変更が可能になる部分が多くなります。

2. パッケージ作成

次にアップデートするファイルは、Debianなら.debファイル、RedHat系なら.rpmとご使用のOSによって異なります。 ただ、IoTデバイスではDebian系のOSの割合は非常に高いのではないでしょうか。ここでは弊社でも採用している.debファイルを扱うことを前提としてお話していきます。

Debianでのアップデートファイル作成は、Debianが定めているディレクトリ構成、必要ファイルを用意します。どのようなファイルが必要か、どのようにディレクトリ構成すべきかは、公式サイトに詳しく説明されています。
参考:(Debian公式サイト)第4章 debian/ ディレクトリー以下に無くてはならないファイル

こちらでも非常に詳しく説明されています。
Debianパッケージの作り方と公開方法: groongaを例にして - ククログ(2010-01-18)

その後、自身のアプリケーションなどをビルドディレクトリ配下に置き、debuildコマンドを実行すると、パッケージのビルドの後自動的にLintianコマンドにより静的チェックを行い、エラーが発生しなければ晴れて.debファイルが作成されます。
参考:(Debian公式サイト)第6章 パッケージのビルド

このファイルが、apt-getから取得でき、インストール可能なファイルとなります。

3. パッケージ管理

さて、アップデートパッケージができたところで、このファイルの管理が必要です。 パッケージ管理は、弊社ではaptlyを使用して行っています。

aptlyはサーバーへのアップロードはもちろんのこと、コマンド実行だけでリポジトリの作成、ミラーの作成、スナップショット、マージ、リリース、バージョン管理を一元管理できるので便利です。 aptlyのできることを公式ページにて図解しています。
https://www.aptly.info/img/schema.png

一般的な手順としては以下のようになります。

  1. aptly repo create -distribution=[ディストリビューション名] -component=[コンポーネント名] [リポジトリ名]
    ローカル環境に、指定した名前でのリポジトリを作成します。

  2. aptly repo add [リポジトリ名] [.debファイル]
    1.で作成したローカルリポジトリに、作成したアップデートパッケージ.debファイルを指定し、登録します。

  3. aptly snapshot create [スナップショット名] from repo [リポジトリ名] 指定したリポジトリにある最後のデータのスナップショット(コピー)を作成します。

  4. aptly publish snapshot [スナップショット名] [サーバー名]
    3.で作成したスナップショットを、サーバーに初回アップロードし、リポジトリを作成します。 ここでいう"初回"とは、サーバーにリポジトリがまだない状態のことです。[サーバー名]でより詳しい指定をすることで、リポジトリ構成をしています。

例として、Amazon S3にアップロードし、debianのフォルダをトップディレクトリに作成、その配下にリポジトリを展開する場合は: s3:[URLアドレス]:debian となります。そうすると、以下のようなディレクトリ構成が自動で作成されます。

[URLアドレス] - debian - dists - [ディストリビューション名] - [コンポーネント名] - binary-XXX
                     ∟ pool - [コンポーネント名] - t - [ディストリビューション名]

"binary-XXX"はアーキテクチャ名によって変化します。Intel CPU環境であればi386amd CPU環境であればamd64など。

dists配下が最新のアップデートパッケージとして配信されるデータフォルダ、pool配下が最新バージョンを含む履歴データのフォルダです。 apt-get install [パッケージ名]=[バージョン]として指定した場合に取得できるデータですね。

2回目以降にアップロードする場合、"publish snapshot"ではなく、"publish switch"に変化しますのでご注意ください。

aptly tips

ここで、aptlyでのtips、、、というほどではないですが、google先生に伺い立てても公式ページ以外はあまりいい内容は出てこなかった、一度登録したデータの削除方法についてご紹介します。 登録データはaptlyシステム内で依存性があり

publish済み >> snapshot作成済み >> データベースに登録のみ

の順で実施するコマンドが増えます。

  1. aptly publish drop [ディストリビューション名] [サーバー名]
    publish済みはここから実行します。いろいろ試しましたが、サーバーのデータを削除するのには、一度リモートリポジトリを削除するしかないようです(もし、リモートのパッケージのみ削除する方法があれば是非お知らせください。)

  2. aptly snapshot drop [スナップショット名]
    snapshot作成ずみの場合はここから実行します。

  3. aptly repo remove [ディストリビューション名] [パッケージ名]
    データベース作成済みの場合はこちらからです。パッケージ名の指定が少し異なり、追加するときは「package_v1.2.0.deb」のように拡張子付きで指定しましたが、削除時は「package_v1.2.0」と、拡張子無しで指定しないといけないようです。この点が分からずにハマっていました。

  4. aptly repo drop [リポジトリ名]
    最後に、リポジトリの削除です。必要なくなった場合はこちらのコマンドでローカルリポジトリを削除できます。

まとめ

ざっくりとした説明でしたが、IoTデバイスでのアップデート管理は、
* アップデート実行方法
* パッケージ管理
の方法が重要で、特に、「アップデート方法」についてのシステムは、システム運用する方法、顧客の状況などを鑑みて設計する必要があり、一番肝となる部分です。 この点を注意し、常に最新のソフトウェアで動作し、安定した運用ができるアップデートシステムを構築していくことになるかと思います。

Akerunをつくっている株式会社フォトシンスでは、Railsエンジニアを募集しています! www.wantedly.com

Akerun Developersサイトもやってます。Akerun APIについては、こちらをご覧ください。 photosynth-inc.github.io

【動画あり】Akerun で バルミューダトースターを IoT化してみた

f:id:photosynth-inc:20161216184645j:plain

こんばんは。Photosynth の 組み込みエンジニアの@ishturkです。

Akerun Adventカレンダー 17日目 の記事の担当です!

バルミューダ トースターとは

※本記事はフォトシンスのエンジニアによるもので、バルミューダ株式会社様とは関係ありません。

The Toaster の紹介はこちらです。

www.balmuda.com

とても美味しいパンが焼けます。めちゃめちゃイケてます。ヨダレがとまらないですね。

これがIoT化すればもっと素晴らしい体験が得られるのでは?

さあ!Akerunの出番です!

で、こうなりました

f:id:photosynth-inc:20161216201157p:plain

f:id:photosynth-inc:20161216201714j:plain

かっこいい

f:id:photosynth-inc:20161214210844j:plain

かっこいいですね

f:id:photosynth-inc:20161214211002j:plain

とてもかっこいいです

これが IoT化したトースター、 Akerun バルミューダだ!

朝が弱いエンジニアの皆さん。起きてからパンを焼く作業、苦痛ですよね。

Akerun バルミューダ なら、夜のうちにパンをセット。ベッドの中からでもパンを焼けます。

出勤前に寝ているパートナーのためにパンをセット。会社から遠隔でカッコよくパンを焼いてあげることもできます。これは絶対モテますね。

つかってみる

Akerun Proの角度設定機能を使用して時間を設定しておきます。

一度設定してしまえば、いつでもスマートにパンが焼けます。

さあ!焼いてみましょう!


AkerunでIoTトースターつくってみました

f:id:photosynth-inc:20161216185356j:plain

f:id:photosynth-inc:20161216184645j:plain

f:id:photosynth-inc:20161216184546j:plain

f:id:photosynth-inc:20161216183556j:plain

とても美味しそうに焼けましたよ!ウマー。

つかってみる Amazon dash編

弊社CTO @kazuph が Amazon dash をハックしてます。

akerun.hateblo.jp

せっかくなので 専用dashボタンでパンが焼けるようにしてみました。

f:id:photosynth-inc:20161214235814g:plain

IoT感が増しました。とてもいいです。

つかってみる Console編

僕が1日で一番対話する相手はターミナルコンソールです。 このブログを読んでいるエンジニアの皆さんもそうだと思います。

カタカタしながら、パンを焼きたくなったら?スマートなエンジニアは、コンソールから焼きます。

f:id:photosynth-inc:20161216190446g:plain

このあたりは Akerun Pro のファームウェアに少々手を加えて、BLEで叩いて直接アクチュエータを制御できるようにしています。

いいですね。これはモテますね。

コンソールからのBLE通信は node.js のライブラリである noble を使用しています。

noble は 弊社エンジニアの @KoheiAkita の記事でも触れてましたね。サクッと書くにはとても使いやすいです。

akerun.hateblo.jp

かっこいいHWの秘密

今回のスーパーかっこいい Akerun Pro Black Edition は残念ながら一般には流通していません。世界に1つしかない限定品です。バルミューダのためにつくりました。

f:id:photosynth-inc:20161214212255j:plain

バルミューダ専用ダイヤルアタッチメントも、弊社のメカエンジニアにつくってもらいました。

f:id:photosynth-inc:20161214234324j:plain

これからもAkerunで身近なものをIoT化していきたいと思います。

以上、最高のトースターをIoT化するお話でした。ウマー。

※トースターを操作する際は周囲の安全を確認して使用してください。本記事の使用方法を推奨するものではありません。

・・・

Akerunをつくっている株式会社フォトシンスでは、Railsエンジニアを募集しています! www.wantedly.com

Akerun Developersサイトやってます!Akerun APIについては、こちら。 photosynth-inc.github.io

Akerunデータマイニング

この記事は Akerun Advent Calendar 16日目の記事です。

こんにちは、フォトシンスの @moriokumura です。 普段はAkerunのサーバーサイドやWebクライアントサイドを開発しています。

さて、AkerunはIoTデバイスなので、ただの鍵とは違い開閉の履歴や本体の情報がクラウドに保存されています。 この日々収集されているビッグデータを解析しない手はありません。有用なデータをマイニングしてみましょう。


1. 右回り vs 左回り

Akerunはドアのサムターン(つまみ)を回転させることで鍵を開閉してますが、このサムターンの回転方向はドアによってまちまちです。 Akerunが設置されているドアの内、どちらに回転させる鍵が多いのか調べてみました。

f:id:photosynth-inc:20161216194759p:plain

時計回り(右回り) 52.8% 反時計回り(左回り) 47.2%

ということで、わずかに時計回り(右回り)が多いという結果になりました。 今後はじめて触るドアのつまみを回す時は、とりあえず右に回してみると良さそうです。

2. iOS vs Android

Akerunはスマートロックの名の通り、iOS/Androidスマートフォンアプリで鍵を開けることができます。

iOS/Androidそれぞれのアプリでの開閉割合を調べてみましょう。

f:id:photosynth-inc:20161216194528p:plain

iOS 78.5% Android 21.5%

ということで、iOSアプリでの開閉が8割近い結果になりました。

これだけではあまり面白くないので、曜日×時間帯別に各アプリでの開閉割合を算出し、グラフにしてみます。

f:id:photosynth-inc:20161216193921p:plain

色が濃い時間帯ほどiOSユーザーの割合が多く、色が薄い時間帯ほどAndroidユーザーの割合が多いことを表しています。

ちょっと見にくいですが、左右両端で色がやや濃くなっており、22時から1時台の深夜にiOSユーザーが多いことが分かります。 一方朝8-9時台や16-17時台、特に土日は色が薄めになっており、Androidユーザーが多くなるようです。

このことから、iOSユーザーは夜型、Androidユーザーは朝型の傾向があると言えそうです。

ちなみに、Akerun Proスマートフォンアプリだけでなく、SuicaなどのNFCカードやガラケーを含むWebブラウザで鍵を開けることもできます。

まとめ

この記事を書くに当たって探せば探すほどおもしろいデータがあったのですが、ほんの一部を紹介させていただきました。

短いですが、以上です。

Akerunをつくっている株式会社フォトシンスではRailsエンジニアを募集しています! www.wantedly.com

Akerun Developersサイトもやってます。Akerun APIについては、こちらをご覧ください。 photosynth-inc.github.io

IoTスタートアップの会議で飛び交う、ものづくりギョーカイ用語12選(入門編)

この記事はAkerun Advent Calendar 15日目の記事です。

こんにちは、フォトシンスの @yuyakm です。 弊社はスマートロックロボットAkerunをつくっておりIoTスタートアップと言われていますが、今回はハードウェアスタートアップととしての側面をご紹介します。

社内・社外で「ハードウェアのことはよくわからない!」と言われることが多いので、これはよく使うなと思う単語をご紹介します。 今回は入門編として、会議でよく出る単語をご紹介します。 (フォトシンスも続々とメンバーが増えているので社内向けの共有にもなれば)

①MOQ

読み方:エムオーキュー

Minimum Order Quantityの略で、これ以上じゃないと注文できないよという数量です。

例えば、電子部品がリール(部品を袋詰したテープを巻いたもの)単位でないと買えないということはよくあります。 小ロット製造する製品はMOQが障壁になってその部品を採用できないこともありますし、製造ロットを決める際にも各部品のMOQが判断材料になります。

リールのイメージ写真として、チップコンデンサの写真をご紹介します。 f:id:photosynth-inc:20161216143347j:plain これは1リール4,000個入っています。

②LT, L/T

読み方:エルティー、リードタイム

Lead Timeの略です。 手配を始めてから完成するまでの期間という意味です。 納期と同じぐらい使う言葉なのですが、納期と使い分ける場合もあります。

在庫があって即納だと思って使っていた部品が、追加発注しようと思ったら実はLTが長くて16週間待たされる、ということがあったりするので注意です。 ある製品(部品)をつくるために他のメーカーから材料を仕入れる場合はそのLTも加味されたものが回答されますし、その中に長納期の部材がある場合はその影響を受けますので想像よりも長い回答が来る場合があります。

③PO

読み方:ピーオー

Purchase orderの略です。つまり発注書です。普通に発注書と言う方が多いかも。。

発注していないものは納品されないですし、発注すれば購入する義務が発生します。 関連して3つの略語を紹介します。

  • QTY = Quantity = 数量
  • pcs = pieces = 個
  • PI = Proforma Invoice = 見積書

④製造フォーキャスト

製造計画のことです。単にフォーキャストとも言います。 ある部品や製品を製造する場合、計画的に材料の調達や人員の確保を行う必要がありますので、商社や製造委託先からはフォーキャスト(=今後の発注見込み数量)に応じで準備を行います。

重要な情報ですので可能な限り正確な情報を随時アップデートする必要があります。(しかし正確に未来を予測することが難しい・・)

⑤BOM

読み方:ボム

Bill of materialsの略で、意味は部品表です。

必要な部品の型番や仕様、員数等が製品単位、基板単位で記載されています。 この表を元に部品調達や製造原価の計算を行います。

⑥射出成形

ざっくり説明すると、熱してドロドロになった樹脂を金型に押し込んで、冷却することで部品をつくる方法です。大量生産に向いているので多くの製品にこの方法で製造された部品があります。

成形機にセットされた金型 f:id:photosynth-inc:20161216135508j:plain

あれからこれが出てきます f:id:photosynth-inc:20161216135511j:plain

奥が深い世界なので今回はさらっと終わります。

⑦ヒケ

射出成形でつくられた樹脂部品が冷却時に収縮することでつくられた凹みのことです。

写真では分かり難いですが、中央が凹んでいます。 f:id:photosynth-inc:20161216141026j:plain ※弊社製品ではありません

厚みのある部分があると大きく凹みますので、機構設計者はできるだけ均一な肉厚になるように設計します。 身近な製品でヒケを見つけることもできますので指摘してドヤってみましょう。 他にも、バリ、ソリ、ショート、ウエルド、フクレ、シボの転写ムラ、etc...の樹脂部品の問題に関する用語があります。

⑧基板 / PCB, PCBA

PCBは、Printed Circuit Boardの略です。 回路が印刷された板です。基板です。プリント基板ということもあります。 PCBAは、Printed Circuit Board Assemblyの略です。 プリント基板にSMD(基板に乗っける)部品やDIP(穴に挿入する)部品を取り付け(はんだ付け)された状態のものをいいます。

イメージ画像:Raspberry Pi 3 Model B f:id:photosynth-inc:20161216143350j:plain

PCBや基板は部品が実装されたものを意図していることが多く、電子部品を含まない板だけを表現したい場合は、生板や生基板と言います。

⑨表面実装 / SMT

Surface mount technologyの略です。

基板の表面に電子部品を乗っけてはんだ付けする工程です。 殆どの基板はこの工程で電子部品を基板に実装(指定の場所にはんだ付け)しています。 弊社では試作や製造スケジュールの項目としてよく見かけます

⑩貼り箱

少しパッケージの話をします。 貼り箱は、ベースになる固いボール紙の箱をきれいな紙で包むことでつくります。 切って折って作る箱(例えばキャラメル箱)に比べて、材料が増えますし、紙で包む行程でコストが発生するため高級品向けと言えます。

Akerun Proの箱 f:id:photosynth-inc:20161216135452j:plain

よく見ると、継ぎ目が見えて紙で覆われていることがわかります。 f:id:photosynth-inc:20161216135503j:plain

みんな大好きAppleGoogle製品をはじめ、高級感のあるスマホやPCの箱は貼り箱であることが多いです。箱のしっかり感(剛性感)を演出したり、包む紙の質感を拘ったり、印刷の自由度が高いので、高級感のあるデザインを実現しやすいと思います。

Akerun Proの"Pro"の文字はシルバーの箔押しをしてプロ感を演出しています。 f:id:photosynth-inc:20161216135456j:plain

もちろん高ければ良いというわけでもなく、Amazon Dash Buttonのように低価格であることを大切にして、コストの制約の中でデザインを工夫しているものもあります。

⑪スリーブ

シュッと引き抜くアレです。パッケージの演出としてよく見かけます。

これが f:id:photosynth-inc:20161216143700j:plain

こうなります f:id:photosynth-inc:20161216135501j:plain

弊社製品ではよく使っています。

治具

読み方:ジグ 「作業を補助するもの」ぐらいの広い意味で使われ、多様な治具があります。 Akerunの製造では、

  • 塗装部品を固定し塗りたくないところに塗料が塗られないようにするための治具
  • 基板のテストパッドにピンをあてて検査をする治具
  • 内部部品を両面テープを正確に貼るための治具
  • ボタンの向きとサムターンの向きを揃えて組み立てるための治具
  • ギアボックスの試験をするためにギアボックス単体を固定しパーマトルクに接続するための治具

etc ... 色々なものがあります

例:曲面で構成されるAkerun Proを固定して組み立てるための治具 f:id:photosynth-inc:20161216144918j:plain

例:基板の検査をする治具(検査機) f:id:photosynth-inc:20161216150303j:plain

おまけ①:Great Firewall, 金盾

中国のインターネット検閲システムです。 中国のWi-Fiに接続してもGoogle(のあらゆるサービス), Facebook, LINE, Twitter等が使えません。Slackは使えました。 Gmailが使えないだけでも仕事になりません。

対策

データ通信のみ

通話もするなら

おまけ②:Teardown

業界用語というよりはただの英単語ですが、

「商品名 + Teardown」

で検索するといろんな分解記事が見れて楽しいですよ! Disassemblyで検索しても出て来ます。 iFixitに辿り着くことが多いです。 www.ifixit.com

最後に

以上、入門編と題して幅広く用語的なものをご紹介しました。会社毎に言い方や使い方が違うこともがあります、ご参考になれば幸いです。

AkerunとAPIで連携して色々できます!Akerun Developersを覗いてみてください! photosynth-inc.github.io

Akerun Pro APIでできること10選 / Akerun Advent Calendar 14日目

f:id:photosynth-inc:20161215205132j:plain

この記事はAkerun Advent Calendar 14日目の記事です。

今日もkazuphが担当しますよん。

Akerun API

photosynth-inc.github.io

AkerunにはWeb APIあります。今のところ会社で使っているAkerunの一覧と開閉などの履歴の取得のAPIのみですが、それだけでもかなり使い勝手いいと思いますので、今回は僕が思いつく限りのアイディアを紹介したいと思います。

ちなみにAkerun Proは中小企業向けなので、会社でのアイディアがメインになります。

履歴参照APIを使った場合のアイディア

① 誰がどこにいるかを確認する

f:id:photosynth-inc:20161215205633p:plain

Slack Botに質問すると誰がどこにいるのか教えてくれる。執務室以外にも会議室につけておくと「今ミーティング中だよ〜」とかわかって便利です。残念ながらトイレには付けられないので他を当たってください。

②簡易的な勤怠システムを作成する

f:id:photosynth-inc:20161215205927p:plain

自分が会社にどれくらいいたのかわかるとあとから振り返りのとき便利ですよね。 テキストでもいいですが、Spreadsheetにまとめたり、専用のWebアプリケーションをつくってもいいかもしれません。

③会議室の空き状況把握

f:id:photosynth-inc:20161215210135p:plain

立ち話が発展して「よしじゃあ今からミーティングしよう!」となったときに、さっと確認できて便利です。また本当はミーティングが始まってなくて、開きっぱなしになっていれば、Googleカレンダーと連携して、予定をキャンセルしてくれたりすると、会議室の利用率向上にも貢献してくれそうですね。

④退出したら無条件にパソコンの画面をロックする

f:id:photosynth-inc:20161215214433p:plain

うっかりパソコンのロックを忘れてしまった。5分後に自動ロックされるようにしているけど、それでもうっかり忘れちゃうのは怖い。そんなときには、退出ログを確認したときには、自動で画面をロックするようにしていると便利かもしれません。少なくともMacではApple Scriptを実行すればロックは一瞬なので、そういうプロセスを置いておけばよさそうですね。

⑤今オフィスにいる人に合わせて音楽を鳴らす

f:id:photosynth-inc:20161215212034p:plain

仕事中に音楽を流せる職場なら、今いる人に合わせて予め登録してあるプレイリストをミックスして再生とかするとおもしろいかもしれません。 エンジニアしかいないならアニソン、事務のお姉さんが来たら流行りのJ-POP、社長が出社したら無条件に北島三郎など、チューニングはあなた次第。 Youtubeでいいなら、APIがあるので、やりやすそうですね!

⑥定時後に退社したら奥さんのLINEに通知する

f:id:photosynth-inc:20161215211949p:plain

いわゆる「これから帰る🐸」ですね。 いつも同じことを繰り返すのは面倒なので、自動化しちゃいましょう。

⑦帰りの遅い人には注意する

f:id:photosynth-inc:20161215212155p:plain

残業続きは身体に毒です。APIで取得した履歴から帰る時間を算出して、遅かったら労ったり、仕事を調整して上げましょう。 Akerunの入退出ログはドアの開閉に紐づくので少なくともほふくでは突破できません。ドアが開けっ放しにされても警告音を鳴らせますし、ズルはしずらいかなーって思います。

⑧仕事の進捗とオフィスにいる時間の相関を取ってみる

f:id:photosynth-inc:20161215212742p:plain

Akerunでは入退室のログが全部取れるので、どれくらいオフィスにいたのかを正確に把握することができます。

長くいれば生産性が上がるというわけではないと思うので、ちゃんと統計を取ってみると案外すぐ帰る人の方が最終的な生産性がいいかもしれません。 働くお母さんの方が生産性が高いみたいなデータが取れるかもしれませんね。

⑨社内の電話システムと連動してオフィスにいる人の前の電話に転送するようにする

f:id:photosynth-inc:20161215213424p:plain

オフィスが広くなってくると、いろんな場所で電話が鳴って、電話を取りたくても走ってその島にいかないといけないということがありますよね(他の島の電話が取れるやつもありますが)。

そういうときは、いる人の席にある電話だけなるようにすると捗るかもしれません。最近は電話の転送設定がウェブだけでできるので、APIがなくても最悪自動でブラウザ操作すればいけるかもしれません。

⑩退出したときに、雨が降ってそうならアプリに通知する

f:id:photosynth-inc:20161215213534p:plain

退出したタイミングで雨情報をその人に通知するような仕組みがあると便利かもしれません。 下まで降りて雨だと気づいてまた上の階のオフィスまで傘を取りにいくのは大変なので。

まとめ

いらすとやさん便利。

じゃなかった。ということで、ざっと思いつたアイディアを書き出してみました。 まだまだ便利でおもしろいアイディアは沢山あると思うので、Akerunを導入した際は是非APIも使ってみてください!

株式会社フォトシンスでは、APIやWebツールをもっと良くしてくれる、Railsエンジニアを募集しています! www.wantedly.com