0 Comments

Over the past year or two I was responsible for conducting a number of interviews and found that there are a lot of developers that turns out to be just clock-punchers.

This post is purely on how I feel, there is no stats or science behind this, just an observation, and I can be wrong about this. Feel free to leave a comment if you disagree with me.

During a lot of the interviews I conducted I found that most of the developers have no idea what they doing, or they are just there for the pay check. Some are getting paid way more than what they should be, and in some cases I could clearly see that people have been promoted purely on the success of the team and not personal achievements.

Let’s start first with how I operate and what technology and development means to me before I continue with how I conduct and interview and what I look for in new candidates.

For me technology has always been a passion, it’s part of who I am and since I can remember I have in some form or another been involved with learning it, mastering it, making it, and owning it. Ever since I started software development I have strived to be the best, to learn as much as I can and always deliver more than what was asked. I am at the point where I started giving back to the community in terms of my blog, GitHub and soon to launch YouTube videos. But I still find that every day I learn something new.

This view I created of how I operate is most likely why I find it difficult to interview other developers. It pains me deeply when I come across someone in the technology industry and software development that just want’s to go to work and go home, no learning, no experimenting no passion. It saddens me deeply.
Software development I think was never supposed to be a “job”, to me it’s a calling, something you do because you have a deep need to be one with a computer, you speak technology better than your native language.

What I normally look for in an interview is the following:

1. Show me the code

If you have a GitHub page, or some kind of code repository or even a showcase of what you have done before, then you already in the lead. I believe looking at what you can or have done is far more valuable than asking random interview questions.

2. Do you have a side project (or 6)

I always look for developers that has some form of side project. It says to me that you are still actively learning and experimenting. Having a side project also means that you are not just going to work and going home, you go the extra mile. I enjoy seeing developers apply new learnings on side projects, because you never get to do it on corporate systems. If you wait for your day job to give you an opportunity to learn, you will never grow fast enough. This also helps you to build a showcase regarding what you are capable off.

3. Lets play the knowledge game

This one is also very important. In this step I try to probe your knowledge to see how well you know the technology, the industry as well as the previous projects you worked on. This is more like a traditional interview, and some of the questions are pretty standard. In this step it’s easy to see if a candidate can articulate what they are doing, I can also quickly see who have been floating on the success of others and if you will be able to sit in on meetings or even drive them. If you can’t even explain a project in an interview I don’t thing you will be able to design a system in front of a client. Having the ability to articulate your knowledge and explain to others your though process is very important in today’s modern teams. We rely on different people and views to come up with the best solution.

4. Culture

Last but not least is company culture. Will the person being interviewed fit into the culture you have or trying to create. By the time you get to this you should by now know a little about the person, and if not switch the interview to some casual talking and learn a bit more about the person you are interviewing. It is very important that the person is a team player, can collaborate and play nice. There is no point in hiring the best person if they can’t work together to solve problems.

 

The bottom of the story is there are Awesome developers and not so awesome developers. The awesome developers are like needles in a hay stack and very hard to find. You will go through a whole lot of needles and hay stacks before finding the right candidate. Personally I would have loved it if every developer strived to be amazing, but there are place for every one, and every project do need people that can take over long term support, and unfortunately that is where the awesome developers don’t fit in, they get bored with the mundane day-to-day tasks very quickly.

0 Comments

Part 1

Once again I find myself writing to you after many months have passed. Time goes by so quickly.
Many of you might have wondered where I went and what I am up to lately and this post is to give all my readers a quick update as well as to what is coming.

The last few months have been extremely busy and I found myself working a lot a overtime at a particular client trying to get everything done before the deadline - Such is the nature of IT. It is so easy to get caught up in the rat race, but if you are one of the sought after developers it’s easy for clients to want more, and the more you deliver the more is asked. It’s a wonderful feeling but you need to keep a balance and not get lost in the work you do, which I’m unfortunately very good at – getting lost in my work.

I have in the bit of spare time I had worked on a few exciting projects, one of them being a connected vending machine. This project is still on-going, but if I can I will share some of the things I learned especially with the communication between c# and Arduino. I have also started working on a facial recognition smart lock which I will post on YouTube in the coming months.

