Radio Controlled Aircraft

Lately I've gotten into RC aircraft in a pretty serious way. Here's some videos from my planes and there's a new blog about RC airplanes here: Jazzy's Flight Deck


Why can't you get this right?

This is a letter I sent to McDonalds

Why can't you guys ever get things right? When I worked at McDonald's we had pride in our store. We had pride in our service. We held the drive-thru speed record for a couple years, and you know what... that was with 100% order accuracy. You have nothing to be proud of, and will not be setting any service records any time soon.

I visit your store at least twice a week and I'm getting some kind of error on almost every order. I make a simple grill order - "NO Ketchup"... how in the hell is this so hard for you to get right? I can not have corn syrup and your ketchup, even in small amounts, causes a major problem for me. This means that maybe 25% of the time I go to your store, I can't eat what I bought. I have called about this and I get put on the list for a free meal. THIS DOESN'T SATISFY ME. It is a brush-off, and I don't appreciate it. In fact, I haven't even redeemed my free meal yet. You need to re-train everyone including managers to be more attentive to details, make people LEARN ENGLISH so they can get these things right, and teach people to take some pride in their work. Even when they get my order right, the product is usually so poorly assembled that I have to take it apart and mash it back together again. CENTER is a verb in McSpeak, and you need to teach people what it means.

I continue to patronize your store because of the great value and convenience, and I will in the future in the hopes that you will fix this problem. I am disappointed. This is not the vibrant, proud company I worked for in the 90s - which is why you are no longer number 1 in the market. What has changed? The food is still the same, the value is still the same... but the service universally sucks.

Please do something about this,


How I Built My GWS Slow Stick

NOTE: I've made some changes to the plane since I first wrote this, so please read the comments!

So, I wasn't going to write this, because I figured it out OK, but I realized when looking through the forums, that many people have trouble assembling the Slow Stick, and that beginners are not sure of what to buy for a flight pack. I also think it's important to delineate somewhere what the total cost of this plane really is, in time and money. Right up front I will tell you, it was $313.28 for all the parts I needed and about 6 hours of assembly time. However, I didn't mind it because I'm currently immobilized due to a "messed up" (doc's words, not mine) ankle. I hurt myself pretty badly getting an Estes Sky Ranger out of a tree. The Sky Ranger just doesn't fly very well at all, and that's to be expected because it is truly a $40 and ready-to-fly RC airplane. You have to do a lot of work just to keep it in the air, and it really only flies well when it's going straight into the wind. You get what you pay for with the cheap park flyers, and in my case that's about 200 bucks of medical bills. Now, I'm not saying to avoid the cheap park flyers, just make sure that you have lots of space (more than a football field) and you are not easily frustrated. It took me 3 separate flying sessions to figure out how to make the Sky Ranger stay up in the air, and then I crashed it in a tree (and it was just when I was starting to have fun with it).

So, in my frustration over planes that are so horrible that they lead to injuries, I went to a hobby shop in search of a REAL RC plane. I knew I either wanted the Slow Stick, or the Parkzone Slo-V, but the Parkzone is ready-to-fly, and with my bum ankle I kind of wanted something to keep myself busy with. The Slow Stick requires some assembly, and it affords you the option of purchasing equipment you can use with other planes in the future. All of the parts listed below could be useful on other planes, and it's up to me whether I want to remove it from the Slow Stick or buy another one. So here goes, here's how I built my Slow Stick!

The Parts List

GWS Slow Stick Kit ($34.98)

This is the basic kit, which includes the basic parts of the plane, and the motor and propeller. It's cheap, but it's not functional by itself.

Hitech Laser 4 Transmitter/Radio Kit ($117.98)

This radio kit came with the transmitter, and also the parts which are mounted on the plane. When you buy your radio, it will come with servos and a receiver which must be mounted on the plane. This is something I didn't understand at first... the servos come with the radio and they are designed to work correctly with that radio. Same for the receiver. The servos and receiver are powered by a Ni-MH battery pack that came with the radio. You can buy extra receivers and servos, and the kit came with two extra servos that I didn't need for the Slow Stick (they would be for ailerons, which are not present on this plane). Overall this is a pretty important purchase, since you will be using this transmitter for other planes... hopefully ALL of them. Don't skimp on this one. Get a good one. This one I bought is about as cheap as you can go for a good radio. GWS sells some cheaper ones, but I don't think they are as good. This is the most expensive part you will purchase for your hobby, but don't be cheap... get a quality radio that will last a long time... otherwise you'll end up buying other ones, and your costs will soar higher than the planes you're building.

Thunder Power 3-Cell Li-po battery ($54.98)

OK, here's where you have some options. You need a good battery pack to power the motor. I chose this 3-cell Li-Po battery, which was a little expensive. You can go as low as 20 bucks on this one, for a Ni-MH pack, but I think a good Li-Po battery is a smart purchase. They are somewhat dangerous to mess around with and you have to be careful charging them and connecting and disconnecting them to avoid fire. However, the risk of fire with a Li-Po battery is less than that of gasoline, and if you're smart about it, you'll be fine. Electric power is the wave of the future, and messing around with gasoline is just a dirty pain in the butt. Li-Po will give you better power and less weight (important on an airplane). So, note that you have two power sources on the completed plane. This battery runs the motor only - the servos are powered by the receiver battery pack. These batteries are not 100% charged up on the first time, so you'll need to drain it and recharge it at least once before you fly. The best way to do this is after you finish the plane. Simply block the plane's forward movement somehow and run it at less than full throttle, until the ESC cuts off the power. It's not a good idea to put a Li-Po battery under heavy load until it has been 'broken in', so don't run it at full throttle for a long time until you have cycled the battery a few times. After your test, allow the battery to cool for about 15 minutes, then recharge it. Use a clock for this - 15 minutes is longer than you think! The first time I didn't check, but the second cycle on this battery gave me a little over 20 minutes of continuous running at 50% throttle.

Electrifly Electronic Speed Controller (ESC) ($34.98)

This is another fairly important part. It serves two purposes - it controls the throttle power via the receiver, and it protects the battery from over-discharging. This one I bought is a little better than the minimum requirement, and it will be able to run a slightly more powerful motor if I want to change motors in the future. The ESC is tuned specifically for this type of battery, and it only works with standard brushed motors. If you want to go with a brushless motor, you will need a different kind of ESC. The GWS kit comes with a brushed motor, so this is a good controller to start with. It has plugs for connections, but you'll need to cut and solder those to the motor wires. The GWS motor is already loaded with capacitors, so you won't need those, but they are included with the ESC.

Eflite Celectra Li-Po battery charger ($44.98)

This battery charger is fairly simple, and requires a 12V DC source for power. I have an thing that turns a wall outlet into a car cigarette lighter, and then I bought an adapter so I can plug this into my car as well. The charging leads on this had to be modified to fit my battery. I will explain below.

Plug Adapter for battery ($3.25)

The battery comes with bare wires, so you need a nice plug to use it. The plug needs to be soldered on to the battery, and you'll need to be really careful doing this because you don't want to heat up the battery wires too much - it's a Li-Po. Also make sure you don't strip the positive wire until you have completely soldered and insulated the negative terminal, because short-circuiting a Li-Po battery is asking for trouble. There is a male plug on the ESC already, so I put the female plug on the battery, and I used the male side of this kit to make a nice plug for the battery charger. I used plenty of electrical tape to insulate this, lock the wires in place and to give me something to grab onto.

Assembling the Plane

Although the instructions are written in poorly translated Chinese-English, they are reasonably easy to understand. I'll mention a few things here that aren't covered in the instructions or are not clear from the instructions. If you have additional questions, please post them in the comments and I will answer them there for everyone to see. Please do not send me a private email about this... any help on this subject really should be made public.

The first page of instructions requires you to complete the tail assembly. You need to cut the foam of the tail and the stabilizer in order to make the control surfaces movable. Use a very sharp razor blade in your box cutter to do this. It does not need to be a 45-degree angle, as 45-degrees will be way more space than you need for control surface movement. Basically, you will make a V-groove by cutting some foam away from one side of the fold. You need to check the proper side to do this for. It may be incorrect in the picture in your instructions. One side of the foam will be pre-cut more deeply and the other side will be uncut. Put tape over the UNCUT side, and dig out your V-groove on the other side. The photo shows what this will look like when you are done.

The fuselage of my plane was pre-drilled with holes in the tail section. This made it easy to attach, but if you don't have holes, you might need to drill them. I wouldn't advise glueing this plane together. I just don't think it would hold. Also, I want to be able to take it apart, so screws are a better choice. You will use the double-sticky tape to attach the vertical stabilizer, and it seems to hold pretty well. At this point, I departed from the order in the instructions and inserted and glued the servo arms before I attached the tail to the rest of the plane. It's just easier to work with smaller peices, and I read the instructions completely before I started, and I anticipated those steps would be more difficult if done in the noted order. So after I got those done, I attached the tail and proceeded to finish the fuselage.

The instructions weren't exactly clear on this and I did it wrong the first time, but you need to put the battery mounts IN FRONT of the wings if you use the Li-Po battery, and follow the diagrams if you are using the NiMH batteries. It is a pain to remove everything and re-order the parts when you have the plane completely finished, so don't make this mistake if you can avoid it. The position of the battery will affect the center of gravity (CG) of the plane, and you want the CG to be in the front section of the wing. If it is balanced too far to the rear, the plane will be unstable, and if too far forward, the plane will be hard to turn. I had to put my receiver under the fuselage, instead of above as noted in the diagrams, because my receiver was too big and it kept running into the wings and the wings wouldn't mount properly. The photo shows where I had to mount everything.

So, the next thing I had to do was figure out my battery pack and charger. I mention above how I had to do that, in the section about the battery. Here's a photo of the finished plug from the battery. The plug on the charger was done the same way.

Probably one of the first mods I will make on this plane is to fix the taildragger wheel. The parts that are supposed to hold the wheel on do not fit, so I had to use a different part with a smaller hole in it. I got a few extra plastic parts in the Slow Stick kit, so I used one of those to fix the wheel onto the wire. I don't like this taildragger part because it doesn't turn. This makes it hard to taxi the plane on the ground, which would be convenient if you landed some distance away. You could taxi the plane back to where you were standing, rather than walking over to pick it up. With my ankle the way it is, this seems like a good feature to have. The photo shows how I attached my tail wheel.

When I got my plane completed and all three batteries charged up, I decided to test everything, and I also wanted to drain and re-charge the Li-Po battery, so that it will be nice and strong when I take the plane out for the first time. The video shows how to accomplish this.

That's about it. The rest of the instructions are fairly easy to understand in spite of the bad English. If you have any questions, please post them. The electric flyer community will appreciate it!

Happy flying!


The Way You Ought To Be

Every woman who has any online presence at all knows that men are, for the most part, really dumb about communicating. I get a lot of email that completely wastes my time, and I really don't know what to say to people sometimes. I wrote this for Myspace a while back, but it bears repeating.

I like to make friends or I wouldn't be here, but you need to realize a few things before you send me a message. I am not a Bitch From Hell, I am quite friendly, but I am really sick of getting emails that totally waste my time. You will not get a response (or you might get flamed), if you do not conduct yourself in a certain manner. Please read the following link, and then read my comments below. Not everything in the article applies to me (see below), but in general it is correct. Again, you will not get a favorable response if I think you don't understand the following things:


If it's not clear after reading that, please don't bother to send me a message. Here are additional comments, in no particular order, to keep in mind (most of these will not apply to women, who seem to already understand):

1. I already know you think I'm hot. I love compliments (what girl doesn't), but if you wish to compliment me, please be specific. Tell me which photos you like, what you like about them, and why it appeals to you. Also, complimenting something I had to say will go a long way. Girls don't want to get the impression that you are a shallow lunkhead who can't read and only looks at the pictures.

