Sebastian Thomschke
Selbständiger IT Berater – Java, J2EE, WebSphere Portal, Lotus Domino-
Running TomCat 6 in Debug Mode under Windows
While tracing some problems in one of my grails applications I had the need to do step debugging on a remote Tomcat server. Eventually I came up with the following lines to launch TomCat in debug mode:
@echo off set JPDA_TRANSPORT="dt_socket" set JPDA_ADDRESS="8000" set JPDA_SUSPEND="y" catalina.bat jpda start
Simply create a debug.bat file in TomCat’s bin directory and add these lines.
-
Determine the user who logged on via SSH
Today we had the need to determine the initial id of a user who logged onto a Linux box via SSH and executed the su command. When the su command is issued the effective user is changed and whoami or id commands will report that new user id instead.
For anyone who is interested, that is what we came up to put the initial user id into a variable named ${LOGIN_USER}
LOGIN_USER=`who -m`; LOGIN_USER=${LOGIN_USER%% *}or alternatively
LOGIN_USER=`who -m | cut -d' ' -f1`
-
Lotus Notes [Send only] und [Send and File] Schaltflächen für Outlook 2003
Man kann über Lotus Notes sagen was man möchte, wenn man damit eine Weile gearbeitet hat und auf z.B. Outlook umgestiegen ist/wurde, dann fehlt einem in der Regel doch die eine oder andere liebgewonnene Funktion.
Da ich nun bereits bei meinem zweiten Kunden “gezwungen” bin, mit MS Outlook 2003 zu arbeiten und mich scheinbar auch in Zukunft nicht um dessen Verwendung drücken kann, habe ich zwei der vielen praktische Notes-Funktionen für Outlook 2003 implementiert:
- Die Schaltfläche [Send only], bzw. [Nur senden] versendet eine E-Mail ohne eine Kopie davon in Outlook zu speichern.
- Die Schaltfläche [Send and File...] bzw. [Senden und ablegen...] erfragt vor dem Versenden in welchem Ordner die gerade geschriebene E-Mail abgelegt werden soll.
Installation:
- Download des Visual Basic Moduls in der gewünschten Sprache.
Send Mail Macros for MS Outlook 2003 (EN) (4.9 KiB, 735 hits)
Send Mail Macros for MS Outlook 2003 (DE) (5.1 KiB, 401 hits)
- In Outlook den Visual Basic Editor öffnen.
- Das Visual Basic Modul importieren
- Das Projekt speichern.
- Die Schaltflächen in der Toolbar installieren.
- Beim Erstellen einer neuen E-Mail sollten nun in der Toolbar die beiden zusätzlichen Schaltflächen angezeigt werden.
- Beim Klick auf “Senden und ablegen…” erscheint vor dem Versenden der Ordnerdialog.
-
getpass für Jython
In meinem aktuellen Projekt entwickle ich u.a. verschiedene Jython basierte Kommandozeilenanwendungen. Einige davon erwarten die Eingabe von maskierten Passwörtern. Python stellt hierfür das getpass Modul bereit. Leider ist bisher keine entsprechende Implementierung für Jython verfügbar.
Im folgenden ein passendes Modul, welches diese Funktionalität bereitstellt. Es verwendet einen Mechanismus um die Passworteingabe in der Kommandozeile zu maskieren, welcher hier beschrieben wurde http://java.sun.com/developer/technicalArticles/Security/pwordmask/. Sollte Jython in Verbindung mit Java 6 oder höher eingesetzt werden, so nutzt dieses Modul stattdessen die neue Console.readPassword() Methode. Sollte das Modul in einer Umgebung laufen in welcher eine getpass Modulimplementierung verfügbar ist, dann wird stattdessen an die entsprechende Methode im getpass Modul delegiert.
# ext_getpass.py # @author Sebastian Thomschke, http://sebthom.de/ import thread, sys, time, os # exposed methods: __all__ = ["getpass","getuser"] def __doMasking(stream): __doMasking.stop = 0 while not __doMasking.stop: stream.write("b*") stream.flush() time.sleep(0.01) def generic_getpass(prompt="Password: ", stream=None): if not stream: stream = sys.stderr prompt = str(prompt) if prompt: stream.write(prompt) stream.flush() thread.start_new_thread(__doMasking, (stream,)) password = raw_input() __doMasking.stop = 1 return password def generic_getuser(): for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'): usr = os.environ.get(name) if usr: return usr def java6_getpass(prompt="Password: ", stream=None): if not stream: stream = sys.stderr prompt = str(prompt) if prompt: stream.write(prompt) stream.flush() from java.lang import System console = System.console() if console == None: return generic_getpass(prompt, stream) else: return "".join(console.readPassword()) try: # trying to use Python's getpass implementation import getpass getpass = getpass.getpass getuser = getpass.getuser except ImportError, e: getuser = generic_getuser # trying to use Java 6's Console.readPassword() implementation try: from java.io import Console getpass = java6_getpass except ImportError, e: # use the generic getpass implementation getpass = generic_getpassHere is an usage example:
import ext_getpass as getpass pw = getpass.getpass("Please enter your password:") print "The entered password was: " + pw -
WebSphere Portal 6.1.0.0 does not support installation on a managed node
With WebSphere Portal 5.1 a new deployment option was introduced that allowed the installation of WP onto an existing node managed by a deployment manager. AFAIK the main reason for this new option was to simplify the cluster setup procedure.
Both options, installing WP standalone and federating it into a cell afterwards as well as installing it on an already managed node have different pros and cons each. In WP 6.0 the installation onto a managed node was even mandatory to enable WebSphere Process Server integration.
Surprisingly WP6.1.0.0 does not support the installation on a managed node anymore. All nodes of a cluster need to be installed as standalone systems first and then be federated into a WebSphere cell.
For WP 6.0 the installation procedure is described here. The 6.1 info center does not mention this procedure anymore and it no, it was not dropped accidentally.
-
[Behoben] Leere Seiten mit Wordpress 2.6.x
Nach dem Upgrade auf Wordpress 2.6 kam es immer wieder vor das im Browser leere Seiten angezeigt wurden. Eine Seitenaktualisierung mittels STRG+F5 behob in den meisten Fällen das Problem. Heute habe ich meinen Blog auf Wordpress 2.6.2 aktualisiert und danach war es nicht mehr möglich die Verwaltungsseite für Plug-ins aufzurufen. Egal was ich probierte, die Seite blieb im Browser leer.
Auf der Suche nach einer möglichen Lösung im Internet bin ich auf verschiedene Diskussionen über dieses scheinbar allgemein bekannte Phänomen gestossen. Leider half keine der skizzierten Lösungsansätze in meinem Fall.
Daher habe ich mich einmal mehr in die Untiefen des Wordpress Codes gestürzt und die – für meinen Fall – entscheidenden Programmzeilen lokalisieren können. Das Problem wird durch mehrere (object) Casts in der Datei strong>wp-includes/taxonomy.php verursacht, welche Arrays in Objekte transformieren:$wp_taxonomies['category'] = (object) array('name' => 'category', 'object_type' => 'post', 'hierarchical' => true, 'update_count_callback' => '_update_post_term_count'); $wp_taxonomies['post_tag'] = (object) array('name' => 'post_tag', 'object_type' => 'post', 'hierarchical' => false, 'update_count_callback' => '_update_post_term_count'); $wp_taxonomies['link_category'] = (object) array('name' => 'link_category', 'object_type' => 'link', 'hierarchical' => false);Da weder Fehlermeldungen im Browser noch in den Log Dateien erscheinen habe ich leider keine Idee wieso diese Casts zum Abbruch der Skriptausführung führen. Die installierte PHP Version entspricht der aktuellen stabilen 5.x Version und sollte daher eigentlich nicht die Ursache des Problems sein.
Um das Problem zu umgehen habe ich eine Methode eingeführt die ebenfalls Arrays in Objekte transformieren kann, welche jedoch nicht auf der PHP Objekt Casting Funktion beruht.function arr2obj($arr) { foreach ($arr as $k => $v) $obj -> {$k} = $v; return $obj; } $wp_taxonomies['category'] = arr2obj(array('name' => 'category', 'object_type' => 'post', 'hierarchical' => true, 'update_count_callback' => '_update_post_term_count')); $wp_taxonomies['post_tag'] = arr2obj(array('name' => 'post_tag', 'object_type' => 'post', 'hierarchical' => false, 'update_count_callback' => '_update_post_term_count')); $wp_taxonomies['link_category'] = arr2obj(array('name' => 'link_category', 'object_type' => 'link', 'hierarchical' => false));


Looking for a high performer for your next IT project?








![Schaltfläche [Senden und ablegen...] installieren Schaltfläche [Senden und ablegen...] installieren](http://sebthom.de/wp-content/uploads/2009/02/07_marco_select_install_sendandfile-150x150.png)
![Schaltfläche [Senden und ablegen...] installiert Schaltfläche [Senden und ablegen...] installiert](http://sebthom.de/wp-content/uploads/2009/02/08_msg_sendandfile_installed-150x120.png)
![Schaltfläche [Nur senden] installieren Schaltfläche [Nur senden] installieren](http://sebthom.de/wp-content/uploads/2009/02/09_marco_select_install_sendonly-150x150.png)
![Schaltfläche [Nur senden] installiert Schaltfläche [Nur senden] installiert](http://sebthom.de/wp-content/uploads/2009/02/10_msg_sendonly_installed-150x120.png)


English
Deutsch
Recent Comments