Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (475)
Games in Android Showcase (106)
games submitted by our members
Games in WIP (530)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: 1 ... 3 4 [5] 6 7
  ignore  |  Print  
  Will the Java Platform Create The World's Largest App Store?  (Read 41598 times)
0 Members and 1 Guest are viewing this topic.
Offline trembovetski

Senior Member




If only I knew what I'm talking about!


« Reply #120 - Posted 2009-11-10 19:22:36 »

I think some of the performance issues on Windows could be attributed to JDK's implementation of translucent windows. It's a known bug (the degradation is very hw dependent), it's to be fixed at least in part in 6u18 (see http://dlc-cdn-rd.sun.com/c1/jdk6/6u18/promoted/b04/changes/JDK6u18.b04.list.html?e=1257877419&h=2dde3e0cdf650ba7786512431314f2cf , bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6794764). You could try latest build of 6u18, see if that helps (http://download.java.net/jdk6/binaries/)

I've been bugging the Java Store team not to use translucent windows just at least on pre-6u18, we'll see if they cave in.

Dmitri
Offline h3ckboy

JGO Coder


Medals: 5



« Reply #121 - Posted 2009-11-10 19:25:16 »

  • Windows 7
  • Java Web Start 1.6.0_15
Using JRE version 1.6.0_15-b03 Java HotSpot(TM) Client VM
dont believe me on the errors?

P.S: I will try updating see if that helps Tongue
Offline DzzD
« Reply #122 - Posted 2009-11-10 19:43:44 »

I think some of the performance issues on Windows could be attributed to JDK's implementation of translucent windows. It's a known bug (the degradation is very hw dependent), it's to be fixed at least in part in 6u18 (see http://dlc-cdn-rd.sun.com/c1/jdk6/6u18/promoted/b04/changes/JDK6u18.b04.list.html?e=1257877419&h=2dde3e0cdf650ba7786512431314f2cf , bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6794764). You could try latest build of 6u18, see if that helps (http://download.java.net/jdk6/binaries/)

I've been bugging the Java Store team not to use translucent windows just at least on pre-6u18, we'll see if they cave in.

Dmitri

sorry, it doesn't help, just installed and tested the store with Java-1.6-018-ea-b04, sames issues (hang / icon mouse pointer far when dragging / and not related but : once again need four start before it can finally connect)

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline ChrisM

JGO Coder


Medals: 1
Projects: 1


END OF LINE.


« Reply #123 - Posted 2009-11-10 19:45:41 »

  • Windows 7
  • Java Web Start 1.6.0_15
Using JRE version 1.6.0_15-b03 Java HotSpot(TM) Client VM
dont believe me on the errors?

P.S: I will try updating see if that helps Tongue

It's not that I don't believe you on the errors at all, just that I have not experienced them.  I wonder if the Windows7/Vista firewall has anything to do with this?

Offline trembovetski

Senior Member




If only I knew what I'm talking about!


« Reply #124 - Posted 2009-11-10 19:50:27 »

sorry, it doesn't help, just installed and tested the store with Java-1.6-018-ea-b04, sames issues (hang / icon mouse pointer far when dragging / and not related but : once again need four start before it can finally connect)

To clarify: I was only referring to perceived gui problems, like very slow repainting when mousing over icons etc, not the network-related problems.

Dmitri
Offline TheAnalogKid

JGO Coder


Projects: 2



« Reply #125 - Posted 2009-11-10 19:56:53 »

Quote
like very slow repainting when mousing over icons etc
OK, then that explains. Thanks for that. We'll wait for u18 then to potentially see a better user experience on Windows platforms. About the network issue, any idea anyone?

Offline No Mercy

Senior Newbie





« Reply #126 - Posted 2009-11-10 20:00:35 »



Starting time and crash : from 10s to 15s (only measured after n start and when all stuff are loaded), several network failure that requiere a restart]

Could you provide the java console when you get the network failures?


