Stand still and watch the patterns, which by pure chance have been generated: Stains on the wall, or the ashes in a fireplace or the clouds in the sky, or the gravel on the beach, or other things. If you look at them carefully you might discover miraculous inventions. (Leonardo da Vinci)
 

Setting the team rules

March 27th, 2009 Communication| 1 Comment »

Teams are just small “societies” of different people coming together to work: And that is A) achieving personal goals and B) achieving the team goals. This is not an easy task. There is one basic project a team should set up: Development of a strong team statement. As I explained in my article “The Jerk is gone” we did this to have a powerful guideline to rely on when we face conflicts. I want to share those rules. They’ll work in IT teams as well as in any other workplace group of people.

1. Team Culture

  • We respect each other.
  • We try to build personal relationships to each other to foster faith and open communication.
  • We value constructive critics and avoid to verbally attack each other.
  • We treat other colleagues and the management, and also clients and partners, as if they were team members.
  • We strive for celebration of personal and team success.
  • As team members we offer help to find solutions even if the context is outside our responsibility.
  • A solution or idea which evolved from the discussion of several team members is better then the opinion of just one single person.

2. Meetings

  • We have a daily meeting between 10 and 10.15 where every team member has to answer 4 questions: What did I do yesterday? Did I accomplish every task? What will I do today? Do I have any problems?
  • Additional meetings can be called to discuss critical aspects and architectural approaches in the team.
  • All team members are on time otherwise the person who is late must rework the contents of the meeting and proactively gain and share information. Exceptions: Illness, holidays, meetings with clients or other departments.
  • If someone calls a meetings that person is responsible to write the agenda and send it to participants one day in advance.
  • No person will receive responsibilities without his / her agreement.
  • For extraordinary meetings the team will appoint somebody to take the minutes.
  • Solutions are more important then time. We finish any constructive discussion or solution finding process even if the scheduled time frame is exceeded already.

3. Communication and decision making

  • At every time there is just ONE person speaking. Interruptions and side discussions are not allowed.
  • We focus on facts; emotions and personal bias are ignored as far as possible.
  • We respect the time of other team members and the predefined schedules.
  • We first seek to understand what others really mean and try to avoid to judge them by subjective positions.
  • We aim at distribute speaking time equally among the discussion participants.
  • We respect and value the opinion and help of experts especially when they are team members.
  • We accept the company’s hierarchy of decision making, given roles and responsibilities.
  • We want to become better.
  • If a team member identifies a problem he tries to deeply understand the problem and develops a few alternatives to solve it before presenting it to the team.

Those rules sound somewhat strict and some of them seem to be to unspecific. It is hard work to establish those rules within a team, especially when there are team members who find themselves to be restricted by them. But it can be a vital foundation of togetherness to find the best ruleset for the team and having the end in mind.


The Jerk is gone

March 25th, 2009 Communication| 2 Comments »

As Seth Godin, author of several books I would suggest (Tribes, The Dip, The Idea Virus), lately had written in his blog, there is one big danger a company has: A jerk “who knows every technical detail” and who is the only one “who can fix that big machine”. I once made an experience with such an “I am the sytem!” - jerk who almost completely destroyed the positive, innovative culture of a whole company just because he felt insecure and threatened as the team grew and new products needed new technical approaches which blew the scope of the existing system. The fear of loosing some of his control was greater then the fun and motivation every other team member felt when we started to leave the past to build a new future. He is gone! A year ago! But there is still a lot of everyday trouble in handling the system he once “owned”. The lack of documentation and system architecture, the narrowly confined parts other team members worked on in the past and the complexity of the overall system needs a lot of effort for extending the system or reengineering single parts to allow more integration. This effort costs time and money and often leads to frustration within the team. But nevertheless the team tried to make a virtue out of necissity: Every team member became an expert of a part of a system and is responsible for the evolution and also serves as the contact person if anybody has trouble or feature wishes regarding that special part. Additionaly we developed a team statement which contains several rules for open communication, sharing of knowledge and the team based ownership of code. Priciples that never woulod work that great if the team did’t have the experience of working with the jerk.


