

Ask HN:  What are the best technologies you've worked with this year? - iamelgringo

What are the best shiny new technologies that you worked with this past year?  I'm always interested in hearing about what others are working with, and loving.<p><i>edit</i>  I'd also love to hear what you love about it and why.
======
pavlov
XMPP, BOSH and the Strophe library (both the JavaScript and C incarnations).

Earlier this year I got tasked with implementing a system which involved
multiple mobile clients talking to a rendering server. The mobile devices had
a fairly beefy browser (Nokia N900), so the client was clearly suitable to be
delivered as a web app. On the server side, we already had a realtime graphics
system I had written earlier, to which the web clients would need to talk over
a bidirectional connection with near-realtime responsiveness.

Being a C/desktop guy with little network experience, my first intuition was
to do the simplest thing I knew how to handle: linking a small embeddable web
server (e.g. libmicrohttpd) into the render server, and devising some cheesy
custom application-specific protocol over HTTP.

Luckily, my work partner is not as stuck in the 1990s as I am, and he
suggested we use XMPP. I was sceptical at first (XML? A server written in
Erlang? Do we really need to go there? I just want to tinker with my
pointers...)

He showed me some demos of realtime XMPP web apps built with Strophe.js, and I
was rather impressed. Then we went over our system's client/server design and
how it would map to XMPP, and I was sold.

We ended up using many more XMPP features than I had initially imagined,
including publish/subscribe and multi-user chat rooms. Had we gone with my
original approach, these concepts would have been implemented in some
haphazard way in the render server itself. Now the rendering system just talks
to the XMPP server like any other client. It's stable, scalable and fast.

Still, while BOSH in the browser is pretty amazing in practice, it does feel
like a hack that's stretching the reasonable limits of what web apps should be
doing over HTTP. Hopefully this time next year I'll be able to say that one of
the best technologies I've worked with in 2010 was HTML 5 web sockets...

~~~
geekles
Offtopic:

Everytime I see XMPP in print, it makes me think of that media player I use to
use in fvwm way back when.

------
simonw
Redis. It's a very different kind of database - being able to perform 80,000
set or list operations a second enables a whole bunch of solutions to
otherwise difficult problems (real time stats stuff, writing in to activity
streams etc). SRANDMEMBER on its own is invaluable since picking a random item
from a regular relational database using ORDER BY RAND() tends to kill it
stone dead under load.

------
baguasquirrel
Haskell. I avoided it for the longest time because of the purely-functional-
no-side-effects zealots. As it turns out, it is a surprisingly powerful and
beautiful language, and you can get quite far without needing OO.

The paradigm wars will rage on, but in the meantime, the rest of us have a
language that has a rich library set and a very rewarding programming
experience. The usefulness of applicative monads, functors and typeclasses
have convinced me that there's something much, _much_ bigger out there with
regards to these so-called design patterns, something that we have not even
begun to explore and discover.

~~~
anonymousDan
What did you build with it?

------
yummyfajitas
Rabbitmq (and AMQP in general). It's just simple, straightforward message
passing.

My C++ process creates a queue, and binds it to the key "yummyfajitastasks".
My python process (a django webapp, in this case) sends messages with the key
"yummyfajitastasks". My c++ process receives them, does work, sends messages
back.

Combine this with JSON or some serialization method and you've _almost_ got
erlang style messaging, except you can write part of your code in python, part
in C++, part in ruby, etc.

~~~
sorbits
You suffix both C++ and Python with _process_ , this makes me question how
this is any different than using a socket?

~~~
yummyfajitas
I oversimplified my example.

In fact, my C++ code doesn't listen to a single queue, but many. So that
simple messaging piece is equivalent to either having many separate sockets
open or multiplexing many communication channels over a single socket. I also
don't need to worry about message boundaries, AMQP handles that for me.
Instead of building a state machine with boost::asio that parses messages, I
just call "get_next_message". [1]

Also, I can have one-to-many communication if I want with no code change on
the part of the sender. Suppose I have a third ruby process which is also
interested in "yummyfajitastasks". I can create a queue, and listen for
messages with the key "yummyfajitastasks".

