XSLT snippet to convert string from hyphens to CamelCase
Here is a snippet to convert string in XSLT template from hyphenized text to CamelCase. (Developed today while creating new import/export templates for Doctrine2 YAML support).
Usage:
First: <xsl:call-template name="ConvertXmlStyleToCamelCase"> <xsl:with-param name="text">orm-designer</xsl:with-param> </xsl:call-template> Second: <xsl:call-template name="ConvertXmlStyleToCamelCase"> <xsl:with-param name="text">orm-designer</xsl:with-param> <xsl:with-param name="firstLower" select="false()"/> </xsl:call-template>
Result:
First: ormDesigner Second: OrmDesinger
XSLT Template:
<!-- =========================================================================== --> <!-- === Convert camel-case-text to CameCaseText === --> <!-- === (c) Inventic s.r.o. ORM Designer team (http://www.orm-designer.com) === --> <!-- =========================================================================== --> <xsl:template name="ConvertXmlStyleToCamelCase"> <xsl:param name="text"/> <xsl:param name="firstLower" select="true()"/> <xsl:variable name="Upper">ABCDEFGHIJKLMNOPQRSTUVQXYZ</xsl:variable> <xsl:variable name="Lower">abcdefghijklmnopqrstuvwxyz</xsl:variable> <xsl:for-each select="str:split($text,'-')"> <xsl:choose> <xsl:when test="position()=1 and $firstLower = true()"> <xsl:value-of select="substring(node(),1,1)"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="translate(substring(node(),1,1),$Lower,$Upper)"/> </xsl:otherwise> </xsl:choose> <xsl:value-of select="substring(node(),2,string-length(node()))"/> </xsl:for-each> </xsl:template>
Feel free to use in whatever way you find it useful.
XSLT snippet to convert string from CamelCase to hyphens (Hyphenize)
Here is a snippet to convert string in XSLT template from CamelCase to hyphenized text. (Developed today while creating new import/export templates for Doctrine2 YAML support).
Usage:
<xsl:call-template name="ConvertCamelToXmlStyle"> <xsl:with-param name="text">OrmDesigner</xsl:with-param> </xsl:call-template>
Result:
orm-designer
XSLT Template:
<!-- =========================================================================== --> <!-- === Convert CameCaseText to camel-case-text === --> <!-- === (c) Inventic s.r.o. ORM Designer team (http://www.orm-designer.com) === --> <!-- =========================================================================== --> <xsl:template name="ConvertCamelToXmlStyle"> <xsl:param name="text"/> <xsl:variable name="Upper">ABCDEFGHIJKLMNOPQRSTUVQXYZ ,</xsl:variable> <xsl:variable name="Lower">abcdefghijklmnopqrstuvwxyz</xsl:variable> <xsl:for-each select="str:split($text,'')"> <xsl:choose> <xsl:when test="contains($Upper,node())"> <xsl:if test="position()>1"> <xsl:text>-</xsl:text> </xsl:if> <xsl:value-of select="translate(node(),$Upper,$Lower)"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="node()"/> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template>
Feel free to use in whatever way you find it useful.
Error in RegEx (atlrx.h) in Visual Studio C++ 2003 and 2005
During our development we found that Microsoft RegEx (Regular expression) implementation contains a bug which caused crashes of our applications. The application module using RegEx passed all unit test, but sometimes under heavy usage the application crashed at our customer. Because we use BugTrap for error and crash notifications, we knew the error was in atlrx.h file.
After several hours of testing and searching we found the bug. The crash didn't occur after first code execution, but we had to run thousand iterations of the same code over and over. The bug is located in file atlrx.h at line 708.
Original file looks like this:
case RE_ADVANCE:
sz = CharTraits::Next(szCurrInput);
szCurrInput = sz;
if ( sz == NULL || *sz == '\0')
goto Error;
ip = 0;
pContext->m_nTos = 0;
break;
Problem is, that variable szCurrInput have in some circumstances NULL value and this causes the crashes.
Updated file with bug fix:
case RE_ADVANCE:
if( szCurrInput == NULL || *szCurrInput == '\0' )
goto Error;
sz = CharTraits::Next(szCurrInput);
szCurrInput = sz;
if ( sz == NULL || *sz == '\0')
goto Error;
ip = 0;
pContext->m_nTos = 0;
break;
We change the first two lines. It is necessary to test szCurrInput variable for NULL and empty string value. If szCurrInput is NULL or empty string, it's necessary to stop processing RegEx. Otherwise stack overflow during processing string occurs.
Note
Some time later we had other problems with Microsoft RegEx implementation and non-standard RegEx syntax. So we left MS RegEx parser and moved to Boost.Regex which is really nice piece of code (as well as other libraries of the Boost pack) and supports Perl and POSIX regular expressions. Whole Boost library is carefully unit test and can be relied on.
Why I am not using phpMyAdmin on production servers
Even though I find phpMyAdmin and similar tools useful I don't like them on production servers. When I spent a lot of my time protecting website against SQL injection I don't want to leave opened doors to access the database through phpMyAdmin. Many phpMyAdmin installations are not protected with HTTPS and just one login on a public or attacked wifi can lead to a lot of troubles. So I recommend to delete the phpMyAdmin installation from the server and start with a more comfortable and secured way to do the task.
SSH tunnel will give you the security you're looking for. Start your Putty, load the session and configure tunnel:
I've selected port 3366 to be used on my local machine so it avoids conflict with my other installation. Now I can connect from any tool to MySQL database at localhost:3366. I prefer Netbeans IDE and MySQL Workbench which is also really great for server/user configuration.
Secure SSH with RSA/DSA key
We are using SSH a lot to deploy our projects and to do common maintenance tasks. If you are accessing your server many times a day you might find frustrating typing the password all the time. You can use private key instead. Here are some detailed articles about adding RSA key and configuring SSH daemon. Bellow is a summary of the basic steps for Windows users.
Putty which is a great alternative to the Linux tools. To generate private/public key you should use PuttyGen.exe. Run the application, click generate and follow the instructions. It's a good idea to put your name into the key comment so you could easily recognize your public key in configuration files. You should also protect your key with a password.

Copy the public key which is located in the big text field above Key fingerprint field. Append the public key into /root/.ssh/authorized_keys file (if you want to login as root). You might need to create this file if it doesn't exist already. Click on Save private key button and save the key to a secured place. You can now use this private key to login with putty to the remote server. To make things more comfortable you can use an agent to store unlocked private keys in the memory while you are logged into your computer. Run this command after you login:
pageant.exe john_doe.ppk
Without any further settings you should now be able to login to the remote SSH without password. If everything worked as expected you can now disable password authenticated access to make your server more secure:
# /etc/ssh/sshd_config
PasswordAuthentication no
To load you key after you login to a Linux box (useful for deployment) insert:
# ~/.bash_profile
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
keychain --clear id_rsa
. ~/.keychain/$HOSTNAME-sh
ssh-add
Now we have a little bit more secured but more comfortable way to use SSH.
New blog
We've realized there are many things that we would like to share with others, but there isn't any appropriate place to stick our thoughts and ideas. So we decided to put yet another blog on the internet so we could write here all the stuff that's on our minds.
You might find here articles related to C++, Symfony, Doctrine, Propel and development in general and maybe also some insight views into the development of ORM Designer. Hope you'll enjoy reading our articles and also that we will make it to at least one hundred posts.
