Posts Tagged ‘web’

Follow-Up on Apple’s War with the Open Web

Jul 28, 2010 at 5:59 pm, Jared Stein

Alright, so maybe “war” is overstating it, but as I argued earlier this year Apple is very much posturing itself against the idea of the open web and for the closed consumption environment controlled by its Apps. I stumbled on a couple follow-up posts that follow-up and nuance this debate (more…)

Advice to a New Freelance Web Developer: Charging Clients

May 26, 2010 at 5:48 pm, Jared Stein

Today I received an e-mail from a former student asking a common question: how do I know what to charge clients for web design/development?

To be clear, I am no longer a full-time freelance web developer. Indeed, I haven’t been a full-time web developer for a number of years, though I do still take projects on the side.

I did, however, think I had enough info to write out the following rather lengthy answer, which I hope to refine and turn into a lesson page later on this semester. There are quite a few better sources to turn to than I, and there have been a few recent articles and books on this subject, but here’s how I framed this particular answer in a way that hopefully walks the student through my thought process and tips them off to at least a few of the bigger picture items that must be considered sooner or later:

First, you need to decide if you’re going to charge hourly or lump sum. I prefer the latter, and I think clients do too.

Even so, I still start by calculating how much I need to be earning per hour–this is a figure I keep internally, and don’t share with clients.

Then, start adding upwards.

For instance, now that you’re working freelance you’re considered to be self-employed by the US Government, and will need to add about 30% for Federal taxes on top of everything else. (Make sure you put that 30% in a separate bank account!) What about State taxes? That varies state-to-state, so check your local codes.

There’s also a matter of other costs you’ll eventually need to roll in to your charges, especially if you look at doing this full time: What about Internet access, computers, software, electricity — these don’t come free! Do you need this work to pay for benefits for you/your family (health insurance, dental, life, etc)? What about advertising (if any) or time spent drumming up business? These need to be absorbed, too.

I’m going to keep it simple in this example and exclude those costs, and I think you probably don’t have to worry too much about this when you’re first starting up–especially if you’re doing freelance in addition to another job. However, be sure to consider these costs later after you move your business forward.

So if that the take-home amount is, say, $15/hour (which is not too bad for someone just starting out–most of my student developers get less than that) first add 30% for taxes, rounding up to $20/hour.

Then, figure that if you were doing this full time you’d be working at least 40 hours a week at least 4 weeks a month. This gives you a number through which you can absorb business costs on a per-hour basis by simple division. So if I’m working from a home office my internet, electricity (for just my office), computer upkeep might add up $160 a month, which is convenient because it means I just add another dollar to my hourly rate. Etc.

The next number to determine is tougher. How many hours will the project take you? Be realistic, and include meeting times. The best way to know for sure is to have tracked your time on projects in the past. I’ll give you just one example: I wrote XHTML and CSS for someone’s resume the other weekend, which turned out to be a 3 hour job including the initial meeting, and some minor experimentation with CSS 3’s @font-face property at the client’s request. Then I spent an hour testing it across browsers and making minor adjustments. So 4 hours for 1 page of content.

In this case we just needed one page, but in sites with multiple pages using templates will make things go faster. Because of this I usually charge on a first-page, additional-page basis, if that makes sense.

At any rate, it’s common to undercharge early on by not accurately estimating the time involved. And that’s OK early on, because you’re learning! But learn from your mistakes, and track your hours, so that in the future you can be more on-target and provide good service at competitive rates. Consider using a project management or time-tracking tool to help you with this.

Another practice I’ve heard others use in the past is to take my estimated time for a project and double it. This is based on the presumption that we always underestimate how much time tasks take us. I think this is true initially.

So now I know my per hour rate ($21), and I’m confident that for a media-free (text-based) static page it takes me about 4 hours. So I might charge $80 for that first page, and, using that first page as a template, charge $20 for each additional page. Now we’re starting to have a basic formula!

Oh, but what if you have to do visual design? Logo design? Will it take you 20 hours to come up with a good visual design? 40? 60? What about changes the client will inevitably request? Certainly you want to include the client at each step, from thumbnails to comps to finished versions. Heavy involvement early on will reduce the likelihood of conflict and frustration later.

Now if Javascript or PHP come into it, we start talking big money. Not just because it takes longer to develop, but because you must work with other people’s web servers, you must be secure, your code must not break on any browser, you must case-test for a number of different user scenarios, etc.