The ruby process might also be interested in "sorbitstasks" (which the c++
process is not), so it could then bind it's queue to the key "sorbitstasks. So
now, "yummyfajitastasks" -> c++, ruby. "sorbitstasks" -> ruby.

Messages are persistent (if you want them to be) as well.

[1] The c bindings are a bit ugly, but you can wrap it fairly easily.

------
yason
Clojure.

It's the first Lisp that, to me, is both fun _and_ practical.

Java libraries aren't as simple as the Python counterparts but the maturity of
the JVM vs. Python VM kind of balances that out.

~~~
forsaken
Do you recommend a good tutorial for someone who knows Python and wants to
learn Clojure?

~~~
yason
I'm not sure; I mostly just read the clojure.org website itself and looked
stuff up on its index page and went from there.

I did buy Programming Clojure: while it offered nothing new with regard to
what was available on clojure.org it was, nevertheless, a good introduction.
However, it greatly helped to have experience in functional programming and
other Lisps so I'm not sure how it fits to a Python programmer's experience.

------
bigmac
LLVM. It is a ridiculously well written and well documented codebase. The
transformation/optimization framework is remarkable and surprisingly
approachable. The compiler intermediate representation is easy to work with
both in the emitted bitcode files and in llvm's internal data structures. I
find it a joy to work with.

Its also cool due to all of the other great technologies that are taking
advantage of it (Mono, Parrot, Adobe CS4, Apple)

I think once llvm and clang become mature enough, the FOSS community will
completely supplant gcc with this technology.

------
ahlatimer
zsh - clearly not new, but I recently switched from bash to it. Spelling
correction is very cool, and I like the tab completion a lot more.

Rails - again, not new, but I've really enjoyed it. I've built web apps in
COBOL (had to at my previous employer), so being able to work with Rails has
been a joy in comparison. I actually started playing around with Rails last
year, but I never really did anything with it until this year. I like Ruby,
although I'm not entirely sure I like it more than Python yet. It's growing on
me, though. I like that I can have a basic prototype up and running in
basically no time at all. When I was learning it, it was also nice that I only
really had to learn one piece at a time. I tried out Django shortly before I
began using Rails, being more comfortable with Python, but I felt that the
learning curve was a bit steeper with Django.

Google Chrome - I'm not sure if this is the type of response you're after, but
Chrome quickly supplanted Safari as my favorite browser. It's faster, the UI
is slightly better, and my gripes are few and far between.

------
jazzychad
Node.js. Event driven I/O is so so sweet. I have sharpened my javascript fu
over the last year or so, and being able to bring it server-side is
surprisingly fun and easy.

~~~
notauser
I really enjoyed playing with it, but I think it won't shine until higher
level libraries are ported/written for it.

There are basic URL dispatchers and template systems, but nothing as battle-
tested as Django (yet).

Easy access to streaming data was pretty nice! As is the event system but I'm
afraid as a mostly client-side programmer I take that for granted.

------
JeffJenkins
CouchDB was probably the most interesting since it had iterative map reduce,
but I ended up abandoning it for MongoDB because it was _much_ faster.

The second best is Mako. A month or two ago I switched from using Django for
templating to Mako. Depending on the composition of the pages there was a 2-6x
speed improvement, the code got significantly cleaner since special
tags/filters weren't needed for basic opertions like less-than or modulo.
Also, the ease of creating custom tags in Mako made me more willing to create
them and drastically reduced code complexity.

The best technology I first used this year was jQuery. As someone who knew
ECMAScript extremely well and JavaScript a bit it made me an order of
magnitude more productive and made things possible that I would have been too
frustrated to complete otherwise. It immediately seemed natural to work with
the DOM using set operations. And it has tons of plugins which are just as
easy to use. This is one of the best designed libraries I've ever used. I hope
using it will act as an introduction to functional programming to people who
might have otherwise been scared of it.

------
cmelbye
I've loved playing with Heroku and I'm excited to deploy my real project to it
once we finish a stable version of it.

I've also liked working with Rails, because it has made things like i18n,
testing, and implementing new features so much easier.

Finally, I've enjoyed using beanstalkd for my message queue. It's tiny and
fast and it just stays out of the way. I'm using a new library I made called
Peon (based off of an AMQP-based library called Minion) and it's a really
easy, scalable way to bring long running tasks into the background.

