Wednesday, January 14, 2009

Ignoring svn entries in Cakephp

If you are trying to protect the svn related files so that they dont get shown in a browser, here is what worked for me after trying various things:

RewriteRule ^(.*/)*\.svn/(.*) - [F,L]

Making Cakephp and Shindig work together

So we decided to use Shindig for our web console widgets. There is lot of documentation on how to make shindig work as a virtualhost.

However, I didnt find complete documentation on how to make it work as a Alias (say www.domain.com/shindig/xxxx)
Where your Cakephp app runs at www.domain.com/

So basically, we have cakephp running as virtual host and our gadgets/widgets will be provided by shindig using the url www.domain.com/shindig/gadgets/ifr

Just few days ago, I read an interesting point in a performance article on Android code site - (paraphrasing) there are two phases of learning to developing on a new platform - first step is to make it work, second step is to make it work the right way.

So here is what I did and made it work - now you readers tell me how to make it work the right way.

I did svn co of Shindig in my downloads directory.
From there, I exported the following directories into vendors/shindig directory of my cake app.
- config
- features
- javascript
- php

So far so good.

In shindig/php/.htaccess file have the following line uncommented:
RewriteRule (.*) /shindig/index.php [L]

In shindig/php/config/container.php update as follows:
'web_prefix' => '/shindig',
'default_js_prefix' => '/shindig/gadgets/js/',
'default_iframe_prefix' => '/shindig/gadgets/ifr?',


In shidig/config/container.js, change all occurences of %host% with %host%/shindig. When I did it, there were 5 instances.

Now the shindig side is updated.

Next we need to tell Cakephp to ignore shindig urls. So, in your root .htaccess file
add
RewriteRule ^shindig/.*$ - [L]
Getting this to work took me a good part of the day. But hey, I now know how mod rewrite works, which I never bothered to learn till now.


Last part, we need to update the apache virtual host, so I added the following block:

Alias /shindig /dev/coolproduct/vendors/shindig/php
<Directory /dev/coolproduct/vendors/shindig/php>
</Directory>



Now, I put in a sample container and a widget, which I can load using:
http://local.domain.com/shindig/gadgets/files/coolappsamplecontainer/coolappsamplecontainer.html

Thursday, January 1, 2009

IPhone development - Global variables in Objective C

This one took me few hours, so I hope this post saves someone time.

So while developing our app for iphone, I decided to use static variable (probably a bad design choice, but I wanted to get the concept working and fix the code later). Anyhow. I found that using global static variables in Objective-C is obvious, but only if you know what you are doing.

For a newbie like me, who skimmed the Objective-C manual, and did read that there is something called retain, forgot about it when I actually needed it.

The problem was that I was setting the value in one View, but it was showing up empty on the other side. To add insult to injury, the iphone simulator showed all kind of weird exceptions, which I could not find any explanation yet. For example, it was crashing without any clear explanation. In few times, I saw NSCRArray length selector being invalid as reason for crash.


So, to have a global variable, this is what I did that worked:

In Globals.h:
extern NSString *gProp;

In Globals.m:
NSString *gProp;

In ViewThatHasABigWidgetThatSetsThisGlobalViewController.m:
-(void)someMethod
{ gProp = [textFieldvalue retain]; }

In ViewThatUsesThisGlobalViewController.m:
-(void)someMethod
{ NSString *textFieldValue = gProp; }