Freitag, 31. Dezember 2010

Haiku Webseite mit Turbo-Boost

Lange Zeit war die Haiku Webseite nicht gerade ein Aushängeschild für ein Hauptmerkmal von Haiku: gefühlte Geschwindigkeit durch kurze Reaktionszeiten. Das hat sich nun sehr verbessert.
Oliver Tappe hat einige Drupal-Module erneuert, ersetzt oder ganz rausgeschmissen. Hinzugekommen ist ein "Boost" Modul, das vor allem beim Zugriff nicht angemeldeter Besucher auf dynamische Inhalte wie PHP greift. Dann werden statt dynamischer Seiten statische aus dem Cache benutzt. Dadurch steigert sich die Performance um das 30-fache und das System reagiert auch viel besser auf hohe Lasten. Der nächste Slashdot-Effekt kann also ruhig kommen...!

Dienstag, 28. Dezember 2010

Forschungsauftrag in Sachen Paketmanager

Haiku Inc. ist immer interessiert die eingenommenen Spenden Projekten zur Verfügung zu stellen, die uns näher an Haiku R1 bringen. Nun hat Oliver Tappe sich dafür beworben die Untiefen des Paketmanagements auszuloten. Wie die kürzlich durchgeführte Umfrage gezeigt hat, wird dieses Feature von vielen als unbedingt nötig für eine R1 erachtet und blockiert daher auch die Beta-Phase, die ja definitionsgemäß alle Features der R1 enthalten soll.

Der Auftrag, der über 160 Stunden für die schöne runde Summe von $2,622 ausgeschrieben wurde, umfasst dabei noch keine Implementierung, sondern nur die Untersuchung bestehener Systeme und Ideen, die bereits existieren. So hat man sich ja schon früher Gedanken gemacht und ein Paketformat spezifiziert und ein mögliches PackageFS geschaffen. Außerdem gibt es in der Linuxwelt ja bereits förmlich einen Wildwuchs an verschiedenen Paketverwaltungen. Da liegt es natürlich nahe, sich von dort Inspiration zu holen und vielleicht sogar ganze (Sub-)Systeme zu übernehmen, falls möglich.

Wer dieses und ähnliche Projekte in der Zukunft unterstützen möchte, sollte überlegen, ob er Omas Scheinchen unterm Weihnachtsbaum nicht an Haiku Inc. spendet.

Sonntag, 26. Dezember 2010

Neuer Coverity Scan deckt potentielle Bugs auf

Nach zwei Jahren gibt es für Haiku wieder einen Coverity Scan. Wie Urias McCollough berichtet, wurde der Haiku gcc4-Build r39849 mit Coverity v5 analysiert (vor zwei Jahren war das noch v2.4.1). Dabei wurden 10.506 potentielle Bugs gefunden.
Wer nach "CID#" Codes in den Commit-Logs Ausschau hält, wird sehen dass bereits einige der gemeldeten Fehler beseitigt wurden.

Wer genauer wissen will was es mit Coverity auf sich hat, sollte nochmal Stippis Ausführungen im Gazette Artikel vom letzten Scan durchlesen.

Freitag, 24. Dezember 2010

Haiku macht Druck mit Gutenprint

Bei OSNews ist ein interessanter Bericht über die Portierung von Gutenprint zu lesen. Dank der Spenden vieler User im Rahmen einer Bounty, wurde Michael Pfeiffer dabei unterstützt dieses Druckertreiber-Backend auf Haiku zu portieren.

Gutenprint fügt sich nahtlos ins System; Einrichtung und Konfiguration erfolgt über die Panels des nativen "libprint" Drucksystems. Dieses musste dabei etwas erweitert werden, um noch die zusätzlichen Einstellungsmöglichkeiten, die Gutenprint bietet, abdecken zu können.
Momentan sind so nur die Grundeinstellungen verfügbar, aber sobald ein Bug in der Layout API beseitigt ist, werden noch eine Menge weiterer Einstellungen zugänglich.

In seinem Bericht beschreibt Michael einige der Hürden, die er zu überwinden hatte und gibt abschließend einige interessante Zahlen zu seinem Projekt: Der Speicherverbauch einer Seite in Letter-Größe beträgt bei 300 dpi 32 MiB, bei 600 dpi 128 Mib.
Etwa 3/4 (51 kZeilen) des neuen Druck-Subsystems kommen direkt von libgutenprint, 17% (11 kZeilen) fallen auf Haikus Drucksystem libprint und nur 5% (3 kZeilen) sind dem neuen Gutenprint Treiber geschuldet.
Man sieht, durch die Verwendung der Gutenprint Bibliothek konnte Haikus Druckerunterstützung effizient und mit relativ geringem Aufwand um z.Zt. über 700 Drucker erweitert werden. Vielen Dank dafür, Michael!

Abstimmungsergebnis zu den R1 Features

Die Abstimmung über die R1 Roadmap wurde vor bald zwei Wochen abgeschlossen. Mit einem Newseintrag wollte ich noch etwas warten, um zu sehen was bei der internen Bewertung der einzelnen Features herauskam. Außerdem hätte über die Ergebnisse ja auch eine größere Diskussion auf der Mailingliste entstehen können. Dort wurde bisher allerdings nur kurz über die Bewertung der Unterschiede zwischen der öffentlichen User-Abstimmung und der Umfrage unter den Entwicklern geredet.
An der öffentlichen Abstimmung haben über 1.600 Leute teilgenommen, auf der Entwicklerseite (beschränkt auf diejenigen mit SVN-Schreibrechten) waren es knapp 30. Hier die offiziellen Ergebnisse über alle Punkte im Überblick, farblich hinterlegt sind jeweils die meisten Stimmen):



R1 Blocker kein Blocker keine Angabe

Feature User Devs User Devs User
#1 TTY Layer 440 8 755 20 410
#2 PPP / Modemeinwahl 286 1 1318 28 22
#3 Bootman: Unterstützung mehrerer Hds 968 5 590 23 57
#4 IRQ Routing 663 25 472 4 462
#5a Haiku Book, nur Unterschiede zu BeBook 733 24 819 5 54
#5b Haiku Book, vollständig 233 1 1324 28 58
#6 User Guide, vollständig 561 17 1030 11 20
#7 Standard Soundeffekte 358 5 1226 23 32
#8 WiFi, inkl. WPA/WPA2 1458 30 180 0 2
#9 WiFi, GUI zur Konfiguration 1378 28 248 2 24
#10 Layout API, mind. Experimentell 466 18 862 11 297
#11 Alle Apps benutzen Layout API 317 0 1003 28 296
#11a Tracker_layout branch 321 4 931 24 364
#12 Alle Apps benutzen Locale API 547 11 975 17 109
#13 Netzwerkdateisysteme (ftp,ssh,nfs,smb) 953 7 682 22 7
#14 Debugger 228 7 1255 21 148
#15 Jamfile-Engine 208 2 751 26 663
#16 Stack&Tile Decorator als Standard 346 2 979 26 309
#17 Video mode setting Treiber (nvidia, ati, intel) 1214 2 394 25 29
#18 Multimonitor Unterstützung 390 0 983 28 253
#19 BWebView API 355 0 997 27 269
#20 Services Kit 459 1 773 26 390
#21a Web+, HTML5 Video und Audio 749 11 866 17 21
#21b Web+, User agent faking 477 0 1027 27 119
#21c Web+, SSL Zertifikat-Verwaltung 880 18 649 8 100
#21d Web+, Caching 714 11 841 15 60
#21e Web+, Passwort-Verwaltung 576 10 1015 17 32
#22 BNotification API 425 2 779 26 413
#23 Neue Treiberarchitektur fertigstellen 901 11 576 15 150
#24 Treiber an neue Architektur anpassen 637 0 852 26 130
#25 Neues Netzwerk Einstellungsfenster 401 11 750 18 468
#26 OSS und native Audiotreiber ko-existieren 578 10 843 18 201
#27 Alle Boot-Abbrüche beheben 1276 19 316 9 31
#28 Alle Video/Audiotreiber Bugs fixen 1240 10 360 17 28
#29 IPv6 Netzwerk-Unterstützung 331 4 1273 24 22
#30 Haiku System Upgrade Manager 911 24 710 5 7
#31 Paketmanagement 978 14 642 15 9
#32 Isochrone USB Übertragung 637 6 687 21 305

