Friday, December 17

Consulting Rates, Building Tech Teams

Great conversation going on on the New York Tech Meetup (NYTM) mailing list regarding building tech teams and hiring/contracting developers and CTOs; I feel obligated to quote Jonathan Vanasco, acting CTO of an IAC property:


Having an 'agency' contract you developers in NYC is 150-275 /hr. It makes sense to do that when you don't have the time to assemble a team from start.
It's an employee market right now. 8+ years experience can be from 120-200k base, with a bonus on top. Hourly you'll expect 100-160hr.
Yes you can find people who are 40-80/hr -- but they almost always lack the experience and skills to bring a project to fruition on time , budget & expectations -- that's why they're still entry level. If you have a solid CTO or some Sr devs -- then sure, hire the junior people and develop their skills. Otherwise, what the fuck are you thinking? Stop trying to cut corners on your own product.
For a "CTO" to come in, its all over. Rates are different as well, esp with equity packages. My compensation from Startups is vastly different than what Corporations pay me.

Friday, November 5

SOLVED: 5GHz 802.11n networks not showing up with Dell DW1520 wireless-N adapter

In rebuilding/building out my home office network, I've been adding some wireless-N equipment that finally seems reliable -- the Netgear WNDAP350 and WNDR3700. After poor experiences with N since late 2007, I had purchased a new laptop (Dell Studio) in May with a G-band wifi card only. My more recent, happy experiences with N led me to purchase a replacement mini PCIe 802.11n adapter from Dell - the DW1520.

The adapter arrived yesterday, and I of course eagerly popped open the back of my Windows 7 Ultimate x64 laptop to install it. Everything in place, machine rebooted, and ... it got a great signal from my G-band access points, but not a sign of the N-band APs.

I rebooted the PC, the router and the AP, all to no avail. No sign of the Ns. Did some research online, found problems with previous adapters in the series, but researched the Broadcom component on the DW1520 to find that 5GHz was, in fact, supported. I was stymied.

Hours later, I took another stab at it. In reviewing the driver settings, I found that my Location value was set to Japan, and I had no way of changing it! Recalling the multiple sets of localized drivers on the driver CD provided by Dell, I made the lucky assumption that Windows had found the wrong set of drivers and regional telecom/wireless compliance mismatch was probably interfering with the adapter finding my 5GHz networks.

I uninstalled the network controller and driver via Device Manager, making sure to specify the Windows should delete the driver software to ensure I replaced it with the properly localized binaries. Scanned for hardware changes, specified browsing for the driver, made certain to select the Win7\DRIVER_US folder for searching.

Voila! The wifi adapter reinstalls painlessly, and this time my location is correct:


Now connected to my nearby N-band AP with speeds of up to 300mbps (varies):


Tuesday, October 5

Now Tumblogging ...

Been playing with a tumblr microbog instead of this Blogger blog. Conclusions yet to be drawn. Join me over there as well.

Sunday, September 19

And in other new tools testing, today it's Amplify's turn. http://bit.ly/aRk0bf

Tuesday, September 7

Venture capitalists tire of Twitter-y start-ups

In addition to these theories, I would also guess that developers have realized that Twitter could simply replicate their feature sets and make their client/service the default choice. This is of course, Twitter’s prerogative, and is also the risk developers undertake when building for a platform they don’t control.

I have no doubt that Twitter wants an ecosystem to thrive around its platform, much in the same way that Facebook wants an ecosystem around its social network. However, as I wrote all the way back in July of 2008, VCs must wise up to the fact that investing in accessories that can be reproduced and easily packaged as part of a core offering may not be the best business strategy.



link:
Venture capitalists tire of Twitter-y start-ups – CNET

Sunday, August 29

Beloit College Mindset List - 2014

Beloit College Mindset List for the entering class of 2014


Beloit, Wis. – Born when Ross Perot was warning about a giant sucking sound and Bill Clinton was apologizing for pain in his marriage, members of this fall’s entering college class of 2014 have emerged as a post-email generation for whom the digital world is routine and technology is just too slow.

Each August since 1998, Beloit College has released the Beloit College Mindset List. It provides a look at the cultural touchstones that shape the lives of students entering college this fall. The creation of Beloit’s Keefer Professor of the Humanities Tom McBride and former Public Affairs Director Ron Nief, it was originally created as a reminder to faculty to be aware of dated references, and quickly became a catalog of the rapidly changing worldview of each new generation.

The 10 People Who Follow Me That I Won't Follow On Twitter

1. Social media 'gurus,' 'ninjas,' 'rockstars,' 'samurai' or 'experts.'
2. Multi-level marketers (MLM) or affiliate program marketers.
3. SEO 'gurus,' 'ninjas,' 'rockstars,' 'samurai' or 'experts.'
4. The ignorant and/or the bigoted.
5. Non-conversationalists.
6. Porn 'stars' or porn spammers.
7. Self-proclaimed, no-name rappers.
8. Drama queens.
9. 80 million following to follower ratio'd.
10. No-name DJs/MCs/emcees.

Tuesday, August 24

SaaSGrid: Decoupled, shared storage in grids

SaaSGrid Shared Content Storage

When you're working in a grid environment like Apprenda's SaaSGrid, many people are uncertain how to deal with the need for shared state and shared binary content.

This is not unlike Amazon's EC2, though it should be noted that EC2 and SaaSGrid are not in the same category of offering -- you can run a SaaSGrid environment on top of Amazon's IaaS offering: EC2 VM images. SaaSGrid itself is a distributed application server and runtime for SaaS. EC2 is a cloud of virtual machines, part of Amazon's larger AWS suite.

With EC2, you do not have persistent storage locally on your virtualized AMIs -- when your AMI reboots or powers down, all local state is lost. Instead, Amazon offers Elastic Block Storage (EBS) for non-volatile storage of data and content used when bringing your AMIs online, database repos, etc.

Likewise, you cannot assume persistent local storage on any given SaaSGrid node -- any given request to SaaSGrid may take multiple paths to reach its destination, and any given node may leave or join the grid environment at any time. This is why SaaSGrid application development, and most other SOA architecture, best current practices dictate stateless design and implementation as much as possible. Some amount of state can be persisted in an out-of-process cache, such as memcached, but there is still often a need for a binary content repository accessible to all nodes.

I diagrammed this concept over on the SaaSGrid Developer Blog yesterday.

Product review: HTC Incredible accessories

Having had some time to exercise the case+holster, car mount and extended-life battery (yep, I gave in) for my HTC Droid Incredible, I am now prepared to render my verdicts.

First up: Seidio Innocase II Surface case + holster combo

Seidio Innocase II Surface case in matching holster for HTC Droid Incredible

Seidio remains one of my favorite mobile accessory brands. The Innocase II Surface is perfect -- light, great fit, great protection for everything but screen, (LOVE the camera lens protection!) and even with the case on, not too much bulk for my pockets, no pants dragging at the waistline due to weight. As such, I've had no reason to use the holster, which was an unwanted but pragmatic requirement since the days of my brick of a HTC Hermes some five years ago.

Two thumps up! Three if I had a ... three!

Next up: Arkon universal car mount

Arkon Universal smartphone car mount

I had hoped to use the Arkon in a vent-mount configuration, but in my 2001 Blazer, that's a no-go. I'm not sure if it is the Blazer's vents, the Arkon's vent clips, or a combination of the two, but this is just not a sturdy setup. I have not had a chance to try the suction cup, I'm not sure I really have a convenient area for it, but will try soon and report back. All in all, not thrilled with Arkon. The part that holds the smartphone is snug, I do like that, but the rest of the kit seems flimsy.

No thumbs up at this time.

Finally: Seidio Extended Life 1750mA battery

Seidio red extended life battery for HTC Droid Incredible

Back to Seidio! I decided to trust the brand and cough up the cash for the 1750mA battery, 400mA more than the standard battery provided for the Incredible by HTC. Not the beefiest extended life smartphone battery out there, but I did not want to disturb the Incredible's awesome sexy slim & convenient profile, especially not with the Innocase II Surface in place. I wasn't sure this was going to be worth it. I'm still not certain it was. I haven't run out of juice in the middle of the day since I swapped in the extended life battery, but that could be better battery management and charging practices (screw USB!) on my part as well.