5 Principles to improve your Code Quality

March 18th, 2009 Development| No Comments »

Since I write software I am conviced that this is not just a kind of a technical handicraft but also an act of high creativity - say art! Since I work with different people to produce software code in a team I wonder how different working styles, the different personal and professional backgrounds, and the chaos of … uhmmm … artistic individualism can lead to high quality. To often there is chaos in the code as well, even if individual modules seem to be almost perfect. I want to name 5 fundamental priciples every programmer should follow to prepare the ground of high quality software because upon this ground there is enough space to use his / her own coding and working style as a valuable part of the whole.

1. Simplicity and Elegance!

Simplicity is not always elegance and elegance is not always simple. But in coding there are some strong links between both. In my eyes simplicity means that the complexity of a system must be adequate and comprehensible. Every part of a system should add something distinct and valuable to the whole. The parts are associated together by similarity or domain and don’t hide any nasty surprises. Achieving this is not easy. Simplicity is not easy - it’s hard work of understanding what the code is for and how several parts can be abstracted and substituted. The coder have to recognize patterns within the code and between several projects to identify modules that can be added to common libraries… and so on. A good use of interfaces underlines the simplicity - the coder reduces the complexity of system parts for other parts or other developers that use a system.

And there is a state of simplicity that is somehow elegant or aesthetic. It takes time to really understand that.

2. Give it a proper Name!

When you really know the “thing, be it a class, an objet reference, a variable or a function, there shouldn’t be any hassles in finding a proper name. Names can help you to think about the concepts and functionalties you write or use while developing and they should help you to understand the code while reading it.

3. “Make it readable” equals “make it understandable”!

Your audience is not just the compiler and yourself. It’s other programmers, your team mates, possibly your client or your successor (when you decide to leave). And it’s part of your job to write code for their benefits. There are three simple words that summarize what to do: The three C’s - Consistent, Conventional, Concise!

  • Consistent
    Develop your own style and use it throughout your code parts and projects. If you are coding for a company adopt the “house style” and use that instead of your own. It’s somehow stupid that there are so many fights about how to set brackets, how to intend code, how to insert comments or even how to sort the member of classes. I say: Fight if you want to but stick to the result whenever you find one.
  • Conventional
    Even if you have your own style let it be based on one of the industry standards (e.g. K&K Brace style, Extended Brace Style, Intended Brace Style …)
  • Concise
    Know what you are doing and why. If someone asks you why you write it that way, know your arguments - Think about it! It’s important whenever there is a new team member who has to adopt your style and that is not easy if there are no good reasons to use it.

4. Be defensive!

Be careful while coding! Don’t code in a hurry! Think about what you are doing: It’s engineering and solely because it’s just writing some code to a computer it is still some kind of construction. And construction has to be safe; otherwise there is a high risk of a (system) collapse. Therefore a good software developer has always to be doubtfully about the correctness of some piece of code. He never should assume the context in which a function is called, he should not assume that a function never will nver produce an error and that nobody will try to access that function in ways it is not meant to be called. Some additional points to have in mind when coding the defensice way:

  • use safe data structures
  • check every return value (even if it’s just a standard function you used already for thousends of times)
  • handle memory carefully
  • initiate variables always when they are declared (or use the constructor of a class to initiate fields)
  • check numeric limits
  • add preconditions, postconditions and check vor invariants within functions

5. Selfdocumenting Code needs less documentation!

Edwin Schlossberg: “The skill of writing is to create a context in which other people can think” (found here) When you code always think about others that have to read and understand what you did later on. You only need to comment that fundamental parts (classes, funtions) and avoid extensive inner code comments when you choose meaningful names, avoid redundance, have clear data flows, strict separation of concern and very high cohesion.

Just think about a function call “int x = r12.s(3);” where you also could write “int innerSize = room12.getSize(Room.INNER_SIZE);” Got it?


Questions I ask during Job Interviews

March 3rd, 2009 Recruiting| 3 Comments »

