Old Habits Die Hard: Copy and Paste

Copy and paste is bad.

Every single person who uses a computer learns how to copy and paste.

Copy and paste is necessary to perform many tasks.

Old habits die hard.

 

 

Email and Word documents and illegally downloaded movies all expect you to use copy and paste because it’s how you’re supposed to do things: copy this email into that folder, move that paragraph of text into the next chapter, copy those illegally downloaded movies to the external hard drive for safekeeping.

There’s a time and place for copy and paste, but why resort to it when you do the same task multiple times every day? It’s passable when the situation can’t be made better, or can it?

Sounds like old habits die hard.

 

 

Sure, copy and paste is quick when you’re good at it, but the time adds up. For example, take the process of navigating into a bunch of files and folders to copy the same five files to a different place. Let’s be earnest here and say it takes a minute of this theoretical person’s time. Based on the work they do, they repeat the same copy and paste job ten more times that day. This time adds up.

Yes, old habits die hard.

 

 

Humans are excellent at copy and paste. Guess what else is excellent at copy and paste as well? Computers!!! Computers are better than humans in every way possible when it comes to performing repetitive copy and paste tasks. Speed. Accuracy. Longevity. It’s a combination which doesn’t disappoint.

Luckily where my soliloquy is headed involves people who program computers for a profession: Programmers. Programmers write programs to make computers do things for humans. Copy and paste is one of them. So why are Programmers still using copy and paste to do things themselves repetitively instead of programming a computer to do it for them?

Old habits die hard…

 

 

Let this sink in for a moment…

 

 

Programmers are proficient in telling the computer what to do, namely copy and paste. But they’re still using copy and paste things themselves because they’re really good at it. It’s been a habit since they started using a computer however many decades ago.

This shocks me, especially in the sense where programmers are paid very well to program computers, but instead they’re spending a chunk of their time performing repetitive copy and paste tasks, not to mention they’re fully qualified to program the computer to do it for them.

It’s a bad habit of programmers to repetitively copy and paste. Knowing so and continuing to do must involve masochism. Be a better programmer and get the computer to copy and paste for you!

Implementing Agile Databases with Liquibase

We have an inconvenient problem. Our development databases are all snowflakes – snowflakes in the sense that each developer’s database has been hand updated and maintained at the leisure of the developer so that no two databases are alike.

database-scripts-directoryWe version our database changes into scripts with the creation date included in the name. But that’s where the database script organization and automation ends. There’s nothing to take those scripts and apply it to a local developer’s database. Just plain old copy and pasting to run new scripts. Adding to the pain is that the database scripts don’t go back to day 1 of the database. Instead, the development databases are passed around and copied whenever someone breaks their database and needs a new one or a new employee comes on board and needs to set up their development environment.

Manually updating our personal development database is problematic. Forgetting to run scripts can result in unknown side effects. Usually we don’t bother updating our database with the latest scripts until we really have to. That happens whenever we launch our app. Once the app starts complaining about missing tables or fields we’re on the hunt searching for the one script out of hundreds that would fix the problem.

liquibase_logoAs you can see, it is a system that is wasting the productivity of all developers, not to mention the frustration that happens when catching up after being behind for a long time. For a while now we’ve acknowledged that it’s a problem and should be fixed. A few of us looked into the problem and talked about using FlywayDB or Liquibase, but Liquibase seemed to be the best choice for us since it is more feature complete. Since that discussion one of our team members started experimenting with Liquibase and pushed that code to a branch, but it’s remained dormant for a while. I wouldn’t say integrating Liquibase into our development environment was abandoned because it was tough to do, rather I’m realizing that it is a common trend for developer tooling and continuous improvement to make way for feature development, bug fixing and level 3 support. Maybe our development team is just too small and busy to tackle these extra tasks or our bosses don’t realize the productivity sinkholes as significant and don’t allocate any time for improving it. I would like to spur some discussion around this.

