Raspberry Pi as Backup/Mirror-Server

For some time I used the Raspberry Pi combined with an 64GB USB flash drive and rsync to mirror my most important files, so a loss of my notebook wouldn’t be fatal and I could also continue working on computers on the campus, if I forgot my notebook or the battery is empty. rsync was very fast using a SSH connection to the server (Most times only a few seconds, if no big changes were made). I chose a USB flash drive because it doesn’t need much energy. A 2.5″-HDD can not be powered by it without an external AC adapter. But 64GB are not much space and the use of an external hard drive to back up my less important data and for archiving the even less important data, since I only have 128GB internal SDD, became somehow annoying. For this reason I bought a new external 3.5″-Hard drive (WD Elements – Reflink: Earnings will be donated to the WWF)  for my Raspberry Pi with 3TB of storage. Of course this configuration needs much more power if the hard disk is active, but for the most time the hard disk will be asleep and won’t take that much power.

Preparing the Hard Disk

After formatting the hard disk with EXT4 with gparted(I did this with my notebook, since my Raspberry Pi is running headless), the fstab had to be modified, so the hard disk would be automatically mounted. Otherwise you would have to write a script that mounts the hard disk and execute is for every system start with root privileges. For the fstab we first need the UUID of the hard disk. We can get it with blkid, which you may have to install first (should be in every repo).

blkid

Your external hard disk will probably be named /dev/sdb1. I didn’t have an external hard disk connected, so it shows only the two partitions of my internal SSD.

After you have the UUID and connected the hard disk with your raspberry pi, you connect via ssh with your raspberry pi and open the /etc/fstab (you need root privileges) with your favourite text editor (if you don’t have one, ‘nano’ could be a good choice for the beginning). At the end of the file you write

 UUID=f048e98d-6ebb-4932-8b2e-dbe3bf93b7b7 /home/doms/WD-3TB ext4 defaults,auto,noatime  0       0

Of course you have to replace the UUID and the mount directory. The mount directory has to exist in advance and needs to be empty, if not the mount will fail. You can test your fstab with ‘mount -a‘. Please notice that you are not allowed to use spaces in entries (like ‘defaults,auto,…’), since it is used (as well as the tab) as delimiter.

Preparing the SSH Connection

Now comes a little harder part, because you should use ssh as protocol for the backup and ssh needs a password to be entered. You have to configure the Raspberry Pi and all notebooks/computers you want to back up on it to work without entering a password. Otherwise your backups wont be fully automated.

First you have to create a key (if you don’t already have a file ~/.ssh/id_rsa.pub) on your notebook with

ssh-keygen -b 4096

This will create (after asking you for a password and giving you the opportunity to change the output path) ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub. You have to copy the ~/.ssh/id_rsa.pub file to the folder ~/.ssh/authorized_keys on your Raspberry Pi (You can use scp, filezilla or something else).  Afterwards you have to change the rights of this folder on your Raspberry Pi with

chmod 600 ~/.ssh/authorized_keys

When you try to log in on your Raspberry Pi you will be asked to enter the password you chose by ssh-keygen. After this, you should need no password to login anymore. Of course it could be very bad, if someone manages to copy your id_rsa, without you noticing it. If your notebook gets stolen, you should delete the id_rsa.pub on your Raspberry Pi, which makes the key in id_rsa file useless.

If you are able to read german, you could find this article useful.

Doing the Backup

Now we have all dependencies for doing the backup. My requirements of a backup-system are

  • To mirror the files, so you could get access to them on the go
  • To go back in time, without using too much space

If you only want the first point, you should use rsync with ssh connection, which is realy fast. Otherwise rdiff-backup is a good choice. It will mirror your files into a chosen directory on your Raspberry Pi and put diffs into an extra folder for going back in time. This covers changes as well as deletions. You have to install rdiff-backup on both, your notebook and your Raspberry Pi. After you have done this, you can do the backup with such as

rdiff-backup -v5 --exclude '/home/doms/.*' /home/doms doms@192.168.2.103::/home/doms/WD-3TB/BACKUP-L412

