Summer reading and training – The Memory Book

Many years ago, I bought and read this book:

Memory Book

It was written years ago by Harry Lorayne, a well known memory expert and magician. It’s a great book full of practical tips on how to improve your memory, and also shows you memory training exercises. With some training, anyone should be able to remember long lists of words, long numbers, the order of a deck of cards… almost anything you want! I remember that on my first read I found it very interesting, but I didn’t follow the exercises. I did learn and briefly used some of the mnemonic techniques, but after a long time of  not using them- most of it has been forgotten. After recently seeing a few demonstrations of memory stunts, I think it’s time I revisit this book- and this time follow through some of the exercises.

Should be fun!

Master’s project – done!

Just yesterday I finally presented my final project for my Master’s degree. I think it deserves a separate post to explain in more details what it is and how it works, but for now I’ll show you a picture of the poster I created for the poster session.

Resuminer project poster
Resuminer – Project Poster

The project is titled – Resuminer: A Resume Recommender System for Job Seekers using Cluster Analysis.

That’s all I’ll say for now, more details later. I’m glad it’s finally done!

BPDM & KDD 2016

This year once again I was lucky to be part of the BPDM (Broadening Participation in Data Mining) team (http://www.dataminingshop.com/) and I had a chance to go once again to the ACM SIGKDD (KDD for short) conference in data mining, this year held in San Francisco. More information about the conference at http://www.kdd.org.

Welcome to KDD 2016!

It was a packed schedule, filled with multiple keynote speakers, panels, paper presentations, poster sessions, and of course, meeting new people.

Thanks to the people at Zynga, we also spent a day at their headquarters getting a few additional talks organized by BPDM.

BPDM talk

All in all, great fun, great talks, and great memories.

MPhone

I recently participated at a Hackathon at my alma mater, UPR Mayagüez. I wanted to play round with a telephony API and see what I could come up with. My first idea was short lived. It was too complex for the limited time and I also realized that Plivo, the cloud API provider I was using, doesn’t support SMS for virtual numbers in other countries- which I planned to use (there seems to be a beta program, but I found out too late)- so I went with plan B. I’ve had this idea for a while, so I worked on a solution to my problem.

Badge
Hackathon badge

Here’s my idea and some background

I’ve had the same cell phone number for close to 15 years now. It’s also attached to more web services than I care to count for. The telephone industry has also changed a lot in the last 20 years, and many of the long distance imaginary barriers inside the US don’t exist any more. Except for Puerto Rico (and possibly other US territories). Puerto Rico phone numbers don’t work with many US services, including Google Voice, Uber, several phone conferencing services, Square, and many others I’m sure. I haven’t been able to find any logical reason for this, so I’m attributing this to the creaky backends of the telephone systems. It’s been a while since cell phone providers have considered Puerto Rico as a national number for phone calls. If you are a telephony guru and know why this is, feel free to chime in!

One of the things I’m planning to do at some point is get a new phone number from the continental US. I don’t want to lose my old phone number, but I wouldn’t like to pay two phone bills just for this. Enter MPhone. My plan is to port my old phone number to the cloud, and I’ll pay a fraction of what an extra phone bill would cost. I can then forward phone calls and SMS to my new phone number.

Building the backend for MPhone was fairly simple. I did spend a lot of time trying to debug why the caller ID was not showing correctly. After a lot of testing, it turned out to be on issue on Plivo’s side (already contacted them, waiting for a response). I used PHP for this because it was the lowest friction for me and time was limited (I have my eye on you Node.js and Heroku!). All I needed to do was to assign a script to each action (e.g. incoming call, incoming SMS) and dynamically generate an XML file with all the required attributes (e.g. incoming phone number, outgoing phone number). I got it all working the way I wanted, but I think I’ll add some new features in the following days.

Twilio seems to be what all the cool kids are talking about. Why did I go with Plivo instead? Pricing. Twilio charges 8X for a Puerto Rico phone number compared to a US phone number, while Plivo “only” charges 4.4X what they charge for a US phone number. Plivo turns out to be 45% cheaper (that’s only for renting the phone number, but phone call costs and SMS were also marginally less expensive). Twilio seems to have more features (Plivo doesn’t currently support MMS, Twilio does), so I might also give it a try at some point.

Pricing comparison
Plivo vs Twilio

Post-Mortem

Turns out my plan was flawed all along. I did all my testing using a virtual US phone number (a price consideration, since I was using a test account with only $5 credit), and while writing this post I went back to check pricing at Plivo, and they don’t fully support SMS for Puerto Rico phone numbers. All is not lost however, I can still do the inverse of my original plan. I can get a US phone number in the cloud and forward it to my Puerto Rico number. I already contacted Plivo to see if there’s any possibility of fully supporting SMS for Puerto Rico phone numbers in the future, but I’m not holding my breath. In the mean time, I’ll probably add a few extra features (I’m working on adding a database backend) and I’ll also research other possible providers.

Code coming soon, will update the post when it’s ready!

The Good, the Bad, and Javascript

Javascript, not unlike PHP and Perl, is one of those languages people like to bash. Myself included. I should point out that the last time I took a serious interest in Javascript was in the mid 1990s, when I copied and pasted some code to add to my Angelfire webpage. It made an annoying pop-up window show up and it asked you for your name. Javascript was never designed to be an ambitious language, it only ran inside the browser, it made everything slower, and it was not meant to be secure. As of today, there are frameworks that allow you to write native iOS and Android apps in Javascript. Javascript is here to stay for the next few years, and I’m embracing it.

In the Javascript episode of my podcast (listen here: http://gocodeyourself.com/blog/2015/1/17/episode-04-the-javascript-episode), Omar made a good point. Javascript has become popular because it has a low barrier of entry, it’s easy. You only need a browser and an editor (which can also be a browser plugin). Remember what made Perl popular? It was easy. What about PHP? It was easy. It’s the ease of use and flexibility that sometimes causes lazy habits and unmaintainable code. Ever heard programers talking about how elegant Smalltalk is, or how the simplicity of Lisp makes it beautiful? I don’t doubt they are right, but those languages also require a different way of thinking. A different paradigm. I think imperative programming is what most people can immediately relate to (unless you’re an Emacs person 😏). Javascript is still evolving, and the sooner I start working with it the easier it will be to keep up with it.

For the next few months I’ll give Javascript another try. Watch out for what comes out of it. Also subscribe to my podcast (Go Code Yourself), there’s a new episode coming soon!

I’m back!

I’m not going to make up excuses. I’m running way behind on the blog, but I’m still here. I spent about a month traveling, but now I’m back home. What am I working on? Mostly on getting up to speed and back to my goal of weekly blog posts, status reports, and podcasting. I’ve also been working on some stuff behind the scenes. Last week I interviewed Adam Cheyer. You may not know the name, but you probably know his work.

Adam is the co-founder of Siri Inc, the start-up that was later acquired by Apple and became something that is currently bundled with every iPhone sold. It’s very interesting to hear him tell the story of the evolution of Siri, and how it originally had many more features but they had to cut back. You can see the whole interview here: https://www.youtube.com/watch?v=BKyE5dWIydo

Why was I interviewing Adam Cheyer? Well, for the past few years I’ve been a volunteer for the Broadening Participation in Data Mining group (BPDM for short), and we are starting a series called Data Mining Innovators- where we want to reach out and interview influencers in the Data Mining field. Adam was kind enough to be our first guest in the series. The interview focuses on his thoughts and experiences in Artificial Intelligence, Data Mining and the related fields. We talk briefly about Siri, but the whole interview is very interesting and worth watching. If you want to know more about BPDM, you can visit http://www.dataminingshop.com/. You can also follow us on Twitter @BPDMprogram and join our FaceBook group at http://www.facebook.com/groups/BPDMprogram/. If you have any suggestions for people we should interview, let me know!

Now back to our scheduled programming…

Follow me on Github!

Are you following me on Github? You’ll be able to see what I’m working on before I write a blog post about it: https://github.com/orlandoferrer

I haven’t forgotten about updating the blog, but I did forget to mention that I’m currently traveling for a few weeks. My Internet usage has been limited and most of it has been through my phone or tablet and I haven’t had the chance to do as much work as I originally thought. 

Stay tuned, we’ll be back to our regular programming real soon!

My Bootcamp Goals

It’s easy to lose focus when you are not being held accountable. I already knew this, but I’m living it day to day now. That’s why I’m trying to come up with some goals. I need to be able to concentrate on things that will help me achieve these goals in the most efficient way possible. If something doesn’t work as planned, it may need to be re-evaluated or scrapped altogether.

I talked about some of my goals in episode 5 of the Go Code Yourself podcast (listen at www.gocodeyourself.com or download using your favorite Podcast player), but I wanted to put them in writing- to keep me in check. When I think about it, my main goal is to get up to speed on modern programming languages and practices. This sounds very broad and generic, so I tried breaking it down. I wanted to have some concrete and measurable goals. Here are some of the things I want to accomplish, in no particular order:

  • Be able to perform well on a technical interview
  • Review data structures and algorithms
  • Create small test applications for each major topic covered
  • Create slideshow decks for some of the topics (these can be used as review material later on, or to teach someone else)
  • Dig deeper into data science / data mining / machine learning (I’ve scraped the surface of these topics in the past, but would like to get more hands on experience)
  • Use public APIs to create a usable and useful Web application (already have a few ideas, will share them as I get closer to working on them)
  • Publish my code to GitHub (https://github.com/orlandoferrer)
  • Document as much as possible (topics reviewed, material used, practice exercises)
  • Weekly blog post with progress made, topics covered, and any interesting finding
  • Get better at reading other people’s code (read more open source)
  • Improve Stack Overflow ranking
  • Apply to Hacker School
  • Create slideshow deck with my “bootcamp” experience
  • Read more books
  • Exercise (I won’t be covering this topic on the blog, but I needed the encouragement!)

Whew, looks like I got my work cut out for the next few months!

I’m doing my own dev bootcamp!

I just did something stupid bold. I quit my job. I’ve been thinking about a job transition for some time now, but originally I planned on doing something more conventional. However a few things came together, and the timing was right. I’m taking a calculated risk. I’ve been wanting to transition my career into a slightly different direction, but the truth is I haven’t kept my technical skills as sharp as I would have liked; for a variety of reasons. Having a computer engineering background, I would currently do an okay job in a technical interview, but I’d rather take a few months to work on a few personal projects I’ve been wanting to do and get up to speed on the latest trends. For the past several years I’ve been working in the IT enterprise world, but I wasn’t programming on a day to day basis. I was trying to come up with a few ideas on how to accomplish this. Then, I found Hacker School. [Edit: Hacker School was renamed to Recurse Center shortly after publishing, read about it here: https://www.recurse.com/blog/77-hacker-school-is-now-the-recurse-center]

If you have no idea what Hacker School is, you should visit https://www.hackerschool.com. They describe it best; it’s like a writer’s retreat, for programmers.

I thought Hacker School would make a good transition into a technical role, and a great way to make sure my skills are up to par with the latest trends. I applied last year, but I completed my application in a rush- so I wasn’t surprised I didn’t get in (they have since modified their admission process a bit, so you can apply any time). I haven’t given up on it yet (so if someone at Hacker School is reading this, and you like what you see- you know how to contact me!), but I also realized I needed to finish some stuff here at home before moving on. For this reason, I decided I’m going to be doing my own developer retreat/bootcamp at home. I won’t be able to have the mentors they provide, or interact with other students, but I think it’s still worthwhile. Right now my programming portfolio is a bit thin, so this is my chance to improve it. I’m working on an outline of the “curriculum” and the projects I want to cover, will be making some modifications and posting it here later. If you want to check out my progress, subscribe to the blog via your favorite RSS reader. I’m putting together an email newsletter too, you can subscribe to that.

Did you know I also started a podcast with my brother? Go and listen to episode 5 where I talk more in depth about my decision to do this. Then subscribe and keep listening! GoCodeYourself.com

I’m just hoping it all works out in the end.

If you want to send some positive karma my way, or if you have any suggestions, here’s how to find me!

“I don’t know where I’m going from here, but I promise it won’t be boring.” – David Bowie