Don’t be afraid to ask yourself if you need to outsource tasks where your skills are not yet adequate. This is a good way to ensure your client gets what they are paying for–and can save you time in the long run. For instance, if I had a client needing a Flex app, I’m not going to spend 200 hours on it when a skilled Flex developer could do it in half that time. Sure, I have to pay them, but sometimes you can barter your skills for theirs.

Finally, make and maintain a master list of services you could provide with a dollar charge next to each, i.e. Basic web page production (HTML & CSS): $200 first page, $50 each addtl page. MySQL database set up: $50 per table, limit 30 fields. etc. I keep my own Excel spreadsheet with as many options as I can think of, and I modify this as I learn more about my own time, resource expenditures, and costs.

That’s it. As I said, this was just an e-mail I kicked out to a student, and this omits important info on contracts and agreements, but it’s a big topic, one which I expect to reflect upon and revisit in this or another post.

Condensing the “News” Feature of My Moodle Using a Show/Hide Javascript

May 19, 2010 at 2:19 pm, Jared Stein

The My Moodle feature in Moodle 1.9x displays a list of registered courses to a user after logging in. The nice thing about the list is that each course link is followed by a listing of any recent news or events in the course. Unfortunately in highly active courses this list becomes quite lengthy, and ultimately obnoxious as the length obstructs quick access to other courses in one’s view.

To remedy this I have, for quite some time, maintained a custom bit of very basic Javascript and CSS that sets the default view of news items to hidden, with a clickable link to show the entire list from the My Moodle page:

hidden news in My Moodle

Clicking “There is news in this course” expands the news.

hidden news in My Moodle

The default for news for each course is “hidden”.

Nothing fancy, and even as I look at it now I can think of improvements…

We just upgraded to 1.9.8 this semester, and because this snippet modifies Moodle core I had my developer Kevin re-test the snippet before I asked our server admin Paul to replace the existing function as follows:

file Location:            '/course/lib.php'
file line:                    "800"
function to replace: "function print_overview($courses)"

Here’s the actual replacement function:

// Begin My Moodle Show-Hide News modification

// Replaces function in “course/lib.php” to hide course news by default.
// Hidden news is viewable via Javascript by clicking “There is news in this course” link.
// Link does not exist if there is no news in the course.
function print_overview($courses) {

   global $CFG, $USER;

   $htmlarray = array();

   if ($modules = get_records(‘modules’)) {

      foreach ($modules as $mod) {

         if (file_exists(dirname(dirname(__FILE__)).’/mod/’.$mod->name.’/lib.php’)) {

            include_once(dirname(dirname(__FILE__)).’/mod/’.$mod->name.’/lib.php’);

            $fname = $mod->name.’_print_overview’;

            if (function_exists($fname)) {

               $fname($courses,$htmlarray);

            }

         }

      }

   }

   foreach ($courses as $course) {

    print “<ul style=\”margin: 0; padding: 0; list-style: none; width: 96%; \”>”;

      $linkcss = ”;

      if (empty($course->visible)) {

         $linkcss = ‘class=”dimmed”‘;

      }

      print’<li class=”coursebox” style=”padding: .5em 1em 1em”><h3 style=”font-size: 120%; font-weight: normal; margin: 0 0 .2em 0″><a title=”‘. format_string($course->fullname).’” ‘.$linkcss.’ href=”‘.$CFG->wwwroot.’/course/view.php?id=’.$course->id.’”>’. format_string($course->fullname).’</a></h3>’;

      if (array_key_exists($course->id,$htmlarray)) {

print ‘<a href=”#” id=”toggler_’.$course->id.’” onclick=”document.getElementById(\’coursenews_’.$course->id.’\').style.display=(document.getElementById(\’coursenews_’.$course->id.’\').style.display==\’block\’?\’none\’:\’block\’); document.getElementById(\’toggler_’.$course->id.’\').innerHTML=(document.getElementById(\’toggler_’.$course->id.’\').innerHTML == \’There is news in this course…\’?\’Hide course news…\’:\’There is news in this course…\’);”>There is news in this course…</a><div id=”coursenews_’.$course->id.’” style=”display: none”>’;

         foreach ($htmlarray[$course->id] as $modname => $html) {

            echo $html;

         }

print “</div><!–end contents–></li>”;

      }

      print “</ul>”;

   }

}
//End My Moodle Show-Hide News modification

(Respondus) Lockdown Browser for Assessments at UVU

May 3, 2010 at 3:21 pm, Jared Stein

Reposted with added commentary from DEIDS.on.uvu.edu.

