Being on the topic of marketing, it is nice to see Ugly Betty ads decorating the outdoor advertisement spots. At last a clothing style which distinguishes itself from the mass.
The other clothing ads don't even try. In live environments conventionally pretty girls work, but in media bland sexiness is boring and alienation kicks ass. Just like in Eurovision song context.
Friday, April 13, 2007
Simo The Mobile Application Developer
Do you think it is cool and hip to develop mobile applications? Send your congratulations to Nokia's marketing department. This post sums up nicely the image that Nokia wants to create about mobile application developers.
Mobile application developers are social and active extroverts, who participate in commonplace activities of young people:
Mobile phones are sexy status objects, but also deeply personal companions to which the user attaches on emotional level:
Especially Nokia mobile phones are high quality:
Mobile application developers are open-minded and innovative, and not afraid of breaking rules and shifting paradigms:
Nokia phones were created for trendy, sexy, active and successful people, by trendy, sexy, active and successful people.
Mobile application developers are social and active extroverts, who participate in commonplace activities of young people:
Whether it's at a dinner-party or late night foray into a strange bar, the fact that I work for Nokia is an easy ticket to talk. People generally have powerful reactions, as more often than not I'm working for the company that makes the product that gets them to work, connects them with who matters to them, and gets them laid.
Mobile phones are sexy status objects, but also deeply personal companions to which the user attaches on emotional level:
(Sure there are often also comments along the lines of "why on earth don't you bring back that beautiful silver bullet phone [6310] - it was my favourite thing ever..." etc.) But the fact remains - we are still carrying a good deal of people's goodwill, and we mess with it at our peril. And nowhere is this goodwill more obvious than in the trusty familiar contacts book ...
Especially Nokia mobile phones are high quality:
... with a well-deserved reputation for solidity, easy to use, reliability and the fact that the damn thing just works.
Mobile application developers are open-minded and innovative, and not afraid of breaking rules and shifting paradigms:
One of our recent Nokia speaker series guests put it like this - the telco industry has lost the opportunity to innovate in the contacts book, whereas the internet industry has come along and invented an entire new industry - social networking - to fill this innovation void. Hmmm, food for thought?
Messing with the contacts book would be like painting a moustache on the Mona Lisa - an act of vandalism, surely. Surely? Well, I'm not so sure. I am deeply uncomfortable with the idea that things must stay how they were because that's how they have always been.
Nokia phones were created for trendy, sexy, active and successful people, by trendy, sexy, active and successful people.
Tuesday, April 10, 2007
Appendix I
- Symbian folks know that C++ is not the fastest way to implement functionality. They demonstrate it by their actions: Symbian's IDE, Carbide.c++, is Eclipse-based which means that it is written in Java. Symbian's build system is a bunch of Perl macros.
- Ilkka describes the irritation of low-level languages well in this post.
Monday, April 09, 2007
What's Wrong With Symbian
In short: Crippled C++. C++ is already quite a low-level language. Symbian has plenty of coding conventions and classes, which make this even worse. There is cleanup stack to prevent memory leaks; leave mechanism to simulate exceptions; and RArrays and RPointerArrays to simulate std::vector. Finally, there are active objects to simulate threads or message passing or callbacks or whatever, I'm still not quite sure despite using them for years.
Nowadays Symbian phones have as much memory as late 486s or early Pentiums, although the memory is slower. So is it really worth it to save miniscule amounts of memory and make programming harder?
The era of mobile Java isn't here yet. I mean, the era when the operating system consists of Java VM, device APIs, and some core high-performance units like phone calls, video codecs, OpenGL, etc. Java is still too slow. Therefore, C++ is still a necessary evil.
In addition to crippled C++, also APIs are less-than-perfect. Java developers who have used entity beans or Hibernate may feel schadenfreude from this fact: Symbian has an internal database in every device, but you can only access it with SQL. No object/relation mapping tools for you. In general, there aren't any helper APIs which wrap the functionality to an easier form. 2.5 years ago when I last programmed Symbian, the APIs also has stupid bugs, but I hope that is fixed now.
Nowadays Symbian phones have as much memory as late 486s or early Pentiums, although the memory is slower. So is it really worth it to save miniscule amounts of memory and make programming harder?
The era of mobile Java isn't here yet. I mean, the era when the operating system consists of Java VM, device APIs, and some core high-performance units like phone calls, video codecs, OpenGL, etc. Java is still too slow. Therefore, C++ is still a necessary evil.
In addition to crippled C++, also APIs are less-than-perfect. Java developers who have used entity beans or Hibernate may feel schadenfreude from this fact: Symbian has an internal database in every device, but you can only access it with SQL. No object/relation mapping tools for you. In general, there aren't any helper APIs which wrap the functionality to an easier form. 2.5 years ago when I last programmed Symbian, the APIs also has stupid bugs, but I hope that is fixed now.
Friday, April 06, 2007
The Glass of Success is Half Full
As planned, I applied for J2EE jobs using Finnish annotator (FA) as a merit. FA was implemented with embarrassingly low technologiy: HttpServeltResponse.GetPrintWriter().println() produced most of the web pages. I got to 3 job interviews based on it.
After one interviewer told me that they used JSP and servlets to implement web services in 2001, in no uncertain terms, I realized my J2EE experience was inadequate and that I would rather be an experienced Symbian programmer (despite the shittiness of Symbian, which is worth anoter post) than a J2EE trainee. After that, I applied for Symbian jobs and got one from a mid-sized Symbian subcontractor. I'm not going to tell the name of the company, since I have no idea how it differs from other mid-sized Symbian subcontractors, and because they have their own marketing department to take care of their external image, thank you veeery much for your suggestion of advertising by blogging but no thank you.
The Symbian job I got pays 600e/month more than what I got at Nokia. I started 1.4. I still haven't been assigned to any project, but anyway I'll get more pay than ever before for carrying less responsibility than at the last months of Nokia.
If I had really wanted to get a J2EE job, I could have applied at J2EE Professional Trainee Program at Tapiola. But I thought that it was too easy, since from the 4 technologies they list (JSP, XML, EJB, WSAD) I already know JSP and XML and have read a book about EJB, so that only WSAD (whatever it is) would be totally new. Also, applying to the program would be dishonest, since my interest in J2EE is not about becoming a Tapiola man, but about developing the FA.
By the way, "professional trainee" is an oxymoron. Who wants to be an oxymoron?
My initial plan with Finnish Annotator was to collect a 5000 word Finnish vocabulary by September. This would have required me to write English definitions for about 24 words a day. Now that I actually work, I have noticed that I have no energy to write word definitions after work. So 5000 words is utopistic. I'll have to either overcome procrastination or find out just how many words I have patience to write before contacting a Finnish teacher and sugggesting co-operation.
The glass of success if half full or empty in the sense that I failed to get a J2EE job but succeeded in getting a job that pays more than anything I have done before.
What to do with the money when I've accustomed to a student budget? There are practically only 3 ways to spend it in a way that actually increases my standard of living:
After one interviewer told me that they used JSP and servlets to implement web services in 2001, in no uncertain terms, I realized my J2EE experience was inadequate and that I would rather be an experienced Symbian programmer (despite the shittiness of Symbian, which is worth anoter post) than a J2EE trainee. After that, I applied for Symbian jobs and got one from a mid-sized Symbian subcontractor. I'm not going to tell the name of the company, since I have no idea how it differs from other mid-sized Symbian subcontractors, and because they have their own marketing department to take care of their external image, thank you veeery much for your suggestion of advertising by blogging but no thank you.
The Symbian job I got pays 600e/month more than what I got at Nokia. I started 1.4. I still haven't been assigned to any project, but anyway I'll get more pay than ever before for carrying less responsibility than at the last months of Nokia.
If I had really wanted to get a J2EE job, I could have applied at J2EE Professional Trainee Program at Tapiola. But I thought that it was too easy, since from the 4 technologies they list (JSP, XML, EJB, WSAD) I already know JSP and XML and have read a book about EJB, so that only WSAD (whatever it is) would be totally new. Also, applying to the program would be dishonest, since my interest in J2EE is not about becoming a Tapiola man, but about developing the FA.
By the way, "professional trainee" is an oxymoron. Who wants to be an oxymoron?
My initial plan with Finnish Annotator was to collect a 5000 word Finnish vocabulary by September. This would have required me to write English definitions for about 24 words a day. Now that I actually work, I have noticed that I have no energy to write word definitions after work. So 5000 words is utopistic. I'll have to either overcome procrastination or find out just how many words I have patience to write before contacting a Finnish teacher and sugggesting co-operation.
The glass of success if half full or empty in the sense that I failed to get a J2EE job but succeeded in getting a job that pays more than anything I have done before.
What to do with the money when I've accustomed to a student budget? There are practically only 3 ways to spend it in a way that actually increases my standard of living:
- Get a mortgage instead of paying rent; this would mean that in the future, if I want, I can loan money and use the apartment as a guarantee.
- Travel to foreign countries. Among my peers this is a popular hobby which I haven't done much.
- Buy sex, an option I should try since I'm never going to get any with my current levels of nerdiness and muscularity without paying for it.
Tuesday, February 20, 2007
Get a Haircut And Get a Real Job
Big brother Simo got a haircut and is having 3 job interviews this week. Meanwhile, my brother is doing fractal art.

