Warning: strpos() [function.strpos]: needle is not a string or an integer in /home/chaosorg/bugfeatures.com/blog/index.php on line 31

Warning: strpos() [function.strpos]: needle is not a string or an integer in /home/chaosorg/bugfeatures.com/blog/index.php on line 37
Bug Features - Free bug report and feature request service for your Web site.
Search Symfony API from Firefox with OpenSearch 

Now you can search the Symfony API directly from the Firefox search box.
  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1131 )
Ajax form submission with extJS in Symfony 1.2 
Spent the last few days getting to know extJS a bit better and thought I'd share this little handy hint. Usually in Symfony 1.0 if you want to submit a form via ajax you can use "form_remote_tag()" to handle all the Protoype scripting for you. In Symfony 1.2 there is no remote form tag anymore, so you can wire up a remote_function() to a button onclick handler instead. You will need to serialize the form, too. However, if you're using extJS you might want to do all this from within a panel/window class. To do that, you roll your own JS function like this:

<?php echo javascript_tag(
"function submit_profile(){
url: '/user/updateProfile',
scripts: true,
params: Ext.Ajax.serializeForm('profile_form'),
text: 'Loading...'
) ?>

Then in the success template you can drop a little more extJS:

<?php use_helper("Javascript"); ?>

<?php echo javascript_tag("
Ext.MessageBox.alert('Profile Updated', 'Changes saved successfully.', true);
"); ?>

In both cases the panel window object containing the form is called 'content_window'. Submitting the form updates the window and a successful post will close the window and show an alert.

  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1129 )
Software RAID 0 drive mirroring in Windows XP 
I admit I am a Windows apologist but at least I hex edit my system files! Today I installed a second 1.5TB drive to mirror my primary data drive (you know, the one with all my work files, MP3s, virtual machines etc). Now Windows XP doesn't support RAID 0 out of the box, but that's just because it's disabled for workstation OSes. The capability is sitting there under the hood - and it works...

http://www.tomshardware.com/reviews/win ... 925-2.html

All you need is a hex editor and an XP boot CD to run the recovery console in. Now I feel slightly less concerned about my 1500GB single point of failure...
  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1061 )
Understand TCP/IP? Out of work? Want to fight terrorism? 
Well this is the job for you comrade!

ASIO is hiring!

  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1060 )
JavaScript sessions 
Well I would never have thought of it myself but this is an ingenious hack. By storing serialized data in the window.name parameter of the browser, you can have persistent data from page to page and - get this - across multiple domains. All without cookies. Food for thought there.

Meanwhile, you can have yourself a client-side session (until browser developers realise that 2MB+ is just way too big for a placeholder and lets face it this is a massive security risk which I'm sure is already well exploited by those who know about it).

  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1054 )
Using DBG for web based debugging and Xdebug for CLI debugging 
This is actually all I really wanted. To be able to use DBG in my IDE (PhpEd) and then have access to Xdebug in my command line scripts. Why? Because DBG is a great debugger and PhpEd is a great IDE, but Symfony requires Xdebug to do code coverage checks in its Lime testing framework. If you use PHPUnit you will find the same thing.

So I have apache configured to use DBG so I can debug from a browser and back.

Then I have a separate PHP.ini file that the command line accesses by specifying it in my windows PATH environment variable.

Now I have the best of both worlds and, if I ever really need to change, it's a matter of changing 2 lines in httpd.conf and restarting apache for those rare occasions. Not the holy grail, but it'll do for now.
  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1093 )
DBG and Xdebug living in harmony 
You may have tried this before and, like me, failed. But today I tried again, being a sucker for punishment, and . . . it worked! So don't believe everything you read on the internet (especially in forum posts from 2006!).

2 days later....

After intermittent crashes in apache I decided that the harmony was not quite complete... so I came up with another solution which I'll put in my next post!
  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1097 )
Symfony URLs with dots 
If you need to pass an email address or use any URL with dots init, Symfony may get confused. This is actually a problem with the .htaccess setup and can be resolved simply by adding the following rule:

RewriteCond %{REQUEST_URI} !\..*/.*$

Thanks to the Symfony Google group for this one!
  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1035 )
Improved IE select trick 
I was experiencing problems with the blur handler not firing inside iframes so this is my new and improved version of the code below:

function grow_select(){
if (document.all){
function shrink_select(){

function checkLocation(e)
if (e.srcElement) {
el = (e.srcElement);
else if (e.target) {
el = (e.target);
if (el != \$('product')){

Event.observe(document, 'mousemove', checkLocation);

  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1058 )
IE truncated select list workaround 
Ever had a drop down list that you needed to set the width for? Then you probably noticed that options that are longer than the desired width are cropped in IE (of course firefox handles this problem nicely - the select list is the correct width).

Well under duress from a client I came up with a simple solution - set the width dynamically on rollover and reset it on the obblur event.

Here's a simplified version of the javascript:

function grow_select(el){
function shrink_select(el){

And an example select list

<select name="amount" style="width: 50px;" onfocus="grow_select(this)" onblur="shrink_select(this)">
<option value="1">One</option>
<option value="1000000">A Million</option>
<option value="1000000000000">A Million Million!</option>

Of course some improvements would be:

* Store the old width in a variable
* Use a window timeout to auto-reset the element if a mouseover check fails

  |  [ 0 trackbacks ]   |  permalink  |  related link  |   ( 3 / 1067 )

Back Next