diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/cc.png | bin | 0 -> 10135 bytes | |||
-rw-r--r-- | doc/introduction.tex | 222 | ||||
-rw-r--r-- | doc/softwareprozess.tex | 207 |
3 files changed, 429 insertions, 0 deletions
diff --git a/doc/cc.png b/doc/cc.png Binary files differnew file mode 100644 index 0000000..d181cc0 --- /dev/null +++ b/doc/cc.png diff --git a/doc/introduction.tex b/doc/introduction.tex new file mode 100644 index 0000000..bd5e01b --- /dev/null +++ b/doc/introduction.tex @@ -0,0 +1,222 @@ +\documentclass{beamer} +%packages +\usepackage[latin1]{inputenc} +\usepackage{minted} +\usepackage{graphicx} +\usepackage{hyperref} +\usepackage[english]{babel} + +\hypersetup{urlcolor=red,colorlinks} +\definecolor{bg}{rgb}{0.95,0.95,0.95} +\newminted{xml}{fontsize=\tiny} +\newminted{javascript}{fontsize=\tiny} +\usetheme{default} +\title[OSM-Projekt - What is...]{OSM-Projekt - An introduction into OpenStreetMap} +\author{Philipp Borgers} +\institute{Institute for Computer Science, Free University Berlin} +\date{15.4.2011} +\begin{document} +\begin{frame} +\titlepage +\end{frame} + +\begin{frame}{Introduction} + \begin{itemize} + \item Huge database of geo data + \item Open Data, licenced under cc (ODbL?) + \item Everybody can contribute, it's like an wiki + \end{itemize} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Community} + \begin{itemize} + \item \href{http://wiki.openstreetmap.org/wiki/Develop}{Developer wikipage} + \item \href{http://lists.openstreetmap.org/listinfo}{Mailinglists (dev@lists...)} + \item \href{irc://irc.oftc.net/#osm-dev}{\#osm-dev} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{data types - node} + \begin{itemize} + \item Id, Longitude, Latitude + \item Set of key/value pairs (tags) + \end{itemize} + \begin{xmlcode} + <node id="23" lat="51.5173639" lon="-0.140043" version="1" changeset="42" user="h4ck3r" + uid="23" visible="true" timestamp="2007-01-28T11:40:26Z"> + <tag k="name" v="h4ck3rs h0m3"/> + </node> + \end{xmlcode} +\end{frame} + +\begin{frame}[fragile] + \frametitle{data types - way} + \begin{itemize} + \item Id and common attributes + \item List of all node id's that make up the way + \item Last node == first node (optional, closed way) + \item A set of key/value pairs (tags) + \end{itemize} + \begin{xmlcode} + <way id="42" visible="true" timestamp="2009-01-19T19:07:25Z" version="42" changeset="2342" + user="h4ck3r" uid="23"> + <nd ref="1"/> + <nd ref="2"/> + <nd ref="3"/> + <nd ref="1"/> + <tag k="oneway" v="yes"/> + </way> + \end{xmlcode} +\end{frame} + +\begin{frame}[fragile] + \frametitle{data types - relation} + \begin{itemize} + \item Id and common attributes + \item A set of key/value pairs (tags) + \item An ordered list of primitives (members) with associated role attribute + \item A member consists of a type (node, way, relation), Id and a role attribute + \end{itemize} + \begin{xmlcode} + <relation id="23" timestamp="2008-12-21T19:31:43Z" user="h4ck3r" uid="42"> + <member type="way" ref="2332" role="whatever"/> + <member type="node" ref="43" role="asdf"/> + <member type="relation" ref="1234" role="l33t"/> + <member type="way" ref="5678" role=""/> + <tag k="name" v="sample relation"/> + </relation> + \end{xmlcode} +\end{frame} +\begin{frame}[fragile] + \frametitle{data types - tag} + \begin{itemize} + \item A key/value pair + \item They are everywhere, you can't hide + \end{itemize} + \begin{xmlcode} + <tag k="name" v="Institut fuer Informatik"/> + \end{xmlcode} +\end{frame} +\begin{frame}[fragile] + \frametitle{data types - more on data types and elements} + \begin{itemize} + \item \href{http://wiki.openstreetmap.org/wiki/Data_Primitives}{Data primitives} + \item \href{http://wiki.openstreetmap.org/wiki/Elements}{OSM elements} + \item \href{http://wiki.openstreetmap.org/wiki/API\_v0.6}{OSM API 0.6} + \end{itemize} +\end{frame} +\begin{frame}[fragile] + \frametitle{database - schema (tables)} + \begin{itemize} + \item nodes + \item ways + \item relations + \item users + \item way\_nodes + \item relation\_members + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{database - nodes table} + \begin{tabular}{| l | c | r |} + \hline + id & bigint & not null \\ \hline + version & integer & not null \\ \hline + user\_id & integer & not null \\ \hline + tstamp & timestamp without time zone & not null \\ \hline + changeset\_id & bigint & not null \\ \hline + tags & hstore & \\ \hline + geom & geometry & \\ \hline + \end{tabular} +\end{frame} + +\begin{frame}[fragile] + \frametitle{XAPI} + \begin{itemize} + \item Database frontend used to retrieve node, ways and relations + \item XPATH like requests + \item Returns xml (osm xml schema) + \item \href{http://wiki.openstreetmap.org/wiki/Xapi}{Wiki page} + \item OSM community needs a good implementation + \end{itemize} +\end{frame} +\begin{frame}[fragile] + \frametitle{XAPI - Request format} + \begin{itemize} + \item api/0.6/node[predicate] + \item api/0.6/way[-6,50,2,61] + \item api/0.6/relation[name=U3] + \item api/0.6/*[-6,50,2,61][name=U3|U4|U5] + \item api/0.6/*[name=*] + \item api/0.6/node[amenity|leisure=golf\_curse] + \end{itemize} +\end{frame} +\begin{frame}[fragile] + \frametitle{XAPI - Implementations} + \begin{itemize} + \item \href{http://xapi.openstreetmap.org/scripts/}{G.TM implementation} + \item \href{https://github.com/iandees/xapi-servlet}{Java implementation} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{node.js} + \begin{itemize} + \item \href{http://nodejs.org/}{node.js} is asynchronous javascript + \item Event based + \item Written on top of the \href{http://code.google.com/p/v8/}{V8 Javascript Engine} (Virtual machine) + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Simple example - echo server} + \begin{javascriptcode} + var net = require('net'); + + var server = net.createServer(function (socket) { + socket.write("Echo server\r\n"); + socket.pipe(socket); + }); + + server.listen(8124, "127.0.0.1"); + \end{javascriptcode} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Simple example - event} + Listen for events + \begin{javascriptcode} + server.on('connection', function(stream) { + console.log('someone connected!'); + }); + \end{javascriptcode} + Emit events + \begin{javascriptcode} + server.emit('connection',socket); + \end{javascriptcode} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Licence} + \begin{center} + \includegraphics[scale=0.25]{./cc.png} + \end{center} + \begin{center} + \href{http://creativecommons.org/licenses/by/3.0/}{Attribution 3.0 Unported (CC BY 3.0)} + \end{center} +\end{frame} + +\begin{frame}[fragile] + \frametitle{more} + \begin{itemize} + \item \url{https://github.com/slomo/osm-spline-xapi} + \item \href{https://lists.spline.inf.fu-berlin.de/mailman/listinfo/xapi}{XAPI (course) mailinglist} + \item \url{http://osm.spline.de} + \end{itemize} +\end{frame} + +\end{document} diff --git a/doc/softwareprozess.tex b/doc/softwareprozess.tex new file mode 100644 index 0000000..5a75fa4 --- /dev/null +++ b/doc/softwareprozess.tex @@ -0,0 +1,207 @@ +\documentclass{beamer} +%packages +\usepackage[utf8x]{inputenc} +\usepackage{graphicx} +\usepackage{hyperref} +\hypersetup{urlcolor=red,colorlinks} +\definecolor{bg}{rgb}{0.95,0.95,0.95} +\usetheme{Rochester} +\title[]{A sketch of an agile software process} +\author{Yves Müller} +\institute{Institute for Computer Science, Freie University Berlin} +\date{15.4.2011} +\begin{document} + +\begin{frame} +\titlepage +\end{frame} + +\begin{frame}[fragile] + \frametitle{Kurz und Knapp} + \begin{definition}[Agile software development] + Produce high value at low cost. + \end{definition} + + \vspace{0.2in} + Bedeutung für unser Projekt + + \begin{itemize} + \item Kosten: Zeit die wir aufbringen + \item Wert: Nutzen für OpenStreetMap + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Agile Softwareentwicklung: Wie geht das?} + + Puh ... Erklärung ist gar nicht so einfach, darum hier nur ein paar Stichworte. + + \begin{itemize} + \item Planbasierende Entwicklung: Ängste, Misstrauen und Stress + \item Agiles Manifest + \item Werteverschiebung + \item Prinzipien + \item viele viele Prozessmodelle + \end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Crystal Clear} + + Der minimale Ansatz zu einem Agilen Prozess. + + \begin{block}{Prinzipien} + + \begin{itemize} + \item Häufige Auslieferung der Software + \item Passiver Wissenstransfer + \item Ständige Optimierung durch Reflektion + \end{itemize} + \end{block} + + Es gibt nur zwei konkrete Methode: + + \begin{itemize} + \item Retrosperktive Treffen + \item Iterationen (bei uns 3 Stück) + \end{itemize} + + Andere werden bei Bedarf hinzugezogen. + +\end{frame} + + +\begin{frame} + \frametitle{Agile Werkzeuge und Methoden in unserem Projekt} + + nur eine kleine Gruppen, die ich sinnvoll fand + + \begin{itemize} + \item Testgetrieben Entwicklung + \item StandUp Meeting + \item Plannungsspiel (die Zettelwirtschaft) + \item Gemeinsamer Code (Collective Ownership) + \item Continious Integration + \end{itemize} + + diskutierbar, und veränderbar durch Retrosperktive + +\end{frame} + + +\begin{frame} + \frametitle{Testgetriebene Entwicklung} + + Tests werden zu erst entwickelt + + \begin{block}{Wie geht das?} + Der Code wird in folgendem Zyklus entwickelt. + \begin{itemize} + \item Test schreiben + \item Test erfüllen (genau den Test implmentieren) + \item Verbessern des Codes (Refactoring) + \end{itemize} + \end{block} + Jede funktionale Eigenschaft und jeder Bug hat einen Test +\end{frame} + + +\begin{frame} + \frametitle{Testgetribene Entwicklung} + \begin{block}{Warum?} + \begin{itemize} + \item Entwicklung von definierten Schnittstellen + \item Feinentwurf auf Modulebene + \item Vermeidung von totem Code + \item Vertrauen in Korrektheit des Codes höher + \item ein ganz kleines bisschen Compilerersatz + \end{itemize} + \end{block} + + Erfordert hohe Disziplin, bringt aber unglaubliche Vorteile. +\end{frame} + +\begin{frame} + \frametitle{Testgetribene Entwicklung} + Beim Schreiben von Tests sollte beachtet werden: + + \begin{itemize} + \item nicht zu große Blöcke testen + \item auch auf Typen testen + \item wenig gegen exteren Systeme testen (nutzt Stellvertreter) + \item die Qualität des Programms ist nur so gut wie die Qualität der Tests + \item Geschwindigkeit ist auch in Test kritisch + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Standup meeting} + + \begin{block}{Was ist das?} + \begin{itemize} + \item Treffen am Anfang jeder Sitzung + \item max. 10 Min + \item alle stehen + \end{itemize} + \end{block} + + \begin{block}{Warum?} + \begin{itemize} + \item ihr könnt eure Probleme mitteilen + \item ihr könnt über Erfolge berichten + \item Fortschritt ermitteln + \end{itemize} + \end{block} + +\end{frame} + +\begin{frame} + \frametitle{Das Plannungspiel} + + \begin{block}{Was ist das?} + \begin{itemize} + \item Treffen am Anfang einer Iteration + \item Diskussion über die Anforderungen + \item Festlegung der Ziele für die Iteration + \end{itemize} + \end{block} + + \begin{block}{Warum?} + \begin{itemize} + \item nur die Entwickler können ihre Leistungsfähigkeit einschätzen + \item korrekte Anforderungen sind schwer zu formalsieren + \end{itemize} + \end{block} + +\end{frame} + + +\begin{frame} + \frametitle{Collective code ownership / Continious Integration} + + \begin{block}{Was ist das?} + \begin{itemize} + \item es gibt keine Modulzuständigkeiten! + \item jeder ist verantwortlich + \item der Code soll immer lauffähig sein + \end{itemize} + \end{block} + + \begin{block}{Warum?} + \begin{itemize} + \item Minimierung des Expertentums + \end{itemize} + \end{block} + + Das CI kontrolliert ob der Code gut ist (= läuft) und erinnert notfalls alle an ihre Pflichten! +\end{frame} + +\begin{frame} + \frametitle{Ende} + + Danke. Fragen? Beschwerden? + +\end{frame} + +\end{document} |