July 20, 2009

Javac Command Line Argument File

Recently I ran into a problem where I have too many jars in my classpath to successfully compile a certain application. Does this indicate something is broken in the build system? Definitely. But, until the build system is fixed I still need to compile, right?

There are stupid things to do with the path to get this working, but it looks like the engineers at Sun (when it was Sun) had (sort of) thought this might be a problem in the future, so they build something into the Java compiler called Command Line Argument Files. Basically you can specify all of your javac arguments within a single (or multiple) file(s) and not be limited by the underlying OS or shell program. This is awesome, except it's sort of broken when using classpath entries with spaces.

Luckily, there are workarounds.

First, the problem. When you have a classpath entry with a space, like the following

-classpath C:\Program Files\Java\jdk1.5.0_16\jre\lib\plugin.jar

the compile gives you this error

javac: invalid flag: Files\Java\jdk1.5.0_16\jre\lib\plugin.jar

My first attempt was to put the entry in quotes - didn't work. Then I tried to use forward slashes (/) - didn't work.

The only solution I could come up with was to replace the tokens with spaces to their 8.3 names, thus rendering the line to this

-classpath C:\PROGRA~1\Java\jdk1.5.0_16\jre\lib\plugin.jar

Since putting spaced classpath entries inside quotes works on the command line I'm assuming this is a bug with the way the argument file is parsed. But at least you have a fix.

Posted by Guy at 12:01 PM | Permalink | Comments (0) | TrackBack

August 29, 2007

Movable Type

It's weird that I've been so busy lately with so many things "up in the air". I'm just waiting for one of them to land on my head. For instance I didn't even know there was a MT 4.0 [movabletype.org] out! It definitely looks cool, but a few bullet points stuck out at me

  • Support for publishing standalone pages that automatically use blog templates and designs
  • Built-in cross-blog aggregation: Publish pages that include data from some, all, or just one of your blogs
  • Cross-blog management of entries, authors, comments, and community

What does this mean? Well, I think it means that MT is more of a Content Management System (CMS) now than a simple blogging platform. Also exciting is the cross-blog stuff. I tried cross-blog entries a while back, but in the MT 3.2/3.3 days there was just no good solution, glad to see it's in their core now.

Now the real question: Will I use it? No, probably not. Maybe for new sites, but for this one I have it configured just the way I like it. I remember upgrading from MT 3.1 (3.0?) to 3.2 and I had to redo all my templates because they wouldn't work and integrate some new stuff into my templates to make them compliant, don't ask what exactly because it feels like a lifetime ago. Do I want that pain again? No. However, if I was doing a site re-design or setting up a new site then I would definitely consider it.

Posted by Guy at 05:59 AM | Permalink | Comments (0) | TrackBack

July 16, 2007

Edutainment Redeux

I was just reading a couple of articles in the latest Communications of the ACM [acm.org] about the new types of edutainment, i.e. using games as learning tools. Then I went to update my profile on Microsoft's Connect service and noticed Codename "Grava". I was wondering when someone would either:

  1. Re-invent HyperCard [wikipedia.org]
  2. or make Flash-like "applications" easy to create

Possibly both of these have been attained with Grava, check out the screenshots, slick!

Posted by Guy at 02:36 PM | Permalink | Comments (0) | TrackBack

April 04, 2007

Energy Blue Theme Unleashed

Every once in a while Microsoft will release a new Windows Theme in support of a new product. The two that I know of off the top of my head are the Zune and Energy Blue themes for the Zune and Tablet PC, respectively. The Zune theme was released to the world in general, but the Energy Blue theme was only released as part of the Table PC Experience Pack. Luckily it was released as a simple MSI for easy extraction.

What you'll need:

Steps:

  1. Install Orca from the SDK
  2. Launch the Experience Pack installer [InstallExperiencePack.exe]
    This should give you an error message, DON"T CLICK ANYTHING YET.
  3. Open the system temp directory (just run %TEMP%)
    There should be a folder like IXP000.TMP or something similar
  4. Copy Launcher.msi from the IXP000 directory into the temp directory.
  5. Close the installer by getting rid of all the warnings and errors.
  6. Now the fun begins. Run Orca and open the Launcher.msi file
  7. Delete all references to IsTablePC and IsTabletSP2 within the InstallExecuteSequence, InstallUISequence and LaunchCondition tables
  8. Run Launcher.msi. Note: This MSI is just a container for a plethora of other MSI databases.
  9. Continue with the installation until it asks you which components you want to install
  10. Choose the Energy Blue theme and click Install
  11. You should get an error about only installing on Tablet PC computers. Again, DON'T CLICK ANYTHING YET.
  12. Copy the newly created MSI from the %temp% directory to the same directory, but name it something like EnergyBlue.msi. Note: The newly created MSI is usually some name like e323e3.msi
  13. Open the EnergyBlue.msi file in Orca
  14. Remove all references to IsTabletPC and PIDCHECK from the InstallExecuteSequence, InstallUISequence and LaunchCondition tables
  15. Save the EnergyBlue MSI and run it

You should now be able to enjoy the brightness that is Energy Blue!

Posted by Guy at 07:17 PM | Permalink | Comments (1) | TrackBack

March 26, 2007

Offline Wikis

Offline Wiki: Yeah, I've always wanted one too. I think the technical problems are all solvable, but there is one sticking point. First, I don't think using an web server or database are necessarily a bad thing, especially since there are a couple of embeddable solutions now. For example, I wrote a desktop application that used Jetty and Derby. It was really easy and quite cool because I could then extend the application on the web due to the existing architecture. In fact I think this is the solution to desktop rich clients, but that's an entry for another time.

My solution would embed a web server, database and browser in a desktop app. The web server and database would host a popular wiki solution [mediawiki.org], but with a modified backend to account for syncing. The desktop app would run a background task to poll for the server to sync to. If a connection could be established then the sync would take place. This is where the magic happens. I'm no diff expert so I think the backend modifications would have to be packaged as discrete transactions. Probably something like a series of patches, like I said I'm no diff expert.

It might be a little more restrictive and disallow fine-grained content control, but I think the transactions should work at the paragraph level. For example, if a user modifies a page by adding a paragraph of text then the transaction would be something like

