May 29, 2009

Hello Oracle

From 1.6.0_14
"Although G1 is available for use in this release, note that production use of G1 is only permitted where a Java support contract has been purchased.".

Probably a coincidence though. JMC, Scenegraph, JavaFX, G1.. Open source revolution my ass. The “Java Store” is probably the “EULA Store” with Web Start as DRM. Or maybe I'm wrong and the JMC/Scenegraph/JavaFX runtime is "silently" installed the day before JavaOne. Fingers crossed.

May 11, 2009

Added the Relay demo

This is a demo of how sockets work under a security policy. You can create a (text) Relay server and then start another instance and connect as a client.

localhost - Relay.png

PS
If your comment is not showing up..well.. it is because I now have over 14 000 unread email messages.

May 07, 2009

Two new Hybrid examples

Two new Hybrid examples added to the Preview section. The URL base resolver code is currently wrong, so you will be asked to download some data from app.teppefall.com.

April 27, 2009

Teppefall Preview

Created this installer for really lazy people - Teppefall Preview. I built this system for testing, so expect error messages and missing functionality.

I will not be releasing signed versions.

April 20, 2009

Provocation, hype and screenshots

Ignoring people. Empty talk does not pay my bills.

Better than Adobe MP ? OMG ! Meh, no numbers to back it up yet. 40+ threads might be positive. Lean.

Status
You can now select which screen is the primary fullscreen. Entering fullscreen mode and running fullscreen is fast, but exiting fullscreen mode under a non-native LAF might result in a very slow Windows Explorer on Vista for a short time (10 seconds max).

Teppefall Media Player (20).png

Teppefall Media Player (21).png

Teppefall Media Player (22).png

Untitled-1.png

Untitled-2.png

April 13, 2009

Wake up Sun

1 - A JWebPane alpha must be released. Yes, now. Even if it is crap.
2 - The legal status of JMediaPane must be clearly defined. And sound support for Windows media would be nice.
3 - The scene graph should be released under a different license. Sun´s GPL licensing is based on wishful thinking and inflated egos. GNU is not Linux.
4 - Will we ever get video capture support (desktop/mobile) ? There is this thing called a camera phone. Maybe Sun developers have seen a picture of one ?
5 - javax.fx.FXPanel ! Or sun.fx.FXPanel ?

Maybe I am repeating myself here, but I feel like I am watching a train wreck in slow motion. Everyone who codes in JavaFX are beginners. Throw the people who know Swing in and out a freaking bone already. Otherwise we will just write crap on our blogs about how JavaFX ate our flapjacks without painting our outhouse.

April 10, 2009

The reality of JavaFX – search for com.sun.media.jmc.accessMedia

Warning for OS X users
This example might/will crash your browser. And it is entirely Apple's fault.

First run the media player component (Applet).
http://app.teppefall.com/installer

Then right click and choose "Open URL".
Enter http://app.teppefall.com/t.flv

You will only get audio because of a RuntimeException. This is a show-stopper issue that will affect anyone who does not sign their code. And this error message will give you one hit in Google. A single hit. One.

I just love writing 500 lines of Javascript and 5000 lines of Java for then to...............................

April 02, 2009

Picture of a Java Swing developer

picture-of-a-swing-developer2.jpg

I was playing with my bone (JMediaPane) and then I checked out the rope thingy (JWebPane) and now.. well.. I am just drinking beer because I am waiting for the lawyers.

Woff. Woff.

Image credit: http://revision3.com/diggnation/.

March 30, 2009

Swing looks and feels pretty good

Performance is better than ever. A window shadow API would be nice though. Poor Vista LAF.

Teppefall Media Player 0.91 BETA (2).png

Teppefall Media Player 0.91 BETA (3).png

Teppefall Media Player 0.91 BETA (4).png

March 18, 2009

Teppefall Media Player 0.9 beta released

The Teppefall Media Player is now available as a beta for Windows and Mac OS X. Java 1.5 or higher required.

