Contact

admin

About Me · Send mail to the author(s) E-mail · Twitter

At GROSSWEBER we practice what we preach. We offer trainings for modern software technologies like Behavior Driven Development, Clean Code and Git. Our staff is fluent in a variety of languages, including English.

Feed Icon

Tags

Open Source Projects

Archives

Blogs of friends

Now playing [?]

  1. Pink Floyd – Astronomy Domine
  2. Pink Floyd – Shine on You Crazy Diamond
  3. Jennifer Rostock – Echolot (Björn Störig Remix)
  4. Pammin – Next To You
  5. Jonas Mantey – Sie Ist Schön
Audioscrobbler/Last.fm

ClustrMap

Building UTF-8 Compatible QueryStrings (Not Only) for ASP.NET

Posted in ASP.NET | Browser at Friday, September 22, 2006 8:53 PM W. Europe Daylight Time

Whenever you append a query string to an URL, it's a best practice to URL-encode the query string value. On the server side encoding can be done by three methods of the System.Web.HttpUtility class, depending on the desired output.

Here's an example passing "Encoding Test: abcäöüß" to the methods:

Method Output
HttpUtility.UrlEncode Encoding+Test%3a+abc%c3%a4%c3%b6%c3%bc%c3%9f
HttpUtility.UrlEncodeUnicode Encoding+Test%3a+abc%u00e4%u00f6%u00fc%u00df
HttpUtility.UrlPathEncode Encoding%20Test:%20abc%c3%a4%c3%b6%c3%bc%c3%9f

The single method HttpUtility.UrlDecode() decodes all encoded query strings.

On the client side there are JavaScript functions to encode and decode query strings, namely escape() and unescape(). However, these functions have problems with the correct encoding of UTF-8 strings.

Today I had the same problem described in the article above while debugging search in dasBlog, which uses UTF-8 as the default request and response encoding. You can enable UTF-8 for any ASP.NET web site by including the following element in your web.config.

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

All search queries containing umlauts were retrieved without umlauts on the server side, so a query for König would result in Knig. The solution was to leverage the newer encoding functions encodeURIComponent() and decodeURIComponent() respectively which handle Unicode.

If you're interested in encoding in general I recommend Scott Hanselman's excellent podcast on globalization and internationalization. It gives a good overview without diving too deep into the details.

By the way, I recommend having a look at QuickRef.org, I really like their fast Ajax-enabled search engine for references of C, C++, CSS, HTML, HTML DOM, Java, JavaScript, MySQL, Perl, PHP and Ruby.

Now playing: New Order - Get ready - Vicious streak

dasBlog 1.9 Released

Posted in dasBlog | Design at Friday, September 22, 2006 3:16 PM W. Europe Daylight Time

After a long time since the last release Omar decided that we're eventually ready to release dasBlog 1.9.6264. Why I say we? Well, I've joined the development team and contributed some stuff.

In the 1.9 release, you'll find the User Click Throughs in the admin area. This features pulls out those click throughs that are performed by real persons and not some Google/MSN robot. You can configure robots based on user agents and domains in the SiteConfig\robots.config file.

There are other things I've contributed, for example passwords inside SiteConfig\siteSecurity.config are now encrypted. No need to bother about passwords in shared hosting environments anymore. The German translation has been extended by me and is now level with the English resources. There are parts of dasBlog that are not prepared for localization, though.

Read more about the new features on Scott Hanselman's blog.

With the current release we provide dasBlog buttons and badges for the first time. The current set is available here.

dasBlog Blue dasBlog Gray dasBlog Green dasBlog Red
dasBlog Blue dasBlog Gray dasBlog Green dasBlog Red

I'm adding more artwork in other formats later.

Now playing: Zero 7 - The Garden - Your place

Removing AnkhSVN Commands from Visual Studio

Posted in Visual Studio at Thursday, September 21, 2006 11:49 PM W. Europe Daylight Time

When you install Subversion 1.4.0 on the server and also TortoiseSVN on the client machine, the first time TortoiseSVN touches the repository on the server (for example by showing the log) the local working copy is upgraded to the new format.

Once a working copy is upgraded AnkhSVN, the Visual Studio Add-In for Subversion support refuses to attach to the the solution.

AnkSVN Error

Obviously AnkhSVN is out of date, so you're going to remove it using the uninstaller. The next time you open Visual Studio all traces of AnkhSVN will be gone, right? Unfortunately this is not the case. As you can see in the screenshot below, there's a entry left over in the main menu and several other items in the context menu of the Solution Explorer, all grayed out.

