Heiner Kücker

Java-Seite

Home

Java-Seite

   Bit Packed Array

   ASM Improved

   heterogene
   Map, HMap

   Constraint
   Code Generator

   JSP WorkFlow
   PageFlow FlowControl
   Page Flow Engine
   Web Flow Engine
   Control_and_Command

   JSP_Spreadsheet

   Code-Generator
   für Option-Either-Stil
   in Java

   verbesserter
   Comparator

   Fluent-Interface
   Code-Generator
   auf Basis
   einer Grammatik

   Visitor mit Multidispatch

   for-Schleife mit
   yield-return

   Kognitions-Maschine
   semantisches Netz

   Domain Parser

   Codegenerator_für
   hierarchische
   Datenstrukturen

   Expression_Engine
   Formula_Parser

   Thread Preprocessor

   State Transition Engine

   AspectJ

   Java_Explorer

   DBF_Library

   Kalender_Applet

   SetGetGen

   BeanSetGet

   CheckPackage

   LineNumbers

   GradDms

   Excel-Export

   StringTokenizer

   JspDoc

   JspCheck

   JSP-Schulung
   Java Server Pages
   Struts

   Ascii-Tabellen-
   Layouter

   Ascii-Baum-
   Layouter

   Ascii-Art-Fluss-
   Diagramm-
   Parser

   AsciiArt
   AssignmentMatrix
   Layouter

   StringSerial

   Silbentrennung

   JDBC_Schlüssel-
   Generierung

   bidirektional/
   unidirektional
   gelinkte Liste

   Java_Sitemap
   Generator

   XmlBuilder

   RangeMap

   StringFormatter

   VersionSafe
   XCopy

   JTextField

   CommandLine-
   ParamReader

   Bitmap-Grafik

   MultiMarkable-
   Buffered-
   InputStream

   JavaCache

   JdomUtil

   CollectionUtil

   XML Really
   Pull Parser

   Log-Filter

   Remote-Protokoll

   Sudoku-Generator

   Delegation statt
   Mehrfachvererbung

   Disjunct
   Interval Set

   WebCam_Demo

   Weiterentwicklung_Java

Alaska-XBase++-Seite

Projekte

Philosophien
Techniken


Konzepte

Sudoku

Kontakt /
Impressum


Links

SiteMap





Letzte Aktualisierung:
28.07.2015
Hier finden Sie einige Konzepte und Java-Programmierbeispiele.


Bit Packed Array
Speichereinsparung durch Speichern von ganzzahligen numerischen Werten mit einer Breite, die kein Vielfaches von 8 ist (zum Beispiel 7 Bit) in einem int-Array oder in einem long-Array, wobei die übrig gebliebenen Bits für den nächsten Wert benutzt werden.


ASM Improved
Verbessertes API der ASM-Bytecode-Lib zum Lesen von Generics-Informationen aus *.class-Dateien.


Heterogene Map (HMap)
Implementierung einer heterogenen Map (HMap) in Java.


Constraint Code Generator
Code-Generator für statische Constraint-Prüfung in Java.
Der Code-Generator übersetzt Constraint-Expressions, die aus Prädikaten bestehen, in Java-Klassen.


Control and Command
Das Framework Control and Command ist eine Fluss-Steuerung für JSP- und Servlet-Applikationen.
Es beruht auf einer eigenen Script- bzw. Steuersprache und besitzt Strukturen, Befehle, Unterprogramme,
lokale Variable und Parameter (per value/reference).


'Spreadsheet' mit Control and Command
Umsetzung des Struts-Beispiels aus dem Javamagazin 12.2004 'Spreadsheet mit Struts' mit CnC.


Code-Generator für Option-Either-Stil in Java
Nachbildung des Scala Option-Either-Stil in Java mit Hilfe eines einfachen Code-Generators.


verbesserter Comparator
Verbesserter Comparator durch reflection-freien Getter (Property-Accessor).


Fluent Interface-Code-Generator auf Basis einer Grammatik
Fluent Interface-Code-Generator für Java auf Basis einer Grammatik.


Visitor mit Multidispatch
Umsetzung Multidispatch, also nicht nur einfacher Double-Dispatch, durch eine Erweiterung des Visitor-Patterns.


for-Schleife mit yield-return
Realisierung yield-return (auch bekannt als Koroutine) mit Java ohne Threads oder Byte-Code-Manipulation.


