Bryan Saunders A Tech Blog
Travel Gear for a Consultant
As a consultant I spend the majority of my time at work travelling from one client site to the next. This means I spend a lot of time in airports, hotels, and rental cars. Over the years I have refined and wittled down the list of items that I take with me when I travel and wether or not it is something that should go in my backpack or my suitcase. In an effort to help out others, I have added my list of travel essentials below. The list is obviously focused on those in the tech industry, but it really could apply to any modern business traveler.
The key to all of this is the your carry-on. For my carry-on bag I use a standard laptop backpack. The key here is to get one that is just big enough to carry all of your neccessary items and no bigger. This bag you will want to have with you at all times, so it needs to be small enough to fit in the smallest overhead bins or under your seat on the plane. My backpack contains anything that I will need while travelling, on the client site, or to get work done and is still small enough to go with me on the plane. So without further adu, here are the items I carry with me in my backpack.
- Laptop and Accessories
- Laptop w/ Extended Battery - The extended battery is optional but is extremly handy for long flights and layovers.
- Laptop Charger
- Wired Travel Mouse - I prefer wired over wireless so that I do not have to carry spare batteries.
- SmartCard/CAC Reader - This one is optional, unless you have a SmartCard or CAC.
- Presentation Pointer - Essential for giving presentations, especially on the fly.
- Cellphone and Accessories
- Cell Phone w/ Extended Battery - Long flights and layovers will kill your battery so have an extended battery is pretty critical. Your phone is also going to double as GPS and that can kill your battery pretty quick as well.
- Micro USB Cable - For Charging your phone and/or tethering it to your laptop.
- USB AC Adapter
- USB Car Adapter
- AUX Input Cable - For playing your music in the rental car instead of struggling to find a good radio station in whatever random town you happen to be in.
- Assorted Accessories
- Headphones
- Headphone Spliter
- Portable Power Pack - The power pack should have enough to juice to completely recharge your phone at least once but preferably twice.
- Microfiber Cloth
- Medicines
- Tylenol/Ibuprofen - Got a Headache after that 4 hour meeting?
- Pepto - Sick after that random sketchy Mexican restaurant?
- Sudafed - Clear your head before you start flying with those stopped up sinuses. Not being able to equalize your ears is brutal.
- Work Related
- Notebook
- Padfolio - For keeping track of printed out client documents.
- Ink Pens
- Highlighter
- Dry Erase Marker - You never know when you will need one on site.
- Lanyard
- Badge Retractor and/or Holder - Clipping badges to your belt or shirt.
- Miscellaneous
- Water bottle - It's always nice to have your own water bottle instead of paying for them.
- Umbrella - This is pretty important even though it will never rain while you have it, and will always rain when you don't.
- Company Credit Card
- Company Insurance Card
When I travel I pack all of my clothes, toiletries, etc... in my suitcase. I use a carry-on size suitcase so that I can take it on the plane with me if needed, however I usually check it. I have found that it is easier to only have to deal with a backpack when trying to make tight connections or flying on small planes than it is to have a suitcase as well. Running through Atlanta with 2 bags trying to get from the end of A to the other end of E is just a nightmare.
Certified Scrum Professional
I finally got around to taking my Certified Scrum Professional Certification Exam this afternoon. The content was a lot more broad than I expected, but I was able to pass with flying colors.
Hosted CI Solution for Open Source Projects
When I started developing on my DiveLog Side Project, one of the goals of the project was to experiment with various development tools that help with things like code quality, metrics, etc. I initially was going to setup my own Build Box ans run Sonar, but I ultimately decided against it. While in the process of looking in to all of the CI systems that are out there, I stumbled upon a free Hosted CI Solution called Travis-CI.
Travis-CI is a 100% Free and remotley hosted CI system for open source projects. It connects to your projects GitHub repository via hooks, and whenever a push is made, it will automatically run a build. The CI Environment it self comes equipped with everything you need to build your code, regardless if the language it is in. It supports a large variety of languages, several databases, has multiple messaging servers, and even supports headless browser testing. The one thing it does not have is a Java Application Server, however this can easily be remedied by using Maven to Download and Unpack JBoss AS7.
Setting up Travis-CI
Setting up Travis-CI is as simple as placing a configuration file into the root of your project and configuring a hook in GitHub, and Travis-CI can actually configure that hook for you. The configuration file for your project can be anywhere from a single line, to dozens of lines, depending on how complex you need your build process to be. This file is where you setup the build environment and specify things like what JDK you need, what Database you want, etc... You can also configure build reporting options so that Travis-CI will notify you when your build is complete. The file is extremely simple to write, and they even provide an online validator that you can use to verify your configuration file is properly formatted.
Running your Build
Running your build on Travis-CI is as simple as pushing a change to your GitHub repository. Once the push is made Travis-CI will grab your latest code and kick off the build process that you configured for your project. You can then go to the Travis-CI website to the view the progress/results of your builds.
Final Thoughts
If you are developing an Open Source project that is hosted on GitHub and you need a Free and remotely hosted CI solution, Travis-CI is the only way to go.
References
Easy Swing GUI's
Recently for my CS414 Course at Colorado State one of my assignments required me to develop an application in Swing. Lets face it, Swing Sucks. It is simply a fact of life. The primary reason for Swing being so terrible, in my opinion, is because it is so difficult to actually build the UI and get it to look like what you want it to look like. Manually positioning the elements and fighting with layout managers is all that comes to mind when I think about developing an application with Swing.
While searching around on the Internet however I stumbled across WindowBuilder Pro from Google. It is a WYSIWYG Editor for Eclipse that allows you to quickly and easily build entire Swing UI's as well as individual Swing components. Unlike most other tools I have used, the code that this one generates is actually readable and makes sense. It is also smart enough to allow you to re-factor the code after its generated, and then still allow you to visually edit the layout of the components. Most other tools just die when you do this.
In short, If you need to build a Swing, GWT, or SWT User Interface, You should really take a look at WindowBuilder Pro.
References
Startup / Shutdown Callbacks in EJB 3.1
Every now and then you need to know when your application starts/stops so that you can perform some action. For years now this has been supported in Java by the Servlet Specification and its ServletContextListener class. Unfortunately this functionality was never offered by the EJB specification. With the release of EJB 3.1 and the @Singleton annotation, this functionality is now possible, and the code is much cleaner and simpler. Here is an example:
As you can see, the code is very simple and straight forward. There is no configuration needed. Just annotate your class/methods and the container will do the rest.
The @Startup annotation will cause the Singleton to initialize eagerly during the application startup sequence. Once all the injection has taken place, the container will call the bean's @PostConstruct method. Since the bean is container managed, you have access to all other EJB components, JPA EntityManagers, the TimerService, etc. And unlike other EJB component types, any container-managed transaction behavior for the bean applies to the @PostConstruct method as well.
By defining a @PreDestroy method the bean instance can request a shutdown notification. Since the Singleton bean instance life cycle is tied to the container's life cycle, this method will be called when the application is shutting down.