add paragraph_id=p3
before paragraph_id=p1
after paragraph_id=p2
content=...

So the content page would become something more structured. This leads to something even better. As long as structure is imposed we might as well throw in some metadata to form a semantic document. Uh oh, I just made the leap from personal wiki to collaborative semantic wiki.

Posted by Guy at 08:05 AM | Permalink | Comments (0) | TrackBack

March 09, 2007

Google Desktop + Microsoft BCM = Sucks

I just updated my Google Desktop to version 5.1.0703.05398-en-pb and guess what? Yep, that's right it crapped out Outlook with the stupid Business Contact Manager error message on launch:

Business Contact Manager for Outlook could not complete your last action or actions. Please try again.

This results in BCM not being available, which screws with my contact manager (address book). The solution? Just disable both the Google Add-In and COM Plugin (Tools » Options » Other » Advanced Options... » Add-In Manager... and COM Add-Ins...). Just uncheck both Google things and you can use BCM again. I wonder if this means Google Desktop won't index my mail?

Posted by Guy at 07:59 AM | Permalink | Comments (0) | TrackBack

January 03, 2007

Server Side Eclipse: Part 2

Okay, I finally read the article from yesterday about server side OSGI frameworks. There were 3 approaches presented, 1 traditional and 2 proposed:

  1. Traditional web application server structure
  2. Embedding Equinox in an existing application container
  3. Embedding an application container in Equinox

Of course, the interesting approaches are the proposed ones. Approach 2 uses a more traditional J2EE metaphor where approach 3 breaks the mold and proposes one server per application. I don't think the one server per web application is probably the best or most efficient way to go. Also it has the potential to not scale well or fit in with existing enterprise architectures. Sure it's novel, but it's probably only an answer for personal servers.

Posted by Guy at 10:34 PM | Permalink | Comments (0) | TrackBack

January 02, 2007

Server Side Eclipse

Eclipse, Equinox and OSGI [theserverside.com]: Finally an article discussing a potential server side implementation of the OSGI framework. Personally I think this is where OSGI will shine as opposed to Eclipse. On the desktop I've tried to write a straight OSGI application using Equinox, but deployment and packaging issues stopped me. In the end I needed to host my OSGI bundles within an Eclipse client.

Posted by Guy at 11:00 PM | Permalink | Comments (0) | TrackBack

December 23, 2006

Don't Click It!

dontclick.it [dontclick.it]: This is a really interesting exercise in graphical user interfaces, aka GUIs [wikipedia.org]. Basically you don't use the mouse buttons at all. Sounds weird, huh?

How do you navigate or indicate user intentions? Well, the UI is really fluid where no navigation is ever hidden and button clicks are indicated by mousovers. One thing I haven't figured out yet is how to navigate lists. For example, if we have a list of fruit and need to select a group of fruit then how would you simulate the common CTRL+Click metaphor? I suppose the designer could auto-expand context actions on the mouseover of list items, but I think a demo would do wonders.

However, think of UIs that perform specific actions on specific areas of the UI, for example a painting application. How does a user draw a line within the canvas? Again I suppose the designer could utilize the auto-expand context actions menu, but maybe this is an over-use of this metaphor.

Either way, it's quite interesting.

Posted by Guy at 09:19 PM | Permalink | Comments (0) | TrackBack

December 17, 2006

Java 6 is Catching Up

Webservices in JDK 6 [java.net]: It seems that Java is almost caught up to .NET's web services implementation. Now annotations can be used to define web services instead of having to use the previous kludgy stuff.

However, I'm still annoyed that there is an additional step in compiling these web services, namely apt. Sure this can be easily incorporated into ant or something, but just the fact that apt needs to be run is crap.

Sun probably went wrong with Java when they first offered it as pretty much just a command line thing. Once they started adding serious GUI elements (Swing) they should have released Java as only a development environment where you could use the command line tools if you wanted to. This is what Microsoft did with their development tools and IMHO there's much more productivity within their IDEs.

When I first started using C# (via Visual Studio) creating and consuming web services was no big deal. Then when I tried to do similar things with Java there was no consistent story, no standard way of doing things. Therefore all the example's and tutorials were spread across every different implementation or technique never painting a complete picture.

Posted by Guy at 02:57 PM | Permalink | Comments (0) | TrackBack

December 12, 2006

Update: JDIC Browser Weirdness

It seems that a Mozilla is not a Mozilla. I found out that Mozilla Firefox is not supported by JDIC, but Mozilla is. Yep, that's weird. It's funny because I can get the MozEmbed app to work, it just dies before doing anything useful. Hopefully this will be fixed in a future JDIC release.

Posted by Guy at 08:49 AM | Permalink | Comments (0) | TrackBack

JDIC Browser Weirdness

Here's a fun tidbit for anyone who's playing around with the JDIC [java.net] web browser. Under Windows, if you have Mozilla set as your default browser (via Set Program Access and Defaults) then the BrowserEngineManager will not return an active browser engine. However, if IE is set to the default system browser then IE is selected as the active engine.

Hmm...

Posted by Guy at 07:35 AM | Permalink | Comments (0) | TrackBack

September 17, 2006

Virtualization

I've always been rather curios about virtualization technologies and what they can do for me and tonight I had the chnace to delve a little deeper that I have in the past. A cusory study of the technologies out there reveals two major types (I'm not considering emulation) and one , how should I put this, puculiar technue.

Read more after the jump.

Regular virtualization entails running a Virtual Machine Monitor (VMM) on a host that traps certain "un-virtualizable" CPU calls that are then handled in software. These calls are referred to as Domain (or Ring) 0 calls.

Paravirtualization requires the guest OS (the one running under the VMM) to simply not make these Ring 0 calls. So a modified version of the guest operating system is required.

Cooperative extends the theory of coroutines [wikipedia.org] to the Operating System level. In this scenario both cooperating systems are modifed; the guest directly and the host via special drivers.

All three implementations utilize virtual devices (screen, keyboard, drives, network, etc.) for the guest Operating System. Interesting stuff. For more information I would checkout Wikipedia [wikipedia.org] (as always), coLinux [colinux.org] and XenSource [xensource.com].

Posted by Guy at 08:54 PM | Permalink | Comments (0) | TrackBack

September 13, 2006

iTunes 7

iTunes 7 [apple.com]: This was released yesterday (or the day before) and overall I'm so-so about the whole thing. There are some cool new features, specifically the Coverflow cum Cover Browser view. I like the new iPod status view also, it's a lot more informative. And yes, the sidebar is better laid out than previous versions.

Now for the cons. So far I've only experienced two problems, one minor the other major. The minor one has to do with album art. For whatever reason iTunes couldn't (or wouldn't) pick up art for a lot of songs. So I spent about 2 hours adding album art (mostly from Amazon [amazon.com]) and correcting a lot of the metadata problems I had. The major problem I'm running into is iTunes not using my left speaker. What? Yes, iTunes will drop my left channel very frequently. At first I thought it was a loose cable, but Guild Wars [guildwars.com] confirmed my speakers were working just fine. I'm also able to play sounds via my left speaker while iTunes is playing on the right/ignoring the left. However, I do have a crappy workaround, pause the song and then hit play. Apparently this will poke iTunes into picking pu the left channel.

Bad Apple!

Posted by Guy at 10:57 PM | Permalink | Comments (0) | TrackBack

May 08, 2006

What's Old Is New Again

Ada Get's New Lease on Life [vnunet.com]:

I didn't even know Ada was actually used for current development. I had thought it went the way of COBOL and was only even thought of in maintenance budgets. Apparently it's still alive [adacore.com] and kicking. I wonder if there's an Ada to Java byte code compiler?

Posted by Guy at 07:28 PM | Permalink | Comments (0) | TrackBack

March 02, 2006

Turing Award

Hooray for this year's Turing Award winner [acm.org], Peter Naur. It's kind of funny that they are giving him an award for something he did over 25 years ago, but better late than never.

Update (03March2006): I'm dumb. I meant 45 years ago.

Posted by Guy at 07:23 PM | Permalink | Comments (0) | TrackBack

January 24, 2006

Java Socket Exceptions

I was playing around with a proxy server of my own, in Java of course, when I started getting the following exception: java.net.SocketException. The reason? Connection reset (sometimes 'by peer'). What the hell?

Just for giggles I tried the app on multiple machines on my LAN with the same results on all. Then I tried it on a different LAN, but with Verizon DSL (same as me) to see if it was my equipment. Long story short, I think it was my equipment.

The HTTP 1.1 spec (RFC 2616 [rfc.net]) states that all HTTP 1.1 servers should be able to accept absolute URIs, right? For the answer see section 5.1.2, so that's what I was passing to each host. And there was no end to the damned 'Connection reset' messages. I thought maybe it was my firewall, nope. I thought I was passing malformed headers, nope.

Then I started playing around with my request line, changing the URI and HTTP versions. Things started happening then and I was able to determine that it was because of the absolute URI handling I was getting those messages. So, like I said, I think that my problem is with my equipment, specifically my router. I have a sneaking suspicion that my router is examining HTTP requests when it NATs things and if it doesn't recognize the request as valid it will just drop the connection.

More investigation needs to be done.

Posted by Guy at 01:25 AM | Permalink | Comments (0) | TrackBack

January 18, 2006

ted

I ran across ted [rulecam.net] today on digg and I think it's a great concept. I guess that it searches torrentspy with some keywords and regexes on the results, but I think something even more useful would be for the various release groups (VTV, PDTV, etc.) to submit their releases to a database detailing what the release actually was.

Posted by Guy at 01:17 PM | Permalink | Comments (0) | TrackBack

January 12, 2006

Crossblogging Blues

I wanted to start an additional blog for my various software and hardware projects, but I also wanted this blog to contain some of the entries I made on the new blog. Seems simple enough, especially since both blogs are contained within the same Movable Type (MT) system, right? Well, turns out there's no built-in mechanism for cross-posting entries (aka crossblogging). I found the CrossBlog plugin [sixapart.com], but I'm not sure this is what I'm looking for. I guess I just might have to see how hard building a plugin for MT will be.

Posted by Guy at 10:05 AM | Permalink | Comments (0) | TrackBack

January 08, 2006

Hibernate Entity Map

I had the simple task of analyzing one of my customer's Hibernate [hibernate.org] implementation, at least it sounded simple. I figured a good first step was to generate a graph of all the entities within to see the relationships and interdependencies. What was given to me was the Hibernate mappings (*.hbm.xml files) and the root hibernate configuration file (hibernate.cfg.xml). Now how can I visualize all this?

Read more after the jump.

First I tried Linguine Maps [softwaresecretweapons.com], but that didn't work for me beacuase I had something like 20 mapping files that all related to each other. Finally I settled on a combination of tools to generate different types of graphs. First, I installed Hibernate Tools for Eclipse [hibernate.org] and used this to generate the Java source files representing the mappings. Then I imported these into Poseidon for UML [gentleware.com] and generated a class diagram displaying everything. This was okay, but the diagram was a little cluttered.

My second method was to recreate the Schema in my test database from the mappings and use DBVisualizer [dbvisualizer.com] to check everything out that way. I tried using a MySQL backend first, but that didn't let Hibernate specify foreign keys for some reason. After that I switched to Oracle and let Hibernate do it's thing. Firing up DBVisualizer let me see all the tables and their relationships in a cleaner graph than Poseidon gave me. It also allowed me to choose different graph styles (Organic, Orthoganol, Hierarchical, etc.) that gave me a really good view of how things were layed out and their dependencies.

Posted by Guy at 07:39 PM | Permalink | Comments (0) | TrackBack

January 05, 2006

Drupal Event Module

As cool as it is to have an event calendar on one's website I just can't stand the inflexibility of the drupal event module [drupal.org]! I think it would be okay if there were just a few more configurable options, namely header generation and timezone handling.

Header generation is easy, I just want the ability to configure the module to display days as letters instead of the 3-letter day format. Of course this would need to be even more configurable because I would want it to behave differently in block mode than it did in page mode. That's something easy I think I can add myself. The timezone handling is a totally different animal.

There are a couple of options for timezones already that are sufficient for basic usage, but what really annoys me is that the current day is always displayed as GMT. For example, when the day changes in GMT the new day is highlighted on the calendar. What I want it to do is allow me to specify which timezone to use for calculating the current day. I'm no php code monkey, but I think I can get this fixed too.

Did I just say I was going to write patches? Uh-oh.

Posted by Guy at 05:19 PM | Permalink | Comments (0) | TrackBack

December 31, 2005

AnalogX Proxy

Oh well, it looks like the only filtering capabilities of AnalogX's Proxy server is port-level. What I'm looking for is a domain-level filtering capabilitiy. So far the only package I've found that works in Windows in SquidNT. The search continues.

Posted by Guy at 12:08 AM | Permalink | Comments (0) | TrackBack

December 30, 2005

Another Proxy

After dealing with Squid for Windows I wondered what other proxy servers were out there. For one reason or another I found a slowdown with Squid instead of the speedup I was expecting. Why was I expecting a speedup? I figured that since all requests to known ad sites would be denied I would save on the additional outbound requests and pages would load faster. Maybe it was an increased CPU or memory load, I don't know, stuff just seemed slower.

So I just read an article where the author suggested using AnalogX's Proxy Server [analogx.com]. We'll see.

Posted by Guy at 11:26 PM | Permalink | Comments (0) | TrackBack

December 22, 2005

Squid Annoyances

After having to deal with Doubleclick annoyances for more than a few years I have had enough. The cookies, the ads, it all had to stop! I had tried AdBlocker for Firefox, but for some reason it kept blocking some Flash movies that I didn't want blocked, what other alternative did I have? There are these pieces of software called proxy servers that can be used for any number of reasons, some legitimate, some not. I did some hunting around and found a port of Squid for Windows [acmeconsulting.it].

I installed it and after some headache I was able to get it to run. The first problem I ran into was an abnormal program termination that killed the process without any other error messages, even with full debug turned on. I did some playing around and just for giggles I tried passing in the -D switch. This switch tells Squid to not perform initial DNS testing and you know what? That did the trick. Super, so now I just needed to tell the Squid not to do any initial DNS testing in the config file and everything would be dandy, I could load it as a Windows service, money would fall from the sky, women would through themselves at me , well you get the idea.

No such luck. You can't turn it off in the config file, but what you can do is give alternative hosts to resolve. I gave it localhost and everything is working just dandy now. But the adventure doesn't stop there, no that would be too easy. When content is blocked an error page is displayed in it's place, which is better than the advertisements I was looking to block, but still made the pages I was looking at ugly.

Now, there is a mechanism in Squid to set your very own error page, but what they don't really tell you is that whatever error page you create Squid will tack some more stuff onto it. What I had wanted was a black spot where advertisements normally go and now I have what I consider an advertisements for Squid instead, I was not a happy camper. There must be a way to make the pages appear blank I said to myself. CSS, yeah, CSS is always the answer! Just put some CSS styling into the head and voila!, blank pages. This is what my error page ('ERR_BLANK') looks like:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <style type="text/css"><!-- address { display:none; } hr { display:none; } --></style> </HEAD><BODY>

Posted by Guy at 09:39 AM | Permalink | Comments (0) | TrackBack

December 19, 2005

TopCoder

Back when I was in college I joined this thing called TopCoder [topcoder.com] and I have yet to participate in a competition. Well, tonight's the night. Wish me luck!

Posted by Guy at 07:41 PM | Permalink | Comments (0) | TrackBack

December 14, 2005

Embedded GUI

I came across a new windowing system package [linuxdevices.com] today that looks like an almost drop in replacement for XWindows. It claims that the system will work on a broad range of output drivers including the Linux framebuffer device. Hmmm, I wonder how well it will handle xvids via mplayer (which they have a port of)? Quote pick of the article:

Project co-founder Ali Caglar Oral said, "The project's range is embedded systems to desktops. It might be a good choice for embedded systems."

They also have a downloadable ISO that supposedly boots in seconds. Looks like I might have something (other than beer) to do this weekend.

More info can be found on the project's main site [xynth.org].

Posted by Guy at 08:54 AM | Permalink | Comments (0) | TrackBack

December 11, 2005

Computer of the Future

A while ago I had this idea for a computer. Actually it wasn't a computer, but more of a new paradigm in personal computer hardware architectures. Let's start a couple years in the past, maybe 2000 or 2001, a friend of mine was working as a sys admin for a small computer company. They had the need of switching computers from developer to developer. For example, developer A would be working on workstation A, but the next day he would be working on workstation B. For some reason they couldn't deploy a dumb terminal or roaming profile architecture, I can't remember why so what my friend did was make all the workstations the same hardware wise and use removable hard drives. So these guys could keep their work secure when not using it and they had the option of moving around different workstations.

Now something like this could be replaced with USB drives (solid state or otherwise) to achieve a similar effect. However, the problem I see with this kind of architecture using USB drives is the reliance on a computer with the exact or very similar setups.

My idea is to have something like a PDA that can act as a platform host for raw computing resources. For example, this PDA-like gadget would provide a limited interface (touchscreen, small LCD, networking, etc) much like today's PDAs and SmartPhones. However these would "plug" into a system providing a keyboard, mouse, additional resources such as coprocessors, additional networks, etc.

These plugin platforms could be hosted throughout homes, cafes, even businesses. Using these concepts a user would literally have 24/7 access to their work only limited by the input/output interfaces they have available to them. Of course the operating system running on the host PDA would need to be dynamic enough that it could cope with a core set of hardware and a dynamic set of extended hardware.

I'll see if I can come up with some concept sketches (a picture's worth a thousand words). BTW, this idea (right now) is Public Domain, but I might decide to patent it.

Posted by Guy at 04:06 PM | Permalink | Comments (0) | TrackBack

December 04, 2005

Human Computer Interface

A couple of days ago I read a really interesting article on HCI [intranetjournal.com], but their HCI was entitled Human-Centered Intranet (Design). At my last job [rl.af.mil] we had a whole directorate developed to the study of human effectiveness [afrl.af.mil], so at least the Air Force thinks this stuff is important. I think the best stuff out of the article are two of the tips mentioned at the end.

  • The human mind works linearly, so organize content structures by context. Don't spread related information all over the screen, bury it under multiple levels, or interrupt it with other, less relevant content. This causes users to break their train of thought.
  • Arrange content to promote at-a-glance absorption. Layout should be arranged so that users can understand the context of the page with only a cursory glance.

I can definitely relate to these tips and I wish that more UI designers would take them to heart.

Posted by Guy at 03:11 PM | Permalink | Comments (0) | TrackBack

December 01, 2005

Terminology That's Not

From Dictionary.com [Dictionary.com]:

file1   Audio pronunciation of "file" ( P )  Pronunciation Key  (fl)
n.
  1. A container, such as a cabinet or folder, for keeping papers in order.
  2. A collection of papers or published materials kept or arranged in convenient order.
  3. Computer Science. A collection of related data or program records stored as a unit with a single name.
    1. A line of persons, animals, or things positioned one behind the other.
    2. A line of troops or military vehicles so positioned.
  4. Games. Any of the rows of squares that run forward and backward between players on a playing board in chess or checkers.
  5. Archaic. A list or roll.

