tag:blogger.com,1999:blog-92841962024-03-13T22:35:27.796-07:00Carl's rants and more...Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-9284196.post-40433691830359645512010-10-21T12:46:00.001-07:002010-10-21T12:50:41.160-07:00One hour from now...So, I'm a long-time Java guy, wading into Ruby/Rails and really liking it so far. I know most of you who have made the transition are already aware of how much nicer many things in RoR-land are, but I thought I'd start just collecting a series of posts on my own personal findings. Just 'cause.<br /><br />Case in point, this morning I was writing a unit test in Java, and needed to use two dates in my test code, one that was further in the future than the other. In Java, this looks something like this:<br /><br /><pre style="padding-left: 30px"><br />Date now = new Date();<br />Calendar calendar = new GregorianCalendar();<br />calendar.setTime(now);<br />calendar.add(Calendar.HOUR, 1);<br />Date oneHourFromNow = calendar.getTime();<br /></pre><br /><br />I know I don't need to explicitly set the calendar to 'now', however, I use the 'now' reference in the tests, so it seemed to be slightly more correct and explicit to do so. Further, the only reason for this setup code is to use the <em>now</em> and <em>oneHourFromNow</em> references in my tests.<br /><br />In Rails, I would simply reference:<br /><br /><pre style="padding-left: 30px"><br />Time.now<br /></pre><br /><br />when I wanted to get the current time, and then use the nice time-related functions that Rails adds:<br /><br /><pre style="padding-left: 30px"><br />Time.now + 1.hour<br /></pre><br /><br />when I needed a time that was in the future. If I wanted the exact same semantics as the Java code, I suppose I could do this:<br /><br /><pre style="padding-left: 30px"><br />now = Time.now<br />one_hour_from_now = Time.now + 1.hour<br /></pre><br /><br />but that doesn't seem to add much in the way of comprehensibility, so I'd likely skip that altogether.<br /><br />So, in reality, what would take me five lines of code in Java, essentially takes zero in Rails, which, as I calculate things, is infinitely better.Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com8tag:blogger.com,1999:blog-9284196.post-25427447212108860022009-07-22T14:12:00.001-07:002009-07-22T14:12:59.097-07:00Startup CTO mistakes I'd rather not repeat...I write this as I am seemingly on the cusp of getting involved in another startup, one way or another. Either the game I'm working on will start making money, or I'll get dragged into one of the many projects my friends and acquaintances are dreaming up. So now seems a good time to reflect on some of the bigger mistakes I've made, and in the process hopefully avoid repeating them.<br /><br />Now, we shouldn't be <em>too</em> hard on ourselves for making mistakes. In all of my personal, educational and business pursuits, I have yet to see a method of learning that doesn't involve making some as part of the process. This is a reality I'm trying to impress upon my seven year old daughter, who has somehow gotten into her head the notion that she should be able to do anything she sets her mind to the first time she tries it, and will typically go into hysterics upon discovering that it's not that easy. She's starting to get the idea, and she's starting to recognize that laughing at your mistakes, owning them, and moving on is a <em>lot</em> better than wasting a bunch of time crying over them. <br /><br />That said, with mistakes as the basis for learning, I learned <em>a lot</em> at my first startup. What follows are just a few of the highlights. Enjoy!<br /><br /><h2>Not getting involved in "the business"</h2><br />This seems to be far and away one of the bigger mistakes I've made; assuming that the "T" in the title somehow absolves the Chief Technology Officer of worrying about or considering much what "the business" is doing. In reality, there is no "business side". Chances are good the technology <em>is</em> the business. The CTO needs to be on top of what marketing has up its sleeve, what countries/demographics/markets/opportunities the CEO is dreaming about, what the CFO thinks of the IT budget, never mind the fact that HR is dying to get an intranet going. If you don't touch base with these people regularly, and become part of helping them achieve their plans, they'll find ways to get things done without you. And it's almost guaranteed to be in a fashion that's not in alignment with your technology vision. About that...<br /><br /><h2>Keeping the technology vision in your head</h2><br />While there's a lot of conflicting opinions with respect to what the CTO role actually involves, it appears there is some consensus that evangelism is part of the role. Do you see your niche product actually becoming <em>the</em> platform for your vertical or beyond? Do you see your company's expertise in a particular technology being leveraged beyond the confines of its current product or market? Well then <em>tell</em> somebody. Tell <em>everybody</em>. A typical reason for not doing so is the ever-present product backlog. "There's no point talking about our technology vision, 'cause we won't be in a position to fulfill it for two years and I don't want folks to get distracted", you might tell yourself. Know what? You're wrong. You won't get around to it <em>ever</em> with that attitude, because it will never become part of anybody's reality unless you make it so. Besides, two years from now your product backlog will be even bigger.<br /><br /><h2>Adopting bleeding-edge technology</h2><br />So, back in the day (around 1999 or so), I really figured part of being a good CTO was finding that heretofore-unknown-but-up-and-coming piece of technology that would give you The Edge over your competitors. You know, that magic, silver bullet that would run 10x faster and enable 10x faster development cycles. So I went out and got us an object-oriented database.<br /><br />The result? Well, I did think that it <a href="http://www.informationweek.com/810/enjin.htm" title="eWeek quoting me on cutting development time">enabled slightly faster development times</a>. There were significant caveats, however. Using their easiest "transparent" API meant that <em>all</em> servers in the cluster had to run the latest schema (no incremental deployment for you, my friend). Further, online backups were problematic, and we <em>really</em> loved it when the database server needed a restart and would come up in "recovery" mode with no progress indication, staying that way for a half hour or so.<br /><br />Details aside, think twice before looking to fancy technology as a core piece of your strategy. If you think you need it, at least try to sandbox the financial and technical risk.<br /><br /><h2>Giving up control of the development process</h2><br />Some CTOs operate solely as a "technology visionary", and operate from the sidelines, much like a cheerleader (see "Model 2: CTO as Big Thinker" from <a href="http://www.google.com/url?q=http://docs.google.com/gview%3Fa%3Dv%26q%3Dcache:04EvzXJukNIJ:www.brixtonspa.com/Career/The_Role_of_the_CTO_4Models.pdf%2Bcto%2Bsuccess%2Bfour%2Bmodels%26hl%3Den&ei=sGBnSqzQMI2OtAOhrrThDg&sa=X&oi=gview&resnum=1&ct=view&usg=AFQjCNEamTQYXnrlW8j274GKCxqNPaFUeA">The Role of the CTO: Four Models for Success</a> by Tom Berray). However, I find <a href="http://startuplessonslearned.blogspot.com/2008/09/what-does-startup-cto-actually-do.html">Eric Ries' comments</a> more in agreement with my own experience. As a CTO, it became much harder to drive product and technology innovation once I shifted managerial responsibilities sideways.<br /> <br /><br /><h2>Staying <em>too</em> hands-on <em>and</em> not getting hands-on enough</h2><br />This is a tough one to get right. Right up to the point where I had a team of about thirty people, I could still write a little code, and assist with design of every major feature. But that was pretty much the breaking point. However, as I tried to teach myself to let go, inevitably some features made it out the door in, let's say, a less than desirable state. I chalk this one up to focusing on the wrong things. I had focused on the product too much, and didn't spend enough time with people and process. As a CTO, it's important to stay somewhat hands-on. Write a little code. Do a little design. But choose wisely, and use each of these hands-on efforts as an opportunity to teach and mentor. Let your team make some mistakes in the early days, but more importantly, have a process in place that makes recovery easy and automatic.<br /><br /><br />So those are five fairly big mistakes I hope not to repeat. Maybe you've made some of the same ones. There are, of course, <em>many</em> more. Stick around!Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com5tag:blogger.com,1999:blog-9284196.post-29467867784462219272009-02-05T14:04:00.001-08:002009-02-05T14:04:02.800-08:00Scrumy update...<center><br /><img src="http://lh5.ggpht.com/_XYi6uSZECoQ/SYtfM3tubYI/AAAAAAAAADg/knFY4vXxtbE/E1E685D4-D356-4E01-A812-C0CCBAFA6DB3.jpg?imgmax=800" alt="E1E685D4-D356-4E01-A812-C0CCBAFA6DB3.jpg" border="0" width="400" height="316" /> <br /></center><br /><br />I sent my comments in to the Scrumy guys, and Dan responded by saying "We converted your seven bucks into 17,276 Colombian Pesos and we're swimming in it Scrooge McDuck style, thanks for upgrading!" Now you know how developers spend their hard-earned money. Anyway I'm impressed that Dan didn't just make the number up and actually converted seven bucks US at the <a href="http://www.xe.com/">current exchange rate</a>.Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-29865286437925577302009-02-04T13:04:00.001-08:002009-02-04T13:15:39.039-08:00ScrumySo I've been playing around with <a href="http://scrumy.com/">Scrumy</a> lately. From the name I'm sure you've figured out that it's some sort of tool that helps you manage Scrum-based projects. It actually works for any sort of agile-ish project, so you don't have to give up whichever agile cult with which you may already be affiliated.<br /><br />Scrumy lets you play around for free, although with the free version you'll be in one endless sprint until the end of time. That gets tiresome after a while, so I finally opened up my wallet, blew the dust off my credit card, and parted with a whole $7 (USD) for the privilege of using Scrumy Pro for a whole month. By the way, I'm positive that contrary to what the developers say about the name in their <a href="http://youtube.com/watch?v=DmZ5O5AJ2F4">slick intro video</a>, they affectionately refer to their product as "screw me" when we're not listening. But I digress.<br /><br />My $7 obviously entitles me to deliver my demands to the developers and readily expect to have them fulfilled within two weeks. Anything can be done in two weeks, right? So obviously this budget tool has a few shortcomings, and who better than me to point them out? Ready? Here we go...<br /><br /><strong>Can't see "to do" items in the backlog</strong>. There's a backlog (great). You can add stories to it (great). If your story has to do items that greatly enrich your understanding of the story, you're unable to see them when it comes time to assign the story to a particular sprint (utterly maddening).<br /><br /><strong>There's no search</strong>. I can't possibly be expected to remember where I put things, that's why I'm spending all this time painstakingly typing stuff into someone else's web app. If there's no search, I can't find stuff without digging through everything and clicking around like mad.<br /><br /><strong>Would be great if edits were pushed out</strong>. I'm working on a project with <a href="http://barsoomcore.blogspot.com/">a buddy in Toronto</a>. We often chat about how things are going, and play with the stories and tasks until we agree on the next sprint. It would be fantastically, over-the-top-mega-cool if he could see changes as I was making them. And vice-versa of course, sometimes he has good ideas too.<br /><br /><strong>No obvious way to promote a "to do" to a story</strong>. Drag "to do" to story column (nope). Drag "to do" to backlog (nope). Open up "to do" and search for "make story" button (nope). Bang head against screen, open "to do", copy text, select "new story", paste, bang head again.<br /><br /><strong>The Scrumy Scrumy board isn't public</strong>. I mean really, how cool would it be to be able to see how the Scrumy guys setup their own project, and what they have coming down the pipe. Read only, of course, except for respected, rational individuals such as myself who should be given full access.<br /><br />Now don't get me wrong, Scrumy is refreshingly simple and I'm really enjoying working with it. It does just what it sets out to do (replacing sticky notes) admirably well. It doesn't lock you down to particular iteration lengths. It doesn't make you do a bunch of complicated category, project, user setup crap. It embraces the simplicity and flexibility of paper (mostly), while providing the many benefits of taking it online (<em>oh crap</em>, the cat destroyed our project tracking system <em>AGAIN</em>). I wish more products were this fun to use and had such wonderfully ambiguous names.<br />Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com1tag:blogger.com,1999:blog-9284196.post-58079111200377523522009-01-26T09:33:00.001-08:002009-01-26T09:34:07.095-08:00TDD in SpaceI don't know about you, but I find some aspects of test-driven development hard. Too often I'll find myself writing trivial unit tests, typically revolving around persistence or login. I mean, really, should you be spending time writing tests to ensure your application's persistence layer is functioning correctly? That should just be a given!<br /><br />However, I've been pushing through my initial hurdles, and am really starting to see some solid payback. One of the unexpected benefits is that my API almost immediately becomes more readable. Not convinced? Think about it. In test-driven development, because you're writing the tests in "problem brain-space" instead of "solution brain-space", you're thinking in terms of the problem that needs to be solved, not how you're going to solve it.<br /><br />While you're in "problem brain-space", you're in the same sort of place that users or maintainers of your code will eventually find themselves in. There are many possible "solution brain-spaces", each with their own set of unique concepts and terms, but typically in the "problem brain-space" you're more likely to be speaking a common language. Which is a good thing.Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com2tag:blogger.com,1999:blog-9284196.post-48805888382864200682008-10-31T13:58:00.001-07:002008-10-31T13:58:45.850-07:00Thinking in GitI recently started using Git on a small team project. Why Git, you ask? Well, previously I had used CVS and Subversion (and by such admission I am knowingly submitting myself to <a href="http://www.youtube.com/watch?v=4XpnKHJAok8">being mocked by Linus</a>), and prior to that had used Visual SourceSafe. So I figured it was time to learn something new and dive into distributed version control.<br /><br />I have to say, it's a bit of a leap. In the same way that I stumbled through learning to trust in CVS to merge my changes, as opposed to locking a file the way SourceSafe did, I'm finding the distributed model takes some getting used to.<br /><br />It's great that I don't have to have network access to do commits. That's the easy part to appreciate. With Git, you commit to your local repository copy. If you want to bring your changes together with someone else's, either you push to their repository, or they pull from yours, but that is in no way tied to the act of committing your changes. There's no built-in notion of a master repository. Really.<br /><br />For some reason I'm finding it difficult to grasp that concept. For years I've relied on the notion that all my changes are safely locked away in the master repository. The master repository is the source of all truth. (<em>Ha ha, get it? "Source" of all truth? You don't get it. Fine.</em>)<br /><br />In our particular team setup, we do have a master copy hosted on <a href="http://github.com/">GitHub</a>. I'm finding that every single time I do a "git commit", I have this unstoppable compulsion to execute a "git push", and I'm not sure that's the right idea. I'm looking forward to that breakthrough moment when I finally get it. I'll let you know when that happens.Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-68547664255698381762008-10-24T23:59:00.001-07:002008-10-24T23:59:59.225-07:00Singularity Summit 08 Day 1Today was the Emerging Tech Workshop component of the <a href="http://www.singularitysummit.com/">Singularity Summit</a>, and I have to say I'm fairly disappointed. The venue certainly didn't help. While the <a href="http://www.thetech.org/">Tech Museum of Innovation</a> is an inspiring place, it's also full of exuberant (loud) kids, and that combined with the less than adequate sound system made concentrating on the speakers a challenge.<br /><br />Still, it was certainly possible to pull some useful stuff out of it. It was great to hear <a href="http://web.engr.oregonstate.edu/~tgd/">Thomas Dietterich</a> on the semantic web panel validate what I've been thinking about AI for a while, namely that we can't expect to have useful AI until it has an awareness of what's going on in the real world. That might seem obvious, but it appears many folks have been working simply on text manipulation and inference engines, which will only get us so far. He also mentioned <a href="http://oauth.net/">OAuth</a>, which I hadn't yet heard of, which allows users to give applications access to their data in a controlled manner.<br /><br />The highlight of the robotics panel was clearly Bruce Hall's use of the phrase to "spinning dreidel of death" to describe <a href="http://www.velodyne.com/lidar/">Velodyne's laser vision system</a> (LIDAR), used by many of the vehicles in the <a href="http://www.darpa.mil/GRANDCHALLENGE/">DARPA grand challenge</a>. One fellow asked if anyone on the panel saw potential commercial application of some of the research work being done using rat brains to control robots, to which the panel answered a flat "no". That surprised me a bit. I was thinking folks in a robotics panel at a summit on the singularity would perhaps be a little more forward thinking.<br /><br />Anyway, there were also guys presenting on their supposedly singularity-related companies, including <a href="http://www.climos.com/">Climos</a>, <a href="http://www.m2mi.com/">m2mi</a> and <a href="http://www.piryx.com/">Piryx</a>. These mostly felt like VC pitches. Interesting stuff for sure, but hardly what I was expecting. Where were the guys working on heads-up displays and neural interfaces, for instance? How about the guys from Mind Balance working on <a href="http://news.bbc.co.uk/cbbcnews/hi/sci_tech/newsid_3525000/3525487.stm">mind-controlled video games</a>? I think these were the things the audience was clamoring for but didn't get.<br /><br />Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-65905007881201483682008-09-26T13:56:00.001-07:002008-09-26T13:56:11.197-07:00Towards the Singularity...<p>One of the defining characteristics of this age is the notion of a <a href="http://en.wikipedia.org/wiki/Technological_singularity">technological singularity</a>. Whether or not our civilization actually achieves such an event, there is surely little doubt that we are currently experiencing a period of time marked by incredibly rapid discovery and innovation. For some time I've been a fan of <a href="http://www.kurzweiltech.com/raybio.html">Ray Kurzweil</a>, first for the musical instruments he makes, and secondly for his writing on futuristic themes. So I'm very excited to be attending <a href="http://www.singularitysummit.com/">The Singularity Summit</a> at the end of October, an event at which I hope to meet some like-minded folks, and hopefully sharpen my vision with respect to what may come...</p><br />Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com3tag:blogger.com,1999:blog-9284196.post-79462226248741358102008-09-23T10:49:00.001-07:002008-09-23T10:49:50.373-07:00$0.25 well spent...<p>I finally got around to playing with Amazon's EC2 yesterday, just going through <a href="http://docs.amazonwebservices.com/AWSEC2/2007-03-01/GettingStartedGuide/">the basic tutorial</a>. Pretty much as I expected, it was trivial to create and start a new instance, although I could see getting tired of keeping track of the access identifiers for command line usage and wanting to find a GUI such as <a href="http://www.rightscale.com/">RightScale</a>, which will even automatically launch new instances to deal with increases in demand on your site.</p><br /><br /><p>The idea of being able to quickly add extra compute power, and only pay for it when you need it is quite appealing. Many web sites experience significant peaks in their business and could potentially save on infrastructure costs with such a model. For example, at my last gig we designed systems that had to deal with peak traffic that was more than twenty times the average for just a couple hours at a time, requiring a significant investment in hardware that went largely unused most of the time. It's also nice for companies just starting out that don't have a firm grasp on their hardware requirements yet.</p><br /><br /><p>I do wonder how well Microsoft can play in this new space given their server-centric licensing model. If I want to have a hundred servers on standby, how would I license Windows for that? Some quick Google searching for "windows cloud computing" turns up some information on a future cloud-centric operating system called "Midori", a beta offering of Microsoft Online Services, and even references to Windows Live. But this wouldn't help me deploy a .NET application to the cloud today. This <a href="http://blogs.zdnet.com/microsoft/?p=1536">fairly recent post on ZDNet</a> echoes my confusion, and adds even more concepts. Red Dog? Microsoft appears to be playing catch up again with respect to understanding the Internet.</p><br /><br /><p>Regardless, I want to start taking advantage of cloud computing. Even if it's <a href="http://www.informationweek.com/news/services/storage/showArticle.jhtml?articleID=209400122&pgno=1&queryText=&isPrev=">not yet ready for mission-critical applications</a>, one could start by moving certain workloads into the cloud, such as load testing or compute-intensive batch processing. I don't know of any other way I could start up a server or two and play with them for an hour for just $0.25.</p>Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-2324495555032500572008-09-01T12:09:00.000-07:002008-09-01T12:23:29.982-07:00What are *you* afraid of?I'll tell you what I'm afraid of. Patents. Software patents specifically.<br /><br />This week I'll be attending the <a href="http://www.businessofsoftware.org">Business of Software conference in Boston</a>, where folks are getting together to discuss all the gnarly difficulties associated with building software for money. Judging from the presentation topics people are worried about how to build software, how to market it and how to charge for it. Clearly these are all very worthwhile topics. I guess for myself, however, these are the least of my worries. I classify them as rational problems. You can try things, see what works and what doesn't, experiment, and move on. Easy.<br /><br />But patents. Patents lurk around late at night, watching and waiting, ready to strike at the worst possible time. Patents are not rational. They're a problem I clearly don't understand. Richard Stallman himself will be speaking at BoS 2008, mostly on the evils of patents as applied to software. I'm already convinced of the evils, what I need now is a strategy to manage patent risk!Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-50344244521858336252008-08-20T14:56:00.000-07:002008-08-20T15:11:25.520-07:00From the "things I wish Java had" file...Often you'll find yourself writing code similar to the following:<br /><pre>String childName = root.getChild().getName();<br /></pre>Now, if root.getChild() returns null, you'll get a dreaded NullPointerException. There are a couple ways to guard against this of course, but they're fairly verbose. You could check each traversal point for null...<br /><pre>String childName = null;<br />Node child = root.getChild();<br />if (child != null) {<br /> childName = child.getName();<br />}<br /></pre>That works, but it gets messy quickly if you have another traversal or two (and yes, I know, excessive depth is a bad code smell).<br /><br />Alternatively, you could do something like this:<br /><pre>String childName = null;<br />try {<br /> childName = root.getChild().getName();<br />} catch(NullPointerException ignored) {<br />}<br /></pre>But you could really end up littering your code with ignored catch blocks.<br /><br />Ideally, I would love to have a method of saying "traverse as far as you can, but return null if you encounter null along the way". Perhaps a special operator?<br /><pre>String childName = root,getChild(),getName();<br /></pre>Anyway, I'm sure there are languages out there that support this notion. It's high on my list of desired features for an alternative to Java!Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com4tag:blogger.com,1999:blog-9284196.post-29373056193779568332008-06-25T22:03:00.000-07:002008-06-25T22:53:16.261-07:00RFCs and memory failure...I often suggest to developers that they should read <a href="http://www.ietf.org/rfc.html">the RFCs</a> relating to technology they're working with. It's all fine to read the vendor's documentation for whichever product you're using, but you can never be sure if their developers have gotten things right.<br /><br />One of my favourite RFCs is <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">RFC 2616</a>, which specifies HTTP 1.1. HTTP is a fantastically useful and flexible protocol, and I had considered myself quite familiar with it, until a conversation I had today with <a href="http://ddossot.blogspot.com/">a fellow developer</a>.<br /><br />We were discussing options for implementing asynchronous processing of web requests, with various considerations from the web tier to the back end. The conversation went something like this:<br /><br />D: You could of course use a meta http-equiv tag to reload ze page.<br /><br />Me: Or better yet, the HTTP "Refresh" header field.<br /><br />D: "Refresh", she is an HTTP header?<br /><br />Me: Yup, it's in the RFC.<br /><br />D: Huh.<br /><br />Sadly I am unable to reproduce his exquisite French accent in writing. But I digress. Later that day he informed me that in fact it was <font style="font-style: italic;">not</font> in the RFC, which I took to be impossible. I've used it frequently, I just knew it had to be there. I've been known for my sketchy memory when it comes to social matters, but usually my memory for technical details is pretty good. So I was extremely dismayed when I pulled up the RFC and discovered that he was indeed correct.<br /><br />Not satisfied with leaving it at that, I started doing a little digging. For those of you who are curious (all three of you, maybe), here's what I discovered.<br /><br />A <a href="http://fy.chalmers.se/%7Eappro/SITE/draft-ietf-http-v11-spec-00.html#sect10.35">very early draft of the HTTP 1.1 specification</a> did include a reference to a "Refresh" response header. However, this was removed from later drafts, as per <a href="http://www.hpl.hp.com/personal/ange/archives/archives-96/http-wg-archive/1657.html">this message from Roy Fielding</a> dated June of 1996. It appears that Netscape introduced this as a proprietary feature as documented in <a href="http://wp.netscape.com/assist/net_sites/pushpull.html">An Exploration of Dynamic Documents</a>. Evidently the <a href="http://www.w3.org/Protocols/HTTP/Issues/http-wg.html">W3C didn't think this was a good idea</a> (search for "refresh", almost at the bottom of the page).<br /><br />Regardless, the technique is widely supported, and allows you to exert server-side control of browser page reloading. This can even be used to reload non-HTML content such as images and text. Fun!Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-81088483907996063562006-10-26T14:57:00.001-07:002006-10-27T23:25:33.029-07:00Famous bridge in Lucerne<div style="text-align: left;"><a href="http://www.flickr.com/photos/38115983@N00/280144190/" title="photo sharing"><img src="http://static.flickr.com/109/280144190_985d204457_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /></a><br />...although I'm not sure what it's famous for. Apparently the attached tower is the most photographed of any tourist attraction in Switzerland.<br /></div><div style="float: right; margin-left: 10px; margin-bottom: 10px;"> <span style="margin-top: 0px;font-size:0;" ><br /></span></div>Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-18326499864904250422006-10-26T03:21:00.001-07:002006-10-27T23:27:49.441-07:00View from Grand National Hotel<div style="float: right; margin-left: 10px; margin-bottom: 10px;"> <a href="http://www.flickr.com/photos/38115983@N00/279747390/" title="photo sharing"><img src="http://static.flickr.com/87/279747390_3ff6ce7835_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /></a><br /></div><br /><div style="text-align: left;">This was taken from the balcony of my room at the Grand National Hotel in Lucerne. If you ever have the chance, go there and stay here.<br /><span style="margin-top: 0px;font-size:0;" > </span></div>Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-15665804582210628012006-10-26T03:15:00.001-07:002006-10-27T23:29:04.166-07:00Me in Lucerne...<div style="float: right; margin-left: 10px; margin-bottom: 10px;"> <a href="http://www.flickr.com/photos/38115983@N00/279745168/" title="photo sharing"><img src="http://static.flickr.com/86/279745168_426a7fb593_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /></a><br /></div> <br /><div><br />...enough said. ;-)<br /></div>Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-42831560199546144342006-10-25T04:27:00.001-07:002006-10-27T23:30:24.901-07:00Lisa and Oli...<div style="float: right; margin-left: 10px; margin-bottom: 10px;"> <a href="http://www.flickr.com/photos/38115983@N00/278999601/" title="photo sharing"><img src="http://static.flickr.com/94/278999601_b5fa511181_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /></a><br /><span style="margin-top: 0px;font-size:0;" > <a href="http://www.flickr.com/photos/38115983@N00/278999601/"></a></span></div><br /><div><br /><br /></div>...on the train to Lucerne.Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-44144029336962495092006-10-25T04:20:00.001-07:002006-10-27T23:32:01.779-07:00Proof that I was in the Motherland...<div style="float: right; margin-left: 10px; margin-bottom: 10px;"> <a href="http://www.flickr.com/photos/38115983@N00/278996815/" title="photo sharing"><img src="http://static.flickr.com/86/278996815_c1b75704e3_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /></a></div> <br /><br /><div><br />Well, for an hour between flights anyway. Was surprised (and slightly disappointed) how much of the advertising was in English.<br /></div>Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-1107109282241890202005-01-30T10:21:00.000-08:002006-10-23T16:29:30.011-07:00How Many Open Files?Good article about how to determine how many file descriptors are open under Linux...
<br /><br>
<br /><a href="http://www.netadmintools.com/art295.html">How Many Open Files?</a>Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0tag:blogger.com,1999:blog-9284196.post-1101260744601775712004-11-23T17:43:00.000-08:002006-10-23T16:29:29.955-07:00RoboticsSlashdot posting a while back had this great link to a provider of white-box robots. For the life of me I couldn't remember the URL. Doing a little googling, turned up the following URL:
<br /><a href="http://www.whiteboxrobotics.com/">
<br />http://www.whiteboxrobotics.com/</a>
<br />
<br />Really don't know why I couldn't remember that one... :-?
<br />
<br />Interesting related sites include:
<br />
<br /><a href="http://www.via.com.tw/en/initiatives/robotics/">http://www.via.com.tw/en/initiatives/robotics/</a>
<br />
<br />and
<br /><a href="http://www.ai.sri.com/centibots/tech_design/robot.html#robots">
<br />http://www.ai.sri.com/centibots/tech_design/robot.html#robots</a>
<br />Carl Schmidthttp://www.blogger.com/profile/10674501552993043737noreply@blogger.com0