I'm going with one thumbs up on this one. I think I'm seeing increased battery life, but it could be wishful thinking as well. It has not been a total disappointment, but I'd rather have spent $20 on it than the $59 I seem to recall dropping.

Monday, August 23

Windows 2008R2: Windows Update stuck at 0%

Windows 2008R2 has finally let me down. For some time now it has been my most-favorite Microsoft OS since MS-DOS 3.0. Administrator- and developer-friendly, stable, performant, reliable. Until now.

For a week or so now, since the off-schedule high-priority Microsoft updates 2-3 weeks ago perhaps, I have had a six-month young Windows 2008R2 Standard (x64) machine (Hyper-V image) that refused to download updates. Despite doing some minor cleanup, service tweaking, rebooting a few times, it was just plain stuck.

Windows Update stuck at 0% downloading status

I didn't see any apparent system errors or Windows Update specific entries in the Event Viewer - Windows Logs, System or Application. There were, however, a number of TrustedInstaller errors:

Windows TrustedInstaller, ntdll.dll event viewer messages

Though I had not had the "opportunity" to experience an issue with Role Management, I was simply concerned with getting Windows Updates back to up-to-date, after days of frustration I came across this MSDN forum post that led me to a working solution.

I worked through all steps of the post marked as answer, finding that an in-place "upgrade" was apparently the only solution that worked in my scenario. This is rather disappointing -- up until now, Windows 2008R2 had never failed me.

Wednesday, August 18

SaaSGrid Blog: High Availability SaaSGrid

I just posted a blog on "High Availability SaaSGrid" on the SaaSGrid community site. In IIS7+ we now have "Application Request Routing" (ARR) and the "Web Farm Framework" available to facilitate deployment and management of high availability IIS webfarms (clusters).

Tuesday, July 20

Desktop Web is Dead

I've had an emptiness inside me for a while now. The kind of cold, dark, gnawing emptiness that can only be filled with a fresh hit of sick software and/or tech.

Unfortunately I have not encountered any truly compelling apps via my desktop experience in many months now. Perhaps going on a couple/few years.

Desktop web ... and perhaps Web 2.0 as a whole ... are dead.

Know where I _have_ finally found that rush? My mobile experience since going Android, and switching to a mobile network with actual coverage (Verizon).

I'm getting my hit of tech not just from social or entertainment apps these days, but from the utility experience perhaps most of all. Apps like Google Maps, (especially with enhanced navigation in Android 2.1+) Evernote, GMail and the HUGE convenience of having all my contact info & photos/avatars combined into effectively one mostly usable, visible, format -- FINALLY -- is giving me at least twice the kick Twitter did when I "got it" back in '07. And then you've got the mostly as-yet unrealized potential of augmented reality apps that truly excite me.

In short, the mobile world is, at long last, maturing into an indispensable part of our daily lives as more than just a simple phone -- I finally feel like I can leave my PC behind some part of the time, and yet still be in touch with what I need to have access to for personal and work communications. The mobile entertainment experience is even gaining some traction with me.

Despite searching fairly long and hard, it has been a long time since I have had a compelling experience with a web app, particularly from a desktop perspective. Twitter is past its peak as far as my interest level goes. Twitter and Facebook remain useful points of contact, useful venues for lifestreaming, but they are no more intriguing to me than LinkedIn or CNN at this point, and the volume of noise makes it hard to find quality signal like the "good old days." (Anyone else miss Friendfeed from waaay back? Pre-Facebook purchase? Pre-early majority noise?)

The existing social media landscape becomes far more interesting when access is made ubiquitous and near-seamless by the latest generation mobile devices -- but even then, I feel like the overall importance or prominence of any one conventional app is diminished. It no longer matters if you are only on Facebook OR Twitter (substitute any number of social media apps/networks) because the device in my hand either combines, or makes equally accessible, your profile and communications in any of these media, networks and/or apps.

To an extent, it feels like we are on the threshold of some truly powerful handheld devices that will take our mobile experience, and our use of technology in our daily lives, to "the next level." Augmented reality that is not limited to a ~4" screen. (3D video calls and HUD GPS navigation via the one-device-that-does-everything-a-person-needs? Always-on peer-to-peer networks? Think of the possibilities! Auto-reroute around weather, accidents and construction in real-time based on reports from traffic ahead of you? Avoid restaurants with long lines? Find parking spaces? Food delivery to your location, not an address? Obviously there are security concerns ...)

What's the next great networked experience on the horizon? Is it desktop or is it mobile? Is it an existing app that no one's heard of yet, or perhaps an as-yet unexploited technology, platform or medium? Is technology holding that next wave back? Does Web 3.0 == mobile+augmented reality?

EDIT: A few notes. Threadsy is a handy way to combine things, but the experience does not light my fire. I never really got into Twine too hard before they got gobbled up by Evri. Quora I have recently found very interesting, but not life-changing. Rdio is nothing special.

Sunday, July 18

13 Bankers: The Wall Street Takeover and the Next Financial Meltdown

13 Bankers: The Wall Street Takeover and the Next Financial Meltdown13 Bankers: The Wall Street Takeover and the Next Financial Meltdown by Simon Johnson

My rating: 4 of 5 stars


A decent read, though not earthshaking if you have read much else in this genre. For instance, the author mentions trader-turned-law-professor Frank Partnoy and one of his works on the subject - the ground-breaking FIASCO, Blood in the Water - where Partnoy surfaces the use of the phrase "ripping his face off" when it came to traders burning clients and making huge piles of cash while doing it, and does some of the first modern-day muckraking around derivatives and those who profit from them.

That said, 13 Bankers is a broad work that does an excellent job of chronologically telling the story of how our fat pig of a financial system got to be where it is today. It is a story of greed, lobbying, more greed, loose regulation, under regulation, you-scratch-my-back-I'll-scratch-yours lack of regulation, enforcement and serious prosecution or penalty ... and more greed.

One area that 13 Bankers illuminates well is the grotesque growth in salaries in the financial services industries since the end of World War II. Shameful and greedy, no other way to look at it. This growth mirrors the rather inorganic growth of the megabanks themselves, from once-manageable entities contributing to the growth of Main Street to the greedy Goliaths they are today.

The American government, both through active collusion and passive failures to act, has failed its citizens, and the world at large, when it comes to reining in this monolithic industry full of "too big to fail" corporate entities who happily make money off the back of the rest of America. 13 Bankers is one of those works that is destined to make you angry.

If you have read no other nonfiction work about our modern financial system, 13 Bankers is the right place to start. If your reading list on the subject is more comprehensive, 13 Bankers is worth consideration, but not a must-read.

View all my reviews >>

Monday, June 28

HTC Incredible: Accessories: Case, holster, car mount

After a couple false starts, I finally ordered a few accessories for my much-loved Verizon HTC Droid Incredible:

Seidio Innocase II Surface + Holster combo:

Seidio Innocase II Surface case in matching holster

I had the Seidio holster for my old AT&T TyTn II/HTC Kaiser, and I LOVED it -- best built, most rugged, tight-gripping holster I've ever owned. I expect great things out of the Innocase II + holster combo. I've dropped every cell phone I've ever owned; how I've gone nearly two months without dropping the Incredible is beyond me, and I'm done with trying my luck. I'm concerned about the case, the screen and the camera lens. Seidio's Innocase II appears to address case and lens issues, but I wonder about the screen. I may yet get one of those film protectors; last time I tried one was three or four years ago, and they were crap. I hear they've come a long way however.

Tip: you can get this $10 cheaper, and with free shipping, from Amazon.

Arkon Universal Windshield/Dash/Vent mount:

Arkon Universal smartphone car mount

I'd seen a cupholder-mounted car mount, but I couldn't seem to locate it today. For $16, I'll give the Arkon a try.

