<< March 2006 | Home | May 2006 >>

Hey Kids, Don't!

Don't build your own scripting language.

First there's the Web frameworks. And now this.

This build your own scripting language thing must be stopped, right now!

We have more than 200 of them already.

Write some decent applications, would you?

Applications! Applications!! Applications!!!

You know, something that one can click on and get some work done or have some fun.

Tags :

Bloglines.com Adds Ping Support

Now my posts will show up there the minute I push the Publish button.

Ping Away, Bloggers

Here ye, here ye... Bloggers & publishers, Bloglines can now accept pings directly from you in two ways. Read more at http://www.bloglines.com/services/api. If you already ping Ping-O-Matic, or if your blog is hosted with LiveJournal, TypePad or MovableType, no need to lift a finger. We've already got you covered.

Bloglines readers, you too will benefit. Blog posts from publishers who choose to ping us will show up within minutes, sometimes seconds, of being posted.

- Your Bloglines Team

And I'll find out if it works.

[Update] No. It didn't seem to work.

2006-04-28 16:31:22,352 [Thread-130] ERROR net.sourceforge.pebble.webservice.UpdateNotificationPingsCl
ient  - Exception when calling weblogUpdates.ping at http://www.bloglines.com/ping
java.io.IOException: Server returned HTTP response code: 500  for URL: http://www.bloglines.com/ping
        at org.apache.xmlrpc.XmlRpcClient$Worker.execute(XmlRpcClient.java:444)
        at org.apache.xmlrpc.XmlRpcClient$Worker.executeAsync(XmlRpcClient.java:363)
        at org.apache.xmlrpc.XmlRpcClient$Worker.run(XmlRpcClient.java:349)
        at java.lang.Thread.run(Thread.java:595)

[Update] Giving it another try at Fri Apr 28 22:05:07 CDT 2006

[Update] Silly me, Pebble doesn't seem to send out a ping when I update an entry. The real test will come when I post the next entry.

Tags :

Sun Open Sourced Java(TM)

And I don't even know it.

(This from Sun press release two days ago:)

Sun Press Release: Sun's vision is more relevant today than ever before and is embodied in the product and service breakthroughs it has recently brought to market - from the 'pay-per-view' utility computing Sun Grid and the eco-friendly 32-processor-on-a-chip Coolthreads system, to Sun's innovative software pricing model for the Java Enterprise System and the open sourcing of Java[tm], the Solaris[tm] Operating System and the UltraSPARC T1 chip.

Please, Red Hat and everybody else who make Linux distributions, why can't I get Sun JDK out of the DVD?

[Update] The article has been corrected:

Sun Press Release: Sun's vision is more relevant today than ever before and is embodied in the product and service breakthroughs it has recently brought to market - from the 'pay-per-view' utility computing Sun Grid and the eco-friendly 32-processor-on-a-chip Coolthreads system, to Sun's innovative software pricing model for the Java Enterprise System and the open sourcing of Java Enterprise Edition, the Solaris[tm] Operating System and the UltraSPARC T1 chip.

Well, I have the same question: Why can't I get Sun Java EE out of the Fedora Core 5 DVD? After all, it is Open Source.

Tags :

eXtremeDB eXposed

Clever title, isn't it? Jonathan thinks so.

OK. Today's OCI C++ lunch features Rob Martin talking about McObject's eXtremeDB embedded database product.

First person is Rob now.

We evaluated this product because a key customer wanted to use a embedded database as the foundation for their next generation products. eXtremeDB won the evaluation.

It is a memory resident database; can be put in the process space, or in shared memory. If you put it in heap, there is a feature that allows you to persist the data.

Performance of this thing is extremely good. Transactions incur low overhead.

It is a commercial product.

We found it to be fairly reliable. We did hit some problems. But they are all resolved by either us understanding the product better, or by McObject acknowledges them as bugs and subsequently fixed.

Small foot print, not heavy weight.

Times Ten, a competitor of eXtremeDB was bought by Oracle.

They have a DDL and a schema compiler. It supports structs, including nested structs. But a structure needs to be inside a class for instantiation.

