What should I learn?

This is a question I get asked a lot. Mostly by those who are just starting off their career as programmers/developers, but often times also by veterans of IT field.

Recently, I found myself asking that question when I came to the realization that PHP, as a language was not as much in demand as it once was. Not that I didn’t know this before but it became more apparent when I moved away from New York. With hundreds of companies and their office, it was never hard for me to find a job with great pay. Now, not so much.

With new technologies emerging faster than a New York minute how do you keep yourself relevant and keep moving up that corporate/salary ladder? A big part of that is knowing which technologies are in demand and being able to predict if they will stay in demand long enough for you to never run out of work.

After some experimentation (and a lot of help from God), these are the things that helped me realize where the market is going and what I need to learn next.

  1. Search the job sites
    Check out various job listing sites (monster.com, dice.com, etc) and search for jobs of all the technologies you are interested in and take a note of how many jobs are available and what their salaries are.

    If you are planning to move soon, then perform this search for the city you are going to move to (or thinking of moving to).

  2. Talk to recruiters
    The first time I heard big data was increasing in demand is when a recruiter mentioned it to me. She also told me PHP was becoming more of a niche skill than a mainstream skill. So, I decided to learn Ruby. I have always been fascinated by the meta-programming capabilities of Ruby.

    However, I came across an article published by Stack Overflow which showed Ruby was even less (much less) popular than PHP. I haven’t stopped learning it though. It’s a fun language and I want to explore it more.

  3. Go to startup meetups and see which technology stack is being used

    A few years ago, Python was the popular kid on the block. All the cool kids (new startups) were using it. If you told someone, your new project was not in Python or Node, you were looked down upon (I wish I was exaggerating).

    The only reason I found this out was because I noticed that at networking events, most new companies were using Python and Mongo.

  4. Other Thoughts

    These three things help you get a general idea of what you should learn next. However, there other things you should take into consideration. What is the most important thing you want your employer or your job to have? If you like working 9-5 then find out what big companies are asking for. If you like the startup culture, then find out what they want.

    Sometimes, you don’t know what you want until you have gone through a few jobs. When I started by career as a developer, my first few jobs were great. I was part of planning process for projects and it opened my mind to all the possibilities. I enjoyed that a lot. I felt intellectually challenged and learned a great deal.

    Later on, one of the jobs I got was at a firm where my manager expected his team to be robots. On top of that he micro-managed everything. I hated it. I didn’t like being micro-managed. Some people prefer it. Some developers are okay with vague requirements, some get paralyzed by them. In an ideal world we would have clear cut business requirements, but depending on where you work, that is often not the case. You need to figure out what you want and then narrow down your search based on that criteria.

    Currently the popular technologies seem to be: NodeJS, AngularJS, React, Big Data (data analysis, machine learning, etc). I think the reason for this is that quite a few new companies are being founded and investors (as well as business owners) need to know if the business plan will work and how to make it work. Javascript is is supported outside the browser, (applications like Mirth let you write code in JS for custom rules) which has added to its popularity.

    Java will always be in demand in the financial sector. You can never go wrong with learning C/C++. As long as computers are in use, C/C++ will be in demand.

    I hope this helps others are out who confused about their next step. Please feel free to contact me, if you have anything else that might be helpful. Below are some useful links:

    http://stackoverflow.com/research/developer-survey-2016 (a great resource)
    http://monster.com
    http://dice.com
    http://glassdoor.com
    http://indeed.com
    http://careers.stackoverflow.com

Clean your oil painting brushes the non-toxic way

Oxyclean stain remover is your friend. Wipe your brushes with a paper tower, then spray some Oxyclean into the bristles, leave it for a few seconds and wash them. You may need to use more than once on a brush but it will clean the brush and leave no color stains ( at least not as much as Gamsol + soap and water ).

I have heard some artists like to use baby oil to clean their brushes and they say you need a lot of it. I haven’t tried this method

Another cleaner that works great is Fast Orange hand cleaner. It is a bit thick and has pumice in it so I don’t use it for brushes as much. You have to make sure you get all the pumice out after you are done cleaning. Also I have had to use quite a bit of it on brushes.

Fast Orange cleaner is amazing for your hands. It will clean them better than regular soap and water. Also, you can use it as a facial or body scrub.

Notice how new brushes need to be broken in before painting. The bristles are stuck together and you need to brush them lightly on you hand to get them to part. You can get that with milk. After cleaning the brushes, take a few drops of milk and shape the brush. Next time you reach for it to paint, it will feel like you are painting with a new brush.

Is Zephir worth learning?

Not so short answer: If you want to learn something that makes you more marketable, then no. It is better to learn C++ instead. If you just want to play with it, maybe write an extension or two for your project, then Zephir is fun language to learn.

I checked for jobs dice.com and other popular job sites and I found 10 jobs on all of them combined. This is 10 jobs for both Zephir and Phalcon combined (searched separately). There are no popular websites I know of, that use Phalcon. There are some Russian and Polish websites that use it and I don’t know how popular they are but none that I have seen in the US.