In my current job I am responsible to interview new candidates for the developer team. Since this is the first time that I am sitting at this side of the table I had to develop my own system of questions that would lead to the informations I need to decide whether someone is suitable for the team or not.

I want to share those questions:

1. Methodology

  • What is agile software development? Do you know or have any experiences with the agile principles? What is your opinion about agile team and organizations.
  • What is code refactoring? What is it used for? Do you have some best practices how you refactor your code?
  • The topic is debugging: How do you handle bugs?
  • What is Test-Driven-Development? What is your opinion about TDD? What would you say if I tell you that I do not like TDD at all.
  • Do you know design patterns? Did you use them already? What is your favorite one? How do you learn design patterns?
  • What is AJAX? How does AJAX work? What is the difference between AJAX and Web2.0?
  • Can you handle the words cohesion and seperation of concern?

2. Thinking

  • I tell you to learn a new programming language, say Ruby. How do you organize the learning? What will you do first?
  • What would you do if I give you 5 million Euro to launch a start up?
  • What is the most important thing you want to do within the next two years?
  • What is my company, the company you want to work for, doing? How do you figure the underlying technology we’re uisng to do exactly this?
  • Which 5 books did you read last?

3. Common chat questions

  • Do you like google? What do you like about it?
  • What are current innovations in the java ecosystem?
  • It is your task to design a database which holds personal data about some million people. What is the significance of data privacy protection?
  • How did the internet change techologically during the last 5 years? How does the future look like?

4. Java Questions

  • What stands transient for?
  • What are annotations? What are they used for? What is your opinion about using annotations?
  • What are the principles of programming servlets?
  • What is the session scope? Are there other scopes? What are they used to?
  • Tell me about the life cycle of a standard java application and a servlet.
  • Is it possible to use Multithreading in Servlets? Should you?
  • What is the differnce between a stack and a queue?
  • What are the technical principles o a hash map?
  • What are Generics? How do you use them? What is your opionion about generics?
  • Describe the deployment of a Java Application.
  • What is JDBC? What is Hibernate? When do you use them?
  • Why is the main method static?
  • Which impacts does the final modifier have on object references?
  • How do you let the JVM execute some code right before the main method is invoked?
  • What is reflection, what is introspection?
  • What is the basic idea of a java bean?
  • How do you optimize the performance of a loop?
  • What is the difference of a servlet and an applett? What does they have in common?
  • How do you forward a http request from a servlet to a JSP? Which pattern can you realize by doing this?
  • What are the priciple of RMI?
  • How do you integrate some native C-code to a Java Class?
  • What is JUnit and how do you use it?
  • Is it possible to realize a Callback mechanism in JAVA?

5. PHP questions

  • Tell me about arrays in PHP? What are the principles? What do you not like about arrays in php?
  • Can you name some array sorting functions in PHP?
  • How do you write multiple variables using echo? What is the fastest way doing that?
  • What dou think, is PHP object oriented? Why?
  • What is the difference between “1″ and “True”?
  • How do you write to the end of a file?
  • How do you define constants in PHP classes?
  • Is it possible to overload methods in PHP?
  • How do you use callback functions in PHP?
  • What additional features do you think should a future version of PHP provide?
  • What is Zend?
  • What is Pear?
  • What about type safety in PHP? Any opinions?

6. Logic

  • Connect all dots using just 4 lines:
  • There is a town with two hospitals. One is very big, the other is quite small. On one day the newspaper says: 3 boys and 9 girls were born yesterday. What do you think: Which hospital is more likely to have such rates?

7. Opbject Oriented Principles

  • What is the difference between an abstract class and an interface? When do you use the one or the other? What impacts does each have?
  • What do you understand by encapsulation?
  • What is polymorphism? Can you give me an example?
  • What are alternatives to object oriented languages? When do you use them?
  • What happens when you instantiate an object?


2 Examples of how OpenSource could improve your overall dev-team performance

February 23rd, 2009 Development, Open Source| 1 Comment »

Developing special, complex, but independent functional subsystems can be done in two ways:

  1. Develop it by yourself
  2. using OpenSource Frameworks, APIs, and SDKs

