ソフトウェアとハードウェアを設計、実装できるエンジニアになりたい
動く「物」作ってそれを製品にしてみたいから
特にデバッガーの設定は、インターネット上に情報がなく、画期的な成果であると考えています。
1.5年間にわたるNFT取引プロジェクトにおいて、開発リーダーとしてチームを統括し、アジャイル開発を採用してプロジェクトを遂行しました。
週次同期ミーティングやメンバー相談時間の導入により、開発効率が向上し、急速に変化する暗号通貨業界に対応する開発を行いました。
技術面ではデバッガーの設定やCIサーバーの設置など、革新的な成果を出しました。
マネジメント面では、各メンバーの専門性を尊重し、適切な役割分担を行いました。
このプロジェクト詳細は公開されていません
Nodejs: ファイル操作などでを実装
InnoSetup: インストーラー作成に使用
electron: メインフレームワークとして使用
Jenkins: プロジェクトのビルドシステムとして使用
Docker: Jenkinsサーバーを立てるために使用
メインフレームワークはelectronを使用し、自動テストにはAVAを使用した。
設計、コーディング、テスト、運用
要件定義、設計、コーディング、テスト運用
要件定義、設計、コーディング、テスト運用
プロジェクトの成果物をユーザーの環境にインストールし、レジストリに指定ファイルクリック時の挙動や、特定のデータ、拡張子への画像の紐づけなどを行う
インストーラーはInnoSetupをを使い、拡張子の関連付けやクリック時の挙動などの動作はフレームワークの機能使って実装しました。
言語がPascalということとあまり、情報が無いため、実装には苦労しました。
Signやコンパイルを呼び出す動作はNodeで実装し、npmモジュールを使い、特定の環境に依存しないスクリプトを実装しました。
Signファイルやパスワードなどはソースに書いてはいけないため、対話式のスクリプトにしました、
また、自動化すると対話式だと問題があるので、引数に対応し、自動化した時にも動作するような構造にしています
当初Nodejsに対する知見が浅く、ビルドはそれぞれのアーキテクチャで行いました。
特に32bitのビルドマシンはスペックが悪くビルドに1時間前後かかっていました
NodeやNodistの情報を集めハイスペックなビルド用マシン1台ででそれぞれのアーキテクチャでビルドを行えるようにしました
InnoSetupではインストールを行うときに、容量不足でもユーザーがインストールできる問題がありました。
InnoSetupではインストールサイズの取得はできないため、Pascalでフレームワークの画面情報を取得しインストールサイズ取得後、画面制御をPascalを使って行いました。
ユーザーの要望でこの実装は無くなりましたが、リファレンスには無い情報などを調べ、応用して実装したのでとても苦労しました
無料です。
メンテナンスされています
フレームワークを理解すると比較的簡単に実装ができます
機能として提供されていないことをしようとするとPascalで記述しなければならない(難易度が高くなる)
リファレンスが読みにくい
日本語の情報が少ない
最新のソースですぐにビルドできるようにバッチファイルを作成し、半自動化まで対応しました。
JenkinsとDockerでビルドシステム構築、自動でチェックアウトからビルドの自動化しました
ビルドスクリプトはアーキテクチャに依存しないように実装しました
前アプリは違うデータ構造な為、新しいデータ構造に対応するような機能を実装しました
前アプリからデータを読みださなければならないところから始まりました。
読みだす部分はC+を使って実装し、それをNodeから制御しました。
前アプリデータのドキュメントも無いため、データの解析から始まり、データの吸い上げを行いました。
私がアサインした時はデータの吸い上げまで終了しており、新データ構造の整形を対応しました。
前データのドキュメントが無いため、バリューの担保が失われる事が多々ありました。
自動テストはAVAで実装しカバレッジは80%を担保しました。
Nodeの処理としては
C+の処理としては
要件になかった性能について問題になりました
機能別でPromise並列実行し同じ機能でPromise並列実行をしたところ、30倍まで早くなることができました。
特に機能別並列Promise実行は制御が難しく32bitOSでも動くことを考慮しなければならなかったので、nodeのオプションを使いメモリ消費量やメモリーリークが無いかなど何度も調査しました
機能別並列実行はボトルネックの部分の処理を常に動かし続けるように制御しました。
メモリ消費量を気を付けながら実装だったので、単なる並列実行をするのではなく、メモリにデータが乗るのを次のループまでの情報までにしボトルネックの処理部分を常に動かし続けました
センサーデータを可視化して表示するシステム
プロジェクトにアサインした時点では、ある程度システムはできておりました
要件定義
設計
実装
Python: バックエンドサーバー
Vue.js: フロントエンド
HTML,CSS,JS: フロントエンド
C: センサーデータ収集のために使用
Docker: 開発環境、クロスコンパイル環境の為に使用
InnoSetup: インストーラー作成に使用
Linux向けに作られたメインフレームワークをWindows向けに移植する作業
メインフレームワーク内のLinuxでしか使えないライブラリをWindows相当のものに移植した
Linux向けに作られていたため、thread系やプロセス生成系のAPIが互換が無く、実装が難しかった
マルチプラットフォームに対応している比較的大きなライブラリなどを見ながら勉強して実装を進めました
Cはあまり経験がない状態でアサインされたのもあり、とても難しい作業でした
作業着手した当初はWindows向けにビルドすると大量のエラー表示があり、それらを潰してもまた追加でエラーが発生して終わりが見えない状況でした
その段階でリーダーと相談し、1週間は工数見積もりという形で作業を進めある程度目途が着いた段階で工数を見積もりました
Linux用の特有の機能を使い移植が難しい部分を比較的新しく実装されたWindowsAPIを利用し、新規実装せずに移植できました
こちらは、Windows公式サンプルコードしかない状態で手探りの実装になりました
プロジェクトの成果物をユーザーの環境にインストールし、Windowsサービスとしてバックエンドで動作するようにした
インストーラー作成スクリプトなど含めマニュアルの表示やアプリケーションのショートカットなども作成した
インストーラーはInnoSetupというFWを使って作成しました
拡張子の紐づけなどがなかった為、レジストリ登録など無く比較的簡単に作成できました
Windowsのアプリケーションは何度も作成して慣れていたのですが、今回初めてWindowsサービスとして登録し、ユーザーの操作が無くバックエンドで動かす必要がありました
その場合は、CやC++などでWin32APIを使用しないといけないため工数が膨らむ可能性がありました
そこまでの工数はなかった為、調査を行いWinSWというOSSを発見しました
WinSWを使い簡単にWindowsサービス実装することができました
機能しないオプションがあったり、マニュアル記載通りにやってもできないなどもありましたが、ISSUEなどを見て実装しました
コーディングしなくてもWindowsサービスとして登録できるOSSです
比較的メンテナンスされています
バージョンが混在していて動作しないオプションがあったり、ISSUEやドキュメントのバージョンなど手探りで使わないといけない場合がある
実験的プロジェクトで屋外のロールカーテンを制御するシステムを作成しました
これはandroidアプリと機械のセンサーで制御できるアーキテクチャでした
私が担当したのは主に機械側(arduino)の制御です
モーターや雨水センサー光センサーなどを主に制御しました
雨水センサーは自作されていたものがあり、それを実際に水にぬらしたりして閾値を取り実装しました。
光センサーも同様です。
何度も計測し、制御するのはとても面白かったです。
モーターの制御はうまくいかずとても苦労しました
モーターが通常通り動かすとモーターの力で暴れて筐体への負荷が高くなりました
そこでモーターを徐々に動かしたり、止めるときに惰性をつけて止めるようにしました。
これがうまくいきモーターがなめらかな動作になりました。
このプロジェクトでC言語やセンサー、モーターの制御の知見が高まりました
オフショア開発のコントロール
プログラムが機能要件を満たし、内部設計通りの実装になっている状態になっている責務があった
現時点でのノウハウ
企画力
プログラマー