So let me get this straight, a file in the physical sense is a container or collection of data (either hetero- or homogenous). And this concept is the analog we use to describe an image? I've always had this thing about the terminology that has been applied to computer concepts, I don't really like it. Especially the whole desktop concept and the terminological baggage that came with that crap! Don't even get me started on terms like Desktop and Folder!

Now of all people I understand the need for an analog to computer concepts that lay people can associate with and when Windows 3.1/95 was around most people could identify with the whole office concept. However, the current generation of computer users is a little more technically savvy than the previous workforce. Maybe it is time for new, more descriptive terminology. Terms that don't necessarily have a physical analog, but describe what the concept is. For example, the file concept is a defined as A collection of related data or program records stored as a unit with a single name.

I don't necesairly agree with this. In my mind the computer file is just a data container. It generally has a name, some attributes (creation time, etc.) and contains data, duh! Maybe data container isn't the best term, but I think it better represents what a file truly is. Of course this can be abstracted even more if you take directories/folders into consideration.

Posted by Guy at 09:42 PM | Permalink | Comments (0) | TrackBack

November 29, 2005

Portlets: The Sequel

Thank God it finally happened [theserverside.com]! The Portlet specification 2.0 is under a 2 week review in the Java Community Process (JCP) and if nothing else it includes some new features that were sorely lacking in 1.0. First off, we'll now have inter-portlet communication. What, you say? There wasn't any communications supported in specification 1.0? No and it really frustrated me when I first started doing Portlet stuff. I didn't think it would be a problem for two portlets to communicate a current object under inspection with each other. It seemed with specification 1.0 we took a step backward into the stovepiped world of the past, it's very refreshing to see bleeding edge specifications correct mistakes of the past.

Posted by Guy at 08:09 PM | Permalink | Comments (0) | TrackBack

November 25, 2005

What Is Wrong With Me?

I don't quite understand it, but I have this obsession with Windows CE [microsoft.com]. Is it the clean architecure, the cross-platform capabilities, the clean (and at times cumbersome) UI? I just don't know. I bring this up today because I read Windows: A Family History [zdnet.co.uk] today that eventually brought me to Microsoft's Windows Products History [microsoft.com], which reminded me of an older article I read on The History of Microsoft Windows CE [hpcfactor.com] on HPC Factor.

The article on the history of Windows CE was a real testament to what exactly was put into Windows CE and all the hardware behind it. A truly fascinating story for computer geeks like me. When thinking about the history and the whole embedded nature of things I get quite enthusiastic about any development I have to do. Like I said, I just don't know what is wrong with me. I guess I'm just a geek through and through.

Posted by Guy at 03:09 PM | Permalink | Comments (0) | TrackBack

November 23, 2005

Client/Server Display Drivers

In an earlier post I made mention of a client/server display architecture based on various remoting protocols, such as .Net Remoting and Java RMI. I ran across wiser: WidgetServer today and immediately thought of my post.

wiser basically allows someone to run an application with a thin Swing client. What this means is that a wiser thin application is deployed to a client, which is basically a shell that connects to a server process that handles all the business logic and gui construction commands. So you have a dumb (aka thin) client that connects to a server in order to obtain all the run-time information defining the application.

Sounds juicy, yum!

Posted by Guy at 09:48 PM | Permalink | Comments (0) | TrackBack

November 21, 2005

Google Web Accelerator (Again)

Well, it looks like the Google Web Accelerator [google.com] is back in business. Previously I bloged on GWA here and here and decided that it just wasn't for me at the time. I guess I'll try it out again to see if they've made the improvements they should have. Also, hopefully this time there won't be the backlash that there was in the past.

Posted by Guy at 04:41 PM | Permalink | Comments (0)

Owning the Container: Addendum

After reading some fine content on one of my favorite blogs [gadgetopia.com], I thought I would add my two cents (or is it sense?) to this entry [gadgetopia.com].

First off, we've been inundated with HTML applications from Microsoft since the early days of XP (circa 2002), maybe even before in Windows 2000. Of course, these weren't full up applications like Word or Photoshop, but more like applets. Take a look at some of the control panels in XP, especially the Add/Remove programs applet. I'm pretty sure this is an HTML application in a specialized container based on the way things are rendered and the iconology that's presented during pauses in execution.

Deane also mentions that some of this (web applications) could be done in XUL. Absolutely correct. I've seen some XUL applications before and they reach back to the interweb for rendering their interfaces and business logic. In fact, a lot of applications can take advantage of this type of architecture. For example, using .Net Remoting or any slew of Java client/server apis such as RMI or JMS, we can pull back an interface to render, send commands and actions to the server and recieve psuedo-asynchronous events back from the server. Hmm, sounds a lot like an non-binary X Server.

Then there's the whole notion of stateless remote applications that I've been toying around with. These apps act more like servers where the front end is simply a VNC client. What this boils down to is an app directly serving VNC frames (or tiles, whatever) forming an image that is rendered on the same (or remote) machine. The client machine then sends simple input (mouse movements/clicks and keyboard) to the VNC server/application for processing. This architecture opens a whole slew of new and innovative architectures that loosely mimic Windows Terminal Services.

