Nichts als die Wahrheit

4. Juni 2010

Linux – Vielfalt und Freiheit

Filed under: linux, Open Source, ubuntu — Argeleb @ 12:41

Linux everywhere? Diesen Eindruck kann man gewinnen, wenn man sich die aktuelle Nachrichtenlage näher betrachtet. Zur Zeit erscheint es mir, als würden sich die Nachrichten mit Linux-Schwerpunkt geradezu überschlagen. Im Börsenteil der FTD lese ich heute, dass am gestrigen Handelstag der Aktienkurs von Texas Instruments davon profitiert hat, weil sich dieses Unternehmen für das freie Betriebssystem engagiert. Linux ist damit ein weiteres man ein positiver Faktor für den Börsenwert eines Unternehmens geworden.

Mittlerweile gibt es so viele verschiedene Varianten von Linux und so viele Beteiligte, die sich aus den unterschiedlichsten Beweggründen für Linux engagieren, dass ich mal versuchen will, ein bisschen Licht in dieses Dickicht zu bringen.

Die Varianten

Server und Desktop

Fangen wir mit den klassischen Server- und Desktopbetriebssystemen an. Lange Zeit waren hier vor allem Redhat Linux und Novell SUSE führend, bis sie dann in den letzten Jahren von Ubuntu überflügelt wurden. Sowohl Redhat als auch Novell verfolgen den Ansatz, ein Betriebssystem für den Unternehmenseinsatz anzubieten, das auf einer Community-Variante basiert. Bei Redhat ist dies fedora, bei Novell ist es openSUSE. Gerade in Deutschland genießt SuSE ein hohes Ansehen und darf mit Recht als einer der größten Förderer des freien Betriebssystems bezeichnet werden. Und bei Redhat erinnern wir uns noch sehr genau, wie deren Börsengang die Phantasie der Anleger beflügelt hat.

Das auf Debian basierende Ubuntu konnte seit seinem ersten Erscheinen große Erfolge feiern. Seit einigen Jahren befindet sich die Distribution auf distrowatch auf dem ersten Platz. Canonical, das Unternehmen hinter Ubuntu, hat einen großen Beitrag zur Verbreitung von Linux auf dem Desktop gespielt. Die Gründe für den Erfolg von Ubuntu sind vielfältig, zum einen ist es die klare Fokussierung auf das Wesentliche, zum anderen der verlässliche Releasezyklus.

Netbooks und Tablets

Als vor wenigen Jahren die ersten Netbooks auf dem Markt erschienen, waren diese überwiegend mit Linux bestückt. Dies hatte hauptsächlich Kostengründe, da Netbooks vor allem billig sein sollten. Als ein Pionier auf diesem Gebiet muss Asus mit seiner eee-PC Reihe gelten. Damals wurden diese Geräte mit Xandros Linux ausgeliefert. Acer, mit seinen Aspire One Geräten setzte auf Linpus. Beides, sowohl Xandros als auch Linpus, sind spezielle Linux Distributionen, deren Fokus auf Branding für den OEM liegt.

Dass diese Geräteklasse so erfolgreich werden würde, hatte damals wohl niemand erwartet, am wenigsten vermutlich Microsoft, die damals gerade ihr neues Betriebssystem Windows Vista vermarkten wollten. Vista war jedoch für die kleinen Mobilrechner vollkommen ungeeignet, da das Betriebssystem zu ressourcenhungrig war. Vom Erfolg der Netbooks überrascht, sah sich Microsoft sogar dazu gezwungen ihr veraltetes Betriebssystem Windows XP für Netbooks zu reaktivieren. Mit diesem Schachzug gelang es Microsoft dann letztlich auch wieder, den Marktanteil von Windows auf dieser neuen Geräteklasse wieder zu stablisieren.

In der Folge sprangen alle namhaften PC-Hersteller auf den Netbook-Zug auf und brachten Geräte heraus. Heute wird auf neuen Netbooks überwiegend Windows 7 vorinstalliert. Aber dennoch scheint der Kampf der Betriebssysteme für Netbooks noch nicht entschieden zu sein. Der weiterhin anhaltende Kostendruck lässt die Hersteller über Alternativen nachdenken.

Die Angebote aus dem Linuxlager sind auch sehr vielversprechend. Im folgenden will ich kurz die verschiedenen Netbook-Varianten vorstellen.

