2008-05-07

PHP Certification Study Guide Errors

If you have been already preparing for Zend PHP5 Certification exam from the official study guide, you know it has many annoying errors and misleading statements. Up until the beginning of April there was no forum/listing where you could cross-check the errors, but now we have this errata in our hands. Its pretty complete, i only missed two thing that i noticed myself while i was studying. I added these in the comments section of the page. For the sake of completeness i repeat the list hereby. Happy studying!

First Edition Errata

Page 7:
reads "If you need to output data through a function, you can use print() instead". Person reporting comments that "PHP manual makes it clear that print is not really a function but rather a language construct" So perhaps we just need to change the wording.

Page 11:
reads "When converted to a number or a STRING, a boolean becomes ... 0 otherwise". Compare this to
http://www.php.net/manual/en/language.types.string.php
saying:
Boolean FALSE is converted to "" (the empty string).

Page 12:
top line reads "...want to convert to enclosed in brackets"... this should read "want to convert to enclosed in parentheses"

Page 17:
should read $a = int('Test'); //$a==0 ... echo ++$a; //outputs 1. Otherwise the output will read "Tesu" because of the incrementing

Page 19:
lines 2,3: If both bits are either set or unset, the resulting bit is unset

Page 26:
check versus table in the manual http://www.php.net/manual/en/language.operators.php

Page 29:
on while loops: should say "they allow you to perform a series of operations until a condition evaluates to false"

Page 34:
the line "if($oldErrorHandler) will cause an error... need to put global $oldErrorHandler at the beginning of function myErrorHandler(). Also change to $oldErrorHandler = set_error_handler('myErrorHandler');

Page 50:
should read "giving the key for the specific element..."

Page 52:
-- if the two arrays had common elements that also share the same string keys or that have numeric keys (even if they are different) they would only appear once in the end result. This isn't true and should be changed to "if the two arrays had common keys (either string or numeric) they would only appear once in the end result"

Page 53:
var_dump ($a==$c); //should be false

Page 54:
should be echo array_key_exists('a', $a);

Page 54:
should be echo in_array (2, $a);

Page 55:
typo - "note how key key association..."

Pages 56-57: use of reset() is misleading here: only if the $array is passed by-reference to the function, it would be necessary to be reset; otherwise we'll find a brand new reset array inside the function by default.

Page 57:
should be $array = array(1,2,3); ... end ($array); to work with code right after it

Page 67:
"Push and pull" should be "push and pop"

Page 68:
should read "if you intend to use an array as a queue, you can add elements to the beginning and extract them from the end by using the array_unshift() and array_pop() functions".. Also should change the code appropriately

Page 76:
"Here's an escaped backslash - \ - "... should read "...backslash -\\"

Page 77:
echo srtr('abc','a','1'); //(instead of strstr)

Page 79:
strncasecamp instead of strcasencmp

Page 81:
Line 1 should be - "You can use the strspn() function..."

Page 87:
should read "A sign specifier (a plus or minus symbol) ... "

Page 88:
printf("%d", $f); //prints 123

Page 92:
should read "the function returns integer 1 if the match is successful"

Page 98:
should read "Contrary to popular belief, POST is not an inherently more secure way to ..."

Page 99:
2nd par, should read "As you can see, the data has been encoded and appended to the end of "...

Page 99:
should be [direction] not [dir]

Page 99:
Under the [FORM submitted with POST] section, the code says <input type="password" name = "pass' - note the single quote at the end of pass

Page 107:
$data should be $date

Page 109:
Check the "setcookie delete" description

Page 122:
the examples should read public $var1, $var2, $var3 instead of public var1

Page 123:
static public function baz() :: public should come before static

Page 123:
output will display "Hello World... Notice: Undefined property

Page 141:
This chapter says it reviews PDO and database connectivity but it never does... we need to either write something up or take this part out

Page 143:
"one-to-one... correspond to every row in the parent"... should read "each row in the parent"

Page 147:
"suppose we wanted to create a unique index"... but then an ordinary index is created

Page 147:
"isbn ...references book (id)" should say "references book (isbn)"

Page 149:
Ender\'s Game should be escaped with 2 single quotes as such Ender''s Game

Page 153:
sql statement is incomplete, only 2 of 3 tables are joined. Publisher table is missing from the joins