Well, I've talked enough.

Posted by Guy at 09:39 AM | Permalink | Comments (0)

September 25, 2005

Portable VM

In my last entry I talked about the current state of Portable VMs and listed some of their problems. I think that the emulated platform is definitely the way to go because then you could run on any Arch/OS that you can port to. Of course this begs the question what about Java or what about using the browser in some way? Well, the browser may not be quite there yet and using Java you have that as a dependence.

That being said, I think a hybrid Java/OS is the way to most effectively provide the functionality desired. This way the underlying VM is already written and the only thing that would need to be developed would be the hybrid OS layer. The drawback of something like this is that current non-Java applications can't be easily ported. However, we must defend that by saying we aren't interested in that kind of thing. This will be more akin to an embedded system where each core application is maintained by the OS (platform) maintainer and we just allow others to extend our platform via 3rd party apps.

It's always a trade-off, but I think this is what I'll try. Look for further announcements on Hazelnut Cafe [hazelnutcafe.net].

Posted by Guy at 12:24 PM | Permalink | Comments (0)

September 21, 2005

Portable What?

There's been a lot of talk about Portable Virtual Machines lately. Namely Portable CE 2.0 [furrygoat.com] and The Portable Virtual Privacy Machine [metropipe.net]. These are great concepts, in fact, I've been trying to find a light-weight way of performing a similar architecture for a while. My requirements go beyond the use of these platforms however. For example, for both you need a portable drive, something writable that can hold at least 128MB. This works for most people, but I can't bring these kind of devices into work with me. Problem 2 is that they are very slow! Portable CE is the worst. Understandably because they are emulating an entire platform, while the PVPM (qemu-based) is quicker because I think they virtualize the CPU.

My idea is closer to the Portable CE implementation, but more. It has to be quicker, lighter and able to be extended to a hardware solution. As alway, I'll promise more for later.

Posted by Guy at 08:01 PM | Permalink | Comments (0)

July 20, 2005

Small Languages

I've always loved the smaller programming languages that never quite made it big time, i.e. used to create mainstream applications. The esoteric, the confusing, the pragmatic, the extremely low-level I like all of them for different reasons. However, I play with each of them then place them on the shelf and try to reproduce their best features in my work.

That being said, one type of language I never found much use for are the embedded languages. I first started playing with an embeddable language when Lua [lua.org] was released. It was fun, but I couldn't really use it for many practical things. Then Sleep [java.net] was announced a few days ago and I started reading more about some embeddable languages for Java. I guess technically these can be considered alternate languages for a JVM, but languages such as Groovy [codehaus.org] actually market themselves as JVM scripting languages.

Moral of this digression, use the best tool to get the job done, but make sure you can get the same tool in the future because it might break.

Posted by Guy at 07:23 PM | Permalink | Comments (0)

July 08, 2005

Google Hate / Google Love

After testing out the Google Web Accelerator and giving it (in my opinion) a fair chance I've decided to stop using it on all my computers. It really didn't live up to my expectations. First, I didn't see the promised speed increase and second, I didn't see the promised speed increase.

However, I did install the Google Toolbar for Firefox today. I took a look at the Options for it and I think I found something cool! They have this "extension" (for lack of a better term) called AutoLink that will make some information on a web page into linkable objects. For an intro see this page [google.com]. From the intro

For example, if you see a street address, you can click AutoLink and you will get a link to a map of that address. AutoLink works for:
  • Street Addresses
  • DHL, FedEx, UPS and USPS tracking numbers
  • Book or publication ISBN
  • Automobile VIN

I tested it out on some restaraunt's websites to see if it would recognize their addresses and most of the time it did. I there's some funny formatting, like a | (pipe) between the street address and city/state then it won't recognize the address. Obviously there needs to be some tweeking, but not bad for Beta.

Posted by Guy at 03:55 PM | Permalink | Comments (0)

July 03, 2005

Ripping It Up

In my last post I said that Nero Vision Express (NVE) had helped me out al sorts of ways, but turns out there were some problems that were easily fixed by using a different tool. NVE provided a really good interface for working with vob files, but it choked on some codecs. It handled resizing and adjusting the frame rate of the source great. I even had success with most video codecs that I tried. But, I couldn't get any audio codecs to work correctly. Also, NVE never allowed me to specify properties for audio codecs, so I think that was the major problem.

So, my method was to use NVE to produce an AVI with compressed video (XviD, either single or two-pass) with uncompressed (PCM) audio. I would then run the AVI through VirtualDub to compress the audio. Not the cleanest way of doing things, but it worked. The whole time I was asking myself, "self, how come VirtualDub can't handle vobs directly?" Well, it turns out that a "hacked" version can.

Enter VirtualDub-MPEG2 [free-codecs.com] and it's sidekick AC-3 ACM Decompressor [free-codecs.com]. With these two pieces of software I was able to directly input vobs to VirtualDub, apply transformations, encode and save off as an AVI. Looks like I jumped the gun on my praise of NVE.

All in all I think that NVE has the potential to be a great piece of easy to use software, but in the end it's just broken. The ability to compress audio is a must and the ability to batch encoding jobs would be a killer feature. I guess when a new version of the Nero suite is released I can evaluate it again, but for now I'll be using VirtualDub-MPEG2 and the AC-3 ACM Decompressor.

Posted by Guy at 03:15 PM | Permalink | Comments (0)

June 30, 2005

Google Maps API

Kick ass! Google has released their Maps API [google.com] for 3rd party developers. So now when you write something that hooks into their stuff (via XmlHttpRequest) and they make one of their almost daily changes to the backend javascript you won't be hosed. Something like this will really help with house-hunting applications and others of similar ilk.

Now google just needs to API-ifiy their geocoder (the software that changes an address to a latitude and longitude) so those house-hunting applications will be even easier to codify.

Posted by Guy at 06:44 AM | Permalink | Comments (0)

June 27, 2005

JSF Woes: Asynchronous Events