I am still tempted to upgrade my battery, but $25-$70 for a 1750mA battery -- an upgrade to a mere 118% original capacity -- is a tough sell, and going bigger would mean blowing out the back panel/battery door, and possibly not fitting in cases and holsters. For now, a beefier battery remains on my wish list.

Thursday, June 3

We're hiring! Apprenda seeks another Client Services Engineer

We're looking to hire another engineer into my department at Apprenda. We work in post-sales, client support, training and professional services. We work directly with clients, we travel some 20-40% of the time, nationally and internationally. (I was in Denver and then San Diego the other week. We've got a guy in the UK right now; 2 others were in the UK a month ago, and the same guy now in the UK was in Paris for 3 months last year.)

I currently spend 20-30% of my time coding, and the rest of the time dealing with clients by phone, email, Skype or on site. I expect us to be doing more coding moving forward as we institute a standard POC & on-site training package as part of our engagements.

This is the first place I've worked (and I've worked many places) where I wasn't clock watching by the end of the first week -- and that includes my time with Xerox and IBM. We completed a $5M funding round a few months back. The company is healthy and growing, defining processes and procedures, figuring out how things ought to be done. It's an exciting time to come on board.

I'm one of the few "hardcore" .NET guys -- we have several people, some complete converts, with lengthy histories in Java and/or PHP, some C++ as well. (But no, no Ruby guys, to my knowledge :)


The bit about us
Apprenda is the creator of SaaSGrid, the industry’s leading Application Server for Software as a Service (SaaS). SaaSGrid solves the upfront and ongoing technical and business challenges of delivering software as a service. We're a hi-tech leader in a rapidly evolving technology space. We were just recently honored with the CEG's Rising Star Award.

The bit about you
We're looking for a Client Services Engineer.

The Client Services Engineer is responsible for ensuring an optimal client experience with SaaSGrid by proactively and professionally managing client information requests, technical support questions, and custom software development projects. The SaaSGrid client engagement is a highly technical process that requires skills in a variety of software development and infrastructure disciplines. To be clear: you will be writing code, and you will be configuring servers. You’ll then interface with clients via email, phone, community websites, and more during all phases of the client lifecycle. Many of our clients are new to the world of software as a service and have chosen SaaSGrid as a foundation - they will look to you to lead the way. Specifically, you'll be involved in the following:

SaaSGrid installation and configuration
Customer training onsite and remote (the position is roughly 30% travel - domestic & international)
Application development guidance and SaaSGrid best practice enforcement
Customization and extension of the SaaSGrid platform
Moderation of public community websites for SaaSGrid developers
The Client Service Engineer is a SaaSGrid knowledge base expert to all clients with whom he/she is engaged. You’ll lead webinars, trainings, and more. We’re looking for the unique combination of technical astuteness and personality!

Qualifications:

BS or MS in Computer Science or BS or MS in another science or engineering discipline with significant practical software development experience(minor or dual degree that includes a Social Science a plus)
A solid foundation in computer science, with strong competencies in software design, systems architecture, and data structures.
Strong OO skills and practicing knowledge of OO languages
Several years of large systems software design and development experience (extensive knowledge of Windows based environments preferred)
Coding skills in C#, Javascript/AJAX, and SQL preferred
Practical knowledge of WCF & ASP.NET preferred
Practical knowledge of Windows system administration preferred
Strong writing and interpersonal skills required (You MUST be personable!)
Quick “on your feet” thinking and the ability to be creative in tight situations
The position is located in our headquarters in Clifton Park, NY. Relocation to the Albany, NY area is required.

One more thing
Tip: Along with your resume, send us a brief explanation of how dependency injection might be used in a billing system accepting multiple forms of payment. We just might move your resume to the top of the stack.

Email resume & other material to: job-tjxvf-1772851493@craigslist.org

Wednesday, June 2

Monday, May 17

Google Autocomplete: scary!

A friend emailed me this Google Autocomplete via the Firefox search bar of the phrase "Can I":



And Google Autocomplete in Chrome showed _me_ this:

Sunday, May 16

Review Followup: HTC Incredible on the road

I've owned the HTC Incredible from Verizon for a little over two weeks now. I spent a week traveling from Albany to Denver by way of Cincinnati, then Denver to San Diego, then back to Albany via Dulles. Along the way I encountered a few other happy new Incredible owners, as well as a lot of recognition of my Incredible by non-owners. I think I converted a few to soon-to-be owners as well. Everyone loves it, even Blackberry and iPhone 3G owners -- and ESPECIALLY WinMo owners. (Joe, I'm lookin' at you pal ;)

Signal in Albany, Cincinnati, Denver and San Diego airports was good to great; signal in Dulles was EXCELLENT, at least in the United terminal. Reception in general in all these cities was reliable, 3G included. Denver International Airport might have been a bit of a 1X zone however.

Battery life continues to be a concern for me, as well as a few other otherwise overjoyed owners I spoke with. I'm debating a +200mA upgrade battery that fits under the OEM cover. I'm also debating a 2100mA upgrade battery that requires a matching, bloated aftermarket cover. I think it would be unfortunate to disturb the beautiful lines, the compact profile of the Incredible however, and as I'm now looking at skins and cases, I don't want to mess with fit. The marginal utility of a $50 standard-fit 200mA upgrade is highly debatable however.

One note: a lot of apps execute in the background without explicit user activation. Using Advanced Task Killer, regularly wiping out resident background apps, I do seem to get better battery life, but not great. I'm working on uninstalling a bunch of useless apps I added, in the hopes that less background app activity will lengthen battery life.

I am currently in love with GPS + Google Maps Navigation on this Android 2.1 device. One word: SICK!!!!!!!! Two words: fothermucking SICK!! No need for a separate GPS device for automobile navigation ever again. Other than some hiccups over direction retrieval after an update last week where since updating only explicit addresses seemed to work for navigation route lookups, Google Maps Navigation readily guided us from place to place with great navigation perspective and excellent, responsive recalcs and voice turn-by-turn directions in Denver and San Diego.

Search by Voice needs some training, but it has a TON of hands-free potential. Searching by location in general is an EXCELLENT way to find ATMs, gas stations, restaurants, hotels, parking, client offices. I am totally, completely in love with this heavily integrated set of map & navigation features, aside from its battery-draining potential.

On the road for work purposes, I was occasionally forced to tether, especially when "high speed wireless Internet" at Doubletree Golf Resort San Diego or Fairfield Inn in Denver was simply unusable, as it was numerous times in the few hours I spent awake in my room in either location. I am having difficulty with USB drivers, HTC Sync and Windows 7 x64; these do not seem to have been entirely resolved by installing Windows Mobile Device Center 6.1; I have not been able to get Verizon Mobile Broadband to work with my notebook yet. After installing WMDC 6.1 I was finally able to get PdaNet to work, which provided some much-needed, better-than-dialup connectivity at times when Doubletree's wifi couldn't get its act together. I have still decided that I, or the office, will still need to be investing in a 3G broadband card, but PdaNet and the Incredible over Verizon aren't a bad emergency option.

Typing is still a bit of a chore, but definitely getting more comfortable with it. I'm not disappointed at leaving the physical keyboard of the TyTnII/Kaiser behind -- not one bit.

Enjoying the beautiful sunny blue sky by the bay at Seaport Village in San Diego Friday afternoon, the screen on the Incredible was pretty much unreadable. That is a bit unfortunate, but using one's hand, and/or finding a bit of shade, is an acceptable compromise for me in an otherwise dynamite mobile device.

I would absolutely buy this phone again, and unhesitatingly recommend it to anyone looking for a new smartphone. I am exceedingly happy with both the phone and with Verizon signal and 3G broadband.

Saturday, May 1

Review: HTC Incredible

*inaccurate mockup pic removed :)*

HTC Incredible - sexy on both faces! HTC Incredible - super shiny screen. Too shiny? HTC Incredible - LOVING that AMOLED!

I have had the HTC Incredible from Verizon in my grubby little hands for about 20 hours now, approximately 15 of them waking. Here's my first impression.

