Assess API version with Spring Boot Actuator

Production-ready endpoints are key to observability. Most java developers are aware of Spring Boot actuator, but if you aren’t, don’t’ worry! Here’s a great write up on the subject. Also, official documentation from Spring‘s is worth a read to understand.

And unless you have a well-planned API versioning by following URL versioning or Accept-Header versioning (interesting list of resources to decide on best approach here), you can easily tell whether an endpoint is serving the intended set of changes by leveraging source-control data, exposed conveniently by actuator endpoint.

I’ve just pushed to GitHub a minimal tool called api-version that uses curl, jq, and the Spring Boot Actuator to give you the exact commit message and id to contrast against your git repo. You’ll be able to assess whether the expected changes are deployed to an instance in seconds.

Please leave your comments here, or feel free to report any issues to the GitHub repo as well.

References:

Spring Boot Actuator: https://www.tutorialspoint.com/spring_boot/spring_boot_actuator.htm

Official Spring Boot Actuator example: https://spring.io/guides/gs/actuator-service/

Discussion on API versioning strategies: https://developers.redhat.com/blog/2016/06/13/api-versioning-methods-a-brief-reference/

API Versioning tool: https://github.com/rbuitragoc/api-version

 

 

Programmers: Before you turn 40, get a plan B

A little bit of sense to help in identifying the path to follow in this career.

Improving Software

Welcome to geezer town, junior.

While researching my recent article, “Age discrimination and Programming Jobs” , I discovered a 1998 Op-Ed piece from The New York Times that cited some startling statistics from the NSF and Census bureau about the longevity of a software engineering career.

[S]ix years after finishing college, 57 percent of computer science graduates are working as programmers; at 15 years the figure drops to 34 percent, and at 20 years — when most are still only in their early 40’s — it is down to 19 percent. In contrast, the figures for civil engineering are 61 percent, 52 percent and 52 percent.

RetiredProgrammerButtonI find the defensive tone of the article and the use of dubious sampling of only computer science graduates to support its conclusion undermines its credibility. In a lot of ways, the Government has been very slow to grok the software engineering trade…

View original post 1,078 more words

JCONF Colombia 2019

Lately I have attended to a number of conferences on technology, but I must say that I enjoyed JCONF in a different way. For once, it was very nice to meet many people that have worked with me during these years (@gaijinco was on fire at the event!), but also because of realizing how vibrant and diverse the Java community is nowadays.

Despite being the first Java Conference organized by the JUG groups in Colombia, the organizers pulled out a successful event. As always, there must be a few details to work on for next time but I’ll skip commenting on that and focus on the learning, which doubtlessly it was the biggest takeaway from this conference.

The conference started on Thursday with a limited-access workshop with Venkat Subramaniam (@venkat_s) about Reactive Programming Workshop. Although I couldn’t get an entrance, my colleague Oscar did and shared a nice few pictures from the experience).

On Friday, also in Universidad Luis Amigó, 3 workshops were offered to the community:

  • SERVERLESS ANALYTICS FOR STREAMING DATA AND DATA LAKES
  • SERVICES MANAGEMENT AND DEPLOYMENT WITH ISTIO
  • JAVA EE ON AZURE MAGIC MYSTERY SHOW

I don’t have much detail about the two latter, but as I joined the first which was facilitated by Frank Munz (@frankmunz), I was quickly introduced to the AWS Lambda services and a a nice lab to set up and test streams producers and consumers plugged to a web app with online (I think I missed the connection to wildrydes.com initially but it now makes total sense). It’s a rather comprehensive lab workshop that I must be able to complete during the following days.

That afternoon the talks were at Universidad de Antioquia main campus and were amazing. A few notes about them:

Spring boot with Mark Heckler (@mkheck)

Spearheading the future of Programming with Venkat Subramaniam (@venkat_s)

Culture of Innovation with Frank Munz (@frankmunz)

On Saturday, the venue changed to Ruta N (one of my favorites places for conferences) and they turned to be more code and practice oriented*:

* I had to skip Mercedes Wyss great talk on Modern IAM but I managed to retrieve her slides, so here they are for your reference:

https://github.com/itrjwyss/ModernIdM

Then I attended to the following ones:

Reactive Revolution with Josh Long (@starbuxman)

Twelve ways to make your code suck less (@venkat_s)

Arquitecturas Híbridas (Ubaldo Villaseca)

