hosted subversion for the entire team: meet Project Alpha from Wildbit

As a developer, even when I’m developing solo, subversion saves me both time and headaches. When working with additional developers…well Dan Cederholm puts it best:

You can work on your own, commit changes, send a message with that change, I’m totally hooked on this way of working on web apps. Yeah, it’s so much fun working on something of your own. You feel more invested and you don’t feel like you’re on the clock so you put more detail, more attention to detail, and you’re just more excited about it. It’s fun. With a lot of the client work I do, because I’m focused on the UI a lot of times I’m handing off what I did to someone else, they’re implementing it, it usually gets messed up, that’s sort of par for the course and it’s rare when it doesn’t. Working on something yourself with somebody else when you’re both in tune with what this product is, it’s so much fun and it’s far superior.

A number of tech people I work with regularly comment on how designers could really benefit from subversion. Bit-wise version control seems so much smarter, from both a size/storage perspective, as well as a team integration perspective, than this_is_the_newest_version_1.0b_final_reallyitsfinaliswear.psd.

Subversion for Design

Of course, in respect to designers, the whole prospect of working from a command line is understandably intimidating. And even with a myriad of GUIs for subversion, when it occasionally gets unruly (which it does…there’s no denying that), you need some command line mojo to get things cleaned back up.

A photoshop plugin would be sweet, something like “save as version” that takes care of all of the legwork. Consider that an official “pretty pretty please someone build that for CS3″

The real story

But that’s not what I’m writing about today. I’m writing about what I always get psyched about, a really cool LOCAL project coming from one of my new friends here in the Philly tech/creative community. I spoke to Chris Nagele of Wildbit the other day at the Cream Cheese Session and he was pimping a new rails app that his team has built, currently going by the mysterious name “Project Alpha”. In short, Project Alpha is hosted subversion. That’s not new, not even close. It also has a built in browser, and tracking, but that itself also isn’t new (though Chris’s implementation is about as sharp as I’ve seen). What’s REALLY smart is direct integration with Fogbugz, Lighthouse, and Basecamp. Essentially, all subversion activity is filtered to the right people on the team, regardless of if they are working directly with the code. This isn’t a code hosting, this is code hosting geared towards team integration and highly productive workflows. I’ve snagged some screenshots from Chris’s post on the Wildbit site, check them out.

The Dashboard

Repository Overview

Changesets

File Browser


There’s clear cues that were taken from some of our favorite team and project management tools, which I love because the way webapps are being built now, once you use one you can be comfortable in many other ones. Features, rather than interfaces, are the defining differences.

Why this works

My business workflow uses a bunch of apps. Why would I pay for multiple hosted apps rather than have one “do-it-all” suite? I think that the current trend of “do one thing really, really well” apps is smart, so long as their data is portable (like Project Alpha takes advantage of), I’m happy to have a dozen “best of breed” apps that talk to each other than one large lumbering suite that sucks at everything. I’m looking at you, Microsoft Office.

Wishes

Not-so-silent wish? I’d love to see a partnership between these tools and the model that’s run at BountySource. BS has it’s own SVN browser, which is not only part of their system bus is an open source rails plugin as well. I really like some of it’s features and Dave and Warren @ BountySource work really hard to promote open source as a viable business model. I could see both of these ventures really benefiting from each others’ work.

Also I’ll push for the integration of OpenID (so I can log into multiple accounts I’m invited into with the same URL based identity, of course), and microformats (i see opportunity for hatom and hcard immediately, I’m sure we can find a couple more things that can be marked up). But I’m sure these are considerations for down the road, because Chris is a smart guy :-)

Testers needed!

Oh, one last thing. Chris is looking to get some testers to work with Project Alpha. Also from his blog post:

We are releasing a private beta soon. When it is ready, it will be launched as a hosted subscription-based service with free and paid accounts. We are thinking about a free single project installable version as well, but have not made up our minds yet.

If you are interested in the Private Beta, please email me and provide some details on how you might use the system (size of team, number of repos, etc).

Tags: , , , , , , , , ,

Facebook F8 - Find your niche, make it worthwhile

