Tuesday, July 1. 2008
Vim Macro: cleaning up line endings
When development teams have people working on a variety of platforms, its pretty common to end up with wrong line endings. In vim these will look like ^M at the end of each line. To get rid of these line endings you can use the following command (in command mode)
:% s/^M$//
To type the correct ^M character, you'll need to press Ctrl + V followed by Ctrl + M (the first combination means "take the next combination literally).
To turn this into a macro you should do the following. In command mode, pressq, followed by any letter. This will be the shortcut to access the macro. Then type the command as above. Finally, press q again to stop recording and its done. You can use your macro by pressing @ and then the letter you chose.
:% s/^M$//
To type the correct ^M character, you'll need to press Ctrl + V followed by Ctrl + M (the first combination means "take the next combination literally).
To turn this into a macro you should do the following. In command mode, pressq, followed by any letter. This will be the shortcut to access the macro. Then type the command as above. Finally, press q again to stop recording and its done. You can use your macro by pressing @ and then the letter you chose.
Sunday, June 29. 2008
Serendipity and Feed Problems
This site uses a blogging platform called serendipity which is a nice little tool and I've been mostly happy since moving across from textpattern (I did write about the experience). Recently however, a few things have been going wrong with the feeds.
I edited an old post, because the image links were broken (I did have a nightmare migrating because I was so inconsistent about the format of the image tags in textpattern, completely my own fault). I was very careful not to update the published date of the article, however the edited article appeared in the feed, which wasn't what I had in mind! It turned out that this is by design. On line 262 of includes/functions_entries.inc.php (I have serendipity 1.1.3), I found this:
$cond['orderby'] = 'last_modified DESC';
I've commented out this line, which was in an if($modified_since) clause. Hopefully this will stop updated entries from appearing in the feed - I have a few other old ones to fix images in so we'll soon see.
At around the same time, Ivo mentioned that he was seeing the order of posts change in his reader (google reader) when people commented on my posts. I suspect that this is part of the same issue and I'm optimistic of it also being fixed by this change. However when I was looking into the problem I noticed that the URL he was using to access my feed, http://www.lornajane.net/index.rss2, actually returned RSS 0.91. Not ideal! The problem is the rewrite rule in serendipity's .htaccess file, which looks like this:
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml) rss.php?file=$1&ext=$2
When you request index.rss2 it should rewrite to rss.php?file=$1&ext=$2 but the "rss" matches first so the user gets redirected to index.rss instead. As a nasty hack to get around this I removed the rss from the above example and gave it a line of its own:
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rdf|rss2|xml) rss.php?file=$1&ext=$2
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss) rss.php?file=$1&ext=rss
Requests to index.rss2 are now correctly rewritten as rss.php?file=index&ext=rss2 and will get RSS 2.0 format in the response. I have just noticed however that this is the most requested page on the site so I really hope I didn't break anything!
I edited an old post, because the image links were broken (I did have a nightmare migrating because I was so inconsistent about the format of the image tags in textpattern, completely my own fault). I was very careful not to update the published date of the article, however the edited article appeared in the feed, which wasn't what I had in mind! It turned out that this is by design. On line 262 of includes/functions_entries.inc.php (I have serendipity 1.1.3), I found this:
$cond['orderby'] = 'last_modified DESC';
I've commented out this line, which was in an if($modified_since) clause. Hopefully this will stop updated entries from appearing in the feed - I have a few other old ones to fix images in so we'll soon see.
At around the same time, Ivo mentioned that he was seeing the order of posts change in his reader (google reader) when people commented on my posts. I suspect that this is part of the same issue and I'm optimistic of it also being fixed by this change. However when I was looking into the problem I noticed that the URL he was using to access my feed, http://www.lornajane.net/index.rss2, actually returned RSS 0.91. Not ideal! The problem is the rewrite rule in serendipity's .htaccess file, which looks like this:
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss|rdf|rss2|xml) rss.php?file=$1&ext=$2
When you request index.rss2 it should rewrite to rss.php?file=$1&ext=$2 but the "rss" matches first so the user gets redirected to index.rss instead. As a nasty hack to get around this I removed the rss from the above example and gave it a line of its own:
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rdf|rss2|xml) rss.php?file=$1&ext=$2
RewriteRule ^(index|atom[0-9]*|rss|b2rss|b2rdf).(rss) rss.php?file=$1&ext=rss
Requests to index.rss2 are now correctly rewritten as rss.php?file=index&ext=rss2 and will get RSS 2.0 format in the response. I have just noticed however that this is the most requested page on the site so I really hope I didn't break anything!
Friday, June 27. 2008
Zend Core Mysql Error
I've had this error more than once. On a debian virtual machine, with Zend Core installed, and when mysql doesn't restart when the machine reboots. It looks something like this:
debian:/usr/local/Zend/mysql/bin# ./mysqld
080627 12:31:16 [ERROR] Can't find messagefile '/usr/local/mysql/share/mysql/english/errmsg.sys'
080627 12:31:16 [ERROR] Aborting
This is for two reasons. First: you need to be up one level of directory to be able to run these commands. Some errors will tell you that but this one doesn't. Secondly, you need to use the mysqld_safe command.
debian:/usr/local/Zend/mysql# bin/mysqld_safe
Starting mysqld daemon with databases from /usr/local/Zend/mysql/data
This works for me - I have no idea if it is the prescribed method but background the process above and you're good to go.
debian:/usr/local/Zend/mysql/bin# ./mysqld
080627 12:31:16 [ERROR] Can't find messagefile '/usr/local/mysql/share/mysql/english/errmsg.sys'
080627 12:31:16 [ERROR] Aborting
This is for two reasons. First: you need to be up one level of directory to be able to run these commands. Some errors will tell you that but this one doesn't. Secondly, you need to use the mysqld_safe command.
debian:/usr/local/Zend/mysql# bin/mysqld_safe
Starting mysqld daemon with databases from /usr/local/Zend/mysql/data
This works for me - I have no idea if it is the prescribed method but background the process above and you're good to go.
Friday, June 13. 2008
DPC Day 1
Well, its a misleading title because the day is only half over but the Dutch PHP Conference 2008 is well and truly underway! Today I've been in the Zend Framework tutorial given by Matthew Weir O'Phinney, which is a full-day session. Its been excellent - with some concepts, some examples, and now a real working application to take a look around and learn from. I've had to work with ZF a little bit lately and I wish I'd been able to have this tutorial before I did that!
I've been able to catch up with a lot of people since arriving late last night and making the mistake of not going to bed until late because I wasn't tired (still on UK time) and then having to get up early today! Tonight we have an Ibuildings employees event which will be great, I'm excited to put faces to names for all my colleagues - the downside of the telecommute is that I mostly know people on Skype or IRC and not in real life. Later on there is a pre-conference social as well (from 8pm) - which is why my day is only half done :)
Looking forward to tomorrow, when there will be a phpwomen stand upstairs outside the main hall, we'll be giving out shirts (they're white this year) so if you want one then come and get it! Tomorrow at 2pm I'm giving my talk "PHP Deployment with Subversion" which looks like it will be well attended. Oh and its Worldwide Knit In Public Day as well so I'll be attempting to fit that in as well!
I've been able to catch up with a lot of people since arriving late last night and making the mistake of not going to bed until late because I wasn't tired (still on UK time) and then having to get up early today! Tonight we have an Ibuildings employees event which will be great, I'm excited to put faces to names for all my colleagues - the downside of the telecommute is that I mostly know people on Skype or IRC and not in real life. Later on there is a pre-conference social as well (from 8pm) - which is why my day is only half done :)
Looking forward to tomorrow, when there will be a phpwomen stand upstairs outside the main hall, we'll be giving out shirts (they're white this year) so if you want one then come and get it! Tomorrow at 2pm I'm giving my talk "PHP Deployment with Subversion" which looks like it will be well attended. Oh and its Worldwide Knit In Public Day as well so I'll be attempting to fit that in as well!
Thursday, June 12. 2008
Dutch Conference
Today I leave for Amsterdam, to visit the Dutch PHP Conference where I will be getting my first experience as a conference speaker. It would be fair to say that I'm very nervous - its a high profile event and the other speakers in the lineup are pretty amazing!
When I was invited (or perhaps that should be "volunteered") to speak at this event, I realised that I would need a lot of preparation in order to be able to deliver something like this. I arranged to give short technical presentations at local GeekUp events and went to both Leeds and Sheffield and spoke there. When I had assembled the content of the talk for Amsterdam, I circulated the slides around a few technical colleagues and friends, to make sure that it was accurate and covering sensible material. I was also charmed and excited to have the chance to attend the PHP London User Group meet last week and to give the actual talk there. So, at this point, there is little more I can do to prepare other than attempt not to get too drunk at the pre-conference social on Friday night!
The social side of things is something I'm really looking forward - this conference is organised by my employers, so I'll have the opportunity to meet the developers I work with every day but haven't met yet or don't see often. This in itself I know will be fabulous, although I will certainly forget everyone's names! In addition there will be people I know online from #phpc and of course some members of phpwomen.org as well - we are running a PHP Women stand at the conference and giving out shirts - so if you want one you had better come along and ask nicely :) I am also looking forward to meeting new people that I don't yet know I'm going to meet - so here's hoping for a wonderful time and not too many talk nerves!! To recover I'm staying on in Amsterdam for a few days since I haven't visited the city before, seems like a good opportunity.
When I was invited (or perhaps that should be "volunteered") to speak at this event, I realised that I would need a lot of preparation in order to be able to deliver something like this. I arranged to give short technical presentations at local GeekUp events and went to both Leeds and Sheffield and spoke there. When I had assembled the content of the talk for Amsterdam, I circulated the slides around a few technical colleagues and friends, to make sure that it was accurate and covering sensible material. I was also charmed and excited to have the chance to attend the PHP London User Group meet last week and to give the actual talk there. So, at this point, there is little more I can do to prepare other than attempt not to get too drunk at the pre-conference social on Friday night!
The social side of things is something I'm really looking forward - this conference is organised by my employers, so I'll have the opportunity to meet the developers I work with every day but haven't met yet or don't see often. This in itself I know will be fabulous, although I will certainly forget everyone's names! In addition there will be people I know online from #phpc and of course some members of phpwomen.org as well - we are running a PHP Women stand at the conference and giving out shirts - so if you want one you had better come along and ask nicely :) I am also looking forward to meeting new people that I don't yet know I'm going to meet - so here's hoping for a wonderful time and not too many talk nerves!! To recover I'm staying on in Amsterdam for a few days since I haven't visited the city before, seems like a good opportunity.
Wednesday, May 21. 2008
Confessions of an Input Device Fetishist
What can I say? I really really like input devices. I use a laptop day-to-day, it has its own keyboard and glide pad. Do I use them .... err, not often! I've always been quite particular about keyboards and mice, and since developing tendonitis in my hands and arms a few years ago, I'm fussier now than ever. Some of the stuff I have is really good though so I thought I'd show you around my collection.

