Feed aggregator

The PHP.cc Blog: PHPUnit 4.0: Test Proxies

PHPDeveloper.org - Wed, 12/03/2014 - 17:13

On thePHP.cc blog today there's another post looking at an improvement in the latest release of the popular PHP unit testing tool, PHPUnit 4.0.0. In the post Sebastian Bergmann looks at test proxies.

One of the highlights of PHPUnit 4.0, which was released last week, is improved support for integration testing through so-called test proxies. [...] PHPUnit has had built-in support for stubs and mocks for quite some time. These stubs and mocks can be used in every context where an object of the original class is expected. As it should be, the code of the original class is not executed when a method is called on the stub or mock. [...] PHPUnit 4.0 introduces the concept of test proxies [...] to have an object that provides the same API for expectations as a mock object while at the same time proxying method calls to the original class.

He includes some code examples to help illustrate. He creates a "SimpleWorkflow" class and shows how to test the execution of its "doWork" function to return the correct kind of "Result".

Link: http://thephp.cc/viewpoints/blog/2014/03/phpunit-4-0-test-proxies

Voices of the ElePHPant: Interview #2 with Larry Garfield : Drupal 8 & Object Oriented Programming

PHPDeveloper.org - Wed, 12/03/2014 - 16:07

The Voices of the ElePHPant podcast has posted the second part of their interview with Larry Garfield (part one is here) talking about Drupal 8 and OOP.

Topics mentioned include the D8FTW blog post series, Refactor Chicago and the Chicago Advanced Drupal User Group.

You can listen to this latest episode either through the in-page player or by downloading the mp3 directly. You can also subscribe to their mailing list for this and more great shows.

Link: http://voicesoftheelephpant.com/2014/03/11/interview-2-with-larry-garfield-drupal-8-object-oriented-programming/

Why I Don't Recommend Scrypt