There has been a LOT of buzz about Facebook’s F8 application platform since it’s release on thursday night. And don’t get me wrong, I think this is a REALLY cool opportunity to leverage the tools AND the community that Facebook has in place to spread usership and awareness of web apps. Facebook has opened up some ridiculously cool tools to a very large audience. But maybe..it’s too large?

I’m scanning my “friends timeline” and noticing a clear division.

My geek friends are adding Facebook apps left and right.

Geekyfriends

My school friends (current undergrads and recent grads) have ALMOST no app usage, with the exception of the most popular app on facebook, iLike.

Schoolfriends

What does this mean? Well, at this stage in the game it means that geeks are bleeding edge and the rest of my friends aren’t as tech savvy. Fine. But long term, will the adoption rise? Depends on the app. I see things like last.fm getting a lot of traction. Music listening habits are always popular conversation on college campuses, and that data will become increasingly valuable to record companies and the artists, so I wouldn’t be surprised if the next step was INCENTIVES from the labels and artists to share your listening habits. Just my own speculation.

But beyond that, I’m having a hard time seeing F8 apps take facebook by storm. Even though facebook has opened beyond the “University Only” model, they have a stigma. In time, that stigma will likely go away, and if F8 is Facebook’s team being forward thinking enough to prepare for it, that’s interesting and awesome in itself. But I think that the Facebook audience at large (the large concentric circle of a large percentage of students in the US) compared to the rest of us who are really excited about F8 (a.k.a. “social networking geeks of the world”) still has huge opportunity for market penetration, like the Last.FM example above.

App developers: try thinking like a student. What do students need and use? I can easily answer the question because I was an on-campus undergrad very recently. Here’s a short list:

  • Take-out Food
  • Textbooks
  • Music
  • Nightlife
  • Discount ANYTHING

This is hardly the end of the list, but a couple of quick, easy to illustrate examples. I’ll hit them one at a time, and how I think integration with Facebook would boost usership of Facebook AND the service being provided.

Take Out Food

When I lived on campus I had little interest in walking to the dining hall to get lousy food that was going to eat a hole in my stomach. Cheap pizza places (2 large pies for <$10) and hot wings (40+ wings for $12) were all over campus, and they all delivered. And the best part? When CampusFood.com came out, I could browse a menu, and then with saved credit card information, click “order”. Cheap food delivered to my door with minimal human contact, and no cash transaction, every college student’s dream.
Campusfood (or someone else) needs to integrate this into Facebook. They already claim to support transactions, so that part should be easy.

Campusfood

Scenario: I come home from a party, a few beers in, browse facebook to add my new party friends, poke a couple of the girls that I think are cute, and order a pizza, all in one workflow. And best of all? In the morning I can browse the public timeline to see what all of my OTHER friends have ordered…maybe there’s a new spot on campus that I haven’t tried yet, and Johnny’s sandwich order sounds really tasty…boom. You have personal recommendations without people even needing to talk to each other.


Textbooks

This one’s easy. Facilitating a textbook exchange on Facebook is easier than ever. Someone should do this RIGHT for a change. I’d love to see a Netflix for textbooks, though I understand the challenges of varying versions/editions of textbooks. Still, seems possible. The ability to announce when I’m done with a book via the public timeline and have someone come along and snatch it up seems pretty plausable.

Music

The success of the Last.FM plugin is encouraging, and I already mentioned my thoughts on incentive-based scrobbling. If nothing else, the publicity of “I’m listening to…” being announced on the “News Feed” is free publicity. I’m not looking to get paid for my data in cash, but something from the label to say “thanks for providing us with some of the most valuable market research info we’ve had in years” would be nice. Maybe an album or two of mainstream music that doesn’t blow? Discounts on itunes, etc seems to make the most sense, but again…I’m open to suggestions.

Music

Nightlife

One of the most successful features of Facebook, in my observation, has been the party planning tools. Set a time, place, and invite a pile of people. RSVPs. Privacy from the guest of honor, if you need. Conversation about what to bring. Etc. College kids love to party, but once they grow up past the legal age to drink, many of them move form house parties (where they sit around and drink apple juice, i promise) to the local bar scene. These bars need to be taking advantage of Facebooks new open-ness. Promotions and event invitations with incentives like drink specials, guest list only open bars, theme parties…etc.

Philly2Night

