Matt RaibleMatt Raible is a writer with a passion for software. Connect with him on LinkedIn.

The Angular Mini-Book 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 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.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.
You searched this site for "free sex movies for men non blog". 1,227 entries found.

You can also try this same search on Google.

Sony Ericsson Communicam

I went looking for the T68i's Communicam today since I'd like to get this sucker for moblogging. On Amazon, I found the T300 for $-80. That's right folks - they'll pay you $80 for buying it! Of course, they get you with the "new service activation" clause - it's $250 otherwise. If anyone knows of good prices for the Communicam, let me know. The best price I found was $140 US.

Posted in General at Mar 05 2003, 07:50:09 AM MST 1 Comment

Moblogger enabled for this blog

I enabled Russ's Mobblogger for this site this evening. In fact, I'm typing this post in an e-mail (complete with HTML). I found a couple of issues and I have a couple of questions:

Issue #1: The FTP doesn't seem to support symlinks. I wanted to create a symlink so the <ftpDir> would point to my /repository/images directory. No dice. It wouldn't recognize the symlink as a directory. As a workaround, I put a symlink in /repository to point to ~/moblog/media.

Issue #2: Moblogger uses a relative path for it's URLs in images and other media. Right now, it's hard-coded to do <img src="media/filename.ext" .../> I altered the MailProcessor.java class to use a path for my media assets of "/repository/media" so that the above symlink would work. Since Roller uses /page/username for its sites, a relative path wouldn't work. Maybe this could be a configuration parameter - hint, hint ;-)

Issue #3: The script to run mobblogger on *nix didn't have quartz.jar in the classpath. And for some reason, I had to remove "#!/bin/sh" from the top of the file in order for it to run on my RedHat 8 machine. And it also only runs while I'm logged in. Does anyone know how to set this up to run constantly? Should I do it as a cron job or something? It's just a java -cp ... command.

I might set this up on the server where this site is hosted, but it seems to work fine on my local machine right now, so I'll just leave it there. I doubt I'll even ever use it. For one, I don't have a camera for my phone, and that'd be the only really cool thing to use it for. Maybe I'll post an e-mail everyone once it awhile, but most of the posts I want to write are pretty long. That might take a while, even with T9. Oh well, it's still cool software and I dig it. Thanks Russ!

Posted in General at Mar 04 2003, 10:29:28 PM MST 1 Comment

Ant JMeter Task

By now, you've probably heard of JMeter. It's basically a Swing-based performance testing framework. From the struts-user list today, I found out there's a JMeter Ant Task. Sweet - looks easy to use too. Now if I could just figure out JMeter, or better yet - be tasked with actually implementing it. I've played with it a couple of times, but never long enough to get something I rely on and use.

Anthill, on the other hand, was so easy to install and use that I've set it up at home and I've automated some of my projects' build/deploy processes. I might have to add Roller to the mix. If I were real daring, I could set it up on this server and build/deploy Roller every day or so. Of course, I wouldn't keep this site up to the latest version - I'd setup a 2nd instance of Roller. Any interest in this? Or better yet, do you know anyone that's hosting an Anthill install that we can use?

Posted in Java at Mar 04 2003, 02:07:49 PM MST 1 Comment

[ANNOUNCE] Tomcat 5.0.1 Alpha Released!

This is huge for me, as I need to start working with JSP 2.0 for my own personal satisfaction (less code == more productivity). I know that Resin supports JSP 2.0 as well, but I'm familiar with Tomcat and it's free. The most I've ever done with Resin (to this point) is to install it. To my knowledge, Resin is not free (esp. when I'm running a business site like this one). Anyway, on with the e-mail from the tomcat-user mailing list.

Tomcat 5.0.1 Alpha is now available for testing.

This is actually the first real milestone of Tomcat 5, as Tomcat 5.0.0 did not include any new feature over 4.1.x other than the support for Servlet API 2.4 drafts and JSP 2.0 drafts.

Tomcat 5.0.1 includes:
- improved performance (with additional improvements planned)
- complete montoring capabilities through JMX, with JSR 77 support
- clustering capabilities (not included with that build as a binary)
- JMX configuration capabilities
- with a lot more to come in later milestones

[Downloads]

Posted in Java at Mar 04 2003, 10:00:20 AM MST Add a Comment

Struts Training: Week 1

