Blog
-
My First Gem
February 28, 2016
I spent a large part of my Saturday learning a new programming language. Who doesn’t do that every now and then? I spent the afternoon learning some Ruby and publishing my first Ruby Gem. This summer I will be interning at a company using Ruby on Rails and I want to be able to dive in head first into the work without worrying about picking up a brand new language.
So what did I make for my first foray into Ruby? I made a simple Command Line Interface for Todoist. A to-do manager I have recently started using. Though not super glamorous or original( there are many a cli wrapper for Todoist) I wanted to build something I could use in my everyday life and was also small enough to allow me to have useful code at the end of one day.
Mission accomplished. I have built something small for myself that I’m proud of as a first stab at learning Ruby. It’s not super complicated but introduced me to sending HTTP requests, classes, modules, hashes, reading and writing files, and writing command line utilities. I have more features that I would like to add but for now I have an installable gem on Ruby Gems.
I plan on adding more functionality as well as testing as I get a chance but would love feedback on my Ruby application structure and coding style. I have lots more too learn! What did you learn new today?
-
Dell Chromebook 13 Review
February 07, 2016
I am back to school and school means I’m relying on a laptop everyday. The problem is my schedule this semester puts me in class for 8 hours Monday and Thursday with no power outlets in sight. My Thinkpad T430s even with the extra bay battery would not be able to reliably last the day if I needed it. My laptop works great for me except for two things, display and battery life. I have been getting around 4-5 hours of battery life on my Thinkpad and the display is 1600x900 which is below my 1920x1080 minimum preference. I have been looking for a laptop to supplement or replace my Thinkpad for a while now.
I had two options, purchase a cheaper laptop that had better battery life and use that as a secondary laptop or purchase a new laptop with battery life and performance to satisfy all my laptop needs. I had been eyeing up the Toshiba Chromebook 2 as a cheap secondary computer and the Dell XPS 13 as a full replacement computer. The Toshiba Chromebook had consistently getting reviews as one of the best Chromebooks available and the price made it a lot easier to justify over a new >$1,000 computer when I spent $1600 on a laptop a little over 2 years ago.
Price decided that I would be getting a Chromebook, now which one would I get. I had been eyeing the Toshiba for months and it looked like the obvious choice until I found the Dell Chromebook 13. A few of the things that made me choose the Dell:
- Battery Life: 12 hours is great for my needs
- Screen Resolution: 1920x1080 was basically a minimum requirement for me
- Screen Type: I prefer matte screens over glossy
- Build: Dell build quality and design appeared higher than most other Chromebooks besides perhaps the Pixel
So far the Dell has been meeting my expectations. A great working computer that looks great and lets me do almost all my work that doesn’t involve programming. I have been adjusting well to ChromeOS but have Crouton installed in case I need to do anything more. We’ll see how it does in the long term but for now I am more than content with my purchase and would recommend it to anyone looking for a solid laptop for portability and productivity.
-
Open Office Life
August 09, 2015
This summer I have been working in an open office environment on the operations team at Onshape. It has been an awesome experience and I have been learning a ton. This has been my first experience working as a software engineer in an office and I have definitely grown and learned a lot. One thing that has impacted me the most at this internship has been the open office space.
I have always been a person who liked to get time to myself and focus, an introvert, I need time to recharge and be alone. Working in an open office makes this hard. Even if I put headphones on and try to focus people can still interrupt or distract me by talking within earshot. Perhaps this problem could be solved with noise cancelling headphones but I don’t think I should have to buy $100 headphones to be able to work in peace. Despite the distraction I see a lot of value in the open office. It makes it super easy to get immediate feedback, fix problems before they happen and quickly debug code. It also exposes me to a lot of information I would not get by working on my tasks alone or with my mentor. This is extremely valuable for learning but makes focused working hard.
Overhearing a conversation and becoming interested in the topic is an everyday occurrence. I feel like I need to absorb every conversation I can whether it’s the discussion on configuring NGINX or a conversation of Ansible vs Puppet, I want to learn all I can. This ‘learning’ comes at the expense of my productivity though. As I get distracted and leave the zone. You then have to get back into the zone which takes time and energy.
By the end of the day I am exhausted and make it home feeling tired. I then make dinner and recuperate for a while and by 8 I am back to myself and can happily start chugging away at work again. This time without people to distract me or wear me out. I often enjoy these moments the most.
I believe a method that would work well for me would be a work day around 9-3. Leave work, take a little reprieve and then work into the night. Eating dinner when I am hungry or need a break. I am interested how a schedule like this would work for me as I love the programming, problem solving and collaboration building awesome projects, I just find it hard to work for such a long time with people interaction and no reprieve. Perhaps even a place at work to get away from my desk for a little and work without distraction would help.
I am interested in increasing my productivity and energy. What do you think it takes for you to work most efficiently? Do you have a similar routine to what I proposed or do you use any other methods?
-
New Computer
July 11, 2015
Started my first desktop build today. I previously had an old desktop but it was slow and not worth using because my laptop would beat it hands down. Now that I’m making money as an intern as a software engineer I figured now was as good as time as any to build a system. I took a trip to Micro Center and got everything I needed. My old desktop had a power supply and hard drive I didn’t need to replace. Everything else went. Even the case. My new desktop isn’t a gaming rig. Just everything I need for programming and other work.
My new system:
- Case: Fractal Design Core 1000
- Processor: i5-4690K
- RAM: 2x4GB (16 GB future plans)
- Motherboard: Gigabyte H97M-D3H
- Keyboard: DK2108SZ
and staying from my old system:
- Hard Drive: 500 GB
- PSU: 580W
all and all this is comparable to my laptop specs but for much cheaper and much more room for expansion. Looking into SSD’s as that is a needed add on. Excited for the desktop. I have been hoping to get the opportunity to build a desktop for a while. Look out for more updates on my new system. Upgraded to Ubuntu 15.04 so I will probably have comments on that as well.
-
Pennapps
January 20, 2015
Another hackathon, another weekend. This time at University of Pennsylvania for Pennapps. It was a lot of fun. I really enjoyed meeting a bunch of new people and having fun in Philadelphia.
Kiana and I teamed up again and built a Pebble Messaging Service. Our project is viewable on Challengepost It is a hackathon project so a little rough around the edges and not complete but we had a pretty solid proof of concept. I built the web service for sending messages and location data and Kiana built the Pebble app. I went a lot more in depth with node.js and Mongodb and learned a lot. Even used some of the angular.js I have been learning recently for the settings page for the Pebble set up and adding friends, custom phrases and an email. Maybe in the future it will be open sourced or release but right now the project is still in development. I really want to see this come to my Pebble though. I see a lot of room for a message building system that we have. It has a lot of potential and beats the quick reply options on the beta version of Pebble for Android.
-
YHack
November 04, 2014
This weekend I traveled to Yale with friends for YHack, Yale’s huge hackathon. This hackathon was serious. The hackathon takes over a 3 story office building and teams spread out throughout the building. There were a lot of great companies there and some great hacks.
I worked with Kiana and Josh to make a Pebble smart watch the controller for both mouse input and also drive a robot around. It was a good balance of technically challenge yet feasible for us. It was a lot of fun. I worked primarily handling the sensor data and controlling the mouse based off the data we were sending in. It wasn’t pretty. Our initial code and prototype were extremely slow. We had 15 seconds of latency in our system at one point. But we kept reducing the time until updates were possible approximately once a second.
Here are some interesting problems I ran into while working on this:
-
Problem: Linux Bluetooth: I was trying to pair the Android phone with my laptop so that I could reliably send accelerometer and button data and commands over Bluetooth. Linux is tricky for setting up Bluetooth though I could set it up a couple times it wasn’t reliable are easily repeatable. Josh and I collectively wasted over 4 hours trying to get Bluetooth to computer to work and we never did. Solution: In true hackathon fashion we used a hack to make things easier and sent the Android data to a Bluetooth module on an Arduino Mega and then used the the second serial port of the Arduino to send the commands over USB to the laptop. This worked but isn’t ideal and probably added some major latency to the system.
-
Problem: Unreliable serial data. With how I originally wrote the code, updating the data loaded onto anything was easy. We only did it when we were trying to update the mouse position. One problem we ran into was that the message would randomly drop a select few characters without warning. This made for unreliable and error check full code. We could never figure out what caused the dropped characters. Solution: To get around this I threaded the process that checked whether there was new information with serial and every time there was a line I read it. It worked great and allowed for more real time updates of information.
-
I had many more problems but don’t have time to list them all.
At the end of the hackathon we had a rough working prototype with mouse movement, right clicks and left clicks. We also had the ability to move the robot but didn’t demo it. As the judging happened we got to show off to a lot of different people and people really seemed to dig the idea and appreciate it a little. As the announcement went out that the judging time was over and it was time to announce the winners we were freaking out. Pebble had never even visited us. The only API we really used and it we weren’t even in the running for an award. Halfway through the general awards Pebble stopped by to checkout our project and it was our smoothest demo yet. The Pebble engineer seemed to really enjoy our app and told us he hoped we kept developing it.
When the API awards were announced we were shocked to hear our name for the Best Use of the Pebble SDK award and we won a second award from Thinkgeek for Craziest Hack Award. It was awesome! We were super pumped and came home with a Pebble Steel per team member and a bag of swag to share. Awesome weekend and can’t wait for our next hackathon!
Our Project can be viewed here on Challenge Post
-