I’ve been using Philly2Nite.com regularly (and recently had the pleasure of lunch with one of the co-creators Chris Nagele, who has an awesome eye for the kinds of strategy I’m describing), and think that other city-based niche nightlife sites could benefit from Facebook’s new open platform. Philly2nite has it’s own social network and has come up with some cool ways of leveraging it, but tying the two together seems like a match made in heaven. PLUS, that network extends past graduation because we all know that people don’t stop having social lives when they graduate (at least, I hope they don’t stop). Announcements of friends attending a particular event is easy incentive to get someone to come out to a party that they might not have otherwise, and the Facebook mechanisms are perfect for that.

Discounts/Bargain Shopping

Slickdeals, Restaurant Coupons, FatWallet(and other cash-back deal sites) all NEED to recognize the opportunity to hit a target audience of kids who want to have the hippest, coolest, trendiest WHATEVER but are on a tight budget. Cash back and discounts are quick wins in the eyes of a college student. Take advantage of that, and work it right into my facebook account.

Slickdeals

I could go on and on with this list, and if I had more time myself I’d build every single one of these apps, or pursue the means to make them exist. But I’d love to see the mechanisms provided by F8 really recognized better by the greater part of the social economy that comprises Facebook. Let’s see where this goes, and if anyone sees any of my app ideas (or anything similar) please let me know in the comments!

Technorati Tags: , , , , , , , ,

Opensville: Shared source = Shared economic responsibility

In his first post on his new blog at BMC Software by William Hurley (A.K.A. Whurley) wrote of a metaphor for the open source community called “Opensville”, and alluded to how its a place where everybody wants to hang out but nobody wants to live because socially and economically, it’s straining. This discussion has boomed over the last few days, and has been generating some excellent commentary on Open Source communities.

Dave Rappo, a good friend of mine, has a project which has the primary objective of taking some of the strain off open source project managers as well as developers who wish to contribute to open source initiatives. This initiative uses monetary incentives in the form of “bounties”, placed on tasks and feature requests, by the users who request them. Essentially, he’s created a streamlined workflow for the concept of “put your money where your mouth is”.

This project is appropriately named Bounty Source.

Bountysource itself is a Ruby on Rails application, coded by co-founder Warren Konkel (in his free time no less…he’s a full time contractor for the famed Revolution Health Group). Another very interesting part of the model is that Bounty Source, which acts as an integrated project management and source control tool (similar to Trac and SourceForge), is itself driven by the BountySource incentive model, and portions of it are open source (the SVN browser, for example). That is to say, the tools used to make BountySource what it is are available to have bounties and feature requests placed on them. Then, like any of the projects that they host, a developer can come through, choose a task, complete it and submit it for review. Upon approval, the bounty is released to the developer.

Bounties vary in size because they are created by users who want to see a feature included. If they want to see the feature really really bad, and can afford it, they could place a rather sizable bounty on it. Also utilizing the power of strength in numbers, multiple people can contribute to the same bounty. So if someone else wants the same feature you do, they can chip in (less, same, or more than you) towards the total value of the task.

This realistic monetization of tasks takes away a large amount of the dissent in the OS community, where projects stagnate due to a lack of resources, or developers and project managers get frustrated about the number of feature requests with no “contribute back” factor. Many open source USERS forget that OS is a two way street. Bountysource goes out of its way to remind people, and lets them contribute in a real tangible way.

One of the latest bounties posted to BountySource actually stemmed form a conversation Dave and I had in the car yesterday, regarding the lack of Firefox extension support in Camino. Evidently, someone had just posted a ~$200 bounty on creating a fork of the Camino project that had a single customization: enable middle-clicking on tabs to close them. THAT WAS IT.
Someone wanted this feature SO BADLY that they were willing to pony up 200 bucks. Dave and I weren’t ready to drop $200 on a single feature, but we agreed that we’d switch to Camino for speed and stability if it supported XUL/Extensions.

So Dave created a bounty for Firefox extensions and addons for Camino within the same project, dubbed “Alternative Camino“. This bounty calls for Firefox 2.0 Extension support (at a minimum) in Camino. I’ve dropped $10 of my own money (as did Warren) on this feature request, and if you’re a mac user frustrated with the general instability of Firefox (not unusable instability…its just not Camino) but stick with Firefox for plugins…drop a couple of bucks and see if we can’t get this bounty fulfilled.