------
koevet
\- Play! Framework - finally something close to Rails productivity for Java
developers. And supports Scala too.

\- Redis - the fastest NoSQL engine around. Easy and elegant.

\- Solr - Indexing for the masses. If it only had real time search...

~~~
dangoldin
Agree with the Solr. I started using it this year and it definitely simplifies
and speeds up our searches.

~~~
munctional
Wait until you discover Sphinx!

------
csytan
Google Appengine: Probably _the_ easiest platform to develop a webapp on if
you use Python and are okay with its limitations.

Tornado: If you are going to develop on GAE, Tornado is the way to go. It is
fast, well written, and only includes the core features needed for a web app.

I can't highlight how much easier it has made things for me since switching
from Django. Debugging Tornado's source code was a breath of fresh air
compared to Django's monkey-patched bird's nest of dependencies.

~~~
cmelbye
It's a real shame that App Engine doesn't support long running requests that
Tornado is great at serving, but I definitely agree with you. Platform as a
Service is such a breath of fresh air. Heroku is also a great choice for Ruby.

------
dlevine
Rails and JQuery. It's amazing how quickly I can build rich, interactive
applications. I can do with two or three lines of code what would require 20
just a few years ago.

Also, GIT. Best source control hands down.

~~~
munctional
This, but add MongoDB as a replacement for MySQL/PostgreSQL, too.

Switching from Subversion to Git was like seeing for the first time. No more
nightmare merges!

------
jorangreef
Tokyo Cabinet (key value storage: removed the "R" and "M" from "ORM", managed
to get an object from disk to the client with the object being opaque to the
server, cutting deserialization/serialization overhead down, implemented
indexes to keep track of keys and got more of an idea of what MySQL does
behind the scenes).

~~~
jbjohns
Isn't this similar to what berkley db does?

EDIT: Genuine curiosity, not trying to make a point.

~~~
simonw
Yup - I'm pretty sure I'vea heard Tokyo described as a "modern" BerkeleyDB
implementation.

~~~
adw
It's from the artist who formerly brought you GDBM and NDBM.

------
hroman
Pylons, i love it because of its flexibility, I can use whatever I want in
contrast to other frameworks w/o getting headaches (yes, I'm talking about
you, Django).

MongoDB and others NoSQL dbs, I don't have words to describe my feelings.

Jquery, well, I began to use this framework in November I was a heavy Mootools
user, but jquery is just amazing, it's so simple, I don't have to write things
like "x.get('value')" (annoying!).

These days I'm playing with Node.js which looks pretty amazing, in fact it's
very possible I use it in a game I'm planning to do.

------
grinnbearit
Currently working through Joe Armstrong's programming erlang. I'm interested
in functional programming and concurrent programs and erlang seems to fit
really well.

I also find Clojure very cool :)

~~~
berntb
What book would you recommend for Erlang? (I've done quite a bit of functional
programming, but not exactly lately.)

~~~
evgen
Joe Armstrong's book is probably the best one to start with. It gives you a
step-by-step learning process that will get you up and running with Erlang in
short order. Once you are finished with it pick up Erlang Programming by
Cesarini and Thompson; this book covers a lot of the same territory but goes a
bit deeper into some areas that are missing from Armstrong's book (e.g.
debugging & tracing, etc.)

------
dyogenez
XMPP and Bosh with Strophe - hit a XMPP server with Javascript instead of a
web server. Realtime Javascript Push on an established base (XMPP). Real cool
stuff, just need something to use it on.

Sinatra - Very fast/easy ruby framework. (Similar to Cherry.py in the Python
world).

Jquery - Can't imagine using any other framework after a year working with
this.

Facebook Connect - Much more robust than I thought possible due to things like
FQL and FBML.

Heroku - Super simple ruby hosting

~~~
elliottkember
+1 for Heroku!

------
paulgb
Amazon Elastic MapReduce and Hadoop Streaming. You just write a few lines of
python (or your language of choice), upload your data, and it takes care of
the rest.

