Tag Archives: Php

What to make of TIOBE’s PHP results

A few weeks ago Twitter was a storm of activity around the TIOBE index.  PHP had dropped two spots having been overtaken by Python and C++.  Most of the activity was not from the PHP side.

Having used the TIOBE index myself I was a little surprised to see PHP drop so suddenly.  So I decided to take a look and see what was going on behind the scenes by reading on the index definition to see if I could understand what happened.

After reading through the definition I still don’t know what happened, or even why it happened.

The TIOBE index is calculated by looking at the top 6 sites on Alexa that have a search function which says how many hits there are for the query +”<language> programming”.  So, for PHP it would be +”php programming”.  The results of the search weighted based off of the search engine and calculated as a percentage so that the total of the top 50 programming languages equals 100%.  Additionally, each query is given a confidence rating to weed out false positives via a manual process.  For example, searching for +”basic programming” could also return a result for “Improve your basic programming skills in Java”.  If 10% of the hits in the first hundred pages of the search results are determined to be false positives then the search results will be taken at 90% of their value.

So what was it that caused PHP to tank and Python and C++ to take over?  In short; I don’t know.  Also, FTR, I consider C++ in the same realm as C and so I’m not overly concerned with C++.  Many of the search results for C also have C++ in there so who knows how the confidence rating is calculated there.

The reason why I don’t know is that I did the search +”php programming” and +”python programming” on most of the search engines and I found that PHP was usually double the Python results, or more.

+"php programming"+"python programming"
Google1,480,000966,000
Yahoo133,000,00023,100,000
Blogspot12,5008060
Wikipedia215250
Youtube575697

The only places where Python took over was Wikipedia and YouTube, and not by much.

Here’s where the TIOBE index breaks down.  It claims that “The ratings are based on the number of skilled engineers world-wide, courses and third party vendors.”

No it’s not.

The only way that TIOBE is calculated is by applying a single query on a few search engines and matching it up with a manual confidence factor for the results.  That query is not sufficient in determining “popularity”.  No data is provided as to why THAT query alone is sufficient to  determine popularity.  It’s assumed.

PHP is an easy language to test the veracity of that statement because there are very few other acronyms that match up with the programming language so neatly.  Let’s compare the Youtube results of +”php programming” and “PHP”.  The TIOBE query on Youtube yielded 575 results, but simply searching for “PHP” returned 768,000 results.  On Google, the TIOBE query got 1,480,000 hits whereas the simple “PHP query yielded 14,870,000,000 results and the first few pages had only one false positive.  Here’s an interesting Google query to try; +”php programming” site:www.php.net.  It has fewer results than “python site:www.php.net”.

In other words, when checking against a query that is quite specific (not much else is called PHP) we see a very wide differentiation between the TIOBE query for PHP and a simpler query. It seems like the index is more of a data retrieval experiment than a real-world representation of actual popularity.

And I still can’t figure out why PHP dropped the way it does.  Perhaps it has a  high false positive rating.  Which, I could argue, could be more important than search results.  Why?  Because the more popular you are the more people will try to use your popularity for their own ends. So what to make of the TIOBE index’s PHP results?  I simply don’t know because the methodology seems to be pulled out of a hat.  Perhaps a percentage increase of a given language is also taken into consideration (meaning that blog posts jumping 50% in a given month would be added to the score) but I didn’t see that noted in the index definition.

But I could be wrong.  I could have completely misread the index definition and perhaps the real world popularity of Python DID jump over PHP.  I know it did for a day or two after the results came out.  But after going through the methodology and trying to match it up with what I saw in the search engines I have my doubts as to it’s accuracy.

Migrated the blog… to WordPress

to WordPress?

Yep.  I had written my blog from scratch, partially because I wanted to use it as a testing ground for various ideas and such.  However, part of the problem of maintaining your own blog software is maintaining your own blog software.  I think that I’ve pretty much milked the code for all it’s worth.  So now I’ll stop maintaining my own code and start using someone else’s.

But… WordPress?

Yep.  Let’s face it; the code base is a horrible stinking mess.  The API is not intuitive in any way, shape or form.  WordPress pretty much gets everything wrong…

… except that it gets the job done.  Way too many programmers are way too proud of their code.  Well, not really.  They’re proud of their ability and they like any opportunity to talk about how great their abilities are.  PHP was never about that (though we have our share of egotists).  PHP was about getting the job done.  Do I wish that the WordPress engine had a better architecture?   Absolutely.  Do I wish that the API was remotely intuitive?  Yep.  But the long and the short of it is that I don’t have the time to maintain the code base for a blogging application.  So I use one that already exists, has plenty of templates available (I’m the world’s second worst designer) and has a large community around it.

