From 1d9ee3a13d6b3a308730bcfa5965cb9cf97458a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Lech=C3=B3n?= Date: Tue, 25 Nov 2014 19:26:45 +0100 Subject: [PATCH] Update documentation --- archives.html | 13 ++- categories.html | 12 +- feeds/all.atom.xml | 11 +- feeds/miguel-lechon.atom.xml | 11 +- feeds/miguel-lechon.rss.xml | 11 +- feeds/tools.atom.xml | 11 +- gradius-meets-twister.html | 4 +- guybrush.html | 4 +- images/oscilloscope.gif | Bin 0 -> 70707 bytes index.html | 23 +++- oscilloscope.html | 189 +++++++++++++++++++++++++++++++ sitemap.xml | 23 ++-- tags.html | 32 ++++-- theme/tipuesearch/img/expand.png | Bin theme/tipuesearch/img/link.png | Bin tipuesearch_content.json | 2 +- utbp.html | 4 +- xrobot.html | 4 +- 18 files changed, 312 insertions(+), 42 deletions(-) create mode 100644 images/oscilloscope.gif create mode 100644 oscilloscope.html mode change 100644 => 100755 theme/tipuesearch/img/expand.png mode change 100644 => 100755 theme/tipuesearch/img/link.png diff --git a/archives.html b/archives.html index a780222..b3498aa 100644 --- a/archives.html +++ b/archives.html @@ -49,22 +49,27 @@

Posts

+

2015

+

2014

diff --git a/categories.html b/categories.html index 73e869d..f5cfa30 100644 --- a/categories.html +++ b/categories.html @@ -64,7 +64,7 @@

Categories

@@ -79,7 +79,7 @@

Categories

@@ -87,16 +87,18 @@

Categories

