雑記帳

ソフトを中心に雑記を書いてる割とすぐ転職したい人。コメント貰えると私が喜びます。

自社向けのシステム開発の話(1)

この文章を書いた背景

2017年に全然ブログを書けなかったので、何か書くネタとして無いかなと思いました。
結局、私が普段からやっていた仕事や生活のことを書くのが一番自然だと思ったので、そういったネタを選んで行きます。

やってたこと

私がやってた昨年やっていた仕事の半分以上は、自社工場へのMESシステム(生産管理システム?)の導入に向けた開発です。
その絡みで得た知見やら何やらを書いていきます。

MES 言葉の意味

MES(Manufacturing Execution System=製造実行システム)の略らしいです。
IT用語辞典曰く次のようです。

MESとは、製造業の生産現場で、製造工程の状態の把握や管理、作業者への指示や支援などを行う情報システムのこと。  
工場などで利用され、設備や原材料、仕掛品などの数量や状態などをリアルタイムに把握し、生産計画に基づいて作業の  
スケジュールを組み立てたり、作業者へ指示を出したり、作業手順に関する情報を提供したりする役割を果たす。

開発に至った背景

会社的には、世の中のIoTや自動化の流れに加えて、ドイツのインダストリー4.0や、アメリカのインダストリアルインターネットの流れからか、欧米の顧客から要求があったことから、開発に着手したみたいです。
世間的には、MES自体は情報システムとしては2000年過ぎ頃に盛んだったようですが、弊社は入れていなかったようです。
私がMESに関わり始めたのは約2年前で、生産技術部門の開発者として参加しました。

世間的な定義

[定義1] 3層構造

学術的には、AMR Research社が提唱した3層モデルとして、次のように定義されているようです。
MESの3層モデル
ITmediaより http://techtarget.itmedia.co.jp/tt/news/0911/24/news02.html

製造現場に絡む情報を「計画層」「実行層」「制御層」の3つに分割して考え、MESシステムは「実行層」に位置します。
ザックリと「基幹情報システムが持っている情報」と「生産現場にある実体(印刷した組図、工作機械、冶具、部品、人など)」を区別して、その間を自動で繋ぐ何らかの方法論としての中間I/Fが欲しかっただけだと思います。

3層の考え方

ITmediaさんの以下の図がとても簡潔に説明出来ているのでコレを見て下さい。
MESの情報の流れ ITmediaより http://techtarget.itmedia.co.jp/tt/news/0911/24/news02.html

要は、上位システムか「何を」「どうやって」作るかの情報が生産現場に流れてくるので、反対に生産現場から「どうやって」「何を」作ったかの情報を返答していくだけです。

この中での私の役割は、MES(実行層)と生産現場の工作機械(制御層)との中間のインターフェースを開発するエンジニアです。

詳しい解説はITmediaさんの記事を見て貰えると幸いです。
次回以降の説明で私も別の説明をしてみます。

[定義2] 11の機能

MESの利用を促進する団体MESA Internationalの定義では次のようです。

受注から完成品に至る生産活動の最適化を可能にする情報を提供するシステムであり、以下の11の機能を有する
  1. 生産資源の配分と監視
  2. 作業のスケジューリング
  3. 差立て、製造指示
  4. 仕様、文書管理
  5. データ収集
  6. 作業者管理
  7. 製品品質管理
  8. プロセス管理
  9. 設備の保守、保全管理
  10. 製品の追跡と製品体系の管理
  11. 実績管理

書いておいてなんですが、この言葉に引っ張られると意味不明になります。
やることが多く見えてしまってキモチワルイと思うので、忘れた方が良いと思います。

う〜〜〜〜

年末年始に全部書こうとしてたけど、色々あって書ききれないのでここで切ります。
ブログで使う説明用の図を作ろうとしてたけど、自宅のMacだと作業性が悪すぎることに気づきました。
とりあえず次は慣れているWindowsでやるとしてブログを書く環境を良くすることを少し考えたいです。

次回は私が思っているシステムの印象とIoTとかとの兼ね合いなどを書けるといいなぁと思います。

参考情報


去年やったこととか頑張って書いていきたい

背景

こんなこと書かれてて「そうだよな、更新出来てないんだよな」と思った。 とりあず、なんでも良いから更新します。 f:id:fkei:20180101034140j:plain

やりたいこと

更新しなくなった去年やったことを書いてみます。
とりあえず仕事で何してたかをメモって、後悔公開しておきたいです。
年始は毎日更新したいけど本当に出来るかね?
知らんけどがんばれ!!

f:id:fkei:20180101041950j:plain:w440

PyconJPメモ

背景

PyconJPに行きました。メモってたけどブログに起こしてませんでした。 ブログとして頑張って文書を起こす気力と時間が無いので、その場のメモだけベトッと貼っておきます。


感想

データ分析成分が多いと言ってたけど、そっち方面では新しい感じの情報は無かったので必要なものは世の中に出揃った感が強くなりました。
個人的にはPythonの内部実装の話とかの方が参考になりました。

業務ドメインが違すぎて、自分が利用事例を殆ど持っていないので他の人ととっつき辛いのが悲しいかな。
早く業務内で扱えるところまで進みたいんだけどなぁ。(そろそろのはず)

昨年ほど商業色がなくて雰囲気は良かったです。
でも、なんとなく数年前より活気無く思えたのは何故だろう?人は増えてるはずなのに?

