I found a really nice feature of Outlook 2007: Publish my free/busy information.
An example:
You are an employee of a company and use Outlook and its calendar. If you are using Exchange already you know this "meeting request" feature. Make a new appointment and see if your colleagues have time for you:
But what about other people from other companies? Yes you're right: They cannot see if you are busy, because they don't use the same Exchange environment.
And here is the solution:
First of all you need some webspace where you can use WebDAV to upload files. If you have trouble with WebDAV, basic authentication and Vista see this post.
Then go to Tools->Options->Calendar Options->Free/Busy Options->Other Free/Busy... and enter the server to upload your free/busy information (leave the "Search location" empty):
So for now your free/busy information is uploaded to your server, without any appointment details.
Now you can send a link to your .vfb file to everyone who uses Outlook or any other compatible application. The other user have to enter this URL in the Details Tab in their contact card from you:
(I have a redirection from this URL to the .vfb file, so here is no file extension)
After your new friend have done this, he can now use the meeting request feature and see your free/busy times!
Really nice if you work with clients and have many meetings and little time ;-)
However if you like to know whether I'm busy, check my free/busy information (see the "Free/Busy" link in the right pane).
Ich hatte ja bereits seit einiger Zeit eine Karte hier, wo ich eingetragen habe, wo ich mich so rumtreibe.
Jetzt hat das ganze eine neue Dimension. Ich habe nämlich ein neues Spielzeug, einen GPS Logger. Dies ist ein kleiner Kasten den ich jetzt mit mir rum trage und der in gewissen Zeitintervallen die aktuelle Position speichert. Das ganze wird in einer Microsoft Virtual Earth Karte dargestellt (funktioniert aber leider nicht mit Opera, hoffe Microsoft bessert da demnächst mal nach... mit v6 wird jetzt immerhin Safari unterstützt).
Damit es aber die Stasi 2.0 nicht so leicht hat, ist die Karte nicht öffentlich. Wer dabei sein will, schreibt mir einfach eine Mail oder hinterlässt einen Kommentar, dann lass ich euch gerne das Kennwort zukommen (oder ihr habt es bereits in eurem Postfach).
Abgeguckt hab ich mir die Kartenintegration bei Daniel, es dann aber noch um ein paar neue Features erweitert. Zum Beispiel kann man Kommentieren und auch seinen eigenen Standort hinterlassen. Daniel bietet seine Karte auch öffentlich an, dort kann man sehen wie es aussieht.
Der Link findet sich ab jetzt auch rechts in der Leiste oder direkt: http://woist.mwiedemeyer.de
Wer noch mehr ideen hat, meldet sich per Kommentar.
Nachdem ich SSL für die Reporting Services auf einem anderen Port als dem Standard aktiviert habe (Port 444), konnte ich keine Verbindung mit dem SQL Management Studio mehr herstellen.
Es kam folgende Fehlermeldung: "The file you are attempting to save or retrieve has been blocked from this Web site by the server administrators." Wobei im Event Log etwas genauer steht, dass er versucht auf https://domain/ReportServer... zuzugreifen.
Die Portangabe muss manuell in der Datei
"C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\rsreportserver.config"
hinzugefügt werden. In dem o.g. Microsoft Dokument steht, dass man dies nur manuell ändern muss, wenn man die E-Mail delivery extensions verwendet.
If you are using the report server e-mail delivery extension, you can create subscriptions that included a report URL in the e-mail message. To construct the report URL, the report server uses the UrlRoot configuration setting in the RSReportServer.config file.
Setzt man das SharePoint GridView (Microsoft.SharePoint.WebControls.SPGridView) in eigenen Seiten ein, und benutzt man für die Datenquelle die DataSource Eigenschaft
dann zeigt das GridView beim sortieren keine Pfeile neben der sortierten Spalte an.
Dank Reflector stellt man fest, dass das SPGridView leider die Spalten Sortierung nur anzeigt wenn man als Datenquelle "DataSourceID" verwendet... Warum? Ich sehe da keinen Grund. Deshalb hier in etwa die Implementierung wie es das SPGridView auch intern macht:
So, das war der Urlaub für dieses Jahr. Sehr sonnig und schön:

Der Link im Proxy Switcher v1.0.2 Artikel zeigte auf eine alte Version.
Fehler ist behoben und über den Download Link bekommt man nun auch wirklich Version 1.0.2.
Wer Anwendungen nutzt, die aus irgendeinem Grund nicht auf die Internet Explorer Proxy Settings zurückgreifen können, der kann Proxy Switcher auch für beliebige weitere Anwendungen erweitern.
Dazu muss zunächst ein Class Library Projekt mit Visual Studio erstellt werden und eine Referenz auf ProxySwitcher.Shared.dll hinzugefügt werden. Das ganze funktioniert natürlich auch mit den kostenlosen Varianten Visual Studio 2005 Express Editions.
Nun einfach eine neue Klasse erstellen, die das Interface ISwitcher im Namespace ProxySwitcher.Shared implementiert. Die Methoden sind eigentlich selbst erklärend und müssen dementsprechend befüllt werden.
Die fertig kompilierte DLL dann nur noch in das ProxySwitcher "plugins" Verzeichnis kopieren und ProxySwitcher neu starten. Das neue Plugin steht nun im "Applications" Tab zur Auswahl zur Verfügung.
Demnächst gibts dann hier das Plugin (inkl Sourcecode) für meinen Lieblingsbrowser Opera.
Das Problem an Opera und an vielen anderen Produkten (Firefox, RSS Bandit, etc.) ist, dass man die Anwendungen neu starten muss, damit die neuen Proxy Einstellungen wirksam werden. Der Internet Explorer, bzw. Windows, bietet dafür eine API, mit der man Windows mitteilen kann, dass die Einstellungen aktualisiert wurden.
Im Einsatz ist ein InfoPath 2003 Formular für einen länger dauernden Workflow. Das Dokument selbst wird dabei von jemandem erstellt, in einer SharePoint Document Library abgelegt und dann an einem anderen Tag von jemand anderem erneut aufgerufen (mit einer anderen View).
Problem ist, dass auf beiden Views innerhalb des Dokumentes zwei verschiedene Textfelder sind, die das Datum anzeigen sollen an dem das Dokument jeweils geöffnet wird. Dafür gibt es eine Funktion, nämlich today().
Das Problem ist, dass today() nun leider nicht heute, wie der Name sagt zurückliefert, sondern den Tag an dem das Formular zum ersten Mal geöffnet wurde... Bug oder Feature? Hätte man aber auch schneller drauf kommen können, wenn man mal bei Office Online nachliest:
Gibt das Datum als Daten vom Typ Datum (date) zurück, wenn das Formular zum ersten Mal geöffnet wird.
Es ist soweit: Opera erscheint demnächst in einer neuen Version.
Mehr performance und mehr sehr nützliche Features. Werft mal einen Blick auf Opera 9.5! Es lohnt sich wirklich, am besten gleich hier das Video ansehen: Exclusive Opera 9.5 Features & Video
Oder einfach hier die Alpha downloaden: Opera 9.5 Alpha
So, ich habe nun hier auch mal ein bisschen Google ads untergebracht... mal gucken ob das auch nur ansatzweise was bringt. Wenn nicht, entferne ich das ganze in den kommenden Monaten wieder.
Bis dahin könnt (und sollt) ihr natürlich gerne so viel wie möglich fleißig drauf klicksen ;-)
Ein Kunde, der InfoPath 2003 einsetzt, hat einige Anforderungen, die sich nicht so einfach umsetzen lassen. Da das große weite Internet leider fast nichts dazu hergibt, hier meine Probleme inkl. Lösungen.
Anforderung 1: Eine "multi-select list box", also eine ListBox zum anhaken. In InfoPath 2007 bereits enthalten, muss diese bei 2003 leider selbst gebaut werden. Dazu gab es einen recht guten Artikel bei InfoPathDev, den ich nun (nach deren umgestaltung) leider nicht mehr wieder finde... Deshalb hier nochmal in Kürze:
Die DataSource Struktur (der InternetPortals Knoten ist repeatable und "internetPortalSelected" ist vom Typ boolean):
Nun erstellt man eine optionale Section auf dem Formular, und bindet sie an den "PortalsGroup" Knoten. Innerhalb der optionalen Section erstellt man eine Scrolling Region. Dort zieht man dann den "InternetPortals" Knoten hinein und wählt "Repeating Table". In den Eigenschaften hakt man "Allow users to insert and delete rows" und "Include Header" ab. Außerdem sollte die Tabelle natürlich keine Rahmen haben.
Jetzt nur noch das ganze entsprechend ansortieren, die Textbox durch ExpressionBox ersetzen und als default Wert für den Namen etwas schreiben wie "loading...". Die ID muss dabei dem Benutzer gar nicht gezeigt werden und kann gelöscht werden. So sieht das ganze dann aus:
Anforderung 2: Und hier wird es komplizierter. Die ListBox soll nun mit Daten von einem WebService befüllt werden, und zwar erst beim öffnen der Section.
Problem 1 daran ist, dass es im IP 2003 Objektmodell keinerlei Events gibt, die ein aufklappen einer section anzeigen. Das einzige Event, was an der Stelle hilft ist das OnContextChange Event. Dieses wird allerdings ziemlich häufig gefeuert, z.b. bei jedem klick irgendwo auf das Formular, etc.
Problem 2 ist, dass man an die selbstgebaute ListBox keine DataSource anbinden kann (zumindest nicht über Wizards). Hier die Lösung (siehe Kommentare im Code):
[InfoPathEventHandler(EventType = InfoPathEventType.OnContextChange)]
public void OnContextChange(DocContextChangeEvent e)
{ if (e.Type == "ContextNode")
{ LoadPortals();
}
}
private void LoadPortals()
{ // Zunächst den Knoten finden der den Repeatable Knoten enthält
IXMLDOMNode ipGroup = thisXDocument.DOM.selectSingleNode("my:Fields/my:PortalsGroup/my:Portals1");
// Ist dieser null dann ist die section nicht aufgeklappt, es muss nichts getan werden
if (ipGroup == null)
return;
// Die DataSource abrufen (hier: "GetInternetPortals"). Diese muss zunächst über
// Tools->Data Connections angelegt werden und das häkchen bei "Automatically retrieve data
// when form is opened" muss nicht selektiert werden, denn die Daten sollen ja nur bei Bedarf
// geladen werden, um so das öffnen des Formulars nicht unnötig zu verlangsamen.
DataObject dob = thisXDocument.DataObjects["GetInternetPortals"];
dob.Query();
// Hier müssen die Namespaces gesetzt werden um auf das DOM des WebServices zugreifen zu können.
// Der erste Namespace ist IP 2003 standard, der zweite muss durch den Namespace
// des WebServices ersetzt werden.
IXMLDOMDocument2 d = (IXMLDOMDocument2)dob.DOM;
d.setProperty("SelectionNamespaces", "xmlns:dfs=\http://schemas.microsoft.com/office/infopath/2003/dataFormSolution\
xmlns:tns=\"http://MY-WEB-SERVICE-URL.COM/SERVICES\"");
// Den Knoten des WebService Response holen (wie dieser Knoten heißt lässt sich am einfachsten
// raus finden, in dem man im debug modus einfach mal den Inhalt von d.xml anschaut).
IXMLDOMNode rootNode = d.selectSingleNode("dfs:myFields/dfs:dataFields/ tns:GetInternetPortalsResponse/tns:GetInternetPortalsResult");
// Erst jetzt kann man feststellen, ob die Daten bereits in der Listbox enthalten sind
if (ipGroup.childNodes.length > rootNode.childNodes.length)
return;
bool removeFirst = true;
foreach (IXMLDOMNode node in rootNode.childNodes)
{ // Hier die beiden Knoten die vom WebService zurückgeliefert werden.
string id = node.selectSingleNode("tns:Id").text; string name = node.selectSingleNode("tns:Name").text;
IXMLDOMNode group = thisXDocument.DOM.
selectSingleNode("my:Fields/my:PortalsGroup/my:Portals1"); IXMLDOMNode field = thisXDocument.DOM.
selectSingleNode("my:Fields/my:PortalsGroup/my:Portals1/my:InternetPortals"); IXMLDOMNode newNode = field.cloneNode(true);
if (removeFirst)
{ group.removeChild(field);
removeFirst = false;
}
// Werte vom neuen Knoten setzen
newNode.selectSingleNode("my:internetPortalId").text = id; newNode.selectSingleNode("my:internetPortal").text = name; group.appendChild(newNode);
}
}
Demnächst mehr aus der InfoPath Hell...
Folgendes Szenario: Ein (relativ umfangreiches) InfoPath 2003 Formular, mit Managed Code in .NET 2.0 und ein paar Data Connections die Daten von WebServices abrufen.
Das Formular selbst ist inzwischen ziemlich groß geworden und von einer Sekunde auf die andere lädt das Forumlar einfach nicht mehr. Dazu folgende Fehlermeldung:
The query cannot be run for the following DataObject: XXX
InfoPath cannot run the specified query.
Attachment: Maximum retry on the connection exceeded. - HRESULT=0x80004005: Unspecified error
Nach ein paar google recherchen ist dieser Fehler scheinbar nur in anderen Zusammenhängen bekannt... Also alles mögliche probiert, aber keine Besserung. Dann mal ein neues Formular erstellt, data connection hinzugefügt, geladen --> lädt ohne Probleme.
Nach etwa einem Tag verzweifelten rumprobieren, das Formular mal auf einem anderen Rechner geladen --> lädt ohne Probleme!
Der Unterschied der beiden Systeme: Auf dem, auf dem es nicht läuft, ist nur das Office 2003 SP1 installiert, auf dem anderen SP2!
Lösung also: SP2 installieren.
Trotzdem bleibt es natürlich sehr fragwürdig, wieso es a) lange ging und erst auf einmal nicht mehr und b) ein neues Formular mit den komplett selben Einstellungen läuft.
Mag vielleicht an der größe des Formulars liegen oder an dem Wetter... ;-)
New Version here!
--- English version below ---
Hier gibt es nun endlich ein Tool, dass die nervigen Proxykonfigurationen überflüssig macht.
Wenn man immer unterwegs ist, und mal in dieser Firma, mal in einer anderen Firma, dann im Hotel, zu Hause, etc. und man jedesmal eine andere Proxykonfiguration benötigt, hilft mein neues Tool.
Der große Unterschied zu bestehenden Tools (und davon wird es sicher eine Menge geben) ist der, dass Proxy Switcher nicht nur ein Tasktray Symbol zum schnellen umschalten bietet, sondern dass Proxy Switcher automatisch, je nach Netzwerk, die Proxyeinstellungen setzen kann!
Dazu legt man einmalig die Proxyeinstellungen fest und definiert eine Bedingung, wann dieser Proxy aktiv werden soll. Als Bedingungen stehen derzeit zur Verfügung:
- Eine bestimmte Gateway Adresse
- Der DNS Suffix enthält eine bestimmte Zeichenfolge
Somit werden die enstprechenden Einstellungen aktiv, sobald man ein LAN Kabel einsteckt oder eine WLAN Verbindung herstellt die die entsprechenden Bedingungen erfüllt sind. Kein manuelles klicksen oder tippen mehr.
Also sofort downloaden: Download Installer
Requirements: .NET Framework 2.0 und Windows XP oder Windows Vista
Features:
- Verschiedene Proxy Einstellungen per Klick abrufen
- Plugin basiert um die Proxyeinstellugen von verschiedenen Anwendungen zu setzen die nicht auf Internet Explorer Einstellungen zurückgreifen können. Mehr dazu in einem der nächsten Posts.
- Automatisches Switching von Proxies, je nach Netzwerkkonfiguration
Änderungswünsche und Bugs bitte direkt hier in die Kommentare oder per Mail.
-------------------- ENGLISH --------------------
Proxy Switcher is a little helper tool for switching between different proxy settings.
If you are at many locations, e.g. at work, home, hotel, etc. you may be tired of setting (and remember) proxy settings for the different locations.
So, Proxy Switcher will assist you in remeber and easily switch between proxy settings. The major feature which is different from many other tools is, that Proxy Switcher can switch settings automatically depending on network connections.
To make this work, define a new proxy configuration and set a condition for activating it. Possible conditions (in this version) are depending on the DNS suffix (e.g. yourcompany.com) or on the gateway IP address. If you now connect you notebook to a network, the settings will activated automatically.
Another point is, that the application is Plugin-based. So if you have an application which cannot use the Internet Explorer settings write your own plugin for Proxy Switcher. More on this in one of my next posts.
If you have any questions or bugs, leave a comment or drop me a line.
Danke Microsoft für die Implementierung dieses fundamentalen Features in der kommenden Version des Team Foundation Servers / VS 2008... endlich!

Die Beta 2 vom Visual Studio 2008 (ehemals Orcas) ist ab sofort verfügbar.
Die beste Einstiegsseite ist die MSDN Subscription Seite falls verfügbar oder hier:
http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx
Dort gibt es auch bereits fertige VPCs mit VS 2008 Team Suite und Team Foundation Server (TFS) vorinstalliert.