diff --git a/feeds/all.atom.xml b/feeds/all.atom.xml index 656cefc..071f290 100644 --- a/feeds/all.atom.xml +++ b/feeds/all.atom.xml @@ -1,5 +1,14 @@ -Transition Dreamshttp://blog.debiatan.net/2014-08-25T08:00:00+02:00Distortion Vector Field2014-08-25T08:00:00+02:00Miguel Lechóntag:blog.debiatan.net,2014-08-25:guybrush.html<p>Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels.</p> +Transition Dreamshttp://blog.debiatan.net/2015-11-25T18:00:00+01:00Oscilloscope2015-11-25T18:00:00+01:00Miguel Lechóntag:blog.debiatan.net,2015-11-25:oscilloscope.html<p>It seems that building an oscilloscope on top of an Arduino board is some sort of rite of passage. Do a <a class="reference external" href="https://duckduckgo.com/?q=arduino+oscilloscope">duckduckgo</a> search and you will see that all the good names for this kind of project are already taken, so I have decided to name mine just <em>oscilloscope</em>. In my defense, I'll say that I have written mine because I needed the most basic of oscilloscopes and it's just easier to build one from scratch than to adapt some already existing code.</p> +<p>I've written my oscilloscope code it in order to inspect a single-channel periodic signal with a frequency close to 250 Hz. My first trivial attempt at the task already recorded the signal at 5 kHz and transmitted it over USB without the need to buffer data in the RAM of the microcontroller, so I haven't bothered speeding it up.</p> +<p>The main bottleneck in my case is the serial transmission. Trying to collect more than 5800 samples per second will likely result in the loss of some of them. I've written some extra code that checks for missing samples, but it never detects problems at 5 kHz and, frankly, I'm OK with twenty samples per cycle.</p> +<p>All in all, putting together the <tt class="docutils literal">C</tt> firmware and the <tt class="docutils literal">Python</tt> client, the project takes less than 130 lines. The program that checks for periodicity, finds the frequency and aligns the cycles to display them adds 90 extra lines. The output of this program looks like this:</p> +<div class="figure align-center"> +<img alt="Jiggling periodic wave" src="images/oscilloscope.gif" style="width: 406.0px; height: 306.0px;" /> +<p class="caption">Visualization of several cycles of a PWM signal at 250 Hz after going through a simple RC circuit.</p> +</div> +<p>Here's the <a class="reference external" href="https://github.com/debiatan/oscilloscope">link to the github repository</a>.</p> +Distortion Vector Field2014-08-25T08:00:00+02:00Miguel Lechóntag:blog.debiatan.net,2014-08-25:guybrush.html<p>Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels.</p> <div class="flex-video widescreen" style="margin: 0 auto;text-align:center;"> <iframe src="//player.vimeo.com/video/104247325" frameborder="0" title="Guybrush materializes" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div> diff --git a/feeds/miguel-lechon.atom.xml b/feeds/miguel-lechon.atom.xml index 8a37d3d..2ff3d19 100644 --- a/feeds/miguel-lechon.atom.xml +++ b/feeds/miguel-lechon.atom.xml @@ -1,5 +1,14 @@ -Transition Dreamshttp://blog.debiatan.net/2014-08-25T08:00:00+02:00Distortion Vector Field2014-08-25T08:00:00+02:00Miguel Lechóntag:blog.debiatan.net,2014-08-25:guybrush.html<p>Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels.</p> +Transition Dreamshttp://blog.debiatan.net/2015-11-25T18:00:00+01:00Oscilloscope2015-11-25T18:00:00+01:00Miguel Lechóntag:blog.debiatan.net,2015-11-25:oscilloscope.html<p>It seems that building an oscilloscope on top of an Arduino board is some sort of rite of passage. Do a <a class="reference external" href="https://duckduckgo.com/?q=arduino+oscilloscope">duckduckgo</a> search and you will see that all the good names for this kind of project are already taken, so I have decided to name mine just <em>oscilloscope</em>. In my defense, I'll say that I have written mine because I needed the most basic of oscilloscopes and it's just easier to build one from scratch than to adapt some already existing code.</p> +<p>I've written my oscilloscope code it in order to inspect a single-channel periodic signal with a frequency close to 250 Hz. My first trivial attempt at the task already recorded the signal at 5 kHz and transmitted it over USB without the need to buffer data in the RAM of the microcontroller, so I haven't bothered speeding it up.</p> +<p>The main bottleneck in my case is the serial transmission. Trying to collect more than 5800 samples per second will likely result in the loss of some of them. I've written some extra code that checks for missing samples, but it never detects problems at 5 kHz and, frankly, I'm OK with twenty samples per cycle.</p> +<p>All in all, putting together the <tt class="docutils literal">C</tt> firmware and the <tt class="docutils literal">Python</tt> client, the project takes less than 130 lines. The program that checks for periodicity, finds the frequency and aligns the cycles to display them adds 90 extra lines. The output of this program looks like this:</p> +<div class="figure align-center"> +<img alt="Jiggling periodic wave" src="images/oscilloscope.gif" style="width: 406.0px; height: 306.0px;" /> +<p class="caption">Visualization of several cycles of a PWM signal at 250 Hz after going through a simple RC circuit.</p> +</div> +<p>Here's the <a class="reference external" href="https://github.com/debiatan/oscilloscope">link to the github repository</a>.</p> +Distortion Vector Field2014-08-25T08:00:00+02:00Miguel Lechóntag:blog.debiatan.net,2014-08-25:guybrush.html<p>Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels.</p> <div class="flex-video widescreen" style="margin: 0 auto;text-align:center;"> <iframe src="//player.vimeo.com/video/104247325" frameborder="0" title="Guybrush materializes" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div> diff --git a/feeds/miguel-lechon.rss.xml b/feeds/miguel-lechon.rss.xml index 2a98d41..a980713 100644 --- a/feeds/miguel-lechon.rss.xml +++ b/feeds/miguel-lechon.rss.xml @@ -1,5 +1,14 @@ -Transition Dreamshttp://blog.debiatan.net/Mon, 25 Aug 2014 08:00:00 +0200Distortion Vector Fieldhttp://blog.debiatan.net/guybrush.html<p>Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels.</p> +Transition Dreamshttp://blog.debiatan.net/Wed, 25 Nov 2015 18:00:00 +0100Oscilloscopehttp://blog.debiatan.net/oscilloscope.html<p>It seems that building an oscilloscope on top of an Arduino board is some sort of rite of passage. Do a <a class="reference external" href="https://duckduckgo.com/?q=arduino+oscilloscope">duckduckgo</a> search and you will see that all the good names for this kind of project are already taken, so I have decided to name mine just <em>oscilloscope</em>. In my defense, I'll say that I have written mine because I needed the most basic of oscilloscopes and it's just easier to build one from scratch than to adapt some already existing code.</p> +<p>I've written my oscilloscope code it in order to inspect a single-channel periodic signal with a frequency close to 250 Hz. My first trivial attempt at the task already recorded the signal at 5 kHz and transmitted it over USB without the need to buffer data in the RAM of the microcontroller, so I haven't bothered speeding it up.</p> +<p>The main bottleneck in my case is the serial transmission. Trying to collect more than 5800 samples per second will likely result in the loss of some of them. I've written some extra code that checks for missing samples, but it never detects problems at 5 kHz and, frankly, I'm OK with twenty samples per cycle.</p> +<p>All in all, putting together the <tt class="docutils literal">C</tt> firmware and the <tt class="docutils literal">Python</tt> client, the project takes less than 130 lines. The program that checks for periodicity, finds the frequency and aligns the cycles to display them adds 90 extra lines. The output of this program looks like this:</p> +<div class="figure align-center"> +<img alt="Jiggling periodic wave" src="images/oscilloscope.gif" style="width: 406.0px; height: 306.0px;" /> +<p class="caption">Visualization of several cycles of a PWM signal at 250 Hz after going through a simple RC circuit.</p> +</div> +<p>Here's the <a class="reference external" href="https://github.com/debiatan/oscilloscope">link to the github repository</a>.</p> +Miguel LechónWed, 25 Nov 2015 18:00:00 +0100tag:blog.debiatan.net,2015-11-25:oscilloscope.htmlarduinooscilloscopeDistortion Vector Fieldhttp://blog.debiatan.net/guybrush.html<p>Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels.</p> <div class="flex-video widescreen" style="margin: 0 auto;text-align:center;"> <iframe src="//player.vimeo.com/video/104247325" frameborder="0" title="Guybrush materializes" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div> diff --git a/feeds/tools.atom.xml b/feeds/tools.atom.xml index 0804fbe..042a5de 100644 --- a/feeds/tools.atom.xml +++ b/feeds/tools.atom.xml @@ -1,5 +1,14 @@ -Transition Dreamshttp://blog.debiatan.net/2014-04-01T10:00:00+02:00Unit-Test-Based Programming2014-04-01T10:00:00+02:00Miguel Lechóntag:blog.debiatan.net,2014-04-01:utbp.html<p>UTBP is a new subparadigm of Declarative Programming, in which code is generated from a description of its intended behavior, specified through unit tests. This work was presented at <a class="reference external" href="http://www.sigbovik.org/2014/">SIGBOVIK 2014</a> and received the <em>Most Frighteningly Like Real Research</em> Award.</p> +Transition Dreamshttp://blog.debiatan.net/2015-11-25T18:00:00+01:00Oscilloscope2015-11-25T18:00:00+01:00Miguel Lechóntag:blog.debiatan.net,2015-11-25:oscilloscope.html<p>It seems that building an oscilloscope on top of an Arduino board is some sort of rite of passage. Do a <a class="reference external" href="https://duckduckgo.com/?q=arduino+oscilloscope">duckduckgo</a> search and you will see that all the good names for this kind of project are already taken, so I have decided to name mine just <em>oscilloscope</em>. In my defense, I'll say that I have written mine because I needed the most basic of oscilloscopes and it's just easier to build one from scratch than to adapt some already existing code.</p> +<p>I've written my oscilloscope code it in order to inspect a single-channel periodic signal with a frequency close to 250 Hz. My first trivial attempt at the task already recorded the signal at 5 kHz and transmitted it over USB without the need to buffer data in the RAM of the microcontroller, so I haven't bothered speeding it up.</p> +<p>The main bottleneck in my case is the serial transmission. Trying to collect more than 5800 samples per second will likely result in the loss of some of them. I've written some extra code that checks for missing samples, but it never detects problems at 5 kHz and, frankly, I'm OK with twenty samples per cycle.</p> +<p>All in all, putting together the <tt class="docutils literal">C</tt> firmware and the <tt class="docutils literal">Python</tt> client, the project takes less than 130 lines. The program that checks for periodicity, finds the frequency and aligns the cycles to display them adds 90 extra lines. The output of this program looks like this:</p> +<div class="figure align-center"> +<img alt="Jiggling periodic wave" src="images/oscilloscope.gif" style="width: 406.0px; height: 306.0px;" /> +<p class="caption">Visualization of several cycles of a PWM signal at 250 Hz after going through a simple RC circuit.</p> +</div> +<p>Here's the <a class="reference external" href="https://github.com/debiatan/oscilloscope">link to the github repository</a>.</p> +Unit-Test-Based Programming2014-04-01T10:00:00+02:00Miguel Lechóntag:blog.debiatan.net,2014-04-01:utbp.html<p>UTBP is a new subparadigm of Declarative Programming, in which code is generated from a description of its intended behavior, specified through unit tests. This work was presented at <a class="reference external" href="http://www.sigbovik.org/2014/">SIGBOVIK 2014</a> and received the <em>Most Frighteningly Like Real Research</em> Award.</p> <p>For an in-depth tour of UTBP, you can check <a class="reference external" href="https://github.com/debiatan/utbp/blob/master/doc/article.pdf">the article</a> and browse the <a class="reference external" href="https://github.com/debiatan/utbp">associated GitHub repository</a>. If you prefer a light introduction, you can choose between two versions of the same video. This one is dubbed:</p> <div class="flex-video widescreen" style="margin: 0 auto;text-align:center;"> <iframe src="//player.vimeo.com/video/89179353" frameborder="0" title="Unit-Test-Based Programming -- English dubbing" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> diff --git a/gradius-meets-twister.html b/gradius-meets-twister.html index 5b59c38..8509917 100644 --- a/gradius-meets-twister.html +++ b/gradius-meets-twister.html @@ -104,7 +104,7 @@