The UVU Blackboard server now allows designers to require Respondus Lockdown Browser (LDB) on assessments. This means that if an assessment is set to use LDB, the end-user (test-taker) computer must have the free LDB software installed (Bb should prompt the user to install it before the assessment can be accessed). UVU’s Testing Center has installed LDB on all its computers and is testing it before next semester. We presume this is pointless unless the Bb assessment has LDB selected, but are looking into it. In any case where LDB is used to take an assessment, “lock down” happens according to Respondus’s descriptions–even if the exam itself is not triggered to require Lockdown. I asked Respondus to clarify the “switch” in Bb, and they responded this afternoon:

The “switch” in Blackboard and other course management systems helps insure (sic) that the assessment can only be taken with the Respondus LockDown Browser. Without enabling the switch, students can take the assessment using any browser they want, including the secure browser.

For Distance Ed this means that if an instructor wishes to use LDB, we must ensure proctor locations have the LDB software installed. This may require adding wording to the proctoring info web page. For the UVU Testing Center, if they make LDB the only web browser installed on lab computers, all assessments have no option but to be “locked down”.

Brian Swaney has written a lengthy post on LDB, explaining why he thinks it’s an awful idea that only inhibits cheating in limited scenarios, and though Brian’s post gets a little bit out of hand, I do agree with most of his points. Here’s a summary of these, some of which John Krutsch, Marc Hugentobler, and I have brought up in our conference sessions, “How to Cheat Online” and “The Cheatability Factor“:

  1. LDB may encourage institutions to take advantage of broadly accessible but ill-suited environments for testing, like open student computer labs.
  2. Unless the physical environment is also “locked down” the LDB will do little to inhibit cheating (crib notes, use of a 2nd computer, mobile devices).
  3. Unless student identities are verified, LDB does not prevent impersonation (note: LDB doesn’t claim to).
  4. There is a line between securing assessments and respecting student privacy. I don’t think LDB crosses it by any means, but Brian raises some legitimate concerns about requiring software installation.
  5. All technology, including LDB, can be hacked.
  6. The kinds of assessment best protected by LDB may not be good at assessing important kinds of learning. But LDB may be alluring as a (false) panacea for measuring all kinds of learning.

iPad vs the Open Web

Apr 8, 2010 at 3:15 pm, Jared Stein

There’s so much buzz about the iPad you can taste it! And it ain’t all minty! I got my paws on one Tuesday afternoon, and found it not revolutionary as Apple prophesied, but rather as many have described: a big iPod Touch (which is essentially a phone-less iPhone).

apple-ipad

Now like the iPhone/Touch the iPad can use thousands of “apps”– miniature applications developed solely for use on iPhone/iTouch/iPad, and sold through the Apple store. What’s always been disconcerting about the app development process is that (more…)

The Joy of CSS max-width

Apr 7, 2010 at 8:38 am, Jared Stein

The CSS max-width property has long been a favorite of mine, most often used to restrict the flow of content depending on the user’s browser, such as we see in elastic layouts. Since I began making WordPress themes a couple years ago I’ve used max-width as a staple rule for media in my stylesheet, starting with images that might appear in a post (e.g. .post) (more…)

What “New Speculations”?

Sep 18, 2009 at 8:05 am, Jared Stein

Not unexpectedly, Jon Mott’s blog post, “Outsourcing Our Memory to Google” set my mind thinking in productively curious directions–even if I’ve ended up with no conclusions, and, indeed, more questions than I began with.

I’ve finally gotten around to reading through Ong’s “Orality and Literacy” (more…)

Blackboard Vista Triggers Quirks Mode

Apr 2, 2009 at 9:25 am, Jared Stein

Ever been annoyed by Blackboard Vista’s (or Campus Edition 6+’s) rendering of your XHTML + CSS web pages? Yeah, me too–especially on Internet Explorer. This happens because Bb Vista triggers a browser’s quirks mode in spite of DOCTYPEs and validated markup (more…)

Re. “CSS Angles” and the Future of Em-Based Scaling

Dec 3, 2008 at 11:43 am, Jared Stein

Sitepoint offered up an article by Tim Wright (CSSKarma), CSS Angles: Just the Edge Your Web Page Needs!, which shows that increasing the size of a single border property results in an angular object that can be placed behind things. After some experimentation I found a new solution and a new conundrum (more…)

2008 Survey for People Who Make WebSites

Jul 29, 2008 at 8:28 am, Jared Stein

This morning A List Apart, my favorite Web dev periodical, put out it’s 2008 Survey for People Who Make WebSites. I made it through all 18pp. If you make Web sites, join in: sruvey