[ and finally here is a video I  made showing the drag & hang issue :

http://www.youtube.com/watch?v=LLMnxPLPVZg&fmt=18

sorry did not find anything that can help, but I tried Smiley

Very useful video. Did the app launch? The client may have been in the process of downloading the app.
Offline No Mercy

Senior Newbie





« Reply #127 - Posted 2009-11-10 20:05:55 »

OK, then that explains. Thanks for that. We'll wait for u18 then to potentially see a better user experience on Windows platforms. About the network issue, any idea anyone?

If you could post the Java console log when you see a network connection failure, we may understand what's going on
Offline trembovetski

Senior Member




If only I knew what I'm talking about!


« Reply #128 - Posted 2009-11-10 20:10:27 »

The pauses during the dragging of the icon may be because the EDT was blocked on some network requests or something. I know it sounds strange, but this is how dragging works here: basically a window (that represents the icon being dragged) is created and its position is updated when mouse is moved so that it appears dragged. So if there's something that's blocking the EDT or making it very busy, the dragging will appear sluggish.

Dmitri
Offline ChrisM

JGO Coder


Medals: 1
Projects: 1


END OF LINE.


« Reply #129 - Posted 2009-11-10 20:13:04 »

The pauses during the dragging of the icon may be because the EDT was blocked on some network requests or something. I know it sounds strange, but this is how dragging works here: basically a window (that represents the icon being dragged) is created and its position is updated when mouse is moved so that it appears dragged. So if there's something that's blocking the EDT or making it very busy, the dragging will appear sluggish.

Dmitri


Again, this sounds an awful lot like a Windows networking and, possibly, firewall issue.   I am going to boot into XP on my laptop and see what I get...

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline kevglass

JGO Kernel


Medals: 120
Projects: 23
Exp: 18 years


Coder, Trainee Pixel Artist, Game Reviewer


« Reply #130 - Posted 2009-11-10 20:29:33 »

While I'm happy to see the problems are being worked on, isn't it a bit strange to put something like this, where the customer perception of the store effects the apps therein, into the public eye without testing on the most common OS and common JRE versions.

I'm finding it pretty hard to justify the store to other Java devs, let alone average joe on the street. Is there something fundamentally wrong with the current technology choices or is this another case of the customer suffering due to Sun/Oracles NIH syndrome issues?

Kev

Offline DzzD
« Reply #131 - Posted 2009-11-10 20:33:43 »

Very useful video. Did the app launch? The client may have been in the process of downloading the app.
very strange now I always got "Service only open to limited countries" but it was running sometime before (only few hours ago), yes application may launch it was like menu/button sometimes yes and sometimes now, but seems that now there is only "Service only open to limited countries" everytime

EDIT :message was too long so I cut a lot of text in the output onsole

Quote
Java Web Start 1.6.0_18-ea
Utilisation de la version JRE 1.6.0_18-ea-b04 Java HotSpot(TM) Client VM
...
server running at port: 51053
in the app launcher. args =
printing an array: [Ljava.lang.String;@b64435
Len = 0
checking for Java 6 or higher
server running at port: 51053
getting system prop: com.sun.appstore.client.showTestingDialog = false
getting system prop: com.sun.appstore.client.storeServerURL = http://store.java.com/warehouse/
show dialog = false
Response Code: 200
Response Message: OK
Response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><PingInfo xmlns="http://sun.com/schema/AppStoreApi"><ping><protocol>0.10</protocol><buildNumber>13</buildNumber><buildId>2009-10-22_16-15-02</buildId><jobName>nighthacks-server-site-R5</jobName><buildTag>hudson-nighthacks-server-site-R5-13</buildTag><executorNumber>1</executorNumber><workspace>/root/.hudson/jobs/nighthacks-server-site-R5/workspace</workspace><hudsonUrl>http://jag2.foundry.sun.com/hudson/</hudsonUrl><cdnHost>http://dlc.sun.com/AppStore/AppStoreRoot/AppStoreCluster</cdnHost><appWrapperJar>http://dlc.sun.com/AppStore/AppStoreRoot/AppStoreCluster/desktop/app-wrapper.jar</appWrapperJar><svnRevision>4427</svnRevision></ping></PingInfo>

LocalStorage: using directory C:\Users\DzzD\appdata\locallow\.javastore
no InstalledProducts.xml. will create a new one at C:\Users\DzzD\appdata\locallow\.javastore\InstalledProducts.xml
NonpagingQuery: requesting getProducts(0,20)   currently have 0 products in the cache
NonpagingQuery: requesting getProducts(0,20)   currently have 0 products in the cache
Request Header Cookies ========================
===============================================
Request Headers: {Host=[store.java.com], GET /warehouse/services/products?query=showcase HTTP/1.1=[null], User-Agent=[Java/1.6.0_18-ea], Connection=[keep-alive], Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2]}
requesting getProducts(0,12)   currently have 0 products in the cache
doing the store
Request Header Cookies ========================
===============================================
Request Headers: {Host=[store.java.com], GET /warehouse/services/products?start=0&limit=12 HTTP/1.1=[null], User-Agent=[Java/1.6.0_18-ea], Connection=[keep-alive], Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2]}
Request Header Cookies ========================
===============================================
Request Headers: {Host=[store.java.com], GET /warehouse/services/products?query=top HTTP/1.1=[null], User-Agent=[Java/1.6.0_18-ea], Connection=[keep-alive], Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2]}
Response Code: 200
Response Message: OK
Response: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ProductInfos xmlns="http://sun.com/schema/AppStoreApi" more="false" estimatedRemaining="0" count="4"><product><productId>88</productId><shortName>RuneScape</shortName><shortDescription>RuneScape takes place in the game world of Gielinor, a fantasy-themed realm divided into several different kingdoms, regions, and cities.</shortDescription><description>RuneScape takes place in the game world of Gielinor, a fantasy-themed realm divided into several different kingdoms, regions, and cities. Players can travel throughout Gielinor on foot, by using magical teleportation spells and devices, or mechanical means of transportation. Each region offers different types of monsters, resources, and quests to challenge players. Players appear on the screen as customizable avatars, setting their own goals and objectives.</description><priceInCents>0</priceInCents><productUri>http://store.java.com/warehouse/services/products/88</productUri><score>4.0</score><category>Games</category><authorName>Rob Smith</authorName><currentVersionId>88</currentVersionId><currentVersion>1.0</currentVersion><nScreenshots>5</nScreenshots><icon256Available>true</icon256Available><cdnUri>http://dlc.sun.com/AppStore/AppStoreRoot/AppStoreCluster/products/0-9999/88-88-assets</cdnUri></product><product><productId>145</productId><shortName>Star Cannon</shortName><shortDescription>Seek revenge for the destruction of the Terran Space Navy by defeating the invading alien fleets.</shortDescription><description>The war is going badly for Earth. The Battle of Proxima has seen the defeat of the Terran Space Navy and its flagship, the TNS-HOOD, has been destroyed. A barbaric race of insectoid aliens, the Paragula, is now in position to invade our solar system.