Gradius meets

Published

- +

Category

games

Tags

@@ -120,7 +120,7 @@

Tags

Follow/Contact

- + diff --git a/guybrush.html b/guybrush.html index c138139..52a191b 100644 --- a/guybrush.html +++ b/guybrush.html @@ -97,7 +97,7 @@

Distortion Vector Field <

Published

- +

Category

thingies

Tags

@@ -107,7 +107,7 @@

Tags

Follow/Contact

- + diff --git a/images/oscilloscope.gif b/images/oscilloscope.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9c2570c98f06ccd35e2b6f417a0b3e2756ae35a GIT binary patch literal 70707 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∓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 a8HZ+o+~Hp%YZW1?7MEoTpm2#75CA*wYra$f literal 0 HcmV?d00001 diff --git a/index.html b/index.html index b6bc620..cd0ceb9 100644 --- a/index.html +++ b/index.html @@ -69,6 +69,11 @@

Projects

xrobot Python X11 event automation library +

@@ -78,13 +83,23 @@

Projects

Recent Posts all posts

+ @@ -94,7 +109,7 @@

Recent Posts tools
- +

@@ -104,7 +119,7 @@

Recent Posts games
- +
@@ -114,7 +129,7 @@

Recent Posts tools
- +
diff --git a/oscilloscope.html b/oscilloscope.html new file mode 100644 index 0000000..6542d3b --- /dev/null +++ b/oscilloscope.html @@ -0,0 +1,189 @@ + + + + + + + + + + Oscilloscope - Who needs yet another Arduino oscilloscope? · Transition Dreams + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 76cd9af..875f4e8 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -5,56 +5,63 @@ xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> http://blog.debiatan.net/index.html -2014-08-25T02:18:14-00:00 +2014-11-25T19:26:45-00:00 daily 0.5 http://blog.debiatan.net/archives.html -2014-08-25T02:18:14-00:00 +2014-11-25T19:26:45-00:00 daily 0.5 http://blog.debiatan.net/tags.html -2014-08-25T02:18:14-00:00 +2014-11-25T19:26:45-00:00 daily 0.5 http://blog.debiatan.net/categories.html -2014-08-25T02:18:14-00:00 +2014-11-25T19:26:45-00:00 daily 0.5 + +http://blog.debiatan.net/oscilloscope.html +2015-11-25T18:00:00+01:00 +monthly +0.5 + + http://blog.debiatan.net/guybrush.html -2014-08-25T08:00:00-00:00 +2014-08-25T08:00:00+02:00 monthly 0.5 http://blog.debiatan.net/utbp.html -2014-04-01T10:00:00-00:00 +2014-04-01T10:00:00+02:00 monthly 0.5 http://blog.debiatan.net/gradius-meets-twister.html -2014-01-27T20:00:00-00:00 +2014-01-27T20:00:00+01:00 monthly 0.5 http://blog.debiatan.net/xrobot.html -2014-01-02T10:00:00-00:00 +2014-01-02T10:00:00+01:00 monthly 0.5 diff --git a/tags.html b/tags.html index b33d4bb..d21902a 100644 --- a/tags.html +++ b/tags.html @@ -53,6 +53,9 @@

