Cover photo
James “X” Nelson
Works at Appian
Lives in Kitchener-Waterloo, ON, Canada
275 followers|150,352 views


James “X” Nelson

Shared publicly  - 
Woohoo! My video from GWT.create is live! :-)
More GWT.create 2015 videos - Building a GWT 3.0 App with Java 8 by +James Nelson now live at
Tessell: A functional* reactive framework for GWT. While few would call Java or GWT "functional", the main idea of reactive programming can be applied to GWT applications to radically simplify large applications with complex behaviors. Tessell is a framework that provides a reactive core and a ...
View original post
Add a comment...

James “X” Nelson

Photos, Videos, Slides  - 
Hello all. Here are the slides for my presentation @ #gwtcreate on using Java 8, Elemental, JsInterop and Web Components.

Although the code is all available now, it requires v building a few dependencies from source, so I will push those dependencies to maven central this weekend or shortly after the conference so everyone else can enjoy java 8 and web components!
Lucian Furtos's profile photoFlorian Friemel's profile photoMrabti Idriss's profile photoPablo Nussembaum's profile photo
Great stuff :) Only I want to add is that our ahome-titanium(titanium4j) actually helps create true native mobile apps. Not only native wrappers like gwt-phonegap does.
Add a comment...

James “X” Nelson

Shared publicly  - 
mGwt users out there, be sure to check out the 2.0 rc!!
Looking for feedback on mgwt 2.0 rc1:

 ·  Translate
Mit Google Groups können Sie Online-Foren und E-Mail-basierte Gruppen erstellen, sich daran beteiligen und interessante Diskussionen mit anderen Mitgliedern führen.
Add a comment...

James “X” Nelson

Shared publicly  - 
...And why are we still dredging up lubricating fluid from the Earth's crust for fuel when this massive ball of nuclear fusion showers us with far more energy than we use...
Great Meme/Question to Grok the Power of Solar Power
For context: the sun has almost exactly a million times the volume of the earth, so this image is not out of proportion. The sun is a fusion reactor perfectly sited the Goldilocks distance from earth —not too near and not too far. Just right. 

Every second, 600 million tons of hydrogen are FUSED (yes...fusion, baby) into 595 million tons of helium. Each gram of that missing matter, via the magic of E = MCsquared, releases a nuclear bomb's worth of energy, in the form of photons, units of electromagnetic energy. About a thousand years later, these photons make their way to the surface, where one-billionth of them hit the earth, giving us 6,000 times the energy we use from all sources, including the 80% we get — absurdly — from the dead plants and dead animals baked and squeezed from 600 million to 350 million years ago.
Stuart Fisher's profile photoAxel Regnoult's profile photo
Add a comment...
I'm curious...  Is there a reason StandardGeneratorContext.generatorResultCachingEnabled defaults to false for production compiles?  Is generator caching only designed for dev mode?

I've been trying to update my generators to use more robust caching by storing timestamps on the RebindResult, but it seems that result caching is always disabled except in dev mode.  (This project is built against 2.5.1, in case this behavior has changed).

So, for now, in super dev mode, I'm stuck with using the @Generated annotation to store a hash of the generated value; in order to use this method, I have to regenerate the result every time, and then compare the MD5 of generated source against an annotation on the existing result to see if it's changed or not.  

Maybe I'm doing something wrong, but if anyone can shed a little light, it would be much appreciated.
Colin Alworth's profile photoBrian Slesinsky's profile photoJames “X” Nelson's profile photoSachin Shekhar R's profile photo

Do let me know if I can be of any assistance.

An organized way to declare "these types and resource files are my inputs" would allow us to accurately invalidate generated results; static generated results would not have any input files and would thus never invalidate, while anything generated from css files or interfaces would have its lifecycle bound to those inputs.

Perhaps we could supply a special TypeOracle and ResourceOracle (or methods on GeneratorContext) that takes an extra boolean parameter to say "only call me again if this resource I'm asking for changes"?  For easiest adoption, it would make sense to provide oracles that automatically trigger an input/output relationship, but... well, I'm sure you've thought of all this. :)

