Wednesday, May 28, 2008

Morning Daily Stand-ups

I've been on Scrum teams for the past 3 years. Every team I've been on has decided to do its daily stand-up in the morning. I've tried the lunch time thing before and it just didn't work. People use their lunch hour to get things done; appointments, errands, etc. I've never tried it as an end of the day meeting. I've just always thought that by the next morning, I wouldn't recall important details.

So, my problem is that my team really isn't doing it in the morning. Our stand-up time is 9:30am. After some thought, I'm pretty sure this is having a significant negative impact on my productivity. I'm going to suggest we move to 8:15 or 8:30. If that doesn't happen, I'm going to have to figure something out for myself.

Here's a breakdown of why this isn't working for me. I come in most days between 8 and 8:30. I catch up on email that went out the night before; usually takes about 15 to 30 minutes. Then I'm left with about 30-60 minutes before the meeting. I spend about 15 minutes reviewing ScrumWorks, our project tracking tool. I make sure I've updated my hours on tasks I'm working, ensure I'm working on the highest priority tasks, etc. At that point I'm down to 15-45 minutes before our daily stand-up.

How much can you really get done in that amount of time? Maybe if you've got something small to finish up, but that isn't the case for me very often... ever.

So, we go until 9:45 in our stand-up (ideally). We talk about off-line things that came up until 10:00 or later. Sometimes we schedule meetings for directly after our stand-up since we're already in a meeting room. Most days, by the time I'm back to my desk and really starting to get something done, it's 11:00. Yep, just 1 or 2 hours before I break to eat.

The problem is, there's not much time to get up any real momentum. Even if that's my only meeting in the day, it's just not in a good spot. I don't hit any long stretches until after lunch.

Consider what I'm really saying here. A single, 15-minute meeting is noticeably hindering my productivity due to the normal routine I follow and the meeting's placement in the day. Maybe this is why I'm working so many nights on this project and always find myself saying, "Is it seriously noon already?!?!".

I think that even if my team moves to an earlier daily stand-up, I need to re-evaluate my morning routine and see if I can make any improvements on it.

From 0 to VisualSVN in 90s

I've started working on a few little things from home and wanted to start managing the source with Subversion. I've got a desktop at home running Windows XP and decided to put SVN there. On the SVN site, on the downloads page, I found this excerpt:


VisualSVN Server is a standard Windows Installer package that contains everything necessary to install, configure and manage Subversion server on Windows platform. It includes latest stable releases of Subversion, Apache plus a management console to perform most common Subversion administration tasks such as repository creation and access rights management.

I had this thing downloaded, installed, and configured in no time at all. So, if you're installing SVN on Windows, I highly suggest VisualSVN Server.

  • 30 seconds to download

  • 30 seconds to install

  • 30 seconds to configure

Tuesday, May 27, 2008

Boo Office Noise

Last week I spent a full day working from home. It's been a very long time since I've had that opportunity, and wow was it much needed. I just didn't realize how distracted I am in my current setting.

I work in a room packed with 12 people; as many as it can fit. As much as I understand and have experienced the benefit of working in an open area with your team, tight quarters with half of the conversations distracting you isn't the same thing. On top of that, we have hardwood floors, bare walls, and no ceiling. Everything from the area next door carries right in. All of these things just make my office space a productivity inhibitor. Unfortunately, we have no where else to go.

If I am ever in the position to build spaces for software engineering teams, I think I'd do the following:


  1. Open spaces for groups of up to 8 people

  2. Cubicles in a designated 'quiet' area

  3. No assigned seating. Everyone has a rolling cart to take with them. Mobile tables throughout with core supplies, an extra monitor, etc.

  4. A couple of relaxation rooms

  5. PLENTY of meeting rooms. I forgot to mention earlier that sometimes we have to hold meetings or conferences at our desks

Thursday, May 15, 2008

Automated Deployment to OC4J in Maven2

Below are example Maven2 Profiles that will deploy/undeploy a WAR to an OC4J Instance. For information on exactly what each parameter does and everything else about working with the admin_client.jar, consult your Oracle Application Server documentation.

Enjoy!

Thanks to Phillip Anderson for this work.


<!-- The base installation directory of OC4J -->
<oc4j.home>C:\JEE\AppServers\oc4j</oc4j.home>

<!-- The string needed to deploy to an OC4J Instance; This would be different for a standalone oc4j instance -->
<oc4j.deployer>deployer:oc4j:opmn://localhost/home</oc4j.deployer>

<!-- The admin userid for OC4J -->
<oc4j.user>oc4jadmin</oc4j.user>

<!-- The password for the OC4J admin user -->
<oc4j.password>admin</oc4j.password>