Planet-PHP - Wed, 12/03/2014 - 16:00
As many of you likely know, I have a "thing" for password storage. I don't know what it is about it, but it fascinates me. So I try to keep up as best as I can on the latest trends. In the past few years, we've seen the rise of a new algorithm called scrypt (it's 5 years old actually). It's gaining more and more adoption. But I don't recommend its use in production systems for password storage. Let me explain why:
Read more »
Categories: Open Source, PHP Community

The Security of Future PHP Versions - Lately in PHP podcast episode 45

Planet-PHP - Wed, 12/03/2014 - 13:52
By Manuel Lemos
As the plans for the upcoming PHP 5.6 and PHP 6 versions are being finalized, some of the proposals are about improving the security of these future PHP versions.

That has been one of the main topics discussed by Manuel Lemos and César Rodas on the episode 45 of the Lately in PHP podcast.

They also have talked about several other types of proposals and ideas for PHP 6, as well a tutorial on How to Use a Webcam to take Pictures in PHP Application.

Now listen to the podcast, or watch the hangout video or read the transcript text to learn more about these interesting PHP topics that were discussed.
Categories: Open Source, PHP Community

PHPUnit 4.0: Test Proxies

Planet-PHP - Wed, 12/03/2014 - 09:00
Categories: Open Source, PHP Community

Using Composer Without GitIgnoring Vendor/

Planet-PHP - Wed, 12/03/2014 - 00:25

Recent additions to the joind.in API have introduced some new dependencies so we decided we'd start using Composer to manage these - but we don't want to run composer unsupervised. I'm sure this will bring the rain of "just run composer install, it's probably mostly almost safe" criticism, but actually it's quite tricky to run Composer without excluding vendor/ from source control so I thought I'd share how we did it so that anyone who wants to do so can learn from my experience!

The Prescribed Method

Let's start with the usual method of using composer:

  1. Create composer.json to describe the dependencies
  2. Run composer update to find specific versions of those dependencies and write exact versions to composer.lock. Repeat this step if composer.json changes.
  3. Add the vendor directory to .gitignore, but add the composer.* files.
  4. Run composer install on all platforms (and do this again whenever composer.lock changes.

That's the basic composer pattern, and it works well. Most people should do it this way.

Checking Libraries into Git

There are a few reasons you might want to check your dependencies into source control yet still use composer, such as:

  • Either your users or your tools aren't ready to start using composer yet
  • Your live servers don't have internet access so dependencies need to be packaged with code
  • Running composer on live scares you because it's recently had some bad security press
  • You like composer for managing dependencies, or think it will become production-ready soon, but you're not running it on live yet - because you, your sysadmins or your IT director aren't ready

When I tried to just commit my vendor directory, some git submodule weirdness ensued, and in fact, the documentation does cover this:

Adding dependencies installed via git to a git repo will show them as submodules. This is problematic because they are not real submodules, and you will run into issues.

I did, indeed, run into issues.

The workaround (from the same docs) is to add a .gitignore line that removes all .git directories within your vendor directory. So add this line to the .gitignore file at the same level as composer.json and vendor/:

vendor/.git

Now when you install dependencies into composer (I found I had to git rm my entire vendor directory, commit, and then composer install again to clean up my earlier mistakes) you can safely add the vendor directory to the project and treat it as a library directory you had unzipped downloaded packages to. Apart from it's fabulous autoloader and easy-to-update format, that is :)

Lorna is an independent web development consultant, author and trainer, available for work (interesting projects only). This post was originally published at LornaJane

Categories: Open Source, PHP Community

Using Composer Without GitIgnoring Vendor/

Planet-PHP - Wed, 12/03/2014 - 00:25

Recent additions to the joind.in API have introduced some new dependencies so we decided we'd start using Composer to manage these - but we don't want to run composer unsupervised. I'm sure this will bring the rain of "just run composer install, it's probably mostly almost safe" criticism, but actually it's quite tricky to run Composer without excluding vendor/ from source control so I thought I'd share how we did it so that anyone who wants to do so can learn from my experience!

The Prescribed Method

Let's start with the usual method of using composer:

  1. Create composer.json to describe the dependencies
  2. Run composer update to find specific versions of those dependencies and write exact versions to composer.lock. Repeat this step if composer.json changes.
  3. Add the vendor directory to .gitignore, but add the composer.* files.
  4. Run composer install on all platforms (and do this again whenever composer.lock changes.

That's the basic composer pattern, and it works well. Most people should do it this way.

Checking Libraries into Git

There are a few reasons you might want to check your dependencies into source control yet still use composer, such as:

  • Either your users or your tools aren't ready to start using composer yet
  • Your live servers don't have internet access so dependencies need to be packaged with code
  • Running composer on live scares you because it's recently had some bad security press
  • You like composer for managing dependencies, or think it will become production-ready soon, but you're not running it on live yet - because you, your sysadmins or your IT director aren't ready

When I tried to just commit my vendor directory, some git submodule weirdness ensued, and in fact, the documentation does cover this:

Adding dependencies installed via git to a git repo will show them as submodules. This is problematic because they are not real submodules, and you will run into issues.

I did, indeed, run into issues.

The workaround (from the same docs) is to add a .gitignore line that removes all .git directories within your vendor directory. So add this line to the .gitignore file at the same level as composer.json and vendor/:

vendor/.git

Now when you install dependencies into composer (I found I had to git rm my entire vendor directory, commit, and then composer install again to clean up my earlier mistakes) you can safely add the vendor directory to the project and treat it as a library directory you had unzipped downloaded packages to. Apart from it's fabulous autoloader and easy-to-update format, that is :)

Lorna is an independent web development consultant, author and trainer, available for work (interesting projects only). This post was originally published at LornaJane

Categories: Open Source, PHP Community

How To Convert Include Files To Classes

Planet-PHP - Tue, 11/03/2014 - 21:35

When working with legacy applications, there are two major problems tied for first place in causing frustration, pain, and overtime: globals, and includes. I talk about how to remove globals in “It Was Like That When I Got Here”. But removing includes can be a much bigger challenge in many ways.

My new book, “Modernizing Legacy Applications in PHP”, has an entire chapter on how to convert includes to independently testable classes. The chapter describes how to do this in a way that does not break the existing legacy code.

As a gift to PHP developers suffering under legacy applications, I have made that chapter part of the sample text for the book. You can read it here.

Afterword

Are you overwhelmed by a legacy PHP application? Have you inherited a spaghetti mess of code? Does it use globals everywhere, so that a fix in one place causes a bug somewhere else? Does every feature addition feel like slogging through a swamp of includes?

It doesn’t have to be that way. “Modernizing Legacy Applications in PHP” gives you step-by-step instructions on how to get your legacy code under control by eliminating globals and separating concerns. Each chapter shows you exactly one task and how to accomplish it, along with common questions related to that task.

When you are done, you will come and go through your code like the wind. Your application will have become autoloaded, dependency injected, unit tested, layer separated, and front controlled. And you will have kept it running the whole time.

Buy the book today, or sign up for notifications on the mailing list below!

Sign up for Modernizing Legacy Applications in PHP:

First Name Email
Thank you, your sign-up request was successful! Please check your e-mail inbox.
That email address has been subscribed already, thank you!
Please provide a valid email address.
Oops. Something went wrong. Please try again later.
Categories: Open Source, PHP Community

Of HHVM, Hack and the future of PHP

Planet-PHP - Tue, 11/03/2014 - 20:31

Anthony posted a very interesting opinion piece about the future of PHP. I want to specifically comment on the part about HHVM and Hack. I have of course published my own opinion on the topic fairly recently on my private blog. Fellow Liiper Chregu has also done a very popular post on this very blog showing some very significant performance improvements that can be achieved with HHVM. Infact the project Chregu is working on is looking to be one of the first large production users of HHVM outside of Facebook and he is making good progress on integrating HHVM with New Relic which we use quite a bit for performance analysis in larger projects. Facebook is also presenting their point of view on PHP and Hack and probably the most promiment was this presentation called "Taking PHP Seriously". So with having set the stage let me address some of the points raised by Anthony.

HHVM in production

While Anthony does not recommend running HHVM in production, we are obviously getting ready to do just that. I totally agree however with the risks he points out. We realize that while the current version of HHVM is open source, there is no telling what will be the case with future versions and if they will eventually no longer be compatible with PHP or simply no longer open source. We have an extensive test suite to ensure that we get the expected behavior. Furthermore we have a failover system in place leveraging Varnish to ensure that we can simply go back to plain PHP and we make sure that our application meets the minimal performance requirements of our client with good old PHP. But for now we like the improved latency we are getting thanks to HHVM in a few more complex parts of the application. So far so good.

Hack, trouble in paradise

Now Hack is more than a mixed bag for me. Lots of the things in there are interesting. But it shows how impatient Facebook is with the core of PHP. Maintaining HHVM to have a PHP and a Hack mode is certainly a burden for Facebook's development and if indeed all their code will eventually target Hack, the question becomes if they will one day decide that PHP mode is no longer worth the hassle.

Now since HHVM is open source of course the open source community can then fork and continue the development. The longer HHVM remains committed to PHP compatibility, and infact right now Facebook is doing a lot to continously improve the compatibility, the higher the chances of enough people becoming invested in HHVM and therefore potentially willing to keep HHVM PHP mode going even if Facebook might loose interest.

Making Facebook care

One of the big questions is why does Facebook even care about PHP mode if they are already moving their own code to Hack? To me one big reason for this could be that they actually want to use code produced in the community. I have not really seen any Facebook engineers sending code to PHP libraries but maybe right now they are not being so obvious about this. Despite the fact that last I checked (about a year ago) their Facebook PHP SDK had some hideous code, I am sure that this would be quite exciting and I have no doubts that they have some excellent PHP programmers that could boost adopted libraries quite significantly.

So maybe in the end the best way to ensure that PHP mode in HHVM remains a goal for Facebook is to keep churing out high quality PHP code?

Categories: Open Source, PHP Community

The true business cost of technical debt

Planet-PHP - Tue, 11/03/2014 - 13:00
In many development shops where I’ve worked, there’s a consistent struggle between developers who want to “do it right” and management that wants to “just get it shipped.” The problem stems from the pride developers feel in their work coming up against the business realities faced by managers and company leaders, who are focused on […]
Categories: Open Source, PHP Community

Walking the London LOOP - part 3

Derick Rethans - Tue, 11/03/2014 - 11:23
Walking the London LOOP - part 3

After section 2's really muddy walk we hoped for better paths for LOOP section 3. As is becoming customary, we started our walk at Jack's in Queen's Park. Not really the walk of course, but a hearty breakfast. Interestingly the place seemed to be crawling with police officers this morning. After breakfast, we were also happy to see that the Queen's Park Panda was back again—it seemed to have gotten a wash.

loop3-d36_4644.jpg

After making our way by rail to Petts Wood—without weekend engineering getting in the way—we proceeded towards Jubilee Country Park for section 3. After going in the wrong direction straight from the start, we managed to find our way and were happy to see that there was not too much mud. And where there was mud, some handy wooden bridges were provided.

loop3-d36_4646.jpg

It was a gorgeously warm day, and it felt pretty much well into spring. The trees were getting into blossom and the sky was blue. After going through a bit of town, the muddy paths returned once we hit woods. Not quite the bogs from section 2, but we couldn't ignore their muddyness altogether either. The route took us through Darrick Wood (with a bit more mud), and after going in the wrong direction a tiny bit (OpenStreetMap was wrong) a view opened up over Farnborough's fields.

loop3-d36_4658.jpg

Leaving the fields behind us we continued through Farnborough until we heard the sound of a violin. The route then continued through the cemetery of St. Giles the Abbot. Besides it being a lovely church and a cemetery full of daffodils it also sported a war memorial for the first and second World War.

Not long after leaving the cemetery behind us we made it to High Elms Park were we stopped for lunch at the Green Roof Cafe. Some scones and a refreshing cider gave us enough energy to continue our way. The first thing we got to admire was the Bromley Millennium Rock — apparently one of the oldest rocks of the British Isles, a mere 2 billion years old.

After passing by the ruins of an old manor, and The Clock House, we climbed up a hill. At the bottom of the hill, the path showed a lot of erosion from running water. We soon turned off the narrow dirt track onto the side of a field which was very pleasant to walk on. Definitely a lot better than the path that we just left, as that had turned into a little lake as you can see below.

loop3-d36_4692.png

A bit later we walked around a field where the Metropolitan Police trains their dogs, and we were often reminded not to get onto their field. The route took us up a hill through the Holwood estate with Holwood House on the top of the hill. The house was owned by William Pitt the Younger, one of Great Britain's prime ministers.

loop3-d36_4708.jpg

Near the top, we encountered the stump of an Oak tree, with a new tree growing in the middle of it. The original oak tree, the Wilberforce Oak, is quite significant in the abolition of the slave trade in the British Empire, and there is a nearby plaque quoting from William Wilberforce's diary stating: "At length, I well remember after a conversation with Mr. Pitt in the open air at the root of an old tree at Holwood, just above the steep descent into the vale of Keston, I resolved to give notice on a fit occasion in the House of Commons of my intention to bring forward the abolition of the slave-trade".

loop3-d36_4712.jpg

Down the hill we walked into Keston Common which has a few lovely ponds that you can fish in. Although the paths around it were a bit muddy it is an excellent spot to find some ice cream. Through some woods we came to a road, with a pub on the other side of it. After climbing up the hill, and down again, we were certainly thirsty and stopped for a pint at gastro pub The Fox Inn. It has a lovely interior and the beer garden was teeming with locals enjoying the sunshine.

loop3-d36_4725.jpg

The walk then took us through Hayes Common, and with the Sun nearly setting all we had to do, is go up and down two steep hills to make it to Hayes station. Perhaps we should take a different route when we start with section 4!

The weather was beautiful at 15-18°C and there was nothing but blue skies. We took just over four hours for the 19.7km walk.

The photos that I took on this section, as well as the photos of the other sections of the LOOP, are available as a Flickr set.

Categories: Open Source, PHP Community

Risks and Challenges of Password Hashing

Planet-PHP - Mon, 10/03/2014 - 18:00

In a past article, password hashing was discussed as a way to securely store user credentials in an application. Security is always a very controversial topic, much alike politics and religion, where many points of view exist and a ‘perfect solution’ for someone is not the same to others. In my opinion, breaking an application’s security measures is just a matter of time. With computer power and complexity increasing every day, today’s secure applications will not be so secure tomorrow.

For our readers who are not familiar with what a hash algorithm is, it’s nothing more than a one way function that maps data of variable length to data of fixed length. So if we analyze the above definition we need to understand the following requirements and characteristics of such algorithms:

  • One way function: the output cannot be reversed using an efficient algorithm.
  • Maps data of variable length to data of fixed length: meaning that the input message space can be “infinite”, but the output space is not. This has the implication that 2 or more input messages can have the same hash. The smaller the output space, the greater the probability of a ‘collision’ between two input messages.

md5 has confirmed practical collisions and sha1’s probabilities for reaching a collision are growing every day (more info in collision probability can be found by analyzing the classic Birthday Problem), so if we need to apply a hashing algorithm, we should use the ones that have greater output space (and a negligible collision probability), such as sha256, sha512, whirlpool, etc…

They are also called Pseudo-random functions’, meaning that the output of a hashing function should be indistinguishable from a true random number generator (or TRNG).

Continue reading %Risks and Challenges of Password Hashing%

Categories: Open Source, PHP Community

An Opinion On The Future Of PHP

Planet-PHP - Mon, 10/03/2014 - 15:30
There's been a lot of buzz in the community lately around PHP and its future. The vast majority of this buzz has been distinctly positive, which is awesome to hear. There's been a lot of talk about PHP6 and what that might look like. There's been a lot of questions around HHVM and its role in the future of the language and community. Well, let me share with you some of my thoughts in this space...
Read more »
Categories: Open Source, PHP Community

PostgreSQL Database Appliance from Fujitsu

Postgresql.org - Mon, 10/03/2014 - 02:00

Fujitsu has released a PostgreSQL based database appliance system, called HA Database Ready SX2. This appliance is capable of achieving up to 180,000 transactions per minute and AES based data encryption. HA Database Ready SX2 combines the Open Source PostgreSQL Database with advanced hardware configuration and Fujitsu's own Smart Software Technology, to deliver high performance and high reliability database systems that will help organizations to achieve high-speed batch processing and data consolidation.

More details can be found at: http://www.fujitsu.com/global/news/pr/archives/month/2014/20140228-02.html

Categories: PHP Community

PHP Package Signing: My Current Thoughts

Planet-PHP - Sun, 09/03/2014 - 15:57


Image of a modern fountain pen writing in curs...

(Photo credit: Wikipedia)

We figured out how to write good code. We figured out how to write good code in a reusable way…for the most part. We figured out how to distribute and mix all that good reusable code in a sensible fashion. Can we now figure out how to do it all securely?

Package signing is a simple enough idea, and I’ve been spending time trying to fit it, Composer and Packagist together as a model in my head. The concept is to have parties create a cryptographic signature of the code to be distributed at a specific point in time using a private key. If anyone were to change that code or its metadata (think composer.json) with malevolent intent, the end user would then notice that the cryptographic signature cannot be verified using the package author’s known public key. It’s a familiar topic from all those cryptography books you’ve doubtlessly read ;) .

Alright, it’s actually a horrendously complicated topic that boggles the minds of many a programmer. We’re a practical bunch, and we just want the damn code. NOW!

Practical considerations and security are locked in a continuous battle for primacy. Look at SSL/TLS – it is a security nightmare but we keep it around because, until someone comes up with a decent replacement, the alternative is no encrypted HTTPS with a verifiable host for anyone. We continue to support old versions of SSL/TLS out of practical concerns despite knowing their weaknesses. They are old versions for a reason!

Those same concerns have been at war in my own head since last week, when I made the mistake of contemplating package signing. Eventually, my practical side won out and my security persona has been sulking in a corner ever since refusing to talk to me.

The problem with package signing from my perspective is tied up in a phrase most of you would know: The needs of the many outweigh the needs of the few. Thank you, Spock.

PKI vs GPG (Some Context!)

I won’t go into too much detail here…

Right off the bat, we have two contenders for signing packages: Public-key infrastructure (PKI) backed by a Certificate Authority (CA) and Pretty Good Privacy (PGP) also commonly referred to by its GNU implementation, GNU Privacy Guard (GPG). You’d be most familiar with PKI in the form of the SSL certificates used online. Both have the notion of private keys and public keys. Data encrypted by one key can only be decrypted by the other key. If you keep one private, then holders of the public key can always verify that data sent by you was really sent by you. If you lose the private key, you’ll need to revoke it and get a new one.

Assuming, they trust it is you to start with!

Trust is the core difference between PKI and GPG. How do you know, with certainty, than any given public key is firmly associated with the person you know it should be associated with? Maybe it’s a hacker posing as that person? Maybe it’s the local friendly NSA office masquerading as Google? Establishing trust takes diverging paths for PKI and GPG. PKI keys (in the form of certificates) are either self-signed or signed by a trusted Certificate Authority. Generally, we put zero faith in self-signed certificates because anyone can claim to be anyone else using them. We instead trust a select number of CAs to sign certs because they’ll hopefully do stuff like asking for passports, addresses, and other person or company specific information to verify any entity’s real identity before doing so. GPG avoids centralised authorities like the plague and instead uses a “web of trust” model where everyone can sign everyone else’s public key, i.e. the more of these endorsements a GPG private key gets,

Truncated by Planet PHP, read more at the original (another 11962 bytes)

Categories: Open Source, PHP Community

Some thoughts on recruiting

Planet-PHP - Sun, 09/03/2014 - 12:00

Recruiters. Many developers hate their guts, and (in most cases) rightfully so. They usually have no clue about technology or about how to communicate with developers. It is also pretty clear most of the times that they’re only out for quick wins. I’ve seen recruiters call a developer they’d placed in a company exactly 6 months after he started to see if he wanted to move on, because 6 months was the period in the contract between the employer and the recruiter. I’ve seen recruiters tell candidates that the employer wasn’t interested, just because the employer didn’t want to pay the extremely high recruiter-fee. Hell, my first professional PHP job was like that. I ended up having direct contact with the employer because I didn’t believe the story the recruiter was telling me, and landed a pretty cool project. Some of the people I worked with there are still friends.

There is a flipside though: There are recruiters out there that do understand how things work. They know how developers work, communicate, what they feel is important. They are rare, but they do exist. So it would be stupid to just say “don’t work with recruiters” to companies or to developers. The thing with working with recruiters is: It takes time. You can’t just give a recruiter a profile and wait until they get you developers, or tell them you’re looking for a job and wait for the interviews. You have to invest in the relationship with the recruiter, do some research, get to know them, and ensure you’ve found one of the good ones.

The role of a recruiter

Many companies I’ve worked at, with or been in touch with expect a recruiter to look at their huge list of available developers (here’s your first mistake, because how many developers are actually available?) and give you the best developers based on a (usually incomplete) profile. But what exactly is it that a recruiter does?

Most recruiters have very little technical knowledge. They’re networkers, they create a network amongst developers and companies and try to link one with the other when they get a request. So from the majority of the recruiters, you should not expect that they make a judgement on the seniority of the developer or his skillset.

In an ideal world, the recruiter you work with actually has a development background and keeps his/her development knowledge up to acceptable levels. Ideally, the recruiter should be able to judge the skills and level of any developer they send your way.

Think about your reasons for hiring a recruiter

Before even contacting a recruiter, you need to ensure you’re doing this for the right reasons. Many companies simply expect the wrong things from a recruiter. As I mentioned before, you can’t just give them a profile and wait for the developers to come in.

Simply outsourcing getting potential candidates should not be your only reason hiring a recruiter, at least not if you want to save yourselves some time. The time you save by getting in the candidates, you will most probably spend doing interviews with candidates that do not actually fit your profile. The amount of times I (specialized in PHP with very little experience with other languages) got approached by a recruiter for a Java or Python-project is beyond belief. Getting 10 CV’s from a recruiter is not a good thing. It’s a bad thing. Instead, you’d want to get one or two CV’s of developers that actually are what you look for.

Even if you have a good recruiter, don’t expect to save much time on the recruitment process. Even if they immediately pass you the right CV’s, you’ll still need to make the final judgement on whether the developers are good or not, and of course convince them to work for you. You’ll still need your own HR-people to handle everything.

Take back your own recruitment

It may be worth your while to consider taking the recruitment back into your own organization. The most important task for a recruiter is to find the right developers for your organization. This may seems like a task that takes a lot of time, but it is easily combined with other stuff you already do (or should do).

The best representatives of your company when it comes to finding developers are your developers. They can speak to potential developers on the same level, can explain what the challenges are and what the fun aspects are of working for your company. They are also the best people to try and find out if a potential developer would fit your company, both in skills and in personality.

So if you have a position for a new developer, send your existing developers to usergroup meetings and conferences. Let them get in touch with other developers, potential employees. Don’t tell them to go out and find people, but tell them to keep their

Truncated by Planet PHP, read more at the original (another 3249 bytes)

Categories: Open Source, PHP Community

Building Engaging Web Apps with Game Mechanics

Planet-PHP - Sat, 08/03/2014 - 21:00

When we speak of “games”, we imagine physical, sporting activities, or video and board games. Rest assured, I’m not talking about developing the next blockbuster FPS, 3rd-person slasher, MMORPG, or 2D-platformer. It’s about going beyond the simple visual appeal of JavaScript animations and CSS transforms, into game design and mechanics to create engaging websites and web applications.

What is Gamification?

“Gamification” is the use and application of game design techniques and game mechanics, in non-game contexts, to engage a target audience to change behaviours, learn new skills, or enable innovation. Game design can be applied to practically all facets of business from customer engagement, employee performance, training and education, innovation management, personal development, sustainability and health. Gartner predicts that by 2015, more than 50% of organizations that manage innovation processes will gamify those processes.

Continue reading %Building Engaging Web Apps with Game Mechanics%

Categories: Open Source, PHP Community

Community News: Packagist Latest Releases for 03.08.2014

PHPDeveloper.org - Sat, 08/03/2014 - 16:07
Recent releases from the Packagist:
Syndicate content