Anyways, on with the rest of the post.

Look! The Proof of Concept is Working!

I spent the greater part of my Good Friday working on getting Liquibase working with our app. Partway through the day I got the production database schema into the Liquibase xml format and checked into source control. A few more hours were put into fixing minor SQL vs. MySQL issues with Liquibase’s import. (Who knew the BIT(1) type could have an auto increment? Liquibase disagrees).

Some time was spent creating a script at script/db (in the style of GitHub) for bootstrapping the Liquibase command with the developer database configuration.

Next I’ll mention some of the incompatibilities that I ran into while generating a Liquibase change log from the existing production database.

Generating a Change Log From an Existing Database

Liquibase offers a very helpful feature: being able to take an existing database schema and turn it into an xml change log that it can work with. The Liquibase website has documentation on the topic, but it doesn’t mention the slight incompatibilities that you may run into, particularly with data types.

Once the production database schema was converted into a liquibase change log, I pointed Liquibase to a fresh MySQL server running locally. Running the validate and update commands on the change log resulted in some SQL errors when executing. All of them were related to data type conversions. These problems were fixed by modifying the change log xml file manually.

The first issue was that the NOW() function wasn’t being recognized. Simple enough, just replace it with CURRENT_TIMESTAMP.

Next was Liquibase turning all of the timestamp data types into TIMESTAMP(19). Doing a search and replace for TIMESTAMP(19) to TIMESTAMP did the trick.

The same issue as above happened to all datetime data types. Doing a search and replace for datetime(6) to datetime worked as expected.

In the production database one table had a primary key with the data type of TINYINT(1). When Liquibase read this it converted the data type to BIT. It’s a known issue at the moment, but the fix is simple: change the type in the change log to some other data type like TINYINT (or TINYINT UNSIGNED). Make sure if this is a primary key that you update the foreign keys in the other tables, otherwise you’ll get errors when the foreign keys get applied.

This one was the weirdest. In the production database an index existed on a column of type mediumtext with no explicit length. The index was defined as a FULLTEXT. When Liquibase would create the database, it would fail when creating this index. After some googling it appears that the FULLTEXT index requires a length when operating on mediumtext. In the end, adding a (255) or however long to your FULLTEXT index data type fixes it.

Lastly, the tables from the production database were set to use the UTF-8 encoding and the InnoDB engine, but Liquibase doesn’t pick this up. The workaround for this was to append the following to every table definition in the Liquibase change set xml:

Next Steps

Because we provide a multitenancy SaaS offering, we drive a lot of behaviour of our app from the database. Whether it’s per customer feature toggles, a list of selectable fields, or email templates, a lot of data needs to be prepopulated in the database for the app to fully function.

The next bit of work involved with moving towards an agile database is to find all of the tables that contain data which are needed for the app to function. Liquibase offers methods of loading this data into the database by either loading data from a CSV file or by specifying the data in a change log.

Another important part of the database that needs to be checked in with Liquibase is the triggers and procedures. Liquibase doesn’t automatically extract the triggers and procedures so you’ll have to locate and export them manually.

Additionally, improving the developer experience by simplifying the number of things they have to do and know eases adoption and can make them more productive. Things like the configuration needed to run Liquibase, creating a new change log from a template and documentation of usage and best practices are all things that can bring a developer up to speed and make their life easier.

Lastly, there exists a Liquibase plugin for the Gradle build tool which makes it straightforward to orchestrate Liquibase with your  Gradle tasks. This would come in handy when Gradle is used to perform integration and any other form of automated testing in an environment which uses the database. Test data could be loaded in and cleaned up based on the type of testing.

Conclusion

automate-all-the-thingsNo developer likes to perform repetitive tasks, therefore minimize the pain by automating all the things. Developer tooling can be often overlooked. As a developer do yourself and your colleagues a favour and automate the tedious tasks into oblivion. As a manager, realize the inefficiencies and prioritize fixing it. Attack the tasks that take the most time or would provide the most value if automated, then just start picking at it piece by piece.

