August 17, 2004

Economics are not instantaneous

Max speaks:


The revenues to defray the tax are in the company's statement of operating costs, but if a tax change does not result in a product price change, the consumer is not affected. So "embedding" in the product price does not mean the absence of the tax implies a lower price. Ergo the tax is not borne by consumers.

Agreed... if you look at the numbers at a single moment in time. At the moment in time where the corporations get to pay fewer taxes, but don't have to lower the price of their goods or services due to competitive pressure, they are making more margin on the product.

Of course, we don't live in moments of time - we live in the relentless sweeping forward of time, the universe in which one or more of the competitors in each market decide to reduce their prices (and their gross margins) in order to win more business. And this, in general, causes a response from the other businesses in the market, reducing the overall cost of goods in that market to one with more or less stable margins.

Does it zero out? Certainly not. Is this a guarantee? - do I warranty that in every field of human capitalistic endeavor across the spectrum of goods and services, that prices drop to the point where the taxes are perfectly eliminated? No. But I would expect that competitiion would probably drive the prices down by 50 - 90% of the per-product tax burden, across 80 - 90% of industries.

Scribbled by jb at 07:10 AM | TrackBack (0)

August 16, 2004

JCoverage

JCoverage (www.jcoverage.com) is very cool - it seems to have all the functionality of Clover, but in a tasty GPL shell.

I got it working server-side with no problem quite quickly. I can't get it to integrate properly with Cruise Control, but that's a different issue.

To get it embedded into Eclipse, you need an eclipse plugin: djunit, which works well. Perhaps not the most elegant folding of the JCoverage output into a window I've ever seen, but it does the job, and clicking on the class name takes you to the code window in eclipse, instead of to the Html output.

In any case, it is well worth the price (heh). And if we get more funding, I'll investigate the commercial version to see what it adds to my day).

Scribbled by jb at 06:12 PM | TrackBack (0)

Remote Debugging with JBoss - "Surprisingly Easy"

Using the instructions from here: http://www.sys-con.com/story/?storyid=44918, I was able to get JBoss up and running in debug mode in very short order.

Here's what I had to do that wasn't documented in the article:
1) I had to make sure that I set the JAVA_OPTS _before_ the HOTSPOT setup, so it wouldn't try to set up a HotSpot server (which seems to send a nasty signal in debug mode)

2) I had to make sure that both the JBoss source and the source for my target app were in the source path for the debug profile.

Once I did that, I set a breakpoint in my servlet, and when I went to execute it, JBoss stopped, the debugger popped up on the correct line and I was able to walk through the execution cycle.

Scribbled by jb at 06:06 PM | TrackBack (0)

Verdict on Hyperic

Big install. A few difficulties with the install - wrong version of libc++, but that was easily rectified.

Once it was installed it took 6 minutes to get up and running (wow!)

Unfortunately, once it is up and running, I don't know what to do with it. I added a platform, and JBoss as a service, but then it just sits there. It complains about not having an agent to talk to JBoss (??)

Not sure what to do now other than consign it to the dustbin of my failed experiments.

Scribbled by jb at 05:31 PM | TrackBack (0)

Memory Management/Monitoring Tools For JBoss

I experimented with three different management tools for JBoss:
* opentier
* MC4J
* Hyperic


Open Tier


Of the three, OpenTier was the easiest to install and get running (surprisingly, the instructions actually were more complex than the actual install). There are two parts to it - management and config, one has an EAR, the other a WAR. I put them both into JBoss, and they installed right away.

Unfortunately, it doesn't do very much - it is only a little better than the JBoss web console applet. The price is right, however. They have a commercial version, but it isn't clear that it would have much difference.

MC4J


Memory Controller for Java. This is an sourceforge app, apparently donated by Sapient. It has a little more functionality than OpenTier, and a couple of nifty plotting capabilities, but nothing awe-inspiring. It runs as a standalone java application, and seems to only work when you run it as root.

Hyperic


Hyperic is a commercial tool, and it is a lot larger and more complex than the other two. The server is a repackaged JBoss install, with some customizations. This has the nasty side effect of not working at all on a machine that is currently running JBoss. I had to learn this the hard way.