Frozen turboflowers
However, the difference is not as big as in the song of George Thorogood, since I have my own semi-creative project of questionable utility.

Frozen turboflowers
However, the difference is not as big as in the song of George Thorogood, since I have my own semi-creative project of questionable utility.
Monday, February 19, 2007
One Encoding to Rule Them All
In Java, all strings are Unicode strings. The Swing GUI components also support more advanced features of Unicode like Arabic right-to-left writing. It is almost trivial to make a GUI application that support all possible scripts from Katakana, Cyrillic alphabets and Korean Hangul to thousands of Chinese characters and various right-to-left scripts. The only thing you need to take care of is that when you access external interfaces, the data is passed in Unicode.
In traditional GUI applications, this means reading and writing text files in Unicode instead of the default encoding. Here's how you open a file for writing in UTF-8 encoding:
The difference to opening a file in the default encoding is really small:
The difference in reading a file is equally small. Not too difficult, huh? Turns out that it is for those who haven't confronted foreign character sets before. Before starting to roll my own flashcard program, I tried some free ones, some of them written with Java. Turned out that many of them didn't support Unicode. Well, that's one way of making sure that communists don't use your program.

You may also want to write unit tests to ensure that the Unicode support really works. To embed Unicode into the source files of the test cases, you need to signal the compiler that the source files are encoded with UTF8.
Ditto with the editor (in this case, Eclipse)