Of course, this is dependent on the type of software you want to create, it is dependend on the domain, the company you’re working for, and the basic conditions you’re facing. However, my experience usually is: A developer team is confronted with a project, which is too large to accomplish. The common reasons: lack of man power, time, and knowledge. In some cases the team will completely reject the project, in other cases the team will recommend a lightweight version which only covers a subset of the requested features, and in a few cases the team will just begin to develop a solution on its own … flatlining due to those high requirements. In most cases, the easiest way to solve complex but well known problems with limited resources is to use OpenSource Frameworks or APIs. There are solutions for almost every task one could face in programming. Using these, the team can focus on the important things and put first things first. I want to show two examples of how a OpenSource producted helped me and my team to develop a solution which we couldn’t accomplish on our own with the given resources (Manpower, Time)

Example 1: Implementing a flexible, high performance Enterprise Database Search for an existing PHP/MySQL System.

The problem: The client had had a very large mySQL database which was very slow and unstructured: A composite of about 200 tables with up to 18 Million data sets and each table having50 fields and more. The tables were not normalized nor were the fields optimized using proper filed types and lengths. To perform search requests they added two hash values allowing users to find information very fast as long as they’re just looking for standard values. More sophisticated search requests, table analytics, and fuzzy searches are simply not usable: They need about 20 to 30 minutes to finish and paralyze the database server for other processes. This situation was not accaptable regarding the future of the overall system. A complete re-design of the database was not possible as the first step. Because money and manpower was limited. We had to find a neat solution which is cheap but powerful, which could be implemented seamlessly in the PHP based system and which can handle the complexity of the data itself.

The solution: Read queries shall be seperated from the master database. In the same breath fuzzy searches (e.g. phonetic) shall be enabled. Ideally those fuzzy read queries directly deliver results without disturbing the rest of the database. After several brainstormings, weeks of thinking and planning, the rejection of other sound but not usable alternatives, and a lot of coffee we discovered the solution:

Apache Lucene Solr

Apache Lucene Solr

Apache Solr. This is an enterprise search server based on lucene. We could achieve all objectives by appointing two developers three weeks to integrate Solr in our systems. Solr enables access to a structured, highly configurable fulltext index by using the standard HTT protocol. It was not our job to implement all those funky search algorithms and index strucures but to design a proper index scheme which meets both, the complexity of our data and the flexibility of the search queries we wanted to have. We decided to use Solr as a tier right above the database which just stores the index and the particular id of the result dataset but no data. Updates are solved by triggers within the mySQL database. Whenever something is updated or deleted in one of the db tables a trigger writes to a special update table. This table is read frequently by a batch job which transfers db updates to the index.

In the existing system we replaced all reading queries by an lightweight search API which encapsulates a two step retrieval: 1. Search query for Solr 2. Database query with the result set (of id’s). A Search query which needed round about 20 minutes to perform now needs not more then 0.1 seconds. We can create complex analysis and flexibly react on special search requests by our client which were rejected until now “by technical limitations”.

One of the moste important advantages Solr has is its independence. The system which was aimed to use the new search system was written in PHP. But there is no proper solution for PHP. But with Solr we just could use the standard HTTPClient to send requests to the Solr (which runs on tomcat).

Today we use the solr index for several databases and in three different environments: Integrated in PHP, directly in JAVA, and through XSLT as a HTML based web search form.

Example 2: Implementation of a text analysis system to extract and transport structured data out of unstructured text to a relational database.

The Problem: A client uses specific data to back up process critical decisions. This data is embedded in texts and thereby not automatically processable. The manual effort to structure the data of interest ist terribly expensive, but the implementation of a text information retrieval system which could automatize this task is just to expensive to develop by a team of 10 developers in terms of time and money. A simple, lightweight solution is almost impossible to imagine because of the high complexity of the data.

Gate - General Architecture for Text Engineering Applications

