Import lacie-nas.org slide show for RMLL 2011
authorSimon Guinot <simon@sequanux.org>
Fri, 1 Jul 2011 10:26:09 +0000 (12:26 +0200)
committerSimon Guinot <simon@sequanux.org>
Fri, 1 Jul 2011 10:26:09 +0000 (12:26 +0200)
Firefox 4 or upper is needed to run the slide show.

notes [new file with mode: 0644]
slides.html [new file with mode: 0644]

diff --git a/notes b/notes
new file mode 100644 (file)
index 0000000..5520e24
--- /dev/null
+++ b/notes
@@ -0,0 +1,95 @@
+==== lacie-nas.org ====
+
+== What is a NAS ? ==
+
+- A kind of desktop with no monitor, no keyboard.
+- Basically, a NAS is a remote storage device available through some services
+  as Samba, Netatalk, etc...
+- A NAS provide lots of services, more or less useful.
+  [ More recently... ]
+- Often, a NAS embed some exotic/cool devices (K2000 LEDs, buttons, LCD).
+  [ to replace keyboard and monitor ]
+- the architecture could be exotic (ARM, Mips, PPC, or x86 more recently).
+  [ cost and low power consumption ]
+- The NAS firmwares are largely based on Free software.
+
+== lacie.com ==
+
+- non free hardware
+- very limited sponsoring
+
+== Project overview ==
+
+= Some history =
+
+- In 2009, only a single LaCie NAS board was mainlined: EDmini v2 (Orion Soc).
+- Discussion with Albert Aribaud and Christopher Moore (EDmini v2 maintainers).
+- a framework was needed...
+
+  [ A ML to archive the emails ]
+  [ An IRC channel to talk ]
+  [¬†git repository to store and distribute patches ]
+
+= What is not lacie-nas.org =
+
+- not a hack provider for the original LaCie firmwares.
+  Some other projects (like nas-central.org) already does it well.
+
+  [ Often people comes and ask how to hack a LaCie NAS... ]
+
+= What is lacie-nas.org =
+
+- Open/unlock hardware
+  [ provide some hardware specifications: serial pinout, JTAG pinout ]
+- Tools to allow easiest/allow the mainline work: wiki, git, ML, ...
+- Provide mainline support for LaCie boards (OpenOCD, U-Boot, Linux)
+- Develop embedded generic modules for NASes (led_ctrl)
+- Provide development/hacking tools (clunc, miniroot)
+
+== Projects or targets ==
+
+- no roadmap (no deadlines)
+- priorities: Linux (almost complete), U-Boot, Debian installer, 
+
+== U-Boot ==
+
+- LaCie U-Boot stock limitations (no saveenv)
+
+== Netconsole/Clunc ==
+
+== Linux ==
+
+- mainline submission
+  [ Free software and enterprise ]
+
+== Debian installer ==
+
+- why Debian ?
+- openwrt ?
+- two ways: miniroot and rootfs copy or Debian way (Luc)
+
+== ==
+
+== ==
+
+== ==
+
+== NAS tools ==
+
+- GPIO LEDs: led_ctrl
+- buttons: ?
+- FANs and hardware sensors: lm_sensor ?
+- disk spin down utility
+- Or add some NAS packages to an existing distribution Debian.
+
+== How to get a board supported mainline ==
+
+- provide a pineout, serial and JTAG
+- Openocd (JTAG)
+
+== Perspectives ==
+
+- Network installation
+- Device Tree early adopter
+- Free distribution
+- Build a free distribution for NASes.
diff --git a/slides.html b/slides.html
new file mode 100644 (file)
index 0000000..d056d3b
--- /dev/null
@@ -0,0 +1,410 @@
+<!DOCTYPE html>
+
+<meta charset="utf-8">
+<title>lacie-nas.org RMLL 2011</title>
+
+<!-- Your Slides -->
+<!-- One section is one slide -->
+
+<section class=title>
+    <!-- This is the first slide -->
+    <h1>lacie-nas.org</h1>
+    <footer>by Simon and Thomas <a href="http://lacie-nas.org">@lacie-nas.org</a></footer>
+</section>
+
+<section class=chapter>
+    <h1>What is a NAS ?</h1>
+</section>
+
+<section class=chapter>
+    <h1>Project Overview</h1>
+</section>
+
+<section>
+    <h2>Origins</h2>
+    <ul>
+        <li>lacie.com: non free hardware
+        <li>until 2009, no mainline support
+       <li>except for EDmini v2 (Linux patch)
+        <li>discussions patch authors
+        <li>a framework was needed...
+    </ul>
+</section>
+
+<section>
+    <h2>What is not lacie-nas.org ?</h2>
+    <ul>
+        <li>after sales service for LaCie
+       <li>hack host for LaCie firmwares
+    </ul>
+</section>
+
+<section class=chapter>
+    <h1>Projects and targets</h1>
+</section>
+
+<section>
+    <h2>Open/unlock hardware</h2>
+    <p>Provide boards specifications and pineout (JTAG, serial, GPIOS, etc...)</p>
+</section>
+
+<section>
+    <h2>Provide mainline support</h2>
+    <ul>
+        <li>openocd
+        <li>U-Boot
+        <li>Linux
+    </ul>
+</section>
+
+<section>
+    <h2>Provide NAS system tools</h2>
+    <p>Develop embedded generic modules for NASes:</p>
+    <ul>
+       <li>buttons: input_eventd
+        <li>GPIO LEDs: led_ctrl
+        <li>disk by slot: sd_alias
+        <li>GPIO debug: gpio_ctrl
+        <li>TODO: disk spin down utility
+        <li>TODO: FANs and hardware sensors (lm_sensor ?)
+        <li>TODO: provide a GNU/Debian package
+    </ul>
+</section>
+
+<section>
+    <h2>Provide development services</h2>
+    <ul>
+        <li><a href="http://lacie-nas.org">wiki</a>
+        <li><a href="http://git.lacie-nas.org">git repositories</a>
+        <li><a href="http://sequanux.org/cgi-bin/mailman/listinfo/lacie-nas">Mailing List</a>
+        <li>IRC channel <a href="irc://irc.freenode.net/lacie-nas">#lacie-nas</a> @freenode.net
+        <li><a href="ftp://lacie-nas.org/">ftp</a>
+    </ul>
+</section>
+
+<section>
+    <h2>Provide development/hacking tools</h2>
+    <ul>
+        <li><a href="http://lacie-nas.org/doku.php?id=clunc">clunc</a> (Client for LaCie U-Boot NetConsole)
+        <li><a href="http://git.lacie-nas.org/?p=miniroot.git;a=summary">miniroot</a>
+    </ul>
+</section>
+
+<section>
+    <h2>Roadmap</h2>
+    <q>No roadmap, no deadlines, but rather tasks and priorities</q>
+</section>
+
+<section class=chapter>
+    <h1>Free a NS2 demo !</h1>
+</section>
+
+<section>
+    <h2>Take board control with clunc</h2>
+</section>
+
+<section>
+    <h2>Install U-boot mainline</h2>
+</section>
+
+<section>
+    <h2>Startup an installation kernel+initramfs</h2>
+</section>
+
+<section>
+    <h2>Install GNU/Debian ARM</h2>
+</section>
+
+<section>
+    <h2>Use SSH and connect to the NS2 :)</h2>
+</section>
+
+<section class=chapter>
+    <h1>Perspectives</h1>
+</section>
+
+<section>
+    <h2>Network installation</h2>
+</section>
+
+<section>
+    <h2>Device Tree early adopter</h2>
+</section>
+
+<section>
+    <h2>Free distribution for NASes</h2>
+</section>
+
+<section class=chapter>
+    <h1>Questions ?</h1>
+</section>
+
+<section class=chapter>
+    <h1>Thanks</h1>
+</section>
+
+<!-- Your Style -->
+<!-- Define the style of you presentation -->
+
+<!-- Maybe a font from http://www.google.com/webfonts ? -->
+<!-- link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet'-->
+<style>
+  html { background-color: black; }
+  a { color: #FF0066; } a:hover {text-decoration: underline;}
+  footer { position: absolute; bottom: 50px; right: 50px; }
+  strong {color: #FF0066}
+  body {
+      font-family: 'Oswald', arial, serif;
+      background-color: white;
+      color: white;
+      font-size: 2em;
+      background: #1C1C1C;
+      background-image: -moz-radial-gradient(center 45deg, #333 0%, #1C1C1C 50%);
+      background-image: -moz-radial-gradient(center 45deg, #333 0%, #1C1C1C 50%);
+  }
+
+
+  /* Transition effect */
+  section {
+      -moz-transition: left 400ms linear 0s;
+      -webkit-transition: left 400ms linear 0s;
+      -o-transition: left 400ms linear 0s;
+      -ms-transition: left 400ms linear 0s;
+      transition: left 400ms linear 0s;
+  }
+  section { left: -150%; }
+  section[aria-selected] { left: 0; }
+  section[aria-selected] ~ section { left: +150% }
+
+  .title { background-color: black; }
+  .title h1 {line-height: 400px; vertical-align: middle; margin: 0; text-align: center; display: block; font-size: 70px;}
+
+  .chapter { background-color: black;}
+  .chapter h1 {line-height: 600px; vertical-align: middle; margin: 0; text-align: center; display: block}
+
+  h1 {
+      margin: 50px 80px 0 80px;
+      font-size: 50px;
+      text-shadow: 0px -1px 0px #000;
+      text-align: left;
+  }
+  h2 {
+      color: #FAE50B;
+      margin: 70px 0 0 0;
+      font-size: 40px;
+      text-align: center;
+  }
+  ul {
+      margin-top: 70px;
+      font-size: 35px;
+      text-align: left;
+      border-left: 4px solid white;
+      padding-left: 40px;
+      min-width: 310px;
+      margin-left: 50px;
+      display: inline-block;
+  }
+  q, p {
+      margin: 50px auto 0 auto;
+      text-align: left;
+      margin-left: 50px;
+  }
+  q:after {content: ""}
+  q:before {content: ""}
+  q {
+      display: block;
+      margin-top: 140px;
+  }
+  video {
+      position: absolute;
+      top: 210px;
+      width: 260px;
+      left: 445px;
+      box-shadow: 0 0 10px black;
+  }
+  #arrow {
+      position: absolute;
+      top: 165px;
+      left: 460px;
+      font-size: 100px;
+      color: white;
+
+  }
+  li {list-style-type: none}
+
+</style>
+
+<!-- {{{{ *****************  DZSlides CORE 2.0b1 *************************** -->
+<!-- *********************************************************************** -->
+<!-- *********************************************************************** -->
+<!-- *********************************************************************** -->
+<!-- *********************************************************************** -->
+
+<!-- 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 ;) -->
+
+<!-- Default Style -->
+<style>
+  * { margin: 0; padding: 0; }
+  details {display: none;}
+  body {
+    width: 800px; height: 600px;
+    margin-left: -400px; margin-top: -300px;
+    position: absolute; top: 50%; left: 50%;
+    overflow: hidden;
+  }
+  section {
+    position: absolute;
+    pointer-events: none;
+    width: 100%; height: 100%;
+  }
+  section[aria-selected] { pointer-events: auto;}
+  body {display: none}
+  body.loaded {display: block}
+</style>
+
+<script>
+  var friendWindows = [];
+  var idx = 1;
+  var slides;
+
+  /* main() */
+
+  window.onload = function() {
+    slides = document.querySelectorAll("body > section");
+    onhashchange();
+    setSlide();
+    document.body.className = "loaded";
+    onresize();
+  }
+
+  /* Handle keys */
+
+  window.onkeydown = function(e) {
+    // Don't intercept keyboard shortcuts
+    if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
+      return;
+    }
+    if ( e.keyCode == 37 // left arrow
+      || e.keyCode == 33 // page up
+    ) {
+      e.preventDefault();
+      back();
+    }
+    if ( e.keyCode == 39 // right arrow
+      || e.keyCode == 34 // page down
+    ) {
+      e.preventDefault();
+      forward();
+    }
+
+    if ( e.keyCode == 32) { // space
+        e.preventDefault();
+        toggleContent();
+    }
+  }
+
+  /* Adapt the size of the slides to the window */
+
+  window.onresize = function() {
+    var sx = document.body.clientWidth / window.innerWidth;
+    var sy = document.body.clientHeight / window.innerHeight;
+    var transform = "scale(" + (1/Math.max(sx, sy)) + ")";
+    document.body.style.MozTransform = transform;
+    document.body.style.WebkitTransform = transform;
+    document.body.style.OTransform = transform;
+    document.body.style.msTransform = transform;
+    document.body.style.transform = transform;
+  }
+  function getDetails(idx) {
+    var s = document.querySelector("section:nth-of-type("+ idx +")");
+    var d = s.querySelector("details");
+    return d?d.innerHTML:"";
+  }
+  window.onmessage = function(e) {
+    msg = e.data;
+    win = e.source;
+    if (msg === "register") {
+      friendWindows.push(win);
+      win.postMessage(JSON.stringify({method: "registered", title: document.title, count: slides.length}), document.location);
+      win.postMessage(JSON.stringify({method: "newslide", details: getDetails(idx), idx: idx}), document.location);
+      return;
+    }
+    if (msg === "back") back();
+    if (msg === "forward") forward();
+    if (msg === "toggleContent") toggleContent();
+    // setSlide(42)
+    var r = /setSlide\((\d+)\)/.exec(msg);
+    if (r) {
+        idx = r[1];
+        setSlide();
+    }
+  }
+
+  /* If a Video is present in this new slide, play it.
+     If a Video is present in the previous slide, stop it. */
+
+  function toggleContent() {
+    var s = document.querySelector("section[aria-selected]");
+    if (s) {
+        var video = s.querySelector("video");
+        if (video) {
+            if (video.ended || video.paused) {
+                video.play();
+            } else {
+                video.pause();
+            }
+        }
+    }
+  }
+
+  /* If the user change the slide number in the URL bar, jump
+     to this slide. */
+
+  window.onhashchange = function(e) {
+    var newidx = ~~window.location.hash.split("#")[1];
+    if (!newidx) newidx = 1;
+    if (newidx == idx) return;
+    idx = newidx;
+    setSlide();
+  }
+
+  /* Slide controls */
+
+  function back() {
+    if (idx == 1) return;
+    idx--;
+    setSlide();
+  }
+  function forward() {
+    if (idx >= slides.length) return;
+    idx++;
+    setSlide();
+  }
+  function setSlide() {
+    var old = document.querySelector("section[aria-selected]");
+    var next = document.querySelector("section:nth-of-type("+ idx +")");
+    if (old) {
+      old.removeAttribute("aria-selected");
+      var video = old.querySelector("video");
+      if (video) { video.pause(); }
+    }
+    if (next) {
+      next.setAttribute("aria-selected", "true");
+      var video = next.querySelector("video");
+      if (video) { video.play(); }
+    } else {
+      console.warn("No such slide: " + idx);
+      idx = 0;
+      for (var i = 0; i < slides.length; i++) {
+          if (slides[i].hasAttribute("aria-selected")) {
+              idx = i + 1;
+          }
+      }
+    }
+    window.location.hash = idx;
+    for (var i = 0; i < friendWindows.length; i++) {
+        friendWindows[i].postMessage(JSON.stringify({method: "newslide", details: getDetails(idx), idx: idx}), document.location);
+    }
+  }
+</script>
+<!-- vim: set fdm=marker: }}} -->