Remaining AnkhSVN Menus

Removing the main menu entry is fairly easy using View/Toolbars/Customize... But how to modify the context menu to get rid those items? The AnkhSVN wiki proposes resetting Visual Studio to the defaults. I believe there's a better solution.

In case you don't want to lose your IDE customizations you may use the VBA macro that does the job by enumerating all Visual Studio toolbars and commands and deleting the ones that start with "Ankh". The script takes a while to run, but wipes all menu items related to AnkhSVN. Tested on Visual Studio .NET 2003 and Visual Studio 2005 after uninstalling AnkhSVN.

Imports System
Imports EnvDTE
Imports System.Diagnostics
' Comment the following line if you're running the macro in Visual Studio .NET 2003.
Imports Microsoft.VisualStudio.CommandBars
Imports Microsoft.Office.Core
 
Public Module RemoveAnkhMenus
    Public Sub RemoveAnkhMenus()
        DeleteAnkhCommandControls()
        DeleteAnkhCommands()
    End Sub
 
    Private Sub DeleteAnkhCommandControls()
        For Each bar As CommandBar In CType(DTE.CommandBars, CommandBars)
            ' Debug.WriteLine(String.Format("Processing : {0}", GetPath(bar)))
 
            RecurseCommandControls(bar.Controls)
        Next
    End Sub
 
    Private Sub RecurseCommandControls(ByVal controls As CommandBarControls)
        For Each control As CommandBarControl In controls
            ' Debug.WriteLine(String.Format("Processing : {0}", GetPath(control)))
 
            ' Recurse childs.
            If control.accChildCount > 0 Then
                If control.Type = MsoControlType.msoControlPopup Then
                    RecurseCommandControls(CType(control, CommandBarPopup).Controls)
                End If
            End If
 
            ' Delete the control if it is related to AnkhSVN.
            DeleteAnkhCommandControl(control)
        Next
    End Sub
 
    Private Sub DeleteAnkhCommandControl(ByVal control As CommandBarControl)
        ' Delete control if it is related to AnkhSVN.
        If control.Caption.StartsWith("Ankh") Then
            Debug.WriteLine(String.Format("Deleting control: {0}", GetPath(control)))
            control.Delete()
        End If
    End Sub
 
    Private Sub DeleteAnkhCommands()
        ' Delete all commands related to AnkhSVN.
        For Each command As Command In DTE.Commands
            If command.Name <> Nothing Then
                If command.Name.StartsWith("Ankh") Then
                    Debug.WriteLine(String.Format("Deleting command: {0}", command.Name))
                    command.Delete()
                End If
            End If
        Next
    End Sub
 
    Private Function GetPath(ByVal control As Object) As String
        If TypeOf (control) Is CommandBarControl Then
            Dim cbc As CommandBarControl
            cbc = CType(control, CommandBarControl)
 
            Return GetPath(cbc.Parent) + "->" + cbc.Caption
        End If
 
        If TypeOf (control) Is CommandBar Then
            Dim cb As CommandBar
            cb = CType(control, CommandBar)
 
            Return GetPath(cb.Parent) + "->" + cb.Name
        End If
 
        Return "DTE"
    End Function
End Module

DownloadDownload the macro file here.

Weblog Layout Update

Posted in dasBlog | Design | General at Monday, September 11, 2006 12:33 AM W. Europe Daylight Time

After sticking to a hastily created customized dasBlog theme for a year I spent today in front of Photoshop and SelfHTML and redesigned some parts of this weblog. I've included some new images, removed most of the gray boxes framing visual elements and made the text a little bigger. I found that bigger fonts help reading large texts especially on monitors with higher resolution so you don't loose the line-endings every so often. These changes hopefully improve the readability of the page and perhaps you'll find it looks a little more Web 2.0-ish. ;-)

Hope you like it!

Now playing: Marilyn Manson - The golden age of grotesque - (s)AINT

Presentations

Posted in Presentations at Monday, September 04, 2006 2:22 PM W. Europe Daylight Time