2. I also already know that you want to suck my dick or fuck me or something like that. I really don't want to hear it. It goes without saying and if you want to have any chance of fulfilling your fantasy, keep your balls reigned-in, and think with your big head, not your little one.

3. Don't send me a one-liner message with no subject line. Take the time to write something meaningful. I am an intelligent and educated woman, and I am looking for the same in a partner. You will not get very far if you can't write in complete sentences. Also, check your spelling and grammar. The only time I have ever responded to a man without a profile was because he wrote me a really good message!

4. Have your profile filled out. I will not respond to people with no pictures and nothing to say about themselves. I am interested in relationships fueled by conversation... show me that you can provide that.

5. I am a pre-op transsexual, which means I think of myself as a woman, I behave like a woman, expect to be treated like a woman, but I do still have my 'boy parts'. I do realize (unlike a lot of t-girls), that this makes me quite different from your average woman, and I am not afraid to admit that. I do realise and accept the fact that you might find this sexually interesting, but I won't find you sexually interesting if it seems like you are interested in my genitalia, rather than my brain. Do not ask me if my boy parts are 'functional'... that depends entirely on you and whether you entice me or not.

6. Unlike the girl who wrote the article above, I am not an asexual being who hates my penis. I happen to enjoy what I have, particularly with women. However (and this is very important), I am not on this earth to help you fulfill your fantasies of being with a "man". If you are a man who likes dick, YOU ARE GAY. Get over it, come out, and seek out men. I am not a dick in a pretty package. If you do manage to have a sexual encounter with me, you will walk away feeling just as gay as you would after a sexual encounter with Arnold Schwarzenegger.

7. Don't be sappy or overly sentimental. Poetry will get you no where. I find it to be unoriginal and condescending. I am an educated woman and I will know if you copy someone else's work. Say something original.

8. I am not a crossdresser - I do not have a women's clothing fetish. This is not a sexual thing, it is a way of life. Please don't ask me what I like to wear, what I'm wearing right now (probly jeans and a t-shirt), and so on. This will get you no where... it's not about the clothes. I am a transsexual, not a transvestite... if you are looking for someone to model 'sexy' clothing for you, go somewhere else, unless you are a legitimate fashion designer looking for models (and you better be able to prove it). I realise that my photos show me in some fetishy clothing, but that is not how I am in everyday life. I see lots of women on this site posting photos of themselves in sexy attire. They obviously don't go around on the street in a bikini and high-heels. I don't either.

That's just about it... treat me like a woman. If you understand the headline on my profile, you will realise that I do have a sense of humor about being transgendered. I know I'm different from most women, but I don't like it shoved in my face, and I don't want that difference to be the sole reason for your attraction to me. I am not a man, I don't think like a man, and as such, I'm not looking for sexual encounters, I want something more!

Thanks for reading!


How To Learn a New Programming Topic

(Note: this article is really long, but every word of it is important. Follow along and learn the topic with me.)

I had an interesting conversation with another programmer the other day about how to learn a new programming skill. He's a very smart guy, but he was having trouble getting started learning new topics. Programming topics are built up in layers, and you can't understand high-level things until you understand their lower layers. Many programming books, articles, and even our development software is fighting this idea and trying to make high-level processes accessible without the low-level knowledge. This is because many people reject what I consider a basic property of programming itself: programming is hard work. Part of the reason for that is because you are constantly learning the minutiae of many new topics simply to keep up with your job. This can be boring at times, and requires hard work and dedication. Programmers who lack this dedication can survive for a while, but they almost always either become glorified data entry clerks, or they become doctors, preachers, and pizza drivers (true stories).

One of my major pet peeves on internet forums is the "How do I do this" question, when the person hasn't even tried yet. Programming is a topic which often presents the student with so many problems right up front, that they throw up their hands in disbelief and have no idea what to do. So they go begging to experts for some tidbit of arcane majick that will make it all make sense. The experts will often come back with a flame of epic proportions, which I have been guilty of on numerous occasions, telling people "why don't you try to learn it before you come in here with your stupid questions?!" At some point, it occurred to me that for some people it's not as simple as "go and learn it." This can be true of people with good learning skills and high intelligence. However, it is possible to learn this skill. That is, learn to learn.

