Skip to content

Web Applications - 7. page

Solix website launch

I was able to help launch a revamped website on Monday.  Solix Biofuels is an algal oil producer moving from R&D into production. I’m not really a biology person, but I did enjoy reading about their technology.  To my layperson’s eye, algal energy sources seem much more sustainable than crop fuel sources.

It’s been a while since I’ve been the prime mover behind a deployment–there’s always a bit of nail biting when you finally reveal work to the world–but this one was fairly smooth.

[tags]solix,site launch, algal energy, oilgae[/tags]

CleanPrint Installed on my blog

About six months ago, I met with some friends who I’d worked with in the past, at Format Dynamics.  They gave me a bit of software to install on my blog, and I installed it and forgot about it. But it is worth mentioning.
It is a wordpress plugin that interfaces with CleanPrint, which is a pretty cool piece of software (I’ve written about it in the past.)  Installation is as easy as typical WP plugin installation.  You can try it out by going to any individual wordpress page and looking for the ‘Print Blog’ button:

I printed my notes from the BDNT meetup, just as an example; you can download the PDF here: June 2009 New Tech Meetup Notes.pdf.  (PDF created using the excellent PDF995 adware.)

The other option for pretty printing, of course, is to create your own print.css.  I believe that the plan is to eventually be able to display ads on the printouts, with some revenue sharing agreement.

[tags]wordpress plugins,pretty printing,shout out[/tags]

The Drupal Experience

AKA, my time with the blue droplet.  I recently built a website for a client.  I initially recommended wordpress, as I often do but the client suggested the website would grow into an application.  You can certainly do webapps with wordpress, but it seemed worthwhile to look at alternatives.  Drupal 6 seemed to fit the bill:

  • flexible
  • lots of documentation (always important in any evaluation)
  • great community
  • tons of additional functionality (called plugins)
  • customizable UI
  • multiple languages supported

So, the site is launching soon and I thought I’d jot down my thoughts.  Keep in mind that I’m very much a drupal newbie.

The good:

  • I was astonished at the plethora of modules.  In fact, just about everything we needed to do functionally was done; it was a matter of getting the right modules installed and configured.  I don’t think I wrote a single line of code, though I did do plenty of code reading.
  • The look and feel were very customizable.  I ended up using a large number of blocks (isolated chunks of content that you can control and place).  The ‘clean’ theme was pretty easy to customize via CSS.  The Web Developer add on for Firefox was invaluable for this process–just hitting ‘control-shift-C’ and mousing over a component let me know what selector to use.
  • WYSIWYG support was pretty good, including image uploading (as a separate module), control of which of the TinyMCE buttons to display, and a dropdown to surround text with custom css class names.  I ended up using the HTML Purifier to scrub input from admin users.
  • The webform module allows non technical users to create complicated forms quite easily.  I didn’t really push this module, but it appears to have support for multi page wizards and other complex stuff.  But just using it for validation of required fields saved a lot of effort.
  • Drupal6 has a robust upgrade mechanism.  At least, it sure seems like it–I have upgraded modules and the core functionality a few times and haven’t had any issues.

My issues:

  • We started off on a medium strength server, and were not caching much, and performance was a big issue.  There are a number of resources out there, and some research is worth your while.  Drupal is a big, complicated system, and like all big complicated systems, tuning is a continual process.  Luckily, there’s a fair bit of built in caching that can be enabled with a checkbox.
  • Deploying from one server to another is an issue.  I talked to a friend who does a lot of Drupal development and he mentioned it was a real thorn in the side of drupal.  There’s just not that much available supporting the ability to move code from staging to production and content the other way.  To be fair, this is an issue for most CMSes, and there are some project (deploy is one of them) attacking this issue.  I don’t know of any open source CMSes that solve this problem entirely.
  • The SEO components seemed pretty good, but I was surprised that they weren’t bundled with the base Drupal installation.  You have to install a module to enable meta tags.  And another one for page titles.  Page titles!  (I looked at but was quickly overwhelmed by installation profiles, which might obviate some of the module installation.  There didn’t seem to be much support for Drupal 6 profiles.)
  • The complexity of Drupal, which allows it to do so much, means that there’s a lot to learn.  It can be a bit overwhelming at times.

The long and short of it:
If you’re looking to build a web application (not just a site), have some php expertise and some time to get up to speed, and need a lot of functionality, Drupal is worth looking at.

[tags]cms, php cms, drupal, blue droplets keep falling on my head[/tags]

Boulder Facebook Developer Garage, part II