And while you’re at BountySource, check out some of the many (372) projects that they do host, and see if you want to ask for anything, or take on a challenge to collect a bounty yourself.

Tags: , , , , , , , , ,

Donation Buttons (and other easy tweaks) using Google Checkout’s HTML API

A common request that I get with a lot of the non-profit or foundation work that I do is to have a donation button. Previously, PayPal was the way to go, since they had a donation button maker. The downside was, that paypal takes a cut on your donations unless you jump through some hoops to become a registered “foundation”.

Recently, Google Checkout has rolled out and has some rather enticing features…besides integrating their single sign-on checkout procedures, invoicing, and a bunch of other handy things…for the entire year of 2007 they are offering card-processing with no fees. Thats right…no fees. All of 2007. Nice.

435134698 22203F03B3

Before I go on to listing my hacks, I do have one small request…I’m building up a referral base and if you have any intention of signing up for a new google sellers account, please consider using my referral link if the info below has helped you (or anything else ive ever posted has). it’s much appreciated, and I get a kickback on your sales (.5%). Full disclosure. Sign up here to use my code.

On to the help.

So…Google Checkout, like most of Google’s other services, has a pretty extensive API and code example library. Sometimes, though, you’re not looking for full integration. You just need a simple donation button where the user can specify any amount.

435138236 E921E879E6

Or maybe a “buy now” button with a quantity…for tickets, for example.

435138881 A129Fc8Ae8

At first glance…the Google Checkout buttons won’t let you. They only supply 2 options…buy now with a fixed price, or buy now with a drop down of pre-set prices.

435140999 3063050Cce

So how did I build the buttons above? Using the HTML API. But before I could get started…even the demo code was screwing up with my Merchant Key…because I had missed one tiny setting.

This one’s important.


435136466 D8861747B2

Under Settings->Integration, there is a checkbox that stops anything but digitally signed XML cart posts. While this IS an important security feature…since you arent posting any secure information via the HTML API, you’re safe enough to allow unsigned posts.

From there…just follow the example listed here on the API help guide. Using the first code block, replacing the dummy merch key with your own merch key should be enough to get it working. Assuming you can post the “chunky peanut butter” demo to your account, you’re ready to move on.

The next step is to make some modifications.

Here’s my ticket-purchase with quantity box code:

<form class="gcheckout" method="POST" action="https://checkout.google.com/cws/v2/Merchant/[[merchID]]/checkoutForm” accept-charset=”utf-8″>
<input type=”hidden” name=”item_name_1″ value=”Martini Tasting Cocktail Benefit”/>
<input type=”hidden” name=”item_description_1″ value=”Join Us for an evening of food & fun Martini tasting & silent auction at the Flanders Hotel.”/>
<label>Quantity:</label><input type=”text” name=”item_quantity_1″ value=”1″ id=”qty”/>
<input type=”hidden” name=”item_price_1″ value=”3.99″/>
<input type=”hidden” name=”_charset_”/>
<input type=”image” id=”submit” name=”Google Checkout” alt=”Fast checkout through Google”
src=”path/to/submit button” />
</form>

And here’s my donation button code:

<form class="gcheckout" method="POST" action="https://checkout.google.com/cws/v2/Merchant/[[merchID]]/checkoutForm” accept-charset=”utf-8″>
<input type=”hidden” name=”item_name_1″ value=”Quintin Foundation Donation”/>
<input type=”hidden” name=”item_description_1″ value=”Thanks for your donation. Every little bit helps!”/>
<input type=”hidden” name=”item_quantity_1″ value=”1″ id=”qty”/>
<label>Donation Amount: $</label><input type=”text” name=”item_price_1″ value=”" id=”amt”/>
<input type=”hidden” name=”_charset_”/>
<input type=”image” id=”submit” name=”Google Checkout” alt=”Fast checkout through Google”
src=”path/to/image/btn_donatenow.gif” />
</form>

At this point you should notice some differences between the demo code and mine. First, the form action is now posting to the actual cart form rather than the sandbox (i bypassed the whole sandbox thing since this isn’t a full e-commerce integration). Replace [[merchID]] with your own ID (and drop the angle brackets). I added the class gcheckout to the form tag for formatting purposes. Also, set the path of the input id=”submit” to your submit button graphic.

