b725fb30bd24f4678edc02d372c3f45fa49dd7e6
[rmll_2011.git] / slides.html
1 <!DOCTYPE html>
2
3 <meta charset="utf-8">
4 <title>lacie-nas.org RMLL 2011</title>
5
6 <!-- Your Slides -->
7 <!-- One section is one slide -->
8
9 <section class=title>
10     <!-- This is the first slide -->
11     <h1>lacie-nas.org</h1>
12     <footer>by Simon and Thomas <a href="http://lacie-nas.org">@lacie-nas.org</a></footer>
13 </section>
14
15 <section class=chapter>
16     <h1>What is a NAS ?</h1>
17 </section>
18 <section>
19     <h1>What is a NAS ?</h1>
20     <h2>A kind of desktop</h2>
21     <ul>
22         <li>without monitor
23         <li>without keyboard
24         <li>like a server in a tiny package
25     </ul>
26 </section>
27 <section>
28     <h1>What is a NAS ?</h1>
29     <h2>A remote storage</h2>
30     <ul>
31         <li>available through network protocols
32             <p>(NFS, Samba, Netatalk, DLNA, etc)
33         <li>additional services more or less useful
34             <p>(BitTorrent, web hosting, etc)
35     </ul>
36 </section>
37 <section>
38     <h1>What is a NAS ?</h1>
39     <h2>Cool devices for hardware user interface</h2>
40     <h2>(instead of keyboard / monitor)</h2>
41     <ul>
42         <li>buttons
43         <li>LEDs
44         <li>LCD
45     </ul>
46 </section>
47 <section>
48     <h1>What is a NAS ?</h1>
49     <h2>Various architectures</h2>
50     <ul>
51         <li>ARM
52         <li>MIPS
53         <li>PPC
54         <li>x86 more recently
55     </ul>
56 </section>
57 <section>
58     <h1>What is a NAS ?</h1>
59     <h2>Low cost</h2>
60     <ul>
61         <li>cheap hardware
62         <li>low power consumption
63         <li>firmwares are largely based on free software
64     </ul>
65 </section>
66
67 <section class=chapter>
68     <h1>Project Overview</h1>
69 </section>
70
71 <section>
72     <h1>Project Overview</h1>
73     <h2>Origins</h2>
74     <ul>
75         <li>lacie.com: non free hardware
76         <li>until 2009, no mainline support
77         <li>except for EDmini v2 (2008 Linux patch)
78             <p>by hobbyists: Albert Aribaud and Christopher Moore
79             <p>signed off by Marvell guys: Lennert Buytenhek and Nicolas Pitre
80         <li>discussions with patch authors
81         <li>a framework was needed...
82     </ul>
83     <note>very limited sponsoring from lacie.com</note>
84 </section>
85
86 <section>
87     <h1>Project Overview</h1>
88     <h2>What is not lacie-nas.org ?</h2>
89     <ul>
90         <li>after sales service for LaCie
91         <li>hack host for LaCie firmwares
92         <p>Some other projects (like nas-central.org) already does it well.
93     </ul>
94     <note>Often people comes and ask how to hack a LaCie NAS</note>
95 </section>
96
97 <section class=chapter>
98     <h1>Projects and targets</h1>
99 </section>
100
101 <section>
102     <h1>Projects and targets</h1>
103     <h2>Open/unlock hardware</h2>
104     <p>Provide boards specifications and pinout (JTAG, serial, GPIOS, etc...)</p>
105 </section>
106
107 <section>
108     <h1>Projects and targets</h1>
109     <h2>Provide mainline support</h2>
110     <ul>
111         <li>openocd
112         <li>U-Boot
113         <li>Linux
114     </ul>
115 </section>
116
117 <section>
118     <h1>Projects and targets</h1>
119     <h2>Provide NAS modules</h2>
120     <p>Develop and package <a>generic</a> NAS modules</p>
121     <ul>
122         <li>NAS system tools
123         <p>handle GPIO buttons, GPIO LEDs, disk by slot naming, ...
124         <p>TODO: disk PM, fan, hardware sensors, ...
125         <li>TODO: configuration manager
126         <note>provide a GNU/Debian package</note>
127     </ul>
128 </section>
129
130 <section>
131     <h1>Projects and targets</h1>
132     <h2>Provide development/hacking tools</h2>
133     <ul>
134         <li><a href="http://lacie-nas.org/doku.php?id=clunc">clunc</a> (Client for LaCie U-Boot NetConsole)
135         <li><a href="http://git.lacie-nas.org/?p=miniroot.git;a=summary">miniroot</a>
136     </ul>
137 </section>
138
139 <section>
140     <h1>Projects and targets</h1>
141     <h2>Provide development services</h2>
142     <ul>
143         <li><a href="http://lacie-nas.org">wiki</a>
144         <li><a href="http://git.lacie-nas.org">git repositories</a>
145         <li><a href="http://sequanux.org/cgi-bin/mailman/listinfo/lacie-nas">Mailing List</a>
146         <li>IRC channel <a href="irc://irc.freenode.net/lacie-nas">#lacie-nas</a> @freenode.net
147         <li><a href="ftp://lacie-nas.org/">ftp</a>
148     </ul>
149 </section>
150
151 <section>
152     <h1>Projects and targets</h1>
153     <h2>Roadmap</h2>
154     <p>No roadmap, no deadlines, but tasks and priorities
155     <ul>
156         <li>complete low-level support
157         <li>installer for GNU/Debian
158         <p>network and USB
159         <li>more NAS packages
160         <li>more documents (wiki)
161         <p>increase the knowledge database
162     </ul>
163 </section>
164
165 <section class=chapter>
166     <h1>Free a NS2 demo !</h1>
167 </section>
168
169 <section>
170     <h1>Free a NS2 demo !</h1>
171     <h2>Take board control with clunc</h2>
172 </section>
173
174 <section>
175     <h1>Free a NS2 demo !</h1>
176     <h2>Install U-boot mainline</h2>
177     <p>LaCie U-Boot stock limitations (no saveenv)
178 </section>
179
180 <note>
181 Linux mainline submission
182   [ Free software and enterprise ]
183 </note>
184
185 <section>
186     <h1>Free a NS2 demo !</h1>
187     <h2>Startup an installation kernel+initramfs</h2>
188 </section>
189
190 <section>
191     <h1>Free a NS2 demo !</h1>
192     <h2>Install GNU/Debian ARM</h2>
193 </section>
194
195 <section>
196     <h1>Free a NS2 demo !</h1>
197     <h2>Use SSH and connect to the NS2 :)</h2>
198 </section>
199
200 <section class=chapter>
201     <h1>Perspectives</h1>
202 </section>
203
204 <section>
205     <h1>Perspectives</h1>
206     <h2>Network installation</h2>
207 </section>
208
209 <section>
210     <h1>Perspectives</h1>
211     <h2>Device Tree early adopter</h2>
212 </section>
213
214 <section>
215     <h1>Perspectives</h1>
216     <h2>Free distribution for NASes</h2>
217 <note>
218 - why Debian ?
219 - openwrt ?
220 - two ways: miniroot and rootfs copy or Debian way (Luc)
221 </note>
222 </section>
223
224 <section class=chapter>
225     <h1>Questions ?</h1>
226 </section>
227
228 <section class=chapter>
229     <h1>Thanks</h1>
230 </section>
231
232 <!-- Your Style -->
233 <!-- Define the style of you presentation -->
234
235 <!-- Maybe a font from http://www.google.com/webfonts ? -->
236 <!-- link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet'-->
237 <style>
238   html { background-color: black; }
239   a { color: #FF0066; } a:hover {text-decoration: underline;}
240   footer { position: absolute; bottom: 50px; right: 50px; }
241   strong {color: #FF0066}
242   body {
243       font-family: 'Oswald', arial, serif;
244       background-color: white;
245       color: white;
246       font-size: 2em;
247       background: #1C1C1C;
248       background-image: -moz-radial-gradient(center 45deg, #333 0%, #1C1C1C 50%);
249       background-image: -moz-radial-gradient(center 45deg, #333 0%, #1C1C1C 50%);
250   }
251
252   note { display: none; }
253
254   /* Transition effect */
255   section {
256       -moz-transition: left 400ms linear 0s;
257       -webkit-transition: left 400ms linear 0s;
258       -o-transition: left 400ms linear 0s;
259       -ms-transition: left 400ms linear 0s;
260       transition: left 400ms linear 0s;
261   }
262   section { left: -150%; }
263   section[aria-selected] { left: 0; }
264   section[aria-selected] ~ section { left: +150% }
265
266   .title { background-color: black; }
267   .title h1 {
268       vertical-align: middle; margin: 0; text-align: center; display: block;
269       line-height: 400px;
270       font-size: 70px;
271   }
272
273   .chapter { background-color: black;}
274   .chapter h1 {
275       font-size: 50px;
276       line-height: 600px;
277       vertical-align: middle; margin: 0; text-align: center; display: block
278   }
279
280   h1 {
281       margin: 10px;
282       text-align: left;
283       font-size: 25px;
284       text-shadow: 0px -1px 0px #000;
285   }
286   h2 {
287       color: #FAE50B;
288       margin: 70px 0 0 0;
289       font-size: 40px;
290       text-align: center;
291   }
292   ul {
293       margin-top: 70px;
294       font-size: 35px;
295       text-align: left;
296       border-left: 4px solid white;
297       padding-left: 40px;
298       min-width: 310px;
299       margin-left: 50px;
300       display: inline-block;
301   }
302   li {
303       margin-top: 10px;
304   }
305   ul > li:first-child {
306       margin-top: 0;
307   }
308   q, p {
309       margin: 50px auto 0 auto;
310       text-align: left;
311       margin-left: 50px;
312   }
313   q:after {content: ""}
314   q:before {content: ""}
315   q {
316       display: block;
317       margin-top: 140px;
318   }
319   li p {
320       margin-top: 0;
321       font-size: 20px;
322       font-style: italic;
323   }
324   video {
325       position: absolute;
326       top: 210px;
327       width: 260px;
328       left: 445px;
329       box-shadow: 0 0 10px black;
330   }
331   #arrow {
332       position: absolute;
333       top: 165px;
334       left: 460px;
335       font-size: 100px;
336       color: white;
337
338   }
339   li {list-style-type: none}
340
341 </style>
342
343 <!-- {{{{ *****************  DZSlides CORE 2.0b1 *************************** -->
344 <!-- *********************************************************************** -->
345 <!-- *********************************************************************** -->
346 <!-- *********************************************************************** -->
347 <!-- *********************************************************************** -->
348
349 <!-- This block of code is not supposed to be edited, but if you want to change the behavior of the slides, feel free to hack it ;) -->
350
351 <!-- Default Style -->
352 <style>
353   * { margin: 0; padding: 0; }
354   details {display: none;}
355   body {
356     width: 800px; height: 600px;
357     margin-left: -400px; margin-top: -300px;
358     position: absolute; top: 50%; left: 50%;
359     overflow: hidden;
360   }
361   section {
362     position: absolute;
363     pointer-events: none;
364     width: 100%; height: 100%;
365   }
366   section[aria-selected] { pointer-events: auto;}
367   body {display: none}
368   body.loaded {display: block}
369 </style>
370
371 <script>
372   var friendWindows = [];
373   var idx = 1;
374   var slides;
375
376   /* main() */
377
378   window.onload = function() {
379     slides = document.querySelectorAll("body > section");
380     onhashchange();
381     setSlide();
382     document.body.className = "loaded";
383     onresize();
384   }
385
386   /* Handle keys */
387
388   window.onkeydown = function(e) {
389     // Don't intercept keyboard shortcuts
390     if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
391       return;
392     }
393     if ( e.keyCode == 37 // left arrow
394       || e.keyCode == 33 // page up
395     ) {
396       e.preventDefault();
397       back();
398     }
399     if ( e.keyCode == 39 // right arrow
400       || e.keyCode == 34 // page down
401     ) {
402       e.preventDefault();
403       forward();
404     }
405
406     if ( e.keyCode == 32) { // space
407         e.preventDefault();
408         toggleContent();
409     }
410   }
411
412   /* Adapt the size of the slides to the window */
413
414   window.onresize = function() {
415     var sx = document.body.clientWidth / window.innerWidth;
416     var sy = document.body.clientHeight / window.innerHeight;
417     var transform = "scale(" + (1/Math.max(sx, sy)) + ")";
418     document.body.style.MozTransform = transform;
419     document.body.style.WebkitTransform = transform;
420     document.body.style.OTransform = transform;
421     document.body.style.msTransform = transform;
422     document.body.style.transform = transform;
423   }
424   function getDetails(idx) {
425     var s = document.querySelector("section:nth-of-type("+ idx +")");
426     var d = s.querySelector("details");
427     return d?d.innerHTML:"";
428   }
429   window.onmessage = function(e) {
430     msg = e.data;
431     win = e.source;
432     if (msg === "register") {
433       friendWindows.push(win);
434       win.postMessage(JSON.stringify({method: "registered", title: document.title, count: slides.length}), document.location);
435       win.postMessage(JSON.stringify({method: "newslide", details: getDetails(idx), idx: idx}), document.location);
436       return;
437     }
438     if (msg === "back") back();
439     if (msg === "forward") forward();
440     if (msg === "toggleContent") toggleContent();
441     // setSlide(42)
442     var r = /setSlide\((\d+)\)/.exec(msg);
443     if (r) {
444         idx = r[1];
445         setSlide();
446     }
447   }
448
449   /* If a Video is present in this new slide, play it.
450      If a Video is present in the previous slide, stop it. */
451
452   function toggleContent() {
453     var s = document.querySelector("section[aria-selected]");
454     if (s) {
455         var video = s.querySelector("video");
456         if (video) {
457             if (video.ended || video.paused) {
458                 video.play();
459             } else {
460                 video.pause();
461             }
462         }
463     }
464   }
465
466   /* If the user change the slide number in the URL bar, jump
467      to this slide. */
468
469   window.onhashchange = function(e) {
470     var newidx = ~~window.location.hash.split("#")[1];
471     if (!newidx) newidx = 1;
472     if (newidx == idx) return;
473     idx = newidx;
474     setSlide();
475   }
476
477   /* Slide controls */
478
479   function back() {
480     if (idx == 1) return;
481     idx--;
482     setSlide();
483   }
484   function forward() {
485     if (idx >= slides.length) return;
486     idx++;
487     setSlide();
488   }
489   function setSlide() {
490     var old = document.querySelector("section[aria-selected]");
491     var next = document.querySelector("section:nth-of-type("+ idx +")");
492     if (old) {
493       old.removeAttribute("aria-selected");
494       var video = old.querySelector("video");
495       if (video) { video.pause(); }
496     }
497     if (next) {
498       next.setAttribute("aria-selected", "true");
499       var video = next.querySelector("video");
500       if (video) { video.play(); }
501     } else {
502       console.warn("No such slide: " + idx);
503       idx = 0;
504       for (var i = 0; i < slides.length; i++) {
505           if (slides[i].hasAttribute("aria-selected")) {
506               idx = i + 1;
507           }
508       }
509     }
510     window.location.hash = idx;
511     for (var i = 0; i < friendWindows.length; i++) {
512         friendWindows[i].postMessage(JSON.stringify({method: "newslide", details: getDetails(idx), idx: idx}), document.location);
513     }
514   }
515 </script>
516 <!-- vim: set fdm=marker: }}} -->