Ways to identify objects in the database: oid (database wide), autoid (system generated serial number), ref (embedded reference to an entity's oid.)

Standard CRUD. Finders. Lookup by hash. Lookup by tree index (unique as well as non-unique.)

Transactions are simple: read, write, commit, rollback. Transactions are database scoped. You can change it through build time switches, but for our usage scenarios, database wide locking turns out to be optimal.

Kevin, our resident eXtremeDB expert, chimed in: "you have to understand how fast their transactions is. They are in microseconds."

There is also a limit on the number of entities that you can touch within a transaction.

Supports persistence which is essentially transactions logging. It depends on the OS file system. On recovery, one "sync"s the disk image with the memory image.

eXtremeDB claims to have object semantics. But the content is rich structure types. The primary interface is structured procedure calls. There is a thin object wrapper that is generated from the DDL. It feels more relational to me than object based.

The company (McObject) is in Seattle with a group in Washington, DC. They do their thing through memory management and aggressive locking strategies tailored to the app. They avoid heap allocation of memory in the engine.

We felt very comfortable with this database. We didn't do much C++ structures in our code and uses eXtremeDB extensively.

Their support staff is very responsive. The turn around time is usually within 24 hours. All of our support requests have been resolved. We did find out one bug regarding a clever bit of threading code (transaction without mutex) that only manifests itself on dual CPU machines running Windows and that one took two or three rounds.

OCI and McObject are partners of each other now.

Their DDL supports: signed, unsigned char (64K limit) enum, struct (only fixed size structs can be oids), autoid_t, blog, data, ref, string, time, vector.

And here's an example:

declare database eeDemo;
declare oid personId[1024];

compact class Location {
  string streetAddress;
  string city;
  string state;
  string zipcode;
  autoid[4096];

  tree byZipCode;
};

compact class Person {
  oid;
  autoid_t home;
  autoid_t work;
  autoid_t temp;
};

We added MPC support for compiling the eXtremeDB schema. We don't run it by hand.

The generated code are C and C++ header and implementation files. The generated C code will have functions for Person_home_get() and Person_home_put(). The generated C++ code will have a Person class that has home_get() and home_put() methods.

Search methods and comparison methods are generated. Cursor manipulation code for using any tree index is also generated. A checkpoint() method is generated to update hash indexes after entity manipulation.

The client code looks like this:

mco_error_set_handler(onError);
start();
uint4 dbSize = (1 * 1024 * 1024);
uint2 pageSize = 4096;
void * heap = malloc(dbSize);
mco_db_open("eeDemo");
mco_db_h dbHandle;
connect(dbName, &dbHandle);
mco_trans_h txn;
startWriteTxn(&dbHandle, &txn);
rollback(&txn);
startReadTxn(&dbHandle, &txn);

{
  mco_trans_h txn2;
  startReadTxn(&dbHandle, &txn2);
  commit(&txn2);
}

disconnect(&dbHandle);
closeDB("eeDemo");
stop();

We wrote a set of wrappers that made using eXtremeDB very handy, including a DB registry, Transaction, TransGuard, ReadTransGuard, WriteTransGuard, WriteTransGuardProxy. The various trans guards uses the C++ guard concept to make database code dead easy.

The eXtremeDB product has some features, such as SQL and events, that we did not use.

Rob is done. First person is Weiqi now.

Until next time.

The Rise Of The Bloggers

Blogger Jonathan Schwartz takes over as Sun CEO.

Tim Bray's take on the Sun CEO succession:

Tim Bray: It’s not that complicated, really. Bloggers are taking over the world. Resistance is futile; you will be assimilated.

Uncharacterisitcally, Jonathan Schwartz hasn't blogged about it yet.

[Update] Jonathan Schwartz blogged about When I First Met Scott....

Tags :

Peculiar Error Message From Firefox

Help!

I received this error message from Firefox when I tried to start it:

I'd appreciate any hint, help, pointer that anybody can give me.


Thanks,
--
Weiqi Gao

Tags :

Selenium: Automatable In-browser Functional Testing For Web Apps

At today's OCI Java lunch, our resident automated building and testing zealot Mario Aquino talked about an interesting tool called Selenium.

I forgot to blog it while he's talking. So I'm doing a little bit of catching up tonight. And all of this is from my impression from one hour of presentation/demonstration.

Selenium

  • tests web applications
  • while running them inside the browser
  • with FIT style table driven test scripts
  • that exercises the HTML page's links, buttons, text fields, etc.
  • and asserts and verifies various on-screen values
  • for fields selected by IDs, names, or XPath expressions

Selenium scripts

  • have alternative representations as
  • Java code that can be put into JUnit tests and become part of the hourly build
  • Ruby code that can be invoked through rake
  • or Selenium "wiki" code that's just a tad easier to write than HTML tables

There is a Selenium IDE that can be installed as a Firefox extension. It allows one to write Selenium scripts by recording a browsing session. (In the screenshot you can see me clicking on the Save button to save a draft of this post, and then clicking on the link to the artile on the Drafts screen to resume editing.)

Mario did mention a few quirks. One is that if ran as JUnit tests, Selenium tends to not close the browser when it's done, leaving thousands of open browsers behind on the testing machine. Another is that "clickAndWait" doesn't work with AJAXy buttons or links.

Selenium was developed by ThoughtWorks for one of their projects and is now Open Source (Apache 2.0 License).

Kristin Has a Blog!

One more OCI bloggers.

This just in: Kristin announced "I created my first blog!" about five minutes ago.

See Kristin's Comments for details.

Tags :

Visual Studio Express Edition Free Permanently

Microsoft: 10. How much will these products cost?

Effective April 19th, 2006, all Visual Studio 2005 Express Editions are free permanently. This pricing covers all Visual Studio 2005 Express Editions including Visual Basic, Visual C#, Visual C++, Visual J#, and Visual Web Developer as well as all localized versions of Visual Studio Express.

SQL Server 2005 Express Edition has always been and will continue to be a free download.

Also, according to Microsoft's Coding4Fun web site, in the five months since its launch, Express has been downloaded over 5 million times. That includes the three downloads from me.

Tags :

Java News Brief (JNB): EJB3 Persistence Jumpstart

Not your father's EJB!

As Eric Burke has already mentioned, this month's OCI Java News Brief (JNB) features Jeff Brown's very approachable introduction to JSR-220—EJB3 Persistence Jumpstart:

Jeff Brown: The examples covered here really only begin to cover the capabilities defined by the EJB 3 Persistence specification. The hope is that this information will serve as a practical guide to help developers get started with the API. The best way to get started with the API is to setup a development environment that will allow examples like those discussed in this article to be executed and experimented with. Developers will find that compared with writing JDBC code or even working with other object-to-relational mapping solutions, the EJB 3 Persistence API is very straightforward and easy to work with.

As with all JNB articles, this one gently leads you into the EJB3 code examples by first providing you with the necessary information to set up your development environment. Go ahead, print it out, follow along, and try out the examples.

"Aha, that what they meant when they said EJB3 is easy!" That's my reaction after reading this article. I hope it will be yours too.

Tags :

Code Camp Comes To St. Louis

Kyle Cordes was on hand at the St. Louis JUG meeting this evening to get the word out about a novel concept of a conference—Saint Louis Code Camp.

What is a Code Camp? If you haven't had the pleasure of experiencing a Code Camp first hand, check out the Code Camp Wiki. In particular, you should read the Code Camp Manifesto.

Back? Great. Now, perhaps you are wondering, what does this have to do with me? You could also be wondering why you haven't been to a Code Camp and how you too can have a Code Camp. I have great news. Code Camp has come to St. Louis! Now, you have a Code Camp. Even better, you can help make the St. Louis Code Camp great by attending, by volunteering, or - even better - by signing up to be a presenter.

The St. Louis Code Camp is first and foremost about the community. It is the perfect opportunity to start your career as a presenter, or just hang out with a bunch of people like yourself. And best of all, just like the Manifesto says, it is free. We look forward to seeing you there.

The St. Louis Code Camp is organized by Brian Button. It will happen on May 6th and 7th. It's free, but registration is required.

VOIP, Asterisk, Java, ...

Can you use an open source PBX?

Tonight's St. Louis JUG meeting featured Mike Plezbert from Agilis Systems talking about VOIP and the open source Asterisk PBX system.

Mike opened the presentation with a demo. He asked the audience for a cell phone number and ran a little script that drives an Asterisk Gateway Interface Manager program to call the number. The phone rang. The callee answered with the speaker on. An audio file played on the phone. The callee was then instructed to press 1, 2, or 3. He pressed 2. The script printed "pressed 2" on the screen and hung up the call.

Mike then proceeded to talk about VOIP and Asterisk technologies in terms that a non-specialist like me can understand. (The slides will be posted to the St. Louis JUG Knowledgebase in a few days.)

The presentation was lively with many audience member questions and answers. Some centered around the VOIP technology details and some centered around the business of Agilis Systems, which is by itself pretty interesting. The St. Louis Post-Dispatch did a write-up about them last year. You can find the article here.

BTW, they are hiring. They also invited JUG members to a Half-Life 2 Frag Fest. Sorry I did not copy down the details.

Tags :

Google Calendar Is Out

I love it. :)

