<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: java</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/java.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-12-17T01:48:54+00:00</updated><author><name>Simon Willison</name></author><entry><title>firefox parser/html/java/README.txt</title><link href="https://simonwillison.net/2025/Dec/17/firefox-parser/#atom-tag" rel="alternate"/><published>2025-12-17T01:48:54+00:00</published><updated>2025-12-17T01:48:54+00:00</updated><id>https://simonwillison.net/2025/Dec/17/firefox-parser/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/mozilla-firefox/firefox/tree/main/parser/html/java"&gt;firefox parser/html/java/README.txt&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
TIL (or TIR - &lt;a href="https://simonwillison.net/2009/Jul/11/john/"&gt;Today I was Reminded&lt;/a&gt;) that the HTML5 Parser used by Firefox is maintained as Java code (&lt;a href="https://github.com/mozilla-firefox/firefox/commits/main/parser/html/javasrc"&gt;commit history here&lt;/a&gt;) and converted to C++ using a custom translation script.&lt;/p&gt;
&lt;p&gt;You can see that in action by checking out the ~8GB Firefox repository and running:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd parser/html/java
make sync
make translate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here's &lt;a href="http://gistpreview.github.io/?e53ff836cb44816670adddc3a518b3cc"&gt;a terminal session where I did that&lt;/a&gt;, including the output of &lt;code&gt;git diff&lt;/code&gt; showing the updated C++ files.&lt;/p&gt;
&lt;p&gt;I did some digging and found that the code that does the translation work lives, weirdly, in the &lt;a href="https://github.com/validator/validator"&gt;Nu Html Checker&lt;/a&gt; repository on GitHub which powers the W3C's &lt;a href="https://validator.w3.org/nu/"&gt;validator.w3.org/nu/&lt;/a&gt; validation service!&lt;/p&gt;
&lt;p&gt;Here's a snippet from &lt;a href="https://github.com/validator/validator/blob/dfd1948624259c63027bc5953e89bdeee81fb7b0/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java#L421-L442"&gt;htmlparser/cpptranslate/CppVisitor.java&lt;/a&gt; showing how a class declaration is converted into C++:&lt;/p&gt;
&lt;pre&gt;    &lt;span class="pl-k"&gt;protected&lt;/span&gt; &lt;span class="pl-smi"&gt;void&lt;/span&gt; &lt;span class="pl-en"&gt;startClassDeclaration&lt;/span&gt;() {
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s"&gt;"#define "&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s1"&gt;className&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;printLn&lt;/span&gt;(&lt;span class="pl-s"&gt;"_cpp__"&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;printLn&lt;/span&gt;();

        &lt;span class="pl-k"&gt;for&lt;/span&gt; (&lt;span class="pl-smi"&gt;int&lt;/span&gt; &lt;span class="pl-s1"&gt;i&lt;/span&gt; = &lt;span class="pl-c1"&gt;0&lt;/span&gt;; &lt;span class="pl-s1"&gt;i&lt;/span&gt; &amp;lt; &lt;span class="pl-smi"&gt;Main&lt;/span&gt;.&lt;span class="pl-c1"&gt;H_LIST&lt;/span&gt;.&lt;span class="pl-s1"&gt;length&lt;/span&gt;; &lt;span class="pl-s1"&gt;i&lt;/span&gt;++) {
            &lt;span class="pl-smi"&gt;String&lt;/span&gt; &lt;span class="pl-s1"&gt;klazz&lt;/span&gt; = &lt;span class="pl-smi"&gt;Main&lt;/span&gt;.&lt;span class="pl-c1"&gt;H_LIST&lt;/span&gt;[&lt;span class="pl-s1"&gt;i&lt;/span&gt;];
            &lt;span class="pl-k"&gt;if&lt;/span&gt; (!&lt;span class="pl-s1"&gt;klazz&lt;/span&gt;.&lt;span class="pl-en"&gt;equals&lt;/span&gt;(&lt;span class="pl-s1"&gt;javaClassName&lt;/span&gt;)) {
                &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s"&gt;"#include &lt;span class="pl-cce"&gt;\"&lt;/span&gt;"&lt;/span&gt;);
                &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s1"&gt;cppTypes&lt;/span&gt;.&lt;span class="pl-en"&gt;classPrefix&lt;/span&gt;());
                &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s1"&gt;klazz&lt;/span&gt;);
                &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;printLn&lt;/span&gt;(&lt;span class="pl-s"&gt;".h&lt;span class="pl-cce"&gt;\"&lt;/span&gt;"&lt;/span&gt;);
            }
        }

        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;printLn&lt;/span&gt;();
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s"&gt;"#include &lt;span class="pl-cce"&gt;\"&lt;/span&gt;"&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;print&lt;/span&gt;(&lt;span class="pl-s1"&gt;className&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;printLn&lt;/span&gt;(&lt;span class="pl-s"&gt;".h&lt;span class="pl-cce"&gt;\"&lt;/span&gt;"&lt;/span&gt;);
        &lt;span class="pl-s1"&gt;printer&lt;/span&gt;.&lt;span class="pl-en"&gt;printLn&lt;/span&gt;();
    }&lt;/pre&gt;