Phalcon is the fastest framework but it hasn’t been widely adopted. In fact, I don’t know of any site, or web app that uses it. For those that don’t know: Phalcon (a PHP framework installed as any other PHP extension) is written in Zephir.

At first, I thought the lack of adoption of Phalcon (or Zephir) was because it lacks a wide variety of features (data mapper pattern being one of them). While that is true, that is not the only reason for it. Most websites (or web applications) run on shared hosting. They don’t have the ability to install custom extensions. So, unless the web hosting provider already has Phalcon installed, you are out of luck. This reduces Phalcon’s demographic by a significant percentage.

I think Zephir’s usage is directly proportional to Phalcon’s usage. As far as I can tell, it doesn’t seem very promising. One day when PHP let’s you install extensions like we install libraries through composer, it will have a better chance. For the near future, however, there are few to no job prospects for it.

Zephir (like its makers point out) is not a general purpose programming language. It was made for a very specific purpose of developing Phalcon and overcoming the adoption barrier. It is a bit limiting and expressing complex problems in it can be difficult. However, if you can get the hang of it, I think it is worth checking out.

On a side note: there is an app that converts your code to C++, making it compilable. It is called Swig and can be found here: http://www.swig.org”

A second look at Zephir

Ever since I found out about Zephir, I have been very curious about it. I mean compiled PHP code. How awesome is that? Also, Zephir code doesn’t have to be compiled into a PHP extension. You can just convert it to binary and run it normally like any other PHP code.

Why spend a lot on Zend Guard or any other encoding software when you can do it for free with Zephir? There is a caveat though: Zephir is not PHP. It has similarities but it is not completely PHP code. So, you would have to learn whqt works and what doesn’t.

One thing to note is that it is still in beta. Phalcon has been out for a while so I figured it would at least be 1.0.0 stable. However, that is not the case. At the time of writing this article, the latest version is 0.9.8b. I have always wanted to write code as PHP extension so it would run much faster than regular PHP code.

I read (haven’t benchmarked yet) that not all compiled Zephir code runs faster than regular PHP code. This is probably because of some I/O bottlenecks. If you are planning on using Zephir, make sure you benchmark the performance for your use case. If compiling doesn’t make things any faster then its not worth the extra pain to compile and install a PHP extension.

Macports Ruby: Symbol not found: _SSLv2_client_method error

This error usually shows up when you try to run the following command:

sudo gem install 

For those that don’t know what I am talking about, this is the error message:

ERROR:  Loading command: install (LoadError)
	dlopen(/opt/local/lib/ruby2.2/2.2.0/x86_64-darwin15/openssl.bundle, 9): Symbol not found: _SSLv2_client_method
  Referenced from: /opt/local/lib/ruby2.2/2.2.0/x86_64-darwin15/openssl.bundle
  Expected in: /opt/local/lib/libssl.1.0.0.dylib
 in /opt/local/lib/ruby2.2/2.2.0/x86_64-darwin15/openssl.bundle - /opt/local/lib/ruby2.2/2.2.0/x86_64-darwin15/openssl.bundle

The only way to get this to go away is to re-compile ruby so it will use the new openSSL library. Macports, however, installs packages from binaries. So, after hours of trial and error, I found a way to get around this. You can re-install ruby with the following command and the error message will go away:

 sudo port install ruby23 +mactk

You will have to replace ruby23 with whatever version you want to install.

Oil paints with fast drying time (but not too fast)

As some of you know, I mostly used acrylic paints because they don’t take ages to dry (unlike some of my initial oil paintings which took almost a month to dry). Who wants to wait a month to varnish their painting? Or worse, some artists wait 6 months to a year.

As annoying as the dry time of oil paints can be, you get the best gradients with them. Getting the same quality of gradients in acrylics is very hard. Sometimes acrylic paints dry a few seconds after you lay them down on canvas. Can you imagine doing a sky on a big (36×48 inches) piece? It can get a bit annoying.

Oil paints take too long to dry and acrylic paints dry in a few seconds to a few minutes. I found a solution to this problem by some reading and some experimentation. Oil paints have synthetic mediums which will speed up the dry time like no tomorrow. Some of these mediums can cause the paint layer to dry in 24 hours or less. This, for me, is very ideal. I can do a sky in 6 hours if I need to and then have it be dried the next day for another layer of paint.

Here are some mediums I have experimented with and liked:

Liquin – Made by Windsor and Newton. It is a great medium which will dry your paint in 24 hours depending on how much of it you use in your paint. It is a modern version of the maroger medium. If you do use it, make sure you have proper ventilation or wear a mask that purifies air. It smells horrible and its smell will give you headaches.

Neo-Megilp – Made by Gamblin. This is Gamblin’s version of maroger medium. It usually dries in 3-4 days. However, on some of my paintings it dries in 24 hours or less. I bought it because I wanted it to dry in at least 4 days but most I got from neo-megilp was 2-3 days.

I love Gamblin and everything they make. Their goal is to make high quality painting materials without harming the artist. They have their own version of flake white which is harmless to the artist (vs the original flake white which is full of lead).