Ubuntu Netbook Remix

Canonical hat erkannt, dass man nicht einfach ein Desktop-Betriebssystem auf einem Netbook installieren sollte. Netbooks zeichnen sich vor allem durch einen kleinen Bildschirm, wenig Hauptspeicher und geringem Plattenplatz aus (meist SSD). Daher ist es angebracht eine optimierte Oberfläche für die Netbooks zu verwenden. Mit Ubuntu Netbook Remix ist dies sehr gut gelungen. Bis zum heutigen Tag dürfte UNR die beste Variante für Netbooks sein.

Android

Eigentlich ein Betriebssystem für Mobiltelefone, würde sich Android, das von der Open Handset Alliance entwickelt wird, durchaus auch für Netbooks eignen. Bislang gibt es aber noch keinen namhaften Hersteller, der dies ernsthaft versucht hätte. Für die „Schwester-Geräteklasse“ der Tablet-Computer dürfte sich jedoch das für Touchscreens optimierte Android als ideal erweisen. Auf der Computex wurden auch bereits etliche Android basierende Tablets gezeigt. Lenovo hat nun angekündigt auf die Weiterentwicklung ihres eigenen Betriebssystems SkylightOS, das ebenfalls auf Linux basiert, zu verzichten, und stattdessen Android zu verwenden.

MeeGo

Der Marktführer bei Computer-Chips, Intel, und der Marktführer bei Mobiltelefonen, Nokia, haben sich zusammengeschlossen, um unter dem Dach der Linux-Foundation die Linux-Variante MeeGo zu entwickeln. Dabei handelt es sich um eine Kombination von Intels Moblin und Nokias Maemo. Moblin zeichnete sich – ähnlich wie Ubuntu Netbook Remix – dadurch aus, dass es auf die Anforderungen von Netbooks optimiert wurde. Die Oberfläche ist eine Schaltzentrale für einen Social-Desktop und vereint verschiedene Web-Services. Maemo wiederum ist auf Smartphones spezialisiert und steuert zum MeeGo Projekt hauptsächlich die Qt-Bibliothek bei. Bereits jetzt zeichnet sich eine breite Unterstützung für das MeeGo-Projekt ab. Sowohl Acer als auch Asus haben bereits Netbooks mit MeeGo für Ende dieses Jahres angekündigt. Desweiteren hat Novell angekündigt, eine SuSE MeeGo Distribution anzubieten.

WebOS

Von einem der Pioniere für mobile Geräte, Palm, stammt WebOS. Nach der Übernahme von Palm gehört WebOS nun zu Hewlett Packard. Laut HP war einer der Hauptgründe, Palm zu übernehmen, gerade ihr innovatives Betriebssystem für mobile Geräte. Kurz nach der Übernahme hat HP auch angekündigt, das von Steve Balmer auf der CES vorgestellte Tablet Slate, statt mit Windows 7 mit WebOS auszustatten. Es ist auch davon auszugehen, dass das Engagement von HP im Markt für Mobiltelefone zunehmen wird. Wie erfolgreich HP mit WebOS sein wird, wird sich zeigen. Es dürfte jedoch recht schwierig werden, da HP – im Gegensatz zur Konkurrenz von Android und MeeGo – keine Allierten hat und WebOS keine Open Source ist (nur der Linux-Kernel ist GPL).

ChromeOS

Vor gut einem Jahr hat Google angekündigt ein Betriebssystem für Netbooks entwickeln zu wollen, das in der zweiten Jahreshälfte 2010 veröffentlicht werden soll. Ziel des Google Betriebssystems ist die optimale Unterstützung von Web-Anwendungen. Bei ChromeOS handelt es sich im Kern um den Browser Chrome und dem Kernel Linux. Der Trend zu Cloud-Computing und Web-Anwendungen soll mit ChromeOS weiter unterstützt werden. Wie sich ChromeOS im Vergleich zu Android, das ja ebenfalls maßgeblich von Google entwickelt wird, behaupten können wird, muss die Zukunft zeigen.

Die Beteiligten

In den letzten Jahren hat die Linux-Community viel Zulauf von Firmen bekommen. Zunächst sind da die reinen Linux-Unternehmen zu nennen: Redhat, Novell, Canonical und andere, die mit Dienstleistungen rund um das freie Betriebssystem ihr Geld verdienen.

Vermehrt wenden sich jedoch auch reine Hardwarehersteller Linux zu. Vor allem Intel engagiert sich sehr stark für den Kernel. Aber auch Nokia, IBM, Hewlett Packard, Dell, Lenovo, ARM, AMD und weitere haben ein enormes Interesse daran, dass Linux blüht und gedeiht. Erst gestern wurde mit Linaro ein neues Konsortium von Chipherstellern gegründet, das die Entwicklung von Software mit ARM-Prozessoren beschleunigen soll.

Aber nicht nur Hardware-Hersteller sind an der Entwicklung von Linux beteiligt oder an ihr interessiert. Eine schöne Übersicht der namhaften Unternehmen, die die Linux-Foundation bilden, findet sich auf der Mitglieder Seite der Stiftung.

Die Motivation

Die Gründe für ein Linux-Engagement und die Auswahl von linuxbasierten Systemen sind sehr vielfältig. Aber für mich erscheint es klar, dass der größte Vorteil von Linux in der schnellen, kooperativen Entwicklung liegt. Moderne Computersysteme werden immer komplexer und nur durch eine gemeinsame Entwicklungsanstrengungen können die Anforderungen kostengünstig gemeistert werden. Die Zeiten, in denen kommerzielle Betriebssysteme noch erfolgreich sein konnten, scheinen sich dem Ende zu zu neigen. Für ein Unternehmen, sei es noch so groß, ist es schlicht nicht mehr möglich, die Vielfalt unterschiedlichster Geräte zu unterstützen.

Die Hersteller von Soft- und Hardware werden sich zunehmend durch Dienstleistungen und Anpassungen von der Konkurrenz differenzieren. Android ist hierfür ein sehr schönes Beispiel. Obwohl alle führenden Hersteller von Mobiltelefonen bereits Android Geräte im Angebot haben, unterscheiden sich die Funktionen der Geräte doch zum Teil erheblich. Aber allen ist gemein, dass Android Apps auf ihnen lauffähig sind. So profitiert jeder Hersteller von der Plattform, ohne jedoch eingeschränkt zu sein. Mit einem Betriebssystem eines Herstellers, sei es nun Google oder Microsoft, ist diese Vielfalt und Differenzierung nicht möglich.

Mit Windows Phone 7 zeigt Microsoft sehr deutlich, wie man in diesem Markt scheitern wird. Durch utopische Anforderungen und Einschränkungen, so wie Apple das auf dem iPhone vormacht, wird man als General Purpose OS Anbieter nicht weiterkommen, denn die Hersteller könnten sich nur noch über den Preis differenzieren. Und hier setzen die Hersteller bereits an: Sie sparen sich die Lizenzkosten für das Betriebssystem.

Wer fehlt?

Es fehlen eigentlich nur zwei Big Player: Microsoft und Apple. Wobei Apple sich im BSD Umfeld bedient, aber ansonsten kein all zu großes Open Source Engagement zeigt. Wenn diese beiden nicht erkennen, dass sie mit ihrer Politik den falschen Weg eingeschlagen haben, dann werden sie über kurz oder lang in der Bedeutungslosigkeit verschwinden. Noch mögen deren Sterne hell leuchten, aber es ist bereits zu erkennen, dass sie verglühen werden.

Folgen für die Anwender

Für die Anwender bedeutet dies alles Freiheit und Vielfalt. Auch auf dem Desktop dürfte sich das positiv bemerkbar machen. Nicht nur, dass es wahrscheinlicher wird, dass die Hardware-Hersteller Linux besser mit Treibern unterstützen, sondern auch, dass die Zahl an Linux-Anwendungen steigen wird.

Eines jedenfalls scheint mir sicher: Der Linux-Siegeszug ist nicht mehr aufzuhalten!

27. März 2010

Hello Android!

Filed under: Android, Entwicklung, Tutorial, ubuntu — Argeleb @ 16:41

Schritt 1: Installation des Android SDK

Um Android Anwendungen entwickeln zu können ist es nötig ein Android SDK zu installieren. Auf der Web-Site des Android Projekts gibt es die Auswahl, für welches Betriebssystem man das SDK herunterladen möchte. Leider gibt es keine Version für 64 Bit Linux, daher muss man das 32 Bit SDK herunterladen.

