Category Archivephp



How-To & php 27 Nov 2009 08:25 pm

WP Geo Plugin

The print_GeoCache_Url function came across my email today from a self-described local designer and geek, but after a little research, I found out it only works up to WordPress 1.2 . Thank goodness for the WordPress WP-Geo Plug-in which I’m using right now.

More info here: WPGeo.com

Questions & TechBiz & WebApps & php & ruby 09 Apr 2009 05:11 pm

My Favorite Coder Interview Question

What is your favorite algorithm?

My favorite algorithm right now is the merge sort.

v1: Nuno Nogueira (Nmnogueira), v2: edited by Daniel Miller (cobaltBlue)

v1: Nuno Nogueira (Nmnogueira), v2: edited by Daniel Miller (cobaltBlue)

I like it so much that I’ve implemented it in PHP and Ruby.

The problem is that as a web developer I’ve never had to use a merge sort. Back in the old days when pagination was tricky, I’ve had to use a linked list, but you really don’t have to use the merge sort anymore.

So at this point it’s really just academic.

What interview question should really count now?

More on that in my next post. As a clue, I’d like to say it has to do with Leibniz’s statement, “The present is big with the future.” A techie who believes that and the principle of sufficient reason is the kind of techie you want.

Announcements & WebApps & php 22 Dec 2008 12:21 am

Another Hackday Update: PHP unserialize doesn’t quite do it