Cedric Beust:

Google Calendar is now live

The subject says it all... Go ahead: log in, play around and post your suggestions and impressions as long as it's not "It doesn't work on Safari" (usually the first thing that Mac users say when they see it).

I took a look, and liked what I see. Such clean and simple UI:

[Update] OK, that was a joke. I logged in on the second try. It looks just like the other calendar programs that I have used in the past (Outlook, Evolution, etc.) with some of that "I know what you want to do" intention guessing UI power.

Now comes the real question: I used calendaring software only for work. And for the kinds of meetings that we schedule (planning the next release of a product, vendor demos, etc.) I'm not sure if I want that kind of information to be stored outside the company.

Tags :

How To Pronounce URLs

The first

Have yor ever noticed how, on the radio, either in regular programming or in advertisement, people say URLs differently?

Take www.mywebsite.com for example. When we say it in normal conversation, we say w-w-w-dot-mywebsite-dot-com. On the radio, more often than not, they'll say w-w-w-mywebsite-dot-com. They'll omit the first "dot" in the URL. Sometimes they'll even say w-w-mywebsite-dot-com, omitting a "w".

Have you also noticed that they can't seem to agree on a term for the action of visiting a website by typing its URL into the address box and then press enter. They use terms like "logon to ..." or "click on ..." or "surf over to ..." or "go to ...".