そしてモノタロウさんは少年にリベンジできておめでとうでした。


夢の跡

ベンリに使おう変数アノテーション - typing.pyとの楽しいお付き合い

  • PEP484
    • 型宣言を入れられるようになった
    • コメント扱い
  • PEP526
    • PEP484では型情報がコメントだったが、変数宣言中に入れた
    • 実行時に

アノテーションは何に使われる?

  • 普通は静的コード解析に使う
  • 今回の変更は実行時に使う… 何で?

動機

  • UnmarshalerをPythonに移植しようとした

???

get_type_info()

ジェネリック

  • listやsetに型情報を付加できる
  • from typing ….
  • Python3以降しかない
  • Anyなんでも、Union
  • 関数引数などで型の識別情報として使う “”“ def f(arg: list): return arg def f(arg: list[str]): return arg ”“”
  • List[str].mro() を覚えよう
    • 型継承の追跡純を
  • List[str].args だと使われている型のタプルが帰ってくる
    • (str,)

型情報のチェック方法

  • builtinsかを調べる
    • int in vars(builtins).values()
  • ジェネリックかを調べる

  • Python3.6.0ではUnionがバグってる


Pythonで大量データ処理!PySparkを用いたデータ分析のきほん

  • おおよそ知ってる内容でした。
  • 使い始めるキッカケとしては良いと思います。

Building a Customized Personal Assistant with Python

  • ボットを自作した際のお話。ちょっと面白そう。

RとPython

  • 知らない内容だったけど、結論が残念。表示がいい感じかどうかとかで使い分けるのか。

  • データ入力系

    • csv tsv
    • Excel
    • SQL(データベース)
    • feather
      • カラム嗜好のデータフォーマット
      • 欠損値の扱いなどが楽
  • PythonからRを呼ぶ
    • Rpy2, PypeR

プロダクト開発して分かったDjangoの深~いパーミッション管理の話

  • なんか色々困った感じが伝わってきた。そして割と面白かった。
    • 私がDjangoを使う機会が無さそうなので如何ともしがたい。

viewの内容が変わった時の話

  • Lv1
    • パラメータを持たせて、viewの中でif文を持たせる
    • viewにif文を書くと雑になる
  • Lv2
    • ifが増えそうなので、デコレータでラッピングして変化に強くしたつもり
    • ユーザ側のアクセス領域が変わると死ぬ
  • Lv3
    • パーミッションを記事側に儲けて、ユーザの権限と合わせてジャッジ
      • has_permission and …
    • オレ仕様が増えすぎて管理し辛くなる

そろそろ辛いのでライブラリを使いたい

  • DjangoのPermission
    • userにPermissionをDB上で管理する
    • Globalな範囲で権限管理したかったので合わなかった。
  • Django-guardian
    • キーに対してpermissionを設定するだけで良いため楽だったか?
  • Djago-keeperを作ってみた
    • オブジェクトにACLメソッドを乗っけた

DjangoにAuthenticationBackendを使っていない

  • DjangoのPermissionを
  • 自社のIPアドレスだったら権限あり,,,のような付与もやりたい
  • AuthenticationBackendの仕組みと合わせた仕組みにしたらどうか?

Pandasのコミュニティの話

  • 開発者向けドキュメント公開している

OpenAPIを利用したPythonWebアプリケーション開発

  • 知らない界隈の話なので勉強になった。

  • OpenAPI InitiativeはREST APIの記述ルール

  • OpenAPI Specification
    • REST APIを記述するルール
    • Swagger spec
  • APIドキュメントとして使いやすい
  • APIツールとして使える
  • Swagger
    • Swagger UI
    • Swagger Editor
    • bravado-core

The theory of Serverless development by Python (理論から学ぶPythonによるサーバレス開発)

  • ゴメンナサイ。何やら頭に残りませんでした。

ドメイン駆動

  • ドメイン駆動で解釈しづらいポイントとかをお話。

  • 側面

  • CQRS
    • コマンドクエリ責務分析
    • コマンド(副作用あり)、クエリ(副作用なし)
      • 違うもの
  • 悩みどころ
  • 名前を大切にする
    • 違和感を感じたら直す
    • 良い名前を思いついたらチームで合意して直す
    • 長過ぎる名前を避ける
  • ヘキサゴナルアーキテクチャ
    • ポーツアンドアダプタ
    • アプリケーションは「設定」「アダプタ」の2種類のみ
  • DIコンテナを利用しよう
    • コンストラクタで依存性を注入する
    • DIコンテナ管理用ライブラリ(inject)
      • コンストラクタを汚さないで済む
  • DBアクセスライブラリを利用しよう
    • ORマッパーを使って良い
  • DDDのリポジトリに押し付けるとツライ

Polyphony: Python ではじめる FPGA と CNN への応用

  • 開発したソフトの話だったけど、なんとなく紹介(?)だけになっていたのでコメントしづらいです
  • CNNの要素が無かったので残念。CNN実装作ったから使ってね!を押してたらやってたかも。

Pythonにおけるデバッグ手法

  • ipythonを使え

SREエンジニアがJupyter+BigQueryでデータ分析基盤をDev&Opsする話

  • データ分析基盤を導入する中での困りごとや解決方法などをつらつらと。
  • 個人的に一番面白かったのであとで公開されたら見てみて下さい。