I was invited to attend Basebean's Struts Training today. Vic Cekvenich was nice enough to give me a password to attend, and I agreed that I would blog about it. I also agreed to help out on the MVC Programmers mailing list. I don't know that I'll do the labs, but I am interested in doing them - especially since the examples run on Resin 3.0. So I'm sitting in right now and they're doing some introductions. More to come soon. It's about a 1 and 1/2 hour class this morning - should be fun.

The first 20 minutes have been mostly about open source and it's benefits. I'm thinking - most of the students already know this don't they? Maybe not. I guess my perspective is skewed since I've been involved in open source for so long. Before I started using it, I guess I kinda scoffed at it - so I suppose the intro is good.

The second 20 minutes has been about "why projects fail" and the importantance of requirements. I can definitely understand this - as I've been on a couple projects with a bad requirements-gathering process. So far, this class has been a little disappointing as I haven't learned anything yet. The students seem very interested in the first two topics though - so I guess it's satisfying them. I'm sure I'd be more satisfied if I'd already done the labs (the students have).

Now onto Project Management and CMM. Didja know you can get certified as a Project Manager from PMI.org. IMO, a Project Manager can single handedly make or break a project. I agree with Vic that "the best person to have certified on a project" is the PM. The PM on my current project rocks, and it's made the project soooo much easier. You can track your project's ROI at softwarereality.com.

Don't these student's have mute on their phones? I've heard kids crying and dogs barking so far ;-) No one's heard me sneeze yet - and I've done it 3 times!

Vic recommends the following:

  • When starting a project, create the entire application as an HTML mockup. I agree with this - it's awesome for getting requirements solidified.
  • Mockup the outputs - i.e. Reports in Excel. For reports, he recommends using iReport. After a quick review - it looks like a report designer that creates an XML file that can be fed to Jasper Reports.

NetLedger.com is a recommended UI for complicated forms. Rumored to have a free login.

Tip: When you have bad requirements, surf the web. Programming on your project will just frustrate you. My advice: contribute to an open source project - then you'll keep your skills up to par. Or, read blogs - you'll learn something there too.

Now we're learning how to setup an IDE (Eclipse) and deploy/test and example app. Looks like the sample app (webPIM) uses JSTL's Fmt tag. Cool, I've never used it, I should probably do the labs. Teaching students how to use an IDE for Struts Development is definitely the easiest way to go, but using Ant is the real-world way - right?

The next lab covers configuring Tiles and developing a sample layout. I noticed it was a big confusing for the students that the tiles definitions file is named layout.xml and the base Tiles template is named layout.jsp. I usually name my tiles definition file tiles-config.xml.

Posted in Java at Mar 01 2003, 09:49:51 AM MST Add a Comment

Windows Trick o' the Day

I knew this trick existed, but I couldn't remember it. If you to drill down through your directory structure all the time, this is a real time saver. In Windows Explorer, you can highlight a folder and full expand it (and it's children) using the * key on your far right keypad. Using the - key will contract all folders. Other good Windows tricks I know are using the Win Key (that's the one with the Windows logo on it). Win+r = run, Win+e = explorer and Win+d = desktop. And last but not least, in Win2K+ right-click >> Properties on My Computer will get you to System Properties. If you have other good tips for Red Hat 8, OS X or Windows - please share!

Posted in General at Feb 27 2003, 01:15:47 PM MST 3 Comments

Moblogger works with Roller!

I did some testing with Russ's Moblogger this morning and it works great with Roller! I haven't tested attaching images, but sending a plain text message worked like a charm. The hardest part was setting up the e-mail address. I'll try to document my setup procedures tonight for other Roller users.

Hopefully, I'll be setting this up on this site so I can post with my T68i. What does that give me? Nothing, absolutely nothing - simply the ability to post 1 liners or something like that. Of course, I could also be motivated to get the phone's camera - that might make it a little more worthwhile. Good excuse for new gadget. I dig the software/idea - thanks Russ!

Moblogger Logo

Posted in Roller at Feb 26 2003, 06:39:19 AM MST 5 Comments

Struts Update: 1.1 beta 3 to 1.1 RC1

While upgrading Hibernate last night and this morning, I also upgraded Struts. Now I'm having some issues there, so I'd better document those too. First of all, the following line doesn't seem to be rendering any client-side JavaScript anymore:

<html:javascript formName="resumeForm"
      dynamicJavascript="true" staticJavascript="false"/>

Update 1: Nevermind, it seems my Internet connection went dow while starting Tomcat. Since the Digester couldn't validate the Struts' XML configuration files with their respective DTDs, it stopped them from loading.

Update 2: This turned out to be a legitimate issue. Adding cdata="false" to the above tag enabled the browser to see the JavaScript by removing the "<![CDATA[" after <script type="text/javascript">

Revisiting the Hibernate upgrade, I needed to add dom4j.jar to WEB-INF/lib to solve java.lang.NoClassDefFoundError: org/dom4j/Node.

Now I'm getting:

java.lang.NoClassDefFoundError
	at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:571)