Of course you have to change the paths and the user name and probably the IP (you could also use a domain).  The excludes are very important. These are the directories which have a lot of changes and no need to be backed up. Such files would slow down the backup. The Raspberry Pi is not that fast and every diff will take its time. If you change a lot of big files, you should use something different, but for text and code files, this works actually quite good. The -v5 will give you some output, otherwise you wouldn’t see what is going on. The hard disk will go to sleep after some time (~20 Minutes) on its own.

Maybe you want some more specific exclude or put this all in a script. May script is the following

#BASIC#####################################################

LOCAL_PATH="/home/doms"
#------------user@---server----::-----PATH ON SERVER----------
BACKUP_PATH="doms@192.168.2.103::/home/doms/WD-3TB/BACKUP-L412"

# 1-9, with 1 none and 9 everything. 5 seems to be a good choice. 
VERBOSITY="-v5"

#EXCLUDE SOME FILES#######################################
# Exclude those files, which are often changed but not important like all files in '.cache'

#The files and directories, ignored by exclude. 
#If you want to exclude all files beginning with u except of unicorn.txt you would include unicorn.txt here, and exclude u* in EXCLUDE. 
#You only have to mention those files, which would math a pattern in EXCLUDE. 
INCLUDE="--include /home/doms/.vim/ --include /home/doms/.vimrc --include /home/doms/.zshrc --include /home/doms/.oh-my-zsh/ "

#The files matching these patterns and not those in INCLUDE are not backed up.
EXCLUDE="--exclude '/home/doms/.*'"

echo $EXCLUDE

#THE BACKUP##############################################
#The bash -c is needed as workaround 
bash -c "rdiff-backup $VERBOSITY $INCLUDE $EXCLUDE $LOCAL_PATH $BACKUP_PATH"

If you include a sub directory before you exclude parent directory, it will still be backed up.

Checking the health of your hard disk

To prevent data loss you should test your hard disk from time to time, since a failure of the hard disk would be fatal. You can get a S.M.A.R.T report with smartctl. First you have to install the smartmontools

 sudo apt-get install smartmontools

After this you can check your hard disk (in this case the /dev/sda. It could also be /dev/sdb or similar) with

 sudo smartctl -a /dev/sda | less

‘less’ can be closed with ‘q’. It maybe take some seconds and have a lot of output. If you only want to check if it passed you could also simply use

sudo smartctl -a /dev/sda | grep 'test result'

If you are able to read German and want some further information, you should take a look at S.M.A.R.T. Status einer Festplatte abfragen.

Veröffentlicht unter Linux | Hinterlasse einen Kommentar

Erfahrungsbericht: Mein Informatik-Studium an der TU Braunschweig

Viele liebäugeln mit einem Informatik-Studium, doch haben meist keine Vorstellungen was sie dort erwartet. Vermutlich ist dies in anderen Studiengängen nicht anders.  Tatsächlich habe ich mich durch die Schule kein bisschen auf das Studium vorbereitet gefühlt und bin es auch nicht gewesen, allerdings war ich auch ein schlechter und fauler Schüler. Mein Beschluss Informatik zu studieren war geleitet durch meinen Spass am Programmieren und Arduino-Basteln. Beides habe ich damals aber nur sehr stümperhaft betrieben, da mein Taschengeld nicht für brauchbare Literatur ausreichte. Wenn ich bei der Frage, was ich denn studieren wolle, mit Informatik geantwortet habe, hörte ich meist ‘Ich würde auch gerne mit Computern umgehen können’ oder ‘Das soll sehr viel Mathematik sein’. Das in der Informatik der Computer nur so viel ist wie das Teleskop in der Astronomie war mir damals schon hinlänglich bekannt. Bei der Mathematik dachte ich mir immer, dass ich noch nie Probleme mit Mathematik in der Schule hatte und später gar ohne ernsthaft zu lernen auch sehr gut durch Abitur gekommen bin. Hierbei kann man jedoch vorgreifen, dass die Schulmathematik (auch im Leistungskurs) weder von der Art noch dem Anspruch mit der Mathematik im Studium vergleichbar ist.