Liquibase was discussed and acknowledged as the solution to our developer database woes. Following through with integrating Liquibase into our developer environment and going a few steps further with making it easy to use leads to more time saved for actual work. Delaying the implementation of the solution results in losing out on the productivity gains that you’re well aware of. Any productivity increase is better for both the developer’s productivity, the developer’s happiness and the business as a whole.

My Top Tech, Software and Comedy Podcast List

Podcasts are an excellent source of entertainment and learning new things. I find that when I’m doing a mindless task like working out or commuting I can actively focus on something more interesting. Being a student at the moment, I have a lot of time going to and from classes, making food, and procrastinating. I fill up as much of that time listening to podcasts since I enjoy keeping up with the latest tech news, learning new skills and having a laugh.

Click here to jump to the list if you can’t wait.

My Podcast Listening History

I’ve been a huge listener to podcasts shortly before I got my first iPod (iPod nano 3rd generation, 8GB, turquoise) which was sometime during 2006, I think. Back then I started listening to a lot of the podcasts from the TWiT and Revision3 networks. Here I am now, just over 10 years later and I’m still addicted.

Having had a twice a week paper route gave me a lot of mindless time that I soon took over by listening to podcasts. I prominently remember delivering papers in my neighbourhood during a cold, Canadian winter night listening to an excellent holiday episode of Major Nelson Radio. I also remember laughing my ass off to Diggnation, hosted by Kevin Rose and Alex Albrecht, where they share the greatest posts from Digg that week.

Security Now! was a momentous podcast for me. I started listening to it around 2006 when they were at episode 60. Ever since then I’ve been a listener. I can’t thank Steve and Leo enough for their excellent discussion on current security issues and in-depth episodes on various technologies, like their how the internet works series and explanation of the Stuxnet virus. Because I’ve been listening to Security Now! for so long I’ve learned so much about security and the web that I’m practically acing the fourth year computer security class at my University. The valuable knowledge learned will stick around with me forever, already a great asset for my professional career.

The List

Here’s my list of favourite podcasts over the years, all categorized by genre.

Technology

Keeping up with the latest in tech is a given when you’re heavily immersed in the ecosystem, less being a computer scientist.

Security Now!

Security Now Logo

One of the reasons why I’m studying computer science is because of the Security Now! podcast. Every week, Steve and Leo discuss the most interesting and current topics in security. Whether that’s huge corporate hacking, the latest ransomware, IoT security or even various health topics, it’s a polymath of useful information for anyone who’s interested in security.

This Week in Tech

TWiT LogoThe best source for tech news, This Week in Tech is hosted by Leo Laporte, a hero of mine for creating the TWiT network, and continually educating me. I wouldn’t know half of what I know now if it wasn’t for Leo’s work. Each week the latest and greatest tech news is dissected with a representative panel of tech journalists. It’s very informative to hear experts in the area give their opinion.

I remember when Twitter was getting big, it was all that TWiT would talk about for weeks on end. It was even expected: “What Twitter news do we have this week?” was saild by Leo almost every episode when Twitter was growing. Those were the days, when Leo was the #1 user on Twitter. Then the masses came and it went to shit. Okay, I still love Twitter. Rant over.

Hak5

Hak5 LogoBasically a technology hacker/DIY/hardware/software show with a lot of original content. I really got interested in Linux and hacking because of it. Just recently I saw that they’re working on quadrocopters. So cool! One of my favourite segments was the usb multibooting using grub. No need to burn multiple CDs for all of your live-boot isos and images, just put them all on one USB stick and give it a shiny menu to choose which one to use. The show has a kick-ass soundtrack and it looks like they’ve expanded to a new studio and are now producing multiple shows. These guys have grown a lot!

Maximum PC No BS Podcast