Learning a new programming skill is an organic process and will not be the same every time, but there are some basic processes you can apply in all cases. This example will show you what those are in as much detail as possible. Research skills are important, but so is experience. In many places in this adventure, I rely on my experience to figure things out. In the cases where I have no experience with something, I go get some. I chose a topic which I have no experience with: Visual Studio Add-ins. Here goes...

Defining your goals
At first, I want to think about what my ultimate purpose is, but I have to mentally accept that I probably won't get there right away. I need to carefully define this because I don't want to confuse myself and waste my time by exploring topics that don't apply to my situation. What I want is a VS Add-in that would allow me to highlight a section of variable declarations (such as the long sections generated by the Forms Designer), and sort them by type and alphabetically. Ideally I would like this to be a context menu that comes up when you highlight some code. I need to think about some of the possible issues with this right up front, but I don't dwell on them. Some things that come to mind right away are: how to get a context menu to come up in the first place, how to read the code from the editor window, how to automatically modify that code, how to make sure I don't introduce errors in the code, and how to reject bad user input if they highlight a section of code that doesn't include variable declarations. Overall, I know this is going to be a pretty hard project, so I want to start with something simple. At first I want to create a simple Add-in that puts up a context menu item whenever I right-click in the editor window. Without any research, I'm assuming that's going to be easier that testing to see if any code is highlighted and if it's proper code for my routine and so on. This initial context menu item will not do anything, it will just be there to let me know it's working.

Searching for information
In the old days, I would be on my bike headed to the library, but these days we have Google, and it should be the first place you go for any information. Using Google to search for programming information works fairly well, but you need to know how to use Google. Coming up with the right search terms is very important, and in this case I have a good idea what I need. I know what my topic is called, which is a good start, and I know what language I want to program in. Including the language in programming queries is one of the best things you can do to help Google find what you want. So I go to Google, and say "Visual Studio Add-in C#", and start looking at the results. I'll usually read the first few results of a Google search, checking which sites they come from and the preview text to see if the article applies to my situation... only then, do I click a link. If I don't get good results, I don't waste my time clicking anything, I change my search terms, or if I'm positive I have good words, I check other search engines like Ask.com. I also check programming sites and forums like Codeproject and specialized programming documentation search engines like MSDN. I prefer tutorials when I'm just getting started, so I do avoid MSDN and the Visual Studio "F1" function until I've gotten an intro to the topic, but I will eventually be consulting the technical documentation for something. This will probably be time-consuming and painful - I know this and accept this right up front.

Anyway, back to my Google results. The first result is from Codeproject, and I know that's a good site, but it says some kind of error, so I look at some of the others. There's some good things there, and I might go back to the Codeproject one, but I like the second one, so I click it and start to read the article.

Reading and processing information
At first, I don't read the whole article, I skim over it. Skimming is a skill you should have learned in school, and if you don't have this skill, you should learn it. It comes in handy when looking through long code files too, so it's a good skill for any programmer. The article looks good overall, so I start reading it word-for-word. No, I am not going to skip any words... this is super-important with a topic you know nothing about, and I shouldn't have to say it, but don't skip over anything. I am eventually going to read this whole article, but there's going to be interruptions along the way, so I use tricks to keep track of where I am, such as highlighting sections in my web browser as I read. I want to make sure I don't miss anything important, but this is a tutorial, so I need to follow along. In this case, I'm not going to read the whole article before I try the process. I know that c-sharp corner is a good site and I'm fairly confident that the article will lead me somewhere interesting. This is where the organic process begins, and I'm going to alternate between learning and doing, and possibly also between various levels of information within my topic. In the first paragraph of the article, it makes it clear that this tutorial is a more complicated project than I initially wanted to do, but it's still pretty simple: it adds a comment to your code file. I decide this is cool, so I open up Visual Studio and start to follow along.

Trying it out
At this point, it's worth mentioning that having a good machine will really help you. Make sure you have enough memory to run Visual Studio and a few web browsers and if you have multiple monitors or other bells and whistles, use them. I'm actually reading the tutorial, running several web browsers and Visual Studio, and writing this blog, all at the same time. If I was short on memory or something, that would simply not be possible. If you are reading this and you want to follow along, you should have the same applications open. If you don't have my type of ADD, you will simply have to learn to multi-task... it's a programmers greatest time-saver (caffeine helps).

At first, I make a note that this article mentions "Visual Studio .Net" - I'm not sure what version he means by this, but I have version 2005 so if I notice anything weird, I might have to abandon this tutorial and find one that is specifically for Visual Studio 2005. I start to create project as described and everything is going well. I see that there is a lot more stuff in the screenshots than what I see in my Visual Studio, but I have the options I need, so I press on. I choose a good name for my project (JazzysCodeSifter), and I check the options one more time before I click the Open button. I am presented with a Wizard that looks a little different than the one in the article, but again, the option I need is there ("Create an Add-in using Visual C#"), so I select it and click Next. The next few screens in the wizard are covered in the tutorial, so I click through and finish the wizard part. I take note of the options along the way, because I'll eventually go back and learn more about them, but for now I just select what the tutorial says. When I get to the finish screen, I see that things are a little different than the tutorial says, so I go back and read some more and I twiddle the options in the wizard until it's exactly right. THEN I click finish in the wizard to create my project. I make sure everything is exactly right, because I don't want to confuse myself by accidentally going down a different path from the tutorial. This has burned me before, so now I make sure I do it exactly right.

Now, there's some things I'll do here regardless of what the tutorial says. This is just from experience, so I depart from the tutorial for a minute and I do two things: compile the project and read through the code. The project compiles fine, and when it was created, it automatically opened a file called "Connect.cs", so I take a look at that. I don't like wizards very much, so I scrutinize the code that it created in my project, and I may eventually go back and create an Add-in from an empty project, writing all the code myself. For some project types that generate a lot of code, this is not practical, but if possible I like to know what those wizards do and the best way to find out is to do it yourself by hand. For now I see a lot of confusing stuff in the code and I have no idea what most of it is, but I make note of some key things, like what libraries are used (the using directives tell me this), how my object is created (it has an empty constructor), what some of its events are (I see OnConnect, OnDisconnect, etc.) I consider looking up the Visual Studio "F1" help on some of the object type names, but I want to finish the tutorial first, I'll do that later. The tutorial will tell me some of what I need to know, so I go back to it...

When I go back to the tutorial, I notice that the next thing in the process is a very cryptic operation and I don't fully understand what they are saying here:

To build the setup project (CopyrRightAddInSetup in this case), youll need to go into the Configuration Manager in the Build menu and check the build, because by default it is unchecked.

This comes along with a screenshot that doesn't help very much. Now, I happen to know what a setup project is (it's the installer that you will distribute), so I go to create one for this Add-in using the wizard. I know from experience that it's best to add the setup project to my existing solution, so I do that. I also know the basic steps to create a setup project, so I do those and I end up with something like the screenshot in the tutorial. If I didn't know about setup projects, that one sentence in the tutorial would have sent me off on a tangent to find out the basics of setup projects, and my learning process would become recursive. I would be back to Google and probably another tutorial. I feel confident at this point that I haven't messed anything up too bad yet, so I continue in the tutorial.

The tutorial says to "Run the project in debug mode," and I know how to do this, so I click the little arrow and it runs. I see it open up a new instance of Visual Studio, and I go to the "Tools" menu to see if my Add-in is available, and it is. Again, lots of memory and a good computer is handy here: I'm now using 1771MB of RAM, for two instances of Visual Studio (one running a program in debug mode), 4 web browser windows, and a paint program for this screenshot of my Add-in.

If I was using virtual memory for this, my hard drive would be thrashed and I would be staring at the hourglass. Anyway, I have reasonable proof that my basic Visual Studio Add-in works, and at this point, I have created The Null Program, so I have a choice. I can go ahead and stop reading the tutorial and go off on my own, or I can finish the tutorial and learn what it has to offer. I choose the first option.

