Speeding-up algorithms with SSE
Have you ever asked anyone if assembly language might be useful nowadays? So, here’s the short answer: YES.
When you know how your computer works (not a processor itself, but the whole thing - memory organization, math co-processor and others), you may optimize your code while writing it. In this short article I shall try to show you some use cases of optimizations, which you may incorporate with the usage of low-level programming.
Recently I was reading through my old posts and found out there is a gap in the article about SSE - the post did not cover some of
the implementation caveats. I decided to fulfill this and re-publish a new version.
In last couple of years the functional programming paradigm became very popular.
A huge amount of libraries, tools, tutorials and blog posts appeared.
Although the paradigm itself is rather old (lambda calculus was developed around 1930 and the Lisp language was introduced in 1950), its popularity blowed up rapidly somewhere in 2014-2016 and that’s what is happening right now.
Probably one of the most powerfull influencers, giving FP (functional programming) that thrust is web development.
Since Facebook introduced React, the community started incorporating many things from FP with React - including Redux and Immutable.js.
But there are much more interesting things which were invented on this wave of FP popularity. One of them is Elm.
This is a story how I
implemented invented yet another web framework wheel.
Once I wanted to have something like a pretty “match” operator from Scala, but in Clojure.
And hence there are no default options for it in Clojure out of the box, here are some
alternatives I’ve found in the Internet.
Big O notation
The best big O notation explanation I’ve ever saw I’ve found on… Google Play Market! I was
hanging around, looking for the suggested software and, for some reason, I’ve decided to
install some educational application for programmers. And here’s what I’ve found…
Writing fast and beautiful code with C++ and D
Currently I am writing my (second) master’s thesis. And it’s one of the hardest
work I’ve been doing ever. It’s about image and video processing. And I’m using OpenCV.
Using OpenCV is an interesting decision: if you want to create a beautiful OO architecture
for your program, you’d rather use something like Java. But I didn’t manage to run OpenCV
in Java =P
So I decided to write my code in C++. Yeah, tough solution… And in some
time I saw why it was not the best one: my architecture was too bold (435 LOC) and it didn’t even
contained four method implementations!
Then I sit back and thought: “Couldn’t I use C++ for video/image reading only? And write the rest of the code in a more OOP-friendly language?”. And that’s when I started looking for a language with nice syntax and OOP features (like interfaces, short array syntax, tuples/maps, etc.) and found D.
I’ve been looking at D since loooong time ago, but actually never tried it for writing anything
more complex than a “Hello, World!”. “That’s my star time!” - is what I thought.
My idea was:
- create small C++ library for video IO
- create D program, using that C++ library to read and process video
D offeres nice C++ interop, except it requires you to define classes/functions signatures you
are importing from C++. That was not a big deal for me since I had no huge classes written yet.
Chicken in Blender
This is a chicken. This 3D model I’ve made in 3.5 hrs in Blender (with texturing).
Taking into account the fact I’ve started learning Unity 3D, I will possibly use this
in the remake of my old Shoot Them! game.
Like this (early preview, made with Unity 3D in ~3 hrs):
Two sides of web application. Part 3: Communication Layer
In this section we will implement the communication layer for our application. It’ll handle
all the requests to/from our web server. Have no worries - we will create server application
in the next section!
Let’s create a
Session resource. Since we have no backend part, we should stub
the data. We’ll use Angular Services. That’s easy: a service defines a
function, returning, say, an object. That object will be used every time you
call a service. And you may use not only objects - you may return functions,
constants or literally anything from your services.
Two sides of web application. Part 2: sketching
The first thing we need to think of is how we’ll be gathering the information about users.
It’s quite easy - we just need to get a request from a visitor. Of any kind -
it may be a request to get an image, a file, a stylesheet or a script.
Then we’ll just parse headers from that request and save the extracted data in the
database. The only problem here is: how to get unique key from each request?. We may use
visitor’s IP address. It’s the easiest way.
Newton GD + Irrlicht tutorial
This post will be really short. This is just a reference to my tutorial, which I
updated recently. It has been a long time since I wrote anything on game development,
that’s why it deserves one more announcement.
So, meet the changes:
- moved all the build instructions to CMake
- added scripting with Lua
- upgraded the whole tutorial to match latest Irrlicht and Newton versions
- added chapter on modelling with Blender
And more to come!
End-to-end testing with WebdriverIO
Have you ever heard about end-to-end testing? Or maybe about testing automation?
Those of you who had, may now be imaging Selenium. That’s right, in most of cases
you will need to run Selenium Server and use Selenium Webdriver in your
tests. Those come handy to run a standalone browser window, with no caches,
filled-in fields or cookies and perform some operations in it.
In this article I will tell you my story of writing E2E tests for Angular webapp.
A brief of history
In my case, we first tried to use Protractor with Chai.js. That time we ended
up with almost unsupportable bunch of code, succeeding in 100% of runs.
Next time we eliminated Chai and reworked all our tests to use Protractor only.
So the code became more clear (I did not like the syntax, but it worked…),
but after upgrading libraries (including Protractor), the ratio of successfull
test runs decreased to just 40%.
We worked for two days, trying to fix those tests. And that’s how webdriverio
came to our project.
And here’s a short tutorial on how to implement E2E tests with webdriverio in
a sample project.