I Got a Password Manager and You Should Get One Too

The other day, I read an article by security expert Troy Hunt on how “The only secure password is the one you can’t remember“. In it, he laments how we have so many online accounts and how with all these services, come the risk of massive data breaches that can cost you.

These accounts need passwords and given how many accounts we have, we fall into two bad habits when choosing passwords; weak passwords, which can be found and cracked easily, and reusing passwords where the breach of one service will result in the breach of more valuable services.

Now, there patterns that supposedly make passwords more secure and easier to remember, like sentences and substitutions, but remembering hundreds of passwords like “Il0vefurryp0rn” is hard. So what do we do now? Well, you could write them down on a piece of paper, but that’s a bad idea for obvious reasons.

A better solution is to use a password manager that allows you to generate passwords, store login details, save documents and secure them with 1Password (hehe) in a super safe vault. A secure password btw. Password managers are very secure and their security is constantly evaluated and improved upon. Heck, the password manager I use, LastPass, got breached¬†and while attackers could get the vaults, they we’re strongly encrypted, making them useless, unless you have a lot of time on your hands.

Rather than tell you how password managers work, I’ll show you how I use my password manager, LastPass. I’m not being paid for this, but I wouldn’t mind it. Password managers typically feature browser extensions that let me log into websites quickly. If the site is being weird, I can just copy the password over and it will clear out the clipboard after a while so other apps can’t take a peek. I can randomly generate passwords for new accounts to specified parameters, login easily, change passwords on the fly, store form fills and credit card details to easily access, share an account with someone (either showing or hiding details) and even designate someone to access the vault in the case of an emergency.

If I move onto my mobile phone, I can secure the vault against a pin or fingerprint for quick access. I can also log into websites in the browser and generate logins. The best part with password managers on mobile phones is that I can log into apps. It uses the 1Password logo, but you can use any password manager. Nifty hey?

There is a slight benefit to the extensions in that they prevent phishing since the login details will only fill under the right URL match. You still need to take care about the websites you’re logging into however. Also, password managers can’t stop you from Rubber Hose Cryptography (i.e. beating you with a hosepipe until you give in), so a password manager should serve as one element in your security arsenal as opposed to being the security arsenal (the Electronic Freedom Foundation has a great guide on it here).

Now, there are many password managers out there such as 1Password, Dashlane, Sticky Password, Clipprz, RoboForm and the built in options on web browsers and iCloud. There are some superb open source options such as KeePass and Bitwarden which do need some tweaks to get them to the convenience of the previously mentioned methods. Some are solely cloud based, which are slightly less secure and more convenient and others give you greater control as to where to store the encrypted vault ((S)FTP, Google Drive, Dropbox etc.). Some even have two factor authentication in which a password AND something else to verify you, like an SMS code, a special file or “key”, or an app which generates codes needed to sign in. Two factor authentication is another step you can take in ensuring account security. I’ll talk more about those another time.

With that, I hope you’re compelled to get a password manager now.

A Byte of Py: For Loops

This is the first of a new series “A Byte of Py” where I share tasty Python concepts in around 256 seconds (for the video that is). I had this post planned for a long time and I’m only getting to it now, so it might not be the best. Enjoy ūüôā


In this Byte of Py, I’ll explain how for loops work in Python using the range statement, enumerate, dictionaries and enhanced for loops in addition to the for-else construct.

There’s also a handy GIF I created explaining for loops.

for-loop

My Goldman Sachs Summer Technology Analyst Interview Experience

This past week, I was able to land an interview with Goldmam Sachs for their Summer Technology Analyst position. From the 50 odd applications I submitted, Goldman are the first company to invite me to their offices for an interview.

The time between the application and the interview was 10 from when I filled the online application.

The day after I applied, I was given a Hackerank quiz. The quiz had two questions, one on finding the second smallest element in an array and the other on the sum pairs in an array that add up to a certain number. While the first question was easy, the second one was hard to do efficiently.

Once I handed in the Hackerank quiz, I got a Hire Vue interview. The Hire Vue interview had me answer 6 questions with a video response. While they were mostly easy, one of them was rather hard to answer.

