LaTeX?

Numerous times throughout my life I have wanted to write a book. I even have several manuscripts on my computer in various stages of completion. During the last month, I decided to try again. Step one was to decide what I wanted to write about. So, I selected about 10 topics and chose one for my first book. Step two, determine what tool I would use to write my book. A variety of software applications are available including Microsoft Word, Apple Pages, and Adobe InDesign. But one of my requirements is that the format be text-based so that I can easily store the document as well as the history in my Git repository.  Initially, I thought that Markdown would be a great format – text-based, easy to store in a source repository, and no special software required. However, after a short amount of work, I realized that Markdown didn’t really support the things I would want for writing. The first issue was with inadequate support for page layouts including images. Other issues followed, and I went back to the drawing board searching for a better alternative. While searching the internet, I found numerous sites recommending LaTeX. I never used LaTeX before, but I do remember seeing it referenced throughout the years on Linux systems. Could this be the answer? Does it meet my requirements? LaTeX is similar to HTML or Markdown. Character sequences can be used to indicate things like the table of contents, a chapter, a section, etc. Additional functionality can be added by using packages to fill all manner of typography needs. The files are text, and can easily be managed by a source control system and edited from any standard text editor. What about the output? I can easily run the LaTeX commands to output my document in PDF format, and I have even read that tools exist for conversion to ePub. When I add new chapters or update existing content, I can have my Jenkins server automatically build the full document and email it to me or publish in any why I choose. While I have only been tinkering with LaTeX for a short time, I have been very impressed with what I’ve been able to accomplish so far and intend to master this amazing tool to create documents and manuscripts.

Hacker Boxes

Every month, I eagerly await a package to arrive. It’s a small package, and it’s contents are always a surprise. What is it? It’s my HackerBox! HackerBoxes is a monthly service that sends you a box with some sort of tech project inside. Previous projects have included Raspberry Pi systems, Arduino micro controllers, GPS, circuits to connect to the cell network and so much more. This month, the project was to build and program an EKG device. An hour of soldering later, and I could measure all sorts of bodily signals. Through my monthly subscription, I have not only been exposed to new technologies (such as the amazing Micro:bit) but also been able to tinker with hardware at a lower level than I typically do – opportunities to tinker with circuits and hardware as well as the code that makes them work. It’s a great service, and one I would encourage all tech nerds to receive. While I may not make hardware for a living, the exposure to all the technologies I receive from HackerBoxes is well worth the price I pay.

 

React Native

Most of my mobile development is in creating native Android solutions. However, I sometimes need to create iOS apps as well. I have done native iOS development, but if I need to have a cross platform solution, it obviously requires twice the effort (and cost) to create native apps for both versions. And, when you’re done, you have to maintain two different apps as well as deal with bugs on two different versions. Throughout the years, a variety of solutions have been made available – and with the continued growth in the mobile market, I expect to see more tools available in the future.

During the past week, a colleague recommended that I look at React Native for creating cross-platform apps. Then, yesterday, a customer asked me to create a mobile app for them on both iOS and Android. So, I decided to investigate React Native.  The website for React Native talks about how you can use JavaScript to create native apps – not hybrid web apps, but real native apps. That sounded very exciting! I installed their framework without much trouble and began tinkering around. While I am not a fan of JavaScript for larger projects, I realize that it has become the language of choice for a growing number of tools because of it’s widespread acceptance. I used Visual Studio Code as my IDE, connected my demo app to a REST service, and had a trivial mobile application running in minutes. The most awesome part of React Native development is that the test app on your phone is always in sync with the changes you make on your development computer – without a USB cable – so long as you are on the same WiFi network. Now, the next step – create an actual Android APK to push to HockeyApp for distribution to my software testers. Wait… there is no easy way to do this. I have to ‘eject’ my project from React Native – a process which I am warned is not reversible – and then use native tools to build the APK. So, I can start the project in React Native, but then have to export the project to a native form to actually deploy. This was a show stopper to me – I don’t want to have to export to native tools as that invalidates the entire purpose of a cross-platform project to me. I dug through the documentation trying to see if I was missing something, and others had asked the same question. As I dug further, I saw numerous users complaining about how out-of-date the documentation was. That concerns me – if I want to learn the framework, I need to be able to rely on the documentation. Having found no way to easily create an APK, I gave up.

In the end, for this project, I think I will stick with Cordova. It may not be as exciting as React Native, but I can chose whatever frameworks I want to use – be it a high-tech Angular app or a simple HTML5/JavaScript application. The tools work well, and – maybe one of the most important things to me – the project can be maintained by anyone who knows HTML5.

 

 

Visual Studio Code

