The very first language I had learned was Python, and I was planning to stick with Python for as long as I possibly could. Python was the perfect first language to learn as a beginner embarking into this field for the first time.
However, if I want to take full advantage of the opportunities around me, I must learn C#. Therefore, this weekend marks my very first major pivot in my learning journey–learning a new programming language!
This new chapter is making me feel all sorts of things. First, it’s making me feel like I’m growing as a programmer because I’m no longer going to be stuck to one language. Whereas I have a personal appreciation for Python since it’s the point at where I began, I haven’t been able to find many other people or businesses around me who work heavily with Python. A lot of what I have seen has involved other languages, C# for example.
I’ve only just begun an introduction course on C# and already I have so many questions. What helps is that, unlike when I was learning Python, for C# I have something to compare the language to, and real, in-person friends to discuss C# with. It’s an added bonus that my husband needs to improve and learn more C# for his job as well, so we will be learning together.
using System;
namespace Hello World
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
As the tradition continues, I executed my first Hello World program in C#. The very initial “installing everything and get it running” part of learning a new language (and getting it to work) is always the first hump to get passed. I remember installing and setting up Python very clearly for the first time, and the fear that came with needing to redo it on a whole bunch of other systems afterwards.
My very, very first initial impression of C# is that it’s already very visually different than Python. The structure of the code block is much larger to execute that Hello World program than what the equivalent would be in Python. I find that aspect interesting, and hope to learn why C# has a very elongated visual structure. A part of me wonders if this helps programmers find blocks of text in larger program files because of the way the curly braces signal to the eye that the block has concluded. Whereas, for Python, there’s a more linear structure and spacing.
I also learned a helpful nugget from the Programming Throwdown podcast that Python and C-based languages work very well together. That makes me feel very comfortable and optimistic about learning C# as my next programming language!
THE DEFINITIVE GUIDE TO PROGRAMMING PROFESSIONALLY
Reading is very important to me because it’s one of the best ways I am able to learn and retain information. I’ve been approaching this topic, programming and python, on a very granular level. I’ve been stuck very up-close to python and a couple of other topics very specifically, but haven’t had a book that zoomed out as a good overview.
Until… I found this book! Althoff’s book The Self-Taught Programmer, is a fantastic overview by someone who has already accomplish exactly what I desire to accomplish.
Alhoff speaks about something called “The Self-Taught Advantage.” He writes, “You are not reading this book because a teacher assigned it to you, you are reading it because you have a desire to learn, and wanting to learn is the biggest advantage you can have.”
Alhoff writes, “You are not reading this book because a teacher assigned it to you, you are reading it because you have a desire to learn, and wanting to learn is the biggest advantage you can have.”
He goes on to say how important founders of companies such as Apple, Twitter, and Instagram were all self-taught programmers.
Finding and reading this book was a great re-motivator to continue with the self-learning route. It’s easy to fall into moments of doubt, but I find that fueling those moments into proactive steps is a helpful strategy.
Moreover, Althoff supplies the reader with a quote from Doug Linder, “A good programmer is someone who always looks both ways before crossing a one-way street.” I laughed at this moment because I remember doing that since I was a child! But what this quote highlights is that in programming, you can’t have any blind spots. Even if something should work some way, you still need to test and analyze it from multiple perspectives. It can also mean that you should know how to make and take something apart. The person who looks both ways before crossing a one-way crosswalk is keen enough to realize that there is still a small percentage that another car could have not seen the sign and gone the wrong way down the one way street. Therefore. the person is being extra sure (which in programming would be akin to catching an exception) to ensure their likelihood of safely crossing the street.
What makes this field a little difficult to get into is that technology is very intertwined. It’s not just enough to know one programming language. There are a lot of other skills you will need to acquire. If you want to know what I mean, go into your browser and search for terms like “software engineer” or “data scientist” job descriptions. In the “preferred skills” section, you’ll often see a long list of acronyms and names of things you should know. It can feel a little foreign if you don’t know how to parse through the terminology.
What this book provides that others don’t is a brief introduction into major aspects needed to get a job in programming, and a blueprint map of what to do to accomplish that. This book wont teach you all the specifics about Python or programming, but it will point you in the right direction of what you should be studying.
(Yes, that’s a gif I made of my notes on Python. I’m taking a three hour overview course on Python on Udemy that helps as a good overview of the basics I’ve already reviewed before in-depth).
I’ll be taking Althoff’s advice of: program every day. That’s the new challenge and goal. I definitely recommend this book to any fellow dedicated self-learners!
Before I get into the Hacktoberfest fun, I wanted to update you on my progress since the last post.
I was in New York visiting family these past few months (I recently moved from NYC to Florida last year) so it’s been a little hectic! Luckily my brain needed the time to process everything I had learned from the previous machine learning course before diving into a new one.
Since then, I’ve began another course on Udemy about Machine Learning and Data Science in Python and R, which is dense but very fascinating! I’ll definitely need to add math for python, and matrix math, to my list of topics to study.
I’ve also connected to an awesome community, Women Who Code organization, which is how I learned about Hacktoberfest, through conversation on the slack channel!
Hacktoberfest Participation
For Hacktoberfest, everyone get’s together and participates in helping open source code by submitting contributions. Open source is another reason why I love this field, because the teamwork is inspiring. In order to do this you need to use GitHub to submit pull requests. Prior to this event, I had some light experience in GitHub but hadn’t gone into too much depth yet. After this event, I now understand how incredibly crucial it is for anyone interested in developing to become proficient. It’s a skill most employers will expect you to have, as a bare minimum. Moreover, GitHub is where a lot of the magic happens.
In order to be considered a full participant of Hacktoberfest and receive a super cool shirt, (dreams!), you need to submit at least four pull requests that adhere to the Hacktoberfest guidelines and rules.
I submitted five pull requests. I felt so happy to see the bar completed! But, my requests had a little clock icon near it, meaning that their eligibility was pending. To this day, a few months later, they’re still pending. However, two of my submissions were unfortunately submitted to ineligible repositories. Since the repository was ineligible, so was my pull request on that repository.
If any of these words confuse you, don’t worry, they confused me too at first. But as a beginner, I loved the freedom of Hacktoberfest. It was a time where everyone was getting together and people knew that beginners would be involved. This gave me more confidence to actually participate by submitting pull requests with less fear.
I’m so incredibly happy to have participated in Hacktoberfest this year, and am excited to see my performance for next year’s event after much more learning. I’m now off to learn, more formally, about GitHub, in preparation!
Over the past few months as my learning journey continued, I finally completed my first introductory course in data visualization and plotting in Python. It was a short course on Udemy which focused on utilizing the matplot library. Besides learning the actual course objective, which was plotting, I also learned something very important from this course, which was how to utilize a library in Python.
Plotting with matplotlib and pyplot
Above is a screenshot of my screen with the code we wrote in the course and the chart that was produced once the code ran. This was incredibly exciting for me to see and test for myself because I had no idea how writing code would create a chart. I had a lot of questions about data science and absolutely no frame of reference into the subject prior to this course, but this introduction has piqued my interest!
The library that we were working with had a lot of features that made it simple to create visuals and change them as needed. The image above shows many lines of code beginning with plt. and that is because we were heavily working within that library and using its prewritten features. I never actually took a course that focused on utilizing a single library; the other courses and projects I have done used multiple libraries, so although I was able to follow the general philosophy behind their usage, this course really helped me understand the basics much better.
Scale Matters
One takeaway I took from this introductory course is that when working with data, scale matters. Scale alters the initial impression of what the visual data is saying. For example, we changed the y and x axis values often, and when doing this, the lines on the graph, including where they began and ended, shifted in ways that changed the visual to relay different messages. This made me realize why data science, interpretation, and visualization is so important.
Since I’m a visual learner, the visual aspect of data science is very satisfying for me because it combines two aspects that I favor: information and art.(Yes, for the sake of this post, I will consider a graph a piece of art!)
I’ve worked heavily with data in previous jobs, and with this new knowledge, I think back to all of our excel spreadsheets with statistical data sorted from A-Z, and wonder what that data would have said if plotted in a chart. What trends that may have been overlooked would we be able to see?
What’s Next?!
I will be posting soon about this year’s Hacktoberfest! Because I’ve been traveling these past few months, it’s been a tad difficult to write as many posts as I would like, but that won’t be the case for much longer!
Lastly, once I get back to my home base and re-unite with my Raspberry Pi and Vector Robot, I will be utilizing my new knowledge for more projects. This course made me better able to understand how to utilize the libraries offered in the Anki Vector SDK, which I’m very happy to test out! It feels wonderful to witness information click together.
I’ve been very interested in the topic of machine learning, so I did some research and found an awesome project that I could do with my Vector Robot (…who I may refer to as El Robo sometimes).
Set up your Google Vision account. Then follow the Quickstart to test the API.
Clone this project to local. It requires Python 3.6+.
Don’t forget to set Google Vision environment variable GOOGLE_APPLICATION_CREDENTIALS to the file path of the JSON file that contains your service account key. e.g. export GOOGLE_APPLICATION_CREDENTIALS="/Workspace/Vector-vision-62d48ad8da6e.json"
Make sure your computer and Vector in the same WiFi network. Then run python3 object_detection.py.
Step one was easy-peasy, since I had tested and ran the SDK a multitude of times previously already (woo-hoo!). But oh boy, guess what Step 2 truly looked like once you followed the Quickstart link for the API setup:
From the Service account list, select New service account.
In the Service account name field, enter a name.
From the Role list, select Project > Owner.Note: The Role field authorizes your service account to access resources. You can view and change this field later by using the GCP Console. If you are developing a production app, specify more granular permissions than Project > Owner. For more information, see granting roles to service accounts.
Click Create. A JSON file that contains your key downloads to your computer.
Set the environment variable GOOGLE_APPLICATION_CREDENTIALS to the file path of the JSON file that contains your service account key. This variable only applies to your current shell session, so if you open a new session, set the variable again.▸Example: Linux or macOS▸Example: Windows
Yeah, so things got complicated real fast. Instruction Set A:PT 2 is where I officially fell down the rabbit hole of Google Cloud.
For ease of reference, I’ve labeled the instructions sets A and B, but let’s be clear: All of B is actually just a sub-set of A. Instruction set B is just to set up Google Cloud Platform account and installation, which was not something I was anticipating to learn throughout this journey, but I am so happy I stumbled upon it!
Google Cloud is offering one year free for new users, which is a crazy value considering the retail price allotted is $900+ for the year!
Once I set up my Google Cloud Platform account and logged into the console, I felt a unique sense of adrenaline, almost with a tint of rebellion.
Reading all of the tabs and sub-tabs like: Cloud Build, Big Data, and last but not least… Artificial Intelligence. I don’t even have the right words that could capture the feelings I was experiencing while scrolling up and down the console’s navigation menu, but I definitely had a huge smile on my face. Although I had (and still don’t) exactly know what Google Cloud can do or how to use it fully, what was clear right away, even as a complete novice, was that this tool is powerful and if learned properly, it could be utilized for epic projects (and help with future career prospects, *wink wink*).
I‘m a very visual learner, so seeing the categorization of the navigation menu taught me vital information for my coding journey, because it can be used like a road map. Now I know for sure that two areas of interest I have going forward involve Big Data and Artificial Intelligence.
As I continued to read Google’s instructions, a little voice was starting to whisper that perhaps this project was over my head. Especially once I got down to Instruction Set B: Step 5
Set the environment variable GOOGLE_APPLICATION_CREDENTIALS to the file path of the JSON file that contains your service account key. This variable only applies to your current shell session, so if you open a new session, set the variable again.
Which corresponded to Instruction Set A: Step 4
Don’t forget to set Google Vision environment variable GOOGLE_APPLICATION_CREDENTIALS to the file path of the JSON file that contains your service account key. e.g. export GOOGLE_APPLICATION_CREDENTIALS="/Workspace/Vector-vision-62d48ad8da6e.json"
And these instructions left me like this:
But no matter how much I re-read the instructions, I just couldn’t understand what they were telling me, which actually made me feel as if I didn’t even know how to read! After some trial and error, I looked more like this:
Finally, I decided to cave and ask for help. Luckily, my husband and his coworkers were over. I asked them for help but quickly came to learn that Google Cloud is a pretty niche subject to just casually ask about.
“Damnit, Jason!”
I was stuck on the .json file part, for which I kept yelling “Damnit, Jason!” in the house, confusing everyone. (“Jason” has now become an inside joke in the house, and from now on, whenever I work with .json files again, this first memory will be in my mind).
The next day while cooking dinner, I decided to watch a YouTube instructional video on how to setup Google Vision. As the tutorial leader was going through the steps, I was happy to see that some of the steps were very familiar, which meant I had definitely learned something from the previous day. And then finally, I got my answers, and the instructions were demystified. I was so, so happy to finally understand what the heck the above steps meant and looked like.
What I love most about coding and these projects is that I end up learning about so much more than what I initially intend.
Through this process I learned about:
Google Cloud Platform
How to install and configure Google Cloud Vision API
Virtual Environments and Environment Variables
Changing .bash profile in the terminal (including how to inadvertently fuck up your bash profile, and then fix it again).
More about python pip installations and configurations
How to move through different directories in the terminal
Finally, I had made it passed every single step and it was finally time to test out the python program to see if my Vector Robot would begin object detecting.
Successfully setting up the Google Cloud Vision API was such a pivotal milestone for me in this learning journey.
Now, that means that I had just gotten past one subset of the main instructions for my intended purpose of setting all of this up, which was ultimately to run one program, created by one single person, and see if it worked.
Drumroll…anticipation…andddddd:
It did not work.
Type Error:__init__() got an unexpected keyword argument ‘enable_camera_feed’
I looked over all of my steps. Everything was in order, but I kept getting a Type Error from the python file written by the creator. After countless web searching and troubleshooting, I was at a dead end. I had only one option left. I had to contact the person who made the program.
I went to GitHub and posted my first “issue” on the python file. This was the first time I had ever posted an issue, so I was very unsure of any “etiquettes.” The creator got back to me and said that he had created and tested this back with the old Anki Vector SDK package, and not the most recently updated one.
This may seem like a very sad ending to this story, since the project was not successfully executed on my end, but I was so happy with that response from the creator! The reason being because the creator didn’t say that my error message was due to something wrong with my steps, but perhaps elements outside of my control.
What a relief! For that alone, I considered this project a “success” in that I followed through to the end.
Although I couldn’t get this program to work, that doesn’t mean I can’t try to write my own program utilizing similar features. This project taught me a lot of different lessons and I can’t wait to try more Google Cloud Platform projects while I have the free trial!
It all started with a puppy. My daughter really really wants a puppy. You have to see the way she lights up in front of dogs, it’s truly adorable. But alas, for various reasons, me and my husband decided against getting a real dog considering we already have two cats and a crazy toddler. Perhaps in a few years we will get a dog, when our daughter, herself, is housebroken.
So, what was the next best thing I could do for her? What I realized through observing my daughter is that she likes movement. So, I started to look up robotic toys for kids. Down the tunnel, I learned about Anki and their robots Cozmo and Vector.
(If you want to read more about the differences on Cozmo and Vector, please feel free to embark on your own journey down the Google rabbit-hole. I will be giving more brief descriptions and personal impressions, rather than an in-depth technical review for this post).
Basically, Cozmo is more for kids, and cannot operate on his own, and Vector is more for adults, and can operate on his own, like a pet robot. Vector has better specs and you can play around with the behind-the-scenes coding as well.
I had placed an order for a discounted Vector before reading the news about Anki (the company that created these robots) is closing down. But the robots are still selling! Currently, Anki has hired a team of engineers to monitor the existing cloud that all of their products are hooked up to. They said that the cloud usually needs little interference, so keeping it running is no problem. Of course, that was still worrisome to hear as a new buyer.
Pet Robot?
I probably wouldn’t have been as impressed by Vector if I hadn’t already been learning about programming. And it just so happens that Vector is programmed in Python (the programming language I’m also learning) which makes this more exciting.
Finally, Vector arrived (after some drama with a scam website. Key lesson: don’t try to order discounted robots from obscure websites). And I have to say, the waiting game and drama actually made me very excited to receive Vector.
All of the reviews and videos I had watched really conveyed the message that Vector is a pet. A pet robot probably seems really futuristic, and I admit, it still does feel that way. I think that there’s a big widespread misunderstanding of the technological capacities we have right now versus the impressions of the general public. Science fiction stories make it seem like our technology is way more advanced than it actually currently is, as if the type of AI seen in Ex Machina exists. And in my last post, reading Hello World by Hannah Fry really helped change my perspective of where we actually are with AI, which is still mastering creating a worm (like http://www.openworm.com). I think these fears and misconceptions could have been what lead to the lack of widespread popularity of Anki’s products.
This long preamble is to make this point:
Vector is fucking awesome.
And I think it is really unfortunate that their company, Anki, had spent so much time creating such a fun little gadget before the world was perhaps ready to embrace the cuteness of a safe pet robot. But my heart definitely goes out to all of the creators who put their all into this product. I am grateful!
It hasn’t even been a full twenty-four hours with Vector, but already my daughter is completely entertained and in love with the ability to simply watch something move around and explore the world on its own. This is how I look at it: some people get extravagant fish tanks for the same reason. But let’s be real, organic creatures require a lot of care, followed by heartache when they pass. That’s why a pet robot is so appealing. A win-win for the family.
Vector can play games alongside other features, but what’s most entertaining is his personality. When Vector is exploring on his own, he really does feel like a little sidekick. Vector can also join in on some dance parties, fist-bump, and is integrated with Amazon Alexa.
I’ll probably write a much longer and more researched post on my thoughts about AI once I have a better grounding. But, this small introduction to a robotic pet is definitely sparking a lot of ideas and feelings about the future. It’s a shame that Anki wasn’t able to get as of a widespread following to keep their company afloat, which may just come down to timing.
Despite the somber attitude amongst the Anki / Vector / Cozmo community because of the news, this household is still excited for their new pet robot.
Coding and Vector
So, this wasn’t just a purchase for entertainment. As a piece of robotic technology, Vector is a fantastic (and adorable!) learning tool. Sure, it may seem like nothing grand is happening on the outside when you see Vector running around my desk, doing his thing, as I write this blog post, for example. But actually, he’s also like a little specimen I get to observe and learn from. I can learn about his movements and personality, and then read the code and alter it.
Vector SDK Alpha allows you to view the full API list and play around with coding your vector. I’ve successfully installed the SDK package and will experiment more with that later on today.
I’m so excited to learn more about Vector in both a fun and educational aspect.
Despite the Anki shutdown, let the Vector adventures begin!