Mind you, these interview happened within 4 days from applying, which was quick. Once I finished the interviews, I got an email saying that they were reviewing my application and they would get to me a few days later.

A few days later, the recruiter asked me to confirm that I would be able to get to the interview, which They would fly me out to. After ironing out a few details and booking my flights, I was ready for the Superday.

That weekend, I spent some time preparing my business attire. I couldn’t decide which tie I wanted to wear, so I picked red since it stood out. Later on, I was told red was too powerful and political to wear, so I went with Navy Blue.

The flight to New York via Newark (don’t fly there) didn’t go too well since my original flight got cancelled and the replacement flight got delayed. Because of the delays, I got to the hotel (which Goldmsn owns) rather late. I could have taken an Uber, but that was $40 vs. The $5 for public transport and my feet.

The next day, I got up and ready and I headed for Goldman’s New Jersey office which was just a ferry across the river away from Lower Manhattan where the hotel was. They had an office right next to the hotel, but the held there interview in NJ for some reason.

I digress. I got to their office with plenty of time to spare. I got to mingle with some other candidates before we headed up to their office. 

The Superday was in 3 parts, a behavioral interview, a technical interview and an informal networking session where we got to talk to some of the technical staff.

I had the behavioral portion first where I had to walk through my resume, explain how I would design a self parking car, talk about a unique problem I’ve faced as well as a question on how I would scale an application. After I asked the interviewer a few questions, I went to the next room for the technical portion.

At the technical portion, I met with two engineers. They asked me how I would design an application to search a string, how to sort some numbers, how to help a co-worker who isn’t getting along well with a colleague as well as how to ensure quality assurance.

With the technical portion over, I headed for the networking session. I had a really good chat with the tech staff where they talk about how they got to work at Goldman, NY life, their projects, intern experience, and their experience returning at Goldman.

With that over, I headed across the river back towards the World Trade Center to grab some lunch, hang around and try it done headphones. Once I got bored, I headed back to Newark to get back to college.

A week later, I got a call saying that I didn’t get the position. To be honest, I don’t think I did too well. I didn’t handle the abstract questions well and I couldn’t explain quick sort or merge sort. I ended up getting a lot of hints and a internalized stares of futility.

I appreciate Goldman for flying me out and giving me a chance. It’s exciting to get flown out. I just wished they I was better prepared for the interview and I communicated better. Back to applying I guess!

