Tips and tricks to stay healthy when you work at a desk

Researchers have found that after 20 minutes of sitting still the body is starting to produce toxins, that you are somehow poisoning yourself and that exercising even every day is not enough to counteract the effect. Here are two methods to avoid that and some other ideas to make your life better. Continue reading

The best way to integrate your LinkedIn profile with WordPress

I heard or read someone, recently, saying that LinkedIn was nothing more than a glorified resume. Well, 10 years ago this was certainly true and I was not looking for anything more. I had ditched the Word documents since a long time and was distributing my résumé in PDF format, despite some recruiters stubbornly asking me Word documents. Continue reading

Image Credits: Jerry Luk

Fair warning to my Facebook friends

Last year I started to grow concerns about my privacy on Facebook. Not because of another change in Facebook privacy settings or a hack of any kind but because I started to realize that the biggest threat to my online privacy are my friends themselves. Continue reading

Image Credits: John Goodridge

Print me up Scotty!

3D printing just got to a new level with the worlds smallest 3D printed objects (go read this and watch the video, I’ll be waiting here).

3D printing is a subject I have been discussing often with friends and I even mentioned it in a previous post, here (in French), about IP and piracy. This is a revolution I cannot wait to see because this is gonna be huge on so many levels!

And the music/movie download issues will be nothing compared to the IP mayhem this is gonna bring, just imagine when anyone will be able to print a Panton chair or a Starck lemon squeezer.

And just think about what will be possible with copyleft designs, we might even have a Justin Bieber of design (tho I am not really looking forward for this one)!

And we will be able to download items we buy from Amazon.

This is the beginning of teleportation too! As soon as someone develop a good enough scanner (can TSA’s full body scanners be of any use here? or this may be?) we will be able to scan and send items through the Internet to our friends’ 3D printers.

This is gonna be so awesome! And just imagine when we will be able to print biological structures :D

Image Credits: Vienna University of Technology

The network of trust

One of the questions I am often asked when I meet fellow freelance developers is how do I find work? The answer is really simple: I don’t, work finds me!

This may just apply to Switzerland, the Geneva area, software development or me but I doubt it. I think it applies to any kind of freelance job, anywhere. And I also think this is hardly a secret :)

In order to have work find you, you need only one thing: a network of trust.

You need people you trust and who trust you. The trust factor here is important because you don’t need poisonous clients from hell, you need the best clients, those with the best projects and who actually pay the bills in time. And for a network to give you that there must be a safe and natural path leading the client to you.

Building a network

Building a network is not a matter of minutes and distributing name cards is only the beginning. It is about building relationships with people. Building trust among your network will be the subject of the next chapter, for now let’s see where you can find people to build your network.

First, you certainly already have a network. If you worked in the corporate world before being a freelancer it is composed of your former colleagues and bosses but also the people you were in school with. Some of them might become clients or referrals. Then you will need new friends, and the most important thing to make new friends is to meet new people. If you are the shy type then get over it or get back to corporate world.

To meet new people you need to find gatherings. Ask around you, use Google and social networks and find groups of professionals that gather regularly. Conferences are also good but you need to be able to follow up on the people you meet (you hardly build a trust relationship when you meet people once in a year). You can even build your own group if you are, say a Google AppEngine specialist but there is no local GAE users group. This is important: you need to meet people around topics that interest you! If you go to a RoR meetup thinking “I don’t care about RoR but if those guys have a Java project coming in they may refer me” then you are doing it wrong. Even if “those guys” get a Java project and cannot convince the client to switch to RoR, they won’t think about you because you were enable to connect with them during the meetup.

I will not discuss how to connect with people, there is no secret handshake and if you have relational issues may be you should consider working this first.

And then you will have to add your clients to your network. They are an important part of it because they have a unique point of view, they trusted you with their projects and they hopefully are more than happy with your work.

Another thing is that you will need your network to think about you. When the time comes, your name must be floating at the surface of their brain. With the advent of social networks this is something that has become relatively easy, so do not hesitate to use Facebook, Twitter et al. in addition to regular face to face meetings. Your network must hear about you, it must see your face and it must remember who you are. Obviously you need to stay relevant, you can share your passions and your wisdom but you also need to share useful professional information.

Building trust

This is the most difficult part, you must be recognised by your peers and be a point of reference for your clients. I only found one effective way to build trust (if there are others I will be happy to read about them in the comments) and this is to overdeliver.

For clients, overdelivering means exceeding their expectations. It can be in term of schedule, functionalities, quality or just being there when they need you. Or before they need you.

For fellow freelancers or colleagues it means sharing work and knowledge, helping them when they need help, without demanding or expecting anything in return. This can be done is several ways, participating in open source projects is one, giving presentations at meetups or speeches at conference are others.

If you think a project or client may be dubious do not refer it to someone else without the proper warnings. Likewise, do not send a trusting client to an unknown resource without the proper disclaimer. Never refer a client you would not take or a freelancer you would not hire.

Once enough people in your network trust you the network effect will kick in, some people will trust you just because others do and you will receive e-mails from people you don’t know who want to work with you.

And you? How do you find work?

And you think 160 is not enough?

SMS are not 160 characters long, they are 140 bytes long! This is what I discovered today after my SO complained that her mobile operator was charging her for SMS she never sent…

And when you know how computers are working, it totally makes sense!

“So what?” are you going to ask? So, this is again a nice example of character encodings drive you crazy. According to wikipedia there are 3 encodings used in text messages which respectively use 7bits, 8bits and 16bits to encode a single character.