With web services, it's a bit different issue, since there are so many external interfaces. First of all, the source file UTF8 switch must be embedded to the Ant build file (assuming that you use Ant):
Now, let's look at the generated XHTML page. Firstly, to make it valid XML, you have to define the encoding in the first line that describes the nature of the document as XML.
The second instance deserves more explanation. When a web page is delivered from a server to a browser, it is delivered by the HTTP protocol. The HTTP protocol includes HTTP headers that describe the package. Usually, the default values of the headers are just fine and you can forget them - except for the character encoding. The <meta> element is trying to say that the document IS encoded in UTF8, not matter what the HTTP headers say.
Unfortunately, browsers tend to believe HTTP headers rather than the <meta> tag. This code snippet is from the Perl exercise work where I first run into this problem:
In servlets, the equivalent code is:
In addition to writing data in UTF8, we also need to read characters typed by the user. This is done by setting the encoding propery of the request object (the object that contains the form data from the user):
The Java documentation says that the encoding of the request object must be set before you pull any data that the user just typed. Sometimes the servlet is provided by some third party, and you can't set the encoding just-in-time before reading data. For example, if you use Spring's SimpleFormController to structure to validate forms, Spring automatically reads the form data to a more convenient structure before giving it to you. In these cases, you have to configure a filter that is run before the servlet. Filters are classes that are modify the input or the output of a servlet. This snippet is written to the deployment descriptor, web.xml.
Finally, if you use JSP to generate the final pages, you need to put the following headers to the JSP files.
Now, after shouting 11 times "USE THE DAMN UNICODE!!!" the system finally believes. We're still waiting for the one encoding switch to rule them all.
In traditional GUI applications, this means reading and writing text files in Unicode instead of the default encoding. Here's how you open a file for writing in UTF-8 encoding:
File file = new File( fileName );
FileOutputStream fos = new FileOutputStream( file );
OutputStreamWriter osw = new OutputStreamWriter( fos, "UTF-8" );
BufferedWriter writer = new BufferedWriter( osw );
The difference to opening a file in the default encoding is really small:
File file = new File( fileName );
FileWriter fw = new FileWriter( file );
BufferedWriter writer = new BufferedWriter( fw );
The difference in reading a file is equally small. Not too difficult, huh? Turns out that it is for those who haven't confronted foreign character sets before. Before starting to roll my own flashcard program, I tried some free ones, some of them written with Java. Turned out that many of them didn't support Unicode. Well, that's one way of making sure that communists don't use your program.

You may also want to write unit tests to ensure that the Unicode support really works. To embed Unicode into the source files of the test cases, you need to signal the compiler that the source files are encoded with UTF8.
C:\>javac -encoding UTF8 MySource.java
Ditto with the editor (in this case, Eclipse)

