RFID Reading Field Visualizing Probe Design

Introduction

Last week while I was watching some videos on Vimeo looking for inspiring material, I hit the jackpot: “Immaterials: the ghost in the field”. I was so intrigued by their work; I didn’t even pay attention to the publishing date (2 years ago). While watching the video ideas started rushing through my head, since for a while I’ve been working with RFID and always faced problems with the reading field of the antennas. Of course going to the datasheets and trying to figure out the reading volume’s shape could be one possibility, but it’s just not “real” enough. I wanted to know more about the people behind this project and reached nearfield.org. The research was complete, the papers were published, the website was last updated in 2011 but people were still posting comments.

I started wondering what happened to this amazing technique, and why no one has pursued this study. In the meantime, while I could not argue the beauty of the outcome of this technique I couldn’t resist not thinking of how inefficient, time consuming and limited it was. So I decided to design my own tool that could take this research a step further.

RFID Reading Volume 3D Mapping Probe:

The concept is simple; it is visualized in the diagram below:

RFID Reading Field Visualizing Probe High level architecture
RFID Reading Field Visualizing Probe High level architecture

 

 

The diagram is at a very high level of abstraction and it’s not worth going into its details at the moment as some components might vary upon implementation. However, I’m gonna describe what is illustrated above:

  1. The Probe is made out of 5 modules:
    1. RFID Tag
    2. Coordinates Recording module
    3. Accelerometer
    4. LED
    5. Controller
  1. Once the Probe, specifically the Tag (1a) is at a reading distance from the RFID antenna, the reader dispatches a signal to the processing software layer that will in turn trigger the recording algorithm.
  2. The recording algorithm will ask the Controller to grab data from the 2 modules (1b and 1c) and will ask the LED (1d) to blink.
  3. The data is then gather, analyzed, stored and the coordinates with the accelerometer data will be used to draw 3D point cloud of the reading volume.
It is worth to note, that this Probe can be adapted to different technologies. Actually, any technology that offers instance response.

To be more specific, I drew a simple annotated sketch of how the probe might look like:

RFID Reading Field Visualizing Probe Sketch
RFID Reading Field Visualizing Probe Sketch

This design is currently pending a prototype. I’m gonna be working on it as of next week. I’ll update this post accordingly.

I will choose one of these 2 paths:

  1. Develop a mobile application and embed the missing modules to a smart phone and have the application do all the logic.
  2. Implement the probe using an open source controller (Arduino and the likes). I’m sure I will not need much processing power on the Probe level since all the work will be done by the controlling pc.

Potential Value:

Since this is a side project, I will neglect all business value of this project and focus on the personal educational benefit; maybe some student, researcher might find value in this work as well. I have not yet done my homework with regard to looking for off the shelf solutions; I am going to work on it either way, even if some argue that I’ll be re-inventing the wheel.

 

 

Three.js 3D Javascript Engine using HTML5’s canvas

Three.js particles script
Three.js: Particles example

Introduction

With the first public working draft of HTML5 released, experimentation with the new canvas and audio syntax additions began. The <canvas> tag is pretty stable and is close to completion hence the multitude of project being built upon making use of it. One of these projects is the experimental 3D Javascript engine developed by Ricardo Cabello also known as Mr.Doob. This engine is called three.js and below you can find a brief description about it.

 

What is three.js ?

three.js engine’s functionality is similar to a frameworks’ in certain ways. Typically an engine provides developers with a certain platform that will manage certain tasks thus reducing the time wasted in handling processes, physics, AI, rendering, memory control etc… However in this case three.js will provide you with a renderer (<canvas>, <svg> and WebGL), and control over camera and viewport. The physics and animation work is up to the developer to work out. Nevertheless it’s a great start and a new concept in the web industry.

Mr.doob - Voxels (HTML5) Three.js
Mr.doob – Voxels (HTML5) Three.js

Great examples  have been created by Mr.Doob and the code is released as documentation. The code is very basic and easily understood by even mediocre Javascript developers. If you’re planning on experimenting with it, you should consider that future releases might break backward compatibility as Mr.Doob warns that the API might change between a release and another, so don’t have any plans for projects other than experimentation.

Google chrome is the browser recommended to use in such development scenarios; It is HTML5 compatible to a certain extent and much better than FireFox, Opera, and definitely better than IE. In addition, Chrome’s JS engine is very fast and smooth.

three.js - 3D Portrait Rendering
Three.js – 3D Portrait Rendering
Mr.Doob - Three.js - Audio Processing
Mr.Doob – Three.js – Audio Processing

 

A Small note to be added regarding the Audio Processing image above. The concept is great, it’s a shame the browser doesn’t process the audio and return the amplitude as an instance variable of the audio object. The amplitude is hard coded, in other words if the audio track is changed the visualization will stop working. Yet, it’s a good implementation of audio visualization.

 

Details

You can find more details about Mr.Doob and his experimentation projects on his blog. Follow him on twitter for interesting releases and hopefully be inspired to contribute to such promising project.

http://mrdoob.com/blog

http://mrdoob.com/

http://twitter.com/mrdoob

 

Last but not least, the code for three.js can be found on GitHub, simply follow the link below.

https://github.com/mrdoob/three.js

Why Online Communities Matter

A little about the open-source initiative

the opensource logo
opensource initiative Logo

For those of you unfamiliar with this term or this philosophy, this is a small discussion of the concept. The software development production process varies between the “classic” commercial development model and the open-source model. The later relies on two essentially main principles which are collaborative and peer to peer development. Everything from the source code to documentation is publicly released for free where any other developer can upgrade, modify and debug the product’s latest release. Even using the code as part or as whole in other projects is permitted under conditions described in the license accompanying the release.