One of the biggest things coming for me is a personal brand revamp as well as launching my YouTube channel. That’s right, I am launching my YouTube channel officially next months, and I hope that it will be exciting and that I can bring a lot of the cool work I do to YouTube land.
I will focus on training, making gadgets as well as interviews with industry leaders in SA. If anyone want’s to nominate themselves, please drop me a mail or a Tweet.

I have thought a lot about what interests me, and by heart I am a maker. I love building things and solving problems and my YouTube channel will be a way for me to showcase and hopefully inspire young makers to do the same in SA.

Part 2

Now on to the second part of this post which is in response to an article on linked in written by my friend and collogue Rory titled ”Caught up in digital propaganda

“I had almost forgotten how important it is to not neglect the non-digital experiences as well.

I realized that, even in this digital age, we are still humans. And as human beings, we still perceive the world through our "analog" senses. We are still biologically wired up to see, hear, taste, smell and touch to understand the world and process experiences. With so many companies scrambling to "go digital", is becoming somewhat of a luxury.” ~ Rory

I found this article most interesting. We as humans are currently so focused on technology, automation and robotics that I think we are forgetting to be human. As Rory stated in the article we need to design our digital transformations around human experiences and not just automating everything but rather using it to enrich the human experience.

This article made me think of the movie WALL-E, especially the scene where all the humans are blobbing in front of the screens chatting, but no one is actually interacting with one another while the robots are going about doing everything including making a mess of things.

walle-socialnetwork05

I am definitely inspired to change the way I approach my making especially my home automation to try and center it around human experience instead of trying to do everything automatically. Robots are a good things, but humans need to be happy too.

If we all can focus on this and not lose sight of the human experience I think technology in a few years will look much different that what we are currently seeing in sci-fi movies. 

0 Comments

Over the past few years web technologies have progressed significantly. With the introduction of HTM5 and ECMAScript 5/6 (JavaScript) we have seen quite a few interesting new features being introduces such as web workers, web sockets, XMLHttpRequest2, Geolocation and the file api.
Todays post is primarily regarding XMLHttpRequest2 and the file api.

I have spent quite a bit of time trying to find good examples of how to implement asynchronous file uploads in javascript and being able to accept it using C# and MVC.
There are numerous examples explaining how to achieve the client side uploads using the file api and then making a XMLHttpRequest, but there are very few examples on how to properly receive those files on the MVC controller side.

One of the best examples of async file uploads is the Blueimp file upload control: https://github.com/blueimp/jQuery-File-Upload

Even though this is a wonderful control with a lot of features, I needed something that is very light weight, reusable and that can integrate into any .Net C# project without having to create a custom handler, it must use any MVC controller action.
Almost all examples for MVC involves create a custom handler, and to me this just feels wrong.

One thing that I also needed was for the control to be a able to provide me with the form variable that you normally would have with a form post.
The control should also not only be async but actually have a form post as a fallback for older browser.
I also needed the ability to dynamically set the allowed file types whenever I use the control.

With the criteria above in mind I set out to build just that and chose to create a Knockout.js model. Yes, knockout is not dead, and for something like this it’s perfect because it gives you model binding while being able to implement it on a single view without major scaffolding. I also used bootstrap for the styling and drop container as it comes with the standard MVC template and it has a progress bar control.

FileUploadHandler

The full solution can be downloaded from GitHub: https://github.com/TechnoDezi/MVCMultipleFileUpload

Step 1 – Client side code

The first part of this control is the Knockout model, this will handle the drag & drop events, as well as all the upload progress events inside a single model that can be bound to any html control. The model is implemented as a single javascript file in order to keep the size down and to share it is also easier. The single model will also take care of tracking multiple files at once and be able to receive feedback after it’s uploaded.

Step 2 – The html and model binding

On the html side the model can be bound to any html allowing you to style the upload exactly as you wish. When binding the Knockout model to the html you can also serialize you MVC model to a json object and send it along with every upload.
 

Step 3 – Server side MVC controller

On the server side a couple of things is to note. Firstly there is an upload helper class that can retrieve the file content from the request for either an async post or a normal form post. This helper will build up a model that contains the file content, the file name, size as well as the json model or form fields serialized to json string that can be easily desterilized back into a C# model class. Once the file is retrieved it can be saved to disc, opened, or pushed to a database.

 
Controller:
 
File upload handler:
 
Model class:
 