Alles in allem werden die R1 Blocker von Entwicklern wie Usern recht ähnlich gesehen. Nur bei manchen Fragen gehen die Meinungen auseinander. Wie im oben verlinkten Mailinglist Thread zu lesen, könnte hier unter Umständen ein mangelndes Verständnis bei den Usern die Ursache sein, da es sich um ziemlich Hardware-nahe Features handelt, die ohne tieferes Hintergrundwissen vielleicht missverstanden wurden.
Doch auch innerhalb von Usern bzw. Entwicklern ist man sich noch nicht bei jedem Thema voll einig, siehe z.B. #21 Web+ bei den Usern oder #31 Paketmanager bei den Devs.
Hier sind wohl ein paar Diskussionen nötig; die Abstimmungsergebnisse sollte man also keinesfalls schon als festgeschriebene R1 Roadmap betrachten!

Sonntag, 12. Dezember 2010

Programming with Haiku, Lektion 2-15

Während die Gazette offline war, hat DarkWyrm weiter fleißig Lektionen zur Programmierung mit Haiku geschrieben. Das Erscheinen des 15. Teils bietet Anlass die verpassten Artikel zusammenzufassen.

#2: C++ Strings und noch mehr STL

Die 2. Lektion wirft als erstes einen Blick auf C++ Strings aus der Standardbibliothek und einige derer nützlichen Methoden wie beispielsweise find_first_not_of. Dann geht es weiter mit der Vorstellung weiterer STL Container (map, set, multimap, multiset) und Container Adapter (queue, priority_queue, stack), die die Art des Zugriffs auf den jeweiligen Container regeln. Anschließend werden die ganzen Methoden der verschiedenen Container beschrieben, mit denen deren Inhalte manipuliert werden können.
Das ist eine ganze Menge Holz! Aber keine Sorge, wenn man das alles nicht aufs erste, zweite oder auch dritte Durcharbeiten verinnerlichen kann. Die Haiku API bietet mit BList und Trackers BObjectList Werkzeuge, die man fast immer als Alternativen zu Containern verwendenden kann. Ähnlich verhält es sich mit C++ Strings und Haikus BString. Im Grunde ist es einfach nur gut über diese Dinge Bescheid zu wissen, insbesondere wenn man es mit dem Code anderer Leute und portierten Quellen zu tun hat. Und natürlich, wenn man möglichst plattformunabhängigen Code schreiben will.

#3: Streams und Exceptions

Im 3. Teil werden zuerst die C++ Versionen der In/Output-Streams cout, cin und cerr vorgestellt. Dazu wird erst die C-Variante eines Programms gezeigt, das eine Datei auf die Konsole ausgibt, und danach die C++ Variante. Anschließend werden nützliche Methoden der In/Output-Streams wie get, getline, write und seekp besprochen und die Möglichkeiten der Fehlerauswertung.
Weiter geht es mit der Ein/Ausgabe und deren Formattierung mittels cin und cout und deren Manipulatoren.
Auf Exceptions wird nur ganz kurz eingegangen; sie spielen in Haiku keine große Rolle, da die API sowieso schon eine gute Fehlerauswertung anbietet und Exceptions einiges an Performance kosten.

#4: Versionskontrolle