Almost forgotten, I remembered this one as I was building the Runners Up section. The Maximum PC No BS Podcast could also go under the Comedy section, but Technology suits it better. On that same paper route I had when I was young I listened to this podcast religiously as soon as each episode came out. Gordon Mah Ung and Will Smith were a perfect pair when talking shop about computer hardware, tech news and building computers for the Maximum PC magazine.

Besides being overly frustrated about certain things, Gordon had a segment called Gordon’s Rant of the Week where he would vent about anything and everything from Star Wars to breaking motherboards to shitty software. Every new year there’s usually a best of Gordon’s rants episode, which is a must listen if you find Gordon’s rants funny.

Comedy

These podcasts are timeless. You can go back and listen to all of them like I’ve done.

Rooster Teeth Podcast

One of the funniest podcasts, various members of the Rooster Teeth company talk about ridiculous stories, gaming, current news and Science. They really don’t know much about Science, but the cast always tries to argue it out until someone say’s something so illogical, the cast and crew burst out into laughter. Moments like these are animated into short videos and posted to their YouTube channel as Rooster Teeth Animated Adventures.

It was the summer of 2013, between my first and second years of university, I was living back home trying to find work. I landed this landscaping job, being paid directly by the owners of a large Caledon estate, to fix up their property. That landscaping was fun but hard work. I discovered the Rooster Teeth Podcast early into the summer. Each day, I would be listening to maybe five or six episodes in an eight hour day. I blew through the backlog of episodes really fast and ended up listening to them all before the end of the summer.

Diggnation

What’s the latest crap from Digg, you might ask? Kevin Rose and Alex Albrecht answered this tough question for 340 episodes from 2005 to 2012. The two would discuss the most interesting news bits on whichever sofa they landed on. Often very entertaining, Diggnation had me dying of laughter.

Software Development

Most, if not all of these Software Development podcasts are timeless. A lot of the topics discussed are still useful today. The only real difference is the adoption of the tools and methodologies. I usually look through the list of earlier episodes and listen to the ones that catch my eye. Once you’re hooked on a podcast, it’s not hard to find yourself downloading and listening to everything they have available.

The Ship Show

Sadly, this podcast just announced they’re ending the show a few days ago, so I’m still in my mourning stage at the moment, but The Ship Show has been a fun and informative source of everything release engineering, DevOps, and build engineering in big and small companies. The panel discusses new tools, methods and philosophies for improving parts of your tech company, often from firsthand experience. What makes this podcast special is that they delve into more of the technical and implementation details, which is great if you’re into that.

Arrested DevOps

The ADO podcast is made for people who don’t exactly know what this whole DevOps thing is about but would like to know. Matt Straton, the creator of the podcast makes this point often as he has learned DevOps from scratch. Each episode goes into depth on a DevOps related subject, often having guests from the industry who are knowledgeable in the topic to add more value to the discussion. A lot of the topics discussed are higher level than what is offered in The Ship Show, but Arrested DevOps is still as valuable since its important to understand the big picture and ask the big questions. Both Arrested DevOps and The Ship Show are complimentary to each other.

Software Engineering Radio

Sponsored by the IEEE, this podcast offers excellent interviews on a variety of Software Engineering topics. The episodes mainly consist of two or three people discussing a specific topic, whether it’s a technology or methodology. The time is taken to give listeners a good idea about the purpose and it’s usefulness. The interviewer often does their homework before performing the interview and therefore asks well thought out questions. Because the episodes cover such a wide breadth of topics, surfing through the past episodes is a must!

I wrote a post on marketing yourself from episode 243 with John Sonmez

Runners up

Here’s a few podcasts that I’ve listened to for a long time, but didn’t make the list:

Floss Weekly – Randal Schwartz and other hosts interview open source software projects to share what the project is about. Generally pretty interesting, it’s cool to hear what people are doing in subjects that you’re usually not interested in or didn’t know existed.

Tekzilla – Great segments! Veronica Belmont and Patrick Norton were a killer team and shared great tips and tricks to do with technology.