Finishing the first try
I usually like to create a very basic project at first and then dive into the technical documentation, but this tutorial is worth finishing, so I'll do the idea in the tutorial: an Add-in that puts a comment in your code files. This isn't a big departure from the code-modification tool that I eventually want to do. In some cases, I will abandon the tutorial at this point and go off on my own tangent if I think it's necessary. Sometimes, that works, but sometimes I end up going back to the tutorials. This is completely unfamiliar ground, so I want to see where I end up with this example, so I finish the tutorial. I make note of a lot of things along the way, which I will have to read up on from other sources. Tutorials don't explain everything, and I want to understand some things in detail. Experience tells me the things I need to investigate further and those I can safely ignore. For example, this Add-in is invoked in a different way from what I want and the tutorial doesn't explain it fully, so I will investigate the interface between Visual Studio and my program a little more, but for my purpose, I don't particularly care about the Toolbar it created so I won't investigate that any more. Not right now anyway.

Remember the idea here was just to get an introduction to the subject, because I had no idea how to get started. It took a lot of work to get to that point, but it wasn't impossible. I think an organized approach to this task can make it seem less overwhelming, and if you use this example to develop your own learning techniques, you should be able to adopt new programming topics a little easier. This will only get you started though. If you want to become an expert on Visual Studio Add-ins, it will take years of experience, because this topic is built on so many others. If you don't know C#, for example, you can never be an expert on anything that uses C#. Learning topics like this can be very time-consuming, but I think it is the only way if you want to be any good. Learning programming can require some special techniques, but this is essentially the same process you would use to learn anything else: an iterative process of study, practice, reflection on what you have done, and refinement of your skill. Tiger Woods practices every day, studies the golf swings of other people and himself, and sometimes even takes golf lessons, and he's Tiger Woods! You need that kind of dedication to truly understand any subject, and programming is no different. Good luck!


OMG, This Is Cute

This is one of those things that reminds you that the cheap video camera actually is a positive addition to society. When I was a kid, capturing something like this on 8mm would have been a rare occurrence. It was just too expensive to shoot film back then, and note that this is in a restaurant where it would have been totally rude to pull out a large, noisy movie camera. The cellphone camera is so much less intrusive that we're now able to capture moments like this all the time. I have memories of my kids doing this, but the next generation has video. I have about 30 minutes of 8mm film of my childhood. This generation has YouTube... what a difference! This is so cute... if it doesn't brighten your day, then you are mentally ill.

braedens first lemon

Add to My Profile | More Videos


Dog Macros

Just a couple photos I put text on.

Some dogs just don't like to have a camera shoved in their face after they wake up.

This might be funny for hackers


The Decline of the Art of Programming

Two things are happening in the development world that I really don't like. The dumbing down of programming tools, and the dumbing down of programmers themselves. Consider my latest adventure with drag-and-drop. I wanted to create a custom HttpHandler for our web site. I prefer to actually write code, but I found a nice tutorial about how to do all this GUI work in Visual Studio, and presto! a custom HttpHandler. Problem is, if you follow the tutorial, you get an error. If you search for the solution to the error, you get all the forum posts from people who followed the tutorial and ended up in the exact same place I was. If you then go and read the answers (if there are any), you find no actual solutions to the problem... instead you find a bunch of losers who basically decided that since they couldn't drag-n-drop a solution, they decided to do it a completely different way. So, the most popular tutorial on the subject leads to an error, all the other tutorials are directly copied from that one, and nobody ever bothered to figure out the real solution, fix the original tutorial, or post a good answer on a forum, anywhere on the entire Internet! Cool... way to go, Programming Community! Good one.

Clearly, there is not a solution that you can just copy from someone else. If I was the type of person to look at this situation and decide that, since nobody else solved it, the problem can't be solved... I would be implementing a way to tie Apache and IIS together and re-write each other's URLs, or something stupidly complicated like that.

Instead, I used my arcane knowledge of compilers and linkers and How Computers Work, to come up with a solution to the original problem. See, I recognised the error as a linker error right away... and it didn't take me long to figure out why the linker couldn't import my custom handler code. If I was a drag-n-drop programmer, it's likely I wouldn't even know what a linker is, and I would have been screwed. I'm not even sure why I spent a whole day looking for someone else's solution, although I did get an education about the subject, which probably helped my mental process derive the actual answer. Still, my first instinct was to look for a pre-fab solution, and it took a whole day for me to accept that there wasn't one.

The other issue is the dumbing down of programmers themselves. This problem is caused by modern education. Kids are being told that "if you just try hard enough, you can do anything"... this is not true, and it's hurting our kids to teach them that. Kids need to learn when to give up on something. We have too many programmers who shouldn't be programmers because of this issue. These are people who think that if they just try really hard, they can be good at programming. It doesn't work that way. This is a field like being a fashion model - if you aren't the right person for it, you might get somewhere but it's going to be hard and you will never reach the level of proficiency that you could in another field.

In Boulder, the school has a policy outlawing all games where there is either a "winner" or "loser" - because losing at a game is too traumatic for kids. BullSH$!%&?!!!! Losing is important! If I hadn't got my butt kicked multiple times as a kid, I might be out there right now trying really hard to become a football player, and not getting anywhere at all, because I'm skinny and uncoordinated and I have no endurance. I'm not a physical person, and there's nothing wrong with that. Why is it suddenly "not ok" to be a person with limited mental abilities too? I know my mental limitations and my physical limitations, and I'm irritated that kids today are being taught that there aren't any such limits, and they are being prevented from experiencing failure, which makes them totally unaware of their own limitations.

This all leads to an incompetent workforce, and that requires tools that can be used by an incompetent workforce, which is where we are now. These "tools for the dumb" are not helping the problem, and are contributing to the decline in Computer Science as an academic pursuit. People are starting to see computers like they see cars, as a machine to do a job, which it is, but it's so much more than that, and there will always be those of us who are interested in that "more" that it can do. I would bet that there are the same number of us now as there always have been, but our percentage is smaller, because we are now lumped in with everybody else who uses computers. It's like considering all car owners as mechanics... clearly they are not, and I'm insulted by the suggestion that script-kiddies and data-entry clerks are anything other than grunt-workers performing tedious tasks that the knowledgeable people are tired of.

Why can't you get this done on time?

Here's why development projects can't be done on time, or rather, why it's impossible to estimate the time for a project unless you've already done it. You do not need to understand the tasks in italics, which are specific to my company site. This is a typical day for me - for perspective, this is 7 hours of work, with the exception of the HttpHandler issue, which spanned several days.

Had to completely re-code the Master page so that the email claiming would work. This is an example of something that would have been a small change, but there is a condition that ASP.Net will simply not accept, and it's caused by the way the master page is made. In order to make the email claiming work, this underlying problem had to be fixed. Existing pages were not affected, but this new page aggravated the situation and made the error show up. Still working on this re-coding of the master page. This has to be done very carefully because any mistakes could negatively impact every page on the whole site!

Spent an hour looking for the method of securely posting a form field to another page on the server without making a round-trip back to the client. This is important so that it will not be possible for members to claim other members contacts, simply by knowing the email address or contact ID. There is only one way of doing this, and it causes the problem above, which requires a total re-work of the master page to fix it.

Got half way into the email form thing, and then realized that in order to support the sending of attachments, I couldn't just upload the file and send it out. I have to upload the file and figure out a unique name for it, then I have to store that name in the database, associate that attachment with the email message, which now also has to be added to the database, then I have to create a scheduled event in the existing database table, and finally, I have to modify, recompile, and re-install the BEIJobService, so that it will be capable of querying the database, getting the file name, and sending the attachment. This procedure would be easy for a human, but it requires hundreds of lines of code to implement on the computers, and it involves changing 3 seperate codebases, the database, the web site, and the job service. All of these changes must be tested in development environments before being put live on the server, particularly the Job service, because it is capable of causing mass havoc if it malfunctions. And the job service is a bitch to test.

I spent about half a day building a way to auto-login to the Online Boot Camp, but when I finally went to test it I got:

Invalid postback or callback argument. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.ArgumentException: Invalid postback or callback argument.