Good luck, and thanks for all the hard work!!
Add a comment...

James “X” Nelson

Shared publicly  - 
Yeeeeeeeessssssssss! Progress.
Software patents aren't dead, but they just took a blow. In a unanimous decision, the Supreme Court has ruled that a series of banking patents didn't cover a concrete software process but an...
Add a comment...

James “X” Nelson

Shared publicly  - 
Probably the coolest new thing coming to the Gwt ecosystem!

Think angular style templating, except the binding is done at compile time so it's far faster than angular, with type safety and the potential for cross-platform code reuse to native Android, iOs and (if JUniversal pans out) Windows Phone.
Wayne Dyck's profile photoKonstantin Solomatov's profile photo
IMO, it's not the coolest thing. The coolest things is Java 8 support :-) However, angular style stuff is quite useful for simple apps.
Add a comment...

James “X” Nelson

G+ General Help  - 
I've made a comment on this post: but that comment is only visible to me and not to others.  Help!!
John Elstone's profile photoSushubh Mittal's profile photoJames “X” Nelson's profile photoDisebo Martha's profile photo
Very frustrating indeed.  I suppose there's little point in getting butthurt over it...  I just wish I knew why I'm getting filtered... and now wonder how many times I "got no reply" was because my on-point reply was treated as spam :-/
Add a comment...

James “X” Nelson

Share hints and howtos  - 
So, I came across an interesting snippet of code that I thought I should share with performance minded people out there...@SpecializeMethod

It's four months old, and only appears to be used in one place so far: AbstractHashMap.

It seems as though this is an optimization that can give the compiler a hint about how to optimize a specific method call to a given method.  For example, AbstractHashMap.containsKey(Object key); if that key happens to be a string (which we check for at runtime), we defer to a String-optimized implementation.  Yay.  But, why do at runtime what we can optimize at compile time?  If the compiler knows you've invoked that method with a string, we should be able to erase that runtime check entirely.

If my understanding is correct, when using @SpecializeMethod, instances of JMethodCall that match the specialized parameters will be re-routed to the optimized target method.

This is very cool, and I'm glad to see nuanced performance concerns receive the attention they deserve.  Depending on the compiler to statically analyze code is nice, but giving it hints like this will really help to ensure maximal runtime performance.

My only question for the team is, is this an optimization we can expect to be stable in the future and use safely in our libraries / frameworks?  I.E, is there a chance it will be getting renamed / put into a different package?

Thanks so much!
gwt / gwt / master / dev / core / super / com / google / gwt / core / client / impl / 37aa385 Code cleanup. by Roberto Lublinerman - 4 weeks ago; 3f3e922 Adds @SpecializeMethod internal compiler hint. by Ray Cromwell - 4 months ago. Powered by Gitiles.
Daniel Kurka's profile photoJames “X” Nelson's profile photoSAMBATH KUMAR LOGAKRISHNAN's profile photo
Okay, cool. I would imagine this could get dangerous and confusing if people started using it to make exotic and complex (read: error prone) method redirects.

Thanks for clarifying... I will avoid playing with it until it's public api. Perhaps we should use something like @Experimental to denote that end users or third party developers shouldn't start using it.

Add a comment...

James “X” Nelson

Shared publicly  - 
Though we lack the power to change our brains (much) we all have the power to change our minds! Trouble is, we don't really learn such skills until we really need them, even if they can lead to a much happier, stable, self-directed life.

Don't wait, speak to everyone you know about philosophy, psychology and the power of the mind today!
When I was in my late teens, early 20s, I was depressed over a number of issues. Almost all of them were bogus beliefs I had about myself and my situation that I had come to see as unshakeable truths about the universe. Two things happened to unravel this, and I've never been depressed for even a moment since, for over 20 years.

