I was reading through some code at work today and it inspired me to propose a new vocabulary word for programmers. “Run-on Programming” It’s like a run-on sentence, but with functions.
function doSomething()
{
doThis();
doThat();
doTheOther();
imTired();
}
function imTired()
{
doMore()
andMore()
andEvenMore()
soTired()
}
function soTired()
{
finish()
things()
up()
}
…it’s like people know they should break things up into functions (so they do), but they don’t grasp the underlying concept of what functions are good for in the first place.
If you catch yourself doing this, you’d want to just leave things as a series of procedural steps instead of chaining state-modifying functions just for the sake of breaking things up.
Even more preferable would be to read about functional programming styles and how you can score the higher-level advantages of “functions” as opposed to being just places to put things.
First lesson: When you’re breaking functionality into pieces, make helper functions that don’t depend on global state (only on their parameters) and that do not modify global state (only return results).
Looking at the above example, convert uses information returned by get, but could also use information from loadFromDB, parseEmail, etc… In addition, because convert has well-defined inputs and outputs, it is testable. merge similarly makes no assumptions about its two sources and is similarly testable.
Thank you Mr. McCain for your decency and honesty. I sincerely appreciate it and think that a respectful “tone” like the one you demonstrated is one of the most important issues for this presidential election.
I don’t want someone who thinks that suspending habeus corpus is the right thing to do. Or that ignoring subpoenas is the right thing to do. Or that warrantless wiretapping is the right thing to do.
I don’t want someone who (through inaction) tacitly condones these types of actions. I don’t want someone who sets that type of example. I want someone who sees something that is wrong and says: “No way.”
I think that Mr. Obama and Mr. Biden have at least talked about significant improvements in the tone or character of U.S. government. One video that did a lot to convince me of this was this one. It’s a standard “political promise” video but look at what the topics he chooses to tackle are. “I will put any bill that I’m going to sign online for five days before I sign it.” Who is asking for that? Why is he offering that? Do you want that? That’s what I mean about setting the tone.
I had forgotten all about ycoolthing and started reading back through it. When I changed out my work computer, I semi-intentionally dumped all my RSS feeds, and instead just check ICHC and Ajaxian on a daily basis.
But it’s a good thing I did find ycoolthing again because they have a little flash app that does insta-chat, no login required. It’s over there →. I had been thinking about putting the old messenger presence button ( ) in my contact block, but now I can skip the intermediary and put in a whole friggin’ chat program.
This wonderful technology has been brought to you by the internet and the letter “R”.
I told you October was coming soon. Closing was yesterday, we have a key and the seller will be moving out in about two weeks (she needs some time to pack things up and we’re able to be flexible in that regard). Now we need to find a fridge. And some couches. And a lawn mower. One thing at a time.
I meant to post this a while ago. My mom was asking me what I wanted for my birthday a while back and I couldn’t really think of anything. She pressed, and on a lark I said “a spiral binding machine” so I could spiral bind my music books. If there’s one thing I hate(d) it’s having to use paper clips and stuff to keep a music book open to the proper page. Especially difficult with the guitar, because you kindof need both hands on the instrument 99% of the time.
The Pro-Click is not exactly a spiral binding machine but the Pro-Click binding shares a lot of the positive qualities of spiral binding. It uses these little clicky-fish-spine things and a multi-hole puncher that will get all your pages punched (approximately the same spacings as standard comb-bindings). Under light usage it’s a fairly secure system, although if you do pull on the loops they will break open. Perhaps they could be closed permanently with some glue or the “gentle” application of heat. If you can find some spiral stuff of the appropriate width, the holes would work fine with that too, although I believe most spiral binding is graded at a slightly smaller width / distance between each hole.
Thank you mom and brother, as you can see it is uber-useful, and has increased my quality of life immensely … now I no longer fear playing any of my music because I know that the book will lay flat and I will easily be able to turn the pages at my leisure.
So, the reason that I did this video review in the first place was because I couldn’t find a video review of how this contraption worked. As an FYI, I also posted this to Amazon’s video reviews, kindof neat to compare and contrast how their system works with the other video sites.
Now, you can see how this binding machine works and decide for yourself if you think it would meet your needs. And for you, my faithful reader of this website, I give you the story behind the story. If you’re thinking of doing this yourself, you have to be aware of one thing:
Music books are generally ~12” tall
This personal binding machine only accepts ~11.5”
You do the math
This personal binder works great, takes up very little space, is solidly constructed, fits standard 8.5”x11” pages with ease, but it does have some issues with the oversized music books. I ended up taking all my books down to Kinkos and having them “rip” the spine, as well as make approximately 0.25” cuts on the top and bottom of each book. There was a very reasonable charge of ~$1.50 per cut and I was able to get all the books cut in two batches, so like $9.00 for (($1.50 x 3) x 2), but I wouldn’t want to have to add $5 to the price of each book in order to bind it.
If you plan on doing this at home semi-regularly, make sure you have access to a paper-cutter that fits your original paper size and can chomp the pages down to be ~11.5” on the side you want to bind. Ripping the spines can be done manually with an exacto or something and then cleaned up with the paper cutter, but a good paper cutter will be a necessity for prepping music books.
In a large mixing bowl, whisk together the flour and the eggs. Gradually add in the milk and water, stirring to combine. Add the salt and butter; beat until smooth.
Heat a lightly oiled griddle or frying pan over medium high heat. Pour or scoop the batter onto the griddle, using approximately 1/4 cup for each crepe. Tilt the pan with a circular motion so that the batter coats the surface evenly.
Cook the crepe for about 2 minutes, until the bottom is light brown. Loosen with a spatula, turn and cook the other side. Serve hot.
I’m gonna state that adding the butter last is a good idea (otherwise the flour wants to stick to it and get a bit clumpy), but that you might try the wet-first, then dry method.
These crepes are neutral in flavor. It sounds interesting to do a bit of savory crepes for maybe chicken or potatoes. I’d hesitate to make them sweeter if you’re doing a sweet filling because you really do get enough sweetness from the ingredients and the neutral flavor of the crepe keeps your teeth from falling out.
The guitar is one of the hardest instruments, right up there with orchestra
conductor and concert pianist, because of the the high level of “personal
leadership” that is expected of us. If I were an orchestra player, I would
have a conductor to start me and stop me and bring me back in if I got lost,
to show me what tempo, where the beat is, to write in the bowings, breathing
and articulations, to tell me what phrasing and dynamics are expected of me,
and so on — you know, the 130 things that the conductor does.
And then I would have someone sitting next to me doing the same thing as me.
Someone I can peek at to see what I’m supposed to be doing; if I play a wrong
note, I can catch it before it becomes apparent to the world. And if I get
lost, they can play a little louder to cover for me until I get back in. As
guitarists, we are expected to do all those jobs: start yourself, stop
yourself and bring yourself back in when you get lost before anyone notices;
cue yourself for entrances. And everyone expects you to smile even though you
wish you were at home with your loved ones.
A great article, worthy of it’s own pullout (not just an anonymous del.icio.us bookmark link):
My point is that it may be too late to start with Lisp so you don’t have to
reimplement all of its features. Because all of those new languages have
already implemented them. At least what most people consider the important
ones.
I imagine people will disagree with this view. People might say that although
Java and C# have many of the features that made Lisp great, it doesn’t have
the essence that makes Lisp still the best choice for discriminating
programmers. That essence might include meta-programming facilities, or
first-class closures, or macros.
Macros let you subsume more code into less code. Macros let you write more
functionality with fewer lines. Macros let you abstract away boilerplate into
new syntax.
But the corporate manager will say: if everyone writes their own syntax, my
programmers can’t read each other’s code. So instead of having to learn a
language once, they will have to learn a new language each time they approach
a program for the first time. And the value of macros is lessened.
Code as data lets you manipulate code at runtime. It means you can optimize
it, count it, store it, send it somewhere, and more importantly, write it in
itself. The possibilities are endless.
But the corporate manager again has an answer: Java is already written. Why
would I want to rewrite it? I have a program to develop—-and you’re worried
about optimization? Let the folks at Sun worry about that. We’re not language
developers!
And so do each of the features fall like dominoes. Either they hinder some
unforeseen corporate best-practice, or they just aren’t really as powerful in
that environment as one would really hope their expressive purity would like.
…really great article talking about essential lispy-ness. C and C++ are dead to me (an interesting thing to say, and I’ll probably regret it :^). Java replaces C++ … C is OK, but it’s like adding salt to a dish- put it into a well-written library off to the side and write everything else in a different language that is ~easier~ or ~better~. The cases where machine efficiency outweighs development or maintenance efficiency are limited (and valuable!), but brutal machine-efficiency is steamrolling the less-people-efficient languages for many cases.
People seem to groove on Objective-C, I haven’t had a chance to use it and comment, but perhaps it strikes a better balance between people-efficiency and machine efficiency. Certainly any language that drives against people-efficience is now doomed to failure. I just hope we don’t go to drag+drop flowchart programming. :^)
Up at work Rasmus always dogs on PHP frameworks due to their “high per-request overhead at scale”. There was another article I read recently about PHP itself being a web framework more-so than other programming languages. Ah, here it is - the article comparing PHP out of the box to rails.
Sure, Cake, Symfony, CI - they all help you build PHP applications. But
unlike a Ruby framework or a Python framework, coding is perfectly tolerable
without them. Of course, most developers tend to create their own framework
as they go along - I call this PHP’s DIY framework mentality, where you
build the last level in your stack, and by extension you know exactly
what’s going on under the hood.
The idea being that when you take on a framework, you get a rapid increase in initial development speed, but a lot of decisions have already been made for you, and it might not be convenient to shake out those rough spots after you’re significantly invested in the platform. It is extremely easy to make the case that if you have this problem, it’s a pretty good problem to have.
Personally when working with frameworks, my goal is to have as little framework-dependent code as possible, such that when I do feel the need to switch from framework a to framework b I don’t lose my “logic”. My strategy is generally to have as much code as possible in library classes with unit tests, then layer functionality on top of that in whatever framework du-jour happens to be appropriate.
The other thing Rasmus talks about (which feels funny to most PHP programmers) is that you shouldn’t really program in PHP. He thinks that you should do your serious work in C (making it a PHP extension) and use PHP just for the HTML, etc. When people come up with “I’m looking for a good templating language for PHP”, his general response is: “PHP makes a pretty good templating laguage.” :^)
See the principle of least power for an example of what people asking for a PHP templating language are really asking for. Maybe it’d be nice to add an extension to PHP like:
<?simplephp … ?>
…that only accepted echo, foreach. It’s not about PHP’s fitness for purpose, but that it has grown to be too powerful, and people now tend to use it as the general purpose language, muddying some of the benefits that it started off with.
…as someone who got into the cell-phone game probably around 2005-2006, I might have held out until 2007 if I had known that awe was the next reaction in line. It’s like the twelve steps of luddite-is.
My bank implemented new security questions last night. Here are the questions in their unedited glory (notations in brackets are for part two of the game).
Group One
[A] What is the name of the high school you attended?
[B] What is the name of the first company you worked for?
[C] What is the name of the first street you lived on as a child?
[D] What is the first name of your paternal grandmother (father’s mother)?
[E] What was your favorite place to visit as a child? (Park, vacation city, etc.)
[F] What is the first name of your spouse’s mother?
Group Two
[G] In what city did you attend high school?
[H] What year did you graduate from elementary/grade school? (YYYY)
[I] What is your best friend’s first name?
[J] What is the profession of your maternal grandfather (mother’s father)?
[K] What is your mother’s birthday? (MMDD)
[L] What is your favorite city other than where you live now?
[M] What is your first child’s middle name?
Group Three
[N] What is the first name of your best friend from college?
[O] What year did you get your first job? (YYYY)
[P] What is name of the hospital in which you were born?
[Q] What is your oldest sibling’s birthday? (MMDD)
[R] In what city was your father born?
[S] What is the last name of your favorite historical figure?
[T] What year were you married? (YYYY)
If you’re playing along at home, how many of these questions (of the 21) are “good”? Blah blah blah, determined adversary, but COME ON! This is ridiculous. Schneier is getting an email about this one and maybe he can put a boot to their security officer’s coffee cup and wake him/her up.
Now, for the analysis.
Vulnerable to public records (first degree):
A,C,G,H,P,T
Vulnerable to public records (second degree):
F,J,K,M,Q,R
Vulnerable to close friends:
A,C,G,I,N,T
Vulnerable to resume:
A,B,G,H,O
Vulnerable to guessing*:
H,I,N,L,S
Not particularly vulnerable:
E,L,S
*Vulnerable to Guessing
[H] What year did you graduate from elementary/grade school? (YYYY)
Given a person’s age (mostly public record), elementary graduation is easy to deduce within a year or two.
[L] What is your favorite city other than where you live now?
Paris. New York. San Francicso. Los Angeles. Miami. Add in a few others and that’s got to be at least 25% assuming you have no other data (ie: travel records, vacation photos on the web, etc).
[S] What is the last name of your favorite historical figure?
Census data last names say 5% chance of hitting within the top 10. But come on. Washington, Lincoln, Franklin, Jefferson (people on money). Throw in a few living presidents and/or dead celebrities and you should be able to improve that percentage as well.
Now in my bank’s defense, some of these negatives could be considered positives. Relying on publicly provable information for a variety of these things means that a person can’t really forget (for example) “In what city was your father born?” And many of the questions don’t have a clear answer, but instead an easy probable 5-20% chance of guessing it correctly per guess.
This wouldn’t be such a problem if there were so few non-public questions, and if they didn’t introduce an entirely new class of vulnerability to security questions by allowing “resume attacks”.
A resume generally has dates and locations. Depending on how old you are, your resume tells where you went to high school, when you graduated, what your first job was, approximately how old you might be. Really quite terrible from the perspective of keeping on top of the security questions.
Something interesting about resumes is that they are a double-edged sword. On one hand you want the widest distribution possible (self-promotion / advertising). On the other hand, you have to disclose a fair amount of information in order to permit people to contact you. My resume has been online for at least as long as this blog, and I’ve always run it as a similar thing to my traditional resume (includes address, phone number, email). Maybe it’s time now to put in “contact me at http://www.robertames.com/contact” and slap up a form.
At work, we’re pretty serious about internationalization. Plus I’d recently read a good book that included the topic and some posts on the interwebs. There’s a term that that was unfamiliar to me (mojibake), but immediately made sense that there should be a word to describe the phenomenon.
Mojibake is basically what happens when you have character encodings declared one way but actually encoded in a different way. Either read my del.icio.us links or make do with the metaphor that it’s like writing something using the Caesar Cipher but declaring that it’s ROT-13 (only it’s only noticeable when you use é’s and stuff). Have you ever seen boxes or question marks on the internet? That’s mojibake.
The good news is that if you’re a developer, you can fight it. Read the articles I’ve bookmarked on I18N and continuing with the example above: strings are never strings anymore, unless you know their encoding.
(note: this text is encoded using rot-13)
GUVF VF EBG GUVEGRRA
(note: this text is encoded using the caesar cipher)
WKLV LV FDHVDU FLSKHU
Every piece of text that you own, store, process, export, send over a network, render in a webpage, read from a database, write to a filesystem, enter into a textbox, put into an email, etc, etc, etc. YOU MUST DECLARE THE ENCODING. That’s one aspect of I18N in a nutshell. And it’s also the simplest answer to fighting mojibake.
If I just gave you those jumbles of letters above without the encoding, they’d be effectively meaningless. Unless your primary text is seriously non-roman (and probably even if it is), UTF-8 should be your default encoding. Most programming languages are leaning towards using UTF-8 encoded strings as their default string types, so that is currently the path of least resistance.
The title of this post is “Fighting Mojibake at Home”, and the inspiration for this post was a stupid link I’d bookmarked: NOTES ON AN ?INSURGENCE OF QUALITY? (question marks for posterity). It was showing up on my syndication sidebar (oooh, web2.0gasm) with stupid question marks and at my current pace of bookmarking, it’d be there taunting me for at least a month. This led me to take the fairly simple corrective actions of:
Set Content-Type headers to include “text/html; charset=utf-8”
Add <meta> tag for UTF-8 (in case you save my HTML to disk)
Change Magpie-RSS to output UTF-8 instead of ISO-8559-1
Add “:set encoding=utf-8” to my .vimrc
This was in addition to poking around in the Blosxom source to make sure there was no obviously wrong string manipulation going on (none that I saw straight away). If you’re serious about development, see if your code passes the Turkey test, a completely awesome checklist of how your software (right now) will break in Turkey.
After trying a whole bunch of beers, I have managed to stumble upon quite a few favorites.
First I have to mention Shiner Bock. We are truly blessed to have Shiner as our local beer. I’ve really liked Shiner ‘98 (may it rest in peace), and after reading the wikipedia article, I’d like to try their Hefeweizen and Shiner Light (just to see if it really is approved by the town of Shiner).
Next we have one you can probably find near you (assuming you don’t live in Texas … oh wait, if you’re reading mah blog, you probably do live in Texas). Anyway, Blue Moon. Made by Coors (but don’t let that fool you), it’s a wheat beer, kindof cloudy, usually served with a slice of orange. Very tasty and smooth, with a hint of citrus and spice.
Two more wheat beers, Franziskaner and Leinenkugel’s Sunset Wheat … Franziskaner is a German beer, pretty difficult to find, but Leinenkugel is generally available bottled (very rarely on tap) and is awesome. Of course it’s a wheat beer, so if you don’t like wheat’s you’re out of luck, but it is again very smooth, and not as citrus-y as the others.
That brings us to Pyramid Hefeweizen. Pyramid is another great beer. Reading up on wikipedia, it looks like hefe means “yeast”, where I guess the beer is self-carbonated in the bottle with yeast. Yum.
I would have almost forgotten St. Arnold’s Fancy Lawnmower, a beer that I first tried at the Ginger Man pub near downtown Dallas, probably the first craft brew that I tried and liked, the one that started me down the path of trying new / weird beers. Again, a bit citrus-y and from what I remembered is served with lemon. Looks like they have brewery tours on Saturdays and are from Houston, so I’ll have to stop in and try it some time.
Recently, the Debian project made a formal security announcement about a vulnerability in the code used to generate SSH keys. At first I read it with some interest (I’ve been using Debian and debian-based systems for quite some time now) but not too much concern.
In seeing the topic come up around the internet, I even saw the response from some openssh people, and chuckled a little bit inside, taking it as some kindof programming lesson to be applied to futuer situations I might encounter.
Removing this code has the side effect of crippling the seeding process for
the OpenSSL PRNG. Instead of mixing in random data for the initial seed, the
only “random” value that was used was the current process ID. On the Linux
platform, the default maximum process ID is 32,768, resulting in a very small
number of seed values being used for all PRNG operations.
That basically means a lifetime maximum of 32k ssh private keys for all debian-based systems from 2006-09-17 until 2008-05-13 … around 600 days, or 55 keys generated per day before a collision is (kindof) guaranteed.
That immediately caused me to look up my key and luckily I learned about (and generated my) SSH private keys prior to 2006.
The response is interesting: blacklist the known 32k keys * a variety of keylengths. Probably the best possible mitigation strategy given the circumstances.
Lesson learned? Really seek out and respect a professional opinion when it comes to crypto that you care about.
In the desert
I saw a creature, naked, bestial,
Who, squatting upon the ground,
Held his heart in his hands,
And ate of it.
I said: “Is it good, friend?”
“It is bitter-bitter,” he answered;
“But I like it
Because it is bitter,
And because it is my heart.
…and know almost nothing about music. Most likely you somehow got a guitar and are wondering what you got yourself in to. Don’t worry; you will cope, and it will turn out for the best.
When I first picked up a guitar, I didn’t know what I was getting myself in to, but I feel at least somewhat qualified now to give some advice to other guitar n00bs.
My advice comes from the fact that I’ve settled on learning classical music, but many of these tips will apply no matter what you eventually end up learning.
What Guitar Stuff to Buy
Tuner ($15, or a clip-on if you are feeling saucy)
Music Stand ($20-50, whatever you think you’ll use or be able to store)
Guitar Stand or wall-mount ($10-20, a wall-mount lets you display your guitar, keep it off the floor, and makes it easily accessible. A guitar stand is simpler)
Strings APPROPRIATE FOR YOUR GUITAR ($10-20) Classical != Acoustic. Classical generally means a guitar with nylon strings. Acoustic generally means metal strings. Electric uses metal strings too, but I don’t know what the differences are. Using the wrong strings can damage your guitar (due to differing tensions).
String (un-)Winder ($5, it’ll make changing strings easier). Change strings with a friend or your teacher your first time. It’ll prevent you from gouging your guitar with pliers like I did.
What Media to Buy
Frederick M. Noad - Beginning Solo Guitar. (~$20) It teaches you notes. If you want to do tab-only, then you can skip this step. Beware of tab, for it is the dark-side, and can hamper you musically in the long-run.
eMedia Beginner Guitar Lessons. (~$30) Totally awesome simple music software. It’s not great for long-term use, but you can find it for less than $30 and will introduce you to a nice variety of styles. Use this to learn about your guitar and to sample a few different musical styles. You will outgrow this, preferably by beginning to take guitar lessons.
Esteban’s Complete Guitar Course for Beginners. (rent from library) Totally awesome simple DVD + instructional book. You will outgrow this even quicker than the computer lessons. I found this is in our local library by accident, and the book (while using non-standard tab-like notation) does a reasonable job of getting you excited about sounding like you know what you’re doing.
A chord chart (print one out) … It’s fun to try to smush your fingers into the shapes… fun as in: painful and confusing.
Of all the above media, the only one I was using after 1-2 months is Noad’s book and a little laminated chord chart for reference. In addition to the above, buy one or two music books of music that you’re interested in. It’ll be a good stretch for you while you’re learning. In some cases you can try simplifying the music you play, ie: by playing only the high or low notes, or only the chords.
A word of warning: at first only you will understand what music you’re trying to play no matter how hard you’re trying or how much progress you’ve made. People you share music with are used to hearing professional bands, musicians, produced music, “the best take”. You make a few small mistakes or mess up the rhythm and people won’t be able to “hear” the same thing you’re trying to play. Chalk it up to experience and keep practicing. One day you’ll surprise both yourself and your audience.
What to Learn
Your Chords (E, A, C, D, B, G, etc). You won’t really understand them until much later, but for now they make your guitar sound nice and are good to practice.
The Notes. They’re important, yo.
Some simple songs. I really recommend delcamp.net and book #1. It’s got a bunch of songs like “Happy Birthday” and “Frère Jacqus” which are fun to play.
Sites to Visit
http://delcamp.net/ - Classical Guitarist forum. Good people. Very helpful to recommend guitar teachers in your area.
http://teoria.com/ - Totally awesome for learning about how music works.
http://www.craigslist.org/ - You are now a musician. Hang out in their musicians and for-sale forums. It’s kindof neat. Find somebody to practice with.
And Finally…
Start taking lessons as soon as you feel like you know which end of the guitar goes up. Find a good teacher. Ask around about a bunch of guitar teachers. You might need to change teachers as your interest or skill changes. See if you can watch (or listen) to a teacher giving lessons to one of their other students. See if you like their teaching style.
Have fun, and remember that slow & steady wins the race … you should focus on making continual, small progress and celebrating your personal victories (recognizing notes, playing a chord well, etc).
I’ve gotten shanghaied by the Dallas PHP user group into pulling together a full GUI testing presentation to complement the unit testing presentation I gave and that Tommy and I recently reprised.
I think I’ll look at it in two ways:
as a full-time job (full libraries, state machines, etc)
as a quick adjunct to normal development (ie: re-record 10 tests once a week)
…and making sure to emphasize how GUI automation dovetails with code-level unit testing.
ZOMG! It’s just what I was looking for, except not quite. If they put in chord-charts and/or actual note-reading, it’d be perfect. Luckily I’ve advanced quite a bit on the note-reading that I can play most songs that I come across, including ones in different keys (ie: that have non-explicit accidentals due to the key signature). More videos as I get time.
And for those following along at home, yes this is about the third post in three days. Do not adjust your feed readers, I only hope this doesn’t mean my next post will be in April. :^)
I keep my contact information up to date on this website. Unfortunately I don’t accept comments on blog entries but if you mail me your commentary, I’ll likely update the original article or post a new one including your commentary. You are of course welcome to sample snippets of an entry with your own commentary and link back to me.
If you are going to contact me, in order to keep me happy and you happy here are some tips:
I’ve been carrying my cell phone with me lately, but I prefer to be contacted by other means
If I should be at work, you can call my work number
If I should be at home, you can call me at home
If you are a recruiter or head-hunter, please for the sake of all that’s holy don’t call me at work. It reflects badly on you as an individual and your profession.
And a little about my online life:
I’ve had my email address out on the internet at large since ~1997 (ramses0@yahoo.com)
My spam folder is currently running at ~1200 messages per two weeks (that’s 100+ spam per day)
I usually don’t check my spam folder
Don’t mail me at my work address (that’s for work stuff)
If you are not sure if you’ll make it through all the spam filtering stuff, I have just set up a special code to make sure your message arrives directly to my inbox. Put “31337” in the title of the email and it’ll get delivered.
Or, since I know that’s a pain, just type your message in here and I’ll get it as well.
Your Message Here:
Thanks for your understanding - don’t we all just love the internet?
Don’t ask my opinion on either of these matters - I’ve got nothing valuable to add to the conversation. I do notice a distinct lack of funny logos combining the two company’s names. Behold my contribution!
A kindler, gentler Mycrosoft. Capitalizing on their incursions into “My Desktop”, “My Computer”, and “My Network”, MSFT is seeking to expand it’s dominance into “My Internet” and “My Company” with a new joint venture called “MyCrosoft” (powered by Yahoo!)
Comments? You know how to reach me. :^) More updates and pictures from México coming shortly.