After seeing it, yours truly thought: “that sounds like a capital idea!”. So, in a rush of inspiration, the yolo-selector npm package was born. It is a jQuery extension that adds a pseudo selector :yolo. This selector uses a list pilfered from the Mozilla Documentation for HTML elements that have fallen from grace, like blink, marquee, acronym, font, and many more.

The implementation may be half-joke, but it has tests, and CI and the works. Feel free to create issues if more elements need to be added.

If you are like me, you like using as much of your screen to watch videos on YouTube. The comments, title bar, and the rest of the edge of the screen takes away the possibility of looking at all those 1080p pixels available now.

To make any video fill your browser window, drag the link that says YT Full below to your bookmarks toolbar. You can also right click and save to bookmarks. Then, while on a YouTube video page, click on it. The page will be replaced by the URL of the embedding version of the video, filling the viewport.

The other day I had to make a long list of functions where the name was derived from an object key name. Since programming is the art of automating stuff, I thought “There has to be a way to have the code do this!”. Searching on our good friend stackoverflow.com there were plenty of examples of how to set the name of a function by using eval, or the Function constructor. Eval has some security issues, and by extension the constructor that uses it behind the curtains. So, what other way is there?

Well, the name property of functions is read-only, so that cannot be created and just renamed. However, there is more than one way to name a function.

One way is in the declaration, but that name is fixed upon declaration.

JavaScript

1

2

3

4

functionsuperCoolFunction(){

}

superCoolFunction.name==='superCoolFunction';

The same is true for function expressions, where the anonymous function name is derived from the variable name (doesn’t that make it not anonymous though?):

JavaScript

1

2

3

4

constnameOrigin=function(){

};

nameOrigin.name==='nameOrigin';

Another is through object literal notation:

JavaScript

1

2

3

4

5

6

constobjectLiteral={

evenCoolerFunction(){

}

};

objectLiteral.evenCoolerFunction.name==='evenCoolerFunction';

But, since object literals can have computed properties we can have:

JavaScript

1

2

3

4

5

6

7

constdynamicName='coolDynamicName';

constobjectLiteral={

[dynamicName](){

}

};

objectLiteral[dynamicName].name==='coolDynamicName';

And thus we can have a function that creates a function with a dynamically named method and return that method!

You may ask, can’t this be done with Object.defineProperty? Well, not really, you can create functions in the object, but the Function.name value returned will not be what you input to that function, since the function in the property descriptor will be named value. You can play around with a near solution in this pen.

Caveat emptor: this has not been benchmarked in any way or tested for JS engine optimization compatibility. Just another tool in the belt, just in case. 😉

I’ve recently become acquainted with node.js and it’s been a delight so far. It’s taken some time to get used to a new package manager and build tools and it’s been some time since I last touched ECMAScript (we all know it as Javascript though, right?). In an attempt to get truly familiar with it I’ve ventured to create a module and publish it to the npm.

When it comes to logging in Java™ there is no shortage of alternatives. The one I’ve used the most is log4j by the Apache Foundation. In its basic usage it has no dependencies and you only need to add the ones you’ll use like SMTP support for mailing loggers, JSON configuration support or a JDBC connector to log to your favorite database. The newest version even allows asynchronous logging through the LMAX Distruptor interthread messaging API that promises greater throughput than concurrent queues and lock based thread synchronization.

Since the 2.x version came out, however, the documentation for the 1.x versions has become fragmented. There are dead links everywhere and the XML configuration method reference is not even half complete. A common question about the XML format is about validation. A more thorough search can land you on the source control version of the DTD. Let’s go through the details of what makes a valid log4j XML configuration file.

Today I learned something new about Java exceptions. The always surprising try-catch statement has a concept called suppressed exceptions. The main idea is that a the whole try structure can throw an exception from more than one place:

So, I was trying to decode some base 64 encoded data to verify a request’s details but openssl kept returning nothing. To see what it expected I encoded a random string and when I saw the output it dawned on me. Base 64 wraps lines of a certain length with new line characters, every 64 characters (bytes, actually).

Wrapping data isn’t that hard, but I suspected there had to be a command that already did something like that. The answer was fold. It wraps lines of input to fit a specified width. The default was 80, but it can be changed with the -w switch. The result is:

The SDK for iOS development is really nifty. It has high level access to a lot of the OS and offers plenty of widgets and utilities. There is, however, one unexpected weakness I had to battle recently. That is NSHTTPURLResponse‘s header management.