As an AT&T refugee, the experience with Verizon to date has been EXCELLENT. Everything went smoothly and quickly and slickly. I was originally told a ship date of May 4th -- then an hour after I placed my 7:30am order, I got a shipping notification. Phone showed up at 1:15pm the next day. Activation and porting were both painless. Reception is excellent, the broadband experience is superb.

Now, let's get to the phone itself. Packaging was minimal. No extraordinary efforts required to open. I unboxed it at the Apprenda office, where our sales guy, Bob, former telecom guy, could hardly wait for me to get my own look at it before he virtually snatched it out of my hands for his own examination. Our CEO, Sinclair, who has had a Droid for six months or so now, was eager to check out the Incredible of course, though I think Bob was really the most eager out of the three of us.

The phone: incredibly light and compact. Battery came half-charged; case snaps open to install battery. Almost-perfect weight: I won't feel like I am holding a cinder block to my ear, nor will it blow away in the wind. (Remember the Motorola Q anybody?) It could be a tad lighter, but my beer muscles are in good shape, this phone should not present any fatigue issues when I choose not to use my Bluetooth headset. And, the screen? BEAUTIFUL. No other word for it. Great resolution and color and responsiveness. The phone takes a fair amount of time to startup, but it is certainly still an improvement over WinMo 6.1 boot times on my old TyTn II / HTC Kaiser.

Every one of my pain points with a six or seven year history of using WinCE/WinMo phones, almost all of them HTC along the way, seem to have been addressed. The power button has a great click -- no irritating, flakey power-off pushes like my HTC Kaiser and Hermes. Getting where I need to go, and getting "back," are perfectly enabled with the back or return physical button on the bottom/righthand side of the phone. The camera is fast -- fast to start, super fast to focus, fast to take a shot, fast to return to shooting. Just plain fast. And the pics are FANTASTIC! 8MP of awesomeness. And the optical joystick is a super clean way of triggering your shot -- none of those overly-tough buttons HTC used in the past that almost inevitably led to you jiggling the phone when trying to take a slow-to-shoot shot.

A shot from my morning dogwalk My lab-mix, Nick

I'm not sure what I think of the optical joystick yet. Still getting used to it. The touch typing, however, was a HUGE concern of mine. I'd stuck it out with physical keyboards for years, but I have grown tired of making the compromises that come with a physical keyboard. I wanted a big, beautiful screen in a slim-as-possible profile. No more physical keyboard.

So, how is the touch typing? Pretty darn good. I'm still making a few more mistakes on average than I would with my old physical keyboard HTC devices, but I suspect, especially when autocomplete is better trained, to be flying along at something a lot closer to my standard PC keyboard 95WAM.

Loose ends: GPS. EXCELLENT!!! Super fast to get your position, and it seems to track in near-realtime at a walking pace. Bluetooth: smooth. No contortions required for use. Everything. Just. Works.

Battery life? Don't know yet.

Apps: great pre-load, and a huge set of awesome free apps readily downloadable from the Market. I'll review specific apps sometime down the line, when I'm more familiar and have some standout favorites. Everything seems to run very smoothly and quickly with the right amount of OS and cross-app integration. Again: Everything. Just. Works.

EDIT: I almost forgot Exchange integration. So far, so good, but I have yet to test notorious calendar invite and attachment issues. Also, HTC Sync does not seem to play nicely with Outlook 2010. GMail integration however is awesome, so maybe I don't need to sync my PCs at all, since GMail/GApps drive all my non-Exchange mail already.

I think that about covers it for now, thanks for reading. Any specific questions, hit me up in the comments, I'm happy to follow-up!

EDIT2: Well, I just gave it a full workout in bright sunlight. My conclusions:

1. When you're shining a spotlight, or the sun, at it, yes, it's unreadable, as is any other screen, gloss or matte. A few angles tend to produce this effect, but it wasn't horrible.

2. In bright direct sunlight, reflection is present but not horrible; the bigger downfall for me was that the camera loses detail on-screen. However, I found that reading email and writing on the touch keyboard were still pretty easy. Visibility in sunlight really not a huge issue for non-video apps it seems to me. No, it's not eye-popping wow like it is indoors, but I find it to be very usable, at least in comparison to two older HTC smartphones I've owned.

Thursday, April 29

14th Annual Technology Awards Luncheon

Had to keep quiet about this for a few days until it was released, but I'm now happy to be able to say that Apprenda has won Albany's Center for Economic Growth's Rising Star award!

14th Annual Technology Awards Luncheon

Thursday, April 22

False pretenses - CEO Bullying II

My attorney believes that the scam/spam marketing emails apparently sent on behalf of CIO Summit may rise to the level of wire fraud - use of false pretenses over electronic communications to obtain ownership of another's property, in this case my money. Michael Price, CEOVentures, consider YOURSELF now on notice.

Wednesday, April 21

Oldie but goodie: narcissistic CEO bully threatens lawsuit

Nearly two and a half years ago I got some spammy, scammy marketing email, and found that I wasn't the only one. I reproduced it on this blog, found others had been similarly spammed, and over the time since have received many communications from other people who have been similarly spammed by these douchehats.

Overnight I got a random email, at my WORK address, (new, private, unpublished) from someone (Michael Price, CEOVentures) claiming to own the email/the domain/the organization, that it's not a scam. I replied, asking the guy to take the email to a non-work point of contact. He responds by CALLING me at the office, then follows up with more email saying that I need to retract my statement, send him notice I've done so, or he will file a lawsuit against -- get this -- not just me, but also my new-ish fulltime employer, who of course has nothing to do with this.

Classy! You fucking bully. Digging up my work email simply speaks to your spammer, scammer tactics. Your bully tactics are reproduced here for other people to laugh at as well. Go buy a clue, jerkoff. Typical sociopath CEO. Next time play chicken with someone who doesn't know the law and isn't willing and able to pay to defend themselves from bullies like yourself. Also, hire someone to educate you on how to market yourself and relate to a community, rather than dig holes for years on end. You're not going to erase the well-ranked Google results describing your asshole, spammer tactics if you keep riling people up with them.


************************************************
Hi Andrew, we are the owners of the CIO Summit which apparently you blogged about in error and the matter was escalated to me. They are definitely real, have hundreds of members, have been around for many years, and as proof I would like share with you recordings of dozens of past meetings with leading CIOs speaking which of course would be impossible to provide if it were the phishing scam you stated.

We demand that you immediately strike the posting which is libelous, defamatory, and needless to say there is significant liability to yourself personally and potentially your past employer Davis Vision where you made the blog posting from etc but let's not go down that route as it is wholly unecessary. I will send the content by separate email (check your spam folder due to all the links) and I will call you Monday morning. Thanks.


Sincerely,
Michael Price
CEO Ventures
770-998-9999
AIM:MFPrice MSN:MFPrice1
MPrice@CEOVentures.com
www.CEOVentures.com

***
My Reply
***
I'm not sure how you got this email, or why you chose to contact me at this email instead of the email link provided on the blog itself, but it certainly doesn't make you look like NOT a scammer when you start pulling <60day old private email addresses out of thin air. Don't bother me about personal matters on a work email address. Have some professionalism and I'd be happy to further consider your case.

***
Michael's reply after I hung up on his bothersome phone call
***
Andrew, I do not see your email at your blog nor do I have your personal phone so I am unable to contact you by alternate means as you asked (and thanks for hanging up on me, first time ever). You and Apprenda (Sinclair et
al) are about a week away from a law suit being filed, I would suggest you take down the defamatory blog posting and verify back when done. It is untrue and we have provided you evidence to the same.

************************************************

Bottom of the page, you lazy, self-important jerk. If you can't figure it out, well ... how'd you get to be CEO anyhow?

Saturday, April 17

Quotable: 10 types of people in the world

There are 10 types of people in the world: those who understand ternary, those who don’t, and those who mistake it for binary.

Sunday, April 11

Why I did not buy a MacBook Pro