Try running four or more Flash videos at the same time and then compare with the other players. The Adobe Media Player and VLC seems to be less scalable.

March 17, 2009

Latest screenshots - Mediaplayer, etc

Using Substance 5.1 Graphite now. Titanium delayed. Code separation and threading eating my time. Sun developer world feels fragmented and hype oriented. Maybe I am too young ?

Teppefall Media Player 0.9 BETA (6).png

Teppefall Media Player 0.9 BETA (5).png

Colorspace (21).png

Teppefall Capture (54).png

Colorspace (20).png

EmbeddedApplication.png

mediaplayer.jxml - Teppefall - Google Chrome.png

March 05, 2009

Sun is pulling a “Netscape rewrite” with JavaFX

Based on public statements from Sun developers, I have decided to postpone my minimal JavaFX research and focus on other things. I think that JavaFX has the potential to become something cool and useful, but if this comes at the expense of Swing, then forget it. There is no way I am building my business on something as immature as Sun's new FX platform. I waited years for Sun to fix Swing bugs and I am not doing that again with JavaFX. I will rather write Objective C, C# or C++. Sun tells us that graphic designers are going to use those JavaFX tools. Are they serious ? A senior designer costs €1000 a day. He is going to sit there and export JavaFX assets one PSD or AI file at a time ? Really ? And then use Netbeans as a "creative tool" ? Has Sun talked to a single design shop that is not on the Sun payroll ? I use the Adobe CS suite all the time and to me the Sun work flow is way too slow.

Continue reading "Sun is pulling a “Netscape rewrite” with JavaFX" »

March 03, 2009

Tweaking application.xml files for Hybrid

Then Teppefall branding in the primary JFrame can be removed by adding an application.xml @grabber attribute and setting it to false. You can also remove the tray icon by setting @traymenu to false.

The script attribute is relative to the application.xml, just like the content element.

Hybrid specific application.xml attributes(may change in the future)
@script
@traymenu
@grabber

Teppefall Media Player screenshots

Still working on the Teppefall Media Player. Not sure if there is any point in creating this software. Hybrid is ignored by pretty much everybody. It is so comical to read 6000 articles about how Flex/GWT/Gears is not private static final volatile boolean TOTAL_VENDOR_LOCK_IN = true; Or about how 12 lines of Groovy will solve all your problems. I could support all the features of the Adobe Media Player, but why spend that much time and money on something that might only be used by a 1000 people.

Anyway, JMC 1.1 was a huge improvement. But I still do not understand the threading model or the seek/timing logic. There is no documentation and I am simply coding in the blind using only public API's. Performance is great and memory use rivals that of the Adobe Media Player. The Adobe player is a bit of a memory hog, but this is simply because of pictures, extra layout, RSS importers, advertising and branding rather than a bad design.

I have some prototype Rome RSS/ATOM based code that solves the channel import problem, but using a custom DOM parser is easier from an API perspective. Unfortunately, the web is filled with "creative" XML and then you go back to Rome again.

Also, fullscreen mode works perfectly and the OSX/PPC libraries have decent performance.

Medium quality FLV (Flash video).
Teppefall Media Player 1.0 BETA.png

High quality FLV (Flash video).
Teppefall Media Player 1.0 BETA (4).png

February 21, 2009

Hybrid tutorial - Taskbar icon, messages and menus

About
Taskbar icon, messages and menus.

Dependencies
You must create an ext/ folder and add bsf.jar, js.jar and commons-logging.jar into this folder. Add Substance 5 (substance.jar) in the same folder for EDT checking. The application and taskbar icon is defined in the application XML file.

taskbar.js
importPackage(Packages.java.awt)
importPackage(Packages.java.awt.event)
importPackage(Packages.javax.swing)
importPackage(Packages.com.teppefall.hybrid)

context.info("I am " + context.getApplication().getApplicationName())
app = context.getApplication()