&lt;p&gt;Here's a &lt;a href="https://johnresig.com/blog/html-5-parsing/"&gt;fascinating blog post&lt;/a&gt; from John Resig explaining how validator author Henri Sivonen introduced the new parser into Firefox in 2009.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=46295771#46296888"&gt;Hacker News conversation&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/c-plus-plus"&gt;c-plus-plus&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/firefox2"&gt;firefox2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/henri-sivonen"&gt;henri-sivonen&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-resig"&gt;john-resig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mozilla"&gt;mozilla&lt;/a&gt;&lt;/p&gt;



</summary><category term="c-plus-plus"/><category term="firefox2"/><category term="henri-sivonen"/><category term="java"/><category term="john-resig"/><category term="mozilla"/></entry><entry><title>Java in the Small</title><link href="https://simonwillison.net/2024/Dec/18/java-in-the-small/#atom-tag" rel="alternate"/><published>2024-12-18T21:20:11+00:00</published><updated>2024-12-18T21:20:11+00:00</updated><id>https://simonwillison.net/2024/Dec/18/java-in-the-small/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://horstmann.com/unblog/2024-12-11/index.html"&gt;Java in the Small&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Core Java author Cay Horstmann describes how he now uses Java for small programs, effectively taking the place of a scripting language such as Python. &lt;/p&gt;
&lt;p&gt;TIL that hello world in Java can now look like this - saved as &lt;code&gt;hello.java&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;void main(String[] args) {
    println("Hello world");
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then run (using &lt;code&gt;openjdk 23.0.1&lt;/code&gt; on my Mac, installed at some point by Homebrew) like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;java --enable-preview hello.java
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is so much less unpleasant than the traditional, boiler-plate filled Hello World I grew up with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I always hated how many concepts you had to understand just to print out a line of text. Great to see that isn't the case any more with modern Java.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=42454929"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;&lt;/p&gt;



</summary><category term="java"/></entry><entry><title>Quoting Andy Jassy</title><link href="https://simonwillison.net/2024/Aug/24/andy-jassy-amazon-ceo/#atom-tag" rel="alternate"/><published>2024-08-24T04:25:06+00:00</published><updated>2024-08-24T04:25:06+00:00</updated><id>https://simonwillison.net/2024/Aug/24/andy-jassy-amazon-ceo/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.linkedin.com/posts/andy-jassy-8b1615_one-of-the-most-tedious-but-critical-tasks-activity-7232374162185461760-AdSz/"&gt;&lt;p&gt;[...] here’s what we found when we integrated [Amazon Q, GenAI assistant for software development] into our internal systems and applied it to our needed Java upgrades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The average time to upgrade an application to Java 17 plummeted from what’s typically 50 developer-days to just a few hours. We estimate this has saved us the equivalent of 4,500 developer-years of work (yes, that number is crazy but, real).&lt;/li&gt;
&lt;li&gt;In under six months, we've been able to upgrade more than 50% of our production Java systems to modernized Java versions at a fraction of the usual time and effort. And, our developers shipped 79% of the auto-generated code reviews without any additional changes.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.linkedin.com/posts/andy-jassy-8b1615_one-of-the-most-tedious-but-critical-tasks-activity-7232374162185461760-AdSz/"&gt;Andy Jassy&lt;/a&gt;, Amazon CEO&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/amazon"&gt;amazon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai-assisted-programming"/><category term="amazon"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="java"/></entry><entry><title>Queryable Logging with Blacklite</title><link href="https://simonwillison.net/2023/Aug/21/queryable-logging-with-blacklite/#atom-tag" rel="alternate"/><published>2023-08-21T18:13:35+00:00</published><updated>2023-08-21T18:13:35+00:00</updated><id>https://simonwillison.net/2023/Aug/21/queryable-logging-with-blacklite/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://tersesystems.com/blog/2020/11/26/queryable-logging-with-blacklite/"&gt;Queryable Logging with Blacklite&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Will Sargent describes how he built Blacklite, a Java library for diagnostic logging that writes log events (as zstd compressed JSON objects) to a SQLite database and maintains 5,000 entries in a “live” database while entries beyond that range are cycled out to an archive.db file, which is cycled to archive.timestamp.db when it reaches 500,000 items.&lt;/p&gt;

&lt;p&gt;Lots of interesting notes here on using SQLite for high performance logging.&lt;/p&gt;

&lt;p&gt;“SQLite databases are also better log files in general. Queries are faster than parsing through flat files, with all the power of SQL. A vacuumed SQLite database is only barely larger than flat file logs. They are as easy to store and transport as flat file logs, but work much better when merging out of order or interleaved data between two logs.”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://github.com/simonw/asgi-log-to-sqlite/issues/1#issuecomment-1518714493"&gt;asgi-log-to-sqlite/issues/1&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/logging"&gt;logging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zstd"&gt;zstd&lt;/a&gt;&lt;/p&gt;



</summary><category term="java"/><category term="logging"/><category term="sqlite"/><category term="zstd"/></entry><entry><title>Are traditional web frameworks and languages like RubyOnRail, Spring Boot and PHP dying now when new fast reactive pure JavaScript frameworks and services like Meteor, Node, Angular 2.0 and Firebase are breaking ground?</title><link href="https://simonwillison.net/2015/May/24/are-traditional-web-frameworks/#atom-tag" rel="alternate"/><published>2015-05-24T09:33:00+00:00</published><updated>2015-05-24T09:33:00+00:00</updated><id>https://simonwillison.net/2015/May/24/are-traditional-web-frameworks/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Are-traditional-web-frameworks-and-languages-like-RubyOnRail-Spring-Boot-and-PHP-dying-now-when-new-fast-reactive-pure-JavaScript-frameworks-and-services-like-Meteor-Node-Angular-2-0-and-Firebase-are-breaking-ground/answer/Simon-Willison"&gt;Are traditional web frameworks and languages like RubyOnRail, Spring Boot and PHP dying now when new fast reactive pure JavaScript frameworks and services like Meteor, Node, Angular 2.0 and Firebase are breaking ground?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="frameworks"/><category term="java"/><category term="javascript"/><category term="programming"/><category term="programming-languages"/><category term="web-development"/><category term="quora"/></entry><entry><title>Why doesn't Google use their resources to improve coding languages?</title><link href="https://simonwillison.net/2013/Nov/24/why-doesnt-google-use/#atom-tag" rel="alternate"/><published>2013-11-24T17:31:00+00:00</published><updated>2013-11-24T17:31:00+00:00</updated><id>https://simonwillison.net/2013/Nov/24/why-doesnt-google-use/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-doesnt-Google-use-their-resources-to-improve-coding-languages/answer/Simon-Willison"&gt;Why doesn&amp;#39;t Google use their resources to improve coding languages?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Google invest vast resources in to language improvements, and have been doing so for over a decade now. Just off the top of my head...&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;They have employed many of the Python core team (including creator Guido van Rossum) and supported their work on Python&lt;/li&gt;&lt;li&gt;Their Android team wrote and support an entirely new open source JVM, called Dalvik&lt;/li&gt;&lt;li&gt;They sponsored one of the creators of C to create a brand new systems programming language, Go.&lt;/li&gt;&lt;li&gt;They sponsored major improvements to HTML, including the WHAT-WG which was crucial to the creation of HTML5.&lt;/li&gt;&lt;li&gt;Many of their employees work full time contributing to international standards groups.&lt;/li&gt;&lt;li&gt;As part of Chrome they supported the creation of V8, an astonishingly powerful JIT JavaScript implementation which sparked enormous improvements across rival engines. V8 is also the core of Node.js&lt;/li&gt;&lt;li&gt;Through Google Summer of Code they financially support projects that benefit dozens of open source languages, libraries and frameworks&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;That's just the stuff I can think if without doing any additional research - it's the tip of the iceberg.
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="google"/><category term="java"/><category term="programming"/><category term="programming-languages"/><category term="web-development"/><category term="quora"/></entry><entry><title>Does it still make sense to become a Java developer, or should I migrate to PHP or .NET?</title><link href="https://simonwillison.net/2013/Jan/30/does-it-still-make/#atom-tag" rel="alternate"/><published>2013-01-30T13:52:00+00:00</published><updated>2013-01-30T13:52:00+00:00</updated><id>https://simonwillison.net/2013/Jan/30/does-it-still-make/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Does-it-still-make-sense-to-become-a-Java-developer-or-should-I-migrate-to-PHP-or-NET/answer/Simon-Willison"&gt;Does it still make sense to become a Java developer, or should I migrate to PHP or .NET?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It sounds like you need to expand your horizons a little further. The best programmers I know these days aren't working solely in Java, PHP or .NET - they may use one those languages, but they'll also be getting stuck in to dynamic languages such as Python, Ruby, JavaScript or Scala.&lt;/p&gt;

&lt;p&gt;If you take a look at the most popular languages for projects on GitHub you'll see that JavaScript and Ruby are in the lead, with Python neck-and-neck with Java and PHP in 6th place: &lt;span&gt;&lt;a href="https://github.com/languages"&gt;Top Languages · GitHub&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Here's a general piece of career advice: try to avoid thinking of yourself as a "Language X programmer". Learning new languages is a great way of improving your skill as a programmer - learning Python will also have a big effect on how you program in C# or Java for example. The best programmers can pick up pretty much any language in a couple of weeks.&lt;/p&gt;

&lt;p&gt;It's also worth focusing on picking up related skills: SQL, HTML, unix administration, web security, network programming and version control for example. All of these are skills that will greatly enhance your career and help you land the most interesting development jobs.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/careers"&gt;careers&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="java"/><category term="programming"/><category term="web-development"/><category term="quora"/><category term="careers"/></entry><entry><title>What is the easiest server-side platform for Android Java developers to learn?</title><link href="https://simonwillison.net/2012/Dec/4/what-is-the-easiest/#atom-tag" rel="alternate"/><published>2012-12-04T17:10:00+00:00</published><updated>2012-12-04T17:10:00+00:00</updated><id>https://simonwillison.net/2012/Dec/4/what-is-the-easiest/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-easiest-server-side-platform-for-Android-Java-developers-to-learn/answer/Simon-Willison"&gt;What is the easiest server-side platform for Android Java developers to learn?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Take a look at the Play framework - last time I looked (a couple of years ago) it seemed to be the most instant productive  and sane way of doing server-side Java.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/android"&gt;android&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="android"/><category term="frameworks"/><category term="java"/><category term="quora"/></entry><entry><title>Can Scala gain wider usage than Java any time soon?</title><link href="https://simonwillison.net/2012/Feb/11/can-scala-gain-wider/#atom-tag" rel="alternate"/><published>2012-02-11T17:17:00+00:00</published><updated>2012-02-11T17:17:00+00:00</updated><id>https://simonwillison.net/2012/Feb/11/can-scala-gain-wider/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Can-Scala-gain-wider-usage-than-Java-any-time-soon/answer/Simon-Willison"&gt;Can Scala gain wider usage than Java any time soon?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No, because Scala is harder to master than Java.&lt;/p&gt;

&lt;p&gt;(By "master" I mean get to the point where you can read and understand code written by someone else, no matter what language features and idioms they are using)&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/concurrency"&gt;concurrency&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scala"&gt;scala&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="concurrency"/><category term="java"/><category term="programming"/><category term="scala"/><category term="scaling"/><category term="web-development"/><category term="quora"/></entry><entry><title>Where can I find great Java/Scala developers in London?</title><link href="https://simonwillison.net/2012/Jan/22/where-can-i-find/#atom-tag" rel="alternate"/><published>2012-01-22T10:36:00+00:00</published><updated>2012-01-22T10:36:00+00:00</updated><id>https://simonwillison.net/2012/Jan/22/where-can-i-find/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Where-can-I-find-great-Java-Scala-developers-in-London/answer/Simon-Willison"&gt;Where can I find great Java/Scala developers in London?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are quite a few Scala events in London - here are the ones we know about at the moment: &lt;span&gt;&lt;a href="http://lanyrd.com/topics/scala/in/london/"&gt;http://lanyrd.com/topics/scala/i...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The Scala Days conference at the Barbican in April looks like a particularly good place to find Scala developers. Since it's still a relatively niche language I imagine there are a bunch of Java developers who would like the opportunity to work with it full time.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/london"&gt;london&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recruiting"&gt;recruiting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scala"&gt;scala&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="java"/><category term="london"/><category term="recruiting"/><category term="scala"/><category term="quora"/></entry><entry><title>Which web frameworks should I focus on to make myself the most well rounded and to be able to solve the most problems as a web application developer/architect?</title><link href="https://simonwillison.net/2012/Jan/18/which-web-frameworks-should/#atom-tag" rel="alternate"/><published>2012-01-18T17:17:00+00:00</published><updated>2012-01-18T17:17:00+00:00</updated><id>https://simonwillison.net/2012/Jan/18/which-web-frameworks-should/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Which-web-frameworks-should-I-focus-on-to-make-myself-the-most-well-rounded-and-to-be-able-to-solve-the-most-problems-as-a-web-application-developer-architect/answer/Simon-Willison"&gt;Which web frameworks should I focus on to make myself the most well rounded and to be able to solve the most problems as a web application developer/architect?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Being an expert web developer isn't about which framework you know, it's about the fundamentals. It's important that you know how the tools you are using work, so you can fix things when they break - Joel Spolsky's law of leaky abstractions is a great essay about this: &lt;span&gt;&lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;http://www.joelonsoftware.com/ar...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;So pick a modern framework, but make sure you're learning how web technology works. You need to understand all aspects of HTTP, including cookies, caching, content negotiation etc. You need to understand web application security: XSS, CSRF, the OWASP top ten. You need a very solid appreciation of front end development technologies - CSS, HTML, JavaScript - even if you don't specialise in front end engineering most backed decisions you make need to take these in to account.&lt;/p&gt;

&lt;p&gt;Then there are the systems architecture concerns: persistence, sharing, replication, when and where to apply both SQL and NoSQL technologies, load balancing and so forth.&lt;/p&gt;

&lt;p&gt;The web framework you use ends up being a relatively small part of the overall problem - it's just the bit that passes an incoming HTTP request through to your custom code, then hands the resulting response back again.&lt;/p&gt;

&lt;p&gt;So as long as you pick something that doesn't prevent you from getting stuck in to the underlying details (a closed source framework would be a bad idea here) you should be fine.&lt;br /&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ecommerce"&gt;ecommerce&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hibernate"&gt;hibernate&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="java"/><category term="programming-languages"/><category term="software-engineering"/><category term="web-development"/><category term="quora"/><category term="ecommerce"/><category term="hibernate"/></entry><entry><title>What are the most practical beneficials for Python, comparing to Java?</title><link href="https://simonwillison.net/2011/Dec/30/what-are-the-most/#atom-tag" rel="alternate"/><published>2011-12-30T18:15:00+00:00</published><updated>2011-12-30T18:15:00+00:00</updated><id>https://simonwillison.net/2011/Dec/30/what-are-the-most/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-most-practical-beneficials-for-Python-comparing-to-Java/answer/Simon-Willison"&gt;What are the most practical beneficials for Python, comparing to Java?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For me, the single most productive advantage of Python is the ability to work with it interactively in a REPL - I use ipython but Python also ships with an interactive mode out of the box.&lt;/p&gt;

&lt;p&gt;I do almost all of my development in the interactive prompt first, then copying working code in to a text editor once I've got it working interactively.&lt;/p&gt;

&lt;p&gt;I find this more than compensates for the lack of an auto-completing IDE such as Eclipse - in fact ipython does both autocompletion and offers inline documentation (just type symbol? and hit enter for the signature/docstring or symbol?? for the source code to a function).&lt;/p&gt;

&lt;p&gt;Once you've learnt to develop interactively in this way it can be really frustrating working with a language like Java or PHP that doesn't lend itself effectively to this style of programming.&lt;/p&gt;

&lt;p&gt;I use Firebug and similar tools in the browser to gain the same development style for working with JavaScript.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="java"/><category term="python"/><category term="quora"/></entry><entry><title>Quoting Brian Goetz</title><link href="https://simonwillison.net/2011/Aug/19/peek/#atom-tag" rel="alternate"/><published>2011-08-19T12:20:00+00:00</published><updated>2011-08-19T12:20:00+00:00</updated><id>https://simonwillison.net/2011/Aug/19/peek/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html"&gt;&lt;p&gt;There is plenty of evidence in the ecosystem to support the hypothesis that, if given the tools to do so easily, object-oriented programmers are ready to embrace functional techniques (such as immutability) and work them into an object-oriented view of the world, and will write better, less error-prone code as a result. Simply put, we believe the best thing we can do for Java developers is to give them a gentle push towards a more functional style of programming.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html"&gt;Brian Goetz&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/functional-programming"&gt;functional-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="functional-programming"/><category term="java"/><category term="recovered"/></entry><entry><title>Why does Java encourage over-engineering?</title><link href="https://simonwillison.net/2010/Nov/16/why-does-java-encourage/#atom-tag" rel="alternate"/><published>2010-11-16T13:06:00+00:00</published><updated>2010-11-16T13:06:00+00:00</updated><id>https://simonwillison.net/2010/Nov/16/why-does-java-encourage/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-does-Java-encourage-over-engineering/answer/Simon-Willison"&gt;Why does Java encourage over-engineering?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I suggest reading "Execution in the Kingdom of Nouns" &lt;span&gt;&lt;a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html"&gt;http://steve-yegge.blogspot.com/...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="java"/><category term="quora"/></entry><entry><title>Why is Java perceived as not cool for startups? We seem to be getting a lot of feedback lately that a startup should be using Ruby on Rails, PHP, Python, etc., if they want to be agile and iterate quickly.</title><link href="https://simonwillison.net/2010/Nov/14/why-is-java-perceived/#atom-tag" rel="alternate"/><published>2010-11-14T12:21:00+00:00</published><updated>2010-11-14T12:21:00+00:00</updated><id>https://simonwillison.net/2010/Nov/14/why-is-java-perceived/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-is-Java-perceived-as-not-cool-for-startups-We-seem-to-be-getting-a-lot-of-feedback-lately-that-a-startup-should-be-using-Ruby-on-Rails-PHP-Python-etc-if-they-want-to-be-agile-and-iterate-quickly/answer/Simon-Willison"&gt;Why is Java perceived as not cool for startups? We seem to be getting a lot of feedback lately that a startup should be using Ruby on Rails, PHP, Python, etc., if they want to be agile and iterate quickly.&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I believe what takes the longest time in software engineering is not actually writing the code, but untangling it to find bugs, and Java is much more conducive to that, and the tooling is much stronger than for other languages.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;You should re-evaluate your beliefs. Dynamic language programmers spend a great deal of time thinking about code quality and maintainability. &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD&lt;/a&gt; (and &lt;a href="http://en.wikipedia.org/wiki/Behavior-driven_development"&gt;BDD&lt;/a&gt;), which I believe was first popularised within the Ruby community) are extremely widespread, and profiling and debugging tools are widely used and constantly improved. A strong test suite provides far more effective protection against bugs than static typing and an IDE.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/static-typing"&gt;static-typing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/careers"&gt;careers&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="java"/><category term="programming"/><category term="programming-languages"/><category term="rails"/><category term="startups"/><category term="static-typing"/><category term="quora"/><category term="careers"/></entry><entry><title>What are the main weaknesses of Java as a programming language?</title><link href="https://simonwillison.net/2010/Oct/15/what-are-the-main-java/#atom-tag" rel="alternate"/><published>2010-10-15T14:25:00+00:00</published><updated>2010-10-15T14:25:00+00:00</updated><id>https://simonwillison.net/2010/Oct/15/what-are-the-main-java/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-main-weaknesses-of-Java-as-a-programming-language/answer/Simon-Willison"&gt;What are the main weaknesses of Java as a programming language?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A cultural bias towards over-engineering. In my experience Java code often ends up a huge network of Factories and AbstractFactories and Visitors and XML configuration files and every design pattern you care to mention, dozens of classes many of which contain hardly any procedural code at all. A lot of Java projects are essentially impossible to navigate without an IDE.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design-patterns"&gt;design-patterns&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="design-patterns"/><category term="java"/><category term="programming-languages"/><category term="quora"/></entry><entry><title>Why don't more people use Google Web Toolkit for web development as opposed to scripting alternatives like JavaScript?</title><link href="https://simonwillison.net/2010/Oct/12/why-dont-more-people/#atom-tag" rel="alternate"/><published>2010-10-12T18:28:00+00:00</published><updated>2010-10-12T18:28:00+00:00</updated><id>https://simonwillison.net/2010/Oct/12/why-dont-more-people/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-dont-more-people-use-Google-Web-Toolkit-for-web-development-as-opposed-to-scripting-alternatives-like-JavaScript/answer/Simon-Willison"&gt;Why don&amp;#39;t more people use Google Web Toolkit for web development as opposed to scripting alternatives like JavaScript?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm morally opposed to GWT, because I don't believe in building sites or applications that are entirely dependent on JavaScript to function. As someone who took the time to learn JavaScript, I'm also not at all convinced that Java is a more productive language.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gwt"&gt;gwt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="gwt"/><category term="java"/><category term="javascript"/><category term="quora"/></entry><entry><title>Creating Shazam in Java</title><link href="https://simonwillison.net/2010/Sep/22/creating/#atom-tag" rel="alternate"/><published>2010-09-22T21:39:00+00:00</published><updated>2010-09-22T21:39:00+00:00</updated><id>https://simonwillison.net/2010/Sep/22/creating/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/"&gt;Creating Shazam in Java&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Using a Fast Fourier Transformation.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/algorithms"&gt;algorithms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/shazam"&gt;shazam&lt;/a&gt;&lt;/p&gt;



</summary><category term="algorithms"/><category term="java"/><category term="recovered"/><category term="shazam"/></entry><entry><title>Quoting Rafe Colburn</title><link href="https://simonwillison.net/2010/Apr/10/rcorg/#atom-tag" rel="alternate"/><published>2010-04-10T18:42:31+00:00</published><updated>2010-04-10T18:42:31+00:00</updated><id>https://simonwillison.net/2010/Apr/10/rcorg/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://rc3.org/2010/04/09/apples-kneecaps-competitors-and-partners/"&gt;&lt;p&gt;We all think of Java as a boring server-side language now, but the initial idea behind Java was that software developers could write applications in Java rather than writing them for Windows, and that those applications would work everywhere, thus defanging Microsoft’s desktop OS monopoly. Microsoft took various steps to prevent that from happening, but they lacked a tool like App Store that would enable them to just ban Java. Apple has that card to play, so they’re playing it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://rc3.org/2010/04/09/apples-kneecaps-competitors-and-partners/"&gt;Rafe Colburn&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/microsoft"&gt;microsoft&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/apple"&gt;apple&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/appstore"&gt;appstore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rafe-colburn"&gt;rafe-colburn&lt;/a&gt;&lt;/p&gt;



</summary><category term="microsoft"/><category term="apple"/><category term="java"/><category term="iphone"/><category term="appstore"/><category term="rafe-colburn"/></entry><entry><title>ElasticSearch: Your Data, Your Search</title><link href="https://simonwillison.net/2010/Feb/12/elasticsearch/#atom-tag" rel="alternate"/><published>2010-02-12T15:22:09+00:00</published><updated>2010-02-12T15:22:09+00:00</updated><id>https://simonwillison.net/2010/Feb/12/elasticsearch/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.elasticsearch.com/blog/2010/02/12/yourdatayoursearch.html"&gt;ElasticSearch: Your Data, Your Search&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A neat example of how ElasticSearch’s schemaless indexes and native JSON support make it ridiculously easy to index different types of data and run queries across them.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/elasticsearch"&gt;elasticsearch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/schemaless"&gt;schemaless&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;&lt;/p&gt;



</summary><category term="elasticsearch"/><category term="java"/><category term="json"/><category term="schemaless"/><category term="search"/></entry><entry><title>Elastic Search</title><link href="https://simonwillison.net/2010/Feb/11/elastic/#atom-tag" rel="alternate"/><published>2010-02-11T18:33:14+00:00</published><updated>2010-02-11T18:33:14+00:00</updated><id>https://simonwillison.net/2010/Feb/11/elastic/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.elasticsearch.com/"&gt;Elastic Search&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Solr has competition! Like Solr, Elastic Search provides a RESTful JSON HTTP interface to Lucene. The focus here is on distribution, auto-sharding and high availability. It’s even easier to get started with than Solr, partly due to the focus on providing a schema-less document store, but it’s currently missing out on a bunch of useful Solr features (a web interface and faceting are the two that stand out). The high availability features look particularly interesting. UPDATE: I was incorrect, basic faceted queries are already supported.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.elasticsearch.com/blog/2010/02/08/youknowforsearch.html"&gt;ElasticSearch blog&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/elasticsearch"&gt;elasticsearch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lucene"&gt;lucene&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rest"&gt;rest&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sharding"&gt;sharding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/solr"&gt;solr&lt;/a&gt;&lt;/p&gt;



</summary><category term="elasticsearch"/><category term="http"/><category term="java"/><category term="json"/><category term="lucene"/><category term="rest"/><category term="scaling"/><category term="search"/><category term="sharding"/><category term="solr"/></entry><entry><title>Quoting Glitch</title><link href="https://simonwillison.net/2010/Feb/10/javascript/#atom-tag" rel="alternate"/><published>2010-02-10T11:40:44+00:00</published><updated>2010-02-10T11:40:44+00:00</updated><id>https://simonwillison.net/2010/Feb/10/javascript/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://glitch.com/"&gt;&lt;p&gt;Glitch is built in an entirely new and different way for a game. The back end (java at the lowest level, with game logic scripted in Javascript) is designed for maximum flexibility and ease of deployment. That means we'll be able to push new content — new items, new places, new characters — on a daily basis. It also means that we'll have lots of APIs with which the game can be expanded and extended.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://glitch.com/"&gt;Glitch&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/glitch"&gt;glitch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rhino"&gt;rhino&lt;/a&gt;&lt;/p&gt;



</summary><category term="glitch"/><category term="java"/><category term="javascript"/><category term="rhino"/></entry><entry><title>twitter-text-conformance</title><link href="https://simonwillison.net/2010/Feb/6/twitter/#atom-tag" rel="alternate"/><published>2010-02-06T15:39:27+00:00</published><updated>2010-02-06T15:39:27+00:00</updated><id>https://simonwillison.net/2010/Feb/6/twitter/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/mzsanford/twitter-text-conformance"&gt;twitter-text-conformance&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is a neat idea: Twitter have released open source libraries for parsing standard tweet syntax in Ruby and Java, but they’ve also released a set of YAML unit tests aimed at anyone who wants to implement the same parsing logic in other languages.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://engineering.twitter.com/2010/02/introducing-open-source-twitter-text.html"&gt;Twitter Engineering Blog&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yaml"&gt;yaml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/conformance-suites"&gt;conformance-suites&lt;/a&gt;&lt;/p&gt;



</summary><category term="java"/><category term="ruby"/><category term="testing"/><category term="twitter"/><category term="yaml"/><category term="conformance-suites"/></entry><entry><title>Plurk: Instant conversations using Comet</title><link href="https://simonwillison.net/2010/Feb/1/plurk/#atom-tag" rel="alternate"/><published>2010-02-01T10:13:14+00:00</published><updated>2010-02-01T10:13:14+00:00</updated><id>https://simonwillison.net/2010/Feb/1/plurk/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://amix.dk/blog/post/19490"&gt;Plurk: Instant conversations using Comet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Plurk’s comet implementation sounds pretty amazing. They’re using a single quad-core server with 32GB of RAM running 8 Node.js instances to serve long-polled comet to 100,000+ simultaneous users. They switched to Node from Java JBoss/Netty and found the new solution used 10 times less memory.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://news.ycombinator.com/item?id=1088699"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jboss"&gt;jboss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/netty"&gt;netty&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/plurk"&gt;plurk&lt;/a&gt;&lt;/p&gt;



</summary><category term="comet"/><category term="java"/><category term="javascript"/><category term="jboss"/><category term="netty"/><category term="nodejs"/><category term="plurk"/></entry><entry><title>Frank Wierzbicki: Leaving Sun</title><link href="https://simonwillison.net/2009/Nov/4/frank/#atom-tag" rel="alternate"/><published>2009-11-04T22:33:05+00:00</published><updated>2009-11-04T22:33:05+00:00</updated><id>https://simonwillison.net/2009/Nov/4/frank/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://fwierzbicki.blogspot.com/2009/11/leaving-sun.html"&gt;Frank Wierzbicki: Leaving Sun&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Frank performed miracles at Sun and before, helping bring the Jython project out of stasis and turning it in to an active, community maintained modern Python implementation. If you’re looking for an expert Python/Java/Dynamic languages guy you should snap him up.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frank-wierzbicki"&gt;frank-wierzbicki&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jython"&gt;jython&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sun"&gt;sun&lt;/a&gt;&lt;/p&gt;



</summary><category term="frank-wierzbicki"/><category term="java"/><category term="jython"/><category term="python"/><category term="sun"/></entry><entry><title>Play framework for Java</title><link href="https://simonwillison.net/2009/Oct/25/play/#atom-tag" rel="alternate"/><published>2009-10-25T23:21:36+00:00</published><updated>2009-10-25T23:21:36+00:00</updated><id>https://simonwillison.net/2009/Oct/25/play/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.playframework.org/"&gt;Play framework for Java&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’m genuinely impressed by this—it’s a full stack web framework for Java that actually does feel a lot like Django or Rails. Best feature: code changes are automatically detected and reloaded by the development web server, giving you the same save-and-refresh workflow you get in Django (no need to compile and redeploy to try out your latest changes).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/play"&gt;play&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web"&gt;web&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="frameworks"/><category term="java"/><category term="play"/><category term="rails"/><category term="web"/></entry><entry><title>Introducing Cloudera Desktop</title><link href="https://simonwillison.net/2009/Oct/21/cloudera/#atom-tag" rel="alternate"/><published>2009-10-21T18:48:36+00:00</published><updated>2009-10-21T18:48:36+00:00</updated><id>https://simonwillison.net/2009/Oct/21/cloudera/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cloudera.com/blog/2009/10/01/introducing-cloudera-desktop/"&gt;Introducing Cloudera Desktop&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It’s a GUI for Hadoop, and under the hood is a whole stack of open source software, including Python, Django, MooTools, Twisted, lxml, CherryPy, Mako, Java and AspectJ.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aspectj"&gt;aspectj&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cherrypy"&gt;cherrypy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cloudera"&gt;cloudera&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hadoop"&gt;hadoop&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lxml"&gt;lxml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mako"&gt;mako&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mootools"&gt;mootools&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twisted"&gt;twisted&lt;/a&gt;&lt;/p&gt;



</summary><category term="aspectj"/><category term="cherrypy"/><category term="cloudera"/><category term="django"/><category term="hadoop"/><category term="java"/><category term="lxml"/><category term="mako"/><category term="mootools"/><category term="open-source"/><category term="python"/><category term="twisted"/></entry><entry><title>And so it goes, around again</title><link href="https://simonwillison.net/2009/Sep/3/and/#atom-tag" rel="alternate"/><published>2009-09-03T09:46:33+00:00</published><updated>2009-09-03T09:46:33+00:00</updated><id>https://simonwillison.net/2009/Sep/3/and/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://fishbowl.pastiche.org/2009/09/02/and_so_it_goes_around_again/"&gt;And so it goes, around again&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Charles Miller on Java, pointing out that if you don’t have closures and first-class functions you end up having to add band-aid solutions and special case syntactic sugar. Python’s lack of multi-line lambdas leads to a similar (though less pronounced) effect.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/charles-miller"&gt;charles-miller&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/closures"&gt;closures&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming-languages"&gt;programming-languages&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="charles-miller"/><category term="closures"/><category term="java"/><category term="programming-languages"/><category term="python"/></entry><entry><title>Scriptlets - Quick web scripts</title><link href="https://simonwillison.net/2009/Aug/13/scriptlets/#atom-tag" rel="alternate"/><published>2009-08-13T13:51:10+00:00</published><updated>2009-08-13T13:51:10+00:00</updated><id>https://simonwillison.net/2009/Aug/13/scriptlets/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.scriptlets.org/"&gt;Scriptlets - Quick web scripts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
From the prolific Jeff Lindsay, a pastebin-style tool for short server-side scripts written in Python, JavaScript or PHP that executes them within a Google App Engine powered sandbox. The Java code that implements the service is available on GitHub.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.webhooks.org/2009/04/18/easy-hook-scripts-with-scriptlets/"&gt;Easy hook scripts with Scriptlets&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jeff-lindsay"&gt;jeff-lindsay&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scriptlets"&gt;scriptlets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;&lt;/p&gt;



</summary><category term="github"/><category term="google-app-engine"/><category term="java"/><category term="javascript"/><category term="jeff-lindsay"/><category term="open-source"/><category term="php"/><category term="python"/><category term="scriptlets"/><category term="webhooks"/></entry><entry><title>Jython 2.5.0 Final is out!</title><link href="https://simonwillison.net/2009/Jun/16/jython/#atom-tag" rel="alternate"/><published>2009-06-16T23:21:07+00:00</published><updated>2009-06-16T23:21:07+00:00</updated><id>https://simonwillison.net/2009/Jun/16/jython/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://fwierzbicki.blogspot.com/2009/06/jython-250-final-is-out.html"&gt;Jython 2.5.0 Final is out!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It’s been a long time coming—congratulations to the team.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jython"&gt;jython&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="java"/><category term="jython"/><category term="python"/></entry></feed>