libc.js
Recently I’ve written a post about functional programming techniques, coming into the world of front-end and
the library I crafted as an experiment. That library, libc.js was
highly inspired by Elm and Mithril. But it suffered two major features:
- components were hardly able to be used in other components
- the interaction between components was nearly impossible (or, at least, not very transparent)
What’s hidden beneath the next version of the library?
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 blew up rapidly somewhere in 2014-2016 and that’s what is happening right now.
Probably one of the most powerful 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.
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…
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):
Foreword
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!
First resource
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.
General architecture
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.
If you remember, we ended our coding excercises at place, where we almost created our first
Newtonian body, but we did not actually have enough models.
We discussed collision shapes a bit. So let’s create one for our brand new model!
We have a nice ramp to work with. But how we can reconstruct the same shape in the
terms of Newton? Newton offers a set of collision shapes for us:
-
Sphere
-
Box
-
Cone
-
Capsule
-
Cylinder
-
Chamfer Cylinder
-
Convex Hull
-
Trimesh
Obviously, not sphere, cone, capsule, nor cylinder make sense for us.
We could use box shape, but then we simply ignore our inner faces (inside walls):
A bit better, but still the same situation with convex hull shape:
Generally, the way we create our Newtonian body is:
- create collision shape
- create blank Newtonian body
- set body properties like collision shape, mass, inertia parameters, etc.
- store the pointer to the graphical entity for that body in the
userData
property
And then Newton Game Dynamics will take your body into account when processing other objects
in the NewtonWorld
.
In this section we will have short but powerful introduction to Blender. We will cover
just enough of model creation basics, you will need to create most of simple projects.
No, we will not cover animation, shaders or modificators here, but just enough minimum
to create this ramp floor for our tutorial:
You will find lot of keyboard shortcuts here. And this is one of the most awesome
features of Blender - you can work without menus or panels! Everything you need
can be done with keyboard!
So let’s dive in Blender now!