Tags :

Red Hat To Acquire JBoss

$420,000,000!

Red Hat: Red Hat will acquire JBoss for approximately $350 million in initial consideration, plus approximately $70 million subject to the achievement of certain future performance metrics. The transaction consideration is composed of approximately 40% in cash and 60% in Red Hat common stock. The acquisition is expected to be completed around the end of Red Hat's first fiscal quarter (May 2006), subject to customary closing conditions, including regulatory approval.

JBoss: How will the open source community benefit?

Both Red Hat and JBoss are dedicated to preserving the integrity of open source. This union will bring together two of the market and brand leaders in open source and create the industry's first comprehensive open source platform for the enterprise.

The combined companies will continue to invest in development of new open source technologies while reaching out to the wider open source community as a whole to encourage continued and active participation in the success of combined open source projects.

Fedora Core 5: The Two Week Review

.NET and Java delivers desktop applications.

I've been running Fedora Core 5 on my desktop machine for 16 days. I posted snippets of first impressions about two Gnome misfeatures and the screencast utility earlier. As promised, this post summarized my overall impression of the Fedora Core 5 release.

Aside from the irritants I mentioned earlier, my over all impression of Fedora Core 5 is very positive. Some highlights:

Free Java

For people who are used to the Sun JDK, the Free Java stack sounds like a patch work of many projects, a VM project here, a class library project there, a native compiler in GNU Compiler Collection, another compiler in Eclipse. However, what people may not know is that the Fedora people did their best to package the various pieces together to provide an development environment that mimics Sun JDK so that users can start developing Java programs using the familiar javac/java/jar/javadoc commands.

Three SWT applications are included with Fedora Core 5: Eclipse, Azureus the BitTorrent tool, and RSSOwl the blog aggregator. They seem to be stable and usable.

Here's a screenshot of Azureus in action. I'm downloading Ubuntu Dapper! :)

Here's a screenshot of RSSOwl in action. It's features are comparable with other desktop blog aggregators that I've tried. I doubt I'll switch from Bloglines.com but RSSOwl is definitely a usable application. I particularly liked the HTML rendering component they used.

I also tried to compile and run some of my short Java classes. They pretty much all compile and run fine, even some of the Swing classes that use JTree and JTable. I do have to remove some com.sun.* references, mostly related to the UIManager.

