Indies and Java

As an American, Chris should know that marketing is king… if it costs a million dollars to get Java onto ten million coverdisks then it’s still money well spent as it’s likely to find its way onto another ten million computers.

Cas :slight_smile:

Cas is right, marketing is king. And now for the big number…AOL spent over 1 BILLION dollars on CD distribution. This netted them 32 million subscribers however.

I think that cover cd distribution is a good idea, but is kind of like flyer distribution in that the amount of people that actually view the cd content is very small compared to the distribution size. BUT, I think that it is still a valuable thing to do :slight_smile:

-ChrisM

Well, here’s the trick: get the JVM installed as part of some compelling content instead of just a thing that does something esoteric and uninteresting. “Play great Java games!” is no incentive; it’s vague and has no direct benefit to the potential consumer. But “Play DeathKillZap and slay your online enemies today!” immediately sounds loads more interesting. And if it just happens to install a JVM, it’s achieved exactly what we want.

Now, er, lend me a $50k and I’ll write you one :stuck_out_tongue: How about Multiple Injury? (see Chaz’s CV on our site if you want to know what MI was going to look like, and of course, that good old terrrain demo was part of it…)

Cas :slight_smile:

Dial up 1.5 h 25MB downloaded. (majority was WWW so there was a compression, but…)

I have bigger problem if I have to DL exe and some library then update antivirus then discover I need another library… I must say DL JVM and JOGL/LWJGL is in comparison with some programs really easy.

Miss joanne right?

The main problem that I have with Webstart is that itself needs a JRE pre-installed to run. Duh. The whole point would be to have a tiny little plugin app, about 200k say, that did the Webstart bit, and downloaded the VM the first time as well. And not the whole VM either. Might as well leave out AWT if it ain’t needed that particular time eh?

How hard can that be?

In fact, I know I can do it, I just haven’t got round to it.

Cas :slight_smile:

The best method for Java itself is still to provide a download link and say that Java version x.y.z or higher must be installed. Additionally there should be a small explanation how to find out if Java is installed and which version. Providing an exe may be a good choice, too, but it doesn’t help Java a lot.

[quote]The whole point would be to have a tiny little plugin app, about 200k say, that did the Webstart bit, and downloaded the VM the first time as well.
[/quote]
But this plugin app has to be installed on the user’s machine, too.

[quote]And not the whole VM either. Might as well leave out AWT if it ain’t needed that particular time eh?
[/quote]
This doesn’t sound like a good idea. The next app may need AWT and the user will wonder why he needs to download and install something again.

[quote]But this plugin app has to be installed on the user’s machine, too.
[/quote]
Yeah, but at 200KB you could bundle it with just about everything without any worry about the extra bulk.

[quote]This doesn’t sound like a good idea. The next app may need AWT and the user will wonder why he needs to download and install something again.
[/quote]
Well, he won’t actually have to do anything. He probably won’t even notice it taking extra time to start up because he’s by definition not played it before. He’d get a message telling him it’s getting hold of the latest and greatest technology for him, for free - he’d probably be perfectly happy with that situation.

I think this is the right approach, but it needs some thought on library versioning before it’s feasible.

Anyone here tried Maven? It’s a very clever build environment for Java applications. Naturally you need a JDK to run it, but everything else it’s capable of sorting out for itself. You ask it to do something, it’ll download all the libraries required for the task first, then perform the task and tell you how it went. You tell it your project needs a certain taglib from the Struts project and it’ll go off to a repository on the web, acquire the right jars and tlds and package them up into your distributable jar file.

the problem is that you don’t want people with half-install’s of java sitting on their system, which I am sure is why sun enforces this policy. If people could just pick and mix then Java would fail because there would be so many problems from people not being able to run one app because their previous install wasn’t complete.

AF, by using LWJGL get’s around this problem. It doesn’t get java installed onto people’s systems but that is up to the publisher.

I must say I am alarmed that the JRE is now 15mb - I used to like the Windows-english only JRE which clocked in at about 5MB. I havn’t looked yet, but I wounder how much fat you are allowed to cut off the 15MB to redistribute it?

It’s easy to provide people with a “runtime library excluded” and “runtime library included” download. People have been doing this for decades (not just talking java here) and will continue to do so. This way users who already have it installed (and know it) will get the small download and users who don’t will go for the full one. Of course I am talking Windows here - non-Windows users generally know enough to get what they need.

I recentally created a windows installer for a java app of mine and I decided not to create an installer with the JRE included. Not because I couldn’t - but because I’d prefer to conserve (my) bandwidth. Apps are easier to sell than games anyway (not talking money here) because the goal of a game is to entertain people and consume their time as opposed to making somthing easier therefore saving people time.

Instead of the JRE - I just added a link to Java.com to the person’s start menu. So they will hopefully go like this: "hmm looks like a cool app -> download. oh it doesn’t work -> what was that link in the start menu? Download Java 1.4+ (required to run) maybe I’ll check that out -> a while later -> run’s app - all works fine.