Non-toxic gel medium – Made by Gamblin. This contains no solvents for oil paints so it is completely safe to touch, etc. And, it is advertised to dry in 3-4 days as well but in my experience it dries in 2-3 days.

Both liquin and neo-megilp are not completely safe. They should be used be used with proper ventilation ( an open window is enough or a big room with the door open ). Non-toxic gel doesn’t have these limitations.

Now I can paint to my heart’s content, and only wait a day for the paint before putting on another layer of paint. Although these days, I have been painting alla prima (wet into wet) quite a bit so my paint drying in 24 hours has become a bit of an inconvenience. However, I know I can extend the drying time of the paints by mixing some stand oil or linseed oil along with the synthetic mediums so its not too much of a problem.

Setting, removing and reading cookies in Javascript

Copy/paste these methods and use them


/**
 * Create a cookie
 * 
 * @param string  name
 * @param mixed   value
 * @param int     days
 */
function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

/**
 * Read a cookie
 *
 * @param string  name 
 */
function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

/**
 * Remove a cookie
 * 
 * @param string  name
 */
function eraseCookie(name) {
    createCookie(name,"",-1);
}

My latest painting

Lately, I have been painting a lot of 8×10 paintings on canvas panels. They don’t take much time and you can keep the panel on your lap, or wherever you feel comfortable.

Another advantage of doing an 8×10 inch painting is that you can experiment different with different techniques and see the result fairly quickly.

Anyway, here is my latest painting done for a study on rocks. I call it Sticks and Stones.

Sticks and stones

Beware of the pouring medium

Beware of the pouring medium mixed with water as it can destroy your painting. I had a painting I had been meaning to varnish for a few months and finally decided to do it 3 days ago. For isolation coat, I figured I would use the pouring medium sold by Liquitex. It levels itself and doesn’t leave brush marks making it perfect for an isolation coat. What could go wrong? Right?

Wrong. I mixed the pouring medium with quite a bit of water to get it to flow easily (which was a mistake). It did flow very easily and had the same consistency as water. However, the medium was taking too long to dry so after waiting 2-3 minutes, I started to brush off the excess medium (which was another mistake). After the painting dried, I noticed that sections of it had gone white. The medium dissolved the acrylic paint and probably took the paint with it while I was trying to get excess medium off the canvas.

Needless to say, I redid parts of the painting that had gone white and varnished it again. This time I was very careful and the painting came out looking better than it did before.

Another thing I noticed while painting on top of pouring medium layer is that my paint stayed wet for longer than usual. Not as long as as oil paints do, but long enough that I could blend very easily. I am going to experiment with this new knowledge and see what it goes.

Lessons learned:
– Don’t mix too much water into the pouring medium when using it as an isolation coat for varnish.

– Don’t be impatient after you have varnished or put on an isolation coat. Give it as much time as it needs to dry off. The painting probably would have been ok if I had not tried to brush off excess medium after waiting a few minutes.

– Acrylic mediums can liquify acrylic paint even after it has dried completely.

– High gloss finish looks very good on some paintings.

Here is the painting that almost got destroyed by the pouring medium on the wall of the person who asked me to paint it.

Oil vs Acrylic – What’s easier to clean?

Acrylics are much easier to clean than oils (and cheaper).

Brushes

With acrylics, you can get away with using just water to clean your brushes (depending on how thick you laid your paint). Most of the times, this is true even for impasto techniques. For oils, you have to use turpentine (as oil paints don’t dissolve in water). It is, however, not enough to just use turpentine to clean your brushes.

With oils, you have to first, soak your brushes in turpentine, get most of the paint out, then use soap and water to make sure there is no oil reside in the brush. If you just use turpentine to clean the brush (especially your liners) then the brush will get stiff over time and you won’t be able to paint with it anymore. I learned this lesson the hard way.

Stephan Baumann, an artist who videos I watched on Youtube, recommends using turpentine, then soak brushes in “Awesome” cleaning liquid, then use soap and water. Apparently, turpentine will damage your pipes (even I didn’t know that).

Hands

Acrylics dry fast. So fast that it is sometimes annoying while painting. This, however, is very good for cleaning up. You can dry your hands with soap and water, scrape the paint off your hands, etc.

Oil paints take a while to dry out but they are not that much harder to get off your hands. You should be okay with soap and water, just make sure you do a thorough job of cleaning your hands. You don’t want to get cancer or any such diseases.

Pallettes

If you use glass palettes, then both of them are easy to clean. Just use a glass scraper and you are good to go. Although I have found acrylics to take less effort when removing paint off pallettes.

One issue I have had when painting smaller paintings (with less paint) is acrylics drying on the palette before I am done painting. So, I have had to use a make-shift stay-wet palette, which is use-and-throw. This means no cleaning at all. You could use the same sheets for oil painting too. So overall there is little to no difference between them.

I haven’t used wooden palettes so I can’t talk about them but removing acrylic paint from acrylic palettes is a nightmare. I have heard it is much easier to remove oil paints from it. So, in the end the ease of cleaning depends on the type of palette you use.