The solution: The university of Sheffield develops an OpenSource System which is perfect to use for solving the problem: GATE. This is a framework to read and process textual data. In addition to a basic processing framework GATE consists of a bunch of plugins covering several capabilities from different domains. The most important plugins are consolidated as ANNIE, which stands for A nearly new information extraction system). Basically GATE consists of Language Resources (LR) and Processing Resources (PR). The latter are orchastrated in pipelines and used to process language resources, e.g. documents or corpora. Processing in this context means that contents are annotated throughout the process. Our task especially required the use of two ANNIE processing resources: The JAPE-Transducer and the gazetteer. The Gazetteer uses several lookup tables to apply annotations for named entities. Therefore we built a bunch of general and domain specific tables: Firstnames, Lastnames, Cities, Zip-Codes, Streetnames, Legal Forms, Key Words, Toplevel domains etc. The JAPE-Transducer in turn uses annotations to identify patterns of higher level qualified information. Patterns are described in the JAPE language, which is based on regular expressions but applied on annotations and their features (properties).

The information identified by the JAPE Transducer is anlayzed, structured, normalized at the end of the process to prepare the transaction to the relational database. Our result: The system reads, processes and stores about 5000 documents in 20 minutes. By the addition of a compouter aided manual process for all documents with ambigious information we reached a rate of almost 100 % and a quality that is much higher then the former manual reading of the documents.


Passion for Technology: What is it all about?

February 21st, 2009 Communication, Development, Innovation| No Comments »

I think that Passion is one of the vital skills a software developer should possess. Passion for technology, passion for solutions, passion for progress. Mike Peters has pointed at this tellingly precise in his blog aritcle “How to pick a GREAT Software Engineer“. He writes, that passionate developers are characterized by reading DZone or TecCrunch, testing new software, or writing code in their sparetime:

Love what you do and pass that love to everyone you deal with. Always be positive, energetic and make progress, no matter what. What do you do in your spare time? If you’re not writing code, installing a virtual machine, reading TechCrunch/Slashdot/DZone or testing out the latest version of Windows 7, you are not passionate about technology.

I completely aggree with that. Of course there are things much more important then technology (family, friends, health etc.) but I think that passion in this context just means that technology is not just a job but also a hobby, a hobby which serendipously became ones job. And as a hobby it affects the daily life, the character and thinking. Maybe I can express it that way: A triathlet, a football fan and a technologist (to use a name which expresses the passion more then the title software developer) are on beach holidays with their kids and spouses. The triathlet will go on a beach run as soon as his kids are playing in the water and his wife is relaxing in the sun. The football fan will inform himself about the results of his favorite team. And he will buy newspapers, search the internet, call friends at home or ask other tourists until he knows how the match ended. And so is the technologist. He will pleasurably read a book about an interesiting field of technology at the beach (my beach lecture last year in south africa was The Big Switch written by Nicholas Carr). Maybe he actually will have his laptop with him to check his RSS subsrictions in the evening as soon as his family fall asleep; and some will start eclipse to try a  tutorial about the new framework or SDK. Those three guys have one thing in common: While doing their stuff they feel an inner satisfaction which is motivated completely intrinsic. Friends or their partners only have little understanding and will wonder how one can be that passionate about such an apparantly unimportant thing. But this question is not really important to the triathlet, the football fan an the technologist. Especially for the technologist its just a neat sideeffect that he can make a living with his hobby. To come back to the article I mentioned above: I think that its really important to be passionate about what you do when you work as a software developer or engineer. I made experiences that there are a lot of developers who understand their occupation as nothing more as a 9 to 5 job. In a lot of cases this will be enough. A lot of projects will succeed and they will implement some beautiful systems. But at the end of the day there is no fun and little innovative potential. They will mark time without making progress for theirselfs and on the team they are working in.


Projects

February 18th, 2009 Uncategorized| No Comments »

Enterprise Projects

Phone Database

