Fri, 12 Mar 10
Posted in Web Applications, Tips at 10:21 am by moore
Third party cookies are most often used by ad serving companies, because they are set by an image or other resource that can be pulled from a different domain, they are one way of tracking behavior across websites.
A short example: If I visit site A (www.foo.com) and site B (www.bar.com) and they both pull an image from site C (www.baz.com), it can set cookies for the site C domain (.baz.com), with a value of siteA or siteB. Then when I visit site C, it ‘knows’ that I’ve been to sites A and B.
This can be sinister (see the wikipedia link above for privacy concerns). However, if you have multiple web properties, then you may want to tie user behavior together across properties. Third party tools like Google Analytics offer one way to do this, but if you want custom application behavior, then third party cookies are probably the way to go.
Firefox (at least my version of firefox, without any add ons or options changes) treats third party cookies much the same as first party cookies; that is, they just work. However, IE requires a bit more hoop jumping, as they check the p3p compact policy. A compact policy is basically a header you set which looks like this: P3P: CP="CAO PSA CONi OTR OUR DEM ONL". I looked around for an easy explanation of what the various values are and how to set them in a coherent manner, but didn’t run into anything very useful. However, I finally stumbled on this tutorial, which points you to this IBM software, which you can use to create a compact policy. The tutorial also walks you how to use that software, which is not entirely intuitive.
As far as I can tell, IE doesn’t actually check for the existence of the corresponding policy file, nor does it care if the site does what the p3p header says it does, but it does require a valid compact policy.
After you’ve added that header, IE (versions 6-8) will accept your third party cookies.
Technorati Tags: third party cookies, compact policy, howto
Permalink
Wed, 13 Jan 10
Posted in Technology and Society, Web Applications, Useful Tools, Social Media at 1:44 am by moore
I had a meeting yesterday with a Anne Cure, a farmer, and her web specialist. She grows food that I buy via my CSA (community supported agriculture) share–I have a list of Colorado CSAs if you’re looking. Anne, and the rest of the farmers she works with, has created a great offline community as part of the CSA. There are multiple events at the farm, including an end-of-year pig roast. As a CSA member, you get great veggies, you are part of a community and you support a local farm. It’s win-win-win.
I asked Anne to meet with me because I felt that, while there was some member to member interaction, it wasn’t as prevalent as it could be. Often, at CSA pickup, I wouldn’t talk to anyone except for Anne, or one of the other farm workers. And I rarely observed any of the other members having any interactions either.
Being a web guy, I thought that bringing the community online might help. Of course, there are always challenges around that–it takes work to maintain an online community too!
Here’s a list of all the ideas I thought of to leverage the offline community Cure Organic Farm has built, as well as some we discussed during the meeting.
Some of these ideas take little effort, some take a lot. Some bring in revenue, some don’t. Some put all the effort onto existing staff, others leverage excited community members. Some had been done already, some they had never heard of.
Hopefully anyone else who has created an offline community can pick and choose useful tools and ideas, from below, to enhance that community online. If you have additional suggestions, please feel free post them in the comments.
- Use posterous to create a dead simple blog. Leverage its auto posting capabilities to push content into other social networks (twitter, Facebook, etc, etc). Use twitter/FB to drive traffic to their farmstand. Cure Organic Farm does already have a Facebook page.
- Use email list management software, like MailChimp, and look at the reports to see if email is a useful (aka ‘read’) means of communication.
- Promote carpooling to pick up CSAs–save gas and promote interaction between members. Consider using a tool like Divide the Ride.
- Add a page of ‘Cookbooks Anne Uses’ (they already have a links page of various recipe sites). Have that link to Amazon and you could possibly make latte money from it.
- Cure Organic Farm puts out a great weekly newsletter during the CSA season, full of quotes and recipes. However, searching it is an issue (I suggested Google Custom Search).
- Also, making those recipes available in some kind of ingredient specific manner would be useful. Even if the recipes aren’t broken out, just knowing that I can find a recipe for garlic scape pesto in newsletter #5 from 2008 is useful. This could be done with a simple database or even plain HTML.
- Forums, of course, are great community building tools. They also are great for spam. I imagined forums being used for sharing food knowledge (recipes, ‘how do I use 3 lbs of beets?’), though you could also share community events and even barter goods. The issue with forums, as ever, is moderation–how to make sure that people are not abusing the forum (or each other). This qualifies as a high input/high possible return tool.
- An online calendar. Both for specific events, such as the aforementioned pig roast, and informal knowledge, like when tomatoes are expected to be ripe, would be great to have on a calendar.
- Online registration for CSA membership and other event payment. They do online registration already (if the shares haven’t already sold out). They currently use paypal, and the fees can really eat into the farm’s profits, so they don’t see a bigger effort into this area being useful.
- Classifieds. Kinda like the forums but for money or free. Same model as craigslist, but aimed at a self selected group of people. Again, moderation and ensuring appropriate use are challenges.
- Using a ready-setup community building site like ning could help accelerate online community building. I also pointed them to the great Transition Colorado Ning site, so they could see what a related organization was doing.
- Use wufoo (or email) to let users submit newsletter content. Just sharing what other businesses and professions other CSA members are in can help knit the community tighter.
- Advertising on the site. They weren’t too keen on this, but I think that the correct type of advertising would be useful. Again, possibly too high effort to be possible.
- List of links to local resources. They are already doing this, but should make it easier for people to request addition.
- Write a blog. This is a higher input version of the posterous suggestion, but I think it would be fascinating.
Cure Organic Farm is a niche producer of vegetables, with a fiercely loyal CSA membership (shares almost always sell out within days of being open to the public) and proximity to Boulder, so their toolset will necessarily differ from another organization (imagine a farm just starting off, further out, with less reputation). Hopefully some of these ideas and tools will be helpful to others thinking about strengthening offline community using online resources.
Technorati Tags: community supported agriculture, online tools, offline community, pig roast
Permalink
Wed, 30 Dec 09
Posted in Web Applications, Presentations, Video at 7:35 pm by moore
… from the perspective of people building platforms for add-ons (or plugins or extensions or what-have-you): this collection of videos from the keynote of the Add-on-Con covers a variety of interesting topics regarding browser development, the security model and how extensions fit, ad blockers and what they mean, and more.
Of the major browsers, Chrome, Opera and Firefox are represented–the Microsoft/IE representative was sick, and Apple/Safari was MIA. It’s about 30 minutes of video, unfortunately split into 5 separate segments. Well worth a view.
Technorati Tags: video killed the radio star
Permalink
Sun, 27 Dec 09
Posted in Web Applications, Tips at 11:21 am by moore
I was using the excellent displaytag library recently, and had written a table decorator to append some information about each row for a GWT widget to read and use. The table ended up looking like this:
<table>
<tr>
<td>data</td>
…
</tr>
<script type=”text/javascript”>var …</script><span id=’uniqid’ style=’display:none’>gwt config data</span>
<tr>
<td>data</td>
…
</tr>
<script type=”text/javascript”>var …</script><span id=’uniqid’ style=’display:none’>gwt config data</span>
…
</table>
This worked fine in Firefox and Safari, but IE (versions 6, 7 and 8 ) were displaying whitespace above the table. I couldn’t figure out why, until I commented out the table and the whitespace went away. Then I re-enabled the table, and commented out the finishRow method; the whitespace was still gone.
The answer, of course, is that IE doesn’t like stuff outside of the <tr> tags. Once I wrapped the span tag in <tr><td> tags, the whitespace went away for all browsers:
<table>
<tr>
<td>data</td>
…
</tr>
<tr><td><script type=”text/javascript”>var …</script><span id=’uniqid’ style=’display:none’>gwt config data</span></td></tr>
<tr>
<td>data</td>
…
</tr>
<tr><td><script type=”text/javascript”>var …</script><span id=’uniqid’ style=’display:none’>gwt config data</span></td></tr>
…
</table>
Technorati Tags: ie html quirks
Permalink
Wed, 02 Dec 09
Posted in Technology and Society, Mobile Technology, Web Applications, New Tech Meetup, Jobs, GIS, Social Media at 12:01 pm by moore
I went to the Boulder Denver New Tech Meetup last night, and as always, had a good time. I ran into Brett Borders, and had a good discussion with him about why BDNT is worth going to. I only go every couple of quarters, but I always learn something, and meet some interesting people (last night, including Marty Frary), and get jazzed about technology again. This particular episode was packed–standing room only. In addition, in the spirit of the season, there was a food drive, which was a nice touch, and a giveaway. One additional change was that the twitter stream was off during presentations, though available during the q&a period (here’s a twitterstream horror story from the presenter’s point of view).
Brad Bernthal gave an overview of Silicon Flatirons (and asked for $ support). This is a center focused on tech, law and entrepeneurship, which puts on a number of programs supporting the Boulder tech scene (I attended and reviewed one a while back: IP Crash Course for Entrepeneurs). Which raises the question–where is the CU CS department? Why is the Law school hosting BDNT and other users’ groups? The CS department does host Colloquia (I attend about one a year), but I don’t think those compare to BDNT, et al.
After Brad, we moved on to jobs and events. I was glad to see a number of jobs pop up. Over the last year, at BDNT there were always some developer jobs available, but this time there was also a marketing job. Hope it’s a sign that the Boulder tech job market is thawing (for folks other than developers). There were 8 job announcements, though one of them was equity only. About half of the presenting companies said they were looking to hire as well. As far as events, KGNU is having a fundraiser called ‘Beers With Brad’. Ignite Boulder 7 is only a week away (here’s an interesting post on how to organize Ignites).
On to presentations…
- The Blog Frog presented on their platform to turn blogs into communities. This is an interesting space–you can see competitors in Ning, MyBlogLog and Google Friend Connect, though they all approach the issue from a different angle. The Blog Frog is aimed at automating community creation, and have focused on mommy bloggers (as a large, valuable group). We did not get a demo from them, and I haven’t signed up for their service for any of my blogs, but they definitely have a cool value proposition–helping niche content providers build their communities and reach advertisers and interested people. You can see a presentation from them 7 months ago; it sounds like their business model has evolved significantly.
- The Unreasonable Institute presented next. They bill themselves as ‘Techstars for social entrepeneurs’, but they have a few differences. Instead of picking applicants and providing them money, they want applicants to fundraise to provide a fee and idea validation. After applicants are selected, they do get funds throughout the 10 week program, as well as mentoring, chance to pitch, etc, etc. The presentor said that the applications already received were split equally between the for-profit, non-profit and hybrid models. So, the funding pitches would include VCs/angels as well as foundations–an interesting twist and a great way to increase connections between those communities. They are accepting applications for the 2010 summer until Dec 15th.
- Letitia Pleis, from Metro State College of Denver, gave a great talk on the tax implications of equity as payment. She covered three scenarios. Unrestricted (’here’s 10% of the company, please write software!’) which is taxed as income at the time of the grant and also implies a great deal of trust in the payee. Restricted (’here’s 10% of the company, it vests in 3 years’) which is taxed as income at the time the grant is vested, possibly leading to a massive increase in taxes due, unless you perform an section 83(b) election within 30 days of the grant (one person spoke up and said they’d be bitten by this). Unrestricted profits interest gives the grantee claim on a percentage of future profits. She was at the end of her time, so we didn’t hear as much about this option as I would have liked.
- Next up was a gadget review. I’m not a gadget head, so I didn’t take notes on this, but they did give away a Sonos system. Well, the winner earned it by knowing what the original cost of a Apple I system was ($666.66).
- Public Earth presented next. They are a wiki of places; the presentor said just like Netflix lets you collect your favorite movies, Public Earth will let you collect your favorite places. (And they hope to have scale like wikipedia–he said that they plan to move beyond the ‘where’s the nearest restaurant’ level. I looked for ’slot canyons’ in UT, for example, and they had some. I think they need to work on their linking, because I couldn’t get a link for my query to post. But, on the upside, they don’t support IE6!) They have 5M points in their database already, and just went live. The wiki aspect is very interesting to me; I wonder whether they’ll get a critical mass of users to do spam policing. It’s an interesting contrast to Google My Maps–PE has a slicker interface and more sharing features.
- Last was RTP, with their sick iphone app, Real Ski. This is an augmented reality application that helps you locate points of interest (bathroom, particular runs) when you’re out skiing. They obviously couldn’t demo it at BDNT, but they had a video demo, and it looked killer. It should be on the App Store soon–5 area maps free, 99 cents for every other ski area map. They also asked for advice from the community about selling a B2C app; RTP apparently is a B2B company. Pricing, scale, and accuracy were mentioned, but nothing really profound. This question might be a better asked on twitter, or in some forum that allows more interaction. (I searched, and was interested to see that no one had posted advice for them on twitter.)
The only complaint I had with this BDNT was that there were no demos (apart from the gadgets). Several pseudo-demos (aka powerpoint slides/videos), and interesting and relevant presentations, but I think that live demos really add a lot and are in the spirit of the meetup.
Permalink
Sun, 29 Nov 09
Posted in Programming, Mobile Technology, Web Applications at 8:15 pm by moore
If you’re running through the Palm WebOS ‘Hello World’ application on Windows (I use XP) with the command line tools, you’ll want to change this line this.controller.pushScene("first"); to this this.controller.pushScene("First");, as outlined in this forum post. Apparently, case matters somewhere in there, and the palm command line tools generate upper case view and assistant file names.
This oversight is a bit embarrassing/peculiar, since the ‘Hello World’ example is often the first thing developers turn to when learning a new platform, and it was reported in July and acknowledged by a Palm employee that same month. I can only surmise that this works fine on other platforms (which is definitely possible, given that the palm tools don’t lowercase the first letter of the scene, as expected, on Windows).
I’m not sure about whether this affects the Eclipse plugin. This is using the 1.3.1-314 SDK.
Technorati Tags: palm pre, hello world
Permalink
Mon, 09 Nov 09
Posted in Web Applications at 9:00 am by moore
Check it out: Mozilla has made their crash reports available online. You can see crashes for all kinds of Mozilla apps, not just Firefox. But I think that the firefox stats are the most interesting. Here’s the top crashing domains for the last-but-one FF release (3.5.4). Here’s the top crashing urls for 3.5.4 (go FarmVille!). Here’s more about Firefox crash reporting in general (including links to the software that runs the online crash report server).
I’m not sure how useful this data is to normal web developers, since you can’t see if your domain is causing crashes unless it is among the top urls and/or domains in the trend reports. However, if you had a relatively high traffic website and you noticed, after a new FF rollout or new rollout of your webapp, that the FF user percentage had dropped off a cliff, you could try to see if your webapp was listed here with a large number of crashes.
Microsoft has the other main crash reporting program I’ve seen regularly, but apparently they don’t release statistics, based on their privacy policy. OpenOffice collects crash data, but that organization doesn’t appear to release the data either.
Bravo for FF for releasing their crash data. I looked around, but didn’t see any academic research based on this data–I imagine you could find some interesting trends (checkins vs crashes per version, etc).
Technorati Tags: firefox, mozilla, transparency
Permalink
Thu, 29 Oct 09
Posted in Databases, Web Applications, Useful Tools, Drupal, Cloud Computing at 2:20 pm by moore
I am wrapping up helping a client with a build out of a drupal site to ec2. The site itself is a pretty standard CMS implementation–custom content types, etc. The site is an extension to an existing brand, and exists to collect email addresses and send out email newsletters. It was a team of three technical people (there were some designers and other folks involved, but I was pretty much insulated from them by my client) and I was lucky enough to do a lot of the infrastructure work, which is where a lot of the challenge, exploration and experimentation was.
The biggest attraction of the cloud was the ability to spin up and spin down extra servers as the expected traffic on the site increased or decreased. We choose Amazon’s EC2 for hosting. They seem a bit like the IBM of the cloud–no one ever got fired, etc. They have a rich set of offerings and great documentation.
Below are some lessons I learned from this project about EC2. While it was a drupal project, I believe many of these lessons are applicable to anyone who is building a similar system in the cloud. If you are building an video processing super computer, maybe not so much.
Fork your AMI
Amazon EC2 running instances are instantiations of a machine image (AMI). Anyone can create a machine image and make it available for others to use. If you start an instance off an image, and then the owner of the image deletes the image (or otherwise removes it), your instance continues to run happily, but, if you ever need to spin up a second instance off the same AMI, you can’t. In this case, we were leveraging some of the work done by Chapter Three called Project Mercury. This was an evolving project that released several times while we were developing with it. Each time, there was a bit of suspense to see if what we’d done on top of it worked with the new release.
This was suboptimal, of course, but the solution is easy. Once you find an AMI that works, you can start up an instance, and then create your own AMI from the running instance. Then, you use that AMI as a foundation for all your instances. You can control your upgrade cycle. Unless you are running against a very generic AMI that is unlikely to go away, forking is highly recommended.
Use Capistrano
For remote deployment, I haven’t seen or heard of anything that compares to Capistrano. Even if you do have to learn a new scripting language (Ruby), the power you get from ‘cap’ is fantastic. There’s pretty good EC2 integration, though you’ll want to have the EC2 response XML documentation close by when you’re trying to parse responses. There’s also some hassle involved in getting cap to run on EC2. Mostly it involves making sure the right set of ssh keys is in the correct place. But once you’ve got it up and running, you’ll be happy. Trust me.
There’s also a direct capistrano/EC2 integration project, but I didn’t use that. It might be worth a look too.
Use EBS
If you are doing any kind of database driven website, there’s really no substitute for persistent storage. Amazon’s Elastic Block Storage (EBS) is relatively cheap. Here’s an article explaining setting up MySQL on EBS. I do have a friend who is using EC2 in a different manner that is very write intensive, that is having some performance issues with his database on EBS, but for a write seldom, read often website, like this one, EBS seems plenty fast.
EC2 Persistence
Some of the reasons to use Capistrano are that it forces you to script everything, and makes it easy to keep everything in version control. The primary reason to do that is that EC2 instances aren’t guaranteed to be persistent. While there is an SLA around overall EC2 availability, individual instances don’t have any such assurances. That’s why you should use EBS. But, surprisingly, the EC2 instances that we are using for the website haven’t bounced at all. I’m not sure what I was expecting, but they (between three and eight instances) have been up and running for over 30 days, and we haven’t seen a single failure.
Use ElasticFox
This is a FireFox extension that lets you do every workaday task, and almost every conceivable operation, to your EC2 instances. Don’t delay, use this today.
Consider CloudFront
For distributed images, CloudFront is a natural fit. Each instance can then reference the image, without you needing to sync files across instances. You could use this for other files as well.
Use Internal Network Addressing where possible
When you start an EC2 instance, Amazon assigns it two IP addresses–an external name that can be used to access it from the internet, and an internal name. For most contexts, the external name is more useful, but when you are communicating within the cloud (pushing files around, or a database connection), prefer the internal DNS. It looks like there are some performance benefits, but there are definitely pricing benefits. “Always use the internal address when you are communicating between Amazon EC2 instances. This ensures that your network traffic follows the highest bandwidth, lowest cost, and lowest latency path through our network.” We actually used the internal DNS, but it makes more sense to use the IP address, as you don’t get any abstraction benefits from the internal DNS, which you don’t control–that takes a bit of mental adjustment for me.
Consider reserved instances
If you are planning to use Amazon for hosting, make sure you explore reserved instance pricing. For an upfront cost, you get significant savings on your runtime costs.
On Flexibility
You have a lot of flexibility with EC2–AMIs are essentially yours to customize as you want, starting up another node takes about 5 minutes, you control your own DNS, etc. However, there are some things that are set at startup time. Make sure you spend some time thinking about security groups (built in firewall rules)–they fall into this category. Switching between AMIs requires starting up a new instance. Right now we’re using DNS round robin to distribute load across multiple nodes, but we are planning to use elastic IPs which allow you to remap a routable ip address to a new instance without waiting for DNS timeouts. EBS volumes and instances they attach to must be in the same availability zone. None of these are groundbreaking news, it’s really just a matter of reading all the documentation, especially the FAQs.
Documentation
Be aware that there are a ton of documentation, one set for each API release, for EC2 and the other web services that Amazon provides. Rather than starting with Google, which often leads you to an outdated version of documentation, you should probably start at the AWS documentation center. This is especially true if you’re working with any of the systems that are newer with perhaps not as stable an API.
In the end
Remember that, apart from new tools and a few catches, using EC2 is not that different than using a managed server where you don’t have access to the hardware. The best document I found on deploying drupal to EC2 doesn’t talk about EC2 at all–it focuses on the architecture of drupal (drupal 5 at that) and how to best scale that with additional servers.
Technorati Tags: ec2, amazon web services, capistrano rocks
Permalink
Sun, 11 Oct 09
Posted in Web Applications, Presentations, Useful Tools at 11:20 am by moore
I’ve written before about Google Website Optimizer. But it’s always nice to see hard data.
Here’s an interesting GWO Case Study I found online, via a presentation by Angie Pascale. It focuses on optimizing landing pages for a college system. Conclusions:
Although the SEM agency did not find a correlation between brain lateralization and form location, they did succeed in optimizing Westwood’s program landing pages. On average, the program pages saw a 39.87% conversion rate improvement, with 83.1% being the highest upgrade. After significant results were revealed, the agency stopped each experiment and changed the format for every page to reflect the best-performing contact form location.
Technorati Tags: gwo, case study
Permalink
Fri, 09 Oct 09
Posted in Web Applications, Tips, Cloud Computing at 11:57 am by moore
I am learning to love capistrano–it’s a fantastic deployment system for remote server management. I’m even learning enough ruby to be dangerous.
One of the issues I ran into was I wanted to set a variable in one task and use it in another (or, more likely, in more than one other task). I couldn’t find any examples of how to do this online, so here’s how I did it:
task :set_var
self[:myvar]= localvar
end
task :read_var
puts self[:myvar]
end
Note that myvar and localvar need to be different identifiers–“local variables take precedence”. Also, the variable can be anything, I think. I use this method to create an array in one task, then iterate over it in another.
Technorati Tags: capistrano, remote deployment, ruby newbie
Permalink
« Previous entries ·