Sorry :(

This is a short post, but I’ve been really bad with time management do I couldn’t get a whole lot done. I have some posts planned once I’ve got this mess cleared up.

Thanks for understanding.

Why I Didn’t Make Anything During Minnehack

Last weekend, I went to Minnehack hosted by the University of Minnesota’s Association of Computing Machinery (ACM) Chapter. While the event went well and I met some amazing people, I didn’t make anything that weekend.

While it didn’t help that I couldn’t find a team, the biggest reason for not making something was that I wanted to turn my project into something bigger, being what I could do in less than 24 hours.

When I arrived, I found someone who had also gone to Uncommon Hacks. We didn’t see each other at the event and she said that she sat with three other guys as if that would narrow down the. I got with her other teammate to discuss his idea.

His idea was to use calculate the risk of a patient having cancer using with a probe attracted to the patient’s arm. I didn’t feel comfortable calculating the risk of cancer since I didn’t know how and it seemed out of my abilities.

With that, I decided to work alone on an Alexa Skill that would have a sassy conversation with the user. As I made it, it looked like the skill was more mean than it was sassy, so I decided to move onto another skill – making an adventure game.

Unfortunately, I didn’t have much time left, so I decided to plan to make the skill as a personal project rather than make it at a hackathon. I decided to stick around a bit and help a couple of teams who wanted to use the Amazon Echo in their projects work around things.

If I had a proper team, I wouldn’t mind making the adventure game. Since that didn’t happen, I decided to make it a longer term project. Hopefully, I’ll make use of some AWS services like Lambda and DynamoDB.

As I wrote this article, it turns out that Amazon did make an adventure game with an Alexa. I guess I’ll do it to improve my skills. I’ll let you guys know more once I’m done making it.

January 2017 Update: Trello, Feedback, New Equipment and February

YouTube Subscribers: 1 (+1) | Monthly YouTube Views: 27 (+24)

Blog Subscribers: 2 (+1) | Monthly Readership: 137 (+123)

I hope you’ve all been having a great 2017. In this monthly update, I’ll go over the Trello Boards, feedback, my new equipment, current blog progress and my prospective projects for February 2017.

This month, I was able to post 2 videos as well as write 3 blog posts. Most of the traffic came from a post I made on Reddit about personal projects. I also gained 1 YouTube subscriber and 1 blog subscriber. A small gain, but gainz nonetheless. I also went to Uncommon Hacks which went really well.

Trello Boards

AGCKB has two Trello boards where you can see the stuff I’m working on. The Blog Posts and Videos¬†board contains the projects I would like to start, project currently in progress and the stuff I’ve completed¬†as well as a list for reader suggestions. The¬†Big Projects¬†board has¬†big, long term projects conerning¬†the well being of the blog, such as redesigning and community development.

Feedback

My blog and YouTube channel are very small and I would really like for them to grow. for that to happen, I’ll need your feedback. Through your feedback, I hope to not only understand the things you like about my stuff, but all the stuff you don’t like. Whether it’s my content, my style of delivery, my writing – whatever it may be, I want to know what you think about my content by filling in this form.

New Mic!

Since people consider audio quality to matter way more than video quality, I got myself a Blue Yeti Microphone for $100 to improve my sound quality. I choose the Blue Yeti because of its reputation for being a great quality mic for it’s price. My only regret is not getting it in black. Up until I got the Yeti, I’ve been using my laptop’s microphone which sounded awful and my iPhone which caused lots of problems when trying to sync it up with the footage recorded by OBS in post.

Speaking of post, I use OBS to record my stuff, which is a very good piece of software. One of the things I really like about it is the file sizes which are rather small. One day, I tried to use Hitfilm Express (a free video editor) which besides being slow since it took 40 minuites to render, took my 50MB OBS footage + the 10MB .mp4 recording and turned it into 750MB. Let’s just say that I’m not planning to use it for a while…

What’s Going Up In February

In February, I’m hoping to post two book reviews, a hackathon project and experience piece, a personal project post as well as something about the history of Python. The book reviews will be on Hidden Figures and Master’s Of Doom, the hackathon posts will cover MinneHack coming up this weekend (January 28) and the history of Python video will cover changes from Python 1.0.0 to the most recent 3.6.0 version. I’m not too sure what the personal project will be, so watch the Trello board to stay in the loop.

Math.floor(it) -Now You Can See If Speeding Is Worth It

DevPost Listing | Code Repository | Try It Here

During Uncommon Hacks, I worked with 3 other students on Math.floor(it). Math.floor(it) is a rather silly web app designed to calculate the cost of speeding as well as it’s benefits. The idea came about when one of the team members wondered how much faster his 1 hour commute would be if he ignored all the traffic lights and drove 25 miles over the speed limit.

The app would work by taking in two addresses in Chicago where after pressing on the cute little car, it would plot a route between the two points, point out all the speed cameras and red light cameras along the way and give you information on time savings, fines and your probability of dying.

Our stack was pretty straight basic. We set up a static web page using HTML, JavaScript, jQuery, SaaS as a CSS preprocessor and SVG’s for our animations, like the cool car that drives in. The data on¬†the camera locations were sourced from the City of Chicago’s Data Portal¬†which was then downloaded as JSON in order to use it in our app. For the mapping, we used the Google Maps JavaScript API¬†and built a lot of functionality around it.

While making Math.floor(it), we faced a couple of challenges. Firstly, we discovered that the isLocationOnEdge() function was unreliable since it would sometimes show up on paths where there was no camera touching the path as well as ignoring cameras on the path. checkBounds() was a possible alternative, but given our time constraints, we choose to stay with isLocationOnEdge(). Another problem had to do with understanding the asynchronous nature of JavaScript when using $.getJSON() to get the camera data.

In the future, we hope to refactor our code, add more cities, solve the isLocationOnEdge inconsistencies and make further polished to the UI. We might also factor in additional data to improve the apps accuracy since it’s unlikely that someone would drive 25 MPH over the speed limit without either a cop noticing or hitting traffic, less so in Chicago.

In all, our efforts won us two prizes; best beginner hack since this was there first hackathon for one over of the team members as well as Most Uncommon for symbolizing the hackathon which was rather eccentric. After all, the prize was a Muppet plant. Given how we didn’t know each over before the even, we knocked up something pretty decent within a weekend.

Hackathon Diary: Uncommon Hacks

On the weekend of January 14 and 15, I went¬†to Uncommon Hacks¬†hosted by the University of Chicago at the Polsky Center for Entrepreneurship and Innovation. Applying wasn’t too difficult and given Chicago’s relative proximity from my College in Waverly, Iowa, I was more than happy to attend.¬†Much like the post on My First Hackathon, this post will outline what¬†it’s like to attend Uncommon Hacks

03:45 am Breakthrough!

Having just woken up, I showered, packed my bag and updated my resume. I tried to print some copies, but the dorm printers ran out of toner. No worries, there might be a print shop near Polsky.

Anyways, that was the least of my concerns as I was prepared to drive 5 hours to Chicago since my standby flight was fully booked. Fortunately, the airport was along the way and it turns out that there were a handful of seats left so no drive. #yay.

7:05 am – Off to Polsky

After an uneventful flight, I was able to buy a train ticket with transfer for $5. Not bad. I tried to make a vlog, but¬†that didn’t work out for a few reasons;

  1. It’s hard to set up camera angles.
  2. Talking to a camera in a public space is really awkward.
  3. The sound from the GoPro is terrible with all the heaving and ruffling against my shirt.
  4. I realized that editing isn’t easy.
  5. When I tried to mount the GoPro to the train, one of the ushers told me that I wasn’t allowed to do¬†so.

I guess vlogging isn’t my thing. Let me stick to text and videos of text right now. Also, I should be living the moment rather than capturing it at to you. Technically, this post is capturing the moment, but it’s asynchronous meaning that I can do stuff and report on it later.

After writing this section, I carried on reading Hidden Figures. So far, I’m amazed at how the author turning the history into a story rather than just telling you what went down. Expect a post with my thoughts on the book in a few weeks.

09:13 Damn Printers

After taking the train and the bus, I was able to grab a Egg McMuffin and Hash Brown at McDonald’s as well as print out my resumes at a UPS store. I had some printing problems, but fortunately Polsky was just across the road so I didn’t lose too much time.

9:33 Recharged

With resumes in hand, I walked over to Polsky to sign in, get a miniaturized nametag , a sticker, T-shirt and stuff about WiFi. Once logged in, I plugged my phone, with just 3% battery life left into the handy power strip on the table I claimed because it had one.

After a while, I realized that the coveted power strip wasn’t plugged into power. Eh, whatevs, I can wait and besides, I’ve got a power bank. I also forgot my VR headset, Raspberry Pi and Arduino back on campus, so I’ll have to settle on being the backend/dev ops guy.

As 10am came past, some guys from Colorado joined my colony (well…table). I went for some breakfast which was made up of coffee,¬†naartjie (mandarin) and croissant. About the naartjie,¬†I tried asking around for the spelling which nobody knew before turning to Google which also didn’t know because of my terrible spelling. After some better queries (“orange like fruit with peelable skin”), it turns out that the¬†naartjie¬†is Afrikaans mandarin/clementine.

Since I asked so many people for the spelling of¬†naartjie,¬†I started off some conversation. It’s really hard to start a conversation with strangers, unless someone dares to speak first. With my social fix obtained and my table set up, I’mready to hack.

10:15 Career Fair and Meeting People

Seeing many people go to the one room, I decided to see what the was was about. While there were a few companies, most of them weren’t looking for interns, let alone international students. On the plus side, there was lots of cool swag and there was even a guy in a space suit advertising a Bitcoin charity.

Since there wasn’t a whole lot to do, I went to the speed dating exercise to form a team. There, I was given a little slip of paper with a question I was to ask. The question I got was “M/F/K JavaScript, C++, PHP”. (“M/F/K” being Marry, Fuck, Kill¬†between the three options. Personally, I choose to kill PHP (in line with the “PHP Sucks” meme), marry C++ (I heard of it’s usefulness. It even underlies the other to languages) and fuck JavaScript (it’s trendy so I assume it’s cute so…). I digress, but I was able to talk to some interesting people who traveled as far as Gainesville, Florida to attend the hackathon.

Eventually, I grouped with a team of 8 where we brainstormed ideas in order to create a schism into 2 4 person teams. Between the 8 of us, we went with two ideas, stuff with wireless beacons and a fun web app to show the price of speeding. Ultimately, I choose the latter idea since I was more comfortable with JavaScript than hardware.

The team I landed with had a guy from Kent State, a university which has a strong focus on fashion and tech with a department called TechStyles (hehe) and two ladies from UChicago, one of whom was attending their first hackathon. We all seemed to have the ability to search things out and understand JavaScript in some capacity, so I felt confident¬†we’ld be able to finish.

11:30 Brainstorming

With the teams set, we listened to the opening presentation which featured some slam poetry, shoddy resume and helpful tips for the weekend. We then had lunch, which was a nice assortment of pasta, all the while planning the silly web page.

Once lunch was out of the way, we started brainstorming as a group in addition to splitting up responsibilities, trading contact information and creating the GitHub repository. We then looked into where we could work with two of us focusing on design and the rest of the group focusing on hooking up with Google Maps API and gathering data on speed traps and red light cameras.

The data didn’t take too long to find since the City of Chicago lists all the speed traps and red light cameras. It even gave us the ability to export it in many data formats like CSV and JSON. Thankfully, Google’s documentation was very clear so it wasn’t hard to understand how the code worked as well as how to use them. With a rudimentary understanding of the API, we took time to learn more of it to draft paths and list the cameras.

While working, we met a mentor who had been programming for 42 years who had some interesting stories, like taking pictures of Ken Thompson (UNIX guy) and working with massive hard drives which acted up violently.

15:00 Shit, that was actually important

At this time, we as a team decided that it was beneficial to attend the workshop on Asynchronous JavaScript in ES 6 since we would be making use of a couple of them. The talk it self covered were things that I was aware of so it felt like a waste of my time, besides seeing what callbacks actually do (which was helpful tbh).

A few minutes after that talk, I needed to use the jQuery.getJSON¬†function to read some of the data I imported. Simple enough, or so I thought. While I was able to read the data and pull of what I needed from it, it wouldn’t add elements to an array given code like this

var speedcams = [];
$.getJSON("data/speed-cam-locations.json", function(json){
    var locs = json.data;
        for(var i=0;i<locs.length;i++){
            var pos = {lat:parseFloat(locs[i][12]), lng:parseFloat(locs[i][13])};
                var marker = new google.maps.Marker({
                    position:pos,
                    title:"Speed Camera"
                });
                speedcams.push(marker);
            }
        });
console.log(speedcams.length); //length is 0

After talking with the veteran hacker mentor, it turns out that it did add elements to the array, HOWEVER, $.getJSON¬† is an asynchronous function, meaning that the execution of console.log(speedcams.length) does not wait for the¬†$.getJSON¬† call to finish. That means that the elements are added, it’s just that the code after $.getJSON¬† is running based off of what it sees in speedcams as it is called, which has nothing. I think this is what they mean by a race condition. Basically, if I want to do stuff with speedcams, I’ld have to either use it in a listener or do it right in the asynchronous call.

The next three hours was spent trying to make the asynchronous call synchronous (save it to a variable) and the same “empty” array would come up. I thought a promise would help, but I couldn’t get it in place. I guess I should have paid more attention presentation. Oh Farai… At the same time, one of my team members went off to explore Chicago, and the other person working on picking up camera’s located on a path realized that isLocationOnEdge() wasn’t entirely accurate since camera’s far off of the path sometimes picked up and camera’s right over it wouldn’t register.

18:48 Seems Legit

Since this hackathon is horrendously awkward, they decided to bring in a fortune teller. Frustrated at the lack of progress, I decided to go to the fortune teller just ‘coz. The fortune was too generic to be angry with, putting it at a C- (loads of BS, but it can be convincing though). After the fortune teller, we head of for some Indian dinner which tasted really good. A while back, hackathon food was just coupious amounts of pizza and junk food. Given enough awareness about how unhealthy this is, some events have moved to getting actual food, a motion I get get on board with.

After dinner, I decided to ignore the async issue and focus on getting autocomplete search for the address, which was much easier to do. Soon after, I was integrating code from my teammates and solving merge conflicts, which went pretty well. Honestly, while this isn’t the best hack around, I’m¬†glad that I’m making a project that is going somewhere unlike my previous hackathons where I would pull out half way through (tbf, it’s hard to get back to Wartburg with no car).

22:12 Celery Man

At this point, I realized how much work I’ve been doing, so I decided to get a bit competitive. There was a celery eating contest which I entered thinking it would be easy given how quickly I eat food. Well… turns out that after not eating veggies for a while, eating celery is harder than it seems so I lost gracefully and went back to the desk to update the hackathon diary at the same time scaling back my duties from a hardcore hacker to an advisory since I needed to recharge and collect my incredibly muddy thoughts.

While at it, I helped switch someone from testing via the file system to running off of localhost (via python -m SimpleHTTPServer) to use AJAX functions because of the same origin policy. Then they hosted a super secret event where the tried to seance a Galaxy Note 7 before drilling it bricked.

I haven’t mentioned it till now but I find it hard to fit in here honestly, between my insane awkwardness (even for a nerd’s standard) and the general feeling of being ignored and speaking to air, I didn’t feel in place. I won’t go further here, but it’s something I really need to work on for a few years before being somewhat competent. Same with a lot of things. Better get to it.

I was planning on going to bed, but they had¬†in some really delicious warm cookies and Dunkin’ Doughnuts Hot Chocolate. I forgot all my sleeping stuff in Waverly, but they have air mattresses. While I couldn’t get one, I¬†found a very comfy spot to sleep at.

07:15 Terrible Sleep

While the chairs seemed comfy, the sleeping experience was anything but. For one, it was really cold. That coupled with the fact that I had no blanket made the sleep unbearable. I could only clock in about 2 and a half hours before I gave up, played on my phone, brushed my teeth (they provided toothbrushes) and headed back to our table with the one lady on the team who was touching up on the UI. Apparently she also got under 3 hours of sleep for the same reason as me.

The other members arrives and for some odd reason, one of them were able to get a good seven hours of sleep. Now that we were a full team, we worked on polishing up the code. The time came around where we were supposed to create our DevPost listing describing the project, what we did, the problems we faced, our accomplishments and the prizes we were aiming for. We aimed for best beginner hack, Chindogou (prize for something which tries to solve a problem, yet it creates another), Madame Zande (the fortune teller. I don’t know) and Most Uncommon. Out DevPost listing is here¬†if you wanna read it.

12:00 Lunch Time

At 12pm, it was time to stop hacking, clear out our table and get some lunch. For lunch, they brought in some amazing Chinese food which I gladly took a whole plate of before going upstairs and meeting some other teams. One team from Colorado were all hardware guys, yet they were able to make an Android app that will gradually turns orange as Donald Trump tweets.

After lunch, we had a small session where we were introduced to the judges, all of whom had loads of experience. We even had a 5 year old girl to judge the projects. With the small session, we headed off to our presentation table, set up and awaited the judges.

14:00 Judgement Day (well hour)

As we picked¬†an optimal route for our app (to hide our bugs), we waited for the judges. One by one, we made our pitch, had some laughs, took questions, but we mostly tolerated all of the “WTF” stares given. After a while, I decided to explore what other teams did.

While the full list of projects made at Uncommon Hacks can be found here, these are some projects that I thought were pretty cool;

  • A webcam that is able to read facial expressions.
  • A location based social media platform where you make posts based on where you are. Think writing on the toilet stall walls.
  • Clippy on Android
  • An Overly Attached Alexa
  • A giant teletubby
  • A script that watches YouTube videos of people playing the piano and converts it into a MIDI file
  • A Zen Garden
  • and may others

All of the prizes that came out of this hackathon were very well done given the amount of time we had to make these projects. Even with all struggles along the way, all of us were able to work through them (or drastically limit the scope of the project)

15:00 Awards Ceremony

With the Expo over, we got ready for the awards ceremony. Before the awards were given out, they showcased the top 6 apps made over the weekend which were very well made. From great ideas to very well implemented ones, all of the top apps deserved to be there. As for our project Math.floor(it), we were able to scoop up two awards, one for best beginner hack as well as Most Uncommon for living up to the spirit of the hackathon.

Given how dank this hackathon is, the prizes they gave up were uncommon to say the least. Besides the Nintendo Switch, Headphones and Echo Dots, most of the awards were incredibly stupid. For Most Uncommon, we won a muppet plant for some odd reason. I wish we got the unicorn fats instead.

After all the goodbyes were said, I went to Nandos, looked for a bus, headed to the airport, hustled for a seat before flying home and facing my many responsibilities back at college.

In all, I’m happy with the way this hackathon turned out. In all the other hackathon I’ve been to, I’ve never stayed behind for the entire event. Finishing the an app (an award winning one) is great validation. While I couldn’t hustle for an internship interview and I was incredibly socially awkward, I would say it was worthwhile, especially with how well organized (and uncommon) it was. I just wish that I sorted out my college responsibilities before going to the hackathon. For future hackathon, I hope to make more interesting projects and socialize better.

Next time, I’ll talk more about Math.floor(it), and the process of making it. If you want a sneak peek, you can check out the Git Repository, read the DevPost listing or even play around with the app itself. Just know that it only works in Chicago right now.

Side Note: This post is just about 2800 words long, probably the longest article I have ever written on this blog. While I’ll write about Hackathons in the future, I probably won’t write one this long. I’ll probably write on the highlights and the general atmosphere rather than a play-by-play account.

Making Farai’s Weight Tracker: The (Terrible) Alpha Build

So, after months of on and off work, I’ve finally made a terrible alpha build for Farai’s Weight Tracker. As it is right now, it’s a massive mess of spaghetti code as I tried to hack solutions on the fly. It’s good to see it get this far, but in all honesty, it’s a mess.

To make FWT, I used the following tools;

  • Python–¬†The language I’m most proficient in since I use it a lot in college.
  • Flask–¬†A Micro Web Framework which I picked up since it gives me the freedom to define how to do stuff my way (posssibly to my detriment)
  • Pygal–¬†A data visualization tool to make the weight graph. It’s pretty easy to use and it’s very powerful
  • SQLAlchemy– An Object Relational Mapper (ORM) used to abstract database queries.I picked it because I was working between SQLite (testing) and PostgreSQL(production).
  • bcrypt– Pretty overkill but it’s purpose is to authenticate me. I left the hash exposed in the source since bcrypt is really hard to crack, so it should be fine (not that this is a very secure application)
  • I also used virtualenv¬†and virtualenvwrapper to create virtual environments to better manage dependencies.

Setting up the development environment was horrible, but thanks to some diligent googling, I was able to install certain dependencies (like psycopg). As it is, it works (i.e. it works on my machine), but it still needs lots of work. For one, I intend to run it on Heroku where I can run both the app and use Heroku Postgres for the Database. I also need to make the UI look better, clean up the code and support multiple users.

This application, while imperfect, was a great learning experience to make. Being able to cover many tools and get the basics of how they work was great.I only wish that I spent more time learning the tool before implementing something.

If you want to checkout the code, you can go to the Github Repository. Otherwise, It’ll be a few weeks before I look at fwt again. Right now, I have to focus on another project, classes and upcoming hackathons.