As a person masters a craft, the contents in their toolbox change becoming highly suitable, functionally precise, fine quality, and artistic masterpieces in their own right. I am not a master craftsman in iOS app software development . . . yet. It is my goal to become really good at creating what I envision. I am still learning, building upon my skills, and assembling my toolbox. This blog describes the tools currently in my software app development toolbox. None of the links are sponsored links. I just like the tools and use them a lot. It is interesting to note that other software developers have published their list of tools, also. Here is one of those lists:
Contents of my Toolbox:
Here is my current list:
Affinity Designer is a high-end vector drawing/graphics software tool on par with Adobe Illustrator. I started using Affinity Designer in early 2018. Affinity Designer is world-class with professional-grade functionality, performance and UI/UX design.
Affinity Photo is a high-end photo editing software tool on par with Adobe Photoshop. I started using Affinity Photo in early 2018. Affinity Photo is world-class with professional-grade functionality, performance and UI/UX design.
Atom is an incredible text editor with a clean interface and all the essential functions such as syntax highlighting, auto-completion, auto-indent, code folding, customizable panes and Git integration. For me, Atom’s strongest feature is the massive customization from a large library of more than 7378 open-source packages.
Pixelmator is a full-featured image-editing software application. It keeps getting better with each version and now has an amazing suite of features and effects. I started using Pixelmator just after it was originally published in 2007. The software uses a floating palette format for its tool windows that allows me to totally customize the workspace environment.
Xcode is our world. As a software developer with a career spanning several generations of Moore’s Law in computer technology and associated software development environments, I am blown-away with the functionality, feature set, performance and user interface on Xcode for developing iOS and OS X applications.
Reveal visualizes the impossible: Xcode app layer hierarchy. Reveal is one of those software programs that is magical. I am blown-away that I can visual my app layer hierarchy so well via a 3-D spinable view and inspect layout constraints.
UltraEdit has been in my toolbox for a long time (since 1996). When I am not knee-deep in an Xcode session, I am using UltraEdit. The feature set has been enhanced through the years to the point where the functionality, performance, and user interface is world-class. The story behind UltraEdit, its founder Ian Mead, and the launch of IDM Computer Solutions is a good read about making the leap to starting your own business.
It is no secret that electronic circuit design and board layout have become performance critical as circuit complexity has increased by orders of magnitude in the last decade. Part and board layout pad and line geometries have shrunk to a point that is almost too fine to see. Altium is a high-end schematic capture and circuit board layout tool that is world-class in every perspective. It allows me to create informative schematics, reliable high-performance circuit layouts, order through DigiKey (and other electronic part suppliers) directly from the the bill-of-materials (BOM) in Altium, and export an electronic data package/file for PCB fabrication houses and circuit assembly houses.
Atmel Studio is the high-end IDE for all AVR and SAM microcomputers (e.g. L21 ARM Cortex-M0+) that have been used in various embedded applications throughout the world and on the entire ever-popular family of Arduino modules. I am amazed at the feature set, performance, and user interface on Atmel Studio 7 (current version). The processor has a significant amount on on-chip features that Atmel Studio supports including low-power modes, FS device/host USB interfaces, 12-bit ADC, op amps, configurable digital signal pins (input, output, pull-up, interrupt), and on-board memory (Flash and RAM). I use the SAM-ICE (JTAG protocol) to download code to the microcontroller and debug (set breakpoints, examine registers, monitor variable and memory usage.
Qt is a cross-platform development environment that can be used for developing application software with GUIs. Software is primarily written in C++. The only unique concept in using Qt is the use of Signals and Slots to handle the events. Numerous examples are provided by Qt.
QCustomPlot is a widget that works with Qt and excels at plotting and data visualization. It consists of two files (qcustomplot.cpp and qcustomplot.h) that are added to the software project. Plots are easy to code and have an extensive feature set for customization. Publication quality 2D plots, charts and graphs can be produced. Performance supports real-time data plotting and visualization applications.
Kindle makes my list of tools (surprised?). Kindle is a software app from Amazon that enables me to build up a highly accessible multi-device library of downloaded technical books that I have purchased and any PDF files that I have uploaded. My current Kindle library has well over 60 books. Less than 30 seconds after I buy a Kindle-version of a technical book, it is on both my MBP computers, my iPads and my iPhone. I can bookmark, search, and highlight. When I set down my iPad and use my MBP, the book is synced to the same place where I was reading on my iPad. That is why the Kindle app is listed here as one of my tools.
KiCad is a schematic capture and circuit board layout software program. KiCad uses an integrated development environment for the stages of the circuit design: Schematic capture, PCB layout, Gerber file generation/visualization, BOM generation, and library editing. KiCad’s popularity is fueled by its GerbView component. I like that KiCad is a cross-platform program (Linux, Microsoft Windows and Mac OS X) and supports multiple languages. Numerous component libraries are available. Custom components can be created. Lots of documentation and community support. KiCad is a world-class program for electronic circuit design.
FileZilla provides a GUI for transferring files between my MBP and remote computers via FTP and SFTP. File and folder structures of the local and remote machines are shown in two panels of the GUI. Transferring files or folders is a drag-and-drop operation between the two panels. Above these two panels is a terminal window that shows the command line communications occurring with the remote computer. The functionality, performance and user interface for FileZilla are world-class.
DataVault stores confidential information (e.g., login credentials and financial account info) on Mac and iOS devices using the Advanced Encryption Standard (AES). Synchronization of information between a Mac and iOS devices, if desired, is accomplished from any one of the following methods: iCloud, Wi-Fi, Dropbox, or Webdav. DataVault has a clean user interface that permits tagging entries with icons and organizes accounts into categories. By all means, I want to avoid the doomsday scenarios that are inevitable if I try to remember it all, write everything down on a secret note hidden somewhere, or store everything in an unencrypted file on a hard-drive. With DataVault, I have secure access to my confidential data anywhere and everywhere I go. When it comes to securing my confidential information, I dont gamble. I go with a game plan that I can trust.
Ark manages file backups to Amazon S3 (Simple Storage Service). Ark has a clean user interface for selection of folders and files. Ark does all data encryption before it leaves my computer (i.e., client-side encryption). Backups are stored in an open, documented format. In addition, an open-source command-line utility hosted on github (arq_restore) provides a guaranteed way to retrieve my data. S3 is the gold standard of online storage offering data durability of an unbelievable 99.999999999%. Ark does an incremental on-line backup when I login and every hour after. All recurring costs are billed by AWS. For nearly 80GB of storage, it costs less than $3/month. When it comes to backups, I dont gamble. I go with a solid game plan that I can trust.
Carbon Copy Cloner (CCC) creates full image bootable backups that include an OS X recovery partition. Even with Ark providing incremental backups of my data files to the cloud every hour, there is still one open issue to resolve in order to have a solid backup strategy. In the case of a complete internal hard-drive failure or loss, I want to be able to be up and running again with minimal delay. The solution is to have an external hard drive with a bootable image of my internal hard drive. Carbon Copy Cloner provides that functionality perfectly. CCC does full backups and incremental image backups, and fully customizable image backups. CCC can even schedule the backups to occur at a regular intervals. I especially like the task history feature which shows me a log of the previous backups. When it comes to backups, I dont gamble. I go with a solid game plan that I can trust.
Git-Flow implements a Git work template that brings a certain organizational structure to development, allowing a team of developers to follow a common methodology. The basis for Git-Flow is captured in the workflow diagram at the link provided below that includes branches for master, development, feature, release, and hotfixes. Git-Flow is code that combines Git commands to simplify operations specific to the Git-Flow workflow diagram. Although there are many ways to manage workflows using Git, this structured approach appeals to me.
SourceTree is an app that provides a highly informational GUI front-end to Git with functionality to support Git-Flow process workflows. Although, one stills needs to understand how Git works and should be fluent on the command line, the amount of information on the SourceTree app makes it easier for me to see the workflow during development and (someday) maintenance releases.
I plan to revisit this post regularly to see how my toolbox changes over time.