Written by J. David Smith Published on 13 September 2015
Recently I commented on Facebook (and Twitter, see below) that I was
tempted to just have people call me Emallson. It occurred to me
afterward that most people that have me on FB (1) have never seen the
name Emallson in association with me, and/or (2) have no idea what the
background on this name is, and why I use it. So that's what this post
is for: to clarify that I am Emallson.
This
isn't my only alt-name either. The other common (public) one is
Atlanis, which this domain is named for!
Getting through all the introductions at UF, I have *never* been more tempted to give up and say "Just call me Emallson"
I got the name Emallson more than a decade ago in the least exciting
of ways: a random name generator. I was just starting to play Anarchy
Online, my 2nd MMO, and couldn't seem to come up with a name that
wasn't already taken. So I hit random. 3 or 4 tries later,
Emallson
popped up, and the game let me finish character creation and enter the
world. Not very exciting, but in some sense it was a transformative
event for me. I have a lot of good memories from AO, almost all of
them as Emallson.
AO has this interesting XP-debt system. When
you die, your unsaved XP is added to a pool and you earn 1.5X XP until
the pool is empty. At one point the pool was so full that the XP in it
could have taken me from level 40 to 80 by itself. I never got to a
very high level.
I played AO heavily for years, and very
quickly became attached to that name. The reactions I get to
Emallson
It's in my email address.
in the real world are
about what I'd expect. Weird glances, confused faces, requests to
spell it out one more time. One thing that struck me as odd was how
many people responded the same way in-game. Neither of these deterred
my use of it. Each time I explained it to someone, I got a little more
attached to it.
When I first installed Ubuntu, I had to pick a username. I'll let you
guess what I chose. I've been using that name as my Linux username
ever since. I picked up the email emallson@archlinux.us. My official
university emails are emallson (at UK) and emallson (at UF). My login
to the UK lab machines is emallson.
Still working on getting
that changed at UF
Almost everywhere except in direct
contact with other human beings, my name is emallson. In my mind, it
doesn't seem strange to be called emallson: people I know are the only
ones that don't. Funny how that works.
There is another bit of history in this name. Y'see, when I became
involved in as many different communities as I did, I had a lot of
different names. Most of them are dead now, but
emallson
Capitalization of emallson is strictly
optional.
(and to a lesser extent, Atlanis) live on. The way I
approached these community identities was very much like one might
approach a tabletop RPG character: compartmentalization of what each
identity knew and how each behaved.
First person to cry schizo
gets slapped.
I can't say for sure why I did this; I know some
part of it was that it entertained me. Emallson, being such an early
arrival, didn't suffer from this. Emallson was always me. More than
that: it was a blank slate. I knew of nothing in any way related to
anything that remotely sounded like Emallson. Emallson was connected
to literally nothing, save me and my AO character. Even my real name
has more connection than that.
My real name is Johnathan David Smith. All three terms are crowded
with others claiming the same names. You can't google that name
without coming up with millions of hits that are entirely unrelated to
me. You wanna know what you get when you google Emallson? Go look;
I'll wait. This ultimately was one of the core reasons that Emallson
stuck to me, I think. It was empty and I could fill it, versus a name
that was already full that I needed to force my way into. "'Force my
way into'?", one might ask. Yes. On my soccer team in high school, I
was Smithy, because there were other Davids and Johns. In my
internship this past Summer, I was Agent Smith, because I sat next to
John Peyton and John Butler, and again there were other Davids. The
name of the Tau Beta Pi chapter president my junior year was David
Smith – and it wasn't me.
Quite a few people on campus have already conversed with me via email.
Typically, they'll have talked with me via my University address,
which reports my name as Johnathan D Smith.
Trying to get *that*
changed, too.
The conversation typically goes like this:
"Hello; Johnathan, right?"
"Yea, but call me David."
"David?"
"Yea, middle name."
"Why?"
<insert explanation here>
It's been this way for my entire life, and I'm kind of frustrated with
it. That was the instigation for that comment. I'm tired of explaining
myself, tired of being mistaken for others. One thing I'm not quite
tired of is being able to easily hide. As names go, David Smith is
easy to go unnoticed with. Emallson, on the other hand, is still a
name, but it is mine and none other's. I can make a statement about
Emallson that I can't about David: I am Emallson, and Emallson is me.
Written by J. David Smith Published on 08 September 2015
Last time I updated my blog, I was using Clojure static site
generation built on top of stasis. This served me quite well. Over the
past week or so, I've been hacking on a new blog (and also have a new
site in progress that will be up after I move to Florida). This blog
is put together using hexo and Tufte CSS.
Why?
My old blog engine worked well for the most part. The major wrench in
the works was actually the dependency on Emacs as an exporter. It
prevented me from doing a lot of fancier things with the content
because templating by string concatenation is a pain in the ass. It
also would routinely break with updates to org-mode.To be frank, my most significant gripe with Emacs
these days is how difficult it is to maintain a statically versioned
config. Once installed, things don't update; but whenever I re-run the
setup (which happens more often than I want to admit when I'm hopping
back and forth between machines), things will inexplicably break
because a MELPA package updates.
I really liked the Clojure piece: that bit was very pleasant to work
with. I didn't take the time to understand how some of the pieces
*cough*optimus*cough* worked, but it still did exactly what I
wanted.
Ditching org-mode
I ultimately ditched org-mode entirely, which was rather
disappointing. The problem ultimately was that nothing supported it,
and I got sick of rolling my own workarounds when Markdown covers 99%
of my use case and the edge cases are covered by inline HTML.Yes, I know ox-md exists and will let me export to
Markdown, but there isn't much point in exporting from org when it is
giving me relatively little. The amount of fiddling required for the
more advanced org features to render the way I want them to is too
much for me.
I really like org-mode, so this was a tough sell for me. I even
went through and created an org AST parser in Clojure (using the
output of org-element as input) using Enlive to transform it to
HTML, but it was finicky as hell and I knew that I would not want to
update it when the output of org-element changes next.
Really, I could have plugged in markdown instead of org as the parser
for my existing blog and gotten away with it. But no. That adventure
is over for now; I have other adventures that are consuming what was
formerly fiddling-with-blog-engine time.
Tufte CSS
I fell in love with Tufte CSS as soon as I saw it. I don't know if it
is actually a great choice for my blog, but I'm gonna give it a shot!
The highlights of it are that it has excellent font design, is
incredibly simple, and has this lovely concept of margin notes.
Margin notes are really simple in concept but I've never seen them on
a blog before. I am rather fond of asides and frequently littered my
posts with parentheticals containing them. I believe that margin notes
are better suited for this.
No More Comments
I never really had issues with my Disqus comments, but I also never
had much use for them either. Nobody commented. They provided no
analytics and I doubt that I'd have used them anyway. If people want
to comment on a blog post, they can email me,
or tweet at @emallson.
Why Hexo?
I could describe some of the things I like about it, but honestly: it
was the first batteries-included static blog engine for Node that I
came across. It is doing everything I want for right now, so I'm
unlikely to change it for the moment.
In Conclusion...
This is one part of my effort to update my site as a whole. Updating
the style of my blog is an important piece. I have updated my main
page as well, and am debating whether I should stick with Bootstrap or
go with Tufte. I feel like I could accomplish a lot with that margin
to give more info and character to specific events, but we will see.
We will see.
Written by J. David Smith Published on 18 July 2015
This summer I've been interning at IBM (again) and have been the sole
JavaScript programmer working on an isolated, experimental (but super exciting)
part of the project. My mentor/boss Kris gave me complete control over the
technology stack, with the sole requirement that I not go crazy with the choice
of language.
Pushing ClojureScript or Elm didn't seem like a great way to spend my time, so
I instead chose to toy with another relatively new bit of technology:
EcmaScript 6. This page has a great overview of the new features coming to
JavaScript with ES6, but most of them haven't actually made it in yet. I used
the Babel transpiler to compile the code down from ES6 to ES5.
I was initially going to title this post "Why I Stopped Using Babel", but that
would make it sound like there was some problem with Babel. I have had no
issues whatsoever with Babel. The transpilation time was almost negligible (~1s
for my code, combined with ~4s of browserify run time), it didn't
perceivably impact performance (even when I was profiling inner loops written
in ES6), and it never caused any bugs. On the whole, Babel is excellent
software and if you want to use ES6 now, I highly recommend it. But there's the
catch: you have to want to use ES6 now. And slowly, over the course of a couple
of months, my desire to do so was sapped away (through no fault of Babel, and
almost no fault of ES6).
The problems I had were mostly with integration. Two very important pieces of
my workflow are Tern and Istanbul. Tern provides auto completion and
type-guessing that is integrated into Emacs. Istanbul provides code coverage
reports. Neither of them support ES6. With Istanbul, it was possible to work
around it by running babel on my code and then covering the ES5
output. However, the coverage reports were then off because of the extra code
that babel has to insert in order to properly simulate ES6 in ES5. Tern, on the
other hand, did not have an option. If I chose to use only fat arrows, it
would be workable because I discovered I could copy and past the code for
normal functions to those and it worked more or less as expected. However,
everything else was a wash.
So why not ditch Tern and put up with the Istanbul workaround until it gets ES6
support? As I used ES6 over the summer, I came to realize that in 99% of my
usage, it wasn't much of an improvement. let is certainly useful (and the way
it always should have been), arrow functions are awesome, and for(a of as)
finally gives a sane looping construct in the language. Other than that, the
only feature that's really exciting is destructuring, and while it is a bit of
a pain to destructure complex data by hand, it isn't something that I have to
do often. Classes were not of any use to me for this project either. None of my
data made sense to represent as a class. Although in theory my React components
would make sense as classes, I'd rather use the old, well-documented, clear
method that has support for mixins (which would have to be implemented through
inheritance were I to use ES6 classes).
The decision ultimately came down to three things:
I wasn't getting much (just let, for of, fat arrows, and destructuring)
from ES6
ES6 vs ES5 is just one more thing my team would have to pick up after I'm
gone.
ES6→ES5 transpilation is a thing that somebody would have to support after
I'm gone, and there is no telling how long it will be before it is no longer
needed.
In the interest of making the life of my successor a tiny bit easier to manage,
I ultimately chose to ditch ES6 for ye olde ES5. I had to throw out a bunch of
the ES6 prototype code anyway, so there was very little additional cost in
stripping it out of the code. Ultimately, I believe that this was the right
decision for this project. Although losing those few additional features I was
using was a bit painful, gaining the proper support of my tools and losing the
incidental complexity of transpilation was worth it I think.
I'll probably still use ES6 with Babel for small side projects. (Anything large
won't be in JS, even if it compiles to it!) If you want to try out ES6, Babel
is a very safe and easy way to do it. I look forward to the day that ES6 has
widespread support and Babel is…well, still needed for ES7 transpilation, but
that's for another day.
Postscript
I don't like the import syntax and don't even get me started on classes and
inheritance in ES6.
Written by J. David Smith Published on 23 May 2015
Anarchy Online is a weird game. It is ancient; unwieldy in a way that only
ancient games can be. The interface is bad, the gameplay is stale, and I can't
think of a single reason to keep playing it. But I do. AO is one of those games
that I keep coming back to. I can't help but wonder why.
I started playing AO a bit more than a decade ago, right when they began
allowing players to play for free. Free players (colloquially known as
'froobs') have access only to the base game and the Notum Wars boosters, not
any of the (4 at present) expansion packs. I played on and off as a froob for
much of that period, never reaching higher than level 80 (of 200).
So why do I keep coming back? More than that: why the hell did I pick up the
full expansion set this last time around? It was only $20, but still: Why? I am
beginning to understand, I think. The game is one giant puzzle.
I was playing my new Fixer, running around in the Shadowlands, trying to figure
out where to go next to keep leveling. I googled it, found some info, and set
about trying to act on it. And failed over and over again. Dangerous enemies
were between me and my goal. As of writing this, I have yet to figure out a way
to slip past them.
It isn't that these enemies are over-leveled for me either: they are on level,
and I can fight one and sometimes even two at a time without dying. However,
every entry point seems to set me against situations where I fight minimum two
and often three of these creatures.
There are many possible ways I could deal with this. Maybe I need to
temporarily blow some IP (for the uninitiated: IP increase skills) in
Concealment and sneak past them. Maybe I need to go hunt for better nanos and
the requisite buffs to equip and cast them. Maybe I need a better gun (or
two). I don't know.
As someone who loves puzzles and is absolutely unconcerned with reaching the
level cap in a timely manner, I enjoy this. The struggle just to succeed. I
have fond memories of pugging ToTW on my Agent (Emallson – my namesake),
pushing all the way to the legionnaires for efficient XP or the final boss
encounter for the wonderful loot (though I can't remember these days what he
drops). Getting there as a solo player without any consistent help was
hard. For about a month I was stuck on level 41, continuously dying before
dinging and feeding the XP into my bonus pool (Aside: dying loses XP, which
goes into a bonus pool that gives you 1.5x XP until you've regained all of
it. I really like this system).
Again: it was a puzzle. How do I survive? What can I change? Where do I go? Who
do I work with? It was fun. It is fun. This is why I still play this ugly,
unwieldy game. Come to think: its unwieldiness actually feeds into that. It
gives you most of the information you could reasonably ask for, but it's
scattered around. Figuring out which nanos I can buff into reasonably requires
finding not only what nanos I can get (in the shop) but also what buffs I can
get cast on me (by an MP most often), what weapons I can pull from missions
without spending too much on the search is something that doesn't have a good
answer because of the QL system, etc.
There are a lot of things that I like about this game. There are enough of them
that I feel I can look past the ugliness and unwieldiness to enjoy it. It's fun
to explore this world. And that's what I want from a game: fun.
Written by J. David Smith Published on 12 January 2015
2014 was a big year for me. More opportunities presented themselves, more
things changed, and more events occurred than in any time of my life
prior. It's time for me to review some of the big points; to reflect on what
went well and what didn't.
Interning at IBM
When I applied for internships in December of 2013, I wasn't sure what would
happen. I applied to big names – Google, Microsoft, IBM, and others as I did
the year prior. In 2012-2013, I got no responses. In 2013-2014, I got
many. My applications to both Google and IBM were accepted, Riot Games asked
for an interview (which I unfortunately had to decline because I'd already
accepted IBM's offer), and Microsoft ignored my existence (maybe because my
resumé is slathered in Linux tooling and has not a whiff of Microsoft on it).
I struggled for weeks with the decision between Google and IBM. Working at
Google is a dream job, but there was a catch: the project I would be working
on there was boring. Meanwhile, the project I was offered at IBM was really
cool and exciting. At the time, it involved significant open-source
contributions. Although it changed later, the change helped refine the
project goals and clarify what my team would be doing.
In the end, I chose IBM. I was both looking forward to and dreading starting
there at the end of May. What if I had chosen incorrectly? Once we got
started, however, all my doubt vanished. The project turned out to be just as
exciting as it had sounded. Even better: I had the pleasure of working with a
phenomenal group of people. On the IBM side, we had a fantastic manager (Ross
Grady) and great support from the group we were working with.
On the intern side, things couldn't have been better. My team was phenomenal:
John and Walker were (and are) great technically, and all four of us (me,
John, Walker, and Chris) worked together without even a hint of an issue
throughout the Summer. What's more, I was surprised at how welcome I felt in
the intern group. I've never been very comfortable socially, and yet by the
end of the Summer there is but one that I'd not call a friend.
The biggest benefit of the internship for me was not the technical knowledge
I gained, the skills I developed, money I made. It was the opportunity to
work with these people. Prior to this, I had never had the chance to work
with other programmers. I'd worked in a research lab, but that is a very
different focus. Seeing how capable my fellow interns were and realizing that
I was actually capable of keeping up with them was a tremendous confidence
boost for me.
I have no regrets about my decision to work at IBM this past Summer. I came
out of it knowing more, having more friends and contacts, and with several
offers for positions at IBM. I ended up declining all of them to pursue a
PhD, but set up an internship with one of the security software teams for
Summer 2015.
The Interview
In the middle of the Summer, I got a wholly unexpected phone call: a Google
recruiter contacted me about interviewing for a full-time position. At the
time, my plans for the future were undecided but leaning heavily towards the
pursuit of a PhD. I told him that I would be willing to talk more after the
Summer ended, when I had more time.
When I followed up with him in August/September, things moved rapidly. I was
able to skip the phone interviews because I'd done well enough on the ones
for the internship to receive an offer. I got to fly to California and do
interview in person! Working full-time at Google requires passing a high bar,
so being interviewed indicates that I may be close to it.
In the end, I did not receive an offer. However, I was thrilled at the
thought that I might be capable of reaching and surpassing the skill level
needed for entry. This also forced me to mentally work out how to deal with
serious rejection. I have been generally successful throughout my life, and
hadn't had any rejection on this level before. I am glad that it came at a
time when I had the opportunity to stop and think about it, rather than a
super-busy season.
The Fulbright Program
I also began working on an application to the Fulbright U.S. Student Program
in the summer. This program – if I were accepted – would let me study at a
school almost anywhere in the world. The program grant covers one year, but I
will be able to build a case for financial aid and visa for continuing on
should I desire.
The application for this is for the most part not too bad. However, the two
essays that go along with it (Personal Statement & Statement of Purpose) were
especially difficult. I had never written anything like them before and was
ill-prepared to do so. The advisor at UK was incredibly helpful in this, and
I believe that I ended up with a competitive application. Regardless, I spent
a solid month and a half thinking about nothing else. This prepared me well
to write the statements for grad school applications, but was a significant
time sink.
The worst part about this application is that I won't know the result until
March of this year, while the deadline was September of last year. The long
waiting period is killer, and is a problem I am facing in other areas as
well.
Graduate School Applications
This is where I made my biggest mistake of the year: I did not work on grad
school applications on Thanksgiving break. I took the week off: I slept, I
played video games, I wrote code. I did not apply to grad school. Because of
this, I was ill-prepared to meet the popular 15 December deadline. I was more
prepared to meet the 1 January deadline that others have, but between the
insanity of finals week (15-20 Dec.) and Christmas, ended up being largely
tardy with that as well. (Also, far fewer schools have the later deadline)
I learned in 2012/2013 not to wait so long. I made a point of doing
internship applications in '13 on Thanksgiving break so as to not miss
deadlines. I learned the lesson, and then in arrogance forgot it. I applied
to four schools: MIT, Texas A&M, UFlorida and UKansas. I have already been
accepted into UKansas (0.0), but we'll see what happens.
I probably won't hear back from the other three schools until mid-March. I
will have little enough time to make a decision, and will have to start
planning for the Fall immediately. What really gets me is simply the waiting
period. I do not know what will happen. I cannot realistically make any
plans for or assumptions about after the summer until March. It sucks. I
don't like it.
Goals for 2014
I didn't really set goals for 2014. One that I stumbled upon through
meditation on Tom Shear's (Assemblage 23) Otherness. This is a long-term
goal: be a better person. I started trying to write down a concrete list of
this while writing this blog post, but I will need to think about it more. I
realize how incredibly wishy-washy 'be a better person' is, and need to nail
it down so I know what I'm going for. Details will be a blog post sometime in
the next week.
Looking Forward: Goals for 2015
I am not a fan of New Years resolutions, and thus have none. However, over
the course of last semester I became of several deficiencies in my overall
behavior. In particular: my aversion to lists and my inconsistency.
Lists are helpful tools, yet I often do not use them. I saw how my dad became
dependent on his lists to remember things and suppose I overreacted. I
started keeping lists of assignments and due dates during this semester, and
it helped reduce the number of times that I missed an assignment due to
forgetfulness.
This is one method of moving towards my present goal: becoming more
consistent. Self-discipline is not one of my strong points, but I have been
working on improving. The impact of this will be better control over what I
buy, what I eat, and how I spend my time. It meshes well with my goal of 'be
a better person' (lol), as control will allow me to be who I want to be.