Neues Blogdesign

Posted: Juni 26th, 2011 | Filed under: Allgemein | Tags: | No Comments »

Ich hoffe “es” gefällt!


Java Chat Tutorial

Posted: Juni 21st, 2011 | Filed under: Java, Programmieren | Tags: , , , , , , , , , , | 2 Comments »

imageAls ich meinen Netzwerk-Chat jLanChat programmiert habe, musste ich mich intensiv mit diesem Thema beschäftigen. Herkömmlicherweise verwendet man zum versenden von Nachrichten das sogenannte Client-Server Prinzip. Will zum Beispiel PC1 eine Nachricht an PC2 senden so muss PC2 einen Socket öffnen mit dem sich PC1 dann verbindet und über diesen Socket die Nachricht sendet. Will man nun eine Nachrichtenleitung mit mehren PCs aufbauen so benötigt man schnell einen Server, mit dem sich dann alle Clients verbinden und über diesen dann kommunizieren.

Wenn wir die Kommunikation über Multicast (Punkt zu Gruppe) tätigen brauchen wir keinen Server. Denn fast alle Router/Switches unterstützen Multicast.

Alle Teilnehmer verbinden sich mit dem Switch/Router und treten einer Gruppe, in Form einer IP-Adresse und eines Ports (z.B.: 230.0.0.1:4447), bei. Bekommt der Switch/Router jetzt eine Nachricht eines Clients mit der Gruppen-Adresse als Zieladresse vervielfältigt der Switch/Router diese Nachricht und sendet sie an alle die der Gruppe beigetreten sind, auch an den der die Nachricht abgesendet hat. So kann man zum Beispiel einen serverlosen Chat aufbauen. Wenn man’s genau nimmt übernimmt der Switch/Router jetzt unsere Serverfunktion.

Um das Ganze in JAVA zu realisieren muss man folgende Bibliothek ins Projekt einbinden: http://commons.apache.org/lang/

Hier unser Beispiel, Es gibt eine Sender-Klasse und eine Empfänger-Klasse:

Sender

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;


public class Sender {