Kognitions-Maschine für ein semantisches Netz
Dieses Programm/Bibliothek enthält ein semantisches Netz aus Aussagen und Regeln gegen welches Anfragen gestellt werden können.
Die Aussagen, Regeln und Fragen können in annähernd natürlicher deutscher Sprache formuliert werden.


Domain Parser
Seit langem beschäftigt mich die Idee, dass eine spezielle Programiersprache die optimale Lösung zur Modellierung fachlicher Aspekte unter Trennung von der erforderlichen Infrastruktur ist.
Solche eine spezielle Programmiersprache nennt man fachspezifische Sprache, domain specific language.
Eine grosse Hürde ist dabei das Implementieren eines korrekten Parsers für die jeweilige Fachsprache.
Wer wie ich nicht so gut mit javacc oder anderen grammatikbasierenden Werkzeugen zurechtkommt, kann gern meinen DomainParser benutzen.
Er ist ein Teil des Fluss-Steuerungs-Frameworks CnC, in dem er zusammen mit dem unten beschriebenen ExpressionParser die Sriptsprache aus Fluss-Steuerdatei flow.cnc einliest.


Codegenerator für hierarchische Datenstrukturen
Ein Beispiel für den Einsatz des DomainParsers ist dieser Codegenerator für hierarchische Datenstrukturen.


Expression Parser
Ein Ausdrucksparser, der Ausdrücke wie 3 + 3 zur Laufzeit abarbeiten kann.
Er beherrscht Variable, Arrays, Listen und Built-In-Funktionen.
Ich habe ihn für die Integration in das CnC-Framework geschrieben.


Thread Präprozessor
Auf dieser Seite präsentiere ich einen Preprozessor, der eine Methode einer Java-Klasse so instrumentiert, dass sie in kleine Teilstücke zerlegt wird, die von dem mitgelieferten Programm (Thread-Scheduler) koordiniert abgearbeitet werden.
Dabei wechselt der Thread-Scheduler jeweils zwischen mehreren bei ihm angemeldeten Klassen, so dass die verschiedenen Methoden quasi-parallel abarbeitet werden.
Im Thread-Scheduler können unterschiedliche Strategien der Priorisierung implentiert werden.
Durch die Umkehrung des Kontrollflusses des instrumentierten Codes, eigent sich der Preprozessor auch zur Aufbereitung von Source-Code als Ersatz zum Command-Pattern, zum Beispiel für Java-NIO oder für eventgesteuerte Applikationen, wie GUI- oder Web-Applikationen.


State Transition Engine
Ich habe eine kleine Zustands-Übergangs-Maschine, üblicherweise auch State
Transition Engine genannt, geschrieben. Sicher hat man in jedem grösseren
Projekt schon mal so was erstellt und wird es auch noch oft tun müssen. Ich habe
mir gedacht, dass man dafür eine generische und vielleicht etwas geschicktere
Lösung finden kann.
Diese Lösung habe ich hier auf meine WebSite gepackt und jeder kann Sie gern
verwenden.
Die Zustands-Übergangs-Tabelle wird entsprechend aktueller Üblichkeiten in XML
formuliert. Eigener Code in Bezug auf den Anwendungs-Kontext kann eingebracht
werden.
Es ist möglich Benutzer-Rollen mit einzubeziehen ohne dafür extra Code zu
schreiben.
Natürlich gibt es auch elementare Debugging-Features.


AspectJ, aspektorientierte Programmierung in Java
Lockere Folge von Codebeispielen von meiner AspectJ-Schulung bei der Java User Group Stuttgart,
gehalten von dem AspectJ-Trainer Arno Schmidmeier, AspectSoft und eigenen ersten
Gehversuchen mit der aspektorientierten Programmierung in Java.


Java-Explorer
Swing-Applikation, die dem Windows-Explorer nachempfunden ist.
Ein Java-Frühwerk von mir zum Ausprobieren von JFrame, JTable,
JTree und JButton im Kontext des Model-View-Controller-Pattern.


DBF-Library
Zugriff auf DBF-Dateien (dBase, Clipper, Alaska-XBase) aus Java. Natürlich inclusive Memo-Felder.
War mal zur Umstellung einer CLIPPER-Applikation auf Java gedacht,
habe ich aber nicht fertig gemacht.


Kalender-Applet
Einfaches Applet zur Anzeige eines Kalenders.


SetGetGen
Kleines Kommandozeilentool zum Erzeugen der Set- und Get-Methoden für Java-Beans.


BeanSetGet
Klasse zum Ansprechen der Set- und Get-Methoden beliebiger Java-Beans.