Vermutlich hast du sowas ähnliches auch schon mehr als oft genug gelesen. Ich will in diesem Beitrag ein wenig versuchen dir über den Ablauf und meine Erfahrungen mit dem Informatik-Studium an der TU Braunschweig zu vermitteln. Natürlich kann dein Informatik-Studium (auch an der TU Braunschweig) völlig anders verlaufen. Das hängt einfach damit zusammen, dass die Informatik ein weites Feld ist und man sich schon sehr früh in die Richtung die einem am besten liegt bewegen kann.

Allgemein besteht das Informatik-Studium aus Modulen, von denen einige verpflichtend und andere frei nach den Interessen wählbar sind. Die meisten Module sind Vorlesungsverantsaltungen, die mit einer Klausur in der ‘Vorlesungsfreien Zeit’ abgeschlossen werden. Ihr hört also während der ersten 3-4 Monate eines Semesters die zugehörigen Vorlesungen und macht unter Umständen Hausaufgaben, die aber selber nicht in die Wertung eingehen. Den Rest des Semesters finden keine Veranstaltungen statt, dafür aber dann die Klausuren, die eure Note bestimmen. Da die Note des Moduls einzig und allein von dieser Klausur abhängt, die man auch nur bedingt wiederholen darf, sollte man diese auch vernünftig bestehen. Neben Vorlesungensmodulen gibt es auch praktisch orientierte Module die durch erbringen praktischer Leistungen (wie etwa programmieren) bestanden werden, aber meist unbenotet sind (was nicht heißt, dass man nicht durchfallen kann). Für die Belegung/Auswahl von Modulen gibt es einige Regeln von denen ich die Basics jetzt mal schnell machen werde. Im Bachelorstudiengang muss man 180CP sammeln, wobei 1CP eine Arbeitsleistung von etwa 30 Stunden wiederspiegeln soll(Je nach Dozent weicht das aber stark ab). Es gibt verschiedene Gebiete aus denen Vorlesungen ausgewählt werden müssen.

Grundlagen der Informatik und Grundlagen der Mathematik: diese Fächer sind verpflichtend und hört man gewöhnlich in den ersten zwei Semestern als grundlegenden Einstieg. Dies umfasst Analysis, Lineare Algebra, Diskrete Mathematik, Logik, Theoretische Informatik, Technische Informatik, Programmieren, Algorithmen und Datenstrukturen.

Informatik der Systeme: Diese Module sind ebenfalls verpflichtend und werden gewöhnlich im dritten und vierten Semester neben den ersten Wahlpflicht-Modulen gehört.

Wahlpflichtbereich Informatik: Hier könnte ihr aus einem großen Pool interessanter Informatik-Fächer wählen. Auch tiefer gehende Masterveranstaltungen darf man hier hören. Die meisten Vorlesungen haben nur wenige Teilnehmer sodass man gewöhnlich sehr direkt und intensiv betreut wird. Meist sind die Professoren hier auch viel motivierter.

Wahlpflichtbereich Mathematik: Hier müssen zwei weitere Mathematik-Veranstaltungen gehört werden, wie etwa (Abstrakte-)Algebra oder Numerik.

Schlüsselqualifikationen: 10CP müsst ihr mit beliebigen Informatik- und Mathematik-fremden Fächer erbringen. Hierfür gibt es einige sehr einfache Fächer und sie beeinflussen nicht die Abschlussnote.

Teamprojekt: Im Verlaufe des Studiums müsst ihr mit ein paar Studienkollegen ein Projekt umsetzen. Dieses könnt ihr euch entweder selber aussuchen oder ihr könnt euch, falls ihr kein Thema und/oder Freunde habt, ein solches zuteilen lassen.

Nebenfach: Neben der Informatik müsst ihr auch noch ein Nebenfach machen. Hier gibt es einige Vorgefertigte zur Auswahl, ihr könnt euch aber auch selber ein Nebenfach basteln. Im Nebenfach hört ihr Vorlesungen aus dem entsprechenden Studiengang und meist keine auf Informatiker angepassten Vorlesungen. Eine Ausnahme hier ist das Nebenfach Medizin, das ein entsprechendes Institut in der Informatik hat.