Windows Weekly – Paul Thurott had the perfect level of satire as he talked about Windows products that no one uses, like Windows Home Server (I used it, so I can bash it), and things that people use, like Xbox and new Windows operating systems.

This Week in Google – Gina Trapani and Jeff Jarvais have excellent discussions about the cloud and everything Google.

Mahalo Daily – Veronica Belmont was the best in this short daily podcast format!

Hook, Line and Sinker: How My Early Interests Got Me to Where I Am Today

Having an exciting software job at a newly-acquired company is opening up so many possibilities, and making possible the projects that I want to accomplish to make things better. Whether its big projects like containerizing our multiple apps for scalability, implementing Continuous Delivery to ship our software faster, or smaller projects like versioning our dependencies for traceability and ease of deployment, or updating to the latest Java version for performance improvements and to use all the new libraries; it’s nonstop fun that upgrades my problem solving skills, improves the lives of our team and customers, and gives me a track record of making positive change.

It’s hard to focus on school when all the brain-twisting fun and innovation can be had over at work. It’s a struggle, but a necessary one since I’m so close to finishing my degree at Carleton University – one more semester to be exact.

After finishing school I can focus more on teaching myself new skills and technologies that I can use and apply during my professional career. Currently I listen to Devops and software podcasts when I’m traveling to places and I read a few articles about Docker and other technologies when I have free time. My next logical step is to start applying the knowledge I’ve gained both at work and as side projects.

At least it’s not all bad in the academia life: this fourth year Computer Security class that I’m taking is immensely fun. I’m glad that I have a captivating class this semester. I can give credit to the Security Now podcast for which I’ve listened to around 500 of its 543 episodes as of this writing (read: 10 years of listening!), for giving me the practical knowledge of current security practices and news, diving deep into the details where necessary.

Dr Anil Somayaji, the professor of the Computer Security course, is an excellent lecturer and a hacker at his roots. His interactive teaching style makes the possibly dry subject of security interesting (if you think of security as dry. Who would?), and his course work is very useful in that it promotes self teaching and helping out others. Each week every student must submit a hacking journal. It consists of the student writing about their adventures, frustrations, successes and failures of hacking on security related things – whether that involves using Metasploit to break into a computer, putting a backdoor into OpenSSH, figuring out how to configure a firewall, etc. The list goes on and on. An online chatroom is used to share resources and chat with other members of the class to figure out hacking problems and interact with the professor. (Other classes should definitely start using this)

I’m glad to have had the drive to explore and learn when I was young. Throughout my childhood I would spend my time hacking gaming consoles, jailbreaking iPods, experimenting with Linux, and most of all having a website! Not this website, there was a website before jonsimpson.ca. It was jonniesweb.com. I prominently remember creating logos for my website in MS Paint, printing them out and putting it up beside the Canadian flag that was posted in my fifth grade class. I would use MS Front Page 97 to add jokes, pictures, cheat codes, YouTube and Google Video links, games, and referrals to other friend’s Piczo sites. I remember going through a few designs: spaced themed, blue themed, red themed… I even got interested in PHP and used a sweet template. Each iteration improving with content and coding skills.

Then middle school and high school caught up with me and I stopped updating the website. Sooner or later my dad stopped supporting my hobby, eventually letting the web hosting expire.

Fast forward a few years and what was once a childhood interest has turned into an education and career choice. Building a website sparked the fire, pursuing a degree gave me the drive, and doing co-op (soon to be full-time) at work has shown me the many different problems to be solved.

My plan is to work my ass off in all of my classes, finish up my degree and follow my passions, utilizing my knowledge and expressing my solutions at both my job and in my blog. Ultimately trying to build a successful and happy career.

At the moment I’m just glad that I don’t have a crappy professor.

Market Yourself

Want to score your dream job and go work for Google, Netflix, Amazon, Github, and the like? The big question: “How do I do it?”

