Author: preston.lee

  • iCal Domain Account Errors For New Events

    Over the past couple weeks I’ve had issues getting my OSX 10.5 iCal client to continue working properly with our centralized CalDav server. I stopped being able to invite other domain users to my events as well as reserve “locations”, despite all my personal (non-domain) calendars continuing to work properly. I noted these iCal errors in Console.app…
    *** -[NSConcreteTextStorage attributesAtIndex:longestEffectiveRange:inRange:]: Range or index out of bounds
    CalDAVOperationQueue tried to dequeue operation <CalDAVScanDropBoxQueueableOperation: 0x174eb6a0> but it was not at the front of the queue.
    When I tried to delete my domain account within iCal’s preferences, the application hung. When restarted I could no longer bring up the preference dialog and saw this error repeated in Console…
    *** -[NSURL initWithString:relativeToURL:]: nil string parameter
    Apparently deleting everything in ~/Library/Calendars and starting fresh is one solution. I have years worth of notes and interesting tidbits that I need to keep, however, so simply deleting all my data was not an option. With some educated guesswork, trial and error, I discovered that the following steps seems to make everything work without apparent data loss or corruption..
    Quit iCal.
    Go to ~/Library/Calendars and backup the entire directory, just in case.
    Delete all “Calendar Cache” files as well as any directory ending in “.caldav”
    Start iCal. It may give you a progress dialog about “Upgrading Calendars”. I think this means it’s rebuilding the cache file.
    Go to “iCal -> Preferences…” and delete/readd your domain account.
    Wait for the domain account to resync and you should be go to go.
    Hope this helps!

    appleOver the past couple weeks I’ve had issues getting my OSX 10.5 iCal client to continue working properly with our centralized CalDav server. I stopped being able to invite other domain users to my events as well as reserve “locations”, despite all my personal (non-domain) calendars continuing to work properly. I noted these iCal errors in Console.app…

    *** -[NSConcreteTextStorage attributesAtIndex:longestEffectiveRange:inRange:]: Range or index out of bounds

    CalDAVOperationQueue tried to dequeue operation <CalDAVScanDropBoxQueueableOperation: 0x174eb6a0> but it was not at the front of the queue.

    When I tried to delete my domain account within iCal’s preferences, the application hung. When restarted, I could no longer bring up the preference dialog and saw this error repeated in Console…

    *** -[NSURL initWithString:relativeToURL:]: nil string parameter

    Apparently deleting everything in ~/Library/Calendars and starting fresh is the easiest solution. I have years worth of notes and interesting tidbits that I need to keep, however, so simply deleting all my data was not an option. With some educated guesswork, trial and error, I discovered that the following steps seems to make everything work again without apparent data loss or corruption..

    1. Quit iCal.
    2. Go to ~/Library/Calendars and backup the entire directory, just in case.
    3. Delete all “Calendar Cache” files as well as any directory ending in “.caldav”.
    4. Start iCal.
    5. It may give you a progress dialog about “Upgrading Calendars”. I think this means it’s rebuilding the cache file.
    6. Go to “iCal -> Preferences…” and delete/readd your domain account.
    7. Wait for the domain account to resync and you should be go to go.

    Hope this helps!

  • How To Prepare For Ignite

    ignite_phoenixI recently had the pleasure of speaking at Ignite Phoenix 4, and thought I’d share my perspective to those presenting in the future.

    See, all my life I’ve been in performing musical groups–rock bands, solos with larger concert bands, marching bands etc.–so despite being introverted to a fault, I’m not easily intimidated by anything in the “performing arts” category, and am usually up for giving things the old college try. Within the past couple years I’ve become accustomed to speaking regularly at various city events, local tech groups, conferences etc., so I initially shrugged off the preparation as something I could bust out in an hour or two over a Heineken… or two.

    I was wrong.

    Now, I’m not dumping this information on you because you need to know my life history, but to strongly emphasize that even if you took Public Speaking in college, have performed literally hundreds of times in public, and have plenty of real-world speaking experience…

    Preparing for Ignite is different.

    It’s a wonderfully unique and fun experience, but I put more effort into my five minutes of Sun Tzu: The Art of…Business? than I usually do for 30-45 minutes of less creative informational content. Let’s look at why…

    (1) Delivery timing is your biggest risk of failure.

    Ignite fully automates the progression of slides; you cannot control advancement to give yourself even +/- 1 second. Also, for Phoenix at least, there’s neither a warning for how much time remains on the current slide, nor a preview of the next slide. If you’re accustomed to board-room style speaking with a forgiving remote, secondary screen full of notes/widgets, and 5-10 minutes of “padding” at the end, the Ignite format is a cold glass of water to the nether regions.

    With a remote, keeping your verbal momentum lined up with slide advancement is relatively easy. You know exactly when your verbal punchline is going to come, and just hit the remote a split second before you say it. But in Ignite, the only way to get your voice and slides anywhere even remotely in the same synchronization ballpark is to practice the bloody hell out of it way ahead of time.

    And when you’re done practicing, take a break and practice some more. Practice going slower and having to catch up. Practice going too fast and having to ad lib a few extra sentences here and there to fill “dead air”. Practice without any “next slide” or timing aids. Lather. Rinse. Repeat.

    This is not to say that you should script the entire thing. Scripting sounds unnatural and dull. You should, however, know the subject matter inside and out, and know the outline and “story arc” of the presentation so that when you stumble on words or get out of sync, you’ll be able to recover.

    For the audiences standpoint, your level of preparation will be abundantly clear. It’s obvious who didn’t have a verbal outline prepared; who didn’t practice for pacing; who did prepare but can’t handle being over/under time; how generally hard it is to time yourself versus a computer.

    And much of this practicing should occur before your slides are due.

    (2) Your slides need to be completed waaaay in advance.

    Ignite isn’t the only event that requires final decks to be submitted in advance, but I know that many of you are in the habit of staying up ’til 4am day-of putting the (hopefully) finishing touches on slides. You can’t do that. The Ignite superheros need your slides early to prepare their technical voodoo, and asking them to update a few slides at the last minute would be very, very lame of you. Getting your slides prepared and finalized early is critical since you can’t practice delivery without them, and once they’re submitted you should assume that you can’t change them.

    Get peer feedback before you submit your slides. My thanks goes out to Erica, Ben and Marc at OpenRain for providing the “you’re trying to say way too freakin’ much” feedback … it made the end result much better than it would have otherwise been. Peer review is always difficult to do, but discovering why you’re epically fail-sucking is the only gateway to improvement.

    (3) You don’t get to rehearse in the venue.

    The Ignite (Phoenix) folks want to keep your delivery fresh, natural, and full of adrenaline to showcase your passion. This is a good thing. Just be aware that you probably can’t walk out on stage beforehand for a quick run-through by yourself.

    (4) Your bar is high.

    In general public speaking, the audiences wants you to succeed. And when you’re speaking to an audience that is present for your message–such as Ignite–they’ve already built expectations of how awesome your message and delivery will be. If the message(s) couldn’t sell, there wouldn’t be an audience. You are expected to be awesome.

    I’ve yet to meet anyone that says “Ignite sucks”, but have heard plenty of “Oh, it was awesome, but remember that one guy/gal? He/She was horrible.” Don’t be that guy/gal whose idea of originality is to do zero preparation and just “wing it” or divert from the slides in a otherwise distracting, unprofessional mess. People come to see great ideas from passionate, knowledgeable people, and it’s going to take some work to get that across in Ignite’s concise format.

    Ignite preparation checklist. (Sorted by due date.)

    1. Well thought out proposal submitted.
    2. Talk accepted.
    3. Slide draft and verbal outline complete.
    4. Peer rehearsal and feedback.
    5. Adjust.
    6. Final sanity check.
    7. Submit final slides.
    8. Practice.
    9. Sit in parking lot for 15 minutes before event practicing by yourself. (Strange looks from passers by expected!)
    10. Be excellent.

    You have the idea and the passion. Now go show us! (Just keep it brief.)

  • MinoHD 720p Digital Camcorder Review

    flip_minohd
    While no one wants to see your entire 180-minute reenactment of Hamlet, it’s nevertheless nice to have a camcorder handy once in a while. Usually I’ll bust out a pocket-sized Canon SD750 when I need a couple minutes of motion capture, but the SD750–as well as most other low-end digital cameras–aren’t fabulous at video, and can have issues recording single streams over a couple minutes. I’d love something in the prosumer class, but I simply don’t need video recording enough to justify the cost. And even if I did, I wouldn’t be able to fit it in with my normal photography equipment.

    The MinoHD is a 720p, 30fps, all digital video recorder roughly volume equivalent to an iPhone: thicker but narrower. Video is encoded in variable bit rate H.264 with AAC audio. (Perfect for use on a Mac.) 4GB of internal flash memory holds about 60 minutes of video, but the storage is neither removable nor interchangeable. The battery is also internal, and charges from the USB connection automatically. A tiny color LCD screen allows for playback and deletion of recorded videos, and provides no special recording effects such as useless cheesy color filter nonsense typically present on consumer camcorders. Costco retail pricing is $179.

    Recording a movie is as simple as turning it on and pressing the big red button. Hit the big red button again to stop. It took me approximately 10 seconds to master the process. (An intelligent dog could be trained to do the same if the buttons were bigger.) Use of the “FlipShare” software is not required to transfer video off the device. Just plug it in to a USB port and move the files off. If you choose to use FlipShare, it provides basic video management and editing capabilities, and appears to be necessary to update the MinoHD’s firmware. I’m using FlipShare for now, but like the option of not using it.

    Pros

    • H.264/AAC.
    • 720p.
    • USB connector built in. (No need to carry a cable.)
    • Inexpensive.
    • Rediculously usable.
    • PC/MAC friendly.
    • Solid-state.
    • Light and small.
    • No special software required for day-to-day use.

    Cons

    • Less than 1080p.
    • No built-in light.
    • Cannot upgrade flash storage.
    • Battery cannot be changed.

    Verdict

    Highly recommended for those wanting a cost-effective HD camcorder for light, periodic use.

  • Three Beers, Three Originals Live Originals

    Here’s three original songs from a small set I played a few weeks ago with some friends. If you’ve ever wondered if there is a connection between alcohol consumption and complete loss of control over your vocal chords, behold: undeniable scientific proof. Soooooo, let’s just ignore the crappy parts, mmkay? 🙁

    Lies (Preston Lee, 2009)

    In Times Of Trouble (Preston Lee, ~2008)

    With Whatever Time Remains (Preston Lee, 2009)

  • OpenRain's First Commercial Product In Production

    I feel like I’ve come to know you quite well over the last few years. It was a rocky relationship at first, what with you not paying attention to me and hanging out with your friends too much and all. But ever since you started taking better care of yourself and dressing up a bit before reading me, we’ve become closer than ever.  You see, you and I — me and you — are sharing an intimate connection right now through the Internet. We’re two bits in a byte. Open and close braces surrounding an “<3”. Venerable electronic soul mates.

    And because of my undying love for you, Ms. (Mr.? 🙁 ) random person on the internet, I’m going to share something with you that I’ve never shown anyone publicly before…

    My company’s first commercially available product: The Online Business Platform from OpenRain.

    OpenRain’s managing superwoman may have had a small stroke when I told her she had to produce and post-produce this video, but I think I made her feel better by offering to take all the credit if it turned out well. I’m disappointed that the stunt scenes and Clive Owen guest appearance didn’t come through, but… recession and all that… or at least that’s what I inferred from her half-paralized drooling. So without further ado, please enjoy this awesome video demo of the Online Business Platform that I did all by myself… or not.

  • Desert Code Camp 2009 Session Materials

    Thanks for the love this past weekend at Desert Code Camp! Here are the presentation materials used in both my sessions…

  • Preston's Business Razor: A Stakeholder Perspective On Pair Programming

    xplogoPair programming is an activity of eXtreme Programming (XP) wherein two developers work in conjunction–often physically seated next to each other with a single keyboard and mouse–to solve the same development tasks as a single mind. Having developer pairs tackle complex tasks can go a long way towards…

    • Increasing personal productivity.
    • Reducing defects.
    • Minimizing misinterpretation of requirements.
    • Improving designs.
    • (Many other benefits.)

    As a developer, pairing make mountains of sense. Most tasks in the development world can be improved in a direct, obvious way.

    The business perspective, however, is somewhat different. While any give client or manager will say “yes” if they want to see the above occur, a pragmatic developer presenting pro-pairing arguments must, more importantly, provide evidence that stakeholder–not developer–outcomes improve. Let’s look at a few different stakeholder perspectives individually…

    Return on investment.

    moneyThe common pro-pair argument of “increasing personal productivity” is, unfortunately, a deceptively irrelevant point when it comes to ROI. Business stakeholders will always want to increase productivity, but only if it improve project value per dollar, ceteris paribus. Individual productivity and overall ROI and not always proportional… but we’ll get back to this in a minute.

    To play devil’s advocate, let’s create a extreme, cynical analogy by playing stakeholder to a small project that can be run in one of two ways…

    1. Two expert developers arduously working for 2 man-months to complete a small project for a total business cost of $20K.
    2. One hundred college interns assigned into 20 5-man teams, each trying to create a solution equal to or better than the above team could, estimated at 100 cumulative man-months (50x the development effort, but free because they get college credit) plus one man-month of project management and a half-man-month of additional overhead to simply identify the best developed solution. Total cost: $15K.

    Now, this latter case is clearly an extreme fabrication of how real-world projects run, but does highlight a Occam’s Razor-like rule for business types…

    If presented with two approaches with equal outcomes and equal risk, chose the cheapest. (Aside: This is not argument for crowdsourcing.)

    In the latter case, overall productivity, code quality of a random line, design quality and other factors from a random intern will be horrendous. We’ll probable end of throwing out at least 95% of the code. But here’s the kicker… it doesn’t matter. From a business perspective we don’t care about the 95 interns that can’t tell a hard drive from an iPhone. (It’s a problem for another day, at least.) We do care about the 5 brilliant interns that teamed up, overcame the mediocrity of their peers, created something truly magnificent, and saved the company $5K. Despite bad individual productivity, the overall outcome is positive and at an overall lower cost. If we had to apply Preston’s Business Razor to this scenario, there is a clear winner, and it’s not the “ideal” one.

    Why is “two” the ideal number?

    kittens_huggingIt’s not… except when it is.

    In economics, there are a series of concepts related to production possibilities, allocative efficiency, Paredo efficiency etc. that can be applied to engineering: using a group of individuals to maximize the production of various outcomes with limited resources. Here’s a simple empirical experiment that you can run using a group of 15 people and a good 30 minutes that touches on some of these concepts.

    1. Print out instructions on how to make an origami cube, give them to each person, and make sure everyone can make a box on their own. Instruct everyone to make as many fully-assembled, respectable boxes as possible in 5 minutes. Some will be great at it, others less so, and maybe a few that just can’t do it. Don’t count the crappy-looking cubes. Figure out the average time to build a box across the group. This is our “baseline” number that we’re going to try to beat.
    2. Break the 15 people into 5 groups of 3. Each team of 3 will now produce boxes assembly-line style, requiring each member to master specific parts of the process. Measure the production capabilities of each team in 5 minutes and again find the average time to create a box across the entire group.
    3. Reform everyone into 3 groups of 5. The assembly lines will be longer, requiring everyone to become even more specialized in their responsibilities. Again let the groups run for 5 minutes and compute your output.
    4. Lastly, form the entire group into a single, massive assembly pipeline of 15 people. Time the group and compute your output.

    origami_cubeWe now have 4 data points in how to maximize the production of the group, as well as some interesting observations. First, in all likelihood, the best overall production probably came in one of the middle two trials. People were forced to specialize, but not overly so to the point of awkwardness. Second, having 15 people do a task with less than 15 significant steps is really awkward. People specialized to the point of meaninglessness; issues in the pipeline blocked way too many people; the shear overhead of literally moving paper around defeated the point of specialization. Third, each group had its own characteristics. Some may have been so productive that they blew away the baseline quota, while other in similar sized teams simply could not work together due to process issues, personality conflicts etc. Each group probably also adapted within those five minutes to maximize the groups output based on who was faster/slowest, and best/worst at folding. Some groups may have created a “manager” role to correct critical pipeline issues, pitch in a few folds when someone gets behind, or fix the “broken” boxes. When in a massive 15-person pipeline, some may have gotten frustrated and wanted to split back into smaller groups.

    Let’s put it into a real-world perspective by taking an arbitrary task from an issue tracking system: “refactor foo to support bar.” This task has it’s own optimal number of concurrent developers that will be unique to the team. For a group of interns, maybe it’s 5.5; for a team of superheros, 1.2; for my team, maybe 2.4. This specific task and specific team has its own distinct production characteristics (even though the task only needs to be done once), and only in very rare cases will the optimal number of people assigned to it be exactly equal to 2.0. The point is this…

    Asserting that a “pair” of people is always optimal is just as absurd as asserting groups of 1, 3 or 4 are always optimal.

    The number is unique per task, per project, per team, and understood outside of computer science when looked at from a businessy economic perspective. So from a stakeholder viewpoint, use of pair programming is absolutely acceptable (and even preferred) when optimal over other options.

    Experienced engineers inherently understand that some tasks require multiple minds to collectively discuss difficult challenges, debug complex code etc., and don’t hesitate to seek additional eyes when it feels right. What we should not do is cling to the notion that “2” is a magic number that should be used without contextual consideration. Maybe it’s 3… or 1… or 7… there is no universal constant that can predict this number, and it’s ok that it varies per task.

    So for now, let’s put aside this arbitrary “2”, and instead rely on our experience, higher-level intuition, business strategy, basic metrics and strong understanding of our peers strengths and weaknesses when deciding when to pair.

    Preston

  • Running A Small Business, In Three Words

    1. Relentless.
    2. Dehabilitating.
    3. Stress.
  • My FonWallet Story: Making It All Public

    Update: April 26th, 2009. I’ve had a few brief conversations with Todd over telephone and IM, and have offered to cease pursuing both judgments and remove this post from this website provided a prompt, reasonable payment schedule for the personal judgement against Todd. He has committed to proposing me a payment settlement plan by the end of April, 2009. I am currently awaiting this documentation.

    There are several areas of this post in which he has taken issue. Since many people have already read this post I am hesitant to silently change copy, so for readability purposes I have highlighted that original copy in bold, followed it with additional personal commentary in square brackets, and Todd’s verbatim remarks in curly braces.

    Update: November 1st, 2010. I recently had a phone conversation with Todd, who stated a payment schedule should be possible in the near future. I’ve yet to receive any follow up of meaningful action.

    Update: December 1st, 2010. Very minor typographical corrections.

    —-

    I’ve avoided writing on this for a year and a half now, but have been pushed to do so by several inquiring minds over the past year and a half not affiliated with the company. Some documentation on this can be found in public record, and some not. I will note the points on which I’m speculating. None of this information is covered by any NDA I am under.

    The company under discussion is generally known as “FonWallet”, though the official legal entity has changed numerous times and is fairly tangled in the personal affairs of one of its owners, Todd Coulter. {Todd, April 16th, 2009: “This is totally false, inaccurate and easily proven”} [Preston: April 26th, 2009: When I first became involved in the project, most important assets at the time seemed to have direct ties to Todd, personally, rather than the company: such as bank accounts, server assets, and vendor accounts.  At the time, at least, there were a handful of different entities that all centered around Todd… A few I recall were FonWallet Payment Solutions, Inc., FonWallet Payment Solutions, Ltd., MBXIP, SipCellNet… possibly other I do not remember. I do NOT have detailed knowledge of the activities of those additional entities, nor do I make ANY claims as to how–if at all–they currently relate back to FonWallet. Also note that I still have the original stock certificate log books for FPS, Inc. and FPS, Ltd.] I have neither vindictive nor harmful wishes against anyone affiliated with the company: only to be compensated for my work.

    I personally performed a significant amount of work for FonWallet, at the time known as FonWallet Payment Solutions, Inc. and now known as FonWallet Transactions, Inc., largely in the first half of 2007. It is a startup operated largely in Phoenix. {Todd, April 16th, 2009: “This is again totally false, inaccurate and easily proven”} [Preston: April 26th, 2009: I personally know more than a few people of current and former involvement with the project that are local to the Phoenix area. Whether or not Phoenix now represents a majority of the projects efforts, I do not know: simply that there is a significant amount of work being done in Phoenix. With regards to the entity primarily associated with the project, all current documentation I can find–including the FonWallet.com website itself–leads me to believe that “FonWallet Transactions” is now the preferred nomenclature. This could be wrong, but from the perspective of a reasonable outside observer, this definitely seems to be the case.]

    Employees/Contractors of the company were initially paid as promised, however, dollars dried up around summer and most of the concurrent staff stopped received compensation. The only reason some of us stayed on as long as we did was due to a personal guarantee made by Todd Coulter to personally cover the staff debts if the company were not able. Soon thereafter I moved on. Others stayed. As far as I know, none of the compensation owed across that period has ever been paid, even though the company has been in operation under a new name. I am aware of at least 2 others people owned money by Todd Coulter, personally.

    Mr. Coulter eventually became completely unresponsive to inquiries on the matter, which prompted me to file suit. (AFAIK I’m the only that did so.) Mr. Coulter did not respond to the suit. A motion for judgment was made on 12/12/2007, and ruled upon in my favor shortly thereafter.

    Two suits were actually filed, with myself (Preston Lee) as the plaintiff for both. The first names FonWallet Payment Solutions, Inc. as the defendant with a ruling of $71,324.32. The second names Todd Russell Coulter personally as the defendant, with a ruling of $24,044.32. The sum total is $95,368.64. I suspect that the company name change was made, at least in part, to avoid having to pay these debts.  {Todd, April 16th, 2009: “This is totally false, inaccurate and easily proven”} [Preston: April 26th, 2009: This is purely speculation on my part, and to be honest, I hope is completely wrong. I do not have insight as to the specific reasons for the creation of a new entity (FT, Inc.), except for the knowledge that the old one (FPS, Inc.) was out of money, had a ruling against it for $71K., and the stock books were were in the possession of the guy (me) who filled suit. Again, I hope I’m wrong about this, but I haven’t been provided with any reasons to believe otherwise.] To the best of my knowledge, Mr. Coulter was properly served on both accounts but neither notified the other owners of the company nor made attempt to respond to the suit.

    Regardless, the latter ruling still stands, and I have tried numerous times over the past several years to settle the matter and collect compensation for the months of work and expenses that I am personally owed. I wish all those affiliated with the company the best of luck, however, this matter is certainly not “closed”. There are some interesting and challenging concepts involved and I wish the staff the best of luck. I write this note as a friendly, public attempt to settle this matter once and for all.

    Relevant public legal documents are available from Maricopa County, Arizona. If anyone–specifically Todd Coulter–would like to the discuss the issue with me directly, you can reach me direct via email or my cell.

  • Captain Preston McAwesome Lee

    Right now, in an alternate quantum reality, I’m laughing my ass off…

    name_entry