Wow, I had to use someone’s custom unserialize code because PHP’s unserialize doesn’t quite work multi-byte strings. :-( Time wasted: 3 hours.

Here’s the function:

function mb_unserialize($serial_str) {
$out = preg_replace(‘!s:(\d+):”(.*?)”;!se’, ‘”s:”.strlen(“$2″).”:\”$2\”;”‘, $serial_str);
return unserialize($out);
}

Announcements & WebApps & php 21 Dec 2008 06:06 pm

Update on the WordPress Dev2Live Hackday

I know the bare minimum of what has to change in a WordPress install. Code that gets me the tables, and shows me the serializeable data in WordPress’ option settings is done.

Announcements & WebApps & php 21 Dec 2008 09:13 am

A WordPress Hackday

Today, I’m going to explore looking for a solution for staging WordPress from a development environment to a production one. I’ll be posting throughout the day as “hacks” become available.

The main issue is changing serialized dev data into production data.

I’ll be in irc.freenode.net #wpdev2live .

TechBiz & php 17 Dec 2008 02:08 pm

Looking For a New Web 2.0 Job? Try Shifting Your Perspective.

I spoke to a friend on Tuesday who recently received a promotion with a company he’d been employed with for just about a year out in Ohio. And the day before, on Monday, I learned that two friends had been laid off from the jobs they loved here in the Bay Area. When the Tuesday friend said he didn’t know how to feel about his promotion, I advised him to be grateful.

The Tuesday evening news informed me that if trends don’t change, California is going to run out of money for people on unemployment within a year, and will then have to borrow money from the federal government, as my home state Michigan and its neighbor Indiana are already doing. California’s unemployment rate now sits at an average of 8.2%. Layoffs are occurring left and right, and those in the tech industry can be tracked at both the TechCrunch Layoff Tracker and at CNET’s Tech layoffs: The scorecard. As was noted in October at sCommerce, “[w]hen it rains, it pours in the Tech World,” and already December has certainly seen its own fair share of downpour.

One recent victim I talked to kept shaking his head and insisting that it just didn’t make sense. But unfortunately, much as I sympathize and wish circumstances were otherwise, it does make sense. Businesses are doing the same thing the rest of us are doing, tightening their belts and hoping to survive the winter. Most people I spoke with didn’t seem to know where to begin once they’d lost their jobs.

However, while many industries are (however temporarily) very decidedly on the decline, others are thriving, growing even, and it isn’t impossible for the tech savvy to migrate over. Education, for instance. With so many people out of work, many are looking to further their educations. The Labor Department reported 9,800 jobs were created in the education industry. Additionally, the director of the Center for Economic and Policy Research in Washington, DC, Dean Baker, is quoted on CNNMoney.com as saying, “Education will be an area that governments will try to protect because there’s a lot of political support.”

But you don’t have to be a teacher at an established institution to teach. (Though that certainly isn’t a bad way to go if you can manage it. I suggest checking your local city or community college’s website, or trolling through the local paper’s want ads. That’s how I found an opening for an English teacher at my former local community college.) Freelance tutoring is a perfect opportunity for some quick money and a new addition to your resume. Lots of people are turning to private tutors when they don’t have the time or discipline for a structured class schedule.

Another industry that will always remain strong is the health industry. CNNMoney.com reports that “[e]ven in the midst of the economic fallout, healthcare employment grew by 34,000 jobs in November,” and later went on to add that “[o]ptions…abound at pharmaceutical companies, biotech firms and medical-equipment companies.” The moderator of Your Health and Tech, William Welense, urges people “to look into healthcare information systems! Seriously, HCIT [Health Care Information Technology] really really really needs some web 2.0 people, especially on the visual design part of development.” And with innovations like Google Health (blogged about here at Your Health and Tech) coming out, this could be a really exciting field to get into!

If you are already in the Bay Area, and don’t know what health care management software companies are around, I suggest you first stop by the Yahoo! Directory for San Francisco Bay Area > Health Care Management Software for a handy list of companies with links to their websites. Don’t overlook the classified ads on Craigslist either. After typing “healthcare information systems” into the search field, nineteen results popped up for me on Tuesday, December 16.

And speaking of people wanting to further their education in these times of low employment, a master of science degree in Human Computer Interaction might be a handy thing to pick up, especially when looking at the field of healthcare information systems, and can be earned entirely online at certain universities, such as Chicago-based DePaul University.

If you’re looking online for jobs, why not stop by Stephan Miller’s quick list of 11 Places to Find Tech Jobs? If you are looking for freelance work, definitely check out Elance. They have everything from “web & programming” to “writing & translation.” Other sites in this vein are Project4Hire and GoFreelance.

Most importantly when looking for a new job, don’t forget to network. Ask your friends. If they don’t know somebody, maybe they know somebody who knows somebody. I myself have connections at both Google and LucasArts that will likely never do me a damn bit of good, but could come in handy for other friends who are in those fields. I’ve found that a lot of companies offer recruitment bonuses to their employees, so don’t feel bad asking. And as pointed out in my previous post, don’t overlook even little things like the local happy hour.

The only way to get through this economic downtime and get things moving again is to persevere. Don’t lose hope, and don’t give up. If you can’t find a new job in your usual field, branch out. There really are jobs out there, we just have to know where to look. Hopefully this has offered a few launching points. Best of luck! I’m rootin’ for ya.

How-To & php 17 Dec 2008 12:49 pm

Installing fcgi on IIS 6.0 with PHP 5.2.8

Choose fcgi iis

Choose IIS FastCGI

Be sure to install extensions needed for WordPress

Be sure to install extensions needed for WordPress

Select these extensions:
GD2
Gettext
Multi-Byte String
Mimetypec
MySQL
MySQLi
PDO/MySQL
SQLite (in case MySQL fails)
XML-RPC (WordPress needs this)

Be sure to install Pear and the PHP Manual, too.

Next step: Install FastCGI with the installer.

For more info check out this page

Also check out info how to install FastCGI on IIS 6.0.

Install eAccelerator.

My php.ini is below:

[PHP]
cgi.force_redirect=0
extension_dir=”C:\Program Files\PHP\ext”
[PHP_GD2]
extension=php_gd2.dll
[PHP_GETTEXT]
extension=php_gettext.dll
[PHP_MBSTRING]
extension=php_mbstring.dll
[PHP_MIME_MAGIC]
extension=php_mime_magic.dll
[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll
[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
[PHP_SQLITE]
extension=php_sqlite.dll
[PHP_XMLRPC]
extension=php_xmlrpc.dll

;eAccelerator
extension=”eAccelerator.dll”
eaccelerator.shm_size=”150″
eaccelerator.cache_dir=”C:\cache”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”"
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”3600″
eaccelerator.shm_prune_period=”1800″
eaccelerator.shm_only=”1″
eaccelerator.compress=”0″
eaccelerator.compress_level=”9″
eaccelerator.keys = “shm_only”
eaccelerator.sessions = “shm_only”
eaccelerator.content = “shm_only”

My fcgiext.ini in %WINDOWS%/system32/inetsrv is below:

[Types]
php=C:\PROGRA~1\PHP\php-cgi.exe

[C:\PROGRA~1\PHP\php-cgi.exe]
QueueLength=999
MaxInstances=20
InstanceMaxRequests=500
IdleTimeout=200
RequestTimeout=60

The performance you get on a 2GhZ processor with 1GiB of RAM is decent:

Transactions:                     662 hits
Availability:                 100.00 %
Elapsed time:                 123.15 secs
Data transferred:              21.96 MB
Response time:                  8.29 secs
Transaction rate:               5.38 trans/sec
Throughput:                     0.18 MB/sec
Concurrency:                   44.55
Successful transactions:         662
Failed transactions:               0
Longest transaction:           13.25
Shortest transaction:           4.23

5.38 transactions per second is 464832 hits per day.

php 03 Dec 2008 02:02 pm

File Upload Configuration with PHP and IIS

In php.ini it’s important that these two variables are set right:
upload_max_filesize = 2M
post_max_size = 8M

Very often people will up the upload_max_filesize to something like 20M without updating the post_max_size.

Then if you’re on IIS, there is one more gotcha.

There’s an upload setting in C:\WINNT\system32\inetsrv\MetaBase.xml — the default is 200KB. Up that to what you think is necessary for your web app.

How-To & WebApps & php 23 Sep 2008 02:07 pm

Symfony Has a Swift Plugin for Sending Gmail

It’s easy to send emails using your gmail account with the Swift Plugin.
Here’s some sample code below


$to          = 'somebody@example.com';

$htmlMessage = "OH HAI!";
$textMessage = "*OH HAI!*";

$connection = new Swift_Connection_SMTP(
  sfConfig::get('app_email_smtp_server'),
  sfConfig::get('app_email_smtp_port'),
  Swift_Connection_SMTP::ENC_SSL
);

$connection->setUsername(sfConfig::get('app_email_username')); # gmail email
$connection->setPassword(sfConfig::get('app_email_password')); # gmail password

$mailer = new Swift($connection);
$message = new Swift_Message("Your subject goes here. OH HAI!");

$message->attach(new Swift_Message_Part($htmlMessage, 'text/html'));
$message->attach(new Swift_Message_Part($textMessage, 'text/plain'));

// Send,
// try and catch
try {
  if (!$mailer->send($message, $to, sfConfig::get('app_email_username'))) {
    throw new Exception('mailer error');
  }
} catch (Exception $e) {
    sfContext::getInstance()->getLogger()->info(
      "Caught swift send error exception:\n" .
      $e->getMessage(). " ".
      $e->getFile() . ": Line ".
      $e->getLine() . "\n", $e->getTraceAsString(), "\n"
  );
}

$mailer->disconnect();

How-To & WebApps & php 22 Sep 2008 10:49 am

sfGuardPlugin: The Extra Documentation

Hey Folks,

The Symfony project has a section called sfGuardPlugin Extra Documentation.

It’s worth a read, especially the part about using the sfGuardUserProfile calls.

The docs haven’t been updated since March, so if something isn’t working, please refer to my previous blog post on installing the sfGuardPlugin.

I’d like to state that personally, there isn’t really the right way to do this. Sometimes you already have a table that has a username and password. You can skip using the sfGuardAuth password tables by doing the following:

  sf_guard_plugin:
    algorithm_callable: md5
    success_signin_url: @homepage
    profile_class: sfGuardUserProfile
    profile_field_name: account_id
    check_password_callable: [Account, checkPassword]

The important line here is check_password_callable, where you are telling symfony to use the Account table and to use your own checkPassword method.

Next Page »