Licensing is “a great alternative to just releasing your work into the public domain or granting permissions on a case-by-case basis” according to Cameron Chapman. Since this topic takes rigorous discussion I will leave it to the author mentioned previously to disclose the different types of licensing as well as the pros and cons of each in her article “A Short Guide To Open-Source And Similar Licenses” released by Smashing Magazine.

Many famous projects are open-source such as Linux, Apache, PHP, Symbian (Mobile OS), WordPress, Drupal, ecommerce, Moodle, Mozilla Firefox and others. The advantages are numerous, and being an open-source fanatic my opinion is personal as it is far from being objective. However, I will focus on the benefits of peer to peer, collaborative development.

Software development companies rely solely on the experience of their team of developers. While some being highly talented and knowledgeable their work falls short when confronted by the combination of worldwide talents from different academic and cultural backgrounds, intelligence levels, experience, needs and methodologies of thought. One might wonder how such projects succeed if the work load is spread worldwide. Well, the alpha version of the application or work in general is done by the author. After the first release, if this application caught the attention of other developers they will initiate contact with the author, or sometimes without the need of contact, they will work on enhancing or extending the final product. In many situations the original author is not able to continue working on the project (for a multitude of reasons). Hence, any other individual can pick up the work of the previous contributors and continue producing future releases. However, some projects die out as people have lost interest in them andor their level of complexity requires much dedication which no one is ready to offer.

Open source projects are developed voluntarily! Some contributors rely on donations to keep the project ongoing; these donations are not for personal profit though, they are spent on the production costs (if existing) which the author along with contributors should not bare alone.

 

Communication

As you have probably wondered by now: how can these contributors communicate as some aspects of development require brain storming and discussions? The answer is easy: either via email or forums or through IRC networks. IRC stands for Internet Relay Chat. Projects such as Freenode have provided the developers with networks to which they can connect, join topic oriented channels and have random real-time discussions. This brings us to our focal topic: Why are communities important?

Communities and what they can offer

Online development communities are a valuable asset without which acquiring help regarding any projects becomes a tedious task. Have you imagined a place where you can ask for help and benefit from direct answers from a diversity of experienced users? This place exists. Many like to subscribe to forums and ask their questions there, but the process of discussing the topic takes a certain amount of time which some do not have. Thus a less time consuming solution should exist. And it does. Freenode!

Any individual with an IRC client such as (mIRC, xChat, irssi etc…) can connect to the network, join a channel and ask for help. Of course the individuals maintaining the networks and the channels are also volunteering their time, therefore patience and modesty are advised.

Now I will describe the process of connecting to the freenode network below.

Downloading an IRC client

1.       Irssi: http://www.irssi.org/download#binaries Download the binaries depending on your OS (available for almost all OSs).

2.       mIRC: http://www.mirc.com/get.html mIRC is restricted to windows users, however the versions available are compatible with Windows 2000/XP/Vista/7.

3.       xChat: http://xchat.org/ xChat is an open-source irc client, available for Windows and Fedora (GNU/Linux) Oss however the source code is released hence you can download and compile your own version of xChat.

After grabbing your copy, you can install and run it.

Next in the input bar you can type: /server irc.freenode.net 6667 to establish a connection to the server. /server is the client command which allows you to connect to a server, irc.freenode.net is the server name and 6667 is the port to connect to.

Once done you can join a channel such as #linux via typing: /join #linux

# is used before a channel name to depict that the characters for it are the channel name.

A demonstration of how to connect to freenode using irssi can be found in the screenshots below. Three small tips:

  • Some channels require you to register a username before joining to insure you are not a spam bot. You can have more information about this by typing: /msg nickserv help
  • Some servers do not require a port number for you to connect.
  • In irssi you have to press ALT+2 (3, 4, …,  or any number to change chat windows)
irssi server connect
Connect to a server
Nickserver help command
Nickservice help command
irssi join command
irssi Join Command

Stackoverflow.com

Another topic I wish to discuss is Q & A websites such as stackoverflow. Stackoverflow has become a self sustained community where you are free to ask questions, free to answer them and free to seek the knowledge.

The amazing aspect of stackoverflow resides in the fact that the community is not moderated by employees or voluntary developers dedicated to keep the site functional. No, it is maintained by developersprogrammers who once asked questions themselves and now have given a fair amount of valuable answers which gave them reputation. Reputation (through points) will allow members to moderate the website, edit information and provide model answers.

Stackoverflow has become a part of my life now. I contribute daily and answer as many questions as my experience allows. The members are extremely helpful and knowledgeable. No question is left with no answer unless, of course, the question is redundant.

Importance of being a part of a community

The benefits are numerous. However I will discuss a few:

1.       You will be exposed to topics you were not aware of before.

2.       You can answer questions you did not think you could have answered before.

3.       Helping other members can refresh your memory about a certain topic especially with regard to programming.

4.       Without even contributing and just by being a spectator you can learn from other members questions and answers.

5.       You can make important contacts and promote yourself in the development community.

I cannot go over all of the benefits as they are tremendous, but the above should motivate you enough to give it a try at least.

A lot of communities have established a presence over the Freenode network some of which are: #c, #c++, #linux, #ubuntu, #java, #javascript, #jquery, #wordpress, #drupal, #joomla etc…

Conclusion

A first step to being an open-source developer or contributor is being part of the community. Voluntary help is beneficial for many parties. The open-source initiative has been the ground block for countless successful projects which shaped the online world to what it is today.

Please leave your comments, as your feedback will allow me to write more efficiently in future blogposts. Kindly keep in mind that while I cannot discuss all aspects of the topics I believe I have compiled a small amount of knowledge to get you started. Just in case anything slipped out of my mind, please notify me via a comment or by email.

Thank you,

• Bassem