Presentations thrill me, especially if they're carefully designed and held professionally. Because I'm always interested in good content presented in an efficient and entertaining way I've collected some presentation links over the last months. All presentations show great skills and also have thoughtful content. I would like to share the best videos here.

  • Is Google Book Search "Fair Use"? Lawrence Lessig talks about copyright issues with the Google Books project.
  • Free Culture Another great presentation by Lawrence Lessig in which he discusses the changes applied to the copyright laws and their implications for almost everything we do on a daily basis.
  • Identity 2.0 Dick Hardt shows his excellent presentation skills talking about identity on the web.
  • The Great Failure of Wikipedia Jason Scott talks about the processes inside Wikipedia and their often-unintended consequences.
  • All Marketers are Liars Seth Godin presents in front of Google employees analyzing their ability to tie their customers not only by cutting-edge technology but rather by making the services better than the ones provided by their competitors.
  • The Art if the Start Guy Kawasaki on entrepreneurial challenges and the business plan.
  • Seth Godin at Gel 2006 where presents on his This Is Broken project. Very funny indeed.

Now playing: Leftfield - Inspection (Check one)

A New Bike

Posted in NonTech at Monday, September 04, 2006 1:48 AM W. Europe Daylight Time

I wanted to blog about this for some weeks now but have been distracted by technical stuff, which one my readers complained about.

Balloon TyreFor several years I've been riding an classic red Mifa bike that was manufactured sometime before 1990. Earlier this summer it was time to give the bike a full repair cycle as the crank bearing was broken last year and the overall condition of the vehicle was less than optimal. Time for a new bike – I was toying with the idea of buying one of those stylish balloon bikes that are fairly often seen these days in Leipzig. These bikes have extra thick tires (50 or 60 mm wide) that provide comparable suspension to normal spring forks on streets. Balloon tires aren't a recent invention, the idea behind modern tires like Big Apple and Fat Frank actually date back to the 1930s. Actually balloon bikes were the predominant bike type at that time. However, manufacturers came back to the idea of built-in air suspension because it has a better response where the ground is covered with little bumps and potholes like on cobblestone streets that are pretty common in Leipzig. Balloon tires provide better comfort when riding in the city:

Cologne Sports University field tested the Big Apple tire using a regular (non-suspension) bicycle where approx. 25% fewer vibrations were experienced. In comparison, a full-suspension bicycle reduced vibrations by 33%. In addition the tire suspension responds very sensitively [...]

I did a little research and found several bike stores in Leipzig sell balloon bikes. Some balloon bike brands are very expensive and look stylish, I wanted to go for a rather functional bike that provides more value for the Euro. The guys at Radkombinat told me more about the whole story and let me test different models. The model Potsdam manufactured by Patria had all the features I want: A technical up-to-date bike with balloon tyres, 18 colors to choose from and most importantly, they build the frame to one's measurement. You purchase a tailored bike that fits like a glove, although shipping times are up to a month during summer. I also opted-in to a saddle suspension which I can definitely recommend. Riding this bike is pure pleasure even on rough ground.

Besides the common notion that thick tires have a higher rolling resistance this is actually not the case for balloon tires:

With an air pressure of 30psi (2 Bar) the rolling resistance is about 30 per cent lower than a 1.3/8 (37mm) wide tire.

Some pictures of my bike taken on our Geocaching tour today in Leipzig. We were successful at the Traumzauberbaum and Silbersee caches, but at the beautiful Trau dich! location the microcache kept hiding from our eyes.

Patria Potsdam Patria Potsdam

Firmware Updates for Nokia Mobile Phones

Posted in Mobility at Sunday, September 03, 2006 1:59 AM W. Europe Daylight Time

Nokia finally enables customers to perform firmware upgrades on their own. No need to have a Club Nokia card just to get free firmware updates in the local Nokia store. I appreciate their decision as it's something that other manufacturers like Siemens do for years. However, I'm a little tempted to buy a Windows Mobile 5 phone when my T-Mobile contract is renewed next year. We'll see.

The firmware upgrade software is currently in a testing phase in the UK, but you can download it even if you're not located in the United Kingdom. You'll need the battery charger attached to the device and the phone connected to the PC via the USB cable.

Nokia Software Updater

The update of my 6680 went smoothly without any problems. I just had to run the updater under an administrative account.

As always, be sure to back up your phone data beforehand using PC Suite's Content Copier. Note that the lock code will be reset to its default value of 12345 and that all wallet data will be gone after the update (it's not included in the Content Copier backup). Side note: The update will not remove any phone branding.

Take a look at Aikon.ch for a vast list of Series60 firmware revision changelogs.