December 08, 2018
I recently left my awesome engineering job at BookBub to join a tiny robotics startup. Though I loved my team and the company and mission at BookBub; an opportunity recently came up that I couldn't refuse. Ever since I was a young nerd, I've entertained dreams of working with robots. There is something exciting about a physical object with a "brain" that you brought to life. I've even played with a few robot projects in college and high school but never worked to make it my job.
I've mainly been learning and working on web and operations projects with some distributed systems work. Pretty far from most robot projects, but an old college friend had started a company building robot solutions and could use me. The company consulting to either retrofit or build new robots that are human and environment aware. I joined the team primarily to leverage my experience to connect the robots and build tools for robots and humans to understand their world.
I started working my new job the week of Thanksgiving and it's been an awesome few weeks. I'm learning a ton and am excited for everything in the works. Interesting in hearing more or catching up? Feel free to hit me up. I think this stuff is super interesting and I'm excited to be working on these problems.
November 19, 2018
I just set up the Thinkpad P1 as my new work computer. The new computer involved some joys of Linux I haven’t had to do in a long time. I had to do a few workarounds so I decided to document them here.
I was installing Ubuntu 18.04 on the P1 with the Nvidia Quadro P2000 and the 4k display. On first run trying to install Ubuntu it errored out loading. I ended updating Windows 10 completely and flashing an updated bios I found reference to in this thread see the direct Thinkpad driver link here.
After that I got a little further, but ended up having issues installing while running in hybrid graphics mode. I switched the bios setting to discrete and could successfully install Ubuntu. But after the first boot I could not login. Digging around it appears that something was not 100% with the graphics and X11?. Choosing the option of logging in with Gnome and Wayland allowed me to get to a terminal and updater. Where I promptly upgraded everything with a
sudo apt update sudo apt dist-upgrade
Performance during this was terrible though. Mostly due to gnome using > 100% CPU, nice. To get the Nvidia graphics card working I ran
sudo apt-get install nvidia-375 nvidia-settings. After a reboot this did a lot better.
After the annoying setup everything has been working well since. Overall the laptop is pretty nice, good size and high quality screen. Extremely dissapointed that the laptop came with a broken delete key though. It should have two small clips to keep it attached but one is broken so hitting the delete key on the right side pops off the key. Crazy for the brand once renowned for their reliable keyboards. We should be giving Thinkpad a hard time if Mac get’s one for a less obnoxious reason. Performance wise it seems decent but it definitely runs hot. I have the 4K screen upgrade, Intel® Core™ i7-8750H, 32 GB of RAM and the Quadro P2000 graphics card. Together this makes for a powerful computer but it’s definitely not quiet, I need to do some tuning so that I’m conserving battery and not running a fan on high frequently.
October 22, 2018
I recently took a trip back home from Boston to Philadelphia and had two 8 hour bus rides. On these bus rides I tried getting some development done and here’s some tips:
1.) Don’t do it.
That’s it folks, all I got. … Not really. I actually did get some development done but mostly I got administrative work and thinking done.
Here are my real tips:
1.) Be prepared to be disappointed with the internet.
This should be a given but just in case you have never used bus WiFi and you saw the promise of free WiFi and rejoiced. Stop it right there. Bus WiFi is not fast, consistent or reliable. Definitely not a great environment if you need to be searching for answers or downloading and uploading code. The highlight of my bus WiFi experience was a
git pushthat just hung.
2.) Have offline docs and your dependencies installed.
If you don’t have a development environment set up or some offline docs. I recommend you do that before the trip. On MacOS I use Dash, which lets me search across language and library documentation offline from Alfred. This is a great tool for fast offline lookup and covers many internet searches without requiring the connection.
3.) Don’t plan on being super comfortable or focused.
Another no-brainer but you aren’t going to be the most focused, comfortable or productive. This isn’t going to be an ideal development environment. People talking, sights going by, bumps and jostles, these and more contribute to a less than ideal deep work setting.
You can still get work done though. To make things smoother you can start by bringing good noise isolating or cancelling headphones. Just like in an open office; a decent pair of headphones goes a long way in distancing yourself from the noise and commotion around you. Also fully charge your laptop ahead of time. You should have a power outlet but occasionally they don’t work and often they will not hold your charger without some continual force or pressure, especially if it’s the big bulky Mac charger. My charger fell out constantly; better to charge only when you need it. Why not start with a full charge?
4.) Plan the right kind of work
A good work plan is critical, if you don’t know what you need to work on or need to do exploring or research you will have trouble. The main development tasks that I had success working on included some refactoring and test writing. Everything I needed was already on my computer and writing tests is often more thinking and implementing than research.
When planning bus work think about what requires little less internet or can be asynchronous. I had success doing the following:
- Reviewing other’s pull requests.
- Writing up feedback for people’s reviews.
- Writing tests and replying and refactoring feedback on an existing feature I am working on.
- Reflecting and writing up notes.
- Writing this blog post.
- Plan and organize calendar, notes, to-do’s, etc.
5.) Enjoy the bus ride.
Personally I love long bus rides. Though not the most appealing work environment; buses constrain you in ways that can be rewarding. Minimalist principles apply here where subtracting can really add to your focus. The constraints of an 8 hour low quality internet connection helps me get s*** done and reflect on things that I don’t always get too. I also love being on the move and working in new places and environments, it can be energizing and carries over to when you are back in the office or home.
Overall just embrace the limitations and you can get a lot done; just don’t plan burning through a lot of bugs or releasing new features.
October 06, 2018
I started compiling a list of all the books I’ve read over the last few years. Looking to post my reviews and titles here. This list will be growing over time. I also don’t plan on stopping to post on Goodreads or BookBub but instead use this as the source of truth and syndicate my posts/notes/reviews to other sites.
What are your methods of tracking and referencing books you’ve read?
August 21, 2018
Mac, Windows, Linux. Everyone has an idea of what type of computer makes a developer. Social media is covered with pictures of 4k displays and brand new MacBooks. Technology sites are always talking about the newest computers and updated hardware. But these expensive laptops, monitors and desks are not what make a great developer’s computer. The programmer’s best computer is the one they have. Modern computers can handle most everything you throw at it and external displays are helpful but not necessary for programming.
Before dropping hundreds to thousands on computer equipment, try to use what you have. It might not be as sexy or cool looking but it will work. If you are getting a new computer to start programming what is wrong with your current one? Windows and you want to get a Mac? Try dual booting Linux to get a more Mac like development environment without the price tag. Poor battery life? Try replacing the battery for much cheaper than a new laptop. Actually need a new computer? Buy it, just make sure you can afford it. Don’t buy a new laptop to become a developer or to improve, buy it because you need to replace your old one or you want it.
This really is a message to myself, I’ve been eyeing new computers a lot recently. Even though I have an old working Thinkpad X1 Carbon, I just don’t like the keyboard layout. Do I need a new computer? No. Will I get a new one? Not yet.
How about you? What is your computer situation? Do you unnecessarily consider upgrading your computer? Disagree on buying a new computer?
July 25, 2018
I received a recommendation to listen to this podcast episode from my brother. An interesting analysis of efficiency. As a tech worker it hit home. It covers origins of the definition of efficiency to how it’s used today. Efficiency by definition is the effectiveness of creating the output versus the input. Not everything can or should be measured and prioritized for efficiency but it’s become the end goal for many things. The podcast explains that efficiency describes how well you control a system but not the what you are working towards. The most efficient system isn’t always the best.
This podcast was a call to slowing down and being a little inefficient. Not everything can be analyzed measured but are still valuable. When applying this to programming I think about taking time to unwind, think, and prioritize. Measuring productivity in lines of code is universally shamed and spending hours debugging an issue can also be ineffective. Sometimes the best option is to be (in)efficient and step away. When you come back refreshed you may be more efficient, and if not you took a break to enjoy life.
If this interests you check out the podcast here: (in)Efficiency