Market yourself, of course!

What do these companies want?

These companies only hire the best of the  best. But what does that really mean? You may see some of the following traits on job postings or you may pick them up from the people who already work at these companies:

  • Continuous improvement
  • Feedback/data driven
  • Solve the toughest/biggest problems
  • Extremely collaborative
  • Intuitive

“I’ve got all of those traits! I should have no problem getting hired”.

Sure, you may be qualified, but how do you stand out from the person beside you who’s as qualified as you are? There are plenty of methods that can make you stand out in the minds of recruiters, hiring managers, and even high level employees of the company.

Market Yourself

Marketing is the action of promoting and selling products or services

Marketing yourself is therefore promoting and selling your skills and providing value to a company.

Standing out from the crowd involves work! I listened to an excellent podcast from Software Engineering Radio titled SE Radio Episode 245: John Sonmez on Marketing Yourself and Managing Your Career. John provided some helpful methods on standing out from the crowd, getting noticed by the people who can help you get your dream job, and useful tips on managing your career to make it the best it can be.

A few of the methods mentioned in the podcast are listed below:

  • Get a blog and write a post every week
  • Specializing your career
  • Attending/presenting at meetups
  • Interact with the blogs/social media of developers at the target companies
  • Contribute to open-source projects

The bottom line is to be passionate about everything you do. When you’re giving off that vibe, others can’t help but notice the energy and detail put into everything: blog posts, conversations, presentations… the list is endless. More people remember an enthusiastic person than someone who’s not interested in what they’re talking about. Being detailed in your work is the bare minimum. Expression is key.

Blogging

Writing is one of the best mediums for sharing information. Blogging has the lowest barrier of entry. There is a huge and rich amount of content out there on anything and everything, especially in tech. Ideas are thrown back and forth, constantly iterated, all the while being kept around for others to read years later. One person’s blog post today is another person’s learning opportunity later. Read Why You Should Write Blogs by Steve Yegge for a deeper understanding of this powerful medium.

WordPress.com or Blogger are great services to get going. If you’re more technical, you can use GitHub Pages or even host your own. At the end of the day it doesn’t matter where it’s hosted or that you have a fancy domain name; all that matters is the content and what the readers get out of it.

Your blog can be about anything. I like writing about topics surrounding software development, both involving hard and soft skills. Having a prospective company see you go into depth on various topics gives them more confidence that you’re the right person for the job. Blogging also hones in your understanding of the topic you’re writing about and, over time, improves your communication skills.

There’s only so many people you can talk to. Writing allows you and your ideas to spread without limits.

Specializing

It’s best to be a specialist. Who’s going to receive a larger salary and gain more attention: a Fault-tolerant Docker Microservices Engineer or a Software Developer? Definitely the Fault-tolerant Docker Microservices Engineer.

Lets say I write a lot about fault-tolerant Docker microservices. To visitors of my website they can see that I know a lot about fault-tolerant Docker microservices. From now on they’ll associate me with being very informative and skilled in things fault-tolerant Docker microservices. Once the viewers have an understanding that I’m skilled in fault-tolerant Docker microservices I can expand to writing a lot about Docker microservices in general. I can then be known by others as the guy who knows a lot about Docker microservices. As time goes on and I become more popular I can expand to all of Docker and be known as the Docker guy.

Start small and specialize in a certain area. Its easier to stand out that way since you’re up against less and less people. Once people notice that you’re a specialist for subject X, the association will stick. From then on you can use this to your advantage. Say the company you’re wanting to work at is hiring for the job you’re specializing in. If people from the company know that you’re skilled in this subject they can recommend you to the hiring managers. You can use this tactic with some of the others listed here to get recommended by the employees of the company.

Attending Meetups

