<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1850995963347059416</id><updated>2012-01-26T16:30:15.082-08:00</updated><category term='linux'/><category term='reviews'/><category term='web'/><category term='photography'/><category term='vaadin'/><category term='computers'/><category term='internet'/><category term='consumer electronics'/><title type='text'>Marko Grönroos</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-5883155641129542105</id><published>2012-01-21T00:34:00.000-08:00</published><updated>2012-01-21T03:08:21.379-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>JPA and Vaadin JPAContainer</title><content type='html'>I've been finalizing the completely rewritten &lt;a href="https://vaadin.com/book/-/page/jpacontainer.html"&gt;chapter about Vaadin JPAContainer&lt;/a&gt; this week. I still need to check that everything really important is included.&lt;br /&gt;&lt;br /&gt;I don't have almost any previous experience with JPA, which is kind of good thing when you write documentation about something. That way, you personally know all the questions a beginner would have.&lt;br /&gt;&lt;br /&gt;JPA and ORM in general seem pretty important technologies. Whatever your application is, you most probably need some data storage. Using ordinary files is possible, but not near as handy as proper databases. However, stuffing complex class structures through the square holes of database tables was a hell before the ORM technologies emerged. XML databases and NoSQL were much nicer for structured storage.&lt;br /&gt;&lt;br /&gt;Some years ago I did some experiments with related technologies, such as JAXB and Hibernate, but using them was a bit too much effort at that time. Using Hibernate with Vaadin really required a Container implementation, but there wasn't one at that time. Well, JPA is quite close to Hibernate, and Hibernate is currently one of the JPA implementations.&lt;br /&gt;&lt;br /&gt;Vaadin JPAContainer makes things &lt;i&gt;really&lt;/i&gt; easy.&lt;pre style="overflow: auto; font-size: 75%"&gt;// Create a persistent person container&lt;br /&gt;JPAContainer&amp;lt;Person&amp;gt; persons =&lt;br /&gt;    JPAContainerFactory.make(Person.class, "book-examples");&lt;br /&gt;&lt;br /&gt;// You can add entities to the container as well&lt;br /&gt;persons.addEntity(new Person("Marie-Louise Meilleur", 117));&lt;br /&gt;&lt;br /&gt;// Bind it to a component&lt;br /&gt;Table personTable = new Table("The Persistent People", persons);&lt;br /&gt;personTable.setVisibleColumns(new String[]{"id","name","age"});&lt;br /&gt;layout.addComponent(personTable);&lt;/pre&gt;So, just one command to get a container bound to data in a database table. JPAContainer is, however, just for binding user interface components directly to data. You can use it to add or edit the data, but using pure JPA is much nicer, easier, and more flexible for that.&lt;br /&gt;&lt;pre style="overflow: auto; font-size: 75%"&gt;EntityManager em = JPAContainerFactory.&lt;br /&gt;    createEntityManagerForPersistenceUnit("book-examples");&lt;br /&gt;em.getTransaction().begin();&lt;br /&gt;em.createQuery("DELETE FROM Person p").executeUpdate();&lt;br /&gt;em.persist(new Person("Jeanne Calment", 122));&lt;br /&gt;em.persist(new Person("Sarah Knauss", 119));&lt;br /&gt;em.persist(new Person("Lucy Hannah", 117));&lt;br /&gt;em.getTransaction().commit();&lt;/pre&gt; Well ok, here we got the entity manager from the JPAContainerFactory, which makes that a bit easier than normally.&lt;br /&gt;&lt;br /&gt;JPAContainer is a commercial product. That shouldn't be a problem if you're coding for a company that can pay the license. For free software, you can use the AGPL license. I've always felt that this sort of dual-licensing scheme is most difficult for "potential startups" where you experiment with a business idea, but do not yet have a company to back it up financially. You do not normally have the money to invest in licenses at that point, and a company might not want to invest much in such experiments either.&lt;br /&gt;&lt;br /&gt;There are of course alternatives for JPAContainer. Using pure JPA is quite OK approach as well, combined with BeanItemContainer in Vaadin. There's also SQLContainer. It is also something I don't know about, as I didn't write the chapter myself. I would need to review and reorganize it in next weeks though, and possibly rewrite at some point.&lt;br /&gt;&lt;br /&gt;Well, I did make a couple of mistakes while writing the JPAContainer chapter. The first one was trying to just update a really complex design documentation written by someone else, in a topic I knew nothing about. &lt;i&gt;Writing is always a learning experience&lt;/i&gt; and it's not sensible to try to write about something very complex that you don't have a clue about. Sometimes, it's best to start from scratch. Unfortunately, I didn't do that when I started, but just over a week before the release.&lt;br /&gt;&lt;br /&gt;Another issue is &lt;i&gt;learning by doing&lt;/i&gt;. I usually start writing documentation by experimenting how it works, making some &lt;a href="http://demo.vaadin.com/book-examples/book/"&gt;example code&lt;/a&gt;. This time, as I was in a hurry, I tried to skip that phase. I only started it as the last effort when I was totally stuck, some 4 weeks of struggle behind and 2 work days before the release date. Just in those couple of days, all pieces fell into place and I finally understood how everything works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-5883155641129542105?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/5883155641129542105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=5883155641129542105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5883155641129542105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5883155641129542105'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2012/01/jpa-and-vaadin-jpacontainer.html' title='JPA and Vaadin JPAContainer'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-6108683219241757431</id><published>2012-01-18T13:40:00.000-08:00</published><updated>2012-01-21T00:34:22.236-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><title type='text'>Wikipedia and Antipiracy Laws</title><content type='html'>So, if you have noticed, we've had a Wikipedia blackout. I normally use Wikipedia to look up dozens of articles daily, so I'd be pissed if their protest wasn't really valid.&lt;br /&gt;&lt;br /&gt;As innocent they sound, the "Intellectual Property" laws are a big threat, really. They are somehow understandable, which is the reason why they exist, but at the same time, they may be a big threat to modern civilization.&lt;br /&gt;&lt;br /&gt;You might think that they are not a problem to you, as they only prevent criminals from making crimes. You might even think that you want &lt;i&gt;your&lt;/i&gt; intellectual properties be protected.&lt;br /&gt;&lt;br /&gt;Their aim is to prevent illegal copying. Artists and others work so that they would get paid, and illegal copying is kind-of stealing from them. So, forbidding illegal copying is rather understandable.&lt;br /&gt;&lt;br /&gt;So what's the fuzz about?&lt;br /&gt;&lt;br /&gt;Let's consider the problem with DVDs. They use the "CSS" encryption mechanism to prevent unauthorized copying. Fine, excellent, evil pirates suffer, right?&lt;br /&gt;&lt;br /&gt;Unfortunately, watching CSS-encrypted movies requires special software that holds a special decryption key. The software is usually free-of-charge, but it's only for Windows, and perhaps for Mac as well. For Linux, which I use, there is no such authorized software for watching DVDs.&lt;br /&gt;&lt;br /&gt;Fortunately, some Norwegian guy cracked the CSS key and wrote a decryption algorithm some 10 years ago and now there's "DeCSS", an algorithm to play (and copy) any DVDs.&lt;br /&gt;&lt;br /&gt;So, over the years I've bought some 200 DVD movies and I've always watched them with Linux and nothing else. I've never copied a DVD that I've bought, only watched them.&lt;br /&gt;&lt;br /&gt;However, using the DeCSS algorithm for &lt;i&gt;any&lt;/i&gt; purpose is illegal in Finland. It's been tried in court.&lt;br /&gt;&lt;br /&gt;The fact is that, once cracked, CSS became totally obsolete forever. The laws will never have &lt;i&gt;any&lt;/i&gt; effect on unauthorized copying. But they will continue to prevent morally right use of your property.&lt;br /&gt;&lt;br /&gt;So, pirates who operate illegally of course use the DeCSS decryption to make one copy which they then copy to millions. But people like myself, who buy DVD movies legally, are criminals. Trying to stop a few criminals, they incriminate perhaps millions of Linux-users around the world.&lt;br /&gt;&lt;br /&gt;So why should you care? Linux users are somewhat rare, and you're probably not one of them (except if you use any of the 60% of the web or 55% of smartphones or a TV).&lt;br /&gt;&lt;br /&gt;Oh, but it also affects Windows users. There's free DVD watching software for Windows as well, such as VLC, which is actually quite popular as it's very good. But it's illegal, as it has to use DeCSS. The laws prevent writing and distributing any free software that you could use to watch DVDs.&lt;br /&gt;&lt;br /&gt;Obviously, preventing the use of free software to watch legal DVDs was not the purpose of the laws. It's just a consequence.&lt;br /&gt;&lt;br /&gt;It's a good example of a case where somewhat understandable reasons lead to absurd results. Even so, the vast majority of the Finnish parliament supported the law. And there is a lot more IP legistlation on the way.&lt;br /&gt;&lt;br /&gt;Oh, did I mention that Finnish consumers can legally copy movies and music for their own use and to friends. We even pay a tax for that when we buy DVD-Rs. But copying by circumventing CSS is illegal.&lt;br /&gt;&lt;br /&gt;Given the absurd criminalization and heavy anti-"piracy" lobbying to take away your rights, you should have no sympathy for the movie industry. O'hoy pirates! Go and board them!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;So, to SOPA or PIPA...&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I'm not personally familiar with the new legistlation initiatives in the USA. As far as I've understood, it's something similar as the recent Finnish laws that allow blocking child porn and peer-to-peer download sites. The laws already have a sad history of abuse. For example, the laws do not allow blocking websites inside Finland, but they've nevertheless done so as there's &lt;a href="http://jyrkikasvi.puheenvuoro.uusisuomi.fi/15346-ei-valitusoikeutta-ei-laillisuusvalvontaa"&gt;no possibility to legally challenge the decisions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The pattern is that "reasonable requirements" can have devastating effects. The current laws are largely based on the assumption that you are responsible for your own publications. The suggested laws place the responsibility on the owners of web servers and internet providers. So, if me or you were to publish the DeCSS code here in the blog, the Blogspot would be considered the "publisher" that is responsible for our writings. To protect itself, Blogspot would need to have editorial review for everything any one of the millions of bloggers write.&lt;br /&gt;&lt;br /&gt;This would quickly kill almost all blogs, discussion forums, and websites in the Internet. Also Youtube and such. It would kill the basic freedoms that we take for granted, and most of the Internet.&lt;br /&gt;&lt;br /&gt;Part of the Finnish goverment already has plans to expand the blocking further. Some want to block information about drugs and weapons. Then racism of course, &lt;a href="http://fi.wikipedia.org/wiki/Muhammad-pilapiirrosjupakka"&gt;blasphemy&lt;/a&gt;, information about bombs, porn, denying the Holocaust, undemocratic thought, ... anything to protect the children, leaders, gods, and corporate owners.&lt;br /&gt;&lt;br /&gt;Even though basic IP laws may be necessary, the recent development upholds corporate ownership rights over consumer ownership rights. They are used to buttress dentrimental monopolies and force you to pay vastly overcharged prices, even for basic necessities. They distinguish diversity and freedom, which are the life forces of the modern technological and scientific ecosystem.&lt;br /&gt;&lt;br /&gt;So when you see the blackout screen at Wikipedia, just imagine the day when it could be blacked out by your government.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-6108683219241757431?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/6108683219241757431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=6108683219241757431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6108683219241757431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6108683219241757431'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2012/01/wikipedia-and-antipiracy-laws.html' title='Wikipedia and Antipiracy Laws'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-6025446673378157706</id><published>2012-01-03T14:08:00.001-08:00</published><updated>2012-01-04T07:27:51.490-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><title type='text'>Vaadin IPC for Liferay add-on</title><content type='html'>For Vaadin users, I just finished writing documentation for the &lt;a href="http://vaadin.com/directory#addon/vaadin-ipc-for-liferay"&gt;Vaadin IPC for Liferay&lt;/a&gt; add-on yesterday. The version 1.0 of the add-on will be released tomorrow I think. The add-on is very very useful if you want to have two portlets that communicate with each other on the same page. The add-on uses standard Liferay JavaScript event API, so the other portlets can be any Ajax portlets, not just Vaadin.&lt;br /&gt;&lt;br /&gt;Here's how it works:&lt;br /&gt;&lt;img src="https://vaadin.com/download/book-of-vaadin/current/html/img/portal/liferay-ipc-architecture-lo.png" align="center"&gt;&lt;br /&gt;&lt;br /&gt;As a side note, I really like Inkscape for drawing those diagrams. Well, I have no clue how wonderful some "best-of-the-best" vector graphics apps are. But I seem to be able to do practically everything with Inkscape and, after a while, it's not so hard to use. I've also done a nice production pipeline so that I can just save the pictures as SVG and the build scripts for the book do the exporting to PNG automatically. It's not even hard, just one command-line call.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;LiferayIPC&lt;/b&gt; is a Vaadin component that you add in the main window (layout). The inter-portlet communication is done between the client-side widgets.&lt;pre&gt;LiferayIPC liferayipc = new LiferayIPC();&lt;br /&gt;layout.addComponent(liferayipc);&lt;br /&gt;...&lt;br /&gt;liferayipc.sendEvent("hello", "This is Data");&lt;br /&gt;&lt;/pre&gt;To receive an event in other portlets, you define a &lt;b&gt;LiferayIPCEventListener&lt;/b&gt; as follows: &lt;pre&gt;liferayipc.addListener("hello", new LiferayIPCEventListener() {&lt;br /&gt;    public void eventReceived(LiferayIPCEvent event) {&lt;br /&gt;        getWindow().showNotification(&lt;br /&gt;           "Received hello: " + event.getData());&lt;br /&gt;    }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt; The add-on package includes this nice demo WAR that you can just deploy in Liferay. It demonstrates how to send and receive inter-portlet events.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://vaadin.com/download/book-of-vaadin/current/html/img/portal/liferay-ipc-demo-annotated-lo.png" align="center"/&gt;&lt;br /&gt;&lt;br /&gt;You can combine this client-side communication method with server-side inter-portlet communication, for example, by using portlet session attributes. You may need to do that for security reasons or if you need to send large amount of data. In such case, you just send a client-side notification that says: "Hey, there's new server-side data available, read it now."&lt;br /&gt;&lt;br /&gt;So, go ahead and read &lt;a href="https://vaadin.com/book/-/page/portal.liferay-ipc.html"&gt;the new section&lt;/a&gt; in the Book of Vaadin. It explains everything. If it doesn't...go and ask in the Vaadin forum.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-6025446673378157706?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/6025446673378157706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=6025446673378157706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6025446673378157706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6025446673378157706'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2012/01/vaadin-ipc-for-liferay-add-on.html' title='Vaadin IPC for Liferay add-on'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-3132767202574350586</id><published>2011-11-28T04:24:00.000-08:00</published><updated>2011-11-28T05:00:24.410-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Theme Development in Liferay</title><content type='html'>After installing a portal system (or web server), the first thing you want to do is create a simple web page and start customizing the theme. Unfortunately, Liferay's documentation is terribly unclear about that.&lt;br /&gt;&lt;br /&gt;Well, its suggested normal method is to choose from a number of ready themes. Umm, &lt;i&gt;NO!&lt;/i&gt; Nobody wants to use a theme like that. Every organization has their own colors and graphics and if not, you nevertheless want to have something that you have in your mind, not what some others have.&lt;br /&gt;&lt;br /&gt;So, the "advanced" method is to develop a custom theme, which you can then deploy in Liferay. The Liferay plugin for Eclipse supports that. However, that method is way too heavy for me at least. I don't want to run a separate development Liferay on my machine, as I don't have enough memory in my home computer to do it fast enough. I want to work directly with the production server. I also suspect that deploying a theme takes longer than a second.&lt;br /&gt;&lt;br /&gt;So, what I wanted to do was to just edit some CSS in the web server, save, reload, and see the result. This method of themeing does not seem to be documented anywhere, or at least it's hard to find. Anyhow, the easy way seems to be to edit the &lt;tt&gt;custom.css&lt;/tt&gt; file in "classic" theme. The full path to the file is &lt;tt&gt;tomcat-x.x.x/webapps/ROOT/html/themes/classic/css/custom.css&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;The problem with that was that just editing it did not reload it immediately, or actually ever. Even restarting the serve does not reload it. I found some suggestions for properties that would need to be set in the &lt;tt&gt;portal-ext.properties&lt;/tt&gt;, but they didn't quite work in my case.&lt;br /&gt;&lt;br /&gt;Finally, I found the solution right there in the Liferay's installation package. The file &lt;tt&gt;tomcat-6.0.29/webapps/ROOT/WEB-INF/classes/portal-developer.properties&lt;/tt&gt; has the following settings for development:&lt;br /&gt;&lt;pre&gt;theme.css.fast.load=false&lt;br /&gt;theme.images.fast.load=false&lt;br /&gt;&lt;br /&gt;javascript.fast.load=true&lt;br /&gt;javascript.log.enabled=true&lt;br /&gt;&lt;br /&gt;layout.template.cache.enabled=false&lt;br /&gt;&lt;br /&gt;browser.launcher.url=&lt;br /&gt;&lt;br /&gt;combo.check.timestamp=true&lt;br /&gt;&lt;br /&gt;freemarker.engine.cache.storage=soft:1&lt;br /&gt;freemarker.engine.modification.check.interval=0&lt;br /&gt;&lt;br /&gt;openoffice.cache.enabled=false&lt;br /&gt;&lt;br /&gt;velocity.engine.resource.manager.cache.enabled=false&lt;br /&gt;&lt;br /&gt;com.liferay.portal.servlet.filters.cache.CacheFilter=false&lt;br /&gt;&lt;br /&gt;com.liferay.portal.servlet.filters.themepreview.ThemePreviewFilter=trueroot&lt;/pre&gt;&lt;br /&gt;I don't actually know which of the settings are really necessary, but now it seems to work great. Just edit the file and it's reloaded immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-3132767202574350586?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/3132767202574350586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=3132767202574350586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/3132767202574350586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/3132767202574350586'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2011/11/theme-development-in-liferay.html' title='Theme Development in Liferay'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-403203064120472173</id><published>2011-11-20T00:32:00.000-08:00</published><updated>2011-11-20T03:18:29.879-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Installing Liferay on MySQL</title><content type='html'>I'm installing a new web server for the astronomical association Turun Ursa. As we support Liferay at work, using it for this purpose may have some synergy so that I don't need to learn yet-another-portal. Well, not that Liferay is the easiest to learn. Anyhow, it also makes it possible to develop some portlets if I ever need one. I think I may need to redo my planetarium application again in Java - the old C++ version for Sparc stopped working some time ago after some upgrade at the university.&lt;br /&gt;&lt;br /&gt;Anyhow, the &lt;a href="http://www.liferay.com/documentation/liferay-portal/6.0/administration/-/ai/installing-liferay-for-an-enterpri-4"&gt;instructions&lt;/a&gt; for doing the proper installation were rather unclear as they didn't really tell much details about creating the database. They referred to a "Chapter 6", which didn't exist at all. I guess they referred to &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Database+Configuration"&gt;these instructions&lt;/a&gt;, which were more helpful. Anyhow, below is a brief summary.&lt;br /&gt;&lt;br /&gt;The setup is done here using the database root user. Some Liferay example used that though I don't really see why. Creating a separate Liferay user might be nicer. Well, I have Liferay running as a root anyhow to get it running in port 80, so the database user probably doesn't make it significantly safer.&lt;ol&gt; &lt;li&gt;&lt;p&gt;Shut down the server&lt;/p&gt;&lt;pre style="overflow:auto"&gt;# ./tomcat-6.0.29/bin/shutdown.sh&lt;/pre&gt;&lt;p&gt;...and wait for a bit.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Move the 7Cogs demo data generator away&lt;/p&gt;&lt;pre style="overflow:auto"&gt;# mv tomcat-6.0.29/webapps/sevencogs-hook/ .&lt;/pre&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Create the database with a database command and not using the &lt;tt&gt;mysqladmin&lt;/tt&gt; to be able to set the character set. It's probably important.&lt;/p&gt;&lt;pre style="overflow:auto"&gt;# mysql -prootpassword&lt;br /&gt;mysql&gt; create database lportal character set utf8;&lt;br /&gt;Query OK, 1 row affected (0.00 sec)&lt;/pre&gt;&lt;p&gt;The MySQL configuration stuff is explained &lt;a href="http://www.liferay.com/community/wiki/-/wiki/Main/Database+Configuration"&gt;in this wiki&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Create a portal-ext.properties file in the Liferay installation directory with content:&lt;/p&gt;&lt;pre style="overflow:auto"&gt;#&lt;br /&gt;# MySQL&lt;br /&gt;#&lt;br /&gt;jdbc.default.driverClassName=com.mysql.jdbc.Driver&lt;br /&gt;jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&amp;characterEncoding=UTF-8&amp;useFastDateParsing=false&lt;br /&gt;jdbc.default.username=root&lt;br /&gt;jdbc.default.password=rootpassword&lt;/pre&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Start up the server&lt;/p&gt;&lt;pre style="overflow:auto"&gt;# ./tomcat-6.0.29/bin/startup.sh&lt;/pre&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Follow that it starts OK&lt;/p&gt;&lt;pre style="overflow:auto"&gt;# tail -F tomcat-6.0.29/logs/catalina.out&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;Well, rather trivial but took me a bit time as the documentation was a bit...hazy.&lt;br /&gt;&lt;br /&gt;Other notes:&lt;ul&gt;&lt;li&gt;When first logging in, create a new user account with your own name. Then log out and log in as user "test@liferay.com" with password "test" (this information was not really obvious in the instructions either). Go to Control Panel -&gt; Users and give yourself the Administrator role. You need to remove or disable the "test" account at some point...&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-403203064120472173?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/403203064120472173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=403203064120472173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/403203064120472173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/403203064120472173'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2011/11/installing-liferay-on-mysql.html' title='Installing Liferay on MySQL'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-4350796660035276960</id><published>2011-11-10T02:04:00.000-08:00</published><updated>2011-11-10T02:22:28.620-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Windows behind the background</title><content type='html'>I've had a lot of trouble with my dual screen setup with Kubuntu 11.10. It works like a dream when you set up it at first. The trouble starts when you turn off either or both of the monitors and then turn them on. KDE is "intelligent" so that it tries to switch between the single and dual display set up depending on what displays are on. Unfortunately, the result is rather uncontrolled and random.&lt;br /&gt;&lt;br /&gt;So, this morning I arrived at work and opened my laptop first...MISTAKE! I should have turned on the external monitor instead. So, it did not just not work, but also got completely stuck. So, I restarted kdm from console screen. After that, the behavior got really odd. No windows were visible. I could see them in the task panel, but they were nowhere. Then, I switched to the 3D cube view and I could see them - behind the background!&lt;br /&gt;&lt;br /&gt;So, apparently the background is no longer a "root image" in X, but a window itself, and it has a Z index. I was able to bring the windows forth by right-clicking them in the task bar and selecting "Advanced -&gt; Keep Above Others". But that was rather nasty thing to do. Then occasionally, the panel itself would drop below the background image and using the machine became impossible. Even restarting the machine did not help, apparently the Z index of the background was saved in system configuration. Great.&lt;br /&gt;&lt;br /&gt;I traced the problem to .kde/share/config/plasma-desktop-appletsrc. Apparently, the background is managed as a desktop applet (aka "desktop widget") and each has a zvalue parameter defined in the configuration.&lt;br /&gt;&lt;br /&gt;I did not trace the issue further, just removed the file. &lt;a href="http://ircanswers.com/kubuntu/679926/somehow-somehow-possible-others-background"&gt;Apparently others have met the same issue&lt;/a&gt;, hence this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-4350796660035276960?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/4350796660035276960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=4350796660035276960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/4350796660035276960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/4350796660035276960'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2011/11/windows-behind-background.html' title='Windows behind the background'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-6156382233962141413</id><published>2011-03-24T07:28:00.001-07:00</published><updated>2011-03-28T04:11:54.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><title type='text'>Cross-Site Embedding Vaadin Applications</title><content type='html'>I've been recently testing the embedding of Vaadin applications.&lt;br /&gt;Here's the Vaadin Sampler embedded:&lt;div style="height: 600px; width: 400px; overflow: auto;"&gt;&lt;br /&gt;  &lt;div style="height: 500px; width: 800px;"&gt;&lt;br /&gt;    &lt;script src="http://demo.vaadin.com/xsembed/getEmbedJs" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;Well, the application isn't made for this narrow columns, but it works, and runs on a completely different server. And isn't in an iframe.&lt;br /&gt;&lt;br /&gt;Essentially, all you need to embed an app is:&lt;pre style="overflow: auto"&gt;    &amp;lt;script src="http://demo.vaadin.com/xsembed/getEmbedJs" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;However, if the app has 100% vertical size, you must put it in an element with a defined height. You may also want to set the width in some cases, such as in the example above:&lt;pre style="overflow: auto"&gt;&amp;lt;div style="height: 600px; width: 400px; overflow: auto;"&amp;gt;&lt;br /&gt;  &amp;lt;div style="height: 500px; width: 800px;"&amp;gt;&lt;br /&gt;    &amp;lt;script src="http://demo.vaadin.com/xsembed/getEmbedJs" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-6156382233962141413?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/6156382233962141413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=6156382233962141413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6156382233962141413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6156382233962141413'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2011/03/cross-site-embedding-vaadin.html' title='Cross-Site Embedding Vaadin Applications'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-7517838707847119202</id><published>2010-02-10T04:00:00.000-08:00</published><updated>2010-02-10T04:18:40.019-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><title type='text'>Vaadin Refcard updated</title><content type='html'>I made a few minor corrections and additions to the &lt;a href="http://refcardz.dzone.com/refcardz/getting-started-vaadin?oid=hom17525"&gt;Vaadin Refcard&lt;/a&gt;, which was released last week at DZone. If you already downloaded it, you might to get the new version.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Vaadin is available under Apache License 2.0&lt;/li&gt;&lt;li&gt;For &lt;span style="font-weight: bold;"&gt;Item&lt;/span&gt; editors, such as the &lt;span style="font-weight: bold;"&gt;Form&lt;/span&gt; component, you can set the item data source with &lt;span style="font-family: courier new;"&gt;setItemDataSource()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;For &lt;span style="font-weight: bold;"&gt;Container&lt;/span&gt; editors, such as the &lt;span style="font-weight: bold;"&gt;Table&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;Tree&lt;/span&gt; components, you can set the container data source with &lt;span style="font-family: courier new;"&gt;setContainerDataSource()&lt;/span&gt;&lt;/li&gt;&lt;li&gt;The book cover on the last page was updated - the cover for Vaadin 6.2 edition is blue&lt;/li&gt;&lt;li&gt;The text in the last page was reordered to be more correct&lt;/li&gt;&lt;/ul&gt;The refcard could be updated next after Vaadin 6.3 is released in the late spring. The major &lt;a href="http://dev.vaadin.com/milestone/Vaadin%206.3.0"&gt;features are&lt;/a&gt; use of GWT 2.0 for the client-side, drag'n'drop, and support for portlet flat mode.&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-7517838707847119202?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/7517838707847119202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=7517838707847119202' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7517838707847119202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7517838707847119202'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2010/02/vaadin-refcard-updated.html' title='Vaadin Refcard updated'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-407624788078598532</id><published>2010-02-01T10:46:00.001-08:00</published><updated>2010-02-01T11:03:54.041-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><title type='text'>Vaadin Refcard is out!</title><content type='html'>The Vaadin Refcard is finally &lt;a href="http://refcardz.dzone.com/refcardz/getting-started-vaadin?oid=hom17525"&gt;out&lt;/a&gt; at DZone. Download yours now or browse the card on-line.&lt;br /&gt;&lt;br /&gt;If you're a newcomer to Vaadin or interested in finding out what it is, the Refcard offers a great introduction to Vaadin. Much of the reference material should be also useful to those already familiar with Vaadin.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://refcardz.dzone.com/refcardz/getting-started-vaadin?oid=hom17525"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 310px; height: 400px;" src="http://2.bp.blogspot.com/_GO4ye3jU2p0/S2cabUTT6bI/AAAAAAAAAH8/FK88QbKYpy8/s400/vaadin-refcard-dzone-shot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5433340532054288818" /&gt;&lt;/a&gt;&lt;br /&gt;The six pages of the Refcard present a well thought summary of the most essential features of Vaadin, which are covered in detail in the Book of Vaadin. Much of the reference information is presented in tightly packed diagrams; just look at them for a moment and I hope you'll see the genius of Vaadin as I do.&lt;br /&gt;&lt;br /&gt;The contents are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Creating an Application&lt;/li&gt;&lt;li&gt;Components&lt;/li&gt;&lt;li&gt;Layout Components&lt;/li&gt;&lt;li&gt;Themes&lt;/li&gt;&lt;li&gt;Data Binding&lt;/li&gt;&lt;li&gt;Creating New Components&lt;/li&gt;&lt;/ul&gt;As Vaadin is developing fast, I hope to make updates to the card occasionally. So, especially after update releases (Vaadin 6.3 is coming next), please look out for an update of the card.&lt;br /&gt;&lt;br /&gt;More Information:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://refcardz.dzone.com/refcardz/getting-started-vaadin?oid=hom17525"&gt;The Vaadin Refcard&lt;/a&gt; at DZone&lt;/li&gt;&lt;li&gt;&lt;a href="http://vaadin.com/"&gt;Vaadin Homepage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vaadin.com/book/"&gt;Book of Vaadin On-Line&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-407624788078598532?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/407624788078598532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=407624788078598532' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/407624788078598532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/407624788078598532'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2010/02/vaadin-refcard-is-out.html' title='Vaadin Refcard is out!'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GO4ye3jU2p0/S2cabUTT6bI/AAAAAAAAAH8/FK88QbKYpy8/s72-c/vaadin-refcard-dzone-shot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-8533172334051825982</id><published>2010-01-08T06:33:00.000-08:00</published><updated>2010-01-08T06:35:36.977-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><title type='text'>Client-Side Validation for Vaadin</title><content type='html'>&lt;p&gt;I recently created a new component for Vaadin, the &lt;strong&gt;CSValidationTextField&lt;/strong&gt; (suggestions for a better name are welcome), which is an extension of the regular &lt;strong&gt;TextField&lt;/strong&gt;. It can validate the input with a regular expression and/or a JavaScript program.&lt;br /&gt;&lt;br /&gt;Of course, you can't trust the client-side code for validation, so you need to validate the input on the server-side as well. For regular expression validation, you can use the same expression for the server-side &lt;strong&gt;RegexpValidator&lt;/strong&gt;. For example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;// The Finnish Social Security Number&lt;br /&gt;final CSValidatedTextField ssn = new CSValidatedTextField("SSN");&lt;br /&gt;String ssn_regexp = "[0-9]{6}[+-A][0-9]{3}[0-9a-zA-Z]";&lt;br /&gt;&lt;br /&gt;// The client-side validation&lt;br /&gt;ssn.setRegExp(ssn_regexp, "000000-000A");&lt;br /&gt;ssn.setAllowInvalid(false); // Prevent typing invalid values&lt;br /&gt;&lt;br /&gt;// The server-side validation&lt;br /&gt;ssn.addValidator(new RegexpValidator(ssn_regexp, "Invalid SSN"));&lt;br /&gt;ssn.setRequired(true);&lt;br /&gt;ssn.setRequiredError("SSN is required");&lt;br /&gt;&lt;br /&gt;form.addField("ssn", ssn);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Matching partially filled values has some problems currently. If you disallow typing invalid input, as in the example above, the regexp validation currently needs an "example" and is restricted to only fixed-length fields. I'll have to look if the JS regexp matching can somehow report if there's a partial match. If you allow invalid input, there are no restrictions and the fixed-length example is not needed.&lt;br /&gt;&lt;br /&gt;You can validate with JavaScript just as easily:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;CSValidatedTextField postcode = new CSValidatedTextField("Postal Code");&lt;br /&gt;postcode.setJavaScript("if (value &amp;gt;= 0 &amp;amp;&amp;amp; value &amp;lt; 10000)" +&lt;br /&gt;                       "    \"partial\";" +&lt;br /&gt;                       "else if (value &amp;gt;= 10000 &amp;amp;&amp;amp; value &amp;lt;= 99999)" +&lt;br /&gt;                       "    null;" +&lt;br /&gt;                       "else" +&lt;br /&gt;                       "    \"Postal Code must be a 5-digit number between 10000 and 99999\";");&lt;br /&gt;layout.addComponent(postcode);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;The server-side validation needs separate Java code though, unless you use some JavaScript execution library.&lt;br /&gt;&lt;br /&gt;You &lt;em&gt;must&lt;/em&gt; validate the input on the server-side as well, as the client-side validation does not actually prevent inputting invalid values (unless you set setAllowInvalid(false), but that's a bit restricted at the moment).&lt;br /&gt;&lt;br /&gt;See the example source codes (link below) for more examples.&lt;br /&gt;&lt;br /&gt;See:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://magi.virtuallypreinstalled.com/csvalidation/demo/"&gt;The Demo&lt;/a&gt; (editors, some validation examples)&lt;/li&gt;&lt;li&gt;&lt;a href="http://magi.virtuallypreinstalled.com/csvalidation/doc/api/"&gt;API Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.vaadin.com/browser/incubator/csvalidation/"&gt;Source Repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dev.vaadin.com/browser/incubator/csvalidation/src/com/vaadin/csvalidation/examples"&gt;Example Souce Code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Included are also handy interactive editors for the regular expressions and JavaScript validators, as you can see in the demos.&lt;br /&gt;&lt;br /&gt;The component is not packaged yet, so using it may require some effort. I'll have to look into the packaging.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-8533172334051825982?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/8533172334051825982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=8533172334051825982' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/8533172334051825982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/8533172334051825982'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2010/01/client-side-validation-for-vaadin.html' title='Client-Side Validation for Vaadin'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-6110483082147486681</id><published>2009-10-29T11:26:00.001-07:00</published><updated>2009-10-30T05:12:02.731-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='consumer electronics'/><title type='text'>Playing in Order</title><content type='html'>I've been fighting with my E90 for a few hours to get it play the MP3s of the Lord of the Rings audio books in proper order. It's not so easy.&lt;br /&gt;&lt;br /&gt;First, I had to set proper track and disk information in the MP3s. This was easy enough with the Amarok music player for KDE. It allows easily editing the metadata, also in a group of files. There was some hand work to edit the track numbers, which took about half an hour for the 20-disk set.&lt;br /&gt;&lt;br /&gt;Another and a more strange problem was that my E90 orders the MP3s to play in the &lt;span style="font-style: italic;"&gt;directory order&lt;/span&gt;. The directory order is a low-level technical order in which files are stored in a directory (folder), and is not necessarily the same as the alphabetical order. Apparently, in FAT, the directory order is the order in which the files are written. In Linux, however, the directory order can be about anything, depending on the file system. In the EXT3 filesystem, the order seems pretty random and is probably the order of some hash table.&lt;br /&gt;&lt;br /&gt;Unfortunately, every copy program, such as Konqueror, scp, or the command line "cp", copies the files in the directory order, so it's not possible to trivially copy files to a phone or MP3 player in alphabetical order. One solution is to use a specially ordered copy operation from command-line.&lt;br /&gt;&lt;br /&gt;In my case, I had the MPs of the 20 CD audio book ordered under per-disk directories, so I had to use the following somewhat complex copy command:&lt;br /&gt;&lt;pre style="overflow: auto;"&gt;for dir in `ls /home/magi/data/mp3/Sormuksen\ ritarit/`; do&lt;br /&gt;    echo `ls -Q /home/magi/data/mp3/Sormuksen\ ritarit/$dir/*.mp3` "/media/Magi\ 2G\ u1/Sounds/Digital/Sormuksen\ ritarit/$dir/" | xargs cp -v&lt;br /&gt;done&lt;/pre&gt;An alternative would be to first write everything to the player in any order and then use the "mv" command to move the files to a temporary directory, and then remove the original directory and rename the temporary directory as the original.&lt;br /&gt;&lt;br /&gt;Moreover, if you have earlier written the MP3s to E90 in one order, it remembers the order even if you rewrite the files in another order. You first have to remove them from the player application, then write them again in the proper order, and only then you can play them properly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;References&lt;/span&gt;&lt;br /&gt;Some other solutions in Linux Forum: &lt;a href="http://www.linuxforums.org/forum/linux-newbie/111044-change-order-files-directory.html"&gt;Change the order of files in a directory&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-6110483082147486681?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/6110483082147486681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=6110483082147486681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6110483082147486681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6110483082147486681'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2009/10/playing-in-order.html' title='Playing in Order'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-7494621554399849044</id><published>2009-10-27T16:00:00.001-07:00</published><updated>2009-10-27T16:40:10.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vaadin'/><title type='text'>Vaadin Cheat Sheets</title><content type='html'>I designed the &lt;a href="http://dev.vaadin.com/browser/doc/trunk/cheatsheet/vaadin-cheatsheet-duplex.pdf"&gt;Vaadin Cheat Sheet&lt;/a&gt; last summer. I really like it, especially its style that follows the Vaadin graphical style.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GO4ye3jU2p0/Sud-nHml2bI/AAAAAAAAAGY/KU6HF-sDv6A/s1600-h/vaadin-cheatsheet-pic"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 284px; height: 400px;" src="http://3.bp.blogspot.com/_GO4ye3jU2p0/Sud-nHml2bI/AAAAAAAAAGY/KU6HF-sDv6A/s400/vaadin-cheatsheet-pic" alt="" id="BLOGGER_PHOTO_ID_5397421888947739058" border="0" /&gt;&lt;/a&gt;During the last few weeks, the demand for the cheat sheets has been growing. There's one on display at the ICT building in Turku, where you can get a free copy of Book of Vaadin. This week, I got some more lamination pockets to make more laminated cards. The new pockets with matt finish are nice, you can even write on them with a pencil.&lt;br /&gt;&lt;br /&gt;I somewhat enjoy laminating the cards. Even though it's purely manual labour, it's quite relaxing to work manually by a routine for a change and not have to think or design anything. This also means that I can't make the cards by the thousands, like the books. Nevertheless, I try to make enough for IT Mill customers, some community members, and for special promotion purposes.&lt;br /&gt;&lt;br /&gt;Just today, I corrected a small error: the CSS style class of the ComboBox component is &lt;tt&gt;v-filterselect&lt;/tt&gt;, not &lt;tt&gt;v-combobox&lt;/tt&gt;. There might be other similar errors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-7494621554399849044?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/7494621554399849044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=7494621554399849044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7494621554399849044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7494621554399849044'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2009/10/vaadin-cheat-sheets.html' title='Vaadin Cheat Sheets'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GO4ye3jU2p0/Sud-nHml2bI/AAAAAAAAAGY/KU6HF-sDv6A/s72-c/vaadin-cheatsheet-pic' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-8006743998320255437</id><published>2009-08-27T15:38:00.000-07:00</published><updated>2009-08-27T17:02:40.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='consumer electronics'/><title type='text'>N900 vs iPhone</title><content type='html'>Hi, I collected a rough list of some features. The list is not exhaustive and there may be some important features in software and interoperability that are not covered. Please comment and I'll add new notes.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;N900&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;iPhone 3GS&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td colspan="3"&gt;&lt;b&gt;Basic stuff&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Size&lt;/td&gt;&lt;td&gt;111x60x18mm&lt;/td&gt;&lt;td&gt;&lt;b&gt;116x62x12mm&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Weight&lt;/td&gt;&lt;td&gt;181 g&lt;/td&gt;&lt;td&gt;&lt;b&gt;133 g&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Screen Size&lt;/td&gt;&lt;td&gt;3.5 inch&lt;/td&gt;&lt;td&gt;3.5 inch&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Screen Resolution&lt;/td&gt;&lt;td&gt;&lt;b&gt;800x480&lt;/b&gt;&lt;/td&gt;&lt;td&gt;320x480&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Screen Colors&lt;/td&gt;&lt;td&gt;65536 colors?&lt;/td&gt;&lt;td&gt;&lt;b&gt;262144 colors&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Screen material&lt;/td&gt;&lt;td&gt;plastic?&lt;/td&gt;&lt;td&gt;&lt;b&gt;glass&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Touchscreen tech&lt;/td&gt;&lt;td&gt;resistive&lt;/td&gt;&lt;td&gt;&lt;b&gt;capacitive&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Touchscreen fingers&lt;/td&gt;&lt;td&gt;one&lt;/td&gt;&lt;td&gt;&lt;b&gt;two&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Built-in keyboard&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Screen keyboard&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td colspan="3"&gt;&lt;b&gt;Computing&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Processor&lt;/td&gt;&lt;td&gt;ARM Cortex A8&lt;/td&gt;&lt;td&gt;ARM Cortex A8&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Processor speed&lt;/td&gt;&lt;td&gt;600 MHz&lt;/td&gt;&lt;td&gt;600 MHz&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Graphics accelerator&lt;/td&gt;&lt;td&gt;PowerVR SGX&lt;/td&gt;&lt;td&gt;PowerVR SGX&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;256 MB&lt;/td&gt;&lt;td&gt;256 MB&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Virtual memory&lt;/td&gt;&lt;td&gt;&lt;b&gt;768 MB&lt;/b&gt;&lt;/td&gt;&lt;td&gt;none&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;SSD storage, internal&lt;/td&gt;&lt;td&gt;&lt;b&gt;32 GB&lt;/b&gt;&lt;/td&gt;&lt;td&gt;16/32 GB&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;External storage&lt;/td&gt;&lt;td&gt;&lt;b&gt;up to 16 GB (MicroSD)&lt;/b&gt;&lt;/td&gt;&lt;td&gt;none&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td colspan="3"&gt;&lt;b&gt;Software&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Operating system&lt;/td&gt;&lt;td&gt;Linux-based&lt;/td&gt;&lt;td&gt;Darwin-based&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Web Browser&lt;/td&gt;&lt;td&gt;Mozilla-based&lt;/td&gt;&lt;td&gt;Safari&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Zooming&lt;/td&gt;&lt;td&gt;yes, one-finger&lt;/td&gt;&lt;td&gt;yes, two-finger&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Adobe Flash support&lt;/td&gt;&lt;td&gt;&lt;b&gt;Flash 9.4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;none&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Java&lt;/td&gt;&lt;td&gt;&lt;b&gt;possibly&lt;/b&gt;&lt;/td&gt;&lt;td&gt;none&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Skype&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Video formats&lt;/td&gt;&lt;td&gt;mp4, .avi, .wmv, .3gp&lt;/td&gt;&lt;td&gt;mp4, m4v, mov?&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Video codecs&lt;/td&gt;&lt;td&gt;H.264, MPEG-4, Xvid, WMV, H.263&lt;/td&gt;&lt;td&gt;H.264, MPEG-4?&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Music formats&lt;/td&gt;&lt;td&gt;.wav, .mp3, .AAC, .eAAC, .wma, .m4a&lt;/td&gt;&lt;td&gt;m4a, ...?&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Open application development&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Music/software store&lt;/td&gt;&lt;td&gt;Nokia Ovi&lt;/td&gt;&lt;td&gt;iTunes, App Store&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Operator lock&lt;/td&gt;&lt;td&gt;&lt;b&gt;no&lt;/b&gt;&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td colspan="3"&gt;&lt;b&gt;Misc hardware&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Camera&lt;/td&gt;&lt;td&gt;&lt;b&gt;5 Mpix&lt;/b&gt;&lt;/td&gt;&lt;td&gt;3 Mpix&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Video recording&lt;/td&gt;&lt;td&gt;yes, 16:9&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Video size and rate&lt;/td&gt;&lt;td&gt;848x480 @ 25fps&lt;/td&gt;&lt;td&gt;640x480 @ 30fps&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Microphone&lt;/td&gt;&lt;td&gt;&lt;b&gt;stereo&lt;/b&gt;&lt;/td&gt;&lt;td&gt;mono?&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Geotagging&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;GPS&lt;/td&gt;&lt;td&gt;A-GPS&lt;/td&gt;&lt;td&gt;A-GPS&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Cell-based navigation&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Accelometer&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Wireless network&lt;/td&gt;&lt;td&gt;802.11 b/g&lt;/td&gt;&lt;td&gt;802.11 b/g&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Video out&lt;/td&gt;&lt;td&gt;yes (PAL/NTSC, WLAN/UPnP)&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;FM transmitter&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Headphone connector&lt;/td&gt;&lt;td&gt;3.5 mm&lt;/td&gt;&lt;td&gt;3.5 mm&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Compass&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Replaceable battery&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td colspan="3"&gt;&lt;b&gt;Other&lt;/b&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Designed in Finland&lt;/td&gt;&lt;td&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Jesus uses it&lt;/td&gt;&lt;td&gt;&lt;b&gt;no&lt;/b&gt;&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-8006743998320255437?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/8006743998320255437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=8006743998320255437' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/8006743998320255437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/8006743998320255437'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2009/08/n900-vs-iphone.html' title='N900 vs iPhone'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-7760458941365886864</id><published>2008-07-27T05:04:00.000-07:00</published><updated>2008-08-01T15:39:37.130-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='consumer electronics'/><title type='text'>First Impressions with Suunto Core Wristop Computer</title><content type='html'>I bought a Suunto Core "wristop computer" yesterday and as usual, I wish to write a bit about my first experiences with the device. So far, the compass is very problematic and the temperature meter is useless. The compass is the most important feature for me and it really should work.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/SIyE9Nn-etI/AAAAAAAAADI/rb_u9gomKyw/s1600-h/IMG_8688_smlcrop.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/SIyE9Nn-etI/AAAAAAAAADI/rb_u9gomKyw/s400/IMG_8688_smlcrop.jpg" alt="" id="BLOGGER_PHOTO_ID_5227699454634523346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Suunto Lumi was my second choise and just fifteen minutes after buying the Core I regretted not buying Lumi instead. Core is HUGE, basicly a UFO strapped to your wrist and distinguishable from at least lower Earth orbits. Lumi is essentially the same device but it's half the size, so it's more of the size of a conventional men's watch. For some strange reason, Lumi is marketed for women. While the Suunto Core marketing talks about traveling in wilderness and scaling mountains, Lumi marketing talks about finding directions in rock festivals. Ok, the wrist strap is a bit ornamental in a feminine way and a regular black strap might be more mannish, but Suunto sells separate straps so that should not be a problem. The only missing features in Lumi are the rotating bevel (it's useful) and the depth meter (very rarely useful). And Lumi is 50 euros more expensive than Core (250 vs 200 euros).&lt;br /&gt;&lt;br /&gt;In this article, I will go through the main features.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Construction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As I said, it's HUGE. The only reason that I can think of for the size is that you can use it with the gloves on. Strangely, the Suunto webpages do not advertise this reason. The size is a problem in so many ways. It doesn't really fit under the sleeves and it makes more difficult to don a jacket. As I need the watch when traveling, I don't want my watch to draw the attention of the natives who make 30 euros a month and the watch worth their six months salary (not that my pro-looking camera equipment draw any attention). On the other hand, I wish I had had the watch when I went snorkling in the coral reefs at Keys. Anyhow, I would have preferred Suunto Lumi.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GO4ye3jU2p0/SIyFkHpHvMI/AAAAAAAAADQ/L6K-RyFgJxw/s1600-h/IMG_8684_sml.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GO4ye3jU2p0/SIyFkHpHvMI/AAAAAAAAADQ/L6K-RyFgJxw/s400/IMG_8684_sml.JPG" alt="" id="BLOGGER_PHOTO_ID_5227700123043609794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Despite the size the watch is really light. The size is apparently just empty space and not because the electronics require that much space. It's not light enough to float though - I tried. The wrist strap is a bit gelatine-like material and it's somewhat difficult to open the lock. You can not adjust the strap, or more accurately, you have to adjust it every time you put it on your wrist. There are so many holes that it's not easy to know which one is the best. Because of the gelatinish material, the skin under the strap sweats like a pig. The reason to have a metal wrist strap is not that it looks pretty but because it conducts heat.&lt;br /&gt;&lt;br /&gt;Another problem with the strap is that it's positioned so that it is not possible to put the watch on a table surface (see the figure below). This makes use and especially calibration of the compass very very very difficult, because the compass must be leveled very precisely. Also, the back-side of the watch is nowhere near flat. It also makes setting compass direction on a map much more difficult. Have the designers actually &lt;span style="font-style: italic;"&gt;used&lt;/span&gt; the watch?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/SIyE85_ThLI/AAAAAAAAAC4/6mSpJify5bI/s1600-h/IMG_8682_crop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/SIyE85_ThLI/AAAAAAAAAC4/6mSpJify5bI/s400/IMG_8682_crop.JPG" alt="" id="BLOGGER_PHOTO_ID_5227699449363662002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Some people at Suunto discussion forums complained about too loose or tight compass bezels. The rotation stiffness of my bezel is excellent, but in small scale the bezel is loose and moves even if you touch is only lightly. The bezel has 60 steps so for compass purposes the steps are 6 degrees. Unfortunately, the compass scale is not written in the bezel and it only has letters indicating the cardinal directions. Some other models have a scale.&lt;br /&gt;&lt;br /&gt;The glass is mineral glass and it is a good thing that it is not plastic as most cell phone displays are. Plastic displays scratch really easily and they are full of scratches in a year or two. The most scratch-resistant glasses are the sapphire-coated ones, but ordinary mineral glass is usually enough. The surface is convex and looks good. If you end up stranded in an island, there's no point in removing the glass and using it as a burning lens to light your campfire, as you can just use the reflection for the same purpose (if it only was reflectively coated). Oh well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;The Clock&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The clock is such a basic functionality that it is hard to screw it very badly. I have not used the watch long enough to say how well it keeps time. At first, I thought that the watch lost time very fast (10 seconds per day), only to notice that it was my computer's clock that lost time. When comparing to accurate time, the Core seems to have gained about 3 seconds in 4 days, which is not good, but I'm again not certain that I set the time correctly in the first place.&lt;br /&gt;&lt;br /&gt;The clock has a number of views: just time (hh:mm), time and date, time (hh:mm) plus seconds, time (hh:mm) plus time at a secondary timezone, time plus sunset/sunrise times, timer, countdown timer. Why are there so many views with just minor differences? What's the use of showing just time and not date or seconds? Why isn't there a view that shows all time (hh:mm:ss) and date in one view?&lt;br /&gt;&lt;br /&gt;The only really annoying thing is the countdown timer. I need such a timer almost daily for foodmaking purposes. Setting the countdown time requires that you gough the menu: click Menu (2s) - select time-date (2 clicks) - select countdown (2 clicks). Then you can set the countdown time. Why can't you just set the countdown time in the watch view?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Altitude Meter / Barometer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The altimeter in Suunto Core is supposed to have resolution of one meter. I haven't been able to measure this very accurately yet, but it seems believable. I used the altimeter in one measurement to measure the relative height of two pillars 400 meters apart and it gave constant readings within some 2 meters. The problems are in calibration. Core allows you to calibrate the altimeter in two ways: by a known altitude or by local atmospheric pressure at sea level, which you can get from weather stations.&lt;br /&gt;&lt;br /&gt;The problem with the calibration by the atmospheric pressure is that Suunto Core allows setting the pressure with the resolution of one hPa, but the difference of one hPa is &lt;span style="font-style: italic;"&gt;27 meters in altitude&lt;/span&gt;! Weather stations give the pressure with one decimal. The advertised one meter altitude accuracy means that Core should be able to measure pressure with about 0,03 hPa resolution, so why can't I calibrate it even with one decimal?&lt;br /&gt;&lt;br /&gt;Another problem with the altimeter and barometer mode is that it's a lot of work to switch between them. Switching between them through the menu (which requires 2s press to open) takes 10 button clicks in all. Not very easy! There is an "automatic mode" though, which should have the altitude meter on when the pressure changes fast (i.e. when you're moving vertically), and barometer on when you're stationary, but it takes a few (2-3) minutes to switch to the altitude mode and a lot longer (15-30 minutes) to switch back to the barometer mode.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/SIyE8jaEkeI/AAAAAAAAACw/fDtcLGoL1W0/s1600-h/IMG_8680_sml.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/SIyE8jaEkeI/AAAAAAAAACw/fDtcLGoL1W0/s400/IMG_8680_sml.jpg" alt="" id="BLOGGER_PHOTO_ID_5227699443301913058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The altiude/barometer mode also shows the temperature. Unfortunately, the body temperature affects the reading strongly, so when you're wearing the watch in your (naked) wrist, it will show 30-33°C if real temperature is 20-30°C. I did a small experiment: digital thermometer shows 28,9°C and Core shows 30°C. I put the watch in my wrist and wait 5 minutes. It will show 32°C. So, it's basicly useless when you're wearing it. Taking it off doesn't help very quickly and it takes maybe 15-30 minutes to stabilize. I would really have expected that the watch would compensate for the body temperature at least a bit, possibly by measuring the temperatures from back, middle and front sides of the watch and extrapolating the temperature. Or just by using a thermometer that measures the air temperature with infrared or something. I suppose there might not be a perfect solution, but currently it's just bad.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Compass&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The compass has been nearly useless so far, because it's highly sensitive about tilting and loses calibration all the time. So, while the specs say that it should be accurate to 1 degree, I would say that it's accurate to maybe 180 degrees, because you never know when it has lost the calibration completely or just partially. It doesn't need to be accurate to one degree and some 5° would be acceptable, but now the accuracy is much worse.&lt;br /&gt;&lt;br /&gt;The compass is really the most important feature of the watch for me. I need it for urban orienteering when I'm traveling and for rough directions for amateur astronomical purposes. For example, I want to know the rough direction of the Sun or the Moon or some planet or a star that I see in the horizon. When I'm gazing for satellites and there's a predicted satellite flash at a certain time, I need to know the exact direction where it will show. If I see a meteor (or even a fireball), I need to be able to estimate its radiant. At night, I can usually see the directions from the stars very easily, but in daytime or in dusk I really can't. Finding Venus or Mercury from the sky during daytime requires knowing the exact direction.&lt;br /&gt;&lt;br /&gt;Occasionally, I get happy when the reading looks reasonable, but then I realize that it's the same as a dead wall clock being correct twice a day. Typically, the error is about 20-50 degrees, so in a real situation, you would not really know that there's something badly wrong. For note, I have calibrated the declination, and it's not huge anyhow (+6.5°), so it's not that. Reading the direction at one place can give steady readings, but fifteen minutes later it gives totally different readings. Sometimes the compass goes to an oversensitive state in which, if I turn 90 degrees, the reading changes 180 degrees.&lt;br /&gt;&lt;br /&gt;The problem may be that the compass loses its calibration very easily and needs to be recalibrated, in practice every time you use it. The watch doesn't actually allow recalibrating the compass the same way as it was calibrated on the first use. The manual says that you can recalibrate it just by rotating it slowly around for a full circle, but this method is a bit uncertain as the watch doesn't actually indicate when it has been recalibrated. The watch needs to be kept exactly leveled during calibration, but the badly shaped wrist strap (see above) makes it impossible to level the watch on a flat surface, so you need for example a bottle to put it on. But you can't carry a table and a bottle around the world in your backback, can you?&lt;br /&gt;&lt;br /&gt;The User's Manual says that the compass must be held leveled with the ground for it to be accurate. That' s an accurate statement, even if the compass is not. Tilting the watch even slightly can change the compass reading radically, so that a 1° tilt can sometimes cause 2-3° error in the reading. Sometimes, possibly if calibrated better, the compass is less sensitive to tilting and behaves even reasonably well. The manual says that the watch would warn about tilting (Finnish manual says - English doesn't), but it doesn't give any warning for me however much I tilt or not tilt the watch. I've experimented a lot with this.&lt;br /&gt;&lt;br /&gt;The sensitivity to tilting creates a practical problem: leveling is not easy. You can level the watch most accurately by looking at it horizontally against the horizont, but then you can't read the compass reading without lowering it. The watch isn't really designed to be held leveled. The wrist strap prevents from actually putting the watch on table. I've found a cardboard tube from an empty toilet paper roll to be useful for leveling the watch.&lt;br /&gt;&lt;br /&gt;Pressing the light button creates a really weird light show: the light goes off and on about two times a second so it's flashes quite annoyingly. The display font in the compass mode is really ugly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Other&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A hint for Finnish buyers: Kello- ja kultaliike Suominen in Turku sells these for 200 euros while other places demand 250. Also the price for Lumi is 50 euros cheaper than elsewhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-7760458941365886864?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/7760458941365886864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=7760458941365886864' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7760458941365886864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7760458941365886864'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/07/first-impressions-with-suunto-core.html' title='First Impressions with Suunto Core Wristop Computer'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_GO4ye3jU2p0/SIyE9Nn-etI/AAAAAAAAADI/rb_u9gomKyw/s72-c/IMG_8688_smlcrop.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-6447295453190295573</id><published>2008-07-01T12:57:00.000-07:00</published><updated>2008-08-01T15:39:34.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='consumer electronics'/><title type='text'>Disappointment with Sony Handycam Software</title><content type='html'>I purchased Sony SR-12 in April 2008. I have earlier written about my &lt;a href="http://markogronroos.blogspot.com/2008/03/first-look-at-sony-hdr-sr12-camcorder.html"&gt;first impressions&lt;/a&gt; and &lt;a href="http://markogronroos.blogspot.com/2008/03/six-years-of-evolution-of-sony.html"&gt;compared&lt;/a&gt; the camcorder with my previous Sony camcorder. So far, I have been busy just filming my travels and left watching and editing for later time. One reason for this is that I'm practically unable to watch any of the videos that I have recorded. The SR-12 comes with no less than three Windows utilities:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Handycam Utility - to copy videos to computer and DVDs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;AVCHD Player - to play video from the cam or from DVD&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Picture Motion Browser - to organize, edit and publish videos&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;All of them fail in some respect and are terribly problematic.&lt;br /&gt;&lt;br /&gt;If you like stories of frustration, hopelessness, anger, and an occasional burst of masochistic laugh, read on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Handycam Utility&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Handycam Utility is the software that pops up when you plug a USB cable into your camcorder. In theory, it allows you to watch videos from the camera, copy them to your computer, or to create DVDs from the videos. It fails miserably in most of these tasks. Let us go through the functionalities of the utility.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Video Playback (AVCHD Player)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can launch the AVCHD Player from the Handycam Utility or from the desktop icon. The player allows you to watch videos from the camcorder either from the camcorder or from AVCHD DVDs. This is really what you would expect. The player has, however, a few problems. Probably the most annoying one is that it pauses for about a half a second between each shot. This is especially annoying if your shots are very short. You don't get that on TV, you don't get that on DVD, you don't get that when you play back the recordings on the small screen of the camcorder, so why do you get it on this player? Actually, the two other player softwares that come with the camcorder have the same problem, but the delay is much bigger in them.&lt;br /&gt;&lt;br /&gt;Another problem is that once you start the player, it starts indexing the shots on the camcorder. Indexing one shot takes about 3-5 seconds. I myself take usually well over 1000 shots during a week's travel, so indexing the shots takes about 4000 seconds, that is, over an hour. Currently, I have some 3000 clips stored on the camera, so indexing would take about 4 (four) hours. That's &lt;span style="font-style: italic;"&gt;every&lt;/span&gt; time you start the player, as it doesn't remember the index. The speed is a bit strange as the copy-to-pc functionality of Handycam Utility indexes the pictures maybe twenty times faster.&lt;br /&gt;&lt;br /&gt;Third problem is that the clips are shown 6 (six) clips a page on the screen. You can click on arrow symbols on a page to change to the next page, but with my 3000 clips, it means 3000/6=500 screens! So if I want to get to a page somewhere midway, I have to click the arrow 250 times. No worry, changing page takes maybe 0,5 seconds so it "only" takes some two minutes to get there. This absurdity makes it certain that the developers of the software have never themselves used the software, not at least with their own camera. Or they only record very very long clips, half an hour and so. "Oh, we have tested the program with a large number of clips, twenty!"&lt;br /&gt;&lt;br /&gt;There is also a problem regarding video quality. Sony SR-12 is supposed to record 30 frames/s. I dare to say that the player plays maybe half of that. The problem is clearly visible when someone walks on the screen. The playback is far smoother when you play it from the camcorder to TV, or in Linux after conversion.&lt;br /&gt;&lt;br /&gt;You can also use the AVCHD Player to play AVCHD DVDs that you can burn with the utilities. The problem with DVD playback is that the DVD index shows the clips by date. Typically, you have just one day in the DVD, so the DVD index has just one item. The problem is that you can easily record 200 shots a day (that's my average when traveling), but the software does not have an index to allow you to jump to a certain shot easily. You just need to click the Forward button 200 times to get to the end. Changing to the next clip is not immediate, so it can take a few minutes to get to the end. It's really frustrating.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;PC Backup&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The PC Backup functionality allows you to copy your videos from the camcorder to your PC. That's handy. My problem with the program is that I have only 20 GB disk space on my laptop (I have a 80 GB disk but I have reserved 60 GB for Linux). Windows Vista takes about 18 GB, so I have just 2 GB free, while I need tens of GBs to store my videos. This should not be a problem, as I have a 120 GB USB disk that I can attach to my laptop. The utility actually allows me to configure the folder where the videos are stored. All good? No. After I change the folder to my external USB disk and click the Ok button...it fails and leaves the target folder unchanged. I have tried everything, but it completely refuses to make the "PC Backup" to a USB disk attached to my PC.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;One Touch Disc Burn&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This feature allows you to burn all the videos on your camcoder to an AVCHD format disk. Well, ok, virtually no DVD player plays AVCHD disks, but I knew that beforehand, so I can't complain. My main purpose anyhow in burning such DVDs is to get backups.&lt;br /&gt;&lt;br /&gt;The problem is that the utility can only burn &lt;span style="font-style: italic;"&gt;everything&lt;/span&gt; on the camcorder to DVDs. There's no option to start from a certain disk or a certain date or anything. You can only burn all or nothing. That would not be a problem if it was just one disk, but if you have, say, 80 GB (6 hours) of recordings on your camcorder, burning them all takes 20 DVDs. You can burn them in just one go, so if there was a problem at some point, you have to burn everything from the beginning. And if you go out and shoot more, you have to burn the earlier 20 DVDs again. Really.&lt;br /&gt;&lt;br /&gt;The functionality is even more problematic because it is a bit slow, to say the least. Burning a DVD takes a bit over 10 minutes. So, burning 20 DVDs takes 200 minutes or 3 h 20 m. Plus time to change the disk, of course. So, please remember to have to plug in the power cord to your camera before recording, because otherwise your battery will go empty and you'll have to begin again...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Camcorder Issues with SR-12&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One horribly serious problem with Sony SR-12 is that it doesn't store any unique number for the video clips. The name of a video file stored on the hard drive of the camcorder is just a sequential number starting from 1. If you remove a video from the middle, all the numbers of the later files are reduced by one. So, if you clean up files on your camcorder, you have to remove them all at once.&lt;br /&gt;&lt;br /&gt;The camcorder actually stores the date and time when you shot the clip as the modification time of the file. So you could order the clips by date? Not possible, because if you edit a video on the camera and, say, split it in two, the split files will have modification time of the editing operation. Of course...&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Linux Issues&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I use Linux 97% of time and only use Windows for playing some games. Unfortunately, the Sony camcorder utilities are not available for Linux. The camera itself is just a USB memory, so by just plugging it in, I can easily copy the video clips from the camcorder to my computer. The problem is in actually watching them as no Linux video player currently supports the M2TS video format. No problem, there are ways to convert the M2TS format to formats that I can play on Linux. The problem is that so far, all there ways have failed for me.&lt;br /&gt;&lt;br /&gt;The article &lt;a href="http://www.fsckin.com/2008/01/03/transcoding-mtsm2ts-avchd-video-files-with-free-software/" rel="bookmark" title="Permanent Link to Transcoding MTS/M2TS AVCHD Video Into AVI Files with Free Software"&gt;Transcoding MTS/M2TS AVCHD Video Into AVI Files with Free Software&lt;/a&gt; provides excellent instructions for transcoding regular HD (not FullHD) M2TS AVCHD video files to H.264 AVI. I did not enjoy the shell scripts so I wrote a very similar Python script for my purposes.&lt;br /&gt;&lt;br /&gt;So far, the ffmpeg solution either loses audio altogether or has severe audio synchronization problems. Ffmpeg doesn't have built-in scaling, but I would want to scale my videos to PAL 720x572 resolution or some other resolution lower than FullHD's 1920x1080. Regular YUV image conversion utilities would do, but using them is a bit cumbersome.&lt;br /&gt;&lt;br /&gt;Mencoder provides another solution and works much better. Audio is ok and I'm able to scale the video as I like. The problem is that the resulting video is "jumpy": movement of people is not even but looks somehow rushed. This is probably because of "duplicate frames" that occur during the conversion. Both the input and output are 30 frames/second so there should not be problems with that, but there probably is some .&lt;br /&gt;&lt;br /&gt;I had a really well-working video editing path with my old Sony DV camera, with dvgrab utility for grabbing the video data and Kino for editing it. I really would like to reach that same level with my new Sony.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Summary&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The software that comes with Sony SR-12 camcorder is, to a large degree, unusable for the typical use for which you would expect it to work. SR-12 is not a low-end beginner model, but while definitely not a professional, it is a low-end prosumer model. As such, you expect some usability from the software. A prosumer can expectedly take thousands of video clips and wants to store, convert and edit the clips and use some video editing software to make amateus movies. However, even the basic functionalities are severely lacking.&lt;br /&gt;&lt;br /&gt;I certainly hope that Sony comes with major updates for the Handycam Utility software. Otherwise the problems with the software make the camcorder themselves unusable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-6447295453190295573?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/6447295453190295573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=6447295453190295573' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6447295453190295573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/6447295453190295573'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/07/disappointment-with-sony-handycam.html' title='Disappointment with Sony Handycam Software'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-5102844215833715776</id><published>2008-03-29T11:50:00.000-07:00</published><updated>2008-07-03T14:25:27.494-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><title type='text'>Six Years of Evolution of Sony Camcorders</title><content type='html'>I bought my previous camcorder, Sony DCR TRV50 in 2002. At the time, it was the top model of the Sony consumer camcorders, as is my new Sony HDR SR12. Let us look what has gone better and what worse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GO4ye3jU2p0/R--in4lmQAI/AAAAAAAAACg/_jjU4ueUz6I/s1600-h/IMG_4113_crop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GO4ye3jU2p0/R--in4lmQAI/AAAAAAAAACg/_jjU4ueUz6I/s400/IMG_4113_crop.JPG" alt="" id="BLOGGER_PHOTO_ID_5183540502215409666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Let us first look at the main features for which the SR12 is marketed.&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Feature&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;TRV50&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;SR12&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Resolution&lt;/td&gt;&lt;td&gt;PAL 720x576&lt;/td&gt;&lt;td style="color: rgb(51, 102, 255);"&gt;&lt;b&gt;FullHD 1920x1080&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Video size&lt;/td&gt;&lt;td&gt;13GB/h&lt;/td&gt;&lt;td style="color: rgb(51, 102, 255);"&gt;&lt;b&gt;8GBh&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Audio&lt;/td&gt;&lt;td&gt;2+2 channels&lt;/td&gt;&lt;td style="color: rgb(51, 102, 255);"&gt;&lt;b&gt;5.1 channels&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; font-weight: bold;"&gt;Recording Media&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;MiniDV&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; color: rgb(51, 102, 255);"&gt;&lt;span style="font-weight: bold;"&gt;HDD&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Recording Time&lt;/td&gt;&lt;td&gt;1h(SP) - 1.5h(LP)&lt;/td&gt;&lt;td style="color: rgb(51, 102, 255);"&gt;&lt;b&gt;15h(FullHD) - 50h(HD/LP)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;Price&lt;/td&gt;&lt;td&gt;2050€&lt;/td&gt;&lt;td style="font-weight: bold; color: rgb(51, 102, 255);"&gt;1350€&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;SR12 clearly wins by all of its main features: FullHD (1920x1080) image resolution, 5.1 surround audio, and 120GB hard disk storage capacity. The HDD media also wins for the easiness to browse the media. With MiniDV tapes, you have to fast-forward and rewind the tape to get where you want, and in SR12 the camera simply displays an index of all shots. You can edit the individual shots and delete them freely, which is impossible with MiniDV, at least without scissors and glue.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GO4ye3jU2p0/R--inolmP_I/AAAAAAAAACY/XWRJhOZ-qJM/s1600-h/IMG_4111_crop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GO4ye3jU2p0/R--inolmP_I/AAAAAAAAACY/XWRJhOZ-qJM/s400/IMG_4111_crop.JPG" alt="" id="BLOGGER_PHOTO_ID_5183540497920442354" border="0" /&gt;&lt;/a&gt;The real questions are,  are the actual image and audio quality actually any better, and what about the other features?&lt;h2&gt;Physical features&lt;/h2&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/R--inYlmP-I/AAAAAAAAACQ/2RVJZNaXY58/s1600-h/IMG_4108_crop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/R--inYlmP-I/AAAAAAAAACQ/2RVJZNaXY58/s400/IMG_4108_crop.JPG" alt="" id="BLOGGER_PHOTO_ID_5183540493625475042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Feature&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;TRV50&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;SR12&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Screen size&lt;/td&gt;&lt;td&gt;&lt;b&gt;3,5" 3:4 LCD&lt;/b&gt;&lt;/td&gt;&lt;td&gt;3,5" 9:16 LCD&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Viewfinder&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes, tilting+telescoping, bigger&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Yes, tilting&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Neck strap&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes, 2-point&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Not included, 1-point&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Lens cover&lt;/td&gt;&lt;td&gt;plastic cap&lt;/td&gt;&lt;td&gt;&lt;b&gt;automatic shutter&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The screen size is same for both cameras, about 3.5" with equal width, but TRV50 has a 3:4 screen, which makes it higher. The display in TRV50 was more matt and SR12 has a more polished screen surface. Polishing is generally bad, because it reflects light, but modern coatings help with the problem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GO4ye3jU2p0/R--ioIlmQBI/AAAAAAAAACo/LF6IdCdd_Fc/s1600-h/IMG_4117_crop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GO4ye3jU2p0/R--ioIlmQBI/AAAAAAAAACo/LF6IdCdd_Fc/s400/IMG_4117_crop.JPG" alt="" id="BLOGGER_PHOTO_ID_5183540506510376978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The viewfinder in TRV50 was much bigger than in SR12 and it was possible to telescope it further back. This is important if the battery is bigger than normal, as is my case. A good viewfinder is very important in bright daylight.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GO4ye3jU2p0/R--eUIlmP8I/AAAAAAAAACA/tL9O9rI_UzI/s1600-h/IMG_4119_crop.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GO4ye3jU2p0/R--eUIlmP8I/AAAAAAAAACA/tL9O9rI_UzI/s400/IMG_4119_crop.jpg" alt="" id="BLOGGER_PHOTO_ID_5183535764866482114" border="0" /&gt;&lt;/a&gt;As you may see, the battery is also somewhat smaller in SR12. Well, the SR12 battery is the standard battery, while in TRV50 I have the biggest battery. The battery life with the SR12 standard battery is about 1,5 hours, while the TRV50 battery has 6,5 hours. The 1,5 hours is ridiculously short, as I have experienced that the 6,5 hours is barely enough for a day of touristing. You definitely need a bigger battery, the biggest one is some 150€. Unfortunately, it will also make the camera bigger and, as it has no telescoping viewfinder as TRV50 has (see the picture), using the viewfinder is more difficult, at least when it is leveled and not tilted as in the picture above.&lt;br /&gt;&lt;h2&gt;Performance&lt;/h2&gt;The FullHD SR12 has five times as many pixels as the PAL TRV50. But does this mean better actual resolution? The lenses are about the same size, with the lens of SR12 possibly a bit smaller, so the optical resolution may not be any better. On the other hand, in digital cameras, the resolution has grown just fine while keeping the optics about the same size. So the size might not matter.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_GO4ye3jU2p0/R--im4lmP9I/AAAAAAAAACI/pwjWX81kawk/s1600-h/IMG_4106_crop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_GO4ye3jU2p0/R--im4lmP9I/AAAAAAAAACI/pwjWX81kawk/s400/IMG_4106_crop.JPG" alt="" id="BLOGGER_PHOTO_ID_5183540485035540434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Comparing the actual performance of the cameras would require careful testing. I may do such tests later, but for now I will just present a rough evaluation.&lt;br /&gt;&lt;br /&gt;The actual resolution of video in SR12 is clearly better than in TRV50, but also obviously not the five times as good as the number of pixels would suggest. I estimate that the actual resolution is only about two times better.&lt;br /&gt;&lt;br /&gt;One bigger problem is that as you five-fold the number of pixels, you drop the level of light for each pixels to one fifth. It is not probable the the light detection efficiency of CMOS chips has five-folded in six years. However, there is some advance in noise reduction in image processing. My observations support this logic, the SR12 seems to perform much worse in low-light conditions.&lt;br /&gt;&lt;br /&gt;SR12 is has an optical Super SteadyShot image stabilizer, while TRV50 has non-optical. While optical stabilizers are generally considered much better than non-optical, I can not see real difference between the cameras. One reason may just be the size: the smaller and lighter SR12 has less momentum to prevent shaking in the hand, and the optical stabilization could merely compensate for the size. I have noticed some difference though. TRV50 apparently stabilizes small vibrations well, and SR12 stabilizer also bigger. But the stabilization in SR12 makes the video very jerky when the camera moves more than the area of stabilization, resulting in sudden jumps in the video.&lt;br /&gt;&lt;h2&gt;Extra Features&lt;/h2&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Feature&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;TRV50&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;SR12&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bluetooth&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes&lt;/b&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Internet&lt;/td&gt;&lt;td&gt;&lt;b&gt;Yes: Web, Email&lt;/b&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;Face detection&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; font-weight: bold;"&gt;Yes&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;Face index&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; font-weight: bold;"&gt;Bad&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Yes, TRV50 actually has a web browser and email, and the Bluetooth connection for connecting to Internet via a mobile phone. I've used the web browser a countless times before I had other mobile browsers, and it actually works. Well, it is slow and the touchscreen keypad is rather bad, but it works.&lt;br /&gt;&lt;br /&gt;SR12 has an interesting face detection feature. Yes, it actually detects faces on the video. It uses the faces for two purposes: to set focus and exposure parameters, and to make a video index out of the faces. Unfortunately, the video index is only for the particular shot: it doesn't make an overall index of faces in all shots. The face indexing is also very picky and doesn't index most of the faces, therefore making it basicly useless.&lt;br /&gt;&lt;h2&gt;Conclusions&lt;/h2&gt;There has clearly been progress in six years. While the nominal resolution has grown five-fold, the increase in actual resolution may not be much better. Low-light performance may even have gone much worse. Physical features such as the display, viewfinder, and neck strap have also gone worse, though there are also advances. The biggest progress is actually in software and having a hard disk drive instead of tapes helps a lot in organizing and playing back videos.&lt;br /&gt;&lt;br /&gt;That's it for now. I may update this article later and write other reviews about some more specific features of SR12. Especially, I will need to research the video resolution, low-light capability and the image stabilization.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;See also:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://markogronroos.blogspot.com/2008/07/disappointment-with-sony-handycam.html"&gt;Disappointment With Sony Handycam Software&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-5102844215833715776?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/5102844215833715776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=5102844215833715776' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5102844215833715776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5102844215833715776'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/03/six-years-of-evolution-of-sony.html' title='Six Years of Evolution of Sony Camcorders'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_GO4ye3jU2p0/R--in4lmQAI/AAAAAAAAACg/_jjU4ueUz6I/s72-c/IMG_4113_crop.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-5433624190684348004</id><published>2008-03-25T16:20:00.000-07:00</published><updated>2008-08-01T15:38:51.391-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='consumer electronics'/><title type='text'>First Look at Sony HDR-SR12 Camcorder</title><content type='html'>Finally, I got it, my new FullHD digital video recorder, Sony HDR-SR12. This is the most high-end of this spring's consumer series from Sony.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GO4ye3jU2p0/R-mMsIlmP1I/AAAAAAAAABM/tljQETM4q-o/s1600-h/IMG_4085_smlcrop.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GO4ye3jU2p0/R-mMsIlmP1I/AAAAAAAAABM/tljQETM4q-o/s400/IMG_4085_smlcrop.jpg" alt="" id="BLOGGER_PHOTO_ID_5181827536113778514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The camera is really small, much smaller than my previous digital camcorder, Sony DCR TRV-50E, which was also very small at the time when I got it. SR12 fits well in the pocket of my winter jacket and really well in my backpack.&lt;br /&gt;&lt;br /&gt;The package did not include a real camera bag, just a think cloth pouch, which I think is probably better than a bag. I usually keep my kamera in my backbag, where it's already protected so there's no need for thick bag, but a thin cloth is good to keep scratches out.&lt;br /&gt;&lt;br /&gt;The optical Super SteadyShot is better than the non-optical one in TRV50, but not much better. A tripod is still an essential aid for video camera.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/R-mMs4lmP3I/AAAAAAAAABc/zkQHQ4Ohle8/s1600-h/IMG_4100_smlcrop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/R-mMs4lmP3I/AAAAAAAAABc/zkQHQ4Ohle8/s400/IMG_4100_smlcrop.JPG" alt="" id="BLOGGER_PHOTO_ID_5181827548998680434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was quite disappointed that the camcorder did not include &lt;i&gt;any&lt;/i&gt; kind of shoulder strap. This is really unusual. It can be purchased as an accessory, but the fastening does not look very good. I will try to use the shoulder strap from my TRV50 or some other camera.&lt;br /&gt;&lt;br /&gt;The 3,5" display is really crisp and clear. No wonder, as the resolution is 1920x480. The horizontal resolution probably contains separate R, G, and B pixels, so it's not really that high resolution, but very good anyhow. It's a touchscreen, so I'm worried how it will look in a year, but at least so far it has seemed to repel the dirt from my fingers quite well.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GO4ye3jU2p0/R-mMsolmP2I/AAAAAAAAABU/CvuQ95oFQtY/s1600-h/IMG_4089_smlcrop.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GO4ye3jU2p0/R-mMsolmP2I/AAAAAAAAABU/CvuQ95oFQtY/s400/IMG_4089_smlcrop.JPG" alt="" id="BLOGGER_PHOTO_ID_5181827544703713122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Transferring the video files to my Linux computer was easy, just plug the cable in the computer and the camera appears on desktop as an external media device. The problem was that the AVCHD video files are &lt;tt&gt;mts&lt;/tt&gt; files, which are not easily opened. Luckily, I found an excellent article on &lt;a href="http://www.blogger.com/%20http://www.fsckin.com/2008/01/03/transcoding-mtsm2ts-avchd-video-files-with-free-software/"&gt;Transcoding MTS/M2TS AVCHD Video Into AVI Files&lt;/a&gt;. Installing the software was not straight-forward, as it required some badly documented manual work. For example, the ldecod had to be downloaded from an obscurely documented location. After that, the program worked on standard definition video files with 1440x1080 resolution. I had to fix the program to work with FullHD 1920x1080 resolution. After that, I got video. I was very pleased at the quality, which really was clear image at the full resolution. Even a still image capture from the video was really crisp, even in indoor light conditions.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GO4ye3jU2p0/R-mTiIlmP4I/AAAAAAAAABk/66JJw0LSjjA/s1600-h/sr12-video-capture-20080325.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GO4ye3jU2p0/R-mTiIlmP4I/AAAAAAAAABk/66JJw0LSjjA/s400/sr12-video-capture-20080325.png" alt="" id="BLOGGER_PHOTO_ID_5181835060896481154" border="0" /&gt;&lt;/a&gt;&lt;div align="center"&gt;(Click on the image for the full-size image.)&lt;/div&gt;&lt;br /&gt;Notice that the image above is not a still photograph taken with the camera, but a still capture from the video stream.&lt;br /&gt;&lt;br /&gt;Unfortunately the video is 1920x1080i, that is, interlaced, just like in old PAL camcorders such as my old TRV-50. This is the most prominent visual problem that makes the video look cheap if there is basicly any movement at all in the video. Luckily, interlacing can usually be removed quite well without halving the video resolution. Apparently, the conversion software doesn't remove the interlacing, so I'll have to study the problem closer.&lt;br /&gt;&lt;br /&gt;Playback is another big issue. No program I have can decode the AVI fast enough. I removed scaling and interlacing from Kaffeine and now it almost works if there is very little movement in the video. If I can't get the playback fixed, I have to reduce the resolution of the videos I save.&lt;br /&gt;&lt;br /&gt;The audio is rather badly out of sync. This seems to be a common problem for people using the program, so I will have to inspect it further. It may also be caused by the speed problem, as, for example, kaffeine plays audio just fine at normal speed but the video is slow.&lt;br /&gt;&lt;br /&gt;I also got a bluetooth microphone for the camera. The problem is that the bluetooth transceiver is ridiculously big. Well, more about that later.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;See also:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://markogronroos.blogspot.com/2008/07/disappointment-with-sony-handycam.html"&gt;Disappointment With Sony Handycam Software&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-5433624190684348004?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/5433624190684348004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=5433624190684348004' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5433624190684348004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5433624190684348004'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/03/first-look-at-sony-hdr-sr12-camcorder.html' title='First Look at Sony HDR-SR12 Camcorder'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_GO4ye3jU2p0/R-mMsIlmP1I/AAAAAAAAABM/tljQETM4q-o/s72-c/IMG_4085_smlcrop.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-923050872381907993</id><published>2008-02-14T02:53:00.000-08:00</published><updated>2008-02-14T03:20:19.212-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><title type='text'>More experiments with gigabit</title><content type='html'>My &lt;a href="http://markogronroos.blogspot.com/2008/02/gigantic-disappointment-in-gigabit.html"&gt;previous experiences&lt;/a&gt; regarding my new gigabit network were disappointing. I studied the problem further by using &lt;span style="font-style:italic;"&gt;iperf&lt;/span&gt; to generate raw traffic between my two Linux PCs and using KSysGuard and &lt;span style="font-style:italic;"&gt;iftop&lt;/span&gt; to monitor the traffic. Now I got a whopping 950Mb/s, near the theoretical maximum. Well, it should have gone over 1000Mb/s, so there's still something lacking a bit.&lt;br /&gt;&lt;br /&gt;The gigabit LAN with &lt;a href="http://en.wikipedia.org/wiki/Gigabit_Ethernet#1000BASE-T"&gt;1000baseT/FD&lt;/a&gt; link mode is supposed to be full duplex, so I tried two-way traffic with iperf. The result was, however, roughly a gigabit in total, so in effect it was half-duplex. This may be due to the PCI bus that the integrated network card uses. Normal &lt;a href="http://en.wikipedia.org/wiki/Peripheral_Component_Interconnect"&gt;PCI is&lt;/a&gt; a 32-bit bus and operates at 33Mhz frequency, giving (32*33M) roughly one gigabit of capacity. But, that is the entire bus capacity, it is shared with other devices, and full duplex gigabit would need twice that. So, ok, I got near the maximum.&lt;br /&gt;&lt;br /&gt;The performance of Buffalo LinkStation still feels strange. With KDE's file manager as well as with smbclient, I got some 10MB/s. By actually mounting it as a filesystem with smbmount, I only got a fraction of that, perhaps some 1.5MB/s. That's 1.5% of the "gigabit" capacity! With Windows XP under Vmware, I got about the same as with Linux smbclient, some 10MB/s. I'm yet to test it with non-vmware XP more accurately, but it may be a bit faster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-923050872381907993?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/923050872381907993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=923050872381907993' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/923050872381907993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/923050872381907993'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/02/more-experiments-with-gigabit.html' title='More experiments with gigabit'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-7182493700512685788</id><published>2008-02-12T13:51:00.000-08:00</published><updated>2008-02-12T14:35:57.722-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><title type='text'>Assembly of Ungoliant</title><content type='html'>I updated my hardware recently, so I'll tell all the interesting details here.&lt;br /&gt;&lt;br /&gt;I first bought a new case with 500W power supply for a motherboard I planned to buy from my fellow worker. Unfortunately, the chipset fan on the motherboard had gone bad and created great amount of problems when playing games, so I made a quick purchase at local hardware store.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Intel Core 2 Quad q6600 G0 2,4GHz processor&lt;/li&gt;&lt;li&gt;Abit IP35 ATX motherboard with Sata2, Gigabit LAN and so on&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MSI GeForce 8800 GT 512MB OverClocked graphics card&lt;/li&gt;&lt;li&gt;4GB of 800MHz DDR2 RAM&lt;/li&gt;&lt;li&gt;DVD-RW drive (I needed a new one in black - oh the vanity)&lt;/li&gt;&lt;li&gt;Antec Sonata III case with 500W power supply&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The Quad is the model with G0 stepping, making it ideal for overclocking. In even simple tests, some have gotten some 35% overclocking. I might overclock it to 3GHz (+25%) at some point. The MSI 8800 GT is factory-overclocked by 10%.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/R7IVzPFgiKI/AAAAAAAAAAU/oMZE8hE8XKI/s1600-h/IMG_3827_blog.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/R7IVzPFgiKI/AAAAAAAAAAU/oMZE8hE8XKI/s400/IMG_3827_blog.jpg" alt="" id="BLOGGER_PHOTO_ID_5166215692514527394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Antec Sonata case was a really pleasant surprise. First of all, it looks good, which its shining black finish -- the primary reason for naming the machine Ungoliant. Unfortunately, the black finish is very tender and I got it badly scratched very easily. Maybe I should have bought some lacquer to protect it from the environment. Another pleasant thing was the organization of hard drives so that they are loaded on sleds and are easily accessible from the side. The side panel opens easily with a handle. On the back there is an adjustable case fan. On the front panel there are two beautiful blue leds, one for power and one for hard drive. This case is a dream.&lt;br /&gt;&lt;br /&gt;So, I got the stuff, piled it on my desk at work, and started unboxing.&lt;br /&gt;&lt;br /&gt;The Core 2 Quad processor was really small and had an enormous fan. Here, I have removed the bottom cover and all the connectors are visible. In the center, there are some small components.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_GO4ye3jU2p0/R7IcCfFgiMI/AAAAAAAAAAk/Bc76Dyz-OUI/s1600-h/IMG_3841_blog.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_GO4ye3jU2p0/R7IcCfFgiMI/AAAAAAAAAAk/Bc76Dyz-OUI/s400/IMG_3841_blog.JPG" alt="" id="BLOGGER_PHOTO_ID_5166222551577299138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The cooler element had interesting pattern. At the bottom, it had the paste already spread, so I just needed to attach it on the processor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/R7IcCPFgiLI/AAAAAAAAAAc/U60nvX0HaM0/s1600-h/IMG_3835_blog.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/R7IcCPFgiLI/AAAAAAAAAAc/U60nvX0HaM0/s400/IMG_3835_blog.JPG" alt="" id="BLOGGER_PHOTO_ID_5166222547282331826" border="0" /&gt;&lt;/a&gt;Mounting the processor in the socket was easy. Mounting the cooler+fan on the processor wasn't. It had to be fastened to the motherboard with four hatches and I have to say, it was &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; hard and needed a lot of muscle. Fortunately, my fellow worker with more experience in assembling machines helped me with the cooler a bit so I got it fastened safely.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_GO4ye3jU2p0/R7IcC_FgiOI/AAAAAAAAAA0/F_Z91K6FGY4/s1600-h/IMG_3845_blog.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_GO4ye3jU2p0/R7IcC_FgiOI/AAAAAAAAAA0/F_Z91K6FGY4/s400/IMG_3845_blog.JPG" alt="" id="BLOGGER_PHOTO_ID_5166222560167233762" border="0" /&gt;&lt;/a&gt;The rest was easy. Below is the motherboard with just the graphics card missing. The chipset is cooled with a heat pipe. I later noticed that the 2x2GB RAM combs were actually just 1GB. I returned them to the store and got my 2GBs.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/R7IcDPFgiPI/AAAAAAAAAA8/FlIE6jWpKbY/s1600-h/IMG_3848_blog.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/R7IcDPFgiPI/AAAAAAAAAA8/FlIE6jWpKbY/s400/IMG_3848_blog.JPG" alt="" id="BLOGGER_PHOTO_ID_5166222564462201074" border="0" /&gt;&lt;/a&gt;Below is Ungoliant ready to be transported to its lair:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_GO4ye3jU2p0/R7IeZPFgiQI/AAAAAAAAABE/7vEXE6s5aGw/s1600-h/IMG_3854_blog.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_GO4ye3jU2p0/R7IeZPFgiQI/AAAAAAAAABE/7vEXE6s5aGw/s400/IMG_3854_blog.JPG" alt="" id="BLOGGER_PHOTO_ID_5166225141442578690" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-7182493700512685788?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/7182493700512685788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=7182493700512685788' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7182493700512685788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/7182493700512685788'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/02/assembly-of-ungoliant.html' title='Assembly of Ungoliant'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_GO4ye3jU2p0/R7IVzPFgiKI/AAAAAAAAAAU/oMZE8hE8XKI/s72-c/IMG_3827_blog.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-5411427076931914154</id><published>2008-02-11T08:02:00.000-08:00</published><updated>2008-08-01T15:40:23.028-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><title type='text'>Gigantic disappointment in gigabit</title><content type='html'>I bought a cheap 35€ gigabit switch on saturday and some more cat-6 cables, in an attempt to get my home network upgraded to gigabit speeds. It failed.&lt;br /&gt;&lt;br /&gt;I found out that my new "gigabit" 500GB Buffalo LinkStation was not able to provide more than one tenth of the gigabit, about 10MB/s with Samba from Linux. With FTP, I was able to get enormous 15MB/s. With Windows XP, the access may have been a bit faster, though I did not measure that more accurately, because Windows doesn't report transfer speed when copying files. Between two Linux PCs, I got a maximum of 35MB/s with scp. Curiously, with KDE file transfer over sftp connections, I got only about 10MB/s.&lt;br /&gt;&lt;br /&gt;It appears that I was a bit too blind expecting that gigabit upgrade would be as painless as 10Mbps and 100Mbps upgrades were years back. Apparently, the current PC hardware simply can't deliver gigabit. The integrated "gigabit" network cards apparently use PCI bus, which has theoretical maximum of one gigabit (32 bits * 33 MHz). But that's only in one direction, while gigabit ethernet is usually Full Duplex, so it would require two gigabits of bus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-5411427076931914154?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/5411427076931914154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=5411427076931914154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5411427076931914154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/5411427076931914154'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/02/gigantic-disappointment-in-gigabit.html' title='Gigantic disappointment in gigabit'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1850995963347059416.post-2876904180659244747</id><published>2008-02-09T10:28:00.000-08:00</published><updated>2008-02-11T05:53:31.761-08:00</updated><title type='text'>Blog created</title><content type='html'>Ok, here it goes. I've been planning to put up a blog or ages, but haven't gotten myself to do it. One reason has been the lack of a proper software. My intention has been to put the log in my home pages, but it would require a lot of technical solutions for which I don't have the time for now.&lt;br /&gt;&lt;br /&gt;It will be interesting to see how Blogger fits to my needs. I write in two languages and it could be that this is not suitable for that. I also write about many different topics, and would like to separate these topics from each other, while keeping some connections.&lt;br /&gt;&lt;br /&gt;So, here it is and I'll think about the technical solutions again later in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1850995963347059416-2876904180659244747?l=markogronroos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markogronroos.blogspot.com/feeds/2876904180659244747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1850995963347059416&amp;postID=2876904180659244747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/2876904180659244747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1850995963347059416/posts/default/2876904180659244747'/><link rel='alternate' type='text/html' href='http://markogronroos.blogspot.com/2008/02/blogi-luotu.html' title='Blog created'/><author><name>Marko Grönroos</name><uri>http://www.blogger.com/profile/05590239961409100898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