Serverless Java, beyond Lambdas

JavaEE, Jakarta EE, Microprofile, or all of them (@DaschnerS)

Reactive with Angular and Flux (@loiane)

Bootiful testing (@starbuxman)

JCONF Colombia 2019 left us with great pictures with amazing lecturers and leaders:

Also with the team at the first serverless lambda with AWS workshop:

And last but not least, my bounty!

I know it’s been quite a while, ant that’s why I wanted to retake blogging with a juicy entry. And this time I intend to keep this blog updated with findings, events and news, so stay tuned!

(Old) Technical books found… and gone

So yesterday I found these two titles accumulating dust in my shelf:

Ajax on Java

Flex on Java

http://a.co/7xSIxWB (no preview *)

I didn’t have the initial impulse of giving those away, as most people I’ve known who are constantly investing in learning would tend to keep a hold on acquired books. But in the case of a specific technology you’ve probably noticed the interesting fact that their raw academic value would decrease with time (see the law of diminishing returns in economics explained here).

But – what about their practical value, associated with the handy notes and the occasional cheatsheet included within? That one had me pondering for a little longer. Yes, I could end up revisiting Ajax someday, if ever, and try doing it with bare java servlets and javascript (JQuery?) but… the likeliness of that occurring is noticeably low.

Finally, I decided to simply post to my team’s slack announcements channel and someone working in UI for years now replied with a nice “I’m not a java guy, but those sound interesting, can I take them?”.
Some minutes later when he dropped by, the following short conversation took place:

(Me) – “… So you’re into learning java now?”
(Him) – “Not really; but I have to integrate sometimes with Java systems and I would like to understand that part better”.
(me) – “Well, you may guess things have moved a bit in Java after that, you know…”
(him) – “Yeah, I’m counting on that!”

We chatted for a little while and concluded that at any time, those books are good reading for getting perspective of whatever we’re studying today. Editorial work, research, and proofreading are often lacking in web material which is nowadays our main source of technology-specific knowledge.

Having the chance of reading a little bit about origins, purpose and implementation details of a given technology is always a plus, so I’m glad I could help someone approaching those technologies that helped to shape what Java is today.

* A note on Amazon Embed links: If there’s a Kindle version of the book, there’s an embed link (either available in the product page or Amazon can actually expand the link for you on some sites). That is the case of Ajax on Java; sadly not the case of Flex on Java (sorry Flex, you just didn’t make it that far)

Gherkin + Mocha

A friend just published (here) an integration for Mocha using Gherkin language (akin to what Martin Fowler described as a “Business Readable, Domain Specific Language”).

Why is it needed? Here’s a brief sample of how mocha runs normally:

Just-Mocha

With Mocha-Gherkin-UI you’ll have an output like this one:

Mocha and Gherkin

In brief, what you gain is the ability to describe a test by providing a broader context and add tags which have some obvious gains such as being able to use issue tracking tools API to automate the workflow of test executions,  coverage, and whatnot. Also, Gherkin support adds the possibility to define a steps-based flow, which, in some circumstances when the test flow is complex it’s highly desired to be able to do that.

Andrés will be glad to receive feedback from anyone interested in this, so feel free to give it a try and let him know your thoughts.

Velocity Partners Hackaton 2017

A friend just posted a summary of an exciting hacking day at the office. For me, it was quite a challenge not to be hacking away but acting as another organizer and judge.

Making the Hackathon interesting to different types of attendees is a challenge on its own – leave alone the logistics. So many details were worked out in planning meetings some weeks before the event. The team at VPC took care of the logistics, and the actual judgment and qualification of each project were left to the judges’ team.

A primer on counting the uncountable matter. How do you rate innovation? Collaboration? How do you quantify the social impact? These were questions we faced when tasked with designing the scoring and a system to reduce the impact of (unavoidable) bias and subjectivity.

A good read we tried was Laurenellen McCann‘s “So You Think You Want to Run a Hackathon? Think Again“. It was a really helpful reading in that we were able to revisit our goals with the Hackathon. Was it a community-building event? was it a learning event? a bit of both, it turns out.

Then a friend came up with clever ideas on how to measure it by keeping it tied to those refined goals. “a team gets 0 points if there’s already some project which achieved the same goal they’re aiming at achieving. In turn, they’ll get 1 point if, despite an existing project solves the target problem, the team solves it in a faster, better, clearer way than the original implementors… and so on” – thus, we’re assigning a value scale to a series of incremental milestones that a project can meet under certain categories.