I basically was back at square one. Maybe square two. The cause of this error can not be eliminated because I don't own the AKP codebase and I can't change it. I have to go into research mode at that point, and I end up spending hours on end reading web pages and getting a headache. I don't like that and I feel like it's a waste of time, but I don't have any choice. All this stuff is so new, that even someone with my experience can be stumped by it, simply because we don't know the specific name of some new feature or we're doing something nobody anticipated, and the system chokes on it, forcing us to find a better method of doing the same thing. I try to avoid this situation with proper planning, but I tend to neglect proper planning when I'm under a lot of time pressure. Sometimes I can pull something right out of air and get it done without any planning, but when that method fails, usually it means I've wasted a bunch of time, and it's extremely frustrating.

When I went to create an HttpHandler so that we could do the version control without having to re-code every link on the entire site, I had major problems getting it to work, but it is the only viable solution to the problem. Nobody, including people who work for Microsoft, was able to answer my question. When I went searching on the net, I found a lot of people had posted similar questions on many different forums, and none of them had an answer to the problem. Everyone has this problem, because the Microsoft tutorial on the subject leads to an error, and everyone else who's written a tutorial on the web, basically copied the Microsoft one. NOBODY GOT IT RIGHT... their method does not work. Instead, it causes an error. This is a very advanced feature of ASP.Net that I'm trying to use, and most people do not have a reason for using it. This makes it very hard to find anyone who has successfully implemented it. I am currently writing an article about this: "HttpHandlers that actually work", which should be posted on CodeProject soon. I had to solve this problem myself, using my knowledge of compilers, linkers, and ASP.Net and the .Net Framework. Microsoft MVPs who were provided with my entire codebase could not solve this problem, so I'm pretty proud of myself for figuring it out, but it took a long time, and I had to actively pursue the solution, so I couldn't work on much of anything else till I figured it out. So, I spent time over several days figuring out why one line of code wouldn't work, and the final solution only took about 10 minutes to implement, once I figured out what needed to be done.

And that is why programs do not get done on time.


Wal-Mart is not Evil, and Not Innovative Either

Wal-Mart is using a "new" software to do their employee schedules, and people are pissed off about it. Those people need a history lesson because Wal-Mart didn't invent this... they were just dumb enough to ignore the potential of it, for nearly 20 years. This is nothing new and I don't know why people are suddenly all upset about it. I suspect it's because some people out there hate anything Wal-Mart ever does and would really like them to go out of business, but I like getting toilet paper for 97 cents, and it's customers like me that drive the business, not the people who *don't shop there* - who cares about them? Screw them. I want my low prices everyday.

McDonald's was using this system as far back as 1988... nearly 20 years ago. It doesn't give employees 'random' schedules. Not unless the customers as a whole, start behaving very randomly. At Wal-Mart, they have a ton of customers, so the law of averages means that this software will probably make the schedules LESS RANDOM than they would be if the schedules were made by human beings. It also does not 'disregard' family and other life. Employees have always been responsible for making management aware of the days off they need, special events, and whatever else goes on in their lives. This software streamlines that process as well, with availability becoming a data point used by the machine, and the machine is much more likely to get it right, than someone who has to keep all those variables in their head. I've seen numerous occasions of people being scheduled accidentally on their kid's birthday or something, when the manager knew about it (usually in writing). This software should eliminate that very common mistake, and if the employees have access to it, it could streamline the process they use to ask for days off.

This software, when used correctly, greatly reduces the possibility of last-minute schedule changes. Last-minute schedule changes are *almost* always due to the actions of unreliable employees. "Jimmy didn't show up today, I need someone to cover, let's hit the phones and see who wants extra hours"

And to the people out there who claim to care so much about Wal-Mart's employees. There's one thing you can do to improve the situation. SHOP THERE! As much as possible. Your boycotts and bitching only makes the problem worse. More customers, more hours for the employees... and this new software helps that situation! You motherfuckers who are giving Wal-Mart hell for everything they do - YOU are the problem. Get over yourselves and save money like the rest of us.


How to get no more junk mail!

This is simpler than you might think. I was very surprised that this actually worked. All you need to do to never get junk mail again, is call the places that are sending it, and demand to be removed from their lists. I called Comcast and finally got off of their "environmental onslaught", and I removed myself from ADVO mailings by going to their web site (click "About Advo" on the side, then click "Consumer Support"). This will solve most of the problem. As I learn how to get removed from other mailing lists, I'll post them here, but ADVO and Comcast are the worst offenders in my neighborhood.

Comcast was sending me 2 or 3 mail pieces per week, sometimes in Spanish and always annoying. This is totally uncalled for, and I question the effeciveness of this strategy as a marketing campaign. Comcast is one company I will never ever deal with again, and it's their underhanded and annoying marketing that is the reason why. When you multiply this mailing by the size their list must be, it has environmental impact. So does ADVO. They must be producing millions of tons of paper waste per year. This is harmful to the environment, and if legislators aren't going to do a junk mail law, then I'm happy to tell folks how to combat this problem on their own. Note: there are many web sites and services that offer to do this for you, for a fee of course, but I say spend a little time and do it yourself for free. If you're too lazy to do that, just do a Google search. If you're too lazy to do that, click here.

Junk mail that I'm just going to throw away is one thing, but my actual goal here is to get NO MORE MAIL AT ALL! There is no purpose for it, and I'm done with it. It's been months since I got something in the mail that I actually needed. I pay all my bills online, I don't need paper bank statements or phone bills or anything like that. As far as I know... I don't need mail, and since most of it is paper, I think we can do the environment a lot of good if more people try this. Most companies offer electronic billing these days, and only a few types of things must legally still be sent through the mail. Not sure what I'll do about that, but I guess if somebody wants to sue me, they'll have to serve me in person, like a human being.

Don't tell me what to think - Pit Bulls

I've got someone trying to convince me that Pit Bulls are ok. I say, maybe for you, but not for everyone, and laws have to apply to everyone, not just you.

Look, you are an expert in Pit Bulls. Not everyone is, and a Pit Bull needs a strong alpha to keep itself under control. Telling people that Pit Bulls are OK, when you don't know the person, is risky, because they may not be the kind of person who can train it to be nice. They were bred for fighting, and recently people have been trying to breed them to a more appropriate temperament, so I think it's good to be an advocate for them, but I don't think that most of the idiots on the web are capable of being good Pit Bull owners at this time.

The laws in various cities are there to protect the citizens from those people, not people like you. It's like I say about gun control "My gun isn't the one you need to control"... Your Pit Bull may be fine, but it's the moron we don't know about, who trained it bite "cuz it was funny"... that's the problem, and we don't know who those idiots are, so we have to make it a blanket policy, no Pit Bulls for anyone.

I want laws that would hold people responsible for their pet's actions, but most people are pretty irresponsible with their pets. So, right now the best thing is to outlaw Pit Bulls completely. Maybe we can turn it around some day, but right now the risk of someone being bitten is too great. We know this because people got attacked before (one little girl was killed, ok?), and now with the law, we have a decrease to ZERO Pit Bull attacks. It is a shame because when trained properly, they are really great dogs. People are responsible for this, and the dogs are paying for it

Don't tell me what to think - Parolee Voting

As an openly transgender person, I am constantly being told what I should think. I make my own decisions, and recently the ACLU told me I should write to my senators about Parolee Voting. Here's what I had to say. (Sent to Democratic senators in Colorado)

The ACLU has recently informed me that I should support parolee voting, and that you had recently changed your stand to be against voting rights for people on parole. In spite of what I'm told to think, I support you. Thank you for insuring that Colorado will not be a state that goes soft on criminals. Parole is part of the punishment, and as such, it should involve unpleasant circumstances like not being allowed to vote. You are doing the right thing. Stand your ground - you have support from your fellow Colorado Democrats!

Jasmine D. Adamson


Doggie Dance