So, yes, WordPress.

I hate config files

I hate config files.  There, I said it.  Made a change to your configuration?  Database?  Temp location?  Gotta redeploy your application.  Even if you have an awesome deployment mechanism it just seems somehow wrong to have to redeploy your app to make a configuration change.  From a security standpoint, I don't particularly like having passwords and such being stored in a source repository.  Or making it part of your build process.  Or manually editing files in production.

I want my configuration to be discoverable.  In other words, the only part of the deployment process that has configuration information is the information needed to discover your configuration.

I'm doing some work again (finally!) on a really cool cloud example.  But one of the things I had noticed was that every time I redeployed the app I needed to script out changing some discoverable endpoints.  For example, if a queue has a load balancer in front of it, that load balancer name/IP may have changed.  Having that extra level of deployment in there really bugged me.  Some may say "with continuous deployment you don't have to worry about that!"  Oh yeah?  What are you doing making your production environment available to your testing environment?  Production settings, by definition, should not be testable in any other environment other than production and you generally shouldn't be testing in a production environment.

One of the big tenets of building a scalable application is being able to discover resources.  Who knows where information lies in a large scale system?  Now, PHP developers may say "it's never been a problem before!".  To which I would reply, "that's the only way you've ever done it."  In other words, having an easy way to manage configuration options and application resources are things that most PHP developers have not really done.  I take that back, I have seen it done, but it's done by figuring out what the local configuration file says about those app resources and configs.

That's it.  Just ranting.  Kinduv.  But seriously, I do think we need to handle configuration and resources in a better way.

Objections to dynamic typing

I am about to head out to Magento Imagine to speak on queuing and scalability.  So what is today’s blog post about?  Dynamic typing; which has absolutely nothing to do with scalability.

Every once in a while I inject my opinions into places where they are not welcome.  I have heard from people in the staticly-typed realm of how amateur dynamic typing is.  Some people are interested in understanding how to use dynamic typing, others, not so much. So what I would like to do is talk about some of the arguements made against dynamic typing.  Clearly PHP will be my reference point, but many of my points will be salient across many dynamically typed languages.

The biggest misconception about PHP is that it is a strictly dynamicly typed language.  In other words that cannot have typed variables.  Where you are using the OOP mechanisms in PHP, you have the opportunity to strictly type your variables.

1
2
3
4
5
6
7
8
9
10
11
12
class Test {}
class Test2 {}
 
class ExecuteTest {
 public function exec(Test $test)
 {
 doSomethingWithTest($test);
 }
}
 
$et = new ExecuteTest();
$et->exec(new Test2());

What happens when this code gets compiled?

Catchable fatal error: Argument 1 passed to ExecuteTest::exec() must be an instance of Test, instance of Test2 given, called in test.php on line 17 and defined in test.php on line 9

Fatal error.  This is because the type of object passed in was incorrect.  So data types do exist in PHP and many other languages.  The only downside is that you need to actually run the code on your web server or in a unit test to compile it.  Some would (and have argued extensively) that this is a significant drawback.  There’s truth to that, but on a very limited scope.  Is it a drawback?  Yes.  Is it signficant?  Not by a long shot.  Whether it’s PHP, Java, C, Perl, Ruby, VB, C#, JavaScript, etc. etc, if you deploy code that you haven’t tested then you deserve every error and every sleepless night you get.  It’s called being responsible for your code.  And don’t think that having your code pre-compiled is much better.  I have a lot of compiled applications running on my computer.  Cakewalk SONAR, Firefox, Apache, PHP (the binaries), MySQL, Tweetdeck, Java, etc., etc.  And you know what?  Shit still happens with compiled code! Sometimes even type-related errors!  Compiling your code ahead of time as you do with C, Java, and the like does not protect you from type-based errors.  Can you catch some fat-fingered errors?  Sure.  Are you safe?  No.

For example, take this Java code

 

1
2
3
System.out.print(
     Integer.MAX_VALUE
);

 

Running it provides an output of

2147483647

What about this code?

 

1
2
3
System.out.print(
     Integer.MAX_VALUE + 1
);

 

The output is 2147483648, correct?  No.  It is

-2147483648

Did the compiler flag that?  No.  Is that a weakness in Java?  No.

