Proud Programming Projects: Building Custom Systems from Scratch
As a programmer, there are certain projects that stand out as particularly proudest and rewarding. One such project was a multi-protocol picocellular indoor wireless system for a startup, where I had the opportunity to innovate and build from the ground up.
Building the Applications Support Package (ASP)
The project was built cross-platform from common code and consisted of three distinct subsystems, each comprising of three or four distinct PCBs. Depending on the function of the PCB, it would have one of a dozen different PowerPC SoCs, AMD SoCs, or Intel SoCs, populated with various FLASH geometries and suppliers like Intel, AMD, Atmel, and Toshiba. This system provided WiFi, iDEN, and GSM mobile coverage in dense office environments.
Key Components and Innovations
Data-Driven FLASH Driver and Filesystem
The first significant component I developed was a data-driven FLASH driver and filesystem for the real-time operating system VxWorks. It was designed to run on each SoC and manage dual-redundant modified-FAT filesystem volumes and a config partition. This provided the necessary storage for application images and data, ensuring that the system met the expected embedded system requirements.
Communication and Discovery Protocols
The subsystems needed a common communication protocol, so it was decided to use an IP/UDP-based Ethernet backbone. To facilitate communication between tasks on the same SoC or tasks on a distant SoC, I created a location-agnostic layer above the VxWorks message queue. In addition, a simple discovery protocol was developed, allowing any SoC to discover other SoCs in its vicinity, akin to how a router discovers its peers, but tailored to a firewalled system of subsystems.
Distributed Database and Data Synchronization
For the applications engineers, a database for volatile and non-volatile storage was required. I designed a distributed database that supported publish-subscribe methods. Synchronization of data relied on a data exchange protocol built on top of the discovery protocol. When a peer discovered another peer, it would request a token to initiate a data exchange, and once granted, it would communicate the local database keys. This ensured that synchronization was seamless and efficient.
Innovative Solutions and Learning Opportunities
The system design did not come without challenges, but being given the opportunity to innovate and solve problems creatively was immensely fulfilling. Some skeptical observers may have said, "you could have used X" or "why didn’t you do it Y way?". But the best learning often comes from tackling problems with a fresh perspective, rather than being constrained by predefined solutions.
When given a budget, it's worth exploring alternative solutions that may already exist, but often, the creativity and innovation that come from building from scratch yield the most valuable experiences. In this case, the architecture evolved naturally from the director’s reaction to the high price for WindRiver's filesystem. Knowing that I could build a functional demo in a few days opened up possibilities for a more user-friendly and clean system, essential for persuading venture capitalists.
Building from scratch is incredibly rewarding. It provides the opportunity to understand the intricacies of a system, and the challenges faced during the project serve as invaluable learning experiences.
Whether you're a seasoned programmer or a beginner, embracing the challenge of building something from scratch can significantly enhance your skills and deepen your understanding of how systems work. So, if you're given a chance to be creative and innovative, don't hesitate to take it. You might just be surprised by what you can achieve.
Conclusion
In conclusion, building a custom system from scratch, like the multi-protocol picocellular indoor wireless system for a startup, provides a unique opportunity to innovate, learn, and develop problem-solving skills. It's a rewarding experience that highlights the importance of creativity and flexibility in the world of programming.