CheckPackage
Java-Programm zum Prüfen der package-Direktive in Java-Source-Files.
Prüft die Übereinstimmung von Pfad der *.java-Datei und der package-Angabe.


LineNumbers
Java-Programm zum Einfügen und Aktualisieren von Zeilen-Nummern in Java-Source-Files.
Dient als Hilfsprogramm zum Debugging per println-Anweisungen.


GradDms-Umrechnung
Konverter Dezimal-Grad zu Grad, Minuten und Sekunden und zurück.


Excel-Export
Klassen zum Daten-Export zu Excel über das SYLK-Format (Symbolik Link).


StringTokenizer
StringTokenizer mit Trenn-String statt Trenn-Zeichen oder Trenn-Zeichen-Liste.


JspDoc
Tool zum Erzeugen von javadoc-Dokumentationen für Java Server Pages.


JspCheck
Tool zum Prüfen der Syntax von in Java Server Pages eigelagerten Java-Code (Scriptlets).


JSP-Schulung
Präsentation zum Vortrag JSP und Servlets bei der Java-User-Group Dortmund.


Tabellen-Layouter in ASCII-Art
Klasse zum Layouten von Tabellen analog zu HTML (naja, wesentlich weniger Features) mit Bindestrichen und Plus-Zeichen für Logging und Debugging.


Baum-Layouter in ASCII-Art
Klasse zum Layouten von Bäumen mit Bindestrichen und Plus-Zeichen für Logging und Debuging.


ASCII Art Fluss Diagramm Parser
Klasse zum Parsen von Fluss-Diagrammen in Ascii-Art für Code-Generierung oder Meta-Programmierung.


ASCII Art Verknüpfungs (Zuordnungs) Matrix Layouter
Klasse zum Darstellen von Verknüpfungen von Tabellen-Zeilen (Positionen/Datensätze) in Ascii-Art.


Daten-Serialisierung in Strings mit Header-Codierung
Vielfach verbreitet sind Daten-Serialisierungen in Strings für Speicherung oder
Übertragung mit reservierten Trenn- oder Ende-Zeichen. Diese haben den Nachteil,
dass die/das reservierte Zeichen nicht ohne Probleme übertragen werden können.
Solche Zeichen müssen speziell encoded werden und die Encoding-Sequenzen
wiederum. Ich habe auch schon erlebt, dass es mit solchen Ansätzen Probleme gab,
wenn Werte zwischendurch oder am Ende leer waren beziehungsweise wenn Null-Werte
übertragen werden sollten. Bei einer bekannten Firma musste in einem Formular im
jeweils letzten Feld ein Punkt eingetragen werden, damit das Protokoll
funktionierte.
Die kleine hier vorgestellte Library soll dieses Problem lösen.


Spell Silbentrennung als Java Programm
Einfaches Silbentrennprogramm.


JDBC Schlüssel Generator / Primerary Key Generator.
Erzeugen von eindeutigen Indentifizierungsnummern für Datensätze
.
Ein kleine Klasse zum Erzeugen eines eindeutigen Schlüssels für Datenbank-Records in Datenbanken, die über JDBC (Java Database Connectivity) angesprochen werden.
Here is a small class to generate a unique key for an JDBC database record.


Bidirektional verbundene Liste
Einfach (unidirektional) oder doppelt (bidirektional) verbundenen Listen sind eine Grundstruktur der Informatik. Ich habe aber die Erfahrung gemacht, dass es immer wieder mühevoll ist, diese Listen-Strukturen vollständig und fehlerfrei zu implementieren.
Deshalb stelle ich hier diese Java-Klasse zur freien Verwendung (Open Source) bereit.
Es gibt Operationen zum Anhängen (add), Einfügen (add mit index), Löschen (remove) und Verschieben (hoch, runter, an den Anfang, an das Ende) (moveUp, moveDown, moveTop, moveBottom) der Einträge (entrys).


Java Site Map Generator.
Kleines Java Programm (Java Klasse) mit dem diese SiteMap erzeugt wurde.


Java-Programm zum Erzeugen von XML, XmlBuilder
Code zum Erzeugen von XML gibt es zu tausenden und sicher hat jeder sowas mal geschrieben.
Meine Variante erlaubt das Einstellen des Layoutes des erzeugten XMLDocument. Für die XML-Elemente ist Zeilenumbruch (newline) und Einrückung (indentation) einstellbar.
Encoding für Attribute und Elemente, das Schreiben von Processing-Instruktionen und XML-Kommentaren in das XML-Document ist (noch) nicht eingebaut.


