niedenzu

Hints and tricks for developers

Martins Amazon Wunschliste

JNDI – member of group – Real life example 20. June 2011

Das Problem:

Bei der Suche im Active Directory sie die Anzahl der Ergebnisse künstlich beschränkt.
Dies ist ein Mechanismus im Active Directory um sich gegen zu große Ergebnismengen zu schützen. Dies ist verständlich, da das AD ein Herzstück der IT-Landschaft ist und auf keinen Fall überlastet werden darf. Es gibt jedoch sehr viele Organisationen die mehr als 1499 Mitarbeiter bzw. UserIds verwalten.

AD 2003 Liefert 1499 Datensätze zurück – Beim AD 2000 sind das 999.
Um die Übrigen Datensätze auszulesen muss man manuell Pagen.

Wenn man z.B. nach einer Gruppe mit mehr als 3000 Mitglieder such muss
man dies in 3 Etappen machen.

Als Antwort bekommt man nach der ersten Anfrage :”member;range=0-1499″
member;range=1500-2999
member;range=3000-*

Das Sternchen bedeutet, dass es keine weiteren Ergebnisse gibt.

Der nun folgende Code beschreibt kann als Lösung

package de.wwag.arch.portal.service.benutzer.ads;
/**
* range.java
* December 2004
* Sample JNDI application to demonstrate range retrieval
*
*/

import java.util.Hashtable;

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

//if we were going to do this properly, should check that the server supports
//the range retrieval control 1.2.840.113556.1.4.802 !

public class range {
public static void main (String[] args) {

Hashtable<String,String> hashtable = new Hashtable<String,String>();

String serverName = "domainname";

String provider_url = "ldap://" + serverName + ":389";

String ldapuser = "domainname\userid";
String ldappasswd = "passwd";


hashtable.put("java.naming.factory.initial",
"com.sun.jndi.ldap.LdapCtxFactory");
hashtable.put("java.naming.provider.url", provider_url);
hashtable.put("java.naming.ldap.version", "3");
hashtable.put("java.naming.security.authentication", "simple");
hashtable.put("java.naming.security.principal", ldapuser);
hashtable.put("java.naming.security.credentials", ldappasswd);



try {

// Create the initial directory context
LdapContext ctx = new InitialLdapContext(hashtable,null);

// Create the search controls
SearchControls searchCtls = new SearchControls();

//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

//specify the LDAP search filter
String searchFilter = "(&(objectClass=group)(CN=GAP_ALMA_BENUTZER_PROD))";

//Specify the Base for the search
String searchBase = "dc=ww-intern,dc=de";

//initialize counter to total the group members and range values
int totalResults = 0;
int Start = 0;
int Step = 1500;
int Finish = 1499;
boolean Finished = false;
String Range;

//loop through the query until we have all the results
while (!Finished) {

//Specify the attributes to return
Range = Start + "-" + Finish;
String returnedAtts[]={"member;Range=" + Range};
searchCtls.setReturningAttributes(returnedAtts);

//Search for objects using the filter
NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);

//Loop through the search results
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult)answer.next();

System.out.println(">>>" + sr.getName());

//Print out the members

Attributes attrs = sr.getAttributes();
if (attrs != null) {

try {
for (NamingEnumeration ae = attrs.getAll();ae.hasMore();) {
Attribute attr = (Attribute)ae.next();

//check if we are finished
if (attr.getID().endsWith("*")) {
Finished=true;
}

System.out.println("Attribute: " + attr.getID());
for (NamingEnumeration e = attr.getAll();e.hasMore();totalResults++) {

System.out.println(" " + totalResults + ". " + e.next());
}
}

}
catch (NamingException e) {
System.err.println("Problem printing attributes: " + e);
}

Start = Start + Step;
Finish = Finish + Step;

}
}
}

System.out.println("Total members: " + totalResults);
ctx.close();

}
catch (NamingException e) {
System.err.println("Problem searching directory: " + e);
}
}
}
No Comments on JNDI – member of group – Real life example
Categories: Uncategorized

Windows Wav aufnehmen 6. June 2011

Das Aufnahmeprogramm heißt sndrec32.exe

Diese Programm existiert unter Windows 10 nicht mehr.

In windows 10 heißt das Programm “Sprachrekorder”

No Comments on Windows Wav aufnehmen
Categories: Uncategorized

Abfragen der Koordinaten der Mouse

Die Abfrage der Koordinaten ist nicht trivial.

Das größte Problem ist wieder einmal die Cross-Browser-Kompatibilität.

Anbei ein Beispiel, dass genau dieses Problem löst.
Es läuft in allen gängigen Browsern.

Maus bewegen

 <!DOCTYPE html> <!-- damit die Seite als html5 interpretiert wird -->
<html>
<head>
<!-- charset UTF-8 damit auch Umlaute und Sonderzeichen funktionieren -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- minimale jquery lib wird über ein CDN geladen - es muß eine Internetverbindung bestehen.-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<div id="div2" style="background-color: greenyellow; width: 500px; height: 500px"> Maus bewegen</div>
<div> Dieser Code läuft im IE 7, Firefox und im Google Chrome.</div>
<div id="div3" style="background-color: bisque"></div>
<script type="text/javascript">
//div2 ist somit ein jquery element => neue jquery methoden
//referenz, damit der selektor nicht mehrmals ausgeführt wird.
var div2 = $("#div2");
div2.bind("mousemove", function(e) {
//div2.offset() funktioniert nur, da durch jquery bereit gestellt.
$("#div3").html("X:"+ (e.screenX - div2.offset().left) +"<br>" +
"Y:"+ (e.pageY -div2.offset().top) + "<br>" +
"e.screenX"+e.screenX + "<br>" +
"e.screenY:"+ e.screenY);
} , false);
</script>
</body>
</html>
No Comments on Abfragen der Koordinaten der Mouse
Categories: Uncategorized
Martin Rocks