When I release my game however, I will certainly bundle the JRE and create two installers. Even for a JWS game (which this will be) you can still have an installer which installs the JRE and pop’s a link into their start menu pointing to the JWS file.

Will.

[quote]Yeah, but at 200KB you could bundle it with just about everything without any worry about the extra bulk.
[/quote]
But this adds an additional layer of complexity. Remember that it has to be a browser plugin and configured to handle webstart files.

[quote]Well, he won’t actually have to do anything. He probably won’t even notice it taking extra time to start up because he’s by definition not played it before. He’d get a message telling him it’s getting hold of the latest and greatest technology for him, for free - he’d probably be perfectly happy with that situation.
[/quote]
There are actually users who want to know what is installed on their machines, if it’s a larger app. It gets difficult to completely hide the process, because an internet connection and some time is required. And what do you do if the user starts an other Java app locally? It probably won’t work, because parts of the JRE are missing.

[quote]There are actually users who want to know what is installed on their machines, if it’s a larger app. It gets difficult to completely hide the process, because an internet connection and some time is required.
[/quote]
Oh, absolutely. You’d never get rid of the main JRE download process. This is just a way of leeching technology over bit by bit.

I used to think I was in the majority as someone who cares about what gets installed, but actually people like us are very much in the minority. There are a huge number of people out there who don’t care what the machine does as long as it works, will acquire the next version of something just because it’s got a bigger number, and trust the computer implicitly. Users are very, very naive.

[quote]And what do you do if the user starts an other Java app locally? It probably won’t work, because parts of the JRE are missing.
[/quote]
But if they hadn’t got any part of the JRE it wouldn’t have worked anyway?

Treat it like a library dependency. The core app loads and works out a component is missing, so goes to get it. If there’s no Internet connection it posts a “need update” message and asks the user whether to proceed - users have seen this all over their browsers and should be familiar with the process. All the way through it provides the user with the alternative of getting the whole damn thing instead, which will enable them to do lots of funky things, run all these amazing apps etc.

I dunno, I think it’d work.

[quote]I used to think I was in the majority as someone who cares about what gets installed, but actually people like us are very much in the minority. There are a huge number of people out there who don’t care what the machine does as long as it works, will acquire the next version of something just because it’s got a bigger number, and trust the computer implicitly. Users are very, very naive.
[/quote]
This may be true, especially in the world of Windows. :wink:

[quote]But if they hadn’t got any part of the JRE it wouldn’t have worked anyway?
[/quote]
Surely, but it wouldn’t confuse the user. The user actually has to know that Java is not fully installed to fix this issue or the app has to be invoked on each call to Java (see below).

[quote]Treat it like a library dependency. The core app loads and works out a component is missing, so goes to get it. If there’s no Internet connection it posts a “need update” message and asks the user whether to proceed - users have seen this all over their browsers and should be familiar with the process. All the way through it provides the user with the alternative of getting the whole damn thing instead, which will enable them to do lots of funky things, run all these amazing apps etc.
[/quote]
In this case all calls to “java” must be directed to the app, so it can decide if something is missing. It would be a thin layer above the JRE. Actually I don’t know if it’s possible (with a moderate effort) to have only the source and say: “this app needs Swing version x.y, AWT version x.z etc.”. Additionally it requires that the JRE can be broken into several independant pieces.

[quote]I dunno, I think it’d work.
[/quote]
It’s a nice idea, but I still see too much problems. Besides the large download for the JRE I think Java is easy to install on Windows, isn’t it?

All it needs is a manifest and a boostrap classloader that checks the manifest. In fact it’s pretty bloody trivial to implement. “Oh, this app is asking for java.awt.Window. Quick look in manifest… requires awt_1_1_1… haven’t got it yet, but it’s available at http://blah/… … download… done.” This way the JRE can be very, very easily downloaded in tiny chunks.

Cas :slight_smile:

[quote]Surely, but it wouldn’t confuse the user. The user actually has to know that Java is not fully installed to fix this issue or the app has to be invoked on each call to Java (see below).
[/quote]
Re: “not fully installed”, that depends on the user’s point of view - is it a single app that isn’t fully installed, or a technology framework with many parts, some of which that aren’t present? :wink:

Anyway, why not check on each invocation of the JRE? I would rather expect that’s exactly how it would work - no point in doing the clever bit once, then just throwing errors at the user. We’re not installing a broken JVM, we’re only installing what’s needed at that particular time.

[quote][…] Actually I don’t know if it’s possible (with a moderate effort) to have only the source and say: “this app needs Swing version x.y, AWT version x.z etc.”. Additionally it requires that the JRE can be broken into several independant pieces. […]
[/quote]
Yeah, this is the big problem. As I say, there needs to be some thought given to library versioning - it probably requires some dependency information in manifest.mf and expanding of javac’s understanding of the libraries it’s compiling against, or something? Probably best to tag individual classes as well.

Heh, and Cas beat me to a reply by half an hour. Teach me to leave the interesting topics until last. ::slight_smile:

I seriously suggest that anyone thinking about this kind of technology should look at Maven - on the library dependency side it does all this already. And it’s very impressive to watch! ;D