I was recently lucky enough to get to attend my first SIGGRAPH conference this
year. While I didn’t attend any talks, I did spend some time in the expo. Here
is a collection of some of the neat things I saw at SIGGRAPH 2015. Sorry it’s
not more collected; I didn’t have the intention of writing a blog post until
after folks kept asking me “how was it?”
VR
Most booths had demos on VR headsets. Many were DK2’s and GearVR’s. AMD and
NVIDIA had Crescent Bay’s (next gen VR headset). It was noticeably lighter than
the DK2, and I thought it rendered better quality. It had nicer cable bundling,
and
headphones built in, that could fold up and lock out of the way that made it
nice to put on/take off. I also tried a Sony Morpheus. They had a very
engaging demo that was a tie in to the upcoming movie about tight rope walking,
“The Walk”. They had a thin PVC pipe taped to the floor that you had to
balance on, and a fan, and you were tight rope walking between the Twin Towers.
Looking down and trying to balance was terrifying. There were some demos with
a strange mobile VR setup where folks had a backpack on that had an open laptop
hanging off the back and could walk around. Toyota and Ford had demos where you
could inspect their vehicles in virtual space. I did not see a single HTC/Valve
Vive at SIGGRAPH.
21st Century C by Ben Klemens
was a great read. It had a section with an
intro to autotools, git, and gdb.
There are a few other useful tools that came to mind that I’ve used when
working with C and C++ codebases. These tools are a great way to start
contributing to
Open Source
C & C++ codebases; running these tools on
the code or adding them to the codebases. A lot of these favor command line,
open source utilities. See how many you are familiar with!
Interpreters and compilers are interesting programs, themselves used to run or
translate other programs, respectively. Those other programs that might be
interpreted might be languages like JavaScript, Ruby, Python, PHP, and Perl. The
other programs that might be compiled are C, C++, and to some extent Java and
C#.
Taking the time to do translation to native machine code ahead of
time can result in better performance at runtime, but an interpreter can get to work right away without spending any time translating. There happens to be a sweet spot
somewhere in between interpretation and compilation that combines the best of
both worlds. Such a technique
is called Just In Time (JIT) compiling. While interpreting, compiling, and JIT’ing code might sound radically different, they’re actually strikingly similar. In
this post, I hope to show how similar by comparing the code for an interpreter,
a compiler, and a JIT compiler for the language Brainfuck in around 100 lines
of C code each.
How is it possible for us to communicate securely when there’s the possibility
of a third party eavesdropping on us? How can we communicate private secrets
through public channels? How do such techniques enable us to bank online and
carry out other sensitive transactions on the Internet while trusting numerous
relays? In this post, I hope
to explain public key cryptography, with actual code examples, so that the
concepts are a little more concrete.
It’s a feeling of immense satisfaction when we complete a major achievement.
Being able to say “it’s done” is such a great stress relief. Recently, I
completed work on my first publication, a chapter about Emscripten for the
upcoming book
WebGL Insights
to be published by CRC Press in time for
SIGGRAPH 2015.
One of the life goals I’ve had for a while is writing a book. A romantic idea
it seems to have your ideas transcribed to a medium that will outlast your
bones. It’s enamoring to hold books from long dead authors, and see that their
ideas are still valid and powerful. Being able to write a book, in my eyes,
provides some form of life after death. Though, one could imagine ancestors
reading blog posts from long dead relatives via utilities like the
Internet Archive’s WayBack Machine.
…"‘Our speech interposes itself between apprehension and truth like a dusty pane or warped mirror. The tongue of Eden was like a flawless glass; a light of total understanding streamed through it. Thus Babel was a second Fall.’ And Isaac the Blind, an early Kabbalist, said that, to quote Gershom Scholem’s translation, ‘The speech of men is connected with divine speech and all language whether heavenly or human derives from one source: the Divine Name.’ The practical kabbalists, the sorcerers, bore the title Ba’al Shem, meaning ‘master of the divine name.’"
Your application just broke, oh no! It couldn’t have been your code, right?
I’ve always had trouble spotting mistakes in my own work such as spelling,
grammar, mathematical, or even in programming. With spelling or grammar,
office applications quickly pick up on my mistakes and underline them for me,
but most of my mistakes come from my own hubris. I’m confident in what I do,
and that gets me in trouble when I make little mistakes. I’m confident that I
solved this problem correctly and didn’t make any small mistakes. As a kid
competing in timed math competitions, I quickly learned that reviewing your
work cost time, so it was important to recognize where common mistakes would
crop up on certain problems and spend slightly extra time the first time
through those problem areas, rather than double checking the work in its
entirety, unless I had the time to spare. Measure twice, cut once.
ECMAScript 5’s
Function.prototype.bind
is a great tool that’s implemented in all
modern browser JavaScript engines.
It allows you to modify the context,
this,
of a function when it is evaluated in the future. Knowing what this refers to
in various contexts is key to being a professional JavaScript developer; don’t
show up to an interview without knowing all about it.
Here’s a common use case that developers need to watch for. Can you spot the
mistake?
Node.js
is a great runtime for writing applications in JavaScript, the language
I primarily develop in.
CoffeeScript
is a programming language that compiles
to JavaScript. Why would we write a reusable piece of code, a
module
, in
CoffeeScript? CoffeeScript is a very high level language and
beautifully brings together
my favorite aspects of JavaScript,
Ruby, and Python. In this tutorial, I’ll show you how I create reusable open
source modules for Node.js from CoffeeScript, which is something I recently
discovered while creating a
playlist parser module.
The point is to focus on how to turn a quick hack into a nicely laid
out Node.js module.
Just a quick post on something I just discovered and found neat (I always find
obscure C syntax interesting). I was trying to figure out how to use a C
designated initializer, where a member was a pointer to another designated
initializer. At this point, you need a compound literal. Just a quick
background on C initialization:
// verbosely create an array with a known size
int arr [3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
// => [1, 2, 3]
// concisely create an array with a known size
int arr [3] = { 1, 2, 3 }; // => [1, 2, 3]
// creates an array with unspecified values initialized to 0
int arr [4] = { 1, 2, 3 }; // => [1, 2, 3, 0]
// truncates declaration
int arr [1] = { 1, 2, 3 }; // => [1]
// based on number of initializers
int arr [] = { 1, 2, 3 }; // => [1, 2, 3]
Let’s look at how we might have initialized a struct in C89. In C89, you are
required to declare local variables at the top of a block. A previous
initialization of a point struct might have looked like: