Stanford KI-Kurs
Stanford bietet von September bis Dezember eine KI-Vorlesung als offene Online-Version an (via). Das Video zeigt ein paar der Inhalte:
Mich erinnerte es sehr an meine KI-Vorlesung. Klar, wir sind nicht mit Robotern durch die Stadt gefahren, aber die gezeigten Inhalte hatten wir größtenteils. Und er basierte auf dem gleichen Buch, was wohl wirklich das Standardwerk ist (Artificial Intelligence: A Modern Approach).
Was mir wieder klar machte, wie toll ich das Thema finde. KI ist nicht einfach eine simple Untermenge der Informatik. Wenn Informatik das Beherrschen von Informationen, das algorithmische Lösen von Problemen ist, dann ist das genau die Definition der KI. Die Algorithmen der schwachen KI haben mehr als andere den Ansatz, ein Problem generisch zu lösen statt es direkt lösen zu lassen, oder sind eher das Zusammenspiel von Algorithmen zur generischen Lösung eines Problems.
Beispiel Schach. Um dafür eine Lehrbuch-KI zu schreiben ist zwar Unmengen an Können notwendig, doch eigentlich braucht man "nur" eine eine performante Min-Max-Variante, plus den nötigen Optimierungen um der Komplexität beizukommen. In denen liegt dann die Schwierigkeit, aber Min-Max selbst ist ein sehr simpler Algorithmus, der einfach alle möglichen Varianten durchgeht und dann den Zug wählt, der für den Spieler das beste Ergebnis hat. Der Pseudocode hat 5 Zeilen.
Daher sah ich KI als praktisches Anwenden des Algorithmik-Kurses (der selbst schon ziemlich praxisbezogen war) und als Versuch, Probleme geschickt zu lösen. Da wird kein Data erschaffen, sondern Spiele gespielt, was nichts anderes als Problemlösen ist.
Und Problemlösen, darum geht es doch immer. Deshalb ist das Ansehen des Stanford-Kurs für die meisten Informatiker und Programmierer, die einen solchen Kurs noch nicht gehört haben, wahrscheinlich eine gute Idee.
PC-Kombo: Neue Hardware, neuer Benchmark
Das ist jetzt ein typischer Fall von Entwickler != Nutzer. Von meiner Position aus hat sich in der neuen Version des Hardwareempfehlers sehr viel verändert. So ist zum Beispiel die Architektur eine andere (an die jetzige Aufgabe zugeschnitten statt universeller Konfigurator) und die Datenbank SQL statt einer Objektdatenbank, was bessere Updates ermöglicht. Doch von außen? Sieht es erstmal gleich aus.
Also doch ein paar Worte zu eher internen Änderung.
Neue Hardware
Der Prozessor A8-3850 ist ziemlich neu, Amazon listet erst zwei Modelle der Reihe. Im Empfehler ist er schon drin.
Ich werde nicht jedes neue Update von Hardware ankündigen, es ist klar, dass regelmäßig neue Hardware eingepflegt werden muss. Aber man kann an diesem sehen, dass das Einpflegen neuer Hardware generell gut und potentiell schnell funktioniert.
Neuer Benchmark
Bisher basierten die Empfehlungen auf dem Benchmark Passmark. Die Performance von Hardware über generische Benchmarks zu ermitteln ist problematisch, denn das Benchmarkergebnis sagt nicht unbedingt etwas über die tatsächliche Leistung in echten Anwendungen (wie Spielen) aus. Manche der Passmark-Positionen sind auch eher fragwürdig (wenige, zum Glück).
Am liebsten wäre mir ein Spielebenchmarks der drei letzten Grafikmonster, jeweils eine CPU mit allen Grafikkarten und alle Prozessoren mit einer Grafikkarte.
Machbare Alternative ist ein Metabenchmark, die Ergebnisse mehrerer Benchmarks nehmen und kombinieren. Und deshalb basieren die Empfehlungen jetzt zusätzlich auf Futuremark, auch wenn die Seite das noch nicht anzeigt.
Das wars, zumindest mit den wahrnehmbaren Änderungen.
Wobei, eine optische Änderung gibt es doch noch. Unten rechts im Footer ist ein kleiner +1-Button eingebunden. Wäre toll, wenn auf den noch ein paarmal geklickt werden würde.
Vorschlag s9y-Redesign
Was ich hier noch gezeigt haben wollte, ist mein Entwurf einer neuen s9y-Projektseite:
Der Protoyp nutzt HTML5/CSS3, und zwar einige der neueren Funktionen. Gradients für den Hintergrund, column-count für die zweispaltige Featureliste, das details-Element für die FAQ.
Ich wollte die neuen Techniken mal einsetzen. Aber das Endergebnis sollte keine Technikdemo sein, sondern ein Versuch, Serendipity besser zu präsentieren. Deshalb habe ich überhaupt so weit gearbeitet und auch die Texte angepasst.
Man sieht das vielleicht an den beiden Feature-Seiten:
Die alte Seite ist ja nicht grausam, aber ich finde die neue präsentabler. Generell bin ich mit dem Prototypen bis jetzt recht zufrieden.
Aber es ist nur ein Prototyp, nichtmal eine Alpha-Version. Das Design und die Überarbeitung der Inhalte müsste in ein CMS getragen werden, s9y dafür wahrscheinlich angepasst. Das klingt im Forum nach ner Menge Arbeit und ich bin nicht sicher, ob wir oder ich das umsetzen.
Der eigene Desktop 2
Phil hat in einem Kommentar zum ersten Artikel auf weitere Aufgaben hingewiesen, die eine Desktopumgebung übernimmt. Teilweise sind das Punkte, die bei mir nicht wichtig sind, denn ich verbinde den eigenen Desktop mit der Nutzung des Terminals. Trotzdem, es geht auch grafisch oder zumindest automatisch, und zwar hauptsächlich mit Software aus den Quellen.
Monitor-Konfiguration
arandr kann den Monitor grafisch konfigurieren. Zugegeben, wirklich schön ist dieses große Fenster nicht, wenn man nur mal kurz die Auflösung umschalten will. Aber für mehrere Monitore ist das sicher nett. Einstellungen können gespeichert und auch ohne das Programm ausgeführt werden, sodass man es nicht jedes mal neu starten muss.
Standard-Anwendungen festlegen
galternatives ist eine Gui für das Alternativen-System. Auch es wirkt sperrig, erfüllt aber seinen Zweck.
Netzwerkkarte konfigurieren
Wicd ist ein Netzwerkmanager und eine vollwertige Alternative zu denen der Desktopumgebungen. Hier kann ich mir auch die Abwiegelungen sparen, denn es macht direkt einen guten Eindruck: Grafisch ansprechend, übersichtlich, mit einem helfenden Tray-Icon. Keine schlechtere Alternative.
USB-Sticks mounten
Automatisch mounten ja, Automatisch unmounten, nein (kennt jemand eine bessere Alternative?) Aber immerhin, ein Anfang. Udiskie kann das und nutzt sogar OSD-Nachrichten. Anders als bei den Vorschlägen oben: Die Einrichtung ist nicht grafisch und die Software nicht in den Quellen.
Installation
Die aktuelle Version herunterladen, entpacken.
sudo python setup.py install
im entpackten Ordner ausführen.
Eventuell muss der Fenstermanager in einer consolekit-session gestartet werden, bei mir sieht die .xinitrc nun so aus:
exec ck-launch-session /usr/bin/icewm-session
Danach kann bin/udiskie gestartet werden und der eingesteckte USB-Stick sollte automatisch eingebunden werden. Mit
bin/udiskie-umount -a
werden alle eingebundenen Datenträger ausgehängt, was man sich natürlich in irgendein Menü legen kann.
Ausklappbare Elemente ohne JS
HTML5 bringt wirklich ein paar nette Spielereien mit. Nette Elemente wie details. Ist in einem details-Element ein summary-Element, wird erstmal nur dieses angezeigt, nach einem Klick jedoch erscheint der restliche Inhalt.
<details><summary>Zusammenfassung </summary> <p> Text </p> </details>
zeigt also erstmal nur das Wort Zusammenfassung und einen Pfeil nach unten.
Demo:
Zusammenfassung
Versteckter Text
Peter Kröner formuliert Zweifel (via), ob das schwer anpassbare Element außerhalb von Prototypen genutzt werden wird. Ein in meinen Augen toller Anwendungsfall sind FAQs. Die statt mit Überschriften und Absätzen mit semantisch passenden Elementen wie dl und dt zu bauen gefiel mir schon länger, aber sie nun ohne Javascript zusammenklappbar zu haben hat auch was.
Gescheiterte Spiele
Ich lese jedes Buch durch. Gut, das war gelogen. Das Parfum habe ich tatsächlich nach wenigen Seiten weggelegt und nie wieder angerührt (und folglich auch nicht den Film geschaut). Aber sonst werden Bücher immer fertiggelesen, denn würde mich die Geschichte nicht interessieren, hätte ich es nie angefangen.
Bei Spielen ist das anders. Da passiert es schonmal, dass ein Spiel mittendrin abgebrochen wird. Oder dass der Anfang nicht fesselt, nach einer Stunde schon das Spiel scheitert. Eine bewusste Formulierung, denn auch wenn oft davon gesprochen wird, dass jemand an einem Spiel scheiterte wenn der es nicht durchspielte, ist es doch eigentlich das Spiel, das den Spieler nicht binden konnte.
Überforderung
Das klassische Beispiel ist die eine unschaffbare Mission. Das hatte ich so oft, dass ich mich mehr an das Gefühl als an das konkrete Beispiel erinnere. Bei Gungirl der Endgegner, der zwar durchaus Energie verliert, aber wenn ich sterbe noch viel zu viel hat um den zehnten Anlauf zu rechtfertigen. Bei Swine das Dorf, das mit unterlegenen Truppen & Minen gehalten werden soll, aber immer zerstört wird. Bei Prince of Persia: Warrior Within der zweite Zwischengegner, der den Kampf immer gewinnt. Oder bei Super Metroid die Doppelsprungstelle, die mit dem mittelmäßigen PC-Gamepad nicht zu machen ist: Die überfordernden Brocken mittendrin, nach denen vielleicht wieder viel einfachere Spielzeit kommt, hindert das Durchspielen von so vielen Spielen. Ich bin sicher, da kennt jeder seine eigenen Geschichten.
Monotonie & Unbalance
Mein mir deutlichstes Beispiel sind alle Spiele der "Total War"-Reihe. Ich mag die Serie und fang sie immer wieder an. Aber seit dem ersten Medieval folgen meine Kampagnen dem gleichen Muster: Mein Reich wird groß, dann erobere ich eine entfernte Stadt wie Jerusalem, die einfach nicht gehalten werden kann. Immer wieder brechen da trotz riesiger Garnison Aufstände aus.
Wo ist das Problem, einfach etwas langsamer wachsen! Das nahm ich mir auch für meine letzte Rome-Kampagne vor. Das verkorkste Diplomatie-System macht den Plan unmöglich. Trotz jahrelanger Bündnistreue und null Aggression werden Allianzen gebrochen, von inzwischen völlig unterlegenen Gegnern, die trotz wirklich guten Verhandlungsangeboten nicht aufgeben. Selbst wenn nur noch zwei Städte über sind und eine große Armee vor der Tür. Und schwupps, schon ist doch wieder ganz Europa eingenommen und das Reich im Grunde zu groß.
Wenn dann noch am Ende jeder Zug Stunden braucht, um dann doch nur festzustellen, dass das Reich an den Rändern zusammenbricht und Diplomatie wieder versagt: Dann wird die Kampagne wieder zugunsten eines anderen Spiels zurückgestellt.
Unspielbarkeit
X3. Durch den zweiten Teil habe ich mich damals durchgebissen, hatte aber auch kein anderes Spiel als Alternative. Doch beim dritten Teil ließ mich das Tutorial so alleine, wurden mir die Grundzüge der Steuerung nicht klar und auch nicht, wo ich eigentlich hinsoll, dass trotz der guten Erinnerung an den Vorgänger das Spiel seit sehr langer Zeit etwa eine Stunde Spielzeit verbuchen kann.
Und wahrscheinlich nie wieder angerührt wird. Das hat dann doch wieder sehr viel Ähnlichkeit mit dem Buch, das nach den ersten Seiten keine Chance mehr hat.
Transparenter farbiger Hintergrund für Conky
Normalerweise kann Conky einen farbigen Hintergrund, echte Transparenz oder Pseudotransparenz nutzen, nicht gesetzte Farbe und Pseudotransparenz zugleich.
Wie man auf dem Bild sehen kann: Es geht doch beides. Dafür bindet man dieses lua-skript ein (via):
--[[ Background by londonali1010 (2009) This script draws a background to the Conky window. It covers the whole of the Conky window, but you can specify rounded corners, if you wish. To call this script in Conky, use (assuming you have saved this script to ~/scripts/): lua_load ~/scripts/draw_bg.lua lua_draw_hook_pre draw_bg Changelog: + v1.0 -- Original release (07.10.2009) ]] -- Change these settings to affect your background. -- "corner_r" is the radius, in pixels, of the rounded corners. If you don't want rounded corners, use 0. corner_r=10 -- Set the colour and transparency (alpha) of your background. bg_colour=0x000000 bg_alpha=0.4 require 'cairo' function rgb_to_r_g_b(colour,alpha) return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha end function conky_draw_bg() if conky_window==nil then return end local w=conky_window.width local h=conky_window.height local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, w, h) cr=cairo_create(cs) cairo_move_to(cr,corner_r,0) cairo_line_to(cr,w-corner_r,0) cairo_curve_to(cr,w,0,w,0,w,corner_r) cairo_line_to(cr,w,h-corner_r) cairo_curve_to(cr,w,h,w,h,w-corner_r,h) cairo_line_to(cr,corner_r,h) cairo_curve_to(cr,0,h,0,h,0,h-corner_r) cairo_line_to(cr,0,corner_r) cairo_curve_to(cr,0,0,0,0,corner_r,0) cairo_close_path(cr) cairo_set_source_rgba(cr,rgb_to_r_g_b(bg_colour,bg_alpha)) cairo_fill(cr) end
Irgendwo gespeichert, z.B. in ~/scripts/conky_draw.lua,wird es dann in der ~/.conkyrc aufgerufen:
lua_load ~/scripts/conky-draw.lua lua_draw_hook_pre draw_bg
Der eigene Desktop
Eine Erweiterung des Wikiartikels und Sammlung meiner Anpassungen
In Zeiten von Gnome 3, Unity und generell variierenden Vorstellungen davon, wie der Desktop aussehen soll, kann man entweder sich mit den vorgegeben Lösungen begnügen (und einige Konzepte sind ja auch wirklich gut) oder sich einen eigenen Desktop zusammenstellen. Das gehört zu den Freiheiten, die Linux im Gegensatz zu Windows bietet. Es ist aber nicht immer einfach, den Überblick über alle möglichen Komponenten zu bewahren. Das fängt mit der Frage an: Was braucht man überhaupt?
Fenstermanagment ist der erste Punkt, den man als Anfänger wahrscheinlich übersieht. Fenster mit Titelleiste und Kontrollen anzeigen, bewegen, minimieren und schließen: All das übernimmt der Fenstermanager. Zusätzlich stellt er normalerweise virtuelle Desktops bereit.
Man braucht eine Übersicht der laufenden Programme, der offenen Fenster, eine Traybar für Trayicons (z.B. für Pidgin), aber auch so profane Dinge wie eine Uhr, ein Hintergrundbild, und meiner Meinung nach gehört auf jeden Desktop eine Last- und Netzwerkanzeige (um mitzubekommen, dass das eben gestartete Programm gerade lädt/der Download im Hintergrund noch läuft). Und jeder wird irgenwie Dateien verwalten wollen.
Ein Ziel kann sein, all dies mit eigenständigen Programmen zu erreichen. Und diese dann jeweils passend aussehen zu lassen.
Fenstermanager
Am besten geeignet ist wohl eine Fenstermanager, der relativ wenige eigene Elemente mitbringt. Eine Möglichkeit: IceWM mit ShowTaskBar=0 in der ~/preferences. Designs für die Fensterleisten und Rahmen finden sich bei box-look. Oder direkt Compiz nehmen. Praktisch wäre es, wenn einem bewusst ist, wie der Fenstermanager beim Start Programme mitstarten kann.
Compositor
Inzwischen haben viele Fenstermanager einen Compositor eingebaut, sodass sie über die Grafikkarte Transparenz und andere Effekte zeichnen können. Das wird von vielen Docks und Desklets benutzt, die Animationen können aber auch beim Schließen/Starten von Fenstern, durch Schatten oder beim Wechsel der Arbeitsflächen angenehm wirken. Nachrüsten kann man ihn auch: Der xcompmgr funktioniert nicht schlecht, etwas aufwändiger (mit direkt mehr Animationen, Tayicon und grafischer Konfiguration) ist der Cairo Composite Manager, der allerdings nicht in den Quellen liegt.
Programmliste
Ein Dock passt hier ganz gut, man kann aber natürlich auch ein vollständiges Panel wie tilt2 nehmen. Docks gibt es in allen Varianten, von kleinen wie Docky und SimDock, die wirklich nur Programme anzeigen, zu Cairo-Dock und AWN, die aufwändigere Effekte beherrschen und ihre eigenen Widgets beinhalten (und so Systray/Uhr/Arbeitsflächenwechsler ersetzen können)
Tray
Wer ein kleines Dock gewählt hat, hat für den Tray wenig Alternativen. Ich kenn sogar nur eine: stalonetray. Es macht genau, was es soll: Icons aufnehmen, nicht mehr. Über die ~/.stalonetrayrc kann man es anpassen, es z.B. transparent und leicht grau machen:
transparent 1 tint_level 100 tint_color black
Starter
Was aber nun mit Programmen, die noch nicht im Dock sind? Jedes mal ein Terminal aufmachen ist ätzend. Von Desktopumgebungen kennt man Alt + F2 als Shortcut, um Programme über eine Eingabezeile zu starten. Eigenständge Alternative dazu ist grun, das sehr gut Befehle vervollständigt. Das kann icewm per ~/.icewm/keys auf eine beliebige Tastenkombination legen, z.B. Strg + Space:
key "Super+Space" grun
Uhr/Datum
Viele Alternativen hier. Ich schaute mir zuerst Cairo-Clock an, kam darüber zu Desklets und wählte schließlich conky. Um damit nur Datum und Uhrzeit anzuzeigen, lässt man im TEXT-Abschnitt der ~/.conkyrc nur diesen Code stehen:
${time %T, %d.%m.%Y}
Dazu sollte man update_interval 1.0 in den oberen Teil der Konfiguration setzen.
Lastanzeige
Die Auslastung der CPU kann man wohl mit jedem Deskletprogramm anzeigen lassen. Ich habe das mit Conky und kombiniert mit einer Netzwerkanzeige schonmal beschrieben.
Benachrichtungen
Nicht unbedingt nur fürs Aussehen ist das Nachrüsten von Notify-OSD. Es sieht auch gut aus, wenn die Benachrichtigungen am gleichen Fleck, schwarz und transparent sind, aber hinter der Unaufdringlichkeit der Benachrichtigungen steckt auch ein Konzept.
Dateimanagement
Auch so etwas, was bei einer Desktopumgebung direkt mitgeliefert wird, was man schnell mal vergisst. Zum glück ist es kein Problem, Nautilus oder einen anderen Dateimanager einfach mitstarten zu lassen - oder aber ein transparentes Terminal auf einer Arbeitsfläche offenzulassen.
Desktophintergrund
Hier gibt es wirklich viele Alternativen, wenn der Dateimanager das nicht sowieso miterledigt.
GTK-Design
Das Aussehen sehr vieler Programme wird über das gewählte GTK-Design bestimmt. Hier ein passendes auszuwählen beeinflusst also viel. Außerdem ist auch dies ein Punkt, bei dem eine Desktopumgebung meist ein passendes wählt, während ohne diese Anpassung der Desktop erstmal grau wirkt. Dabei gibt es durchaus schöne Sammlungen.
Beim Schreiben bin ich fast ein bisschen erschrocken, wie viel insgesamt zu berücksichtigen ist. Und dabei gehört zum eigenen Desktop noch mehr, nämlich die normalen Programme (Musikplayer, Browser usw.)
PC-Kombo in etwas neu
Der Hardwareempfehler hing auf einem Server fest, zu dem ich nicht mehr wirklich Zugang hatte, sodass die neue Version nicht erscheinen konnte. Dann war die Seite auch noch down. Nun ist die neue Version auf einem anderen Server mit neuem Design, kürzerer Ladezeit und frischer(er) Hardware:
Keine Mainboards, weil ich immer noch keine gute Datenquelle dafür gefunden habe. Die Amazon-Api hat sich dafür bisher als zu ungenau erwiesen.
Rückmeldung wie immer erbeten: Über einen Bug gestolpert? Gefällt das Aussehen?
Manpages mit Highlighting
Bisher noch nicht untergekommen ist mir dieser Tipp: Farbige Manpages. Statt die manpages durch less zu pipen kann most gewählt werden, wodurch die manpage dann so aussieht:
Per most
Das Paket most installieren und danach über das Alternativensystem setzen:
sudo update-alternatives --config pager
Update: Per less
Auch less kann die Manpage farbig darstellen, das erklärte Daria in den Kommentaren. Dafür führt man diese Befehle aus:
export LESS_TERMCAP_mb=$'\E[01;31m' export LESS_TERMCAP_md=$'\E[01;31m' export LESS_TERMCAP_me=$'\E[0m' export LESS_TERMCAP_se=$'\E[0m' export LESS_TERMCAP_so=$'\E[01;44;33m' export LESS_TERMCAP_ue=$'\E[0m' export LESS_TERMCAP_us=$'\E[34m'
Um das zu automatisieren, kann man die in die ~/.bashrc schreiben.
PS: In den Kommentaren wurde vim als Alternative vorgeschlagen und ein PDF-Export gezeigt. Danke an die Kommentatoren :)
Simdock weiterentwickelt
Simdock ist ein ziemlich simples Dock für Linux. 2007 war der letzte Commit im svn, der Autor antwortet nicht auf Mails, das Projekt ist also tot. Simdock ist aber auch relativ hübsch und ausreichend und es war das einzige Dock, das mir Transparenz bot - die ganzen Compositing-Docks wie Cairo-Dock hatten bei mir nur einen schwarzen Hintergrund. Ausnahme war Kiba, das Pseudo-Transparenz simulieren kann, aber das stürzte wiederholt ab. Also wählte ich Simdock für meinen Desktop.
Tot wie das Projekt nunmal war fehlten dann aber doch ein paar Features, wie das Hinzufügen von Startern ohne Anpassen der Konfigurationsdatei. Vor allem aber war der Hintergrund an gconf gebunden, ein Wechseln des Desktophintergrunds ohne Änderung dort wurde nicht bemerkt, was ohne Gnome etwas unpraktisch ist. Daher habe ich das Projekt geforkt und versucht, die Mängel auszubessern. Zu finden ist das neue Simdock auf github.
Installation
Entweder man kompiliert es selbst:
Zuerst installiert man die Pakete libwxgtk2.8-dev libwxgtk2.8-0
Dann:
git clone git://github.com/onli/simdock.git cd simdock ./configure make sudo checkinstall oder sudo make install
Alternativ kann man unter 32-Bitsystemen auch dieses per checkinstall erstellte .deb versuchen:
Änderungen
- Statt gconf zu beobachten wird das Hintergrundbild von X direkt ausgelesen und Änderungen dort beobachtet
- Drag & Drop der Icons direkt aktiviert
- Tooltipps mit den Programmnamen beim Hovern der Icons
- Offene Programme können per Rechtsklick-Menü in einen Starter umgewandelt werden (wie bei Unity)
- Bugfix: Icons konnten verschwinden, wenn sie während des Verblassens angeklickt wurden
- Bugfix: Die id mancher Prozesse wurde nicht richtig gespeichert, sodass kein Icon gefunden wurde (z.B. Amarok)
Statistik mit Bash
Mittelwert, Median und Varianz, diese Kenngrößen von Messwerten brauchte ich. Da ich sowieso im Terminal unterwegs war schrieb ich mir schnell diese (teilweise ineinandergreifenden) Skripte zusammen - und schrieb sie selbst, weil die Messwerte aus negativen und Kommazahlen bestanden (und ich auf die schnelle keine damit zurechtkommende Implementierung fand).
Mittelwert
mittelwert.sh
#!/bin/bash #Calculate the mean of the arguments #Formula: sum_1_to_n(x_i)/n if [[ $# -eq 0 ]];then echo "No arguments found. Exiting." >&2 exit 1 fi sum=0 n="$#" while [[ "$#" -gt 0 ]];do value="$1" sum=$(echo "$sum + $value" | bc -l) shift done echo "$sum / $n" | bc -l
Median
median.sh
#!/bin/bash #Calculate the median of the arguments #Formula: Var(X)=x_(n/2) if n even # Var(X)=x_((n+1)/2) else if [[ $# -eq 0 ]];then echo "No arguments found. Exiting." >&2 exit 1 fi sorted_args=($(sort.pl $*)) n="$#" if [[ $((n%2)) -eq 0 ]];then mid=$((n / 2)) else mid=$(( (n+1) / 2)) fi mid=$((mid-1)) echo ${sorted_args[$mid]}
sort.pl
#!/usr/bin/perl #Sort given arguments use strict; use warnings; my @sorted_numbers = sort {$a <=> $b} @ARGV; print "@sorted_numbers\ ";
Für den Median habe ich Perl zuhilfe genommen, statt einen Sortieralgorithmus selbst zu implementieren. sort -n kam mit den negativen Kommazahlen nicht zurecht.
Varianz
varianz.sh
#!/bin/bash #Calculate the sample variance (empiristische Varianz) of the arguments #Formula: (1/n-1)*(sum_1_to_n(x_i²)-n*mittelwert(X)²) if [[ $# -eq 0 ]];then echo "No arguments found. Exiting." >&2 exit 1 fi n="$#" mittelwert=$(mittelwert.sh $*) factor=$(echo "1 / ($n -1)" | bc -l) sum=0 for i in $*;do sum=$(echo "$i*$i+$sum" | bc -l) done echo "$factor*($sum-($n*($mittelwert*$mittelwert)))" | bc -l
Paying to Win
In der Präsentation "Paying to Win" (braucht Flash) beschreibt Ben Cousins, (ein?) Manager von Easy (einer EA-Abteilung), den Weg, den Battlefield Heroes genommen hat - von zusätzlichen Bezahlinhalten wie Skins hin zu kaufbaren besseren Waffen, die die Balance zerstörten. Dabei zeigt er mit internen Statistiken, wie nur durch diese Änderungen Bf-Heroes profitabel wurde, ohne Spieler zu verlieren (was die Befürchtung war). Gegenposition zu meiner These, dass solche Änderungen die Spielegerechtigkeit und so den Spaß zerstören, was dann auch die Einnahmen reduziert.