Glücklicherweise wird auf der Installationsseite genau beschrieben, welche Software man auf einem Ubuntu-System installieren muss, damit das Android SDK verwendet werden kann. Vor allem muss man die 32 Bit Unterstützung, Sun-Java und Eclipse installieren:

apt-get install ia32-libs

apt-get install sun-java6-bin

Da leider in den Ubuntu-Repositories keine aktuelle Eclipse Version angeboten wird, sollte man Eclipse direkt von der Eclipse-Download Seite herunterladen, denn für die Android Development Tools (ADT) wird mindestens Eclipse 3.4 vorausgesetzt.

Nachdem nun alle Voraussetzungen erfüllt sind, kann das Android Starter Package für Linux heruntergeladen werden und anschließend in einem beliebigen Verzeichnis entpackt werden:

tar xvzf android-sdk_r05-linux_86.tgz

Das Basis Verzeichnis des SDK befindet sich dann unter android-sdk-linux_86

Mit dem Starter Package hat man allerdings noch kein vollständiges SDK. Um die Installation zu vervollständigen muss der Android SDK and AVD Manager aufgerufen werden:

<sdk-verzeichnis>/tools/android

Android SDK Manager mit ausgewählten Paketen für das Android SDK 2.1

Unter den Available Packages finden sich alle Versionen des Android SDK. Für die Zwecke dieses kleinen Einführungsbeispiels dürfte die Version nicht relevant sein, daher kann man ruhig die aktuellste Version, hier die Version 2.1 installieren. Nach einem Klick auf Install Selected lädt der SDK Manager die benötigten Dateien herunter und installiert sie. Vorher muss man noch den Lizenzbestimmungen für die einzelnen Komponenten zustimmen.

Schritt 2: Installation der Android Developer Tools

Für die Entwicklung von Android bietet sich Eclipse an, da es sich bei Android Anwendungen um Java Programme handelt. Um Android Anwendungen mit Eclipse zu entwickeln, müssen die Android Developer Tools (ADT) installiert werden. Hierfür gibt es die Update-Site des Android-Projekts: https://dl-ssl.google.com/android/eclipse/

Dazu öffnet man in Eclipse den Update-Manager unter Help/Install New Software. Dort fügt man dann die oben genannte Update-Site hinzu:

Eintragen der Update-Site des ADT in Eclipse

Anschließend kann man dann die Developer Tools auswählen und installieren:

Installation der Developer Tools

Schritt 3: Ein erstes Programm

Bevor wir ein erstes Programm entwickeln, müssen wir noch die Testumgebung einrichten. Wir benötigen ein virtuelles Gerät (Android Virtual Device (AVD)), auf dem wir die Software laufen lassen können, doch zuvor müssen wir Eclipse noch mitteilen, wo sich das Android SDK befindet.

  1. In den Android Preferences (Window > Preferences > Android) muss das SDK-Basis-Verzeichnis eingetragen werden:

    Einstellung des SDK Pfades

  2. Starten des Android SDK and AVD Managers (in Eclipse unter Window > Android SDK and AVD Manager)
  3. Anlegen eines neuen Virtual Device
  4. Wir geben dem Gerät den Namen TestDevice, und als Target wählen wir Android 2.1 – API Level 7 aus:

    

    Erstellen eines neuen Virtual Device

  5. Nachdem das virtuelle Gerät angelegt ist, können wir ein erstes Projekt erstellen

Erstellen eines Android Projekts

In Eclipse kann nun mit dem Android Projekt Assistenten ein neues Projekt erstellt werden (File > New > Android Project):

Android Projekt Assistent

  1. Als Name wählen wir android.hello (dabei handelt es sich um den Eclipse-Projektnamen)
  2. Als Application name stellen wir Hello Android ein
  3. Der Package Name muss aus mindestens zwei Identifiern bestehen, warum das so gefordert wird, ist mir jedoch unklar. Aber es ist sowieso gute Praxis, einen Pacakge Namen wie hier anzugeben: com.wordpress.argeleb.android.hello
  4. Wir erzeugen eine Activity, da diese in den allermeisten Fällen erstellt wird, auch wenn sie optional ist. Der Assistent generiert eine Klasse, die von der Android Klasse Activity abgeleitet ist.

