Sunday, March 13, 2016

Fiverr - The Ugly, the Bad and the Good

So, news is, after being active on some freelancer sites for a while, I've ended up on Fiverr as well. I won't just moan about their features, but try to go through the experiences with the site as an IT/networking guy.

The primary concern that people have with the site is the fee they charge: 20% from the freelancer, and another ~10% from the client, which is less publicized. Now, it doesn't quite add up to 30%, as folks like to quote it, as strictly speaking they charge the client $5.5 for the job (gig), and you get $4, so they keep $1.5. Now, calculator says, $1.5 is 27.27% of $5.5, but details. Anyway, it's a fair bit higher as the 10% on Upwork or the 8.some% of Elance (soon to be gone). As Upwork charges flat fees for taking your money out, I expected Fiverr to be at least free on that part, which it is not, but at least it's cheaper.

Fiverr was designed with two things in mind: tiny ($5) jobs and creative professions. This is proving to be a major restraint on their growth to other sectors, and they're adding exceptions to the $5 base price as well.

Designing a -not necessarily good, original or legally safe- logo for a fiver seems like a reasonable job (I've used it, I've received an okay logo, which I don't think is a copyright timebomb), but for IT it's kinda hard to come up with a unit of work for this amount. With my average freelance rate, that's about 12 minutes of my time. And it's not timed, paid after-the-fact, like Upwork, but you have to give an offer for a final value. So you'd either tell the client that 'This will take 2 hours, please but 10 of my gigs as 12 mins is the timing unit', which sounds a bit funny, and you can't refund if you ended up doing it quicker, or you try to give a quote for the full work and hope it'll cover it. Trouble is, most clients don't even know exactly what they want (not news to us), so you can only hope you won't work a lot more for the agreed price, or overcharge them, or just give a too high offer and they bail.

Also, during the offer phase, there's potentially a lot of back-and-forth, typically consulting-level discussion while scoping out the project. Now, lots of messages/emails are nothing new, but it can be hard not to start asking for money for the level of support provided before even an offer is made, let alone accepted.

Extras can increase the price to a point, but in some parts it can feel like you're taking the client as a hostage during the upsell process: "Sure, you've paid $5 for the logo design. Oh, you actually want to receive it (in vector format)? That's another $10 please!" It was written in the terms of the guy, but still feels a bit weird.

Communication: Fiverr explicitly forbids direct communication between client and freelancer, and the messaging system displays a red warning on words like 'phone', 'mail', 'skype' or the @ symbol. Okay, we got it, revenue protection. For creatives, this may work, but I simply can't work on the device of the client without some communication tool like skype, teamviewer, remote desktop or anything. Basically it's impossible to do these tasks with this constraint, so it just gets disregarded.

To sum it up so far, I've worked a fair number of hours for a fairly low amount of $, due to unforeseen issues with projects, client jumping the gun and ordering the base gig and wanting me to save the world, but we live and learn.

The good: okay, so why am I still on the site? For a ridiculously simple thing, that's not even a feature, but the basic concept of the site: the clients are looking for a gig to buy. Yes, that is a big difference. Consider the daily routine on Upwork: check new job postings, filter interesting ones, filter out jokers, filter out too low priced ones, filter out cheap buyers, research remaining jobs, write an original proposal to each. Massive time-sink. Potentially worth it if you find good, stable, paying clients, but still. On Fiverr, the buyer will contact you if he/she wants something. You might not get contacted, but no time wasted. The buyer might buy from somebody else still, but at least you have a foot in the door, and so far it was fairly rare that somebody requested an offer and bought from someone else. And you don't need shiny 'cover letters', just to stand out, you can immediately concentrate on the actual details of the gig, give an offer and see if it works for the buyer.

I don't think the 'Gig economy changed his life and bought a yacht from Fiverr money' will apply to me, I work for a lot less than usual on the platform, but at least it's not wasting too much of my time, for which I'll stay for a while.

Saturday, May 9, 2015

iStock keywording rant

A few months ago I've decided to start contributing to iStock. I'm not much of a photographer, but the thinking was: I can get to some places which might be interesting for others.

So I've started uploading pics of pretty datacenters, 10Gig switches and the likes. And keywording these accurately for what they are, being as specific as I can.

One thing I've noticed from the most downloaded photos is that they have all the keywords in the world, which have nothing to do with the photo, kinda like websites in the early 2000's having everything up to and including 'sex' and 'mp3', because they were popular search term.

The title pic is a very nice patchpanel, from the Signature collection of iStock.
Now let's check out its keywords:

Computer Network, Node, Cable, Fiber Optic, Router, Computer Cable, Communication, Wireless Technology, Business, Telecommunications Equipment, LED, Network Connection Plug, CPU, Control Panel, rj45, Control Room, isp, Power Line, Internet, data center, Computer Part, access point, Equipment, Light - Natural Phenomenon, Close-up, Wired, Network Security, Network Server, Modem, Rack, Midsection, Number, Connection, Support, Concepts, White, Blue, Black Color, Ideas, Technology, Macro, Computer

Most of them are far fetches, the weirdest are in highlight. Is this any use to anybody at all, from the buyers side? Buyers really never search for specific terms and they never know anything about the brands/devices they're looking for? I'm not that convinced, but I'm a novice on the platform, so maybe so. Comments are most welcome.

In the meantime, I've started to collect brand-specific lightboxes, maybe they'll be some use to some folks:

Cisco switches lightbox
HP switches lightbox

Wednesday, March 4, 2015

How to deny Postfix SMTP authentication from non-US clients

As the war on spam continues, one of my clients wanted to only provide SMTP AUTH capabilities to IP addresses in the states, as their employees are only located there anyway.

Postfix has a facility for this, called smtpd_sasl_exceptions_networks. It basically denies SASL auth to IP's from the specified ranges. Disregarding IPv6 for now, here's a list of IP ranges from IANA that are non-US (ARIN) allocations:

smtpd_sasl_exceptions_networks = 0.0.0.0/7
  2.0.0.0/8
  5.0.0.0/8
  10.0.0.0/8
  14.0.0.0/8
  25.0.0.0/8
  27.0.0.0/8
  31.0.0.0/8
  36.0.0.0/8
  37.0.0.0/8
  39.0.0.0/8
  41.0.0.0/8
  42.0.0.0/7
  46.0.0.0/8
  49.0.0.0/8
  51.0.0.0/8
  53.0.0.0/8
  57.0.0.0/8
  58.0.0.0/7
  60.0.0.0/7
  62.0.0.0/8
  77.0.0.0/8
  78.0.0.0/7
  80.0.0.0/4
  101.0.0.0/8
  102.0.0.0/7
  105.0.0.0/8
  106.0.0.0/8
  109.0.0.0/8
  110.0.0.0/7
  112.0.0.0/4
  133.0.0.0/8
  141.0.0.0/8
  145.0.0.0/8
  150.0.0.0/7
  153.0.0.0/8
  154.0.0.0/8
  163.0.0.0/8
  171.0.0.0/8
  175.0.0.0/8
  176.0.0.0/4
  193.0.0.0/8
  194.0.0.0/7
  196.0.0.0/7
  200.0.0.0/6
  210.0.0.0/7
  212.0.0.0/7
  217.0.0.0/8
  218.0.0.0/7
  220.0.0.0/6

Tuesday, December 30, 2014

ARCH Linux on a WM8850-based mini laptop

One of my purchases earlier this year was a mini laptop, powered by a Wondermedia WM8850 chip.



It's kinda handy: runs Android/Linux selectively, has a HDMI interface, wired Ethernet and fullsize USB 2.0 ports. Also, it can be charged from USB, tablet style.

Quirks include no HDMI on Linux (yet), and it takes a bit of effort to turn on the wireless. Missing the gpio binary, you can get there by using the sysfs interface:

echo 6 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio6/direction
echo 1 > /sys/class/gpio/gpio6/value


Just echo 0 there to turn it off again.

Compiling a kernel needed some scraping on the web, but can be done like this:

cd linux-3.16
nice make ARCH=arm menuconfig
nice make ARCH=arm zImage
cat arch/arm/boot/zImage arch/arm/boot/dts/wm8850-w70v2.dtb > arch/arm/boot/zImage_w_dtb
mkimage -A arm -O linux -T kernel -C none -a 0x8000 -e 0x8000 -n "My Linux" -d arch/arm/boot/zImage_w_dtb ~/uzImage.bin
make ARCH=arm modules
sudo make ARCH=arm modules_install


The kernel config is online here.

It works happy with a 8GB SD card and adding a bit of swap can't hurt as the 512MB of RAM is not that much.

Thanks for the vt8500 developers!

Monday, December 29, 2014

HTML5 video live streaming with ffmpeg and mediaelement.js, Round 2

Follow-up from this summer to the original post.

So, after not rolling out our HTML5 player last year, we've decided to give it a go again this year.
What we've learned: things have changed in Internet-land.

IE no longer requests or supports WMV anymore, which is weird but actually correct. It takes mp4 now as default.

Chrome was still ticking along happy.

Firefox was a big surprise: between version 19 and 20 they've reworked the HTTP engine, so it's a bit quirky now:
  • It fetches the first 8k for metadata in a request
  • It uses HTTP 206 Partial content requests now
  • If it doesn't get an X-Content-Duration, it'll send a new partial request for the end of the file. As it's transcoded on the fly, this is bad for us.
So, we need to give it:
  • HTTP 206 headers
  • Range headers
  • X-Content-Duration headers (in seconds)
This can be done with something like this:

$ua=$_SERVER['HTTP_USER_AGENT'];
$useragent='generic';
# match Firefox 1-19
if ( preg_match('/Gecko.20.*Firefox.(1){0,1}[0-9]\./', $ua) ) {
    $firefox19=true;
}
# match all Firefox
if ( preg_match('/Gecko\/.*Firefox.[1-9]/', $ua) ) {
    $firefox=true;
}
# if Firefox 20-
if ($firefox && !$firefox19) {
    $useragent='ff20';
}

# generic headers
if ($useragent=='generic') {
#header("HTTP/1.1 200 OK");
#header('Content-Disposition: attachment; filename=' . basename($file));
}

# firefox 20+ headers
#   firefox 20 wants partial content with code 206, and likes X-Content-Duration
if ($useragent=='ff20') {
header("HTTP/1.1 206 Partial Content");
header("Range: bytes=0-");
header("X-Content-Duration: $totduration");
}

I couldn't get the Flash fallback of mediaelement.js working and Silverlight was killed by Microsoft, so mediaelement.js was taken out from our setup, with a manual Flash fallback link.
We've also noticed A-V sync issues with ffmpeg, so deployment was pulled again, but we're making progress.

Thanks to Browserstack, for making life easier while testing.