Ergänzend kommt natürlich noch die Bachelor-Arbeit die 15CP bringt und somit ein halbes Semester entspricht.

 Mein Studienverlauf

1. Semester

Im ersten Semester habe ich Programmieren 1, Theoretische Informatik , Algorithmen und Datenstrukturen, Diskrete Mathematik und Lineare Algebra gehört. Da ich schon vor Studienbeginn mich ein wenig eingearbeitet hatte, musste ich nur für Theoretische Informatik und Diskrete Mathematik ernsthaft arbeiten. Lineare Algebra hatte zwar eine sehr harte Vorlesung, aber mit den begleitend angebotenen Übungen stellte die Klausur kein Problem dar. In Diskreter Mathematik(Die für Informatiker wichtigste Form der Mathematik) wurde ein guter Rundumschlag über die wichtigsten Mathematischen Konzepte(Induktionsbeweise, Asymptotische Abschätzungen, Definitionen wie Kommutativität, Monoid etc) gegeben. Da hier weniger Ausrechnen als Beweise und Theoretisches Verständnis von Nöten war, unterscheidete es sich stark von meinem damaligen durch Schulmathematik geprägten Verständnis von Mathematik. Die Theoretische Informatik (1) war das mit Abstand schwierigste aber auch interessanteste Fach des Semesters. Hier ging es hauptsächlich um endliche Automaten und formale Grammatiken, sowie der Frage, was man damit alles machen kann oder was nicht (es gibt ja verschieden mächtige Rechenmodelle wobei die Turingvollständigkeit dem Maximum entspricht). Die anderen Fächer empfand ich als nicht sonderlich fordernd, sodass ich meist auch nicht zu den Vorlesungen hingegangen bin (Zu dem Zeitpunkt musste ich auch noch pendeln). In Programmieren wurde Java gelehrt, dass ich mir bereits vorher mit dem sehr für die Vorlesung zu empfehlenden Buch Grundkurs Programmieren in Java(Ref-Link: Einnahmen werden an den WWF gespendet)angeeignet hatte. Natürlich reicht es in diesem Fach nicht, einfach nur irgendwie programmieren zu können, sondern man muss auch Details wissen wie ‘Wie wird in Java eine Double-Wert codiert?’ und ein paar theoretische Konzepte (tatsächlich fallen hier auch genügend Studenten durch die glauben, nur weil sie in der Schule Java hatten und dort recht gut waren, bereits alles zu können). Die Vorlesung ist nicht Anfängerfreundlich. Algorithmen und Datenstrukturn wird sehr Anfängerfreundlich gehalten. Dadurch das ich damals schon die Videovorlesung der Uni Osnabrück durchgearbeitet hatte, war für mich nichts neues dabei.

 2. Semester

Im zweiten Semester folgten dann die Pflichtveranstaltungen Analysis, Programmieren 2, Theoretische Informatik 2, Logik und Computernetze 1, sowie die Wahlpflichtverantsaltungen Einführung in die Grundlagen der Technischen Informatik und Stochastik. Computernetze habe ich jedoch nur halbherzig gehört und mich dann von der Klausur wieder abgemeldet. Es verlief eigentlich ähnlich wie das erste Semester. Logik war interessant, aber für diejenigen die Theoretische Informatik schon gehört und verstanden haben relativ einfach. Theoretische Informatik 2 wurde erst so richtig interessant und ist bis heute, zumindestens vom Inhalt, mein Lieblingsfach. Hier ging es nun um was kann man überhaupt berechnen (z.B. Halteproblem) und was kann man effizient berechnen (u.A. die NP Problematik). Auch wenn man sich zu diesen Problemen sehr schnell naive Lösungen ausdenken kann, so erweisen sich die meisten davon doch als grundlegend falsch. Mit Einführung in die Grundlagen der Technischen Informatik bemerkte ich, dass, obwohl ich mit Arduinos immer sehr viel Spaß hatte, ich in den theoretischen Gebieten besser aufgehoben bin.

3. Semester

