Thoughts on Open Source

I think open source is great. Open source doesn’t necessarily mean that the software is free but 99% (just my guesstimate) of them are free. I use some great open source software on a daily basis, and I really appreciate those companies and individuals who contribute their time, energy and even some money to make it possible.

Let’s imagine a situation where a developer created a very useful piece of software. The software doesn’t have any proprietary data but it’s a reusable piece of software. When it happens, companies should make it open source or at least have a policy that allows developers to do it.

The first reason is to give back some to the world. I know many companies utilize open source software for free. If you come up with a good shareable software, why not give back a little?

Moreover, what if the developer who created the software leaves the company? It’s very possible in this fast pace industry. As a matter of fact, I just left my company yesterday for another opportunity. If that happens, the possibility is that the software is left unmaintained and forgotten. If you open source the software, not only it can be improved and maintained by the developer who created it, but also more people can jump in to make it even better. It’s beneficial not only to the world but also to the company and the individual who created the software.

Yeah, I can already hear some people say, “The developer used the company paid time, so the software belongs to the company!” Sure, I can understand the argument and I’m not saying that you should open source your proprietary software, but some shareable tools which won’t affect your business.

I intend to publish a piece of software as an open source software on GitHub. That’s all I’m going to say right now.

Robocopy

When I need to do some xcopy type of operation, I use robocopy. Robocopy is a tool that comes with Windows and it’s basically a replacement to the old xcopy in my opinion. I’m taking a note on it because I tend to forget the options I usually use.

robocopy C:\source C:\dest /E /R:1 /W:1

This one retries just once in case of an error after 1 second. It also copies sub directories even if they are empty. These options are good enough for me unless I’m working more on critical operations. 

Returning multiple values (Groovy)

I sometimes find myself wanting to return multiple values from a function. Here is what can be done with Groovy. I’m pretty sure that the same syntax can be applied to Java code as well though not sure if you can use the def keyword in Java.

    @Test
    void test_ReturnMultipleValues()
    {
        def (String var1, String var2) = return_multiple_values_function()
        assertTrue("The var1 variable should have hoge1", var1 == 'hoge1')
        assertTrue("The var2 variable should have hoge2", var2 == 'hoge2')
    }

    def return_multiple_values_function()
    {
        return ['hoge1', 'hoge2']
    }

What I think developers should not do is overuse this technique. What if you had 10 values you want to return from a function. I would not use this type of technique, but rather create a class that has all those 10 values and just return an instance of the class from the function. This technique is convenient for a quick function that does some validations or something like that.

DevOps

Quote from RackSpace YouTube.

DevOps integrates developers and operations teams in order to improve collaboration and productivity by automating infrastructure, automating workflow and continuously measuring application performance.

I agree with the statement 50% because there is one important aspect that is missing from it. I believe that DevOps should have a connotation that you or your team owns the whole process from design, code, test, deploy, monitor to maintain.

Regardless though, automation and integration is the key.