If you’ve been brave enough to install or upgrade your ubuntu installation to the latest hardy heron version you may find that the default font configuration is …unsound. Depending on what resources you have available to you there is a very quick and dirty fix for you.
Copy over all "*.ttf" fonts you want available to your installation in to your home "~/.fonts" directory and run "fc-cache -fv ~/.fonts" on them to get your font cache updated.
Note: It is not legal to just do a file search on your windows or os x computers for all .ttf files and copy them over to this same fonts directory - even if it technically does work. This should only be used for fonts that you have legally purchased from Adobe/Apple/Microsoft or have some other copyright legal way of using.
I’ve noticed a distinct lack of opinion coming from (what I personally view to be) some of our more prominent java developers in the industry on the closures debate.
By this I mean Gavin / Rod / Howard and Cedric.
I know there may be many valid reasons to not give opinions - such as not traditionally being language designers, or worries about relationships and arguments with the people involved…or just not wanting to add to the fray of opinions - but you guys are probably uniquely qualified to give them more than the majority of typical java users (myself included) and might be doing the language a disservice by not coming out and saying something.
Seems like the time is now to make a stand and say something if you are going to, but maybe it’s not necessary or there are other factors involved that I just don’t understand. .. ?
A new version of Tapestry has been released for general consumption. It is highly reccomended that anyone using the 4.1.x series of Tapestry try out the upgrade as it contains many bug fixes and minor improvements that you’ll likely benefit from. (more found in the release notes)
Download it here.
Tacos Updates
Although I’ve been very bad about keeping track of what is going on in Tacos it looks like Andreas Andreou and Igor Drobiazko have been doing a great job maintaining and greatly expanding the core “offering” that Tacos now contains. Some of the bigger items I’ve noticed:
- Tacos 4.1 now has comet support / new binding prefixes / Dojo 1.0.2 / YUI 2.4.0 / Ext JS 2.0 / JQuery 1.2.1 supprt! Although I did notice Andy going through and refactoring Tapestry core for the 4.1.5 release to support different core javascript libraries I had no idea the support was this extensive. Nice work guys!
- Tacos Seam for Tapestry 4.1.x / Tapestry 5 - As if all of this new library support wasn’t enough Igor Drobiazko in particular has been doing an outstanding job which has resulted in Seam support for Tapestry versions 4.1.x or Tapestry 5. See more on that here and here.
- DateJs support in Tacos 5! I was very pleasantly surprised to find this little gem hidden away in the Tacos 5 area as well. There have been a number of announcements on this library on ajaxian.com and it looks like a really promising new way to handle javascript date parsing - similar to the way that google calendar can figure out dates from a single input field. (which I think took a lot of its currently functionality inspiration from some excellent suggestions made by Aza Raskin on this particular piece of functionality. )
All in all Tacos is starting to look more and more exciting these days. If I can find some free time (yeah right), I may want to start looking in to it again.
My new friend Kirill has reminded me of another constant source of vomiting when he made some observations about my anti-Swing web development rant.
Specifically he mentions CSS as being somehow better at laying out html than umm…html?
A possible analogy for the web development would be doing everything in pure HTML (and its deficiencies with using tables for everything) instead of using much more flexible CSS layouts.
This post isn’t really about what he said as I think he seems like a pretty smart guy and can probably wipe the floor with me in many programming areas - but more about this weird trend in web development where people defend a lack of control over HTML by pointing to how people should be using better layout techniques - like CSS - instead.
Or the other myth that people like to spread about how using tables is evil. I know I’ve heard them say these things in forums / blog posts / issues reported by their users - the condescending jerks.
Why do you need control over the html? You have CSS - it’s the only way web development should be done. geez n00b
You know what? I call bullshit. I hate to break the news to you guys, but out of all the content you can possibly control in a browser the HTML part is probably the most important one. Yeah, the jig is up guys. You actually do need to be able to control some of that HTML when writing web applications if you want to actually use all that the web has to offer.
Oh I know….I’ve read the alistapart.com articles too. I know all about tableless layouts. I’ve spent hours / days / lost hair trying to make countless layout configurations work strictly that way. It’s ok, you’re not the only ones who believe(ed) it. That’s all fine and well, but until all browsers everywhere implement the very latest CSS standards correctly and fully - the rest of us here in the real world trying to write real applications have to deal with what we’ve been given.
Sometimes a table is kind of nice. Sometimes you can do all kinds of neat shit in tables that you probably don’t even know how to do in CSS even if it is possible. Have you seen these clowns at ebay and google? They’ve got those ugly ass tables littered all over their sites.
Haha - jokes on them. Oh wait - don’t they employ some of the best interface developers the industry has to offer? Damn….Well maybe that’s just old code that no one has bothered to clean up yet. I’m sure <your Swing-like steaming java turd web development API here> will fix all of that up as soon as they start using it.
So whatever, you can paint by numbers if you want to…Or you can use the most that your browser has to offer you. Your choice.
The MysteryCoder has written up a little article discussing one often missed feature in Rails - Tapestry style components.
In it he discusses some of the features he misses in WebObjects/Tapestry style components such as re-usable view logic, component composition and binding parameters.
I know another rails developer (who I’ll leave anonymous to save him from the shame of being associated with java
) that also wanted a way to create Tapestry style components in Rails but I’ve not heard him mention that side project again so I’m assuming it still hasn’t been done.
Does anyone know of any ruby projects that might help save MysteryCoder some time / effort before he gets too far trying to develop something like this? (or reasoning that shows how Rails doesn’t need this particular component feature?)
Not knowing where else to announce it I thought I should mention that version 2.7.2 of OGNL was quietly released yesterday and is now available via ibiblio. Special thanks to Toby Tmjee for his recent contributions and help on the project.
The number of issues being reported related to expression compilation seems to have gone way down - so it may tentatively be safe to say this feature is “becoming stable”.
The javacc grammar parser code was also re-generated for this recent release using some of the new improvements that Tom Copeland mentions here.
As I’ve not really done a good job posting updates about releases I’ll go ahead and dump the full 2.7 - 2.7.2 jira issue log here as well. The good majority of issues fixed have been related to the expression compiler work - but there is still a lot of good stuff in there that projects using it without expression compilation will still find very useful. (from straight up bug fixes to substantial performance / concurrency improvements and even full Java 5 support for generics and varargs)
Release Notes - OGNL - Version 2.7.2
Bug
- [OGNL-80] - CastCastException when setting properties on objects that use generics in superclass properties
- [OGNL-121] - Race condition in SimpleNode#evaluateGetValueBody(OgnlContext, Object)
- [OGNL-122] - OGNL Double to BigDecimal type conversion
- [OGNL-124] - When OgnlException is wrapped in another exception, any exception wrapped by the OgnlException appears to be swallowed
- [OGNL-125] - When OgnlException is wrapped in another exception, any exception wrapped by the OgnlException appears to be swallowed
- [OGNL-126] - Don’t call setter properly
- [OGNL-127] - can’t find methods with varargs parameter
- [OGNL-128] - remainder expression doesn’t look for child syntax expressions
- [OGNL-129] - Collision property and method with same name
- [OGNL-130] - Array syntax error
- [OGNL-134] - primitive character conversion in statement compilation
- [OGNL-136] - Ignore synthetic methods when using getDeclaredMethods()
- [OGNL-141] - Very serious OgnlRuntime scalability and concurrency bug in versions greater than 2.6.10
- [OGNL-142] - scope=provided on javassist dependency leads to NoClassDefFoundError
New Feature
- [OGNL-7] - Full Java 5 Support for OGNL
Task
- [OGNL-133] - bring back old OgnlContext.callMethod parameter
- [OGNL-137] - Port OGNL docs from ogn.org to OpenSymphony’s OGNL confluence space
Release Notes - OGNL - Version 2.7.1
Bug
- [OGNL-96] - object equality b0rken
- [OGNL-97] - Compile OGNL expressions often require #this
- [OGNL-98] - Simple ognl expressions like comparison “==” or divide “/” cause errors
- [OGNL-103] - Unable to find correct readMethod named is…()
- [OGNL-104] - object equality still broken
- [OGNL-105] - Compiled OGNL using bracket notation requires #this
- [OGNL-106] - Null Pointer Exception when parsing enum constant
- [OGNL-107] - CLONE -ClassCastException in ASTChain
- [OGNL-108] - Console Stack traces when using instanceof in OGNL
- [OGNL-110] - Subtracting or multiplying two doubles causes error in log, though the calculation is correct
- [OGNL-112] - Unable to find getter when multiple getters exist with similar naming
- [OGNL-113] - Object with null toString() causes NPE in OGNL
- [OGNL-114] - fails method name resolution for boolean JavaBean properties
Release Notes - OGNL - Version 2.7
Bug
- [OGNL-6] - When setting fields type conversion returning null falsly reports a NoSuchPropertyException
- [OGNL-9] - Cannot handle hivemind’s messages.format
- [OGNL-10] - Calling methods with parameters containing more calls ?
- [OGNL-11] - ClassCastException in ASTChain
- [OGNL-12] - expression compilation problem
- [OGNL-13] - Class loading issue with in OGNL 2.6.7+ when multiple classloaders
- [OGNL-14] - Ternary expression, NPE
- [OGNL-16] - Unable to parse OGNL expressio
- [OGNL-17] - OR expression compile error
- [OGNL-18] - bad array index selectedPresenters[index]
- [OGNL-19] - expression concatenated via “and” / “&&” is not evaluated correctly
- [OGNL-20] - expressions compilation complains about a null setter body
- [OGNL-21] - another “setter body: null ” error
- [OGNL-25] - Expression stop working in Tapestry 4.1.2
- [OGNL-26] - Try to access to the hidden class java.util.HashMap$Entry
- [OGNL-27] - Bug in new version of OGNL
- [OGNL-28] - CLONE -OR expression compile error
- [OGNL-29] - String concatenation of different types fails in ternary expression
- [OGNL-30] - NOT with OR fails
- [OGNL-31] - Caching problem when looping over different implementations of the same interface
- [OGNL-32] - Contatenation of single character string results in wrong outcome
- [OGNL-33] - problem evaluating an expression on an abstract class not implementing all methods of an implemented interface
- [OGNL-35] - CLONE -expression concatenated via “and” / “&&” is not evaluated correctly
- [OGNL-36] - Another “getter body: null setter body: null ” Error in combination with “||”
- [OGNL-37] - messages.format with 3 parameters causes ArrayIndexOutOfBoundsException
- [OGNL-38] - CLONE -NOT with OR fails
- [OGNL-39] - Ternary expression with date formatting causes Mismatched stack types error
- [OGNL-40] - Error appending strings
- [OGNL-41] - javassist CannotCompileException for Expression ” value || !okOnly “
- [OGNL-43] - getValue() not called on second parameter to && if the first returns true
- [OGNL-44] - Appending a Long, String, and int results in error
- [OGNL-46] - CLONE -Caching problem when looping over different implementations of the same interface
- [OGNL-47] - Using a property from an enum constant as a method argument fails
- [OGNL-48] - ognl string concatenation + static syntax does not render properly
- [OGNL-49] - VerifyError: wrong return type in function
- [OGNL-50] - Nullcheck with && and ! fails
- [OGNL-52] - setAccessible(false) threading bug
- [OGNL-53] - OR fails with boolean expression as first condition
- [OGNL-54] - Calling method of object and passing a ‘conditional’ expression as parameter
- [OGNL-55] - Calling method of object with String parameter
- [OGNL-56] - the NOT of complex expression fails
- [OGNL-57] - The compilation of expressions with negate symbol (!) causes javassist exception
- [OGNL-58] - Ternary that appends multiple types fails
- [OGNL-59] - Target is null for method
- [OGNL-60] - messages.format with one parameter on a component fails
- [OGNL-61] - Method call gets some (javassist?) code fragment passed as argument instead of the evaluated expression
- [OGNL-62] - Boolean property with is() and toggle() methods causes failsafe error
- [OGNL-63] - IllegalArgumentException
- [OGNL-64] - Appending a Long with dot notation, a String, and an int creates failsafe error
- [OGNL-65] - OR expression with && and comparisons causes failsafe error
- [OGNL-66] - Ternary evaluates unused expression
- [OGNL-67] - Invalid Types error for inequality operator (!=) when used in Ternary Expression
- [OGNL-69] - Tapestry Exception with a map object
- [OGNL-70] - CLONE -Ternary evaluates unused expression
- [OGNL-72] - Wrong return type in function
- [OGNL-73] - Ternary evaluates unused expression with date formatting
- [OGNL-74] - Error in ASTProperty when running in JDK1.4
- [OGNL-75] - Ognl Exception source is null for getProperty(null, “mapKey”) when using split on a map
- [OGNL-76] - Iterating over an Object Array in a For causes NoClassDefFoundError
- [OGNL-77] - javassist classname error
- [OGNL-78] - Appending strings in ternary causes failsafe error
- [OGNL-81] - Boolean expression not evaluated
- [OGNL-82] - java.lang.Integer.valueOf() failling in 1.4 jre
- [OGNL-83] - Can’t get object properties returned from Map
- [OGNL-84] - Indexed expressions (”prop[index]“) do not lookup for the getProp(int index) method in the right class
- [OGNL-85] - constructor signature matching problem (int <-> java.lang.Integer)
- [OGNL-86] - use of incorrect expression root object in some arithmetic expressions
- [OGNL-87] - Get an ognl.InappropriateExpressionException when negating a boolean
- [OGNL-89] - expression compilation problem
- [OGNL-90] - cannot create empty list using {}
- [OGNL-91] - compilation problem in case of minus operator
- [OGNL-92] - “incompatible array types” with enum values
- [OGNL-93] - expression compilation problem
- [OGNL-94] - Tacos:Tree does not work with the current snapshot
Improvement
Latest Entries
- how to fix butt ugly ubuntu hardy heron fonts
- Where are our java leader’s opinions on closures?
- Tapestry 4.1.5 Released && various Tacos project releases (like Seam / jQuery support)
- painting by numbers, or how html cowards hide behind CSS
- Rails component envy
- OGNL 2.7.2 Released
- news flash - Swing is a terrible API to emulate in web development
- hip hop is neat
- good closures, bad closures
- Sergey, come home..
