<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10274314</id><updated>2012-03-09T16:20:08.823+01:00</updated><category term='worldhaptics'/><category term='thesis'/><category term='tesi'/><category term='filesystem'/><category term='Kinect'/><category term='php'/><category term='FUSE'/><category term='SKILLS'/><category term='drupal'/><category term='ngram'/><category term='Windows'/><category term='website'/><category term='VBA Word macro'/><category term='haptics'/><category term='google'/><category term='haptic symposium'/><title type='text'>Ema's Blog</title><subtitle type='html'>My personal blog on tech life and programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10274314.post-2811015709680075859</id><published>2012-03-09T16:17:00.000+01:00</published><updated>2012-03-09T16:20:08.829+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haptics'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='haptic symposium'/><category scheme='http://www.blogger.com/atom/ns#' term='ngram'/><title type='text'>Haptics as seen from Books</title><content type='html'>&lt;b id="internal-source-marker_0.33938662707805634"&gt;&lt;/b&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;&lt;span style="font-family: Cambria;"&gt;&lt;span style="font-size: 21px; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;b id="internal-source-marker_0.33938662707805634"&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The last &lt;/span&gt;&lt;a href="http://2012.hapticsymposium.org/"&gt;&lt;span style="color: blue; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Haptic Symposium&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; in Vancouver celebrated the 20 years of this conference and in that occasion &lt;/span&gt;&lt;a href="http://human-factors.arc.nasa.gov/organization/personnel_view.php?personnel_id=12"&gt;&lt;span style="color: blue; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Bernard Dov Adelstein&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt; provided an interesting historical talk about the evolution of the field. As a mean of presenting such an evolution along the years he employed &lt;/span&gt;&lt;a href="http://books.google.com/ngrams/graph"&gt;&lt;span style="color: blue; font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Google N-Gram Viewer&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;. This tool allows to search for the statistics of word occurrences in the large corpus of English books scanned by Google and covering a large set of whole published books. In this post I would like to share with you what can be understood by looking at such statistics.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The starting point is the term “haptic interface” that emerged when the first interfaces started to be recognized as something beyond robotics and tele-operation. It is well known that haptic interfaces emerged from the domain of teleoperation when it was clear that the slave could have been replaced by a computer generated model:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;img src="http://books.google.com/ngrams/chart?content=haptic%20interface%2Cteleoperation&amp;amp;corpus=0&amp;amp;smoothing=3&amp;amp;year_start=1988&amp;amp;year_end=2008" /&gt;&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;What is specifically interesting is the following comparison between haptic perception and the technological development of haptic interfaces:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;img src="http://books.google.com/ngrams/chart?content=haptic%20interface%2Chaptic%20perception&amp;amp;corpus=0&amp;amp;smoothing=3&amp;amp;year_start=1988&amp;amp;year_end=2008" /&gt;&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;In some way haptic interfaces are related to virtual reality being a fundamental tool for feeling of being somewhere, but actually haptics is something beyond it and this type of interfaces are more pervasive. This can be appreciated by the following graph in which VR is clearly much larger but it has received some settle back in recent years. For reference we have added the domain of augmented reality:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;img src="http://books.google.com/ngrams/chart?content=haptic%20interface%2Cvirtual%20reality%2Caugmented%20reality&amp;amp;corpus=0&amp;amp;smoothing=3&amp;amp;year_start=1980&amp;amp;year_end=2008" /&gt;&amp;nbsp;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;Another point of view is more related to the one of haptic technologies, for example comparing vibrotactile and tactile display:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;img src="http://books.google.com/ngrams/chart?content=vibrotactile%2Ctactile%20display&amp;amp;corpus=0&amp;amp;smoothing=3&amp;amp;year_start=1980&amp;amp;year_end=2008" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;One of the topics of my interest in haptics is haptic rendering that is the software aspect that involves the generation of the virtual forces while interfacing with geometry. The interest in this topic is comparable with the one of the general field:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;img src="http://books.google.com/ngrams/chart?content=haptic%20interface%2Chaptic%20rendering&amp;amp;corpus=0&amp;amp;smoothing=3&amp;amp;year_start=1988&amp;amp;year_end=2008" /&gt;&amp;nbsp;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 15px; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;The final consideration is that this tool is quite interesting in providing an overview of interest in a field, provided that the n-grams are sufficiently specific. I am open to suggestion of adding other comparison on specific aspects of this field. It would be interesting to extend this analysis to publications to understand if similar patters do exist, presenting more detailed curves and probably an anticipatory shift due to the nature of paper publications. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-2811015709680075859?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/2811015709680075859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=2811015709680075859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/2811015709680075859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/2811015709680075859'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2012/03/haptics-as-seen-from-books-last-haptic.html' title='Haptics as seen from Books'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Vancouver, Columbia Britannica, Canada</georss:featurename><georss:point>49.261226 -123.1139268</georss:point><georss:box>49.1783265 -123.2718553 49.344125500000004 -122.9559983</georss:box></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-5684957188669140140</id><published>2012-02-16T12:14:00.001+01:00</published><updated>2012-02-29T17:23:12.702+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='worldhaptics'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='website'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Drupal one Module after another</title><content type='html'>&lt;br /&gt;I have recently the need of updated a community website for an IEEE committee with the aim of strengthening the interaction among members and easing the dissemination of the activities on the domain. I've evaluated some content management systems like Word Press, Joomla and Drupal and then picked the last one because it seemed the one with the best extensibility capabilities. In particular there was one feature that I was not able to configure with the other two even by means of additional modules: defining additional fields for the registered user with the option of making some of these fields editable only by the administrator.&lt;br /&gt;&lt;br /&gt;At this stage I've found that Drupal 7 is providing any function I need, and if, after a look at the configuration, something is missing there is a module that provides the required functionality.&lt;br /&gt;&lt;br /&gt;The aim of this post is to provide an idea of the adopted modules and how they can help other people configuring a Drupal website. You can also check if the proposed module are being used by others looking at module usage &lt;a href="http://drupal.org/project/usage"&gt;statistics&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For the user login and registration &amp;nbsp;I wanted to support the use of the email address, and then email address verification at registration.&amp;nbsp;&lt;a href="http://drupal.org/project/logintoboggan"&gt;LoginToboggan&lt;/a&gt;&amp;nbsp;modules comes handy. When the user account is being activated by means of the email verification I have to send an email to another service in behalf of the user. In this case the&amp;nbsp;&lt;a href="http://drupal.org/project/rules"&gt;Rules&amp;nbsp;&lt;/a&gt;modules provides the required flexibility allowing to associate actions to generic events in the system.&lt;br /&gt;&lt;br /&gt;The login phase requires a specific mention. By default reserved pages provide an Access Denied message. This text can be customized using &lt;a href="http://drupal.org/project/customerror"&gt;CustomError&lt;/a&gt;&amp;nbsp;(not yet for D7!) alternatively it can be automatically redirected to the login page with &lt;a href="http://drupal.org/project/r4032login"&gt;403Login&lt;/a&gt; module. This does not mean that the user is redirected to the originating page. This operation requires another module called &lt;a href="http://drupal.org/project/login_destination"&gt;Login Destination&lt;/a&gt;&amp;nbsp;that accepts &lt;current&gt; as login target.&lt;/current&gt;&lt;br /&gt;&lt;br /&gt;As mentioned above I had to define &lt;b&gt;custom&amp;nbsp;fields&lt;/b&gt; associated to users. This feature is provided by the &lt;a href="http://drupal.org/project/profile2"&gt;Profile2&lt;/a&gt;&amp;nbsp;module that allows to define new Profile Types that can be attached to the users. Each type is made by a list of fields, and each type can be associated with Permissions that describe who can read and modify the properties. In particular this last possibility allows the Administrator to specify organizational fields like the role in the committee. While the login page as an absolute link /user/login the profile editing is expressed based on the user identifier e.g. /user/5/edit, while it could be useful to have a general "me" link. It is not possible to define an URL Alias based on Token&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Profile Types allow also to use the published information inside the &lt;a href="http://drupal.org/project/views"&gt;Views &lt;/a&gt;that, in the content model of Drupal, are the equivalent of database queries in which it is possible customize the output. Views allows to create user search pages and user listing using the profile types fields as elements. As a side note the email of the user is not directly accessible and a submodule of Profile2 is required to map it as a real field. Unfortunately &lt;a href="http://drupal.org/project/profile_sync_email"&gt;Profile Sync Email&lt;/a&gt;&amp;nbsp;is not working perfectly. While waiting for a patch I have used a SQL statement for performing this synchronization: &lt;i&gt;&amp;nbsp;INSERT INTO field_data_field_email (entity_type,bundle,deleted,entity_id,revision_id,language,delta,field_email_email)&lt;/i&gt;&lt;br /&gt;&lt;i&gt;SELECT "profile2","tch_member",0,profile.pid,profile.pid,"und",0,users.mail AS field_email_email FROM users,profile WHERE users.uid=profile.uid AND profile.type = "tch_member"&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;ON DUPLICATE KEY UPDATE field_email_email=VALUES(field_email_email)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Although the View mechanism is cool it requires some clicks to configure it properly and I have also not yet found a clean way to have a searchable View that when is first shown provides only the forms. Currently it shows the results as if no filtering is applied.&lt;br /&gt;&lt;br /&gt;A more relevant issue is instead the possibility of importing users and their properties in the system. In particular the &lt;a href="http://drupal.org/project/feeds"&gt;Feeds&lt;/a&gt;&amp;nbsp;module is quite interesting allowing to import user from various types of text files, but it has no knowledge of Profile Types and a plugin of the Feeds module aimed at supporting was not enough stable. Having the need of importing about 600 users I've used Python to manually insert the entries in the database: first I've imported the basic user information using Feeds, then exported the generated SQL tables and create the SQL commands to enter them. When I've performed this task I've discovered that in Drupal the fields of Content and Profile Types are managed by separate tables, one for every field, whatever the type is using it.&lt;br /&gt;&lt;br /&gt;Regarding fields it is important to mention that Drupal adopts an incremental approach, this means that in the core installation only fundamental field types are supported. For example I've added &lt;a href="http://drupal.org/project/email"&gt;Email&lt;/a&gt;, &lt;a href="http://drupal.org/project/link"&gt;Link&lt;/a&gt;,&amp;nbsp;&lt;a href="http://drupal.org/project/date"&gt;Date&lt;/a&gt;&amp;nbsp;and &lt;a href="http://drupal.org/project/location"&gt;Location&lt;/a&gt;. A special mention is &lt;a href="http://drupal.org/project/entityreference"&gt;Entity Reference&lt;/a&gt;&amp;nbsp;that allows to have fields containing references to other nodes, for example for describing an Award or Workshop connected to a Conference.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Voting&lt;/b&gt;: the basic Poll module allows to answer a poll with multiple choice, while there is no clear way to implement Nomination mechanism. For this I have used a new Profile2 type that is editable and visible only by the owner. If the Nominee has to be among the registered user a Node Reference type can be defined and proposed as a list or autocompletion. The result of the Nomination are presented by means of a View aggregating votes. Quite handy. There anyway an issue on the way user selection is presented: it has to be a reference to a User entity and not to the Profile2 entity containing full user details due to some error in Profile2.&lt;br /&gt;&lt;br /&gt;What is else is missing? Some other modules:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Content Access for supporting more granularity in page editing. Specific members of the committee should edit specific types of pages, e.g list of Conferences or Courses&lt;/li&gt;&lt;li&gt;Path Auto for easily generating nice addresses from content&lt;/li&gt;&lt;li&gt;Google Analytics for fast integration of tracking&lt;/li&gt;&lt;li&gt;Zen for customizing the Theme&lt;/li&gt;&lt;li&gt;Biblio and MathJax: the first for bibliography management, the second for nicely rendering equations inside the pages&lt;/li&gt;&lt;li&gt;Token Filter: a filter in Drupal is a task that is applied to the main body of content and it allows in the basic version to strip HTML elements if needed. This specific filter allows to replace special text with content from the current user or session&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Definitely it is an interesting way to build a complex website. The biggest shortcoming is that some low level operations in particular the transfer of information among fields or the import. In that cases some SQL manipulation is needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Updated: 22/02/2012 with Voting&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-5684957188669140140?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/5684957188669140140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=5684957188669140140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/5684957188669140140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/5684957188669140140'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2012/02/drupal-one-module-after-another.html' title='Drupal one Module after another'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-2192337712027057631</id><published>2011-11-02T10:18:00.001+01:00</published><updated>2011-12-21T08:50:59.001+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinect'/><title type='text'>Kinect Resolution</title><content type='html'>There are many many examples of uses of Microsoft Kinect but I have not found around a description of the resolution of the sensor.&lt;br /&gt;&lt;br /&gt;The starting point is the depth information that is natively expressed over 11 bits (2048 values) and it can be mapped to a physical depth by means of an equation. In the following (X,Y,Z) in upper case are the coordinates in image space, while (x,y,z) the coordinates in real space, relative to the Kinect reference frame, expressed in mm. Two similar equations have been proposed online, one based on the function 1/Z, the other using tan(z).&lt;br /&gt;&lt;br /&gt;z_l = 1000 / (Z * -0.00307 + 3.3309);&lt;br /&gt;z_t = 1000* 0.1236 .* tan(Z / 2842.5 + 1.1863); &lt;br /&gt;&lt;br /&gt;Given this mapping we approximate the resolution by computing the distance between points separated by one unit of raw depth. Simply in MATLAB: z_ld = [0, diff(z_l)];&lt;br /&gt;&lt;br /&gt;The following figure shows the resolution based on the two functions, limiting the raw depth to 1024, that corresponds to about 5 meters.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-25I_pL8-BQU/TrEII5Zvv-I/AAAAAAAAALc/AQLkCQZpEto/s1600/resolution.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/-25I_pL8-BQU/TrEII5Zvv-I/AAAAAAAAALc/AQLkCQZpEto/s400/resolution.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In reality we are more interested to the resolution by distance as follows:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-JrU646rH-J8/TrEIZVVISXI/AAAAAAAAALo/Q-TL9ENBiWQ/s1600/resolutiondistance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-JrU646rH-J8/TrEIZVVISXI/AAAAAAAAALo/Q-TL9ENBiWQ/s400/resolutiondistance.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The resolution for the X and Y axis depends instead on the projective transformation. Considering the X and Y in image coordinates with the origin in the center of the image for the VGA format (640x480):&lt;br /&gt;&lt;br /&gt;x = (X - 3.3931e+02) * z / 5.9421e+02&lt;br /&gt;y = (Y - 2.4274e+02) * z / 5.9421e+02&lt;br /&gt;&lt;br /&gt;From this the resolution along X and Y can be expressed as:&lt;br /&gt;&lt;br /&gt;rx = z / 5.9421e+02;&lt;br /&gt;ry = z / 5.9421e+02;&lt;br /&gt;&lt;br /&gt;Resulting in the following figure of both Z and XY resolutions:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-hvkeMRX-4RA/TrEJ7JcVleI/AAAAAAAAAL0/Wa8dBqG2nuY/s1600/resolutiondall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="255" src="http://1.bp.blogspot.com/-hvkeMRX-4RA/TrEJ7JcVleI/AAAAAAAAAL0/Wa8dBqG2nuY/s400/resolutiondall.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This corresponds to the known information of resolution at 2m being 10mm for Z and about 3mm for X and Y.&lt;br /&gt;&lt;br /&gt;The resolution can be also approximated by polynomial fitting:&lt;br /&gt;&lt;br /&gt;rz = p1*z^3 + p2*z^2 + p3*z + p4&lt;br /&gt;rxy = q1*z + q2 &lt;br /&gt;&lt;br /&gt;With p1 = -8.9997e-012,  p2 = 3.069e-006,  p3 = 3.6512e-006,   p4 = -0.0017512.and q1 = 0.0016829, q2 = 9.1461e-016.&lt;br /&gt;&lt;br /&gt;These function could be used to estimate the error in computing velocity by directly tracking single points.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please contact me for errors or suggestions&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OpenGL Rendering&lt;/b&gt;&lt;br /&gt;Being related to the above transformation it is worth mentioning how to use the Kinect data inside a 3D application in OpenGL. One approach is to extract the world coordinate from Kinect data and then render it as points in model space, allowing a generic camera. The other is to create a model and projection transformation that matches the one of the Kinect and then blit the color and depth information mapping from the 12bit to the depth buffer. The question is which is the OpenGL projection camera that allows this. Unfortunately there is an offset between Kinect RGB and Depth cameras and it is necessary to calibrate them for alignment. Next time I will add the projection matrix.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&amp;nbsp;&lt;/b&gt;this&amp;nbsp;&lt;a href="http://stephane.magnenat.net/publications/Tracking%20a%20Depth%20Camera,%20Parameter%20Exploration%20for%20Fast%20ICP%20-%20Pomerleau%20et%20al.%20-%20IROS%20-%202011.pdf"&gt;IROS 2011 paper&lt;/a&gt;&amp;nbsp;presents some tests of camera registration compared with a Vicon system. This work is associated the other on&amp;nbsp;&lt;a href="http://www.ros.org/wiki/openni/Contests/ROS%203D/Automatic%20Calibration%20of%20Extrinsic%20Parameters"&gt;extrinsic calibration&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 2:&amp;nbsp;&lt;/b&gt;details about calibration and a full course on the topic can be found in this&amp;nbsp;&lt;a href="http://campar.in.tum.de/twiki/pub/Chair/TeachingSs11Kinect/110525-Camera.pdf"&gt;TUM Course&lt;/a&gt;. Another interesting &lt;a href="http://www.cs.ubc.ca/labs/imager/PROCAMS2011/0008.pdf"&gt;work&lt;/a&gt; shows how to compute a view dependent 3d projection based on Kinect data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-2192337712027057631?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/2192337712027057631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=2192337712027057631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/2192337712027057631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/2192337712027057631'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2011/11/kinect-resolution.html' title='Kinect Resolution'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-25I_pL8-BQU/TrEII5Zvv-I/AAAAAAAAALc/AQLkCQZpEto/s72-c/resolution.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-14007611277562862</id><published>2011-11-01T09:25:00.000+01:00</published><updated>2011-11-14T12:01:58.828+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA Word macro'/><title type='text'>Automating pasting of EMF in Word and adjust scaling</title><content type='html'>When I am writing with Word instead of LaTeX I prepare figures on Powerpoint so I have them ready for presentations. Unfortunately the default Paste command selects a bitmap image that most of the time is blurry so I prefer the Enhanced Metafile (EMF) format that is vectorial. This requires few more clicks.&lt;br /&gt;&lt;br /&gt;Also when I have already an image and I want to replace with a new one I loose the scaling.&lt;br /&gt;&lt;br /&gt;The following VBA macro allows to paste in EMF and to keep the with of the original image, while height is obtained by keeping the ratio. Unfortunately it is not possible to replace the image content withour removing the shape, so it has to be destroyed and replaced.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Sub MyPasteEMF()&lt;br /&gt;    Dim x As InlineShape&lt;br /&gt;    sw = 0&lt;br /&gt;    sh = 0&lt;br /&gt;    If Selection.InlineShapes.Count &gt; 0 Then&lt;br /&gt;        Set x = Selection.InlineShapes(1)&lt;br /&gt;        sw = x.Width&lt;br /&gt;        sh = x.Height&lt;br /&gt;        x.Delete&lt;br /&gt;    End If&lt;br /&gt;    Dim r As Range&lt;br /&gt;    Set r = Selection.Range&lt;br /&gt;    w = 0&lt;br /&gt;    On Error Resume Next&lt;br /&gt;    r.PasteSpecial Placement:=wdInLine, DataType:=wdPasteEnhancedMetafile&lt;br /&gt;    w = Err.Number&lt;br /&gt;    On Error GoTo 0&lt;br /&gt;    If w = 5342 Then&lt;br /&gt;        w = 0&lt;br /&gt;        On Error Resume Next&lt;br /&gt;        r.PasteSpecial Placement:=wdInLine, DataType:=wdPasteDeviceIndependentBitmap&lt;br /&gt;        On Error GoTo 0&lt;br /&gt;        If w &gt; 0 Then&lt;br /&gt;        r.PasteSpecial Placement:=wdInLine, DataType:=wdPasteDefault&lt;br /&gt;        End If&lt;br /&gt;    End If&lt;br /&gt;    Set r = r.Previous&lt;br /&gt;    Set w = r.InlineShapes(1)&lt;br /&gt;    If sw &gt; 0 Then&lt;br /&gt;        f = w.Height / w.Width&lt;br /&gt;        w.Width = sw&lt;br /&gt;        w.Height = f * sw&lt;br /&gt;    Else&lt;br /&gt;        w.ScaleHeight = 50&lt;br /&gt;        w.ScaleWidth = 50&lt;br /&gt;    End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Updated: 14/11/2011 with support for pasting objects that have no EMF content&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-14007611277562862?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/14007611277562862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=14007611277562862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/14007611277562862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/14007611277562862'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2011/11/automating-pasting-of-emf-in-word-and.html' title='Automating pasting of EMF in Word and adjust scaling'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-6175583260878576756</id><published>2011-06-09T21:24:00.002+02:00</published><updated>2011-06-10T08:44:44.406+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SKILLS'/><title type='text'>Five years of SKILLS in Computing 2006-2011</title><content type='html'>&lt;div style="font-size: 11.0pt; margin: 0in;"&gt;&lt;span style="color: black; font-family: 'Times New Roman';"&gt;Since the end of 2006 I've&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;participated to the 5 year European Integrated Project SKILLS (&lt;/span&gt;&lt;a href="http://www.skills-ip.eu/"&gt;&lt;span style="font-family: Calibri;"&gt;http://www.skills-ip.eu&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri;"&gt;) that this December is going to end with the SKILLS 2011 Conference (&lt;/span&gt;&lt;a href="http://www.euromov.eu/skills"&gt;&lt;span style="font-family: Calibri;"&gt;www.euromov.eu/skills&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Calibri;"&gt;). The duration of this project and the effort applied mark the end of this period as important to me. This maked me think. So what happened to computing in the last 5 years? Some of our design decision in the project could have been changed by current technology or by trends correctly interpreted?&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;Yes, many things happened in computing and technology in the last five years, let's try to look at them starting from the most interesting to programmers. The idea is to highlight what happened and quantitetively show how things changed. &lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;CPU and GPU Power&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;At the end of 2006 the Intel Core 2 was just launched and it looked promising in delivering dual core performance. Indeed we adopted it for the visualization cluster in our lab. Later on the same CPU was extended with 4 cores. Only in 2009 Intel transformed their architecture with the introduction of the Intel i5/i7/i3 family of Nehalem microarchitecture, with an interesting increase of performance.&lt;br /&gt;&lt;br /&gt;Apart architecture and speed in this period cores went from 2 to 8, although machines with 6 and 8 cores are less common and reserved to high-end workstation. It has to be noted anyway that in Intel CPUs hyperthreading has been re-introduced providing 8 logical cores with a 4 core CPU.&lt;br /&gt;&lt;br /&gt;At that time my notebook (&lt;a href="http://www.teslacore.it/mypc/"&gt;http://www.teslacore.it/mypc/&lt;/a&gt; ) had a Intel Core 2 Duo T5500 with 13 Gflops provided at 1.66GHz by 290M transistors produced with a 65nm process. My actual notebook has an Intel i7-620M with&amp;nbsp; 2(4)&amp;nbsp;cores that produce 20 Gflops running at 2.66GHz with a 32nm process . Performance metrics for Intel processors can be found at &lt;a href="http://www.intel.com/support/processors/sb/cs-023143.htm"&gt;http://www.intel.com/support/processors/sb/cs-023143.htm&lt;/a&gt; while Intel evolution is at&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/List_of_Intel_microprocessors"&gt;http://en.wikipedia.org/wiki/List_of_Intel_microprocessors&lt;/a&gt; ,&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;During this period Intel Atom processor got some success for netbooks but in the end most of recent low power interest is for ARM CPUs empowering high end mobile phones and tablets. In the domain of CPUs and controllers I should mention the Arduino board that was firstly introduced in 2005, quite interesting for low-computation embedded applications.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;GPUs had a steeper curve , as can be found from the listing of Nvidia cards &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units"&gt;http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units&lt;/a&gt; . End of 2006 was the time of GeForce 8 and a lot of features and transitors came in the meanwhile up the GeForce 500 series of the Fermi Architecture. In particular at that time we opted for the GeForce 8800 GTX frabricated at 90nm with 681M transistors running at 1300 MHz generating 583 Gflops.&amp;nbsp; In the lab now we have a GeForce GTX 580 that is extremely powerful made by 3000M transistors at 40nm, running at 1540MHz and outputting 1581GFlops.&lt;br /&gt;&lt;br /&gt;In terms of programmability the former supported OpenGL 3.3 while the latter OpenGL 4.1. Notably in the domain of GPGPU something changed in the programmability with the introduction of the OpenCL as standard for multicore hybrid computing.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;Computing and Mobile&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;The shape of portable and mobile computing changed a lot in this period, due to the&amp;nbsp; improvement of low power computing capabilities and displays. In 2007 the trend for Netbook was started by the introduction of the Asus EeePC family that spawned a lot of models providing good ratio between power, consumption and cost. Most of them run Atom with Intel integrated graphics.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;Mobile phones increased consistently with the advancement of smartphones. In 2007 the first iPhone arrived and we are now in the maturity of the iPhone 4 waiting for the next model.&amp;nbsp; In the meanwhile, the growth of the iPhone created a new market interest giving the oppotunity to Google to introduce a new mobile ecosystem based on the Androidth OS that delivered the first device at the end of 2008. Now Android is a challenging platform to the iPhone domain. &lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;The last part of this period was marked by the advent of a new generation of tablets that are lightweight and usable. As for the mobile marked the way for this new generation was paved by the iPad introduced in 2010 and followed by iPad 2 in 2011.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;Operating Systems&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;The evolution of Operating Systems in this period is less fascinating than other domains. At the beginning of 2007 Windows Vista arrived but was never liked by the public. Much more interesting was the arrival of Windows 7 in the end of 2009. Now Microsoft is talking about Windows 8 looking for some convergence&amp;nbsp; with the mobile Windows versions at least in programmability. In the meanwhile Mac OS X got three versions from Leopard 10.5 to Lion 10.7 steadily improving quality&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;Finally Linux arrived more consistently on the Desktop and on Notebooks in particular with the diffusion of netbooks and the strong by Ubuntu for end-user coverage. In 2011 happened the renaming of Linux 2.6.40 in 3.0 marking a progressive evolution of the operating system.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;The Web&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;In these years the Web changed consistently with the advent of the Web 2.0 that took the form of higher participation by users in particular by an exponential increase of blogs , uploads of videos on YouTube, and microblogging with Twitter. At the same time the world of Social Networking exploded with the raise of Facebook.&lt;br /&gt;&lt;br /&gt;In terms of technologies the HTML5 arrived in the last year with a stabilization of the standard. The other change for Web technology is the arrival of the WebGL for embedded 3D programming.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;Looking at the general way of managing data on the Web there is the trend about cloud computing and storage that moved from private clouds of Google into open services that can be executed by the user. &lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;The war of Browsers revamped with the arrival of the Google Chrome browser in 2008 that made restart the effort by Microsoft in Internet Explorer. Infact Internet Explorer 7 was released in 2007 and only in 2009 version 8 arrived, followed by version 9 in 2010. In the meanwhile Firefox deployed 2.0 in 2006 and 4.0 in 2011, changing now to a faster release and number cycle then before.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;Sensing Technologies&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;Technologies in the domain of low cost sensing changed a lot and for making it simple I can highlight the advent of the Wiimote that arrived on the marked in 2006, allowing many developers to take advantage of the embedded sensors. Its update with gyroscopes arrived later in 2010. The other notable device is the Microsoft Kinect introduced in the end 2010 allowing to develop new kind of robotic and entertainment applications.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; font-weight: bold; margin: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;More topics, like programming languages, could be added to this overview, and probably something is missing. Comments are welcome.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-6175583260878576756?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/6175583260878576756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=6175583260878576756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/6175583260878576756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/6175583260878576756'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2011/06/five-years-of-skills-in-computing-2006.html' title='Five years of SKILLS in Computing 2006-2011'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-458109393754245849</id><published>2011-06-02T16:32:00.004+02:00</published><updated>2011-06-09T21:24:45.093+02:00</updated><title type='text'>Graph of Programming Language Tools</title><content type='html'>For some time I have &lt;a href="http://www.teslacore.it/wiki/index.php?title=LanguageMix"&gt;collected &lt;/a&gt;a list of programming tools that are able to translate one language to another or convert from different types of bytecode. Now that the number of tools is quite interesting and it increasing over time I've decided to represent this collection in graph form to showing the different steps that are possible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The starting point of this operation is the representation of the list into some semantic form and then from this form produce a graph that can present these relationships nicely. Although a XML/RDF solution could be appealing, I've decided to use Python as a Domain Specific Language (DSL) for representing entities and their relationships. In this way some type checking is provided by the language itself.&lt;br /&gt;&lt;br /&gt;The set that we are investigating comprises two types of entities, from one side the content that can be a programming language, some bytecode or some native code, like respectively C, Java bytecode or x86 machine code. The other side is represented by programming tools that convert one target entity X from one to another Y, eventually written in the language Z. A compiler translates from language X into machine/bytecode Y, while an interpreter executes a programming language X or a bytecode Y directly, eventually with the adoption of some Just-in-Time strategy.&lt;br /&gt;&lt;br /&gt;The mapping of this information as a Python DSL is quite easy due to the possibilities of variable introspection. In the DSL I've made some distinction for the targets (Lang,Bytecode,Native) and also for the tools (Compiler,Runner,Translator), although for tools the type of tool could be directly extracted from inputs and outputs.&lt;br /&gt;&lt;br /&gt;For example first we define the &amp;nbsp;languages:&lt;br /&gt;&lt;br /&gt;C = Lang("C")&lt;br /&gt;Cpp = Lang("C++")&lt;br /&gt;Java = Lang("Java")&lt;br /&gt;&lt;br /&gt;Then some compilers:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Gcc = Compiler([C,Cpp,ObjC,Java,Ada,Fortran],impl=C,to=GccIR,url="http://gcc.gnu.org")&lt;/div&gt;&lt;div&gt;GccGen = Compiler(GccIR,impl=C,to=[x86,MIPS,x86_64,ARM],url="http://gcc.gnu.org")&lt;/div&gt;&lt;div&gt;CH = Runner([C,Cpp],impl=C,url="http://www.softintegration.com/")&lt;/div&gt;&lt;div&gt;CINT = Runner([C,Cpp],impl=Cpp,url="http://root.cern.ch/drupal/content/cint")&lt;/div&gt;&lt;div&gt;TinyC = Compiler(C,to=x86all,impl=C,url="http://bellard.org/tcc/")&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From the DSL expressed in Python a graph is obtained by means of the pydot package that invokes the Graphviz tool. The output can be a bitmap PNG or better a SVG with links to the tools. The mapping from the class of the entity to the style in the graph is obtained by means simple template matching as:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;styles["Lang"] = dict(shape='rect')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;styles["Bytecode"] = dict(shape='rect')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;styles["Native"] = dict(shape='rect')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;styles["Runner"] = dict(fillcolor='orange',style='filled')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;styles["Compiler"] = dict(fillcolor='green',style='filled')&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;styles["Translator"] = dict(fillcolor='green',style='filled')&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The following graph is the full one comprising C/C++/Java/C#/JavaScript. Entities like the languages, intermediate representations and native assembly languages are represented with rectangular shapes, while tools are shown with ellipses, marking different types of entities with colors. The Gcc compiler has been split in two parts for highlighting its clean separation between front and back.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.teslacore.it/projects/languagemix/full.png"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-LGX4t7g90fE/TeeZOiAJIiI/AAAAAAAAAJ4/RrlBIWbZdv0/s400/full.png" width="328" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.teslacore.it/projects/languagemix/full.png"&gt;PNG&lt;/a&gt; &lt;a href="http://www.teslacore.it/projects/languagemix/full.svg"&gt;SVG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The source code containing both the entities and the graph generating code is available &lt;a href="http://www.teslacore.it/projects/languagemix/langmix.py.txt"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Known limitations:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;some languages have not been listed (Perl, Python, Scala ...). The graph could explode&lt;/li&gt;&lt;li&gt;there is no difference in the matury of the tool&amp;nbsp;&lt;/li&gt;&lt;li&gt;interpreters/runners capable of Just in Time compilation cannot be expressed by current semantics&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Other ideas:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;present the graph interactively on the Web&lt;/li&gt;&lt;li&gt;remove some languages/tools for making it easier to read&lt;/li&gt;&lt;li&gt;add a legenda&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-458109393754245849?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/458109393754245849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=458109393754245849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/458109393754245849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/458109393754245849'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2011/06/graph-of-programming-language-tools.html' title='Graph of Programming Language Tools'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-LGX4t7g90fE/TeeZOiAJIiI/AAAAAAAAAJ4/RrlBIWbZdv0/s72-c/full.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-5363666661480559062</id><published>2008-06-11T23:09:00.000+02:00</published><updated>2010-03-09T10:33:47.921+01:00</updated><title type='text'>Language Mix Matrix</title><content type='html'>There are several languages around, and there is a lot of interoperability. I have collected some of the project around in a form of a matrix. The columns correspond to the language or system that hosts the execution, while the rows correspond to the source language.&lt;br /&gt;&lt;br /&gt;The cell contain interpreters, virtual machines, translators or simply bridges.&lt;br /&gt;&lt;br /&gt;The matrix is at this page: &lt;a href="http://www.teslacore.it/wiki/index.php?title=LanguageMix"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-5363666661480559062?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/5363666661480559062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=5363666661480559062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/5363666661480559062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/5363666661480559062'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2008/06/language-mix-matrix.html' title='Language Mix Matrix'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-998183230323422154</id><published>2008-06-03T15:05:00.000+02:00</published><updated>2008-06-04T13:04:36.458+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tesi'/><category scheme='http://www.blogger.com/atom/ns#' term='thesis'/><title type='text'>Thesis on Patent Analysis and Visualization</title><content type='html'>Inside PERCRO (http://www.percro.org) we are working on different aspects of 3D visualization and interaction, and in particular there is a lot of interest on data analysis as well.&lt;br /&gt;&lt;br /&gt;We have just opened the possibility of having a new Master Thesis on Information Visualization oriented to Patent Analysis. In particular the objective is toward the construction of Technology Maps showing the relationship between patents and companies in a given area.&lt;br /&gt;&lt;br /&gt;The Thesis proposal is open to all Computer Engineers and Computer Scientist around Pisa University, for a thesis lasting from 6 months up to 9 months. Just contact me using the gmail account and check also &lt;a href="http://www.percro.org/index.php?pageId=Thesis"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-998183230323422154?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/998183230323422154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=998183230323422154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/998183230323422154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/998183230323422154'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2008/06/thesis-on-patent-analysis-and.html' title='Thesis on Patent Analysis and Visualization'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-7799369570724628842</id><published>2007-01-17T18:57:00.002+01:00</published><updated>2011-06-10T10:07:11.054+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='FUSE'/><title type='text'>The road toward FUSE on Windows? Maybe WebDAV</title><content type='html'>The &lt;a href="http://fuse.sourceforge.net/"&gt;FUSE&lt;/a&gt; Filesystem in Userspace project has been recently on the news because of a new porting by a Googler called &lt;a href="http://code.google.com/p/macfuse/"&gt;MacFUSE&lt;/a&gt;. For many users it could be interesting to have a Windows port, probably a natural question.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update June 2011:&lt;/b&gt; on June 2008 arrived the first public release of Dokan&amp;nbsp;&lt;a href="http://dokan-dev.net/en/"&gt;http://dokan-dev.net/en/&lt;/a&gt;. Dokan is actually the best way to implement custom user space filesystems on Windows because it provides a solid driver that has many of the features of FUSE. It can be programmed in .NET or Java and it now supports reparse point for mounting such drives in any NTFS location. Many filesystems have been implemented&lt;br /&gt;&amp;nbsp; &amp;nbsp; The other onorable mention on this topic goes to Pismo Mount&amp;nbsp;&lt;a href="http://www.pismotechnic.com/pfm/ap/"&gt;http://www.pismotechnic.com/pfm/ap/&lt;/a&gt;&amp;nbsp;that although being not open source allows to mount Zip and ISO files on any location replacing the file with a mounted folder.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The problem of a Windows port is related to the closed approach in custom filesystems development under the Windows platform. The Installable FileSystem (IFS) Kit by Microsoft is quite expensive, although there exist some information and examples of open source custom filesystems for Windows (&lt;a href="http://www.acc.umu.se/~bosse/"&gt;here&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Apart the documentation problem the development of a filesystem for Windows is a delicate matter and it is demonstrated by the difficulty of having a working EXT2 filesystem under Windows. There are indeed some efforts on having EXT2 under Windows like &lt;a href="http://www.fs-driver.org/"&gt;fs-driver&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Before starting a new IFS filesystem project for Windows supporting the FUSE interface it could be interesting to try an approach based on an existing IFS. I've experimented a little with custom filesystems based on the WebDAV for Windows, like my &lt;a href="http://www.teslacore.it/wiki/index.php?title=VFSNET"&gt;VFSNET&lt;/a&gt; project. WebDAV is an extension to HTTP that provides directory listing, file management, versioning and locking. The idea is to implement a local WebDAV server that exposes the user defined filesystem based on FUSE. &lt;br /&gt;&lt;br /&gt;Actually Windows provides a redirector for WebDAV but it is quite buggy and in particular it makes difficult to use a local WebDAV server. Instead it is preferable to use a free WebDAV client provided by Novel once called NetDrive and now used by Novell's iFolder. &lt;br /&gt;&lt;br /&gt;For sure in this way we get all the stability of an existing IFS for Windows, but there is open point. Speed. I have not yet performed a benchmark on the WebDAV redirectory for file operations. FUSE works by creating a UNIX domain socket pair that is used for communicating between the kernel module and the user application. The it uses a binary protocol that handles the requests. In the case of WebDAV redirector the kernel driver communicates with a support service and then it communicates with our local server through local HTTP. This solution has &lt;br /&gt;&lt;br /&gt;What for a proof of concept? First build a FUSE example under cygwin and then make a local WebDAV server that exposes the FUSE interface to applications and the WebDAV to the redirector.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-7799369570724628842?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/7799369570724628842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=7799369570724628842' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/7799369570724628842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/7799369570724628842'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2007/01/road-toward-fuse-on-windows-maybe.html' title='The road toward FUSE on Windows? Maybe WebDAV'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-4906905061704031470</id><published>2007-01-17T10:09:00.000+01:00</published><updated>2007-01-17T10:10:15.552+01:00</updated><title type='text'>Test</title><content type='html'>&lt;a href="http://www.technorati.com/claim/grdvgdste9" rel="me"&gt;Technorati Profile&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-4906905061704031470?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/4906905061704031470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=4906905061704031470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/4906905061704031470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/4906905061704031470'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2007/01/test.html' title='Test'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-116219897123281787</id><published>2006-10-30T09:55:00.000+01:00</published><updated>2006-10-30T10:02:51.243+01:00</updated><title type='text'>Start Menu Organizer in Python</title><content type='html'>I've implemented a little utility in Python that allows to organize your Start Menu by grouping installed applications into groups. It scans the Current User and All Users entries and moves the folders into groups. The list of application is taken from a simple text files like the following:&lt;br /&gt;&lt;br /&gt; doxygen =&gt; dev&lt;br /&gt; EPSON =&gt; utilities&lt;br /&gt; FeedDemon =&gt; web&lt;br /&gt; File Tags =&gt; utilities&lt;br /&gt; FileZilla =&gt; network&lt;br /&gt; Fraps =&gt; 3d&lt;br /&gt;&lt;br /&gt;You can grab the script and the list here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.teslacore.it/projects/apps/apps.py"&gt;http://www.teslacore.it/projects/apps/apps.py&lt;br /&gt;&lt;/a&gt;&lt;a href="http://www.teslacore.it/projects/apps/apps.txt"&gt;http://www.teslacore.it/projects/apps/apps.txt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: probably is necessary to modify the path to the Start Menu Programs if your locale is not English&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-116219897123281787?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/116219897123281787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=116219897123281787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/116219897123281787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/116219897123281787'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/10/start-menu-organizer-in-python.html' title='Start Menu Organizer in Python'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-116098416591136702</id><published>2006-10-16T09:36:00.000+02:00</published><updated>2006-10-23T12:08:43.616+02:00</updated><title type='text'></title><content type='html'>I am back at work. Now I can continue to work with the Amazon's S3 tool.&lt;br /&gt;&lt;br /&gt;My current tools for S3 are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A &lt;a title="Python command line tool" href="http://http//www.teslacore.it/wiki/index.php?title=S3Tool"&gt;Python command line tool&lt;/a&gt;   for manipulating the S3 storage (ls/mk/rm)&lt;/li&gt;&lt;li&gt;A &lt;a title="GUI application" href="http://www.teslacore.it/wiki/index.php?title=S3Net"&gt;GUI application&lt;/a&gt;   for transferring files over S3 based on .NET &lt;/li&gt;&lt;li&gt;A &lt;a title="WebDAV server" href="http://http//www.teslacore.it/wiki/index.php?title=S3WebDav"&gt;WebDAV server&lt;/a&gt;   written in Python that allows to access S3&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The next phase of experimentation with S3 is an IMAP server based on S3 that allows to backup mail. It will be implemented using Twisted and the BitBucket library&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-116098416591136702?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/116098416591136702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=116098416591136702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/116098416591136702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/116098416591136702'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/10/i-am-back-at-work.html' title=''/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-114996151523511183</id><published>2006-06-10T19:42:00.000+02:00</published><updated>2006-06-10T19:45:15.246+02:00</updated><title type='text'>Playing with Python</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;I’ve started playing with Python using the amazing &lt;a href="http://www.scons.org"&gt;SCons&lt;/a&gt; tool as a substitute for Makefiles. It is an interesting tool that provides multiplatform features for compilation of C++ program and more tools for building other types of tools. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;From SCons I moved to small Python utilities, like the Amazon’s S3 library, and finally I’ve found a way to make it useful for our Virtual Reality Engine called &lt;a href="http://www.vrmedia.it"&gt;XVR&lt;/a&gt;. XVR is a scripting 3D engine that allows a fast development of 3D applications based on OpenGL and their deployment on the Web using a plugin for IE or Firefox. The XVR engine provides core functions for most 3D applications but sometimes the user would like to integrate existing software. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;So I’ve created &lt;a href="http://wiki.vrmedia.it/index.php?title=PYXVR"&gt;PYXVR&lt;/a&gt; an extension for XVR that allows to invoke all the XVR functions and develop the 3D applications using XVR. PYXVR will be presented at the &lt;a href="http://www.europython.org"&gt;EuroPython 2006&lt;/a&gt; conference showing different aspects of the integration, like debugging, extension of XVR features and the use of the &lt;a href="http://www.stackless.com"&gt;Stackless&lt;/a&gt; Python.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;PYXVR allows in this way to create easy to develop 3D application, fast access to OpenGL functions, a support for a solid 3D engine and access to all the XVR existing extensions like the ones for Novodex physics and Haptics using CHAI3D.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;PS: this is my first entry using the blogging features of Word 2007, pretty nice&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-114996151523511183?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/114996151523511183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=114996151523511183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114996151523511183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114996151523511183'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/06/playing-with-python.html' title='Playing with Python'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-114954556518190354</id><published>2006-06-06T00:11:00.000+02:00</published><updated>2006-06-06T00:12:45.193+02:00</updated><title type='text'>C++ Generators</title><content type='html'>I've posted on &lt;a href="http://www.teslacore.it/wiki/index.php?title=CPPGenerators"&gt;http://www.teslacore.it/wiki/index.php?title=CPPGenerators&lt;/a&gt; a description of a technique that can be used to implement Generators in C++ with a yield statement equivalent to the one in Python or C# 2.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-114954556518190354?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/114954556518190354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=114954556518190354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114954556518190354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114954556518190354'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/06/c-generators.html' title='C++ Generators'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-114291903006104904</id><published>2006-03-21T06:27:00.000+01:00</published><updated>2006-03-21T06:30:30.083+01:00</updated><title type='text'>Drag Drop Upload fixed for Gmail</title><content type='html'>My Drag Drop Upload extension for Firefox  was having some troubles in providing the case of multiple file drop in a Gmail account because Gmail requires to use the "Attach another file" button. They are keeping an attachment counter so the technique of adding new input fields was not more working.&lt;br /&gt;&lt;br /&gt;The  new version 1.5.6 provides this functionality by simulating the click of the "Attach another file" link using this nice piece of code provided by one Googler for a Greasemoneky script:&lt;br /&gt;&lt;blockquote&gt;function simulateClick(node) {&lt;br /&gt;    var event = node.ownerDocument.createEvent("MouseEvents");&lt;br /&gt; &lt;br /&gt;    event.initMouseEvent("click",&lt;br /&gt;                         true, // can bubble&lt;br /&gt;                         true, // cancellable&lt;br /&gt;                         node.ownerDocument.defaultView,&lt;br /&gt;                         1, // clicks&lt;br /&gt;                         50, 50, // screen coordinates&lt;br /&gt;                         50, 50, // client coordinates&lt;br /&gt;                         false, false, false, false, // control/alt/shift/meta&lt;br /&gt;                         0, // button,&lt;br /&gt;                         node);&lt;br /&gt; &lt;br /&gt;    node.dispatchEvent(event);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;Now it works. As usual you can grab it http://percro.sssup.it/~pit/mozilla/dragdropupload/&lt;br /&gt;and in few days on Mozilla Update too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-114291903006104904?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/114291903006104904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=114291903006104904' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114291903006104904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114291903006104904'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/03/drag-drop-upload-fixed-for-gmail.html' title='Drag Drop Upload fixed for Gmail'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-114264509312193209</id><published>2006-03-18T02:23:00.000+01:00</published><updated>2006-03-18T02:24:53.136+01:00</updated><title type='text'>S3 for .NET Application</title><content type='html'>I've updated  my latest version of &lt;a href="http://www.teslacore.it/wiki/index.php?title=S3Net"&gt;S3NET1&lt;/a&gt; that provides a way to access files in your Amazon S3 storage.&lt;br /&gt;&lt;br /&gt;The version 0.13 provides:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Drag and Drop&lt;/li&gt;&lt;li&gt;ACL control&lt;/li&gt;&lt;li&gt;Configuration of ID,Key and Bucket by using the GUI&lt;/li&gt;&lt;/ul&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-114264509312193209?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/114264509312193209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=114264509312193209' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114264509312193209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/114264509312193209'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/03/s3-for-net-application.html' title='S3 for .NET Application'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-113746102598107352</id><published>2006-01-17T02:20:00.000+01:00</published><updated>2006-01-17T02:23:45.983+01:00</updated><title type='text'>JavaScript programming notes</title><content type='html'>I've published some interactive JavaScript programming notes on &lt;a href="http://www.teslacore.it/documents/js/programmingnotes.html"&gt;my website&lt;/a&gt; relative to some interesting features of the JavaScript language that are used in many modern JavaScript libraries.&lt;br /&gt;&lt;br /&gt;The nice thing of this document is that the code examples are syntax highlighted and that they can be executed and changed directly from the page testing the concepts described in the document.&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-113746102598107352?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/113746102598107352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=113746102598107352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/113746102598107352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/113746102598107352'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2006/01/javascript-programming-notes.html' title='JavaScript programming notes'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-112240593996103801</id><published>2005-07-26T21:25:00.001+02:00</published><updated>2005-07-26T21:25:39.966+02:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/17/3063/640/100_1150%20-%20HCI.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/17/3063/320/100_1150%20-%20HCI.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Testing another Haptic System&amp;nbsp;&lt;a href='http://picasa.google.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-112240593996103801?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/112240593996103801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=112240593996103801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/112240593996103801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/112240593996103801'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/07/testing-another-haptic-system.html' title=''/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-112124459536161795</id><published>2005-07-13T10:14:00.000+02:00</published><updated>2005-07-13T10:49:55.366+02:00</updated><title type='text'>AMF ++</title><content type='html'>I've ported AMFPHP into C++ . AMF is the&lt;br /&gt;&lt;br /&gt;In this first release I've attached the AMF++ to a JavaScript runtime but it is possible to use a C++ implementation of PHP arrays to fill in the data structures.&lt;br /&gt;&lt;br /&gt;More information can be found here &lt;a href="http://www.teslacore.it/wiki/index.php?title=AMFPP"&gt;http://www.teslacore.it/wiki/index.php?title=AMFPP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-112124459536161795?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/112124459536161795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=112124459536161795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/112124459536161795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/112124459536161795'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/07/amf.html' title='AMF ++'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-112115558323037840</id><published>2005-07-12T10:00:00.000+02:00</published><updated>2005-07-12T12:50:19.530+02:00</updated><title type='text'></title><content type='html'>I've played a little with the Google Maps API that allows to use it. It can be really useful to implement some nice tools:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Person Locator&lt;br /&gt;&lt;/li&gt;&lt;li&gt;My travel presenter&lt;/li&gt;&lt;/ul&gt;I've prepared a small page that shows my last movements around.  &lt;a href="http://www.teslacore.it/maps/map1.html"&gt;http://www.teslacore.it/maps/map1.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.teslacore.it/maps/map2.html"&gt;http://www.teslacore.it/maps/map2.html&lt;/a&gt;&lt;a href="http://www.teslacore.it/maps/map2.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Now my idea is to improve it by making a PHP script that creates my actual position based on the information that I send like in a calendar.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/mappoint/products/webservice/default.mspx"&gt;http://www.microsoft.com/mappoint/products/webservice/default.mspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-112115558323037840?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/112115558323037840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=112115558323037840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/112115558323037840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/112115558323037840'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/07/ive-played-little-with-google-maps-api.html' title=''/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-111987440750931709</id><published>2005-06-27T14:13:00.000+02:00</published><updated>2005-06-27T14:28:43.000+02:00</updated><title type='text'>EPFL Haptic Workstation</title><content type='html'>&lt;a href="http://www.teslacore.it/photos/any/VR/DSC01367%20-%20Haptic%20Worksation%20-%20HUD.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; float: left; width: 320px;" alt="" src="http://www.teslacore.it/photos/any/VR/DSC01367%20-%20Haptic%20Worksation%20-%20HUD.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've tried the Immersive Haptic Workstation during a visit at EPFL in Lousanna (Switzerland). It is a very interesting piece of hardware although the software is still far to be complete.&lt;br /&gt;&lt;br /&gt;You can find my other VR related photos at &lt;a href="http://www.teslacore.it/photos/easyphoto.php?set=VR"&gt;http://www.teslacore.it/photos/easyphoto.php?set=VR&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-111987440750931709?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/111987440750931709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=111987440750931709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/111987440750931709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/111987440750931709'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/06/epfl-haptic-workstation.html' title='EPFL Haptic Workstation'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-111598287465027619</id><published>2005-05-13T13:11:00.000+02:00</published><updated>2005-05-13T13:14:34.656+02:00</updated><title type='text'>New software</title><content type='html'>I've done a trip in two really interesting universities in Switzerland EPFL and UNIGE in Losanna and Geneve at two great virtual reality lab MiraLab and VRLab&lt;br /&gt;&lt;br /&gt;I've decided on investigating on something:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;SConf for the building of applications&lt;/li&gt;   &lt;li&gt;OmniOrb for CORBA&lt;/li&gt;   &lt;li&gt;VRPN for sensorized systems&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-111598287465027619?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/111598287465027619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=111598287465027619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/111598287465027619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/111598287465027619'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/05/new-software.html' title='New software'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110838741884422780</id><published>2005-02-14T14:22:00.000+01:00</published><updated>2005-02-14T14:23:38.846+01:00</updated><title type='text'>Article about my SW Development Errors</title><content type='html'>I've posted in my Wiki an article about devlopment errors, and mis developed applications by me. Maybe it could be interesting in a perspective of recent history of software.&lt;br /&gt;&lt;br /&gt;The article is &lt;a href="http://www.teslacore.it/wiki/index.php?title=DevErrors"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110838741884422780?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110838741884422780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110838741884422780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110838741884422780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110838741884422780'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/02/article-about-my-sw-development-errors.html' title='Article about my SW Development Errors'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110820893012231962</id><published>2005-02-12T12:45:00.000+01:00</published><updated>2005-02-12T12:48:50.123+01:00</updated><title type='text'>Synchronization of your Wikis</title><content type='html'>I've written a simple batch file using wget and curl to synchronize two wikis running MediaWiki (Wikipedia).  I use phpMyAdmin to export and to reload the database in SQL. One of the two wikis is local and the other is remote and it requires a login phase.  Anyway it's an interesting use of wget and curl (I need to use cur to upload a file using POST).&lt;br /&gt;&lt;br /&gt;The next step is to provide a link in the Wiki itself where it's possible to download the current SQL, maybe without using phpMyAdmin.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.teslacore.it/wiki/index.php?title=WikiSync"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110820893012231962?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110820893012231962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110820893012231962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110820893012231962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110820893012231962'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/02/synchronization-of-your-wikis.html' title='Synchronization of your Wikis'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110761269720498945</id><published>2005-02-05T15:11:00.000+01:00</published><updated>2005-02-05T15:11:37.203+01:00</updated><title type='text'></title><content type='html'>This is a small entry from the Gaim-Blogger an interesting extension to Gaim that allows to post&lt;br&gt;directly into Blogger by using the XMLRPC interface. I think that is useful but not for long posts,&lt;br&gt;anyway you can find it here. &lt;A HREF="http://gaim-blogger.sourceforge.net/"&gt;http://gaim-blogger.sourceforge.net/&lt;/A&gt;&lt;br&gt;&lt;br&gt;By the way I'm thinking to move my blog to my website Teslacore by using the Blogger Serendipity&lt;br&gt;that offers categories and image manager.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110761269720498945?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110761269720498945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110761269720498945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110761269720498945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110761269720498945'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/02/this-is-small-entry-from-gaim-blogger.html' title=''/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110743163662120827</id><published>2005-02-03T12:31:00.000+01:00</published><updated>2005-02-14T14:26:02.990+01:00</updated><title type='text'>How much Open Source is an Application?</title><content type='html'>With the spreading of Open Source libraries it's possible to build very powerful application both commercial and open source. While I was looking at the new features of MATLAB 7 I was thinking about how much open source is in that, and I've discovered that's a LOT!&lt;br /&gt;&lt;br /&gt;So I've decided to analyze some applications around, both commercial and not, to discover the common used components and present these raltion by using a graph&lt;br /&gt;&lt;br /&gt;You can find the full article and more details &lt;a href="http://percro.sssup.it/%7Epit/powl/test.php"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110743163662120827?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110743163662120827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110743163662120827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110743163662120827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110743163662120827'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/02/how-much-open-source-is-application.html' title='How much Open Source is an Application?'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110742759639739698</id><published>2005-02-03T11:35:00.000+01:00</published><updated>2005-02-03T11:46:36.396+01:00</updated><title type='text'>Love for Movies</title><content type='html'>We've started the preparation of a videography of movies about Virtual Reality and Robotics, the idea, started by &lt;a href="http://percro.sssup.it/%7Emarcello/"&gt;Marcello&lt;/a&gt; and supported by me, is to identify the movies relative to these topics, and highlight the clips that are more significant.&lt;br /&gt;&lt;br /&gt;You can explore the videography &lt;a href="http://www.teslacore.it/movies/"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unluckly there is no standard way to specify timings inside a movie, but whenever is possible I've put the timing for the DVD and eventually a snapshot (is it legal?)&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110742759639739698?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110742759639739698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110742759639739698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110742759639739698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110742759639739698'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/02/love-for-movies.html' title='Love for Movies'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110742488543944789</id><published>2005-02-03T10:38:00.000+01:00</published><updated>2005-02-03T11:03:11.530+01:00</updated><title type='text'>My Favourite Firefox Extensions</title><content type='html'>This is a small list of my favourite Firefox Extensions that you can download from here:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.update.mozilla.org/extensions/?os=Windows&amp;application=firefox/"&gt;Mozilla Update&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've divided my favourite extensions in two parts, user and developer.&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;AutoCopy &lt;/span&gt;to copy text as in X11 just by selecting&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Adblock &lt;/span&gt;to remove boring flash ads&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Copy Plain Text &lt;/span&gt;useful to copy an html block just as text&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Scribe &lt;/span&gt;to save forms values&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Filer&lt;br /&gt;   &lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;ScrapBook &lt;/span&gt;to save pages&lt;br /&gt; &lt;/li&gt; &lt;/ul&gt; Developer&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Live HTTP Headers &lt;/span&gt;analyzes the&lt;br /&gt; &lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;WebDeveloper &lt;/span&gt;a must for inspecting web pages&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;cuneAForm&lt;/span&gt; an HTML editor&lt;/li&gt; &lt;/ul&gt; Enjoy Firefox&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110742488543944789?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110742488543944789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110742488543944789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110742488543944789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110742488543944789'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/02/my-favourite-firefox-extensions.html' title='My Favourite Firefox Extensions'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110622515028929378</id><published>2005-01-20T13:45:00.000+01:00</published><updated>2005-01-20T13:45:50.290+01:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/17/3063/640/collage.1.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/17/3063/320/collage.1.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Porto Ercole from above&amp;nbsp;&lt;a href='http://www.hello.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbh.gif' alt='Posted by Hello' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110622515028929378?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110622515028929378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110622515028929378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110622515028929378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110622515028929378'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/01/porto-ercole-from-above.html' title=''/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110621566885084678</id><published>2005-01-20T11:07:00.000+01:00</published><updated>2005-01-20T11:07:48.850+01:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/17/3063/640/P1000203b%20-%20Zara%20Sole%20Capodanno.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/17/3063/320/P1000203b%20-%20Zara%20Sole%20Capodanno.jpg'&gt;&lt;/a&gt;&lt;br /&gt;My favourite mountain place, Castell'Azzara, in New Year first morning&amp;nbsp;&lt;a href='http://www.hello.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbh.gif' alt='Posted by Hello' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110621566885084678?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110621566885084678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110621566885084678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110621566885084678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110621566885084678'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/01/my-favourite-mountain-place.html' title=''/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10274314.post-110621456423292630</id><published>2005-01-20T10:48:00.000+01:00</published><updated>2005-01-20T10:49:24.233+01:00</updated><title type='text'>Starting up</title><content type='html'>Here start Sanka Blog about ... who knows, maybe travelling and programming.&lt;br /&gt;&lt;br /&gt;My Web site is here &lt;a href="http://www.teslacore.it"&gt;http://www.teslacore.it&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10274314-110621456423292630?l=teslacore.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teslacore.blogspot.com/feeds/110621456423292630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10274314&amp;postID=110621456423292630' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110621456423292630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10274314/posts/default/110621456423292630'/><link rel='alternate' type='text/html' href='http://teslacore.blogspot.com/2005/01/starting-up.html' title='Starting up'/><author><name>Emanuele Ruffaldi</name><uri>https://profiles.google.com/103345936461504815029</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7VM8Zokf2VA/AAAAAAAAAAI/AAAAAAAAAAA/YhAyyeNvcwo/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry></feed>
