Browse Source

Low cost telepresence robot

Phyks (Lucas Verney) 3 years ago
parent
commit
bea81d5394

+ 106
- 2
blog/2015/10/index.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>
@@ -49,6 +49,110 @@
49 49
 		<p class="month">Octobre</p>
50 50
 	</aside>
51 51
 	<div class="article">
52
+		<header><h1 class="article_title"><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></h1></header>
53
+		<!-- 
54
+    @author=Phyks
55
+    @date=08102015-2308
56
+    @title=Doing low cost telepresence (for under $200)
57
+    @tags=DIY
58
+-->
59
+
60
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
61
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
62
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png" /></p>
63
+<hr/>
64
+
65
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png" /></p>
66
+<h2>Basic idea</h2>
67
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
68
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
69
+<h2>Bill of Materials</h2>
70
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
71
+<p>Here is the complete bill of materials:</p>
72
+<ul>
73
+<li>A Raspberry Pi 2 - $30</li>
74
+<li>A PiCamera - $30</li>
75
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
76
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
77
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
78
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
79
+<li>1 wifi USB adapter - $5</li>
80
+<li>2 ball transfer unit</li>
81
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
82
+</ul>
83
+<p>Total: $140</p>
84
+<p>Notes: 
85
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
86
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
87
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
88
+<p>For the next version, we plan to add: 
89
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
90
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
91
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
92
+<p>Total with these parts: $228</p>
93
+<p>Notes: 
94
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
95
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
96
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
97
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
98
+<h2>Building the robot</h2>
99
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
100
+- <code>blueprints</code> which are the models of the robot.
101
+- <code>disty</code> which is the main server code on the Raspberry Pi.
102
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
103
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
104
+<p>You should 3D print: 
105
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
106
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
107
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
108
+need to print it once. 
109
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
110
+wheels. You need four of them.</p>
111
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures&nbsp;:) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
112
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg" /></p>
113
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg" /></p>
114
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg" /></p>
115
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
116
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png" /></p>
117
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
118
+<p>Here you are, you have a working Disty!</p>
119
+<h2>Running it</h2>
120
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
121
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
122
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
123
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
124
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
125
+<h2>Contributing!</h2>
126
+<p>All contributions and feedbacks are more than welcomed!</p>
127
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
128
+<pre><code>* --------------------------------------------------------------------------------
129
+* "THE BEER-WARE LICENSE" (Revision 42):
130
+* Phyks and Élie wrote this file. As long as you retain this notice you
131
+* can do whatever you want with this stuff (and you can also do whatever you want
132
+* with this stuff without retaining it, but that's not cool...). If we meet some
133
+* day, and you think this stuff is worth it, you can buy us a beer
134
+* in return.
135
+*                                                                       hackEns
136
+* ---------------------------------------------------------------------------------
137
+</code></pre>
138
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
139
+<h2>Some sources of inspiration and documentation</h2>
140
+<ul>
141
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
142
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
143
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
144
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
145
+</ul>
146
+		<footer><p class="date">Le 08/10/2015 à 23:08</p>
147
+		<p class="tags">Tags : <a href="//phyks.me/tags/DIY.html">DIY</a></p></footer>
148
+	</div>
149
+</article>
150
+<article>
151
+	<aside>
152
+		<p class="day">08</p>
153
+		<p class="month">Octobre</p>
154
+	</aside>
155
+	<div class="article">
52 156
 		<header><h1 class="article_title"><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></h1></header>
53 157
 		<!-- 
54 158
     @author=Phyks

+ 156
- 0
blog/2015/10/low_cost_telepresence.html View File

@@ -0,0 +1,156 @@
1
+<!DOCTYPE html>
2
+<html lang="fr">
3
+    <head>
4
+        <meta charset="utf-8">
5
+        <title>Phyks' blog - Doing low cost telepresence (for under $200)</title>
6
+		<link rel="stylesheet" href="//phyks.me/design.css"/>
7
+        <link type="text/plain" rel="author" href="//phyks.me/humans.txt"/>
8
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+        <link rel="alternate" type="application/rss+xml" title="RSS" href="//phyks.me/rss.xml" />
10
+    </head>
11
+    <body>
12
+        <div id="wrapper">
13
+            <!-- Sidebar -->
14
+                <aside id="sidebar-wrapper">
15
+                    <header><h1><a href="//phyks.me">~Phyks</a></h1></header>
16
+
17
+                    <h2>Catégories</h2>
18
+                        <nav id="sidebar-tags">
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20
+                        </nav>
21
+
22
+                    <h2>Derniers articles</h2>
23
+                        <ul id="sidebar-articles">
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25
+                        </ul>
26
+
27
+                    <h2>Liens</h2>
28
+                        <ul id="sidebar-links">
29
+                            <li><a href="//phyks.me/contact.html" title="Contact">Me contacter</a></li>
30
+                            <li class="monospace"><a href="//links.phyks.me" title="Mon Shaarli">find ~phyks -type l</a></li>
31
+                            <li><a href="https://github.com/phyks/" rel="me" title="Github">Mon Github</a></li>
32
+                            <li><a href="//phyks.me/divers.html" title="Divers">Divers</a></li>
33
+                        </ul>
34
+                </aside>
35
+
36
+            <!-- Page content -->
37
+                <header id="header">
38
+                    <h1><a href="//phyks.me">~Phyks</a></h1>
39
+                </header>
40
+
41
+                <div id="note_responsive">
42
+                    <p><em>Note</em> : Cliquez sur la bande bleue à gauche pour faire apparaître le menu.</p>
43
+                </div>
44
+
45
+                <div id="articles">
46
+<article>
47
+	<aside>
48
+		<p class="day">08</p>
49
+		<p class="month">Octobre</p>
50
+	</aside>
51
+	<div class="article">
52
+		<header><h1 class="article_title"><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></h1></header>
53
+		<!-- 
54
+    @author=Phyks
55
+    @date=08102015-2308
56
+    @title=Doing low cost telepresence (for under $200)
57
+    @tags=DIY
58
+-->
59
+
60
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
61
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
62
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png" /></p>
63
+<hr/>
64
+
65
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png" /></p>
66
+<h2>Basic idea</h2>
67
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
68
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
69
+<h2>Bill of Materials</h2>
70
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
71
+<p>Here is the complete bill of materials:</p>
72
+<ul>
73
+<li>A Raspberry Pi 2 - $30</li>
74
+<li>A PiCamera - $30</li>
75
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
76
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
77
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
78
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
79
+<li>1 wifi USB adapter - $5</li>
80
+<li>2 ball transfer unit</li>
81
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
82
+</ul>
83
+<p>Total: $140</p>
84
+<p>Notes: 
85
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
86
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
87
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
88
+<p>For the next version, we plan to add: 
89
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
90
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
91
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
92
+<p>Total with these parts: $228</p>
93
+<p>Notes: 
94
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
95
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
96
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
97
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
98
+<h2>Building the robot</h2>
99
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
100
+- <code>blueprints</code> which are the models of the robot.
101
+- <code>disty</code> which is the main server code on the Raspberry Pi.
102
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
103
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
104
+<p>You should 3D print: 
105
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
106
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
107
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
108
+need to print it once. 
109
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
110
+wheels. You need four of them.</p>
111
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures&nbsp;:) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
112
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg" /></p>
113
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg" /></p>
114
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg" /></p>
115
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
116
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png" /></p>
117
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
118
+<p>Here you are, you have a working Disty!</p>
119
+<h2>Running it</h2>
120
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
121
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
122
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
123
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
124
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
125
+<h2>Contributing!</h2>
126
+<p>All contributions and feedbacks are more than welcomed!</p>
127
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
128
+<pre><code>* --------------------------------------------------------------------------------
129
+* "THE BEER-WARE LICENSE" (Revision 42):
130
+* Phyks and Élie wrote this file. As long as you retain this notice you
131
+* can do whatever you want with this stuff (and you can also do whatever you want
132
+* with this stuff without retaining it, but that's not cool...). If we meet some
133
+* day, and you think this stuff is worth it, you can buy us a beer
134
+* in return.
135
+*                                                                       hackEns
136
+* ---------------------------------------------------------------------------------
137
+</code></pre>
138
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
139
+<h2>Some sources of inspiration and documentation</h2>
140
+<ul>
141
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
142
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
143
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
144
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
145
+</ul>
146
+		<footer><p class="date">Le 08/10/2015 à 23:08</p>
147
+		<p class="tags">Tags : <a href="//phyks.me/tags/DIY.html">DIY</a></p></footer>
148
+	</div>
149
+</article>
150
+            </div>
151
+            <footer id="rss">
152
+                <p><a href="//phyks.me/rss.xml"><img src="//phyks.me/img/rss.png" alt="RSS"/></a></p>
153
+            </footer>
154
+        </div>
155
+    </body>
156
+</html>

+ 106
- 2
blog/2015/index.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>
@@ -49,6 +49,110 @@
49 49
 		<p class="month">Octobre</p>
50 50
 	</aside>
51 51
 	<div class="article">
52
+		<header><h1 class="article_title"><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></h1></header>
53
+		<!-- 
54
+    @author=Phyks
55
+    @date=08102015-2308
56
+    @title=Doing low cost telepresence (for under $200)
57
+    @tags=DIY
58
+-->
59
+
60
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
61
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
62
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png" /></p>
63
+<hr/>
64
+
65
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png" /></p>
66
+<h2>Basic idea</h2>
67
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
68
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
69
+<h2>Bill of Materials</h2>
70
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
71
+<p>Here is the complete bill of materials:</p>
72
+<ul>
73
+<li>A Raspberry Pi 2 - $30</li>
74
+<li>A PiCamera - $30</li>
75
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
76
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
77
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
78
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
79
+<li>1 wifi USB adapter - $5</li>
80
+<li>2 ball transfer unit</li>
81
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
82
+</ul>
83
+<p>Total: $140</p>
84
+<p>Notes: 
85
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
86
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
87
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
88
+<p>For the next version, we plan to add: 
89
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
90
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
91
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
92
+<p>Total with these parts: $228</p>
93
+<p>Notes: 
94
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
95
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
96
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
97
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
98
+<h2>Building the robot</h2>
99
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
100
+- <code>blueprints</code> which are the models of the robot.
101
+- <code>disty</code> which is the main server code on the Raspberry Pi.
102
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
103
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
104
+<p>You should 3D print: 
105
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
106
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
107
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
108
+need to print it once. 
109
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
110
+wheels. You need four of them.</p>
111
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures&nbsp;:) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
112
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg" /></p>
113
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg" /></p>
114
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg" /></p>
115
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
116
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png" /></p>
117
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
118
+<p>Here you are, you have a working Disty!</p>
119
+<h2>Running it</h2>
120
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
121
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
122
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
123
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
124
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
125
+<h2>Contributing!</h2>
126
+<p>All contributions and feedbacks are more than welcomed!</p>
127
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
128
+<pre><code>* --------------------------------------------------------------------------------
129
+* "THE BEER-WARE LICENSE" (Revision 42):
130
+* Phyks and Élie wrote this file. As long as you retain this notice you
131
+* can do whatever you want with this stuff (and you can also do whatever you want
132
+* with this stuff without retaining it, but that's not cool...). If we meet some
133
+* day, and you think this stuff is worth it, you can buy us a beer
134
+* in return.
135
+*                                                                       hackEns
136
+* ---------------------------------------------------------------------------------
137
+</code></pre>
138
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
139
+<h2>Some sources of inspiration and documentation</h2>
140
+<ul>
141
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
142
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
143
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
144
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
145
+</ul>
146
+		<footer><p class="date">Le 08/10/2015 à 23:08</p>
147
+		<p class="tags">Tags : <a href="//phyks.me/tags/DIY.html">DIY</a></p></footer>
148
+	</div>
149
+</article>
150
+<article>
151
+	<aside>
152
+		<p class="day">08</p>
153
+		<p class="month">Octobre</p>
154
+	</aside>
155
+	<div class="article">
52 156
 		<header><h1 class="article_title"><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></h1></header>
53 157
 		<!-- 
54 158
     @author=Phyks

+ 2
- 2
blog/archives.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 106
- 69
blog/index.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>
@@ -49,6 +49,110 @@
49 49
 		<p class="month">Octobre</p>
50 50
 	</aside>
51 51
 	<div class="article">
52
+		<header><h1 class="article_title"><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></h1></header>
53
+		<!-- 
54
+    @author=Phyks
55
+    @date=08102015-2308
56
+    @title=Doing low cost telepresence (for under $200)
57
+    @tags=DIY
58
+-->
59
+
60
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
61
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
62
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png" /></p>
63
+<hr/>
64
+
65
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png" /></p>
66
+<h2>Basic idea</h2>
67
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
68
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
69
+<h2>Bill of Materials</h2>
70
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
71
+<p>Here is the complete bill of materials:</p>
72
+<ul>
73
+<li>A Raspberry Pi 2 - $30</li>
74
+<li>A PiCamera - $30</li>
75
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
76
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
77
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
78
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
79
+<li>1 wifi USB adapter - $5</li>
80
+<li>2 ball transfer unit</li>
81
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
82
+</ul>
83
+<p>Total: $140</p>
84
+<p>Notes: 
85
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
86
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
87
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
88
+<p>For the next version, we plan to add: 
89
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
90
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
91
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
92
+<p>Total with these parts: $228</p>
93
+<p>Notes: 
94
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
95
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
96
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
97
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
98
+<h2>Building the robot</h2>
99
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
100
+- <code>blueprints</code> which are the models of the robot.
101
+- <code>disty</code> which is the main server code on the Raspberry Pi.
102
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
103
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
104
+<p>You should 3D print: 
105
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
106
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
107
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
108
+need to print it once. 
109
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
110
+wheels. You need four of them.</p>
111
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures&nbsp;:) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
112
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg" /></p>
113
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg" /></p>
114
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg" /></p>
115
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
116
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png" /></p>
117
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
118
+<p>Here you are, you have a working Disty!</p>
119
+<h2>Running it</h2>
120
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
121
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
122
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
123
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
124
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
125
+<h2>Contributing!</h2>
126
+<p>All contributions and feedbacks are more than welcomed!</p>
127
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
128
+<pre><code>* --------------------------------------------------------------------------------
129
+* "THE BEER-WARE LICENSE" (Revision 42):
130
+* Phyks and Élie wrote this file. As long as you retain this notice you
131
+* can do whatever you want with this stuff (and you can also do whatever you want
132
+* with this stuff without retaining it, but that's not cool...). If we meet some
133
+* day, and you think this stuff is worth it, you can buy us a beer
134
+* in return.
135
+*                                                                       hackEns
136
+* ---------------------------------------------------------------------------------
137
+</code></pre>
138
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
139
+<h2>Some sources of inspiration and documentation</h2>
140
+<ul>
141
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
142
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
143
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
144
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
145
+</ul>
146
+		<footer><p class="date">Le 08/10/2015 à 23:08</p>
147
+		<p class="tags">Tags : <a href="//phyks.me/tags/DIY.html">DIY</a></p></footer>
148
+	</div>
149
+</article>
150
+<article>
151
+	<aside>
152
+		<p class="day">08</p>
153
+		<p class="month">Octobre</p>
154
+	</aside>
155
+	<div class="article">
52 156
 		<header><h1 class="article_title"><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></h1></header>
53 157
 		<!-- 
54 158
     @author=Phyks
@@ -866,73 +970,6 @@ grunt server:dist
866 970
 		<p class="tags">Tags : <a href="//phyks.me/tags/Arch.html">Arch</a>, <a href="//phyks.me/tags/Linux.html">Linux</a></p></footer>
867 971
 	</div>
868 972
 </article>
869
-<article>
870
-	<aside>
871
-		<p class="day">18</p>
872
-		<p class="month">Octobre</p>
873
-	</aside>
874
-	<div class="article">
875
-		<header><h1 class="article_title"><a href="//phyks.me/2014/10/dhcp_server.html">Utiliser son PC sous Arch pour connecter un Raspberry Pi à Internet</a></h1></header>
876
-		<!-- 
877
-    @author=Phyks
878
-    @date=18102014-2240
879
-    @title=Utiliser son PC sous Arch pour connecter un Raspberry Pi à Internet
880
-    @tags=Arch, Dev, Linux
881
--->
882
-
883
-<p>J'ai un Raspberry Pi et mon portable sous Arch Linux, et je me promène pas mal avec les deux. Mais je n'ai pas toujours de routeur à disposition pour brancher les deux sur le même réseau et travailler facilement. Il est très simple de mettre en place en 5 minutes une configuration me permettant de connecter le Raspberry Pi sur mon portable, et de partager la connexion Internet issue du wifi de mon PC avec le Raspberry Pi. Comme ça, plus de problèmes, je peux bosser sur le Raspberry Pi n'importe où.</p>
884
-<p>C'est parti&nbsp;!</p>
885
-<p><em>Note</em>&nbsp;: J'utilise cette configuration pour développer, et elle n'est donc pas forcément optimale et devrait sûrement être adaptée pour être utilisée en production.</p>
886
-<h2>Installation d'un serveur dhcp sur le portable</h2>
887
-<p>Commençons par installer un serveur dhcp sur le PC avec Arch, pour éviter de devoir saisir une adresse IP fixe sur le Raspberry Pi. Comme ça, on peut utiliser n'importe quelle image sans réfléchir, comme si on avait un routeur qui va bien.</p>
888
-<p>Le plus simple est de suivre <a href="https://wiki.archlinux.org/index.php/Dhcpd">cette page de la documentation</a>.</p>
889
-<ol>
890
-<li>On attribue une adresse IP fixe à l'interface ethernet (ici 192.168.192.1, attention à ce que ça ne rentre pas en conflit avec votre configuration réseau).</li>
891
-</ol>
892
-<pre><code>ip link set up dev enp4s0f2
893
-ip addr add 192.168.192.1/24 dev enp4s0f2
894
-</code></pre>
895
-
896
-<ol>
897
-<li>
898
-<p>Déplacer le fichier <code>/etc/dhcpd.conf</code> fourni par défaut vers <code>/etc/dhcpd.conf.example</code> pour pouvoir le modifier sereinement.</p>
899
-</li>
900
-<li>
901
-<p>Éditer le fichier <code>/etc/dhcpd.conf</code>. À titre indicatif, voici le mien&nbsp;:</p>
902
-</li>
903
-</ol>
904
-<pre><code>option domain-name-servers 8.8.8.8, 8.8.4.4;
905
-
906
-option subnet-mask 255.255.255.0;
907
-option routers 192.168.192.1;
908
-subnet 192.168.192.0 netmask 255.255.255.0 {
909
-    range 192.168.192.10 192.168.192.20;
910
-}
911
-</code></pre>
912
-
913
-<p>Je spécifie d'utiliser les serveurs DNS de Google (qui sont disponibles partout -si vous avez un serveur sur votre ordinateur, vous pouvez le mettre à la place), que le routeur est à l'adresse <code>192.168.192.1</code> et que j'attribue des adresses dans la gamme <code>192.168.192.10-192.168.192.20</code>.</p>
914
-<ol>
915
-<li>Vous pouvez lancer le service dhcpd avec <code>systemctl start dhcpd4</code>. Je préfèrais restreindre l'interface sur laquelle le serveur DHCP tournait, pour ne l'utiliser que sur l'interface ethernet. Pour se faire, il suffit de suivre les instructions « Listening on only one interface - Service file » de la <a href="https://wiki.archlinux.org/index.php/Dhcpd">documentation Arch Linux</a>.</li>
916
-</ol>
917
-<h2>Configuration du pare-feu et du noyau</h2>
918
-<p>Il faut ensuite configurer <code>iptables</code> et le noyau pour rediriger les paquets réseau vers le Raspberry Pi.</p>
919
-<p>Pour ce faire,</p>
920
-<pre><code>iptables -A FORWARD -o wlp3s0 -i enp4s0f2 -s 192.168.192.1/24 -m conntrack --ctstate NEW -j ACCEPT
921
-iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
922
-iptables -A POSTROUTING -t nat -j MASQUERADE
923
-</code></pre>
924
-
925
-<p>et on dit active le <em>forwarding</em> dans le noyau&nbsp;:</p>
926
-<pre><code>echo 1 | tee&nbsp;/proc/sys/net/ipv4/ip_forward
927
-</code></pre>
928
-
929
-<h2>Le script qui va bien</h2>
930
-<p>Une fois le serveur <code>dhcpd</code> configuré, <a href="https://snippet.phyks.me/?snippet=5442cd90a8204">ce script</a> permet de tout démarrer&nbsp;/ arrêter.</p>
931
-<p>Attention, le <em>flush</em> dans la fonction <code>stop</code> peut être trop brutal pour vous. </p>
932
-		<footer><p class="date">Le 18/10/2014 à 22:40</p>
933
-		<p class="tags">Tags : <a href="//phyks.me/tags/Arch.html">Arch</a>, <a href="//phyks.me/tags/Dev.html">Dev</a>, <a href="//phyks.me/tags/Linux.html">Linux</a></p></footer>
934
-	</div>
935
-</article>
936 973
 <p class="archives"><a href="//phyks.me/archives.html">Archives</a></p>            </div>
937 974
             <footer id="rss">
938 975
                 <p><a href="//phyks.me/rss.xml"><img src="//phyks.me/img/rss.png" alt="RSS"/></a></p>

+ 110
- 72
blog/rss.xml View File

@@ -7,7 +7,116 @@
7 7
 		<language>fr</language>
8 8
 		<copyright>CC BY</copyright>
9 9
 		<webMaster>webmaster@phyks.me (Phyks)</webMaster>
10
-		<lastBuildDate>Thu, 08 Oct 2015 20:16:44 -0000</lastBuildDate>
10
+		<lastBuildDate>Sun, 11 Oct 2015 20:17:37 -0000</lastBuildDate>
11
+		<item>
12
+			<title>Doing low cost telepresence (for under $200)</title>
13
+			<link>http://phyks.me/2015/10/low_cost_telepresence.html</link>
14
+			<guid isPermaLink="true">http://phyks.me/2015/10/low_cost_telepresence.html</guid>
15
+			<description>
16
+
17
+
18
+
19
+With a friend, we recently started a project of building a project of low cost telepresence robot (sorry, link in French only…</description>
20
+			<content:encoded><![CDATA[<div class="article">
21
+<header></header>
22
+<!-- 
23
+    @author=Phyks
24
+    @date=08102015-2308
25
+    @title=Doing low cost telepresence (for under $200)
26
+    @tags=DIY
27
+-->
28
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
29
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
30
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png"/></p>
31
+<hr/>
32
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png"/></p>
33
+<h2>Basic idea</h2>
34
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
35
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
36
+<h2>Bill of Materials</h2>
37
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
38
+<p>Here is the complete bill of materials:</p>
39
+<ul>
40
+<li>A Raspberry Pi 2 - $30</li>
41
+<li>A PiCamera - $30</li>
42
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
43
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
44
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
45
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
46
+<li>1 wifi USB adapter - $5</li>
47
+<li>2 ball transfer unit</li>
48
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
49
+</ul>
50
+<p>Total: $140</p>
51
+<p>Notes: 
52
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
53
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
54
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
55
+<p>For the next version, we plan to add: 
56
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
57
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
58
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
59
+<p>Total with these parts: $228</p>
60
+<p>Notes: 
61
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
62
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
63
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
64
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
65
+<h2>Building the robot</h2>
66
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
67
+- <code>blueprints</code> which are the models of the robot.
68
+- <code>disty</code> which is the main server code on the Raspberry Pi.
69
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
70
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
71
+<p>You should 3D print: 
72
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
73
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
74
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
75
+need to print it once. 
76
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
77
+wheels. You need four of them.</p>
78
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures :) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
79
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg"/></p>
80
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg"/></p>
81
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg"/></p>
82
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
83
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png"/></p>
84
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
85
+<p>Here you are, you have a working Disty!</p>
86
+<h2>Running it</h2>
87
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
88
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
89
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
90
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
91
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
92
+<h2>Contributing!</h2>
93
+<p>All contributions and feedbacks are more than welcomed!</p>
94
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
95
+<pre><code>* --------------------------------------------------------------------------------
96
+* "THE BEER-WARE LICENSE" (Revision 42):
97
+* Phyks and Élie wrote this file. As long as you retain this notice you
98
+* can do whatever you want with this stuff (and you can also do whatever you want
99
+* with this stuff without retaining it, but that's not cool...). If we meet some
100
+* day, and you think this stuff is worth it, you can buy us a beer
101
+* in return.
102
+*                                                                       hackEns
103
+* ---------------------------------------------------------------------------------
104
+</code></pre>
105
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
106
+<h2>Some sources of inspiration and documentation</h2>
107
+<ul>
108
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
109
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
110
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
111
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
112
+</ul>
113
+<footer>
114
+<p class="tags">Tags : <a href="http://phyks.me/tags/DIY.html">DIY</a></p></footer>
115
+</div>]]></content:encoded>
116
+			<pubDate>Thu, 08 Oct 2015 20:08:00 -0000</pubDate>
117
+			<category>DIY</category>
118
+			<author>webmaster@phyks.me (Phyks)</author>
119
+		</item>
11 120
 		<item>
12 121
 			<title>Working on the go in Paris</title>
13 122
 			<link>http://phyks.me/2015/10/working_in_paris.html</link>
@@ -943,76 +1052,5 @@ J'ai un PC fixe et un portable, et je cherchais un moyen de balancer le son de m
943 1052
 			<category>Linux</category>
944 1053
 			<author>webmaster@phyks.me (Phyks)</author>
945 1054
 		</item>
946
-		<item>
947
-			<title>Utiliser son PC sous Arch pour connecter un Raspberry Pi à Internet</title>
948
-			<link>http://phyks.me/2014/10/dhcp_server.html</link>
949
-			<guid isPermaLink="true">http://phyks.me/2014/10/dhcp_server.html</guid>
950
-			<description>
951
-
952
-
953
-
954
-J'ai un Raspberry Pi et mon portable sous Arch Linux, et je me promène pas mal avec les deux. Mais je n'ai pas toujours de routeur à disposition pour brancher les deux sur le même réseau et travailler facilemen…</description>
955
-			<content:encoded><![CDATA[<div class="article">
956
-<header></header>
957
-<!-- 
958
-    @author=Phyks
959
-    @date=18102014-2240
960
-    @title=Utiliser son PC sous Arch pour connecter un Raspberry Pi à Internet
961
-    @tags=Arch, Dev, Linux
962
--->
963
-<p>J'ai un Raspberry Pi et mon portable sous Arch Linux, et je me promène pas mal avec les deux. Mais je n'ai pas toujours de routeur à disposition pour brancher les deux sur le même réseau et travailler facilement. Il est très simple de mettre en place en 5 minutes une configuration me permettant de connecter le Raspberry Pi sur mon portable, et de partager la connexion Internet issue du wifi de mon PC avec le Raspberry Pi. Comme ça, plus de problèmes, je peux bosser sur le Raspberry Pi n'importe où.</p>
964
-<p>C'est parti !</p>
965
-<p><em>Note</em> : J'utilise cette configuration pour développer, et elle n'est donc pas forcément optimale et devrait sûrement être adaptée pour être utilisée en production.</p>
966
-<h2>Installation d'un serveur dhcp sur le portable</h2>
967
-<p>Commençons par installer un serveur dhcp sur le PC avec Arch, pour éviter de devoir saisir une adresse IP fixe sur le Raspberry Pi. Comme ça, on peut utiliser n'importe quelle image sans réfléchir, comme si on avait un routeur qui va bien.</p>
968
-<p>Le plus simple est de suivre <a href="https://wiki.archlinux.org/index.php/Dhcpd">cette page de la documentation</a>.</p>
969
-<ol>
970
-<li>On attribue une adresse IP fixe à l'interface ethernet (ici 192.168.192.1, attention à ce que ça ne rentre pas en conflit avec votre configuration réseau).</li>
971
-</ol>
972
-<pre><code>ip link set up dev enp4s0f2
973
-ip addr add 192.168.192.1/24 dev enp4s0f2
974
-</code></pre>
975
-<ol>
976
-<li>
977
-<p>Déplacer le fichier <code>/etc/dhcpd.conf</code> fourni par défaut vers <code>/etc/dhcpd.conf.example</code> pour pouvoir le modifier sereinement.</p>
978
-</li>
979
-<li>
980
-<p>Éditer le fichier <code>/etc/dhcpd.conf</code>. À titre indicatif, voici le mien :</p>
981
-</li>
982
-</ol>
983
-<pre><code>option domain-name-servers 8.8.8.8, 8.8.4.4;
984
-
985
-option subnet-mask 255.255.255.0;
986
-option routers 192.168.192.1;
987
-subnet 192.168.192.0 netmask 255.255.255.0 {
988
-    range 192.168.192.10 192.168.192.20;
989
-}
990
-</code></pre>
991
-<p>Je spécifie d'utiliser les serveurs DNS de Google (qui sont disponibles partout -si vous avez un serveur sur votre ordinateur, vous pouvez le mettre à la place), que le routeur est à l'adresse <code>192.168.192.1</code> et que j'attribue des adresses dans la gamme <code>192.168.192.10-192.168.192.20</code>.</p>
992
-<ol>
993
-<li>Vous pouvez lancer le service dhcpd avec <code>systemctl start dhcpd4</code>. Je préfèrais restreindre l'interface sur laquelle le serveur DHCP tournait, pour ne l'utiliser que sur l'interface ethernet. Pour se faire, il suffit de suivre les instructions « Listening on only one interface - Service file » de la <a href="https://wiki.archlinux.org/index.php/Dhcpd">documentation Arch Linux</a>.</li>
994
-</ol>
995
-<h2>Configuration du pare-feu et du noyau</h2>
996
-<p>Il faut ensuite configurer <code>iptables</code> et le noyau pour rediriger les paquets réseau vers le Raspberry Pi.</p>
997
-<p>Pour ce faire,</p>
998
-<pre><code>iptables -A FORWARD -o wlp3s0 -i enp4s0f2 -s 192.168.192.1/24 -m conntrack --ctstate NEW -j ACCEPT
999
-iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
1000
-iptables -A POSTROUTING -t nat -j MASQUERADE
1001
-</code></pre>
1002
-<p>et on dit active le <em>forwarding</em> dans le noyau :</p>
1003
-<pre><code>echo 1 | tee /proc/sys/net/ipv4/ip_forward
1004
-</code></pre>
1005
-<h2>Le script qui va bien</h2>
1006
-<p>Une fois le serveur <code>dhcpd</code> configuré, <a href="https://snippet.phyks.me/?snippet=5442cd90a8204">ce script</a> permet de tout démarrer / arrêter.</p>
1007
-<p>Attention, le <em>flush</em> dans la fonction <code>stop</code> peut être trop brutal pour vous. </p>
1008
-<footer>
1009
-<p class="tags">Tags : <a href="http://phyks.me/tags/Arch.html">Arch</a>, <a href="http://phyks.me/tags/Dev.html">Dev</a>, <a href="http://phyks.me/tags/Linux.html">Linux</a></p></footer>
1010
-</div>]]></content:encoded>
1011
-			<pubDate>Sat, 18 Oct 2014 19:40:00 -0000</pubDate>
1012
-			<category>Arch</category>
1013
-			<category>Dev</category>
1014
-			<category>Linux</category>
1015
-			<author>webmaster@phyks.me (Phyks)</author>
1016
-		</item>
1017 1055
 	</channel>
1018 1056
 </rss>

+ 2
- 2
blog/tags/Arch.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Autohébergement.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/CoffeeShops.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 106
- 2
blog/tags/DIY.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>
@@ -45,6 +45,110 @@
45 45
                 <div id="articles">
46 46
 <article>
47 47
 	<aside>
48
+		<p class="day">08</p>
49
+		<p class="month">Octobre</p>
50
+	</aside>
51
+	<div class="article">
52
+		<header><h1 class="article_title"><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></h1></header>
53
+		<!-- 
54
+    @author=Phyks
55
+    @date=08102015-2308
56
+    @title=Doing low cost telepresence (for under $200)
57
+    @tags=DIY
58
+-->
59
+
60
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
61
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
62
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png" /></p>
63
+<hr/>
64
+
65
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png" /></p>
66
+<h2>Basic idea</h2>
67
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
68
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
69
+<h2>Bill of Materials</h2>
70
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
71
+<p>Here is the complete bill of materials:</p>
72
+<ul>
73
+<li>A Raspberry Pi 2 - $30</li>
74
+<li>A PiCamera - $30</li>
75
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
76
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
77
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
78
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
79
+<li>1 wifi USB adapter - $5</li>
80
+<li>2 ball transfer unit</li>
81
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
82
+</ul>
83
+<p>Total: $140</p>
84
+<p>Notes: 
85
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
86
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
87
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
88
+<p>For the next version, we plan to add: 
89
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
90
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
91
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
92
+<p>Total with these parts: $228</p>
93
+<p>Notes: 
94
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
95
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
96
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
97
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
98
+<h2>Building the robot</h2>
99
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
100
+- <code>blueprints</code> which are the models of the robot.
101
+- <code>disty</code> which is the main server code on the Raspberry Pi.
102
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
103
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
104
+<p>You should 3D print: 
105
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
106
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
107
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
108
+need to print it once. 
109
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
110
+wheels. You need four of them.</p>
111
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures&nbsp;:) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
112
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg" /></p>
113
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg" /></p>
114
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg" /></p>
115
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
116
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png" /></p>
117
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
118
+<p>Here you are, you have a working Disty!</p>
119
+<h2>Running it</h2>
120
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
121
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
122
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
123
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
124
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
125
+<h2>Contributing!</h2>
126
+<p>All contributions and feedbacks are more than welcomed!</p>
127
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
128
+<pre><code>* --------------------------------------------------------------------------------
129
+* "THE BEER-WARE LICENSE" (Revision 42):
130
+* Phyks and Élie wrote this file. As long as you retain this notice you
131
+* can do whatever you want with this stuff (and you can also do whatever you want
132
+* with this stuff without retaining it, but that's not cool...). If we meet some
133
+* day, and you think this stuff is worth it, you can buy us a beer
134
+* in return.
135
+*                                                                       hackEns
136
+* ---------------------------------------------------------------------------------
137
+</code></pre>
138
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
139
+<h2>Some sources of inspiration and documentation</h2>
140
+<ul>
141
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
142
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
143
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
144
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
145
+</ul>
146
+		<footer><p class="date">Le 08/10/2015 à 23:08</p>
147
+		<p class="tags">Tags : <a href="//phyks.me/tags/DIY.html">DIY</a></p></footer>
148
+	</div>
149
+</article>
150
+<article>
151
+	<aside>
48 152
 		<p class="day">02</p>
49 153
 		<p class="month">Juillet</p>
50 154
 	</aside>

+ 2
- 2
blog/tags/Dev.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Development.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Devops.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Game Engine.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/GeoData.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/JavaScript.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Known.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Libre.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Linux.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Mobile.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Phyks.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/RaspberryPi.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Selfhost.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Smartphone.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/TupperVim.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Vim.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Web.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Weechat.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/aNimble.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/workstation.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 2
- 2
blog/tags/Électronique.html View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 104
- 0
gen/2015/10/low_cost_telepresence.gen View File

@@ -0,0 +1,104 @@
1
+<article>
2
+	<aside>
3
+		<p class="day">08</p>
4
+		<p class="month">Octobre</p>
5
+	</aside>
6
+	<div class="article">
7
+		<header><h1 class="article_title"><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></h1></header>
8
+		<!-- 
9
+    @author=Phyks
10
+    @date=08102015-2308
11
+    @title=Doing low cost telepresence (for under $200)
12
+    @tags=DIY
13
+-->
14
+
15
+<p>With <a href="http://exppad.com/">a friend</a>, we recently started a project of building a project of <a href="http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence">low cost telepresence robot</a> (sorry, link in French only).</p>
16
+<p>The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at <a href="http://git.eleves.ens.fr/hackens/Disty">our git repo</a>.</p>
17
+<p><img alt="Screen capture" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png" /></p>
18
+<hr/>
19
+
20
+<p><img alt="3D model" src="https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png" /></p>
21
+<h2>Basic idea</h2>
22
+<p>When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.</p>
23
+<p>The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions <a href="http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg">exist</a> but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!</p>
24
+<h2>Bill of Materials</h2>
25
+<p>The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.</p>
26
+<p>Here is the complete bill of materials:</p>
27
+<ul>
28
+<li>A Raspberry Pi 2 - $30</li>
29
+<li>A PiCamera - $30</li>
30
+<li>2 <a href="http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&amp;qid=1444342471&amp;ref_=sr_1_1&amp;sr=8-1">external USB battery packs</a> - 2 * $15.99 ≈ $30</li>
31
+<li>2 <a href="https://www.adafruit.com/products/154">continuous rotation servo</a> for the wheels - 2 * $11.95 = $25</li>
32
+<li>2 <a href="https://www.adafruit.com/products/167">servo wheels</a> - 2 * $4 = $8</li>
33
+<li>1 <a href="https://www.adafruit.com/products/155">standard servo</a> for the camera control - $12</li>
34
+<li>1 wifi USB adapter - $5</li>
35
+<li>2 ball transfer unit</li>
36
+<li>Some plexiglas and ABS for laser cutting and 3D printing</li>
37
+</ul>
38
+<p>Total: $140</p>
39
+<p>Notes: 
40
+<em> We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
41
+</em> You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
42
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).</p>
43
+<p>For the next version, we plan to add: 
44
+<em> 1 <a href="https://www.adafruit.com/products/2232">small 5" HDMI screen</a> - $59.95
45
+</em> 1 <a href="http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&amp;qid=1444343334&amp;ref_=sr_1_1&amp;sr=8-1">bluetooth speaker with integrated mic</a> - $14
46
+* 1 <a href="http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070">usb bluetooth adapter</a> for the speakers - $14</p>
47
+<p>Total with these parts: $228</p>
48
+<p>Notes: 
49
+<em> We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
50
+</em> We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
51
+<em> The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
52
+</em> The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.</p>
53
+<h2>Building the robot</h2>
54
+<p>All the necessary stuff is in our <a href="https://git.eleves.ens.fr/hackens/Disty">git repo</a> (or its <a href="https://github.com/hackEns/Disty">github mirror</a>, both should be kept in sync). The repo contains three main directories: 
55
+- <code>blueprints</code> which are the models of the robot.
56
+- <code>disty</code> which is the main server code on the Raspberry Pi.
57
+- <code>webview</code> which is the web controller served by the Raspberry Pi.</p>
58
+<p>First of all, you should cut the parts and print the 3D parts in the <code>blueprints</code> dir. <code>eps</code> files in this directory are ready to cut files whereas <code>svg</code> files should be the same ones in easily editable format. You should laser cut the top and bottom files. <code>picam_case_*</code> files are the camera case we used,</p>
59
+<p>You should 3D print: 
60
+<em> the <code>picam_case_*</code> files for the camera case (licensed under CC BY SA).
61
+</em> <code>teleprez.blend</code> is the complete CAO model of the robot in Blender.
62
+<em> <code>camera_servo_holder.stl</code> is the plastic part to hold the camera servo. You
63
+need to print it once. 
64
+</em> <code>wheel_servo_holder.stl</code> is the plastic part to hold the servos for the
65
+wheels. You need four of them.</p>
66
+<p>Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures&nbsp;:) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.</p>
67
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty1.jpg" /></p>
68
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty2.jpg" /></p>
69
+<p><img alt="Disty" src="http://pub.hackens.org/images/disty/disty3.jpg" /></p>
70
+<p>GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.</p>
71
+<p><img alt="GPIO pinout" src="https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png" /></p>
72
+<p>For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.</p>
73
+<p>Here you are, you have a working Disty!</p>
74
+<h2>Running it</h2>
75
+<p>This may not be super user-friendly at the moment, we hope to improve this in the future.</p>
76
+<p>Download any Linux image you want for your Raspberry Pi. Install <code>uv4l</code> and the <code>uv4l-webrtc</code> component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.</p>
77
+<p>Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main <code>disty</code> code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need <code>cmake</code> and a system-wide install of <code>wiringpi</code> to build the code.</p>
78
+<p>You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), <code>./disty</code>, and then start the webview, <code>./run.py</code> as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.</p>
79
+<p>It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.</p>
80
+<h2>Contributing!</h2>
81
+<p>All contributions and feedbacks are more than welcomed!</p>
82
+<p>All the source code we wrote is under a beer-ware license, under otherwise specified.</p>
83
+<pre><code>* --------------------------------------------------------------------------------
84
+* "THE BEER-WARE LICENSE" (Revision 42):
85
+* Phyks and Élie wrote this file. As long as you retain this notice you
86
+* can do whatever you want with this stuff (and you can also do whatever you want
87
+* with this stuff without retaining it, but that's not cool...). If we meet some
88
+* day, and you think this stuff is worth it, you can buy us a beer
89
+* in return.
90
+*                                                                       hackEns
91
+* ---------------------------------------------------------------------------------
92
+</code></pre>
93
+<p>If you need a more legally valid license, you can consider Disty to be under an MIT license.</p>
94
+<h2>Some sources of inspiration and documentation</h2>
95
+<ul>
96
+<li>http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!</li>
97
+<li>http://josh.com/notes/bitlybot/, a really basic telepresence robot</li>
98
+<li>https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi</li>
99
+<li>http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/</li>
100
+</ul>
101
+		<footer><p class="date">Le 08/10/2015 à 23:08</p>
102
+		<p class="tags">Tags : <a href="//phyks.me/tags/DIY.html">DIY</a></p></footer>
103
+	</div>
104
+</article>

+ 2
- 2
gen/header.gen View File

@@ -16,12 +16,12 @@
16 16
 
17 17
                     <h2>Catégories</h2>
18 18
                         <nav id="sidebar-tags">
19
-                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
19
+                            <div class="tag"><a href="//phyks.me/tags/aNimble.html">/aNimble (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Arch.html">/Arch (48)</a> </div><div class="tag"><a href="//phyks.me/tags/Autohébergement.html">/Autohébergement (48)</a> </div><div class="tag"><a href="//phyks.me/tags/CoffeeShops.html">/CoffeeShops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Development.html">/Development (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Devops.html">/Devops (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Dev.html">/Dev (128)</a> </div><div class="tag"><a href="//phyks.me/tags/DIY.html">/DIY (33)</a> </div><div class="tag"><a href="//phyks.me/tags/Électronique.html">/Électronique (32)</a> </div><div class="tag"><a href="//phyks.me/tags/Game Engine.html">/Game Engine (1)</a> </div><div class="tag"><a href="//phyks.me/tags/GeoData.html">/GeoData (1)</a> </div><div class="tag"><a href="//phyks.me/tags/JavaScript.html">/JavaScript (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Known.html">/Known (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Libre.html">/Libre (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Linux.html">/Linux (96)</a> </div><div class="tag"><a href="//phyks.me/tags/Mobile.html">/Mobile (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Phyks.html">/Phyks (3)</a> </div><div class="tag"><a href="//phyks.me/tags/RaspberryPi.html">/RaspberryPi (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Selfhost.html">/Selfhost (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Smartphone.html">/Smartphone (32)</a> </div><div class="tag"><a href="//phyks.me/tags/TupperVim.html">/TupperVim (1)</a> </div><div class="tag"><a href="//phyks.me/tags/Vim.html">/Vim (17)</a> </div><div class="tag"><a href="//phyks.me/tags/Web.html">/Web (112)</a> </div><div class="tag"><a href="//phyks.me/tags/Weechat.html">/Weechat (32)</a> </div><div class="tag"><a href="//phyks.me/tags/workstation.html">/workstation (1)</a> </div>
20 20
                         </nav>
21 21
 
22 22
                     <h2>Derniers articles</h2>
23 23
                         <ul id="sidebar-articles">
24
-                            <li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/2015/03/cross_platform_app_development.html">Quick comparisons of solutions for 3D cross-platform (mobile) development</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
24
+                            <li><a href="//phyks.me/2015/10/low_cost_telepresence.html">Doing low cost telepresence (for under $200)</a></li><li><a href="//phyks.me/2015/10/working_in_paris.html">Working on the go in Paris</a></li><li><a href="//phyks.me/2015/05/servos_rpi.html">Controlling servomotors on a Raspberry Pi</a></li><li><a href="//phyks.me/2015/04/partial_js.html">Blocking JavaScript on a per API basis</a></li><li><a href="//phyks.me/2015/04/devops_for_workstations.html">Devops tools for workstations</a></li><li><a href="//phyks.me/archives.html">Archives</a></li>
25 25
                         </ul>
26 26
 
27 27
                     <h2>Liens</h2>

+ 1
- 0
gen/tags/DIY.tmp View File

@@ -30,3 +30,4 @@
30 30
 2013/12/bootloader_atmega.html
31 31
 2014/07/astuces_arduino.html
32 32
 2013/12/bootloader_atmega.html
33
+2015/10/low_cost_telepresence.md

+ 137
- 0
raw/2015/10/low_cost_telepresence.md View File

@@ -0,0 +1,137 @@
1
+<!--
2
+	@author=Phyks
3
+	@date=08102015-2308
4
+	@title=Doing low cost telepresence (for under $200)
5
+	@tags=DIY
6
+-->
7
+
8
+With [a friend](http://exppad.com/), we recently started a project of building a project of [low cost telepresence robot](http://known.hackens.org/2015/nouveau-projet-disty-robot-de-tlprsence) (sorry, link in French only).
9
+
10
+The goal is to build a robot that could be used to move around a room remotely, and stream audio and video in both directions. Our target budget is $200. We got a first working version (although it does not yet stream audio), and it is time for some explanations on the setup and how to build your own =) All the instructions, code and necessary stuff can be found at [our git repo](http://git.eleves.ens.fr/hackens/Disty).
11
+
12
+
13
+![Screen capture](https://raw.githubusercontent.com/hackEns/Disty/master/doc/screenshot.png)
14
+
15
+<hr/>
16
+
17
+![3D model](https://raw.githubusercontent.com/hackEns/Disty/master/doc/3Dmodel.png)
18
+
19
+
20
+## Basic idea
21
+
22
+When taking part in a group meeting remotely, using some videoconference solution, it is often frustrating not being able to move around the room on the other side. This prevents us from having parallel discussions, and if the remote microphone is poor quality, we often do not hear clearly everybody speaking. Plus, someone speaking may be hidden by another speaker and many other such problems happen.
23
+
24
+The goal was then to find a solution to do videoconferences (streaming both audio and video in both directions) and be able to move on the other side, to be able to see everyone and to come closer to the current speaker. Commercial solutions [exist](http://www.wired.com/images_blogs/business/2014/03/snowden_ted.jpg) but they are really expensive (a few thousands dollars). We wanted to have the same basic features for $200, and it seems we almost achieved it!
25
+
26
+
27
+## Bill of Materials
28
+
29
+The whole system is built around a Raspberry Pi and a PiCamera, which offer decent performances at a very fair price. The rest is really basic DIY stuff.
30
+
31
+Here is the complete bill of materials:
32
+
33
+* A Raspberry Pi 2 - $30
34
+* A PiCamera - $30
35
+* 2 [external USB battery packs](http://www.amazon.com/gp/product/B00P7N0320?keywords=Anker%20Astro%20E1%205200mAh&qid=1444342471&ref_=sr_1_1&sr=8-1) - 2 * $15.99 ≈ $30
36
+* 2 [continuous rotation servo](https://www.adafruit.com/products/154) for the wheels - 2 * $11.95 = $25
37
+* 2 [servo wheels](https://www.adafruit.com/products/167) - 2 * $4 = $8
38
+* 1 [standard servo](https://www.adafruit.com/products/155) for the camera control - $12
39
+* 1 wifi USB adapter - $5
40
+* 2 ball transfer unit
41
+* Some plexiglas and ABS for laser cutting and 3D printing
42
+
43
+Total: $140
44
+
45
+Notes:
46
+* We had to use a Raspberry Pi model 2 for the nice performance boost on this model. Even more important is the increased number of GPIOs on this model, with 2 usable hardware PWMs (provided that you don't use the integrated sound card output). This is useful to control the two wheels with hardware PWM and have a precise control of the move. The camera holder can be safely controlled with a software PWM and we did not experience any troubles doing so.
47
+* You can easily replace those parts by equivalent ones as long as you keep in mind that the battery pack should be able to provide enough current for the raspberry pi and the servos. We used standard USB battery packs for simplicity and user friendliness. However, they are more expensive than standard modelling lithium batteries and provide less current in general.
48
+* We had to use two battery packs. Indeed, the peak current due to the servos starting was too excessive for the battery pack and it was crashing the raspberry pi. Using two separate alimentation lines for the raspberry pi and the servos, we no longer have this problem and this solution is easier than tweaking the alimentation line until the raspberry pi stops freezing (which it may never do).
49
+
50
+
51
+For the next version, we plan to add:
52
+* 1 [small 5" HDMI screen](https://www.adafruit.com/products/2232) - $59.95
53
+* 1 [bluetooth speaker with integrated mic](http://www.amazon.com/gp/product/B00YTXPY6Y?keywords=taotronics%20speaker&qid=1444343334&ref_=sr_1_1&sr=8-1) - $14
54
+* 1 [usb bluetooth adapter](http://www.amazon.com/ASUS-USB-Adapter-Bluetooth-USB-BT400/dp/B00DJ83070) for the speakers - $14
55
+
56
+Total with these parts: $228
57
+
58
+Notes:
59
+* We used an HDMI screen as the official RaspberryPi screen uses most of the GPIOs pins, which we need.
60
+* We decided to use bluetooth speakers as the integrated sound card was not usable as we were using the two hardware PWM lines for motion. This way, we have a speaker with a built-in microphone, which smaller than having the two of them separately.
61
+* The USB bluetooth adapter is impressively expensive, but it is the only one we found at the moment which we were sure would be compatible with Linux without any problems. Plus others adapters we found were not much cheaper.
62
+* The total budget is $223 without shipping. It is a bit over the initial budget goal, but we can easily lower it to $200. Indeed, we did not especially look for the cheaper parts. In particular, we bought the servos from Adafruit and I think we can find some servos for less (especially the camera holder servo, which can be a micro servo at $5 and should be enough). The bluetooth adapter is quite expensive as well and we could find a cheaper one I think. Budget shrinkage will be our next goal, once we have everything working.
63
+
64
+
65
+## Building the robot
66
+
67
+All the necessary stuff is in our [git repo](https://git.eleves.ens.fr/hackens/Disty) (or its [github mirror](https://github.com/hackEns/Disty), both should be kept in sync). The repo contains three main directories:
68
+- `blueprints` which are the models of the robot.
69
+- `disty` which is the main server code on the Raspberry Pi.
70
+- `webview` which is the web controller served by the Raspberry Pi.
71
+
72
+First of all, you should cut the parts and print the 3D parts in the `blueprints` dir. `eps` files in this directory are ready to cut files whereas `svg` files should be the same ones in easily editable format. You should laser cut the top and bottom files. `picam_case_*` files are the camera case we used,
73
+
74
+You should 3D print:
75
+* the `picam_case_*` files for the camera case (licensed under CC BY SA).
76
+* `teleprez.blend` is the complete CAO model of the robot in Blender.
77
+* `camera_servo_holder.stl` is the plastic part to hold the camera servo. You
78
+need to print it once.
79
+* `wheel_servo_holder.stl` is the plastic part to hold the servos for the
80
+wheels. You need four of them.
81
+
82
+Assembling your Disty robot should be straightforward and easy to do if you look at the following pictures :) Use two ball transfer units to stabilize the robot and lock them with some rubber band (or anything better than that). Adjust tightly the height of the wheels so that the two wheels and the ball transfer units touch the ground.
83
+
84
+![Disty](http://pub.hackens.org/images/disty/disty1.jpg)
85
+
86
+![Disty](http://pub.hackens.org/images/disty/disty2.jpg)
87
+
88
+![Disty](http://pub.hackens.org/images/disty/disty3.jpg)
89
+
90
+GPIO pinout for the connection can be found at https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png.
91
+
92
+![GPIO pinout](https://raw.githubusercontent.com/hackEns/Disty/master/blueprints/gpio.png)
93
+
94
+
95
+For the electrical wiring, we used a standard USB-Micro USB cable to power the Raspberry Pi from one battery (located below the robot, to add weight on the ball transfer units and ensure contact is made with the surface). On the other battery, we just cut a USB - Micro USB cable to plug into it and connect the servos directly through a piece of breadboard to the battery. We had to use two batteries to prevent the draw from the servos to reboot the Raspberry Pi.
96
+
97
+Here you are, you have a working Disty!
98
+
99
+
100
+## Running it
101
+
102
+This may not be super user-friendly at the moment, we hope to improve this in the future.
103
+
104
+Download any Linux image you want for your Raspberry Pi. Install `uv4l` and the `uv4l-webrtc` component. Enable the camera and ensure you can take pictures from the command line (there is a lot of doc) about this on the web.
105
+
106
+Then, clone the Git repo somewhere on your Raspberry Pi. You should build the main `disty` code (which is the serverside code). This code will handle the control of the servos (emit PWMs etc) and listen on UDP port 4242 for instructions sent from the webview. Instructions to build it are located in the associated README. You will need `cmake` and a system-wide install of `wiringpi` to build the code.
107
+
108
+You can then start the robot. Start by launching the disty program (as root as you need access to the GPIOs), `./disty`, and then start the webview, `./run.py` as root also as it serves the webview on port 80, which is below 1024 and owned by root. If you have ZeroConf on your Raspberry Pi (or a decent router), you can go to http://disty (or whatever hostname is set on your Raspberry Pi) to get the webview. Else, use the IP address instead. Webview usage should be almost straightforward.
109
+
110
+It should work out of the box on your local LAN. If you are behind a NAT, it will need some black magic (which is implemented but may not be sufficient) to connect the remote user and Disty camera. In any case, you need to be able to access the webview (disty port 80) from the remote side.
111
+
112
+
113
+## Contributing!
114
+
115
+All contributions and feedbacks are more than welcomed!
116
+
117
+All the source code we wrote is under a beer-ware license, under otherwise specified.
118
+
119
+    * --------------------------------------------------------------------------------
120
+    * "THE BEER-WARE LICENSE" (Revision 42):
121
+    * Phyks and Élie wrote this file. As long as you retain this notice you
122
+    * can do whatever you want with this stuff (and you can also do whatever you want
123
+    * with this stuff without retaining it, but that's not cool...). If we meet some
124
+    * day, and you think this stuff is worth it, you can buy us a beer
125
+    * in return.
126
+    *                                                                       hackEns
127
+    * ---------------------------------------------------------------------------------
128
+
129
+If you need a more legally valid license, you can consider Disty to be under an MIT license.
130
+
131
+
132
+## Some sources of inspiration and documentation
133
+
134
+* http://www.pcmag.com/article2/0,2817,2427997,00.asp, cool but really expensive!
135
+* http://josh.com/notes/bitlybot/, a really basic telepresence robot
136
+* https://known.phyks.me/2015/controlling-servomotors-on-a-raspberry-pi, for the problems we encountered with the servos on the Raspberry Pi
137
+* http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/