Das Ende des Festnetztelefons ist nah.
AVM hat angekündigt, zur Cebit eine iPhone und Android App anzubieten. Diese App ermöglicht es, das iPhone mit der FritzBox zu verbinden und Festnetz oder VOIP Gespräche über das iPhone zu führen. Sowohl eingehende als auch ausgehende Gespräche werden unterstützt. Außerdem sollen weitere Funktionen wie der Zugriff auf das Telefonbuch der FritzBox enthalten sein.
Wenn man dann noch verschiedene VOIP Nummern verschiedenen iPhones zuweisen kann, bin ich wunschlos glücklich.
Auf diese App habe ich schon lange gewartet.
Mittwoch, 27. Januar 2010
Endlich! AVM bringt eigene IPhone App zur Cebit
Eingestellt von
Broneo
um
10:57
6
Kommentare
Labels:
Interessantes,
IPhone
Donnerstag, 10. Dezember 2009
Der Zufall der Geburt als Zufall des Vermögens
Der Zufall der Geburt als Zufall des Vermögens: "Die überzeugendsten Argumente für eine drastische Erbschaftssteuer hat nicht die sozialistische Theorie geliefert, sondern einer der bedeutendsten Denker des Liberalismus, John Stuart Mill (1806-1873).
Gerade die Anerkennung des Leistungsprinzips muss zu einer Beschränkung von Erbschaften führen, denn anders als der Erblasser habe der Erbe nichts zur Entstehung des Vermögens beigetragen."
Eingestellt von
Broneo
um
16:38
0
Kommentare
Freitag, 24. April 2009
Dieter Bohlen zum Thema Filesharing
Dieter Bohlen äussert sich in diesem Beitrag zum Thema Filesharing. Das Thema wird zwar nur oberflächlich erörtert, aber ganz gut auf den Punkt gebracht.
Eingestellt von
Broneo
um
15:46
0
Kommentare
Labels:
Interessantes,
Musik
Freitag, 27. März 2009
Drucken mit C#
Da ich im Netz relativ wenige oder schlechte Tutorials gefunden habe, hier eine kleine Anleitung um unter C# einen einfachen Ausdruck mit Druckerauswahl zu realisieren.
PrintDocument printDocument = new PrintDocument();
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDoc;
if (printDialog.ShowDialog() == DialogResult.OK)
{
printDoc.Print();
}
Was genau passiert hier? Zuerst wird ein Dokument angelegt. Dieses stellt die Fläche dar, die ausgedruckt werden soll. Anschliessend wird ein EventHandler auf das Event PrintPage gelegt um feststellen zu können, wann genau gedruckt wird.
den PrintDialog nutzen wir um einen Druck-Dialog zur Auswahl des Druckers anzuzeigen.
Durch den Aufruf der Funktion Print() des PrintDocuments wird der Druck gestartet, wodurch das Event PrintPage ausgelöst wird. Darin muss nun der zu druckende Inhalt in das erhaltene Graphics-Objekt geschrieben werden:
private void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
String textToPrint = "Hallo Welt";
Font printFont = new Font("Arial", 18, FontStyle.Bold);
e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, 10, 25);
}
In diesem Fall wird angegebene Text mit in der Schrift Arial, Schriftgröße 18 und fett auf den Koordinaten x = 10 und y = 25 gedruckt.
Eingestellt von
Broneo
um
14:33
0
Kommentare
Labels:
C#,
Programming
Mittwoch, 25. März 2009
Macheist 3 Bundle endlich erhältlich
Es ist endlich soweit. Macheist.com bietet nun sein drittes Bundle an. Der "eigentliche" Wert des Bundles beträgt 627$. Bei Macheist.com bekommt man für 39$ (ca. 29€), folgende Programme um seinen Mac zu füttern: ISale, Picturesque, SousChef, World of Goo, PhoneView, LittleSnapper, Acorn, Kinemac, WireTap Studio, BoinxTV, The Hit List, Espresso und Big Bang Board Games. Weitere Infos zu den Programmen findet ihr auf www.macheist.com Damit sollte man so ziemlich alles zur Verfügung haben um Bilder, Musik und Videos schnell und simple zu bearbeiten. Außerdem bekommt man eine TODO Application und mehrere Spiele um sich die Zeit zu vertreiben. Wem das noch nicht genügt, 25% des Kaufpreises werden an wohltätige Organisationen gespendet. Wenn ihr jetzt sagt, WOW das muss ich haben, hier ist der
Link
mit dem ich euch "werbe" und dafür zwei Bonus Apps bekomme. Es wäre nett wenn ihr bei Interesse diesen Link für den Kauf verwendet.
Danke
Eingestellt von
Broneo
um
19:14
0
Kommentare
Labels:
Fotografie,
Interessantes,
Mac,
Programming,
Software
Samstag, 17. Januar 2009
Iphone Jailbreak/Unlock in 10 einfachen Schritten
Inzwischen ist es soweit, dass auch ich stolzer Besitzer eines IPhones bin. Dieses habe ich kurz vor Weihnachten als "für alle Netze" offen bei Ebay ersteigert. Natürlich war dem nicht so. SIM Karte eingelegt und nichts passiert. Also musste ich den Unlock wohl oder übel übernehmen. Damit ihr nicht auch 4 Stunden mit der Suche der richtigen Tools und Einstellungen verbringen müsst, hier die Anleitung wie das IPhone innerhalb einer halben Stunde auf Firmware 2.2 gebracht werden kann. Selbstverständlich unlocked, jailbroken und mit funktionierendem AppStore.
Bevor es losgeht, dies ist zwar eine Anleitung wie es funktioniert. Dennoch übernehme ich keinerlei Haftung sollten irgendwelche Schäden an eurem Iphone auftreten. Für den Inhalt der verlinkten Seiten dieses Tutorials übernehme ich ebenfalls keine Haftung.
Zuerst einmal solltet ihr ein Backup der Daten eures IPhones durchführen. Wenn das IPhone schon einen Jailbreak einer früheren Version hat, setzt es mit ITunes in den Originalzustand zurück.
Nachdem das geklärt wäre können wir loslegen.
1. Zuerst solltet Ihr euch ITunes zulegen und es auf Version 8 updaten
2. Anschliessend besorgt ihr euch das PwnageTool und die zu eurem Iphone passende IPSW (2G/3G) . Dabei ist darauf zu achten, dass das PwnageTool und die IPSW im gleichen Verzeichnis auf eurer Festplatte liegen
3. Nun starten wir das PwnageTool, stellen den Expertenmodus ein und wählen unser Iphone in der Auswahl aus
4. Auf der nächsten Seite sollte nun die IPSW gefunden werden. Diese wählt ihr einfach aus und klickt auf weiter. Auf der nächsten Seite wählt ihr allgemein
5. Wenn Ihr wieder eine Seite weiter seid, markiert ihr die Optionen Iphone aktivieren, Baseband updaten und sicheres überschreiben der Partition deaktivieren
6. Den Bootloader updaten auf der nächsten Seite markiert ihr ebenfalls, da ansonsten das Iphone zwar benutzt werden kann, aber keine fremden SIM Karten akzeptiert werden
7. Jetzt klickt ihr 2 mal den weiter Button. Ihr seht ihr 2 alberne Bildchen. nehmt die Haken an den Bildern raus und es kann weiter gehen
8. Wir sind nun wieder auf dem Home Bildschirm. Diesmal klickt ihr auf erstellen. Das Pwnage Tool fragt nun wo die neu erstellte Firmware gespeichert werden soll. Wo ihr sie speichert ist egal. Hauptsache ihr findet sie später wieder
9. Nachdem die neue Firmware erstellt ist, zeigt euch das Pwnage Tool was ihr am IPhone drücken müsst um es in den DFU mode zu versetzen
10. Wenn alles gklappt hat, meldet sich ITunes um das Iphone widerherzustellen. Nun müsst ihr alt gedrückt halten und auf widerherstellen klicken. Nun könnt ihr eure Firmware auswählen.
Nach ein paar Minuten sollte die neue Firmware eingespielt sein
Herzlichen Glückwunsch. Wenn Iphone die neue Firmware eingespielt hat, habt ihr es geschafft und euer IPhone ist frei.
Eingestellt von
Broneo
um
10:53
0
Kommentare
Labels:
IPhone,
Mac
Freitag, 16. Januar 2009
Durex - Get it on
Eben habe ich diesen witzigen Spot im Netz gefunden. Drei possierliche Ballontiere aus Kondomen, die sich vergnügen.
Als würde dieser Spot nicht reichen, gibts dazu auch noch drei Outtakes.
Viel Spaß beim Zusehen.
Eingestellt von
Broneo
um
14:10
0
Kommentare
Labels:
Funny
Freitag, 5. Dezember 2008
NXE offline update
Das New Xbox Experience Update für die Xbox 360 ist nun seit einiger Zeit über Xbox Live erhältlich. Wer das Problem hat, dass seine Konsole gebannt wurde oder keinen Internetanschluss sein Eigen nennt, kann trotzdem in den Genuss des Updates kommen. Hier eine kleine Anleitung.
1. Im folgenden Forumsbeitrag findet Ihr auf der 2. Seite den Rapidshare Link zum Update (Ich habe bisher nur das einfache Update installiert. Die Avatare stehen mir somit noch nicht zur Verfügung. Dort gibt es jedoch auch eine Anleitung wie man diese Funktion aktiviert.)
http://www.forumla.de/f-microsoft-xbox-360-forum-34/t-wo-bekommt-man-nxe-als-alternativen-download-104087
2. Wenn der Download beendet ist, entpackt das Archiv. Ihr findet den Ordner $SystemUpdate. Dieser Ordner enthält die Datei su20076000_00000000, welche auf einen USB Stick mit einer FAT16 oder FAT32 Formatierung kopiert werden muss.
3. Diesen Stick steckt Ihr einfach in eure XBO360. Wenn die Konsole jetzt gestartet wird, erkennt sie das Update automatisch und fragt ob es installiert werden soll. Einfach bestätigen und nach einer kurzen Installation und einem Neustart ist das Update bereit.
Also viel Spass mit der "neuen" Konsole
Eingestellt von
Broneo
um
17:30
0
Kommentare
Labels:
Gaming,
Interessantes,
kostenlos,
XBOX360
Freitag, 22. August 2008
Mac Adressbuch kostenlos ohne IPhone mit Google Contacts synchronisieren
ICal können wir schon mit Google synchronisieren. Jetzt ist das Adressbuch an der Reihe. Wenn man kein Besitzer eines IPhones oder IPod Touch ist, gestaltet sich das ganze etwas schwieriger. Was Apple sich dabei gedacht hat, weiss der Himmel.
Genug des Geredes. Let's swing into action.
1. Zuerst öffnen wir das Terminal und geben folgenden Befehl ein. cd /Library/Preferences. Hier liegt nun die Datei com.apple.iPod.plist. Bevor wir diese bearbeiten, sollte ein Backup dieser Datei anglegt werden. Dazu nutzen wir den Befehl cp com.apple.iPod.plist com.apple.iPod.plist_BACKUP. Um die Datei nun bearbeiten zu können müssen wir sie noch durch plutil -convert xml1 com.apple.iPod.plist in XML umwandeln. Anschliessend öffnen wir die Datei mit vi com.apple.iPod.plist. Hier findet man einen ähnlichen Eintrag wie den folgenden.
Kopiert euren Eintrag und verändert die ID, Serial Number und den Key. Einfach irgendwie Zahlen und Buchstaben vertauschen und die Länge beibehalten. Außerdem muss die Family ID noch auf 10001 gesetzt werden. Jetzt speichern wir die Datei und konvertieren sie wieder mit plutil -convert binary1 com.apple.iPod.plist. Das wars schon.
2. Nun sollte nach dem starten des Adressbuchs der Einstellungsbildschirm so aussehen.
Hier wählen wir Google zur Synchronisierung aus und werden nach unseren Zugangsdaten für unseren Google Account gefragt. Nachdem diese eingegeben wurden, sind wir fertig und das Adressbuch synchroniesiert sich mit Google. Bei mir hat das herrvoragend funktioniert. Meine Kontakte wurden auch nicht teilweise oder falsch kopiert, wie es in anderen Blogs zu lesen war.
Ich muss zusätzlich noch erwähnen, dass ich während dieser Einstellungen ITunes geöffnet hatte und mein IPod Shuffle mit meinem Macbook verbunden war. Allerdings kann ich nicht sagen ob dies unbedingt nötig ist.
Eingestellt von
Broneo
um
19:41
3
Kommentare
Labels:
Google,
kostenlos,
Mac
Montag, 4. August 2008
Google Kalender und ICal kostenlos synchronisieren
Endlich ist es soweit. Man kann den Google Kalender kostenlos mit ICal synchronisieren. Google hat sein CalDAV Protokoll veröffentlicht. Vorbei die Zeiten in denen man teure Lösungen von Drittanbietern kaufen musste. Jetzt gehts vollkommen kostenlos.
Und so gehts.
1. Wir starten ICal, öffnen die Einstellungen und wählen dort den Tab Accounts. Hier legen wir einen neuen Account an und geben einen Titel für den Kalender, den Usernamen und das Passwort ein. Außerdem wählen wir den Intervall der Synchronisierung aus.
2. Jetzt fehlt uns noch der Server. Dazu wechslen wir auf den Tab Servereinstellungen. Der Link der eingegeben werden muss sieht wie folgt aus. https://www.google.com/calendar/dav/USERNAME%40googlemail.com/user. USERNAME ist natürlich durch den eigenen Benutzernamen zu ersetzen.
3. Die Einstellungen schliessen und los gehts. Ab jetzt sollte der Kalender sich selbstständig synchronisieren.
Eingestellt von
Broneo
um
20:31
2
Kommentare
Labels:
Google,
kostenlos,
Mac
Mittwoch, 2. Juli 2008
JBoss jmx- und web-konsole schützen
In der Standarkonfiguration sind die jmx- und die web-konsole des Jboss nicht gegen fremde Zugriffe geschützt und können zum Beispiel über http://meinserver:8080/jmx-console aufgerufen werden. Dies lässt sich aber einfach ändern, da beide Konsolen normale Servlets sind. Aus diesem Grund können wir einfach die security constraints aktivieren und so den Zugriff mit einem Passwort schützen.
Um dies zu erreichen führen wir die folgenden Schritte durch:
1. Zuerst bearbeiten wir die Datei JBOSS_HOME/server/default/deploy/jmx-console.war/WEB-INF/web.xml. In dieser Datei entfernen wir den Kommentar um den Block security-constraint
2. Nun nehmen wir uns die Datei jboss-web.xml im gleichen Verzeichnis vor. Hier entfernen wir die Kommentare um den Tag 
3. In den Dateien jmx-console-roles.properties und jmx-console-users.properties, welche im Verzeichnis JBOSS_HOME/server/default/conf/props zu finden sind, können nun die Gruppen eines Nutzers und dessen Passwort festgelegt werden. Für den admin sind diese zwar schon angelegt, es empfiehlt sich jedoch, ein neues Passwort zu vergeben. Dies machen wir indem wir in der Datei jmx-console-users.properties in der Zeile admin=admin das zweite admin durch unser neues Passwort ersetzen.
4. Die beiden im vorherigen Schritt erwähnten Dateien klonen wir nun und benennen sie web-console-roles.properties und web-console-users.properties. Sie dienen uns um die gleichen Berechtigungen für die web-console zu verwenden.
5. Im Verzeichnis JBOSS_HOME/server/default/conf bearbeiten wir nun die Datei login-config.xml. Wir suchen den Tag application-policy name="web-console" 
5. Eigentlich liegen diese Dateien im Verzeichnis JBOSS_HOME/server/default/deploy/managment/console-mgr.sar/web-console.war/WEB-INF/classes. Daher müssen wir diese Dateien nun so umbennen, das der Server sie hier nicht findet.
Natürlich kann man Schritt 4 und 5 auch auslassen und einfach die Dateien an Ort und Stelle konfigurieren.
Wenn man nun die Adresse http://meinserver:8080/jmx-console im Browser aufruft, wird man nach den Zugangsdaten gefragt. Hier gibt man admin und das in Schritt 3 geänderte Passwort ein und erhält Zugang zur jmx-konsole.
Eingestellt von
Broneo
um
09:57
5
Kommentare
Labels:
Java,
Programming
Freitag, 27. Juni 2008
Parallels for Mac für 49$ bei Macheist.com
Bis ende Juni erhält man bei Macheist.com Parallels zum Preis von 49$. Dazu gibts MacPilot. Wer zu den Glücklichen gehört, die bereits ein Bundle von Macheist besitzen, bekommt noch mal 10$ Ermäßigung.
In naher Zukunft wird es von Macheist außerdem ein neues Bundle ausgewählter Mac Software zu einem herrvoragenden Preis geben. Das letzte Bundle enthielt Software wie Pixelmator, Speed Download, CoverSutra und war zum Preis von 49$ erhältlich.
Dazu kommt der schöne Vorteil des Dollar Kurses. So kostet uns Europäer solch ein Bundle nur knapp 30€.
Eingestellt von
Broneo
um
11:21
0
Kommentare
Labels:
Mac
Freitag, 13. Juni 2008
Präsentationen zur JavaOne 2008
Die JavaOne 2008 ist nun schon ein Weilchen vorüber. Wer nicht teilnehmen konnte, findet hier die Präsentationen zur JavaOne 2008.
Eingestellt von
Broneo
um
14:31
0
Kommentare
Labels:
Java,
Programming
Dienstag, 13. Mai 2008
Time Capsule in 6 einfachen Schritten selber bauen
Time Machine in Mac OS X Leopard ist eine feine Sache. Eine Time Capsule würde das ganze noch abrunden. Man hätte nicht die ganze Zeit eine surrende USB Festplatte auf seinem Schreibtisch stehen und könnte, wenn man ein Macbook, Macbook Pro oder Macbook Air sein Eigen nennt, sogar aus dem Garten, Wohnzimmer oder jedem anderen Bereich in dem das eigene WLAN zugänglich ist, Backups ziehen oder Dateien wieder herstellen.
Leider ist die Time Capsule nicht ganz billig und einige werden auch schon eine große USB Festplatte besitzen. Aus diesem Grund hier nun 6 einfache Schritte, mit denen ihr aus einer USB Festplatte und einem SMB Share eine Time Capsule bauen könnt.
In meinem Fall dient als Server eine Fritzbox 7170 mit der neusten Firmware. Diese bietet die Möglichkeit, USB Festplatten mit Fat32 Partition als SMB Freigabe zur Verfügung zu stellen. Die Festplatte kann natürlich über jeden beliebigen Router oder Rechner zur Verfügung gestellt werden.
Bevor wir anfangen sei noch gesagt, dass Time Machine über das WLan nicht so schnell ist wie Time Capsule es ermöglichen kann. Das initiale Backup benötigt recht viel Zeit. Anschließend ist es für meine Bedürfnisse jedoch in einem durchaus erträglichen Rahmen.
Los gehts:
Schritt 1:
Wir legen eine Fat32 Partition auf der USB Festplatte an. Hier kann das Festplattendienstprogramm schnell und einfach eingesetzt werden. Bitte denkt daran, dass alle Daten auf der Platte verloren gehen wenn sie formatiert wird.
Schritt 2:
Nachdem die Festplatte nun partitioniert ist, schliessen wir sie an der Fritzbox an und geben sie per SMB frei.
Wenn alles geklappt hat sollten wir nun im Webinterface sehen können, dass die Festplatte angeschlossen ist.
Schritt 3:
Damit Time Machine uns erlaubt auf Netzlaufwerke zu sichern geben wir nun folgenden Befehl im Terminal ein.
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
Schritt 4:
Wir haben in Schritt 1 eine Fat 32 Partition angelegt. Das muss sein, damit die Fritzbox unser Laufwerk erkennt. Leider schreibt Time Capsule aber nicht auf Fat32 Partitionen sondern wünscht sich das HFS+J Format. Aus diesem Grund führen wir nun folgenden Befehl im Terminal aus.
hdiutil create -size IMAGESIZE -fs HFS+J -type SPARSEBUNDLE HOSTNAME_MACADDR.sparsebundle
Dieser Befehl legt uns ein HFS+J Image an welches dynamisch bis zur festgelegten IMAGESIZE wächst.
Tip:
Ich verwende für meine 160 Gb HDD im Macbook eine 160Gb große Festplatte fürs Backup ohne Probleme. Wenn man in diesem Beispiel zum sichern 500Gb zur Verfügung hat, empfiehlt sich das Image nur auf 200 oder 250Gb IMAGESIZE zu setzen. So kann man den Rest der Festplatte noch für andere Dateien verwenden, die über das Netzwerk zur Verfügung stehen und von allen Betriebssystemen gelesen werden können.
HOSTNAME ersetzen wir durch den Namen unseres Macs. Diesen finden wir unter Systemeinstellungen -> Sharing. Hier bitte nicht "sebastian-broschs-macbook.local" verwenden sondern "sebastian_broschs_macbook"
Anschliessend ersetzen wir noch MACADDR indem wir
ifconfig en0
im Terminal ausführen und die Zahlen hinter ether kopieren. Diese sehen dann in etwa so aus. 00:1b:64:ac:9b:f0.
Wichtig: die Doppelpunkte müssen entfernt werden (001b64ac9bf0).
So sieht dann der fertige Befehl aus:
hdiutil create -size 200G -fs HFS+J -type SPARSEBUNDLE sebastian_broschs_macbook_001b64ac9bf0.sparsebundle
Schritt 5:
Wir haben es fast geschafft. Apfel + k öffnet uns nun das Fenster "Mit Server verbinden".
Dort tragen wir smb://fritz.box ein. Anschließend sagen wir dem Mac, dass wir uns als Gast anmelden möchten.
Nun zeigt uns das Fenster das Laufwerk, dass an der Fritzbox angeschlossen ist. Dieses wählen wir aus und haben es damit gemountet. Jetzt legen wir unser eben erzeugtes HFS+J Image auf diese Festplatte.
Schritt 6:
In den Einstellungen der Time Machine wählen wir das gerade gemountete Laufwerk als Backup Volume aus. Nach 120sekunden startet das Backup automatisch.
Tip:
Für das initiale Backup sollte der Mac per Kabel mit der Fritzbox verbunden werden, damit der Kopiervorgang etwas schneller abgeschlossen ist.
So das war es schon. Herzlichen Glückwunsch zur selbstgebauten Time Capsule. Sobald Time Machine nun ein Backup anlegen möchte oder gestartet wird, verbindet sie sich, falls möglich, automatisch mit der Festplatte und verrichtet ihre Arbeit.
Eingestellt von
Broneo
um
16:03
68
Kommentare
Labels:
Interessantes,
Mac,
Programming
Freitag, 18. April 2008
Default Browser aus Java aufrufen
Für den Fall, dass man aus einer Java Applikation eine URL aufrufen muss, gibt es auf sourceforge.net den BrowserLauncher2 . Mit dieser Library kann man mit wenig Code eine beliebige URL im Browser anzeigen lassen.
Dazu bindet man zuerst die Datei BrowserLauncher2.jar in seinen Classpath ein.
Danach kommt der Import.
import edu.stanford.ejalbert.BrowserLauncher;
import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException;
import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException;
Und schließlich schreibt man eine Methode, in der eine BrowserLauncher Instanz erstellt wird.
public static void launchBrowser() {
try {
//BrowserLauncher Instanz erstellen
BrowserLauncher launcher = new BrowserLauncher();
//Aufrufen einer URL durch die Funktion openURLinBrowser
launcher.openURLinBrowser("http://broneo.blogspot.com");
} catch (BrowserLaunchingInitializingException ex) {
System.out.println(ex);
} catch (UnsupportedOperatingSystemException ex) {
System.out.println(ex);
}
}
Nun kann man über die Funktion launchBrowser() den Browser mit der gewünschten URL aufrufen. Natürlich könnte man das ganze noch dynamischer gestalten, indem man der Funktion launchBrowser() die URL als Parameter übergibt.
Das sähe dann so aus.
public static void launchBrowser(String url) {
try {
//BrowserLauncher Instanz erstellen
BrowserLauncher launcher = new BrowserLauncher();
//Aufrufen einer URL durch die Funktion openURLinBrowser
launcher.openURLinBrowser(url);
} catch (BrowserLaunchingInitializingException ex) {
System.out.println(ex);
} catch (UnsupportedOperatingSystemException ex) {
System.out.println(ex);
}
}
Eingestellt von
Broneo
um
09:46
4
Kommentare
Labels:
Java,
Programming