Sunday, November 15, 2009

R/C DeskPilot: a free simulator for RC flying

I don't get much time anymore to fly my real R/C planes. Since the only stick time I get is when I fire up a simulator om my PC, I'm very happy with the release of R/C DeskPilot.

As long as I remember, there have been R/C airplane simulators around. There is the state-of-the-art Realflight simulator. Nice, but expensive. A somewhat more affordable sim is Phoenix, but at 130$ it is still pricey. There have been some cheaper commercial products available, but they always seemed to lack in either the flight modeling or the graphics department.



The unavailability of decent low-end products had led to the success of FMS, a free flight simulator developed by Roman & Michael Möller. Initially, it matched and even outperformed some of the cheaper commercial simulators. But then development slowed down and finally got abandoned. I guess the developers just lost interest.

We had to wait until now, 8 years after the last version of FMS was released, to get an alternative for FMS. I know that Davy, the developer of R/C DeskPilot, was thinking about this already for a long time and now finally released his creation to the public.

R/C Desk Pilot is everything FMS always wanted to be: Free, great graphics, decent flight model and fun options. I'm way to rusty as a pilot to provide a detailed review of this sim. But I have been running Realflight and R/C Desk Pilot back to back and I think they're actually on the same level.

There are of course some quirks that still need to be ironed out in the beta version: Ground handling is not realistic, it's like your riding on ice. Also, you can't crash when you're upside down, the plane just continues to circle on the ground, very funny. A more serious defect is the missing collision detection: you can't crash into trees or other objects. This also means that sometimes the tip of your wings can go into the ground when flying low.

On the other hand, there are some fantastic features. There is a very realistic wind simulator, with configurable strength and gusts. There is also thermal activity. The thermals can vary in size and strength and they are indicated nicely by rising bubbles of air. And the best of all is the built-in "pylon racing" game. It's fun and addictive and really trains your flying skills.

The overall quality of graphics is very good. The game uses DirectX 9 and can render beautiful scenery and skies on a decent graphics card. You can even see that the leaves in the trees move with the wind. The flight model is very realistic, especially with the glider model. Wingovers, stalls, high alpha maneuvers: it's all there. A more technical feature is that there is an API for input and output: You can write a program that reads out the movements of the airplane and then commands back to the plane what control surfaces should be moved. This is ideal for finetuning airframe parameters of developing an autopilot.

One thing FMS never had and what was probably the cause of it being abandoned is a business model. Manufacturers can advertise their airplanes in the game and even buy in-game advertising. This will ensure that the developer will keep up his efforts and the sim, together with the ecosystem around it, can continue to prosper.

The next step for R/C DeskPilot will probably be to allow others do develop scenery and airplanes for it. This might conflict with the chosen business model. But many more models can be explored. For example, R/C DeskPilot could run real time competitions and charge companies like Graupner to be allowed to provide the prices for the winners. Or users could be asked to pay a small fee to participate into a competition or even an online flight training class.

Great job done by Davy! You can comment on his work in the forums on RCGroups or RCPowers.

Tuesday, November 10, 2009

Paypal API: creating a universal wallet

PayPal is the most popular payment provider in the internet. Last week, they announced their PayPal API for 3rd party developers, turning PayPal into a universal wallet system.

The new brand for the PayPal API is "PayPal X". Yes, they even acquired the domain http://www.x.com for this. To demonstrate that they really mean business with their API, Paypal lowers their fees significantly for transactions performed over the API.

Now, what is this API all about? Most importantly, it will allow applications to integrate the backend functions of PayPal without having to deal with the frontend. Paypal not only provides a payment system, but they also link shopping cart and identity management to that. In the past, webmasters and application builders had to redirect their users to the PayPal website to complete a transaction. With the API, users can be kept on site and site-specific data can be stored with PayPal through the API. This enables scenario's that were not possible before.


One scenario is where you design an iPhone application that allows the user to order a product from within the application. With the "DoDirectPayment" you can now process this transaction without ever leaving the application. The iPhone is only the first platform to support this Mobile Payment API. I hope that Android, Windows Mobile and Symbian will be next on the list.

Another scenario is where you want to build a webshop in an existing website. Often, this means having to choose between fundamentally changing the site by installing a new shopping cart application (like Magento) or delegating shopping cart management to PayPal by linking every "buy now" button to the Paypal shopping cart on their site. Today you can use the functionality of this PayPal shopping cart (enriched with e.g. stock management) whilst keeping the customer on your website. If you want, you can easily add a widget that gives the customer an overview of his shopping cart.
The examples clearly show that the API turns PayPal into much more then just a payment system. They now fill the same gap in the market that dedicated "hosted shopping cart" systems like http://www.ecwid.com are offering.

