OmniSpear at Laracon 2016

LarconFeaturedImageOmniSpear is happy to be at the 2016 Laracon event in KY!  We are learning valuable insight from the talented speakers at the conference to continually kick up our Laravel game.

Laravel is quickly becoming an effective tool for developing PHP applications. As a framework that embraces best-practices and modern development workflows, our team has utilized Laravel in a variety of projects.

New Look for Dr. Randal Haworth

HaworthFeaturedImageDr. Randal Haworth of Beverly Hills is one of the world’s most experienced plastic surgeons. We have been working with Dr. Haworth on a number of website makeovers and various sites for his products, including NightLift sleep lingerie.  For his main site’s latest revision, Dr. Haworth wanted us to utilize a sleek and modern layout, with seamless transitions between surgical procedures.  The result is a responsive site using a minimalist design. Customers can easily navigate beyond surgical procedure overviews, down to patient testimonials, examples of work and details for each procedure.
We love the update!  https://www.drhaworth.com/

 

Another Successful Dayton PHP Coding Meetup

The latest Dayton PHP meetup on Git and Gitflow was a success.   The developers and professionals in attendance were able to get a great intro to maximizing Git for business flow efficiency by guest speaker, Nate Denlinger.  We host Dayton PHP meetups monthly, covering a variety of topics and guest speakers, so please stop by for some great learning opportunities!  You can RSVP or learn about upcoming events from their site.

Dayton PHP Meetup Tomorrow – Git and Gitflow

GitLogo-FeaturedImageOmniSpear is excited to host Dayton PHP and their upcoming meeting on Git and Gitflow.   The presentation will take place tomorrow at our conference room from 6:00-8:00 p.m. with special guest speaker, Nate Denlinger.  Nate has been a developer for over 9 years and will be giving us an overview of the ins and outs of Git and workflow processes.  We are excited to learn the basics of streamlining with GIT as well as learning about real life experiences during the round-table.  For more information , or to RSVP, check out the Dayton PHP’s event site.

Website Refresh for Clear My Head

CMH-mockup-480x480OmniSpear is excited to announce the latest website refresh for  Clear My Head. We’ve updated the website to a mobile-friendly, more modern look and feel, with easier navigation to the increasing services and products.  Sticking to the heart of our concept for the original site, we’ve kept the unique and bright color palette for visual appeal, while streamlining page access and updating photos to the latest products. Clear My Head features a Certified Clinical Aromatherapist and Licensed Massage Therapist, with specialty in the latest SHIFT massage treatments. They also develop and sell products using sustainable, organic and natural ingredients that smell great and do wonders for sinuses. Visit Clear My Head to explore and book your appointment today.  If you need a new site or a refresh to your existing, let us know and see what we can do for you.

 

OmniSpear Hosting PHP Meetup on Making Dev Environments Work For You

DaytonPHPOmniSpear is excited at the opportunity to welcome Dayton PHP and their members to our office on June 20th. The event will be hosted by Brian Retterer, a veteran developer of PHP since the release of PHP 5, who now works as the PHP Developer Evangelist for Stormpath. During this session, Brian will give a tour of all the new and different features of the language, as well as provide techniques for becoming a more efficient developer.  The meetup will also focus on providing some great tips and tricks for helping speed up daily work!  Be sure to check out the meeting agenda in the link below as well as stay tuned for future meetups at OmniSpear.

For more information, tune into the event website

 

 

OmniSpear Has Upgraded!  Come See Our New Office Space.

OmniSpear, Inc. Has Upgraded!  Come See Our New Office Space.

We’ve outgrown our old office space and have made a move up the the 2nd floor.  By designing a new office layout from scratch, we have been given the opportunity to more than double our existing space while also giving ourselves room for continued growth.

Some highlights of our new digs include an additional huddle room and lounge area for formal / informal meetings as well as a break room complete with bar and table seating.