I previously blogged on what I thought were some shortcomings of the whole JSF architecture. In that entry I made some suggestions that I thought would make JSF more appealing, one of those was an AJAX-like asynchronous event mechanism.

I use this map component that has been JSF-ified. You can pan, zoom, recenter, etc. it's really quite slick. The different controls are arranged in a toolbar where you select a specific tool to perform that function when you click on the map. For example, I can select the zoom-in tool, click on the map and the map display will zoom in. The problem is that when I click on the zoom tool an event is triggered, which means the whole page needs to be updated. Not a great experience. Because of this change in tool I make a whole round trip to the server that incurs a definite lag in productivity.

A better solution to this problem would be having the tool buttons make asynchronous calls to the server to see if a layout change or a change in components would occur. If a change would happen then just reload the components that changed, not the whole friggin' page.

Of course many have thought about this before now and have offered proprietary solutions to fill the gap. Most notably AjaxFaces [ajaxfaces.com] that offers the following solution:

The CyberXP.NET AjaxFaces offers an easy, general and complete integration solution for JavaServer Faces and Ajax. This solution makes any JavaServer Faces UI component Ajaxable: either trigger Ajax process or change user interface using the output from Ajax process.

Haven't tried them out, but it looks promising.

Posted by Guy at 07:45 AM | Permalink | Comments (0)

June 20, 2005

JSF Woes

Everyone loves JavaServer Faces [sun.com], right? Well I don't. I like it, but I definitely don't love it. The whole premise of JSF is to break out web applications into a model-view-controller (MVC) framework where you can employ a UI expert for the view and logic developers for the controller/model. From the specification's website:

JavaServer Faces technology simplifies building user interfaces for JavaServer applications. Developers of various skill levels can quickly build web applications by: assembling reusable UI components in a page; connecting these components to an application data source; and wiring client-generated events to server-side event handlers.

In reality you have UI people developing Java classes that provide markup. Sure, the components espousing the markup are reusable, but one of the great promises is the easy interchange of rendering kits for JSF applications for switching between, for example, a website and a mobile version of that site. Well, I don't call UI developers deploying Java classes for different interfaces a leap forward, but more of a step back. I feel better for ranting now, sorry.

That all being said, JSF can be great in its future iterations, but the specification needs to evolve and bring in new(er) concepts.

  • Templating System
  • AJAX-like Asynchronous Events

And those are just the ones off the top of my head. Sometime in the future I'll expand on these topics, but now I must go.

Posted by Guy at 05:06 PM | Permalink | Comments (0)

June 16, 2005

Rumors on Mac OS X86

The rumors surrounding Mac OS X for Intel are abounding again. This time it has to do with Apples long and short term visions of the Apple hardware platform. Obviously Apple charges a premium for their hardware and they maintain a tight control over the platform for (I'm guessing here) stability reasons. So, it stands to reason that Apple will only want their OS running on official Apple hardware whether it be PPC, x86 or Cell (hey, I can dream can't I?) based.

A couple of news sites [macnn.com] are reporting that Apple will employ Intel's Lagrande implementation of the Trusted Platform Module (TPM) to ensure only Apple platforms can be used. According to Intel [intel.com] the TPM provides an Endorsement Key that is unique among platforms and can be used to distinguish between Apple and non-Apple hardware.

This is all well and good until you take a look at things like Bochs [sourceforge.net] which emulate an entire system's hardware platform. It wouldn't be too hard to implement a software module that could provide the functions that the TPM implements. Of course, there would probably be legal ramifications thanks to the evil, evil DMCA. Time will tell.

Posted by Guy at 07:04 PM | Permalink | Comments (0)

May 25, 2005

Firefox Not Saving Passwords

I've had this problem on and off before, but after a clean install (and deletion of my profile) the problem went away. Then I upgraded to Firefox 1.0.4 (without deleting my profile) and Firefox wouldn't offer tp save any passwords and wouldn't fill in previously saved passwords. I did some checking on the web and really couldn't find anything, so I decided to dig around myself. I found where the usernames and hashed passwords were stored (signon.txt) and started removing entries. Lo and behold when I went to the sites of the entries that I'd deleted Firefox asked me if I wanted to save the password!

So, the best thing to do when you get that annoying bug pop up on you is to delete the signon.txt and key3.db (used to decrypt the passwords and usernames) files. They are located in

Documents and Settings\{username}\Application Data\Mozilla\Firefox\Profiles\{profile}

Where {username} is your Windows login name, mine is "Guy Pascarella", and the {profile} is some weird string that Mozilla comes up with, mine is "2kotw6e7.default". So, on my machine these files are located at

C:\Documents and Settings\Guy Pascarella\Application Data\Mozilla\Firefox\Profiles\2kotw6e7.default

Hope nobody runs into this problem, or at least can figure out what to do. It does seem harsh to completely delete these files, but if this functionality isn't working anyway it can really only help, right?

Posted by Guy at 07:55 PM | Permalink | Comments (1)

May 24, 2005

tivo HME SDK

tivo released a new version of the Home Media Engine SDK [sourceforge.net] yesterday. I've played around with the last version, but really didn't accomplish anything great. I found the APIs a little clunky and really needed to mind shift away from the Java Swing way of things. For those of you that don't know,

HME is the code name for TiVo’s powerful new open platform for applications that are displayed and controlled by broadband-connected TiVo Series2 DVRs.

Basically, Joe Hobbyist can write an application that uses a tivo for its user interface. The user can interact with the app through the remote and the app can interact with the user through the attached television (audio and video). Unfortunately, the power of the tivo remains locked away from developers. There is no access to the guide, recording options, actual recordings, etc. So you can use the tivo to display some stuff from a computer (web pages, pictures, whatever) and you can play sounds (mp3s) through your television...that's it. No support for playing movies either.

But, that's the way the web started out too. Static content with very little user interaction, and now look at us! I still have great hopes for the tivo HME, but not on the current platform, i.e. series 2 DVRs. I think they need a lot more power [engadget.com] before anything really revolutionary can be developed. Here's to hoping and waiting.

Posted by Guy at 08:39 AM | Permalink | Comments (0)

May 13, 2005

FireFox Fixed...For Now