I attended the first Boulder Facebook Developer Garage, and it was a hoot (are people under 60 even allowed to use that word in that context?).  The second one is coming up in next week–I got a message from Kevin Cawley, who is playing some role in organizing this shindig.  All the details are here: Boulder Facebook Developer Garage, part II.

[tags]facebook garage,boulder,pizza and nerds go together like peanut butter and jelly[/tags]

Where does the cloud live?

The network is becoming more and more essential to my every day life.  Sun was right!  But I haven’t put much thought into what the cloud actually is.  Luckily, First Monday has a paper about that very topic.

“Where is the Cloud: geography, economics, environment and jurisdiction in cloud computing” gives a nice overview of aspects of cloud computing that I have not spent much time thinking about. It isn’t too in depth, but gives a nice overview of cloud computing from a non technical perspective and a good look at how the pleasant abstraction of cloud computing actually intersects with the real world.

In addition, there are lots of interesting factoids in the paper, including “Collectively, the data centers in the U.S. consume electricity on level with a sizeable city — equal to the energy consumption of Las Vegas”, “Google has submitted a patent for water–based data centers that would use energy generated by the ocean to power and to cool the servers, with the ships housing these data centers positioned in international waters”, “The Canadian government has a policy forbidding public–sector IT projects from using U.S.–based hosting services to avoid U.S. laws like the USA PATRIOT Act” and “in January 2008, Amazon Web Services was storing 14 billion units of data, varying in size from a couple of bytes to five gigabytes, and handling 30,000 requests to its database per second”.

[tags]cloud computing,first monday[/tags]

FreshBooks Review: An Invoicing System for Freelancers

Last November, I started using FreshBooks (full disclosure: if you click on that link, sign up and end up paying them money, I get some money), which is online invoicing software… Wait, let’s back up a minute.

When I started contracting and consulting (oh yes, they’re different), I originally was doing all my invoices in Word docs (actually, OpenOffice Writer), and it seemed natural to track my time there as well. Don’t repeat yourself, right?

After a while, it was tedious to have to open up each invoice every time I switched the client I was working for, so I started using an OpenOffice Calc spreadsheet. On the left hand column were dates, and on the top row were projects/tasks (“work order 13”, “troubleshooting database performance issues”). I ended up having a second row, which was client identifier.

This worked well for a while. When invoicing time came around, I would take the hours and task data from the spreadsheet and put it in the custom invoice. I’d export the custom invoice as a PDF, and put it in a directory. When the client paid, I’d move the invoice to a ‘paid’ directory. This differentiation let me send gentle reminders to clients who hadn’t paid yet.

I realized early on that this wasn’t the most efficient system. Several times, I did research on invoicing systems. I looked around SourceForge and FreshMeat, but the invoicing systems I found there were aimed at invoicing for products, not hours. I had a friend who’d used GnuCash but it seemed to be so much more than I needed.

So, each time, I went back to my old friends, the spreadsheet and the word document.

Mid last year, I was slammed with work. This made me realize, again, how inefficient my invoicing system was. I thought, ‘hey, I’ll outsource it’. A friend had a good person doing some administrative work for him. I hired her to do my invoicing, once a month. I talked her through my system, and she got it. I double checked her first invoice, and it was great. The price was reasonable, I could still use my familiar system, I was happy.

Then this lady decided to raise her prices fifty percent, in a rather high handed and arbitrary manner. Now, I was not a big client. Frankly, I can understand how 1-3 hours of work a month was not very attractive (though I did throw her some research work at least once). However, I was slightly offended at the price increase, and decided to take my work elsewhere. This shows the power of the initial price, because if she’d quoted the hourly fee at the higher rate originally, I would not have blinked.

I tried to find someone else to do the job. I found a relative, who could do the job, but required a fair amount of hand holding. The relative kept talking about the automated accounting systems she had used in the past, so I undertook my search again.

This led me to last October. I looked around for web based invoicing system that would work with me the way I wanted to work:

  • mostly time and materials billing
  • some fixed bid, including for clients that I do t&m for
  • varying hourly rates
  • ~10 clients
  • pdf invoices I could email
  • web based
  • time tracking including
  • professional looking invoices generated

I narrowed it down to three contenders (this was as of October, 2008; there may be more now):

I took one look at QuickBooks Online, saw that it was IE only, and discarded that option (I may run Windows, but I want to support the open web).

I spent significant time investigating both Cashboard and FreshBooks. I liked the Cashboard interface better, but there was a huge stumbling block. Some of my clients have both fixed bid and t&m work, during the same month. I don’t ever want an invoice to show how much time it took to do a fixed bid project–that’s my business and not the client’s concern (that’s why it is fixed bid). Cashboard had no way of putting both a fixed bid project and t&m work (which must show hours spent) on the same invoice. I even asked Cashboard support about this, and got this answer back: “At the preset(sic) time there is no way you can show time for some projects on an invoice, and hide it for others.” Updated, 4/30/2009, 20:25: Apparently I was wrong, Cashboard can do both types of line items on the invoice; see discussion below.  Now I’m not sure exactly the source of my choice of FreshBooks over Cashboard.