Bei diesem Projekt geht es um die sinnvolle Wiederverwertung der Daten des Deutschen Telefonbuchs. Es wird eine Komponente entwickelt, die sowohl die Datensicherheit und vor allem den den Schutz der privaten Informationen gewährleistet, als auch eine schnelle Suche und Prozessierung dieser Informationen ermöglicht. Neben der automatisierten Anreicherung der Stammdatenbestände einiger Kunden wird vor allem eine Verwertung von implizit in den Daten verborgener Informationen angestrebt: Extraktion von Branchen-Semantiken, saubere Datenbeständen für Plausibilitätskontrollen, der Aufbau einer qualitativ hochwertigen (anonymisierten) Namensdatenbank im geografischen Kontext etc. Die Suchkomponente und die Datenmanagementkomponente soll zukünftig auch den Zugriff aus anderen Anwendungen (Web, dritt-Anbieter, etc) ermöglichen und wird demnach als Service konzipiert und in einer sich im Aufbau befindlichen serviceorientierten Umgebung integriert.

Insolvency Mining

Eine auf GATE und WEKA basierende Text Mining Komponente, zur Klassifikation und autmatischen Extraktion relevanter Informationen aus Insolvenzveröffentlichungen. Die von Amtsgerichten veröffentlichten Texte zum Stand privater und geschäftlicher Insolvenzdaten werden durch eine zweiwege - NLP Komponente (Regelbasiert und Machine Learning basiert) analysiert und ür unsere Kunden so aufgearbeitet, dass die für den Kunden relevanten Daten aus den Texten herausgefiltert werden können. Zusätzlich werden die Texte durch verschiedene Verfahren des Data- und Text Mining analysiert um zusätzliche Muster in den Texten erkennen zu können und unseren Kunden dadurch einen gewissen Mehrwert zu bieten.

KTom – Enterprise Accounting Software

AJAX basierte Anwendung zur Zuordnung von Kontenbewegungen zu Rechnungen, Aufträgen, Gutschriften und anderen Positionen. Da der Auftraggeber mehrere tausend Kontobewegungen im Monat zu verzeichnen hat, konnte nur ein geringes Grad an Kostentransparenz geschaffen werden. Durch die Software musste die schnelle manuelle Abarbeitung der Zuordnungen gelöst werden. Dazu kam der Softwareergonomie während der Umsetzung ein sehr hoher Stellenwert zu. Ein weiterer Aspekt war die Implementierung schneller Suchalgorithmen um die Kontrolle über die gesamte Datenbasis des Unternehmens abdecken zu können. Die gesamte Anwendung musste buchhalterisch einwandfrei umgesetzt sein und über einen Export-Mechanismus mit einer drittanbieter Software (Datev) integriert werden.

SCRUM Introduction

Wachstum erfodert Veränderung. Durch die Expansion des Unternehmens traten in der Planung und Umsetzung von IT Projekten sowie in der Kommunikation zwischen den IT Verantwortlichen und dem Rest des Unternehmens vermehrt Probleme auf. An dieser Stelle kam SCRUM ins Spiel. Wir implementierten den Ansatz innerhalb von 2 Monaten vollständig in der It Abteilung des Unternehmens und schufen damit die Basis für die erfolgreiche Entwicklung eines stabilen und innovativen IT Teams mit einem hohen Grad an Selbstverantwortung.

Name DB

Namen sind Schall und Rauch. Namen haben verschiedene Schreibweisen, Namen können verschiedenen Geschlechtern zugeordnet werden, Namen werden falsch geschrieben und Namen sind oft abhängig von der Herkunft des Namensträgers. In diesem Projekt habe eine große Namensdatenbank mit statistischen und phonetischen Informationen geschaffen, welche über eine API die Möglichkeit bietet Namensdaten besser handhaben zu können: “Michi” ist eigentlich “Michael”, “Frau Horst Maria” ist eigentlich “Herr Horst Maria” und “Tomas” kann auch “Thomas” oder “Tomasz” geschrieben werden und tritt oft in den Kurzformen “Tom” und “Tommy” auf.

Solr Integration