awtMenu = new MenuItem("Hello")
awtMenu.addActionListener(function(e) {
JOptionPane.showMessageDialog(app.getApplicationFrame(), "Hello taskbar !")
})
app.getTrayMenu().insertSeparator(0)
app.getTrayMenu().insert(awtMenu, 0)
app.displayTrayMessage("Added a menu item to the taskbar icon popup", JApplication.INFORMATION)

Read more about JApplication here

run.cmd
java -cp teppefall-runtime.jar com.teppefall.hybrid.app.JJHMain taskbar.xml

WindowClipping (13).png

February 17, 2009

Hybrid tutorial - Using SharedVM with JJHMain

Before doing anything it is important that the developer understands the limitations of SharedVM. The SharedVM system uses the same class loader as the parent caller and the same event system. So one crashing application or blocking dialog box will affect all running applications. Also, the shutdown system is different and might cause problems with shutdown hooks.

Starting one Hybrid application within another Hybrid application can be done in one line of Javascript code. Just point JJHMain to the Adobe AIR descriptor file.

new SharedVM("com.teppefall.hybrid.app.JJHMain", ["../other/stuff.xml"]).start()

Hybrid documentation

Component context:
AssemblyContext.

Browser plugin:
JJHPlugin

Desktop runtime:
JJHMain

Teppefall JJHMain uses the Adobe AIR application property format:
Setting AIR application properties (Adobe website).

February 15, 2009

Hybrid tutorial - Teppefall Frame Extensions and the JJHMain parameter -XrunScriptOnOwnThread

About
This showcases Teppefall Frame Extensions and the JJHMain parameter -XrunScriptOnOwnThread.

Dependencies
You must create an ext/ folder and add bsf.jar, js.jar and commons-logging.jar into this folder. Add Substance 5 (substance.jar) in the same folder for EDT checking.

frames.js
importPackage(Packages.java.awt.event)
importPackage(Packages.javax.swing)
importPackage(Packages.java.awt)
importPackage(Packages.com.teppefall.ds)
importPackage(Packages.com.teppefall.ds.console)

context.info("I am " + context.getApplication().getApplicationName())
frame = context.getApplication().getApplicationFrame()

var r = {
run : function() {
new FrameExtension(frame, new JLabel("inside top right"), FrameMovementTracker.INSIDE_TOP_RIGHT)
new FrameExtension(frame, new JLabel("bottom"), FrameMovementTracker.BOTTOM)
new FrameExtension(frame, new JLabel("left"), FrameMovementTracker.LEFT)
new FrameExtension(frame, new JLabel("inside left"), FrameMovementTracker.INSIDE_LEFT)
}
}

if(EventQueue.isDispatchThread()) {
Console.info(this, "Running on EDT") // You can change this with -XrunScriptOnOwnThread - Default is to run on the EDT
r.run()
}
else {
Console.info(this, "Not running on EDT, developer must do the work")
EventQueue.invokeLater(new Runnable(r))
}

run.cmd
java -cp teppefall-runtime.jar com.teppefall.hybrid.app.JJHMain frames.xml

WindowClipping (12).png

February 12, 2009

Hybrid tutorial - The anti-social image viewer

About
This application displays one image from your own desktop. It is cutting edge anti-social-ware.

Dependencies
You must create an ext/ folder and add bsf.jar, js.jar and commons-logging.jar into this folder.

antisocial.xml
<application script="antisocial.js">
<id>com.teppefall.example</id>
<name>The Anti-Social Image Viewer</name>
<version>1.0</version>
<initialWindow>
<title>The Anti-Social Image Viewer</title>
<content>anti_social_gui.jxml</content>
<systemChrome>normal</systemChrome>
</initialWindow>

<icon>
<image64x64>teppefall-stort-ikon.png</image64x64>
</icon>
</application>

anti_social_gui.jfc (Warning: dropping a Effects2D script into the Effects2D panel runs the code without a security sandbox!)
<component class="com.teppefall.ds.render2d.Effects2D" id="effects">
<property name="foreground" type="color" value="#ffffff"/>
<property name="background" type="color" value="#0000ff"/>
<property name="opaque" type="boolean" value="true"/>
</component>

