<?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-4454907293259820</id><updated>2012-02-16T19:42:01.705+01:00</updated><category term='arduino'/><category term='video'/><category term='robot'/><category term='pappkamerad'/><category term='plotter'/><category term='parts'/><category term='electronics'/><title type='text'>Maschinenraum</title><subtitle type='html'>Maschinenring @ Arsenal 210</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://maschinenringraum.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://maschinenringraum.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Flo</name><uri>http://www.blogger.com/profile/13456675247042447579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.ims.tuwien.ac.at/~flo/images/flo_new2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4454907293259820.post-4990175219275188525</id><published>2009-06-08T14:11:00.006+02:00</published><updated>2009-06-08T14:17:32.616+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='parts'/><title type='text'>Disassembling LaserJet 6L</title><content type='html'>I just disassembled my old broken laser printer for parts.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_tnkA4sLKUhc/Si0AYcxqtMI/AAAAAAAAACo/7860ASqIWW4/s1600-h/laserjet6l.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_tnkA4sLKUhc/Si0AYcxqtMI/AAAAAAAAACo/7860ASqIWW4/s400/laserjet6l.jpg" alt="" id="BLOGGER_PHOTO_ID_5344928752800019650" border="0" /&gt;&lt;/a&gt;Really enjoyed taking this thing apart, the mechanical design is perfect and from an area when things were still being built with maintenance in mind.&lt;br /&gt;&lt;br /&gt;The recycle gems are the stepper motor (unfortunately only one), the laser unit and a bunch of sensors, switches and other low-level electronics parts. Most of the metal and plastic will probably be thrown away since it is too specialized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4454907293259820-4990175219275188525?l=maschinenringraum.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maschinenringraum.blogspot.com/feeds/4990175219275188525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://maschinenringraum.blogspot.com/2009/06/disassembling-laserjet-6l.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default/4990175219275188525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default/4990175219275188525'/><link rel='alternate' type='text/html' href='http://maschinenringraum.blogspot.com/2009/06/disassembling-laserjet-6l.html' title='Disassembling LaserJet 6L'/><author><name>Flo</name><uri>http://www.blogger.com/profile/13456675247042447579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.ims.tuwien.ac.at/~flo/images/flo_new2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_tnkA4sLKUhc/Si0AYcxqtMI/AAAAAAAAACo/7860ASqIWW4/s72-c/laserjet6l.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4454907293259820.post-7036512815861887007</id><published>2009-06-03T13:15:00.010+02:00</published><updated>2009-06-03T14:22:38.767+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='pappkamerad'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><category scheme='http://www.blogger.com/atom/ns#' term='plotter'/><title type='text'>Articulated plotting robot for €10</title><content type='html'>As our first real Arduino project I came up with something that would give me quick results using cheap and available parts to be able to gather some experience in programming on the Atmel controller. I used two servos which can be driven directly off the Arduino board without additional circuitry to build a 2D robot arm being able to draw.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZc2689fEI/AAAAAAAAACA/ugC7moE8aB4/s1600-h/pappkamerad1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZc2689fEI/AAAAAAAAACA/ugC7moE8aB4/s400/pappkamerad1.jpg" alt="" id="BLOGGER_PHOTO_ID_5343060106529307714" border="0" /&gt;&lt;/a&gt;The arm structure is made of 3mm cardboard, using a longer screw and some wire to reinforce the upper arm - the "elbow" is floating freely, the only physical contacts to the base plane are the "shoulder" servo (which is screwed to the base) and the drawing tip. If the (heavy) drawing head is removed the tip of the forearm floats freely too.&lt;br /&gt;&lt;br /&gt;I am using two "mini" hobby servos, available for approximately €5,- each. The drawing head is really just a wrench socket with a cut-off ball pen glued in.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZeSObkAjI/AAAAAAAAACI/E9qYRYwvhY8/s1600-h/pappkamerad2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZeSObkAjI/AAAAAAAAACI/E9qYRYwvhY8/s400/pappkamerad2.jpg" alt="" id="BLOGGER_PHOTO_ID_5343061675126030898" border="0" /&gt;&lt;/a&gt;Software-wise I implemented the whole stack of low-level servo control, servo position calculation, position interpolation and the transformation of Cartesian coordinates into polar coordinates to run on the Arduino. Currently, I am hard-coding the geometry to be drawn in the source code, but clearly a serial connection could be used to feed coordinates to the robot in real-time.&lt;br /&gt;&lt;br /&gt;So here is how all this looks in action:&lt;br /&gt;&lt;div style="text-align: center"&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lL_4lbkDrUQ&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/lL_4lbkDrUQ&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Unfortunately, as you can see all this sounds a bit nicer in theory than it looks in practice - although the theoretical accuracy of the servos should allow acceptable results, the mechanical error introduced by friction, the poor accuracy of the cheap servos and the amplification of small angular errors through the long arms results in an overall positional error of approximately +-0,5 cm (even more in some bad cases) which cannot be compensated in software. Even worse, as can be seen at the beginning of the video, in some cases the arm starts to oscillate quite violently in its attempts to correct a mechanically introduced error. This oscillation can often be only stopped by human intervention and may damage the small plastic gears inside the servos or other parts of the construction.&lt;br /&gt;&lt;br /&gt;The result of my demo program - drawing an orthogonal spiral with a 1cm radius increment at each winding - is shown below. (Sorry for the bad pictures, I only have a webcam available for taking pictures right now)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZgcGYglyI/AAAAAAAAACQ/Sd7GZPPB8Sc/s1600-h/pappkamerad3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZgcGYglyI/AAAAAAAAACQ/Sd7GZPPB8Sc/s400/pappkamerad3.jpg" alt="" id="BLOGGER_PHOTO_ID_5343064043787687714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For the future, besides the serial control mentioned above, a third servo would be nice which could lift the drawing head so the arm could move without drawing. Given the poor results so far I am not sure if I will do this, though.&lt;br /&gt;&lt;br /&gt;Finally, the source code for the technically inclined:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// IMPORTANT: to facilitate integer math&lt;br /&gt;// - angles are handled in "ticks" (= microseconds for servo control, approx. 1/10th degree)&lt;br /&gt;// - coordinates are handled in tenths of millimeters&lt;br /&gt;&lt;br /&gt;byte servoPin1 = 7;&lt;br /&gt;byte servoPin2 = 8;&lt;br /&gt;&lt;br /&gt;int angle1 = 900;&lt;br /&gt;int angle2 = 900;&lt;br /&gt;&lt;br /&gt;int targetAngle1;&lt;br /&gt;int targetAngle2;&lt;br /&gt;&lt;br /&gt;int SERVO_CALIB_1 = -60;&lt;br /&gt;int SERVO_CALIB_2 = -60;&lt;br /&gt;&lt;br /&gt;char dA1 = 0;&lt;br /&gt;char dA2 = 0;&lt;br /&gt;&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;// conversion from rad to ticks (= microseconds for servo control)&lt;br /&gt;// should be ~573, but 560 works better for me&lt;br /&gt;float RAD_TO_TICKS = 560;&lt;br /&gt;&lt;br /&gt;int coords[] = { 0, 0 };&lt;br /&gt;&lt;br /&gt;// intial position&lt;br /&gt;int posX = 1500;&lt;br /&gt;int posY = 1500;&lt;br /&gt;&lt;br /&gt;void setup() {&lt;br /&gt; pinMode(servoPin1, OUTPUT);     &lt;br /&gt; pinMode(servoPin2, OUTPUT);&lt;br /&gt;&lt;br /&gt; Serial.begin(9600); &lt;br /&gt; Serial.println("Pappkamerad says hello."); &lt;br /&gt;&lt;br /&gt; // just draw the spiral once&lt;br /&gt; drawOrthoSpiral(1500, 1500, 100, 10);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt; // nothing left to do&lt;br /&gt; return;&lt;br /&gt;&lt;br /&gt; // future: read commands from serial and plot geometry&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void drawOrthoSpiral(int center_x, int center_y, int stepwidth, byte steps) {&lt;br /&gt;   &lt;br /&gt;  int pos = 0;&lt;br /&gt;&lt;br /&gt;  lineTo(center_x + stepwidth, center_y);&lt;br /&gt;  delay(1000);                  &lt;br /&gt;  &lt;br /&gt;  int i;&lt;br /&gt;&lt;br /&gt;  for (i=1; i&amp;lt;steps; i++) {&lt;br /&gt;    pos += stepwidth;&lt;br /&gt;    lineTo(center_x + pos, center_y - pos);&lt;br /&gt;    delay(1000);                  &lt;br /&gt;    lineTo(center_x - pos , center_y - pos);&lt;br /&gt;    delay(1000);                  &lt;br /&gt;    lineTo(center_x - pos, center_y + pos);&lt;br /&gt;    delay(1000);                  &lt;br /&gt;    lineTo(center_x + pos + stepwidth, center_y + pos);&lt;br /&gt;    delay(1000);                  &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;unsigned long LENGTH_A = 1850;&lt;br /&gt;unsigned long LENGTH_B = 1680; &lt;br /&gt;&lt;br /&gt;unsigned long A_SQUARED = LENGTH_A * LENGTH_A;&lt;br /&gt;unsigned long B_SQUARED = LENGTH_B * LENGTH_B;&lt;br /&gt;&lt;br /&gt;long A_SQ_PLUS_B_SQ = A_SQUARED + B_SQUARED;&lt;br /&gt;long A_TIMES_B_DOUBLE = LENGTH_A * LENGTH_B * 2;&lt;br /&gt;&lt;br /&gt;int* xyToPolar(long x, long y) {&lt;br /&gt;  &lt;br /&gt;  //print("coords: ", x, y);&lt;br /&gt;&lt;br /&gt;  long r_squared = x*x + y*y;&lt;br /&gt;  float r = sqrt(r_squared);&lt;br /&gt;  int phi = acos(x * 1.0/r) * RAD_TO_TICKS;&lt;br /&gt;&lt;br /&gt;  //print("polar: ", r, phi);&lt;br /&gt;  &lt;br /&gt;  // equal arm length case&lt;br /&gt;  /*&lt;br /&gt;  int beta = asin(r / 3700.0) * RAD_TO_TICKS * 2;  // double arm length = 370mm&lt;br /&gt;  int alpha = 1800 - phi - (beta / 2);&lt;br /&gt;  */&lt;br /&gt;  &lt;br /&gt;  // different arm lengths case&lt;br /&gt;  // use cos rule to get angle from 3 known sides &lt;br /&gt;  int alpha = acos((A_SQUARED + r_squared - B_SQUARED)/(LENGTH_A * r * 2)) * RAD_TO_TICKS;&lt;br /&gt;  alpha += 900 - phi;&lt;br /&gt;&lt;br /&gt;  int beta = acos((float)(A_SQ_PLUS_B_SQ - r_squared) / A_TIMES_B_DOUBLE) * RAD_TO_TICKS;&lt;br /&gt; &lt;br /&gt;  //print("arm: ", alpha, beta);&lt;br /&gt;  &lt;br /&gt;  // TODO: this uses a global array to store coords, ok if you know what you are doing&lt;br /&gt;  coords[0] = alpha;&lt;br /&gt;  coords[1] = beta;&lt;br /&gt;    &lt;br /&gt;  return coords;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// draw line in cartesian coordinates&lt;br /&gt;void lineTo(int targetX, int targetY) {&lt;br /&gt;    &lt;br /&gt;  int steps = max(abs(posX-targetX), abs(posY-targetY)) &amp;lt;&amp;lt; 2;&lt;br /&gt;  &lt;br /&gt;  for (i=0; i&amp;lt;=steps; i++) {&lt;br /&gt;    xyToPolar(map(i,0,steps,posX,targetX), map(i,0,steps,posY,targetY));  &lt;br /&gt;    servoPulse2(coords[0], coords[1]);&lt;br /&gt;    delay(1);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  posX = targetX;&lt;br /&gt;  posY = targetY;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void print(char* str, long n1, long n2) {&lt;br /&gt;  Serial.print(str);&lt;br /&gt;  Serial.print(n1);&lt;br /&gt;  Serial.print(", ");&lt;br /&gt;  Serial.print(n2);&lt;br /&gt;  Serial.println();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;char sign(long number) {&lt;br /&gt;  if (number == 0) return 0;&lt;br /&gt;  if (number &amp;lt; 0) return -1;&lt;br /&gt;  return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int pulseWidth;&lt;br /&gt;&lt;br /&gt;void servoPulse2(int ticks1, int ticks2) {&lt;br /&gt;  &lt;br /&gt;  ticks1 += SERVO_CALIB_1;&lt;br /&gt;&lt;br /&gt;  // safety measure to protect robot from self-collision&lt;br /&gt;  ticks2 = max(100, ticks2);&lt;br /&gt;  ticks2 = 1800 - ticks2;&lt;br /&gt;  &lt;br /&gt;  ticks2 += SERVO_CALIB_2;&lt;br /&gt; &lt;br /&gt;   //print("Servo Pulse: ", ticks1, ticks2);&lt;br /&gt; &lt;br /&gt;  int tickDiff = ticks2 - ticks1;&lt;br /&gt;  char tickSign = sign(tickDiff);&lt;br /&gt;   &lt;br /&gt;  if (tickSign == 0) {&lt;br /&gt;    pulseWidth = ticks1 + 500;&lt;br /&gt;    digitalWrite(servoPin2, HIGH);&lt;br /&gt;    digitalWrite(servoPin1, HIGH);&lt;br /&gt;    delayMicroseconds(pulseWidth);&lt;br /&gt;    digitalWrite(servoPin1, LOW);&lt;br /&gt;    digitalWrite(servoPin2, LOW);&lt;br /&gt;  }&lt;br /&gt;  else if (tickSign == 1) {&lt;br /&gt;    pulseWidth = ticks1 + 500;&lt;br /&gt;    digitalWrite(servoPin1, HIGH);&lt;br /&gt;    digitalWrite(servoPin2, HIGH);&lt;br /&gt;    delayMicroseconds(pulseWidth);&lt;br /&gt;    digitalWrite(servoPin1, LOW);&lt;br /&gt;    delayMicroseconds(tickDiff);&lt;br /&gt;    digitalWrite(servoPin2, LOW);&lt;br /&gt;  }&lt;br /&gt;  else if (tickSign == -1) {&lt;br /&gt;    pulseWidth = ticks2 + 500;&lt;br /&gt;    tickDiff = -tickDiff;&lt;br /&gt;    digitalWrite(servoPin1, HIGH);&lt;br /&gt;    digitalWrite(servoPin2, HIGH);&lt;br /&gt;    delayMicroseconds(pulseWidth);&lt;br /&gt;    digitalWrite(servoPin2, LOW);&lt;br /&gt;    delayMicroseconds(tickDiff);&lt;br /&gt;    digitalWrite(servoPin1, LOW);&lt;br /&gt;  }  &lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4454907293259820-7036512815861887007?l=maschinenringraum.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maschinenringraum.blogspot.com/feeds/7036512815861887007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://maschinenringraum.blogspot.com/2009/06/articulated-plotting-robot-for-10.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default/7036512815861887007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default/7036512815861887007'/><link rel='alternate' type='text/html' href='http://maschinenringraum.blogspot.com/2009/06/articulated-plotting-robot-for-10.html' title='Articulated plotting robot for €10'/><author><name>Flo</name><uri>http://www.blogger.com/profile/13456675247042447579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.ims.tuwien.ac.at/~flo/images/flo_new2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_tnkA4sLKUhc/SiZc2689fEI/AAAAAAAAACA/ugC7moE8aB4/s72-c/pappkamerad1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4454907293259820.post-6333361612204757243</id><published>2009-05-19T11:56:00.000+02:00</published><updated>2009-05-19T12:12:29.112+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><title type='text'>First Arduino sketch!</title><content type='html'>Easier than I thought, a first Arduino sketch showing some basic building blocks - PWM output, servo control, analog input. It probably took longer to figure out how to produce a usable video using a webcam and VLC ;).&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/79GWAxj3Ypo&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/79GWAxj3Ypo&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Now we need some stepper motors...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4454907293259820-6333361612204757243?l=maschinenringraum.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maschinenringraum.blogspot.com/feeds/6333361612204757243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://maschinenringraum.blogspot.com/2009/05/first-arduino-sketch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default/6333361612204757243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4454907293259820/posts/default/6333361612204757243'/><link rel='alternate' type='text/html' href='http://maschinenringraum.blogspot.com/2009/05/first-arduino-sketch.html' title='First Arduino sketch!'/><author><name>Flo</name><uri>http://www.blogger.com/profile/13456675247042447579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.ims.tuwien.ac.at/~flo/images/flo_new2.jpg'/></author><thr:total>0</thr:total></entry></feed>