Die Datenbank als Bottle Neck. Mit einer “organisch” gewachsenen Datenbank und über 20 Mio Einträgen war es dem Auftraggeber beinahe unmöglich die Kontrolle über die Daten zu behalten. Manuelle Suchvorgänge nahmen bis zu 20 Minuten in Anspruch, was zu weniger Kundenzufriedenheit, Mitarbeiterfrustration und nicht zuletzt zur fast vollständigen Blockade der Datenbank für andere Prozesse führte. Die Lösung fand ich in Solr, einem auf Lucene basierenden Volltext Such-Server. Ich entwickelte ein Datenschema um die suchrelevanten Daten so aktuell wie möglich innerhalb des Suchservers zu halten. Dadurch wurden Suchprozesse, die vorher weit mehr als 10 Minuten benötigten, auf wenige Millisekunden reduziert. Der Suchserver ist heute über eine speziell entwickelte API als Service in die Life Anwendung des Auftraggebers integriert.

eThor

Das Land Brunei vergibt jährlich einen IT Award an interessante Entwicklungen und projekte aus dem IT Bereich. Im Jahr 2005 trat die Firma Teleconsult Intl. mit einer prototypischen Software zur Videokommunikation an: eTHOR. Die Planung und Umsetzung dieser Software führte ich in enger Absprache mit Teleconsult und Fachberatern aus der Medizin bzw. der Landwirtschaft vollständig selbstständig durch. Nachdem wir zunächst einen Award von der Regierung Bruneis gewannen, traten wir bei den Asia Pacific ICT Awards an und konnten auch hier den “Special Mention Award” gewinnen.

Petronas Intranet

Im Rahmen meines Auslandspraktikums bei TAO Consulting schulte ich mit zwei Kollegen die MitarbeiterInnen des Petronas IT Teams in DHTML und AJAX Technologien und entwickelte gemeinsam mit ihnen eine prototypische Anwendung innerhalb des Petronas Intranets. In einem 3 tägigen Projekt im Petronas Tower Kuala Lumpur entstand dabei eine ajax basierte Webanwendung für Befragungen und In-House Schulungen von Mitarbeitern des Konzerns.

WebDAV Server

Zur Verbesserung des Dokumententmanagements im EDB Singapore entwickelte ich einen vollständigen WebDAV Server. Dieser Server bietet die Möglichkeit verschiedene Daten Repositories anzubinden. Herkömmliche WebDAV Server sind Dateibasiert und sind vergleichbar mit FTP. Der hier entwickelte Server ist unabhängig von der Datenquelle. Damit können die Inhalte einr Datenbank beispielsweise direkt als Excel-Datei geöffnet und über den WebDAV Server in die Datenbank zurückgeschrieben werden.

(X)Html2Doc Converter

Während meiner Zeit als Entwickler bei Antwerpes und Partner entstand die Idee ein Modul zu entwickeln, mit dessen Hilfe sich aus (X)HTML Seiten dynamisch auch Microsft Word Dokumente generieren lassen sollten. Dazu habe ich mit Hilfe der DCOM Schnittstelle der Microsoft Office Pakete aus PHP heraus auf die Microsoft eigene Dokumentenstruktur zugreifen können. Letztendlich ist ein Modul entstanden, welches über einen SAX Parser die eigehenden XHTML Dokumente ausliest und für jedes im HTML Schema definierte Element eine bestimmte DCOM Anweisung ausführt um iterativ ein Word Dokument aufzubauen.

Academic Projects

Tama

Eine auf PHP und MySQL basierende Webanwendung für das Projektmanagement. Mit diesem Programm ist es möglich Kunden, Partner und Mitarbeiter anzulegen und zu verwalten und für Projekte und Projektaufgaben zu buchen. Nebden der eigentlichen Verwaltung der Aufgaben und Resourcen beinhaltet das Programm auch verschiedene Standardwerkzeuge aus dem Projektmanagement wie bspw. Gantt Diagramme.

Eagle Eye