That was a bit of a side-track, but it highlights what I think is a misconception about PHP applications and structure, usually made by those who don’t do significant work in PHP.  Do you HAVE to build a well-structured application?  No.  Should you?  Of course.  PHP does not force you to write bad code.

Often those who complain about PHP will complain not about what PHP developers DO, but about what they COULD do.

But let me address what I think is probably the biggest complaint from the static-typed crowd.  The biggest problem is not the programming language, but the user sitting at the interface.  The problem is that if you have data entered for a field called “width” and the person on the other end enters “wiener” the problem isn’t that “wiener” evaluates to zero, it’s that you didn’t validate your data.  This problem exists for C, Java, or whatever your compiled language is.  Why?  Because if you are building a web site you do not have the ability to force typed input.  Why? HTTP is ALL strings.  There are no integers, there are no floats, there are no booleans.  They are all strings, regardless of the language you are working in.  And there are plenty of validators in the core PHP language to use (ctype_*) and plenty of frameworks that offer more advanced validators.  If you aren’t validating input in ANY language you will have problems.

The next issue is with API code.  I have no problem conceding that if I am writing an extremely math based application that PHP is likely not a good choice.  So, 3d applications, music/audio applications, games, etc.  Going back to the previous paragraph, PHP was written for HTTP.  HTTP uses strings.  But if you’re building an API or structuring an application, how do you make sure that other programmers don’t provide data that royally messes up your code.  Conceptually, I will concede that this could be a problem.

But go back a few paragraphs.  I made the claim that people complain not about what PHP developers do, but what they could do.  The example I saw was

 

1
$square->setSize("hello");

 

setSize(int), in a static-typed language, will fail.  Could you put “hello” into a method call named setSize() in PHP?  Yes.  Next question; would you?  If you are worried that someone will put the word “hello” into a method called setSize() then you should be wondering about the basic cognitive abilities of the programmer, not the abilities of the language.  We’re not even talking about using something like Hungarian notation or anything like that.  We’re talking about simple logic.  Does “hello” make sense in that context?

OK, so that example was on the simplistic side.  What about when you are dealing with complex third party applications?  In all honesty, I don’t know how to quantify that.  If there’s a method called setPrice() do I put a description in there?  I suppose that if you are using a log of magic in your application that there could be a benefit, but the whole complaint is that static typing is safer than dynamic typing.  In that case

 

1
2
3
System.out.print(
    Integer.parseInt("Dubious data")
);

 

should be a nonexistant issue.  But it’s not, because invalid data was passed.  These kinds of games can go on and on but they miss the point becuase these are things that the language cannot check against.  If you intend to leave your application open with no validation either at the front of your application or in your API then you will have problems.  It doesn’t matter if it’s typed or dynamic.  What matters more than the type is the value, as we saw in the Integer.MAX_VALUE + 1 example.  So even when writing or writing to a third party API you still need to validate data.  As such, the gain of typing is not as significant as is sometimes claimed.

I’ve talked so far about objections to dynamic typing.  What about the pros?  This is a short argument because there is one big reason why dynamic typing is good, and it is quick to explain.

I think the biggest pro of working with a dynamically typed language as that you go from working with data/types to working simply with data.  In other words, do you really care about whether or not 1 is a string “1″ or an integer 1?  No.  You care that it’s a 1 up until you are doing math.  Then at that point the interpreter works on that data as if it were a number.  When you print that number in a browser do you care if it’s a numerical 1 or a string “1″.  No.  You care that the user sees the number 1 on their screen.  In that case it’s a string.  Data; that is what applications are about.  Data.  Applications are not about data types.  Data typing for scalar data can help to mitigate some issues but it is by no means fool-proof.  In fact, a lot of security issues are due to some very smart “foolish” people messing with input.  Data types do not protect you against anything.  In Java, you get bad data, in C you get a buffer overflow.

Data.  That is what we are working with.  My purpose in writing this is not to say that dynamic typing is better than static typing, or anything like that.  Types are ways of describing data, but they do not protect you against anything.  Statically typed languages will protect you in some cases, but leave you wide open in others.

So why is dynamic typing sometimes listed as an objection.  I believe that’s exactly what it is; an objection.  Objections are simply reasons that people find to not use your stuff and are usually done to put you on the defensive.  It’s standard fare for if you’re selling kitty litter or a programming language. A lot of people hate PHP, for reasons I have described before.  My interpretation is that dynamic typing is raised as an issue mostly because people see attacks on their preferred language as an attack on themselves.  Honestly, I can think of no other reason why people get so engaged in tech-wars the way they do.