I have two external keyboards that I use a lot, because I find even at a desk, they are way easier on the hands than using the laptop integrated one. My complete favourite is the Logitech UltraX Premium keyboard. It wasn't expensive, it feels really robust, its supposed to be spillproof which will hopefully make cleaning it a lot easier (I do eat at my desk so my keyboards take a lot of this kind of abuse), and its got a proper layout which is very important for programmers. I once had a laptop with both slashes next to each other in one corner of the keyboard ... its really not helpful! The other keyboard is a mini one, I often work from different locations and normal sized keyboards are too long to cart around whereas this one fits in my laptop bag. Its an A4Tech X-Slim multimedia keyboard and, while unexciting, it does allow me to type for more than a couple of hours when away from the office without seizing up! These are the keyboards:


Next up, trackballs. I have two, for years I used one of those Microsoft ones with the ball in the middle and the buttons on the thumb ... it died about a week from my dissertation hand-in and I've never managed to find another I like as much. At the time I bought the thumb-ball Microsoft Optical Trackball Mouse, which is hard to use and doesn't suit my hands - useful though if you need to keep alternating inputs as I sometimes do, and of course it takes less space than a mouse. I probably won't replace it but I do think that the Trackball Explorer has a lot of potential I think. I've always liked microsoft mice, despite not liking much else they make :) My other trackball is a real favourite, a fabulous piece of kit! Its a Kensington Expert Mouse (on the right below) and although I don't use it a lot now (I don't use a mouse a lot), when I am working with documents or whatever its great. The ring around the ball spins and acts as a scroll wheel - very neat. I did find that this helped a lot with my hand pain too. The best thing about this though, is that it was a gift!


