• JavaScript in 2018

    JavaScript, both as a language and as an ecosystem, is probably the most evolving development environment there is. Originally invented for the browser, nowadays JS is used everywhere from server-side components to mobile and game development. In 2018 JavaScript can be written in a way that does not resemble language as we knew it five or ten years ago. In this post I'm going to show a simple example of modern JS that uses many features that have not been available just a few years (or in some cases - months) ago.

    Read More
  • SVG Sprites 2016

    Back in 2012 I've been experimenting with scalable SVG sprites but was unable to get a reliable, cross-browser solution. Four years later, thanks to browser support for inline SVGs, it's much more feasible to use SVG sprites. In this article I describe a technique of building and embedding SVG sprites that can be individually scaled and coloured from within css. Furthermore I present an argument for obsoleting spritesheets in near future. Finally I showcase few neat tricks possible with the inline SVGs.

    Read More
  • Tips on making static sites fast

    In this article I'll describe a few tricks I've used to make my blog load fast, i.e. cold browser cache load time of around a quarter of a second on my connection. The same methods can be used for other static pages and most of them can be re-used for dynamically generated pages as well.

    Read More
  • How to apply for a Software Developer Job

    Over past five years as part of my job I've been involved in reviewing and interviewing applicants for various software development positions and have seen applications greatly varying in quality. In this post I aim to give you few advices on every stage of application process including finding the job offer, preparation, CV, covering letter, the interview and negotiations. Hope it helps you get your dream job!

    Read More
  • Game networking message serialisation

    When making a multiplayer game one of the important thing you need to do is to design your networking handling: UDP vs. TCP, interpolation, lag compensation, client-side prediction, traffic forgery (cheating), message serialisation etc. In this article I'm focusing on message serialisation in the specific context of building browser-based game. I'm discussing why JSON is not a viable solution for dynamic browser-based games and offer a couple of alternatives.

    Read More
  • Linux user's guide to OS X

    I've been running some sort of a Linux distro as my main OS for over a decade. However that has changed over past 6 months as I've switched to OS X and, while initially I've struggled, I now quite enjoy using it and will probably stick with it for a while. This is my my opinionated guide to replace/disable/change features of OS X that I've found annoying and install/enable ones that are more familiar to me as a long-time Linux user.

    Read More
  • This blog is now a static page

    I never liked WordPress much but it's a "good enough" solution when one needs a blog. Plus it's easy to get up and running quickly. Well, enough is enough! This blog now is statically generated and uses an external service to store, process and handle comments.

    Read More
  • Export rigged character from Blender to UE4

    After few trials and errors I've finally found a way to export a fully rigged character from Blender to Unreal Engine 4 and then re-target built-in animation for use within UE4. As there are few hoops to jump through, I'm going to document the workflow step-by-step (with pictures!).

    Read More
  • 5 things I've learned from making a game

    For a little bit more than a year now I've been working on and off on a simple, multiplayer, browser-based game called Archers!. I've deliberately set it out to make a simple multiplayer game as I was afraid anything more complex would be a timesink that I would eventually abandon. I've managed to meet the initial requirements and then even added few features but unfortunately the game I've made is, quite frankly, dull and boring. That being said I believe there are few innovative solutions here so I've open-sourced the game. In this post I summarize few lessons learned from making a multiplayer, web-based game in JavaScript.

    Read More
  • Automate all the Javascript things!

    Automation can save you loads of time whether you apply it to your every day chores or to your development workflow. In this article I'll focus on the latter, describing some of the common technics focusing on development in JavaScript (both Browser and Node).

    Read More
  • Hacking League of Legends HUD

    Whenever I’ve joined my friends for an occasional game of League of Legends I’ve been irritated by the fact that game won’t let me customize my HUD so I can play efficiently on my triple screen Eyefinity setup. LOL will happily render on 5760x1080px resolution, however you’re stuck with map on the far right and character screen on the far left. One night I’ve decided it would be a nice challenge to try and fix this. About 6 hours later the first version of a LOL Hudfixer has been born. I’ve played few games using this hack and have encountered no problems so far. It has been an exciting experience to reverse-engineer some of the logic used in the game, I’ll try to outline my findings/approach in this article.

    Read More
  • Running Linux on 2012 Macbook Pro Retina

    I needed a new laptop so I've decided to check whether I could find one that could fully replace my power-hungry desktop and at the same time get decent mobility. My desktop is a high-spec gaming rig with three full-hd screens dual booting Linux and Windows. Can you pack hardware and battery powerful enough to match that into a small pizza box?

    Read More
  • 10 super powers for your shell

    Still using Bash? It's cool, though you might want to switch to zsh and give your shell some super powers! Give it a shot, you'll love this! This quick tutorial will help you customize your Linux/Mac shell to add impressive set of super powers and consequently enable more productive fun environment.

    Read More
  • Ninja SVG sprites

    Traditional image sprites for web are done using png or jpg files where multiple small (raster) graphics, often icons, are merged into a single image file to save on file size and reduce amount of http round trips required. This works great unless you want to scale your icons. Wouldn't it be great if you could have spritesheet full of scalable vector graphics? Just imagine how you could enhance your responsive design? Sadly you can't do sprites like that. Or can you?

    Read More
  • The quirks of JavaScript

    Developers from my team come up with a rather interesting challenge to produce a small piece of JavaScript code of which output would be impossible to predict for a non-JS developer. Obviously we're talking about human-readable i.e. no obfuscation. Here is what we've came up

    Read More
  • Why can't all software be like Sublime Text?

    Most software sux, but there are exceptions, gems that make me believe that not all is lost. Sublime Text 2 is one great example (and I don’t get paid to say so). There are great many places online where you can learn about its features, this post isn’t one. I want to focus on what makes Sublime Text make me love it when I hate most software.

    Read More
  • wtf happened to software?!

    Gosh I hate what happened to software. I really do. When did it all happen? Let's take windows for an example: Why all of sudden to use windows you need at least 2 firewalls, an anti-virus and a rookit detector. Why every time you start something else than Internet Explorer you have to confirm that you indeed intended to run this application and yes it should be allowed to connect to the internet in both home and office network and yes public network too! Why every single app all of a sudden needs to add something to one of 10 places where windows keeps 'autostart apps'; or sneak in a shitty toolbar plugin to spy on my every action; or at least change my default search engine.

    Read More
  • 10 Advanced JavaScript Interview Questions

    Whether you're looking to prepare for an interview for JavaScript role, you're an interviewer looking for inspiration or you just want to evaluate your JavaScript knowledge here are 10 advanced topics that a software engineer working with JavaScript should be able to answer. Bear in mind that answers here are kept minimal, there are lots of caveats not mentioned.

    Read More
  • Cracking the Google Code

    In this article I'm going to give a step-by-step solution to Google Chromebook logic puzzle describing my exact thought process and hopefully providing few useful pieces of advice regarding cracking puzzles in general. However I encourage you to have a go at the puzzle yourself before reading the solution.

    Read More
  • Mining Bitcoins

    I've experimented with Bitcoin, the p2p, digital crypto-currency, for over a month, made some profit and eventually decided to build a dedicated mining machine. Recently Bitcoin has gained a lots of attraction and has been both praised and criticized. While there are multiple threats to the technology and community, Bitcoin is something definitely worth keeping an eye on.

    Read More
  • Coding while on the plane

    A simple fact that I have figured out while being 12km above the ground: you can do more during a single transatlantic flight than you can do during an entire day in your standard working environment. In this post I'm trying to explain why this might be the case.

    Read More
  • Social Login using OpenID and OAuth

    OpenID can be used as a solution for social login where users can be authenticated on your site without using login/password combination. It seems that folks at Quora don't like the OpenID, Stack Overflow community turns out to be slightly more friendly. In this post I intend to research alternatives to classic user authentication mechanisms.

    Read More
  • Playing with web sockets

    The WebSocket is quite a cool concept that might gradually affect web as we know it. Currently to implement a real-time chat (Facebook and Gmail have one) you need to employ one of the xhr-based hacks aka COMET (i.e. long polling, xhr multipart etc.) and while these techniques will work, there are couple of problems. First of all HTTP protocol has not been designed for sustained client-server connection - keeping the connection open creates a performance penalty on each side. Secondly this is not a true two-way communication protocol, a lag of couple of hundreds of milliseconds in one direction is pretty much unavoidable. I could name couple of more issues related to the use of COMET but that's not the point. Point is Websockets are coming for a rescue! Well more like slowly crawling than coming, but still on the horizon.

    Read More
  • 24861% performance boost in Perl

    Recently as a part of a bigger project we've been working on a piece of software that would need to generate an extensive, complex and nested hash structure, then compare it with another, previously cached version of the same structure and decide whether it's the same or different. The rest of the system has been written in perl thus logically we've selected perl for the implementation. Our hash comparison tool would be executed every 30 seconds and it  had to perform well on a rather busy system. We knew that a brute-force approach of comparing each key and value recursively would definitely cause performance issues. It was time to do some cheating!

    Read More