With this API, a new era has begun for internet payments. PayPal can now concentrate on their core business: securing and enabling transactions. Developers can create innovative applications that rely on a secure and trusted partner for transaction handling.

Wednesday, November 4, 2009

Getting started with Drupal 6

Now that I have made a few sites with Drupal 6, it is time to review my experiences and create a "getting started with Drupal" guide out of it.

My assumption is that you want to use Drupal as a step up from either a basic blog (like Wordpress) or a basic CMS (like Joomla). I assume there will be 3 types of people using the website: you, the administrator and the users. A further assumption is that you don't want to touch code, but that you do want to create functionality that is different than what comes out of the box. The administrator will be someone responsible for the content on the website, possibly the owner of the site. The users are visitors to the site.


Towards the functionality of the website, I assume you have a few basic needs:

  • a menu with a few static pages, like "about us" "contact" etc.
  • a photo section that allows the administator to create albums and easily batch upload photo's
  • a "news" section that is essentially a blog, used by the administrator to update the users and of which the last post is shown on the homepage
  • a "special notice" in the sidebar that remains visible on every page
  • a forum where users can discuss
Most of this comes with Drupal out-of-the-box. But there are some quircks:
  • photo's are not supported. And if you configure an image type, you still don't have an album solution or can't use the image in a blogpost or in a static web page
  • There is no richt text editor for content. So your articles will look rather dull
  • Sidebar content is supported, but giving an administrator access to this also opens up access to other things that he/she potentially can mess up
  • forums are included, but displayed in a threaded view. Most users will prefer a sequential list of messages (in Drupal terms: comments) attached to a forum topic.

Luckily, Drupal has a modular structure that allows you to add functionality with, you guessed it, modules. The modules that I use for my basic "getting started" website are:

advanced_help
cck
views
views_bonus_pack
filefield (latest DEV version)
imagefield
imagecache (only use GD2, don't use imagemagick)
image_api
transliteration

Do not forget to give the administrator the necessary access rights on these modules. Also, users will not be able to see the output of the modules if you don't give them "view" access.

The most difficult module to understand is the views/cck combination. Let me first explain how Drupal works.

Drupal maintains a database that consists of nodes. Nodes are bits of content that can be uniqely identified. They have a type, a way to display them, a way to enter them using a form and a way to classify them with taxonomies (think of it as tags or categories). Nodes are entered by authors and are taken through a publication workflow. An example of a node is an "about page". The type of this is "page". The author will most probably be the administrator and it will be published without the need to be reviewed. A blog comment is another example of a node. It might be created by an anonymous user and will need to be reviewed by an administrator before being published. Each node has a unique ID that can be used in a URL to access the view on that node.

What the cck module does is to create new node types. Suppose you want to create a node type "review", you might want to let the author of a new review provide fields for product name, product categorie, review summary, good points, bad points, a picture of the product and a picture of the packaging. You can construct such a node type with cck.
However, the standard way to view this node will be that Drupal will generate a page with all the fields beneath each other. This might not be what you want. You can use the "views" module to create a webpage that only displays some parameters, or to display a webpage that lists the titles and summaries of all reviews, so users can click on the title to read the full review.
Views is essentially a visual query-builder. Those of you familiar with SQL might recognise the SELECT, JOIN and WHERE clauses in the visual representation that views offers. I strongly advise you to go through a video walkthrough of views/cck before getting your hands dirty.

Once you're familiar with cck/views, I advise you to create your own "photo album" solution with it. I added a binary field "use as album cover" to my self-create photo content type.
In taxonomy, I created a new taxonomy called "photoalbums" and added terms for each album. (make sure that the field "term" is obligatory in your cck photo type). Of course, an administrator can always add more albums if he wants. He only needs to add a term to the taxonomy to create a new album.
I created a view "photoalbums" that lists all albums, shows the image that has the flag "use as album cover" and shows the description. Clicking on the album gives a preview of all images in the album. Clicking on the image gives a node view of the image itself.

Now there are a few things you can do to make your album even nicer:
  • the "teaser" and "full" imagecache presents that you choose for the image field in your cck photo type can be made a whole lot more exciting with Imagecache actions.
  • To have a nice Javascript album viewer, install the Lightbox2 module. It will automatically generate extra imagecache presets that you can use in your custom view
  • Make a new view to show as a sidebar block that holds the last 10 images uploaded. You can create a new imagecache preset for this.
  • Install Image FUpload to allow the administrator to upload a whole bunch of photo's in 1 click and to edit all of the captions in 1 operation, just like on Flickr.

Once you have this nailed down, you are on your way to become a Drupal expert. One thing you can do as a quick win is to change the options of the built in comments. You can set comments for all content types to "flat" view. Disable the title input field and the preview button with nodeformsettings. You can alos make the comment field a bit smaller and disable the explanation text below the box.
Another nice extension to a basic site is Side Content, which allows you to add an extra textfield to a node type (e.g. Page). This text will be displayed in a block in the sidebar when the user browses to that particular page. You can set the side content block to only be visible on specific pages if you want to.

When your users are capable enough, you can install FCKEditor to give them WYSIWYG editing capablities. Make sure you follow the readme.txt file on this one, because there is more to do then just enable the module. I also prefer to only enable FCKEditor on specific pages (like create/edit blog/page content). Otherwise, users will start using HTML tags in forums and content titles, which is not the idea.
To take it one step firther you can install the IMCE module on FCKEditor to let users upload and insert a picture in their news article all in 1 operation. This is much more user friendly then asking the user to go through the 2-step process of first uploading a photo to either the Drupal site or a site like Flickr and then entering the URL of the image in FCK.
A last tip: If you want your administrator to be able to change a static block of side content, but you don't want to give them website construction privileges, you can create a view that displays the content of a specific page (eg. title=sideblock content). You place the block generated by views in the sidebar and when the user wants to change the text, they just have to edit the specific page.

Taking this approach is proving to be really flexible. I don't have much time to do websites, but having established a good base I would like to take on a bigger project like creating a community site with delegates responsibilities and group membership. It's fun to create websites with Drupal!

Friday, October 23, 2009

Conversations are not publications

I will not repeat or elaborate on the Twitter storm of last week. Others have done this better and more objectively than I could have done myself. On the other hand, there is a lesson to be learned.

Yes, we, end users of social media, have our responsibilities. We need to refrain from posting lies, insults and stupidities. The same rules that apply off-line should apply on-line. On the other hand, we have the right to be pissed off once in a while. I do swear. Occasionally. And people get involved into conflicts all of the time. That's part of how we establish relations, develop opinions and learn to know each other and ourselves.


When blogging became popular about 5 years ago, people learned that the internet was a new medium that allowed you to state your opinion and to reach out to an audience. A blog post is, most of the time, a well considered text that tries to explain, emote or convince. As such, you can consider it a publication with an author. It is only natural to expect the author to take full responsibility for his publication.

But Facebook status updates and Twitter messages are a different beast. Fundamentally different. Status updates are not publications. They are part of a conversation, a conversation between people. That do swear. That do stupid things. Because the essence of a conversation is exchange of ideas and emotions. In real life, expressing your emotions is a little easier then on-line. There's no substitute for banging your head against the wall or slamming your fist on the table. On-line conversations make up for this deficiency by using stronger wording, firm acronyms or emoticons.

When our conversations go on-line, they have to remain conversations. It is not justified to apply the same rules regarding author responsibility to on-line conversations. I do believe there is richness to on-line conversations. I like talking to people on Facebook that I otherwise would only meet once a year. It would be a shame if our culture and legislation would not tolerate the spontaneity of an offline conversation to go online. This would kill all online conversations.

Conversations are not publications. Don't treat them as such.

Tuesday, October 13, 2009

Yes, I deleted that tweet

Censorship is of all ages. But with social networks spreading their wings, the clash between the off-line and on-line world is imminent.

This is a true story. About a month ago I had a negative experience as a customer of a retail outlet. As I do with many things that draw my attention, I shared my feelings of this experience on Twitter. Last Friday I got a phonecall from a police officer, telling me that a complaint will be filed against me if I didn't remove the Tweet.


I can understand the aggravation of the shopkeeper. If you typed in the name of his shop in Google, my Tweet (unfavorable for his shop) appeared 3rd in the search results. What I don't understand is why he would want to take the matter to the police. If he would have sent me a friendly email with an apology for what happened and how my tweet is damaging his business, I would probably have deleted the tweet and maybe even given his business some positive exposure.

But that didn't happen. Apparently, the shopkeeper does not understand a fundamental change that the internet is causing:

Power is shifting towards the consumer

Social networks empower us all to share our opinions. This is no longer the privilege of manufacturers or advertisers who can control the media. Blogs and social networks are now a more powerful influencer than the newspapers. Your customer will talk about you online.

Instead of telling him to shut up, you would better listen.

To offer the shopkeeper a chance to tell his side of the story, I did send him a mail to ask for his reaction. However, he choose not to communicate with me. If he would start legal proceedings against me he has little ground. I did not insult a person, but described an experience in a shop (where multiple people are working). I did not accuse the shop of a felony, but merely stated that I was misled by the shop attendant. And yes, although my Tweet was accurate, the 140 characters limit of a tweet did not help in making my point without being direct.
Therefore, I deleted my tweet and include the content of my email to the shopkeeper in this post. My e-mail more accurately describes what happened and what I concluded out of those facts.

Although my conclusions might be wrong, I am still waiting for the shopkeeper to respond.

Beste,

Gisteren werd ik door een politieagent gecontacteerd om me te melden dat u een klacht wegens laster tegen mij zal indienen indien ik het bericht https://twitter.com/kodel/status/3777462425 niet verwijder.

Ik vind het spijtig dat u mij daar nooit zelf voor gecontacteerd heeft. Morgen schrijf ik een blogpost over dit voorval, dit om in meer detail toe te lichten waarom ik uw juwelierszaak een schurk genoemd heb. De limiet van 140 karakters van het Twitter bericht wat ik destijds gepost heb is immers te beperkend om meer uitleg te geven.

Nu had ik graag uw reactie op volgende feiten:
- mijn echtgenote komt bij u de winkel binnen om de batterij in mijn Festina horloge te laten vervangen
- de winkelbediende neemt de horloge mee naar uw atelier en komt even later terug met de melding dat de horloge stuk is. Mijn echtgenote krijgt een foldertje mee naar huis om mij een nieuwe horloge te laten kiezen.
- bij thuiskomst geloof ik niet dat de horloge stuk is. Ik open de horloge, plaats een nieuwe batterij en de horloge begint onmiddellijk weer te tikken. Tot op vandaag vertoont deze horloge geen enkel mankement.

Mijn conclusie uit dit verhaal is dat u van uw kennis en van de onwetendheid van uw klant gebruik gemaakt heeft om de klant te misleiden in een poging om een nieuwe horloge te verkopen.

Kan u mij laten weten wat er niet klopt aan de feiten of de conclusie?

Met vriendelijke groeten,

Koen Delvaux

Tuesday, October 6, 2009

Nice head-relexation marketing by Taxipost

There used to be a time that our Belgian Postal service was slow, staff was unfriendly and the mailman was always drunk. But times are changing.

One of the departments that was privatized first is the parcel delivery service now called "Taxipost". At first, it was an independent organisation with a parallel distribution network working partly in competition with the mailman.
But since a few years, customers no longer need to choose between sending a parcel via the normal postal service (slow and cheap) or via Taxipost (a bit faster but expensive). Taxipost has matured and is now responsible for all parcel deliveries.



They had a few hurdles to tackle to compete with the likes of DHL, DPD and GLS, but today it's not a bad service: They provide online tracking (finally!), they have a pick up service complemented with a good network of drop-off points (called "Postpunt" -> supermarkets and other places that are still open after 5PM) and they simplified their pricing.

So it's nice to see that they are now working on cleaning up their dusty image with nice marketing campaigns. I just received a "head relaxation" device from Taxipost. With this humorous action, they want to show their business customers that it's possile to send out your end of year gifts without getting a headache. The promotion is aimed at small businesses, offering 10 shipping vouchers including a pick-up on location for only 60€.

It's good marketing, and they relied on the mailman to put their head relaxation device in my letterbox!

PS: they still suck for not redirecting the DNS records of http://depost.be to http://www.depost.be, but that's another story.

Thursday, October 1, 2009

Cheap DIY GPS attachment for motorcycle

So, this is turning into some kind of DIY / motorcycle blog. This time I show you how to attach a cheap GPS to your motorcycle.

GPS manufacturers sell special devices for motorcycles. They're waterproof and come in a housing that is made to be attached to your motorcycle. I didn't want to spend much cash since I only occasionally need GPS on my bike. So I bought a second hand Garmin GPS on eBay and did this to it:


I pried the box open, made 4 holes in the back with a small drill and looped two pieces of double sided velcro through it (I think the non-branded name is loop tape). You have to be carefull not to damage the plastic housing too much, since it needs to go back together.
After closing it up, I added 2 pads of self adhesive foam to the back. The brown color is the backing paper protecting the glue on the other side. I use them as shock absorbers between the brackets that hold my handlebar and the GPS.

When I attach the velcro loops over my handlebar, I get the following:


Pretty neat, isn't it?