------
andrewcooke
opencl (if you've not heard of it, it's a way to program graphics cards - very
like cuda, but cross-platform). we had some numerical code in matlab that was
taking too long to run. i managed to get a speed-up of 80x by moving it to a
gpu - and the gpu in question is not even the latest generation, but something
we picked up on newegg for less than $200. and i suspect that's just for
starters - i haven't even profiled it yet to see how to make it faster.

using opencl isn't that much harder than c. obviously you need to understand a
little about how gpus work, and there are all the same issues about allocating
memory, segmentation faults, etc. but the compiler and runtime are quite
solid, and the docs more than adequate. now that i am past the worst of the
learning curve i'm looking around for more slow code, because it's an easy way
to get more speed.

also, django, but others have mentioned that (it's such a breath of fresh air
if you're used to using java...). next year, i hope to play with llvm some
(although it will have to be on my own time - can't see how to do that at
work...)

------
lssndrdn
F#. I work in a primarily Microsoft-based environment, and I wanted to learn a
functional language, so F# is a good choice for me - I can actually put it to
use at my "day job".

jQuery. A great javascript library.

~~~
statictype
FParsec is a great parser library for F#.

I learned F# and built a DSL in about a week using it.

------
benofsky
Objective-C and Cocoa, not new but _my new_ favourite development environment.
I love the documentation, in my opinion the best documentation of any
language.

I love the way Apple doesn't care what anyone else thinks about their language
and has ridiculously verbose 40 character long method names to make code
clearer.

Love it!

~~~
grinich
Along with that, I'd probably have to add XCode. Extremely well-designed IDE
and makes writing Cocoa a breeze.

------
chriseidhof
Haskell and the Cocoa Touch framework (sadly, not yet in conjunction).

Haskell isn't really new, but it still is the best programming language I've
worked with (yes, "best" is personal in this case). I don't think any other
language allows me to write programs that are more concise.

The other thing that 2009 brought me was iPhone Development. Although I don't
like Objective-C that much, the Cocoa Touch framework is excellent. Once you
get a grip on it and on the design patterns your code tends to get very small,
too.

With both these technologies I shared the same experience: at the start they
look incomprehensible and working with them made me less productive. However,
only after really learning them I started to full appreciate all the things.

~~~
anonymousDan
What was the reason you didn't use haskell and cocoa touch together? Was it
due to a particular deficiency of one of them? Difficulties combining them?

------
ronnier
-VirtualBox (<http://www.virtualbox.org>)

-ASP.NET MVC

-Visual Studio 2010

~~~
ronnier
I'd also like to add that as of this year I'm also using 7zip (which replaced
winrar, which replaced winzip). I've also started a new job, we are using TFS
for source control which was new to me. And does Windows 7 count?

------
chipsy
Software technology: I spent most of my time implementing my own tools and
tech using haXe, Leo, wxPython, SQLite. haXe+Leo is an amazing combination for
maintaining code.

Not a software technology: <http://www.c-thru-
music.com/cgi/?page=prod_axis-49>

This thing is amazing, especially if you aren't already an experienced
keyboardist; it makes all the note relationships easier to learn so you get to
the "fun" part of playing faster.

------
BerislavLopac
Django :)

~~~
hh
I love this framework. A few year ago I started learning RoR but I hate the
Ruby syntax. Django and Python is beautiful.

------
warp
CouchDB. A schema-less database just makes so much more sense for what I'm
doing. (and it is extremely easy to use from python, due to couchdbkit).

------
milestinsley
MongoDB has helped me rethink everything I thought I knew (and disliked) about
DB's.

Javascript. This year, the full potential (and diversity) of this language has
truly revealed itself to me, especially with the maturing of frameworks like
Cappuccino (which is a testament to what can be done with JS).

Using Git is the first time I've properly been able to integrate source
control into my workflow, without it being a pain!

VPS (cloud hosting). Being able to spin up a server quickly and cheaply has
really facilitated my ability to experiment and is highly conducive to
learning about these new technologies.

I think it's been a great year for innovation. 2010 should be pretty exciting
too. New Years Resolution: explore server side Javascript (i.e node.js) and
build something awesome with Rails!

------
michaeljung
Certainly Google App Engine(Phyton). It is nice to have a small free version
for experiments and own projects. Great way to get your hands dirty.
AWS/Amazon has to do its homework and open up a sandbox type of platform where
you can put your small project of your own at no cost, and opt-in that others
can copy/improve.

'Open' is the best way to innovate (small steps of improvement) on something.

Zynga (the company and the concept) proved to be successful with enough
leverage and network effects Facebook provided.

------
emilis_info
Helma NG (Server-side JavaScript).

Easy to get started, fast, stable, the community is helpful and it is easy to
read their source code if you get stuck somewhere.

------
vyrotek
We started using Windows Azure with our latest project. The Message Queueing
and Schemaless Storage are very cool. It completely changed my opinion of the
'Cloud'.

------
macemoneta
Revisor (see: <http://forums.fedoraforum.org/showthread.php?t=236679>).

The ability to create custom Linux spins and even full system software
thumbdrives make drive failures / system recovery much less impacting. It also
makes "ready to go" installations a snap.

------
jeff444
Java libraries aren't as simple as the Python counterparts, agreed and I too
just built a sudoku solver <http://sudokusolver.info> seems like everyone has
built one of those... I wonder why?

------
kylebragger
redis - insanely fast - I've been using for some stuff at Cork'd mongo - very
excited by this one, too. not having to write ALTER TABLE statements is pretty
great.

------
va_coder
I've been using Groovy and Grails to introduce dynamically typed, rapid
development tech to a mostly Java only shop. In these scenarios Groovy really
shines.

------
DaniFong
My vote goes to Mathematica, which is probably both the best and worst
technology I've used this year. Oy!

A more one-sided review goes to Evernote :-)

------
gtani
loose summary:

\- dynamic languages: ruby/rails/merb/sinatra,, python/django/twisted/tornado,
groovy/grails (nobody mentioned scala very much)

\- FP, erlang, clojure, F#, haskell;

\- noSQL: KV store, doc-oriented db, ..

\- message queues and brokers: AMQP, rabbitMQ, XMPP,

\- javascript/ browser capabilities: jquery, node.js, BOSH, other libs

\- hosting, deploy, VCS: VPS, EC2, git,

------
spooneybarger
Seaside

~~~
sstone
Seaside and Smalltalk are awesome. Sadly the last few months i had to resort
to hideous creatures like telerik and asp.net to cobble up complex grids of
some sorts. I wish there were more widgets for Seaside. Perhaps I'm missing a
community site somewhere for these?

~~~
spooneybarger
Not really. There is some out there but not much yet. More people creating
those sorts of things are needed while the core seaside team concentrates on
their job.

------
julien
PubSubHubbub : Bringing an end to the stupid feed polling we're tried to fight
for years (see SUP from Friendfeed, AtomStreams... etc).

------
pwpwp
GAE: if you can reduce your problem to searching in a b-tree, you're in
heaven.

GWT: code for the browser like it's 1984.

------
xenophanes
the ipod touch. it's an awesome device.

------
dchest
Grand Central Dispatch and C blocks.

------
dantheman
E4X - ECHMAscript for XML

This is in AS3, used in flex. It's a joy to process xml with it.

------
paraschopra
Solr for super-easy full text searching and Memcache for a no-brainer
distributed queue

~~~
thechangelog
I just did my first solr implementation this year and it was a pleasure
playing the various tokenizers and filters that are included out-of-the box.
It replaced a hideous MySQL SELECT and the results from the two aren't even
from the same planet in terms of quality.

------
ra
Cassandra.

------
charlesju
Amazon EC2 Engine Yard's Flex Ruby on Rails Ruby

------
mattdennewitz
django, git, celeryd, mongodb, redis, tornado, appengine, superfeedr, phsb,
and opencalais come to mind

------
sdave
in-house column oriented database, source code generator for diameter protocol
application.. et. al.

------
aitoehigie
web2py and GAE

------
w3matter
Redis -- with Ohm. Really great. Build a bunch of sites with it. A nice
replacement for ActiveRecord in many use-cases. Now ready to redo some BIG
sites that we have using just Redis.

It has transformed my thinking about data (i'm a postgres guy), and just made
Rails more fun now. The sites I did are also blazing fast.