FreshBooks lets you do exactly that, so I signed up for their free account (full disclosure: if you click on that link, sign up and end up paying them money, I get some money). And I’ve been using it since last November. After I decided to use it, I upgraded to get more client accounts.

In general, I’ve been happy with FreshBooks. It is always an adjustment to change your business processes and/or software but I’ve been happy with a lot of what FreshBooks has to offer.

First, though, the gripes and caveats:

FreshBooks is not a full accounting package (and they don’t pretend to be one). I still don’t have one–other than the accountant who does my taxes. This means that I don’t have a precise view of my business’s health all the time. I do find out my profit and loss numbers once a year (tax time), and I find that is enough for me. The business’s expenses and income just aren’t that complicated. I had about 30 deposits into the business checking account, and about 50 checks written against it (and a number of EFTs and fees as well).

The web interface is cumbersome and non-intuitive at times. It can be learned, but the crazy urls and heavy use of javascript are occasionally issues for me. For example, editing time that you already have entered, especially changing the day the time was entered for, took me a while to figure out. I also have to re-login to my account every day, even if the browser window has been open for the entire time.

There is no free widget/desktop app for Windows XP users to use for FreshBooks time tracking (you can always use notepad). There is one you can pay a modest fee for. I think it’d be cool to write an AIR FreshBooks time tracking app–maybe sometime…

What I like about FreshBooks:

This last quarter I qualified for the report card, which is free quarterly data comparing your invoicing statistics with others in your industry. Statistics include number of invoices, amount invoiced, % revenue from new clients, and average time to collect payment. This data is great, and I don’t know how I’d find it otherwise. (As an aside, one of my other project ideas is to have a local Boulder/Denver survey of rates for web software development. I’d pay for that–would you?)

I like the reporting available, including which hours have been invoiced and which haven’t (though I have issue with a fixed bid project that I’ve invoiced, but can’t seem to mark invoiced). If you had more than one employee, this reporting would rapidly increase in value.

The cost is reasonable–I have a Shuttle Bus plan, which is 14 dollars a month. (My bank does charge me a bit extra, because FreshBooks is a Canadian company).

They have a great blog.

FreshBooks has an API, which lets you develop any number of widgets (including the time tracker mentioned above) and/or access your data from other programs.

I want to emphasize that the FreshBooks invoicing software is no one-size-fits-all solution. I am running a one person software/consulting business with a fairly stable set of clients and minimal expenses. FreshBooks has many features I don’t use (postal mail invoices, basecamp integration, expense tracking, estimates).

The biggest component that I don’t use is client login. Freshbooks makes it easy to create client accounts. Clients can then login and view documents, see outstanding invoices, contest them, and even pay them with online payment systems. This seems nice, but doesn’t fit with my client expectations. I may try this with new clients, but I hate to ask someone who is paying me money to login to yet another system, just to make things easier for me. Besides, I like to thank my clients in a personal email around the first of the month (along with sending them my invoice)–it never hurts to thank your clients.

So far, FreshBooks has been a great choice for me. If you’re in the Excel/Word invoicing world, or have an invoicing system you’re looking to dump, check it out.

[tags]invoicing,business process, freshbooks[/tags]

Popups in GWT and IE8

Just starting to test some GWT applications against IE8.  (Using IE Collection, which is very useful.  It includes standalone versions of IE from IE1 to IE8.  Very useful, even if the version of IE8 doesn’t include the developer tools.)

The only issue I’ve seen so far is that popups don’t work correctly.  Some appear, but not where they are supposed to.  Others, particularly with the lightbox we’re using (from the GWT-Widget project), just don’t appear at all.

For the latter, you get the very helpful message:

Line: 2618
Char : 324
Error: Not implemented
Code: 0
File: url to your GWT cache.js file.

(This is with GWT 1.5.3.)  After compiling the GWT with “-style DETAILED”, I looked at the precise line causing the error message.

It was in this method:

function com_google_gwt_user_client_ui_impl_PopupImplIE6_$onShow__Lcom_google_gwt_user_client_ui_impl_PopupImplIE6_2Lcom_google_gwt_user_client_Element_2(popup){
var frame = $doc.createElement($intern_1350);
frame.src = $intern_1351;
frame.scrolling = $intern_1352;
frame.frameBorder = 0;
popup.__frame = frame;
frame.__popup = popup;
var style = frame.style;
style.position = $intern_1314;
style.filter = $intern_1353;
style.visibility = popup.style.visibility;
style.border = 0;
style.padding = 0;
style.margin = 0;
style.left = popup.offsetLeft;
style.top = popup.offsetTop;
style.width = popup.offsetWidth;
style.height = popup.offsetHeight;
style.zIndex = popup.style.zIndex;
/*
style.setExpression($intern_110, $intern_1354);
style.setExpression($intern_111, $intern_1355);
style.setExpression($intern_91, $intern_1356);
style.setExpression($intern_93, $intern_1357);
style.setExpression($intern_1358, $intern_1359);
*/
popup.parentElement.insertBefore(frame, popup);
}
You can see where I commented out the style.setExpression calls, which seemed to fix the issue (the $intern strings are css property names like 'left').  Obviously not very sustainable. The other fix available right now is to add this meta tag to the HEAD section of your HTML documents:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

For more information on this, follow the GWT issue tracker bug 3329.

Notes from Tom Malaher’s cloud computing presentation

A former colleague, Tom Malaher, did an online presentation about cloud computing on Mar 11 at the Calgary JUG.  You can view the recording of it now.  It was titled: Cloud Computing and Amazon Web services (AWS), and was a great survey of cloud computing and then a nice dive into AWS.  I used to work with Tom and always enjoy the depth and breadth of his presentations.

Below are some of my notes.

  • This was their first online meeting, due to cash flow issues (lack of sponsorship), and to make it easier for speakers out of the Calgary area.  It was put on using Elluminate.com.  (This client was installed using JNLP; very easy to install and setup).  You can use Elluminate for up to three participants for free (but you cannot record your session).
  • Definition of cloud computing is in tug of war in vendor land.  According to Infrastructure Executive Council, cloud computing is elastic, multi-tenant, on-demand, usage based metering (no long term contracts), self service

Tom outlined a number of variations on cloud computing

  • Infrastructure as a service (s3, ec2)
  • Platform as a service (Google app engine, Microsoft Azure)
  • Software as a service (Google docs, salesforce.com)
  • Grid computing–more homogenous, but lots of overlap

Diving into Amazon Web Services, he outlined all the webservices that Amazon provides.  I had already heard of a number of these, but two caught my eye:

  • DevPay–pass through payment for Amazon Web Services.
  • Public Data Sets–public domain data sets easily available for computation on the AWS platform

Composing AWS services makes sense, since there are no bandwidth charges between Amazon service calls within Amazon’s data centers (e.g. EC2->S3).

He had some interesting figures from the IEC: 70% surveyed are not using cloud computer (40% aren’t even considering it).  Only 10% are hosting an ‘app’ on the cloud (with no definition of an app).  I asked a question of Tom about what is considered an app.  I have a client who is hosting backups and images on s3, and friends who regularly back up servers to s3.  Is that an ‘app’?  I don’t think so, but Tom didn’t have a definition of ‘app’ for this survey.

Tom also did an interesting cost analysis when he was looking at pros and cons for AWS.

The 1and1.com high end hosting agreement: 1gb ram 50gb hd, 2000gb transfer: $59/month.

For a comparable AWS instance, with an ec2 image, 1.7 MB ram, 160gb hard drive (ephemeral), 2000 gb transfer, persistent 50gb hard drive: worst case $479.50/month, but for one day: ~$16.

In my opinion, this is the key con of AWS right now, at least for full fledged applications. It’s simply not cost competitive with some of the hosting you can find out there.

And with regular hosts, you don’t have to deal with as much infrastructure overhead. Tools like ElasticFox and S3Fox can help.  I’ve used S3Fox and love it.
The development model is suprisingly similar (Tom mentioned building his demo on his home machine and using some of the more exotic services, like SQS; then, when he was ready for the full cloud deployment, he just moved his war file to the appropriate image after some setup).