The valiant efforts of our unfortunate pilots has, however, bought enough time for us to bring our experimental fighter, the Nova Ray, to battle readiness. You must command this awesome vessel against almost impossible odds, in the defence of Earth.

Good luck, and good hunting!</description* Identify which numbers come before or after a number.

The directions for each activity is displayed at the top of the screen for you to read, or it can be read by the computer when you need a break Wink

This is a great educational way to pass a little time with a young one.</description><priceInCents>0</priceInCents><productUri>http://store.java.com/warehouse/services/products/275</productUri><score>4.0</score><category>Games</category><authorName>Lucas Jordan</authorName><currentVersionId>356</currentVersionId><currentVersion>1.0</currentVersion><nScreenshots>4</nScreenshots><icon256Available>true</icon256Available><cdnUri>http://dlc.sun.com/AppStore/AppStoreRoot/AppStoreCluster/products/0-9999/275-356-assets</cdnUri></product></ProductInfos>

Response Headers: {null=[HTTP/1.1 403 Service only open to limited countries, IP address 81.250.47.87 is not allowed.], Content-Language=[], Date=[Tue, 10 Nov 2009 19:29:02 GMT], Content-Length=[1283], Set-Cookie=[JSESSIONID=f92155619debe0e9cf993cbfb31f; Path=/warehouse], Content-Type=[text/html], X-Powered-By=[Servlet/2.5], Server=[Sun GlassFish Enterprise Server v2.1 Patch01]}
Response Cookies ==========================
Adding Cookie - JSESSIONID=f92155619debe0e9cf993cbfb31f
===========================================
Response Code: 403
Response Message: Service only open to limited countries, IP address 81.250.47.87 is not allowed.
Response: Error: 403 - Service only open to limited countries, IP address 81.250.47.87 is not allowed.
Response Headers: {null=[HTTP/1.1 403 Service only open to limited countries, IP address 81.250.47.87 is not allowed.], Content-Language=[], Date=[Tue, 10 Nov 2009 19:29:02 GMT], Content-Length=[1283], Set-Cookie=[JSESSIONID=f921562b687b10f4d9851d96a783; Path=/warehouse], Content-Type=[text/html], X-Powered-By=[Servlet/2.5], Server=[Sun GlassFish Enterprise Server v2.1 Patch01]}
Response Cookies ==========================
Removing Cookie - JSESSIONID=f92155619debe0e9cf993cbfb31f
Adding Cookie - JSESSIONID=f921562b687b10f4d9851d96a783
===========================================
Response Code: 403
Response Message: Service only open to limited countries, IP address 81.250.47.87 is not allowed.
Response: Error: 403 - Service only open to limited countries, IP address 81.250.47.87 is not allowed.
loading the categories
Nonpaging Query: got product: RuneScape
Request Header Cookies ========================
Adding Cookie - JSESSIONID=f921562b687b10f4d9851d96a783
===============================================
Request Headers: {Cookie=[JSESSIONID=f921562b687b10f4d9851d96a783], GET /warehouse/services/categories?namespace=category HTTP/1.1=[null], Host=[store.java.com], User-Agent=[Java/1.6.0_18-ea], Connection=[keep-alive], Accept=[text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2]}
Nonpaging Query: got product: Star Cannon
Nonpaging Query: got product: CyberSynchs on Desktop
Nonpaging Query: got product: Numbers and Counting
Response Headers: {null=[HTTP/1.1 403 Service only open to limited countries, session had been denied], Content-Language=[], Date=[Tue, 10 Nov 2009 19:29:02 GMT], Content-Length=[1235], Content-Type=[text/html], X-Powered-By=[Servlet/2.5], Server=[Sun GlassFish Enterprise Server v2.1 Patch01]}
Response Cookies ==========================
No Cookies
===========================================
Response Code: 403
Response Message: Service only open to limited countries, session had been denied
Response: Error: 403 - Service only open to limited countries, session had been denied
cats = null

