Archive zu Kategorie 'Programmieren'
27. Mai 2007 von KG
Warum auch immer, das passiert immer wieder einmal: Anstelle CSS-Informationen im Firebug zu erhalten, wird eine Fehlermeldung angezeigt, die auf die FAQs verweist. Ums abzukürzen: Firefox schließen, altes Firefox-Installationsverzeichnis (NICHT Profilverzeichnis) umbenennen und Firefox erneut installieren. Dann funktionierts (wieder).
20. Mai 2007 von KG
Auch so ein Befehl, den ich immer vergesse:
mysql -u USER -p DBNAME < dump.sql
Der direkte Befehl an der Kommandozeile ist besonders nützlich, um das Default-Characterset zu übergeben:
mysql -u USER -p DBNAME --default-character-set=utf8 < /path/to/dump.sql
Oder einloggen, use DBNAME und den Pfad des Dumpfiles mit 'source' angeben. Also:
mysql> show databases
mysql> use DBNAME
mysql> source /path/to/dump.sql
Da müsste das Charset allerdings über die Session (?) resp. beim Login geändert werden (???).
Falls es sich schließlich um eine Remote-DB handelt (auch hier nützlich fürs Charset):
mysql -u DBUSER -p -h DBSERVER DBNAME < dump.sql
15. Mai 2007 von KG
Diese Einstellung entfällt mir immer wieder, ist aber doch manchmal nötig:
-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
11. Mai 2007 von KG
Das könnte an einer korrumpierten .project-Datei liegen.
Einfach mal
<buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand>
einfügen (direkt via Eclipse, im geöffneten Projekt funktioniert).
10. April 2007 von KG
Diese hier ist einigermaßen sinnvoll; was von Genuitec angeboten wird, ist eher zweifelhaft, insb. das servlet-mapping.
Am einfachsten geht's aber mittlerweile mit Maven, siehe http://wiki.apache.org/myfaces/MyFaces_Archetypes_for_Maven.
Eigentlich sind solche Archteypen ja etwas für MDA-"FUDders", denn der Unterschied hinsichtlich der Vorgehensweise zur JSF-Cartridge von AndroMDA ist gar nicht so groß.
Zur Dokumentation:
<?xml version="1.0"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param> <description> State saving method: "client" or "server" (= default) See JSF Specification 2.5.2 </description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param>
<context-param> <description> This parameter tells MyFaces if javascript code should be allowed in the rendered HTML output. If javascript is allowed, command_link anchors will have javascript code that submits the corresponding form. If javascript is not allowed, the state saving info and nested parameters will be added as url parameters. Default: "true" </description> <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name> <param-value>true</param-value> </context-param>
<context-param> <description> This parameter tells MyFaces if javascript code should be allowed in the rendered HTML output. If javascript is allowed, command_link anchors will have javascript code that submits the corresponding form. If javascript is not allowed, the state saving info and nested parameters will be added as url parameters. Default: "false"
Setting this param to true should be combined with STATE_SAVING_METHOD "server" for best results.
This is an EXPERIMENTAL feature. You also have to enable the detector filter/filter mapping below to get JavaScript detection working. </description> <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name> <param-value>false</param-value> </context-param>
<context-param> <description> If true, rendered HTML code will be formatted, so that it is "human readable". i.e. additional line separators and whitespace will be written, that do not influence the HTML code. Default: "true" </description> <param-name>org.apache.myfaces.PRETTY_HTML</param-name> <param-value>true</param-value> </context-param>
<context-param> <description> If true, a javascript function will be rendered that is able to restore the former vertical scroll on every request. Convenient feature if you have pages with long lists and you do not want the browser page to always jump to the top if you trigger a link or button action that stays on the same page. Default: "false" </description> <param-name>org.apache.myfaces.AUTO_SCROLL</param-name> <param-value>true</param-value> </context-param>
<!-- Extensions Filter --> <filter> <filter-name>MyFacesExtensionsFilter</filter-name> <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class> <init-param> <description>Set the size limit for uploaded files. Format: 10 - 10 bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB </description> <param-name>maxFileSize</param-name> <param-value>20m</param-value> </init-param> </filter> <filter-mapping> <filter-name>MyFacesExtensionsFilter</filter-name> <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry --> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.) --> <filter-mapping> <filter-name>MyFacesExtensionsFilter</filter-name> <url-pattern>/faces/myFacesExtensionResource/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>MyFacesExtensionsFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
<!-- Listener, that does all the startup work (configuration, init). --> <listener> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> </listener> <!-- Faces Servlet --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <login-config> <auth-method>BASIC</auth-method> </login-config></web-app>
20. März 2007 von KG
Nachdem der freundliche Support von Speicherhosting mir geholfen hatte, das Memory-Limit hochzusetzen, funktionierte der EM (in der "Light-Version" immer noch nicht: Hier gab es die Ausgabe von Binärmüll in der Seite (CURL).
Schließlich half, t3lib/class.t3lib_div.php zu bearbeiten:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); // Changed from 0 to 1 by KG curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
So schleicht sich die Homepage für die Gemeinde voran, immerhin ist die neue cal-Extension exzellent.
2. März 2007 von KG
This error normally occurs if the DocumentBuilderFactory is overlapped by e.g. gnujaxp or an outdated Xerces version.
Solution: Try to point to Xerces, e.g. by using a system var or remove suspicious jars, e.g. gnujaxp.jar from your classpath.
(Asked by a colleague today).
A better error message would be useful, must check how the behaviour is in Axis2.
27. Februar 2007 von KG
Ziemlich unerfreulich, so ein Update auf PHP5, aber es gibt ja Google, da findet man dann z.B:
http://lists.netfielders.de/pipermail/typo3-english/2005-November/015469.html
19. Februar 2007 von KG
Nein, wie ist das schön:
- Programm mit -XX:+HeapDumpOnOutOfMemoryError aufrufen, um eine HeapDump-Datei zu erstellen.
- Jetzt mit jhat -J-mx768m [HeapDump-Datei, z.B. java_pid804.hprof] die Datei analysieren lassen. Wie auch bei den "integrierten" WebServices wird dabei ein interner Http-Server gestartet, der grundsätzlich auf Port 7000 lauscht.
- Jetzt über http://localhost:7000 analysieren… OQL wird auch unterstützt.
Gefällt mit besser als das frustrierende Geraffel mit der Eclipse TPTP, auch wenn diese schönere Icons vorweisen kann. Die Lösung aus dem JDK scheint mir einfacher, stabiler und vor allem funktionaler zu sein. (Der TPTP-Agent selbst muss z.B. derzeit unter 1.4 laufen, das soll man einmal wissen).
3. Februar 2007 von KG
Derzeit am Durchkauen des Buchs von Eberhard Wolff, vormals Saxonia Systems, jetzt Interface21 Mitarbeiter.
Der Autor ist, als Spring-"Committer" neben Jürgen Höller der einzige native Deutschsprachler im Team und aufgrund seiner Autorentätigkeit beim Java-Magazin sowie seiner freundlich-intelligenten Vortragsart bei Konferenzen vorzüglich geeignet, ein Buch über Spring zu verfassen. Das Buch behandelt, dem Inhaltsverzeichnis folgend, so ziemlich alle Bereiche:
Von den Grundkonzepten (DI, AOP) über Persistenz zu JAAS, MVC bis hin zu Spring.NET. Da drängt sich einem der Eindruck auf: Das kann man unmöglich auf gut dreihundert Seiten behandeln!
Tatsächlich wird der Text sich für jemanden, der noch nicht mit Spring gearbeitet hat, so hermetisch darstellen, dass er ohne gleichzeitiges Nachvollziehen mit einem Beispielprojekt hoffnungslos verloren sein dürfte. Das stellt sich die Frage, ob vielleicht mehr Informationen über die Codebeispiele zu erhalten sind. Aber hier fangen die Probleme an:
Eberhard Wolff stellt ein Eclipse-Projekt zur Verfügung, das auf User-Libraries basiert, deren Inhalt aber nirgends erwähnt ist. Eine ant.properties-Datei, die in der einzigen Hilfestellung, LiesMich.txt, aufgeführt ist, geht fehl, da die build.xml auf einen anderen Pfad verweist als die eigentlich zu verwendende Variable xdoclet.home aus der Property-Datei. Das ist sehr lieblos gemacht und Wolff ebenso wie seinem Lektor vorzuwerfen, die offenbar gar nicht versucht haben, die Konfiguration einmal auf einem frischen System auszuprobieren.
Allein der Umstand, dass nicht erwähnt wird, mit welchem JDK (grundsätzlich eher 1.4, aber wohl auch Tiger), welcher Version von JBoss oder Tomcat oder JUnit gearbeitet wird und wie, ist einfach mangelhaft – im Arbeitsalltag wollte man nicht auf diese Weise in ein Projekt eingeführt werden. Aber da hätte man den Trost, dafür bezahlt zu werden.
Diesen Trost hat man hier nicht. Im Gegenteil.
Ich habe immer mehr den Eindruck, viele der IT-Bücher werden nur noch verfasst, um den Autoren die Möglichkeit zu geben, sich zu profilieren, nicht aber: Um Wissen weiterzugeben.
Dass es anders ginge, beweist ja gerade AppFuse von Matt Raible, das ja auf dem Buch Spring Live weitgehend basiert. Und in der Version 2 von AppFuse macht Raible auch vor, wie das aussehen kann: Einfach mit Maven sich das Projekt holen, konfigurieren – fertig! Selbst wenn Eberhard Wolff sich diese Mühe nicht machen wollte (und die Bandbreite für ein Maven Repository nicht zur Verfügung stand) – ein "Out-of-the-Box" Projekt für Eclipse wäre doch sicherlich zu erwarten gewesen, immerhin kostet Wolffs Buch 36,- EUR, das ist zu teuer, als dass man auch noch Stunden mit dem Einrichten des Beispielprojekts verbringen muss.
Oder wenigstens *.userlibraries-Dateien zum Importieren/Nachvollziehen anbieten… oder ggf. die SpringIDE erwähnen, wenn er von dieser ausgehen sollte. Dieses Buch scheint mir nur für Schulungen geeignet, in denen E. Wolff ein "Hands-On-Training" durchführt und den Anwesenden das Buch als Vademecum überreicht.
2. Februar 2007 von KG
Zwei wesentliche Gründe: Das Style-Verzeichnis "default" enthält die feed*.tpl-Vorlagendateien nicht oder ein Whitespace ist am Anfang/Ende von <php? > in einer PHP-Datei, bevorzugt config.inc.php, vorhanden. Also entweder die feed*.tpl-Dateien ins default-Verzeichnis kopieren und/oder Whitespace aus einer PHP-Datei entfernen. Siehe diesen Forumsbeitrag.
5. Januar 2007 von KG
Am einfachsten das Hochkomma in Anführungszeichen einschließen:
<xsl:if test="contains($myExpr, "'")">
etc. Bei den meisten XPath-Tools darauf achten, dass nicht die XML-Entität, sondern das Zeichen verwendet wird.
Leider funktioniert das nicht mit concat() oder generell nicht immer. Bombensicher ist daher nur Michael Kays Vorschlag.
Also
<xsl:variable name="apos">'</x:variable>
und dann verwenden:
<xsl:value-of select="concat('//', '*[@type=', $apos, 'sthg2concat:', @name, $apos, ']')" />
3. Januar 2007 von KG
Für /etc/init.d/svnserve liegen die Einstellungen in /etc/sysconfig/svnserve, standardmäßig wwwrun:www.
22. Dezember 2006 von KG
Eine Frage beim derzeitigen Hype des Das-Web-2.0-begründet-das-Semantic-Web drängt sich mir gerade bei den Social Networks auf: Wie kann man sicherstellen, dass die Indizierung von Inhalten ("Tags") inhaltlich auch korrekt ist? Was ist, wenn bewusst falsch getaggt wird, um Suchende von bestimmten Inhalten fernzuhalten/abzulenken? Letztlich dürfte das mit einer Mischung aus statistischen Methoden und irgendwelchen Glaubwürdigkeitsmechanismen ("Net of Trust") beantwortet werden, ich finde diese – sehr offensichtliche Frage – aber nirgends erwähnt.
12. Dezember 2006 von KG
Using the 1.2x branch of Subclipse, you might recognise when accessing a rep via https:// that it doesn’t seem to be possible to get the SSL certificate accepted permanently.
Here’s my workaround:
- Change from “JavaHL” to “SVNKit (Pure Java)” in Window->Preferences.
- Access the rep again.
- Change back to JavaHL (e.g. because of necessary NTLM authentication).
Should work now
22. November 2006 von KG
See the Eclipse Bugzilla entry.
One workaround is to remove the XML jars.
9. November 2006 von KG
Beim Lesen der Produktankündigungen großer Softwarehersteller (z.B. für Datenbanken, ERP-Tools, aber auch nur Office-Suiten) fällt mir eines immer wieder auf: Die Verbesserungen betreffen oft eine enorme Bandbreite an Funktionalität, die definitiv niemals von einem Unternehmen erschöpfend ausgenutzt wird.
Selten dürften z.B. native XML-Unterstützung, spezielle Transaktionsfeatures etc. etc. auf einmal eingesetzt werden. Ob diese Annahme zutrifft, ließe sich eigentlich einigermaßen leicht nachvollziehen: Man müsste "nur" die zugrundeliegende Software nach Funktionspunkten aufschlüsseln und überprüfen, wie viele Funktionspunkte im Tagesbetrieb verwendet werden. Sicherlich kommen da auf die Kernmodule die meisten Zugriffe. Was aber interessant zu erfahren wäre, ist die Zahl der Funktionspunkte, für die der meiste Programmieraufwand betrieben wird im Verhältnis zu den Funktionspunkten, die am meisten benutzt werden.
Ich wage zu behaupten, dass der überwiegende Teil (~80%) der Anwender die Funktionalitäten, für die der meiste Programmieraufwand (~80%) betrieben wird, zu einem ganz geringen Teil (~20%) nutzen.
8. August 2006 von KG
Problem:
Ändert man den Eclipse-Workspace, werden die Einstellungen für die JDBC-Treiber und DB-Verbindungen für den DB-Explorer von MyEclipse nicht wiederhergestellt.
Lösung:
Die Dateien ConnectionProfiles.xml und SQLDrivers.xml im Verzeichnis [ALTES_WORKSPACEVERZEICHNIS]\.metadata\.plugins\com.genuitec.eclipse.sqlexplorer in das entsprechende Verzeichnis im neuen Workspace übertragen, dann funktionierts.
Anmerkung:
Die normalen Eclipse-Einstellungen lassen sich einfach über die Export->Import-Funktionalität wiederherstellen.
26. Juni 2006 von KG
Falls ein Problem mit OutOfMemoryError: PermGenSpace auftritt.
Kleines "m"!
Eclipse-Probleme aber mit
-XX:MaxPermSize=256m
31. Mai 2006 von KG
Based on an article in Martin Fowler’s Bliki, an interesting discussion has started, roughly six months ago (have a look at the overview at Joe de Villa’s Blog).
To make it short – some people like to use a very reduced API for a programming language, others can’t get enough “comfort methods” and interfaces and the rest likes something in between these extremes.
OK – here’s my personal proposal in a howto-manner:
An API could support different levels of, let’s say, “feature sets”. E.g. there could be a “feature set” with an identifier like “REDUCED”-”BASIC”-”NORMAL”, or just “1″-”2″-”3″ and so forth.
The implementation of such “feature sets” could be implemented in Java with annotations e.g.
@feature-set BASIC
public void doSomething() { /* ... */ }
etc.
A developer now should have the chance to decide which “feature set” to use. How could she/he do this?
On the one hand, the compiler could support an argument that e.g. checks that only those methods are used that match the specified API “feature set” interfaces, classes, methods etc.
On the other hand, the IDE could support the developer in specifiying the API’s “feature set” and then display only the matching interfaces, classes, methods etc.
In my opinion an interface for programming is basically adressed to humans. If so, the “taste” and the experience of human programmers can differ extremely. So why should the API not allow the human programmer to select the range of features of it?
That such “feature sets” are feasible, is clearly shown with the Eclipse Mylar project.
Here, very individual “feature highlighters” are built based on single tasks and the dynamik activities of the programmer. Following this approach, one could even think giving programmers the ability to define their own, individual “feature sets” for a common API.
What do you think?
30. Mai 2006 von KG
Oft kann man beobachten, dass Anwendungen mit einem schlechten Design über Jahre, wenn nicht Jahrzehnte weiter ausgebaut werden. Hier wird am “Framework” nichts Struktuerelles geändert, sondern stets weitere Funktionalität hinzugefügt. Zu vielen dieser Anwendungen gibt es keine Übersicht der Anforderungen, geschweige denn Unit-Tests.
Wohin führt das? In erster Linie dazu, dass man die Anwendung ohne einen vollen “Neuimplementierungszyklus” (einschließlich Anforderungsanalyse) nicht mehr ändern kann.
Das Business wird deshalb so lange entscheiden, lieber noch ein Feature hinzuzufügen, bis die Anwendung (unternehmens)kritisch wird. Und dann wirds teuer.
Gegenmaßnahmen sind: Einen Architekturverantwortlichen benennen. Code-Reviews. Keine Anforderung ohne Unit-Test umsetzen. Keinen Bugfix ohne Unit-Test.
24. Mai 2006 von KG
Heute eine interessante Unterhaltung mit einem Programmierer gehabt, der wissen wollte, ob und inwieweit man Maps via WebServices übergibt und ein Objekt zurückerhält (dazu vielleicht ein andermal mehr).
Die sich daraus entspinnende Diskussion ergab, dass geplant war, eine Schnittstelle, die auch via Corba-IDL an externe Kunden für deren Software herausgegeben wurde, dramatisch zu ändern: Anstelle der vorhandenen statischen Methoden, die im "Apache-Commons-Stil" viele Komfortmethoden bereitstellten, um bestimmte Werte zu berechnen, sollte ein einziges generisches Interface angeboten werden.
Dieses Interface sähe so aus, dass über eine generische Klasse für alle Produktlinien eine Klasse instantiiert werden soll, der im Konstruktor eine Map übergeben wird, der man alle Werte für den jeweils gewünschten "Methodenersatz" in einer Map übergeben soll. (Ggf. soll aber doch auch eine entsprechende statische Methode mit einer Map als einzigem Parameter verwendet werden).
Rückgabewert sollte dann immer ein java.lang.Object sein, das unabhängig von Konstruktor/Methode (ich bevorzugte in diesem Fall ohnehin die statische Methode) entsprechend der Dokumentation erst in ein Map gecastet, dieses iteriert und die einzelnen Werte erneut gecastet werden sollen.
IMHO ist dieser "generische Ansatz" zwar u.U. geeignet, um interne Strukturen zu verbessern, aber nicht, um ein API zur Verfügung zu stellen:
- Entwickler können nicht mehr mit derselben Typsicherheit programmieren. Wurden – unter anderem – für dieses Problem nicht gerade Generics eingeführt?
Im Ernst – entsprechend Joshua Blochs Effective Java Programming (Advice 32) sollte man Strings nur verwenden, wo sie Sinn machen, nicht als beliebigen Ersatz von eindeutig verwendbaren Typen.
Ducktpye mag ja angehen, aber ich finde nicht, dass die Aufgabe von Typsicherheit etwas mit Faulheit (Neal Ford) oder mit Unflexibilität zu tun hat. Typen ausdrücken zu können, hat etwas mit der Ausdrucksstärke der Sprache zu tun.
- Man kann keine Methodensignaturen mehr "deprecated" machen. Ich denke, dass die Verwendung von @deprecated für ein API bewusst eingesetzt werden soll. Die Lösung des erwähnten Programmierers lag darin, dass für den Fall, dass eine Berechnung eine geänderte "Signatur" erhält, eine entsprechende – durchaus aussagekräftige – Exception geworfen werden sollte. Damit gingen die "Segnungen" der Fehlermeldungen zur Compilezeit für Typprüfungen allerdings verloren.
- Manche Programmierer benutzen ja "Outlines" in ihrer IDE, manchmal ist auch nützlich, UML aus Methodensignaturen etc. zu extrahieren. Das Domain-Wissen, das hierüber *reflektiert* wird, ginge verloren und wäre günstigenfalls ausgelagert in Javadoc ausgelagert (an eine Annotations-basierte Lösung zu denken, wäre vielleicht ein wenig gewagt, ich habs deshalb gar nicht erwähnt).
-
10. Mai 2006 von KG
In äußerst unterhaltsamer, hellwacher Art führte Angelika Langer, bekannt aus ihren Artikeln im Java (?Objekt) Spektrum (mit Klaus Kreft), in die Programmierung mit Generics ein.
Geduldig und amüsant ging sie auf alle Fragen aus dem Publikum ein, das ihr schließlich den Code für eine einfache Pair-Klasse diktieren sollte. Echtes Highlight, sehr beeindruckende Person.
10. Mai 2006 von KG
AJAX support: Currently only mozilla (Rhino, JSLint) ATF deployment: Problem with 3rd party code: Why not – at least – providing the interested with a Maven task? ~ FU: Memory usage in status bar: plugin name? ~ Snippet use vers. code duplication.
10. Mai 2006 von KG
? Kritische Größen für Einführung: 2 Leute wohl nicht. Unklar. ?
Kein zentrales BO-Model über die ganze SOA verteilen (Auffassung Josuttis).
Dagegen Völker: Mindstumfang an zentralen Datentypen muss vorhanden sein, damit SOA in Großunternehmen überhaupt funktioniert. ~ E. Wolff stark hanseatisch gefärbtes, M. Völter stark schwäbisch/badisch.