All of that leadup, and the trick itself is actually very simple!

The core pieces to making this whole thing work are the inputs, which, in the demo code, are all set to hidden. It’s very simple to change the type from hidden to text, and make them user-editable. By placing a label in front of them, and a little bit of styling, you get some pretty swanky buttons with user-input flexibility.

All of the customizable input fields are detailed here. This should allow you to specify shipping details, tax details, and many other parameters…depending on the needs. And remember…so long as you keep the “name” property, you can switch to a dropdown or a multi-select box…allowing you to create some fairly robust button codes!

Oh..and for debugging? Go back to that integration place (where you unchecked the shopping cart post security box) and check the log. It’s pretty useful when google checkout chucks a fairly nondescript error for the user, but lets you track down problems.

TAKE THAT PAYPAL!

I’ll come back to this post in about a week when we’ve launched the site that I figured this out for, so you can see the code in action.
Check things out at http://www.quintinfoundation.com. Note, that we were asked by Google to take down our donation button until there was some tax-related information squared up. More on that issue to come.

Tags: , , ,

quicktwitter

i’ve been using and following all of the buzz around twitter recently, and all of the desktop clients cropping up for it are pretty cool. My only complaint, though, is that they’re another program to be running, either silently or in my menubar. I’ve already got a tool that does input and system notifications, and it’s quicksilver.

So, says me to myself, why not have a quicksilver plugin that does twitter-stuff? Shouldnt it be able to use its own notifications (like the itunes track change), and it’s handy text to anything functionality to post that info through twitter’s API?

Here’s the challenge, at least from my angle. I don’t know a lick of objective c, or anything about the xcode development environment in general. Web is a little different than desktop…but that doesn’t mean I’m not willing to learn. If any of my readership has resources on getting started with objective c, xcode, or something as specific as quicksilver plugins (though i did find a pretty bitchin’ resource on that), please contribute either in my comments or to the twitter wiki page about my “project”.

Oh yeah, and wish me luck.

Tags: , , , , ,

php feed handling, now with less kludge

back in august/september, i built a feed aggregating home page for Inspiration Festival. For that project I used code from magpie to manage parsing of various RSS feeds. It got the job done, and definately did a huge amount of legwork…but I had to do some really wacky array manipulation to get at the data from each feed that I wanted. Also, since there was slight variations in the feeds, I had to compensate for that. Overall, I came up with a pretty slick mediating layer between magpie and my interface that I have since reimplimented…but it was starting to get unruly. One of the biggest things i disliked about magpie was it’s large set of dependant files…a couple of dozen files in a magpie directory (sure, some were documentation but nonetheless) made adding my solution to new projects a bit messy.

enter simplepie. self proclaimed solution to the admitted pain in the ass that magpie can be. Since i’m doing a similar feed aggregation for another quickie project, i decided to take simple pie for a spin.

and it wins, in a big way. without dwelling too much on my particular implementation, two of it’s strongest suits are:

my 2 biggest complaints with magpie nailed in 1 shot. could I really ask for more?
I suppose we’ll see as i delve into usage of this library. More to come.

update: for the project I’m working on, simplepie cut 36 lines of code down to 13. ladies and gentlemen, we have a winner.

firefox 2.swoon, + new site coming

Neil Lee’s optimized firefox builds for Deer Park were my a must-have for mac, and he has finally updated for Firefox 2.0.

Ive been using 2.0 since a couple of weeks into RC3…first at home on my iMac, and once I was satisfied, at work as well. And satisfied I am. It’s no secret that I can’t live without this browser, moreover, many of its extensions are SO important to my daily work. Even though Safari has some similar tools, FF is just more elegant about the whole thing. And, I’ve gotten really, really good at developing in Firefox and knowing how the same page is behaving in other browsers…most of the time, anyway.

Though, despite all of its awesomeness, the Mozilla builds are notoriously slow as crap on macs…I mean, they’re usable, but they get laggy and lack the “snap” my windows machine has (when it’s not busy crashing), or safari’s performance in its native OS X. Luckily, Lee’s custom builds for Intel, G5, and G4 macs fill in that gap. I just installed is Intel build, and its really the most refreshing experience my web browser has given me in a while. All of the wonders of FF2.0, but with all the snap of Safari (even gives Camino a run for its money, performance wise).