Offline DzzD
« Reply #132 - Posted 2009-11-10 20:38:00 »

but.. just notice that even if I cant connect there are four icons on the right panel and I can drag it and the same issue appear on dragging, so the drag issue appear even when not connected, not suprising but it may be interresting to know

EDIT: on my screen could be up to 10centimeter/approx 200-300 pixels between mouse cursor and dragged icon

Offline DzzD
« Reply #133 - Posted 2009-11-10 20:59:24 »

sorry for this triple post but maybe... maybe... the animation showing how to drag icon to desktop (on the upper right panel) cause the drag issue.... (not the only one cause it also appear when the animation is not running), it can be see in the video and I noticed it was running when I tryied unconnected ten minute ago and get the same drag problem

Offline JL235

JGO Coder


Medals: 10



« Reply #134 - Posted 2009-11-10 21:13:54 »

The store has started connecting for me! I have done nothing on my end to fix this issue, it's started working on it's own. However once open I am unable to sign in. I have also tried signing up another of my e-mail addresses, but the signup page messed up so I'm not sure if it worked or not.

The only part I've really interacted with so far is the sign-in dialog, but typing into the boxes is incredibly laggy. I'm finding text appearers literally a few seconds after typing. It's not even downloading content in the background (as I'm not signed in) or running any animations (except that crappy fade effect). All I'm doing is typing into a text field in a dialog box. I can only presume it is constantly redrawing the whole app when I enter a character, but even if that was true I would be surprised it takes that long to do so. My PC is a 2ghz Athlon 64 with 1gb ram and a Geforce 6600. My JVM is Java 6 update 16.

