I came across my blog the other day and the front page was blank. That got me asking myself, "why?"
At first I thought it was impostor syndrome, because I do have some irrational fear of posting something wrong. But then I thought back to all the times I posted things that were wrong and remembered I was more afraid of posting something wrong and no one telling me than I was afraid of simply being wrong.
After a while I figured it out: I'm in a state where nothing is novel, everything just comes easily and naturally, so I have nothing to blog about. In other words, I've reached the fourth stage: Unconscious competence.
Hey! Why don't you make your life easier and subscribe to the full post
or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate
wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!
Posted by Sam on Aug 23, 2013 at 07:37 AM UTC - 5 hrs
Why did Keynes’ promised utopia – still being eagerly awaited in the ‘60s – never materialise? The standard line today is that he didn’t figure in the massive increase in consumerism. Given the choice between less hours and more toys and pleasures, we’ve collectively chosen the latter. This presents a nice morality tale, but even a moment’s reflection shows it can’t really be true. Yes, we have witnessed the creation of an endless variety of new jobs and industries since the ‘20s, but very few have anything to do with the production and distribution of sushi, iPhones, or fancy sneakers.
Graeber discounts consumerism as the reason we work so much, with the proof being that very few of the jobs we've created have to do with producing products, the purchase of which we might consider typical examples of consumerism.
I don't purport to know the right answer here, but I also don't see how you can mention consumerism on one hand, and fail to see that if the consumerist theory is close to reality, then all of the jobs we've created would be for the purpose of obtaining those products, not for the purpose of building them.
Nevertheless, it was an interesting read, so you might check it out.
Posted by Sam on Feb 25, 2008 at 12:00 AM UTC - 5 hrs
I noticed a couple of behaviors in myself that I exhibit when browsing social media sites like Digg or reddit. (Let's leave the relative quality of articles and discussions out of this for now. At least for the programming, reddit wins, hands down.)
The first one is that I tend to be more interested in seeing what's hidden behind the "comment below threshold." Usually, it's asinine, but sometimes it's not.
Then I noticed myself voting with my opinion - up for things I agree with, and down for things I don't. The problem with doing that is if enough people disagree with a comment, soon enough no one else will see it.
So I'm going to start upmodding any comment that has merit, even if I don't agree with it. I'll reserve downvotes for the comments with no value. Anything else is slight encouragement to the poster to change his view to match the group.
Do you think the voting structure is subtly training commenters* to think like the group? If not that powerful, do you think it influences them to share only those opinions and articles they think the group will agree with?
* I know it's spelled wrong, but they aren't really commentators in the common sense of the word, are they?
Posted by Sam on Apr 07, 2008 at 12:00 AM UTC - 5 hrs
Lately I've been thinking about which charit[y|ies] I'd like to endow with $100 million dollars when I make my first billion. I know that sounds stingy, but considering the tax comes out first, that billion shrinks rather quickly.
Before I continue, I want to make it absolutely clear that I'm not endorsing any of the following charities, and I have not researched how well they do their purported missions, so they could be frauds for all I know. I just want to discuss the ideas.
Naturally, I wanted to look for computer-related charities, and more specifically, those with a focus on programming. I first browsed a couple ofcharity-ranking websites and didn't find anything that I was searching for.
Everyone knows about One Laptop Per Child, whose mission is to educate children in developing nations, who otherwise wouldn't have as much of an education, by providing them with a low-cost, low-energy required laptop.
OLPC is not, at heart, a technology program, nor is the XO a product in any conventional sense of the word. OLPC is a non-profit organization providing a means to an end - an end that sees children in even the most remote regions of the globe being given the opportunity to tap into their own potential, to be exposed to a whole world of ideas, and to contribute to a more productive and saner world community.
On a bit of a smaller scale, I found Computers With Causes, which like so many charities who will let you donate your car, take your donated computer and turn it into good for charitable purposes. Mac Heist puts on a two week bonanza of a sale and donates proceeds to the charity you choose.
That's a start, but we could do better.
There is another group, charityfocus, which lets you volunteer your time to help build websites for different charities. That certainly sounds interesting, and more to my point - but it's not quite there.
These are all noble goals, but I'm more interested in a cause that's closer to home, one where technology is not ancillary, but where it is part of the goal. So, I thought I'd do a domain search and start one myself. One of the domains I entered was code4cause.org, but it turns out they're already doing some good work. They don't teach children to program, but they do take on your IT projects and donate proceeds to charities.
I was surprised I wasn't able to find more than what I did.
Are programmers that selfish?
Of course not. We donate a lot of our time to open source, for one thing, and I'm sure there are plenty of us who have our favorite causes that aren't computer-related at all.
I like Code4Cause's mission - that would let programmers donate their time to projects and convert that into money to send to charity. But, Code4Cause is based in Europe and Asia, and I'm more interested in something closer to home (which for me, is the United States). What are U.S. software developers doing?
I don't know, but I wouldn't mind seeing something like Code4Cause in the US. Or, at least it would be nice if we could donate the money our time produces to whatever organization we chose. Ideally, I'd like to see something where programming is more of the point, but I'm not sure how it would work. Even if coding remained auxillary, something like Code4Cause would be still be great.
Anyway, where are the coding organizations? Do you know of any I haven't listed? Share them below. Interested in trying to start one yourself? Let me know privately, and if there's enough interest, maybe we can figure out how to start an organization, and what we'd like it to do.
Sorry I don't have any more answers - I'm just fleshing these thoughts out, and throwing them out there to see if it helps.
Posted by Sam on Apr 28, 2008 at 12:00 AM UTC - 5 hrs
When I was younger I was "an arrogant know-it-all prick" at one point in the "middle years" of my programming experience, as many of you know from the stories I often relate on this weblog.
The phrase "middle years" doesn't give us a frame of reference for my age though. For instance, if I were 50 years old right now, my "middle years" of programming may have been when I was in my thirties. That's not the case, and I want to give you that frame of reference: I'm 28 at the time of this writing. The middle years as I talked about them would have referred to my late teens to early twenties. Maybe even up to the the middle of my twenties.
By most standards, that's young.
And I know a thing or two about being set in your ways. We can all see the laugh I have at myself with the title here being "MySecretLife as a SpaghettiCoder" and some of the stories I've told as well.
In fact, let me add to the wealth of stodginess, idiocy, and all around opposite-of-good-developerness here:
I once said I preferred Windows to Linux. While that's not a completely shocking statement, the reason behind it was: I said I preferred Windows because 14 year olds work on Linux. Not because of any experience I'd had with it, but because of my fear of learning it.
Because of my prior experience being unwilling to learn, I was quite interested when I read this:
When you are young, you don't have that sense of self to protect. You're driven by a need to find out who you are, to turn the pages of your biography and see how the story turns out. If people around you are doing something you don't understand, you assume the problem is your inexperience and you go to work trying to understand it.
But when you are old, when you know who you are, everything is different. When people around you are doing something you don't understand, you have no trouble at all explaining why they are assholes mistaken.
. . .
If you want a new idea, you have to silence your inner critic. Your sense of right and wrong, of smart and stupid works by comparing new ideas to what you already know. Your sense of what would be a good fit for you works by comparing new things to who you already are. To learn and grow, you must let go of you, you must be young again, you must accept that you don't understand and seek to understand rather than explaining why it doesn't make any sense.
In a couple of paragraphs, Reg sums up almost precisely some of what I've been thinking and writing about for the last several months. He's so close, but misses a fundamental point: the old and young parts are incidental.
My hypothesis is that the level of learning and idea absorption you can attain has little to do with age. Instead, it is influenced more by your perceived level of experience. Normally, age is highly correlated to experience - but it doesn't have to be. In my case, when I was younger I thought I knew everything. Now that I've aged, I came to the realization I know very little.
My conclusion is not that different from Reg's, and this is not some scientific experimental contest, so let me explain why I feel the difference is worth noting: If we blame our reluctance to try new things on age, we are dooming ourselves to think of it as some unchangeable, deterministic process. By thinking of it in terms of perception of experience, we admit to being able to control it with more ease. (My belief is that we have control over what and how we perceive things.)
In other words, we lose our ability to blame anyone but ourselves. That's a powerful motivator sometimes.
Thoughts? Disagreements? Please be kind enough to let me know.
Posted by Sam on May 19, 2008 at 12:00 AM UTC - 5 hrs
But do I belong to the company I work for? No! Never!
If that means I'm doomed to walk the Earth for eternity writing code and building beautiful ideas, then that's ok.
No matter how much my job makes me happy, my family and mylife outside work are just as important and more. Obsessing about anything is not good. Moderation is good. Do everything well but know when to stop. Do your job well but remember to go and hang out with your friends. Put down the mouse and call someone to go out. Liking your life outside work does not mean you suck at work. It means you are good at living.
You are not a slave, nor are you a convict, imprisoned and forced to work at the behest of those who've put you in chains.
You work for yourself. Your family. Perhaps out of some sense of duty to a friend. But it always comes down to your decision.
I think of my employer(s) as customers of mine. The difference between us is that I not only represent myself to my direct customer, I represent my employers to their customers as well. And don't get me wrong - I still feel like a very big part of the team. I want my customers to be successful, because when they are successful, I am too. But I don't let myself feel trapped: It's the hard work I've put in that allows me to know I can leave whenever I need to. It allows me to know I'm not chained to my current position.
If I don't need a customer, I can always politely tell them I cannot continue to serve them. On the other hand, if I feel beholden to the man who pays me, I cannot easily find another job. It's a matter of outlook. Your attitude determines your quality of life, so change it if it's not working for you.
Be professional, but don't be a slave.
Don't let your managers or your peers pressure you into working 80 hour weeks all the time. Don't let them refuse to ever approve your vacations. It's not some geek badge of honor to work like the robots we'd like to build. Instead, it's ridiculous to try to keep up that pace. Remember Damana's words: "Liking your life outside work does not mean you suck at work. It means you are good at living."
Note: The source of this image asserts that the routing and account numbers on this check were randomly generated.
It's good to be good at work. I think I'm there. But now I want to start getting better at living.
As always, your thoughts and comments are welcome and appreciated.
Posted by Sam on Jun 06, 2008 at 12:00 AM UTC - 5 hrs
As you may have noticed, I try to stay on topic here and keep the announcements and meta-blogging to a minimum. However, every once in a while I think it's OK to break that rule, and today is one of those days. And hey, there's a giant OT in the title for you to let you know you can skip it if you don't care, right? =)
I'm getting married today. For those of you who know me well, you know its been a long time in the making. We've been dating for 7 years and engaged for two-and-a-half. So I can say with some confidence, "it's about time."
Now that I finished graduate school and we're getting ready to close on the house we had built, last year some time we decided it would be prudent to add to all the stress, so we set a date to coincide with all the others. I guess the masochistic side of me craves the pressure.
As a consequence, I'll be spending some time away from the computer and instead spending it with my bride, so you won't see any posts here next week.
Anyway, thanks in advance for your thoughts, prayers, well-wishing, or any other positive energy you'd like to send us newlyweds.
Posted by Sam on Aug 11, 2011 at 09:45 AM UTC - 5 hrs
I was curious to see how many WTFs are in programmers' code and compare it across languages, so I wrote
a script to figure it out using github as the source
I couldn't figure out a way to do it using github's API, so
I had to screen scrape the search instead. Therefore, as the markup
on that page changes, it will break the script. But, you can fork it and fix it later if you'd like.
Another caveat is that I used the search string 'a' to determine the total number of repositories for a language. If you have a better way to get the actual
number, or maybe just a more common letter we could search for, feel free to share your ideas!
Below, you'll find a graph of the WTF's per repository by the most popular languages on github. I used only
the most popular languages because it was a PITA to try and size the graph using Google Docs to include them
However, you can get the raw data for all languages if you want to play with it yourself.
Any thoughts on how we can improve this? What's your analysis on how we can interpret the data?
Posted by Sam on Mar 30, 2008 at 12:00 AM UTC - 5 hrs
Let me make a request for help and a quick announcement, and then I'll get you back to your regularly scheduled on-topic reading:
I need a good C/C++ IDE
I've been doing a lot of work in C++ lately for bioinformatics, and DevC++ is just not going to make the cut. My friend Michael suggested I use Visual Studio, but I thought I'd throw this out there and see what everyone else thought and try out a few more.
I'd like it to work on Windows, but I wouldn't mind hearing some Mac choices for the fun of it. Ideally, it would have a lot of the features of IntelliJ IDEA, but if it's not that awesome, I could probably get by. DevC++ is just broken for me. I won't go into too much detail, as I think those guys are providing a good service and I'm not helping them out myself, but sometimes headers get that do long has been the least of my troubles.
I'd like to know of both free and paid versions.
I'm on Twitter
I've finally started using my twitter account. I started the account a while back, but never really "got it." I guess the other day the light bulb went off in my head. It's like email + IRC + instant messaging + blogging all in one.
Anyway, if you're on twitter and want to start following me, I'll get notified and probably start following you as well. Of course, if I start getting too many updates, I'll randomly stop following some people. Try not to take it personally if that happens.
I try not to give the minute details of my life like "I just woke up" or "I'm voting for so-and-so." Instead, I've been trying to stay on topic of this blog (programming and technology), but with small thoughts about whatever I happen to be working on. Of course, you'll find some responses to other people won't always be on my main topic.
I hope to see you on there. And if you can help in the C++ IDE department, please let me know!
Posted by Sam on Jun 05, 2010 at 12:12 AM UTC - 5 hrs
I recently got the EEE Box "Nettop PC" (Linux version) and was surprised to find Red Flag Linux as the preinstalled flavor of choice.
My goal is to use it as a wireless NAS, but keep it both expandable with external drives and available for use in home automation.
Back to the Linux EEE Box: I didn't expect to have a problem (neither with the OS nor changing it), but the "User' s Manual" came with instructions for Windows XP only. Booting to the Red Flag Linux distribution was a chore. I had to:
Figure out that you login with username "root" and no password
Thereupon be presented with the command prompt
Find out which desktop environment it uses and try to start it, unsuccessfully
I knew the thing didn't have an optical drive, but I'm so accustomed to that process that I downloaded and burned an ISO of lubuntu anyway. After some self-imposed hassle of locating a USB thumbdrive, I was able to install a bootable copy onto it. Then I plugged it into the EEE Box.
Art as Idea: Nothing, Joseph Kosuth, 1968 /Photo: NATIONAL GALLERY OF ART
You'd have thought that plugging in the bootable USB drive would be enough. It didn't find it. I checked the BIOS, and it was set to use USB as the first boot device. I tried a few different configurations before stumbling on the epiphany that solved all of my problems:
Even though I had planned on starting with a fresh install of a *nix, I was stunned at how obscured it was, despite the fact that it turned out super-easy. Here are the steps I used:
Posted by Sam on Mar 05, 2010 at 10:14 PM UTC - 5 hrs
You might think that "tech support" is a solved problem. You're probably right. Someone has solved it
and written down The General Procedures For Troubleshooting and How To Give Good Tech Support.
However, surprisingly enough, not everyone has learned these lessons.
And if the manual exists, I can't seem to find it so I can RTFthing.
The titles of the two unheard of holy books I mentioned above might seem at first glance to be
different tales. After all, troubleshooting is a broad topic applicable to any kind of
problem-solving from chemistry to mechanical engineering to computer and biological science.
Tech support is the lowliest of Lowly Worms for top-of-the-food-chain programmers.
(And don't ask me how sad it makes me feel that my favorite book as a kid has only a 240px image online. I need to find my copy and scan it.)
But just like its more enlightened brethren, tech support consists of troubleshooting. In fact, it should be
the first line of defense to keep your coders coding and off the phone. Who wants them to man the phones?
Certainly not the programmers. Certainly not management. Tech support is a cost center, not a customer
Perhaps when you have a virtual monopoly over a market like most cable companies or utilities in a given locale,
you can afford to have poor customer service. The cable sphere seems to be opening up, what with satellite TV and internet
and now AT&T and Verizon offering television and decent-to-good internet packages.
Even still, AT&T's UVerse has its own problems, I've heard,
and (at least personally) I've not witnessed the kind of customer service that competition promises with regards to cable TV and internet access.
The fact is we tend to treat support like a second class citizen. It's a position we want to fill with a minimum-wage worker (or less, if we
can outsource it) who has no expertise, no clue, and doesn't care to learn the
product since he can get a job in the fast food industry at about the same rate. And with no stress!
It makes it worse that we don't even want to take the time to train him, since it would take away from the productive code-writing time to do so.
The person we want to treat as an ape or worse always seems expendable. We treat them so. Should they be?
I don't think it needs to be a full-time thing, but it certainly helps if programmers are their own support team.
Like Bruce Johnson who posted that linked message, I work on a small team and can vouch: it's downright embarrassing to have to support
our customers. I'm glad to do it, but when it happens, more than likely I've got to take blame for the problem I'm dealing with.
You know how hard I try to make sure my code works as expected before I deploy it?
"OMG I'm sorry, that's my fault, I'll fix it for you right away." Can you get better support than that?
I'm not so sure I'd have tried that hard without the customer experience pushing me.
I think I've made my first point: that customer support is customer service is important to the health of your business.
While I agree that tech support in the common use of the term is useful to shield your programmers from
inane requests, I also recognize the value in having programmers take those calls from time-to-time.
Given that, I do in fact have some do's and do-not's with regards to support. The list here deals mostly with
how to be a good support technician for your team, as opposed to the customer. Still, the customer is
central to the theory.
Although it does not make an exhaustive list, here are four contributions to The General Procedures For Troubleshooting:
After listening to the problem description, the first thing to do is recognize whether or not you can
solve the problem while the customer is on the phone, or if anyone can. If you can, then do it. If you think
only someone else can do it, and work for an organization that has multiple levels of live-support, then escalate it.
If you don't think solving the problem is possible without escalating it to a level of support that won't get
to it immediately, thank the customer for reporting the issue, let them know the problem is being worked on,
and boogie on to step 2.
As support, the first thing you need to do before escalating the issue is confirm there is an issue, and do it with a test account, not the user's.
It's ridiculous to ask for the user's
credentials. Don't do it. If someone were to ask you, "What is your username and password?" what would you think?
The average user isn't going to know your query is tantamount stupidity, but if you get someone who is slightly
security-conscious, you're going to lose a customer. Hopefully, he's not a representative of your
If anyone found out that you're in the habit of asking users for their passwords, they can easily call anyone
who uses your software and get in by just asking. Further, since many people use the same password for everything
or many things, that person would also have access to your customers' other sensitive information, wherever it resides.
You can point the blame at your stupid customer for using the same password everywhere they go all you want. You're being
just as stupid by opening the door for that type of attack. Further, you should always try to recreate and fix the problem
with as little inconvenience to the user as possible. That means doing it with test accounts as opposed to asking the
user for theirs, or changing their information.
Keep things simple for the user. Don't jump immediately to using their time to make things easier on the support team.
Doing that is lazy at best, sloppy most of the time, and could result in disaster at worst.
After confirming the existence of the problem, provide the steps of how to reproduce it. Give some screen shots.
If it's a web app, provide links. Don't constantly send and email and ask the higher levels about it. Doing so once or twice is
one thing, but doing it for every request is a time-waster. Just send the email and the next level will get to it
when they can. If they don't get to it within the acceptable time-frame for your organization, send a reminder.
Include the boss if you need to. But don't do that prematurely (and that's another subject altogether).
Don't jump to conclusions about the source of the problem.
Although Abby Fichtner wasn't speaking
directly to support ...
... This is the opposite of my general approach. The parallel here is code : customer :: you : dumb2.
I've learned (even if through a bit of self-torture) that I should always look at the code first, if for no other reason than I don't
want to be foolishly blaming others when I'm to blame. In the case of support, I've always hated the term "User Error,"
and that's what the tweet reminds me of.
By framing it as an external problem, we miss an opportunity to teach the user how to use the product, or a chance to
improve the product to make sure they can't use it "incorrectly."
What are your thoughts about tech support? What can you contribute to The General Procedures For Troubleshooting?
Posted by Sam on Apr 23, 2008 at 12:00 AM UTC - 5 hrs
Because I've got too much to do this morning and an old partner in crime sent an art pack from September of 1996 to me yesterday, I'll share some of my old art with you today.
I was in a couple of art groups, but I never really left the 713 (and later 713/281, and then 713/281/832) scene: MAD, PEZ, Jive are the ones I remember. My handle was deathrai (and I often tagged pics with "d" or "d!"). There are others with my name nowadays, but there was only one of me then. Anyway, here's some of my art. I hope you enjoy it. You can click the images to see the full-size version.
This was a flyer for AnsiCon, which we held at Woodlands Mall a couple of times. We also had a PezCon at Willowbrook one year. It seems mall security was always involved in those things. I once wrote a skapunk song about it called "Misplaced Priorities."
Here we have a menu for a board called Nitrous Oxide. I don't remember who the sysOp was:
I had a Save the Sheep foundation, and promoted it in a couple of bigger pictures. This one was for a board called Pandora, whose logo was cut off at the bottom:
We have here a skinhead that was done for another BBS called Shadows of Darkness:
Sometimes the SkinHeads Against Racism and Prejudice would come to our punkrock shows and start fights with antidisestablishmentarism punks. I normally got along with them though. Once, when I was stuck in the mud in some guy's yard, a group of them brought their truck and tried to pull us out. They ended up getting stuck too.
When I first went there, I couldn't find any of my art even though I did find myself in a lot of greetz. But when I went back today, I did find some. Looks like someone uploaded a few art packs from MAD.
A couple of pictures I couldn't find through the Sixteen Colors search, but they did come up through Google. If you can't tell, I rather liked drawing cartoons. Here's an alien with his hand down his pants:
You might think his hand is down his pants because I was trying to be funny (I was 15 - juvenile humor is funny at that age.) But it wasn't that I was trying to be funny, so much as I thought a two-hook-hand alien would be less believable than a one-hook-hand alien. And since I couldn't draw hands very well (still can't), I hid the other one in his pants.
Posted by Sam on Feb 06, 2010 at 10:36 AM UTC - 5 hrs
There was once upon a time I held some affinity for Expert'sExchange.
I tried hard and succeeded at becoming an expert. I thought it might look good on a resume and in fact
I got a few offers of job and freelance work from it.
(I have no clue why my email address from back then says I have no account,
nor do I know why I'm no longer listed in the top experts even though I ha(d/ve) the points).
I used to give EE ideas
on how to make their service better. I don't mean to sound like an ideaman -- I know ideas are only worth something
when they're executed -- but I told them I'd implement the ideas for them. A simple one that I harped on was: instead of
getting X number of email notifications on a question, send me the first one, and only send me subsequent emails if I've logged in.
This was before RSS days, so I had no way to stay up-to-date without it
(or shittons of irrelevant emails).
It wasn't a hard thing to implement. It didn't matter though: my suggestions fell on deaf ears.
And the site, as you know, tried to maximize earnings while ensuring
it's audience remained pissedoffandalienated.
That's right, when I stopped contributing, EE became an outhouse on the web. I take full credit: when I left,
EE began its downfall.
Seeing as you're reading this blog, chances are that you're a programmer.
Being such, you probably know how evil ExpertS-exchange became. You (used to) google for a problem,
and more often that not, some spammy BS from that site would show up. If you were savvy and
in-the-know, you'd not have clicked on it. And if you didn't happen to be paying attention, you'd
realize you made that gawdawful click when you saw the page loading, and immediately scroll
to the bottom to see the answer.
But the two programmers' questions websites are incidental to this story. Actually, this story is more about business, and
recognizing a market and capitalizing on it.
A little while ago, I was looking for content to embed in a high-school course. I thought,
It's still true. But then,
at the time of this writing, I was looking for the non-clipboard-screenshot-save-as-file keyboard shortcut on MacOSX.
It looks like a pattern. But it's not yet.
Even though I already play guitar, I was wondering about how I might teach it to my daughter. I was self-taught, so I don't know how I'd go
about teaching someone else without feeling like I've crippled them. Later, after spending the evening with teachers and principals,
I was thinking about how they accommodate gifted kids.
As you can tell, it doesn't matter what I think. It doesn't matter what you think. About.com comes up in all these (seemingly?)
random cases as an authority answer to the question. What's worse: it's hard enough to tell the ads from the content for
someone you'd expect to be savvy on that. Can you imagine the hardship a "normal person" would suffer?
If it's not obvious now, the million dollar idea is to do to About.com what StackOverflow did to Experts-Exchange.
I assume About.com has some good content, but it's too hard to tell by looking at it. The position is ripe for the picking.
Create an unspamalicious About.com and you're rich.
Tell me about it if you make the attempt. I'll link it here.
The list is not intended to be a "one-size-fits-all" list.
Instead, "the key is to ask challenging questions that enable you to distinguish the smart software
developers from the moronic mandrills." Even still, "for most of the questions in this list there are no
right and wrong answers!"
Keeping that in mind, I thought it would be fun for me to provide my off-the-top-of-my-head answers,
as if I had not prepared for the interview at all. Here's that attempt.
Though I hope otherwise, I may fall flat on my face. Be nice, and enjoy (and help out where you can!).
What kind of tools are important to you for monitoring a product during maintenance?
I rely on logs and profiling tools on occasion. I'm
really interested to hear from the rest of you about this though.
What is important when updating a product that is in production and is being used?
I'd say it's important not to interrupt service. Surely there must be something else you're
How do you find an error in a large file with code that you cannot step through? cout, puts, printf, System.Out.print, Console.Out.WriteLine, and ## have all
been useful for me at one time or another.
A good strategy here is to isolate the code that's causing the error by removing code and faking results.
By doing that, you can slowly add code back in until the error reappears. Rewrite that part.
How can you make sure that changes in code will not affect any other parts of the product?
How do you create technical documentation for your products?
Ideally I'd have comments that can be harvested by tools like RDoc or JavaDoc, but times are often
less than ideal.
How can you debug a system in a production environment, while it is being used?
You can read logs if important events are being logged.
Profiling tools exist for this purpose, but I don't have experience with any outside of those for
use with databases.
Do you know what load balancing is? Can you name different types of load balancing?
One computer acts as the gatekeeper for an array of computers and directs requests to the others
to "balance the load" of the entire system.
I'm not familiar with different types, but just guessing I'd assume they have round-robin and need-based
load balancing. I'd also presume any other scheduling algorithmic scheme could be applied in load
I'm more interested to know why this is on the maintenance list of questions. Is it because you've deployed
your application and now you need to scale it with hardware?
Can you name reasons why maintenance of software is the biggest/most expensive part of an application's life cycle?
One view is that after you write the first line of code, you begin maintenance. But more in-line with the
popular view: it lasts the longest. You may take a month to build a system that will be in production over
several years. During that time, defects are found that need to be fixed, business rules may change, or
new features may be added.
Also, we suck at writing software.
What is the difference between re-engineering and reverse engineering?
I didn't know this one. I thought and would have responded that re-engineering would be
rebuilding an application with a white box, while reverse engineering would be done through a black box.
The reengineering of software was described by Chikofsky and Cross in their 1990 paper, as "The examination and alteration of a system to reconstitute it in a new form". Less formally, reengineering is the modification of a software system that takes place after it has been reverse engineered, generally to add new functionality, or to correct errors.
This entire process is often erroneously referred to as reverse engineering; however, it is more accurate to say that reverse engineering is the initial examination of the system, and reengineering is the subsequent modification.
How would you answer these questions about software maintenance?
Posted by Sam on May 26, 2009 at 12:00 AM UTC - 5 hrs
When someone criticizes what you say or something you believe, consider your response.
It may feel natural to become defensive and attack the critic. A better response looks inward, since the criticism may be a fault in your argument, as opposed to a fault in the critic. Perhaps there's a flaw in what you believe that's gone unnoticed all this time.
Even if the critic is undoubtedly uninformed or mentally incapable, ask yourself how you might improve your evidence in a way that improves understanding.
Criticism should invoke introspection, not flame war.
The evil record companies need to get with the times and embrace file sharing
For the record, I agree with #3, used to think #1 was the case, and I'm refusing to do business with anyone
I know is a member of ASSHAT ASCAP. I'm very consciously changing my view on #1
after hearing the artists' point of view.
So the world will always have its Billy Joel's, along with its hot shot Internet sensations of the moment.
But what I want to know, again, is who's going to be paying for the recording of all this free music
dreamed up by small-timers (which description, if you're not aware, covers most of us)?
And if the answer is "nobody," that means that music made by people who are even a little bit
outside the mainstream, off the beaten path, or just plain fucking weird, is going to
disappear (save, of course, for those with disposable cash - the hobbyists and the rich kids -
but those people tend to make music that people can't even be bothered to download for free).
Long term, this isn't going to work out well for music fans. I'm not scolding. I'm not trying to stuff
the genie back in the bottle. I just want the emperor's distinct lack of clothing noted: the alleged death
of the music industry is in actuality the death of interesting music.
I said the same thing six years ago when I first wrote about this stuff.
And what's happened since? Music has become more boring than ever, that's what.
Even punk rock has become more mind-numbingly mediocre than I ever remember it being before,
and I came of age when bands like Youth Of Today and Corrosion of Conformity were hot shit
with the dimbulb set.
I haven't seen so many bands playing it safe and copying what's popular since the skulls and
anarchy-symbol craze of 1984. If I hear another band aping the Dillinger Four and shouting
their Cookie Monster vocals at me through their hobo beards I may begin to sob.
At the time I was first bemoaning the effect file-sharing was bound to have on the best music,
I was informed (rather condescendingly, as I recall) that all those fans who were illegally
downloading my music were going to be paying me back in spades via sales of show tickets and merchandise.
And while my showing in that department is dandy at the moment, it certainly hasn't picked up any in
the ensuing six years. In fact, merchandise sales are almost exactly the same. Granted, these days
that's cause to break out the bubbly and perch a lampshade on the old noggin, but I can't help but
notice that this whole file sharing thing hasn't quite worked out as advertised - not just for me,
but for any other working musicians I know either.
Now maybe that's all a big, fat coincidence,
but it's kind of hard to escape the conclusion that what this is, was, and always will be about
is people getting something for nothing. It's not about crazed rock fandom.
It's about as gobbling
up as much free stuff as you can with little regard for what it is or might be, and virtually no
patience at all when it comes to evaluating the goods because, after all, if it's free, what can
it really be worth? And the reason people are doing it isn't because any sort of revolution has occurred;
it's not a consequence of us poor artists having been unshackled from the chains of the evil
record labels and their PR teams and A&R men and distributors and lawyers and accountants.
It's happening because people can steal music easily and without any real risk of getting caught.
That's the way the music business is these days and while I'm not happy about it I'm well aware
there's no point in fighting it. I refuse to allow people to dress it up as something noble when
it's nothing more than simple greed and theft, but don't get the idea that I'm raging against the
dying of the light; I assure you that at this stage the cupboard has been rendered so bare that
record royalties are more or less a moot point.
I'd be happy to give away future albums, settling
for crossing my fingers and praying for the odd licensing deal, if only I could figure out how to
pay for the damned recordings!
(bolding and paragraph additions (for readability) by yours truly)
The victim visits a page while being logged into GMail. Upon execution, the page performs a multipart/form-data POST to one of the GMail interfaces and injects a filter into the victim’s filter list. In the example above, the attacker writes a filter, which simply looks for emails with attachments and forward them to an email of their choice. This filter will automatically transfer all emails matching the rule. Keep in mind that future emails will be forwarded as well. The attack will remain present for as long as the victim has the filter within their filter list, even if the initial vulnerability, which was the cause of the injection, is fixed by Google.
You may want to check your filters, and see if there's a way to get updates as to when new ones are added or forwarded to unknown addresses.
I hate the application of it, but you have to kind-of admire the idea behind it.
Posted by Sam on Dec 24, 2007 at 04:51 PM UTC - 5 hrs
Just a quick note of appreciation for all of you out there. May you have a merry Christmas and I hope the holiday season finds you with good friends, family, and in good spirits, even if you're not celebrating anything or are celebrating something else.
Thanks for an amazing year, and here's to another in 2008.
And rather than have a separate post next week, let me take the time to say "Happy New Year" to everyone on the Gregorian calendar, or any derivative of it that puts your new year at the first of January. =)
Posted by Sam on Dec 17, 2007 at 06:15 AM UTC - 5 hrs
Even though I know many of us have a slight anti-Microsoft bias in our hearts, I'm going to go out on a limb here and ask, "Is Windows Vista all that bad?"
You've seen the Mac-PC upgrade to XP advertisement:
You've heard the horror stories of Vista. Perhaps you've even experienced them?
I've only been using Vista "heavily" for a few months, but my experience hasn't been the same as what I've heard and read from others. In fact, I kind of like Vista. To this point, I've had only 3 problems:
My second monitor will not run at its native, high resolution while in Windows. Instead, it runs at much too low a resolution, and the downgrade is choppy looking. It ran correctly one time, but never since.
I cannot simply connect a projector and present - I have to boot up with the projector connected for it to be recognized.
I can't get SQL Server 2005 to install the database server
From what I can tell, two of those can be chalked up to Apple's NVidia Bootcamp drivers for Vista.
I think that because I know people who have the older MacBook with the ATI card and both of those things work fine in Vista. For me, even trying to present from MacOS caused my computer to freeze.
Eventually, I'm going to have to get the presentation thing fixed, and the 2nd monitor resolution is so bad I never use it on Vista, so that will need to be fixed too. The SQL Server problem bothers me from a principled standpoint, but it doesn't break up my day to day work since I can easily use the client tools to connect to a different SQL server instance.
That's been my experience. Maybe Vista only works on a Macbook.
What has been your experience? If you've had these problems, how have you fixed them?
It's not quite the paradigm shift in languages, but it is a paradigm shift going from "normal web" to "RIA web" going from ColdFusion to Flex + CF.
I'll be sending the iPod out when I get the address to send it to.
For the rest of you, I have a question: If you considered participating, but never sent in a submission, what was the main reason or two?
Based on the initial reaction in the comments, and knowing about 1000 people averaged long enough on the page to have read the post, I expected many more submissions than I got. Was the contest too vague? Should I have given some examples?
Those are my thoughts, but I'd love to hear yours so that more people will enter when I do it again next year.
Update: Sorry for misspelling your name initially, Adrian.
Posted by Sam on Dec 05, 2007 at 07:02 AM UTC - 5 hrs
I'd like a codometer to count all the lines of code I write during the day. It should keep track of lines that get kept and lines that get removed. I don't know what that information would tell me, but I'm curious about it. It should probably work independent of the IDE, since I often use several during the day.
I'd like it if not only you would stop stealing my focus, but also provide updates in the corner of the screen. When I've put you in the background, you should let me know when you're done processing so I can come and click the "next" button. On top of that, give me an option to have you click next automatically for me.
Like 'considered harmful' being considered harmful as a cliché, I'm starting to have a distinct distaste for website or product names of the class e-removr. Or ending-vowel-removr when the last letter is an 'r'. The first time it seemed refreshing and perhaps a bit cute. By now, I'm starting to wish someone would flush them down the shittr. (Well, the names at least.)
Someone found a set of bicycle pedals that fit under the desk for me. Excellent to be able to get a little exercise while I do my morning blog-reading. I couldn't find one the last time I looked, but I did this time. I'm not sure if mine are the same, or how it will work, but I will let you know when I do.
My goal is to review everything before the end of the weekend, and send the iPod out on Monday (along with an announcement here of the winner, and recognition of the other participants - so if you want to be excluded for some reason, let me know that as well).
If you haven't started, there's still enough time to come up with a solution: it needn't be long or difficult - just demonstrate something new in a language you haven't had much experience in.
If you've got a blog, post the solution there and let me know about it. If not, send it to me directly - first get in touch with me via my contact page and then send it via email.
Posted by Sam on Nov 28, 2007 at 06:51 AM UTC - 5 hrs
A quick thought about making search better: Wouldn't it be nice if Google would search your email at the same time it searched the web? It could rank the email higher than the web results, and if you've kept some information in there and forgot completely about it, it would show up too.
Posted by Sam on Nov 22, 2007 at 12:04 PM UTC - 5 hrs
Since the gift buying season is officially upon us, I thought I'd pitch in to the rampant consumerism and list some of the toys I've had a chance to play with this year that would mean fun and learning for the programmer in your life. Plus, the thought of it sounded fun.
Here they are, in no particular order other than the one in which I thought of them this morning:
JetBrains' IntelliJ IDEA: An awesome IDE for Java. So great, I don't mind spending the $249 (US) and using it over the free Eclipse. The Ruby plugin is not too shabby either, the license for your copy is good for your OSX and Windows installations, and you can try it free for 30 days. Martin Fowler thinks IntelliJ changed the IDE landscape. If you work in .NET, they also have ReSharper, which I plan to purchase very soon. Now if only we could get a ColdFusion plugin for IntelliJ, I'd love it even more.
Programming Ruby, Second Edition: What many in the Ruby community consider to be Ruby's Bible. You can lower the barrier of entry for your favorite programmer to using Ruby, certainly one of the funner languages a lot of people are loving to program in lately. Sometimes, I sit and think about things to program just so I can do it in Ruby.
Xbox 360 and a subscription to
XNA Creator's Club (through Xbox Live Marketplace - $99 anually) so they can deploy their games to their new Xbox. This is without a
doubt the thing I'd want most, since I got into this whole programming thing because I was interested
in making games. You can point them to the
getting started page, and they could
make games for the PC for free, using XNA (they'll need that page to get started anyway, even if you
get them the 360 and Creator's Club membership to deploy to the Xbox).
MacBook Pro and pay for the extra pixels. I love mine - so much so,
that I intend to marry it. (Ok, not that much, but I have
been enjoying it.)
The extra pixels make the screen almost as wide as two, and if you can get them an extra monitor I'd do
that too. I've moved over to using this as my sole computer for development, and don't bother with
the desktops at work or home anymore, except on rare occasions. You can run Windows on it, and the
virtual machines are getting really good so that you ought not have to even reboot to use either
Even if you don't want to get them the MacBook, a second or third monitor should be met with enthusiasm.
A Vacation: Programmers are notoriously working long hours
and suffering burnout, so we often need to take a little break from the computer screen. I like
SkyAuction because all the vacations are package deals, there's often a good variety to choose from (many
different countries), most of the time you can find a very good price, and usually the dates are flexible
within a certain time frame, so you don't have to commit right away to a certain date.
Happy Thanksgiving to those celebrating it, and thanks to all you who read and comment and set me straight when I'm wrong - not just here but in the community at large. I do appreciate it.
Do you have any ideas you'd like to share (or ones you'd like to strike from this list)?
Posted by Sam on Nov 07, 2007 at 01:39 PM UTC - 5 hrs
I just wanted to give a quick shout out to the IntelliJ IDEA Ruby plugin team for working so fast to get a fix out the door.
I had posted a question on the JRuby Development list about running Ruby unit tests against JRuby from within IntelliJ IDEA using the Ruby plugin. A couple of days went by and one of the developers of the plugin contacted me, worked with me on solving my problem, and released a new version that supported what I needed within another couple of days.
Posted by Sam on Sep 05, 2007 at 09:31 AM UTC - 5 hrs
It's reminds me of Ruby - it gets out of your way and follows the principle of least surprise quite well. I was zooming around in about 15 minutes, which I think is pretty good considering I've never used one before.
The first thing I'll need to do is get over the sticker-shock. After that, it should be here in 2-3 days. Then I'll install Windows and Quicksilver. (How ironic is it that I'm getting a Mac and the first thing I plan to do is install Windows?)
So aside from the link above to the Pragmatic OSXer blog, does anyone have any can't-live-without Mac websites/resources?
Posted by Sam on Aug 10, 2007 at 11:58 AM UTC - 5 hrs
I'm looking for a couple of pieces of software and was hoping to get some expert opinion (that's why I'm asking you!).
First, I need a standalone diff/merge tool for Windows. I've seen a couple from searching Google, but was hoping for a non-paid version as it is only a temporary solution. If you don't know of a free one, I'll still be glad to know what you use that you were willing to pay for (and what you think of it).
Next, I'm looking for some time-boxing software. I saw this but didn't give it a try yet. I'm not really in need of its many features though. I just want a way to set tasks for specific times for each day of the week and have it repeat itself weekly. It should also reside in the system tray and just alert me when a box of time begins or ends. It would be nice if there was a way to sync it up with other computers over the internet (I regularly work on three machines), but that's not a firm requirement.
Do you know of anything? Maybe I should write it myself? (yeah, when I pull some time out of ...)
And just so you don't feel you've left empty-handed, I'll include this quote
from Alberto Savoia at the blog for the book Beautiful Code:
The odds of finding truly beautiful code in most production systems seem to be on par with the odds of finding a well-read copy of IEEE Transactions on Software Engineering in Paris Hilton's apartment.
Here's a test: quickly pick two things in front of you, say this web browser and your annoying, smelly friend Rupert. Now close your eyes and imagine different ways to combine them.
If you're stuck, here are three:
1. Rupert with a minimize button
2. An annoying, smelly web browser
3. Web browsing on, or with, Rupert's face
Now while these combos might not be useful, good, or even practical, they're certainly creative. Adding a third element, say a gallon of jolt cola, might yield even more interesting combinations (a caffeine overdosed smelly web browser infused with Rupert's annoying personality).
The essay really got me thinking, so I considered it worth sharing with the rest of you. Enjoy.
Posted by Sam on Aug 02, 2007 at 04:13 PM UTC - 5 hrs
Given the new ways we're browsing the web and the ways in which applications are fed to us (i.e., videos and Ajaxification), page views are becoming less relevant as a metric for popularity of a site. So is the amount of time a visitor stays on a site useful? According to this article a couple of days ago in BusinessWeek, Nielsen seems to think so:
This month, Nielsen again flipped around a key ratings measure. It will now rank Web sites by how much time users spend on them, and de-emphasize total page views as the prevailing metric. Nielsen's move is a nod to how habits and technologies on the Web have changed, thanks to video and applications like Ajax, which delivers fresh content to Web pages so users no longer need to click through more screens to see more stuff.
Perhaps its not completely obsolete, but the way I browse - if I've visited your site and you see a huge increase in time spent for that page, its probably because I go through sites and open links in new tabs and return to the opened links often-times hours later. Sometimes I leave them open all night to return to first thing in the morning. I'd be willing to bet I'm not the only one either.
It would be interesting to note the browsing habits of the general population, and only then, when we take into account the "tab effect" could you consider time-spent a valuable metric. Of course, if I'm the only one that browses that way, I don't make enough of an impact on highly-visited sites. But if a good portion of the people do? Let's hope advertisers aren't paying for that.
Posted by Sam on Jul 14, 2007 at 03:37 PM UTC - 5 hrs
For the next 52 weeks, I'll be following (and sometimes dispensing) advice from Chad Fowler's conveniently packaged one-chapter-per-week-in-a-year book,
My Job Went to India and how to save your job without writing spaghetti code (like me) so that only you can disentangle the mess.
(It's an important book). Anyway, today marks start of the first week. (Let's do 7 plus or minus 2 days)
Anyway, back to what we can learn from Chad...
In the first nine chapters, Chad tells us how to choose the right market.
So for my first week, he addresses supply and demand: first we want to search jobs in
our home country, as well as those available offshore. Compare the results and highlight
skills in demand in your home country that nobody (or very few people) offshore is offering.
Then, you just need to become good at those technologies that are in demand but
aren't yet available offshore (or in high supply). This is simple economics.
To get a head start, you might want
to watch the
alpha geeks and see what they're doing, but you can probably afford to start a little
farther along on the curve.
Sounds easy enough. So, start googling. Better yet,
why doesn't someone create a service that performs this search and analysis for us?
Posted by Sam on Jul 13, 2007 at 10:06 AM UTC - 5 hrs
At NFJS a couple of weeks ago I attended Neal Ford's talks on becoming a more productive programmer. One of these things was obvious from watching most of the presenters: use a Mac. There was only one presenter that I happened to see using Microsoft Windows, though I didn't see his entire presentation, so he may have really been using a Mac.
Neal didn't actually tell us to use a Mac. But one of the tools he said he finds indispensable on his Mac is QuickSilver, which is almost a graphical command-line interface. I don't know a lot about it, so maybe you Mac users will correct me if I described it wrong.
Anyway, he told us about a couple of similar (yet less powerful or feature-complete) applications for Windows, one of which was Colibri. I like it.
I just hit Ctrl-Space and up pops my little search box, I start typing and it finds the program I'm looking for after a couple of keystrokes. No more traipsing through my system trying to remember that Remote Desktop Connection is at Start → Programs → click down arrows to expand options → Accessories → Communication.
Instead, I type "Ctrl-Space Rem" and there it is:
I hit Enter and it opens. How much quicker is that?!
I plan to blog Neal's sessions better when I've got a bit more time, but I wanted to get this quick note out about Colibri because I'm quickly finding it to be indispensable in my toolkit as well.
Posted by Sam on Jun 15, 2007 at 09:18 PM UTC - 5 hrs
Sean Corfield responded in some depth to "Is Rails easy?", and explained what I wish I could have when I said (awkwardly, rereading it now) "I think my cat probably couldn't [code a Rails app]."
Sean makes it quite clear (as did Venkat's original post) that it isn't that using a framework, technology, or tool in general is easy or hard (although, you can certainly do things to make it easier or harder to use). In many cases, what it does for you is easy to begin with - in the case of Rails, it is stuff you do all the time that amounts to time-wasting, repetitive, boring busy-work. Rather, the right way to look at them is that they are tools that make you more productive, and it takes a while to learn to use them.
If you go into them thinking they are easy, you're likely to be disappointed and drop a tool that can really save you time before you learn to use it. And that could be tragic, if you value your time.
Also, InfoQ completed its first official year. It was "pre-released" (I forget the exact term they used) I think in May 2006, but it went officially live a year ago Friday. Congrats to Floyd Marinescu and the entire InfoQrue! (And they have a lot of relevant news (to me) I'll be posting links to today)
Posted by Sam on May 14, 2007 at 09:20 AM UTC - 5 hrs
Have you seen the new interface and all the new reports you can do with Google Analytics now? Maybe it was possible before, but I couldn't find more than the top 5 in anything (say, referrers, and whatnot). I logged in today and they've got a beta interface for it that has much more detail to it. It's looking a lot like more like the "your own webserver-based" Urchin from before. Nice going Google!
I also wanted to note that while I knew that the tech crowd generally prefers Google to other search engines, I didn't realize that it was almost exclusive: 98.7% of my search engine traffic over the last month has been through Google. Increíble!
Posted by Sam on May 10, 2007 at 11:22 AM UTC - 5 hrs
Until a few weeks ago, something I've never needed to do was sort a file that was huge - like unable to fit in memory huge. I think the basic algorithm for an external merge sort is easy enough, but it did take some thought and I didn't find much useful in a web search, so I decided it was probably worthy of posting even though it turns out to be rather simple.
Here's the basic algorithm for an external sort in English (I can provide it in Java on request, since that's what I wrote it in, but I'm just posting it in English to keep it generally useful).
Until finished reading the large file
Read a large chunk of the file into memory (large enough so that you get a lot of records, but small enough such that it will comfortably fit into memory).
Sort those records in memory.
Write them to a (new) file
Open each of the files you created above
Read the top record from each file
Until no record exists in any of the files (or until you have read the entirety of every file)
Write the smallest record to the sorted file
Read the next record from the file that had the smallest record
Does that make sense? I kept it in very high level language, but I'm happy to answer any questions regarding smaller details.
Update: I noticed a slight bug in the algorithm. The line "Read one record from each file" was inside the last loop, but should have
been outside of it. The post was changed to reflect the correct way to do it.
Posted by Sam on May 01, 2007 at 06:35 AM UTC - 5 hrs
From a developer standpoint, this helps:
Posted by Sam on Apr 12, 2007 at 11:08 AM UTC - 5 hrs
The Houston city council approved a contract with Earthlink to enable wifi across the city (640 square miles or so!). Some key points:
Earthlink is building it at their own expense, with the City of Houston as its first client (paying 2.5 million over 5 years).
Access will be available for normal people at around $22 dollars per month (if I remember correctly, the plan was originally developed wanting free access for everyone, but I could be wrong).
It will be built in 2 years, but I don't understand how they are doing it in 100 square mile increments and plan to cover the whole city in that time (unless it's 100 sq. mile increments per 4 months or something)
$22 is a lot cheaper than 40! And 40,000 spots for people with low income are available that will be given a 10 dollar discount
That's going to be one helluva large wireless network span.
The Houston Chronicle has the complete story.
I remember thinking quite some time it would be cool if someone made it possible to develop desktop UIs with HTML - how much easier development would be. I'm still teetering on that though, because there are quite a few benefits to programmatically developing a user interface. That's where we get the crossroads that CF and MXML and others like them provide, which seem to embed so well when you are used to programming in tags.
I'm not so much a fan of the excess clutter, but it does have some appeal to me. What do you think?
Posted by Sam on Apr 06, 2007 at 07:59 AM UTC - 5 hrs
While I know I've still got tons to learn (just look at the nice table structure on this site, seeing as CSS naked day was yesterday), I've still been doing this stuff for six years or so now, and thanks to a comment from Justin Mclean on his blog, I've just learned something comepletely new to me: the base tag.
I feel like a complete newbie (or n00b or newb, or however your preferred spelling goes). Basically, any relative links will be preceded by that listed in the href attribute. It appears to need to be a full http:// and so forth, but that's easily made dynamic (in CF - you'll have to consult your docs for other languages) with cgi.server_name or cgi.http_host (as Justin pointed out. Thanks Justin!)
So, now my question to you all: who else didn't know about this? Don't be shy - If I'm not too embarassed to share my ignorance, neither should you be!
Posted by Sam on Mar 30, 2007 at 11:28 AM UTC - 5 hrs
Just a quick question, as I was pondering today - what is good performance? I was thinking there may only be designations such as "acceptable" performance, or poor/bad/unacceptable performance. Is acceptable what you would ordinarily define as good, or is there a level above acceptable? And, if there is a level above acceptable, do you want to obtain it (or would that be premature optimization)?
I was going to write a long article in response to the Hacknot piece, but luckily for me (and again thanks to Sean), I found Andrew Shebanow and Rick Copeland have already said most of what I wanted to, and some in addition.
The Hacknot article is worth reading, as at the minimum it will make you think. And if you can get through the name calling, he does make some interesting points. If you do read it, you should also read the other two I've linked.
So, aside from what Shebanow and Copeland said, here's what I've got to add:
I'm equally competent in dynamic and static languages, though I've always felt more at home in dynamic ones
Pursuant to (1), I wonder if some people are just more dynamically minded than others, so they may excel better in those languages that fit their model of thinking
I wondered if the author of the Hacknot post was just using some poetic license in apparently writing in the style he was criticizing the weenie fanboys of doing, but I didn't ask because I didn't see where I could leave a comment
Well, they've done it with the release of Apollo some time last night (well, it seems around that time anyway).
I've downloaded it all, and was astonished to find the documentation larger than the SDK and runtime put together. Of course that's all zipped up. But still, I don't know if having that much documentation is a good thing or a bad thing.
In any case, I hope to get some time to play with it soon, but I'm not hopeful on that aspect. Plus, I'm still not sure what I'd like to build with it in the first place. Are you planning on building anything? What? (or, is it top secret?)
As it turns out, the fix was quite easy. After installing TwinView from nVidia, all I had to do was add the resolution I wanted to the meta modes line in xorg.conf. So, that line went from looking like:
Sweet stuff. It was kind of neat in that it also gave me the option of 2880x1024 when I go to select my resolution. But, I'm more than happy now that everything looks good. Guess I'll be installing Eclipse and everything else I need and taking this for a ride soon.
Posted by Sam on Mar 08, 2007 at 10:13 AM UTC - 5 hrs
Yesterday, I finally took the time to install Linux on my machine, and since I'd been hearing a lot about Ubuntu, I went with that distribution. So far, I am fairly pleased. The last time I used Linux was probably 6 or 7 years ago, and I remember it was terribly hard to get set up and working. Not so this time: I was up and running in shorter time than it took me to get SVN working a few days ago.
But, I am noticing some things. One is that apparently the Firefox engine differs in that it is not displaying text as defined in the style of many sites. My own is one of them, along with Raymond Camden's blog, and others. So the web looks different in that respect. I was also surprised by the number of updates I needed to install. I know I let the .iso file sit on my Windows desktop for some time before I installed Ubuntu, but 139 updates seemed large for the amount of time I had it sitting.
But I only have two real complaints so far:
It was a complete PITA to get the dual monitors working, though at least it was doable.
My screen makes me feel like I've got a nice HDTV with no HDTV signal. Apparently, the driver I got and had to install for dual monitors doesn't support the resolution I'd like. It seems like it's just stretching everything across the screen - so everything looks funny.
I'd like to continue using this, but I've got to get back to working instead of playing/tweeking, so for the time being I'm going back to Windows. It's just too hard to work in this Gumby-like environment. So, can you help with problem 2? If so, please let me know!
Posted by Sam on Mar 06, 2007 at 06:53 AM UTC - 5 hrs
Nick Tong just posted about his programming personality profile, given by a quiz he took at Doolwind. Since I like to take quizzes like that from time to time, I took it too. Last time I took a personality test, I came up INTJ (maybe that explains some things). On this programmer profile, I came up as DHSC:
You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.
You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.
You work best in a Solo situation.
The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.
You are a Conservative programmer.
The less code you write, the less chance there is of it containing a bug. You write short and to the point code that gets the job done efficiently.
I know its just for fun, but I'm a bit skeptical about it. For just about every question, I was like "it depends. sometimes one way and sometimes another." In particular, I wasn't sure if I should take the last one at its face, or pretend it was more than adding 2 numbers.
Posted by Sam on Feb 27, 2007 at 01:56 PM UTC - 5 hrs
Today, I finally got around to taking off that "install SVN server" that's been lurking on my to-do list for a couple of months. First, I happened to remember the Mere-Moments Guide that I had read about somewhere, long ago. That was helpful, but Rob Gonda's repost of it was a bit better, since he posted the SVNService.zip, which was dead in the original post.
In any case, as promised by Rob, the setup took less than 30 minutes. But, I spent a little time figuring out two things that I'm going to post so I remember them easier (sorry to any authors who may have also posted this, I didn't go through Charlie's list of resources since I had already got it working to my needs):
In the configuration files, whitespace before the property in question matters. Took me a moment to figure out why simply uncommenting the lines in question wasn't working, but removing the whitespace did it for me.
I didn't think the in-file documentation was especially clear regarding how to limit access to certain projects to certain users, so I'll describe my scenario:
Lil' José Ramirez needs access to all the projects, while his cousin Joe Bob needs access to only one project. Each of them should have a password and username as set in the conf/passwd directory. So here it is (this was straightforward, minus the whitespace issue):
jramirez = password!
joebob = pword2
Then, in the conf/authz file, I have this:
jramirez = rw
joebob = rw
jramirez = rw
As far as I can tell, jramirez needs to be put in each project, otherwise it only lets him use unprotected directories.
I know it's really simple, but like I said, I didn't think the directions were as easy as they might have been.
Posted by Sam on Feb 25, 2007 at 12:07 PM UTC - 5 hrs
... and back again.
One thing I've noticed about myself fairly recently is that I tend to have trouble at times, mapping theoretical knowledge to practical use, and practical knowledge back to theoretical use. I don't know if "problem" is the right word, as I feel like I still understand in both cases, it just so happens that my understanding is next to that of a reflex in the domain I first learned. I know that makes little sense, so let me provide a couple of examples.
I first learned regular expressions in a theoretical automata context. I understand them really well in that context, almost to a "reflex" capability, where there wouldn't be much thought to coming up with one, or figuring out what strings could be generated from one. But, when I try to put them into practice, I'm not as quick, nor am I as comfortable as I should be with them. This is particularly striking, because from what I can tell, there should be no difference between my theoretical knowledge and practically using it (aside, perhaps for some syntax issues). This has shown up in a couple of instances lately. In particular, one I found funny instance I found was an attribute-value pair. There was a bug in CFEclipse where, when you went to edit a tag in a dialogue, it would not correctly fill out any attribute which had a space in its value. Well, it was simply a problem of splitting on the space, as I recall. So I posted a regular expression I thought would work, but which I couldn't get to do so. It really was simple: one or more spaces, followed by one or more letters, followed by zero or more spaces, an equal sign, more optional space, a quote, then any number of characters, and another quote. (There is a problem there - I didn't take into account escaped quotes and didn't force the outer ones to match, but you get the idea). I think the problem may have been a "forgetting" of how split worked, but I was convinced my regex wasn't working. I still am not sure what the problem was.
In another example, in our data management class we have to write this CSV Database, which at the moment is just a command line utility to select some columns, or select based on a simple condition, or join on a single column. I check that the input matches some expected syntax using regular expressions, and then call the appropriate function for the input. That's good. But, when I parse the input, I'm back to splitting on, say "(" to know where the arguments are (and since I am sure it meets the correct syntax, this is possible). Now, that way works, but it isn't the easiest to know what is going on just by reading the code. It just shows I'm not as comfortable using the regular expressions as I'd like to be.
Finally, I'll leave with a bit about going from practical to theoretical. I first learned about SQL and databases in a practical context - at work. So, in going back to the theoretical, I've been getting confused at selection (which is more like the where clause in your query) and projection (which is the select column clause). I'm not near as confident in that class as I am when dealing with something practical in the database world.
And again, I'm not talking about going from complete incompetence to competence, but more like competence to better than competent. Do you have trouble relating theoretical knowledge to practical, and back again? Any ideas on how you've overcome it? I just keep pushing, until it clicks (which, eventually it always does). But, I'm wondering if anyone has other strategies.
Posted by Sam on Feb 11, 2007 at 11:27 AM UTC - 5 hrs
I'm using Google Analytics here, and had a question for anyone who might know such things: When you view your visits by source, do you see google and google.com? And further, do you know the difference?
If so, might you kindly leave a comment letting me know? It's been a question I've had for a while now.
Posted by Sam on Feb 09, 2007 at 08:54 AM UTC - 5 hrs
I think that as developers, we too often ignore business objectives and the driving forces behind the projects on which we work. Because I'd like to know more about how to think and analyze in those terms, I decided to take a course about Management Information Systems this semester in grad school. One of the papers we read particularly stuck with me, so I thought I'd share the part that did: When we undertake a risky project (aren't they all?), we should consider what competitive advantage it will give it, and if that advantage is sustainable.
To measure sustainability, Blake Ives (from University of Houston) and Gabriel Piccoli (from Cornell) identify four barriers to erosion of the advantage (this is within a framework they present in the paper, which is worth reading). The barriers are driven by "response-lag drivers," which the authors define as "characteristics of the firm, its competitors, the technology, and the value system in which the firm is embedded that contribute to raise and strengthen barriers to erosion." In any case, on to the four things we should consider:
IT Resources Barrier: This barrier is given by IT assets and capabilities. How flexible is your IT infrastructure? Better than your competitors? How good are your technical people's skills, including management? How good is the relationship between business users and IS developers?
Complementary Resources Barrier: They use the example of Harrah's using its "national network of casinos to capture drive-in traffic and foster
cross-selling" between locations as a perfect example. They also note that these complementary resources need not be considered assets, and could even be liabilities, which, when teamed with the right project could turn into assets.
IT project barrier: This includes the characteristics of the new technology - how visible, complex, and unique it is. Further, it adds the implementation' complexity and process change. Can your competitors readily see your new technology? How complex is it to build? Is it just off-the-shelf software that a competitor could buy as well, or is it proprietary? How complex is it to implement (is it as simple as Word, or is it a complete ERP system), and how much will your daily business processes need to evolve in the implementation of change?
Preemption Barrier: Whereas for the most part we can control the first three barriers within our own organization, or more importantly, a competitor theirs, this is less easy to control, but should be easy enough to predict (I don't think they say that, but based on the description, I think it would be). The idea here "focuses on the question of whether, even after successful imitation has occurred, the leader’s position of competitive advantage can be threatened." What are the switching costs for users of your application? Are they high enough to prevent them from leaving if a competitor was able to imitate your system? It also includes the structure of the value system: do they need another provider of this service (relationship exclusivity)? The authors use the example that you typically have only one mutual fund investment provider. Finally, is the link you are serving with the project in the value chain concentrated enough that you can capture most of the market and "lock-out" your competitors?
I couldn't find the paper online (for free), but if you are interested, you can find it at MIS Quarterly.
Posted by Sam on Jan 28, 2007 at 10:08 AM UTC - 5 hrs
I just wanted to provide an update about the UPS "explain in detail you problem with just 255 characters" problem I had. It turns out, their support not only took the time to figure out what my horrendous letter said, but they understood it, got back to me within a very quick timeframe, and said they'd forward on the craziness of the 255 character limit!
I've yet to check if it changed, but here's to hoping it will.
In any case, I just wanted to say great job UPS on your developer support!
Update: I just wanted to say I am a complete moron. It was a setting in the XML I sent to UPS that was the culprit. And I swear I looked it up and down and didn't see it, until finally one of their level 3 support people pointed it out. My apologies to the UPS tech support whose time I wasted!
Posted by Sam on Jan 25, 2007 at 10:23 AM UTC - 5 hrs
Today I needed to contact UPS Online Tools support because a client just got their rates dropped, and the change is not reflected in our rates and service selection. I tried to describe the problem and question as succinctly as I could, since it said this:
3. Please provide as much detail as possible regarding your request or question including text and/or numbers of any error messages that may appear.: (255 characters maximum)
I must have spent an hour coming up with this:
HowCanIProvdeDetailWit255CharMax? SorryIfMakeNoSens:Client upgrd 2 dalyPckupRate+say rateDrop snce lastYear.Use his dvlpr+accessKey 2 calc shpChrg, but 0 dif in rateReturn. Sys set to use hisRate, or just defaultRate? What can do 2 no ovrchrg his cstmr?
Is it understandable?
I just wanted to write "You've got to be *$^#ing kidding me, right? I've just wasted this much time trying to cram this down into 250 characters, when, if I could just explain it, you could do your job a lot easier."
Update: I just wanted to say I am a complete moron. It was a setting in the XML I sent to UPS that was the culprit. And I swear I looked it up and down and didn't see it, until finally one of their level 3 support people pointed it out. My apologies to the UPS tech support whose time I wasted!
Now, I don't know that I'm pompous enough to say I'm a good programmer (I'm trying though =) ), but I do note that languages like Java get in your way. Graham pointed out that "Java was, as Gosling says in the first Java white paper, designed for average programmers." I get tired of writing things like Class obj = new Class(). While you can do some incredible things with it, programming in Java is like laying down rules for your three-year-old child - you have to tell it too many times what you want it to do (it referring to Java, not your offspring!). Besides that, it is also true that you can do incredible things in other languages, like Ruby (to name my favorite at the time), without being retarded by the compiler (or catering to one that seems like it is).
He also specifies that Arc will be "specially suited for Web apps," which is something interesting to all of us, I would think, who build them in our daily lives. I'm looking forward to its release, whenever that might be (Graham mentions that they have "no idea" when it will be available, but provides an email address you can send an email to to be alerted when it does become available).
Posted by Sam on Jan 23, 2007 at 12:40 PM UTC - 5 hrs
In an effort to give you a glimpse into my work life, I thought I'd let you know something that I find a little strange. I like to listen to Powwow Radio when I work sometimes. It's not as distracting as when, say my favorite song comes on and I've just got to sing along. I listened one night after my friend told me about this Native American rap station. That site also had a powwow station, and I thought it was sort of cool to listen to. I tried it at work one day, more of as a joke than anything else, but I found it gives me a focus and determination to work. I have no idea why, but I thought I'd share anyway. I don't listen everyday - only on occasion.
Posted by Sam on Jan 11, 2007 at 07:36 PM UTC - 5 hrs
Since I was asked recently about why my blog didn't have comments, I decided to spend a little time today and code them. I've yet to put any spam protection in, so I may have to delete some by hand until I do. But, I plan on using Jake Munson's CFFormProtect when I do. I've been using it on one of our client's sites, and the results have been nice. Anyway, enjoy the comments!
Posted by Sam on Jan 11, 2007 at 12:58 PM UTC - 5 hrs
I don't want to turn this into a mouthpiece for the code dojo at University of Houston, but I'm pretty excited about it since we've set the date of our first meeting. We're planning on doing it January 29, 2007 at 7:00 PM. Check the website for more details (such as the room). We have yet to decide on the first problem to solve / topic, but we will have that done by the end of next week. After that, I probably won't post much here about it, or I'll try not to anyway (I realize folks in China, for instance, could probably care less about it).
Posted by Sam on Dec 18, 2006 at 09:24 AM UTC - 5 hrs
The last couple of weeks I've been soliciting teammates and friends of mine to help on starting a code dojo at the University of Houston. Well, we got the go-ahead yesterday from the CougarCS organization, so now we're just trying to plan when we'll have our first meeting. If you go to UH or live around Houston (I don't think we'll be checking IDs or anything), I'd encourage you to come to one of our meetings. You can find more information at CodeDojo.org. Right now, as I said, we don't have a meeting schedule or anything, but you can follow the link to our google group and stay informed that way (of course we will be posting it on the webpage as well).
If you don't live in Houston, but want to start a dojo of your own, we also plan to provide a place for others to post information. We don't have the infrastructure set up yet, but if you contact me, I'll be glad to let you know when we do. Of course, you won't have to have our cheesy logo up there =).
Posted by Sam on Dec 04, 2006 at 08:31 AM UTC - 5 hrs
Just finished writing a survey on some of relatively current literature on k-means, focusing on introducing it, some practical applications of it, some difficulties in it, and how to find k, the number of clusters. I'm still new to the area, so don't expect much groundbreaking to be done.
The second half focuses on my own experiment, trying to find k using two similar, but slightly different techniques. I failed, but if you'd like to go over it and either laugh at me, or perhaps figure out what I've done wrong, you are free to. =)
Obviously, this isn't going to interest many people, so I didn't take time to mark it up - it's just available as a DOC (I had planned on having a PDF version, but my PDF writer has taken a crap on me). If you don't have Word or Open Office, and would like to read it, contact me and I'll try to get the PDF for you in some way or another.
Anyway, the DOC is here if you want to read it. It's over 3600 words, so beware!
I'm interested to know if anyone has built any machine learning libraries or done anything with machine learning in Coldfusion? My immediate thought is "no way!" because I don't think Coldfusion has the performance for it. But, I wouldn't know, since I haven't tried it. Have you? What's been your experience? Drop me a line if you care to.
Posted by Sam on Dec 03, 2006 at 01:15 PM UTC - 5 hrs
Regarding some of the problems we had in automating testing for our rails app, I was reminded of another today: how do we test functionality that requires the user to be logged in?
At first, I tried just setting the required session variables manually, in the setup method. Now, I can't see why that didn't work, and I didn't investigate long enough to find out, because Rachana Parmar, one of our team members, had a brilliant idea: why not just go through the login process? So, she wrote a test helper method that we could call that instantiated the user controller and performed the login action. After that, we had no more problems related to needing to log in to the app to test something.
On another note, I want to explain these short, almost useless postings: Part of the idea here is that I want to learn, and I find that when I write something down, I remember it better. And if I forget, I can always look it up when I know "I've seen this before, but I can't remember how we solved it." So, I find them helpful, and my hope is that someone else will too.
Posted by Sam on Dec 03, 2006 at 12:54 PM UTC - 5 hrs
It's easy, of course, to use a <noscript> tag to show page content to users in that situation. But how do you easily take out content for them?
Posted by Sam on Nov 22, 2006 at 12:33 PM UTC - 5 hrs
If you use several different languages in your writings, GeSHi may be of interest to you. It's written in PHP, but you can use the demo (which I've linked to) if you aren't running that. It supports tons of languages, including C, Ruby, Coldfusion, Java, Perl, Smalltalk and just about any popular language (and some unpopular) you can think of. And even better, if you don't like the language defaults, you're free to change them.
Posted by Sam on Oct 26, 2006 at 05:10 PM UTC - 5 hrs
Not two hours into using IE7, it's already made me mad. It seems it sets itself as the default browser. Thing is, and I could very well be wrong on this, I don't remember it asking me such a question.
In any case, it's a pretty slick browser. I like how they've redone the top, and sort of minimalized the wasted space up there that I never used in the first place. It certainly looks spiffy too, and it reminds me of way back in the day when I thought it was the best browser around (and, I think for quite some time I was justified in thinking so).
But, from my understanding of containers and percentage sizes, it still behaved oddly using form fields to go 100%. It just ignores the container, from what I can tell. And, I can't beleive that when you use scroll: auto;, and have no max height set, it puts the horizontal scroll right where the page would render without it, thus forcing the need for a vertial scroll bar too. Madness I tell you!
Posted by Sam on Oct 03, 2006 at 11:26 AM UTC - 5 hrs
It appears that way, with Coldfusion 6.1. I stumbled across this today, so I thought I'd share what I observed.
In a nutshell, I've got a security object, which handles all the login related information and rules. Also, it is stored in the session. Of course, you wouldn't want to do that if you were planning on running on clustered servers, because of Coldfusion's cfc serialization session issue (at least in Macromedia/Adobe's variety). But, that is beside the point.
Basically, what happens is:
If the security object is not defined, create it
The security object creates a cookie which stores the userID (encrypted)
later, I check the userID by calling a method on the security object
The cookie is set to expire when the user logs out, or when they close the browser.
So what happens?
In Firefox, when the browser is closed, both the session and the cookie are destroyed, so that when the user returns, everything happens again as I originally expected.
In Internet Explorer, however, when the browser is closed, only the cookie is destroyed. When the user returns before the session would normally time out, they get an error, because the security object still exists and expects the cookie to exist too.
Posted by Sam on Aug 15, 2006 at 05:34 PM UTC - 5 hrs
Para el gordo y la flaca de xorBlog, you can visit the xorBlog page.
You can even check that the unit tests are running if you have some time to spare.
It's been a few weeks now, but I finally had time over the last couple of days to start doing some
coding (for this project), and therefore, I've finally got that "minumum" amount of functionality to start the blog.
Sometime soon I'll go over what's been done so far, and why it was done that way. For now, welcome!
I'm a graduate computer science student at UH (as you can see in the about page). I guess I started this to help me learn, and hopefully you too. We'll be covering topics like OOAD, coldfusion, java, test driven development (and other agile methods/practices), and my journey with Ruby and Rails, among other computer technology related subjects at my whim.
For now, sit back and relax. That's what I'm going to do.