Finally, I tried to deploy Pebble into the Tomcat 5.5.15 web container. I ran into some problems. With 2.0.0-M1, Tomcat went into a 100% Cpu infinite loop of the gij interpreter. With 1.9, I had several problems. I had a JSP error which is fixed by deleting the offending element. I also had an intermittent error of TransformerFactoryImpl not found which I don't know how to resolve. During runs when the TransformerFactoryImpl was not a problem, I was able to create a blog entry and add comments but the content was not persisted to disk.

This means that if I were to upgrade my blog server (currently FC3 with Sun JDK and JPackage rpms) to FC5, I'll have to get the Sun JDK and go through the JPackage installation cycle again.

I have compiled a partial list of available Java packages at the end of this post.

Mono and .NET Applications

Fedora Core 5 is the first Fedora Core distribution that included the Mono .NET stack. There are several notable included applications: a desktop search utility called Beagle, a desktop note taking applet called Tomboy, and a photo manager called F-Spot.

One thing that I want to mention about all these applications is: although they are developed in a technology very similar to Java, they don't feel like Java applications speedwise. They feel more like native applications.

Here's Beagle in action. The search result screen is very intuitive.

Here's Tomboy in action:

Add/Remove Software

The Add/Remove Software utility has changed. It uses the yum repositories now. It allows me to browse and search for installed/available applications by categories and subcategories. It also have a list view where everything is listed without reference to their categories/subcategories.

For each subcategory, there is a general description and a button that brings up a list of optional packages for me to select/deselect. The problem is that it never shows what mandatory packages a subcategory contains. I'm sure that information is contained in some XML file somewhere in on the internet, maybe even on my file system. I'll just have to dig deeper.

Subversion

My Subversion repository survived the Fedora Core 4 to Fedora Core 5 upgrade. I didn't have to do anything special. I can do svn status, svn update and svn commit from all of my previously checked out Subversion project sites, both on the same machine and on remote machines.

Multimedia and video driver

Multimedia support has always been less than optimal on Red Hat distributions because of their patent policy. Luckily my multimedia needs is not too demanding (mp3s, real audio, CDs and DVDs, MPEG and QuickTime videos) and I was able to set everything up using livna.org and the Fedora Core 5 Tips and Tricks. I can do all I want with Totem and Xine.

Another rough spot is the binary only video driver for my nVidia based card. The kernel module for the binary driver won't compile with the initial release of Fedora Core 5. It took ten days for an updated kernel to show up. Once that happened, I was able to install the driver from livna.org. And it worked beautifully.

GCC

GCC 4.1 contains several features that are easily observable. One is double free detection. One is stack overflow protection.

The new input method system

The newly integrated input method platform SCIM replaced IIIMP. They offer the same set of Chinese input methods. However, if I remember correctly, the old IIIMP works only in some applications (like the Gnome Terminal) but not other applications (like Firefox). The new SCIM works everywhere. That's a big improvement. 谢谢红帽(Thank you, Red Hat).

Games and such

On the game front, the upgrade wiped out the high scores for my favorite game (Five or More). I'm really disappointed. :(

To balance that out, I found Stellarium Nightsky Renderer in the Graphics menu that shows the night sky in real time/real location. Here's the sky above me last night. I was able to go out and spot Saturn and Mars without difficulties.

Other applications

Other included applications that I found interesting but haven't had time to play with yet: XEN, Blender, ErLang, git, HSQLDB, Geronimo.

Drawbacks of x86_64

The 64-bit Firefox 1.5.0.1 browser lacks several plugins. The most obvious is Flash plugin. Adobe hasn't made it available yet. So I'm browsing without Flash, which means I don't get to see the most annoying kind of online ads. On the other hand, more and more websites integrate their video feeds within a Flash player, and I can't see those either.

The Java plugin is also missing for the x86_64 platform. Strangely I don't feel it, probably because no modern website uses Java applets anymore.