The first, was a college philosophy course that introduced me to Taoism, and a workshop I did on Buddhism. Now, I have long been an atheist since about 12 years old, and I don't believe in any of the supernatural aspects of any religious practice, however, I did learn to 'unlearn' much of the 'truths' I knew about myself because of the influence of these ideas, as well as the fundamental ability to be mindful of desires and how they create unhappiness.

The second was reading about Cognitive Behavioral Therapy and doing some sessions with a CBT therapist. No, I don't believe that all forms of depression are related to bad thinking, clearly, some are chemical imbalances like bipolar disorder, but the ability to quickly recognize when you are making negative assumptions and treating them as fact, and then using those to beat up on yourself, is invaluable is not falling down the rabbit hole of depression.

Maybe it appeals to me because of orientation towards scientific based thinking, but if you are a scientifically minded person, and believe that theories must have observational evidence to back them up, and that non-falsifiable theories are garbage,  then CBT may help, because you can easily recognize when you are making up bad theories about the world (e.g. 'I'll never get that job I want because of XYZ') on zero evidence, and learn to reject them.

Otherwise, bad theories about self become like scabs that you love to pick at, and the constant retreading and picking at them, prevent them from healing, and continue to make the deeper.

You can't "think" through a bad idea and explore it like some therapy techniques. I think that just reinforces it. You really just have to learn that they are bogus, hyperbolic beliefs without support and focus on ''unlearning' the 'facts', not 'exploring the foundations' of them.
Add a comment...

James “X” Nelson

Shared publicly  - 
Here's a couple photosphere's from the top of craggy pinnacle on the blue ridge parkway near Asheville North Carolina. ... Having such an excellent birthday extravaganza with my lovely new wife. :D
Johannes Barop's profile photoJames “X” Nelson's profile photoJoel Webber's profile photo
Wonderful place, Asheville! Let us know if you're ever in the Atlanta area.
Add a comment...

James “X” Nelson

Shared publicly  - 
How oh-so-awesome is this!!

Tesla Motors follows in the spirit of Tesla himself,
and turns over it's Information Property to the public sphere,
thereby accelerating the inevitable death of the gas engine.

/happy dance/
#Tesla   #OpenSource  
“Yesterday, there was a wall of Tesla patents in the lobby of our Palo Alto headquarters. That is no longer the case. They have been removed, in the spirit of the open source movement, for the advancement of electric vehicle technology.” Musk, an entrepreneur who made a fortune with the PayPal ...
Add a comment...
Have him in circles
275 people
Shanna Ingalsbee's profile photo
KW House and Pet Sitting's profile photo
Joseph Lust's profile photo
Yannis Bres's profile photo
haithem mosbahi's profile photo
Julien Dramaix's profile photo
Gael Lazzari's profile photo
Dean Jones's profile photo
Emil Yaroslav Andersson's profile photo
Web Application Engineer
  • Appian
    Senior Software Engineer, 2012 - present
  • We The Internet
    Founder & Chief Programmer, 2012 - present
  • Promevo
    Software engineer, 2010 - 2012
Basic Information
Wise Words Woven With Will Wake Worlds

I code copious amounts of java, 
and dabble in many other forms of scripting
including, but not limited to:
go, javascipt, svg, bash, maven, actionscript,
politics, poetry, philosophy and human conversation.

My current project is the XApi platform,
which is a cross-platform java framework
designed to target the following devices:
Andriod, Java Runtime (Linux, Mac, Windows),
PlayN (iOS and Flash), GWT (webkit, firefox, ie),
Appengine, JBoss and Vert.x.

Needless to say, it is not 1.0 yet,
but I do have a fork of the collIDE project
set up as a standalone, pluggable, 
real-time collaborative web IDE,
with an integrated GWT compiler,
for rebuilding itself or other modules in SuperDevMode.
(Video and source coming soon!,
once terminal with maven autocomplete is done!).

Code is poetry.
Bragging rights
Built and maintained the #1 rated Google Apps control panel (@Promevo)
Map of the places this user has livedMap of the places this user has livedMap of the places this user has lived
Kitchener-Waterloo, ON, Canada