Like I said, Firefox will be fixed [mozilla.org] by the end of the week. It just goes to show you that when a community is faced with a problem it gets resolved very quickly. Unfortunately, FireFox doesn't have a stellar update facility yet. I guess it's supposed to be in 1.1. Right now when you check for updates you have to download the entire thing, uninstall and reinstall. Not fun. Not a pain or difficult for any level of user, but not fun. I really hope that whatever update capability they end up with will allow incremental (or delta) patching.

Posted by Guy at 08:29 AM | Permalink | Comments (0)

May 11, 2005

Web Acceleration: Part 4

While at work today I noticed that Google's Web Accelerator has been taken down. I guess hindsight is 20/20 because a lot of people who were extremely excited about this when it came out are now changing their tunes. That's the world though, fickle. You can check out Google's new page where they say they've taken it down because they've reached maximum capacity.

Thank you for your interest in Google Web Accelerator. We have currently reached our maximum capacity of users and are actively working to increase the number of users we can support.

I didn't think Google had a maximum capacity for anything. I saw an article on CNet [news.com.com] linked to over on Lifehacker [lifehacker.com]. Other than that everything's pretty quite about the whole ordeal.

I hope they (Google) retool this thing pretty quickly because the theory of operation is quite sound especially since most web servers don't compress pages before they send them resulting in wasted bandwidth.

Posted by Guy at 04:50 PM | Permalink | Comments (0)

May 10, 2005

A Vulnerable Fox

OK, OK it seems that Firefox has a couple of vulnerabilities [secunia.com]. So what, it's not the end of the world. In my experience any piece of sufficiently complex software will always have bugs, compromises and vulnerabilities. Especially something as complex as a platform. Yes, I consider a web browser a platform. Not noly does it provide a graphical interface with a language describing how it's supposed to be rendered, but also a pseudo-systems abstraction language (Javascript) while needing to support native components (plugins/extensions) that extend the main platform in ways that the main developers would never have imagined.

The great thing about a community supported project like Firefox is that the vulnerabilities will be addressed extremely quick. Probably as early as later this week people will be upgrading 1.0.4 to address these problems. It's not even in the same category as a flaw in Internet Explorer where its user base needs to wait with baited breath to see first, if Microsoft will fix it and second, when they will release the fix.

Judging from the net buzz the next incremental release of Firefox, codenamed Deer Park (version 1.1) [mozilla.org] will contain many fixes for the Mac audience and contains lots of improvements concerning the cache. Specifically, the back and forward caches. Also, some rendering and layout bugs are supposed to be fixed. Finally, checking a list of updates [squarefree.com] shows that there will be at least some CSS3 support and I heard a rumor that SVG will be supported natively! This doesn't sound like something that astonishing or big, but it would lead to very interesting pages with images that change based on user feedback, can't wait to see.

Posted by Guy at 07:52 PM | Permalink | Comments (0)

May 09, 2005

Web Acceleration: Part 3

Google's Web Accelerator has definitely come under fire since its beta release. If you have any doubts then just check out a totally paranoid view [nyud.net] of "Big Brother's" influence or a more technical breakdown [blogspot.com] of it's implementation. The only way I found out about these was because one of the sites I regularly visit [mini-itx.com] had blocked access with this message:

Access to this site is blocked to the Google Web Accelerator due to many serious privacy, site logging and bandwidth concerns.

To view the site, select the "Don't accelerate this website" menu option now, or switch off the software altogether.
There are many good reasons to do this. You will find lots of reasons here, and more from a web publisher's point of view here.

Once you are done, please click "Back" in your browser and everything will work perfectly.

The latter article was very informative and presented everything in a fairly in-depth and objective manner. The former article was (as I stated earlier) very paranoid. Their relation of Google to the NSA was utterly obsessive, the association may not be totally unfounded since anyone with a high enough clearance will most likeliy work with the NSA one day of their careers.

Either way, I think the general public really has more trust in government agencies than sites like this give them credit for.

Posted by Guy at 08:19 PM | Permalink | Comments (0)

May 07, 2005

Web Acceleration: Part 2

So I said that I would report back on the new Google Web Accelerator and here are my experiences. I haven't really noticed a difference. The browser I use most often says that over the last couple of days I've saved a total of 18.9 seconds. Call me crazy, but I thought the savings would be much greater and I would notice a marked improvement in page load time. It's just not there. Plus, there are many complaints about it, some are privacy fears [zdnet.co.uk] and others are legitimate complaints about it's interaction with web apps [37signals.com].

Now, I'll be the first to admit that I like and am biased towards Google [google.com] because of the great things that they hae done, but I had a problem with the second article from 37Signals. I understand that blindly pre-fetching links while ignoring javascript alerts could potentially be dangerous but come on, why would you design a site that deletes something just by loading a page? I think that what happens is that they have a delete link that calls a verify function that allows or disallows the page transition to occur. I just think that you should use a function to write the destination URL into the page's href or use an asynchronous method like an XmlHttpRequest.

Either way, I think that in theory the web accelerator is a great idea, but it's implementation needs to be tweeked. Keep in mind it's just beta right now so I'm holding out hope.

Posted by Guy at 01:21 PM | Permalink | Comments (0)

May 04, 2005

Web Acceleration

Google has relased a free Web Accelerator [google.com] that targets broadband users. I always wondered what exactly a web accelerator did besides cache pages and the marketing blurbs provided an answer.

Google Web Accelerator uses various strategies to make your web pages load faster, including:
  • Sending your page requests through Google machines dedicated to handling Google Web Accelerator traffic.
  • Storing copies of frequently looked at pages to make them quickly accessible.
  • Downloading only the updates if a web page has changed slightly since you last viewed it.
  • Prefetching certain pages onto your computer in advance.
  • Managing your Internet connection to reduce delays.
  • Compressing data before sending it to your computer.

So they not only cache, but compress and implement http pipelining where the target (source) server didn't or can't.

Either way, I'll try it and report back on my experiences. That Google, they're taking over the world while "do[ing] no evil", quite impressive. I'm sure that this will help with the slashdot effect too.

Posted by Guy at 08:41 PM | Permalink | Comments (0)

TopCoder
Powered by
Movable Type 3.2