Akira has really good balance. He dances! This is a good example of how to train your dog. Just before the video starts, I issued the "up, up!" command, and you can see him turn and come to perform the trick. He gets constant reassurance with what is essentially "good noise", and he gets a few repititions of the "up, up" command. If I continue to repeat "up, up" he will stand for as long as I want, within reason (this video is pretty long for him at this stage). If I do not say it, or stop giving "good boys" he will know that the trick is over, and it's time for his reward. He gets lots of petting and he got a treat after I turned off the camera.

This was a natural ability that I observed, and I simply trained him to do it on command. At first, I could hold a treat above his head, and he would do this, while I repeated the "up, up" command, and he got the treat if he stood up long enough. Over time, I increased the amount of time it took for him to get the treat. After a while, I stopped doing it with a treat in my hand, the treat would come out of my pocket after he was done with the trick. All during this, I constantly repeat the "up, up" command, and give him lots of reassurance. In this video, I am not raising my hand (I'm holding the camera), and he is doing the trick just because I said so. He knows he will get a treat, but after a while, he will only get the treat sometimes, but he will always get lovin if he performs correctly. This will allow him to perform without constant treats, and be able to do several things in a row without losing attention. Of course, he would get a treat when he's done.

He likes Newman's Own Peanut Butter dog treats. They are organic, and taste a little like peanut butter on toast. (BTW, you should always taste your dog's treats... they should taste good to you. If they taste like cheap dog food, they might not motivate the way you want them to. Anything that is safe for your dog to eat, will be safe for you to try as well)

An open letter to IT recruiters

Wherever you found me... I'm positive that my resume was available to you. If you were capable of doing your job you would have seen that I am not qualified on Acme Widgets (or whatever). I get 10-20 SPAMS a day from losers like you. Do your god damn job and quit SPAMMING people. I didn't post my resume online so you could harvest the email and ignore everything else. I am a geek, I expect people to be intelligent, and when people demonstrate an inability to read, I assume they are not intelligent people, and not the kind of people I want to work with. I realize that you do this so you can be lazy, but it would be much better for you to just do the work of actually finding people, instead of asking me to do your job for you.

Thank you,
Jasmine D. Adamson


Akira is such a good name for this dog

As I mentioned in my previous post, Akira is a name meaning intelligent in Japanese. That's one of the reasons I chose it for my 6-month-old Chinese Crested puppy. After the first few days with him, I'm happy to report he's the most well-behaved and intelligent dog I've ever had, and I've had quite a few dogs over the years. He's doing so well with housetraining I can't believe it. He's done "both things" on the carpet once, and been scolded for it and taken outside. He pretty much understood after that. I've never had a dog that didn't piddle on the carpet at least 5 or 6 times. He's also very happy and well-adjusted. If you are interested in this breed, contact me and I'll turn you on to a good breeder. I called her to thank her for such a great dog and she basically said "they're all like that." That's why she loves them so much, and why I do too!


Mmmmkay... that's a new one

This came in my inbox today:

Subject:  I've got a 8 inch.. cervix
Date: Wed, 21 Mar 2007 10:02:59 -0500

You've Seen Them On TV...

Bigger pen1s, better s3x! 

CHeck it out 


blight biggs jensen cervix tupelo quo birgit.blat ad.
ideal job acts.turing.

Now I don't know about you, but I for one, could really use a bigger cervix.


So you wanna get a dog?

Update: we have a winner - 明 (Akira), or Aki for shortness. It's a popular Japanese name meaning "intelligent". I think that describes him pretty well, and it's a favorite film of mine, as well as a favorite film director of mine, so it's appropriate for me too!

If you like dogs, get one of these. I'm taking suggestions on his name. He's officially called "Royal's British Brass O' Ebon Will", but hell if I'm gonna shout that out at the dog park. The lady I got him from calls him "Cosmo", but he doesn't seem to answer to that, so it's up for grabs. So, what's a good name for this little guy? I like Japanese and Chinese names, and for training purposes, something ending in a long E sound is good. Either gender is ok... Post your suggestions.

He does seem to like the footballs :)

Yeah, I'm pretty...


Arrgghhh... Dammit! Who shot me?

OK, I'm officially tired of crashing into walls, going down in flames, and getting my head blown off by enemies that materialized from nowhere, in some cases, literally. I'm a practiced gamer and consider myself to be pretty good at video games in general. I have good reaction times, good decision-making skills, and pretty good situational awareness in some types of games. I'm best at flight sims, which is what's got my panties in a bunch today. I'm a pretty good pilot, and in the ultra-detailed realistic flight sims, I probably do as good as our boys in uniform. In real life I would probably be almost as good as them, meaning I would probably not come back alive, where they would be safe on deck. I have a lot of experience with flight sims and I can out-fly most people I've played online. The point is, I can handle a pretty tough situation in a fighter plane.

So I recently went out and bought an older flight sim game for XBox: Air Force Delta Storm (aka Deadly Skies in Europe). It's a pretty good flight sim overall, and things are mostly as I would expect them. The controls are standard, allowing a choice between "Beginner" and "Expert" control styles. The Expert mode operates like a normal plane, and the Beginner mode offers a self-leveling flying style. I prefer the Expert mode, since many of my repertoire of moves involve loops, flying sideways and upside down, and so on. These "moves" include standard aerobatic maneuvers and some I've invented over the years which seem to work well in sims. The Half-Cuban-8 and (less often) Reverse Half-Cuban-8 are my favorites actually. This works quite nicely in situations where you need to make multiple quick passes over a ground target. To get from a bombing run into a higher-altitude dogfight, I usually use an Immelman Maneuver or a simple climb, depending on my enemy's relative position. I consider things like altitude and its effect on relative energy and the effect of that on the outcome of dogfights. If I want to win, I prefer to have an altitude advantage, or a serious power advantage.

Now, those are all the things that make battles easy. What's fun is when a battle is hard, so I appreciate a challenge. However, I've noticed a disturbing trend in all games lately, not just flight sims: forty-five-on-one is one thing, but 145-on-one is another thing altogether, and nearly impossible to deal with in most games. Games have gotten too hard. Normally I love a mission where I have to fly down a canyon and kill things on the way, but in Air Force Delta Storm, they take the magnitude of enemy forces way over the line.

In this mission, I have an altitude ceiling, supposedly above which I'm shot down immediately by some kind of super-powerful anti-aircraft system (it works too). I'm also hobbled by a choice between an F-4 and an A-10, both notoriously difficult to maneuver in tight spaces. In case you're not familiar with these, the F-4 is a Strike Fighter from the 1950s, and the A-10 is a CAS-specialized attack craft from the 70s. Both are still in use today and they are very capable aircraft. Very capable that is, as a Strike Fighter and for Close Air Support, but not very capable as a multi-role fighter on a canyon run with a deadly altitude ceiling. I need an F-18 for this, or maybe an F-86 or something with a tight turning radius, hell I could do this thing in a Zero, but there's walls on the sides of this canyon, you know? How dare you send me in there with a slow-turning thing like an A-10? Come on now... give me a chance!

Now, it may sound like I'm just whining about a hard mission in a game, but that's not it. What I'm whining about is the total lack of respect for the laws of physics. Flight is a physical activity, and you are bound by those laws, you can not escape them. If those laws are programmed into the simulator, then they are just as inescapable as in real life. In a canyon with a limited altitude, you are basically flying in a box. That means your energy levels are finite and limited. In dogfighting, energy levels are a very important thing. If you don't have more energy than your target, and can't "catch-up" by using your engine, you are not going to be able to turn to shoot the target. Period. That's a law. There are complex calculations you can do that can give your likelihood of success in a given situation. Now, these calculations never converge to the point of "impossible", but there's a point where it's impossible for practical reasons. In this game and in this mission, you are approaching that limit. This is not fair, particularly for a beginner who doesn't know any of that stuff I just talked about. Also, if I can't do this mission, it's pretty freekin hard. Did I mention there are things shooting at you this whole time?

Now some people may say, Jazzy you're just gettin old and you can't keep up with the whippersnappers anymore. I disagree. Expertise should always win out. If it doesn't, then it's not a realistic simulation. Also, my kids are teenagers and they agree with me - games are getting way too hard these days. So game programmers, can we dial back the difficulty just a bit?


