South Platte River
Nice day for a ride. Matt Good, my old boss from eDeploy.com, is on the left.
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.
Well, I made it to the DJUG Meeting and there's wi-fi - sweet! I just got here (20 minutes late), so don't have much to say. I might be a little late to follow the AspectJ stuff, but I'll try. The meeting room is packed - it's a huge auditorium, so that means there's probably a couple hundred folks here - wow! This Booch guy must be good (or at least famous).
Joseph Gradecki is presenting on AspectJ. I don't really know a thing about AspectJ, except that it's an implementation of AOP. One of these days, I might quit writing log.debug statements and start using AOP - but I don't know if its mature enough yet*. I know Rickard is using it like a madman, but he's always on the bleeding edge.
It looks like Mr. Gradecki has written a lot of books - all very recent titles.
* I've had a heckuva time introducing the concepts I've learned over the past couple years to new development teams. It seems that most teams I've worked on haven't worked much with webapps or their frameworks. Because of this I seem to get a fair amount of blank stares when I start mentioning things like Hibernate, XDoclet, Validator and Tiles. I couldn't imagine trying to introduce using AOP on a project - IMO, most clients would never go for it. Maybe I need to put together some presentations on the different tools I use, and then present that to new teams. For now, I guess I'll just have to recommend they buy Professional JSP, 3rd Edition (which rolled off the presses today BTW). I doubt they're going to want to read 704 pages, so there's probably still some motivation to create short and sweet presentations.
Back to the topic at hand, IDEs that support AspectJ: JBuilder, Eclipse, Sun ONE (Forte). Problem with using AspectJ - it's actually been patented (6,467,086), as well as AOP. They started the application in 1999 and it was approved this year. One gent in the room mentioned that you're safe as long as you use it as part of Eclipse - if you try to fork it, that's when there's issues (I hope I'm quoting him correctly).
The major question from this preso: How do you use AOP in a production system, outside of logging? If you're using AOP in production (and its not just for logging), how are you using it and how has it helped your application(s). An audience member mentions JBoss 4.0, but is anyone using it in production?
During the break, I discovered that James is coming to the Boulder JUG in October. Boulder is actually closer to my new gig.
Next up: The Architecture of Unusual Things by Grady Booch, IBM Fellow. Don't let his picture fool you - he looks like someone you'd like to hang out with (balding, long greying hair, nice voice).
Here's his first slide:
The Limits of Sofware
- the laws of physics
- the laws of software
- the challenge of algorithms
- the difficulty of distribution
- the problem of design
- the importance of organization (human issues dominate from here down)
- the impact of economics
- the influence of politics
- the limits of human imagination
Grady mentions SourceForge and that he loves it (as a community collaboration space). I agree, the idea is great. Features I like: CVS, Mailing Lists, Downloads. Features I don't: it seems to be down whenever I cut a release (not very often), the forums need some work.
He's been talking about DNA Architecture for the last 20 minutes - sorry, I lost interest and did some blog-reading... now I'm back - and he's comparing DNA Sequencing to SETI@home (the first attempt to use large-scale distributed computing to perform a sensitive search for radio signals from extraterrestrial civilizations).
His point? Common architectures may be found in uncommon places.
If you're still reading this, I'm amazed - I usually blank out and don't read long posts. I tend to read blogs for quick tips and tricks, not for long interviews/arcticles. Here's the first automated stalker: Asimo (Brady had a cool video - I can't seem to find it). He recommends getting a Lego Mindstorms Robot.
The most noticeable thing about Grady's session is the PowerPoint presentation. It's got pictures on almost every page, URLs in the bottom-left corner and he's had several videos. I doubt that he created it, but whoever did deserves to be recognized.
"All legacy systems exhibit sedimentation." Hmmm, the Computer History Museum might be cool to visit. Good luck in getting your wife to join you for that visit! At the end of October, Grady is meeting with some gents to work on putting some more source code (i.e. Bill's early stuff) on the web.
4th Generation of Web Sites (we're in the third generation now): Aspects (simplifies architecture) and the Semantic Web (bits of the web have self-knowledge and self-behavior, agent-based architecture).
Lesson: An architecture must grow and adapt or die (i.e. eBay, Amazon). These companies have done a major re-architecture several times over the years (eBay = Websphere plug). 1/2 life of a software architecture? Grady's opinion: 3-5 years. Web Services - allow for refactoring bits of a legacy architecture bits at a time. However, sometimes you have to break the foundation.
Brady recommends honing your skills in Patterns, as well as in Java. Warning: IBM may patent some of its business process patterns. Another lesson: Fundamentals never go out of style.
Final Note: The driving force behind software engineering is the rising levels of abstraction.
Good stuff - glad I came. Didn't really learn much that I can use tomorrow at work, but I did learn more about architecture and the history of computing.
Update: You can now download Grady Brooch's The Architecture of Unusual Things (5.1 MB zipped) presentation.
I got inspired by Matt's post about Netflix and I signed up on Sunday. 3 DVDs arrived in the mail today. Nice! That was quick. The question is - will they have the same new releases that Blockbuster does?
I sent a message to the log4j-user mailing list this afternoon, but have not received a response - so hopefully someone can help me out. Here's the problem I'm having:
I have two appenders - a console and a file. I want all messages to go to the console and only <= error to go to the file. In my file appender, I have a filter to only get the error messages: <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="ERROR" /> </filter> Then in <root> I have: <root> <level value="DEBUG"/> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> From the documentation I've read (i.e. http://tinyurl.com/meef), this *should* work. However, all messages get logged to both the console appender and the file appender.
Any advice is appreciated.
I presented my views on why we should use Maven over Ant today in a meeting. My basic reasons are simple: 1) the ability to download jars (and have a central repository for all projects) and 2) to have a standard directory structure and build/test/deploy mechanism. It's going over like a fart in a crowded room so far. The major pushback is because supposedly you can convert JBuilder's .jqx files to Ant build files. Has anyone does this? How does it work? They mentioned that if there is a converter for .jqx -> maven build files, then they'd be happy to try it.
If we do use Ant (high probability), now begins the arduous task of standardizing across projects, as well as creating a "lib" module in CVS to store all the jars for the different projects. Good thing I'm on vacation next week! ;-)
I can't seem to subscribe to the Maven User Mailing List for the life of me, so I'll ask my questions here, and hopefully get some answers. The first question is regarding local repositories. Ideally, I'd like to put this on a network drive, so all developers can get to it by mapping a drive or something. When I try to use a network drive, I get the following error (WinXP, Maven CVS pull from yesterday):
Artifact '\\server\share\repository\velocity\jars\velocity-1.4-dev.jar' not found to add to classpath java.lang.ClassNotFoundException: velocity at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
The reason I'd like to use a network share (over an FTP server or HTTP server) is because then we can easily add the .jar files to the classpath in Eclipse or JBuilder. If Maven downloads the files to each user's local hard driver - then we can use an FTP server. Another option is to use the default (~/.maven/repository), but then each developer has to copy javamail and our custom jars onto their hard drive.
My second question is regarding webapp best practices with Maven. The Maven Tomcat Plugin seems nice, but it mangles my server.xml file. I'd like a solution similar to the way I've done it with Ant. I use a context.xml file and place this in $CATALINA_HOME/webapps and then I "deploy" the expanded war into Tomcat. Tomcat detects when any files change under WEB-INF/ and reloads the app. Works great. A better solution would be to point the docBase to target/webappName. So I guess what I'm saying is - should I just create a context.xml file and make my own custom "setup-tomcat" task (which does an ant:copy)? Then use war:webapp to refresh the app's files from source? How are you experts doing it?
I asked the following question on the Hibernate Forums, but thought I'd put it here to see if anyone can help.
I'm using the open-session-in-view pattern and getting the following error at random:
2003-08-21 07:00:08,873 WARN [Thread-27] JDBCExceptionReporter.logExceptions(38) | SQL Error: 0, SQLState: 08003 2003-08-21 07:00:08,874 ERROR [Thread-27] JDBCExceptionReporter.logExceptions(46 ) | No operations allowed after connection closed 2003-08-21 07:00:08,875 ERROR [Thread-27] JDBCException.(37) | Could not execute query java.sql.SQLException: No operations allowed after connection closed at com.mysql.jdbc.Connection.checkClosed(Connection.java:2497) at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1287) at com.mysql.jdbc.Connection.prepareStatement(Connection.java:1267) at org.apache.commons.dbcp.DelegatingConnection.prepareStatement (DelegatingConnection.java:187) at net.sf.hibernate.impl.SessionFactoryImpl.getPreparedStatement (SessionFactoryImpl.java:537) at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:56) at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:482) at net.sf.hibernate.loader.Loader.doFind(Loader.java:136) at net.sf.hibernate.loader.Loader.find(Loader.java:620)
I've used my same ServiceLocator.java class for the past 6 months on a couple of different projects (MySQL and Oracle), with no issues. But now I've developed a new app for a new client, and this error is popping up a LOT. Any ideas? I'm only closing the connection after my doFilter() method in a Filter.
It doesn't happen at all on my Windows XP machine (I've never seen the error). Only on Linux.
uname -a gives me:
Linux kgb08 2.4.20-8bigmem #1 SMP Thu Mar 13 17:32:29 EST 2003 i686 i686 i386 GNU/Linux
Tomcat 4.1.27, MySQL 4.0.13-Max-log, JDBC Driver mysql-connector-java-3.0.8-stable-bin.jar.
I've also seen it happen on MySQL 3.23.56, but now I can't seem to reproduce it.
Any ideas?
Last year in September, my parents and I embarked on Raible Road Trip #6 when returning from Web Design World 2002 in Vegas. Julie didn't join us since she was 7 months pregnant. However, Raible Road Trip #7 will be Julie, Abbie and I - and it begins this weekend. I'm starting to get really excited about it. We bought our plane tickets last night, and tonight we started planning the trip. Here it is so far - thanks to all for your suggestions.
Boy this is gonna be a fun trip. I haven't been on a road trip on California since I was a little kid. It was in the early 80s and my dad had a rigged up canvas topper on VW Rabbit pickup. We camped every night and drove like maniacs during the day. Abbie will be too young to remember, but that's what the ol' camera is for!
One of the requests we get over on the display tag project is a way to have static headers. Basically, this means that a user could scroll down through all the records on a page and the header would stay in place. The next generation of the tag library has a <thead> and <tbody> that makes this fairly easy to do. For instance, just by adding style="height: 400px; overflow: auto"
to the <tbody> tag - you get the desired effect. Cool stuff - only seems to work in Mozilla though. Any IE/CSS experts out there that can explain why it doesn't work in IE?
See Also: Display Tag: Static Headers - Revisited
Since java.blogs has already seen an announcement for Tomcat 5.0.7, there's no reason for me to do it as well. But, there is a very cool enhancement added to this release. From the changelog:
~ Allow putting a /META-INF/context.xml inside any WAR file
This allows much easier deployment IMO. Now you only need to deploy/upload one file, instead of the WAR file and a config (context.xml) file. However, this isn't part of the J2EE 1.4 spec, and other appservers have their own means of configuring - so this is not a portable solution. It would be very cool if there was a common way of doing this for Resin, Orion and Tomcat. I don't know how it would work, but maybe something like META-INF/tomcat-config.xml, META-INF/orion-config.xml, etc.