When I locate a server that isn't running JBoss, I'll install it again and get an idea of what it can do.

Scribbled by jb at 04:50 PM | TrackBack (0)

August 09, 2004

Google's Parking Lot question

I don't want to move to California (although I would love to work for Google), but if I did, this is how I would answer the question: (Note: I am answering the question. Please go away if you don't want to see an answer).

If the parking lot had 8 spaces and 4 rows, it would look like this:

                                                                                
 ------5-----2----
 | | | | | | | | |
                                                                                
                                                                                
 | | | | | | | | |
------14----20----
 | | | | | | | | |
                                                                                
                                                                                
 | | | | | | | | |
 -----29----26----
and the answer wouldn't make any sense, because the 29 pillar is clearly marked 26 in the picture

But, IMO, the exit sign is a clue - the middle section might be shorter than the other two:

 ------5-----2----
 | | | | | | | | |
                                                                                
                                                                                
 | | | | | | | |
 -----14----20--   [ ]|  <-- Tollbooth
 | | | | | | | |      |
                      |
 | | | | | | | | |
 -----27----24----
Unfortunately, that still doesn't come out right. There are still one too many spaces. Based on this theory, however, what if the last space (on the right) in the bottom row is also missing? Then, it looks like:
                                                                                
                                                                                
 ------5-----2----
 | | | | | | | | |
                                                                                
                                                                                
 | | | | | | | |
 -----14----20-- [ ]|  <-- Tollbooth
 | | | | | | | |    |
                    |
 | | | | | | | |
 -----26----23--
                                                                                
Which gives me an answer that seems consistent with the facts in the picture, and makes sense (seems plausible) based on my experience in parking lots, and is consistent arithmeticallly.

Do I warranty this answer? Absolutely not! I'm making an assumption about the presence of a hidden tollbooth or some other device that justifies theremoval of parking spaces. On the other hand, if you look at this as a parking lot, and not as a mathematical trick, this seems to make sense.

Note: The picture doesn't seem to show two rows in the middle section. But that could be a deliberate trick to keep you from just counting the spaces to figure out the answer. Also, In my parking garage the word "Maximim 2 hours" appears on three overhead placards, next to three others that say "Maximum 2 hours", so I don't see why the row with 14 and 20 couldn't have had a double row numbering, even without double row existence.

I can just imagine one of the brain trust at Google staring at their parking lot, wondering about the strange numbering, figuring it out and then saying "that would be a great interview question".

Scribbled by jb at 04:13 PM | TrackBack (0)

Testing Meme Propagation In Blogspace: Add Your Blog!

Testing Meme Propagation In Blogspace: Add Your Blog!. --

This posting is a community experiment that tests how a meme, represented by this blog posting, spreads across blogspace, physical space and time. It will help to show how ideas travel across blogs in space and time and how blogs are connected. It may also help to show which blogs are most influential in the propagation of memes. The dataset from this experiment will be public, and can be located via Google (or Technorati) by doing a search for the GUID for this meme (below).