With web services, it's a bit different issue, since there are so many external interfaces. First of all, the source file UTF8 switch must be embedded to the Ant build file (assuming that you use Ant):
<javac destdir="${build.dir}"
target="1.5"
debug="true"
deprecation="false"
optimize="false"
failonerror="true"
encoding="UTF8">
Now, let's look at the generated XHTML page. Firstly, to make it valid XML, you have to define the encoding in the first line that describes the nature of the document as XML.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="FI" lang="FI">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
The second instance deserves more explanation. When a web page is delivered from a server to a browser, it is delivered by the HTTP protocol. The HTTP protocol includes HTTP headers that describe the package. Usually, the default values of the headers are just fine and you can forget them - except for the character encoding. The <meta> element is trying to say that the document IS encoded in UTF8, not matter what the HTTP headers say.
Unfortunately, browsers tend to believe HTTP headers rather than the <meta> tag. This code snippet is from the Perl exercise work where I first run into this problem:
# The final part of this line (charset=UTF-8) is
# absolutely essential. Without that line,
# the UTA webserver somehow convinces the
# browser that the encoding isn't UTF8,
# even if the .html says otherwise.
print "Content-type: text/html; charset=UTF-8\n\n";
In servlets, the equivalent code is:
public void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println( "<html>" );
out.println( "<head>" );
out.println( "<title>Helo World</title>" );
out.println( "</head>" );
out.println( "<body><h1>Helo World</h1></body>" );
out.println( "</html>" );
}
In addition to writing data in UTF8, we also need to read characters typed by the user. This is done by setting the encoding propery of the request object (the object that contains the form data from the user):
request.setCharacterEncoding( "UTF-8" );
The Java documentation says that the encoding of the request object must be set before you pull any data that the user just typed. Sometimes the servlet is provided by some third party, and you can't set the encoding just-in-time before reading data. For example, if you use Spring's SimpleFormController to structure to validate forms, Spring automatically reads the form data to a more convenient structure before giving it to you. In these cases, you have to configure a filter that is run before the servlet. Filters are classes that are modify the input or the output of a servlet. This snippet is written to the deployment descriptor, web.xml.
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<servlet-name>springflash</servlet-name>
</filter-mapping>
Finally, if you use JSP to generate the final pages, you need to put the following headers to the JSP files.
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="UTF-8" %>
Now, after shouting 11 times "USE THE DAMN UNICODE!!!" the system finally believes. We're still waiting for the one encoding switch to rule them all.
The encodings not so blest as thee,
Shall in their turns to limitations fall;
While thou shalt flourish great and free,
The dread and envy of them all.
Rule, Unicode! Unicode, rule the scripts:
Britons never shall need more glyphs.
Friday, February 16, 2007
Configuration Considered Harmful
Half a year ago I downloaded my first Java 2 Enterprise Edition, also known as J2EE, the version of Java you use to build websites. It uses a very complex build system named Java Blueprints, spanning 26 files and 2000 lines of XML and settings. Coming from Symbian background, I though that the build process really is incomprehensibly complex: In Symbian, the build process uses ~100 or so perl modules, and you are not supposed to modify them. To give you an idea of how much 2000 lines is, note that this applet, which packs some real functionality, takes ~1500 lines.
In fact the J2EE build process is really simple. First, you build a jar file with a specific directory structure. Then you deploy it to some application server. Knowing this is useful when you switch from one application server to another (in my case, from Sun's server to Tomcat). Therefore, it's really stupid to use a huge build system.
Complex systems are OK when they really work and make things easier. Anyone who has converted a medium-sized application from manual building to Make or Ant knows this. However, when they become complex enough without being nicely encapsulated, they introduce an extra moving part. Useless moving parts merely make things more difficult.
Java is famous for giving good and accurate error reports in the form of exceptions and stack traces. The compiler checks the code extensively before you can execute it. There is also a standard way to produce good documentation for Java modules that are delivered to third parties (the Javadoc tool). Configuration systems tend to be exactly opposite: They use custom formats, often XML, which are often poorly documented. Their error annoucements leave you wondering what the hell went wrong, if they give any in the first place. Often, you can't be sure whether the error is in the configuration files or in the code.
Next, I'll present a truly minimal hello world J2EE application. Here is the list of files:
Here is the source code. When you type the address of the web service (usually http://localhost/hello or something similar), the program calls the get or post method of this servlet. The request object contains the things that the user sent to you: for example, if the user filled a form and pressed submit, the contents of the form are in the request. The response represents the HTML page that you return to the user.
The deployment descriptor tells that the application should be deployed at "hello" subpage (http://localhost/hello) and that the HelloServlet generates the page (there may be several servlets).
The Ant build file build.xml is still somewhat more complex than needed, but a far cry from 2000 lines. There's nothing worth reading happening there, it is here merely for completeness. It has been simplified from the spring tutorial build file, which strikes a very good balance between simplicity and functionality.
This example gives us another case about configuration and its discontents: The deployment descriptor. When you do traditional graphical user interfaces with Swing, you create the elements by code. Imagine that instead of writing an XML deployment descriptor you would configure the application by code, applet style, demolishing the second big instance of configuration in J2EE. What would it look like?
In what way is this inferior to web.xml?
In fact the J2EE build process is really simple. First, you build a jar file with a specific directory structure. Then you deploy it to some application server. Knowing this is useful when you switch from one application server to another (in my case, from Sun's server to Tomcat). Therefore, it's really stupid to use a huge build system.
Complex systems are OK when they really work and make things easier. Anyone who has converted a medium-sized application from manual building to Make or Ant knows this. However, when they become complex enough without being nicely encapsulated, they introduce an extra moving part. Useless moving parts merely make things more difficult.
Java is famous for giving good and accurate error reports in the form of exceptions and stack traces. The compiler checks the code extensively before you can execute it. There is also a standard way to produce good documentation for Java modules that are delivered to third parties (the Javadoc tool). Configuration systems tend to be exactly opposite: They use custom formats, often XML, which are often poorly documented. Their error annoucements leave you wondering what the hell went wrong, if they give any in the first place. Often, you can't be sure whether the error is in the configuration files or in the code.
Next, I'll present a truly minimal hello world J2EE application. Here is the list of files:
build.xml - the Ant build file
src\HelloServlet.java - the source code
web\WEB-INF\web.xml - the deployment descriptor
Here is the source code. When you type the address of the web service (usually http://localhost/hello or something similar), the program calls the get or post method of this servlet. The request object contains the things that the user sent to you: for example, if the user filled a form and pressed submit, the contents of the form are in the request. The response represents the HTML page that you return to the user.
/* Minimal Hello World servlet */
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
doPost( request, response );
}
public void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println( "<html>" );
out.println( "<head><title>Helo World</title></head>" );
out.println( "<body><h1>Helo World</h1></body>" );
out.println( "</html>" );
}
}
The deployment descriptor tells that the application should be deployed at "hello" subpage (http://localhost/hello) and that the HelloServlet generates the page (there may be several servlets).
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>hello</display-name>
<servlet>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
The Ant build file build.xml is still somewhat more complex than needed, but a far cry from 2000 lines. There's nothing worth reading happening there, it is here merely for completeness. It has been simplified from the spring tutorial build file, which strikes a very good balance between simplicity and functionality.
<?xml version="1.0"?>
<project name="flash1" basedir="." default="build">
<property name="src.dir" value="src"/>
<property name="web.dir" value="web"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
<property name="name" value="hello"/>
<property name="tomcat.dir" value="/tools/tomcat5.5"/>
<property name="deploy.path" value="${tomcat.dir}/webapps"/>
<path id="master-classpath">
<fileset dir="${web.dir}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
<!-- We need the servlet API classes: -->
<!-- for Tomcat 4.1 use servlet.jar -->
<!-- for Tomcat 5.0 use servlet-api.jar -->
<!-- for Other app server - check the docs -->
<fileset dir="${tomcat.dir}/common/lib">
<include name="*.jar"/>
</fileset>
<pathelement path="${build.dir}"/>
</path>
<target name="usage">
<echo message=""/>
<echo message="${name} build file"/>
<echo message="-----------------------------------"/>
<echo message=""/>
<echo message="Available targets are:"/>
<echo message=""/>
<echo message="build --> Build the application"/>
<echo message="deploywar --> Deploy application as a WAR file"/>
<echo message=""/>
</target>
<target name="build" description="Compile main source tree java files">
<mkdir dir="${build.dir}"/>
<javac destdir="${build.dir}"
target="1.5"
debug="true"
deprecation="false"
optimize="false"
failonerror="true"
encoding="UTF8">
<src path="${src.dir}"/>
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="deploywar" depends="build" description="Deploy application as a WAR file">
<war destfile="${name}.war"
webxml="${web.dir}/WEB-INF/web.xml">
<fileset dir="${web.dir}">
<include name="**/*.*"/>
</fileset>
</war>
<copy todir="${deploy.path}" preservelastmodified="true">
<fileset dir=".">
<include name="*.war"/>
</fileset>
</copy>
</target>
</project>
This example gives us another case about configuration and its discontents: The deployment descriptor. When you do traditional graphical user interfaces with Swing, you create the elements by code. Imagine that instead of writing an XML deployment descriptor you would configure the application by code, applet style, demolishing the second big instance of configuration in J2EE. What would it look like?
import javax.servlet.*;
public class HelloApp extends Weblet {
public void init() {
setName( "hello" );
addServlet( "HelloServlet", HelloServlet.class );
mapServlet( "HelloServlet", "/" );
}
}
In what way is this inferior to web.xml?
Thursday, February 15, 2007
Time stopped?
In the good old days of the old Republic machines doubled their speed yearly. My three-year-old 2GHz laptop is getting slow, so checked the new machines. To my surprise, the low-end is almost the same. Something fundamental has changed while I didn't look.
This post is being written on AMD Athlon 2600+, and here they sell AMD Athlon 3000+. For the first time in my life, a memory upgrade may be enough to transform and old machine into a modern one.
Eclipse takes 100MB, Firefox takes another 100MB and the app I run on Tomcat takes 100MB. And then you should compile. Not something that fits to 500MB.
This post is being written on AMD Athlon 2600+, and here they sell AMD Athlon 3000+. For the first time in my life, a memory upgrade may be enough to transform and old machine into a modern one.
Eclipse takes 100MB, Firefox takes another 100MB and the app I run on Tomcat takes 100MB. And then you should compile. Not something that fits to 500MB.
Wednesday, December 13, 2006
Electronic Test in Tampere University
Tampere University has new facilities for taking tests electronically instead of writing them with pencil and paper, which is cool since dead wood is soooo 20th century.
The tests are done in one of two Test Aquariums. Test aquariums are special computer classes. The user who logs on to a computer can use only the dedicated test software. The software has a web-based component that is used for enrolling to a test well before the test date. The student can choose her test date and time from a calendar. In the Test Aquarium, the same web-based software fetches the questions.
The answering software is a normal "thick client" and enables the user to navigate between questions and write answers to them. The test I took contained only open writing questions, rather than multiple choices, but the system seemed to be capable of automatically rating multiple-choice questions. There is also an automatic time limit for the test.
The system has some traces of being experimental. There was an Opera logo in the upper right corner, and instead of a normal edit box control the answering was done with a more limited control. It enabled normal typing in monospace font, and you could copy-paste text with menus, but not with shortcut keys. For me it worked overall like a dream, but a girl that participated in this test aquarium experienced problems: The system threw him out without any specific reason in the middle of the test.
Anyway, it's a huge improvement to current practice. It enables one to take tests when one is ready, rather than when the Official Test Date is, enabling one to take courses that are not lectured every year, and making it easier to get credit units in the summer. And typing the answer instead of writing it with pencil is a bit like writing a blog post.
By the way, if the test participation can be recorded on video, why can't lectures be recorded? With recorded lectures and Test Aquarium tests, many courses could be removed from face teaching. Face teaching should concentrate on the few areas that are worth human contact, like groupwork, honing writing skills and keeping presentations.
The tests are done in one of two Test Aquariums. Test aquariums are special computer classes. The user who logs on to a computer can use only the dedicated test software. The software has a web-based component that is used for enrolling to a test well before the test date. The student can choose her test date and time from a calendar. In the Test Aquarium, the same web-based software fetches the questions.
The answering software is a normal "thick client" and enables the user to navigate between questions and write answers to them. The test I took contained only open writing questions, rather than multiple choices, but the system seemed to be capable of automatically rating multiple-choice questions. There is also an automatic time limit for the test.
The system has some traces of being experimental. There was an Opera logo in the upper right corner, and instead of a normal edit box control the answering was done with a more limited control. It enabled normal typing in monospace font, and you could copy-paste text with menus, but not with shortcut keys. For me it worked overall like a dream, but a girl that participated in this test aquarium experienced problems: The system threw him out without any specific reason in the middle of the test.
Anyway, it's a huge improvement to current practice. It enables one to take tests when one is ready, rather than when the Official Test Date is, enabling one to take courses that are not lectured every year, and making it easier to get credit units in the summer. And typing the answer instead of writing it with pencil is a bit like writing a blog post.
By the way, if the test participation can be recorded on video, why can't lectures be recorded? With recorded lectures and Test Aquarium tests, many courses could be removed from face teaching. Face teaching should concentrate on the few areas that are worth human contact, like groupwork, honing writing skills and keeping presentations.
Wednesday, November 01, 2006
Winter
Today, the first 10cm of snow fell from the sky. I had to be at test by 10.00, so I left home at 9.05 to make sure there was enough marginal for possible problems.
At the bus stop, there were 10 people waiting, which is about double the amount that is withing normal daily variation. Some of them had waited for 20 minutes. When I was waiting, a car stopped at the bus stop and offered ride for some people. Then this happened again. It seemed to be the main way to get forward.
Well, I though that the marginal just may not be enough, if the buses don't come, so I started walking to ensure that I made it in time, while there still enough of it. Unfortunately I was stupid enough to choose a marginally shorter route, where the snow had not yet been pushed away, so I had to walk a kilometer in snow. In the end I made it in time, but only with ~5 minute marginal.
Anyway, I don't understand people who take stress about weather and curse it, even if it barely affects them during their commutes. Since weather can't be changed, it's a bit like being disappointed that you only have two eyes, while it would be sooo nice to have a third eye in the backside of the head.
(People working at transportation and farming sector have good reasons to be stressed about weather, so they are exceptions.)
At the bus stop, there were 10 people waiting, which is about double the amount that is withing normal daily variation. Some of them had waited for 20 minutes. When I was waiting, a car stopped at the bus stop and offered ride for some people. Then this happened again. It seemed to be the main way to get forward.
Well, I though that the marginal just may not be enough, if the buses don't come, so I started walking to ensure that I made it in time, while there still enough of it. Unfortunately I was stupid enough to choose a marginally shorter route, where the snow had not yet been pushed away, so I had to walk a kilometer in snow. In the end I made it in time, but only with ~5 minute marginal.
Anyway, I don't understand people who take stress about weather and curse it, even if it barely affects them during their commutes. Since weather can't be changed, it's a bit like being disappointed that you only have two eyes, while it would be sooo nice to have a third eye in the backside of the head.
(People working at transportation and farming sector have good reasons to be stressed about weather, so they are exceptions.)
Sunday, October 29, 2006
Fake Headlines
This has potential to become a meme ... started by Vera. Here are a few fake headlines on energy.
"EU has decided to cut economic growth by 8% in order to comply with Kyoto targets. The decision is expected to have no effect whatsoever."
"Environmentalists support a scalable electricity production method!"
Comment afterwards: This post is really lousy. I intended to write a longer one about electricity generation to support the attitudes expressed here; however, I don't have patience to dig up the numbers. The points would have been that(1) economic growth and electricity consumption are inseparably linked; there doesn't exist a single 10-year period of economic growth combined with a decrease in energy consumption. (2) burning hydrocarbons and splitting atoms are the only scalable ways to generate electricity; the post would have argumented against wind.
"EU has decided to cut economic growth by 8% in order to comply with Kyoto targets. The decision is expected to have no effect whatsoever."
"Environmentalists support a scalable electricity production method!"
Comment afterwards: This post is really lousy. I intended to write a longer one about electricity generation to support the attitudes expressed here; however, I don't have patience to dig up the numbers. The points would have been that(1) economic growth and electricity consumption are inseparably linked; there doesn't exist a single 10-year period of economic growth combined with a decrease in energy consumption. (2) burning hydrocarbons and splitting atoms are the only scalable ways to generate electricity; the post would have argumented against wind.
Tuesday, October 17, 2006
Behaviorism Is Alive And Kicking
Marginal Revolution linked to an article about a school/mental asylum that uses behavioristic methods to keep the special education students well behaved.
They use electric shocks as a punishment. The shocks are administered by devices that are all the time connected to the clients. If the clients behave badly, the staff members can zap them, producing a shock that is comparable to a bee string. The punishment is not arbitrary, but "each student has a sheet listing the types of behaviors that prompt a staff member to administer a shock".
One of the basic ideas of behaviorism is that punishments and rewards should be (1) immediate (2) recognized as punishments/rewards and (3) appropriate for the student's level of understanding. The immediacy is important to ensure that "even a student with a low IQ or a severe psychiatric disorder might be made to understand that whatever he just did was unacceptable". The shock is unquestionably recognized as a punishment. However, it is important to notice that a punishment is not always experienced as a punishment - the article lists counseling as an example: "School literature states that counseling is done "as needed," but not when it could be seen as a reward for bad behavior".
In addition to electric shocks, the school uses a wide range of positive reinforcement. Also the mere threat of shock is for many clients enough to keep the behaviour in line so that actual shocks are not needed.
My take? Wish I could buy an alarm clock that would deliver an electric shock if the I don't rise from bed and press the button three times during the next half an hour.
The article also mentions that the founder of the institute tried to manufacture behavioristic teaching machines in the 60s. I've written about them here. Basically, the 60s teaching machine movement was trying to build mechanical and electric teaching devices to help with rote memorization, but the 60s technology was too inflexible. Present-day flashcard programs, including the ones I've written, are descendants of this tradition.
They use electric shocks as a punishment. The shocks are administered by devices that are all the time connected to the clients. If the clients behave badly, the staff members can zap them, producing a shock that is comparable to a bee string. The punishment is not arbitrary, but "each student has a sheet listing the types of behaviors that prompt a staff member to administer a shock".
One of the basic ideas of behaviorism is that punishments and rewards should be (1) immediate (2) recognized as punishments/rewards and (3) appropriate for the student's level of understanding. The immediacy is important to ensure that "even a student with a low IQ or a severe psychiatric disorder might be made to understand that whatever he just did was unacceptable". The shock is unquestionably recognized as a punishment. However, it is important to notice that a punishment is not always experienced as a punishment - the article lists counseling as an example: "School literature states that counseling is done "as needed," but not when it could be seen as a reward for bad behavior".
In addition to electric shocks, the school uses a wide range of positive reinforcement. Also the mere threat of shock is for many clients enough to keep the behaviour in line so that actual shocks are not needed.
My take? Wish I could buy an alarm clock that would deliver an electric shock if the I don't rise from bed and press the button three times during the next half an hour.
The article also mentions that the founder of the institute tried to manufacture behavioristic teaching machines in the 60s. I've written about them here. Basically, the 60s teaching machine movement was trying to build mechanical and electric teaching devices to help with rote memorization, but the 60s technology was too inflexible. Present-day flashcard programs, including the ones I've written, are descendants of this tradition.
Sunday, October 15, 2006
Dating meme: I am an asshole ... give me your candy!
Real men like me don't wait to be challenged to memes but take the initiative themselves, so I'll answer to Hurina's dating meme.
I'm short (163cm) and unmuscular. I like to wear yuppie-style collar shirts and cotton pants. I have a sense of humor, which I express mainly in writing.
Although I don't own a house nor a car and am not currently working, my financial situation is good thanks to disinterest towards the aspects of life that cost a lot of money.
My hobbies include writing computer-aided language learning software and playing go. It's also nice to play old Finnish popular music by electric organs, and go to electronic music events and dance myself legless.
I like to be in control of my own life, and I have succeeded in that a bit too well, since also in my sex life the initiative is in my own hands. Will you change it? I'd like to be tied up and shat on.
Update to avoid further misunderstandings: This dating annoucement is directed exclusively at women.
I'm short (163cm) and unmuscular. I like to wear yuppie-style collar shirts and cotton pants. I have a sense of humor, which I express mainly in writing.
Although I don't own a house nor a car and am not currently working, my financial situation is good thanks to disinterest towards the aspects of life that cost a lot of money.
My hobbies include writing computer-aided language learning software and playing go. It's also nice to play old Finnish popular music by electric organs, and go to electronic music events and dance myself legless.
I like to be in control of my own life, and I have succeeded in that a bit too well, since also in my sex life the initiative is in my own hands. Will you change it? I'd like to be tied up and shat on.
Update to avoid further misunderstandings: This dating annoucement is directed exclusively at women.
Saturday, October 07, 2006
Happiness
| Topic | Absolutist view | Relativist view |
|---|---|---|
| What makes you happy | The absolute amount of resources determines your ability to satisfy your wants, needs and desires. | Humans determine their level of satisfaction with their current situation by comparing themselves to others, so that your status relative to others determines your happiness. |
| Game metaphor of life | Life is a positive-sum game, full of opportunities that benefit both parties and just wait to be exploited. Are you taking advantage of them? | Life is a zero-sum game, where the spoils of co-operation are divided unevenly between participants. Are you a wolf or a sheep? |
| Attitude to power | Power is legitimate, it hierarchy enables a group of people to get things done better. There's nothing wrong with being a servant in a legitimate hierachy that gives you better results than you could achieve alone. | Power is means for the strong to exploit the weak. You should get as much of it as possible. Serving others is necessary sometimes, but in the long run a sign of failure. |
| To gain happiness, you should be... | 1. Resourceful in order to have something to give, so that you can participate in exchanges and get things you want. 2. Trusted so that other people are willing to engage in activities that carry a risk. 3. Networked and Informed so that you hear about the opportunities. 4. Social so that you can organize things and exchange views and information. 5. Intolerant agaist people who break the rules in order to create a deterrent. | 1. Strong so that you can bully others into submission. 2. Ruthless so that you are not prevented by so-called "moral". 3. Cynical in order to prevent others from exploiting you. 4. Able to fake it to create a good impression. |
| Attitude to other people | Other people are an opportunity to gain information and get deals. You should take a positive attitude to socializing with other people, until they prove themselves untrustable or send signals that imply untrustability. | Other people are trying to manipulate resources from you by their emotions. You should be careful and wary of them. |
| Other people's happiness | Most people can achieve happiness, since if we set some reasonable standard of living, with suitable economic growth it is achievable for Joe on the street. | It is impossible for everyone to achieve happiness, since for each person who is above average in wealth or status there is another person who is below average. In the end, other people's happiness is your misery. |
| Opinion on current system | Democratic free martket system has achieved unprecedented standard of living. If you are not happy in this environment, the mistake is either in your attitude or the company you keep. The unemployed are nowadays enjoying many benefits unavailable for the nobility in the past, and this trend of improvement is continuing. | The income differences are starker than ever due to economies of scale and winner-takes-it-all competitions. Due to media, people increasingly compare themselves to the top, making them feel more inferior than before. Global competition for scarce resources is tougher than ever, forcing people to take desparate actions. |
| Attitude to information | Trying to talk true and insightful facts enhances other people's trust towards you. It is also important that other people know your interests, since it increases your chances to hear about opportunities to further those interests. | You should talk sentences that create positive/negative associations that serve your interests. Talking truth is unessential, since everyone knows it anyway and if they don't, it gives you a competitive advantage. The main thing is that the other believe you. You should always ask: Whose interests are these "facts" serving? |
Wednesday, October 04, 2006
What's Hot
Tuesday, October 03, 2006
Werewolf Masquerade
A week ago me and my brother had a conversation about live gigs. He had seen an electro band Imatran Voima and was impressed by a combination of powerful music and good show. Since I used to visit rock gigs, he asked if that was usual in live performances.
I answered no, and listed the self-ironic bands ? the only ones that had made any impression on me.
Yesterday, I went to a gig by Moonspell, and it changed my views.
(By the way, it has nothing to do with my brother possibly listening to Moonspell in the past. I don't have any memories of being present when my brother put the cassette mentioned in the previous post to a cassette player. In high school, there was a metal fan named Leo who had Moonspell's songs Opium and Mr. Crowley in his hard disk, where I copied them via network share. Later, when I first connected to P2P network I copied more of Moonspell.)
In an earlier post, I?ve listed the reasons that I stopped going to rock gigs and preferred electronic music events: (1) that DJ music is better, since it is done by world-class composers and players, (2) that in your typical live gig the guitars, drums and vocals mix up into an incomprehensible mess, while record music tends to be well mixed, (3) the sound samples of the electronic music are optimized to stay clean and separate even in bad acoustic conditions, while electric guitar is not, and (4) the rave culture involves dancing, which is active participation; after getting used to it, it bores you to tears to just drink beer and watch bands come and go.
Well, in Moonspell?s gig it was all fixed! Moonspell?s musicians are some of the best metal composers and players. The sound was clear and instruments and vocals could be distinguished from each others without effort. And since they were popular, a huge mass of people gathered in front, making the participation more active than just sitting and drinking beer. Regarding the music, I had listened to some of the songs beforehand tens of times. That definitely helps immersion but that is a bit beyond point, since maybe 2/3 of them were still unknown to me.
And to top it all, the singer could really interact with the audience. Especially his hand gestures were really controlled, oscillating between sudden, violent movements that perfectly matched the rhythm on the one hand, and conscious, steady, fully-in-control movements that gave the audience guidance on when to raise hands. The hand dynamics are clearly visible in this video.
Earlier, I?ve noticed that the best of metal and the best of electronic music are equally good on record. Now I know that in the top end, also the live performances are equally good. However, this won?t make me a rock fan, since acts of this class are very rare and the quality of local, Tampere class bands is waaaayyyyy higher in electronic music.
A combination of heavy drunkenness on my part and dancing instincts trained on raves probably resulted in me looking distinctively like the drunken idiot I was, but that?s what people get drunk for. Immersion isn?t possible without a suitable level of drunkenness.
I answered no, and listed the self-ironic bands ? the only ones that had made any impression on me.
Yesterday, I went to a gig by Moonspell, and it changed my views.
(By the way, it has nothing to do with my brother possibly listening to Moonspell in the past. I don't have any memories of being present when my brother put the cassette mentioned in the previous post to a cassette player. In high school, there was a metal fan named Leo who had Moonspell's songs Opium and Mr. Crowley in his hard disk, where I copied them via network share. Later, when I first connected to P2P network I copied more of Moonspell.)
In an earlier post, I?ve listed the reasons that I stopped going to rock gigs and preferred electronic music events: (1) that DJ music is better, since it is done by world-class composers and players, (2) that in your typical live gig the guitars, drums and vocals mix up into an incomprehensible mess, while record music tends to be well mixed, (3) the sound samples of the electronic music are optimized to stay clean and separate even in bad acoustic conditions, while electric guitar is not, and (4) the rave culture involves dancing, which is active participation; after getting used to it, it bores you to tears to just drink beer and watch bands come and go.
Well, in Moonspell?s gig it was all fixed! Moonspell?s musicians are some of the best metal composers and players. The sound was clear and instruments and vocals could be distinguished from each others without effort. And since they were popular, a huge mass of people gathered in front, making the participation more active than just sitting and drinking beer. Regarding the music, I had listened to some of the songs beforehand tens of times. That definitely helps immersion but that is a bit beyond point, since maybe 2/3 of them were still unknown to me.
And to top it all, the singer could really interact with the audience. Especially his hand gestures were really controlled, oscillating between sudden, violent movements that perfectly matched the rhythm on the one hand, and conscious, steady, fully-in-control movements that gave the audience guidance on when to raise hands. The hand dynamics are clearly visible in this video.
Earlier, I?ve noticed that the best of metal and the best of electronic music are equally good on record. Now I know that in the top end, also the live performances are equally good. However, this won?t make me a rock fan, since acts of this class are very rare and the quality of local, Tampere class bands is waaaayyyyy higher in electronic music.
A combination of heavy drunkenness on my part and dancing instincts trained on raves probably resulted in me looking distinctively like the drunken idiot I was, but that?s what people get drunk for. Immersion isn?t possible without a suitable level of drunkenness.
Sunday, September 24, 2006
Sudden changes in personality
Recently, Ilkka has apparently had a sudden change in personality. When I still lived with my parents and siblings, my brother also had two sudden changes in personality. I'll describe them in order to provide perspective to Ilkka's case. Markku seems to know more, but doesn't want to tell.
Before the first change, my brother listened to metal (he had at least one Sepultura's record and Moonspell's casette) and had wrestling as his hobby. He was very hostile towards me and my parents. Once he spoke about a potential fight: He said that if the other party initiates it, he will be looking forward to beating the other person.
After the first change, he started drawing. He attended a drawing school, switched from normal class to a dedicated artistic class (there were 4 normal classes and one artistic class at each grade) and listened to electronic music. He related to the past personality with shame and embarrassment: Once when Metal Union started in Radio Mafia, he quickly closed the radio: "But it's metal!". He was still hostile towards me and my parents, so I have no idea what caused the change.
This continued until the second change. The first change happened in comprehensive school; the second change happened when he was in high school (in an artistic class). He switched from high school with an artistic class to the same high school where me and my sister went. He started to be interested in math and natural sciences, and spent much more time with homework. It culminated in him applying and getting to the the same math-oriented highscool which I described earlier.
Again, he condemned his past. He despised artists and art. At this time, my sister was going to study graphical industry, and he also expressed his dislike towards my sister's choice. As far as I know, the seconds change had a lot to do with personal chemistry; he got fed up with the strongly religous person that was running the drawing school.
He described as liberating the experience of leaving the drawing school for the last time and knowing that he will never again step there, which reminds me of Ilkka's comment that he is finally free.
Nowadays, the only trace from the wrestling period is his attendance to karate classes; but I'm sure he has a very different attitude towards the activity. The despise towards graphical art has also dissipated, which is most visible in his interest towards fractal art (here is his first production). The changes were genuine, but they were partially reversed, and the old traits and skills took a very different form.
He probably had a third change between high school and university, but I don't know about that since I didn't see him often.
Before the first change, my brother listened to metal (he had at least one Sepultura's record and Moonspell's casette) and had wrestling as his hobby. He was very hostile towards me and my parents. Once he spoke about a potential fight: He said that if the other party initiates it, he will be looking forward to beating the other person.
After the first change, he started drawing. He attended a drawing school, switched from normal class to a dedicated artistic class (there were 4 normal classes and one artistic class at each grade) and listened to electronic music. He related to the past personality with shame and embarrassment: Once when Metal Union started in Radio Mafia, he quickly closed the radio: "But it's metal!". He was still hostile towards me and my parents, so I have no idea what caused the change.
This continued until the second change. The first change happened in comprehensive school; the second change happened when he was in high school (in an artistic class). He switched from high school with an artistic class to the same high school where me and my sister went. He started to be interested in math and natural sciences, and spent much more time with homework. It culminated in him applying and getting to the the same math-oriented highscool which I described earlier.
Again, he condemned his past. He despised artists and art. At this time, my sister was going to study graphical industry, and he also expressed his dislike towards my sister's choice. As far as I know, the seconds change had a lot to do with personal chemistry; he got fed up with the strongly religous person that was running the drawing school.
He described as liberating the experience of leaving the drawing school for the last time and knowing that he will never again step there, which reminds me of Ilkka's comment that he is finally free.
Nowadays, the only trace from the wrestling period is his attendance to karate classes; but I'm sure he has a very different attitude towards the activity. The despise towards graphical art has also dissipated, which is most visible in his interest towards fractal art (here is his first production). The changes were genuine, but they were partially reversed, and the old traits and skills took a very different form.
He probably had a third change between high school and university, but I don't know about that since I didn't see him often.
Friday, September 22, 2006
EU: A federation based on rule of law

Lately, the city center of Tampere has been full of policemen because of the EU2006 summit. I don't know what they decide; hardly anything that has a visible effect on my life. Certainly they have power to change significant things, but it is pretty much rendered insignificant by disagreements between different factions and the behind-the-scenes nature of EU regulation for those who don't work at administration and don't run a company nor a farm.
Even with its mild excesses, a society based on rule of law is infinitely better than one based on rule of mob and corruption.
That's why asylum seekers are queueing at our gates. That's why immigrants risk drowning to get here, and that's why new countries are constantly willing to join EU.
(What this is all about is providing an alternative interpretation against the baseless association of EU with a police state.)
Thursday, September 21, 2006
What worries me ...
... is that Lovelacen Testi and Danimal Archive are also gone. It would have been so nice to advertise Finnish Annotator as means to read a blogger censored by the feminists.
It's also a sign that the problems may be quite severe. Hopefully we'll find out what happened behind the scenes.
Disagreeing with Ilkka on many aspects, I have to admit that I feel a bit of the same schadenfreude that colored his writings so much.
Update: Answer to The Scientist: Yes, it was wrong for the reporter to do what she did, since she knew from the case of Lawrence Summers that such publicity can have dire consequences.
It's also a sign that the problems may be quite severe. Hopefully we'll find out what happened behind the scenes.
Disagreeing with Ilkka on many aspects, I have to admit that I feel a bit of the same schadenfreude that colored his writings so much.
Update: Answer to The Scientist: Yes, it was wrong for the reporter to do what she did, since she knew from the case of Lawrence Summers that such publicity can have dire consequences.
Subscribe to:
Posts (Atom)