00:00:00.000
Ready for takeoff.
00:00:17.100
Let's get started with 'This Old App.' My name is Lori Olson, and you can find me on social media just about anywhere with the tag Windex Lori or wndx Lori. I'm from Lethbridge, Alberta, Canada. My husband Trevor is down in the audience, and I am a dog mom to two cute little dogs, Scooter and Casey. I have been a developer trainer and mentor for over 35 years, and more recently, I founded the Windex School of Mobile Apps, where I teach about RubyMotion and DragonRuby. I'm also the creator of Six Pack Apps, my program that teaches people how to go from app idea to successfully launched app. So, WARNING: This talk consists of stories from my 35-year career, and Ruby didn't exist 35 years ago, so there will be some non-Ruby content.
00:01:08.700
The question I was exploring is the similarities between old houses and old apps. We started a house renovation this year, and it occurred to me that old houses and old apps actually have a lot in common. When discussing upgrading an app or renovating a house, there are so many commonalities. We'll start with my house, a four-level split built in 1955. We purchased it in 2014 from the original owners who had owned it for 59 years, and as you can imagine, it needed quite a few updates.
00:01:44.820
When it comes to house renovations or app upgrades, they actually follow the same sort of pattern. First, you need to do a lot of planning, then schedule what will happen, followed by demolition—essentially ripping out parts of your app. Next comes construction, where you build all the fun new features into your app. Finally, there are all the finishing details. However, what makes the journey really interesting are all the challenges you face along the way. Let's start discussing some of those challenges.
00:02:36.600
Let's talk about the ceiling. Ceilings can be fun, especially with skylights. We have three skylights in our house, and we've had some frustrating experiences with leaks. There were quite a few unknowns up in that ceiling when we decided to take it down. One of the first things we learned was that our roof was stick-built, not truss-built. If you're unfamiliar with roof framing, trust-built is engineered and created off-site, while stick-built is constructed on-site with a very custom look, which explains some of the odd angles around our skylights.
00:03:38.220
Now, let’s talk about the wasps. One day we came home to find about 50 wasps in one of our windows, which was terrifying, especially since we have two small dogs. We hired an exterminator who searched for the entry point, injected insecticide, and we cleared out the wasps. Upon taking down the ceiling, we discovered four wasp nests hidden up there. It was not a pleasant surprise. This reminds me of an experience from the early days of my career with a project called Gas Pack, which stands for Gas Plant Product Accounting.
00:04:57.540
In Gas Pack, we experienced random crashes while performing a rewrite. We suspected memory issues in our application, leading me to go on a bug hunt. Familiarity with old C applications helped, but there weren't any modern tools for tracking memory issues at the time. Ultimately, we discovered that we had an off-by-one error in a combo box control; we were allocating memory incorrectly for strings, leading to crashes under certain conditions. Troubleshooting led us through debugging assembly code, since the memory manager was written in assembly.
00:06:19.620
Now, let's move on to flooring. In our renovation, we faced the choice of refinishing or replacing the original hardwood floor. We wanted to save the original hardwood, especially since we had old hardwood from previous renovations to piece together. However, our general contractor struggled to find a contractor willing to take the job, even after going through four contractors who either quit or priced themselves out. This was due to the challenges posed by the old flooring and the pies of potential labor and expenses involved.
00:07:53.640
In the end, we decided to replace the gorgeous old hardwood with new flooring, which turned out to look beautiful. This reminded me of the Natural Gas Liquids inventory system project, where the team attempted an upgrade for three years unsuccessfully. They needed expert guidance, and I was brought in to help with the transition from WebLogic 5.1 to 8.0. Licensing was a big issue for them, and once that was resolved, we faced XML management difficulties due to outdated libraries. I diagnosed and updated each library incrementally until we successfully finished the upgrades.
00:09:24.300
The next challenge was our fireplace, which was a significant reason for buying our house. While the fireplace looked beautiful, it came with bulky and over-engineered extras like a half wall and a squat brick closet. In front of the fireplace was a poorly designed conversation pit with no stairs. Also, we discovered raccoons had made a home in our chimney! After successfully trapping and relocating them, we noticed water stains on our brick. A contractor found a gap that allowed daylight in, confirming suspicions about leaks.
00:10:36.000
Ultimately, we renovated the fireplace, adding a natural gas insert and capping off the chimney to prevent further animal intrusions. This experience reminded me of the 'Perfectly Clear' project involving a photo correction library that had challenges for the development team. Initially, they built a Windows version of a Photoshop plugin but faced issues integrating the Mac version, which I worked on. As development continued, I discovered major bugs related to color depth that needed seamless resolution before presentation at a trade show.
00:12:02.760
Next, we faced challenges with moving our book collection. During renovations, we decided the best approach was to have a structured method for packing our books in categories. With 55 boxes stored away, we had to ensure we designed an ample new bookshelf, allowing room for expansion since books tend to multiply. Our new bookshelf spans the entire eastern wall, which we absolutely love. This organization and planning process reminded me of my very first Rails project, 'Each Reaver.'
00:13:32.760
Each Reaver evolved into a massive Rails app providing oil and gas data in Canada using a complex data model with over 2600 tables. Working with this public petroleum data model was filled with hurdles related to SQL joins and remote data access, impacting our performance and updating capabilities. After struggling with these issues, we decided on a significant upgrade, effectively creating a simpler application focused solely on well data and employing Redis as the primary database. This decision resulted in a highly effective, easy-to-navigate application without the worries of remote access problems.
00:14:54.600
As we continued our renovations, we also had to address the walls. The decision arose whether to paint over the old drywall or replace it completely. Our previous experience showed us the discrepancies between old and new drywall, ultimately informing us that ripping everything down would yield a better result. That reminded me of my own Ruby Motion application, 'Wimby,' designed to identify abandoned oil and gas wells. While this app has functioned effectively for years, I received notice from Apple that it was in violation of App Store guidelines due to not being updated in three years.
00:16:01.920
With my health challenges, my app was removed from the store, which pushed me to prioritize updates. However, upon reviewing the gems critical for my user interface, I discovered that a key gem was no longer supported, which meant I had to rebuild the entire graphical interface. Moving on, our renovation project's completion was encumbered by issues such as asbestos and aluminum wiring checks—all necessary during such renovations. Fortunately, we tested for asbestos and received negative results, and we also avoided problems related to old wiring systems.
00:17:36.000
Old Rails applications can harbor a lot of risks as well. For example, many early applications had serious data security flaws, such as storing passwords in plain text. Many maintained passcodes with reversible encryption which is still a dangerous approach. Despite these programmatic issues, just because an app is old and operational does not mean it is free from hidden dangers beneath its surface. As I wrap up, it’s essential to note that renovations—like upgrades—often face hurdles that deviate from initial plans, evident in our current situation where renovations were expected to wrap up by October but are still in progress.