Im dritten Semester hörte ich Software Engineering 1, Technische Informatik 1, Betriebssysteme, Relationale Datenbanksysteme 1 sowie Programmieren für Fortgeschrittene und absolvierte mein Teamprojekt sowie ein Algorithmik Praktikum zu external Speicher Algorithmen. Desweiteren leitete ich als HiWi (bezahlter Studentischer Hilfswissenschaftler) eine kleine Übung für Theoretische Informatik, was auch Korrektur von Hausaufgaben und (bedingt)Klausur beinhaltete. Mit dem Gehalt war es mir nun möglich ein kleines Appartment in Uninähe anzumieten. Die Mietsituation hier in Braunschweig ist im Vergleich zu anderen Uni-Städten gut. Natürlich sind auch hier die Studenten-Wohnungen in Minutenschnelle vergeben, aber wer innerhalb von 15 Minuten nach Angebots-Erstellung anruft hat meist noch gute Chancen. Ich zahle etwa 250Euro(18.49qm, Bad+Küche, Balkon) warm was ungefähr dem Gehalt entsprach (wobei hier zu erwähnen ist, dass HiWi-Jobs gewöhnlich befristet sind und nicht das ganze Semster laufen). Ich hatte das Semester überfüllt und auch das Eingewöhnen im eigenen Haushalt forderte seinen Tribut, sodass ich Stressbedingt in der Klausurenphase krank wurde. Software Engineering schrieb ich noch mit letzter Kraft und schlechtem Ergebnis mit und musste Relationale Datenbanksystem und Programmieren für Fortgeschrittene abmelden. Programmieren für Fortgeschrittene(Wahlpflicht) habe ich dadurch nie geschrieben, da es noch genug(zu viele) andere interessante Vorlesungen gab, die ich hören wollte. In der Vorlesungsfreien Zeit fertigte ich noch ein Essay(zu finden in Dokumente) für Geschichte der Mathematik als Schlüsselqualifikation an.

4. Semester

Im vierten Semester stand das als Zeitfresser berüchtigte Software Entwicklungs Praktikum(SEP) an in dem man in einem Team ein mittelgroßes vorgegebenes Softwareprojekt umsetzen musste. Ich began das Nebenfach Mathematik mit der Vorlesung Graphentheorie, hörte regulär Algebra, Technische Informatik 2 und Computernetze 1(da in 2. abgebrochen), und war wieder als HiWi für Theoretische Informatik tätig. Das SEP machte ich am Algorithmik-Institut zu dem ich im Vorsemester durch das Praktikum schon Kontakt hatte. Das Team war mit 11 Leuten sehr groß und bis auf eine Person sehr fleißig und kompetent (Alles reine Informatiker und IST’ler). Tatsächlich hatten wir so viel Spaß, dass wir viel mehr machten, als zum Bestehen verlangt gewesen wäre. Algebra und Technische Informatik musste ich zeitbedingt abmelden. Da ich aber noch Relationale Datenbanksysteme 1 aus dem Vorsemester schreiben musste (Die ‘Nachschreibe’-Klausuren sind immer ganz am Ende der Vorlesungsfreien Zeit, sodass man viel Zeit hat), kam ich trotzdem noch auf genügend CP für ein gelungenes Semester.

5. Semester

Im fünften Semester musste ich ordentlich CPs gut machen um den Rücken frei für die Bachelorarbeit im 6. Semester zu haben. Zwar ist es vorgesehen, dass man etwa 3 Vorlesungen zusätzlich neben der Bachelorarbeit macht, dies halte ich jedoch für äußerst stressig. Ich hörte also Einführung in Algorithm Engineering(Wahlpflicht), Information Retrieval and Web Search Engines (Aus dem Master vorgezogen), Algorithmische Graphentheorie (Nachfolgeveranstaltung zu Graphentheorie, Nebenfach Mathematik) und holte Technische Informatik und Algebra aus dem Vorsemester nach. Zusätzlich kommt noch Ethnomathematik als Schlüsselqualifikation. In diesem Semester war ich als HiWi für Relationale Datenbanksysteme 1 tätig, da dieser Job leichter und besser bezahlt war (und weil RDB1 neben Theoretische Informatik als die schwersten Fächer gelten und es sich irgendwie gut anfühlt für beide als HiWi tätig gewesen zu sein. Zusätzlich kannte ich auch die dafür zuständige Person). Auch ein Seminar(Paper schreiben und Vortrag halten) habe ich in diesem Semester belegt, auch wenn dies in Einführung in Algorithm Engineering viel besser trainiert wurde. In Einführung in Algorithm Engineering wurde man in 3-4er Gruppen aufgeteilt und musste sich intensiv mit einem Algorithmischen Problem auseinandersetzen, hierzu Paper schreiben und Vorträge halten. Hierbei hatte ich wieder sehr viel Spaß und die Entscheidung getroffen, mehr in Richtung Algorithmik zu gehen. Zusätzlich habe ich einen einem ‘echten’(auch wenn nicht sonderlich wichtigen) Paper mitgewirkt, das auf unserem SEP basierte. Nebenbei habe ich mich zusammen mit einem Mitstudenten durch regelmäßige Treffen mit einem Professor in der Algorithmik um ein interessantes Thema für die Bachelorarbeit bemüht.

