8 March 2015
I’m a fan of CBC Radio 2. Okay, that’s not exactly true, but I do have my $10 radio alarm clock tuned to 94.1 FM to wake me on weekdays. I often find myself in a stupor or only semi-awake when the tunes start blasting away before dawn, and as such, I often have trouble remembering what was exactly on the radio that morning. However, once during the day I remembered that a certain Ben Folds Five song had received airtime on CBC Radio 2 during my morning wake-up, but could not recall the exact day. It bothered me.
Thankfully, they did have broadcast/play logs of all tracks they had aired, along with the date/times, providing for a succinct history. Unfortunately, it didn’t seem possible to search them, and I didn’t feel like searching through each day’s play log for the particular title. What to do?
Scripting to the rescue!
Continued
3 March 2015
React is a great framework for building web UIs. (And perhaps other UIs as well) I’ve recently started using it in some side projects, and love its ability to easily manage view state and efficiently update the DOM, reducing a lot of the “grunt work” of building dynamic web UIs. On the other hand, it feels relatively lightweight in that it doesn’t impose a lot of structure in how you design your app. This may be a Good or a Bad thing, but the upside is that there isn’t a steep learning curve.
One thing I recently wanted to do with React was to build a component that would animate during its transition from state A to B; an example would be an On/Off button. It is possible to do so with React’s built-in animation addon, but it just required some attention to detail.
Continued
21 March 2014
If you’re using RequireJS’s shim configuration to load jQuery plugins while setting enforceDefine: true
in your configuration, you probably noticed the following uncaught error in your JavaScript console: (The following example is for the iCheck plugin)
Uncaught Error: No define call for iCheck
http://requirejs.org/docs/errors.html#nodefine
Continued
13 March 2014
The SoftLayer REST API doesn’t seem to have an XSD, so you can’t use xjc
to generate classes. That’s a shame for a strongly-typed language, since you’d now have to manually create classes based on their Data Type Reference.
I didn’t like that and decided to code up a Java class generator (it’s written in Python) based on the Data Type Reference. You can use it to generate a Java class based on the SoftLayer Data Type you pass in. Enjoy!
4 March 2014
If you’re coming from a programming language that has support for multithreading and concurrency, (such as Java) then understanding the flow of asynchronous events in JavaScript such as timers can be a bit confusing.
However, once you understand the single-threaded nature of most JavaScript, things may actually becoming easier as you don’t have to worry about parallel access to non-local variables.
Let’s take a look at how JavaScript executes when a function is passed to window.setTimeout()
.
Continued
4 March 2014
With close to 39,000 results, the 2013 Chicago Marathon Results combine two of my favourite topics, statistics and running. I decided to take this opportunity to learn more about pandas by using it to analyze the result set to provide some insight into how people run marathons. (I myself ran this race)
The result of my work is in a GitHub repo and published as an IPython Notebook. I’ve extracted some of the more interesting parts.
Continued
7 April 2013
I’ve been playing around with Spring Web MVC a bit and was looking for something similar to Jersey’s Parameter Classes that would provide conversion to custom types. I liked how with Jersey, you could encapsulate the conversion logic in a single class and have that reused across multiple methods with minimal configuration.
Here’s how I achieved a similar result in Spring Web MVC. (Note: the following examples were done with Spring 3.2.1)
Continued
16 February 2013
One of the most popular Java interview “screener” questions is often, “What is the difference between final, finally and finalize?” In fact, it occurs so much that one should probably have the answer memorized. But knowing when to use these features is better than just knowing what they mean.
Continued
27 May 2012
I’ve been using Jersey as a JAX-RS implementation for a little while now, and one thing that it could benefit from is the addition of an @Required
annotation for resource method parameters. Right now, when parameters are not provided by the client/request, they are simply set to null
, creating the need for duplicated null-checking in resource methods. An @Required
annotation would solve this issue and reduce code duplication.
This isn’t so much of an issue for @PathParam
parameters, (since you won’t even get to the proper resource method without a matching URI) but it does affect @HeaderParam
and @QueryParam
(among others) since they aren’t needed for Jersey to determine which resource method to invoke. By that definition, they are implicitly optional. There should be a way to make them required.
The behaviour of such a required annotation might be as follows:
- If the request does not have the parameter, then by default a
Response
with Status.BAD_REQUEST
(HTTP 400) would be returned to the client.
- Some way of customizing the HTTP response code and message should also be provided.
Right now, there’s not really an elegant way to make something like a @HeaderParam
required. Here are some solutions I’ve tried.
Continued
18 March 2012
One of the easiest things to get tripped up on is the syntax for creating regular expressions (regex) in Java using the Pattern class. The tl;dr version of how to do things is that you must use double-backslashes in the regular expression Strings you use to create a Pattern object; so something like \b
would have to be written as "\\b"
. Read on for a more thorough explanation.
Continued