antisocial.js
importPackage(Packages.java.lang)
importPackage(Packages.java.awt.event)
importPackage(Packages.java.io)
importPackage(Packages.java.awt)
importPackage(Packages.java.awt.image)
importPackage(Packages.javax.imageio)
importPackage(Packages.com.teppefall.ds.render2d)
importPackage(Packages.com.teppefall.ds.render2d.compositing)

context.info("I am " + context.getApplication().getApplicationName())
effects = context.getApplication().getAssembly().getComponentById("effects")
context.info(effects)

var ds, img, bg, desktop, file, files, cachedFilename, cachedFileSize, cachedDate
var transHeight = 40
var r = {
destroy : function() {
shutdown = true
},
initialize : function(ds, fgColor, bgColor) {
bg = ColorLogic.deriveTransparent(Color.BLACK, 200)
desktop = new File(System.getProperty("user.home") + "/Desktop")
context.info(desktop)
if(desktop != null && desktop.isDirectory()) {
context.info("find files")
files = desktop.listFiles(new FileFilter({
accept: function (file) {
if(file.getName().endsWith(".jpg") || file.getName().endsWith(".png"))
return true
return false
}
}))
if(files.length != 0) {
index = Math.floor(Math.random()*files.length)
context.info("index=" + index)
file = files[index]
context.info("file=" + file)
}
}
else {
file = new File("teppefall-stort-ikon.png")
}
if(file != null) {
img = ImageIO.read(file)
cachedFilename = file.getName()
cachedFileSize = Math.round(file.length() / 1024) + "KB"
cachedDate = new Date(file.lastModified())
}
logo = ImageIO.read(new File("teppefall-stort-ikon.png"))
},
render : function(g, size) {
g.setColor(Color.WHITE)
g.fillRect(0, 0, size.width, size.height)
g.setColor(Color.WHITE)
g.setClip(0,0,size.width, size.height)
if(img != null) {
g.drawImage(
img,
size.width/2-img.getWidth()/2,
size.height/2-img.getHeight()/2,
img.getWidth(), img.getHeight(), null
)
g.setColor(bg)
g.fillRect(
0,
size.height - transHeight,
size.width+1, // huh?
transHeight+1 // huh?
)
g.setColor(Color.WHITE)
g.drawString(
"Filename: " + cachedFilename +" Size: "+ cachedFileSize +" Modified: "+ cachedDate +" Pixel size: "+ img.getWidth() +"x"+ img.getHeight(),
20,
size.height - (transHeight/2) + (g.getFont().getSize() /2)
);
}
else {
g.setColor(Color.BLACK)
g.drawString("No picture", 20, 40);
}
}
}

effects.setRenderer(new D2DRenderer(r))

run.cmd
java -cp teppefall-runtime.jar com.teppefall.hybrid.app.JJHMain antisocial.xml

The Anti-Social Image Viewer (3).png

February 10, 2009

Hybrid tutorial - Writing a desktop application in Javascript

About
Teppefall Hybrid makes it possible to write Java desktop applications in just Javascript and XML. You simply add an attribute to the application.xml file.

Dependencies
You must create an ext/ folder and add bsf.jar, js.jar and commons-logging.jar into this folder.

hello.xml
<application script="sample.js">
<!-- Configuration code here-->
</application>

hello.jfc (notice the ID attribute)
<component class="javax.swing.JLabel" id="hello" text="Hello World !"/>

sample.js
context.info("Hallo verden !" + context.getApplication().getApplicationName())
context.info(context.getApplication().getAssembly().getComponentById("hello"))

run.cmd
java -cp teppefall-runtime.jar com.teppefall.hybrid.app.JJHMain hello.xml

CWindowssystem32cmd.exe.png

Hello World !.png

This website is all about alpha and beta software

Download non-beta software here