Appendix: Java packages in FC5

  • adaptx
  • adaptx-doc
  • ant
  • ant-antlr
  • ant-apache-bcel
  • ant-apache-bsf
  • ant-apache-log4j
  • ant-apache-oro
  • ant-apache-regexp
  • ant-apache-resolver
  • ant-commons-logging
  • ant-javamail
  • ant-jdepend
  • ant-jsch
  • ant-junit
  • antlr
  • ant-nodeps
  • ant-scripts
  • ant-swing
  • ant-trax
  • avalon-framework
  • avalon-logkit
  • azureus
  • axis
  • bcel
  • bsf
  • bsh
  • castor
  • castor-doc
  • castor-test
  • castor-xml
  • classpathx-jaf
  • classpathx-mail
  • classpathx-mail-monolithic
  • concurrent
  • cryptix
  • cryptix-asn1
  • eclipse-bugzilla
  • eclipse-cdt
  • eclipse-changelog
  • eclipse-ecj
  • eclipse-jdt
  • eclipse-jdt-devel
  • eclipse-pde
  • eclipse-pde-devel
  • eclipse-platform
  • eclipse-platform-devel
  • eclipse-pydev
  • eclipse-rcp
  • eclipse-rcp-devel
  • geronimo-specs
  • geronimo-specs-compat
  • gnu-crypto
  • gnu.getopt
  • hsqldb
  • itext
  • jakarta-commons-beanutils
  • jakarta-commons-cli
  • jakarta-commons-codec
  • jakarta-commons-collections
  • jakarta-commons-daemon
  • jakarta-commons-dbcp
  • jakarta-commons-digester
  • jakarta-commons-discovery
  • jakarta-commons-el
  • jakarta-commons-fileupload
  • jakarta-commons-httpclient
  • jakarta-commons-lang
  • jakarta-commons-launcher
  • jakarta-commons-logging
  • jakarta-commons-modeler
  • jakarta-commons-pool
  • jakarta-commons-validator
  • jakarta-taglibs-standard
  • java-1.4.2-gcj-compat
  • java-1.4.2-gcj-compat-devel
  • java-1.4.2-gcj-compat-src
  • javacc
  • java_cup
  • jdepend
  • jdom
  • jgroups
  • jlex
  • jpackage-utils
  • jrefactory
  • jsch
  • junit
  • jzlib
  • ldapjdk
  • libswt3-gtk2
  • log4j
  • lucene
  • lucene-devel
  • mockobjects
  • mockobjects-alt-httpclient
  • mockobjects-alt-jdk1.4
  • mockobjects-httpclient
  • mockobjects-jdk1.4
  • mx4j
  • oro
  • puretls
  • regexp
  • rssowl
  • struts
  • struts-webapps-tomcat5
  • tanukiwrapper
  • tomcat5
  • tomcat5-admin-webapps
  • tomcat5-common-lib
  • tomcat5-jasper
  • tomcat5-jsp-2.0-api
  • tomcat5-server-lib
  • tomcat5-servlet-2.4-api
  • tomcat5-webapps
  • velocity
  • werken.xpath
  • wsdl4j
  • xalan-j2
  • xalan-j2-xsltc
  • xdoclet
  • xerces-j2
  • xerces-j2-scripts
  • xml-commons
  • xml-commons-apis
  • xml-commons-resolver
  • xml-commons-which
  • xmlrpc
Tags :

Screencast Comes To Fedora Core 5

This is a test. This is only a test.

This is an experiment of using the newly available istanbul screencast tool that comes with Fedora Core 5.

I'm recording a session of me creating this blog entry with it right now. I'll post a link to the resulting screencast in this link.

Update: Here's some more notes on the utility:

  • The video format is something call Ogg Theora which I have never heard of. It can be played back on Fedora Core 5 without problems. I have to install additional software to play it on Windows.
  • The istanbul application has a very simple user interface. You start it from the main menu, which put up a tray icon. You click the icon once to start recording. You click it again to stop recording. You can also right click on it to bring up a properties dialog which controls the resolution of the video and the frame rate.
  • There's no editing capability. As a result, the screencast starts with the mouse cursor over the istanbul tray icon and ends with the mouse cursor over the tray icon. It will contain all the missteps during the recording.
  • It can't handle the animated nature of the mouse cursor and as a result the mouse cursor shows up as a yellow blob. It's just ugly.

So at this point, it's fun to play with. And it might be useful for conveying ideas between friends and colleagues. But it won't be useful for producing polished screencasts for mass consumption.

Tags :