Java-Datenstruktur zum Zuordnen konkreter Werte zu einem Wertebereich (Nummernband)
Die RangeMap ist eine performanceoptimierte Datenstruktur zum Zuordnen eines Wertes zu einem Band/Bereich von Werten (Nummernband). Dazu wird eine JDK-TreeMap durch spezielle Comparatoren und spezielle put und get-Methoden dekoriert, so dass beim Einfügen put eine Range (Wert von bis) und beim Abfragen get ein Point (konkreter Wert) benutzt wird.
Die JDK-TreeMap sorgt für das Ausbalancieren des Baumes beim Einfügen und für das performante Suchen beim Abfragen der Range-Map.


String-Formatierer-Klasse für mehrzeilige Textfelder unter Beachtung von Leerzeichen und vorhandenen Umbrüchen
Der StringFormatter bricht den übergebenen Text so um (unterteilen in einzelne Zeilen), dass keine Zeile breiter als die per Parameter übergebene Maximalbreite in Zeichen ist.
Unterschiedliche Zeichenbreiten, wie sie in Proportionalschriftarten auftauchen können, werden nicht beachtet.


VersionSafe und XCopy
Zwei Kommandozeilentools zum Sichern Ihres Source-Codes.


JTextField
Erweiterungen des JTextField um Eingabe Ziffern, Hex-Ziffern und Grossbuchstaben und mit Clipboard-Anbindung über Tasten und Maus (Kontextmenü).


CommandLineParamReader
Einfache Hilfsklasse zum Einlesen von Kommandozeilen-Parametern.


Bitmap-Grafik
Einfache Java-Klasse zum Erzeugen von Grafiken im Windows-Bitmap-Format mit 8 Bit oder 24 Bit pro Pixel.


Multi Markable BufferedInputStream
Der BufferedInputStream aus dem JDK erlaubt das Setzen einer Markierung an der aktuellen Position und das Zurückkehren zur markierten Position. Aber das ist nur mit einer Position gleichzeitig möglich. Die Java-Klasse MultiMarkableBufferedInputStream erlaubt das Setzen beliebig vieler Markierungen.


JavaCache
Eine Library bestehend aus zwei elementaren Cache-Klassen und fünf Dekorator-Klassen, durch die sich zusätzliche Eigenschaften zuschalten lassen.


JdomUtil
Eine Java-Library zum Parsen von XML mit Hilfe von JDOM und zum Umwandeln eines JDOM-XML-Documents in eine hierarchische Java-Collection aus Hashtable und Vector.


CollectionUtil
Eine Java-Library zum XPATH-ähnlichen Abfragen von Elementen in hierarchischen Java-Collections bestehend aus List's und Map's sowie von zwei Methoden zum formatierten Ausgeben von Java List's und Map's.


XML Really Pull Parser
Prototyp für einen XML-Parser, dessen Anwendugscode geanau die Struktur des XML-Dokumentes wiederspiegelt und keine Stack-Logik benötigt.


Log-File-Filter
Zwei kleine Tools für log4j Log Dateien.

Ein Program dient zum zeilenweisen Filtern der Dateien.
Mit dem zweiten Programm kann man eine Log-Datei nach den jeweiligen Threads in einzelne Dateien zerlegen.


Remote-Protokoll
Eine Library zum Serialisieren und Deserialisieren von Java-Objekten zur Verbindung von Client-Server Programmen über TCP/IP-Sockets mit Java-NIO.


Jacobe Code Beautifier
Java Code Beautifier.
Hier mein bevorzugtes Format-File zum Download.


Sudoku-Generator
Programm zum Erzeugen von Sudoku-Rätseln in Java (Sudoku Generator).


Delegation statt Mehrfachvererbung
Programm-Beispiel zur Anwendung von Delegation statt Mehrfachvererbung am Beispiel einer Hierarchie von Lebewesen.


Disjunct Interval Set
Mengen-Klasse (set class) für nicht überlappende (disjunkte) Intervalle beliebiger Comparable-Objekte.


WebCam Demo
Demo eines WebCam-Applets mit den Fotos eines Ausflugs nach Bad Reichenhall.


Weiterentwicklung Java
Jede gute Lösung öffnet Perspektiven und Wünsche nach mehr.
So ist auch Java sicher nicht am Ende der Entwicklung angekommen.
Hier einige Konzepte zur Weiterentwicklung von Java.