  public static void main(String[] args) {
    // Netzwerk-Gruppe
    String NETWORK_GROUP = "230.0.0.1";
    // Netzwerk-Gruppen Port
    int NETWORK_GROUP_PORT = 4447;
    // Client-Port
    int CLIENT_MULTICAST_PORT = 4446;
   
    // Nachrichten-Codierung
    String TEXT_ENCODING = "UTF8";
   
    try {
      MulticastSocket socket =  new MulticastSocket(CLIENT_MULTICAST_PORT);
      byte[] message = "Hallo Welt".getBytes(TEXT_ENCODING);
     
      // Nachricht an Gruppe senden
      socket.send(new DatagramPacket(message, message.length , InetAddress.getByName(NETWORK_GROUP) ,
NETWORK_GROUP_PORT
));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 

Empfänger

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;


public class Receiver {

  public static void main(String[] args) {
    // Netzwerk-Gruppe
    String NETWORK_GROUP = "230.0.0.1";
    // Netzwerk-Gruppen Port
    int NETWORK_GROUP_PORT = 4447;
   
    // Nachrichten-Codierung
    String TEXT_ENCODING = "UTF8";
   
    InetAddress group;
    MulticastSocket socket;
 
    try {
      // Gruppe anlegen
      group = InetAddress.getByName(NETWORK_GROUP);
      socket = new MulticastSocket(NETWORK_GROUP_PORT);
     
      // Gruppe beitreten
      socket.joinGroup(group);
     
      byte[] bytes = new byte[65536];
      DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
     
      while(true){
        // Warten auf Nachricht
        socket.receive(packet);
        String message = new String(packet.getData(),0,packet.getLength(), TEXT_ENCODING);
        System.out.println(message);
      }   
     
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 

Ich hoffe ich konnte dem ein oder anderen damit helfen.

Das ganze könnt ihr euch als Eclipse Projekt hier herunterladen (inklusive Bibliotheken): Eclipse Projekt – Tutorial Net Send


Kleiner und schneller PDF-Viewer

Posted: Juni 19th, 2011 | Filed under: Software | Tags: , , , , , | No Comments »

http://cdn.portableapps.com/sumatrapdf.pngSeit längerer Zeit wollte ich mal meinen Lieblings-PDF-Viewer vorstellen. Er hat den Namen SumatraPDF und beschränkt sich auf die wesentlichen Funktionen. Des weiteren ist er sehr schnell, klein, leicht zu bedienen und nicht überladen wie andere PDF-Reader. Leider gibt es ihn nur für Windows. Zum Download geht es hier entlang: http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader.html

 

Screenshots

imageimage


USB-Anschlüsse einsparen

Posted: Juni 18th, 2011 | Filed under: Allgemein, Tutorials | Tags: , , , , | No Comments »

Jeder kennt das wahrscheinlich oder hat es schon mal erlebt. Die USB-Anschlüsse im PC reichen nicht und man muss umstecken nur um mal kurz ne Kamera oder ähnliches anzuschließen. Ich habe das Asus M4A87TD EVO Mainboard welches über 8 USB-Anschlüsse verfügt. Klingt nach sehr viel aber dennoch ausreichend für mich oder andere Leute. Maus, Tastatur, externe Festplatte, Drucker, Kamera, Grafik-Tablet, USB-Hub (10m der an meinen Couchtisch und an den Fernseher geht) und eine Funk-Maus und schon sind alle Anschlüsse belegt. Dann kommt jemand und will sich was kopieren oder will dir ein paar Daten zuschieben und schon geht das “Umgestecke” los.

Das hat mich auf die Idee gebracht die alten USB-PS/2-Adapter für meine Maus und meine Tastatur zu verwenden. Siehe da gleich mal 2 USB Steckplätze eingespart. Die Adapter hab ich von meinen zwei Cherry Keyboards. Falls ihr keine solche Adapter rumliegen habt bei Amazon kriegt ihr die schon ab 2.50€.

IMG_4990IMG_4993


Elegante Kontrasterhöhung in Photoshop

Posted: Juni 2nd, 2011 | Filed under: Fotografie, Tutorials | Tags: , , , | 3 Comments »

Ich möchte hier eine recht elegante Methode vorstellen, mithilfe von Photoshop, eine ressourcenschonende Kontrasterhöhung vorzunehmen. Vorteile dieser Methode sind,  im Vergleich zur herkömmlichen Vorgehensweise, die eben erwähnte Verschonung der Ressourcen von Eingriffen, eine leichte Regulierung und Nachregulierung und vor allem die Beständigkeit der gegebenen Farbwerte.

Die Technik basiert auf einer Überlagerung des Stock-Bilds mit seinem kontrastreichsten Farbkanal. Gehen wir das Thema Schritt für Schritt an und öffnen ein zu bearbeitendes Bild in Photoshop (In meinem Fall Photoshop CS4, die Methode sollte aber in jeder mir bekannten Version analog durchführbar sein und auch auf andere Bearbeitungsprogramme wie Gimp u.Ä. übertragbar sein).

Ich entscheide mich hier für ein Portrait. Es fällt auf, dass das Bild ohnehin schon sehr kontrastreiche Züge hat, ich will aber versuchen Hautmerkmale, Schattierungen und Haare besonders hervorstechen zu lassen um dem Bild einen verunreinigten Touch zu geben.

Mit dem Reiter „Kanäle“ im Ebenen-Fenster wechseln wir in die Kanalansicht des Bildes.

 

Wir werden jetzt versuchen den Farkanal mit den kontrastreichsten Farbinformationen zu finden. Es lässt sich hier erkennen, dass die Farbwerte des Bilds durch den RGB-Modus gespeichert werden. In Photoshop lassen sich die drei Farbkanäle für Rot, Grün und Blau einzeln anzeigen und bearbeiten. Die einzelnen Farbkanäle stellen die Intensität jeder der drei Farben in den entsprechenden Bereichen dar. Das letztendliche Bild entsteht dann dadurch, dass die Farbwerte für jeden Pixel verrechnet werden. Analog funktioniert dieses Prinzip auch für die anderen Modi wie CMYK. Das Akronym steht hierbei für Cyan, Magenta, Yellow und Key (Schwarz). Wir gehen also jeden einzelnen dieser Kanäle durch und vergleichen nach Kontrast.

Ich konzentriere mich hier auf die Farbinformation im Bereich des Gesichts und stelle fest, dass in meinem Fall der Blau-Kanal den höchsten Kontrast bietet.

Diese kontrastreiche Graustufendarstellung unseres Bilds möchten wir jetzt als eigene Ebene einfügen. Am einfachsten funktioniert dies, indem wir, mit aktiviertem Blaukanal, den gesamten Darstellungsbereich mit Strg+a auswählen und mit Strg+c kopieren. Anschließend verlassen wir den einzelnen Kanal, aktivieren wieder den gesamten RGB-Bereich und wechseln in den Reiter „Ebenen“. Hier erstellen wir eine neue Ebene und fügen den zuvor kopierten Blaukanal mit Hilfe von Strg+v ein.

Um die beiden Ebenen miteinander zu verrechnen, wählen wir für unsere neue Blaukanal-Ebene den Ebenenmodus „Ineinanderkopieren“. Durch die Wahl dieses Ebenenmodus haben wir den entscheidensten Vorteil zur herkömmlichen Kontrasterhöhung mit Gradationskurven etc. gewonnen: Veränderungen der Farbintensität bleiben minimal und bleiben nachträglich steuerbar. Ein Blick in die Spezifikation Adobes zum Ebenenmodus „Ineinanderkopieren“ verrät:

Multiplies or screens the colors, depending on the base color. Patterns or colors overlay the existing pixels while preserving the highlights and shadows of the base color. The base color is not replaced but is mixed with the blend color to reflect the lightness or darkness of the original color.

Zum Vergleich habe ich auf das ursprüngliche Bild eine, zugegebener Maßen übertrieben starke, Kontrasterhöhung mit der Gradationskurve für den RGB-Modus durchgeführt. Dabei wird eine krasse Farbänderung ins Rote beobachtet, ohne dass dabei der Detailgrad erreicht wird, den wir bei unserer Methode beobachten können.

Zum Schluss lässt sich die erwirkte Kontrasterhöhung gegebenenfalls abschwächen oder verstärken, indem die Deckkraft der Blaukanalebene verringert, bzw. die selbige Ebene einfach beliebig oft dupliziert wird. Außerdem ist es durchaus denkbar diese Kontrasterhöhung durch das Anwenden einer Ebenenmaske auf die Kanalebene selektiv ein- oder auszublenden, was die Methode äußerst anpassbar macht.


Pages: Vorherige Seite 1 2 3 ... 20 21 22 23 24 ... 50 51 52 Nächste Seite