Going to a meetup and striking up a conversation with other attendees leaves a (hopefully) positive view of you on them. This is pretty much networking. In the podcast, John Sonmez stated that it is important to have a conversation with the individual without bugging them to help you get a job when you first meet. Meeting these people months before actually asking for their help to get a job improves your chances greatly since you’ve already met the person. It’s even better if you offer to help them. Then they’re more than likely to help you out and do whatever to pay you back.

Performing a talk at a meetup or conference is a great way to get noticed. The meetup or conference does a lot of the marketing for you already! Your name and title of the talk is advertised both at the venue and online. After the event a lot of references to you and the talk are put on the event’s website, YouTube recordings of your talk and news blogs. The viewers are trying to get as much useful information out of your talk. You have to prove that you have useful information. You’ll want to hook your viewers into wanting more information. At the beginning and end of the presentation you can mention your contact information (email, Twitter, GitHub, website..) and even offer a link where the viewer can go to get more information.

In the presentation, including links to extra materials can send those viewers to your blog, GitHub, or wherever else. Mentioning that you do consulting or are looking for an employer (only if you don’t have one!) puts the word out there since it can’t hurt.

Other Blogs and Social Media

Following and having useful conversations on the blogs of employees at the company you’re trying to get into, as well as the blogs of others in the same tech community gets you noticed over time. When a company is in the process of hiring, the employees can vouch for your skills, immediately putting you ahead of other candidates. If things go really well, the company can straight out offer you a position, bypassing the interview, giving you the upper hand at negotiating your salary, benefits and anything else.

Contribute to Open Source

Working on open source projects is one of the new contenders of things that tech companies are looking for in a developer. Its been proven by some companies already that they hire based on your GitHub profile. Contributing to an open source project or two shows that you’re capable of remotely working and good at collaborating with others. It also allows the hiring managers and recruiters to look at the code you write (eg. code style, design), something not shown on a resumé.

Even better, contributing to an open source project belonging to the company that you’re trying to get a job with looks very impressive when they start looking for candidates. If they can see all the contributions that you’ve made to their open source projects, it’ll look amazing since your skills have already shown business value. The company can more easily see the value you would bring to the software that they develop.

Working on your own side projects is always beneficial. It shows that you are creative and intuitive at solving your own problems and have the drive to make things better where you see fit.

Hacking the Interview

A few tricks were mentioned around hacking the interview. One of them mentioned earlier, is for the company to want to hire you right off the spot, bypassing the interview entirely. This could mean that you’ve received a recommendation from someone or your personal marketing has worked! This situation is pretty hard to get so the next tip is one we can all use to positively affect our interview outcome.

Another smart trick involves requesting “just five minutes to chat” sometime before the interview. Either over the phone or in person, this conversation allows you to talk freely with the interviewer to find out more about them and the company, including talking about yourself. Once your interview time comes along, the edge is already off since you’ve talked with the hiring manager already. Humans can be biased when it comes to mostly objective tasks such as finding the best candidate for a job. Once you get the interviewer to like you, they work in your favour, often weighing the candidates they like over others.

The Book

soft-skills-the-software-developers-life-manualMentioned in the podcast, John Sonmez has published a book titled Soft Skills: The software developer’s life manual which sounds like a must read. He raises the point that the chapters are short, allowing for ~5 minute start-to-finish reads. There are 71 chapters in total, organized into seven sections. The section list is as follows:

  1. Career
  2. Marketing Yourself
  3. Learning
  4. Productivity
  5. Financial
  6. Fitness
  7. Spirit

I haven’t read the book yet, but I definitely will soon. I’m happy that I’m on the right track so far for my personal marketing based on the sections of this book. Besides the book sounding very helpful, you can’t knock the five stars and 178 reviews on Amazon.com!

Conclusion

It’s not an effortless path. Putting in the time and effort over months or years to market yourself gives big returns in the form of giving you more potential, allowing you to make the most of your career.

Take charge of your career. Follow your aspirations and make it count! I certainly will.

Push-button Deployment of a Docker Compose Project

