<P>Interesting notes of the architecture of a high-performance system called the Mailinator(tm) <a href="http://mailinator.blogspot.com/2007/01/architecture-of-mailinator.html">here</a>.
Interesting to note that it just runs on Tomcat plus Java plus not-much-else:
<P><code>The system now is one unit. The web application, the email server, and all email storage run in one JVM.</code>
<P><code>The system uses under 300 threads. I can increase that number but haven't seen a need as of yet. When an email arrives (or attempts to arrive) it must pass a strong set of filters that are described below. If it gets past those filters it is then stored in memory – however, it is first compressed to save in-memory space. Over 99% of emails that arrive are never looked at, so we only ever decompress an email if someone actually "looks" at them.</code>
<P><code>Because of this, I am able to store many more emails than the original system's 20000. The current mailinator stores about 80000 emails and uses under 300M or ram.</code>
<P>I remember the lean times. I was once without a job for nine months, and I was working a part-time job on and off while looking for an IT job after finishing <a href="http://www.aduni.org/">ArsDigita University</a>. Remembering those times make you a little scared, make you want to save money instead of spend it, make you want to have an escape route out of your current situation in case it comes crashing down.
<P>I remember when I started learning Java. It was 1999. Applets were the only thing that we could get to work on the web, and maybe JSP and Servlets were starting to get there for server-side programming. The only other thing that was out there was the Enterprise-level programming of EJB, which confused the majority of us out there and made us want to do something else.
<P>So in 2002, someone introduced me to Struts, and it looked like a breath of fresh air. Since then, other programmers have been quietly (or not so quietly) churning out tool after tool that we can use. Hibernate. Velocity. Tapestry. Grinder. DbUnit. The list keeps unfolding for us.
<P>I had pontificated earlier in this blog about the idea of the long tail for Java <a href="http://jroller.com/page/wj?entry=java_and_the_long_tail">here</a> and <a href="http://jroller.com/page/wj?entry=more_support_fot_the_long">here</a>. A recent post entitled, <a href="http://www.jroller.com/page/cardsharp?entry=how_to_use_java_at">How to use Java at a Startup</a>, puts forth the argument that Java is all you need. He does point out, however, that the overchoice is a double edged sword:
<P><code>There are so many options available that it is possible to get stuck in analysis paralysis while you look for that perfect fit. I do this all the time. In my quest for the perfectly elegant solution I get myself perfectly puzzled. It's also possible to pick technologies that just don't work together very well. I find that the best way to narrow down the list is to make your best guess and then prototype the technologies to see if they meet your need. Remember, a good plan violently executed today will be better than a perfect plan executed tomorrow. That said, you do need criteria for evaluating Open Source projects for use in a startup.</code>
<P>We had some lean times with Java; maybe that's what spurred all the growth of frameworks and the over-choice we have today. Now that we've come through the lean period though, do we make that memory drive what Java will be tomorrow? Will our memory of the absence of good features and the ability to execute quickly change how we develop Java 6?
<P>Again, I am disappointing by putting forth more questions than answers, but there is a point to all this. How do you stick to your guns with one part of the technology when there is new, promising technology that claims to be a 'silver bullet' that will take its place? How do you know when to stop moving from new framework to new framework?
<P>Found care of <a href="http://glinden.blogspot.com/2007/02/google-class-at-uw-cs.html">Geeking with Greg</a>: One of the Googlers is teaching a "Google 101" class at UW, actually called <a href="http://www.cs.washington.edu/education/courses/cse490h/07wi/">Problem solving on large scale clusters</a>. Interesting to note that the open-source version of MapReduce in the course is the Java-based <a href="http://www.cs.washington.edu/education/courses/cse490h/CurrentQtr/hadoop-codelab.html">Hadoop</a>.
<P>One of <a href="http://www.jroller.com/page/wj?entry=my_tech_predictions_for_2008">my tech predictions</a>, no matter how flawed, is starting to come true: a new <a href="http://www.antoniocangiano.com/articles/2007/02/19/ruby-implementations-shootout-ruby-vs-yarv-vs-jruby-vs-gardens-point-ruby-net-vs-rubinius-vs-cardinal">Ruby Implementation shootout</a> shows that Ruby 1.9 is gearing up to be a faster implementation and as the author says, 'nothing short of exciting'.
<P>I know what you're thinking: <I>this guy's not to swift with his maths</I>, but work with me for a minute here. Everyone is putting out their predictions for 2007. Let's face it, 2007 is just ten days away now, so it's easy to do. We could have all written 'my predicitions for July' in June, and it would have the same impact.
<P><a href="http://java.sys-con.com/read/313594.htm">Sys-con</a> and <a href="http://www.readwriteweb.com/archives/2007_web_predictions.php">RWW</a> put out their lists, and overall it seemed like tame stuff. Ajax is hyped/not hyped. Open-sourcing Java is good/not good. Rinse and repeat.
<P>The best of the list was <a href="http://java.sys-con.com/read/313594_2.htm">Bob Zurek's predictions</a>, chock full of intelligent wikis and predictive networks. Mmm, tasty.
<P>Without any more pretense, here are my predictions for 2008:
<li>The final word on Ruby is said, in the form of a performance benchmark which validates Ruby's place in the web enterprise. This will shut up naysayers, and be a rallying cry for the Ruby community at-large. This will also be the nail in the coffin for Sun, see number 3.</li>
<li>Open-sourcing Java does nothing for Sun as a company as its market share is eaten alive by C# on one side and by Python/Ruby on the other. JDK7 is a fine product, but will be remembered much like IBM's OS/2, which failed as a 'technically superior, but marketed inferior' product. Expect a buyout as its routers are less and less popular, especially with the rise of the Chinese Internet (see number 6).</li>
<li>Outsourcing comes back to the US after the housing bubble finally takes 18 months to deflate and the cost of living in the US recedes. A major Indian or Russian industry opens up shop in the US and attracts thousands of applicants, like Wal-Mart opening up in middle America. Indian players could include <a href="http://en.wikipedia.org/wiki/Tata_Group">Tata</a>, while Russian players could be <a href="http://verysell.ru/">Verysell</a> or <a href="http://www.luxoft.com/">Luxoft</a>.</li>
<li>Microsoft finally figures out how to make search work and Google's greatest fear is realized; the contents of search between Yahoo, MSFT and Google are not only similar but indistinguishable. Google, having known this fear since 2005, will have created another revenue stream (probably phones or OS) so that it can remain a contender.</li>
<li>And the money shot: China unveils its own Internet (either v6 or v10) in the wake of the Beijing Olympics, dwarfing the efforts by the US and ICANN to retain control of the world network. This, together with lack of Net Neutrality, will divide and conquer the Internet and create online haves and have-nots, just like the real world. Sad but true.</li>
<P>The Akaza team officially only supports XP and Linux deploys of <a href="http://www.openclinica.org/">OpenClinica</a> on Tomcat 5.5, but there are many more servers and platforms that OpenClinica will be deployed on in the future. Darin Morley <a href="http://www.openclinica.org/pipermail/developers/2006-December/000118.html">recently posted his deploy notes</a> of OpenClinica using JBoss together with LDAP authentication; the resulting post on the Developer's board looks sweet and complete.
<P>If you are interested in clinical data management and Java EE, check out <a href="http://www.openclinica.org/">OpenClinica</a>, which has just released its 2.0 version. A webinar is scheduled for <a href="http://www.openclinica.org/entities/entity_details.php?eid=295">November 17th</a>, so if you are looking for an open-source, Java-based solution for handling clinical research in a hospital, lab, or other facility that handles PHI, check it out.
<P>Disclaimer: I am an employee of <a href="http://www.akazaresearch.com/">Akaza Research</a>, the company that develops this project. It's also worth pointing out that this blog is my personal space, and does not always reflect the official policies of that company.
<P>I'm labeling this one as Java so that everyone will see; it has been five years since I finished ArsDigita University, and I wrote a <a href="http://aduni.org/~tomh/rants/aduni_five_years_later.html">short piece about ADUni</a>, and what the first–and only–graduating class has been doing since then. Feel free to leave comments about the story here.
Just a quick note that OpenClinica, the open-source clinical management system written in Java EE, has a new version out with a number of improvements: <a href="http://www.openclinica.org/entities/entity_details.php?eid=282">download it here</a>.
Some write about <a href="http://work.tinou.com/blog/2006/06/spring_what_a_c.html">how crappy Spring is for a framework</a>. <a href="http://theresnoaction.blogspot.com/">There's No Action</a> writes on how <a href="http://theresnoaction.blogspot.com/2006/05/why-all-web-programming-frameworks-are.html">all web programming frameworks are broken</a>, and hits on what is dogging a lot of the web development solutions out there; they can change everything except the SQL that hits the database.
<P><code>Web development has reached a point in it is receiving diminishing returns with attempts to refine it further at the application code level. We have long ago distilled websites into their basic elements and attempted to abstract out all that can be abstracted out, and we are left with a battery of competing standards and frameworks which differ very little from one another in anything more than syntax. At the same time, demands for increasing productivity and faster time to market are always ringing in our ears.</code></p>
<p><code>The only way to fix this in a fundamental way is to add metadata that is presently being defined in an ad-hoc basis by developers into the database/persistence layer.</code></p>
<P><I>PS: another link is this list of <a href="http://www.eclipsezone.com/eclipse/forums/t73848.rhtml">27 Eclipse tutorials from IBM</a>. Thanks, <a href="http://erik.thauvin.net/linkblog/">Erik!</a></I></P>