Der Assistent ist so freundlich und hat bereits eine GUI-Datei angelegt, in der der Text Hello World, HelloActivity zu lesen ist:

Jetzt kann man bereits diese rudimentäre Anwendung ausführen, indem man im Kontextmenü des Projekts den Punkt Run As > Android Application auswählt. Nach eine gewissen Ladezeit des Emulators erscheint dann folgendes Bild:

Android Emulator mit geladener Hello World Anwendung

Das war’s im Prinzip. Viel Spaß beim herum experimentieren!

Weiterführende Literatur findet sich auf den Entwickler-Seiten des Android Projekts.

19. November 2009

KDE Tutorial, Teil 2: Ein erstes Programm mit Hauptfenster

Filed under: C++, Entwicklung, karmic, KDE, linux, Open Source, Tutorial, ubuntu — Argeleb @ 17:03

In diesem zweiten Teil entwickleln wir das erste KDE Programm. Da mir persönlich das Blog-Interface zu wenig Ausdruckmöglichkeiten bietet, habe ich das Tutorial mit OpenOffice geschrieben.

Ausserdem habe ich auf Google Code ein Projekt für das Tutorial angelegt. Dort befindet sich dann auch der Text.

Weiter mit dem Tutorial auf Google Code (PDF)

Referenzen:

18. November 2009

KDE Tutorial, Teil 1: Einrichtung der Entwicklungsumgebung [Update]

Filed under: C++, Entwicklung, karmic, KDE, linux, Open Source, Tutorial, ubuntu — Argeleb @ 09:30

Wenn man sich auf den Seiten des KDE-Projektes nach Informationen zur Entwicklung von KDE-Programmen umsieht, könnte man schnell den Eindruck gewinnen, man müsse die komplette Desktopumgebung kompilieren. Das ist natürlich nicht notwendig. Aber man muss schon ein paar Komponenten installieren, damit man vernünftig arbeiten kann.

Jeder Programmierer ist anders und hat besondere Vorlieben, was Editoren usw. angeht. Hier sei nur KDevelop erwähnt, da es das „natürliche“ Instrument für die KDE-Softwareentwicklung sein sollte. Aber Vorsicht, die Version, die mit Karmic ausgeliefert wird, ist immer noch eine Beta-Version.

Manch einer, allen voran Andreas Pakulat, ist über die Entscheidung der Kubuntu Entwickler, eine Beta-Version in einer stabilen Distribution auszuliefern, nicht sonderlich glücklich. Zum Teil kann ich die Kritik nachvollziehen, allerdings darf sich das KDevelop-Team durchaus auch an die eigene Nase fassen, denn schließlich existiert KDE4 nun schon seit mehr als zwei Jahren, und es gibt immer noch keine stabile Version der Haupt-IDE. So gesehen erzeugt diese Vorgehensweise Druck auf die Entwickler (mal abgesehen davon, dass sie ja jederzeit ein PPA mit der aktuellsten Beta für Ubuntu bereitstellen könnten). So wie es jetzt aussieht, soll KDevelop wohl mit KDE 4.4 fertig werden.

Resourcen

Benötigte Programme und Bibliotheken

Im folgenden habe ich versucht, alle Pakete zusammenzufassen, die man für die Entwicklung benötigt. Da auf meinem Rechner nach mehreren Versuchen bereits alles vollständig installiert war, habe ich eine VM mit nacktem Kubuntu aufgesetzt, und nach und nach alle Pakete installiert, die gefehlt haben. Nichts desto trotz kann es sein, dass diese Liste nicht vollständig ist.

CMake

CMake ist ein plattformunabhängiger Generator für Build-Dateien. Unter Linux werden mit seiner Hilfe Unix-makefiles erzeugt. Statt komplizierte makefiles zu bearbeiten, wird für die Entwicklung von KDE4 Programmen lediglich eine CMakeLists.txt benötigt. Wenn die Vorraussetzungen erfüllt sind, erzeugt cmake alle notwendigen Dateien.

Um cmake unter Kubuntu zu installieren, gibt man auf der Konsole folgenden Befehl ein:

sudo apt-get install cmake

Näheres zu KDE4 und cmake kann man auf der KDE-Techbase nachlesen

Compiler

Um KDE Programme in C++ zu entwickeln, wird der C++ Compiler benötigt, den man mit folgendem Befehl installiert:

sudo apt-get install g++

Anmerkung: Wenn dieses Paket nicht installiert ist, stürzt KDevelop 3.9.95 beim Erzeugen eines neuen Projektes einfach ab.

kdevelop4 (Version 3.9.95)

Dieses Tutorial beschreibt die Entwicklung von KDE4 Programmen unter anderem mit Hilfe des neuen KDevelop4. Mit Kubuntu 9.10 befindet sich die Beta 5 in den Repositories. Folgender Befehl installiert kdevelop:

sudo apt-get install kdevelop

[Update] Statt der veralteten Beta 5 sollte man lieber auf eine aktuellere Version ausweichen. Auf dem Blog von Dr. Danz befinden sich aktuelle PPAs von KDevelop für Jaunty und Karmic

Nachdem man kdevelop startet und versucht ein neues Projekt mit einem Template anzulegen, wird man feststellen, dass kein KDE4-Template vorhanden ist. Das Paket kapptemplate im kdesdk beinhaltet einige Projekt-Templates für KDE:

sudo apt-get install kdesdk

Entwicklungspakete

Folgende Pakete müssen noch installiert werden, damit man KDE4-Programme entwickeln kann:

sudo apt-get install kdelibs5-dev

kdevelop kompilieren

Um mit der aktuellsten Version von KDevelop zu arbeiten, muss das Paket von der KDevelop Homepage heruntergeladen werden. Um KDevelop kompilieren zu können, ist zusätzlich das Entwicklungspaket des KDE-Workspace notwendig, das mit folgendem Befehl installiert werden kann:

sudo apt-get install kdebase-workspace-dev

Nähere Informationen zum Erstellen von KDevelop aus den Quellen können auf der Seite des Projekts gefunden werden.

1. Mai 2009

Meine Rechner

Filed under: jaunty, karmic, linux, ubuntu, windows — Argeleb @ 13:07

Seit geraumer Zeit bin ich nun zuhause vollkommen frei von Windows. Und ich mag das wirklich sehr gern.
Seit ich alle meine Rechner auf Linux migriert habe, weiß ich erst, was ich all die Jahre in der „Knechtschaft“ vermisst habe. Ich habe den Spass an meinen Computern wiedergefunden.

Meine Computerlandschaft sieht wie folgt aus:

  • File- und Medienserver (openSUSE 10.3)
  • SAT Receiver (Dreambox DM 7020 und DM800)
  • Desktop-PC (Ubuntu 9.04 Jaunty Jackalope und openSUSE 11.1)

Meinen Desktop-PC hab ich vor mehr als einem Jahr gekauft, und ich habe ihn entsprechend ausgestattet, dass er eine zeitlang ausreichen sollte (Quad-Core CPU, 8GB RAM). Allerdings stelle ich mir die Frage, wofür ich so viel RAM brauche, denn die Speicherauslastung unter Linux geht selten über 2GB, selbst wenn ich umfangreiche Video-Bearbeitung mache.
Aber schaden kann soviel Speicher sicher nicht. Ich werde wohl demnächst eine RAM Disk einrichten.Link
Anfang des Jahres bin ich auf meinem Desktop von openSUSE auf Ubuntu umgestiegen. Ich habe dabei mit der Alpha 3 von Jaunty begonnen und ich war von Anfang an begeistert. Und heute, da Jaunty nun offiziell freigegeben ist, langweilt mich das System bereits, weil es einfach funktioniert 😉

Die Testphase von Jaunty hat mir sehr viel Spass gemacht, und ich hoffe ich konnte mit meinen Bugberichten im Launchpad auch ein bisschen zur Verbesserung des System beitragen. Deshalb habe ich auch beschlossen, die nächste Version von Ubuntu (Karmic Koala) zu testen.
Link
Dieses mal werde ich aber die Distibution nicht auf mein Live-System installieren, sondern vorerst nur in einer virtuellen Maschine. Zu diesem Zweck habe ich mir VirtualBox 2.2 installiert (nicht die OSE Variante, da ich den 3D Support haben wollte). Vorgestern hab ich in eine VM Jaunty installiert und die Paketquellen auf karmic umgestellt.

Jetzt kann ich wieder jeden Tag die Fortschritte der Ubuntu Entwickler verfolgen.

Bloggen auf WordPress.com.