Give credit where credit is due: Many thanks to Valerio Gheri who gave me a running start: https://github.com/vgheri/HTML5Drag-DropExample

0 Comments

This post is about something you don’t see every day anymore. You know, the kindness and old school values you only see in movies.
It’s a bit of an unusual post considering most of my posts is about something technology related.

Yesterday just as I were about to order my Saturday morning coffee, on the way to the JHB office for the training that I facilitate every Saturday morning I was greeted by a very friendly and polite gentlemen in them most unexpected manner.

I think I am not alone in saying this, but we are getting way to used to in retail stores for one to be greeted by rude people, half a grunt, or in some cases not at all. This is becoming the norm, especially by younger people, and it’s scary.

Well yesterday morning this friendly gentlemen greeted me with a very friendly “Good morning milady” followed by a slight bow. Now normally this is done in a joking kind off way but this gentlemen was sincere and did not come across as trying to be funny, but rather the opposite. I greeted him back in the same fashion followed by a curtsy.

He did not expect that, and while he was preparing my coffee we talked a bit about how I was the first person in a while to greet him back with the same respect he exchange every morning.

It was refreshing to experience this kindness especially in a retail store, from someone who you can see really enjoys his job.
I sometimes wonder how we lost this respect for the individual, and general kindness towards people as well as making formal introductions?

The great thing was that on this particular Saturday morning my own mood were a little down, feeling exhausted even after a good night’s sleep. But the kindness and energy from a random stranger managed to somehow lift my mood and give me the energy I needed to facilitate a training session, and even made me again aware of how important good old fashioned values are in this world.

What happened to honor, valor, courage, Integrity, trust? Is it because of the way we bring up or kids, did we become so busy and money focused that we forget about ourselves or the people around us? Are we so focused on our own survival we forget about the people next to us?

I think if we all can be a little better every day, just a little and strive to be the best of humanity, the best we can be and then better than what we were yesterday, we will very quickly start to see a positive change in this world we live in.

0 Comments

This post is about preparing videos for uploading to Azure media service and not so much about media services itself.

Since December I have been working on a solution that involves Azure media services. To my surprise it’s actually a lot easier to work with than I imagined, the biggest thing for me was to wrap my head around the different combinations and how tokens work with DRM content.

For Azure media services I mainly followed a code example created by Mingfei https://github.com/AzureMediaServicesSamples/Dynamic-Encryption-with-PlayReady. There are a lot of documentation regarding Azure media services so I’m not going to go in depth on it.

A big thing for me and also something I found very little info on was how to prepare my videos for upload. Azure media services accepts a lot of different file formats when uploading a video, but none supported the files I had.

The videos I was going to receive would have been in a RAW uncompressed AVI file format. These files are way too big to upload directly to Azure, and on my 4Mbps ADSL line it will take forever. Sure I can just use a video converter and batch convert them all to .MP4, but I need more control over the file conversion and be able to upload the file as soon as it’s converted along with some meta data to my own database.

After a thorough search I cam across a .Net wrapper for the FFMPEG library created by NReco http://www.nrecosite.com/video_converter_net.aspx
This library had everything I needed to start an application that can convert my videos and upload them to Azure as well as load the assets in my own database.

I wrote a little tool that looks something like this:

image

This allows me to load a folder full of raw files, add names/descriptions and tags for the files so that I can find them later on.

When you convert and upload the tool will convert the video and add it to the upload queue. While uploading a file it will start converting the next file in line and so on. Multi threading the convert/upload process saves a lot of time. If I had to 1st wait for a tool to convert all the files and upload them to Azure it would have been very painful.

To encode your own video files using NReco you can use the following code:

FFMpegConverter ffMpeg = new FFMpegConverter();

ffMpeg.ConvertProgress += new EventHandler<ConvertProgressEventArgs>(delegate (Object o, ConvertProgressEventArgs eP)
{
    double percentage = ((eP.Processed.TotalMilliseconds / eP.TotalDuration.TotalMilliseconds) * 100);
});

//Start conversion
ffMpeg.ConvertMedia(SourcePath, null, DestinationPath, Format.mp4, new ConvertSettings()
{
    AudioCodec = "libmp3lame",
    VideoCodec = "h264",
    VideoFrameSize = "1280x720"
});

After FFMpeg have finished converting the video to MP4, the file can then be uploaded to Azure media services as per the example by Mingfei.