Last Facebook and Twitter book giveaway

OK, this is it.  The LAST giveaway for "You want to do WHAT with PHP?"  The giveaway will occur at the end of the day on Tuesday!  This will also be the second last giveaway for the User Group library.  The rules still apply; if you win I will ask you to cover shipping costs.  See one of my previous posts on what that looks like.

So, to win

  1. Tweet this posting.  The tweet MUST contain the bit.ly link for this page.  I will make the drawing based off of who bit.ly says has tweeted it
     
  2. Become a fan of my Facebook page and Like this posting.  The Like will be how you will be entered.  But remember, the winner will be asked to cover shipping costs.
     
  3. Be the user group leader for your local PHP user group.  Enter by emailing me at [email protected]  You will need to match the Zend User Group List.

Book Description:
PHP is the hottest thing in Web development today, with over 30 million Web sites currently using the technology. Programmers are scrambling to get as much information as they can to stretch their use of PHP to the limits, and this book will help you do just that. In it you will find practical, but atypical, examples of PHP coding.

Author Kevin Schroeder is co-author of The IBM i Programmer's Guide to PHP and the Technology Evangelist for Zend Technologies—The PHP Company—with an in-depth knowledge of the language and an innovative approach to development. He shows PHP solutions and examples you won’t find in other books: binary protocols, character encoding, asynchronous operations, structured file access, daemons, and much more.

There are quite literally hundreds of books of the “build a Web site in PHP” genre, but this is not your typical how-to “PHP 101” book. No, this book is for the creative and the curious. It is a “what’s possible” book. Creative PHP types who have already purchased a book on PHP and want to go beyond the basics into what is possible, not just practical, will find it especially useful. Curious PHP types who have written a fair amount of PHP code but are now ready to go deeper, into the lower-level aspects of PHP, will also be inspired by what this book has to offer.

You Want to Do What with PHP? is like a PHP cookbook. It contains not just theories, but also considerations and varying options on top of simply providing code. With it, you will discover new approaches to problem-solving using PHP, expand your development skill set, and gain valuable assistance toward building ever more advanced PHP applications.

With You Want to Do WHAT with PHP? you will:

    * Become a better PHP programmer
    * Discover unusual, but practical, solutions to problems you will likely face on a weekly, if not daily, basis
    * Learn lower-level programming that is not typical for Web-based applications
    * Discern why operating system level options matter when devising solutions

Contents:
   Chapter 1: Networking and Sockets
   Chapter 2: Binary Protocols
   Chapter 3: Character Encoding
   Chapter 4: Streams
   Chapter 5: SPL
   Chapter 6: Asynchronous Operations with Some Encryption Thrown In
   Chapter 7: Structured File Access
   Chapter 8: Daemons
   Chapter 9: Debugging, Profiling, and Good Development
   Chapter 10: Preparing for Success

Building better PHP programmers, part 2

I have no "findings", no "conclusions", but I have some thoughts on my continuing goal to help bad/nominal PHP programmers become better PHP programmers.

The first question I asked is "Is there really a shortage of good PHP developers?"  While I didn't get a specific answer the general jist of it is that yes, there is a problem with finding good PHP developers.  Now, some of that may that the people responding ARE the above-average PHP developers and so there can often frustrations in figuring out how to work with developers who don't yet have the chops that they do.

A lot of people also didn't like my "what are 6 of the 10 PHP variable types" question.  I make no apologies for it.  Any developer who has spent any amount of time programming in PHP will have had exposure to them.  ANY PHP developer should be able to get at least 4.  If you've never realized that there's a reason to use === then, no, I wouldn't hire you.  For someone who is thinking through what their code looks like I would think you could figure out at least two more.  And if someone calls me on the error and gives me the correct number of variable types, then I can be reasonably certain that they know their stuff.  But, like most things, it's A qualifier, not THE qualifier.  If they send me a case of Chimay Bleue I might overlook it.

I also had other discussions from people who don't think that programmer's should have to have a certain level of memorization because you can always look it up.  Sorry, but I have to disagree with those people.  If you cannot tell me, offhand, what a callback function looks like then you probably don't have enough experience.  If you can't tell me what PDO is used for then you probably don't have enough experience.  For various levels of developer maturity there MUST be some things that you are required to know offhand.