And how can all the judges complete the task of quantifying each team under each category, especially when not all judges have the same expertise/experience? Well, that requires team work and coordination. Let’s say, there’s a psychologist in the judges’ team and the category is “learning”. They can feel more comfortable with annotating on a behavior after interviewing a team’s member.  Instead, an evaluation of “MVP” can be a bit more challenging for the same judge.

By keeping these things in mind, the judges’ team can prepare examples and train the staff ahead so real-life situations may not be so surprising. It’s not a silver bullet by no means, but it does give all judges a sense of preparedness that allows focusing on the important.

How about bringing some closure, after the winners were chosen and awarded? A closure is important (some more structured events can leverage closure with relative ease). As a matter of fact, we’re a few days from meeting with the teams to thank them, but also for socializing the lessons learned with the greater community of the company. We want to highlight the categories in which some projects shone brightly and a bit of insight on why we chose the ones who ended with the prize. And last but not least, we want to gather the feedback from both participants and spectators.

This was an enriching experience from which I learned a lot. I can’t help thinking about signing in for the next event with a couple of ideas I have in my backlog. But being with the organizer’s team taught me a lot about respect, transparency (it wasn’t bad at all, but we can do better!) and why not, also patience.

 

Viewing markdown files on Linux console

Yeah, someone pulled that off. I think it’s awesome! I used npm to install it:

$ npm install -g mad

After trying it, I’ve noticed it wasn’t applying the styles correctly, and also was trimming the first character of all styled blocks. That had to be something with config, so I tried creating the file at [INSTALL_BASE]/etc/mad.conf with the following contents:

heading: 1m
code: 90m
strong: 1m
em: 4m

For detailed instructions the code is hosted at Github: https://github.com/tj/mad

KnightWatch v1

So my friend slashie is working on a much needed, more popular knightswatch version for android smarwatch.

Slashie's Journal

It has come to my knowledge that there is still some people in the world who cannot afford a fine watch such as the Roger Dubuis Excalibur Knights of The Round Table, this saddens me a lot.

That’s why I have decided to do a small side project along with my pal, Giovanny Ramirez (same guy who did the illustrations for the latest Ananias Crowdfunding Campaign), we are going to create a similar fantasy watch, but a tad more affordable for the common man, running on Android Smartwatches.

So far I’ve been fiddling with Android Studio, trying to set up the correct combination of SDK / AVD / Tools etc. I had to give up with the emulators for Android Wear; they simply didn’t work (the watch face never showed up) and my 4GB MacBook Pro is just too weak for android emulation (it works perfect for JS dev but this is another…

View original post 161 more words

Task Scheduling SaaS – Free Options?

I am currently working on a project which has the constraint of leveraging only on free resources: code repo, bugtracking, team communication, build/deploy, infrastructure, monitoring, data storage, hosting. Although this limitation makes the task a bit more complicated (you can do one-stop-shop sometimes, right rackspace? right?), it also made it a collection of interesting challenges, latest of which I summarize below.

I was looking for FREE SaaS solutions for scheduling a simple http request but all I’ve got* was webscripts.io and iron.io – both non-free in their useful version (webscripts.io has a free version but erases all your scripts after 7 days).  Anyway, googling the old way got me thinking about how do we use filters in search (if we do at all) given our main search engine has became so smart. Tried adding exclude keywords to the search and I ended up with this: https://www.google.com.co/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=scheduler+as+a+service+-windows+-spring+-java+-desk+-owner+-technician+-car+-medical+-shavlik+-student.

I have to add to that the fact that I’m currently hosting such project in Heroku and the temporize add-on is very promising, but that is also requesting at least credit card information.

* Actually, I also found wsscheduler, an old-looking and apparently unmaintained service (ToS dated 2006) that frankly didn’t gather enough merit to be considered seriously.

Will continue my search and update this entry with my success (or even failure) story.

[Update] I’m currently implementing the https keepalive GET request via anturis.com, which turns out to be very easy to get going and allows for quite a few different options.

[Update] After a few months I wish anturis had also a way to schedule, even a simple GET request. Don’t get me wrong, the keepalive workaround still works, but I’m really more into leaving aside the need to do this and fix the issue. Still need to study Node.js more in detail!