On the ride back from Philly Code Camp 2010.1 yesterday, I purchased a new laptop from Dell.com's SMB section using my aging Windows smartphone. My current primary work machine is a 2.5ish year old Dell Vostro 1500. It has served me well, but its time is past. The backlight is dim and the performance just doesn't hold up to my needs anymore. Plus 15.4" and 1440x900 really is not enough real estate, though I do plan on sitting at my desk in my home office more, and running video out to a 24" Dell panel I've hardly used since I purchased it, also 2.5ish years ago.

I had been considering a new laptop for six months or so. I had really wanted to hop on the Apple bandwagon with a beefy MacBook Pro, and boot or virtualize Windows on it, because I would love to be running a BSD derivative as my base OS, and as a tech pro I would like to get to know the Apple bit of the technology world better. In the end however, I could not justify a ~50% premium in price for something that did not even meet, much less exceed, the specs of the lower cost Dell I ended up with.

With development as a primary activity, and code and other client and user group/etc. presentations as a secondary consideration, I had a few requirements and preferences:

1. i7 processor strongly preferred.
2. 8GB+ RAM capacity.
3. 17" screen.
4. No more than 7 pounds.
5. 7200RPM+ disk or SSD. Prefer dual HDD capacity for RAID0 capability. (Visual Studio bottlenecks on disk more than one might think. Will VS2010 be better? I also prefer RAID0 for VM performace.)

With those details in mind, a MacBook Pro 17" 2.8GHz Core 2 Duo (old tech!) starts at $2499.00. The Dell Studio 17 i7 3.06 GHz I picked up cost significantly less than $2499 - fully loaded. Here's the breakdown:

17" MacBook Pro ($2499.00)
Configuration
3.06GHz Intel Core 2 Duo (+$300)
8GB 1066MHz DDR3 SDRAM - 2X4GB (+$600)
500GB Serial ATA Drive @ 7200 rpm (+$50)
SuperDrive 8x (DVD±R DL/DVD±RW/CD-RW)
MacBook Pro 17-inch Hi-Resolution Antiglare Widescreen Display ($50)
Basic 90/1 year warranty, no additional paid support

Total: $3499.00 (before tax!)


