I'm terribly behind on posts. The Entertainment center is nearing completion. I've since painted and moved in the two bottom cabinets that flank the center one as well as the center armoire cabinet for the TV. This past weekend, I finished assembling the two side book cases and hope to paint them this week for installation next weekend.
The following pictures are several months old, but better late than never. I'll get more recent ones up soon.
The top armoire starting to come together.
Me, in the armoire, for scale.
One of the doors for the lower cabinets.
Monday, September 06, 2010
Sunday, February 07, 2010
Since the last post, I've finished the non-moving portions of the bottom carcass including the face frame and painting. Because this thing is fairly large, we decided to move it into the family room to get it out of the way in the garage. There are towels under the components because the paint is fairly fresh and I didn't want anything sticking. The board on the top supporting the TV is temporary as the bottom carcass doesn't actually have a top. The two empty bottom spaces are for drawers which I still have to make and I also still have to do the doors.
However, the next task is the upper carcass. I've got to figure out the best order for assembling that as well as determining how I will install the flipper doors when it's painted.
Monday, January 18, 2010
Saturday, January 02, 2010
Wednesday, December 30, 2009
Thursday, March 19, 2009
I've always liked TCPView from SysInternals as a graphical way of viewing open network connections by process and port on a Windows machine.
Now I have a new reason to like it. I needed to do some testing of how our application handles network failures. I was figuring I'd have to pull network cables or other painful procedures to simulate this. However, I found that TCPView has an option to let you close a network connection through the right-click menu:
Now I have a new reason to like it. I needed to do some testing of how our application handles network failures. I was figuring I'd have to pull network cables or other painful procedures to simulate this. However, I found that TCPView has an option to let you close a network connection through the right-click menu:
Friday, March 13, 2009
We recently found and resolved an issue at work that was sufficiently tricky I felt that notes should be shared for anyone else who runs into the problem.
Background
We are a Java shop using an AS/400 (iSeries V5R4) as our backend. That means we're using the jt400.jar for our JDBC driver.
We recently encountered a problem where our database calls would start failing intermittently. The problem manifests under load. That is, when a few hundred JDBC calls are made, eventually they will start to "fail". This failure can take several forms, but most often appears as either an ArrayIndexOutOfBoundsException inside the jt400 driver code, or some other exception indicating the data passed to/returned from the AS/400 is malformed. Alternately, the call can succeed without an error, but the data is wrong. For example: - With the our login stored procedure, when it failed, it returned errors indicating the username couldn't be found. - With another stored procedure it threw SQLException: Descriptor index not valid. Debug logging indicated this was a wrapper exception around an ArrayIndexOutOfBoundsException - A simple INSERT call would eventually fail complaining that one of the integers being inserted was malformed even though all tracing indicated it was a valid integer. This behavior only appeared under a limited set of circumstances:
Solution
One solution is to disable HotSpot entirely. We didn't want to take this drastic step and lose the performance gains, so we figured out how to disable HotSpot optimization for a specific class. [1] Our method was to turn on -XX:+PrintCompilation to have the JVM tell us every time it optimized a class/method. Then, we looked for the most recent optimizations before a failure and told the JVM to exclude those. Exclusion can be done through a command line parameter, so we used the following to exclude commonExecuteBefore() method of AS400JDBCPreparedStatement. The option is:
-XX:CompileCommand=exclude,com/ibm/as400/access/AS400JDBCPreparedStatement,commonExecuteBefore
[1] The Print Compilation Flag and how to read it's output
Background
We are a Java shop using an AS/400 (iSeries V5R4) as our backend. That means we're using the jt400.jar for our JDBC driver.
The Problem
- JDK 1.6 (1.6.0_12) - The problem never appeared with 1.5
- Multiple prepared statements. The problem appeared was related to preparing statements repeatedly. I was able to work around the issue in one application by upgrading our version of iBATIS from 2.2 to 2.3. That release caches prepared statements. This doesn't solve the problem for another app due to the way that Spring and iBATIS interact that prevents iBATIS from caching statements.
- JVM HotSpot optimization ON (-server). One of the things I learned in tracking this down is that the HotSpot VM is enabled by default in Solaris and disabled (-client) by default on PCs. This problem went away when we disabled HotSpot optimization.
Solution
One solution is to disable HotSpot entirely. We didn't want to take this drastic step and lose the performance gains, so we figured out how to disable HotSpot optimization for a specific class. [1] Our method was to turn on -XX:+PrintCompilation to have the JVM tell us every time it optimized a class/method. Then, we looked for the most recent optimizations before a failure and told the JVM to exclude those. Exclusion can be done through a command line parameter, so we used the following to exclude commonExecuteBefore() method of AS400JDBCPreparedStatement. The option is:
-XX:CompileCommand=exclude,com/ibm/as400/access/AS400JDBCPreparedStatement,commonExecuteBefore
[1] The Print Compilation Flag and how to read it's output
Subscribe to:
Posts (Atom)