← Back to Home
advertisement
Lumi4 - init()

Lumi4 - init()

Lumi4 This is the next iteration of a three-year project. Here are the current iterations: - Vorpal Hoff: An attempt at wireless charging with a combination of HM-11 and LPC1114. Written in C/C++ (Initialized May 22, 2014). - HM-1X Aid: This project was intended to be a GUI on top of the HM-1X modules, allowing "easy" editing of the module's behavior. It was my first foray into C#. (It's very bad; although the serial communication was asynchronous.) (Initialized December 19, 2015) - Lumi1: This is the first successful TinySafeBoot loader. It was written in C# using .NET WinForms. Unfortunately, it was synchronous. And I ended up with the USB to UART loader before I realized there was no simple BLE support in WinForm's .NET. (Started March 2, 2016) - Lumi2: this is where things start to improve. It is the current version of the TSB wireless bootloader. It works, is asynchronous and has BLE support. Unfortunately, the code became spaghetti. This is largely due to my poor understanding of object-oriented design. It has godly modules, a horribly implemented SerialEvent response protocol, poor encapsulation, no polymorphism. It's just a disaster. (Started March 21, 2016) - Lumi3: This project was stopped early. It was an attempt to create a cross-platform uploader using Xamarin Forms. It would have allowed versions of the app for iOS, Android and Windows. Unfortunately, it's a pretty complex project. In theory, the uploader would work by allowing the user to select a HEX file from Dropbox, establish contact with TinySafeBoot using BLE or WifI, and then upload the HEX file. And while this is theoretically possible, it would require learning two new APIs: Xamarin Forms and Dropbox. And my approach is deliberate practice of object-oriented programming and language conventions, rather than hacking two new APIs. I will most likely return to this project after Lumi4 (January 13, 2017) Why? Seriously, friend It's important to state that the goal of this three-year project has not been to produce a working product, although that is close behind. The purpose of these repeated attempts is to improve as a developer. Of course, I don't think that if I try hard enough and eat my Wheatie I'll become a great developer. But with each iteration I focus on developing a handful of new skills. This learning strategy is from the book Peak by Anders Ericsson. Ericsson calls this continuous, intentional practice “deliberate practice.” It is with this mindset that I have approached this iterative coding project, hoping that with each iteration the code will improve, but more importantly, that my skill as a developer will improve. Focus Deliberate practice involves selecting particular deficits to focus on. This is more effective because improvement occurs in a few intentional areas, rather than trying to practice all the important nuances of a skill at once. It seems easy to overcome this; especially, when it comes to developer skills. There are too many to try to perfect them all at once. Unfortunately, focused practice is not something that was intentional in the early codebases of this series. It wasn't until Lumi3 and Lumi4 that it became crucial in the process of developing my skills. Specific areas in Lumi4 The areas I am looking to practice in Lumi4 - Project management - Project diary - Abstraction - Encapsulation - Item granulation (avoid divine items) - Meaningful names - C# conventions (naming, formatting, location, etc.) - Factory design pattern. - Observer Design Pattern - Error handling - Unit tests Some areas I can take on if all goes well: - Integration testing - Documentation API What is the plan for Lumi4? Lumi4 will have three basic components: - Communication management for BluetoothLE and WiFi (expandable to Bluetooth Classic and
advertisement

Related Articles

advertisement