Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Logit and Expit

Logit, or log-odds, is a sometimes useful function for dealing with probabilities in a more intuitive fashion. Expit is its inverse. This was kind of a tricky algebraic proof for me, but I am out of practice... For the following, assume I'm using log() function in base 2, because I'm a programmer.

[math]logit(p) = log(odds(p)) = log(\frac{p}{1-p}) \\
expit(p) = \frac{exp(p)}{1+exp(p)} = \frac{2^p}{1+2^p}

In order to prove these are inverses, I am going to prove that

See Full Post and Comments

Just let me type

I like typing. Many programmers don't seem to, but that's ok, we still manage to work together. Except I basically have to use Eclipse for work. (Some people use IntelliJ but I've tried it, it's not sufficiently different or better for my work use-case...) And Eclipse frequently gets in the way of me just typing. I know there are things I could do to alleviate it, but I shouldn't have to!

For example, I want to add braces around a lambda to expand it to a more complicated lambda. I move the cursor to the start of the lambda body, type '{', and... I get a '{' at the end of the line. Syntax error, not what I wanted... I'm still not sure how I eventually got my brace there but it totally took me out of my thought processes to solve this error.

Other times, the whole UI will lock up as I'm typing due to the intelli-sense stuff. I type . and try to type the method name, but it locks up. I'm not even pressing ctrl+space to have it autocomplete, it can still lock up. The worst is when it "can't find a completion" and has to pop up a dialog telling me about that after I waited for many seconds, and I know the completion exists, but some issue has made Eclipse unable to find it which usually resolves with some form of restarting/project nuking.

See Full Post and Comments

Passionate about what again?

I was looking at my resume from 2014, which I haven't really updated since then since I've been employed. One of the line items is "Passionate about Linux-as-a-platform and open source software."

But I haven't really made any open source contributions worth mentioning since 2012. And while my employer runs Linux in production, a lot of the fellow developers seem to prefer their macbooks or their mac towers to the Linux tower option (we have no Linux laptop option so I use a windows laptop to remote to my Linux tower), and there's been talk for a while now about running docker in production instead. In any case I don't work anywhere near that level in our tech stack, my life is mostly a backend Enterprise Java app hell with occasional forays into our enterprise frontend hell...

I've since learned to be more passionate about making quality software first, but I'm still pretty ambivalent when it comes to existing tire fires. That is, it's fine to make them a bit worse, try not to make them a lot worse (though that is hard to do), it's better to make them more manageable or contained (yay a few unit tests here and there..), and it's impossible to ever put them out. So I think for my resume update I'll put "Passionate about Linux-as-a-platform, open source software, and quality software first." but I know in an interview setting I'd only be able to talk about the benefits of using and contributing to open source, without having much to show on the contributing part since 2012.

See Full Post and Comments

Google WhoIs Protection Doesn't Protect

So, I own the domain but not its content. All my domains I've registered through google (and they then register it with enom) because it used to be pretty simple to register and then configure, it was a consistent $10, they didn't try to upsell me a gazillion things, and their auto-renew policies are kind. (I lost a domain to iDotz before. Never Again.) Additionally they provided whois protection for free. I don't really care about that these days but it was more important to me then (and should have been more important to an old acquaintance I once freaked out when I discovered their name and address simply by checking whois...), in any case it's a nice to have, especially because I hate being forced to be dishonest to protect something. The last name I gave Google was fake as you'll see, but the address used to be a place I lived.

Tonight I was going through my spam folder because gmail's spam filtering has gotten a lot worse than it once was. Found a non-spam email of course. And then I found a spam email about the above domain name expiring this month and telling me to click a link to pay for renewal. (If you actually check the whois, you'll see that it doesn't expire until January.)

What startled me was that it contains the very fake last name and once real address (from which you could infer my last name of course if you wanted to do it the hard way) that google knows, but isn't part of the public whois record. So what gives? How did the info leak? Was there a DB breach I didn't hear about? Or is it trivial to just contact the whois privacy agents and get the real data?

See Full Post and Comments

Tooling is the problem, not the type system

I'm firmly in the dynamic typing camp, but I also recognize that some dynamic languages like JavaScript leave a lot to be desired. I think that almost all of the things that might be desired can be addressed with tooling, however, and that tooling can be addressed in three ways.

The first way is on the language level. This is best because there's nothing more to do. Common Lisp is more than just a language, it's also a runtime, and a compiler, and the runtime itself ships with a COMPILE function. Normal operation is to COMPILE every piece of Lisp code into assembly and execute it with runtime wrappers (just like C compilers end up converting C to assembly with runtime wrappers around things like calling conventions). The artifacts that go along with being COMPILED let you later tell the runtime to TRACE something, or profile something, or BREAK and debug something step by step (with other much richer debugging options than you normally get with gdb or eclipse with java), they let you ask the runtime "who calls this function?", or "where is this thing referenced?", or "who sets this?" The answers to those questions will be complete as of right now because you're asking a living program.

In Java Land, I commonly ask about who calls what, or to find references for something. It's often slow, and that's even after it's done its indexing work. Yes, in Java Land these questions are derived statically, which means they can be wrong because you might not have statically seen everything, in addition to they might be wrong if they're stale because you're asking again in the future. With Lisp, you just have the second possibility of wrongness. Another advantage is that you tell the Lisp compiler how you want your source compiled right there, in the source, so you can of course tell it to optimize purely for speed and no safety and perhaps not full support for everything that might only be useful at development time.

See Full Post and Comments

Delicious baked goods

you need eyes

Why do so many things named after a grandma taste so good? My grandmas cooked delicious meals, did everyone's?

Anyway, this brand of bread and this brand of sugar cookie are the best (that is, my favorite) but previously I could only get a hold of them in Utah. Once I even made use of a Mormon missionary care package website to ship a bunch of the cookies to me out here in Washington. Utah residents know what I'm talking about, especially with the Granny B's pink cookie.

See Full Post and Comments

Why not wireheading?

A ton of money and engineering is being spent on trying to reach the dream of full-body haptic VR. Many of the components are ready, and they're being pieced together bit by bit into a full system. The company furthest along doesn't really think of these as individually owned devices though (probably because their full thing requires a giant hydrolics-powered arm that swings you around and lets you 'run' in place), more of something you'd find at an "arcade" or other experience-center. To me that's a mistake, in-line with companies that try to justify space research with 'space tourism' for the ultra-rich, but we'll see how it plays out. Go-Kart tracks are still a thing after all.

Prices may fall, but by how much? Physics demands certain requirements of a powered machine capable of suspending and manipulating an average human, and that level of equipment isn't going to fall that much anytime soon without breakthroughs in other technologies.

All this leads me to the titular question, albeit my terminology may not be precise. Why not devote the money and time into figuring out wireheading? By that I mean not just implanting a wire to stimulate one's pleasure center, but the act of implanting a wire or device or devices that can input arbitrary signals to the brain as if they were real. (If someone has a better word I'm willing to update this post with it...) I'm not fully convinced that the combination of vibration, heat, and pressure will really simulate the feeling of holding a cat, but if you hooked up some signal loggers to my brain, you could have me hold a cat, record it, and then replay it later.

See Full Post and Comments