Developers have the best job in the world
I've often said that being a Software Developer is the "Doctor of The Aughts" - now there's proof.
The Angular Mini-Book is a
guide to getting started with Angular. You'll learn how to develop a bare-bones application, test it, and
deploy it. Then you'll move on to adding Bootstrap, Angular Material, continuous integration, and authentication.
Spring Boot is a popular framework for building REST APIs. You'll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.
For book updates, follow @angular_book on Twitter.
The JHipster Mini-Book is a
guide to getting started with hip technologies today: Angular, Bootstrap, and Spring
Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.
This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.
For book updates, follow @jhipster-book on Twitter.
I've often said that being a Software Developer is the "Doctor of The Aughts" - now there's proof.
I heard this was coming, but I didn't expect it so soon.
There has been some crazy, crazy work going on here in the last month or two and the result is amazing. Today at etech, we’re demoing an early alpha of OpenLaszlo’s new DHTML backend. Truth! Press Release!
Here’s a new demo showing off the goods:
That’s a live OpenLaszlo server, running both apps from the same source code.
Also, new shiny openlaszlo.org page, with links to the DHTML demo.
This demo definitely works best in Firefox, but it's damn impressive. It's tough to test which medium you're using if you open them side-by-side. My hats off to you OpenLaszlo Developers - well done.
If you're looking to learn Spring and live near Boston, I'm coming to town on March 14th to teach our Spring Fundamentals course. We're getting pretty close to capacity, so sign up now before it's sold out!
And yes, I will be staying in Boston on Friday night for St. Patty's day. Should be a good time for sure.
Paul Browne asks (and answers) "which Ajax enabled framework should you use as an Enterprise Java developer?":
Paul goes on to show you how he researched the Ajax-enabled Java frameworks that are currently available and gives a set of criteria he used. His conclusions?
... Sun would do well to build a new team tasked with putting pressure on its own software portfolio. This disruptive influence would ideally eschew technologies associated with the Java Enterprise System. Instead it would concentrate on other issues such as establishing a business model for the Roller blogging platform, or working out a non-virtual machine story for scripting languages. Doing cool things with Rome and Atom. Focusing on mashups, Web 2.0, Read/Write and programmableweb and new ways of getting things done. Oh yeah - AJAX.
...
So who is on the A-Team, in my view?
It's not every day you get listed with a line-up like that! Like Simon Phipps commented - where should I send my resume? Looks like I owe the RedMonk guys a beer or 6.
One of the issues I've had with using DbUnit is getting tables to load in the proper order from XML. The XML datasets I use to load table data are flat and don't really have any notion of foreign keys and such. Therefore, when you get into a situation where tables have a circular reference, using DbUnit can be a real bitch. I ran into this situation yesterday.
Luckily, I was able to figure out a solution thanks to the help of Mark Matthews. Just add "sessionVariables=FOREIGN_KEY_CHECKS=0" to your JDBC URL. Here's how the "db-load" target in AppFuse looks with this in place:
<target name="db-load" depends="prepare" description="Loads the database with sample data"> <property name="operation" value="CLEAN_INSERT"/> <property name="file" value="metadata/sql/sample-data.xml"/> <dbunit driver="${database.driver_class}" supportBatchStatement="false" url="${database.url}&sessionVariables=FOREIGN_KEY_CHECKS=0" userid="${database.username}" password="${database.password}"> <operation type="${operation}" src="${file}" format="xml" transaction="true"/> </dbunit> </target>
Does your preferred database have a similar mechanism for turning off foreign key checks using the connection URL?
Here's what happens with Tomcat 5.5.15:
alotta:~/dev/appfuse mraible$ export CATALINA_HOME=$TOOLS_HOME/apache-tomcat-5.5.15 alotta:~/dev/appfuse mraible$ ant deploy;tstart Buildfile: build.xml ... deploy: [unwar] Expanding: /Users/mraible/Work/appfuse/dist/webapps/appfuse.war into /opt/dev/tools/apache-tomcat-5.5.15/webapps/appfuse BUILD SUCCESSFUL Total time: 3 seconds Using CATALINA_BASE: /opt/dev/tools/apache-tomcat-5.5.15 Using CATALINA_HOME: /opt/dev/tools/apache-tomcat-5.5.15 Using CATALINA_TMPDIR: /opt/dev/tools/apache-tomcat-5.5.15/temp Using JRE_HOME: /Library/Java/Home alotta:~/dev/appfuse mraible$ ant reload Buildfile: build.xml reload: [reload] FAIL - Encountered exception java.lang.NoClassDefFoundError: org/apache/log4j/spi/VectorWriter BUILD FAILED /Users/mraible/Work/appfuse/build.xml:1063: FAIL - Encountered exception java.lang.NoClassDefFoundError: org/apache/log4j/spi/VectorWriter Total time: 1 second alotta:~/dev/appfuse mraible$
Here's what happens with Tomcat 5.5.12:
alotta:~/dev/appfuse mraible$ export CATALINA_HOME=$TOOLS_HOME/apache-tomcat-5.5.12 alotta:~/dev/appfuse mraible$ ant deploy;tstart ... BUILD SUCCESSFUL Total time: 4 seconds Using CATALINA_BASE: /opt/dev/tools/apache-tomcat-5.5.12 Using CATALINA_HOME: /opt/dev/tools/apache-tomcat-5.5.12 Using CATALINA_TMPDIR: /opt/dev/tools/apache-tomcat-5.5.12/temp Using JRE_HOME: /Library/Java/Home alotta:~/dev/appfuse mraible$ ant reload Buildfile: build.xml reload: [reload] OK - Reloaded application at context path /appfuse BUILD SUCCESSFUL Total time: 3 seconds alotta:~/dev/appfuse mraible$
Looks like I'll be sticking with 5.5.12 for the foreseeable future.
Canoo WebTest now has a Firefox plugin, similar to Selenium IDE. I gave it a 2-minute test using Deer Park (a.k.a. Firefox) on my MacBook Pro. Thumbs down, not intuitive enough. Of course, if it had a video like Selenium's video, it might be easier to figure out.
A few web development nuggets:
I also noticed a recently updated howto on the AppFuse wiki:
Spring Rich Client with AppFuse by Radim Burget. The amount of documentation being produced by the AppFuse community is truly awesome. Thanks everyone!
Update:
XFire is crazy fast. If you like, you can see for yourself in AppFuse using OpenLaszlo as a client. Hopefully we can include XFire in a coming release, along with Maven 2 integration.
I received my MacBook Pro this morning, and I've spent the day setting it up, doing some development and running some performance comparisons. The setup was easy: I just booted my PowerBook into Firewire mode and copied over all the files I needed. Everything works for the most part. I did have some issues with IDEA and Eclipse, but got both working after doing a few try and try-again shenanigans. Eclipse was crashing when I'd browse to set my workspace; typing it in manually fixed the problem. IDEA hung the first time I opened it; killing it and restarting fixed the problem.
As far as performance, this thing fricken' rocks! Safari launches in under a second and you're browsing before the dock icons hits the top of its first bounce. Firefox is a different story (likely b/c it hasn't been compiled for x86) - it takes 10 seconds to launch. The good news is once it's up, there doesn't seem to be any performance issues. Safari is amazing though - the speed does wonders for GMail and it actually feels like a desktop application.
When I mentioned yesterday that I was going to compare the MacBook to my desktop, Rob Williams said it wasn't a fair comparison. I agree - but I really wanted this machine to be the best machine I could possibly buy. With my (very unofficial) performance tests, it appears like it is. It's faster than my dual-core AMD 64 desktop machine that has 3 GB of RAM. Now, I have had the desktop for a couple months, so it's possible I'm suffering from OS Rot, but still - it's impressive it keeps up. Here are the numbers from my Performance Comparisons page:
For the tests below, I used Java version "1.5.0_06" and had the following variables set: JAVA_OPTS=Xms256M -Xmx384M, $ANT_OPTS=-Xmx256m. I used the CVS version of AppFuse (1.9.1-dev).
Computer | Operation | Time (mm:ss) |
---|---|---|
HP Pavilion a1250n with Windows XP Media Center (dual-core 2 GHz AMD64 3800+, 3 GB RAM) | appfuse: clean package-web | 00:15 |
appfuse: setup test-all | 01:51 | |
PowerBook G4 with OS X 10.4.5 (1.33 GHz, 1 GB RAM) | appfuse: clean package-web | 00:30 |
appfuse: setup test-all | 03:31 | |
MacBook Pro with OS X 10.4.5 (2.16 GHz, 2 GB RAM) | appfuse: clean package-web | 00:12 |
appfuse: setup test-all | 01:28 |
A couple of interesting things to note:
Conclusion: The MacBook Pro is one of the best machines you can buy (laptop or desktop) for Java development. As for the battery life? I'm still doing the "calibration", so I'm not quite sure. Nor do I care - I plan on having this thing hooked up to my 20" cinema display that Virtuas was kind enough to get for me. The display combined with a mouse, keyboard and iCurve is a very nice setup.
Update: I pulled out the memory from my PowerBook and put it back in. Upon reboot, it resulted in the correct (1 GB) memory setting. The numbers above appear to be accurate regardless. I ran some tests again and times were actually slower (maybe because I'm on battery power).