Picture 1.png
Speaking of…I have Camino installed…but I wish i could make it my primary browser, or even give it a permanent home in my dock. But its blatant lack of support for Firefox Extensions (i understand the technical limitations of why that is…its just unfortunate) makes it useless to me. Sure, pimpmycamino helps, but really, its barely a band aid.

My only complaint, really, is that something is up with tabbrowser preferences…though tabmix has been suggested as a replacement.

Notice that I didnt say a single thing about a certain blue E that recently released its 7th incarnation. I’m saving up all of my muster for that write up once i get my breath back. But its coming.

And on the topic of coming, I finally have the designs for weknowhtml.com, thanks to Dan at Enhanced Innovations. The site looks incredible…I’ve started development, and am going to work feverishly to launch with the November 1 CSS Reboot. So keep your eyes peeled for that.

another swfobject problem, deproblemed

flash/rich HTML coexisting is definately turning up a whole new, fun set of challenges. So far, some of my favorites are:
* having rich modal windows appear behind flash elements (fixable using the iframe shim technique)
* setting focus of various elements (fixed by creating a variable in our base page class that let me set the default focus to any elment by ID)
* today’s, having to do with the ExternalInterface.AddCallback method in flash, and its playing nice with swfobject.

In essence, we have a login function that pops up one of those nifty DHTML layers with a login box. Our top navigation is all flash, and has a login call to action…so having flash call javascript functions isnt hard, but getting javascript to “poke” at the flash and have it run an internal function is a bit trickier. Utilizing the aforementioned callback method, its fairly simple. The problem we had was, in Internet Explorer, order of operations was a bit out of whack.

we got an error on:
__flash__addCallback(coreLoader, "loginNav");
coming from INSIDE the flash…what seemed to be happening was the javascript that set up the object “coreLoader” wasnt running at the right time because of the time it took for swfObject to set up the embed. So, adding
coreLoader = $('coreLoader');
immediately AFTER
so.write("topNav"); set up the object again, this time not filling the object with a null (because swfObject had
correctly identified an embed with id=coreLoader), and allowing the internal flash “addCallback” function to work.

hm, technical writing is difficult. but i felt the need to document this problem (even if it wasnt very well) for my own future reference, and hopefully someone else will find it handy as well.

the more general moral of the story is: pay attention to order of operations, they may save your life some day.

cleaner (?) documentation, source code, swf

check out http://www.dangerouslyawesome.com/png2swf/ for less rambley documentation, and some downloadables.

WARNING: everything is still very alpha. very much in testing/production. report bugs in the comments, but theres a good chance i’m already aware/working on it

taming THE beast

it’s no secret, the most popular site on the internet is composed of some of the ugliest code, and even uglier page layouts. Some claim this is by design. Others spend all day whining about it (and anything else they can think of).

And then, there are some, who hook a brotha up. Some coding genious (or boredom) has struck some individuals, inspiring them to hack apart myspace’s rats-nest of tables, and turn their myspace page into something classy. Taking Eston Bond’s myspace hacks kit, and some of my own time, I’ve turned my myspace page into something a bit less cringe-worthy.

some sweet features also hooked in: an open source flash based mp3 player, so that I can play some of my own awesome tunes (make sure you at least check out the 2nd track).

also, a handy flash-based RSS reader, posting a snip of the latest blog post i’ve made on here, on my myspace page (instead of the stupid myspace blogs that i NEVER used.

And of course, everything is hard coded to MY specs (heh, myspec), putting whomever I want in my top 3/5/8/16/256 (ok i dont have that many friends). Currently my layout is a modification of Eston’s original template, but now that I’ve got a hang of what myspace will let fly, I’m venturing into designing my own from scratch.

Warning: this is NOT for the faint of heart. Even with Eston’s well written walkthrough, you need a VERY solid understanding of CSS (though you can throw standards out the window) to make this work. But yeah. Dont run my page through a validator, cuz it just ain’t happening.

failed validation myspace


Clicky Web Analytics