I have a lot of mice. Which is strange as normally, I don't use one! As a kubuntu user who mostly writes code or documents, I actually don't need a mouse to interact with my computer most of the time. I browse using Opera's spatial keyboard navigation, and find that not having the mouse around means I don't use that and strain my hands - it sort of removes the temptation. To lean over the keyboard and reach the glidepad on my laptop is fine for the odd click when needed, but discourages me from using a mouse when I can use a keyboard. Since I touch type I can then just sit with my hands on the keyboard all day and I don't get such bad pains if I set up in this way. Anyway, mice! I'll start with a long-term favourite, which really wasn't expensive. Its my Belkin Ergo Mouse which was a panic buy in response to the onset of RSI pains. Its a great little mouse and fits my hand really well. I don't really know why I like it so much but its put up with a lot and still works like a dream. I've also recently acquired a contour mouse, as a hand-me-down, which doesn't have a scroll wheel but apparently that's because scrolling is really bad for your hands :) It's got a space to rest your thumb while you use it which is good as it helps stop the resting of thumb and wrist on the desk and then twisting to move the mouse. Finally, my new gadget of joy, my Kensington SlimBlade Media Presenter Mouse. Since changing jobs, I'm doing more presenting - both as a trainer and as a speaker at various events. Since my laptop has no bluetooth or anything, I've been restricted to clicking the slides along using the laptop keyboard which is awkward if you have bad room layout or want to walk around. This mouse is a really cute little wireless mouse, but when you flip it over it doubles as a remote control for media and presentations. I've used it a few times and love it although I'm finding it very unreliable under windows vista and their technical support has been anything but supportive. Maybe I'll write more about that another time. Anyway, its a lovely gadget and I'm happy to have it.