What the @#$*%#? hibernate2.jar is in WEB-INF/lib??

Update 3: I had to add cglib.jar to WEB-INF/lib as well. Now back to an issue I'm having with the Validator where client-side validation is working when I click "cancel" (as in, it's disable), but server-side is kicks in. Argghhhh!

Update 4: I found an issue (via the struts-user list) about using the Validator with LookupDispatchAction. It basically doesn't allow you to control validation on a method level, so I've hacked the following workaround.

I changed <html:cancel> to be <html:button> and added onclick="cancel()", where cancel() is the following JavaScript method:

<script type="text/javascript">
function cancel() {
    location.href = '<html:rewrite forward="cancelUser"/>';
}
</script>

The "cancelUser" forward points to "/editUser.do?action=Cancel", which is an action-mapping that doesn't have validation (validation="false") and this hits the "cancel" method on UserAction and routes appropriately.

Phew - I'm beat. I never realized being an upgrade-happy-keyboard-monkey could be so much work!

Posted in Java at Feb 24 2003, 11:10:46 AM MST 4 Comments

Hibernate Upgade: 1.2.3 to 2.0 (My Story)

I'm upgrading struts-resume to Hibernate 2.0 tonight. I thought I'd blog my adventure and what I needed to change.

Step 1: Patch XDoclet to allow specifying the DTD in the generated .hbm.xml files.

Step 2: Download Hibernate 2.0 beta 2. It's at the bottom of the preceding link.

Step 3: Extract to struts-resume/lib and change lib.properties to version 2.0.

Step 4: Edit build.xml file to pick up the new DTD. I changed <hibernate/> to be <hibernate validatexml="true" version="2.0"/>.

Step 5: Using HomeSite, I did s/cirrus.hibernate/net.sf.hibernate/g. 14 matches. The project currently has 3 DAO's and a ServiceLocator to get Hibernate Sessions.

Step 6: ant clean deploy Not too bad, only one compile error.
D:\source\appfuse\src\ejb\org\appfuse\persistence\ServiceLocator.java:12: cannot resolve symbol
symbol : class Datastore
location: package hibernate
import net.sf.hibernate.Datastore;


Step 7: Open up Eclipse, refresh the project and right click on the project name, click Properties >> Java Build Path. Change path for hibernate.jar to struts-resume/lib/hibernate-2.0/hibernate.jar. Remove the previous path.

Step 8: Go searching for what the heck happened to Datastore. Hibernate CVS is first choice. Pause to post (per chance someone reads and sends solution).

Step 9: Step 4 from the Hibernate 2 Porting Guidelines. Replacing attribute names, DTDs and changed throws SQLException to JDBCException in ServiceLocator class.

Step 10: Repeat Step 5 for all Unit tests (they live in "test," rather than "src"). End up repeating for entire project, makes about 1800 replacements - hibernate-1.2.3/src was in search path. Remove lib/hibernate-1.2.3.

Step 11: Revisit Step 8 and try to use new Configuration API. Tried this...
Datastore datastore = Hibernate.createDatastore() - changed to Configuration config = new Configuration();

Not working yet... But Gavin has responded to the mailing list and Chiara is listening. Good to have the support ;-)

Step 12: Found a problem with XDoclet, modifying source. Changing "role" attribute to "name" for the following types (in order replaced by HomeSite): subcollection, collection, set, bag, list, map, array, primitive-array. Rebuilt hibernate module. Changed attribute "readonly" to "inverse" and tried again. Changes to set and bag only.