One of the things I've also found a little interesting is that there is some resistence to standards.  The argument goes; developers get better by different means and so having something set in stone to evaluate them is difficult, nigh impossible, to do.  Perhaps, but I go back to other industries.  They have been doing it for years.  Yes, it WILL be imperfect.  No doubt.  Also, nobody will meet them perfectly.  But if managers, recruiters and new programmers don't know what is required how can they ever become better other than by trial and error?  The goal here is to decrease the "error".  Or maybe people are just argumentative.  I dunno.

That said, there were a few suggestions that were good which I will take into consideration.  I have a little too much to do this short week for me to really get into it.  So, this, I guess, is a blog post without a purpose.

This week’s book giveaway

This Friday I will be giving away the second (technically 4th and 5th) copies of my book "You want to do WHAT with PHP?"  The rules still apply; if you win I will ask you to cover shipping costs.  See one of my previous posts on what that looks like.

So, to win

  1. Tweet this posting.  I will change it up a little and say that it needs to contain the bit.ly link for this page.  I will make the drawing based off of who bit.ly says has tweeted it.  The ywtdwwphp hashtag was a little wierd.
     
  2. Become a fan of my Facebook page and Like this posting.  The Like will be how you will be entered.  But remember, the winner will be asked to cover shipping costs.

Book Description:
PHP is the hottest thing in Web development today, with over 30 million Web sites currently using the technology. Programmers are scrambling to get as much information as they can to stretch their use of PHP to the limits, and this book will help you do just that. In it you will find practical, but atypical, examples of PHP coding.

Author Kevin Schroeder is co-author of The IBM i Programmer's Guide to PHP and a Technology Evangelist for Zend Technologies—The PHP Company—with an in-depth knowledge of the language and an innovative approach to development. He shows PHP solutions and examples you won’t find in other books: binary protocols, character encoding, asynchronous operations, structured file access, daemons, and much more.

There are quite literally hundreds of books of the “build a Web site in PHP” genre, but this is not your typical how-to “PHP 101” book. No, this book is for the creative and the curious. It is a “what’s possible” book. Creative PHP types who have already purchased a book on PHP and want to go beyond the basics into what is possible, not just practical, will find it especially useful. Curious PHP types who have written a fair amount of PHP code but are now ready to go deeper, into the lower-level aspects of PHP, will also be inspired by what this book has to offer.

You Want to Do What with PHP? is like a PHP cookbook. It contains not just theories, but also considerations and varying options on top of simply providing code. With it, you will discover new approaches to problem-solving using PHP, expand your development skill set, and gain valuable assistance toward building ever more advanced PHP applications.

With You Want to Do WHAT with PHP? you will:

    * Become a better PHP programmer
    * Discover unusual, but practical, solutions to problems you will likely face on a weekly, if not daily, basis
    * Learn lower-level programming that is not typical for Web-based applications
    * Discern why operating system level options matter when devising solutions

Contents:
   Chapter 1: Networking and Sockets
   Chapter 2: Binary Protocols
   Chapter 3: Character Encoding
   Chapter 4: Streams
   Chapter 5: SPL
   Chapter 6: Asynchronous Operations with Some Encryption Thrown In
   Chapter 7: Structured File Access
   Chapter 8: Daemons
   Chapter 9: Debugging, Profiling, and Good Development
   Chapter 10: Preparing for Success

Getting good PHP programmers

One of the interesting conversations I had during Zendcon was while talking to a recruiter.  She asked what questions she could ask to help guage how strong a PHP developer is.  The best one I could come up with was "name 6 of the 10 variable types in PHP".  I've had the pleasure of being able to interview several people for working at Zend and that is usually one of the first questions I ask and I can usually get a good feel for how long the conversation will be after that.  It's an esoteric question but by asking it I can guage a) how well that person knows PHP, and b) how easy it will be for me to work with them.  If they know the answer (and correct it) they know their PHP.  If they don't know the answer but get flustered or angered by it, then they will probably be harder to work with.

But the truth is that most of the people I've interviewed, and who have eventually worked with me, I've recommended after simply talking with them without a script.  I've interviewed a bunch of people for Zend Services and I think that the best interviews were the ones where we just talked tech.  The times when I was going off of a script was usually when I got the feeling that they wouldn't be a good fit.  Especially if they had attitude issues.  They would be going out in front of customers and if I thought they would have attitude problems I would start pounding them with questions that they probably didn't know and see what their responses would be.  They could answer correct or incorrect but what I was looking for was their reaction.  More often than not it was quite easy to pick out the people that I would not put in front of customers.  In fact, I would take someone who got more questions wrong, but could keep from getting frustrated over someone who would get them right but act incredulous.  I was interviewing one person one time who would be working as my counterpart in Services who got kind of upset with me and said "I don't need to know those things to do this job."  That conversation didn't last much longer than that.  Not because he didn't know, but because he lost his cool.