So, there you have it, my input device confession. Does anyone else hoard things in this way? And do you have a favourite device that I haven't mentioned? Comments please :)

I have two external keyboards that I use a lot, because I find even at a desk, they are way easier on the hands than using the laptop integrated one. My complete favourite is the Logitech UltraX Premium keyboard. It wasn't expensive, it feels really robust, its supposed to be spillproof which will hopefully make cleaning it a lot easier (I do eat at my desk so my keyboards take a lot of this kind of abuse), and its got a proper layout which is very important for programmers. I once had a laptop with both slashes next to each other in one corner of the keyboard ... its really not helpful! The other keyboard is a mini one, I often work from different locations and normal sized keyboards are too long to cart around whereas this one fits in my laptop bag. Its an A4Tech X-Slim multimedia keyboard and, while unexciting, it does allow me to type for more than a couple of hours when away from the office without seizing up! These are the keyboards:


Next up, trackballs. I have two, for years I used one of those Microsoft ones with the ball in the middle and the buttons on the thumb ... it died about a week from my dissertation hand-in and I've never managed to find another I like as much. At the time I bought the thumb-ball Microsoft Optical Trackball Mouse, which is hard to use and doesn't suit my hands - useful though if you need to keep alternating inputs as I sometimes do, and of course it takes less space than a mouse. I probably won't replace it but I do think that the Trackball Explorer has a lot of potential I think. I've always liked microsoft mice, despite not liking much else they make :) My other trackball is a real favourite, a fabulous piece of kit! Its a Kensington Expert Mouse (on the right below) and although I don't use it a lot now (I don't use a mouse a lot), when I am working with documents or whatever its great. The ring around the ball spins and acts as a scroll wheel - very neat. I did find that this helped a lot with my hand pain too. The best thing about this though, is that it was a gift!