Tags

    +
  • + arduino1 +
  • automatic programming1
  • @@ -69,6 +72,9 @@

    Tags

    graphical effects1
  • + oscilloscope1 +
  • +
  • SIGBOVIK1
  • @@ -83,44 +89,54 @@

    Tags

    diff --git a/theme/tipuesearch/img/expand.png b/theme/tipuesearch/img/expand.png old mode 100644 new mode 100755 diff --git a/theme/tipuesearch/img/link.png b/theme/tipuesearch/img/link.png old mode 100644 new mode 100755 diff --git a/tipuesearch_content.json b/tipuesearch_content.json index 8640648..34ed9ad 100644 --- a/tipuesearch_content.json +++ b/tipuesearch_content.json @@ -1 +1 @@ -{"pages":[{"text":"Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels. On the left, you can see the distortion field applied to the original image to deform it. It consists of a field of vectors, each of them centered on a pixel of the image, following a 2D Ornstein-Uhlenbeck process . They are convolved with a Gaussian kernel that grows as the video steps forward.","tags":"thingies","loc":"http://blog.debiatan.net/guybrush.html","title":"Distortion Vector Field"},{"text":"UTBP is a new subparadigm of Declarative Programming, in which code is generated from a description of its intended behavior, specified through unit tests. This work was presented at SIGBOVIK 2014 and received the Most Frighteningly Like Real Research Award. For an in-depth tour of UTBP, you can check the article and browse the associated GitHub repository . If you prefer a light introduction, you can choose between two versions of the same video. This one is dubbed: This one is subbed:","tags":"tools","loc":"http://blog.debiatan.net/utbp.html","title":"Unit-Test-Based Programming"},{"text":"This weekend I participated in the sixth edition of the Global Game Jam . The goal of the event was to create a game related in some way to a given theme in 48 hours. This year's theme was We don't see things as they are, we see them as we are . I decided to go for a multiplayer Gradius clone in which collisions with enemies remap your controls. I developed it using CodeSkulptor , which is basically a Python interpreter running on top of Javascript. Needless to say, it's no speed demon. See for yourself: If you want to give it a try, I have two suggestions to make: Find someone to play against (otherwise is going to look as sad as my single player game above). Run it on Chrome. Here's the profile of the game at the GGJ webpage and a link to the game . Enjoy! Update : Looks like my game placed third on the local vote we held after the Jam! Hooray!","tags":"games","loc":"http://blog.debiatan.net/gradius-meets-twister.html","title":"Gradius meets Twister"},{"text":"Every once in a while, I need to step outside the command line. Sometimes I'm even forced to interact with deaf graphical programs, those that do not listen to standard input or a meager HTTP port. In those desperate times, were it not for tools such as XAUT or xdotool , I would have to type and click outside of VIM , like cavemen probably did. Those two little programs are enough to make me happy when confronted with an X11 server. However, my computer, of a more whimsical nature, is reluctant to execute binaries other than a Python interpreter (like any other well-meaning general-purpose device assembled during the 21st century, really). That is why I have decided to write the simplest Python library I could think of that is able to: Find out the position of the mouse pointer Move the mouse pointer around the screen Press and release mouse buttons Press and release keys in the keyboard Capture the screen The xrobot library is lean, simple and Python[23]-compliant. It is just a wrapper around functions defined inside python-xlib . Since Xlib screen capture is painfully slow, the python-gtk bindings are used instead, if present. I have decided to return images as numpy arrays for my convenience; if you find that dependency unbearable, you can root it out easily from the code. Here's me, at five hundred clicks/second. I leave you with a link to the xrobot github repository and some sample code: import xrobot xr = xrobot . XRobot () xr . move ( 10 , 10 ) robot = XRobot () x , y = robot . mouse_pos () print ( 'Current mouse position: x =' , x , 'y =' , y ) robot . move ( 10 , 10 ) robot . click ( 1 ) robot . key ( 'a' ) # Press and release 'a' robot . key_down ( 'comma' ) # Press ',' robot . key_up ( 'comma' ) # Release ',' width , height = robot . screen_resolution () print ( 'Screen width:' , width , 'Screen height:' , height ) img = robot . capture_screen () import pylab as pl pl . imshow ( img ) pl . show ()","tags":"tools","loc":"http://blog.debiatan.net/xrobot.html","title":"xrobot"}]} \ No newline at end of file +{"pages":[{"text":"It seems that building an oscilloscope on top of an Arduino board is some sort of rite of passage. Do a duckduckgo search and you will see that all the good names for this kind of project are already taken, so I have decided to name mine just oscilloscope . In my defense, I'll say that I have written mine because I needed the most basic of oscilloscopes and it's just easier to build one from scratch than to adapt some already existing code. I've written my oscilloscope code it in order to inspect a single-channel periodic signal with a frequency close to 250 Hz. My first trivial attempt at the task already recorded the signal at 5 kHz and transmitted it over USB without the need to buffer data in the RAM of the microcontroller, so I haven't bothered speeding it up. The main bottleneck in my case is the serial transmission. Trying to collect more than 5800 samples per second will likely result in the loss of some of them. I've written some extra code that checks for missing samples, but it never detects problems at 5 kHz and, frankly, I'm OK with twenty samples per cycle. All in all, putting together the C firmware and the Python client, the project takes less than 130 lines. The program that checks for periodicity, finds the frequency and aligns the cycles to display them adds 90 extra lines. The output of this program looks like this: Visualization of several cycles of a PWM signal at 250 Hz after going through a simple RC circuit. Here's the link to the github repository .","tags":"tools","loc":"http://blog.debiatan.net/oscilloscope.html","title":"Oscilloscope"},{"text":"Just to keep the blog rolling, I'm posting this ten-second clip of Guybrush Threepwood coming into existence from some sort of primordial soup of pixels. On the left, you can see the distortion field applied to the original image to deform it. It consists of a field of vectors, each of them centered on a pixel of the image, following a 2D Ornstein-Uhlenbeck process . They are convolved with a Gaussian kernel that grows as the video steps forward.","tags":"thingies","loc":"http://blog.debiatan.net/guybrush.html","title":"Distortion Vector Field"},{"text":"UTBP is a new subparadigm of Declarative Programming, in which code is generated from a description of its intended behavior, specified through unit tests. This work was presented at SIGBOVIK 2014 and received the Most Frighteningly Like Real Research Award. For an in-depth tour of UTBP, you can check the article and browse the associated GitHub repository . If you prefer a light introduction, you can choose between two versions of the same video. This one is dubbed: This one is subbed:","tags":"tools","loc":"http://blog.debiatan.net/utbp.html","title":"Unit-Test-Based Programming"},{"text":"This weekend I participated in the sixth edition of the Global Game Jam . The goal of the event was to create a game related in some way to a given theme in 48 hours. This year's theme was We don't see things as they are, we see them as we are . I decided to go for a multiplayer Gradius clone in which collisions with enemies remap your controls. I developed it using CodeSkulptor , which is basically a Python interpreter running on top of Javascript. Needless to say, it's no speed demon. See for yourself: If you want to give it a try, I have two suggestions to make: Find someone to play against (otherwise is going to look as sad as my single player game above). Run it on Chrome. Here's the profile of the game at the GGJ webpage and a link to the game . Enjoy! Update : Looks like my game placed third on the local vote we held after the Jam! Hooray!","tags":"games","loc":"http://blog.debiatan.net/gradius-meets-twister.html","title":"Gradius meets Twister"},{"text":"Every once in a while, I need to step outside the command line. Sometimes I'm even forced to interact with deaf graphical programs, those that do not listen to standard input or a meager HTTP port. In those desperate times, were it not for tools such as XAUT or xdotool , I would have to type and click outside of VIM , like cavemen probably did. Those two little programs are enough to make me happy when confronted with an X11 server. However, my computer, of a more whimsical nature, is reluctant to execute binaries other than a Python interpreter (like any other well-meaning general-purpose device assembled during the 21st century, really). That is why I have decided to write the simplest Python library I could think of that is able to: Find out the position of the mouse pointer Move the mouse pointer around the screen Press and release mouse buttons Press and release keys in the keyboard Capture the screen The xrobot library is lean, simple and Python[23]-compliant. It is just a wrapper around functions defined inside python-xlib . Since Xlib screen capture is painfully slow, the python-gtk bindings are used instead, if present. I have decided to return images as numpy arrays for my convenience; if you find that dependency unbearable, you can root it out easily from the code. Here's me, at five hundred clicks/second. I leave you with a link to the xrobot github repository and some sample code: import xrobot xr = xrobot . XRobot () xr . move ( 10 , 10 ) robot = XRobot () x , y = robot . mouse_pos () print ( 'Current mouse position: x =' , x , 'y =' , y ) robot . move ( 10 , 10 ) robot . click ( 1 ) robot . key ( 'a' ) # Press and release 'a' robot . key_down ( 'comma' ) # Press ',' robot . key_up ( 'comma' ) # Release ',' width , height = robot . screen_resolution () print ( 'Screen width:' , width , 'Screen height:' , height ) img = robot . capture_screen () import pylab as pl pl . imshow ( img ) pl . show ()","tags":"tools","loc":"http://blog.debiatan.net/xrobot.html","title":"xrobot"}]} \ No newline at end of file diff --git a/utbp.html b/utbp.html index fbe95b0..3c3a9d0 100644 --- a/utbp.html +++ b/utbp.html @@ -101,7 +101,7 @@

    Unit-Test-Based Programming <

Follow/Contact

- + diff --git a/xrobot.html b/xrobot.html index 4984fed..7d95a0a 100644 --- a/xrobot.html +++ b/xrobot.html @@ -128,7 +128,7 @@

xrobot Python X11 e

Published

- +

Category

tools

Tags

@@ -138,7 +138,7 @@

Tags

Follow/Contact

- +