FocusLynx Focuser Hub Webpage and Apps
The FocusLynx Focuser Hub Control Page was created over the summer of 2011 to provide a convenient way for Optec customers to control their FocusLynx Focuser Hub (a tool used by hobbyist astronomers for astrophotography) from a mobile device. The device firmware sends out the control webpage over an ad-hoc wireless network, and can also be configured to send the webpage over other WiFi networks. To add extra convenience to the process of accessing controls, control apps were created for Android and iOS devices over the summer of 2012 to automate the process of detecting a FocusLynx device on a network and load the control webpage.
* Expanding the scope of the FocusLynx's controls to include mobile devices gave me valuable knowledge of the workflows unique to Android and iOS projects, experience in porting an Android app to the iOS platform, and knowledge of how these mobile OSs' APIs approach the concepts of networking.
As my first experience as a software developer outside the classroom setting, the FocusLynx project was eye-opening on a broad variety of dimensions. At various points in the project, I had the opportunity to not only cooperate with my coworkers, but to learn from those senior to me and to mentor those junior to me. The project was also my first experience in working for an employer who was not a programmer, which helped me lay groundwork for a skill that would become immensely valuable in later interactions with game artists, designers, and producers: translating back and forth between plain English conversation and programming concerns and tasks. Additionally, my learning experiences extended a great deal beyond the content immediately related to my work. I was able to gain at least an incidental knowledge about topics ranging from electrical engineering to soldering to CAD/CAM manufacturing to details such as shipping packages and inventory management that are necessary skills for owning and operating a small business.
My contributions to the FocusLynx project centered around the creation of a web-accessible interface for sending commands directly to the firmware of the FocusLynx device. This gave me the opportunity to gain a solid foundation in how to work with basic networking tools like the TCP/IP protocol, UDP broadcasts, and network sockets--knowledge which has been extremely helpful in my later development of multiplayer games. Moreover, because ensuring communication between website and firmware also required the ability to interpret firmware code and design, I was able to observe the differences in design considerations between software for a user application and firmware for a black-box device.
During the second summer of my work, I began to address a problem that had appeared when the scope of the FocusLynx's audience expanded to include mobile users. While on a full-size computer the controls webpage could be accessed by entering the alias "focuslynxwifi" into a browser, mobile browsers could not resolve the alias, forcing mobile users to manually find and use the FocusLynx's IP Address. This was something most FocusLynx users found very challenging, and so my contribution to the FocusLynx project extended to include the creation of apps for both Android and iOS that would automatically detect and load the controls webpage, relieving the mobile user of any need to worry about IP addresses or other networking details. This experience gave me valuable foundational experience of the design considerations, development workflows, and submission procedures used for both major mobile platforms.
This sample of code from the iOS port of the FocusLynx Web Controller App handles responses to the UDP ping broadcasted by the iOS device when searching for FocusLynx devices.