<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://www.symphonious.net/wp-atom.php">
	<title type="text">Symphonious</title>
	<subtitle type="text">Living in a state of accord.</subtitle>

	<updated>2009-11-04T11:20:33Z</updated>
	<generator uri="http://wordpress.org/" version="2.8.5">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://www.symphonious.net" />
	<id>http://www.symphonious.net/feed/atom/</id>
	

			<link rel="self" href="http://feeds.feedburner.com/symphonious" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Conversion for the Web]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/11/04/conversion-for-the-web/" />
		<id>http://www.symphonious.net/?p=1253</id>
		<updated>2009-11-04T11:20:33Z</updated>
		<published>2009-11-04T11:20:33Z</published>
		<category scheme="http://www.symphonious.net" term="Content Management" /><category scheme="http://www.symphonious.net" term="Editors" /><category scheme="http://www.symphonious.net" term="Ephox" />		<summary type="html"><![CDATA[
       Andrew Shebanow in Open Government and PDF:
    
    
      The issue at hand is not whether governments should pick HTML or PDF. The issue at hand is whether governments are capable of publishing information at all. Show [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/11/04/conversion-for-the-web/">&lt;p&gt;
       &lt;a href="http://shebanator.com/2009/11/02/open-government-and-pdf/"&gt;Andrew Shebanow in Open Government and PDF&lt;/a&gt;:
    &lt;/p&gt;
    &lt;blockquote&gt;
      The issue at hand is not whether governments should pick HTML or PDF. The issue at hand is whether governments are capable of publishing information &lt;em&gt;at all&lt;/em&gt;. Show me an HTML creation tool that creates high quality, standards conformant markup from a Word document or any of the zillions of editing tools that government employees use. Now add in all the tools used by people who submit documents to the government. And all the versions of those tools released in the last 20 years. Now make sure that the HTML/XML works correctly even when the user doesn’t have the right browser or the right fonts installed.
    &lt;/blockquote&gt;
    &lt;p&gt;
       I’ve actually worked with a number of government departments who were looking to move more content online and the content conversion problem is definitely a time consuming and challenging part of the problem. That’s precisely why I wind up getting involved, since &lt;a href="http://www.ephox.com/products/editlive/"&gt;EditLive!&lt;/a&gt; lets you easily copy and paste content from Word documents and produce clean, compliant XHTML. It can even (optionally) strip out inline formatting and leave just the structure like headings, tables and lists.
    &lt;/p&gt;
    &lt;p&gt;
       Furthermore, EditLive! is actually quite good at making sure the HTML works correctly even when the user doesn’t have the right browser or the right fonts installed, especially when it’s been configured to suit the particular content needs. Even with non-technical business authors this can work very well and is doing so for a significant number of government departments.
    &lt;/p&gt;
    &lt;p&gt;
       That’s not to say it’s the whole solution, there are systems out there where it’s hard to convert the content to HTML and where HTML may not be the best format anyway. Some of those cases may work better with PDF but certainly not all of them.  To somehow suggest that PDF is a complete and simple solution to publishing information on the web misses quite a lot of the picture. For example:
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        How do web site visitors navigate around and get to that PDF data?  How do they search and find it? As much time is spent working out navigation structures as it is converting content.
      &lt;/li&gt;
      &lt;li&gt;
        How do you expose information from databases with regularly changing information? Wouldn’t a HTML representation be easier to generate than PDF in most of these cases?
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
       Putting information on the web is not simple and no single technology is going to make it simple. PDF definitely has it’s place on the web, but so does HTML and a number of other formats. PDF doesn’t alleviate compatibility concerns, not all users have a recent enough PDF reader, not all PDF embed all the fonts and when they do it makes the download very large etc and not all PDFs are standards compliant. Putting non-web stuff on the web is always a big, challenging project, so review the available technologies carefully and pick the ones that best achieve your goals. Very few companies have success with just dumping a whole heap of PDFs on a web server.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/Xz8_oOwblAw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/11/04/conversion-for-the-web/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/11/04/conversion-for-the-web/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Don&#8217;t Blame The User, Blame The Editor]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/10/23/dont-blame-the-user-blame-the-editor/" />
		<id>http://www.symphonious.net/?p=1250</id>
		<updated>2009-10-23T09:50:05Z</updated>
		<published>2009-10-23T09:50:05Z</published>
		<category scheme="http://www.symphonious.net" term="Editors" /><category scheme="http://www.symphonious.net" term="Rants" />		<summary type="html"><![CDATA[
       I swear, some days you just want to reach into the screen and strangle the blogger on the other end. Jeff Atwood complains that his users commonly fail to read all the helpful hints on how to use their overly complicated, what you see isn’t what you get [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/10/23/dont-blame-the-user-blame-the-editor/">&lt;p&gt;
       I swear, some days you just want to reach into the screen and strangle the blogger on the other end. &lt;a href="http://www.codinghorror.com/blog/archives/001306.html"&gt;Jeff Atwood complains that his users commonly fail to read all the helpful hints on how to use their overly complicated, what you see isn’t what you get editor on Stack Overflow&lt;/a&gt;:
    &lt;/p&gt;
    &lt;blockquote&gt;
      The ask question page is already dangerously close to cluttered with helpful tips, but apparently these helpful buttons, links, and text are all but invisible to a large segment of the user population. Sure, you could argue that &lt;a href="http://superuser.com/"&gt;Super User&lt;/a&gt; tends to attract less sophisticated users, but I see the exact same problem with programmers on &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;. As new users, a significant percentage of them can&amp;#39;t figure out how to format code, even though there&amp;#39;s not only a toolbar button that does it for you, but help text on the right explicitly describing how to do it manually. (Just indent 4 spaces. Spoiler alert!)
    &lt;/blockquote&gt;
    &lt;p&gt;
       So essentially, users don’t find the editor intuitive and the solution they’ve gone with up until now is to add more and more help text to try and teach the user how to use the unintuitive editor. It’s not working. The obvious solution is to escalate the arms race:
    &lt;/p&gt;
    &lt;blockquote&gt;
      More and more, I&amp;#39;m thinking we need to put the formatting help &amp;#8212; for new users only &amp;#8212; &lt;strong&gt;directly in their line of sight&lt;/strong&gt;. That is, pre-populate the question entry area with some example formatting that is typical of the average question. Nothing complicated. But at least then it&amp;#39;d be in the one &amp;#8212; and apparently the &lt;em&gt;only&lt;/em&gt; one &amp;#8212; place myopic users are willing to look. Right in front of their freakin&amp;#39; faces.
    &lt;/blockquote&gt;
    &lt;p&gt;
       Thankfully the comments are full of people suggesting the right answer &amp;#8211; fix the editor so you don’t &lt;em&gt;need&lt;/em&gt; instructions to use it. You can always provide a source view for geeks who like to type in markup, but make the default something that just works.
    &lt;/p&gt;
    &lt;p&gt;
       If the mark of a poor tradesman is that they always blames their tools, the mark of a bad UI designer is that they always blame the users. It’s not them, it’s you.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/gjFVABTKdbc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/10/23/dont-blame-the-user-blame-the-editor/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/10/23/dont-blame-the-user-blame-the-editor/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Using Scala in .NET]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/10/19/using-scala-in-net/" />
		<id>http://www.symphonious.net/?p=1246</id>
		<updated>2009-10-19T14:28:28Z</updated>
		<published>2009-10-19T14:19:03Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Scala" />		<summary type="html"><![CDATA[
       Having become quite interested in languages that support deployment on both Java and .NET, then diving into Scala to find it’s a good language, the obvious next step is to try using Scala on .NET. I found a little time over the weekend to try that out with [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/10/19/using-scala-in-net/">&lt;p&gt;
       Having become quite interested in &lt;a href="http://www.symphonious.net/2009/09/25/the-new-cross-platform/"&gt;languages that support deployment on both Java and .NET&lt;/a&gt;, then &lt;a href="http://www.symphonious.net/2009/10/15/getting-into-scala/"&gt;diving into Scala&lt;/a&gt; to find it’s a good language, the obvious next step is to try using Scala on .NET. I found a little time over the weekend to try that out with good success. Notably, I haven’t tried this in a real project yet so there may yet be some significant catches, but so far it looks really quite promising.
    &lt;/p&gt;
    &lt;h3&gt;
       Simple .NET Exe
    &lt;/h3&gt;
    &lt;p&gt;
       First things first, let’s write some Scala then compile it to a .exe file that uses .NET. Our scala class is the simple Hello World:
    &lt;/p&gt;
&lt;pre&gt;
import System.Console
object test extends Application {
  def main(args: Array[String]) = Console.println(“Hello .NET World!”)
}
&lt;/pre&gt;
    &lt;p&gt;
       Note that I put this in a file called test.scala as part of my fiddling to make this work &amp;#8211; I don’t think that should be required but it certainly doesn’t hurt.
    &lt;/p&gt;
    &lt;p&gt;
       Compilation to .NET requires two steps. Both are best performed by opening the “SDK Command Prompt”&lt;a href="#footnote1:1255960347063" class="footnote" id="footlink1:1255960347063"&gt;1&lt;/a&gt;. This looks very much like the normal Command Prompt but it defines a bunch of important environment variables so that all the .NET tools are on your path and working correctly.
    &lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;
        If you haven’t already, &lt;a href="http://www.scala-lang.org/node/168"&gt;as the Scala docs say&lt;/a&gt;, copy the mscorlib.dll file from the .NET SDK (I had to use find to locate it then picked one of the results at random) to the %SCALA_HOME%\share\scala\lib directory
      &lt;/li&gt;
      &lt;li&gt;
        Again, if you haven’t already, install the scala-msil support by running: 
&lt;pre&gt;
sbaz install scala-msil
&lt;/pre&gt;
      &lt;/li&gt;
      &lt;li&gt;
        Then compile to the MSIL intermediary format with scalac-net&lt;a href="#footnote2:1255960467317" class="footnote" id="footlink2:1255960467317"&gt;2&lt;/a&gt;: 
&lt;pre&gt;
scalac-net test.scala
&lt;/pre&gt;
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;
       Now you should have a test.msil file alongside the test.scala file. The next step is to convert the file to an actual EXE file with the ilasm tool&lt;a href="#footnote3:1255960786099" class="footnote" id="footlink3:1255960786099"&gt;3&lt;/a&gt;:
    &lt;/p&gt;
&lt;pre&gt;
ilasm test.msil
&lt;/pre&gt;
    &lt;p&gt;
       Now you should have test.exe alongside your test.msil and test.scala files. Before you run it though, you’ll need to find the predef.dll and scalaruntime.dll files in the Scala distribution and copy them to the current directory&lt;a href="#footnote4:1255960886737" class="footnote" id="footlink4:1255960886737"&gt;4&lt;/a&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       Finally, you can now run test.exe and see “Hello .NET World!” printed.
    &lt;/p&gt;
    &lt;h3&gt;
       Creating DLLs for Visual Studio Projects
    &lt;/h3&gt;
    &lt;p&gt;
       The same tool setup can be used to create DLLs for use with Visual Studio projects. I created a C# web application project in Visual Studio, then modified my test scala class slightly:
    &lt;/p&gt;
&lt;pre&gt;
import System.Console
class test extends Application {
  def getStuff) = “Hello .NET World!”
}
&lt;/pre&gt;
    &lt;p&gt;
       Then recompile it with scalac-net as before. Since we want a DLL instead of an EXE file we add a /dll parameter to the ilasm invocation:
    &lt;/p&gt;
&lt;pre&gt;
ilasm /dll test.msil
&lt;/pre&gt;
    &lt;p&gt;
       Now we’ve got a DLL ready to go. I copied the three DLLs, test.dll, predef.dll and scalaruntime.dll into my Visual Studio project to make them easy to access. Then:
    &lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;
        Right click on the project in Visual Studio
      &lt;/li&gt;
      &lt;li&gt;
        Select “Add Reference…”
      &lt;/li&gt;
      &lt;li&gt;
        Click the “Browse” tab
      &lt;/li&gt;
      &lt;li&gt;
        Select the three DLLs you copied in.
      &lt;/li&gt;
      &lt;li&gt;
        Click “OK”
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;
       You can now access your Scala class from C# quite easily. I edited Default.aspx and added:
    &lt;/p&gt;
&lt;pre&gt;
&amp;#60;%= new test().getStuff() %&amp;#62;
&lt;/pre&gt;
    &lt;p&gt;
       Code completion even worked. Running the project correctly shows “Hello .NET World!”.
    &lt;/p&gt;
    &lt;h3&gt;
       Stuff Yet To Discover
    &lt;/h3&gt;
    &lt;p&gt;
       There’s a lot of stuff I don’t know about yet, largely because I’m starting from pretty much no knowledge of .NET programming, but also a few Scala related things:
    &lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;
        Unlike Ruby and Python, Scala doesn’t have a class library that’s designed to stand alone &amp;#8211; it somewhat assumes the Java libraries will be there. Things like IO are left to the Java classes so they’d need to be abstracted away with separate Java and .NET implementations. It remains to be seen how limiting that could be. 
        &lt;ul&gt;
          &lt;li&gt;
            Worse, I’ve seen some blog posts mention that not all of the Scala library is actually available on .NET. The XML libraries directly reference a bunch of Java IO stuff for example.
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        You can combine multiple classes in one DLL. When I still had test as an object, I got ‘test’ and ‘test$’ put into the DLL. When I have multiple .scala files to compile I’m not sure at what point or how they all get combined into one DLL. I’m guessing somewhere along the line putting all the files as arguments should do the trick. Otherwise it will get pretty unwieldy.
      &lt;/li&gt;
      &lt;li&gt;
        I’ve got no idea what actual deployment of this stuff is like. Last time I touched .NET that was a complete nightmare even without Scala. Hopefully if the project references all the Scala DLL files they will get bundled up in whatever way Visual Studio would normally do when preparing to distribute.
      &lt;/li&gt;
    &lt;/ul&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink1:1255960347063" id="footnote1:1255960347063"&gt;1&lt;/a&gt; &amp;#8211; I believe this was installed along with the .NET SDK 2.0 package I grabbed &amp;#8211; I didn’t notice it being installed with just Visual Studio but I could be wrong. &lt;a href="#footlink1:1255960347063" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink2:1255960467317" id="footnote2:1255960467317"&gt;2&lt;/a&gt; &amp;#8211; scalac-net seems to be a handy little wrapper around scalac that sets -target=msil and adds the right DLLs to the classpath. &lt;a href="#footlink2:1255960467317" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink3:1255960786099" id="footnote3:1255960786099"&gt;3&lt;/a&gt; &amp;#8211; this is the part that really requires the SDK Command Prompt and the environment variables it sets up.&lt;a href="#footlink3:1255960786099" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink4:1255960886737" id="footnote4:1255960886737"&gt;4&lt;/a&gt; &amp;#8211; I think under Windows DLL loading rules they can actually be anywhere on the PATH. &lt;a href="#footlink4:1255960886737" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/jjOFwQORXUo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/10/19/using-scala-in-net/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/10/19/using-scala-in-net/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Getting Into Scala]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/10/15/getting-into-scala/" />
		<id>http://www.symphonious.net/?p=1244</id>
		<updated>2009-10-15T15:23:16Z</updated>
		<published>2009-10-15T15:23:16Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Scala" />		<summary type="html"><![CDATA[
       When I was in Australia visiting Ephox’s awesome engineering team recently, it was suggested that we should be seriously looking at using Scala for some or all of the server side development we have coming up. The key benefit that was described to me was based on productivity [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/10/15/getting-into-scala/">&lt;p&gt;
       When I was in Australia visiting &lt;a href="http://www.symphonious.net/2009/10/01/a-great-team/"&gt;Ephox’s awesome engineering team&lt;/a&gt; recently, it was suggested that we should be seriously looking at using Scala for some or all of the server side development we have coming up. The key benefit that was described to me was based on productivity &amp;#8211; I certainly think that has merit but I’m somewhat more interested in it being a potential solution to &lt;a href="http://www.symphonious.net/2009/09/25/the-new-cross-platform/"&gt;the new cross platform problem&lt;/a&gt;&lt;a id="footlink1:1255615173985" href="#footnote1:1255615173985" class="footnote"&gt;1&lt;/a&gt;. Options like JRuby and Jython are also a possibility in this space, but Scala fits more nicely into a Java programmers mind-set and is designed with the JVM in mind, so while it pushes a lot of boundaries, ultimately it fits with the JVM and Java very nicely&lt;a id="footlink2:1255615348893" href="#footnote2:1255615348893" class="footnote"&gt;2&lt;/a&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       So I read through the &lt;a href="http://programming-scala.labs.oreilly.com/"&gt;O’Reilly Programming Scala&lt;/a&gt; book on the plane ride home&lt;a id="footlink3:1255615446418" href="#footnote3:1255615446418" class="footnote"&gt;3&lt;/a&gt;, then jumped in and built a small but real-world project with Scala and integrated it into a Java servlet project. I think it’s given me a pretty good grounding in what Scala can do, the benefits it brings and the general state of play.
    &lt;/p&gt;
    &lt;h3&gt;
       The Language
    &lt;/h3&gt;
    &lt;p&gt;
       The Scala language is fantastic. Easy to learn if you have a solid programming background and just a smidgeon of functional programming knowledge&lt;a id="footlink4:1255615598614" href="#footnote4:1255615598614" class="footnote"&gt;4&lt;/a&gt;. I’ve always been on the fence between compile time and runtime typing, but I think Scala strikes the perfect balance. It’s strictly typed at compile time, but uses a lot of inference so you don’t have to constantly declare types. I quickly came to find that there are two places where it’s incredibly handy to always specify types:
    &lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;
        Parameters. Scala requires it anyway, but it is vital documentation for anyone who wants to call that method.
      &lt;/li&gt;
      &lt;li&gt;
        Return types. Not usually required by Scala, but by being explicit you can catch quite a lot of weird errors that crop up and isolate them to the right method. If you leave the return type as inferred, the compile error you get usually comes out on the caller of a method and can be somewhat confusing. The most common error here is effectively not returning something or returning two different types by accident (usually because you expected a different return type from a method you called). This isn’t hard and fast &amp;#8211; short, simple methods are usually best left inferred.
      &lt;/li&gt;
    &lt;/ol&gt;
    &lt;p&gt;
       Having closures is definitely handy, but the benefit isn’t really in closures themselves. What really makes a difference is the libraries designed to be used with closures&lt;a id="footlink5:1255616107622" href="#footnote5:1255616107622" class="footnote"&gt;5&lt;/a&gt;, and the functional programming style that comes naturally in Scala. Looking back at the code I’ve written, the structure really looks like something that would make sense as a mathematical equation &amp;#8211; each method does one thing, consistently and without side-effects. More importantly though, the breakdown of methods that results winds up being quite logical and helps reusability a lot. I find that getting the split points for methods right in Java is much harder and requires more conscious thought.
    &lt;/p&gt;
    &lt;p&gt;
       Traits &amp;#8211; wow do I ever love these things. The first key benefit I found for them was unit testing. In Java, one class would tend to be responsible for loading and processing it’s data. In Scala, traits make it so easy for the class to declare an abstract variable for the data and just provide the processing. Traits then step in to provide the loading part and provide a concrete implementation of the variable. It becomes obvious to have a &lt;em&gt;LoadFromDatabase&lt;/em&gt; trait, a &lt;em&gt;HardCodedString&lt;/em&gt; trait or a &lt;em&gt;LoadFromFile&lt;/em&gt; trait &amp;#8211; now where the data comes from is clearly separated. In tests you just use a HardCodedString trait and there’s no need for Mocks or Stubs.
    &lt;/p&gt;
    &lt;p&gt;
       Interestingly, there is a wonderful synergy between traits and JNDI. Traits can’t accept constructor arguments and even if they could it’s ideal to just declare that you want a &lt;em&gt;new Widget() with DatabaseLoading&lt;/em&gt; and have it just work. JNDI gives you that ability &amp;#8211; the DatabaseLoading trait just grabs the datasource from JNDI and there’s no need to tunnel parameters through to it like you would otherwise.
    &lt;/p&gt;
    &lt;p&gt;
       I’m also a big fan of the uniform access principle that Scala uses. Essentially, from the caller’s perspective, there is no visible difference between accessing a public variable and accessing a public method. So you can have a base class that declares an abstract variable, then implement it with a concrete method in a subclass and visa-versa. It’s an incredibly simple concept that gives a lot of flexibility and avoids a ton of boilerplate code.
    &lt;/p&gt;
    &lt;h3&gt;
       The Tools
    &lt;/h3&gt;
    &lt;p&gt;
       This is the weak point of Scala, but it shows some promise.
    &lt;/p&gt;
    &lt;h4&gt;
       Testing Libraries
    &lt;/h4&gt;
    &lt;p&gt;
       There are actually quite a few testing libraries in Scala &amp;#8211; all of them somewhat difficult to get working inside an IDE or Ant build, but all quite solid and stable if you use their test runners. The xUnit equivalent is &lt;a href="http://www.scalatest.org/"&gt;ScalaTest&lt;/a&gt;, I never got it working with Ant or Eclipse so gave up and moved on to &lt;a href="http://code.google.com/p/specs/"&gt;Specs&lt;/a&gt;. I love it&lt;a id="footlink6:1255617559659" href="#footnote6:1255617559659" class="footnote"&gt;6&lt;/a&gt;. The Aussie dev team recently switched from CamelCase test method names to using underscores&lt;a id="footlink7:1255617589258" href="#footnote7:1255617589258" class="footnote"&gt;7&lt;/a&gt; for readability, but Specs takes that a few steps further by letting you use strings. For example:
    &lt;/p&gt;
&lt;pre&gt;
“Administrator users” should {
    “have a password at least 8 characters long” in { …code goes here… }
    “be in the admin group” in { …code goes here… }
}
&lt;/pre&gt;
    &lt;p&gt;
       The test output is really easy to read using the Specs runner, but it gets much less readable when using JUnit to run the tests via ant. You can avoid the outer ‘should’ block which helps readability in JUnit but it’s still not great.  Fortunately, IntelliJ has support for Specs directly and lays things out pretty well, plus the normal runner isn’t bad.
    &lt;/p&gt;
    &lt;h4&gt;
       Standard Toolchain
    &lt;/h4&gt;
    &lt;p&gt;
       The Scala distribution comes with a good set of tools.  A scala command for executing scripts and scalac for compiling classes are the main two.  Both work really nicely and the scala tool is particular good for experimenting with things &amp;#8211; especially when you’re trying to learn the type inference system.
    &lt;/p&gt;
    &lt;p&gt;
       The single biggest drawback is that scalac can’t compile Java code, so you can either have Scala code depending on Java code or Java code depending on Scala code, but can’t do both easily. This isn’t all bad, as it really encourages you to break the project down into independent libraries and reduce coupling but it would be nice to more easily mix languages. 
    &lt;/p&gt;
    &lt;h4&gt;
       IDEs
    &lt;/h4&gt;
    &lt;p&gt;
       Wow, these are terrible.  The Eclipse plugin is incredibly buggy and is practically unusable. NetBeans seemed to work well but is very short on features.  IntelliJ has a good set of features but has overall stability issues since you need to use an early access build of the IDE &amp;#8211; the plugin itself seems quite stable. IntelliJ also has some support for Specs and ScalaTest rather than having to run them through JUnit which is quite nice, but it didn’t seem able to just find all the tests in my project and run them &amp;#8211; it was limited to one package at a time.  Getting Scala working in IntelliJ is an absolute nightmare and you’ll spend forever searching Google for answers.  There are magic libraries you need to put in place and very cryptic error messages if you don’t have them &amp;#8211; at least it’s a once off. Once the Scala plugin works with a released version of IntelliJ I think that will be the winner, otherwise I may have to deal with NetBeans&lt;a id="footlink8:1255618541437" href="#footnote8:1255618541437" class="footnote"&gt;8&lt;/a&gt;.
    &lt;/p&gt;
    &lt;h4&gt;
       Java Libraries
    &lt;/h4&gt;
    &lt;p&gt;
       They work really nicely, except that Scala doesn’t use the normal java.util Collections framework. Scala has it’s own collections framework with equivalents and they are dramatically better but it does make it difficult to inter-operate with Java libraries that use Java Collections.  Fortunately, Scala provides wrappers for the Java Collection types to make them act like Scala collections, but it doesn’t have wrappers for going the other way. It’s definitely not the end of the world, but does make you think a bit more about where the Java to Scala leap should be &amp;#8211; sometimes writing a few key classes in Java can make things dramatically easier.  Judicious use of implicit conversions, a scary but powerful feature of Scala, can be a big help too.
    &lt;/p&gt;
    &lt;p&gt;
       I do like the ability to specify values in Scala as @BeanProperty and have the compiler automatically generate JavaBean compliant getters and setters (or just getters if it’s a read-only value as is common in Scala).
    &lt;/p&gt;
    &lt;p&gt;
       There can also be problems with tools that manipulate bytecode since the bytecode Scala generates is compliant with the JVM specs, but often quite different to what javac would product.
    &lt;/p&gt;
    &lt;h3&gt;
       The Performance
    &lt;/h3&gt;
    &lt;p&gt;
       I can’t tell the difference between Java code and Scala code.  That’s roughly what other people are saying too.  There are an awful lot of classes that come out of Scala code because of all the closures and traits and the like so it’s not going to work if you are tight on space such as in applets.  Server side where processes are long-running and JAR size isn’t a critical concern, it will work perfectly.  I would guess&lt;a id="footlink9:1255619251560" href="#footnote9:1255619251560" class="footnote"&gt;9&lt;/a&gt;, that there are a very large number of short-lived objects being created and discarded with Scala due to the use of implicit conversions and all those closures, but garbage collectors are so heavily optimised for that use case that I can’t see any evidence that it makes a difference and the performance testing I’ve read about bears that out.
    &lt;/p&gt;
    &lt;p&gt;
       The Scala compiler implements tail-recursive optimisation and even supports an annotation so that you can mark a method as tail-recursive and get a compile error if it’s not.
    &lt;/p&gt;
    &lt;p&gt;
       In terms of scalability &amp;#8211; Scala advocates claim that functional programming and immutable data structures that are heavily used in Scala are a key tool, if not the solution, for scalability. I don’t know and don’t really care &amp;#8211; the applications I’m likely to write will fit nicely into the “scale by handling many requests at once” model rather than having to break up the work of each individual request over multiple threads. The problem will come in the database or web server level, not my application code.  I’m watching &lt;a href="http://www.tbray.org/ongoing/When/200x/2009/09/27/Concur-dot-next"&gt;Tim Bray’s Concur.next series&lt;/a&gt; with interest though.
    &lt;/p&gt;
    &lt;h3&gt;
       Overall
    &lt;/h3&gt;
    &lt;p&gt;
       Scala is very much a tool I’m glad to now have in my toolkit. It’s not yet ready for prime time purely because of the poor IDE support, but it is excruciatingly close.  I can see me advocating it’s use in Ephox quite heavily if it deploys to .NET smoothly as the cross-deployment is a massive benefit and would be worth the pain of sorting out the tooling, but it would be hard to justify if that isn’t viable yet &amp;#8211; especially given the potential for Ruby or Python to work on both J2EE and .NET.
    &lt;/p&gt;
    &lt;p&gt;
       I don’t think it will be long before the Scala toolsets catch up and it becomes an extremely compelling option for Java server-side development.
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink1:1255615173985" id="footnote1:1255615173985"&gt;1&lt;/a&gt; &amp;#8211; it remains to be seen how stable/useful the .NET version of Scala is &amp;#8211; I’ve been focussed on the Java side of things for now &lt;a href="#footlink1:1255615173985" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink2:1255615348893" id="footnote2:1255615348893"&gt;2&lt;/a&gt; &amp;#8211; this adds to the scepticism around the .NET version until I find time to really test it out though &lt;a href="#footlink2:1255615348893" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote3:1255615446418" href="#footlink3:1255615446418"&gt;3&lt;/a&gt; &amp;#8211; yay for power points in cattle-class &lt;a href="#footlink3:1255615446418" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote4:1255615598614" href="#footlink4:1255615598614"&gt;4&lt;/a&gt; &amp;#8211; a few months of Haskell in uni counts if you paid attention. In fact, Haskell is a particularly useful background to have as it is a very pure functional language and uses a similar static typing with inference system as Scala does. &lt;a href="#footlink4:1255615598614" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote5:1255616107622" href="#footlink5:1255616107622"&gt;5&lt;/a&gt; &amp;#8211; thus I question how useful closures would be in Java &lt;a href="#footlink5:1255616107622" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote6:1255617559659" href="#footlink6:1255617559659"&gt;6&lt;/a&gt; &amp;#8211; Actually, I think ScalaTest can do the same style of tests but I got Specs working first. &lt;a href="#footlink6:1255617559659" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote7:1255617589258" href="#footlink7:1255617589258"&gt;7&lt;/a&gt; &amp;#8211; sacrilege! &lt;a href="#footlink7:1255617589258" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote8:1255618541437" href="#footlink8:1255618541437"&gt;8&lt;/a&gt; &amp;#8211; I love the concept of it’s ant based build system, yet somehow the implementation drives me nuts every time I try to use it &lt;a href="#footlink8:1255618541437" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote9:1255619251560" href="#footlink9:1255619251560"&gt;9&lt;/a&gt; &amp;#8211; I’m too lazy to profile this at the moment &lt;a href="#footlink9:1255619251560" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/3qDMTQnnwC8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/10/15/getting-into-scala/#comments" thr:count="10" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/10/15/getting-into-scala/feed/atom/" thr:count="10" />
		<thr:total>10</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[A Great Team]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/10/01/a-great-team/" />
		<id>http://www.symphonious.net/?p=1242</id>
		<updated>2009-10-01T09:42:02Z</updated>
		<published>2009-10-01T09:42:02Z</published>
		<category scheme="http://www.symphonious.net" term="Ephox" />		<summary type="html"><![CDATA[
       I’ve spent the last couple of weeks in Australia for my baby sister’s wedding and while I was there I worked out of Ephox’s Brisbane office where our engineering team is based. It’s been nearly 18 months since I left there to move over to the UK and [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/10/01/a-great-team/">&lt;p&gt;
       I’ve spent the last couple of weeks in Australia for my baby sister’s wedding and while I was there I worked out of Ephox’s Brisbane office where our engineering team is based. It’s been nearly 18 months since I left there to move over to the UK and this is the first trip back since. What was most striking about the trip is just how awesome the team is down there. Technically speaking they are one of the most talented groups of engineers you’re ever likely to come across and pull off some seriously amazing stuff, but more importantly they are a truly great &lt;em&gt;team&lt;/em&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       Engineers are known for being anti-social but you don’t see any of that in the Ephox team &amp;#8211; they all get on well, love the work they do and work as a team, not just a group of individuals. Everyone in that team should be seriously proud of the culture they have built up in that team.
    &lt;/p&gt;
    &lt;p&gt;
       For those non-Ephox folk reading this, you too can join the team as Ephox is currently on a serious hiring binge in a number of areas.  Check out the &lt;a href="http://www.ephox.com/aboutus/jobs.html"&gt;jobs page&lt;/a&gt; for details.
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/lBDJ6AU_X5w" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/10/01/a-great-team/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/10/01/a-great-team/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[The New Cross Platform]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/09/25/the-new-cross-platform/" />
		<id>http://www.symphonious.net/?p=1239</id>
		<updated>2009-09-25T06:40:59Z</updated>
		<published>2009-09-25T06:40:59Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Java" />		<summary type="html"><![CDATA[
       When I first started professional programming, Java was reasonably young and was being hailed as a work of genius with it’s cross platform deployment capabilities. Programming was going to be revolutionised forever and all programs would run on any OS1. Then Java wound up being most popular on [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/09/25/the-new-cross-platform/">&lt;p&gt;
       When I first started professional programming, Java was reasonably young and was being hailed as a work of genius with it’s cross platform deployment capabilities. Programming was going to be revolutionised forever and all programs would run on any OS&lt;a href="#footnote1:1253859827521" id="footlink1:1253859827521" class="footnote"&gt;1&lt;/a&gt;. Then Java wound up being most popular on the server side and liberated server code from the choice of OS more than the desktop side&lt;a href="#footnote2:1253860194622" id="footlink2:1253860194622" class="footnote"&gt;2&lt;/a&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       Server OS’s started to compete mostly on how well they were a server rather than what programs ran on them because what really mattered was that you could run the Java stack. In other words, Java became the platform that people deployed their applications to. It shouldn’t come as a surprise that a single platform didn’t stand unchallenged for long.  .NET sprang up as the big enterprise competitor to Java and all of a sudden you had to choose sides again.
    &lt;/p&gt;
    &lt;p&gt;
       The interesting thing is that another layer of platform abstraction is starting to spring up.  Languages like Ruby and Python came from a background of running standalone and are now starting to abstract away the choice of the Java or .NET platform, just as Java abstracted away the choice between Linux, Windows or Solaris in it’s time.
    &lt;/p&gt;
    &lt;p&gt;
       From what I can tell, none of the languages have really developed a fully complete, heavy production ready, bet-the-company-on-it implementation for both the JVM and .NET but both Ruby and Python seem to come very close and have serious corporate sponsorship behind them. Right now the sense I get is that people are either using Iron Python &lt;em&gt;or&lt;/em&gt; Jython, Iron Ruby &lt;em&gt;or&lt;/em&gt; JRuby but not seriously deploying the same code to both.  It doesn’t look like it will be long before doing so would be quite feasible though.
    &lt;/p&gt;
    &lt;p&gt;
       Exciting times ahead.
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink1:1253859827521" id="footnote1:1253859827521"&gt;1&lt;/a&gt; &amp;#8211; Interestingly enough this has actually been the trend, but not because programs were developed in Java &amp;#8211; it just inspired developers in other languages to build cross-platform abstraction libraries. &lt;a href="#footlink1:1253859827521" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a href="#footlink2:1253860194622" id="footnote2:1253860194622"&gt;2&lt;/a&gt; &amp;#8211; albeit not as smoothly as anyone would have liked&lt;a href="#footlink2:1253860194622" class="footnotereturn"&gt;↩&lt;/a&gt;
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/7fMH2m0fb64" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/09/25/the-new-cross-platform/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/09/25/the-new-cross-platform/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Are Web Pages Still Safe?]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/09/04/are-web-pages-still-safe/" />
		<id>http://www.symphonious.net/?p=1236</id>
		<updated>2009-09-03T18:51:35Z</updated>
		<published>2009-09-04T16:00:38Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" />		<summary type="html"><![CDATA[
       The relentless addition of cool features in HTML5 is getting a lot of web developers excited and there’s really no doubt that it will be a huge step forward for the web.  The more I follow the WhatWG mailing list though, the more I think we’re long [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/09/04/are-web-pages-still-safe/">&lt;p&gt;
       The relentless addition of cool features in HTML5 is getting a lot of web developers excited and there’s really no doubt that it will be a huge step forward for the web.  The more I follow the WhatWG mailing list though, the more I think we’re long past the era where it was considered safe to visit web pages. I’m not talking about browser security holes which have been around for a fair while and certainly do pose a risk, I’m talking about the things that are actually by design.
    &lt;/p&gt;
    &lt;p&gt;
       There’s nothing seriously threatening, just an ongoing increase in the amount of power and the amount of knowledge that web pages get. For example, it used to be possible to store a tiny amount of data in cookies in a way that was considered transient and ok to delete at anytime.  Now you can store up to 5MB and there’s a strong argument being made that it should be considered user critical data and not easily cleared like cookies. In another thread people are asking for notification when the user has been idle for a period of time &amp;#8211; great for chat applications and the like, but expanding what web pages can track about you&lt;a class="footnote" id="footlink1:1251998237568" href="#footnote1:1251998237568"&gt;1&lt;/a&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       In my mind there’s a mental model of how dangerous things that’s something like:
    &lt;/p&gt;
    &lt;p&gt;
       &lt;img alt="Static Data -&amp;#62; Active Data -&amp;#62; Sandboxed Application -&amp;#62; Application" src="http://www.symphonious.net/wp-content/uploads/2009/09/securityRisk_8219147784849093017.png" /&gt;
    &lt;/p&gt;
    &lt;p&gt;
       Static data is like an jpeg image or a plain text file.  You read it but it doesn’t do anything active &amp;#8211; no scripting nothing dynamic at all.  It could still trigger a buffer overflow or some other security hole in the software you’re using but otherwise it’s inert.
    &lt;/p&gt;
    &lt;p&gt;
       Active data is like a web page with some simple JavaScript that modifies the page.
    &lt;/p&gt;
    &lt;p&gt;
       Sandboxed Applications are like iPhone applications.  In theory they should be contained and safe, but you should still think carefully before installing them because they’re real applications that while limited can do actual damage.  On the iPhone that actual damage involves unrestricted access to all your contacts and the network among other things.
    &lt;/p&gt;
    &lt;p&gt;
       Applications are pretty obviously anything else.  While most systems these days put restrictions on them in some way such as file permissions, they are essentially unrestricted.
    &lt;/p&gt;
    &lt;p&gt;
       The web started out as static data, then when JavaScript was invented became active data.  When GMail came along and people worked out how to really leverage JavaScript it moved to somewhere between active data and a sandboxed application&lt;a class="footnote" id="footlink2:1252002357376" href="#footnote2:1252002357376"&gt;2&lt;/a&gt;. People want to build real applications on the web, which essentially means they need to keep being pushed along that progression.  The only problem is that as you increase the abilities of web pages, you also decrease the safety, not just because it’s a bigger attack surface, but ultimately because the more a web app can do, the more likely it is that you want to have control over it.
    &lt;/p&gt;
    &lt;p&gt;
       I’m left wondering if it’s possible to create a UI that lets users choose exactly what applications can do, without either confusing them or much worse, bombarding them with permission dialogs. Flash certainly failed miserably at it &amp;#8211; if you ever turn off local storage in flash and try to browse the web, you’ll find it almost impossible to use most flash programs because they just repeatedly ask for permission to store data.  Facebook and most other web apps that allow third party access fail at it too &amp;#8211; if you install a Facebook app it gets access to pretty much everything. I’m sure in theory and maybe even in practice they could have more fine-grained permissions but the UI never makes them obvious and I’m not sure it could.
    &lt;/p&gt;
    &lt;p&gt;
       The plus side of all this, is that so far the main issue is really that users are losing their privacy, but as web apps want to do things like monitor folders for new files or any of the other niceties that desktop applications can take advantage of&lt;a class="footnote" id="footlink3:1252003623044" href="#footnote3:1252003623044"&gt;3&lt;/a&gt;, it’s going to become more and more of an issue. How are we going to ensure that clicking a link is still safe?
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote1:1251998237568" href="#footlink1:1251998237568"&gt;1&lt;/a&gt; &amp;#8211; Currently they can only tell if you are using your browser or not, if you switch to another application they can’t tell if you walk away from your computer or if you’re busily using a different application.&lt;a class="footnotereturn" href="#footlink1:1251998237568"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote2:1252002357376" href="#footlink2:1252002357376"&gt;2&lt;/a&gt; &amp;#8211; Depending on the plugins you have installed and if you approve special rights it could be completely unrestricted of course.  ActiveX made a mess of that model, causing major security problems in Internet Explorer and has since been put behind a lot of scary warning/approval processes.&lt;a class="footnotereturn" href="#footlink2:1252002357376"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote3:1252003623044" href="#footlink3:1252003623044"&gt;3&lt;/a&gt; &amp;#8211; and the Chrome OS is certainly going to be pushing the envelope very quickly in this area&lt;a class="footnotereturn" href="#footlink3:1252003623044"&gt;↩&lt;/a&gt;
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/HWBIh2EHTpQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/09/04/are-web-pages-still-safe/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/09/04/are-web-pages-still-safe/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Stop Suffering in Silence]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/09/03/stop-suffering-in-silence/" />
		<id>http://www.symphonious.net/?p=1234</id>
		<updated>2009-09-03T08:49:32Z</updated>
		<published>2009-09-03T08:49:32Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="OpenSource" />		<summary type="html"><![CDATA[
       I keep seeing otherwise intelligent people1 encounter problems with software but never actually report them to anyone who could fix them. For commercial software opening a support ticket takes just a few minutes and usually gets the issue resolved pretty quickly so you can stop wasting time suffering [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/09/03/stop-suffering-in-silence/">&lt;p&gt;
       I keep seeing otherwise intelligent people&lt;a id="footlink1:1251967506123" class="footnote" href="#footnote1:1251967506123"&gt;1&lt;/a&gt; encounter problems with software but never actually report them to anyone who could fix them. For commercial software opening a support ticket takes just a few minutes and usually gets the issue resolved pretty quickly so you can stop wasting time suffering through it or complaining about it.  For open source software it’s often a bit more difficult &amp;#8211; you need to join the users mailing list and ask questions there, follow up if you don’t get a response and maybe even put together a solid bug report.  Still nothing ominous.
    &lt;/p&gt;
    &lt;p&gt;
       Of course, the opposite effect happens too.  Once someone finds they can report an issue and get it fixed for them, they often go a bit crazy reporting things &amp;#8211; even before they’ve done a bit of investigation to confirm they’ve place the blame on the right bit of software&lt;a id="footlink2:1251967610948" class="footnote" href="#footnote2:1251967610948"&gt;2&lt;/a&gt;.
    &lt;/p&gt;
    &lt;p&gt;
       I’ve been watching both these things happen within Ephox lately and it’s amazing how many things you can get solved quickly when you do get the right balance between reporting too soon and reporting too late (or not at all). It’s a skill I think we need to work to improve.
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote1:1251967506123" href="#footlink1:1251967506123"&gt;1&lt;/a&gt; &amp;#8211; Myself included sometimes.&lt;a class="footnotereturn" href="#footlink1:1251967506123"&gt;↩&lt;/a&gt;
    &lt;/p&gt;
    &lt;p class="footnote"&gt;
       &lt;a id="footnote2:1251967610948" href="#footlink2:1251967610948"&gt;2&lt;/a&gt; &amp;#8211; I’m sure there should be a good quip about the bug being in your code rather than the library/compiler/OS/etc but I can’t find one.&lt;a class="footnotereturn" href="#footlink2:1251967610948"&gt;↩&lt;/a&gt;
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/T-ycg0uggIY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/09/03/stop-suffering-in-silence/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/09/03/stop-suffering-in-silence/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[The Point of Surveys]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/08/28/the-point-of-surveys/" />
		<id>http://www.symphonious.net/?p=1232</id>
		<updated>2009-08-28T07:37:31Z</updated>
		<published>2009-08-28T07:37:31Z</published>
		<category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Ephox" />		<summary type="html"><![CDATA[
       Every so often while using NetSuite, it pops up and asks me to fill in a quick little survey &#8211; basically how likely are you to recommend NetSuite and why?  This is annoying when your in a rush but on balance not a bad way for them [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/08/28/the-point-of-surveys/">&lt;p&gt;
       Every so often while using NetSuite, it pops up and asks me to fill in a quick little survey &amp;#8211; basically how likely are you to recommend NetSuite and why?  This is annoying when your in a rush but on balance not a bad way for them to ensure their customers are happy.
    &lt;/p&gt;
    &lt;p&gt;
       There’s just one catch &amp;#8211; every single time I tell them that I’d never recommend NetSuite and that they should improve product quality, specifically they should handle escaping XML tags correctly.  As a company that makes HTML editors, we quite often send and receive emails that talk about HTML tags rather than just including them.  Unfortunately, NetSuite for the past 5 years or more has happily messed these emails up and we’ve had to come up with complicated ways to get the original email text back out. We’ve reported this to them on multiple occasions and at one point had to actually put in a XSS exploit to get them to understand how big a problem it was. Over time they’ve shifted where the correct HTML will appear in the system, but never actually fixed it entirely.
    &lt;/p&gt;
    &lt;p&gt;
       So, coming back to the survey &amp;#8211; what’s the point of interrupting users to get their feedback when you go and ignore it anyway?
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/qhtX0bZRMZQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/08/28/the-point-of-surveys/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/08/28/the-point-of-surveys/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	</entry>
		<entry>
		<author>
			<name>Adrian Sutton</name>
						<uri>http://www.symphonious.net</uri>
					</author>
		<title type="html"><![CDATA[Google Really Gets Enterprise Software]]></title>
		<link rel="alternate" type="text/html" href="http://www.symphonious.net/2009/07/30/google-really-gets-enterprise-software/" />
		<id>http://www.symphonious.net/?p=1225</id>
		<updated>2009-07-30T13:16:07Z</updated>
		<published>2009-07-30T13:16:07Z</published>
		<category scheme="http://www.symphonious.net" term="Rants" />		<summary type="html"><![CDATA[
       I really don’t understand why companies don’t think Google has made their apps enterprise ready.  I’ve been playing with the premium version of Google Apps the last few days and it shows all the important characteristics of enterprise software:
    
    
 [...]]]></summary>
		<content type="html" xml:base="http://www.symphonious.net/2009/07/30/google-really-gets-enterprise-software/">&lt;p&gt;
       I really don’t understand why companies don’t think Google has made their apps enterprise ready.  I’ve been playing with the premium version of Google Apps the last few days and it shows all the important characteristics of enterprise software:
    &lt;/p&gt;
    &lt;h3&gt;
       Innocent Looking Settings That Break Everything
    &lt;/h3&gt;
    &lt;p&gt;
       Google has this in spades.  My favorite is the fact that if you happen to disable a service such as e-mail, all the settings &lt;em&gt;continue to apply&lt;/em&gt;, but disappear from the admin dashboard. The net result for me was that all the Google Apps suddenly failed to send any e-mail (but e-mail from every other source worked perfectly).
    &lt;/p&gt;
    &lt;h3&gt;
       A Fully Integrated Service Where Nothing Works Together
    &lt;/h3&gt;
    &lt;p&gt;
       Check! You’d think that the list of users in the domain would show through in applications like Chat or for sharing documents right?  Nope, you have to manually type them in as if the domain users didn’t exist.
    &lt;/p&gt;
    &lt;h3&gt;
       Overly Destructive User Management
    &lt;/h3&gt;
    &lt;p&gt;
       Oh yes. Delete a user and all the documents they created disappear, regardless of how many other people happen to be sharing them at the time.
    &lt;/p&gt;
    &lt;h3&gt;
       Ridiculous Limitations
    &lt;/h3&gt;
    &lt;p&gt;
       Want to change the owner of a document? No problems, as long as they’re a member of the domain.  Want to change the owner of a spreadsheet? Nope &amp;#8211; can’t do that. Spreadsheets are special.
    &lt;/p&gt;
    &lt;h3&gt;
       What’s Missing?
    &lt;/h3&gt;
    &lt;p&gt;
       They managed to respond to a support case within 24 hours which is a major no-no for true enterprise software. It should take at least a week.  To be fair, I made it very difficult by solving my own problem (the invisible settings I mentioned above) before they responded.
    &lt;/p&gt;
    &lt;p&gt;
       Hopefully now that Google has been enterprise ready they can start working towards actually making useful software for business…
    &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/x1OUu_v4l5w" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.symphonious.net/2009/07/30/google-really-gets-enterprise-software/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2009/07/30/google-really-gets-enterprise-software/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
	</feed><!-- Dynamic page generated in 0.335 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-11-11 01:43:31 -->