Then Tom demoed an app built by composing a number of Amazon web services.  Starting an an ec2 machine image (AMI) takes a long time (but still less than building a machine from scratch :).  During entire presentation and demo (1 hour, 3 instances, some messaging, he was only charged 50 cents.

Other interesting uses: The NY Times used it to build a bunch of web friendly pngs from tiffs of papers past.
You can use a regular RDBMS, with Elastic Block Storage.

Someone asked: where does AWS fit in larger organizations?  Tom thought it was a good fit for small organizations…  But he was not really sure about large organizations.

In my opinion, many of the technical decision makers I know are willing to use S3 as a storage mechanism, but they still want a backup solution, in case Amazon is unavailable (as it sometimes is).  This unavailability would be even more damning if you had an entire webapp running off ec2 and the other services.

Buying your own dedicated server has its own risks, but many people are still used to that paradigm.  But, for quickly scaling, or for a special one time project that needs a lot of firepower (like the NYTimes project above), it makes sense.

Stepping back from AWS, the idea of cloud computing seems to be continuing to make progress and attack the issues of network connectivity, security and cost that make it a hard sell at the present.  I love the delineation of the variations (infrastructure as a service, etc), and not all cloud computing will look like AWS.
Overall, a great presentation.  If you have the time (I stayed for some of the Q&A, and left at the 90 minute mark), it’s worth a listen. Go ahead, check it out.

[tags]cloud computing,cjug[/tags]

Supporting cutting and pasting in web applications

Dion has a long, interesting, painful article about supporting cut, paste, and copy operations for Bespin, a web based code editor.

In our world with the editor [in webkit], we use the before events to set things up, and we have to do something pretty hacky to make it happen. The copy event itself only actually goes through if you are on an element that supports it. There are hacks around this too. For example, if you want to be able to get a copy event on a div, you need to turn on contentEdible and set the tab index to -1. Strange huh?

All I can say is ‘Ow!’

Review of etendi BRIDGE: a family distance communication product

I have some friends who recently launched etendi BRIDGE, a product aimed at making family communication easier, especially when the family is divided by distance.  You can view a slightly heavy handed video that gives a good overview of the feature set (though not the best sound).  Features include calendaring, email (which they call ‘Thinking of You’ messages), a shared whiteboard, video messages, and notes.  All the action happens in a pretty slick Flash interface.  It also sends all traffic over SSL, which is the same standard that banks use, etc.

In addition to clicking around this myself, I set etendi up with my girlfriend and mother (yes, yes, perhaps they shouldn’t be in communication, but what can you do?).  I ended up kicking the tires on the video chat with my girlfriend; video chat seems to be the killer feature.  I was able to fairly easily set up the sound.  I did have an issue with the microphone–at its default setting, the software couldn’t hear me, and kept giving me an error message.  This happened even though I’d had no trouble using the mic at that level with skype.  Video chat didn’t work for me, as I had no video camera.  But my girlfriend also had issues with it; we didn’t have time to dive in, but it may be her system, as she has had webcam issues before.

One final note about usability–in general it is great, but when you are adding a user to your etendi house, no cues are given if the password isn’t long enough; the save button is just disabled.

From a web application developer’s point of view, it’s a very cool app that feels much like a desktop app.  I’m not sure what it means for our society that there’s a niche for this type of remote communication application with children, but it’s a very cool app.

I’m not going to pretend to have done a wide survey of solutions in this space, but here are some other options that solve some of the same problems:

  • roll your own solution with youtube/email/im/netmeeting/phpbb/phpgallery/etc: You can do this, but security is an issue–never put anything in an email that you wouldn’t put on the back of a postcard!  However, make sure you read and understand the etendi terms of service.  The amount of work to bring this together would be substantial to be feature complete with etendi.  On the other hand, you can customize it as you like, and it is free except for your time.
  • Facebook/other social networks: Facebook, and myspace and friendster, etc, solve some of the same issues. As far as I know, there’s no video messaging service that integrates with FB, but it does have most everything else (email, whiteboard, photo gallery ).  However, with facebook, your child has to have an email address and there are as far as I know, no parental controls.  Also, every bit of content you upload to Facebook grants them a right to use that content for any purpose as long at is up there (see the user content section of their TOS for more).  But, it is prevalent, easy to use, and free.
  • Ning: Ning lets you create your own private social network, solving some of the control issues.  You can share videos, photos, blog posts and events.  You can invite your friends, but again they have to have an email address to be invited.  You have some pretty granular control over what members can do (you can choose to approve photos before they appear, etc).  They don’t have quite as nice an interface as etendi does, but they do have 141 widgets you can add (and a nice API).  You also have to deal with advertisements, or you can pay $25/month to remove them.  Ning seems like a nice alternative to etendi, but is definitely aimed at more sophisticated (read, adult) users (users under 13 are explicitly asked to avoid Ning networks) and doesn’t have the tight focus on families.
  • Obscurity.

etendi has been live for a few months, so I’m glad they are starting to get some press, and I hope they continue to update the blog.  If you need to keep in touch with family over long distance and both ends have high speed internet and webcams, you should give etendi BRIDGE a try.

Disclaimer: I have worked with these FOLKS in the past, way back when I was concerned about testing Korean content, and have had a beer or two at their office.

[tags]zia,etendi,telepresence,children of divorce[/tags]