17" Dell Studio 17 purchased via Dell Small Business (can't seem to find original price for SMB, sorry)
SMB discount (-$250)
Intel Core i7 820QM 1.73GHz (3.06GHz Turbo Mode, 8MB Cache)
8GB, DDR3, 1333MHz, 2 DIMM
Backlit keyboard
17" multitouch display with webcam and facial recognition
ATI MOBILITY RADEON HD 4650 1GB
1TB (2x500GB) 7200RPM SATA Hard Drive
8X DVD+/-RW Dual Layer Drive (no Blu-Ray option with SMB :(
9-cell battery
Bluetooth
802.11g (I haven't had a lot of good experiences with 802.11n ... I may upgrade the mini pci-e half card down the line, but I have a strong preference for wired LAN in general)
2-year support (which seems to be just about the reliable, performance-friendly lifetime of a midline Dell like my old Vostro 1500; I hope to get 3 solid years out of this higher-end i7 at this point. I will consider renewing the warranty in 2 years.)

Total: $2169.00
With tax: $2342.52

And at that price, I added a Logitech wireless keyboard and mouse to the package for another $79.

From what I have read and been told in conversation, Apple doesn't use particularly premium components in their machines. How in the heck can they justify that sort of premium price, with inferior specs/capacities?

One of my colleagues at Apprenda recently picked up a Studio 16 with SSD and is very happy with it. At Philly Code Camp 2010.1 yesterday, one of the volunteer staff had a 2-year old Studio 17. It was still in great shape, and he had been very happy with it -- no complaints. That sealed the deal for me -- no MacBook Pro unless I win the lotto sometime soon and have cash for personal toys.

Tuesday, March 30

Philly Code Camp - Gold Sponsor!

I'm happy to announce that not only will I be attending Philly Code Camp 2010.1, but my new employer, Apprenda, will be there as Gold Sponsor, specifically of the Architecture track.

We may or may not be doing a presentation on SaaSGrid. Unfortunately we got our ducks in a row at a bit of the last minute on this, though we are eagerly awaiting a last-minute presentation slot to open up, whether that be due to a presenter's sickness, travel difficulties or sudden enrichment of their bank account. *cough* ;) As it is we missed NYC Code Camp 4 and New England Code Camp 13 :( We are also looking for future Code Camp sponsorship and presentation opportunities!

I believe we are going down to Philly the evening of Friday the 9th, and possibly considering staying as long as overnight Saturday. I don't believe I've ever been to/near Philly before ... perhaps driven on a nearby bypass?

One more note, SaaSGrid may make an appearance at CloudCampNYC on April 20th as well. TBD.

Sunday, March 28

Philosopher: Why we should ditch religion - CNN.com

I couldn't agree more!

Philosopher: Why we should ditch religion - CNN.com

"We should be talking about real problems, like nuclear proliferation and genocide and poverty and the crisis in education," Harris said in a recent interview at the TED Conference in Long Beach, California. TED is a nonprofit group dedicated to "ideas worth spreading."

Wednesday, March 24

One thing Tech Valley lacks

Having grown up just inside the development-restricted, redneck-populated, overwhelmingly large and backward Adirondack Park spending my teen years playing football, causing trouble and trying to sell websites to small business owners who often didn't have dialup Internet service, or, in many cases, even a computer on-site at their business, I've seen a lot of positive change, real progress, in this relatively recently bemonikered "Tech Valley" region. Broadband just about everywhere that really matters. Computers in every shop. A website for everyone. A big semiconductor foundry of an alleged job-mill in our backyard.

One major piece of the tech worker and tech industry growth puzzle that Tech Valley still falls flat on however is workspace. Office space is often underserved and overpriced for independent, often mobile tech professionals, or startups and other small businesses that may work in small and/or remote teams and have little or no need for a permanent office. And no, neither Panera nor Starbucks comes anywhere close to cutting it. What Albany needs, what Tech Valley and its population and ability to innovate would benefit from, are coworking spaces.

What is coworking? Perhaps you've heard of hotdesking? The act of borrowing someone else's desk for a period of time? Envision a flexible office space of nothing but hotdeskers. Tenants, if you will, who might be there for a few hours, the day, or maybe 9-5 (or 9-9, or 5-9, you get the picture) all week long. Coworking spaces are dedicated workspaces, sometimes run as clubs or co-ops, or on a subscription basis. Flexibility is key!

Nobody loudly placing orders at the register. No kid kicking the back of your seat. No squealing babies. No delinquent punks eyeballing your gear. Chairs, desks, tables, whiteboards, often conference rooms. Some coworking spaces provide laptops and computers for rent. Any coworking space worth its salt provides coffee makers and solid Internet connectivity, the best providing both RJ-45 jacks for gigabit LAN and 802.11 for WiFi.

Office supplies are often available, sometimes as part of the package, sometimes for a fee. Scanners, faxes and printers are commonplace. Some of the nicer spaces also have high-end videoconferencing gear.

Not only are coworking spaces great for getting work done at an affordable rate, or having team or even client meetings, but coworking venues also typically offer a great networking scene as well. Similarly motivated and hardworking people with often complementary capabilities -- that's nothing but win.

Coworking spaces in metro areas tend to pop up in the unused or underutilized space of established companies, though that's not a rule by any means -- Rochester's first coworking space has sprung up in a loft I used to party in in my western NY days. Any space with the appropriate zoning and infrastructure, or the potential to cost effectively add or augment the required infrastructure, will do. (And this includes parking in cities where mass transit is less common.)

Albany has plenty of empty real estate ... do we have enough motivated, semi-mobile professionals who would know what to do with coworking space if they had it available? Does Tech Valley have what it takes to genuinely bootstrap and nurture its homegrown talent, expertise and productivity pools in areas that will matter most in the coming decades?

UPDATE: Laura has created a fan page for Coworking in Albany on Facebook.

UPDATE2: Laura's blog entry on this topic.

UPDATE3: The coworking pbwiki -- I'd be remiss to continue to neglect linking to this, as Laura has in her post. Great info from providers and consumers of space, as well as a listing of worldwide coworking spaces!

Monday, March 22

Book Review: One Second After

One Second After One Second After by William R. Forstchen


My rating: 2 of 5 stars
As my friend Mathew Koeneker wrote in August, I was a little surprised to be finding myself reading a book with a foreword by Newt Gingrich. I was even more surprised that I actually read the foreword, which, perhaps to my shame, I tend to ignore in most books that are not of particular import to me.

That's where Mat and I's outlooks diverge.

*POSSIBLE SPOILERS*

I didn't find One Second After to be particularly worthwhile. It failed to rise to the level of interesting until page 161 or so, where a half-hearted patriotic quote is to be found.

It did not raise my awareness of EMP, nor my alarm level. In this day and age there are so many threats, and we have no idea what our government is or is not doing to protect us. Perhaps the politician and Navy officer responsible for, respectively, the foreword and afterword, know something Joe Plumber does not? Or could it be that perhaps this disgraced and fined politician and mere Navy captain are not as well-informed as they'd like to be these days, and are simply trumpeting an issue for the sake of selling a book? That is what this book leaves me asking, not, "Are we doing enough to protect ourselves from EMP?" (Then again, I think the planet could use a good die-off ...)

Sure, I teared up a tiny bit at the death of the dog, and then the daughter, but to be frank, the plot and pace of this work was pretty awful.

View all my reviews >>

Friday, March 5

Microsoft Roadshow Returns to Tech Valley

Microsoft Northeast Roadshow

The Microsoft Northeast Roadshow is back in town, this time Friday, March 12th at the Troy Hilton Garden inn. Developer Evangelist Jim O'Neil has a blog post with further details.

Coffee: I prefer to buy 'local,' but ...

I prefer to buy local/do business locally when possible, but almost invariably I order my coffee online from remote (to varying degrees) vendors.

Case in point: I would love to buy my coffee from Uncommon Grounds, an Albany/Saratoga coffee house, roaster, bagel shop venture with two locations. I believe they're about 18 years old. They've recently become fairly social media savvy; I don't know specifically how long they've been online in general, but they seem to have a decent enough online coffee & t-shirt store.

Uncommon Grounds seems to have a strong following in the local community. Having been to the Saratoga location in the distant past, and perhaps once to the Albany location in more recent times, I personally don't have any particular attachment to their physical locations. I don't eat out (or get out, for that matter) often, and when I most urgently need to restock my bean inventory, (during code crunch time) I need it to be as quick and painless as possible, while interrupting my workflow as little as possible as well. This typically leads to online ordering.

When I order coffee, first and foremost I want fresh-as-possible, quality beans of varying roasts that arrive as quickly as possible. Close behind that, I prefer organic, fairtrade, preferably shadetree grown beans. After that it's all about price and customer service.

I just placed my second order with Porto Rico Importing Co. out of NYC, (three hours away) tipped to me by Ed Costello. (thanks again Ed!) I placed an order in February on a Sunday, and it arrived Tuesday morning. The beans were, while maybe not the absolute best I've ever had, pretty darn good. They've been in business some 103 years, their website isn't anything flashy, and as far as I can tell, they're not particularly active when it comes to social media. Their store has much more diverse offerings than coffee and t-shirts however, including filters, syrups and machines.

While I prefer to do business locally, I, currently an independent consultant with irregular income, have a hard time justifying a 44% premium on coffee, a staple that I generally consume 2lbs. of each month. I have to wonder, is it a simple matter of profit margin? Or is it a differential driven by sales volume, or diversity of inventory? 44% is a steep premium for buying local.

Monday, March 1

All coming together ...

As I approach the start date for a new fulltime role and work to wrap up outstanding consulting obligations, it's been a crazy busy few weeks with not enough sleep, food or fresh air! However, it all seems to be coming together.

A quick snapshot of my morning, the culmination of days of grinding it out:

It's all coming together

  • We got StorageByMail's revamped, Rackspace Cloud-converted site launched.

  • We've been prototyping a creative multi-product stealth-mode SaaS offering for a NYC-area startup. I've been acting in both consulting CTO and lead dev roles, and have had the first chance in a while to work with Java and Tomcat applications commercially.

  • My work continues on a near-beta Twitter business services app; that app is now growing to include LinkedIn and Facebook as well.

  • I continue work on a still-stealth multi-social platform biz app I'm partnered with a great team out of NYC on. (Public beta by mid-March!)

As part of these efforts, in the last three weeks I have:
  • Started using ADO.NET Entities and LINQ to Entities instead of LINQ-to-SQL. Entities seem gosh darn piggish when it comes to RAM consumption -- even when managing repository lifetime in what I understand to be best-practice fashion. I don't recall that issue with LINQ-to-SQL. Generating the model/updating the model from the database is painful when it comes to some relationships that seem to require manual removal every regeneration. I hope Microsoft gets it right in 4.0.

  • Got over my fear of lambda expressions, at least fairly simple ones. I still need to fully grok compiled functions. Baby steps.

  • Realized yet again how much MS ASP.NET AJAX stinks. Obscure and painful to work with.

  • Written a .NET consumer for the Twitter Streaming API. I haven't come across any other full implementations in .NET, though my basic incremental HTTP consumer is modeled after others' examples. I will probably publish this to Google Code soon.

  • Started working with Google Buzz.

  • Written a .NET PubSubHubbub subscriber client and callback handler. This has been published to Google Code.

  • Worked with the new Buzzzy API on top of Google Buzz. Useful API for my needs, but the 250 requests/hour limit is kneecapping.

  • Created my own Google Buzz firehose by crawling 4.2M Google Profile IDs (crawl in-progress now, finally got a nice multi-threaded crawler purring) and subscribing to push notification for all of their Buzz feeds through pubsubhubbub.appspot.com. Unfortunately 4.2M is still not the complete set of profiles, but it's a great start.

Haven't yet had time to catch my breath or catch up on sleep ... but there's light at the end of the tunnel! More launches/betas to come! And more aggravation, learning and ... "opportunities" along the way I'm sure :)

Sunday, February 28

.NET PubSubHubbub Subscriber Client

Finally had a chance to clean up the simple .NET PubSubHubbub client and callback handler I wrote last weekend. Currently implements just a Subscriber Client and an ASHX handler for processing subscription verification and push notification receipt.

I don't believe pubsubhubbub.appspot.com supports localhost callbacks, so you'll need to have a publicly exposed IP address or domain name to host the callback handler. I use DynDNS myself. (I could be wrong, I'm a dilettante when it comes to this PubSubHubbub stuff.)

NPubSubHubbub - find it here.

Saturday, February 27

Unpaid product endorsement: Sorel "Blizzard" Boots

In the midst of the wet, heavy snow followed by rain, freezing rain and sleet upstate New York has enjoyed this week, I've been appreciating the heck out of my winter boots. I have had these boots since I delivered papers and cleared driveways as a kid, some 16-17 winters now.

The boots in question are Sorel "Blizzard" Boots, rated to -35 or -40. I believe I got them at some sort of outlet or discount store in the Lake George "Million Dollar Half Mile," and they are one of the earliest and also most worthwhile, lasting clothing/gear purchases I ever made. I think I paid $45 or $55, maybe a little more. You can find an example here:

Sorel Blizzard Boots (sold out)

Sierra Trading Post - Sorel Blizzard Boots (sold out)

I'm not sure if mine were made in China or not, as it looks like the most recent generations were. I can't find the Blizzards on the Sorel website, so sadly, it's possible they don't even make them anymore.

These boots have been great for everything from newspaper delivery to dog walking to snowblowing to walking through downtown slop after parking six blocks from the office to being urinated on by cats. The original laces, after a cleaning, are still going strong. The waterproof bottoms are still 100% intact and keeping my feet dry. The nylon uppers are still in like-new condition as well. The liners are in great shape as well -- no real signs of wear on anything, 16 or 17 years later. These are a great utility muck boot for winter and early spring. I wish more products made these days had this kind of value and staying power.

Parting word: I hope Sorel still makes the Blizzard -- I don't see another men's winter boot in their lineup that fits the same niche at the same price point.

Monday, February 22

My First Google Buzz App: Who gives a frak?

Subhead: My impression of Google Buzz/the Google Buzz "API."



As most are probably aware, Google Buzz recently launched, while with much less fanfare than the anti-climactic and rather disappointingly immature, but retaining potential, Google Wave, still plenty of hype, noise and clamor.

OK, Google Buzz itself is decent. Nothing super special, but it has potential. Aggregation can make my life easier in various projects. I'm not wowed by it, but, without having had anything in the way of expectations, I'm not disappointed, either.

Now, on the API side ... WHAT API!? There's really not a whole lot of programming to do against Google Buzz yet. Users can associate various accounts for aggregation from other well-known social media services, and Google Buzz provides some XFN markup for non-standard content or services to enable custom associations:

<link rel="me" type="text/html" href="http://www.google.com/profiles/your.username"/>

As far as I can tell, though I'll grant you my weekend was spent on the output side of Buzz and not so much the input, the only way to get content into Google Buzz right now is by an associated service or feed -- which can include your own RSS or ATOM feed, but you can't directly post an update to Google Buzz via API.

On the consumer side, you can pull a user's Buzz updates as ATOM using:

http://buzz.googleapis.com/feeds/{33-digit profile ID}/public/posted "ugly URL"

(You are supposed to be able to use your username, i.e. andrew.badera, instead of that 33-digit profile ID but apparently those so-called "friendly URLs" aren't pushing updates as properly or completely to the hub as the ugly URL-based subscriptions.)

You can subscribe to push notifications of a user's feed via pubsubhubbub.appspot.com. I didn't spend a ton of time digging, but in what time I did spend, I didn't find a .NET PubSubHubbub client subscriber or push notification callback handler floating around the internets. I've written a C# subscriber utility and an ASP.NET .ASHX handler for subscription verification and push callback receipt and handling which I'll be posting later today after hosting it somewhere like Google Code.

So far, Google Buzz and its API seem like Just Another Aggregator. Yes, the PubSubHubbub protocol is pretty freakin' cool, and, at least for now, seems highly responsive when it comes to subscription requests and push deliveries. I'm not yet sure however what's going to entice mainstream social network users to make the leap to Buzz. I'm compelled for business purposes, not personal, and social networking apps don't make the leap without personal engagement and enthusiasm.

Sunday, February 21

Update: Custom URL Shortener

This is an update to a previous piece on shortening a URL/encoding an ID.

TSQL CHARINDEX starting at position zero returns an unexpected value of ' '. TSQL updated to do some explicit swaps around position 0, as well as to better randomize the encoding characterset.

ShortenID:


CREATE PROCEDURE [dbo].[ShortenID]
@idToShorten numeric(18,0),
@debug bit = 0,
@shortenedID varchar(20) OUT
AS

BEGIN
SET @shortenedID = 'NULL ID'

IF @idToShorten < 1
RETURN

DECLARE @i int = 0
DECLARE @ShortChars varchar(100) = 'TrCn8A2faBpb95ceDYdFhGjK6kmL3NxORPqSUtV7XvyH4zuQMsgJ'
DECLARE @charBase int = LEN(@ShortChars)
DECLARE @currentCharacter char
DECLARE @currPos int

DECLARE @shortened varchar(20) = ''

WHILE @idToShorten > 0
BEGIN
IF @debug = 1
BEGIN
PRINT CONVERT(varchar(20), @i) + ': @idToShorten: ' + CONVERT(varchar(20), @idToShorten)
END

SET @currPos = (@idToShorten % @charBase)
IF @debug = 1
BEGIN
PRINT '@currPos: ' + CONVERT(varchar(20), @currPos)
END

SET @currentCharacter = SUBSTRING(@ShortChars, @currPos, 1)
IF @debug = 1
BEGIN
PRINT '@currentCharacter: ' + CONVERT(varchar(20), @currentCharacter)
END

IF @currentCharacter = ' '
BEGIN
SET @currentCharacter = 'Z'
END

SELECT @shortened = @currentCharacter + @shortened
IF @debug = 1
BEGIN
PRINT '@shortened: ' + CONVERT(varchar(20), @shortened)
END

SET @idToShorten = FLOOR(@idToShorten/@charBase)
SET @i = @i + 1
END

SELECT @shortenedID = @shortened
END


ExplodeID

CREATE PROCEDURE [dbo].[ExplodeShortID]
@shortenedID varchar(20),
@debug bit = 0,
@idExploded numeric(18,0) OUT
AS

BEGIN
SET @idExploded = -1

IF LTRIM(RTRIM(@shortenedID)) = ''
RETURN

DECLARE @ShortChars varchar(100) = 'TrCn8A2faBpb95ceDYdFhGjK6kmL3NxORPqSUtV7XvyH4zuQMsgJ'
DECLARE @charBase int = LEN(@ShortChars)
DECLARE @currentCharacter char
DECLARE @currPos int = 0

DECLARE @exploded numeric (18, 0) = 0

DECLARE @lenShortenedID int = LEN(@shortenedID)
DECLARE @i int = @lenShortenedID
DECLARE @pow int = 0;
DECLARE @currPosSource int = 0

WHILE (@i > 0)
BEGIN
IF @debug = 1
BEGIN
PRINT '@i: ' + CONVERT(varchar(20), @i)
END

SET @currPosSource = (-1 * ( @i - LEN(@shortenedID) ))
IF @debug = 1
BEGIN
PRINT '@currPosSource: ' + CONVERT(varchar(20), @currPosSource)
END

SET @currentCharacter = SUBSTRING( @shortenedID, @currPosSource + 1, 1 )
IF @debug = 1
BEGIN
PRINT '@currentCharacter: ' + CONVERT(varchar(20), @currentCharacter)
END

IF @currentCharacter = 'Z'
BEGIN
SET @currentCharacter = ' '
END

SET @currPos = CHARINDEX(@currentCharacter, @ShortChars COLLATE Latin1_General_CS_AS)
IF @debug = 1
BEGIN
PRINT '@currPos: ' + CONVERT(varchar(20), @currPos)
END

SET @pow = POWER(@charBase, @i-1)
IF @debug = 1
BEGIN
PRINT '@pow: ' + CONVERT(varchar(20), @pow)
END

SET @exploded = @exploded + (@currPos * @pow)
IF @debug = 1
BEGIN
PRINT '@exploded: ' + CONVERT(varchar(20), @exploded)
END

SET @i = @i - 1
END

SET @idExploded = @exploded
END

Study: Ages of social network users

Interesting, and to me at least, a little bit surprising.

Study: Ages of social network users | Royal Pingdom

Wednesday, February 10

Twitter engineering blog, Twitter Text library in C#

Dewald Pretorius came across and shared on the Twitter dev-talk list the recently created Twitter engineering blog. Interesting engineering stuff to be read there, and not necessarily Twitter-specific by any means.

One of the entries mentions Twitter Text libraries for Ruby and Java. These libraries allow external consumers to, in theory, parse tweet text for URLs, screenname mentions and hashtags the same way Twitter does.

I grabbed Matt Sanford's twitter-text-java and created a quick C# port, NTwitterText. It looks like one or two of the URL regex patterns need some tweaking, but otherwise all functionality ported over pretty easily and cleanly.

Friday, February 5

Would like to share



Would like to share the StorageByMail website which we revamped over the past couple months, and relaunched on Rackspace Cloud servers for the client last weekend. StorageByMail is an NYC-based startup that enables customers to conveniently ship items into and out of storage.

The original site was in classic ASP, using all dynamic SQL. The new, more secure site is in ASP.NET with bound parameters, uses updated cryptography and the MembershipProvider and RoleProvider to replace a legacy homegrown user repository. Various new functionality has been added, as well as Telerik GUI controls for improved usability and user experience. AJAX abounds.

Dan @ SBM, we enjoyed working with you, and certainly hope to do so again.

Thursday, January 14

The one good thing to come of the quake in Haiti ...

... is that we no longer have to put up with bullsh!t chatter on the "news" about Simon Cowell leaving American Idol. Hoohah!

Tuesday, January 12

On hiring, technical problems and tutoring

An interesting post popped up on the NYTM mailing list yesterday.


Hi,

I'm looking for a web programming tutor. I'm looking for someone to work with one of our web developers who has limited experience and wants to learn more. Our ideal candidate is someone with extensive experience creating and developing dynamic and robust websites from the ground up. Some of the major issues he will need help in is:


  • Identifying over framework/structure for site

  • Incorporating advanced GoogleMaps functionality

  • Account management features

  • CSS/javascript/ajax--front end functionality



We can compensate the candidate $25/hour. We will need the tutor to come to our studio for an hour long session 2-3 times a week. Our developer will have web development issues he is working on that the tutor will walk him through during the tutoring sessions. The structure will be fairly open and relaxed, and we're a really fun group, so the position should be (hopefully) enjoyable!

We will need the tutor to start ASAP. If you're interested or know someone who is, please contact me with a list of websites you created...


Trying to practice more patience, as well as indifference to those things which don't directly negatively impact myself or the important people in my life, I personally didn't bother to work out the math and respond, but tech-savvy DJ & entrepreneur Anthony Zeoli breaks it down for us:


I know you have good intentions and maybe you'll find someone to do this. It's just that, for someone to realistically get to your office three times a week, it's going to cost them $4.50 in train or bus fare if they can't walk to your office. They'd make $20.50. Now, let's chop 30% tax if it's not under the table. That leaves you with $14.35 to teach someone what they should already know? Let us factor in the to and from your office. Maybe that's another hour. Now, you're done to $7.17 (rounded down a penny) for two hours. That's below minimum wage!


$25/hour? In NYC? And you expect them to be BETTER than your existing developer who's having issues? Ludicrous is an understatement, and here's why:

1. Web development and teaching are two ENTIRELY different skillsets, and it's fairly rare to find good/great techies with equally good or great people skills that are critical to being able to effectively teach someone. Those relatively rare people with both tech AND people skills, as WELL as the inclination and patience to teach, are in a class by themselves, and often make a very healthy six figures as technical trainers with boutiques and large tech companies. Simply Hired tells us that a "web development trainer" makes an average of $136,000 annually in NYC; "sales trainer" in that category, $222,000.

2. A generic "tutor" in NYC on average makes $49,000 annually, per Simply Hired. A "computer tutor," also according to Simply Hired, makes $72,000 annually. Across all sectors and roles, technical roles in NYC average $91,000 annually. Mid-level .NET developers earn something like $82,000 annually; senior .NET roles, $92,000. Senior roles easily reach into healthy six figures of course, and architect and management roles soar far above.

How in the world, for three individual hour-long sessions per week, at Tony's calculated wage of $7.17/hour, can you expect to capture the interest of a worthwhile individual? What could anyone possibly not understand about this? Developing even "decent," not "great," business app software takes years of experience, and little of that is typically college time.

Furthermore, why are you bringing a tutor in-house to "fix" your broken developer? If readily-available, sometimes free, books, blogs, forums, videos, vendor websites or reasonable-cost on-demand training packages won't do the trick, then this developer is NOT worth investing in, and is probably simply not salvageable. In this business, you have to be motivated to learn, and capable of self-learning. Yes, it is GREAT to have a mentor -- HUGELY beneficial for both parties -- but even then, if the developer is not motivated or otherwise inclined to learn, then it's a waste of the mentor's time and the company's money.

Sounds like this company has a lot of issues, from interviewing and hiring through to day-to-day management. At a guess I'd say it's a newer, smaller operation trying to cut expenditures in the wrong places. You have to invest in your people, your equipment and your infrastructure -- from _day one_ -- in order to achieve success with software or web development. You can't build a sound building with rotten raw materials.

Finally, to be quite frank, what this REALLY sounds like is a company trying to get the wisdom & experience of a skilled developer for a paltry $75/week while expecting to have all their questions answered and problems solved, regardless of the ridiculously low wage and number of hours to be paid.

Wednesday, January 6

Custom URL Shortener/ID Encoder in Transact-SQL (T-SQL)

Recently I've been working on some public-facing web applications where I needed to expose non-sequential IDs to end users in email as both text and links. In a corporate intranet, or even client-serving extranet, environments, with help desk & administrative support available, I'd probably just use GUIDs all over the place, and let the help desk field the aggravation and educate the users on the cutting and pasting of, and pronouncing, GUID. (I'm evil, I know.)

Now in situations where user aggravation directly and/or substantially affects revenue or productivity, and the ability to leverage help desk type support is at a minimum, I decided to start encoding IDs, not unlike the hash a URL shortener like bit.ly gives you. (e.g. bit.ly/5tB2x5, where 5tB2x5 is your encoded or hashed value.)

I found a fairly simple to implement algorithm on Jonathan Snook's site. I initially encoded, or compressed, IDs in a C# port of Snook's work, and stored the result in SQL Server, as I had a bug in my decompression/decoding method and needed to lookup the values up.

I then found myself with a need to create these encoded ID values inside of stored procedures. I ported the work once again, this time to T-SQL. Again, encoding worked, but decoding failed. I was stymied until the keen eye of Patrick Muldoon, via Tech Valley Ruby Brigade, noticed a character set issue -- the decoding routine was not making the distinction between capital and non-capital letters, resulting in bad decoding. COLLATE to the rescue!

bad:


SET @currPos = CHARINDEX(@currentCharacter, @BigString)


good:

SET @currPos = CHARINDEX(@currentCharacter, @BigString COLLATE Latin1_General_CS_AS)


Thanks Patrick!

Complete T-SQL code for encoding:

CREATE PROCEDURE [dbo].[ShortenID]
@idToShorten numeric(18,0),
@shortenedID varchar(20) OUT
AS

BEGIN
SET @shortenedID = 'NULL ID'

IF @idToShorten < 1
RETURN

DECLARE @ShortChars varchar(100) = '8A2aBb95CcDdeFfGgHhJjK6kLMm3NnOPpQqRrSsTtUuV7vXxYyZ4z'
DECLARE @charBase int = LEN(@ShortChars)
DECLARE @currentCharacter char

DECLARE @shortened varchar(20) = ''

WHILE @idToShorten > 0
BEGIN
SET @currentCharacter = SUBSTRING(@ShortChars, (@idToShorten % @charBase), 1)
SELECT @shortened = @currentCharacter + @shortened
SET @idToShorten = FLOOR(@idToShorten/@charBase)
END

SELECT @shortenedID = @shortened
END


Complete T-SQL code for decoding:

CREATE PROCEDURE [dbo].[ExplodeShortID]
@shortenedID varchar(20),
@idExploded numeric(18,0) OUT
AS

BEGIN
SET @idExploded = -1

IF LTRIM(RTRIM(@shortenedID)) = ''
RETURN

DECLARE @ShortChars varchar(100) = '8A2aBb95CcDdeFfGgHhJjK6kLMm3NnOPpQqRrSsTtUuV7vXxYyZ4z'
DECLARE @charBase int = LEN(@ShortChars)
DECLARE @currentCharacter char
DECLARE @currPos int = 0

DECLARE @exploded numeric (18, 0) = 0

DECLARE @lenShortenedID int = LEN(@shortenedID)
DECLARE @i int = @lenShortenedID
DECLARE @pow int = 0;
DECLARE @someInt int = 0

WHILE (@i > 0)
BEGIN
SET @someInt = (-1 * ( @i - LEN(@shortenedID) ))
SET @currentCharacter = SUBSTRING( @shortenedID, @someInt+1, 1 )
SET @currPos = CHARINDEX( @currentCharacter, @ShortChars COLLATE Latin1_General_CS_AS)
SET @pow = POWER(@charBase, @i-1)
SET @exploded = @exploded + (@currPos * @pow)

SET @i = @i - 1
END

SET @idExploded = @exploded
END