But, I'm getting a little off-topic, mostly because I like reminicing over some of the more colorful interviews.  That is what brings me to the point of this blog posting.  I can interview for certain (but by no means all) PHP positions because I know a fair about PHP and I believe that being smart but being an asshole does not make you a good PHPer.  But not everyone who interviews knows that.  And not only that, it is getting difficult to find good PHP developers.  A lot of the good ones are being taken up by top companies, but even they are having trouble finding all the good developers they need.

The point

Because of that, I would like to see if we couldn't (pseudo) standardize on deciding what makes a good PHP developer.  In other words, if someone asks "what does a good PHP developer look like" we could give a concise answer.  Jim Plush actually blogged about this a few years ago and I think that what he said there was quite accurate.

But it doesn't end there.  Knowing what makes a good PHP developer is not enough.  In order for PHP to succeed we need to raise the competance of all professional PHP developers.  And when I say "make PHP succeed" I'm not talking about the simple number of domain names where PHP is run on.  What I mean is increasing the quality of PHP developers to the point where companies who run PHP-based applications are able to fulfill their need for good PHP developers.  What I also want to do is get a feeling not only for what good PHP developers look like but also what they can do, specifically, to increase their value.  Being a ZCE is one example, but the ZCE exam can only do/tell so much.

For example, if someone should know XHTML, WHAT should they know, WHERE can they learn it properly and HOW will they know when they know enough.  We're real good at saying what, in general, developers should know (e.g. Unit Testing), but we're not so good at being specific.

For the record, I have my idea of what should be done, but I'm one person with one point of view.  What is your point of view?

Specifically (since we're being specific)

  1. Is there really a shortage of good PHP developers?
  2. Is there an interest in some level of semi-official developer standards beyond being a ZCE/ZFCE?
  3. What are the significant topic areas that PHP developers should be reasonably expected to know well?
  4. Should these questions be broken down by discipline?  (e.g. backend developers, web page designers, performance gurus)

If you have answers/thoughts concerning these questions you can either post them in the comments or email me at kevin at zend . com.

@DragonBe is awesome

After I posted my slides for use by user groups Michelango van Dam of PHPBenelux posted on the Zend Facebook page that people could use his too.  They are CC-licensed so you are free to use them as well.  So I asked if he could provide the PPT versions so I could post the full deal for people and he agreed.  So here are three presentations that Michelangelo did that you can use for your user group as well.

Why Zend Framework powers the enterprise – In this preso, Mike talks about (surprise) why it is that Zend Framework has become so popular in the enterprise.

Unit Testing after Zend Framework 1.8 – This was an interesting presentation in that it talks about how to unit test Zend_Application-based applications.

Improving QA on php projects – Another interesting one on testing, though it gets much deeper into unit testing in general.

Read first, then tweet, for a free book

A few weeks ago I blogged that I was going to give away 9 copies of my book, You want to do WHAT with PHP?  Well, today is the day to start.  There are a few ways you can win.

  1. Tweet this page.  You can use the kudos link on the top right of the page, retweet it, or tweet it on your own, but it MUST be under the hashtag of #ywtdwwphp.  If you use the kudos link, that tag will be automatically added to your tweet. That is how I am tracking who to put into the random drawing.  I will be making my drawing around 12:00 noon, central time, on Friday, November 12th.  That's tomorrow.
     
  2. Join my Facebook page for the book.  Around the same time I do the drawing from Twitter I will be choosing a random person from all of the people who like my Facebook page.
     
  3. If you are part of a user group AND the user group has a member library, have the user group maintainer email me.  The information that I receive MUST match the Zend local user group information.  I will make that drawing on Wednesday of next week

I will do this three times over the next three weeks since the publisher gave me 9 copies to give away.

One last thing, you are getting the book for free but you will need to still pay shipping costs if you win.  USPS estimates about $13 to ship almost everywhere.  Cheaper in the U.S.  But, I will use any shipping method that you like.  For example, if you wanted something with a tracking number.  So, before you retweet make sure that you a) know what it will cost to ship to your address, and b) are willing to do that.  I will accept PayPal to cover the shipping costs.  If you win, but don't want to cover shipping costs I will politely thank you for entering, and run the random person selector again.

If you want to increase your odds of winning both RT this page and join my Facebook page.

If you want to, or need to, contact me, email me at [email protected].

Good luck!!

Post Navigation