PayPal doesn’t do discounts

I can't believe it, I really can't!

I'm writing a shopping cart for a website. One of the features required is to give the user an X amount discount off their next order when they buy a specific product. So let's say the user has a £20 discount on their next order, how does PayPal let me apply that? Simple answer, it doesn't!

You can't send a cart line with a negative price "Discount for 20 GBP", nor can you send a cart line with a positive price but a negative quantity (that was desperation). The way to do this apparently is to send a cart total. YES! By sending the entire order aggregated into a single order line. NOOOOOOO!!!!!!

So PayPal wants my user to order £100 of goods, click Check-out, and then be presented with "Total for your order £100 (£20 discount)", that's it? In my opinion, that's not very good. In fact, considering PayPal is probably the largest Internet payment organisation in the world I consider this to be atrocious!

Oh well, back to it...


More Balsamiq madness!

Someone pointed this link out to me today:


It's another application along the lines of Balsamiq. This app does seem very "sharp", it has very snappy response times etc, which is nice and everything BUT I still don't like these kinds of apps!

I do prefer the name though, it suggests "I sketch screens" rather than "I am a bottle of vinegar".


This is just a test

I've just spotted a "Publish to Blog" option in Word 2007. So I thought I'd give it a spin and see what happens. If it works then Blogging is going to be a much more pleasurable experience.

  1. My spelling is atrocious.
  2. I find complex formatting on BlogSpot is terrible.
  3. I will no longer have to edit HTML just to get my code to look right.

Talking of code, I had better try that out too...

    public class PreSaveConstraint


        public readonly IObject Instance;

        public readonly string Name;

        public readonly Func<bool> CheckIsValid;


        public PreSaveConstraint(IObject instance, string name, Func<bool> checkIsValid)


            if (instance == null)

                throw new ArgumentNullException("Instance");

            if (string.IsNullOrEmpty(name))

                throw new ArgumentNullException("Name");

            if (checkIsValid == null)

                throw new ArgumentNullException("CheckIsValid");


            Instance = instance;

            Name = name;

            CheckIsValid = checkIsValid;




Well, here goes. If you can see this then it worked!


Proof of the existence of God

Finally there is proof that God exists. The proof has come in the guise of a product named Balsamiq. Balsamiq allows you to create mock GUI when specifying an application. Rather than having graphics that look like real forms etc it uses a pencil drawing lookalike approach.

Here is my reasoning.
  1. It does nothing you can't do for free in the IDE you undoubtedly already have.
  2. The result looks far worse than a mock up you can create in your IDE.
  3. Once you have the mock up you can't do anything useful with it except export it as an image or print it. You can't, for example, actually use that for a real form later in the project's life cycle.
  4. The result looks crap. Not poor, crap! It looks like a 7 year old has drawn it with a wax crayon....a blunt one.
  5. Balsamiq brought in revenue of over 100,000 US Dollars in its first 5 months.
Now the way I see it is this. Lots of people are sending money to a guy to buy software that does something they can already do much better for nothing. The only possible conclusion I can reach is that the developer must have sold his soul to the devil. Taking into account that we now have conclusive proof that Satan exists it is logical to conclude therefore that it is an absolute certainty that God also exists.

I rest my case.


ASP.NET Development server and PayPal instant payment notification

I am currently developing part of a website where I pass cart information to PayPal to accept payment. PayPal will call back a "secret URL" on my website to allow me to confirm the cart details haven't been tampered with.

I hate installing software I don't need. This is especially the case with software like IIS which just feels so intrusive, which is why I use the ASP.NET Development Server when creating websites. The problem with this server is that it only accepts connections from the local machine. My computer is behind a hardware firewall and my web server wont accept remote connections, so how can I test my PayPal IPN call back?

Simple. Obviously I have to open a port on my firewall and direct it to my machine. So I opened port 80. Then I used this tool to list on port 80 and redirect all traffic to port 10101 (the port my ASP.NET development server was listening on). The result is that a remote computer can now make a HTTP request to my computer, and I can receive it + debug it in Visual Studio without having to install IIS.

The great thing about this port forwarder is that it is only 44KB in size and doesn't require any installation!


Ultimate integration testing

I am just creating some classes that allow the user of an app to specify date/time validity. As I am modeling them it reminded me of some recurring event classes I once wrote to schedule payments between bank accounts.

One day my customer phoned me up. "Has your invoice been paid this month?" he asked.
"Yes" I said.
"Ah good, your code works then!"


Onion architecture

Jeff seems to have put it very well in his blog. Much better than I did myself back in December 2006 when I blogged about my "Onion" idea.

My mistakes were
01: I was missing a domain services layer.
02: I tried to explain it using a specific example (wizard app with a "process stack" aka "task stack"), and later decided I didn't like the example :-)
03: When I drew my diagrams I showed them as a typical stacked diagram, because my graphics skills are crap :-)

Here's my badly put idea of onion layered applications:

Here's Jeffrey's

Well done Jeff, very nicely put!