Page 158:
if (is_null(self::$_singleton)) {self::$_singleton = new DB(); - conflicts with the "the getInstance() method, which checks whether the static property $_connection has been iniitialized and, if it hasn't sets it to a new instance of DB

Page 164:
delete this line: function seek($key)

Page 165:
class myData implements Iterator (needed capital I on iterator)

Page 165:
$_myData and $_current needs to remove the underscore

Page 178:
Parsing XML Documents - text is confusing here

Page 184:
$dom->load('library.xml');

Page 184:
should read DomDocument::loadHTMLFile() (capitalize HTML)

Page 185:
DomXpath should read DomXPath

Page 204:
should read " the worst that can happen"

Page 207:
last line, 2nd par - should read "While setting register_globals to Off is the preferred approach"

Page 214:
Reads "Since 1=1 is always true and - begins..." - should read "Since 1=1 is always true and -- begins"

Page 228:
SEEK_CURRENT should be SEEK_CUR

Page 231:
reads "a directory which has the same file as an existing file" - should read "a directory which has the same name as an existing file"

Page 231:
should read "Note that, normally, only the last directory"

Page 231:
should read "Checks if the path is executable

Page 234:
"Stream contexts are created using stream_create_context()" - should read "Stream contexts are created using stream_context_create()"

2008-04-20

Google App Engine

Appengine is fresh and buzzing, check it out if you havent heard of it yet. If only it was not working for python only. I dont need to tell you what is the language of Web, do i?:)
Also Salesforce and Google integration got some fresh news.

2008-04-13

Amoba going opensource

I have published my gomoku (5 in a row) game as a free-to-take project on sourceforge. I was not touching the source since 2004 now, and i dont plan to develop further myself. If anyone finds it interesting, or just wants snippets from the code, feel free to use it, it is licensed under GPL.
The latest executable is still available from my homepage, or from sourceforge itself. Sourcecode is available in SVN repo.

Zend Framework and Smarty

I am about to start a new project based on ZF, the library looks like a beast to be tamed at first sight, i still need to learn a lot about it. I was doing some preliminary investigations how to use Smarty with its Zend_View component. A lot of info on the web looks outdated, but i found a great blog here (and old version here). Jani is a young Finnish developer-jedi, and i really like his writings about ZF and templating engines, just to list a few of them:
After all, i am still not sure which way to go. Shall i force Smarty as a View extension? Shall i completely leave out View component, and use Smarty manually from the controllers? Shall i forget Smarty and stick to the default View and Layout components in ZF using the ugly php syntax?
During my investigations, i also came across the blog of Matthew Weier O'Phinney, who is an actual developer of ZF, so it might be worth keeping an eye on him:)

2008-04-08

CSS Naked Day

Tomorrow is CSS Naked Day. Strip all your styles from your webpage, if you dare! I think i won't be that bold, but its an interesting initiative from Dustin Diaz, and so far some 700 sites have joined.

Becoming ZCE

Ok, so here is what kept me busy last week. Now i am officially Zend Certified (PHP5) Engineer :)

2008-04-03

Adobe AIR for Linux (Alpha)

Adobe published their first version of AIR for Linux. It lacks some features yet, but worth trying out.

2008-04-01

Save the developer + css support in IE

I recently came accross this site. Great to spread the word amongst people stuck with IE6. Although i am not that big fan of IE7 either, and i would definitely change the order of the recommendations.
[UPDATE: the above link was removed. Read on here.]

Why IE6 sucks? There are many issues, just to grab one, it is poor CSS support. Related to this there is a new doc from Microsoft showing the css selector support in running versions of Explorer. That might be useful to check one day.

Photoshop Express

Adobe just released their long awaited Photoshop Express. An in-browser image manipulation solution that is supposed to have some similar feel/functionality to the desktop version. While the resemblance is quite weak, there are some nice things you can do in the Flex-based Express edition. To upload your own photos you need to register, but a test-drive is available.

Acid3 fever

Just one day after Opera passing 100/100 on Acid3 appeared in the news, Safari team also announced Webkit to be passing the test. Apparently the test was also changing in the meanwhile, but they are both doing pretty well anyways. What about Firefox? Well, due to the upcoming release of version 3, it is not a subject of interest at the moment.

[Source: Ajaxian]

A new guy in WYSIWYG-town

Honestly i havent heard much about jTagEditor before, but apparently it got renamed as markItUp, and checking out their examples, all seems fine.
It is based on jQuery and intends to be a lightweight editor that you can use to produce normal html code, but you can squeeze out bbcode, wiki or markdown syntax as well.

Google docs goes offline

Hopefully this one is not an April fool's joke. Pretty soon we will be able to edit our documents while not connected to the Internet. More details and demo video here.