Things to Remember

Saturday 28 April 2012

editable area in mail template


 span contenteditable="true" apple-content-name="body" style="display;block;"

Thursday 12 April 2012

PHP code in MySQL Field

Mysql field with php in it? This is my code in a mysql field eval('?>;'.$data['field].'

Thursday 22 March 2012

RAW MySQL in Zend Framework

Nice n Easy (once you know how)

$sdb = new Zend_Db_Table('table_name');
$select = "SELECT * FROM whatever";

$adapter = $sdb->getAdapter();
$query = $adapter->query($select);
$result = $query->fetchAll();

NOTE - its an array, not an object that gets returned
$result['id]
not $result->id

Thursday 16 December 2010

Custom Mail Templates for Mac

(from some other guys blog)


10.5: How to create custom Mail stationery Apps
I noticed while looking through new hints that people have noted that some stationery options have display variations. Although the easy way noted in that hint only allows for a few adjustments (such as a color here or there), the stationery can easily be changed if you know how to to develop web pages.


All mail stationery files are self-enclosed web pages, much like a package file. Here's how to create your own.
  1. Create your desired stationery using your favorite web development tool.
  2. Locate the section of your stationery you would like to be able to adjust when in Mail.app, and enclose it with a span tag, with the following options: 
  3. Move all items needed for the page (html files and images) into a new folder called Resources.
  4. Using your favorite plist editor, create a new plist called Description.plist in that same Resources folder. Add a string called HTML File and set the value tocontent.html. Add the following additional strings: Display Name, Folder Name, Thumbnail Image, and stationery ID. The values for everything thing but stationery ID should be self-explanatory. In the stationery ID string, enter a value based on this "72A27F00-FF50-43E8-A304-B2F85Ere89tfb" but it should not be exactly the same this is only an example.
  5. Add an Array called Images, and in it, place string entries titled 0 through nn, where nn is the total number of images in your HTML file minus one. For the value of each string, list the file name of your image; the order doesnt matter.
  6. If you are using a background image, create an additional array titled Background Images and list your background images the same way you did in the last step. Background images must also be listed in the Images array from the prior step.
  7. Save your plist file.
  8. Create a new folder and place your Resources folder inside of it. Name your new folder mytemplate.mailstationery, where mytemplate is the name of your stationery.
  9. Double-click your stationery file, and you will be asked if you would like to install the stationery
Reference files can be found on your machine at /Library/Application Support/Apple/Mail/Stationery/Apple/Contents/Resources. Using the same methods described above, you can fully customize all the Apple Stationery files pre-installed with Mail.app, if you wish.

[robg adds: For the stationery ID entry, you can use uuidgen in Terminal to create a guaranteed unique identifier string.]

Sunday 7 November 2010

zend settings production v testing etc

bung this in your controllers init method:

//to get the email options from application.ini

$bootstrap = $this->getInvokeArg('bootstrap');

$configArray = $bootstrap->getOptions();

$this->config = new Zend_Config($configArray);



settings in application.ini should look like this:


email.outgoingserver = "auth.smtp.1and1.co.uk"

email.username = "noreply@playerreg.co.uk"

email.password = "pass"


call it in your action like this:

//setup email (this should really go elsewhere)

$emailusername = $this->config->email->username;

$emailpassword = $this->config->email->password;

$server = $this->config->email->outgoingserver;

$config = array('auth' => 'login',

'username' => $emailusername,

'password' => $emailpassword);

$transport = new Zend_Mail_Transport_Smtp($server,$config);

Zend_Mail::setDefaultTransport($transport);

Sunday 17 October 2010

Vital Stats:
iOS 4.0.1
Xcode 3.2.3
Mac OSX 10.6.4 Snow Leopard
iPhones 3G, 3GS, 4 (I finally have the whole lineup!)

PROBLEM: I still can't get iPhone 4 working. If you have one, please try it and help me out! UPDATE: Found the cause of the problem to be certain status bar libraries installed alongside other apps. I'm not sure why they cause the problem, but see full notes at the bottom of the post.

The Goal: As usual, we want to be able to click "build and go" in Xcode and get the app we're working on to load to the phone and start up. Also, we want to be able to debug from within Xcode itself. After all, Xcode is cool, and terminal+makefiles+gcc+gdb is lame.

Abstract: The plan remains unchanged from the 3.x method. In fact, you commenters practically wrote this one for me. This time we're going to tell Xcode that it doesn't need to codesign for iPhoneOS targets, then we're going to tell it don'tcodesign for iPhoneOS targets, then we're going to tell it, well, actually, codesign but do it using our script, not your built in method.

The Process: With Xcode closed and your device unplugged from the computer,

  1. If you've done this step before for previous guides, you may ignore it. You'll need a code signing identity in order to sign code to run on the device. Normally, this would be issued by Apple, but later on we'll break the signature check so you can make a "Self-Signing Identity" using this guide from apple (coral). Note that you should name the identity “iPhone Developer” EXACTLY to avoid having to change a bunch of the steps below.
  2. On your jailbroken iPhone, install the app AppSync. Add the source http://cydia.hackulo.us to cydia. You'll get a warning about pirating software: this patch, by virtue of breaking Apple's DRM so that we can install our own app, also enables us to install cracked App Store apps. Don't do that. It's immoral, fails to support legitimate developers who should be rewarded for their effort, and perhaps above all, pirating $2 cell phone apps is just ultra lame. But since our purposes are not nefarious, dismiss the warning. From this repo, install the package AppSync for OS 4.0, and for good measure, reboot the device.
  3. Make some Plist adjustments, starting with SDKSettings.plist:
    1. cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk
    2. sudo cp SDKSettings.plist SDKSettings.plist.orig
    3. sudo vi SDKSettings.plist

    Find

    1. CODE_SIGNING_REQUIRED
    2. YES

    and change YES to NO
    then find

    1. ENTITLEMENTS_REQUIRED
    2. YES

    and change YES to NO again. HINT: in vi, you can type the '/' key in order to "Cmd-F"

  4. Now, move on to the platform Info.plist
    1. cd /Developer/Platforms/iPhoneOS.platform/
    2. sudo cp Info.plist Info.plist.orig
    3. sudo vi Info.plist

    Two times, the following appears:

    1. CODE_SIGN_CONTEXT_CLASS
    2. XCiPhoneOSCodeSignContext

    Find each occurrence and replace the block

    1. XCiPhoneOSCodeSignContext

    with

    1. XCCodeSignContext
  5. And now the real bad boy, some binary patching of Xcode:
    1. cd ~/Desktop
    2. vi script

    hit the "i" key and copy/paste:

    1. #!/bin/bash
    2. cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
    3. dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
    4. printf "\xc3\x26\x00\x00" >> working
    5. /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
    6. /bin/mv working iPhoneOS\ Build\ System\ Support
    7. chmod a+x iPhoneOS\ Build\ System\ Support

    type the keys, in order: ":" "x" "enter"

    1. chmod 777 script
    2. ./script

    If it works right, you should see something like

    1. $ ./script
    2. 223+1 records in
    3. 223+1 records out
    4. 111648 bytes transferred in 0.002678 secs (41692099 bytes/sec)
  6. At this point, you're done telling Xcode it doesn't need to codesign. Now, we tell it don't codesign:

  7. With a new project open and ready to go (presumably you want to debug this one, though once you change these settings once, they'll persist from project to project) open Project>Edit Project Settings (from the menu). Click on the "Build" tab.
    Find "Code Signing Identity" and its child "Any iPhoneOS Device" in the list, and set both to the entry "don't code sign"

    Screen shot 2010-01-11 at 1.05.42 AM

    Should look like this

    Now you've told Xcode "don't codesign."






  8. Almost done: time to tell Xcode "well, actually you should codesign."
    1. mkdir /Developer/iphoneentitlements401
    2. cd /Developer/iphoneentitlements401
    3. mv gen_entitlements.txt gen_entitlements.py
    4. chmod 777 gen_entitlements.py
  9. Just hit cancel.

    And finally, to link the device and computer. Plug your iPhone in and open Xcode. Open Window>Organizer. Select the device from the list on the left hand side, and click "Use for development." You'll be prompted for a provisioning website login, click cancel. It's there to make legitimate provisioning easier, but doesn't make illegitimate not-provisioning more difficult.

Now you're good to go! But there's just one last thing. You have to do this last part for every new project you make.Go to the menu Project > New Build Phase > New Run Script Build Phase. In the window, copy/paste this:

  1. export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
  2. if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
  3. /Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
  4. codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
  5. fi

That will call the script you just downloaded in step 5 to sign our app with a fake signature. This is important only for debugging. If you do build and go otherwise, the app will load to the phone, but the app will fail to launch and you'll get:

Error from debugger: The program being debugged is not being run

That should do it. Take all those steps and you should be home free for JBDev without paying $99.

CREDITS: Once again, credit for this process goes to various posters in this forum thread at iphonedevsdk.com. All of these steps are there somewhere, it just took a while to re piece them together in the right combination.

iPhone 4 Issue (UPDATE see below): So the method above has been tested working for my 3G and my 3GS. I don't have my 2G right with me, but I expect it's no different from the previous method, given that it can't run iOS4.

The problem that I run into is this:

[Session started at 2010-08-04 20:35:02 -0400.]
//GDB stuff
Program loaded.
target remote-mobile /tmp/.XcodeGDBRemote-93925-69
Switching to remote-macosx protocol
mem 0x1000 0x3fffffff cache
mem 0x40000000 0xffffffff none
mem 0x00000000 0x0fff none
run
Running…
[Switching to thread 11523]
[Switching to thread 11523]
continue
warning: Unable to read symbols for "/Library/MobileSubstrate/MobileSubstrate.dylib" (file not found).
// A bunch of other lib load warnings like this here...
warning: Unable to read symbols for "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.0.1/Symbols/usr/lib/libcrypto.0.9.8.dylib" (file not found).

Debugger stopped.
Program exited with status value:45.

The killer is that the app installs, launches, crashes, and then launches fine manually. But I also can't connect GDB to the running process after the fact either, GDB claims the process isn't running. I have no idea what's going on. Anyone?

What gives?!

UPDATE (8/3/10): Totally by chance I happened to read this article on TUAW today about FaceTime. I didn't pay much attention until about half way down something caught my eye:

...rather significant My3G bug -- when installed, you cannot use your iPhone for native software development....

I had initially thought that maybe third party software was to blame but I meticulously disabled each MobileSubstrate extension I had one at a time and ruled them all out. Turns out that wasn't good enough. The (since fixed) My3G bug was exactly the source of this issue, but I had actually uninstalled My3G and the problem persisted. The issue, it turns out, is with the status bar library Intelliborn uses in their products, IntelliStatusBarIcons. BUT, it doesn't stop there. By individually uninstalling apps, I've found that Backgrounder (and NOT libstatusbar) also cause a dealbreaking bug. Instead of the program exiting with status:45, the new error is "Program received signal: "SIGUSR1". at which point the application hangs. Conveniently, the workaround is easy, if annoying: For your particular project title, add an Override in Backgrounder. Hopefully this IS a bug in Backgrounder and not a byproduct of its function. But at least now you can debug again!

So partly I'm dumb and partly this is just a bummer. Full story in this post, but the general idea is that gdb catches a SIGUSR1 from Backgrounder and you have to 'continue' through it. And obviously, disabling Backgrounder for your app prevents the signal from getting sent.