Step 13: I'm using the Configure.configure() method to initialize from hibernate.cfg.xml (I had to rename the package for my dialect from cirrus.hibernate.sql.MySQLDialect to net.sf.hibernate.dialect.MySQLDialect). I doubt it'll work though since this expects a JNDI DataSource.

Step 14: Nope, that didn't work. I found out I needed to remove the "length" attribute from any <key> elements in <bag>'s. Back to trying to use config.addClass().

Step 15: Internet connection goes down, reboot router. Change dialect package name in database.properties. This file is renamed to hibernate.properties and used for running JUnit tests. Now time to have fun with JUnit and get UserDAOTest to run.

I'm getting a connection to the database now thanks to Gavin's advice:
sf = new Configuration()
     .addClass(Foo.class)
     .addClass(Bar.class)
     .buildSessionFactory();


Step 16: Changed xdoclet tags "inverse" attribute to be "false" where previously readonly="true", now inverse="false". Now I'm getting the following error:

[junit] java.sql.BatchUpdateException: Invalid argument value: Duplicate entry '0' for key 1
[junit] at com.mysql.jdbc.jdbc2.PreparedStatement.executeBatch(Unknown Source)


Whenever I try to run the addResume test for a user. The mapping looks fine, I'll try dropping and re-creating the database. Found I needed to change the package names in build.xml. Note to upgraders: don't filter by file extension when replacing the package name.

Discovered that the SchemaExport class had moved from net.sf.hibernate.tools to net.sf.hibernate.tool.hbm2ddl.

Step 17: The UserDAOTest runs successfully. Now for the web...

Couldn't get "ant test-canoo" (Canoo WebTest) to run until I copied xerces.jar back into lib/hibernate-2.0/lib. Changed my log4j.properties to use new package name for logging.

After looking at some 2.0 documentation, I discovered a new DTD for hibernate-configuration. Unfortunately, it's not there. So I put it on this site as a workaround. Got rid of startup errors. One change in the DTDs is that all <property> declarations must be within a <session-factory> element.

Now I can't get Hibernate to connect to JNDI. Back to the doco...

(5 minutes later) Yep, right in the doco. I changed StartupServlet.java to have the following:
SessionFactory sf =
  new Configuration().configure().buildSessionFactory();


Now, when I login I'm getting:

java.lang.UnsupportedOperationException
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:125)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:329)


Since my Unit tests on the business level run, I'm guessing it's something wrong with this line in hibernate.cfg.xml:
  <property name="connection.datasource">java:comp/env/jdbc/resume</property>

Get a good nights sleep; zonked out at 3, up at 8:30 to continue...

Step 18: Find out (from Gavin) that there's probably a hibernate.properties file in my classpath that is causing the problem. I find this fine inside hibernate.jar. Doh! There's an error in packaging. ;-) I remembering seeing this sometime last week on the mailing list. I decide to upgrade to Hibernate 2.0 beta 3, which was released while I was sleeping. The file hibernate.properties is removed from hibernate2.jar in this release. I did have to update lib/lib.properties to handle the change of jar-name. Compiling, testing...

Dropped and re-created the database b/c I was getting duplicate key errors. Ran UserDAOTest - BUILD SUCCESSFUL - run it again - BUILD FAILED.

Further updates to hibernate-properties.xdt to replace paramName="role" to paramName="name", also replaced paramName="readonly" with paramName="inverse". Sent an e-mail to xdoclet-devel inquiring about best way to make hibernate-properties.xdt both 2.0 and 1.1-compatible.

This change in XDoclet makes UserDAOTest pass - so it looks like the upgrade is a success. Now I just have to figure out a way to convince the XDoclet team to add support for Hibernate 2.0. This might take awhile, it has for POJO -> StrutsForms support (still pending).

Posted in Java at Feb 23 2003, 11:03:02 PM MST 6 Comments

RE: The Rocky Mountain Software Symposium

The Rocky Mountain Software Symposium definitely looks like a good time. I'll be attending with bells on. Any other bloggers making the trip? It's about a 10 minute drive for me. ;-) Gordon writes:

The Rocky Mountain Software Symposium not only looks like an awesome speaker lineup, it looks like a large number of bloggers are speaking: Ted Neward, James Duncan Davidson, Erik Hatcher, and Bob Lee. I've submitted my training req!

The sessions look awesome, should be a good time.

Posted in Java at Feb 19 2003, 10:56:41 PM MST 1 Comment