6. Semester

Wird derzeit absolviert.

 

Fazit

Ich persönlich habe, obwohl ich ein fragwürdiges Abitur habe, einen ziemliche glatten Studienverlauf mit größtenteils sehr guten Noten. Dies liegt wohl hauptsächlich daran, dass ich Spaß an der Thematik habe und auch einen Abschluss haben will, mit dem ich später machen kann, was mir Spaß macht. Viele Studienverläufe sehen wohl ein wenig schlechter aus, weil es wohl falsche Vorstellungen oder Motivationen vom Studium gab. Ich bin nie durch eine Klausur durchgefallen, obwohl eine Durchfallquote von 50% durchaus nicht ungewöhnlich ist. Ich schätze allerdings das die Durchfallquote durch einige Studenten generiert wird, die sehr oft durch Klausuren fallen. Ein Großteil der Studenten die ich kenne, sind ebenfalls noch nie durch eine Klausur durchgefallen.

Abschließen möchte ich diesen Beitrag nun mit klassischen Pros und Cons.

Pros:

  • ‘Gute’ Wohnungssituation in Braunschweig. Es ist zwar auch nicht einfach aber möglich günstige und gute Wohnungen zu bekommen
  • Natürlich können nicht alle Vorlesungen mit denen der ‘Elite’-Universitäten mithalten, aber es gibt auch hier einige sehr gute Vorlesungen und die meisten Vorlesungen sind zu mindestens ok. Letztendlich gibt es in der Informatik sowieso sehr viel gute Literatur und auch viele Vorlesungen andere Universitäten auf Video. Zusätzlich gibt es an der TU nur relativ wenige Informatik Studenten, sodass es hier eine Betreuung gibt, die die meisten anderen Universitäten nicht bieten können.
  • Es gibt keine ‘Aussiebe’-Klausuren. Zwar haben die meisten Klausuren eine recht hohe Durchfallquote von teils über 70%, aber es ist eigentlich immer möglich sich auch als Normalsterblicher mit 30h pro CP auf die Klausur so vorzubereiten, dass man gut bestehen kann. Gerade am Anfang sind viele Klausuren recht leicht, sodass man auch mit relativ wenig Aufwand und Verständnis bestehen kann. Viele ruhen sich darauf aus und versuchen nur mit dem Durchrechnen alter Aufgaben sich auf die Klausur vorzubereiten. Dies führt dazu, dass ihnen grundlegendes Verständnis fehlt und auch ihre Lernmethode bei den späteren Klausuren nichtmehr hinlangt.
  • Auch ein durchschnittlicher Student bekommt hier, wenn er will, einen HiWi-Job. Diese werden mit etwas unter 9Euro/Stunde bezahlt und sind meist auch lehrreich (Also man kriegt Geld anstatt CP.). Als Masterstudent bekommt man dann mehr Geld.

Cons

  • Es gibt auch schlechte Vorlesungen, die keinen Spass machen. Ich persönlich kann mich an zwei erinnern. Allerdings sind 2 Vorlesungen nicht die Welt, den meisten anderen Studiengängen dürfte es schlechter gehen.
  • Gewisse Studenten werden nicht rechtzeitig ausgesiebt, sodass diese in das SEP-Team u.Ä. geraten können.