Depending on the characters you used in your message your phone is going to decide what encoding to use, thus reducing the maximum number of characters to, respectively, 160, 140 and 70 (and even less, see later). Any extra character will lead to the splitting of your message into multiple SMS and, obviously, a raise in your bill.

By default the 7bit encoding used is GSM 03.38, which has the following 128 characters alphabet: @, £, $, Â¥, è, é, ù, ì, ò, Ç, LF, Ø, ø, CR, Ã…, Ã¥, Δ, _, Φ, Γ, Λ, Ω, Π, Ψ, Σ, Θ, Ξ, ESC, Æ, æ, ß, É, SP, !, “, #, ¤, {5f676304cfd4ae2259631a2f5a3ea815e87ae216a7b910a3d060a7b08502a4b2}, &, ‘, (, ), *, +, ,, -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, ¡, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, Ä, Ö, Ñ, Ãœ, §, ¿, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, ä, ö, ñ, ü, à

If you use only those characters, then you text messages can have 160 characters, however, any character outside of this alphabet will mean the use of a different encoding. And if you are using exotic scripts, your messages will be encoded in UTF-16 and in this encoding a Chinese character, for example, will take up to 4 bytes, reducing the maximum length of you Chinese message to 35 characters max.

I guess that now that smart phones are supporting international scripts and transparently breaking up text messages, a lot of people get trapped. The only recommendation I can think of is to enable your phone to display the character count when you type text messages, I noticed that my iPhone is changing the maximum number of characters according to the encoding it’s going to use to send my message.

If you want to know more about character encodings I absolutely recommend the following article by Joel Spolsky: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

UPDATE: At Stephanie’s request here is how to activate message count on your iPhone (at least on my 3GS with iOS 4.1).

Go to your iPhone settings, scroll down to “Messages” then toggle “Character Count” on. When you write a text message the count will show up only if you have at least two lines of text :)

Image Credits: Steve Webel

What’s your problem, exactly?

Nacmias Auto Sales, Service, and RepairsWhen you have a problem with your car and you go to the garage you usually say something along the line of “I’ve got a strange noise when I do this or that”. The guy (or, in my dreams, the gal) never say “I don’t understand, come back later with a better description of your problem”.

To my fellow developers: this is the same when a user comes to you with a bug. Believe me, there’s no such thing as an under-specified bug.

There’s a rampant habit among developers for being condescendant and asking for precisely specified bug reports. I know it, I do it as well. Developers have a lot of reason to do that, but mostly it’s because we think we are smarter than average (which is true, most of the time) and you don’t deserve our attention if you’re too stupid to understand the way we work. The other thing is that we don’t like bugs, and one way to avoid bugs is to make it difficult to report them.

When a user (or client, which is worse) take the time to come  to you and say there’s a problem with your software, take their word for granted. Even if it’s not a technical bug it can be a documentation or an education bug. Make sure it’s easy and worthwhile for them to report that bug because, before all, it’s in your own interest.

Reporting a bug must be a conversation. I mean, you would go to another garage if the guy was condescendant, disrespectful or was simply oblivious, wouldn’t you?

Image Credits: Rich Nacmias

Facebook Pages Notifications

You might have noticed already, if you administer community or professional pages or have developed Facebook applications, that contrary to your own personal wall you never get notified when someone post a status or write a comment on your pages?

This is a problem for most page administrators and there is a 32 pages long (and growing) thread with people complaining about this missing feature. This is a problem because without such a feature you have to periodically crawl your own pages to check if anyone posted anything (status or comment) and get the opportunity to eventually respond to it, or spam it. I guess that since they won’t get notified about this thread the Facebook people will never notice the problem…

One proposed solution to this issue is to “like” each and every status update you post on your pages wall, however, beside the fact that liking everything you post may look a bit awkward, this does not gets you notified when someone posts a new status.

I have some pages I need to watch, so missing this feature was really a problem to me. And when it itches, I scratch… Besides, I wanted to experiment with the new Facebook Graph API.

So I created this application, it’s called “Watch My Pages!” and provides users with receiving daily e-mail notifications when someone posts a status or writes a comment to their pages wall. If you like it, have a problem with it or think about a feature, just drop a message on it’s wall, I’ll get notified ;)

How to manage Google AppEngine maintenance periods

AppEngine logoHere is a small snippet of code that I use on applications deployed on Google AppEngine to inform users that the application is in maintenance mode.

It usually happen when the AppEngine team put the datastore in read-only mode for maintenance purpose but other capabilities can be tested as well.

def requires_datastore_write(view):
    def newview(request, *args, **kwargs):
        from google.appengine.api import capabilities
        datastore_write_enabled = capabilities.CapabilitySet('datastore_v3', capabilities=['write']).is_enabled()

        if datastore_write_enabled:
            return view(request, *args, **kwargs)
        else:
            from django.shortcuts import render_to_response
            from django.template import RequestContext
            return render_to_response('maintenance.html', context_instance=RequestContext(request))

    return newview

This is a python decorator and you can use it to decorate views that require write access to the datastore. For example:

@requires_datastore_write
def update(request):
    # Do something that requires to write in the database

You will need to create a Django template named maintenance.html to display a warning to your users. Mine looks like this:

<h2>Application Maintenance</h2>
<p>The LibraryThing for Facebook application is currently
in maintenance mode and some operations are temporarily unavailable.</p>
<p>Thanks for trying back later. Sorry for the inconvenience.</p>