Anyone who knows me knows well that I am not a huge Microsoft fan. I’ve been a Unix user for over 20 years, I’ve been using Linux for nearly as long, and my current laptop is a Mac. I prefer Google Docs to Microsoft office, I never run Internet Explorer (Or Edge), I don’t like IIS, and I would never run SQL Server. So, it comes as a shock to most of my tech friends that I am a huge fan of Visual Studio Code. In fact, I would have to say that it’s probably one of the best general purpose development environments ever created. What makes it so great that I, a Unix user would endorse it? I think there are two main factors that made me fall in love with Visual Studio Code. First, it’s cross platform – Visual Studio Code runs on Windows, Mac, and Linux. This is a big deal for me. I prefer tools that I can run on a variety of platforms. While I typically work on a Mac, I do have a Windows machine too. Having an environment that runs on both means that I can easily transition from one machine to another without having to adopt different tools. Second, and probably even more important, is the wide variety of plugins available. Whether you need to create or edit HTML, C# .NET applications, JavaScript, Python, XML, there’s a plugin available for you. There are also plugins for Docker, git, and a REST client. Furthermore, the IDE is pretty simple and easy to work with. Where I used to use text editors such as UltraEdit or TextWrangler, I have now come to rely on Visual Studio Code as my default choice for editing code when I don’t have a more specific IDE installed. Kudos to Microsoft for a creating such an amazing cross-platform code editor!

The micro:bit

MicroBit

Yesterday, I had the pleasure of playing around with a piece of technology called the micro:bit. The micro:bit is a small hardware platform intended primarily for introducing young people to programming and tinkering. It’s a small device, not quite 2 inches square, but it is amazing. In fact, I’d say it’s probably one of the coolest pieces of technology I’ve played with in a while. What makes it so awesome? First, it runs Python. While I’m not primarily a python programmer, I do recognize that it has become one of the most widely used languages — not only for tinkerers, but also for professional development. This makes the micro:bit far more accessible to young people than C++ used by the Arduino controller (NOTE: I love Arduino, but the micro:bit is certainly more ‘kid-friendly’) The second thing I love about the micro:bit is that I had to install exactly nothing on my computer to get it working — no IDE, no flashing utility, nothing at all. The IDE is online, so you can type in your favorite browser and download the .hex file when you’re done. Flashing the device could not possibly be easier. When you plug the device in via a standard USB phone cable, it’s recognized as a USB thumb drive. Simply copy the .hex file to this virtual drive and within moments your device is flashed and you can see the results of your work. If the above weren’t already enough to give the micro:bit 5 stars, there’s more. The micro:bit includes an impressive hardware selection and associated API. There are 2 buttons, a 5×5 LED grid, accelerometer, magnetometer, and bluetooth. The form factor includes pads big enough to use alligator clips for interfacing with external hardware too — so you don’t even have to solder anything. While I’ve only tinkered with this device for a short time, it is definitely one of the more impressive hackable hardware pieces I’ve seen in quite some time. This needs to be in the hands of every elementary and middle school student interested in programming or hardware. The micro:bit is, in my opinion, a real game-changer.

RapidWeaver 7

There are countless technologies for web development running both on the desktop (Muse, Dreamweaver, etc) as well as the server (WordPress, Drupal, etc). I think one of the most underrated solutions is RapidWeaver 7. My first web page was a video game site hosted on GeoCities in the 90’s. Since then, I’ve had a hand in countless websites ranging from simple sites for local non-profits to complex e-commerce sites for major corporations. With 20+ years of web experience, what do I like about RapidWeaver 7? I think my favorite feature of RapidWeaver is how approachable it is for people without web experience, yet it’s easy for the web expert to get in and change almost anything. Options to override CSS, enter custom JavaScript, add code to the head of the document, add metadata, or anything else you can imagine are just a click away. I also like RapidWeaver’s built-in blogging framework, options to enter HTML, markdown, or to use a styled text editor. No matter how you want to create content, RapidWeaver supports it. RapidWeaver has countless plugins and themes that can be added. One of the most common is the Stacks plugin. With Stacks and RapidWeaver, it is trivial to create a responsive website that will look great on any device. Another amazing feature of RapidWeaver is how easy it is to integrate with PHP. If you have content that needs to be programmatically generated, but you still what the style to match the rest of your page, no problem — simply change the page’s extension to .php and enter your code in the HTML editor. I love how you can enter your content and change your theme with a simple click of the button. In a world of Software as a Service, it’s also nice to see that I can still purchase a license for RapidWeaver instead of a subscription. Note, as a developer, I rarely pay for software — most things I want are freely available for download. RapidWeaver is a piece of software I am all too happy to pay for. The features above don’t even begin to scratch the surface of the richness of the application and I believe it is worth every penny I paid for it.