Dieser Artikel ist subjektiv und kann eventuell an manchen Stellen gar falsch sein. Ich persönlich finde Erfahrungsberichte immer interessant, was auch der Grund war, diesen zu schreiben. Fragen, Anregungen, Korrekturen oder eigene Erfahrungen sind hier gerne gesehen.

Veröffentlicht unter Studium | Hinterlasse einen Kommentar

Printing Course Slides

The most PDF-Reader do not support good arrangements for slides.

The most PDF-Reader do not support good arrangements for slides.

If you want to print your slides with Linux you have not that much choice how to arrange them. For 4:3-Slides, which should be the most common, 2×4 slides per page would be ideal. Unfortunately the print-menu of the most PDF-Viewer do not have this configuration.
Also it would be nice if there could be some extra space for the punch holes. And since we want to print double-sided to save paper (and to let it look less. It’s hard to motivate yourself with a thick bunch of paper.), the extra space has to be different for the even and the odd pages.

A optimal page usage with extra space for the punch holes. The content of the slides can be ignored. It's simply the first set of slides I found and not the best.

A optimal page usage with extra space for the punch holes. The content of the slides can be ignored. It’s simply the first set of slides I found and not the best.

A simple tool to generate such a printable PDF is pdfnup out of the pdfjam package. The used command is

pdfnup --twoside --nup 2x4 --suffix '2x4' --no-landscape --offset '0.8cm 0cm' --scale '0.95' slides.pdf
  • –twoside
    We want to print two-sided. If your printer does not support that, you can simply print first all odd pages and afterward you put the printed pages back into the printer and print the even pages on their backside.
  • –nup 2×4
    For the 2×4 arrangement.
  • –suffix ’2×4′
    The output-file will have ’2×4′ as suffix
  • –no-landscape
    If you want to print landscape you can write –landscape but then the 2×4 arrangement would be very bad.
  • –offset ’0.8cm 0cm’
    The offset for  the punch holes. 0.8cm for the side with the punch holes and 0cm for the other
  • –scale ’0.95′
    Maybe you have to vary the scale if the single slides are too big or small.
  • slides.pdf
    The input file
Veröffentlicht unter Studium | Verschlagwortet mit , | Hinterlasse einen Kommentar

Getting notified of exam results posted on webpages

The waiting for exam results is often very consuming. If they are going to be posted on the webpage of the course you are probably refreshing the page every hour for sometimes a long time. I can remember one exam, where the expected publication was unknown and took nearly two months. The exam has been corrected on the same day by the assistants ,and this was known to us, but for some reason the publication has been delayed. Since the nervous refreshing is very bad for your health it would be better to let your computer look for updates and tell you if the results are available.

Finding a tool that is able to control all updates if they really contain the results is actually not that easy, but for being notified for all updates is. Since it is very likely that if the website is getting updated, it really contains the results, we should be satisfied with that. A simple tool for that is the Firefox-Addon Update Scanner.

This message is shown, if a scanned webpage has been updated.

This message is shown, if a scanned webpage has been updated.

Chosing a page to be scanned for update is very easy. You only have to visit the page, do a right-click and chose the entry ‘Scan Page For Updates…’ . Afterwards you define a limit for symbols being ignored (such as if the webpage prints dynamically the actual date). If there is no dynamic content you should disable this function, so you wont miss an update.
Chosing a page can be made by a right mouse click.

Chosing a page can be made by a right mouse click.

The configuration after the right mouse click

The configuration after the right mouse click

After you have configured the scanner for the page you can lean back and wait for your results. If the page has been updated you will see the notification from above and the page will be opened with the changes highlighted in yellow.
The changes are marked in yellow.

The changes are marked in yellow.

For other browser there are similar extensions.
Veröffentlicht unter Studium | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Einfaches Arduino-UserInterface mit 16×2-Display