The original posting for this experiment is located at: Minding the Planet (Permalink: http://novaspivack.typepad.com/nova_spivacks_weblog/2004/08/a_sonar_ping_of.html) – results and commentary will appear there in the future.

Please join the test by adding your blog (see instructions, below) and inviting your friends to participate — the more the better. The data from this test will be public and open; others may use it to visualize and study the connectedness of blogspace and the propagation of memes across blogs.

The GUID for this experiment is: as098398298250swg9e98929872525389t9987898tq98wteqtgaq62010920352598gawst (this GUID enables anyone to easily search Google (or Technorati) for all blogs that participate in this experiment). Anyone is free to analyze the data of this experiment. Please publicize your analysis of the data, and/or any comments by adding comments onto the original post (see URL above). (Note: it would be interesting to see a geographic map or a temporal animation, as well as a social network map of the propagation of this meme.)

INSTRUCTIONS

To add your blog to this experiment, copy this entire posting to your blog, and then answer the questions below, substituting your own information, below, where appropriate. Other than answering the questions below, please do not alter the information, layout or format of this post in order to preserve the integrity of the data in this experiment (this will make it easier for searchers and automated bots to find and analyze the results later).

REQUIRED FIELDS (Note: Replace the answers below with your own answers)

* (1) I found this experiment at URL: http://www.focusedperformance.com/2004_08_01_blarch.html#109158614693757545
* (2) I found it via “Newsreader Software” or “Browsing the Web” or “Searching the Web” or “An E-Mail Message": Browsing the Web
* (3) I posted this experiment at URL: http://indefinitearticles.com
* (4) I posted this on date (day, month, year): 09,08,2004
* (5) I posted this at time (24 hour time): 13:28:00
* (6) My posting location is (city, state, country): Atlanta, GA, USA

OPTIONAL SURVEY FIELDS (Replace the answers below with your own answers):

* (7) My blog is hosted by: netfirms.com
* (8) My age is: 34
* (9) My gender is: Male
* (10) My occupation is: Software Architect
* (11) I use the following RSS/Atom reader software: None
* (12) I use the following software to post to my blog: Movable Type
* (13) I have been blogging since (day, month, year): 10,10,2002
* (14) My web browser is: Mozilla
* (15) My operating system is: Fedora Linux 2

Scribbled by jb at 01:30 PM | TrackBack (0)

August 03, 2004

jcoverage

Open source java code coverage tool. Will have to check this out.

July 29, 2004

Self Made Man

Matt Yglesias on the "myth" of the self-made man.

What an interesting discussion. What a fascinating assertion - Meritocracy is an appalling ideal. It's just so, so deliciously arbitrary. Being born with the ability to focus and work hard is really no different than being born with a huge trust fund. Why? because he said so.

As at least one commenter has mentioned - this inevitably leads to "free will is an illusion", which, of course, is not any more useful of a debate than "last tuesdayism" or "brains in pans-ism".


Personally, I disagree, and here's why:

First, I think that the egalitarian mindset dampens risk-taking - I can't prove this, any more than I can prove that we weren't all created last tuesday loaded with preformatted memories, but it seems right to me. Pragramatically, If there is no meaningful difference in outcome between a risky choice and a safe choice, generally, people will choose the safe choice.

Second, the asteroids in space, the super-volcano under Yosemite, the slowly cracking bulk of the Canary islands don't really care about our philosophical debates. They will smack into the Earth, erupt or collapse on their own schedule. (and any number of other heretofore unknown disasters may precede them)

Third, it is a matter of faith for me that risk-taking is the catalyst that brings us inventions that allow us to prevent, reduce or avoid these catastrophes. Again, I can't prove this, any more than I can prove that we are not brains in pans hooked to some virtual world, but it seems intuitive to me that there is a correlation between the dampening of risk and the dampening of technological innovation and vice versa.

July 23, 2004

Jimmy Buffet

Heh.

keepsleeping.jpg

Hat Tip: The Creator of Worlds

July 22, 2004

Microsoft TNEF attachments

If you're a linux user, suffering from strange attachments in your emails, I found the solution.

tnef.sourceforge.net


Also existant: ytnef - but it doesn't do anything (can't ever seem to write to the file system)
A pity, since it seems like it would be better (it has some extra features).

OSS application rant

I'm generally a pretty patient guy when it comes to open source software. Not today.

SugarCRM: very, very limited functionality. Difficult to install, even when following their directions. No help at all about how to fix problems with the install. Still can't get the graphing functionality to work.

phpgroupware: had some install trouble, but not terribly bad. The user interface is terribly confusing - how am I supposed to configure these apps???

eGroupWare: a cleaned up version of phpgroupware. Ironically, harder to install.

phpTimeSheet: gah! GAH! whenever I have to edit their *bleep*ing source code to get the thing to work, it is crap. Let alone the fact that EVERY SINGLE ADMIN ACTION REQUIRES ME TO ENTER A PASSWORD! What the *BLEEP*?!?!?! I messed around with this for half an hour before realizing that this was just a German plot to get Americans sysadmins to be less productive.

