
Show HN: Twenty - sossles
http://twenty.frenchguys.net
======
codybits
I was wondering how a quick random player might fare so I made a simple one. 
Paste this into your inspector console (or in chrome _type_ "javascript:" into
the URL bar and paste it):

    
    
      function countPieces(){it=b.pieces();for(var e=0;it.current();)e++,it.next();return e}function getRandPiece(){for(var e=b.pieces(),t=Math.floor(Math.random()*countPieces()),n=0;t>n;n++)e.next();return e.current()}function stackRandPiece(){if(!b.isBusy()){if(b.isGameOver())return void clearInterval(randInterval);var e=getRandPiece();b.setTarget({x:e.pos.x+100,y:1500}),b.grab(e),window.setTimeout(function(){b.setTarget({x:200*Math.floor(7*Math.random())+100,y:1500}),window.setTimeout(function(){b.release()},15)},15)}}randInterval=window.setInterval(stackRandPiece,40);
    

Original code here:
[https://gist.github.com/CodyWalker/842149b82ed363659678](https://gist.github.com/CodyWalker/842149b82ed363659678)

The highest I've seen it manage is 17. 

~~~
ColinWright
My background seems to be significantly different from most people here - what
you've written there is something I'd like to learn about, but have no idea
where to start. 

I've copied your code, hit "F12" in Firefox, but where do I paste it? 
Where/how does it run? 

How can I learn the basics of this stuff without wading through the mindless
tutorials intended for people who have never coded? 

For reference, I've written safety-critical real-time embedded systems in
assembler and C, and these days I write number-theory and expert systems code
in Python. 

Where can I start that doesn't patronise me to death? 

~~~
pbhjpbhj
I'm a non-programmer [I've only made programs in BASIC, Fortran, C, C++,
assembler, smalltalk, javascript, BASH, probably a couple I forgot (does Maple
count), and most recently python (lol - I mean to say my level is 'interested
amateur')] but I found this [1] quite a nice reintroduction to javascript the
other day. 

It gives a good review of javascript syntax, goes over the intricacies of the
loose typing system and variable scope, covers some detail on avoiding memory
leaks and some browser specifics (which I think are probably out of date; I
didn't review it thoroughly I was playing Minecraft at the time) and gets up
to anonymous functions and closures. 

 _Aside: Incidentally if someone would like to explain closures to me I 'd
appreciate it - I don't really understand them._ 

Code Academy's [2] javascript looks very basic but Code School [3] seems to
have better beginner stuff - I've done their git/jQuery courses before and
they were quite well done. 

HTH. 

[1] [https://developer.mozilla.org/en-
US/docs/Web/JavaScript/A_re...](https://developer.mozilla.org/en-
US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)

[2] Avoid for javascript, very basic:
[http://www.codecademy.com/courses/getting-
started-v2/0/1?cur...](http://www.codecademy.com/courses/getting-
started-v2/0/1?curriculum_id=506324b3a7dffd00020bf661)

[3] [https://www.codeschool.com/courses/javascript-best-
practices](https://www.codeschool.com/courses/javascript-best-practices)

~~~
tankenmate
As an old joke (a ha-ha only serious joke) goes, closures are a poor man's
object orientation, and object orientation is a poor man's closure.  Going on
the list of languages you have above I'll take it from the object orientation
side of the argument.  Object orientation works by binding functions to data;
the data is persistent for this instance of the object (in the sense that the
data remains available as long as the object does) and can be manipulated by
the functions bound to that data.  Closures on the other hand bind data to
functions; so the function is always callable but the data is bound to this
instance of the function.  So you can have many instances of a function each
with it's own data bound to it.  In most languages that support closures
functions are considered a "first class" data type; i.e. individual functions
(and the data bound to them) can be passed just like variables (sometimes with
caveats depending on the implementation).  Typically this comes hand in hand
with "anonymous" functions; functions that don't have an entry in the symbol
table, i.e. they don't have a name in the function / object namespace. 

If you truly want to understand _how_ it works then you'd probably want to
write a compiler that supports closures; you'd then need to cover issues like
how to allocate functions on the heap, the difference between locally
allocated (typically on the stack) data bound to functions and globally
allocated (typically on the heap) data bound to functions. 

The second part to closures is understanding the theory, or the _why_ and the
high level functionality that it enables, such as callbacks with state or
interactions with the likes of recursive (y-combinator like) functions. 

EDIT: minor grammar fix

~~~
Lawtonfogle
Am I correct in my understanding that with a closure, it is one or more data
bound to one function, while with object orientation, one or more functions
are bound to one or more data? 

~~~
Jtsummers
Yes, but it can go a bit further. 

[http://c2.com/cgi/wiki?ClosuresAndObjectsAreEquivalent](http://c2.com/cgi/wiki?ClosuresAndObjectsAreEquivalent)

A singular closure is 1+ data bound to an entity (function).  A singular object
is multiple data/functions bound to one entity (object). 

In the link above there are examples of either generating multiple closures
tied to the same set of data (like tel's example), and also examples of having
a singular closure that takes as a first parameter a "method" name and
branching based on that.  Using either solution you have an OO system using
closures as your basis. 

------
cpolis
I loved Threes, 2048 and this is just as great - thanks! 

However, one thing that I dislike about this game(and something that could be
changed in the next version or permutation) is that gameplay is TIME based
instead of TURN based.  It makes the game less about strategy and more about
being quick with your mouse.  It also makes the game less appealing as a
background task and something to stop and come back to; ie something to do
while waiting for something to cook or during television commercials. 

~~~
sossles
As mentioned earlier, I'm considering a turn-based variant.  Try this prototype
(ie.  gameplay, rules and URL are subject to change):

[http://twenty.frenchguys.net/play2](http://twenty.frenchguys.net/play2)

~~~
danneu
This is the best mode yet since it's not just a frantic rush. 

You're onto something here. 

I think the gameplay of this variant would be much deeper if the ticker only
ticked when you didn't make a match. 

~~~
jffry
or even potentially the counter goes back up for each mach.  A single-match
move would mean no change in the counter, while a combo move would drive the
counter back upwards

------
ethanmad
This game is really great!  I think we have the next 2048 upon us.  In my few
tries I can't get past 15, which makes me keep wanting to do it one more time. 

The increasing difficulty to get to higher numbers with the randomness of
high-number drops makes the game exciting and the timer makes it frantic. 

I look forward to trying two-player mode.  Stealing blocks from the opponent is
a great mechanic! 

The one suggestion I can make is to give high-number blocks (15+?)  something
to make them stand out, similar to how 2048 indicated higher numbers.  The
sound effects throughout the game are great! 

~~~
sossles
Thanks so much, I can't tell you how good it is to hear nice things after
spending so many evenings fine-tuning everything. 

As to your suggestion, you make a good point.  It was very hard to come up with
20 distinct colours (let alone 30, as one of the iOS-only modes requires!)  and
maybe something extra is required. 

~~~
gokhan
Borders?  11 is yellow, 21 is yellow with thick border, 31 with a thicker
border (or red border, or striped border etc.) 

------
somedangedname
Instead of saying 'pick up tiles and drop them' in the tutorial, how about
'bump tiles into each other' or something like that. 

I didn't realize until halfway through the first game that you could combine
tiles laterally without having to pick them up off've the stack. 

Great idea for a game. 

~~~
sossles
I must admit I agonised over that initial wording many times over.  In the end
I said "drop" because many first time players didn't realise it was gravity-
oriented and that was just enough of a hint. 

It was somewhat by-design that there are a few "secret" mechanics to be
discovered. 

~~~
christianmann
See, I actually started thinking in 3 dimensions when I read that comment --
like dragging and dropping files, for instance.  I didn't realize that they
would block each other until a few levels in. 

------
pazimzadeh
The drops don't seem random:
[http://f.cl.ly/items/1Z232p073A40323n3o30/Screen%20Shot%2020...](http://f.cl.ly/items/1Z232p073A40323n3o30/Screen%20Shot%202015-05-13%20at%2011.16.38%20PM.png)

------
AlwaysBCoding
Good concept, I hate games with timers though.  You should have an option to
turn it off, I like enjoying strategy games + taking my time

~~~
sossles
A few people have said they are keen to play without a timer.  The iOS app does
have a "Zen" mode (along with a few other variations) but I'm actually
thinking of building a separate game where the modes are all turn-based.  The
hardest thing is thinking of a good name that both associates it and
distinguishes it from this game. 

~~~
JoshTriplett
I'd enjoy playing without a timer, but with the stack rising after every N
moves _that don 't make a combination_.  That would force an economy of
movement: how can I not only throw this block out of the way, but combine it
with something so that it doesn't cause the stack to rise? 

~~~
sossles
I have a prototype that does exactly that.  It's fun to an extent but it needs
an extra something. 

EDIT: What the heck, you might as well have a look at it.  This prototype is
older and maybe buggy but you get the idea:

[http://twenty.frenchguys.net/play2](http://twenty.frenchguys.net/play2)

~~~
kissickas
That doesn't do exactly what GP said - only penalizing you for moves that
don't make a combination. 

However - that game is much better, in my opinion.  Thanks for letting us try
it out! 

------
oneeyedpigeon
Love it, but the app requires access to 'Photos/Media/Files' \- there's no way
I'm prepared to give such access permissions to a game. 

~~~
towelguy
This.  Why would it need access to my files? 

~~~
sossles
All it does is save a screenshot so it can be shared, but unfortunately that
needs to be saved to external storage (as I understand it). 

------
downandout
I really like these kinds of games where the ideal strategy is exactly the
opposite of the seemingly obvious play.  In my few tries it appears that the
ideal strategy is to ensure that you create the lowest number of unique
numbers that you can, rather than racing toward the goal of 20.  If you create
a few high numbers early, you are courting disaster later in the game because
you won't be able to combine them. 

Great concept and execution! 

------
overload119
Awesome! 

1\. Love the tutorial, super simple and I loved how you introduced harder
concepts like linking blocks later on.  2\. The objective is clear and
challenging right from the get-go, as opposed to introducing levels, the game
just naturally kind of gets harder.  3\. After introducing the timer that's
when I was like "oh shit just got real" and I felt that pressure made it more
fun

You think you've done a bunch of things right here.  Nice work. 

------
OmarIsmail
Fantastic game!  It really shines on mobile and you've done a phenomenal job of
making sure the block sticks with your finger even with aggressive moves.  One
usability improvement would be to maintain the "hold" state after a block
combines. 

So if I'm holding a 3 and bring that to another 3 all while keeping my finger
held down and then continue to move my finger somewhere else I don't take the
new 4 block with me.  I have to raise my thumb and do a new tab and swipe.  If I
can just keep my thumb down then it makes the game more fluid and you can get
some nice chaining/combos going. 

Also, if you do put in a leaderboard system then you should definitely involve
time, and have the timer running when the game is in "paused" state (not
background, but pressing the "pause" button deliberately).  I've been
"cheating" by pausing to collect my thoughts and plan out my moves. 

Seriously, a great game - kudos and hope it's a big success for you. 

That moment when you hit 20 and then the "twist" I just got a huge smile on my
face :)

------
JoshTriplett
Got to 15 on my first try.  Would likely have done better with a touchscreen;
it's much harder with a mouse.  Ultimately, it was the introduction of locked-
together blocks underneath other blocks that killed me, and in particular the
fact that blocks you already had "loose" can suddenly get locked to other
blocks. 

~~~
mdaniel
The Android version is a ton easier to play, but I feel there is something
lost when trying to see the whole field of play on a tiny screen.  I'll try it
on my Nexus 10 and see if that's any better. 

I agree wholeheartedly with the other comments: this is a awesome game and
well executed! 

Small nit: on Android apps, traditionally pressing the back button when at the
"home" or top-most screen of your app will either exit, or prompt to exit. 

It was also extremely not obvious how to disable the sound; traditionally I
would have expected that to live under the "More ... " item at the home
screen. 

I hope these are taken merely as suggestions, and not as criticism. 

------
gelatocar
I'd love to try this with the ability to 'throw' tiles around, so they
maintain some velocity after letting go of them.  Obviously they'd still have
to snap to the grid but it would be cool to be able to chuck a tile from one
side of the screen to the other. 

------
jqm
Awesome game. 

But I would suggest renaming it "16".  That way I can feel better about
performance. 

~~~
jqm
Update: actually, "17" might be a better name. 

This game is addictive. 

~~~
vacri
I agree with "17".  Sounds quite satisfying. 

~~~
nationcrafting
Or 18+, for when you can't get no satisfaction. 

------
m0dc
This is great!  What's everyone's strategy? 

I was able to get 20 by obsessively combining small tiles first, but just
barely.  The biggest problem is the rows that calcify and lock together if you
don't actively try and break bonds. 

~~~
3JPLW
The bonds only form with new tiles emerging from the bottom, so it's best to
keep the bottom as clear as possible.  Also, the timer will skip ahead to a new
row if there are no immediate moves left, so it's best to maximize the number
of possible moves. 

The best strategy I've found is to build two towers on either edge of the
board.  One tower is reserved for #1-9, and the other side is reserved for
10-19.  I aggressively clear the bottom and break any links, and then I
optimize the storage of my towers.  There's only enough space for stacks 8
high, however, so sometimes I need to make a third stack in the middle
(ideally with 9, 10, and 11).  I've gotten as high as 20x8 on iOS this way, but
it takes some luck. 

~~~
icoder
Interesting!  I converged to (almost) the same strategy (I just frantically
keep #1-9 at one end (1 column with overshoot to a seconds or third), and
#10-19 at the other and try breaking bonds asap).  It got me to my first 20. 

------
cpayne
Great game!  How did you do the cross platform?  Xamarin, native or something
else?? 

~~~
sossles
It's c++ with SDL and as little platform-specific code as I can get away with. 
eg.  low latency audio on Android was impossible using stock SDL. 

The web version was originally a straight recompile with emscripten but it was
way too slow so it's a hybrid approach where the board engine is emscripten
and the UI is rewritten with HTML/canvas. 

~~~
magni-
Any plans for a Windows Phone port? :) 
[https://forums.libsdl.org/viewtopic.php?t=10576&sid=2a7ec2c7...](https://forums.libsdl.org/viewtopic.php?t=10576&sid=2a7ec2c78eb4e5d2a9a258a9c8cd85da)

~~~
sossles
I've considered it, and probably will do it one day for fun just to see what
the platform is like. 

~~~
robmcm
Looking back would it have been easier to do the whole things in JS/HTML/CSS? 

~~~
sossles
Not at all!  This is a mobile game and getting 60 FPS on mobile in a browser is
not trivial, even with graphics as simple as these.  But natively?  Ridiculously
easy. 

~~~
buggyend
The game is simple/hard and beautiful. 

I am just curious.  What engine and development tools did you use?  If I like a
game, I want to know the backend tools that was used for developing. 

------
diziet
Looking forward seeing the app climb -- I wonder how high this will climb on
category ranks?  Right now it looks like you've gotten a couple of thousand of
downloads on iOS (spike in russia), a couple of hundred on Android.  It will be
exciting to see the app explode! 

[https://sensortower.com/ios/us/stephen-
french/app/twenty/882...](https://sensortower.com/ios/us/stephen-
french/app/twenty/882301625)

------
cperciva
Suggestion: Mark tiles at the bottom of the screen as being "attached" to
other tiles before said other tiles come onto the screen. 

It's very annoying when I see a useful tile which is not attached to anything
and I reach over to grab it, only to have it _become_ attached to something in
the mean time. ( Especially if that tile was one I created by merging two other
tiles together and so its attachment to anything else should have been
broken.) 

------
gavanwoolery
Clever spin on 3's/2048/etc.  Prepare to be cloned! 

------
orik
Are you gonna put it on GitHub?  I'm itching to make Twenty 48

~~~
sossles
Ha!  No plans for github (at this stage) but I don't mind if someone else
builds on the idea. 

------
hyperpallium
good game!  hope you get valuable feedback and make a mint. 

17\. because of later pieces joining together in 3's, it seems it might be
impossible to reach 20? ( do you ensure there's a soln?) 

(android version) i found the touch becoming unresponsive on the edges, in
later stages.  pr because i'm getting frantic, and using a crappy phone.  but if
this could be improved (eg larger hit area on the edges - or zoom to cover
whole screen), it would be worth it. 

apart from the feeling of frustration, the gameplay problem is you lose much
time repeating the movement x2 or x3 times, which is crucial to avoid locking
joined pieces and large surface area towards the end. 

PS would be better if it didn't require any permissions at al.  it just seems
to be storing twenty.jpg - necessary. 

also "throwing" blocks with momentum as another comment said would be cool,
and wouldn't undermine gameplay. 

~~~
sossles
I'm not sure what the issue with touch at the edges might be - perhaps it
thinks you're making an System-level gesture? 

I didn't get what the other comment meant by throwing, but it just clicked
when you said it.  Thanks for the idea, I'll look into it. 

------
vladharbuz
I understand how people can find this fun, but not how they can find it "just
as good" as Threes!.  The graphics are a blatant ripoff, albeit of a lower
quality, and the game mechanic is simply way less inventive. 

Threes!  had attention to detail — in the mechanics, in the visuals, and
especially in the music.  These ripoffs have none of that. 

I can't help but wonder whether we are promoting the tradition of cheap,
carelessly made mobile games as opposed to the finely-crafted products.  This
is why many developers have started to steer clear of the mobile market. 

(I don't mean to ruin everyone's fun, just commenting on the larger scheme of
things)

~~~
rl3
For starters, _Twenty_ is free and I can play it in the browser on my desktop. 

Its graphics are, in my opinion, better than _Threes!_.  Why that should matter
though is beyond me, since the gameplay is quite different. 

I also fail to see why elegant simplicity is somehow a bad thing in this case. 

Maybe you're new here, but games featured on _Show HN_ are usually side
projects and don't necessarily have studio-level production values. 

------
Schwolop
That was great until I discovered I was allowed to drag things out from under
other things.  IMHO the game is a lot more fun if you're under that constraint! 
Maybe call it "hard mode"...

------
bane
This apparently taps some kind of cleaning up OCD button I didn't know I had. 
I kept shouting "stop moving up!"  as I approached 12, then 13 and so on. 

Way more hooked on this than 2048. 

------
z3t4
Great work!  This game is good as it is, but you could try having cars/space-
ships/gems or whatever instead of numbers, to give you more freedom for
experimenting and maybe change the order so that there will be more fall-
though.  People totally love when much happens with little input.  If the game
where to improve, I would say you need to increase the output vs input, making
more stuff happen, faster and easier. 

------
ljk
wow such a great game!  16 on first try

thought it was gonna be easy, then noticed the timer on the top when the
screen was about halfway full, definitely added another layer of excitement to
the game

edit: 18 on 2nd try... can't stop playing! _ ahem.. is there a way to disable
the timer?_ 

edit: frustrating but addicting... 19
[http://i.imgur.com/KW0i0rN.png](http://i.imgur.com/KW0i0rN.png)

~~~
ljk
finally 20x2! [ http://i.imgur.com/ynyWqyM.png](http://i.imgur.com/ynyWqyM.png)

looks like it's best to keep the numbers as high as possible so it's easier to
combine the blocks

------
olympus
Just tested it with my laptop.  I was thinking "This is one of those games that
works best with a touchscreen."  Then I saw that it's available for iOS and
Android and went to get it.  Btw, when you search for "twenty" on Google Play
this app is not the first result.  Does Google Play have any SEO options to get
you higher on the list? 

~~~
sossles
Getting downloads will help me.  I'm already pretty easy to find on the iOS
appstore (due to the app having more downloads), but having a common word as a
name makes the initial release harder. 

------
viraptor
This is really well designed, smooth and intuitive.  A lot of fun.  I can see
that a lot of attention was given to the details.  I'll be addicted for a
while...

(the best strategy I found so far is to use move everything into 3 columns
(left, centre, right) as soon as new pieces arrive, only then start merging...
top score of 18 at the moment)

~~~
icoder
I finally got to twenty when I switched to a >10 left, <10 right strategy. 
Could have been coincidence, could have been the strategy.  It's time to get
some work done so I'm not gonna figure that out :)

------
conradfr
Cool game.  Somehow I got to 19 and 20 on my first couple of try with a mouse
but I'm stuck at 17 on mobile. 

Does anybody remembers Crack attack ?  Still the best in my opinion. 
[http://www.aluminumangel.org/attack/](http://www.aluminumangel.org/attack/)

------
Michie
For android, change the color of the yellow for number four, five, eight.  I
cannot see it well.  Either make the number fonts darker (contrast the light
color with dark colored fonts so it will be more visible) or change the color
to something darker like blue, violet or orange.  Nice game. 

------
S4M
It's quite fun and addictive.  Slight bug: my laptop screen is a bit too small,
so I can't see the time bar. 

Good job! 

~~~
pbhjpbhj
Same for me on a 1024x768 screen. 

I don't know but there might be a memory leak too - seems to be lagging my
(already slow) system. 

------
hardmath123
Bug report—maybe?  If you have multiple rows of tiles, you can't drag a tile
from a lower row to the game area.  It bumps into a tile in a higher row and
refuses to move.  You need to first move the ones in the higher row to move the
tile in the lower row. 

~~~
arthurcolle
Pretty sure that's not a bug

------
tantalor
Nice!  What's the inspiration? 

~~~
sossles
At a basic level, it was "Money Idol Exchanger" (an old arcade game my
girlfriend really wanted on her iPad) meets 2048. 

I have no idea where the link mechanic game from.  The game needed more
constraints on how pieces could be moved, and that idea just popped into my
head one day. 

~~~
cremno
That game also has a good soundtrack.  Especially Stage A (Ryoukai Senshi
Exchanger):
[https://www.youtube.com/watch?v=bAxgarEVSc0](https://www.youtube.com/watch?v=bAxgarEVSc0)

------
Vilkku
I was unable to get it to work in Firefox or Chrome (even tried disabling
extensions on both), but it seems to work okay in IE.  I was unsure if it was
even meant to be played with a mouse at first. 

~~~
Crystalin
Same here.  There is no animation request so the game is not refreshing and so
not playable :(

~~~
sossles
Try the app?  It's free anyway. 

------
synunlimited
Only suggestion would be being able to turn off the sound.  Very fun tho! 

~~~
sossles
A common request.  I added that to the Android and iOS app but haven't got
around to that on the web version. 

------
DanBC
I freaking love this.  I'm pretty bad at it.  I especially like the fact that I
can play the game on the website and then have an iAP to give you some money. 
So I paid the iAP. 

~~~
sossles
Thanks, appreciated. 

------
mpermar
Congrats.  You're going to be famous.  5* on app store. 

------
forrestthewoods
I'm super impressed with how well the web version works on iOS.  Touch stuff
like this almost never works or is garbage on mobile web.  Very well done. 

~~~
sossles
I'm chuffed to hear you say that because it was certainly a battle to get it
to work. 

------
daemonk
Great game.  I like the incremental discoveries of new obstacles (linked blocks
for example) or new mechanisms (lateral movement to combine numbers). 

------
chillingeffect
A cool game!  but for god's sake, don't play with the mouse.  My wrist is
killing me after about 30 minutes. 

------
fiatjaf
I don't get, it seems everybody does the same thing, the only thing that can
be done.  Where is the strategy? 

------
dav43
FYI Chrome, XP getting Aw Snap. 

~~~
JoshGlazebrook
XP may be the problem. 

~~~
dav43
damn corporates. 

------
amelius
I'm wondering why playing this game doesn't feel like work. 

------
silentfish
Obligatory "Why didn't I think of that!"  Cool game! 

------
napolux
And clones will arrive on the store in 3, 2, 1...

------
ianstallings
Wow that's insidiously addictive.  Good job! 

------
hobonumber1
Pretty addicting! 

------
rrrhys
I can already sense the clones being coded up. 

Cool game! 

~~~
sossles
There has already been one, in fact (on Android).  Copied my icon, the look and
feel, etc.  Fortunately the guy was pretty cool about it and removed it once I
asked him

------
dapatil
Fantastic job guys!  This is addictive. 

------
jhonnycano
First 2048, now this!!!!  nooooooooooo

------
codemonkeychris
Awesome fun, touch works great...

------
serve_yay
This game is SO good.  Great job. 

------
ggchappell
I like it! 

------
DreamPlotter
Fun game, got to 20 x2 :)

------
motyar
Download link doent work

------
the_cat_kittles
i really love the sounds

~~~
sossles
Thanks, I'm actually a little bit proud of them because the combination sound
effects actually form a little chord progression all the way up to Twenty. 

~~~
the_cat_kittles
thats what kept me going :)

------
richerlariviere
Works on safari on iPad

------
johlindenbaum
Pause button?  Please! 

------
overgard
This is fun, good job

------
pcurve
oh great... just when I cracked 4096...

17\. I can sleep in peace now. 

------
lamosty
16 points guys :)

------
joshu
A lot of fun. 

------
wenqin123
Nice game

------
MichaelCrawford
(I haven't read TFA but I gather it has to do with javascript.) 

Javascript is wildly popular these days, many make the reasonable claim that
it is the world's most-popular programming language.  Lots of people say it's
so much fun. 

I first learned a very modest bit of javascript a few years ago, I learn more
when I need it, more recently I got about halfway through O'Reilly's "Learning
Javascript" but am now stopped dead because I regard it as so tedious and
dull. 

Mind you I am not by any means a language zealot.  If you enjoy javascript then
more power to you. 

But I myself would rather chew my own foot off than actually get paid to write
javascript code.  Unfortunately I am concerned I may not have much choice. 

Is there way you can convince me that javascript can actually be fun and
interesting to me? 

What I regard as fun is sweating over how to reduce cache misses in my iOS
conway's game of life implementation, Warp Life.  I once write an AES hard
drive encryptor that ran entirely onboard the Oxford OXFW911 Firewire/IDE
bridge chip.  It had a 49 MHz ARM7TDMI CPU, 64 kB of 16-bit flash with a five-
cycle read time, and 1800 bytes of 32-bit ram with a one cycle read time. 

FireWire Encrypt was a tough project but I had a grand old time working on it. 

My gripe with javascript is that it is simply not possible for me to use it to
solve the problems that interest me.