Lektion 4 legt eine kleine Pause ein was die Programmierung angeht und widmet sich einem Thema, das Hobbyprogrammierer oft vernachlässigen: den Segnungen der Versionskontrolle. Nutzt man sie, lassen sich Änderungen im Sourcecode leicht rückgängig machen oder verschiedene Lösungswege auf einfache Weise ausprobieren. Auch die Zusammenarbeit mit anderen wird sehr erleichtert.
DarkWyrm stellt einige Systeme dafür kurz vor, CVS, SVN, Git, Mercurial, um dann praxisnah die Einrichtung anhand von Mercurial zu zeigen.
Seit kurzem kann übrigens auch die IDE Paladin mit diesen Versionskontroll-Systemen umgehen.

#5: Praxis - Paladin Projektdateien laden

Um das Gelernte der vorangegangenen Lektionen mit einem Praxisbeispiel zu vertiefen, zeigt die 5. Lektion all die vorgestellten Techniken, um Paladin Projektdateien einzulesen.

#6-11: Rückblick auf den vorherigen "Kurs"

Die Teile 6 bis 11 werden später nachgereicht. Es werden leicht überarbeitete Kapitel aus dem ersten C++ Kurs "Learning to Program with Haiku".

#12: Attribute

Mit Lektion 12 sind die allgemeinen C++ Themen abgeschlossen und es wird durchgestartet zur Haiku API. Den Anfang machen Attribute; wie man mit ihnen eigene Daten an Dateien hängt und wie man die systemweiten Attribute nutzt.

#13: Queries

Nachdem beim letzten Mal die Arbeit mit Attributen gezeigt wurde, steht in Teil 13 die Suche nach ihnen mittels Queries auf dem Plan. Es wird die Syntax eines Query-Begriffs in Trackers Find Panel erklärt und wie man das programmiertechnisch umsetzt. Neben der Möglichkeit eines einfachen BString als Such-String, gibt es auch noch die etwas komplizierte Variante des Zusammenbauens mittels "Reverse Polish Notation (RPN)".
Schließlich wird auch die besondere Spielart der Live-Query gezeigt, bei der man durch BMessages informiert wird, wenn sich die Trefferliste geändert hat, falls Dateien dazugekommen oder aus dem Suchmuster rausgefallen sind.

#14: Node-Monitoring

Mit der Überwachung von Dateien und Ordnern bzw. Benachrichtigungen beim Einhängen von Partitionen, zeigt Lektion 14 ein weiteres Kern-Feature von Haiku. Ähnlich wie bei Live-Queries wird man durch BMessages darüber informiert, ob sich in einem Ordner etwas getan hat oder eine Datei verändert wurde. Über welche Änderungen man informiert werden möchte, lässt sich dabei genau festlegen.

#15: Eigene Dateitypen

Lektion 15 zeigt wie man aus seinem Programm heraus neue Dateitypen erzeugt. Neben einem eigenen MIME Typ lässt sich dabei unter anderem auch eine Dateiendung, Beschreibung und Icon vergeben und die Anwendung festlegen, die diese Datei standardmäßig öffnen soll. Etwas komplizierter wird es bei der Festlegung einer "Sniffer Rule": mit ihr können Dateien dieses Typs anhand immer gleicher Merkmale im Aufbau automatisch "erschnüffelt" werden.
Zu guter letzt können einem Dateityp auch immer gleich systemweite Attribute angehängt werden, wie es z.B. mit AUDIO:artist, AUDIO:title und AUDIO:album bei MP3-Dateien der Fall ist.


Alle Teile von "Programming with Haiku" finden sich in DarkWyrm's Library.

Donnerstag, 2. Dezember 2010

20. Thank You Award geht an Jérôme Duval

Jérôme "korli" Duval hat vor allem für seine Fortschritte bei der ext3-Unterstützung und Treiberverbesserungen den 20. Thank You Award gewonnen! Herzlichen Glückwunsch, auch an Scott, Philippe, Ithamar und Pengfei, die diesmal mit von der Partie waren.

Da die Thank-You-Award-Kasse mal wieder fast leer ist, sind kleine Spenden übrigens sehr willkommen.