A lot has happened in the past few weeks!
First of all, I've finished up my 'Associate round' of certification with the 'big three' cloud providers (AWS, Azure, and Google Cloud Platform) by completing the AWS SysOps Administrator-Associate exam yesterday (Fig. 1). I've really enjoyed having this structured learning to complement the hands-on education I get every day at Ibotta!
Figure 1. My shiny new SysOps Admin-Associate certification for AWS wraps up my Associate-level cloud tour; I'll start preparing for Specialty and Professional exams in the coming months.
Next: my first open source pull request (Fig. 2) got merged not too long ago. As part of my 2019 goals, I wanted to at least submit a small PR to an open source repository that was important and interesting to me, and Terraform fit those criteria quite well.
Figure 2. It's not incredibly groundbreaking, but I, for one, was proud to complete my first open source PR. The research into this (and also my work with Terraform at Ibotta) has inspired me to learn more about Golang so I can make more substantial contributions.
Although that PR was quite brief in scope, I learned a lot about research and communication regarding open source software, and also was inspired to start learning much more about Golang (so I can contribute more substantial work to Hashicorp's repos in the future, for example). I'll post more on that soon!
Hi there! I wanted to give a quick 'solstice' update to show off my shiny new Azure and GCP credentials! I've been learning about both those cloud platforms at an associate level, and building some preliminary architectures in both spaces.
It's been fun! Preparation for each of these exams was pretty challenging because I was new to each platform and also because there are still relatively few review materials available for these (compared with AWS, at least). I'll round out my associate-level exams with the AWS SysOps Administrator exam in January, then switch gears to start actually building more stuff. Looking forward to it!
Figure 1. Azure Administrator-Associate badge earned in November 2019.
Figure 2. Google Cloud Platform Associate Cloud Engineer badge earned in December 2019.
A few weeks after coming back from HashiConf '19 in Seattle, I received notice that my Terraform Associate certification (Figure 1) was waiting for me! HashiCorp had been generous in allowing its conference attendees early access to the new Associate-level certifications in both Terraform and Vault, and I took the former while I was at the conference. I found the exam well-written, comprehensive, and fairly labeled as associate-level in difficulty. Preparing for and taking the exam was a good opportunity to learn more about Terraform than I'm exposed to (particularly enterprise-level offerings/services) on a daily basis at Ibotta. I really enjoy infrastructure-as-code, and hope to broaden and deepen my knowledge in this area in the months and years to come.
Figure 1. Terraform Associate badge/certification earned as a beta tester during HashiConf '19.
After returning from the conference, I also had an end-of-September appointment to expand my AWS knowledge base with the Certified Developer-Associate exam. This involved learning more about AWS-native CI/CD tools (we at Ibotta work a little outside AWS for our CI/CD processes in particular, even though most of our infrastructure is in AWS) and developer-oriented services (especially Elastic Beanstalk, Lambda, and X-Ray among others).
Figure 2. AWS Certified Developer-Associate badge earned in late September 2019.
Right now, I'm preparing for both Azure and Google Cloud Platform certifications before the end of the year. More on that soon!
Finally, and along the lines of the ongoing HashiCorp theme, I've put together a basic multicloud demo that's publicly/freely fork-able and clone-able. I created this project to illustrate simple multicloud principles using both a) the new free tier of Terraform Cloud (to deploy HTTP servers across AWS, Azure, and Google Cloud Platform) and b) a local deployment of HashiCorp Consul for cross-cloud service discovery and health checks. Feel free to browse and explore the code at your leisure and let me know your comments and criticism!
This week was a busy one, as I spent half of it attending HashiConf in Seattle, WA, followed by a late-night flight back to Denver for some data engineering work at Ibotta on Thursday and Friday.
I'm still trying to digest all the learnings gained from the trip to Seattle, and I'll post more on that between now and when I present a condensed version of my experience to other Ibotta coworkers in late October.
One of my favorite talks was by Tracy Holmes at HashiCorp; I've been looking for a toehold to step up and start making contributions in the open source world, and the outstanding backlog of open issues within the Terraform OSS repository (for provisioning and configuring infrastructure as code) could be a great place to start. Tracy's talk on becoming a contributor really cut through the intimidation I'd felt when thinking about how to begin.
Figure 1. A view from the crowd near the beginning of HashiConf 2019. The kickoff and other keynote presentations were here in the Regency Ballroom at the new Hyatt Regency hotel in downtown Seattle.
In parallel with presenting out some cloud-provider-agnostic findings to Ibotta in October, I'll also be adding a few more certifications to my learning path before this year's holiday season. I've signed up for Associate-level exams in both Microsoft Azure and Google Cloud Platform prior to 2020, and I'm aiming to round out the series of three Amazon Web Services Associate-level exams by then too.
It'll be an intense time, and I'm looking forward to engaging fully with it and sharing more soon!
A start on the AWS certification road; web/mobile development sandbox environment under construction
Hello again! It's been a while since I've posted, and I've been quite busy over the past year immersing myself in many different aspects of enterprise-level software development at Ibotta. We had some exciting news recently upon receiving a coveted 'unicorn' $1B valuation! And although that news was great, it's much more of a milestone than an end goal; we've got lots of ambitious projects in our pipeline and continue to work on scaling our tech stack efficiently and effectively.
During my time at Ibotta, I've spent some time working on backend APIs with our client-facing Transaction Data squad, and most recently transitioned over to a Data Engineering role. My current responsibilities have me right in the middle of a cross-functional effort to switch Ibotta's backend over to a more granular (and more real-time) event-based architecture. We're all looking forward to the possibilities that affords, including lofty new goals for 2020 and beyond. More on that soon!
While working with a variety of folks from Ibotta's Platform, DevTools, Architecture, and now Data Engineering squads, I've developed a continuously growing interest in cloud computing architecture and design. As a confirmation of that interest, I've started making my way through Amazon Web Services' (AWS's) suite of certification exams, beginning with the Solution Architect-Associate test. I've already got the Developer-Associate exam scheduled for late September, and will be taking the SysOps-Associate exam in December.
Figure 1. Passed the AWS SAA exam back in July! Now I'm looking toward the Developer-Associate exam in September and the SysOps-Associate exam in December.
If you've visited my sandbox environment recently (bradleypmartinsandbox.com), you may notice that my super-bare-bones Node/Mongo test website has been taken down for the time being and a placeholder 'under construction' page has been put up in its place (Figure 2).
Over the next year, I'd like to start putting up some more sophisticated portfolio samples that showcase my development in the tech space. A one-to-one EC2-hosted Node/Mongo app was cool to build and maintain for a while, but I think it'd be fun and invigorating to build a collection of resources showcasing a blossoming basket of skills, including serverless apps, Ruby/Rails webpages, and possibly even a mobile app or two!
I'll have more info over the coming weeks and months.
Figure 2. I've taken down my perfunctory sandbox 'switching station' app and the basic Node/Mongo web app that linked to (at bradleypmartinsandbox.com). Look for more news on replacement portfolio samples soon!
Hi all! For the past 4 months or so (that time has really flown by!) I've been spending most of my time and effort trying to become a better and more productive software engineer in my new role at Ibotta in Denver, CO. It's been an incredibly enriching and enjoyable experience, but it's also been difficult to carve out time to continue pursuing goals related to buttoning up applied math work I did in graduate school and the subsequent postdoc.
Still, as I've started to get my 'sea legs' on this new career path, I wanted to begin consciously making an effort to reboot those pursuits (as well as pushes toward other personal development goals). Toward that end, I've made some preliminary/perfunctory changes to titles and references of functions and drivers in the 2D wave equation examples shared in my public GitHub math repository (https://github.com/bradleypmartin/MathGraduateResearchAndCourseWork).
Although today's commit is certainly a low-effort change, I'm hoping that taking that small step (along with blogging about it here) can help set me on a path to complete more in-depth revision and clarification as I'd set out to do months ago.
Thanks for your patience and look forward to more info soon!
After committing a lot of web development and data science tutorial projects to GitHub lately, my collection of repositories was getting a bit bloated! So this morning, I collected a lot of the smaller repos into larger collections by subject area.
The only pettily unfortunate thing about this aggregation was that it nullified a lot of contribution/commit logs from the past few months, and as a result, I have a lot less shades of green populating my contribution activity tileset. It's okay, though; there'll be plenty of work to get "back in the green" soon enough. :)
Also, while I've been quite busy with some private projects for interviews over the past few weeks, I've also begun a React/Redux tutorial as planned. We'll see what other obligations pop up in the next week or two. If I'm free, I'd like to focus on blasting through that and then possibly on to a Cassandra-backed API project, possibly with a Java driver.
Figure 1. Although some of the code within these aggregated folders still needs cleanup, I feel a lot better about the high-level structure of my GitHub repos.
During the past week or so, I've been laying more groundwork for my web application sandbox. Although it's still very spartan in style and spare in content, the sandbox landing pages (http://bradleypmartinsandbox.com) are now quite a bit cleaner. You can check out a screengrab of one of the pages below, or head to the site yourself to take it in! I've also built in functionality for the sandbox page to link to other servers hosting specific applications. Right now there's only one bare-bones app being served (linked in the greet button of Figure 1), but I'm hoping to expand this selection soon (and with much more substantial applications).
Figure 1. Here's a shot of the cleaned-up 'secret' page from my last post (now in the 'appselection' route). It now serves as a link to other web apps I've built, but you still get a kitty picture!
I'll try and involve many of these JS tools as my sandbox/portfolio applications become more substantial.
Figure 2. A D3 interactive cryptocurrency display allows users to select a specific date range for further exploration, and to choose between several coins for visualization.
Figure 3. This clone of a noteworthy, animated presentation by Hans Rosling of gapminder.org shows relationships between GDP, life expectancy, and total population (circle area) for different countries (individual circles) on different continents from the year 1800 up to the present. D3 and its community make a ton of cool data-driven functionality possible, and I'm looking forward to using that in upcoming projects.
More progress in practical app development: linking together a new domain name, recent tutorial work, and EC2 instances
One web development 'next step' I was looking forward to (after completing a whole bunch of back-end tutorials and one whopper of a full-stack tutorial mentioned in the last post) involved branching out by deploying a couple simple apps on my own via AWS EC2 instances.
The end of Colt's Web Development course had students setting up a deployment of the YelpCamp project through Heroku.com. I thought it was neat to watch those videos and learn about another option for deployment, but since I've already done a bunch of learning in the AWS ecosystem, I thought it would be fun (and practical!) to start blazing my own little trail by deploying on AWS instead.
At the same time - and since I'm planning to be pumping out quite a few more projects in the near future - I thought it'd be a good time to register a new domain name for exhibiting a budding portfolio. So, using AWS's Route 53 service, I got hold of bradleypmartinsandbox.com (no prepended 'www') for hosting my sandbox of new projects. [Note: for the next few weeks, it may be something of a crapshoot as to whether or not you can follow this link and find anything interesting. I'll probably be putting it up and shutting it down a lot while I figure out how I want it to function for the long term. I'd like to reach a state where it's highly available and can route users to a variety of project showcases. More on that in the future!]
I enjoyed doing my own Googling to roll through the process of configuring an EC2 instance to host one of the applications we made during the web development bootcamp. Loading up an Ubuntu image with many of the required packages for the simple user authentication app (pictured below) wasn't too much of a chore, especially with the help of the package.json file to help manage dependencies. The densest new material (though not that bad, either) was learning how to use NGINX to route HTTP traffic to port 3000 from port 80 (so I wasn't routing in user traffic with sudo privileges!) and making the slight changes to the app.js file to accommodate this protocol change.
There'll be much more to share soon. Thanks, as always, for reading, and enjoy a screenshot of today's HTTP interaction with my AWS EC2 web app.
Figure 1. Screenshot-ception! This is a capture I took with a basic user authentication app served up at my new sandbox location (bradleypmartinsandbox.com) through AWS EC2. MongoDB handles the data for user authentication, and user login simply routes to a 'secret page' where I've spat out some unstyled HTML and a link to a recent project screenshot (that you can probably find referenced a few blog posts ago). I'll look into HTTPS routing and user-friendly persistence of the sandbox domain soon (along with adding more interesting projects, of course!).
As of the post last week, I'd been exploring a number of database technologies and had set up a simple serverless chat application via AWS Lambda (thanks to the help of Frank Kane and Brian Tajuddin's udemy.com course on the subject). At the end of the post, I briefly mentioned wanting to explore more front-end stuff (such as the HTML, CSS, and JS mentioned in this post's header) so I could move toward having more agency in creating web apps that are completely my own.
Toward that end, I threw myself into Colt Steele's Web Developer Bootcamp (also on udemy.com) and was blown away by how much value I got out of it. Not only did I get a ton of practice with HTML, CSS, and JS, but also I got a bunch of exposure to even more backend tools, conventions, and languages like Node.js, Express, Mongoose, RESTful routing, and MongoDB. I still have a ton to learn in the web development space (and probably always will!), but feel much closer to being confident in spinning up my own deployable (and hopefully functional!) apps.
I think this is as good a time as any to lay down a tangible "pivot point" in my development as a software engineer. I love taking courses and learning new stuff in a structured environment, but I think it's equally (if not more) important to be starting up my own projects and getting them deployed. Stay tuned for another post about milestones, challenges/successes, and progress during the next week. Until then, I'll share some screenshots of progress on the YelpCamp app we built as a final/cumulative/ongoing project in Colt's web dev course.
Source code from my time in the course can be found at my GitHub location (https://github.com/bradleypmartin/webdevbootcamp). Different versions of the YelpCamp project code are in there; the photos below are from the YelpCampFinal build. There's still some more functionality that Colt and his TA's have been adding over time (and that I have yet to put in the app) like fuzzy search, password reset, interaction with Google Maps API, etc.... and when I include some of those extras, they'll be included in the Final build as well.
Figure 1. Landing page for the YelpCamp website. The CSS for this landing page was pretty cool to work through, as it involved the display of a transitioning slideshow of 5 photos (one of which is shown in the screengrab here).
Figure 2. Index page for the YelpCamp website. In the top-left corner of the photo, you may be able to pick out hints of authentication/authorization functionality, which was indeed a cool part of this course. The material we covered here was a good complement to the AWS Lambda project discussed in my last post (where we were using Cognito to take care of authentication).
Figure 3. The YelpCamp comments page was an excellent exercise not only in additional functionality of the website, but also in nested application of RESTful routing (for Create/Read/Update/Delete operations on comments for each campground).