# Beauftragten Javacode prüfen - ist er professionell?



## BOSSE (12. Feb 2007)

Hallo,

habe mal ein "programmierer" der mir java scripte programmiert nur habe ich so das gefühl was er da macht ist nicht unbedingt professionel, nur leider kann ich das nicht entscheiden.

Könnt Ihr mal gucken ob das wirklich ein Sinn macht ?


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Controller extends HttpServlet{

	public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{
    // set header field first
    res.setContentType("text/html");

    // then get the writer and write the response data
    PrintWriter out = res.getWriter();
  
    out.println("<form action='/muk/getemail' method=post>");
    
    out.println("<input type='submit' name='gonder'>");
out.println("</BODY>");
out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.email.MySQLConnection;
import com.email.User;


public class Details extends HttpServlet{

	public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{

    res.setContentType("text/html");

  
    PrintWriter out = res.getWriter();
  
    String angebotsnummer = req.getParameter("angebotsnummer");
    User user = new User();
    
    MySQLConnection mc = new MySQLConnection();
    user = mc.getInfo(angebotsnummer);
    out.println("Angebotsnummer: "+user.getAngebotsnummer()+"
");
    out.println("SKU: "+user.getSku()+"
");
    out.println("Subject: "+user.getSubject()+"
");
    out.println("Menge: "+user.getMenge()+"
");
    out.println("Gekauftam: "+user.getGekauftam()+"
");    
    out.println("Versendet Von: "+user.getVersendetvon()+"
");     
    out.println("An: "+user.getAn()+"
");   
    out.println("Adresszeile1: "+user.getAdresszeile1()+"
");
    out.println("Adresszeile2: "+user.getAdresszeile2()+"
");
    out.println("Adresszeile3: "+user.getAdresszeile3()+"
");
    out.println("Stadt: "+user.getStadt()+"
");
    out.println("Postleitzahl: "+user.getPostleitzahl()+"
");
    out.println("Land: "+user.getLand()+"
");
    out.println("Transaktionsnummer: "+user.getTransanktionsnummer()+"
");
    out.println("Angebote: "+user.getAngebote()+"
");
    out.println("Anzahlbestellterartikel: "+user.getAnzahlbestellterartikel()+"
");
    out.println("Kaufpreisdeskaeufers: "+user.getKaufpreisdeskaeufers()+"
");
    out.println("Emailadressedeskaeufers: "+user.getEmailadressedeskaeufers()+"
");
    out.println("Artikel: "+user.getArtikel()+"
");    
out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.email.MySQLConnection;
import com.email.User;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;



public class GetEMail extends HttpServlet{

	public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{
    // set header field first
    res.setContentType("text/html");

    // then get the writer and write the response data
    PrintWriter out = res.getWriter();
  
	MySQLConnection mc = new MySQLConnection();
	Hashtable ht = mc.getUsers();
		
    int iSize = ht.size();
    for (int i=0;i<iSize;i++){
    	User user = (User)ht.get(""+i);
    	out.println("[url='/muk/details?angebotsnummer="+user.getAngebotsnummer()+"']"+user.getAngebotsnummer()+"[/url] ");
    	out.println("[url='/muk/rechnung?angebotsnummer="+user.getAngebotsnummer()+"']rechnung[/url]
");
    	
    }

out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.email.MySQLConnection;
import com.email.User;


public class Rechnung extends HttpServlet{

	public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{

    res.setContentType("text/html");

  
    PrintWriter out = res.getWriter();
  
    String angebotsnummer = req.getParameter("angebotsnummer");
    User user = new User();
    
    MySQLConnection mc = new MySQLConnection();
    user = mc.getInfo(angebotsnummer);
    out.println("Angebotsnummer: "+user.getAngebotsnummer()+"
");
    out.println("SKU: "+user.getSku()+"
");
    out.println("Subject: "+user.getSubject()+"
");
    out.println("Menge: "+user.getMenge()+"
");
    out.println("Gekauftam: "+user.getGekauftam()+"
");    
    out.println("Versendet Von: "+user.getVersendetvon()+"
");     
    out.println("An: "+user.getAn()+"
");   
    out.println("Adresszeile1: "+user.getAdresszeile1()+"
");
    out.println("Adresszeile2: "+user.getAdresszeile2()+"
");
    out.println("Adresszeile3: "+user.getAdresszeile3()+"
");
    out.println("Stadt: "+user.getStadt()+"
");
    out.println("Postleitzahl: "+user.getPostleitzahl()+"
");
    out.println("Land: "+user.getLand()+"
");
    out.println("Transaktionsnummer: "+user.getTransanktionsnummer()+"
");
    out.println("Angebote: "+user.getAngebote()+"
");
    out.println("Anzahlbestellterartikel: "+user.getAnzahlbestellterartikel()+"
");
    out.println("Kaufpreisdeskaeufers: "+user.getKaufpreisdeskaeufers()+"
");
    out.println("Emailadressedeskaeufers: "+user.getEmailadressedeskaeufers()+"
");
    out.println("Artikel: "+user.getArtikel()+"
");    
out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```


_L-ectron-X hat diesen Beitrag am 20.02.2007 um 12:01 Uhr editiert.
Titel angepasst_


----------



## DP (12. Feb 2007)

frage ist, wieso du meinst dass er das nicht professionell macht...

so würde ich es zwar nicht machen, aber er kann seine gründe dafür haben.

edit: evtl. mal deine definition von "professionell" definieren


----------



## Beni (12. Feb 2007)

Nunja, die Beispiele sind doch ziemlich kurz; viel lernen kann aus ihnen nicht (und viel falsch machen auch nicht).

Das einzige was mir ins Auge sprang ist dieser Stücklein Code:

```
User user = new User();
   
    MySQLConnection mc = new MySQLConnection();
    user = mc.getInfo(angebotsnummer);
```
Da wird ein User-Object angelegt ("new User();"), welches nie verwendet wird. Ursache ist entweder Unwissenheit (das wäre schlecht), unsorgfältig gearbeitet, oder ein einfacher Copy&Paste Fehler, der jedem mal passiert. Da hier wohl kaum eine zeitkritische Anwendung vorliegt, wird diese Unschönheit auch nie Probleme verursachen.

Wie gesagt, der Code ist zu kurz, um irgendwelche verlässlichen Aussagen zu machen.


----------



## DP (12. Feb 2007)

Beni hat gesagt.:
			
		

> Da wird ein User-Object angelegt ("new User();"), welches nie verwendet wird



???:L 


```
out.println("Angebotsnummer: "+user.getAngebotsnummer()+"
"); 
    out.println("SKU: "+user.getSku()+"
"); 
    out.println("Subject: "+user.getSubject()+"
"); 
    out.println("Menge: "+user.getMenge()+"
"); 
    out.println("Gekauftam: "+user.getGekauftam()+"
");    
    out.println("Versendet Von: "+user.getVersendetvon()+"
");      
    out.println("An: "+user.getAn()+"
");    
    out.println("Adresszeile1: "+user.getAdresszeile1()+"
"); 
    out.println("Adresszeile2: "+user.getAdresszeile2()+"
"); 
    out.println("Adresszeile3: "+user.getAdresszeile3()+"
"); 
    out.println("Stadt: "+user.getStadt()+"
"); 
    out.println("Postleitzahl: "+user.getPostleitzahl()+"
"); 
    out.println("Land: "+user.getLand()+"
"); 
    out.println("Transaktionsnummer: "+user.getTransanktionsnummer()+"
"); 
    out.println("Angebote: "+user.getAngebote()+"
"); 
    out.println("Anzahlbestellterartikel: "+user.getAnzahlbestellterartikel()+"
"); 
    out.println("Kaufpreisdeskaeufers: "+user.getKaufpreisdeskaeufers()+"
"); 
    out.println("Emailadressedeskaeufers: "+user.getEmailadressedeskaeufers()+"
"); 
    out.println("Artikel: "+user.getArtikel()+"
");
```


----------



## Beni (12. Feb 2007)

DP hat gesagt.:
			
		

> ???:L




```
User user = new User();  // << anlegen
   
    MySQLConnection mc = new MySQLConnection();
    user = mc.getInfo(angebotsnummer); // << Referenz abändern

    // <<< erstes User-Objekt wandert bereits im Garbage Collector herum

    out.println( ... ); // << *anderes* User-Objekt benutzen
```


----------



## DP (12. Feb 2007)

wir sind hier nicht bei ner 4kb intro-competition 

ggf. will/kann er keine npe werfen?!


----------



## Beni (12. Feb 2007)

Nach dem "user = mc.getInfo" hat "user" den Wert von "mc.getInfo", da ändert der vorherige Wert nichts, und da niemals zuvor lesend auf "user" zugegriffen wird, ist da ein Objekt zuviel im Speicher. Da können noch so gutmeinende Argumente nichts ändern DP :bae: 

Es geht mir ja nicht um die paar Bytes, sondern um den unnötigen Code :wink:

(oder der Fragsteller hat den Code unvollständig kopiert, könnte ja auch sein)


----------



## DP (12. Feb 2007)

hast ja recht. jedoch würde mich der ewige string-concat ""+""+"" mehr stören. aber egal.

deshalb würde ich den entwickler jetzt nicht zum mond schiessen.


----------



## Beni (13. Feb 2007)

DP hat gesagt.:
			
		

> deshalb würde ich den entwickler jetzt nicht zum mond schiessen.


Da hast du recht. Solange hier nur Details kritisiert werden, kann der Programmierer nicht allzu schlecht sein.


----------



## DP (13. Feb 2007)

ggf. etwas offtopic aber "trotzdem": wo fängt ein schlechter programmierer an?


----------



## Caffè Latte (13. Feb 2007)

DP hat gesagt.:
			
		

> ggf. etwas offtopic aber "trotzdem": wo fängt ein schlechter programmierer an?



Na, wohl da, wo ein guter aufhört. Oder? Oder meinst du jetzt seine physische Ausdehnung?


----------



## Ralf Ueberfuhr (13. Feb 2007)

Also was mich an der Sache stört, ohne lange drüber sehen zu müssen: Wo bleibt die Model2-Architektur? Wofür hat man JSPs erschaffen?

Das sieht nach Schnellprogrammierung aus, aber ob professionell oder nicht, das mag ich nicht entscheiden.


----------



## BOSSE (13. Feb 2007)

Hallo,

kurz ist gut das ist die ganze Programmierung :-(


----------



## DP (13. Feb 2007)

kann nicht. am besten noch 6 monate für gebraucht  :lol:


----------



## Guest (14. Feb 2007)

BOSSE hat gesagt.:
			
		

> ...habe mal ein "programmierer" der mir java scripte programmiert nur habe ich so das gefühl was er da macht ist nicht unbedingt professionel, nur leider kann ich das nicht entscheiden.


War die Vergütung einer professionellen Arbeit würdig? Entspricht das Ergebnis den Anforderungen? Waren diese überhaupt irgendwie/irgendwo klar formuliert worden? 

Ich werde den Eindruck nicht los, dass du Informationen sammelst, um irgendeine arme Sau von "Programmierer" nicht für seine Arbeit (egal wie einfach die im Nachhinein aussieht) zu entlohnen. :autsch: :bloed:


----------



## gast2 (14. Feb 2007)

ich schließe mich gast an...das ganze sieht mir doch eher nach "guckt mal ob ihr irgendetwas findet, damit ich dem eine reindrücken kann" aus. das find ich unterste schublade...

tut das prog was von dir verlangt wurde? wenn ja, was willst du dann?

und nur weil mal statt 
User user;
User user = new User;
steht ist der Mensch nicht automatisch schlechter programmierer, das kann mehrere Ursachen haben...man kann sich auch an anderen sachen hochziehen...

wenn du wirklich ein problem hast dann solltest du das mit deinem programmierer besprechen und nicht so hintenherum. 
ansonsten mußt du dich auf den vertrag zwischen euch zweien berufen und schauen ob da etwas nicht eingehalten wurde.

gast2


----------



## bronks (14. Feb 2007)

Obwohl ich derjenige bin, der dauernd mit den JEE-Blueprints angekrochen kommt finde ich o.g. in angemessenem Stil, elegant und schlank gelöst.


----------



## BOSSE (16. Feb 2007)

Habe bei myhammer.de folgenden Auftrag eingestellt:

http://www.my-hammer.de/showAuction.php?auctionID=386070

daraufhin hat der bieter den Zuschlag erhalten, und losgelegt zu programmieren. (lt. bieter in ein paar Tagen machbar)

Nach hin und her habe ich dann die folgenden Dateien erhalten:

Details.java


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.email.MySQLConnection;
import com.email.User;


public class Details extends HttpServlet{

	public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{

    res.setContentType("text/html");

  
    PrintWriter out = res.getWriter();
  
    String angebotsnummer = req.getParameter("angebotsnummer");
    User user = new User();
    
    MySQLConnection mc = new MySQLConnection();
    user = mc.getInfo(angebotsnummer);
    out.println("Angebotsnummer: "+user.getAngebotsnummer()+"
");
    out.println("SKU: "+user.getSku()+"
");
    out.println("Subject: "+user.getSubject()+"
");
    out.println("Menge: "+user.getMenge()+"
");
    out.println("Gekauftam: "+user.getGekauftam()+"
");    
    out.println("Versendet Von: "+user.getVersendetvon()+"
");     
    out.println("An: "+user.getAn()+"
");   
    out.println("Adresszeile1: "+user.getAdresszeile1()+"
");
    out.println("Adresszeile2: "+user.getAdresszeile2()+"
");
    out.println("Adresszeile3: "+user.getAdresszeile3()+"
");
    out.println("Stadt: "+user.getStadt()+"
");
    out.println("Postleitzahl: "+user.getPostleitzahl()+"
");
    out.println("Land: "+user.getLand()+"
");
    out.println("Transaktionsnummer: "+user.getTransanktionsnummer()+"
");
    out.println("Angebote: "+user.getAngebote()+"
");
    out.println("Anzahlbestellterartikel: "+user.getAnzahlbestellterartikel()+"
");
    out.println("Kaufpreisdeskaeufers: "+user.getKaufpreisdeskaeufers()+"
");
    out.println("Emailadressedeskaeufers: "+user.getEmailadressedeskaeufers()+"
");
    out.println("Artikel: "+user.getArtikel()+"
");    
out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```

GetEMail.java


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.email.MySQLConnection;
import com.email.User;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;



public class GetEMail extends HttpServlet{

	public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{
    // set header field first
    res.setContentType("text/html");

    // then get the writer and write the response data
    PrintWriter out = res.getWriter();
  
	MySQLConnection mc = new MySQLConnection();
	Hashtable ht = mc.getUsers();
		
    int iSize = ht.size();
    for (int i=0;i<iSize;i++){
    	User user = (User)ht.get(""+i);
    	out.println("[url='/muk/details?angebotsnummer="+user.getAngebotsnummer()+"']"+user.getAngebotsnummer()+"[/url] ");
    	out.println("[url='/muk/rechnung?angebotsnummer="+user.getAngebotsnummer()+"']rechnung[/url]
");
    	
    }

out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```

Controller.java


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Controller extends HttpServlet{

	public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{
    // set header field first
    res.setContentType("text/html");

    // then get the writer and write the response data
    PrintWriter out = res.getWriter();
  
    out.println("<form action='/muk/getemail' method=post>");
    
    out.println("<input type='submit' name='gonder'>");
out.println("</BODY>");
out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```

Rechnung.java


```
package com.web;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.email.MySQLConnection;
import com.email.User;


public class Rechnung extends HttpServlet{

	public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
{

    res.setContentType("text/html");

  
    PrintWriter out = res.getWriter();
  
    String angebotsnummer = req.getParameter("angebotsnummer");
    User user = new User();
    
    MySQLConnection mc = new MySQLConnection();
    user = mc.getInfo(angebotsnummer);
    out.println("Angebotsnummer: "+user.getAngebotsnummer()+"
");
    out.println("SKU: "+user.getSku()+"
");
    out.println("Subject: "+user.getSubject()+"
");
    out.println("Menge: "+user.getMenge()+"
");
    out.println("Gekauftam: "+user.getGekauftam()+"
");    
    out.println("Versendet Von: "+user.getVersendetvon()+"
");     
    out.println("An: "+user.getAn()+"
");   
    out.println("Adresszeile1: "+user.getAdresszeile1()+"
");
    out.println("Adresszeile2: "+user.getAdresszeile2()+"
");
    out.println("Adresszeile3: "+user.getAdresszeile3()+"
");
    out.println("Stadt: "+user.getStadt()+"
");
    out.println("Postleitzahl: "+user.getPostleitzahl()+"
");
    out.println("Land: "+user.getLand()+"
");
    out.println("Transaktionsnummer: "+user.getTransanktionsnummer()+"
");
    out.println("Angebote: "+user.getAngebote()+"
");
    out.println("Anzahlbestellterartikel: "+user.getAnzahlbestellterartikel()+"
");
    out.println("Kaufpreisdeskaeufers: "+user.getKaufpreisdeskaeufers()+"
");
    out.println("Emailadressedeskaeufers: "+user.getEmailadressedeskaeufers()+"
");
    out.println("Artikel: "+user.getArtikel()+"
");    
out.close();
}

public String getServletInfo() {
    return "A simple servlet";
}

}
```

GetEMail.java


```
package com.email;
import java.util.*;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;

import javax.mail.*;
import javax.mail.internet.*;

public class GetEMail {

	/** DNS name or IP address from SMTP Server. */
	String ServerSMTP = "pop.hotpop.com";

	/** Port used by SMTP Server, normally 25. */
	int PortSMTP;

	/** Source Address used to send e-mails. */
	String EndOrigMail;

	Store store;

	Folder folder;

	static boolean verbose = false;

	static boolean debug = false;

	static boolean showStructure = true;

	private static void dumpPart(Part part) throws Exception {
		if (part instanceof Message)
			dumpEnvelope((Message) part);
		/**
		 * //Dump input stream .. InputStream is = part.getInputStream(); // If
		 * "is" is not already buffered, wrap a BufferedInputStream // around
		 * it. if (!(is instanceof BufferedInputStream)) is = new
		 * BufferedInputStream(is); int c; while ((c = is.read()) != -1)
		 * System.err.write(c);
		 */
		pr("CONTENT-TYPE: " + part.getContentType());
		/*
		 * Using isMimeType to determine the content type avoids fetching the
		 * actual content data until we need it.
		 */
		if (part.isMimeType("text/plain")) {
			pr("This is plain text");
			pr("---------------------------");
			if (!showStructure)
				System.out.println((String) part.getContent());
		} else if (part.isMimeType("multipart/*")) {

			pr("This is a Multipart");
			pr("---------------------------");
			Multipart mp = (Multipart) part.getContent();
			level++;
			int count = mp.getCount();
			for (int i = 0; i < count; i++)
				dumpPart(mp.getBodyPart(i));
			level--;
		} else if (part.isMimeType("message/rfc822")) {
			pr("This is a Nested Message");
			pr("---------------------------");
			level++;
			dumpPart((Part) part.getContent());
			level--;
		} else if (!showStructure) {
			/*
			 * If we actually want to see the data, and it?s not a MIME type we
			 * know, fetch it and check its Java type.
			 */
			Object o = part.getContent();
			if (o instanceof String) {
				pr("This is a string");
				pr("---------------------------");
				System.out.println((String) o);
			} else if (o instanceof InputStream) {
				System.err.println("HELLO CAU 1111");
				pr("This is just an input stream");
				pr("---------------------------");
				InputStream is2 = (InputStream) o;
				int c2;
				while ((c2 = is2.read()) != -1)
					System.out.write(c2);
				System.err.println("\nHELLO CAU");
			} else {
				pr("This is an unknown type");
				pr("---------------------------");
				pr(o.toString());
			}
		} else {
			pr("This is an unknown type");
			pr("---------------------------");
		}
	}

	private static void dumpEnvelope(Message msg) throws Exception {
		pr("This is the message envelope");
		pr("---------------------------");
		Address[] a;
		// FROM
		if ((a = msg.getFrom()) != null) {
			for (int j = 0; j < a.length; j++)
				pr("FROM: " + a[j].toString());
		}
		// TO
		if ((a = msg.getRecipients(Message.RecipientType.TO)) != null) {
			for (int j = 0; j < a.length; j++)
				pr("TO: " + a[j].toString());
		}
		// SUBJECT
		pr("SUBJECT: " + msg.getSubject());
		// DATE
		Date d = msg.getSentDate();
		pr("SendDate: " + (d != null ? d.toString() : "UNKNOWN"));
		// FLAGS
		Flags flags = msg.getFlags();
		StringBuffer sb = new StringBuffer();
		Flags.Flag[] sf = flags.getSystemFlags(); // get the

		boolean first = true;
		for (int i = 0; i < sf.length; i++) {
			String s;
			Flags.Flag f = sf[i];
			if (f == Flags.Flag.ANSWERED)
				s = "\\Answered";
			else if (f == Flags.Flag.DELETED)
				s = "\\Deleted";
			else if (f == Flags.Flag.DRAFT)
				s = "\\Draft";
			else if (f == Flags.Flag.FLAGGED)
				s = "\\Flagged";
			else if (f == Flags.Flag.RECENT)
				s = "\\Recent";
			else if (f == Flags.Flag.SEEN)
				s = "\\Seen";
			else
				continue; // skip it
			if (first)
				first = false;
			else
				sb.append(' ');
			sb.append(s);
		}
		String[] uf = flags.getUserFlags(); // get user-flag

		for (int i = 0; i < uf.length; i++) {
			if (first)
				first = false;
			else
				sb.append(' ');
			sb.append(uf[i]);
		}
		pr("FLAGS: " + sb.toString());
		// X-MAILER
		String[] hdrs = msg.getHeader("X-Mailer");
		if (hdrs != null)
			pr("X-Mailer: " + hdrs[0]);
		else
			pr("X-Mailer NOT available");
	}

	static String indentStr = "                    ";

	static int level = 0;

	/**
	 * Print a, possibly indented, string.
	 */
	public static void pr(String s) {
		if (showStructure)
			System.out.print(indentStr.substring(0, level * 2));
		System.out.println(s);
	}

	/** Constructor, setup attributes. */
	public GetEMail(String newServerSMTP, int newPortSMTP, String newEndOrigMail) {
		setServerSMTP(newServerSMTP);
		setPortSMTP(newPortSMTP);
		setEndOrigMail(newEndOrigMail);
	}

	public void setServerSMTP(String newServerSMTP) {
		ServerSMTP = newServerSMTP;
	}

	public void setPortSMTP(int newPortSMTP) {
		PortSMTP = newPortSMTP;
	}

	public String getEndOrigMail() {
		return EndOrigMail;
	}

	public void setEndOrigMail(String newEndOrigMail) {
		EndOrigMail = newEndOrigMail;
	}

	/**
	 * To send an e-mail message with SMTP autentication.
	 * 
	 * @param EndOrigemMail
	 *            source address, when it's not equal attribute EndOrigMail.
	 * @param EndDestMail
	 *            destination address.
	 * @param TituloMail
	 *            subject.
	 * @param MsgMail
	 *            message content.
	 * @param TipoMail
	 *            mime type (text/plain, text/html, etc).
	 * @param SenhaMail
	 *            password of SMTP server.
	 * @return Returns true if sending is fine; false otherwise.
	 */
	public boolean loginEmail(String EndOrigemMail, String EndDestMail,
			String TituloMail, String MsgMail, String TipoMail, String SenhaMail) {
		try {
			// Setando as propriedades da Session
			Properties props = new Properties();
			Session session;

			props.setProperty("mail.transport.protocol", "pop3");
			props.setProperty("mail.pop3.host", ServerSMTP);
			props.setProperty("mail.pop3.auth", "true");

			session = Session.getInstance(props, null);

			Store store = session.getStore("pop3");
			store.connect(ServerSMTP, EndOrigMail, SenhaMail);
			Folder folder = store.getFolder("INBOX");
			folder.open(Folder.READ_ONLY);

			Message[] message = folder.getMessages();
			for (int i = 0; i < message.length; i++) {
				Message m = message[i];
				System.out.println("Nachricht: " + i);
				System.out.println("From: " + m.getFrom()[0]);
				System.out.println("Subject: " + m.getSubject());

				// dumpPart( m );

				BufferedReader in = getEmailText(m);
				int k = 0;
				String pattern="";
				String text ="";
				User user = new User();
				
				in = getEmailText(m);
				pattern = "An:";
				text = getText( in,pattern);
				user.setAn(text);
				System.out.println(user.getAn());
				
				in = getEmailText(m);
				pattern = "Angebotsnummer:";
				text = getText( in,pattern);
				user.setAngebotsnummer(text);
				System.out.println(user.getAngebotsnummer());
				
				in = getEmailText(m);
				pattern = "Adresszeile 1:";
				text = getText( in,pattern);
				user.setAdresszeile1(text);
				System.out.println(user.getAdresszeile1());
				
				in = getEmailText(m);
				pattern = "Adresszeile 2:";
				text = getText( in,pattern);
				user.setAdresszeile2(text);
				System.out.println(user.getAdresszeile2());
				
				in = getEmailText(m);
				pattern = "Adresszeile 3:";
				text = getText( in,pattern);
				user.setAdresszeile3(text);
				System.out.println(user.getAdresszeile3());
				
				in = getEmailText(m);
				pattern = "Stadt:";
				text = getText( in,pattern);
				user.setStadt(text);
				System.out.println(user.getStadt());
				
				in = getEmailText(m);
				pattern = "Postleitzahl:";
				text = getText( in,pattern);
				user.setPostleitzahl(text);
				System.out.println(user.getPostleitzahl());
				
				in = getEmailText(m);
				pattern = "Transaktionsnummer:";
				text = getText( in,pattern);
				user.setTransanktionsnummer(text);
				System.out.println(user.getTransanktionsnummer());
				
				in = getEmailText(m);
				pattern = "Angebote:";
				text = getText( in,pattern);
				user.setAngebote(text);
				System.out.println(user.getAngebote());
				
				in = getEmailText(m);
				pattern = "Anzahl bestellter Artikel:";
				text = getText( in,pattern);
				user.setAnzahlbestellterartikel(text);
				System.out.println(user.getAnzahlbestellterartikel());
				
				in = getEmailText(m);
				pattern = "SKU:";
				text = getText( in,pattern);
				user.setSku(text);
				System.out.println(user.getSku());
				
				in = getEmailText(m);
				pattern = "Versendet von:";
				text = getText( in,pattern);
				user.setVersendetvon(text);
				System.out.println(user.getVersendetvon());
				
				in = getEmailText(m);
				pattern = "Kaufpreis des Kaeufers:";
				text = getText( in,pattern);
				user.setKaufpreisdeskaeufers(text);
				System.out.println(user.getKaufpreisdeskaeufers());
				
				in = getEmailText(m);
				pattern = "E-Mail-Adresse des Kaeufers:";
				text = getText( in,pattern);
				user.setEmailadressedeskaeufers(text);
				System.out.println(user.getEmailadressedeskaeufers());
				
				
				in = getEmailText(m);
				pattern = "Artikel:";
				text = getText( in,pattern);
				user.setArtikel(text);
				System.out.println(user.getArtikel());		
				
				insertUserInTableAmazon(user);
				
			}
			folder.close(false);
			store.close();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	public String getText(BufferedReader in, String pattern){
		String text="";
		try {
			for (String line; (line = in.readLine()) != null;) {

				//System.out.println(line);

				for (MatchResult r : findMatches(pattern, line)){
					System.out.println("########" + r.group() + " von "
							+ r.start() + " bis " + r.end());
					text = line.substring(r.end()+1, line.length());
					break;
				}
                   if (!text.equals("")){
                	   break;
                   }
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return text;
	}

	public static Iterable<MatchResult> findMatches(String pattern,
			CharSequence s) {
		List<MatchResult> results = new ArrayList<MatchResult>();
		for (Matcher m = Pattern.compile(pattern).matcher(s); m.find();)
			results.add(m.toMatchResult());
		return results;
	}

	public BufferedReader getEmailText(Message m) {
		try {

			Multipart mp = (Multipart) m.getContent();
			for (int j = 0; j < mp.getCount(); j++) {
				Part part = mp.getBodyPart(j);
				String disposition = part.getDisposition();
				if (disposition == null) {
					MimeBodyPart mimePart = (MimeBodyPart) part;
					if (mimePart.isMimeType("text/plain")) {
						BufferedReader in = new BufferedReader(
								new InputStreamReader(mimePart.getInputStream()));
						return in;
					}
				}
			}

		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	
	public void insertUserInTableAmazon(User user){
		MySQLConnection db = new MySQLConnection();
		db.insertUser(user.getSubject(), user.getAngebotsnummer(), user.getSku(),
				user.getMenge(), user.getGekauftam(), user.getVersendetvon(), 
				user.getAn(), user.getAdresszeile1(), user.getAdresszeile2(), 
				user.getAdresszeile3(), user.getStadt(), user.getPostleitzahl(), 
				user.getLand(), user.getTransanktionsnummer(), user.getAngebote(), 
				user.getAnzahlbestellterartikel(), user.getKaufpreisdeskaeufers(), 
				user.getEmailadressedeskaeufers(), user.getArtikel());
		
	}
	public static void main(String[] args) {
		GetEMail mail = new GetEMail("pop.hotpop.com", 995,
				"fernando1177@hotpop.com");
		mail.loginEmail("fernando1177@hotpop.com", "beyazzambak20@yahoo.de",
				"nihaye basardik", "Dene dene bitmiyor", "text/plain",
				"telefon99");
	}
}
```


Mail.java

```
package com.email;
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Mail
{
	
	/** DNS name or IP address from SMTP Server. */
	  String ServerSMTP;
	  /** Port used by SMTP Server, normally 25. */
	  int PortSMTP;
	  /** Source Address used to send e-mails. */
	  String EndOrigMail;

	  /** Constructor, setup attributes. */
	  public Mail(String newServerSMTP, int newPortSMTP, String newEndOrigMail) {
	    setServerSMTP(newServerSMTP);
	    setPortSMTP(newPortSMTP);
	    setEndOrigMail(newEndOrigMail);
	  }

	  public void setServerSMTP(String newServerSMTP) {
	    ServerSMTP = newServerSMTP;
	  }

	  public void setPortSMTP(int newPortSMTP) {
	    PortSMTP = newPortSMTP;
	  }

	  public String getEndOrigMail() {
	    return EndOrigMail;
	  }

	  public void setEndOrigMail(String newEndOrigMail) {
	    EndOrigMail = newEndOrigMail;
	  }

	/**
	   * To send an e-mail message with SMTP autentication.
	   * @param EndOrigemMail source address, when it's not equal attribute EndOrigMail.
	   * @param EndDestMail destination address.
	   * @param TituloMail subject.
	   * @param MsgMail message content.
	   * @param TipoMail mime type (text/plain, text/html, etc).
	   * @param SenhaMail password of SMTP server.
	   * @return Returns true if sending is fine; false otherwise.
	   */
	  public boolean EnviarMsgAutenticado(String EndOrigemMail, String EndDestMail, String TituloMail, String MsgMail, String TipoMail, String SenhaMail) {
	    try {
	      // Setando as propriedades da Session
	      Properties props = new Properties();
	      Session sessionmail;
	      Message msg;
	      
	      props.setProperty("mail.transport.protocol", "smtp");
	      props.setProperty("mail.smtp.host", ServerSMTP);
	      props.setProperty("mail.smtp.auth", "true");
	      props.setProperty("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
	      sessionmail = Session.getInstance(props, null);

	      msg = new MimeMessage(sessionmail);
	      msg.setHeader("X-Mailer","SubMacro JavaMail");
	      msg.setSentDate(new Date());
	      msg.setFrom(new InternetAddress(EndOrigemMail));
	      msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(EndDestMail, false));
	      msg.setSubject(TituloMail);
	      msg.setContent(MsgMail,TipoMail);
	  
	      msg.saveChanges();
	      Transport transport = sessionmail.getTransport("smtp");
	      transport.connect(ServerSMTP, EndOrigMail, SenhaMail);
	      transport.sendMessage(msg, msg.getAllRecipients());
	      transport.close();        
	      return true;
	    } catch (Exception e) {
	      e.printStackTrace();
	      return false;
	    }
	  }
	  
	  public static void main(String[] args){
		  Mail mail = new Mail("smtp.hotpop.com", 25, "fernando1177@hotpop.com" );
		  mail.EnviarMsgAutenticado("fernando1177@hotpop.com", "beyazzambak20@yahoo.de",
				  "nihayet basardik", "Dene dene bitmiyor", "text/plain", "telefon99");
	  }
}
```

MySQLConnection.java

```
package com.email;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;

import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;

public class MySQLConnection {

	Connection cn = null;

	public MySQLConnection() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			cn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/MySQL", "root", "telefon99");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public User getInfo(String angebotsnummer){
		String sql = "select * from amazon where angebotsnummer='"+angebotsnummer+"'";
		Statement st = null;
		ResultSet rs = null;
		User user = null;

		
		try {
	        
			st = cn.createStatement();
			rs = st.executeQuery(sql);

			int i = -1;
			while(rs.next()){
               i++;

           	user = new User();
               user.setAngebotsnummer(rs.getString("angebotsnummer"));
               user.setSubject(rs.getString("subject"));               
               user.setSku(rs.getString("sku"));
               user.setMenge(rs.getString("menge"));               
               user.setGekauftam(rs.getString("gekauftam"));               
               user.setVersendetvon(rs.getString("versendetvon")); 
               user.setAn(rs.getString("an")); 	
			   user.setAdresszeile1(rs.getString("adresszeile1"));
			   user.setAdresszeile2(rs.getString("adresszeile2"));
			   user.setAdresszeile3(rs.getString("adresszeile3"));
			   user.setStadt(rs.getString("stadt"));
			   user.setPostleitzahl(rs.getString("postleitzahl"));
			   user.setLand(rs.getString("land"));
			   user.setTransanktionsnummer(rs.getString("transanktionsnummer"));
			   user.setAngebote(rs.getString("angebote"));
			   user.setAnzahlbestellterartikel(rs.getString("anzahlbestellterartikel"));		   
			   user.setKaufpreisdeskaeufers(rs.getString("kaufpreisdeskaeufers"));
			   user.setEmailadressedeskaeufers(rs.getString("emailadressedeskaeufers"));
			   user.setArtikel(rs.getString("artikel"));			   
			} 

		
		} catch (SQLException e) {

			e.printStackTrace();
		}
		return user;
	}
	public Hashtable getUsers(){
		String sql = "select * from amazon";
		Statement st = null;
		ResultSet rs = null;
		Hashtable ht = new Hashtable();
		

		
		try {
	        
			st = cn.createStatement();
			rs = st.executeQuery(sql);

			int i = -1;
			while(rs.next()){
               i++;

           	User user = new User();
               String s = rs.getString("angebotsnummer");
               user.setAngebotsnummer(s);
               System.out.println(s);
		       ht.put(""+i, user);
	
			   
			} 

		
		} catch (SQLException e) {

			e.printStackTrace();
		}
		return ht;
	}

	public void insertUser(String subject, String angebotsnummer, String sku,
			String menge, String gekauftam, String versendetvon, String an,
			String adresszeile1, String adresszeile2, String adresszeile3,
			String stadt, String postleitzahl, String land,
			String transaktionsnummer, String angebote,
			String anzahlbestellterartikel, String kaufpreisdeskaeufers,
			String emailadressedeskaeufers, String artikel) {

		String sql = "insert into amazon values ('" + subject + "','"
				+ angebotsnummer + "','" + sku + "','" + gekauftam + "','"
				+ menge + "','" + gekauftam + "','" + versendetvon + "','" + an
				+ "','" + adresszeile1 + "','" + adresszeile2 + "','"
				+ adresszeile3 + "','" + stadt + "','" + postleitzahl + "','"
				+ transaktionsnummer + "','" + angebote + "','"
				+ anzahlbestellterartikel + "','" + kaufpreisdeskaeufers
				+ "','" + emailadressedeskaeufers + "','" + artikel + "')";
		System.out.println(sql);
		Statement st = null;
		ResultSet rs = null;

		try {
			st = cn.createStatement();
			int iValue = st.executeUpdate(sql);

		} catch (SQLException e) {

			e.printStackTrace();
		}

	}
	
	public static void main(String[] args){
		MySQLConnection mc = new MySQLConnection();
		Hashtable ht = mc.getUsers();
			
	    int iSize = ht.size();
	    for (int i=0;i<iSize;i++){
	    	User user = (User)ht.get(""+i);
	    	System.out.println(user.getAngebotsnummer());
	    }
	}

}
```

User.java

```
package com.email;

public class User {
	
	private String subject ="";
	private String angebotsnummer ="";
	private String sku ="";
	private String menge = "";
	private String gekauftam ="";
	private String versendetvon ="";
	private String an = "";
	private String adresszeile1 = "";
	private String adresszeile2 = "";
	private String adresszeile3 = "";
	private String stadt = "";
	private String postleitzahl ="";
	private String land = "";
	private String transanktionsnummer ="";
	private String angebote ="";
	private String anzahlbestellterartikel ="";
	private String kaufpreisdeskaeufers ="";
	private String emailadressedeskaeufers = "";
	private String artikel ="";
	
	public String getAdresszeile1() {
		return adresszeile1;
	}
	public void setAdresszeile1(String adresszeile1) {
		this.adresszeile1 = adresszeile1;
	}
	public String getAdresszeile2() {
		return adresszeile2;
	}
	public void setAdresszeile2(String adresszeile2) {
		this.adresszeile2 = adresszeile2;
	}
	public String getAdresszeile3() {
		return adresszeile3;
	}
	public void setAdresszeile3(String adresszeile3) {
		this.adresszeile3 = adresszeile3;
	}
	public String getAn() {
		return an;
	}
	public void setAn(String an) {
		this.an = an;
	}
	public String getAngebote() {
		return angebote;
	}
	public void setAngebote(String angebote) {
		this.angebote = angebote;
	}
	public String getAngebotsnummer() {
		return angebotsnummer;
	}
	public void setAngebotsnummer(String angebotsnummer) {
		this.angebotsnummer = angebotsnummer;
	}
	public String getAnzahlbestellterartikel() {
		return anzahlbestellterartikel;
	}
	public void setAnzahlbestellterartikel(String anzahlbestellterartikel) {
		this.anzahlbestellterartikel = anzahlbestellterartikel;
	}
	public String getGekauftam() {
		return gekauftam;
	}
	public void setGekauftam(String gakauftam) {
		this.gekauftam = gakauftam;
	}
	public String getKaufpreisdeskaeufers() {
		return kaufpreisdeskaeufers;
	}
	public void setKaufpreisdeskaeufers(String kaufpreisdeskaeufers) {
		this.kaufpreisdeskaeufers = kaufpreisdeskaeufers;
	}
	public String getLand() {
		return land;
	}
	public void setLand(String land) {
		this.land = land;
	}
	public String getMenge() {
		return menge;
	}
	public void setMenge(String menge) {
		this.menge = menge;
	}
	public String getPostleitzahl() {
		return postleitzahl;
	}
	public void setPostleitzahl(String postleitzahl) {
		this.postleitzahl = postleitzahl;
	}
	public String getSku() {
		return sku;
	}
	public void setSku(String sku) {
		this.sku = sku;
	}
	public String getStadt() {
		return stadt;
	}
	public void setStadt(String stadt) {
		this.stadt = stadt;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getTransanktionsnummer() {
		return transanktionsnummer;
	}
	public void setTransanktionsnummer(String transanktionsnummer) {
		this.transanktionsnummer = transanktionsnummer;
	}
	public String getVersendetvon() {
		return versendetvon;
	}
	public void setVersendetvon(String versendetvon) {
		this.versendetvon = versendetvon;
	}
	public String getEmailadressedeskaeufers() {
		return emailadressedeskaeufers;
	}
	public void setEmailadressedeskaeufers(String emailadressedeskaeufers) {
		this.emailadressedeskaeufers = emailadressedeskaeufers;
	}
	public String getArtikel() {
		return artikel;
	}
	public void setArtikel(String artikel) {
		this.artikel = artikel;
	}

}
```

Meine Frage ist: wird das so laufen ? (kann es leider nicht installieren, und er weigert sich zu installieren)
Sind denn wirklich alle geforderten features abgedeckt ?
Wie könnte ich das testen ?
Was mache ich wenn es nicht richtig programmiert wurde? (Nach seiner Meinunh alles fertig)

Grüsse


----------



## Guest (17. Feb 2007)

Deine Beschreibung ist sehr kurz und oberflächlich gewesen. Du hast vermutlich was ganz anderes erwartet,
als das, was du gekriegt hast. Wenn ich nur die Überschrift "Script für Bestellabwicklung" sehe, würde ich
eher ein einfaches PHP oder Perl Script vermuten, nicht eine Web-Anwendung in Java.
Als "Programmierer" würde ich mich auf so etwas nicht eher einlassen, bis ich mehr Details erfahren würde. 
Für diesen Betrag aber zunächst mal gar nicht. 

Unabhängig davon, ob es läuft oder nicht, eine genaue Anleitung, wie man es zum Laufen bringt bzw. eine 
vernünftige Dokumentation gehört zur Arbeit und du kannst diese von dem Typen fordern.
Dieses Ding "produktiv" zu betreiben, wäre mir zu peinlich.


Übrigens, ich bin derjenige, der das hier schrieb. Jetzt sehe ich es mit anderen Augen und kann deine Bedenken 
nachvollziehen. Ein typischer Fall von "Zuerst Details abwarten, bevor man sich ein Urteil über jemanden bildet".
Ich entschuldige mich dafür.


			
				Anonymous hat gesagt.:
			
		

> BOSSE hat gesagt.:
> 
> 
> 
> ...


----------



## Beni (17. Feb 2007)

1. 
Dir wurde ein Servlet gegeben, um es zum laufen zu bringen, benötigst du einen Server wie Apache Tomcat (-> "Handbuch" lesen...).

Und eine Datenbank benötigst du natürlich auch.

Und so wie ich das sehe, wird auch noch die Java Mail API verwendet, die man auchnoch dazupacken muss :shock: 

War das jetzt alles, oder hab ich noch was übersehen?

[Edit: Das ist einer profesionellen Arbeit nur gütig, wenn noch eine Installationsanleitung beiligt.]

2.


			
				Anonymous hat gesagt.:
			
		

> Deine Beschreibung ist sehr kurz und oberflächlich gewesen. Du hast vermutlich was ganz anderes erwartet,
> als das, was du gekriegt hast.


Ich wüsste ab deiner Beschreibung nicht, was ich machen sollte :wink:
Eine einfache Möglichkeit die Beschreibung aufzuwerten sind "Use Cases": Beispiele, wie der Benutzer einzelne Teile der Anwendung verwenden soll (wobei ein Use Case nur eine mögliche Abfolge darstellt)

User: Schreibt eine Nachricht
User: Wählt Amazon
System: Sendet EMail an xyz@w.de
System: Informiert den Benutzer, dass EMail erfolgreich gesendet wurde
User: Schliest den Browser


----------



## SlaterB (17. Feb 2007)

ja, also um es noch mal zu wiederholen:
Code alleine ist nur die halbe Miete,
man braucht ja eine Webseite/ einen Webserver auf den das laufen soll
(für so ein Skript mehr als simples HTML)

wenn du NICHT Java benutzt, dann wäre das eine entscheidene Info gewesen,
das hätte der Programmierer aber auch nachfragen sollen..,
aber auch bei PHP oder anderen Verfahren müsste das immer noch jemand installieren/ einbinden,
nicht gerade simpel


----------



## BOSSE (17. Feb 2007)

Hallo,

Java ist nicht das Problem, habe mittlerweile einen passenden Server.
Nur die Installation ? (wirklich keine Dokumentation).


----------



## SnooP (17. Feb 2007)

Du brauchst dafür jemanden... - sorry - aber das ganze ist einfach für 200 Euro nicht zu haben bzw. auch nicht zu machen, denn es soll ja vermutlich am Ende auch funktionieren... - kannst hier ja mal ne Anfrage stellen, ob dir das jemand installiert... - mit nem laufenden Tomcat, Datenbank etc. - beschränkt sich das auf simples Kopieren der Dateien in das entsprechende webapp verzeichnis vom tomcat... allerdings bezweifle ich, dass das ergebnis den Erwartungen wirklich gerecht wird.


----------



## BOSSE (18. Feb 2007)

@SnooP
die 200Euro waren von dem Programmierer akzeptiert worden.

Es fehlen doch dateien, um das ganze zum laufen zu bringen oder ? html oder so.

Das dumme dabei ist, ich will nicht rechtlich gegen den Programmierer angehen ( wobei ich zumindest einen Abschluss der Arbeiten erreichen könnte).


----------



## DP (18. Feb 2007)

in dem code werden die datenbank-connections etc. nie geschlossen. deine "software" würde ich in die tonne treten und mir einen neuen entwickler suchen.


----------



## BOSSE (19. Feb 2007)

Ich würde sagen vorher frage ich mal einen RA, Vertrag ist Vertrag.
Ein paar Tage sollte die Programmierung dauern mittlerweile schon über 2 Monate (da hätte man zumindest sagen können geht nicht).


----------



## DP (19. Feb 2007)

wobei man für 200,- nicht wirklich eine individuelle auftragsabwicklung erwarten darf


----------



## Gast (23. Feb 2007)

ehrlich gesagt selbst schuld. Was erwartest du für 200 Euro. Deine Beschreibung ist ja auch sehr dürftig ich hoffe der Programmier hat da noch was sinnvolleres bekommen. Und dir hätte auch aus den angeboten für deine Anderen Anfrage klar sein müssen das sowas für 200 Euro nicht gehen kann. Kenn mich ja nicht so mit den Stunden Sätzen aus. Aber bei grob gesagt mal 50% Abgaben sind das Hundert Euro die da übrig bleiben. Sprich bei ein paar Tagen Entwicklungsarbeit ein Stundenlohn der nicht Akzeptabel sein kann. Selbst ohne irgendwelche Abgaben wäre das nicht wirklich akzeptabel.


----------



## kama (23. Feb 2007)

Hallo,

ich habe mir das mal angeschaut.

Meiner Meinung nach ist der Programmierer auf keinen fall professionell, da basierend auf Deiner Beschreibung (myhammer) viel zu viele Fragen offen bleiben. 
Abgesehen davon, kann man so etwas nicht für 200,- Euro machen.

Weiterhin zum Thema: Java / PHP?

<pingel-modus>
Ich hätte das Ganze in PHP realisiert, da explizit ein Skript genannt wurde. Wobei das als solches schon falsch ist, es kann nicht nur "ein" Skript sein, sondern "sollten" mehrere sein. Abgesehen davon ist hier zu klären, ob das Sinnvoll ist oder nicht. Dazu fehlen aber viele Details und Anforderungen.
</pingel-modus>


Basierend auf Deiner Beschreibung muss ich sagen, dass im Punkt 2 meinem Verständnis nach eine Art Hook-Script geschrieben werden muss, dass sich an den jeweiligen MTA ran hängt. Setzt aber voraus, dass man auf den entsprechenden Server zugriff hat.

Erstellung einer Rechnung ist ein recht heikles Thema, vor allem wg. der Rechnungsnummer. Abgesehen davon müssen die Daten auch noch entsprechend abgelegt werden, für den späteren Zugriff.

Du hast keinerlein Angaben über ein Mengengerüst gemacht (viele Buchungen pro Tag/Monat/Jahr), und/oder Rechnungen. 
Was ist das Zielformat der Rechnungen HTML?, Text?, PDF? etc.

Du benötigst hier ein recht klares Konzept. Es wurde ja schon von anderen erwähnt, dass hier Use-Cases sinnvoll sind. 

Wenn ich einen solchen Auftrag abwickeln würde, würde alleine schon für die Angebotserstellung (Vorbereitung, Klärung von Fragen) mindestens dieser Betrag verlangen.
Ich würde Dir zuerst einmal ein Angebot machen, nach Aufwand ein genaues Lastenheft zu erstellen in denen alle Anforderungen aufgeführt sind. Danach kann man dann ein Pflichtenheft erstellen, dass dann Grundlage für ein richtiges Angebot bzw. Auftrag wird. 


Das Thema Dokumentation ist ja auch schon erwähnt worden. Hier wäre selbstverständlich zu klären, ob die Doku für den Anwender erstellt werden soll und ob auch eine Doku zu Installation gemacht werden soll usw. oder ob die Installation vom Entwickler selbst durchgeführt wird.


Ich muss aber auch dem Auftraggeber hier eine großen Teil der Schuld/unprofessionalität zuschieben, da der wohl der Ansicht ist, mit einer unklaren/unzureichenden/unvollständigen Aufgabenstellung eine vollständige und vor allem auch funktionierendes Programm zu schreiben. (Der Satz wiederspricht sich selbst ;-))


Weiterhin ist zu bemerken, dass auch der Tenor zu herrschen scheint: Geiz ist geil...

PS.: So eine Anwendung muss ja auch noch getestet werden? Oder es wird "Bananen Software", reift beim Kunden...


EDIT: Ich habe mal auf myhammer mal ein wenig gestöbert und mir ist schlicht und ergreifend schlecht geworden.
EDIT: Da findet man so etwas: Wir benötigen einen äußerst fähigen Programmierer!...
EDIT: DER PROGRAMMIER MUSS ABSOLUT TOP SEIN. ER MUSS DAS AUSLESEN VON DATEN 
EDIT: AUS ANDEREN WEBSITES & DATENAUSWERTUNEN UNGLAUBLICH GUT BEHERRSCHEN!!!
EDIT: Dann kommt der Hammer: 23 Euro / Stundenlohn ...oh man....und die Aktion ist noch nicht zu Ende...

MfG
Karl Heinz Marbaise


----------



## Tellerrand (1. Mrz 2007)

Thread ist schon etwas älter, aber was solls 

MyHammer ist schlimm, dort sieht man beide Gruppen die gute Arbeit verhindern.
Die eine Seite, welche den Auftrag stellt und weder eine Ahnung von den Kosten, noch von Themen wie Pflichtenheft hat.
Und die andere, die mittels dumping Preisen diese Aufträge bekommt und dann eher schlecht als recht umsetzt.




> Ich würde sagen vorher frage ich mal einen RA, Vertrag ist Vertrag.


Tja, da dürftest du keine Chance haben, eben weil es ein Vertrag ist.
Und was hast du nochmal genau vom Programmierer gefordert?
In wie weit wurde die Aufgabe nicht erfüllt?

Eben solches:


> Unabhängig davon, ob es läuft oder nicht, eine genaue Anleitung, wie man es zum Laufen bringt bzw. eine
> vernünftige Dokumentation gehört zur Arbeit und du kannst diese von dem Typen fordern.


Sollte im Vertrag gefordert.
Ist es nicht gefordert, so besteht auch nicht das Recht darauf.


Ich würde sagen Pech,
du wusstest nicht genau wie man das "sauber" in Auftrag gibt, so dass am Ende auch genau das dabei rauskommt was du haben willst.
Den Programmierer hat es nicht gekümmert was du willst, sondern nur das was im Auftrag steht.


.... 2 Cent


----------



## SlaterB (1. Mrz 2007)

bei 200 Euro ist wohl auch eine Naserümpfen des Anwalts schon teurer 

am besten die Gegenseite verklagen, so dass am Ende 200 Euro Rückzahlung und 2000 Euro Anwaltskosten fällig werden..


----------



## DP (3. Mrz 2007)

das was bei myhammer rauskommt kann imho nicht vernünftig sein. mit geiz ist geil fährt man nie gut. irgendwo muss arbeit und qualität bezahlt werden.


----------



## Gast (19. Jul 2007)

Lustig. Gerade über Google gefunden.

Für 200 EUR wird kein halbwegs gescheiter Programmierer einen Auftrag annehmen, egal wie klein er ist. Die Auftragsabwicklung dauert immer länger.

Ob man den erworbenen Quellcode dann vollständig veröffentlichen sollte, ist dann noch die andere Sache.

Die Struktur ist in größeren Sachen ohne Frage wichtig. Aber bei so einem kleinen Bestellsystem, spielt nicht der Code eine Rolle, sondern das Ergebnis. Wenn das Ergebnis das macht, was du erwartest, dann kann es dir ja zunächst egal sein, wie es gecoded ist. Müsste man halt testen können 

Also: Wer professionelle Arbeit erwartet, ist bei MyHammer falsch.


----------