Our new space is more inviting and allows more room for departments to grow, as well as harness our internal communication more effectively. Our development team is no longer crowded together, but has a creative seating arrangement that allows for both group and individual work.  Our IT support team has a quieter space that provides them privacy for even better phone support and hardware work-space. The entire development team now has stand up / sit down desks as well, which has done wonders in helping keep them more refreshed and ready for action.

Come see our new office and we’ll give you a tour!

Lobby

 

developer2 developer1 conference_room

 

OmniSpear Supports the Dayton PHP Meetup Group

The PHP programing language has been part of web development for over two decades and has been a foundation for web development as other programing languages appear then fade away. You will find PHP is the heart of many popular applications like WordPress, Drupal, Joomla and SugarCRM. With the release of PHP 7 and it’s extreme performance increases we find PHP’s popularity on the rise again. Helping PHP’s renewed popularity is support from the Laraval framework. Laraval is “the PHP framework for web artisans”.

This is why OmniSpear has a strong PHP development team – we know the power of PHP, wether it’s customizing WordPress or creating data pipelines for line-of-business applications.

Dayton PHP Meetup Group

With our expertise in PHP it makes sense that we would support the PHP industry. So, when Brian Retterer approached us about a new Dayton PHP Meetup group it was a natural fit for us to host their meetings.

On May 17th we hosted the first Dayton PHP meeting here at OmniSpear.
DaytonPHP
And what a great start it was!
We had seven people in the meeting. Our guest speaker was Emily Stamey and she joined us via Google Hangouts. Emily shared her experience on working with North Carolina State University to “bootstrap” their legacy CodeIgniter project.

Emily started the meeting by clarifying some terminology like “legacy software”, “spaghetti code”, “lasagna code” and “refactoring”. She then talked about the scholarship application and requirements they needed to comply to as the engaged the project. She emphasized the importance of surveying the application by studying the codebase and reviewing new feature requests then get user feedback.

Emily talked about gaining user trust and always be honest with users about errors in the application. She covered setting expectations with the client, setting priority and scope of work.

Diving In

After covering all the planning topics, it was time to dive into the work. Emily started with importance of adding version control for their source code and end the bad behavior of developing in the production environment.

Emily showed showed us the various software tool packages they used for testing their code, adding templates for front-end content, mitigating vulnerabilities and database management.

Emily closed the presentation by summarizing what was learned and answered several questions from the group.

Looking Forward

Brian Retterer has ambitious plans for the Dayton PHP group. For our next meeting he will be walking through a complete Laravel build, from start to finish. He plans to have “deep dive” workshops, training for real-world scenarios and industry leading guest speakers.

Are you ready to learn more or get more out of PHP? If so join us for our next meeting here at OmniSpear.
You will find more detail on upcoming content and date on the Dayton PHP Meetup page.

Setting up an Ubuntu 14.04 LEMP Server with the Nightly Build of PHP7

Install nginx

apt-get update
apt-get install nginx

Install and secure MySQL

apt-get install mysql-server
mysql_install_db
mysql_secure_installation

Add Zend repo and install PHP7

echo "deb http://repos.zend.com/zend-server/early-access/php7/repos ubuntu/" >> /etc/apt/sources.list
apt-get update 
apt-get install php7-nightly

Configure PHP7 php-fpm.conf

cd /usr/local/php7/etc
cp php-fpm.conf.default php-fpm.conf
nano php-fpm.conf

Uncomment/Change

pid = /var/run/php7-fpm.pid

Uncomment/Change

error_log = /var/log/php-fpm.log

Configure PHP7 www.conf

cd /usr/local/php7/etc/php-fpm.d
cp www.conf.default www.conf
nano www.conf

Change

user = www-data

Change

group = www-data

Uncomment

listen.allowed_clients = 127.0.0.1

Uncomment

security.limit_extensions = .php .php3 .php4 .php5 .php7

Configure PHP7