<profile>
<id>OC4JDeploy</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>deploy</id>
<phase>install</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>java</executable>
<arguments>
<argument>-jar</argument>
<argument>${oc4j.home}\j2ee\home\admin_client.jar</argument>
<argument>${oc4j.deployer}</argument>
<argument>${oc4j.user}</argument>
<argument>${oc4j.password}</argument>
<argument>-deploy</argument>
<argument>-file</argument>
<argument>${basedir}\target\${project.build.finalName}.${project.packaging}</argument>
<argument>-deploymentName</argument>
<argument>myWar</argument>
<argument>-bindAllWebApps</argument>
<argument>secure-web-site</argument>
<argument>-contextRoot</argument>
<argument>myWar</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>OC4JUndeploy</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>deploy</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>java</executable>
<arguments>
<argument>-jar</argument>
<argument>${oc4j.home}\j2ee\home\admin_client.jar</argument>
<argument>${oc4j.deployer}</argument>
<argument>${oc4j.user}</argument>
<argument>${oc4j.password}</argument>
<argument>-undeploy</argument>
<argument>myWar</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>

Wednesday, May 14, 2008

Outgoing SSL Connections in OC4J

The project I'm working on is currently deployed to Oracle Application Server. I spent most of the day yesterday trying to figure out 2 things.

1. Why can't I set the java options javax.net.ssl.trustStore and javax.net.ssl.trustStorePassword in the opmn.xml file w/o the system spewing error messages on startup?

2. How can I get my application to successfully make outgoing HTTPS connections if I can't set those system properties?

I posted a message on the Oracle forms here with no response. I spent hours searching online, only finding documentation on how to secure your deployed applications with SSL.

I ended up finding an off-topic document that revealed the answer. OC4J looks to a default trust store located at ${ORACLE_HOME}/jdk/jre/lib/security/cacerts. So, after adding the certificate I needed to trust into this trust store, all was good.

I knew that java had a default trust store, but my goal was to point OC4J to a trust store of my choice, not edit the system default. I did look for a way to configure OC4J through other means, but no luck. And in this case, my whole goal was to point the system to a trust store of my choice, so I was ok with using the system properties.

It still irks me that I can't set those system properties. Oh well.

Wednesday, May 7, 2008

WAMP Hurdles

If you've read the last 2 of my book reviews, you're probably noticing a trend. I'm attempting to expand my skill set horizontally, starting down the path of what I view as the skill set of a 'classical' web application developer. I've brushed up on the essentials; HTML and CSS. And followed that up with a poor introduction to JavaScript. Now, I'm on my way to the exciting and powerful capabilities of PHP and MySQL.

After some time of reading and coming up to speed on the basics of PHP development, I decided to take a head first dive (no, there's no Head First PHP book) into this and focus on finding tutorials that build (small) applications from start to finish. Unfortunately, just getting my environment set up has been.... predictable.

Yes, I'm on Windows. I know, I know. I could buy a cheap development box, use a VM can, etc. Honestly, I'd rather just tough it out for now and worry about porting to LAMP (that made me laugh) when that bridge comes.

So, my first hurdle...

I downloaded PHP 5.2.5 and MySQL 5.0.51b, arriving at my first roadblock. The instructions I was following simply asked me to uncomment the line "extension=php_mysqli.dll" from my php.ini file; easy enough. Unfortunately, I found error logs reporting that the dynamic library could not be loaded and the specified module could not be found.

Quickly I found some indications online that I needed to grab a new PHP/MySQL connector. Following the provided link to a page on the MySQL site took me to pretty much, the last thing I wanted to see. Yeah, it was asking me to check out source code, overwrite some files, and build it myself. No thanks.

15 minutes of dedicated investigation later, I found a connector (already built) that I could download and replace the dll that came with PHP to work with just a slightly older version of MySQL (5.0.19).

Voila!

Tuesday, May 6, 2008

Review: Head First JavaScript

Head First JavaScript



Summary:

This book teaches the reader the basics of JavaScript and explorers a few use cases and example applications. In some ways, it does resemble the other Head First texts I've read. For example, throughout this book the reader can progressively enhance a couple of example applications with what they're learning in the given chapter. Unfortunately however, the best things about Head First books fail to present themselves here. First off, this book does not keep you involved with the example code that corresponds to what you're learning. The vast majority of the time it is up to you to follow along in the example source code as you work through the book. Secondly, this book is too basic. It does not reach a wide enough audience. Essentially, if you have any type of development background, you'll get bored.


Audience:

Those interested in exploring JavaScript to enhance their web applications (with the exception of those with a development background).


Pros:


  • The reader doesn't have to be a developer to understand the book.

  • The reader gets to see a web site progress using the new skills he/she learns throughout the book.

Cons:

  • It barely scratches the surface of JavaScript.

  • It does not hold up to the reputation of other Head First texts.



Recommendation:

If you're a regular Joe that experiments with some web development here and there, and really really prefers a text book to online tutorials and guides, this book might be for you.