Das Projekt “Eagle Eye” ist gemeinsam mit der Firma Luratech entstanden. Es handelt sich um ein Applett zum Streaming, zur Anzeige und zur intelligenten Navigation von bzw. in JPEG2000 Bilddaten. Die gesamte Prozessintelligenz liegt dabei im Applett und nicht auf einem Applikationsserver. Das Applett generiert anhand einer konfigurierten URL eine interaktive Galerie. Solche JPEG200 Bilder können sehr groß sein (1GB und mehr) und sind dementsprechend nicht geeignet um sie vollständig auf Webseiten anzuzeigen. Zur Lösung dieses Problems wurde ein spezielles Streaming-Verfahren in die Anwendung integriert, welches intelligent, anhand des aktuell angezigten Auschnitts bzw. der aktuellen Auflösung des Bildes, entscheidet welche Daten einer Datei vom Server geladen werden können. Dieser Ansatz ist besonders für Anwendungen von Interesse bei der Sateliten- oder andere hochauflösende Bilddaten angezeigt werden sollen.

Mind-Space

Mit Mindspace wurde ein Softwareprototyp geschaffen mit dem eigentlich zweidimensionale Baumstrukturen in einem 3D Raum dargestellt werden können. Grundlage des Projekts war die Mindmap Methode. Das User Interface wurde an Softwarelösungen zur Erstellung herkömmlicher Mindmaps angelehnt. Die MinMap selbst wurde in C++ mit OpenGL umgesetzt und zeigt eine sogenannte Cone Visualisierung der erstellten Mind-Map. Neben der Umsetzung mit OpenGL ist die Navigation im Baum technologisch interessant.

Geo-JXTA

Ein Projekt, welches in Zusammenarbeit mit der Uni Bremen durchgeführt wurde. Ziel war die Implementierung eines Agenten, welcher sich anhand definierter Geo-Pfade auf einer Virtuellen Landkarte bewegt, sich über PeerToPeer Kommunikation mit anderen Agenten in seiner Nähe in Verbindung setzt und Informationen austauscht. Der Informationsfluss soll über die Profilinformationen der Agenten-besitzer gesteuert werden. Mit diesem Semester-Projekt konnte ein erster Prototyp entwickelt werden. Mit diesem Prototypen ist es möglich einen Agenten anhand eingespeister GPRS Daten auf einer Virtuellen Karte zu bewegen. Zur Visualisierung wurde Google Earth in die Anwendung integriert. Die Agentensoftware selbst meldet sich in einem JXTA P2P Netzwerk an (Java Framework für P2P Netze) und macht sich bei anderen Agenten bekannt. Sobald sich ein Agent in der Nähe eines anderen Agenten befindet, findet über ein eigens entwickeltes XML Protokoll ein Informationsaustausch der beiden Agenten statt. Die Kommunikation kann “life” in Google Earth beobachtet werden.

Technology Showcase DVD - Fraunhofer Institut FOKUS

Die Konzeption verschiedener Medienformate war einer der Hauptbestandteile des Studiums. In diesem Projekt wurde in einem 4 köpfigen Team eine Lehr-DVD für den mobilen Telekomunikationsstandard IMS, der am Fraunhofer Institut für offene Kommunikationssysteme (Fokus) entwickelt wird, realisiert. Neben kurzen Interview Sequenzen wurden Audiokommentare eines professionellen Sprechers in die DVD integriert. Die Implementierung der interaktiven DVD (Mehrsparchigkeit, dynamische Menüführung, Medienauthoring) wurde durch mich durchgeführt. Die DVD wird heute auf Messen und für neue Mitarbeiter des Standards eingesetzt.

Shortfilms “la lloruna” and “Open Mic Berlin”

Im Grundstudium setzte ich mich neben reinen Informatikthemen besonders mit der Medientheorie und der Konzeption verschiedener Medienformate auseinander. Unter anderem sind dabei zwei Kurzfilme entstanden, bei denen ich im gesamten Prozess involviert war: Planung, Aquise, Dreh, digitale Bearbeitung und Schnitt, Nachbearbeitung, Finalisierung. In einem der Filme wurde eine Dokumentation über die Hip Hop Kultur in Berlin realisiert. Beim zweiten Film handelt es sich um einen experimentellen Kurzfilm.