Review: Nixty.com

Jul 30, 2010 at 12:45 pm, Jared Stein

Nixty.com is billed as “a truly disruptive educational platform”, a free, public LMS aimed at delivering both traditional and informal, open educational experiences. Seth Gurell and I reviewed Nixty pretty thoroughly this week, then co-wrote this review. Michael Feldstein, Alan Levine, and others[1],[2],[3] have already provided some insights and serious commentary on the idea of Nixty and its claims. Our review neglects that side of the discussion and focuses on the basic features, usability, and feasibility of the system from a designer and a user perspective read more

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 read more

Dual-Coding, Dual-Route

Jul 28, 2010 at 7:25 am, Jared Stein

Late last week I spent some energy questioning and answering my current understanding of dual-coding theory and it’s distinction between verbal and non-verbal, vs. visual and non-visual read more

Broad Must-Haves in an LMS

Jul 24, 2010 at 12:13 pm, Jared Stein

There’s been a real debate about the role of the LMS–if any–in modern online learning going on for the last 5 years or so. I’m situated somewhere in the middle: I’d love to see real-world examples of disruptive applications of technology to online learning that prove effective for learning; I also realize that many online learning experiences can be–and in some cases, perhaps excel when supported by what we now know as a traditional learning management system. Here in Utah we’re examining potential replacements for Blackboard Vista. I’ve listed the following broad must-haves I think an e-learning platform should do read more

Verbal, Non-Verbal; Visual, Non-Visual

Jul 22, 2010 at 6:08 pm, Jared Stein

Pavio distinguishes between verbal and non-verbal information as a basis for dual-coding theory–an important concept for educators designing and developing learning media. The distinction between these categories is clear to me, but during a class discussion today it seemed I was in the minority read more

List of Faculty Certification Programs

Jul 9, 2010 at 10:59 am, Jared Stein

I found this old e-mail from the POD mailing list describing a number of faculty certification programs for online teaching. I’m posting it here more as a reminder to myself as Marc and I move forward with a hybrid faculty development program here at UVU read more

Did Blackboard Just Buy Elluminate and Wimba?

Jul 7, 2010 at 1:51 pm, Jared Stein

Here’s the letter Michael Chasen sent out today (emphases added) read more

Notes on McDonald’s TTIX10 Pres, “Resisting Technological Gravity”

Jun 10, 2010 at 2:45 pm, Jared Stein

I’ve read Jason’s paper on the topic of technological gravity, and I’ve heard him guest lecture in Stephen Yanchar’s learning theories course at BYU, so I thought I knew what to expect from Jason’s TTIX 2010 session. Jason’s pres was both pleasantly divergent and more expansive, and both his slides and his presentation style–which paced his own personal experiences between anecdotes and examples–complemented the content. Here are some rough notes from his session read 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