I was recently working on figuring out how to automate the deployment of a simple docker compose project. This is a non mission-critical project that consisted of a redis container and a Docker image of Hubot that we’ve built. Here’s the gist of the docker-compose.yml file:

Whenever a new version of the zdirect/zbot image is updated and published to the registry a deploy script can be run. For example, the script used to automatically deploy a new version of a Docker Compose project is shown here:

Yup, that’s all. Its that simple. Behind the curtains, this command pulls the latest version of the image. Since the docker-compose.yml file doesn’t specify a tag it defaults to latest. The old container is then removed and a new one started. Any data specified in volumes are safe since its mounted on the host and not inside the container. Obviously a more complicated project would have a more involved deployment, but simpler is better!

Integrating this deployment script into Rundeck, Jenkins or your build tool of choice is a piece of cake and isn’t covered here, but might be in a future post. This automation allows you to bridge the gap between building your code and running it on your servers, aka the last-mile problem of continuous delivery.

Acquisition, Docker and Rundeck

travelclick-logoZDirect, the wonderful company I work for has been acquired by TravelClick, a billion dollar hospitality solutions company.

First of all: Woohoo! I can’t be more excited to be around at this time to jump-start my career.

One of the changes to occur as soon as possible is the consolidation of our datacentre into TravelClick’s. One of our devs recently found out about Docker and got interested about its power (Hallelujah! Finally it’s not just me who’s interested). Later I bring up Rundeck, a solution to organizing our ad-hoc and scheduled jobs that will assist in the move to Docker.

Docker

docker-largeHis plan is to Dockerize everything we have running in the datacentre to make it easier for our applications to be run/deployed/tested/you-name-it. The bosses are fine with that and are backing him up. I’m excited since this is a fun project right up my alley.

Since I’m working my ass off trying to finish my degree, I’m only in one day of the week to wash bottles and offer some Docker expertise. Last Friday I had a good chat with the dev working on the Docker stuff. We chatted about Kubernetes, Swarm, load balancing, storage volumes, registries, cron and the state of our datacentre. It was quite productive since we bounced ideas off of each other. He’s always busy, juggling a hundred things at once so I offered to give him a hand setting up a Docker registry.

By the end of the day I had a secure Docker registry running on one of our servers with Jenkins building an example project (ZBot, our Hubot based chatroom robot), and pushing the image to the registry after it is built. An almost complete continuous delivery pipeline. What would make this better is a way to easily deploy the newly created Docker image to a host.

Rundeck

rundeck-logoRundeck is a job scheduler and runbook automation tool. Aka it makes it easy to define and run tasks on any of the servers in your datacentre from a nice web UI.

Currently, we have a lot of cron jobs across many servers scheduled to run periodically for integration, backup and maintenance. We also ssh into servers to run various commands for support and operations purposes.

Here’s the next piece to our puzzle. Rundeck can fit into many of our use-cases. A few of them are as follows:

  • Deployment automation (bridge the gap between Jenkins and the servers)
  • Run and monitor scheduled jobs
  • Logging and accountability for ad-hoc commands
  • Integrate with our chatroom, for all the ChatOps
  • Automate more of production

As we move towards Dockerizing all of our apps, we have to deal with the issue of what we’re going to do with the cron jobs and scheduled tasks that we run. Since we’re ultimately going to move datacentres it makes the most sense to take the cron jobs and turn them into scheduled jobs in Rundeck. That way we can easily manage them from a centralized view. Need to run this scheduled job on another machine? No problem, change where the job runs. Need to rerun the scheduled job again? Just click a button and the scheduled job runs again.

The developers wear many hats. Dev and ops are two of them. Because we’re jumping from mindset to mindset it makes sense to save time by automating the tedious while trying not to get in the way of others. Rundeck provides the automation and visibility to achieve this speed.

With the movement of putting all our apps and services into Docker containers, Rundeck will allow us to manage that change while being able to move fast.


If you’re interested in joining us on this action packed journey, we’re hiring.