timesheet.php: Let me give you guys a heads up. YOUR *BLEEPING* INSTALL directions are WRONG! It's timesheet_user, not user. Why the *bleep* couldn't you have put a default password in the SQL dump file you made me process??

ytnef: Annoyance: you have to download both RPMs - the library isn't packaged with the application. Igh. Secondly - IT DOESN'T WORK! It can read the file, it can understand the contents, but it fails whenever it tries to write!!!!???.

June 29, 2004

Strategic vs. Object Unit Testing

A good article here on the ROI of unit testing.

I have been using TDD for almost 2 years now, and now it comes as second nature to me. It is a very comfortable way for me to work, because it helps me layer the code and group things appropriately.

At the same time, the individual class-level unit tests provide very little insight into whether or not the code will do what the business wants, unless you're working on a very high-level class. And I do that - typically in my architectures and designs, there are classes that can be called to represent major features or user actions, and setting them up with a variety of configurations and verifying that they work is extremely valuable to the end goal of business value.

It is definitely harder to write good high-level (or strategic, or feature-level) unit tests. You have to do a lot of setup, you have to do quite a bit of mocking, and you typically have to have factories all over the place loaded up with mock elements to make it all come together. And it takes time to debug the test as well. But, in my mind, at the end of it, you have a test (or set of tests) that really exercise the actions that the user is taking. Now if the structure of the code changes significantly, these tests usually have to be rewritten, but then, if you change the structure you do run the risk of changing the business logic, so this doesn't strike me as a bad thing.

At the end of the day, for me, this kind of TDD is crystallized debugging - it represents all the time and effort I've spent debugging the application, saved, stored and automated so it is available for everyone to see, and b) running all the time.

Now, the only time I get into trouble is when I'm doing final large-scale assembly, because the complexity of the test is comparable to the complexity of the app itself, and it seems easier to just run the damn thing. For example, I worked on a billing application where I diligently TDD developed all of the business logic components, and was left with about 4 high level actions that, when strung together with a little bit of logic and prep work, produced the business value. I could unit test the 4 actions, but trying to unit test the packaging of the 4 was simply too hard for the value justified, versus running the app several times and examining the output by hand.

But maybe as I get better at it, I'll find patterns and techniques that make it simpler.

June 24, 2004

How many of these have you experienced?

From this list:


  1. When an employee is in your office to talk with you, don’t hesitate to answer your phone.
  2. Take a week to respond to requests and queries from your employees. Heck, take two.
  3. Criticize people in public. Don’t worry whether the criticism is direct or tacit. It’ll have the same effect.
  4. Permit inequities and conflict to persist. Remember that you’re too important to deal with employees’ petty tiffs.
  5. Be stingy with your thank you’s. After all, they just make people feel like you should be paying them more money.
  6. Pay people less than they’re worth. Give raises based on factors they cannot influence or, for more fun, based on their performance relative to one another.
  7. Don’t smile when you say hello to employees. Better yet, don’t even say hello. A third option: if you must say hello, follow up with a “how ya doing?” and then look away before they answer.
  8. Ask people to do work outside of their job description.
  9. Interpret all suggestions for improvement as personal attacks on your leadership.
  10. Do your subordinates’ jobs for them, since you can’t trust them to do it right. If that’s not attractive to you, though, dump your work on them instead.
  11. Give people the illusion of empowerment. Tell them they have control over a process, and hold them accountable for the results, but then micro-manage the process to meet your pre-determined ends.
  12. Take credit for the good work your people do (and blame your department’s problems on their laziness and ineptitude).
  13. Hold lots of meetings and make sure they have an unfocused agenda. Allow the conversation to meander aimlessly, permitting one tangential comment to give license to the next. Never cut off a rambling participant and if anyone has a good idea, compel that person to assume responsibility for a new committee to pursue the idea. End each meeting with no action items.
  14. When scheduled to meet with an employee or with a group of employees, be late. Sometimes very late. Hey, they meeting can’t start without you, right?
  15. Never, never forget that you are superior to your employees and never doubt that you are absolutely right. In doing so, you’ll be guaranteed to skillfully apply all of the above secrets of success.