Origami with Jasmine - Penultimate Modules

Here's a quick video on how to make Penultimate Modules. You'll need to read the PDF here: http://dev.origami.com/images_pdf/polyhedra.pdf

There are other origami videos available on my web site


Geek sex is not a myth

Geeks are a little different from nerds in the sense that geeks actually get laid. We're smart and interesting and we usually have good jobs too! Here are some of the geeky things I've never said after sex.

"We should try this in anti-gravity"

"Was that a Dutch half-twist or a Polish 2 quarter turn?"

"Don't forget to give me your playlist before you leave!"

"I hope that was just the beta version"

"That was really cool the way you made it into a perfect circle like that!"

"You should try to optimize that for faster performance."

"I really didn't have time for that"

"We should take multiple measurements of that over a long period of time and average the result..."

Why I don't like cats.

Number 1, I am allergic to cats.

Cats suck. I hate them. Did I mention that?

Cats won't hesitate to scratch the fuck out of you and give you a nasty infection and they don't even feel bad about it later.

They shed all over the place, and they are constantly losing their hair, too.

Cats make me sooo mad!

They shit in the house and you have to take it outside yourself.

Cats could be a lot better pets if they tried as hard as dogs do. They've got it in 'em, they just don't care.

Hundreds of other reasons.


Size What?!

So, every woman has her "truth jeans". This is the pair of jeans that fits you exactly, but only when you are the perfect size. You use this pair of jeans to judge your weight. Everyone does it, I'm not going to hide it, I have a pair myself. Anyway, one day I was wearing them and I happened to go to the bathroom, and while I was sitting there, I looked down and saw the tag on my 100-dollar designer truth jeans.

SIZE 10?! WTF?!

I am fucking skinny, ok. There is no reason why I should be in a god damn size 10! My measurements (and I checked), are 34-30-35... that's thin. I don't understand why I should be in the double digits, and why I should have to pay so much for it too. Some things I have are size 4, and one dress is a 14... I don't get it. Why can't I be average-tall-skinny-woman-size? I'm one size - why can't my clothes be one size too? Sheesh.


This is super-boring.

OK, I like statistics. I've always been interested in statistical applications and there's a good reason why. Here's a few of the interesting aspects of the problem of statistical analysis software.

Most people don't understand the complexity of statistical analysis in the first place and those people will never be capable of describing their analysis needs to a tool that starts with raw data manipulation procedures and builds an analysis from there. Business Intelligence is often built-up in a complex heirarchy that many people in an organization do not understand. In many cases, it is not important for them to understand it, yet they still need to be able to produce new analyses and presentations based on those analyses, without the help of a programmer.

Many people do not view their statistical information in the same way. They visualise it differently, and some people do not visualise their statistics in any meaningful way which could apply to a software program. Some people visualise their data in ways which can not be presented accurately by any software program no matter what you do. This means the challenge of presenting statistical data will continue to be interesting in the future, as we invent new presentation technology and require software to support it.

Some people require different modes of presentation to understand the same statistical information. Some people work well with static visual information (graphs, charts, spreadsheets), but others prefer richer presentations such as animations, and interactive charts. Some people may even require audio or tactile information, particularly in the case of people with limited visual ability.

Often these people are attempting to understand the same information at the same moment in time, and they are limited to a single mode of presentation, meaning everyone has a varying degree of understanding, even though they are all looking at the same thing. This means some people may not be able to contribute in some situations even though they may be capable of groundbreaking insight given the proper presentation. It would be nice if we could have a way for multiple people to simultaneously view the same data in their personally preferred manner. This is virtually impossible with current technology unless you have prior knowledge of the type of data which will be presented. It is possible with current software if you have that prior knowledge.

The way that programmers see data and others see data is vastly different and a method must be found to bridge that gap, because in the end, the software must be capable of doing the work the user wants, and the software will be made by a programmer using a programming language. The computer has to bridge the gap between the way it works and the way a human works. This is the basic mission of all software, but with statistics, there are unique aspects to the problem. This leads many to believe that meta-languages like Mathematica, will always be required to do anything but the most basic statistical operations. There is reluctance to get too far away from the silicon, so to speak.

The underlying problem with all of it is that statistics is hard. It's complex to begin with, and so many programmers assume anyone capable of doing the analysis is going to understand a complex programming language as well, so they write such a language and consider the problem solved. Then, the people who the language was supposed to support have to deal with a big learning curve, or hire a programmer to get the problem done, and we're right back to the initial problem - you had to get a freeking programmer to do the thing! It's not because you're not intelligent enough to design the program, it's because in order to use the 'new' language, you have to think like a programmer and visualise things like a programmer, and you're not, you're a statistician!


OK, We've All Done It

OK, we've all had our weird escapades in the pursuit of love, sex, or whatever. It's common for people to want talk about their sexual conquests, but I want to talk about the times that it didn't work out. These are some of the strangest stories of mine that I can legally put in writing, and I want y'all to leave yours in the comments. This might get a little dirty in places, so if you're squeamish, just back away slowly right now.

Everyone's been there, at least I hope they have, whether they wanted to be or not. It's just something that happens. We can't explain it. Sometimes it's bad, and sometimes it's not. I'm speaking of the most classic romantic mishap of all, the One Night Stand. Almost all of my stories in this blog are going to be one-nighters, but this one stands out because of the peculiar reason why we never got together again. I had met this young lady at a club in Denver we used to call The Wave, and we hit it off really well and ended up at her place for a night (and morning) of really great sex. I tried the whole next week to get her on the phone, but she wouldn't answer. I knew she liked me, we had talked about going out again, so I couldn't understand why she wasn't calling me back. Turns out, she couldn't call me back if she wanted to. You see, I had stolen her phone - more correctly, she left it in my car. I found it about a month later, and by then I guess she changed the number. Anyway, Carrie if you're out there, I very much enjoyed your company and would like to see you again! My number is still the same, but I'm sorry I donated your phone to the women's shelter. I hope that's ok :)

This world is full of diversity and usually I celebrate it, but people are unique in the animal kingdom. We have the wildest array of fetishes and problems of any species on the planet, and even the most normal people are a little wild in the bedroom. This makes it extremely hard to judge people and therefore, extremely easy to wind up with someone who's a little short of a full deck - but only in the bedroom.

Such is the case with a person whose name I do not remember, and I hope I never do. She was simply charming when I met her at a local drag bar. I loved her outfit and attitude and we had a very nice conversation, so I was happy to continue the evening with some drinks back at her place. I didn't find her very attractive really, but she seemed nice enough and I was pretty horny and I had a good buzz too. I'm usually fairly passive and once I let my intentions known, I expect people to initiate things, so I let my intentions be known and was met with typical male behavior, I thought. I guess this person took it to mean that I wanted to be "submissive". Now I'm not talking about submissive in the young Mormon housewife kind of way, I'm talking about being the B in BDSM. With an experienced partner this can be a lot of fun, but on this particular occasion, "yeah that would be cool, just don't hurt me," was kind of a dumb thing to say. Let's just say in ten minutes I was tied to the bed and happily fucking this guy (he had turned back into a guy at this point). I was totally into it and the cuffs and straps weren't too tight or anything and I was having a good time. Two hours later I was not. See, people experienced with this kind of thing know that you can't just tie somebody up and sit on them for two hours. You gotta be inventive. Anyway I had had enough and when they asked me if I'd like to try a ball gag, I got up, said I'm done, and left. I saw the person a few times after that but I never said anything to them.

Some people just occasionally do something completely random that really pisses you off. I met a very nice guy one night and was taken by his good looks and totally hot Australian accent. He was dressed in what appeared to be a soccer outfit though, complete with shorts, socks and shoes. It was a little strange but he seemed like a nice guy so we went back to my place and had a few hours of drunk, somewhat rough sex. Anyway I kicked him out and went to sleep, or passed out I guess. When I woke up the next morning I had teeth marks on my neck. Literal teeth marks, the guy actually bit me. I've had people suck on my neck before but this guy fucking bit me. Wow. Anyway, now when I see him at a bar, I go around and tell all the girls that he bit me. I think it's a public service, especially for the girls who like that kind of treatment. I'm not one though. Anyway, if you saw me at Pridefest 2005 and didn't ask about it, that's what it was, ok. There was not enough makeup to cover it up. Sorry about that. I really hate that guy.

