SugarCRM Event in Portugal

Just one week from now we will have a big SugarCRM event in Portugal. It is organized by DRI, amongst the speakers we will have Clint Oram, vice-president and co-founder of SugarCRM. I am really looking forward to be there, and i am also proud that i took big part in two of the projects that will be presented as case studies.

Website of the event (portuguese only): www.eventocrm.com


Firefox + Blogger crash

For some reason my previous post keeps crashing my FFX2. Maybe the list is way too long:) The markup of the post itself seems like valid HTML to me, so it must be something else. My plugins, or other markup of blogger? It's a mistery, if it happens with you, too, let me know and sorry about the inconveniences.

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
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:

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:

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()"