I've experienced 7 or 8 of these in recent memory.

June 21, 2004

Risk Burndown Chart

I propose a new artifact for Scrum - the Risk Burndown chart. Here's how it works:


  1. During the initial estimation period as part of the backlog, identify Sprint Risks - risks that have a reasonable chance of occuring during the 30 day sprint. Give each risk a point value - for example, you could rank each risk from 1 - 5 for likelihood of occuring, and 1 - 5 for severity, with 5 being the most likely and the most severe respectively. Multiply them together to get a "value" for the risk, and add up all the values for all the risks to get your "risk backlog"

    Implicitly, of course, you should be working on mitigation strategies for the risks, but that is beyond the scope of this document.

  2. Each day, or once a week or however often you like, re-examine the risks as part of the daily Sprint meeting. You should expect that these risks will become less likely to occur as you proceed through the Sprint. In fact, if they are not less likely to occur, something probably needs to be done differently, since the entire point of agile development is to reduce risk.

  3. Each time the risks are reduced, you drop the notch on the Risk Backlog. Of course, it is also possible that you identify new risks, so you would also raise the value of the Risk Backlog where appropriate. For certain, however, your risk backlog should be 0, or close to 0 by the time you get to the end of the Sprint - how could you have significant remaining risks on a project that was completely finished?

I've used this pattern successfully, and it seemed to be well-received by more "traditional" managers. I don't think it adds a lot of additional weight to the process, while exposing another variable that everyone generally agrees is very important.

Some random thoughts below:

Don't stop now..."Risk Burndown Chart"

June 04, 2004

Hani Sulemain and the Bile Blog

Over on EPESH, Joseph Ottinger makes some comments about personal attacks. In the comments, someone follows up with an observation on Hani Sulemain (The Bile Blog).

In my opinion, Hani's contribution to the J2EE-osphere, crass as it may be is absolutely necessary. First, and foremost, he has - more than anyone else I've ever seen - called bullshit on things that very much need bullshit to be called upon them.

The profanity and personal attacks are also, in my opinion, quite necessary, because it helps spread the "I call bullshit on that" message far, far better than polite diatribes.

As a victim of his diatribes, I think you have to simply ignore it. When my 3yo son has a temper tantrum, he screams "I don't love you, Daddy". I know it's not true, he just wants attention. The same thing applies to Hani.

June 02, 2004

GE and Agility

As my loyal (heh) readers have learned, I've taken on a new job. The new job is a professional services Sr. Architect, which should be both educational and exciting. My first customer is GE. Ironically, considering my previous experience with a GE exec (see How Agile Development Ruined My Career"), our customer has:

a) Used his influence to get the GE processes out of the way, because they slow the project down and make it too expensive.
b) Gone through an extremely iterative and highly interactive development cycle with our team in order to ensure that the project delivered exactly the functionality he wanted.


Now, it is pretty clear that there is negative fallout from a) - namely that we now have to go back and write some of the documents that we skipped before. On the other hand, what if the project hadn't been used? All of that documentation time would have been wasted.

But b) seems to be a significant success - the customer is very happy, there are a lot of happy users and the system is doing exactly what it is supposed to do.


Also, I'm getting a crash course in corporate politics. GE is about as political an organization as I have ever seen. Egads.

Talking Points

Let me get this straight:


UN ambulances used to smuggle terrorists and weapons

Liberal P.O.V: "This is an isolated incident, that does not reflect on the overall integrity of the UN"

Prison abuse at Abu Ghraib

Liberal P.O.V: "Bush/Rumsfeld/Cheney must resign."

UN Oil for Food Scandal

Liberal P.O.V: "Chalabi can't be trusted, this could all be fake. The fact that Sevan, et al are stalling is perfectly reasonable, and not troubling at all"

Cheney receives a memo from Haliburton

Liberal P.O.V: "Bush/Cheney/Rumsfeld must resign!"