I also notice that the Java store repaints the whole window as it's dragged. This is a bug because on my PC I have this turned off (along with Aero and everything else) in order to make Windows move/change instantly. All my other Swing apps also comply with this, it's just the Java Store that doesn't.

Offline trembovetski

Senior Member




If only I knew what I'm talking about!


« Reply #135 - Posted 2009-11-10 22:05:01 »


I also notice that the Java store repaints the whole window as it's dragged. This is a bug because on my PC I have this turned off (along with Aero and everything else) in order to make Windows move/change instantly. All my other Swing apps also comply with this, it's just the Java Store that doesn't.

This is because window dragging isn't done by the OS here, but instead window position is updated by the application as you move mouse with button pressed. Try any other shaped/translucent window (non-java, like windows media player), you'll see they behave the same despite of your desktop setting.

Dmitri
Offline ChrisM

JGO Coder


Medals: 1
Projects: 1


END OF LINE.


« Reply #136 - Posted 2009-11-10 22:10:57 »

For fun, I launched the app store, in WindowsXP, running in Parallels on OS X, while also doing screen capture and running my other, regular OS X apps.  Not too bad considering!

http://www.youtube.com/watch?v=w-qb-ksmldc

Offline Abuse

JGO Coder


Medals: 11


falling into the abyss of reality


« Reply #137 - Posted 2009-11-10 22:20:34 »

This is because window dragging isn't done by the OS here, but instead window position is updated by the application as you move mouse with button pressed. Try any other shaped/translucent window (non-java, like windows media player), you'll see they behave the same despite of your desktop setting.

Dmitri


As far as I can tell WMP 11 conforms to the desktop setting in both skinned & normal modes =/
The only application i've noticed ignoring it is winamp.

Make Elite IV:Dangerous happen! Pledge your backing at KICKSTARTER here! https://dl.dropbox.com/u/54785909/EliteIVsmaller.png
Offline JL235

JGO Coder


Medals: 10



« Reply #138 - Posted 2009-11-10 22:20:48 »

This is because window dragging isn't done by the OS here, but instead window position is updated by the application as you move mouse with button pressed. Try any other shaped/translucent window (non-java, like windows media player), you'll see they behave the same despite of your desktop setting.

Dmitri

I just tested this and when in normal, compact and skinned mode Windows Media Player does not redraw as it's dragged.

Edit: plus it's more then that. It's not conforming to how I have my desktop setup. Other apps do, so this should too.

Offline DzzD
« Reply #139 - Posted 2009-11-10 23:15:41 »

too sad  Cry
Quote
Dear bruno augier,

Unfortunately, your application to the Java Warehouse was declined.

Please do not reply to this email, as this is an automated email which no person monitors. If you have questions, please refer to the FAQ page.

Sincerely,
The Java Warehouse Team

Offline trembovetski

Senior Member




If only I knew what I'm talking about!


« Reply #140 - Posted 2009-11-10 23:39:32 »

I just tested this and when in normal, compact and skinned mode Windows Media Player does not redraw as it's dragged.

Yeah, you're right, it does.

Quote
Edit: plus it's more then that. It's not conforming to how I have my desktop setup. Other apps do, so this should too.

I'd say this is the least of its problems..