wget -O /etc/init.d/php7-fpm "https://gist.github.com/bjornjohansen/bd1f0a39fd41c7dfeb3a/raw/f0312ec54d1be4a8f6f3e708e46ee34d44ef4657/etc%20inid.d%20php7-fpm"
chmod a+x /etc/init.d/php7-fpm
touch /etc/init/php7-fpm.conf
nano /etc/init/php7-fpm.conf

Add the following to php7-fpm.conf

exec /usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf

Add the checkconf file for PHP7

touch /usr/local/lib/php7-fpm-checkconf
    nano /usr/local/lib/php7-fpm-checkconf

Add the following to the php7-fpm-checkconf

#!/bin/sh
set -e
errors=$(/usr/local/php7/sbin/php-fpm --fpm-config /usr/local/php7/etc/php-fpm.conf -t 2>&1 | grep "\[ERROR\]" || $
if [ -n "$errors" ]; then
    echo "Please fix your configuration file..."
    echo $errors
    exit 1
fi
exit 0

Configure PHP7 continued

chmod a+x /usr/local/lib/php7-fpm-checkconf
update-rc.d -f php7-fpm defaults
ln -s /usr/local/php7/bin/php /usr/local/bin/php
ln -s /usr/local/php7/sbin/php-fpm /usr/sbin/php-fpm
service php7-fpm start

Set up nginx config

cd /etc/nginx/sites-available
cp default (your site here).conf
nano (your site here).conf

Configure your config as needed (example script below)

server {
        listen *:80;
        server_name (server name here);

        root /usr/share/nginx/html;
        index index.php index.html index.htm;

        client_max_body_size 1m;

        error_log /var/log/nginx/(your site here).error.log;
        access_log /var/log/nginx/(your site here).access.log;

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                fastcgi_index index.php;
                fastcgi_split_path_info ^(.+\.php)(/.*)$;
                try_files $uri $uri/ /index.php$is_args$args;
                fastcgi_pass 127.0.0.1:9000;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_param APP_ENV dev;
        }
}

Continue set up nginx

ln (your site here).conf ../sites-enabled/(your site here).conf
rm ../sites-enabled/default

Restart services

service php7-fpm restart
service nginx restart

Regression testing of websites with just a little JavaScript.

In my past professions whenever the word “testing” came up, there were usually one of two follow-up actions to take on my part as a developer.

– Get with a group of testers and draft a Q&A (quality assurance) specification.
– I would be the one stuck with the task of programming test scripts in some language that would take quite a bit of time (I was using Borland Silk Test version 6 and I’m quite sure the latest is a dramatic improvement).

As I spend most of my time in Javascript, it would be nice to create standard automated regression tests in the same realm of my skill set (i.e. web technologies). And that’s where PhantomJS comes in. For those web developers who have used the Console window inside their browser cranking out console.log statements will be right at home with PhantomJS.

What is it? It’s a headless (something you can’t see) web browser based on WebKit that is “scriptable”. Imagine a console terminal application that can be programmed to go to a web site which performs the following:

– Calculates the time it takes to load the page.
– Performs some validation. When the script enters a letter instead of a integer (inside a input box), does it error like it’s suppose to?
– Automated action. Fill in the input fields and click on the submit button.

If you’re comfortable using jQuery, you can simply load it in the PhantomJS environment and off you go. Here’s a taste of a PhantomJS script that goes to www.omnispear.com to print out all the blog headings:

var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
    console.log(msg);
};
page.open("http://www.omnispear.com", function(status) {
    if (status === "success") {
        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js", function() {
            page.evaluate(function() {
                var blogs = $('#blog_feed_text');
                $(blogs).find('.wp-title a').each(function(i) {
                    console.log($(this).html());
                });
            });
            phantom.exit();
        });
    }
});

I’ve been following the development of PhantomJS since it first came out in 2011 and I am excited about where the project is heading. If testing websites is something that is in the back of your mind, you definitely should check it out.