The English translation may be not complete, since I just started to write bilingual, and also not very good.
While Text-Output on 16×2 Character-Displays with LiquidCrystal is quite easy, input is a little bit harder. Hence you are often coding the parameters hard and flash the arduino for every value new. To expand the lifetime of my Arduino I wrote a little library for simple Input. You need only a display, compatible with the LiquidCrystal-Library, and 5 Buttons (LEFT, RIGHT, UP, DOWN, SELECT) which you can implement as you like.

The mainfunctions are for example a Menu, Numberinput, Textinput and Percentinput. Also the buttons can be accessed easily and assigned functions.

Examples of user

Menu:

display16x2-menu

A simple menu where you can chose between entries. You can navigate through it using the UP and DOWN keys. If you have reached the desired entry you can select it with SELECT or RIGHT. Use LEFT to abort.

 

char *menu[] = {"Entry A", "Entry B", "Entry C", 0}
switch(simpleui.showMenu("Titel", menu)){
   case 0: //Entry A
      ...
   case -1: //Abbruch (en: abort)
...

Percent:

display16x2-procent

A function to input percent-values, for example the volume. With LEFT and RIGHT you change in 10% steps, with UP and DOWN in 1% steps. You can set a function, which is called everytime the value changes (to play a sound with the new volume etc.).

 

int p = simpleui.getPercent("Titel", 63, onVolumeChange);
...
void onVolumeChange(uint8_t p){
   //Spiele Beispielton
}

Texteingabe:

display16x2-textEine sehr primitive Texteingabe wie sie von Spielekonsolen(“Please enter your name”) bekannt ist.  Mit LEFT/RIGHT wird die Position geaendert und mit UP/DOWN das Symbol veraendert. Mit SELECT wird die Eingabe abgeschlossen. Es koennen klein und Grossbuchstaben sowie Zahlen und Leerzeichen eingegeben werden. Ein Erweiterung um die erlaubten Symbole selber zu setzen ist geplant.

char buffer[20];
simpleui.getString(buffer, 20);

Nummerneingabe:

display16x2-numberEine relativ schnelle Eingabemethode von Nummern. Ueber LEFT/RIGHT wird der Summand veraendert (Zehnerpotenz 1,10,100,…) und mit UP/DOWN der Summand addiert oder subtrahiert. Mit SELECT  wird die Eingabe abgeschlossen.

 

int i = simpleui.getUInt();

 

Configuration

First you have to initalize LiquidCrystal by creating the specific object. The parameter are the pins for controlling the display. You will find them in the manuals or homepage for your display.
LiquidCrystal lcd(8,9,4,5,6,7);
In the next step you create the SimpleUI16x2-object which you give the LiquidCrystal-object and a function to query the buttons.
LiquidCrystal lcd(8,9,4,5,6,7);
SimpleUI16x2 simpleui(&lcd,getButton);

//The Button function you have to define by yourself
uint8_t getButton(){
	int adc_key_in = analogRead(0);
	if (adc_key_in > 790) return BUTTON_NONE;
	if (adc_key_in < 50) {
		return BUTTON_RIGHT;
	}
	if (adc_key_in < 195) {
		return BUTTON_UP;
	}
	if (adc_key_in < 380) {
		return BUTTON_DOWN;
	}
	if (adc_key_in < 555) {
		return BUTTON_LEFT; 
	}
	if (adc_key_in < 790) {
		return BUTTON_SELECT;  
	} 
	return BUTTON_NONE;
}
Now you should be able to use the UserInterface. You should take a look at the example in the library.

 

Download

You will find the library in git under https://github.com/dserv01/SimpleUI16x2.

To use the library you have to move the folder SimpleUI16x2 into the folder libraries of your Sketchbook-Folder. If this Folder doesn’t exist yet, you can simply create it. Maybe you also need the LiquidCrystal-Libary, if it is not included in your Arduino-Installation by default.

./sketchbook/libraries/SimpleUI16x2/SimpleUI16x2.h
./sketchbook/libraries/SimpleUI16x2/SimpleUI16x2.cpp 
./sketchbook/libraries/SimpleUI16x2/examples/MenuExample/MenuExample.ino

Die Library befindet sich noch im Aufbau und wird in der naechsten Zeit, ebenso wie dieser Artikel fertiggestellt.

Veröffentlicht unter Arduino | Hinterlasse einen Kommentar