Posted by Sam on Apr 23, 2008 at 10:52 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.
More...
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.
I've also been paying attention to Sixteen Colors since the same friend who sent me the pictures above pointed me to it a little while back. To prove to you how k-rad 31173 l338 (I was more than 1337) I was, you can see I was greeted in the AvengeView documentation in the same paragraph as RaD Man.
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.
Were you ever in the art scene? Who were you? Got any art to share?
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!
Interesting Work:
You can only write so many CRUD applications before the tedium drives you insane, and you think to yourself, "there's got tobe abetter way." Even if you don't find a framework to assist you, you'll end up writing your own and copying ideas from the others. And even that only stays interesting until you've relieved yourself of the burden of repetition.
Having interesting work is so important to me that I would contemplate a large reduction in income at the chance to have it (assuming my budget stays in tact or can be reworked to continue having a comfortable-enough lifestyle, and I can still put money away for retirement). Of course,the more interesting the work is, the more of an income reduction I could stand.
Fortunately, interesting work often means harder work, so many times you needn't trade down in salary - or if you do, it may only be temporary.
The opportunity to present at conferences and publish papers amplifies this attribute.
Competent Coworkers: One thing I can't stand is incompetence. I don't expect everyone to be an expert, and I don't expect them to know about all the frameworks and languages and tricks of the trade.
I do expect programmers to have basic problem solving skills, and the ability to learn how to fish.
Scope, Schedule, and Resources. Choose two. We, the development team, get to control the third.
Trust: One comment in the reddit discussion mentioned root access to my workstation and it made me think of trust. If you cannot trust me to administer my own computer, how can you trust me not to subvert the software I'm writing?
Additionally, I need you to trust my opinion. When I recommend some course of action, I need to know that you have a good technical reason for refusing it, or a good business reason. I want an argument as to why I am wrong, or why my advice is ignored. If you've got me consistently using a hammer to drive marshmallows through a bag of corn chips, I'm not likely to stay content.
I don't mind if you verify. In fact, I'd like that very much. It'll help keep me honest and vigilant.
Personal Time: I like the idea of Google's 20% time. I have other projects I'd like to work on, and I'd like the chance to do that on the job. One thing I'd like to see though, is that the 20% time is enforced: every Friday you're supposed to work on a project other than your current project. It'd be nice to know I'm not looked down upon by management as selfish because I chose to work on my project instead of theirs.
I wouldn't mind seeing something in writing about having a share of the profits it generates. I don't want to be working on this at home and have to worry about who owns the IP. And part of that should allow me to work on open source projects where the company won't retain any rights on the code I produce.
Telecommuting: Some days I'll have errands to run, and I dislike doing them. I really dislike doing them on the weekends or in the evenings after work. I'd like to be able to work from home on these days, do my errands, and work late to make up for it. It saves the drive time on those days to help ensure I can get everything done.
There are some other nice-to-have's that didn't quite make the list above for me. For example, it would be nice to be able to travel on occasion. It would also be nice to have conferences, books, and extended learning in general paid for by the company. I'd like to see a personal budget for buying tools I need, along with quality tools to start with.
But if you can meet some agreeable combination of the six qualities above, I'll gladly provide these things myself. If you won't let me use my own equipment, and you provide me with crap, we may not have a deal.
Posted by Sam on Mar 30, 2008 at 01:13 PM 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.
More...
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 Feb 25, 2008 at 06:43 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?
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. =)
And now on to something less technical... suffix arrays.
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:
More...
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:
More...
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.
If they've already got that, I always like books as gifts. Some of my
favorites from this year have been: Code Complete 2, Agile Software Development: Principles, Patterns, and Practices which has a great section on object oriented design principles, and of course,
My Job Went to India.
I have a slew of books I've yet to read this year that I got from last Christmas (and birthday), so I'll have to
list those next year.
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
operating system.
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).
More...
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.
Posted by Sam on Aug 07, 2007 at 03:44 PM UTC - 5 hrs
Scott Berkun wrote an essay about "Creative thinking hacks" with ideas on how to be more creative. The best part for me was this:
More...
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.
If you haven't read them, please (not safe for work) DIFN. Your co-workers and code-maintainers (perhaps yourself!) will thank you for it.
Details repeated for convenience:
July 31st 2007 - 6:30 PM
Oops, it's really on:
August 28th 2007 - 6:30 PM
University of Houston
Hoffman Hall, Room 563 (That's better known to UH students as PGH)
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...
More...
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.
More...
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.
Posted by Sam on Jun 11, 2007 at 07:36 AM UTC - 5 hrs
I take my second weekend in a row (mostly) off of a computer, and look at all the cool things happening!
Adobe releases AIR (previously known as Apollo) and Flex 3 public beta, both products have been on my list of things to do for quite some time, still with no action taken.
For web developers, InfoQ let us know aboutBrowser Shots, which is a service that will test your web sites in tons of different browsers and present screen shots to you. It lets you choose whether to enable Flash, Javascript, or certain media players, and allows you to set the color depth and screen resolution. It's quite slow at the moment (set it and come back in four hours or so), but it shows us what can be possible! (Screenshots of codeodor.com, as they are coming in more will pop up)
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).
More...
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:
Silverlight will now include a mini-CLR (Common Language Runtime) from .NET. What this means is that a subset of the full .NET platform that runs on desktops can be accessed from within the browser. As with the usual .NET runtime, with Silverlight you can code in a number of supported programming languages. At this time the languages supported are C#, Javascript (ECMA 3.0), VB, Python and Ruby. The Python and Ruby interpreters were built by Microsoft and have been released under their shared source license meaning that developers can get access to the code and are able to make contributions to it.
I think it would be pretty sweet to be able to program in my language of choice (especially Python, Ruby, and Javascript!) for a platform like that. But, I'm quite unfamiliar with those technologies as it stands right now, so I don't really know how useful that would be.
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:
More...
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?)
Posted by Sam on Mar 16, 2007 at 08:43 AM UTC - 5 hrs
After mentioning my problem with getting my dual widescreen monitors to work with Ubuntu Linux, I got several helpful replies from Dan Vega and Jim Priest (thanks guys). In any case, I was left with poor resolution choices after getting the dual screens working together, and everything looked like the S from POS (not point of sale).
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):
More...
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):
[users]
jramirez = password!
joebob = pword2
Then, in the conf/authz file, I have this:
#root folder
[/]
jramirez = rw
* =
[/joebob_project]
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.
More...
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:
More...
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."
</vent>
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 23, 2007 at 02:05 PM UTC - 5 hrs
After a suggestion from Peter Bell, I visited Paul Graham's website and started poking around. I came to find out about Arc, and after reading this page introducing it, I got excited by the idea of "A Language for Good Programmers."
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.
As another aside, for the longest time I didn't write down simple solutions like this and the previous one about upgrading functionality only for users with Javascript enabled, but the idea came to me when I read Venkat Subramaniam's and Andy Hunt's Practices of an Agile Developer. It's chock full of great advice, and even though most of it is obvious common sense (or seems that way), I found that I wasn't really doing a lot of the things it suggests. So, I have to give credit where credit is due.
Posted by Sam on Dec 03, 2006 at 12:54 PM UTC - 5 hrs
It's not often a super-important requirement that I run into these days, but in many cases, it is still important to provide functionality to users who either don't have a Javascript enabled browser, or who have it disabled.
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?
In the past, I've often used document.write(), of course, to write the content. But that can become a nightmare to maintain, especially as that content grows. It's just as bad as trying to write an HTML page using Java servlets, perhaps worse if you take into account the lack of a compiler - it's harder to debug problems. So, today an easy way occurred to me - show the content as display: none;, then in the onLoad event, display it using Javascript.
It's not a startling revelation, but it might be helpful at times. Of course, it doesn't help if you're dealing with non-Javascript-using visitors who also don't have CSS support, but it should easily eliminate most of the problems you face when trying to provide functionality (or remove it, and provide an alternate) for them.