Regular Expressions for Subversion keywords

Here are different Regular Expressions to identify the common (to me at least), the Subversion keyword: $Id$ on different type of files (depending on how the comments go).

This one is for languages derived from C (like C++, C#, PHP, Java, JavaScript):

// \$Id\: [A-Za-z0-9\ \:\.\-\_]* \$

It will match something like:

// $Id: filename 3 2010-06-23 15:48:28Z username $

This one also for languages like C, but also, CSS:

/\* \$Id\: [A-Za-z0-9\ \:\.\-\_]* \$ \*/

It will match something like this:

/* $Id: filename 3 2010-06-23 15:48:28Z username $ */

This one for Velocity files (as I’m using Castle MonoRail with NVelocity):

\#\# \$Id\: [A-Za-z0-9\ \:\.\-\_]* \$

That will match:

## $Id: filename 3 2010-06-23 15:48:28Z username $

So now, with these expressions, you can do some things like remove them from your code (if you are like me and are moving to Git).

Copy a Git bare repository including all branches

I have been enjoying Git for some months now. Coming from Subversion, the learning curve is not that long (although, can be a bit confusing at the beginning). There are a lot of very good documentation out there, but found Git Immersion one of the best resources.

Anyways, I was migrating some of my Subversion repos to my own Git server using this great tool I found on.. go figure, GitHub: git-svn-migrate, related post here. Because I didn’t run this process directly on my Git server, I ended with bare repositories (having more than one branches each) and needed to move them to my server.

One way would be to do a clone from the old location and then do a push to the git server, but having some branches on each repo made it a little longer (as far as I know, not an expert on Git yet though).

So, the easiest way I found was running the following command directly from the bare repo on my working machine:

git push --mirror git@yourserver:yourrepo

It worked like a charm, so now I’m much closer to shutdown my Subversion server once and for all!! (well, probably I’ll keep it though, it has been a very good partner for several years).

Btw, here are the instructions from the git-svn-migrate script’s author if you need to migrate just one (or if you would like to make it manual), enjoy:

Redirect WWW to non-WWW using Apache (htaccess)

The easiest way to redirect all your traffic from a WWW address (like to a non-WWW (like is using the following code:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

With this code, you don’t need to hard-code the name of the domain into the .htaccess file.

Apart from the fact that www is deprecated (more here), the main benefit of doing this (or redirect from non-WWW to WWW) is that Google and other search engines won’t penalize our site because of duplicated content on both versions of our domain (WWW and non-WWW).

Recursively copy from a FTP server

In Linux (and also in the World of Windows), there is a small great tool called wget (you probably already know it, it’s pretty popular). I have been using it for some years know as it is very convenient for downloading files (or even entire HTML websites) from the command line (specially when you manage a Linux server through SSH). What I didn’t know about it was that it also allows you to recursively copy files from a FTP server (a task that is not usually pleasant).

This is how:

wget -r*

If the FTP username is something like this:, then, you should replace the @ by a + simbol, like this:

Nginx newest version on Ubuntu Lucid 10.04 LTS

Some time ago I wrote a post regarding this same topic (installing an updated version of Nginx instead of the one that is on the official Ubuntu repositories) but for Hardy (8.04).

Now, it is the turn of the latest Long-Term-Support version of this Linux distribution.

In this case, we need to use this repository:

deb lucid main

You can create a file like /etc/apt/sources.list.d/nginx-stable.list, and put that line inside.

We also need to add the key of this repository so Ubuntu won’t complain.

apt-key adv --keyserver --recv-keys 00A6F0A3C300EE8C

and finally, run:

apt-get upgrade && apt-get install nginx

Windows 7 failing to copy large files through network

I have faced problems copying large files (several hundreds megs) over a Windows Network between two Windows 7 boxes. During the copy, the process just freeze forever, and when trying to cancel it, it just tries forever without success.

At first I tough it was a antivirus/firewall issue, but disabling the software on both machines didn’t fix the problem. What really helped was this fix, that disables a feature called Auto-Tuning. It only takes one command on the Command Prompt (Start/Run: cmd) to bring it down:

netsh int tcp set global autotuninglevel=disabled

Then, restart the machine and voila, the problem should be gone.

If this does not fix your problem and want to re-enable this feature, just run:

netsh int tcp set global autotuninglevel=normal

Two ways to check if a Registry Key exists using VBScript

The first one is using the method RegRead from WScript.Shell.

If the given key is not found, it will rise an error, so we need to use an On Error Resume Next (which I don’t really like).

We would need to pass to the function a string like HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ (note the trailing \) if we are looking for a Registry Key (those that look like a folder). If we want to check if a value inside a key exists, we would remove the trailing \, like HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\CurrentLevel.

Function RegKeyExists(Key)
  Dim oShell, entry
  On Error Resume Next
  Set oShell = CreateObject("WScript.Shell")
  entry = oShell.RegRead(Key)
  If Err.Number <> 0 Then
    RegKeyExists = False
    RegKeyExists = True
  End If
End Function

The second method uses WMI.

In this case, we would need to pass the Key Hive (Current User, Local Machine, etc) in the form of hex numbers (I declared them as constants). The KeyPath would be something like SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings.

Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKCU = &H80000001 'HKEY_CURRENT_USER
Const HKUS = &H80000003 'HKEY_USERS

Function KeyExists(Key, KeyPath)
  Dim oReg: Set oReg = GetObject("winmgmts:!root/default:StdRegProv")
  If oReg.EnumKey(Key, KeyPath, arrSubKeys) = 0 Then
    KeyExists = True
    KeyExists = False

The difference with this function is that will only check for Registry Keys and not for values.

Android FAQ – HBOOT and rooting

I found this information on AndroidForums and it is very helpful, so just wanted to keep it (maybe it helps someone else also):

What’s HBOOT?
It’s immediately loaded when the phone is switched on. It’s mostly responsible for checking and initialising the hardware and starting the phone’s software, for flashing official software releases (RUUs via Fastboot), as well as a few other things. In some ways it’s comparable to the BIOS on a PC.

How do I root HBOOT?
You can’t, it makes no sense. It’s a bootloader, not Android. It’s like trying to play a DVD on your kettle.

What does upgrading HBOOT do?
It may add extra hardware support for new phones (e.g. SLCD displays) and may fix a few bugs. HTC doesn’t release information about it.

What does downgrading HBOOT do?
The opposite. So, if you flash an SLCD phone with an old version of HBOOT that doesn’t have the support, the screen won’t work.

But rooting depends on HBOOT version?
It doesn’t.

Why does upgrading HBOOT remove root?
It doesn’t. When you flash an official update your ROM is replaced with an official one, which is why root is lost.

How do I change HBOOT version?
By installing an official RUU/update. There’s no other way – the bootloader is protected by the phone’s hardware security because a corrupt bootloader means a bricked phone with no way to recover. RUUs contain a version of the bootloader, which is automatically flashed.

Why do I need to downgrade HBOOT to root 0.92?
You don’t. You had to downgrade Android because unrevoked3 couldn’t root froyo. The new release can, so it works.

Why all the talk about HBOOT then?
Because it is confused with software release, which is the important part. An RUU won’t work if the installed software is a higher version (e.g. 1.20.x won’t work if you have 1.21.x), and people have mistaken that check for HBOOT version.

What about the xda 0.92 to 0.80 downgrade? It runs on froyo.
It’s an engineering/test release from HTC that was leaked. It fakes its software version to 2.09.405.8 so it will run on froyo and downgrade the ROM, so long as you’re not on a higher release than that. The process has nothing to do with HBOOT, but it does downgrade the bootloader to 0.80 as a side effect – and results in a dead screen on SLCD phones. It’s generally a bad idea to use this hack.

Why would any of this matter?
Because instructions based only on HBOOT version are not reliable. They may not work, or may cause your phone to stop working.

Definition: Recovery
A very small operating system on the phone, totally separate from Android, that is used to update your phone’s existing software via OTA updates, and has extra security privileges. When you permanently root your phone you also replace this with a different version (‘custom recovery’) that will allow you to install custom ROMs and not just official HTC updates.

Definition: ROM
Usually refers to the boot image and the system image (the kernel and Android), but broadly refers to all of the phone’s software. A custom ROM is anything that is modified from stock HTC. Custom ROMs you download can only be installed in recovery.

Defintion: RUU
Rom Upgrade Utility. HTC’s official way of flashing the phone’s software (i.e. completely replacing it, not updating existing software). An RUU can get past the phone’s security, and can change parts that you normally can’t even when rooted, e.g. the splash screens, the bootloader. An RUU wipes everything off the phone and is like a ‘total’ factory reset. That’s why it can be used to debrand or rebrand a phone.


From: AndroidForums

  • Facebook
  • Google+
  • LinkedIn
  • Twitter
  • Flickr