101 reputation
bio website ripple.com
location Las Vegas, NV
age 37
visits member for 2 years, 6 months
seen Jan 24 at 8:35

I am a software engineer, a mad scientist, a specialized generalist and a renaissance geek.

I grew up playing with test tubes and beakers, reading history and philosophy books, making model rockets, drawing just about everywhere, playing basketball, and tinkering with remote control cars and planes.

Currently, I am working at Ripple Labs, on Ripple: a distributed payment network that allows anyone to send money to anyone else, in any currency. It is based on the same principles as the Internet: free for everyone, accessible to anyone, owned by no one, and connecting the whole world on a shared network. You really should check it out - visit us at https://ripple.com.

I have worked as a software engineer for over fifteen years and although C++ is my favorite plaything, I have many others toys at my disposal and use them to do amazing things. I have developed just about everything – from shiny user interfaces to low-level kernel drivers. I've worked on servers that handle tens of thousands of users, caching software that accelerates hard drives using SSDs and encrypted distributed storage & backup systems.

My interests are diverse; beyond math-based currencies, they involve next-generation interactive software and input methods, cryptography, security, static software analysis, software protection, cloud storage and performance optimization.

You can find me on Twitter as @nbougalis or reach me by e-mail at nikb@bougalis.net.

comment What should I know about C++?
@greggo it is nonsense - one may as well complain that a coffee mug doesn't protect you from accidentally pouring salt in your coffee. The fact is this: C and C++ don't know anything about your program or the system it's running on. The language could not possibly address the "zomg! my program was overwritten" concern without us first fundamentally altering the underlying assumptions on which the language is built.
comment Do you think that storing a variable length encoding in std::string or std::wstring is OK and do you do it?
@ChristopherCreutzig Absolutely. Diacritics, combining marks, non-space space characters and so on. It's unclear what “single character” means when dealing with these kinds of encodings.
awarded  Autobiographer
comment How would you react if someone told you your code is a mess?
"90% of the programmers in the movies are so fake I have tears by the end of the sequence." 90%? What movies do you watch? :P I haven't seen one movie that accurately depicts what it is we do. And then there were "Swordfish" and "Independence Day"...
comment What should I know about C++?
"There is nothing preventing you from overwriting your own program code" Huh? What? This isn't the fault of the language - indeed, in most operating systems this isn't actually doable unless you actively take steps to make it possible. And poorly written programs are potentially exploitable regardless of the language they're written in. Yes, C++ is low-level and, yes, it has its flaws, but let's not go overboard with nonsense like that.
comment Do you think that storing a variable length encoding in std::string or std::wstring is OK and do you do it?
I don't disagree about thinking of strings as arrays of code points, but in many respects that's not practical in a number of applications (think, for example, a password verification routine that must impose restrictions like "at least 8 characters", or a "display name" verification routine that must impose restrictions like "at most 256 characters"). What we need is to bite the proverbial bullet and agree on one damn encoding, instead of having 739 different ones, each with subtle and highly esoteric differences.
comment What is upcasting/downcasting?
JustaPro: adding virtual is unnecessary but doesn't "hurt". Can you elaborate on why you think it should not be used at all in that context?
awarded  Supporter