It has been a while since I last posted to Brown PHP. My life has been going through a large transition recently. I just landed a new job (more on that later), and moved because my wife also accepted a new position in a different location. If that were enough of a stressful environment, I have been re-factoring the Informative Post over the last month trying to get it ready before I begin my new job.
Enough about my own struggles, lets focus on the topic at hand. Michael Kimsal’s new book, PHP Job Hunter’s Handbook. I pre-ordered this book a few months ago, and read the PDF version all the way through before I received my hard copy. Not a big deal, but makes me regret ordering both. I guess I can just add it to my collection of PHP temples of knowledge! In this post, I, Douglas Brown, will be reviewing the PHP Job Hunter’s Handbook and giving a fairly detailed review of my own experiences.
First, let me begin by talking about the author, Michael Kimsal. I am a subscriber and active listener to his podcast at WebDevRadio.com, from which he discusses current events in the web community, and not just PHP. He is a well respected PHP contributer with a wide array of knowledge with many different languages. I find him always willing to help another PHP member in need , and he recently started his own PHP job listings board to also help the PHP community.
What the book covers:
- Finding a Full Time Job
- Training and Certification
- Contracting and Freelancing
- Applicable Technologies You Should Know
- Interviewing Tips and Tricks
- Advice from Those Doing the Hiring
- Advice from Fellow PHP Developers
It wouldn’t be extreme to go as far as saying that the book covers too much territory, but for it only being 106 pages, it’s a fair conclusion. He mentions that this book is not meant for advanced PHP programmers who have been around the block a time or two, but more targeted towards beginners, to help them get started. The book fits the bill for that purpose.
Does it contain any useful information?
It doesn’t give to much information that could overwhelm a “noobie” PHP programmer, but it does give just enough to help them get started. I for example, have never had a professional PHP programming position. I do this for my hobby. What I do professionally is C and C++ programming. So you can understand why I love PHP so much. I did get quite a few nuggets of information from the PHP Job Hunter’s Handbook. I got a few PHP job listing sites that I have never heard of to add to my bookmarks. Also what types of information that the HRs look for when going through PHP cover letters and resumes.
So like I said above, I was able to absorb a lot of information from this book that I had no knowledge of previously. However, there is also a lot of knowledge in here that can be picked off the web faster than opening a book. It’s nice that it has been grouped together for a quick reference if needed.
What is missing?
The only two things that I would have liked to see in this book would be a whole encyclopedia of example PHP cover letters and resumes. Don’t get me wrong, with all the information that he provides in the book, you can easily make these out for yourself. This is a Job Hunting Handbook however, and I found it lacking that it didn’t contain any of these in the appendix or somewhere. If added in the next Rev, 2 or 3 of each would improve the book to give new PHP programmers something to go off of when they are compiling their own.
Would I recommend this book?
If you are new to PHP and don’t know where to find all the great places to find jobs, and information, absolutely. If you are not new with PHP and you already know where to look for PHP jobs, and what employers are looking for when in search of an experienced PHP programmer, probably not. Like I mention before though, Mr. Kimsal did not write this book for that audience.
Did it help my job search?
It did and it didn’t. :) I did find a new job, but not in a PHP position. I also never really had that much time to do all the different techniques that Michael Kimsal recommended to help the search. The new job I did find was a Software Engineering position working with C and C++, which are my bread and butter. I’m sure that I learned something from this book that helped me land this new job though.
I hope you got a better understanding about what to expect if you yourself are looking into a PHP career and would like a little help finding that first job. Maybe sometime in the future, I’ll be approached by a company offering a PHP postion that is too good to pass up, but until then, it’s still my hobby! If you have any questions, please feel free to leave comments. Take care!
The past few months I have been using Twitter a lot. I’m trying to find and follow people that are heavily involved with PHP or at least providing knowledgeable Tweets about PHP. I guess you could say that I am always open to new networking opportunities within the PHP community.
If you don’t know what Twitter is, well then you aren’t keeping up with your current events very well. I’m not going to use this post explaining what it is more than a mini-blogging service. If you don’t know, check their site out. I provided a link above.
The problem I was having was actually judging whether or not it would be worth my time following their tweets. I mean, I follow someone that is really respected in a certain field, only to find out that they tweet about their new puppy they just got more than anything. So I made a PHP script that generates a “Twitter Tag Cloud.” Using this, you can generate your own Twitter tag cloud to put on your personal site to display the top keywords that you have been tweeting about.
I also provide a REST service so that you don’t have to upload or play with any code yourself other than accessing the BrownPHP Twitter Tag Cloud service. I’ll show you more about that later. Or you can just use the textbox I have here to check out your own Twitter Cloud or a friends.
This is helpful to judge what the person tweets about the most. The more the Twitter-er Tweets about a certain keyword, the larger it appears. Like if you would look at mine. One of the large keywords is “informative.” I also run a site called, Informative Post, and I tweet about it often, so it makes sense that this would be the largest keyword.
View Your Twitter Tag Cloud Now
Try it yourself! Type in a twitter username to see what that twitter-er tweets about more often:
Pretty cool, huh? At the bottom of this, I provide a link where you can download the PHP files from. I am also providing this as a REST service.
REST Twitter Tag Cloud Service
Parameters:
- user (required)
- Twitter Username
- history (optional)
- Number of past status updates to look for
- Defaults to 100
- Max is 200
- size (optional)
- Number of Keywords to return
- Defaults to 50
- Max is 75
Example REST call to get my (dlbrown06) Twitter tag cloud:
http://www.brownphp.com/rest/twittertagcloud.php?user=dlbrown06
Response:
<div id="twitterTagCloud"><a class="size2 tag" title="dlbrown06's Tweets Covering money" rel="nofollow" href="http://search.twitter.com/search?q=+money+from%3Adlbrown06" target="_blank">money</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering taking" rel="nofollow" href="http://search.twitter.com/search?q=+taking+from%3Adlbrown06" target="_blank">taking</a>
<a class="size1 tag" title="dlbrown06's Tweets Covering networking" rel="nofollow" href="http://search.twitter.com/search?q=+networking+from%3Adlbrown06" target="_blank">networking</a>
<a class="size1 tag" title="dlbrown06's Tweets Covering social" rel="nofollow" href="http://search.twitter.com/search?q=+social+from%3Adlbrown06" target="_blank">social</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering would" rel="nofollow" href="http://search.twitter.com/search?q=+would+from%3Adlbrown06" target="_blank">would</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering children" rel="nofollow" href="http://search.twitter.com/search?q=+children+from%3Adlbrown06" target="_blank">children</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering account" rel="nofollow" href="http://search.twitter.com/search?q=+account+from%3Adlbrown06" target="_blank">account</a>
<a class="size4 tag" title="dlbrown06's Tweets Covering working" rel="nofollow" href="http://search.twitter.com/search?q=+working+from%3Adlbrown06" target="_blank">working</a>
<a class="size3 tag" title="dlbrown06's Tweets Covering article" rel="nofollow" href="http://search.twitter.com/search?q=+article+from%3Adlbrown06" target="_blank">article</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering start" rel="nofollow" href="http://search.twitter.com/search?q=+start+from%3Adlbrown06" target="_blank">start</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering currently" rel="nofollow" href="http://search.twitter.com/search?q=+currently+from%3Adlbrown06" target="_blank">currently</a>
<a class="size1 tag" title="dlbrown06's Tweets Covering making" rel="nofollow" href="http://search.twitter.com/search?q=+making+from%3Adlbrown06" target="_blank">making</a>
<a class="size4 tag" title="dlbrown06's Tweets Covering online" rel="nofollow" href="http://search.twitter.com/search?q=+online+from%3Adlbrown06" target="_blank">online</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering twitter" rel="nofollow" href="http://search.twitter.com/search?q=+twitter+from%3Adlbrown06" target="_blank">twitter</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering morning" rel="nofollow" href="http://search.twitter.com/search?q=+morning+from%3Adlbrown06" target="_blank">morning</a>
<a class="size1 tag" title="dlbrown06's Tweets Covering sites" rel="nofollow" href="http://search.twitter.com/search?q=+sites+from%3Adlbrown06" target="_blank">sites</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering right" rel="nofollow" href="http://search.twitter.com/search?q=+right+from%3Adlbrown06" target="_blank">right</a>
<a class="size5 tag" title="dlbrown06's Tweets Covering informative" rel="nofollow" href="http://search.twitter.com/search?q=+informative+from%3Adlbrown06" target="_blank">informative</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering hosting" rel="nofollow" href="http://search.twitter.com/search?q=+hosting+from%3Adlbrown06" target="_blank">hosting</a>
<a class="size1 tag" title="dlbrown06's Tweets Covering until" rel="nofollow" href="http://search.twitter.com/search?q=+until+from%3Adlbrown06" target="_blank">until</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering people" rel="nofollow" href="http://search.twitter.com/search?q=+people+from%3Adlbrown06" target="_blank">people</a>
<a class="size1 tag" title="dlbrown06's Tweets Covering looking" rel="nofollow" href="http://search.twitter.com/search?q=+looking+from%3Adlbrown06" target="_blank">looking</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering starting" rel="nofollow" href="http://search.twitter.com/search?q=+starting+from%3Adlbrown06" target="_blank">starting</a>
<a class="size2 tag" title="dlbrown06's Tweets Covering really" rel="nofollow" href="http://search.twitter.com/search?q=+really+from%3Adlbrown06" target="_blank">really</a>
<a class="size3 tag" title="dlbrown06's Tweets Covering diablo" rel="nofollow" href="http://search.twitter.com/search?q=+diablo+from%3Adlbrown06" target="_blank">diablo</a></div>
Then you can use CSS to format the cloud however you like!
Download the Twitter Tag Cloud Source Code:
If you would like to use this source code yourself, you are free to do so. All I ask is that you provide a link to this site, or somehow recognize the work that I put into it somehow. I would love to see what kind of mashups that the PHP community could do with this source code. Enjoy!
If there are any problems with the source code, please let me know here. Then I’ll update code for future downloads.
- New Post: All About Social Networking Sites: Social Networking sites have great potential for .. http://tinyurl.com/5lk49f twitter.com’);”>#
- New Post: How to Make Money Online for a Better Lifestyle: Is making money online possible? Ca.. http://tinyurl.com/6nw8fm #
- New Post: Children and Games: This article is about the effects of children playing video game.. http://tinyurl.com/6dc3ua #
- New Post: Diablo 3 Announced! Expect it to put Diablo 2 to shame!: Diablo 3 has been announced.. http://tinyurl.com/6emt7s #
- New Post: Fraternity: To all the victims of hazing in joining fraternities. I wrote this artic.. http://tinyurl.com/642omg #
- PHP Update: CNET’s 404 Podcast Twitter Tag Cloud: : SimpleXMLElement::__construct() [].. http://tinyurl.com/6kdjks #
- New Post: Why I Love my IPhone: The iPhone, an innovation. It can achieve what was once though.. http://tinyurl.com/6pqtb9 twitter.com’);”>#
Let me tell you a little story. My latest site I have been working on for some time was written using the Zend Framework. Since it was launched in Oct 07, it has been growing rapidly enough where I am now starting to feel growing pains.
One morning I went into the site to check some analytics, and my site was displaying a 403 Forbidden error! I suddenly got a cold nervous sweat down the back of my spine. Why was it forbidden? It was fine when I checked it out last night?! So I tried to login to my FTP account. No go! I I thought a hacker has some how blocked me out of my own account. [Exit dramatic build up].
I come to find out that my hosting company revoked my access to the folder that I was using for the domain. I called them up immediately after I noticed that. They responded by telling me that on a shared server, they limit their clients to use only 2% of the servers resources before they shut them down. My site was using 30%. They were then forced to shut the site down without notice, because it was most likely affecting the performance of the other sites running from that shared server.
After some negotiating and explaining to them that I was going to come up with a solution, they temporarily gave me back access to the folder so that I could diagnose further what was going on. The first thing that I did was looked through the server logs. Because of my unfortunate neglect, the server log file was freaking enormous bigger than normal.
Nearly all of the errors I was getting were:
[03-Jul-2008 09:41:19] PHP Fatal error: Uncaught exception ‘Zend_Db_Adapter_Exception’ with message ‘SQLSTATE[42000] [1203] User blank already has more than ‘max_user_connections’ active connections’ in blah blah blah
I’ll admit, I was in a huge hurry to get this project done, so I wasn’t thinking about the long tern effects. Needless to say, I wasn’t caching my MySQL query results. I know, tisk tisk. Once I discovered this, I added this private method to my classes:
private function loadCache()
{
$frontendOptions = array(
'lifetime' => 7200, // cache lifetime of 2 hours
'automatic_serialization' =>
true);
$backendOptions = array(
'cache_dir' => './cache/' // Directory where to put the cache files
); // getting a Zend_Cache_Core object
return Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
}
Then in each of my classes where I needed to cache my query results, I implemented the above method. Here is an example:
class IndexController extends Zend_Controller_Action {
/**
* Index Action
*
*/
public function indexAction() {
$db = new SomeDB;
$cache = $this->loadCache();
if (!$results = $cache->load('cache_variable')) {
$results = $db->fetchAll('columnName="whatIWant"');
$cache->save($results, 'cache_variable');
}
}
}
It’s pretty much as simple as that. Once I did this, it dropped the server load tremendously, which now buys me more time from upgrading my hosting package. About 10 minutes of coding just saved me about $50 a month in hosting fees! That feels good.
Keep in mind that this is not the best approach to solving this problem. If you too are using the Zend Framework in your own design. It was be better to initialize the Zend_Cache in your bootstrap file. Doing it the way I did above will force you to replicate the code method, loadCache, in all of your classes which I dont’ have to explain to you why this is inefficient, and just plain old bad OOP technique!
This is officially the first post of many to come. I have never really had the chance to start a Wordpress blog before. Well, maybe mentioning that I never really had the time to work on one would be better. I always enjoyed building a site from the ground up. Starting to think about how I will design the file structure, and what design pattern to choose from always get me excited. I don’t think I need to mention the gratification you get from launching a site that you have been working on for months to the public eye.
So I am admittedly late to the Wordpress blog show, but I am doing this to contribute everything that I have learned along the way about PHP and other web technologies to the PHP community. My motivation behind continued work on this site comes from all the developers out there that have offered advice or have troubleshooted my PHP design mistakes in the past. I hope that I can use this site as a conduit to other PHP developers to share ideas that we can all learn and grow from.
I am currently in a living situation that cuts me out of the loop from the Web 2.0 world. I live in Indiana/Ohio and believe it or not, the only way I can hear about or learn more about PHP is from blogs, and php.net. I’m sure I am not the only person in this situation. Some day, I do plan on moving the West Coast or New York, where I can be around more like-minded people.
I just wanted to use this first post on Brown PHP to welcome you and hope you stick around to contribute and learn more about the great things that PHP can do to make the world a better place!
Categories
Tag Cloud
404 podcast 404 tag cloud 404 twitter tag cloud brown php buying content cache caching cakephp cnet 404 cnet 404 podcast content needed content needs doug brown douglas brown election find php developer IMDb Informative Post informative post blog job hunter handbook job post loadcache mccain michael kimsal need for content november content needs obama php development blog php job handbook php jobs PHP Links php positions php tutorial president purchase content streaming media twitter twitter tag cloud write articles zend zend cache Zend Framework zend framework tutorial zend_cache zend_mail-
Meta
PHP Links
-
Recent Posts
- Difference between ASP and PHP
- January 2009 Hot Topics
- Quick Methods Used for Solving PHP Errors
- Three Important Tips to Write PHP Code Defensively
- Popular PHP Frameworks: What’s Your Fav?
- Do You Really Need a Framework for Writing PHP?
- Zend Framework vs CakePHP Framework
- Now Market Your Articles w/ Twitter
- December 2008 Content Needs
- Help Informative Post Start a Forum
-
Recent Comments
- aditia on Popular PHP Frameworks: What’s Your Fav?
- topper on January 2009 Hot Topics
- Douglas Brown on January 2009 Hot Topics
- topper on January 2009 Hot Topics
- mario on Three Important Tips to Write PHP Code Defensively
- Douglas Brown’s Blog: Quick Methods Used for Solving PHP Errors : Dragonfly Networks on Quick Methods Used for Solving PHP Errors
- Douglas Brown’s Blog: Quick Methods Used for Solving PHP Errors : WebNetiques on Quick Methods Used for Solving PHP Errors
- 3 suggerimenti per lo sviluppo difensivo : phpblog.it on Three Important Tips to Write PHP Code Defensively
- CakePHP Digest Volume #4 :: PseudoCoder.com on Popular PHP Frameworks: What’s Your Fav?
- vivanno.com::aggregator » Archive » Code défensif on Three Important Tips to Write PHP Code Defensively
TwitterCounter
LinkedIn
View My LinkedIn Profile:
-
Fav Me @ Technorati
Twitter Feed
"Sitting in a redneck bar in Lake Park, GA with my brother, sister, and cousins."
ramsey
--- Sat 20 Dec 2008 18:56 ---"The password is "advent" and is protected for editing reasons. I appreciate comments/corrections http://tinyurl.com/4op2ua"
tychay
--- Fri 19 Dec 2008 17:22 ---


