Archives pour août, 2012

MySQL : limiter le nombre de connexions simultanées de chaque utilisateur

Pour préserver l’accès aux données d’un serveur MySQL, il convient de limiter le nombre de connexions simultanées autorisées pour chaque utilisateur. Cette limite doit évidemment être inférieure à la limite globale max_connections.

Par exemple, pour une limite de 30 connexions simultanées :

mysql> UPDATE user SET max_user_connections=30 WHERE User != 'root';

 

SWT : gérer le menu application sous MacOS X

SWT ne gère pas directement le menu application sous Mac OS X. Par défaut, toute application a donc un menu ressemblant à ceci :

Il est donc nécessaire de coder la modification du menu pour y refléter le nom réel de l’application et également mapper les actions des éléments A propos, Préférences et Quitter.

Auparavant, l’emploi de CocoaUIEnhancer était obligatoire car aucune API SWT n’existait pour accéder à ce menu. Depuis la version 3.7, les choses ont changé et une API interne est disponible. Voici un exemple d’utilisation de celle-ci :

Menu systemMenu = shell.getDisplay().getSystemMenu();
if (systemMenu == null)
	return; // not MacOS X

for (MenuItem menuItem : systemMenu.getItems())
{
	switch (menuItem.getID())
	{
		case SWT.ID_ABOUT:
		{
			menuItem.setText("About " + Constants.APPLICATION_NAME); // application name
			menuItem.addListener(SWT.Selection, new Listener()
			{
				@Override
				public void handleEvent(Event event)
				{
					helpAbout();
				}
			});
			break;
		}

		case SWT.ID_PREFERENCES:
		{
			menuItem.addListener(SWT.Selection, new Listener()
			{
				@Override
				public void handleEvent(Event event)
				{
					filePreferences();
				}
			});

			break;
		}

		case SWT.ID_QUIT:
		{
			menuItem.addListener(SWT.Selection, new Listener()
			{
				@Override
				public void handleEvent(Event event)
				{
					if (!fileExit())
						event.doit = false; // ignore exit if false
				}
			});

			break;
		}

		default:
		{
			break;
		}
	}
}

Apache : loguer les IP client traversant un proxy frontal

Pour pouvoir enregistrer les IP sources des clients traversant un reverse-proxy (en s’assurant que celui-ci injecte les headers X-Forwarded-For pour le serveur en backend), il convient de déclarer un LogFormat spécifique :

LogFormat "\"%{X-Forwarded-for}i\" %D %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{forensic-id}n\"" proxy

Il convient ensuite de l’utiliser dans chaque virtual host :

Customlog /var/www/monsite.fr/logs/access_log proxy

Oracle : connexion avec sqlplus

  • Connexion à une DB locale :
$ sqlplus user/password@sid
  • Connexion à une DB distante :
$ sqlplus user/password@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.2)(PORT=1521)))(CONNECT_DATA=(SID=REMOTE)))'

Pour éviter de taper tout çà, notamment dans des scripts shell, il est possible de définir un nom de service dans votre fichier de configuration tnsnames.ora :

# vi ${ORACLE_HOME}/client/network/admin/tnsnames.ora
LOCAL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= 10.0.0.3)(Port= 1521))
    (CONNECT_DATA = (SID = REMOTE))
  )

Ainsi pour se connecter, la chaîne de connexion sera suffisante :

$ sqlplus user/password@LOCAL

fmon : version 0.3

  • Page d’informations : fmon
  • Lien de téléchargement : [Téléchargement introuvable]

SWT : générer le JAR de la javadoc

La documentation de la librairie SWT n’est pas disponible directement sous la forme d’un package. Il faut donc la générer depuis les sources.

Une fois le JAR des sources récupéré sur cette page, la génération s’effectue de cette façon :

# cd swt-4.2-cocoa-macosx-x86_64
# unzip src.zip -d src
# javadoc -source 1.4 -d docs -sourcepath src -link http://java.sun.com/javase/6/docs/api/ -link . -subpackages org.eclipse.swt
# cd docs
# jar cf swt-4.2-doc.jar *

Reste ensuite à copier et ajouter le JAR à votre projet.

Par exemple sous Eclipse, il faut éditer les propriétés du projet, rubrique Java Build Path / Libraries et paramétrer l’élément Javadoc Location du JAR source :

Une fois tout ceci en place, la complétion de code doit être opérationnelle.

Haut de page