I have a lot of mice. Which is strange as normally, I don't use one! As a kubuntu user who mostly writes code or documents, I actually don't need a mouse to interact with my computer most of the time. I browse using Opera's spatial keyboard navigation, and find that not having the mouse around means I don't use that and strain my hands - it sort of removes the temptation. To lean over the keyboard and reach the glidepad on my laptop is fine for the odd click when needed, but discourages me from using a mouse when I can use a keyboard. Since I touch type I can then just sit with my hands on the keyboard all day and I don't get such bad pains if I set up in this way. Anyway, mice! I'll start with a long-term favourite, which really wasn't expensive. Its my Belkin Ergo Mouse which was a panic buy in response to the onset of RSI pains. Its a great little mouse and fits my hand really well. I don't really know why I like it so much but its put up with a lot and still works like a dream. I've also recently acquired a contour mouse, as a hand-me-down, which doesn't have a scroll wheel but apparently that's because scrolling is really bad for your hands :) It's got a space to rest your thumb while you use it which is good as it helps stop the resting of thumb and wrist on the desk and then twisting to move the mouse. Finally, my new gadget of joy, my Kensington SlimBlade Media Presenter Mouse. Since changing jobs, I'm doing more presenting - both as a trainer and as a speaker at various events. Since my laptop has no bluetooth or anything, I've been restricted to clicking the slides along using the laptop keyboard which is awkward if you have bad room layout or want to walk around. This mouse is a really cute little wireless mouse, but when you flip it over it doubles as a remote control for media and presentations. I've used it a few times and love it although I'm finding it very unreliable under windows vista and their technical support has been anything but supportive. Maybe I'll write more about that another time. Anyway, its a lovely gadget and I'm happy to have it.



So, there you have it, my input device confession. Does anyone else hoard things in this way? And do you have a favourite device that I haven't mentioned? Comments please :)
(Page 1 of 22, totaling 129 entries)
» next page


Comments
Fri, 04.07.2008 07:06
This is a good place to know about more & more women speaker s: hers i am: http://geekspeakr.com/speaker/sree
Wed, 02.07.2008 22:10
LinuxJedi: I have a niece to knit for, no need to go to the great lengths of breeding grandchildren :)
Wed, 02.07.2008 19:58
Awww….That is really cute. Your stuff just gets better an d better :) Although I have visions of you in a rocking c hair in 60 years time knitting away embarrassing clothes for all you grandkids :)
Wed, 02.07.2008 14:28
Lorna, If you’re getting into hooks and coding standards yo u might want to have a look at triggering Greg Sherwood’s ph p codesniffer when somebody attempts to check in changes. http://url.ie/hq6 is a redirect to his blog posting about d oing this.
Wed, 02.07.2008 13:16
Geoff: For line-endings the SVN property is really useful, but for more complex requirements, like the ones Ken mention ed, a hook is more functional I think. I must admit to usua lly specifying whitespace and line endings in coding standar ds and then shouting at people that do it wrong … it [...]
Wed, 02.07.2008 12:57
Have you tried using the svn:eol-style property? This seems more appropriate than using pre-commit hooks.
Wed, 02.07.2008 12:11
Ken: Hello, thanks for dropping by and upstaging me with suc h an excellent tip :) I’ve also seen some nice pre-commit h ooks for SVN that cleans up this kind of badness before the files go near the repo.
Wed, 02.07.2008 01:23
Hi Lorna. Cool tip but I think I can go one better! I ha ve the following line in my ~/.vim/ftplugin/php.vim file autocmd BufWritePre *.php :%s/\s\+$//e This removes all t railing spaces in a .php file prior to writing it to disk an d means I can concentrate on work rather that using ma [...]
Tue, 01.07.2008 22:09
Nik: I can’t imagine what a wsdl would look like pasted into here so I’ve put it in a separate file for you, I’ve includ ed another example soap function so you can see the wsdl wit h two functions and I hope this will give you the help you n eed. The wsdl is at http://web.lornajane.net/sugar_so [...]