Dmitri
Offline woogley
« Reply #141 - Posted 2009-11-11 02:27:25 »

The pauses during the dragging of the icon may be because the EDT was blocked on some network requests or something ...

Er.. so you're saying that blocking/non-async network requests are being handled on the EDT? Shocked
Offline trembovetski

Senior Member




If only I knew what I'm talking about!


« Reply #142 - Posted 2009-11-11 03:57:15 »

Er.. so you're saying that blocking/non-async network requests are being handled on the EDT? Shocked

I don't know about that, it was just a guess, but I know that JS uses sync Image loading, for example which happens on the EDT (this will be fixed I'm told). I don't know if the pauses people are seeing are because of that though.

Dmitri
Offline No Mercy

Senior Newbie





« Reply #143 - Posted 2009-11-11 05:54:08 »

too sad  Cry

US only developers currently Shocked
Offline No Mercy

Senior Newbie





« Reply #144 - Posted 2009-11-11 05:56:20 »

very strange now I always got "Service only open to limited countries" but it was running sometime before (only few hours ago), yes application may launch it was like menu/button sometimes yes and sometimes now, but seems that now there is only "Service only open to limited countries" everytime
]

Store only available in the US that explains your networking issues.
Offline GKW

Senior Member




Revenge is mine!


« Reply #145 - Posted 2009-11-11 06:16:57 »

Turns out I don't live in the US which is of course news to me.
Offline princec

JGO Kernel


Medals: 339
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #146 - Posted 2009-11-11 10:52:13 »

The simple fact is, the EDT is being blocked, seriously, to the point of the entire UI freezing for over a minute (even the Java Console!). Someone should probably stick a trap in on the server communications to assert that they're not happening in the EDT, and in the meantime, some sort of Inquisitor should thrash those responsible and hang them by their toenails.

Cas Smiley

Offline jojoh

JGO Knight


Medals: 5
Projects: 7


games4j.com


« Reply #147 - Posted 2009-11-11 16:46:23 »

I get
1  
The action attempted was unsuccessful because the connection to the Java Store server was interrupted. Please try again.

Any normal person might think that trying again might possibly solve the problem.

Only since I am part of the community that help each other out with the "debug everywhere" I have a console open that informs me that the "Please try again" will only work if I first happen to be teleported (or otherwise relocated) to US first  Cheesy

I guess it is more difficult to get to the Java Store by now for ppl outside US, but still... Not really a quality feeling for the persons who have been "Please trying again" for some time now.

Anybody knows when/if more countries will be allowed to use this?

Offline DzzD
« Reply #148 - Posted 2009-11-11 16:51:49 »

US only developers currently Shocked
registration was done from an us server but my account say i am french...

bha I am sure I can manage to get access :p, let's use another name Bruce Mc Augier  and retry  ! (only joke would be a aste of time ....  Cry )

Offline ChrisM

JGO Coder


Medals: 1
Projects: 1


END OF LINE.


« Reply #149 - Posted 2009-11-12 16:41:36 »

New video capture of the Java Store and multiple apps in action here: http://www.youtube.com/watch?v=GQQfpurXjJU

Pages: 1 ... 3 4 [5] 6 7
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

Riven (4 views)
2014-07-23 21:16:32

Riven (5 views)
2014-07-23 21:07:15

Riven (5 views)
2014-07-23 20:56:16

ctomni231 (40 views)
2014-07-18 06:55:21

Zero Volt (36 views)
2014-07-17 23:47:54

danieldean (30 views)
2014-07-17 23:41:23

MustardPeter (32 views)
2014-07-16 23:30:00

Cero (47 views)
2014-07-16 00:42:17

Riven (48 views)
2014-07-14 18:02:53

OpenGLShaders (38 views)
2014-07-14 16:23:47
HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54

HotSpot Options
by Roquen
2014-05-06 15:03:10

Escape Analysis
by Roquen
2014-04-29 22:16:43

Experimental Toys
by Roquen
2014-04-28 13:24:22
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!