My last story might seem like something I shouldn't mention in a blog about fuck-ups, but it's too funny to leave out. I met a nice tall, large, jolly black man at Charlies, a Denver "cowboy gay bar". He was really good looking, in good shape, and about 6 foot 5 with football-player build. He was a god, and in more ways than that. Nevertheless, I never want to see him again. I took him back to my house and we were talking and having some drinks and I basically got up and sat in front of the couch and started to undo his pants. So, he wasn't "hard" really at all when I reached in and started to get the fun stuff out. Anyway, what I was greeted with reminded me of that magic trick where the guy pulls scarves out of his mouth for like ten minutes. I swear to god this guys cock was 8 inches soft, and pretty thick too. I thought... wow, I'm gonna have a good time with this. Let me tell you this ladies, when it starts at 8 inches and you haven't even done anything yet, you do not want to finish the job. This guy needs to get a job in the porn industry. I gave it a good college try, but I could not handle this situation. I'm sorry Tony, you're out.

Anyway I know we've all got stories like this, so I want to hear 'em! Please post your comments. Do not be afraid to be explicit. We're all adults here.

Have a groovy day!


C# Objects - Does it create a new one?

In response to whether a new object is created during a particular type of loop, I gave the following answer. It has to do with what type of variable you are using, but sometimes the CLR creates a new object when you wouldn't expect it. Strings are one well-known cause of this, but it's important to understand the reasons why. The string is a special case because of the way C# implements it as an object, not because of some factor of the C# language or the compiler itself - it's an implementation detail, not a language feature. Most object references will not result in a new instance of the object simply from changing its value. For string though...

string s = "myString";
s = "another value";

That results in two instances of the string being created (and the one that says "myString" is now "lost" and will be garbage-collected). This is because strings are implemented as immutable objects, meaning their value can never be changed. In order to allow for normal programming constructs, the CLR simply creates a new string whenever the value is changed, discards the old string and assigns the new string to the reference. There are historical reasons for choosing this implementation, security being one of them (notably, the buffer overrun exploit). The .Net Framework provides the StringBuilder class to overcome performance limitations with strings of this type. For most other types of objects, that doesn't happen. If it's an int, you only get one instance, no materr how often you change the value.

int i = 25;
i = i+ 20;
for (i = 0;i < 20; i++) {
 //do some stuff

That whole block only results in one instance of i, since you're only changing the value. This:

for (int i = 0; i < 20; i++ {
 //do some stuff

This also results in only one instance of i. This on the other hand:

for (int i = 0; i < 20; i++) {
 int k = 10;
 //do some stuff with k

That will result in 20 instances of k, all of which will be garbage-collectable at the end of the loop. The type doesn't matter there. If you did this with a reference type, a string, whatever... you will get 20 instances of the thing, and they will all be thrown to the garbage collector, unless you pass them as a reference to some other thing. In some cases... this is what you want. Like this:

for (int i = 0; i < 20; i++) {
  ListItem li = new ListItem();
  //add the li to a ListView

That creates 20 instances of a ListView object (maybe 40, see below), but they will not be garbage-collected after the loop because someone else (the ListView) is holding a reference to those 20 new things. The fact that I called it 'li' each time is of no consequence, I can recycle the variable name as much as I want. Now, here's where it gets confusing. If I did this the other way...

ListItem li = new ListItem();
for (int i = 0; i < 20; i++) {
  //set some values for li and add it to the view

This will not create 20 instances of li, there will only be one and I can change its values around all I want. So... am I adding the same object to the ListView 20 times, or is the ListView making a copy of the object 20 times, resulting in 21 ListItem objects total? I know it will result in the ListView showing 20 things and they can all have different values... so I think it's generating a copy with the Add() method. I am pretty sure of that, but I'm asking if anyone knows for sure.

My overall point is that you can't use the rule "ref type, one behavior, value type, other behavior", because the situation is more complicated than that. You can see there are some obvious cases where you get a new instance, but there's some other, less obvious cases (such as string), where you get new instances because of some implementation detail of the objects involved. With string, I get a new instance because string is implemented to create a new one when the value is changed, with my ListItem, I'm getting a new instance because of the implementation of the ListItemCollection which I'm adding it to. Am I right about this?

The person who asked this question was asking what is "best" in their case, but it's pretty hard to figure out what is best, and it won't be best in all cases. However, if you know how things operate at a lower level, you can decide what's best with much more confidence. BTW, this is one thing I don't like about .Net (not C# really, I think .Net is the Evildoer here)... I'm not always clear about the performance costs of particular methods, since the .Net Framework likes to create new object instances willy-nilly like memory has no limits.

Clear as mud?
Jasmine :)


Freeware Link Checker and Google Sitemap Tool

I created a freeware tool that I use to check for broken links on my sites. It works quite nicely! It does the same things that Inspyder's tool does, but for free. I know there are many tools like this out there, but I ask you to try this one and let me know how you like it!

Go here to download:

Jazzy's Web Widgets

Thanks very much!


Killed a bug today...

It was a Box Elder Beetle (left), which is not actually a beetle (order Coleoptera) at all, but is truly a bug (order Hemiptera). I'm not here to discuss taxonomy - I'm writing today to discuss the killing of insects, spiders and other creepy-crawlies and why I think a man, if available, should carry out this task. I think men should really stop giving us so much crap about this - just do it.

Normally I'm not the type of person who kills a bug, or spider or whatever. I usually let them roam around my house at will, but I wasn't really sure why. I tried to rationalise it by saying things like "well, they don't eat much", or "it's probably here eating worse things I'd rather not know about." Since I have a degree in Biology, I can identify most types of spiders and insects commonly found in homes and I usually have some idea of what kinds of activities they might be carrying out in my domain. Most of the time, I consider them responsible citizens of my little slice of the world, but occasionally a critter will push it's luck and Jazzy has to give it the smack-down.

If you've ever watched a woman perform this activity you know it can be quite comical, involving copious amounts of toilet paper, a slow stealthy approach, and a lightning-quick strike. This is usually followed by repeated confirmation that the thing is not going to strike back, and discarding of the victim in the toilet. I usually watch to make sure it goes down too. Many people have observed this phenomenon and assume that women are afraid of bugs.

I say no, we are not any more afraid of bugs than anyone else... we just don't want to be connected with the act of killing. I know this is true because I'm not afraid of bugs. I'm not afraid to touch them at times when I'm not about to end their life. I've handled many insects and spiders in my life, but I don't like them in my house... at least not if they are going to be brazen enough to crawl right in front of me.

Today when I killed this poor soul, I experienced an unusually lucid emotional moment. I was genuinely sorry that I had to kill this creature, and would have rather had it any other way. I briefly thought about taking it outside, but it's 18(F) degrees outside and that would surely kill it as well. As I watched it crawl across my bathroom mirror (I know, creepy), I actually took a few moments to consider possibilities for saving it's life. I wished with all my heart that someone else could do this for me. Then I reluctantly performed the standard bug-elimination procedure detailed above. I suddenly realized, women aren't afraid of bugs at all, we are afraid of killing. I don't want to be involved with that kind of carnage. It actually put me in a bad enough mood that I had to blog about it. I also realized that the standard bug-elimination procedure is merely an attempt to disconnect myself from the act of killing. As in, "if I don't really touch it, then it wasn't me who killed it."

All this destruction is better kept out of sight, and if there was a man around I would have begged him to carry out this activity on my behalf, in order to disconnect myself even more. I would still feel a little bad about contracting a hit man, but conspiracy to kill insects is a little less serious in my mind. So men, please, no more crap about us being afraid of a little bug, just be our hit-men and do it. I (meaning you) will be much happier without the emotional baggage of being a murderer following me around the rest of the day.

hit counter script