<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GeekyBoy.com</title>
	<atom:link href="https://geekyboy.com/feed" rel="self" type="application/rss+xml" />
	<link>https://geekyboy.com</link>
	<description>Adam Culp&#039;s Tech Blog</description>
	<lastBuildDate>Wed, 08 Mar 2023 16:55:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.4</generator>
	<item>
		<title>Sharing the Beachcasts office and studio set up</title>
		<link>https://geekyboy.com/archives/1486</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Fri, 18 Oct 2019 16:18:56 +0000</pubDate>
				<category><![CDATA[beachcasts]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[adamculp]]></category>
		<category><![CDATA[desk setup]]></category>
		<category><![CDATA[recording studio]]></category>
		<category><![CDATA[rungeekradio]]></category>
		<category><![CDATA[studio setup]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1486</guid>

					<description><![CDATA[<p>Adam Culp shares the studio setup, and equipment used, for RunGeekRadio and Beachcasts recording and production.</p>
<p>The post <a href="https://geekyboy.com/archives/1486">Sharing the Beachcasts office and studio set up</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>I&#8217;ve had some ask how my office is set up, and what equipment I use for my various recordings. Since I do podcasts (<a href="https://rungeekradio.com">RunGeekRadio</a>), live streams (<a href="https://twitch.tv/beachcasts">Beachcasts on Twitch</a>), and video recordings (<a href="https://youtube.com/c/Beachcasts">Beachcasts on YouTube</a>), I needed a versatile setup that facilitated all of these various activities. So, below I will share each aspect of my office/studio, and how I have it set up.</p>



<p>NOTE: I will return to this post from time to time and update it as I update equipment, so it will serve as a good resource to point folks at.</p>



<p>First, here is what takes up 6 feet wide by 5 feet deep. I often hear folks say they can&#8217;t do what I do because they don&#8217;t have space. Though, in reality, it is pretty compact.</p>



<figure class="wp-block-image size-large"><a href="https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped.jpg"><img decoding="async" width="1024" height="914" src="https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped-1024x914.jpg" alt="" class="wp-image-1553" title="Beachcasts Studio" srcset="https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped-1024x914.jpg 1024w, https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped-300x268.jpg 300w, https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped-768x685.jpg 768w, https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped-1536x1371.jpg 1536w, https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped-1200x1071.jpg 1200w, https://geekyboy.com/wp-content/uploads/2021/08/2021-08-12-17.05.39_scaled-cropped.jpg 1636w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Studio Setup</figcaption></figure>



<p>I use laptops, and desktop, and one external monitor.</p>



<p>Everything sits on an <a href="https://kit.com/adamculp/beachcasts-essentials/ikea-bekant-corner-d">adjustable desk from Ikea</a>. I really love this <strong>desk</strong> for its simplicity, along with being able to hide all the cords underneath because of the handy cord hammock under it. And it is motorized, making it a breeze to raise or lower. I typically set it to 26 inches high when sitting, and 43 inches when standing. Then I simply pull the standing mat forward, and I continue working in a very similar way whether sitting or standing.</p>



<p class="has-medium-font-size"><strong>Computers and Software</strong></p>



<p>My <strong>primary desktop computer </strong>is a homemade system. With an AMD Ryzen 9 5900X 12-Core CPU, MSI Nvidia GeForce Ventus RTX 2060 Super, 32 GB RAM, and 2 x 1TB M2 SSD modules, it is able to handle anything I throw at it even at 6 years old. All that is mounted on the MSI MAG Tomahawk x570 motherboard, which runs very cool&#8230;even under load. I run Windows 10 as the OS and do anything I want to on it, using WSL2 for much of my development and Docker host. I&#8217;d used Ubuntu as my OS for 12 years but recently switched to Windows 10 in early 2021. It is much better than I remember in the past, especially with WSL2 for development. LEDs are on the fan, motherboard, RAM, and SSDs.</p>



<figure class="wp-block-image size-large"><img decoding="async" loading="lazy" width="860" height="1024" src="https://geekyboy.com/wp-content/uploads/2021/06/2020-07-20-16.00.13_scaled-860x1024.jpg" alt="Desktop system" class="wp-image-1539" srcset="https://geekyboy.com/wp-content/uploads/2021/06/2020-07-20-16.00.13_scaled-860x1024.jpg 860w, https://geekyboy.com/wp-content/uploads/2021/06/2020-07-20-16.00.13_scaled-252x300.jpg 252w, https://geekyboy.com/wp-content/uploads/2021/06/2020-07-20-16.00.13_scaled-768x915.jpg 768w, https://geekyboy.com/wp-content/uploads/2021/06/2020-07-20-16.00.13_scaled.jpg 1000w" sizes="(max-width: 860px) 100vw, 860px" /></figure>



<p>I do all my <strong>audio recordings</strong> on this desktop using <a href="https://www.audacityteam.org/">Audacity</a> software.</p>



<p>With this desktop, I use a <a href="https://kit.com/adamculp/beachcasts-essentials/max-keyboard-nightha">Maxkeyboard Nighthawk X8</a> mechanical <strong>keyboard</strong> with Cherry MX brown switches. I like the mechanical keyboard feel and feedback, and the brown switches give me just enough noise to enjoy the experience. There is a slight clicking, but not as clicky as the blue switches. I recently purchased some rubber rings to install on each key, so the bottoming-out noise will not bother others when I&#8217;m on conference calls. I haven&#8217;t installed them yet.</p>



<p>I also use a Logitech M510 wireless <strong>mouse</strong>. It uses 2 AA batteries, and charges really quickly. It has been a solid performer and is very reliable.</p>



<p>My beautiful <strong>monitor</strong> is a <a href="https://www.samsung.com/us/computing/monitors/curved/43-cj890-super-ultra-wide-curved-monitor-lc43j890dknxza/">Samsung C43J89x 43-inch ultrawide curved 120Hz model</a> with picture-in-picture capability and built-in KVM using a USB-C connector. It operates at 3840&#215;1200 resolution and is like having dual monitors. It&#8217;s wonderful.</p>



<p>The monitor is mounted on a <a href="https://kit.com/adamculp/beachcasts-essentials/humanscale-m8-adjust">Humanscale M8</a> <strong>monitor arm</strong>, which is wonderful and strong. I get only minimal movement from it, even with such a large/heavy screen mounted on it. A new monitor will be much lighter and will be truly amazing.</p>



<p>The <strong>second (work) laptop</strong> is a 16&#8243; MacBook Pro mounted on a <a href="https://www.therooststand.com/">Roost</a> <strong>laptop stand</strong>. The Roost was recommended to me by a few friends in the programming space, and it has been amazing. However, you will want an external keyboard and mouse to go with it, as it is hard to type when a laptop is raised from the table. So, next, I will talk about those.</p>



<p>The <strong>external keyboard</strong> is the <a href="https://www.apple.com/shop/product/MRMH2LL/A/magic-keyboard-with-numeric-keypad-us-english-space-gray?fnode=4c">Apple Magic Keyboard</a>, which is wireless and connects via Bluetooth. The feel of typing on it is really nice, and has a mechanical &#8220;feel&#8221;. Kinda like the old-style Macbook Pro keys, before they ruined them with butterflies. It charges via USB connection to the laptop, and only needs charged every 3 months.</p>



<p>Instead of a <strong>mouse</strong> as an external for the Mac I use the <a href="https://www.apple.com/shop/product/MRMF2/magic-trackpad-2-space-gray?fnode=4c">Apple Magic Trackpad</a>. It is larger than the trackpad on the Mac, and has all the same features, including Force Touch feedback to simulate a click. It is also Bluetooth and only needs charged every 3 months.</p>



<p class="has-medium-font-size"><strong>How does my recording and streaming setup work?</strong></p>



<p>Since upgrading from an old Dell laptop to a new desktop, I now record everything I do on the desktop using OBS. In the past, I used multiple laptops for recording and streaming due to the intensive nature of it. However, the desktop allows me to utilize a single system to do all the things.</p>



<p>I can also record using multiple systems with the <a href="https://www.razer.com/gaming-broadcaster/razer-ripsaw-hd">Razer Ripsaw HD</a> capture card. (Not to be confused with the original Razer Ripsaw, which was garbage.) The <a href="https://www.amazon.com/gp/product/B07QQQCWL8/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&amp;psc=1">desk clamp</a> shown in the picture is an extra thing I bought to simply hold it steady on the back of my desk and has a handy arm (it&#8217;s actually a headphone holder) for any cables not being used.</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" width="600" height="601" src="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.50.29_resized.jpg" alt="Razer Ripsaw HD" class="wp-image-1494" srcset="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.50.29_resized.jpg 600w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.50.29_resized-150x150.jpg 150w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.50.29_resized-300x300.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption class="wp-element-caption">Razer Ripsaw HD</figcaption></figure>



<p>Why the Ripsaw HD? Because it is totally plug-and-play and doesn&#8217;t require any additional software to work. And it also has a 4K passthrough from the source to the external monitor. In addition, it sends 1080p video to a 2nd system at 60 fps.</p>



<p><strong>How does the Ripsaw HD work?</strong> By using this capture card enables me to capture the screen from the Dell, and use it in the OBS recording as a source. To do this it sits in the middle of everything.  Basically, the HDMI coming out of the Dell is plugged into the capture card, and then another HDMI goes from the capture card to the external monitor. This enables my Dell laptop to use the monitor without any issues, up to 4K video. Meanwhile, there is another USB-c output on the Ripsaw HD that plugs into the USB or USB-c on the 2nd laptop and can be used as a viewing video source. Then it is a simple matter to add it as a source in an OBS scene.</p>



<p class="has-medium-font-size"><strong>Audio and video equipment for recording and streaming</strong></p>



<p>Also for a <strong>video cam</strong>, I use a <a href="https://www.logitech.com/en-us/product/brio">Logitech Brio</a>. At 1080p and 30 fps, it does a great job, though the Brio can be costly. I also have multiple <a href="https://www.logitech.com/en-us/product/hd-pro-webcam-c920s?crid=34">Logitech C920 webcams</a> used for additional scenes. I have 2 of them, and sometimes incorporate them as additional views in b-roll footage. They are also handy when I travel, with an extra little hard case I picked up. They are all very versatile webcams. (I&#8217;ve added a Nexmo lens cover that can be opened/closed because I bought this up before they<em> came out with the C920S that comes with a privacy cap.</em>)</p>



<figure class="wp-block-image size-large"><img decoding="async" loading="lazy" width="800" height="600" src="https://geekyboy.com/wp-content/uploads/2020/04/2020-04-04-11.52.54_scaled.jpg" alt="Logitech Brio 4K webcam" class="wp-image-1508" srcset="https://geekyboy.com/wp-content/uploads/2020/04/2020-04-04-11.52.54_scaled.jpg 800w, https://geekyboy.com/wp-content/uploads/2020/04/2020-04-04-11.52.54_scaled-300x225.jpg 300w, https://geekyboy.com/wp-content/uploads/2020/04/2020-04-04-11.52.54_scaled-768x576.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">Logitech Brio 4K</figcaption></figure>



<figure class="wp-block-image"><img decoding="async" loading="lazy" width="600" height="600" src="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.11.32_resized.jpg" alt="Logitech C920 webcam" class="wp-image-1491" srcset="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.11.32_resized.jpg 600w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.11.32_resized-150x150.jpg 150w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.11.32_resized-300x300.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption class="wp-element-caption">Logitech C920 webcam</figcaption></figure>



<p>As for <strong>audio</strong>, I have 2 different configurations. For podcasting, and YouTube videos, I use the <a href="https://kit.com/adamculp/beachcasts-essentials/rode-podcaster-usb-d">Rode Podcaster</a> as my <strong>primary microphone</strong>. The sound is amazing, and hard to beat. I have it mounted on a <a href="https://kit.com/adamculp/beachcasts-essentials/rode-psa-1-swivel-mo">Rode PSA1</a> studio boom arm, with a <a href="https://kit.com/adamculp/beachcasts-essentials/rode-psm1-shock-moun">Rode PSM1</a> shock mount to prevent desk movement vibrations and sounds. It also has a <a href="http://www.rode.com/accessories/ws2">Rode WS2</a> pop filter to help keep the audio crisp and free of pops from my talking.</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" width="600" height="519" src="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.12.28_resized.jpg" alt="Rode Podcaster" class="wp-image-1492" srcset="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.12.28_resized.jpg 600w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.12.28_resized-300x260.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption class="wp-element-caption">Rode Podcaster</figcaption></figure>



<p>It connects via USB to the Dell and has an external headphone jack on the top that allows me to hear myself, and any system sounds, while I&#8217;m recording. As a dynamic mic, it is very directional and requires me to speak directly into it. This avoids any other background noises, like keyboard typing or air conditioning hums.</p>



<p><strong>Additional audio</strong> is provided by a <a href="https://kit.com/adamculp/beachcasts-essentials/rode-wireless-go-c">Rode Wireless Go</a> setup. I&#8217;ve been using it for live streaming, so I&#8217;m not required to be close to the larger Podcaster mic. I also picked up the new <a href="http://www.rode.com/microphones/lavaliergo">Rode Lavalier Go</a> to enable me to clip it on my t-shirt for ease of use, and then clip the Wireless Go on my belt. I picked up an added <a href="https://kit.com/adamculp/beachcasts-essentials/rode-amplifier-foots">SC7 cable</a> for connection to a mobile device or Mac.</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" width="600" height="600" src="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.10.49_resized.jpg" alt="Wireless Go" class="wp-image-1490" srcset="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.10.49_resized.jpg 600w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.10.49_resized-150x150.jpg 150w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.10.49_resized-300x300.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption class="wp-element-caption">Wireless Go with SC7 cable</figcaption></figure>



<figure class="wp-block-image is-resized"><img decoding="async" loading="lazy" src="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-11.43.24_scaled.jpg" alt="Lavalier Go" class="wp-image-1496" width="582" height="432" srcset="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-11.43.24_scaled.jpg 500w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-11.43.24_scaled-300x223.jpg 300w" sizes="(max-width: 582px) 100vw, 582px" /><figcaption class="wp-element-caption">Lavalier Go</figcaption></figure>



<p>Recently, I also added some <a href="https://www.audimute.com/soundproofing-acoustical-products/for-walls/acoustic-panels/gallery-wrapped-acoustic-panels"><strong>Audimute acoustic panels</strong></a> on the wall behind my monitor. In the past, I fought to remove the echo from the flat wall. I&#8217;m really impressed with how much the panels reduce the echo. Originally, I considered ugly &#8220;egg carton&#8221; style foam. However, I found they did little to really help, which resulted in spending a little more money on proper panels.</p>



<p class="has-medium-font-size"><strong>Lighting I use for video recording</strong></p>



<p>As the last bit of equipment, this would not be complete without talking about <strong>lighting</strong>. In addition to overhead lights, and natural light coming from the large window beside my desk, I&#8217;ve added some face lights that help eliminate shadows, and enable the webcam to do a much better job. In mid-2021 I picked up some <a href="https://www.elgato.com/en/key-light" title="https://www.elgato.com/en/key-light">Elgato Key Lights</a> when they were on sale.</p>



<p>But in the past, I used light created with a few parts. First, there are 2 inexpensive tripods to use as holders. Each one holds a square <a href="https://www.amazon.com/gp/product/B01MS7YMZW/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&amp;th=1">Tolifo LED panel</a> light that has adjustable brightness. (here are the <a href="https://www.amazon.com/gp/product/B01LSETT30/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&amp;psc=1">power adapters</a> to go with them)</p>



<figure class="wp-block-image is-resized"><img decoding="async" loading="lazy" src="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.13.12_resized.jpg" alt="Tolifo LED light" class="wp-image-1493" width="571" height="571" srcset="https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.13.12_resized.jpg 500w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.13.12_resized-150x150.jpg 150w, https://geekyboy.com/wp-content/uploads/2019/10/2019-10-18-09.13.12_resized-300x300.jpg 300w" sizes="(max-width: 571px) 100vw, 571px" /><figcaption class="wp-element-caption">Tolifo LED light</figcaption></figure>



<p>However, I found that even at lower levels the light was a little harsh and needed some diffusion. That is when I picked up the added <a href="https://www.amazon.com/gp/product/B00CCZWEHI/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&amp;psc=1">panels</a> and <a href="https://www.amazon.com/gp/product/B07DNLJMTR/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&amp;psc=1">arms</a> to hold them. This made all the difference in the quality of light, and means I do not have blaring light forced into my eyeballs. Yay, I can actually see the displays! It is very soft and provides a great spread.</p>



<p class="has-medium-font-size"><strong>Extra note about the Bluetooth speaker</strong></p>



<p>Some may have noticed the additional Bluetooth speaker on the desk. This is the JBL Charge 3, which is connected to a Google Chromecast Audio and plays music most of the time each day. It has great sound, but I don&#8217;t think either of these things is produced any longer.</p>



<p class="has-medium-font-size"><strong>Closing</strong></p>



<p>I hope you found this enlightening/helpful. Let me know if there are any other aspects of the setup you&#8217;d like more details on. And watch for a future post on how I set up OBS.</p><p>The post <a href="https://geekyboy.com/archives/1486">Sharing the Beachcasts office and studio set up</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>10 reasons to become a consultant or have a consulting business</title>
		<link>https://geekyboy.com/archives/1454</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Fri, 26 Apr 2019 02:46:15 +0000</pubDate>
				<category><![CDATA[Adam Culp]]></category>
		<category><![CDATA[beachcasts]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[adam culp]]></category>
		<category><![CDATA[consulting job]]></category>
		<category><![CDATA[good things about consulting business]]></category>
		<category><![CDATA[is consulting for you]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1454</guid>

					<description><![CDATA[<p>In this video, I share 10 good reasons to start a consulting business or become a consultant. However, before you start looking into how to become a consultant, Adam Culp of Beachcasts PHP videos shares points from his experience to help you figure out if being a PHP consultant is the right job for you. [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1454">10 reasons to become a consultant or have a consulting business</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Top 10 Reasons To Be a Programming Consultant Or Run a Consulting Business" width="500" height="281" src="https://www.youtube.com/embed/J7gpMYAKmDM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<p>In this video, I share 10 good reasons to start a consulting business or become a consultant. However, before you start looking into how to become a consultant, Adam Culp of <a href="https://beachcasts.com">Beachcasts</a> PHP videos shares points from his experience to help you figure out if being a PHP consultant is the right job for you. So, as you look into how to become a consultant, and before you become a consultant, consider these things carefully.</p>



<p>Or you can view this video on YouTube at: <a href="https://youtu.be/J7gpMYAKmDM">https://youtu.be/J7gpMYAKmDM</a></p>



<p>Items:<br>#10 Multiple Hats<br>#9 Constant New Problems (to solve)<br>#8 Always Learning<br>#7 Helping (mentoring) People<br>#6 You&#8217;re The Fixer<br>#5 &#8220;Expert&#8221; vs &#8220;Resource&#8221;<br>#4 Fame!<br>#3 Sell, Sell, Sell!<br>#2 Travel<br>#1 Flexible Schedule</p>



<p>BONUS considerations for the self-employed<br>#1 No Dress Code<br>#2 Unlimited Earning Potential<br>#3 Unlimited sick days/vacation<br>#4 Flexible Work Location<br>#5 Freedom to say &#8220;No&#8221; or turn down jobs</p><p>The post <a href="https://geekyboy.com/archives/1454">10 reasons to become a consultant or have a consulting business</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Zend Framework becomes Laminas project</title>
		<link>https://geekyboy.com/archives/1440</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Wed, 17 Apr 2019 14:16:13 +0000</pubDate>
				<category><![CDATA[apigility]]></category>
		<category><![CDATA[beachcasts]]></category>
		<category><![CDATA[expressive]]></category>
		<category><![CDATA[laminas project]]></category>
		<category><![CDATA[linux foundation]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend Framework 2]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[zend framework rebranding to laminas project]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1440</guid>

					<description><![CDATA[<p>Today it was announced that Zend Framework is being rebranded as the Laminas project. (drawn from the meaning &#8220;a thin layer&#8221;) Along with the rebrand came some other important changes as well. Yes, this includes Expressive and Apigility, so continue reading. Some History Zend Framework is one of the largest and oldest PHP frameworks and [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1440">Zend Framework becomes Laminas project</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-image aligncenter"><img decoding="async" loading="lazy" width="500" height="209" src="https://geekyboy.com/wp-content/uploads/2019/04/laminas-foundation-rgb.png" alt="" class="wp-image-1443" srcset="https://geekyboy.com/wp-content/uploads/2019/04/laminas-foundation-rgb.png 500w, https://geekyboy.com/wp-content/uploads/2019/04/laminas-foundation-rgb-300x125.png 300w" sizes="(max-width: 500px) 100vw, 500px" /></figure>



<p>Today it was announced that <a href="https://framework.zend.com/">Zend Framework</a> is being rebranded as the Laminas project. (drawn from the meaning &#8220;a thin layer&#8221;) Along with the rebrand came some other important changes as well. Yes, this includes <a href="https://getexpressive.org/">Expressive</a> and <a href="https://apigility.org/">Apigility</a>, so continue reading.</p>



<p class="has-medium-font-size"><strong>Some History</strong></p>



<p><a href="https://framework.zend.com/">Zend Framework</a> is one of the largest and oldest PHP frameworks and has become a staple for enterprise development around the world.  As of April 2019, it has over <strong>400 million</strong> lifetime downloads of all packages associated with the project, which has seen a 4-fold increase in just the last 2 years alone. Despite this amazing track record, up to now the project has been supported and guided single-handedly by <a href="http://www.zend.com/">Zend Technologies</a>, and later <a href="https://www.roguewave.com/">Rogue Wave Software</a>.</p>



<p class="has-medium-font-size"><strong>Awesome Changes</strong></p>



<p>Therefore, to continue this growth and receive the best support possible, the <a href="https://framework.zend.com/">Zend Framework</a> team is announcing that all projects under that umbrella will rebrand to a newly formed &#8220;<a href="https://getlaminas.org/">Laminas&#8221; project</a>&#8220;, which aims to continue its mission as an open source project hosted by the Linux Foundation. The transition will enable more companies to provide support for the projects they&#8217;ve come to depend on and help them continue to grow. As part of this transition, it is important for them to differentiate the open-source project from the <a href="http://www.zend.com/">Zend</a> commercial brand. Therefore, the new name &#8220;<a href="https://getlaminas.org/">Laminas&#8221; project</a> was created.</p>



<p>As part of this move, the <a href="https://getexpressive.org/">Expressive</a> microframework, <a href="https://apigility.org/">Apigility API framework</a>, as well as the <a href="https://framework.zend.com/">MVC framework</a>, will all be part of the <a href="https://getlaminas.org/">Laminas project</a>.</p>



<p>I will try to add more details as they become available to us all, and will likely also do a <a href="https://twitch.tv/beachcasts">Twitch</a> stream and <a href="https://www.youtube.com/c/beachcasts?sub_confirmation=1">YouTube</a> video with <a href="https://beachcasts.com"><g class="gr_ gr_3 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace" id="3" data-gr-id="3">Beachcasts</g></a>, and that video can be viewed <a href="https://youtu.be/CEIO90ocEDI">HERE</a>.</p>



<p class="has-medium-font-size"><strong>Support Laminas Project</strong></p>



<p>For more information, please see the <a href="https://getlaminas.org/">new site dedicated to the Laminas project</a>, and if you would like to become a member and/or support the project at the Linux Foundation (<a href="https://www.linuxfoundation.org/blog/2019/04/lf-forms-laminas-project/">their blog post</a>), please <a href="https://getlaminas.org/about/join">join and become a member</a>.</p>



<p class="has-medium-font-size"><strong>Impact on current users</strong></p>



<p>The framework team is working on scripts and tools to help users update namespaces and vendor packages with the renaming. See the video below for more info.</p>



<p class="has-medium-font-size"><strong>Beachcasts Video</strong></p>



<p>I added this, and a little more content about the Zend Framework rebranding to the Laminas project under the Linux Foundation. Check it out below.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Zend Framework becomes Laminas project at Linux Foundation" width="500" height="281" src="https://www.youtube.com/embed/CEIO90ocEDI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure><p>The post <a href="https://geekyboy.com/archives/1440">Zend Framework becomes Laminas project</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>10 bad things about consulting, and why it might not be for you</title>
		<link>https://geekyboy.com/archives/1432</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Tue, 16 Apr 2019 15:01:11 +0000</pubDate>
				<category><![CDATA[Adam Culp]]></category>
		<category><![CDATA[beachcasts]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[adam culp]]></category>
		<category><![CDATA[bad things about consulting jobs]]></category>
		<category><![CDATA[consulting job]]></category>
		<category><![CDATA[is consulting for you]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1432</guid>

					<description><![CDATA[<p>In this video, I share 10 bad things about being a consultant, and why a consulting job might not be a good fit for you. Adam Culp of Beachcasts shares points from his experience to help you figure out if being a PHP consultant is the right job for you. Or you can view this [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1432">10 bad things about consulting, and why it might not be for you</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" width="500" height="281" src="https://www.youtube.com/embed/ELE0G3e7h3c?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>In this video, I share 10 bad things about being a consultant, and why a consulting job might not be a good fit for you. Adam Culp of <a href="https://beachcasts.com">Beachcasts</a> shares points from his experience to help you figure out if being a PHP consultant is the right job for you.</p>



<p>Or you can view this video on YouTube at: <a href="https://youtu.be/ELE0G3e7h3c">https://youtu.be/ELE0G3e7h3c</a></p>



<p>Timeline:<br>#10 Travel<br>#9 No set schedule<br>#8 No upward mobility<br>#7 Not for the introverted<br>#6 Communication, communication, communication<br>#5 Swallowing pride<br>#4 Always be selling<br>#3 Problems!<br>#2 Expected to &#8220;know it all&#8221;<br>#1 No &#8220;new&#8221; projects</p>



<p>BONUS considerations for the self-employed<br>#1 accounting/collections<br>#2 taxes<br>#3 No sick days / vacation</p><p>The post <a href="https://geekyboy.com/archives/1432">10 bad things about consulting, and why it might not be for you</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to get lines of code in PHP with PHPLoc via CLI or using Docker</title>
		<link>https://geekyboy.com/archives/1427</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Fri, 05 Apr 2019 22:00:17 +0000</pubDate>
				<category><![CDATA[beachcasts]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[lines of code php]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1427</guid>

					<description><![CDATA[<p>This video shows how to get the lines of code in a PHP application by using PHPLoc from the command line or using Docker. PHPLoc is a command line application to generate a small but useful report. Adam Culp will show how to use it from a Docker Container using a Docker Image he created. [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1427">How to get lines of code in PHP with PHPLoc via CLI or using Docker</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" width="500" height="281" src="https://www.youtube.com/embed/HpC-Cvxj6oY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>This video shows how to get the lines of code in a PHP application by using PHPLoc from the command line or using Docker. PHPLoc is a command line application to generate a small but useful report. Adam Culp will show how to use it from a Docker Container using a Docker Image he created. PHPLoc demonstrated on the Concrete5 CMS codebase.</p>



<p>Key Topics:</p>



<ul><li>Why find the lines of code</li><li>PHPLoc is an application to find the lines of code in PHP</li><li>Different methods to use PHPLoc</li><li>How to use a Docker image to run PHPLoc</li><li>Comments as a code smell</li></ul>



<p>Associated Links:<br> <a href="https://en.wikipedia.org/wiki/Code_smell">https://en.wikipedia.org/wiki/Code_smell</a> &#8211; Code smells explained<br> <a href="https://www.docker.com/get-started">https://www.docker.com/get-started</a> &#8211; The place for developers to start with Docker<br> <a href="https://hub.docker.com/r/adamculp/php-code-quality">https://hub.docker.com/r/adamculp/php-code-quality</a> &#8211; link to the image used to build the Docker container used in this video<br> <a href="https://github.com/sebastianbergmann/phploc">https://github.com/sebastianbergmann/phploc</a> &#8211; location of the PHPLoc tool<br> <a href="https://www.concrete5.org/">https://www.concrete5.org/</a> &#8211; Concrete5 CMS code I&#8217;m using in this video</p><p>The post <a href="https://geekyboy.com/archives/1427">How to get lines of code in PHP with PHPLoc via CLI or using Docker</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What is Enterprise Ready?</title>
		<link>https://geekyboy.com/archives/1400</link>
					<comments>https://geekyboy.com/archives/1400#comments</comments>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Mon, 02 Apr 2018 16:19:09 +0000</pubDate>
				<category><![CDATA[enerprise ready]]></category>
		<category><![CDATA[enterprise php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Enterprise Ready]]></category>
		<category><![CDATA[php development]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1400</guid>

					<description><![CDATA[<p>First, let me clarify, this post is not about Star Trek and the starship we&#8217;ve all come to know. 😉 Further, this post is not to attack any one group, and rather is my (perhaps poor) attempt to help others gain some visibility into what large companies (Enterprises) do, or perhaps should, look for in [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1400">What is Enterprise Ready?</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">First, let me clarify, this post is not about Star Trek and the starship we&#8217;ve all come to know. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Further, this post is not to attack any one group, and rather is my (perhaps poor) attempt to help others gain some visibility into what large companies (Enterprises) do, or perhaps should, look for in software prior to using it.</p>
<h3>The Backstory</h3>
<p style="text-align: justify;">I saw some rumblings over the weekend between various communities where members of one were accusing another of not being &#8220;Enterprise Ready&#8221;. Of course, the others quickly responded that their tools were already being used in that capacity, therefore, they were &#8220;Enterprise Ready&#8221;. (If it swims like a duck, it must be a duck.)</p>
<p style="text-align: justify;">Following this, I saw many more statements from various folks saying, &#8220;We are Enterprise, and we use it, and it&#8217;s working fine.&#8221;, and &#8220;What is &#8216;Enterprise Ready&#8217; in any way?&#8221;</p>
<p style="text-align: justify;">I&#8217;m sorry folks, but just because a company &#8220;can&#8221; or &#8220;will&#8221; use a given tool doesn&#8217;t mean they &#8220;should&#8221;, and it certainly doesn&#8217;t mean a given tool is indeed ready for use in companies reporting to shareholders or having requirements to meet certain compliance thresholds.</p>
<h3>The Risks</h3>
<p style="text-align: justify;">There are no definitive guidelines to clearly state what &#8220;Enterprise Ready&#8221; really means, and there are certainly no lists of which applications are, or are not Enterprise Ready.</p>
<p style="text-align: justify;">Sure, there are different regulations for security, legal, and financial compliance. But even these only scratch the surface and do not clearly define what can/should be used. Especially when it comes to the many open-source software packages available.</p>
<p style="text-align: justify;">In many ways, it can come down to what a company is comfortable with. How much risk they are willing to accept. And in some cases, how much liability they are willing to ignore and/or absorb when things go sideways.</p>
<p style="text-align: justify;">On other fronts, a company&#8217;s choices are led by the future. Large enterprises try to plan ahead because they know it is hard to change later down the line. <em><strong>Choices made today are often felt for 10 to 20 years,</strong></em> so it is very important to ensure they do not get caught in the trap of using tools lacking support and/or no longer getting security updates.</p>
<h3>How It&#8217;s Made</h3>
<p style="text-align: justify;">I consult and work directly with, some of the largest companies in the world every day whom I consider &#8220;Enterprise&#8221; in size. Since there are no pre-made lists of tools that are definitely &#8220;Enterprise&#8221;, I will share what many of these companies look at when choosing a tool or software, prior to allowing it to be added to their portfolio for the next 10 years.</p>
<h3>The Requirements List</h3>
<p>So, off we go:</p>
<ul>
<li style="text-align: justify;"><strong><strong>Licensing<br />
</strong></strong>If software/code does not include a license, companies, and developers can&#8217;t use it. Making code public doesn&#8217;t automatically make it open for others to use. By default, all code is subject to copyright and private.Also, in the same vein, adding an open-source license doesn&#8217;t mean everyone can use it. Each open-source license carries certain criteria which can prevent companies from using the code behind them. So, be careful to understand the ramifications of the license applied to a software package.</li>
<li style="text-align: justify;"><strong><strong>Interoperability<br />
</strong></strong>Enterprise-level companies have lots of software/code. I often see 4+ million lines of code in applications, not including 3rd party code and frameworks. This means that libraries must be able to work together in order to be used.In PHP, the PHP-Fig has worked hard for many years in an attempt to create conventions that, if followed, allow PHP libraries and frameworks to work together more easily. Therefore, Enterprise level companies tend to use code that follows the many PSR standards set by this body. Meanwhile, tools that do not follow these standards, regardless of how awesome, are rejected by Enterprises.</p>
<p>Ask yourself, why should a company create internally maintained wrappers to facilitate &#8220;vendor lock-in&#8221; when another interoperable library doesn&#8217;t require such things?</li>
<li style="text-align: justify;"><strong><strong>Lock-in<br />
</strong></strong>If packages of code do not work well with other packages of code and somewhat force the use of tools created by the same entity, this is known as &#8220;vendor lock-in&#8221;. Thinking back to the days before open source became viable for common use, I can&#8217;t help but remember struggles with IBM, Microsoft, Oracle, and others. If one of their tools was used it required me to use others, resulting in even more costly licenses.Even when software &#8220;appears&#8221; free, &#8220;vendor lock-in&#8221; can exist, and this leads toward limiting options in the long run. Enterprises are finding that less &#8220;vendor lock-in&#8221; in their applications means they can make better decisions and pivot faster. Therefore, monolithic frameworks and packages are becoming undesirable in the Enterprise. Decoupled middleware, microservices, and frameworks are the desired flavor of Enterprise Ready.</p>
<p>I often speak with companies who say things like, &#8220;We want to switch to another framework, and we&#8217;ve chosen X.&#8221; But yet they can&#8217;t substantiate &#8220;why&#8221;. They use terms like &#8220;open&#8221; and &#8220;popular&#8221;, which prompts me to help them create a solid list of pain points leading them to their decision. Usually, we find the framework they were choosing will yield the same pain they desired to leave behind. The number one pain point is typically vendor lock-in.</li>
<li style="text-align: justify;"><strong><strong>Contributors<br />
</strong></strong>Another very important consideration among Enterprises &#8220;in the know&#8221; is the number of active contributors to a given software package.More contributors mean more eyeballs on the code and often result in fewer bugs and security issues in a given package. And for Enterprises, it can also mean bugs get fixed faster, or new features get added more quickly.</li>
<li style="text-align: justify;"><strong><strong>Bus Factor<br />
</strong></strong>The term &#8220;bus factor&#8221; is a rather cold term describing if the leaders are hit by a bus, and what the effect on a project would be.  If a popular package has a single &#8220;head&#8221;, and that person were to disappear for some reason, would the package continue without that person&#8217;s vision, drive, and direction?I know of many popular PHP packages that have plans in place to facilitate such a tragic event. The more popular a package gets, the more important this is. Of course, having such a plan doesn&#8217;t always mean the &#8220;bus factor&#8221; has been avoided. Often the leader is the glue that keeps it all together, and disruption can lead to the death of very strong communities. However, it is important to ensure these plans exist for true Enterprise adoption.</li>
<li style="text-align: justify;"><strong><strong>Documentation<br />
</strong></strong>No matter how great a package is, or how widely it is adopted, documentation is important to ensure developers can use the tools provided. Some have said that a good developer can read the code and figure out how to use a framework, but that is not what leads to widespread usage. In order to gain true market share it is vital to have great documentation making it easier for anybody to use something.A truly strong community helps in this area and is self-fulfilling, as good documentation leads to more usage, and more usage leads to a stronger community, which aids in the creation of better documentation. Companies are more likely to use a package if documentation helps their developers create faster.</li>
<li style="text-align: justify;"><strong><strong>Support<br />
</strong></strong>Despite how good documentation is, occasionally we all get stuck and need a helping hand. Eventually, for a great package to be leveraged by Enterprise it is required that an Enterprise can somehow reach out for support. In the early days of a library, this could simply be blog posts from &#8220;fanboys&#8221;, but for widespread use in Enterprises, it may mean more interactive things like phone or email support, consulting, and a &#8220;throat to choke&#8221; if things go wrong.Good support is multi-pronged: support boards, email, consulting, &#8220;fanboy&#8221; network, outside agencies available, and other forms of community forums.</li>
<li style="text-align: justify;"><strong><strong>Compliance<br />
</strong></strong>If a package is performing activities with a database, filesystem, personal information or content, encryption, and authorization, there may be regulations in place that Enterprise level companies must be in compliance with.It is important to Enterprises that the code they will use also be compliant, or at a minimum make it easy for the company to remain compliant while still leveraging the package.</li>
<li style="text-align: justify;"><strong><strong>Longevity<br />
</strong></strong>We all like the new and shiny. However, for Enterprises, this can be a negative. They require things to be a bit more tested, and &#8220;aged&#8221; in some cases. If a library has been around for a while it can mean a more mature API, fewer bugs, more security, and better documentation and examples.At the same time, if a package has been on the same version for too long it can also indicate stale and/or dead libraries that will someday no longer be supported.</li>
<li style="text-align: justify;"><strong>Upgradeable<br />
</strong>How easy is it to upgrade the software from one version to the next, or how easy is it to upgrade from another library, are considerations prior to using a software package.</p>
<p style="text-align: justify;">Many leading packages go to great pains to prevent breakage between versions and provide documentation to allow users a step-by-step process for migration. I&#8217;ve even seen some create tools that handle the necessary pieces. A company must consider the past track record of a package prior to usage.</p>
</li>
<li style="text-align: justify;"><strong>Roadmap<br />
</strong>Enterprise applications tend to stick around for a very long time. It is easy to find applications that have been around for 10 years or longer in some companies. Therefore, one thing companies look for is an accurate and active roadmap.</p>
<p>A roadmap can indicate if there are good ideas being developed and if there are major changes coming in the future that a company may need to be ready for. It can also indicate when a package has lost its way and is no longer paying attention to its users, and an exit may be a good idea.</p>
<p>In any way, a good roadmap is an easy way to keep Enterprises informed.</li>
</ul>
<hr />
<p>I hope you found this post informational. Many developers struggle to understand what defines &#8220;Enterprise Ready&#8221;, or even why it is a thing to be considered. While there is no definitive list, I have attempted to share what the many Enterprise level companies I&#8217;ve consulted with look for.</p>
<p>If I think of more points, or if others share something I feel is important enough, I will return here and update this.</p><p>The post <a href="https://geekyboy.com/archives/1400">What is Enterprise Ready?</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://geekyboy.com/archives/1400/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Stop the pain, upgrade to PHP 7</title>
		<link>https://geekyboy.com/archives/1376</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Fri, 06 Oct 2017 15:13:12 +0000</pubDate>
				<category><![CDATA[applications]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[php7]]></category>
		<category><![CDATA[upgrading php]]></category>
		<category><![CDATA[web programming]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1376</guid>

					<description><![CDATA[<p>When I was young I played football at my local middle school&#8230;very terribly. I didn&#8217;t enjoy running with the heavy pads in the heat, and I definitely didn&#8217;t enjoy running into and hitting the other kids, most of which were larger than me. But in high school that all changed. Why? Because in middle school [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1376">Stop the pain, upgrade to PHP 7</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">When I was young I played football at my local middle school&#8230;very terribly. I didn&#8217;t enjoy running with the heavy pads in the heat, and I definitely didn&#8217;t enjoy running into and hitting the other kids, most of which were larger than me. But in high school that all changed. Why? Because in middle school football was painful. Meanwhile in high school, well, it was still painful but there was something more pleasurable to offset the pain. It was the praises from the coach and the sounds of people cheering my name that truly made the difference.</p>
<p style="text-align: justify;">See, in middle school, the coach seemed to focus more on the larger kids who could bully others or the popular kids whose parents were the cornerstone of our small community. However, in 9th grade, it changed a bit because the coach was great at distributing his attention to the entire team. He would tell me &#8220;good job&#8221;, or &#8220;you can do better&#8221;, and he even let me play in a game while my skills were catching up. These are things I didn&#8217;t have before, and they made a huge difference. I came to love playing and worked harder than I ever had to stay first string all season long rather than being satisfied with sitting on the sidelines watching others play.</p>
<p style="text-align: justify;">So, now you may be asking, &#8220;What does this have to do with upgrading to PHP version 7?&#8221; The answer is that many are letting the pain of moving to PHP 7 prevent them from experiencing pleasure and rewards.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/10/php7-elroubio.jpg"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1377" src="https://geekyboy.com/wp-content/uploads/2017/10/php7-elroubio.jpg" alt="" width="458" height="230" srcset="https://geekyboy.com/wp-content/uploads/2017/10/php7-elroubio.jpg 458w, https://geekyboy.com/wp-content/uploads/2017/10/php7-elroubio-300x151.jpg 300w" sizes="(max-width: 458px) 100vw, 458px" /></a></p>
<p style="text-align: justify;"><strong>PHP version 7.0 was released almost 2 years ago.</strong> (1 year and 10 months before this post to be exact.) And many are still running PHP version 5. <em>something</em>. As a matter of fact, PHP version 7.0 is already going to run out of active community support inÂ only 1 month and will only receive security fixes for another year after that.</p>
<p style="text-align: justify;">You can see the supported versions of PHP at <a href="http://php.net/supported-versions.php">http://php.net/supported-versions.php</a></p>
<p style="text-align: justify;"><strong>The Pains</strong></p>
<p style="text-align: justify;">I get it. Upgrading to a new major version is painful. There are backward compatibility issues that caused it to be a new major version, to begin with, and now we need to jump through some hoops without any good reason. I mean, the app already works, right?</p>
<p style="text-align: justify;">Add to this that there may be compatibility issues that have nothing to do specifically with PHP, but rather the individual libraries and packages we used in the past have not been updated yet. Dependency hell is only a step away.</p>
<p style="text-align: justify;">Also, how can we possibly endure the pain of explaining why we should upgrade to PHP version 7+ to management!?!</p>
<p>So we should just give up. Perhaps remaining on PHP 5.4, 5.5, or 5.6 is not so bad after all.</p>
<p>NO WAY! Read on!</p>
<p><strong>Acclimation</strong></p>
<p style="text-align: justify;">Those pains aside, there are more that we&#8217;ve become acclimated to over time. We avoid upgrading because we&#8217;ve become used to the pain faced on a daily basis with what we currently have. It has become our comfort level. Meaning, we avoid the pleasures of advancing because we settle for what we already know.</p>
<p style="text-align: justify;"><strong>Pleasure</strong></p>
<p style="text-align: justify;">In case you haven&#8217;t heard, PHP 7 brings a whole new level of <em>FAST</em>. Some companies have even recorded the speeds of some apps to double. You read that right, &#8220;Double the speed in some apps.&#8221; That means customers get served web pages in half the time. Internal employees are able to navigate intranets, accounting software, and other internal apps half the time. Imagine the productivity gains and reductions in salary required to have employees sitting at a screen waiting for the next page to come up. Imagine the customers who don&#8217;t click away from our products because it now loads faster!</p>
<p style="text-align: justify;">In addition, many companies also noticed their resources (servers) running PHP apps with PHP 7 have dropped drastically. (about half) Meaning they can serve the same PHP applications on half the number of servers they used previously. If a company was using 100 servers to do business, they are now able to do the same thing with only 50 servers! That is a saving of 50 fewer servers needing to be hosted. Imagine the carbon footprint impact of that!</p>
<p><em>Note: Your mileage may vary, but many have shared real-time stats on this.</em></p>
<p>Some supporting posts and stats:</p>
<ul>
<li><a href="https://kinsta.com/blog/hhvm-vs-php-7/">HHVM vs PHP 7</a></li>
<li><a href="https://pantheon.io/blog/php-7-easiest-performance-optimization-i-ever-made">Drupal and WordPress on Pantheon</a></li>
<li><a href="http://resources.roguewave.com/Maximize_Performance_PHP_7.html">Whitepaper from Rogue Wave and Zend</a></li>
<li><a href="https://www.cloudways.com/blog/php-5-6-vs-php-7-symfony-benchmarks/">A Symfony 3 benchmark from PHP 5.6 to 7.0</a></li>
<li><a href="https://dzone.com/articles/php-56-vs-php-7-performance-benchmarks-with-larave">A Laravel 5.4 benchmark from PHP 5.6 to 7.0</a></li>
<li><a href="http://www.zend.com/en/resources/php7_infographic">Infographic of many PHP apps and their benchmarks</a></li>
</ul>
<p style="text-align: justify;">There are other pleasures of upgrading to PHP version 7.0. Among them are new features in the PHP language, such as <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.scalar-type-declarations">scalar type declarations</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.return-type-declarations">return type declarations</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op">null coalescing operator</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op">spaceship operator</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.define-array">constant array using define()</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.anonymous-classes">anonymous classes</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.unicode-codepoint-escape-syntax">Unicode codepoint escape syntax</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.closure-call-method">Closure::call()</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.filtered-unserialize">Filtered unserialize()</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.intlchar">IntlChar</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.expectations">Expectations</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.group-use-declarations">Group use Declarations</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.generator-return-expressions">Generator Return Expressions</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.generator-delegation">Generator Delegation</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.intdiv" data-wplink-edit="true">Integer division with </a>intdiv(), <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.session-options">Session options</a>, <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.preg-repace-callback-array-function">preg_replace_callback_array()</a>, and <a href="http://php.net/manual/en/migration70.new-features.php#migration70.new-features.csprng-functions">CSPRNG functions</a></p>
<p style="text-align: justify;">The upgrade to PHP version 7.1 brings pleasures in the form of even more performance improvements, as well as, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.nullable-types">Nullable types</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.void-functions">Void functions</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.symmetric-array-destructuring">Symmetric Array Destructuring</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.class-constant-visibility">Class Constant Visibility</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.iterable-pseudo-type">iterable pseudo type</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.mulit-catch-exception-handling">multi-catch exception handling</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.support-for-keys-in-list">support for keys in list()</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.support-for-negative-string-offsets">support for negative string offsets</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.convert-callables-to-closures">convert callables to closures</a>, <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.asynchronous-signal-handling">asynchronous signal handling</a>, and <a href="http://php.net/manual/en/migration71.new-features.php#migration71.new-features.http2-server-push-support-in-ext-curl">HTTP/2 server push support in ext/curl</a></p>
<p>And PHP version 7.2 also looks to carry many more great things, as PHP 7.3 is gaining form.</p>
<p><strong>In Closing</strong></p>
<p>Yes, there may be a little pain in upgrading to PHP 7, but overall the good parts far outweigh the pain. You&#8217;ll be glad you did it.</p>
<p style="text-align: justify;">What are you waiting for? Get out there and feel good by upgrading your apps and servers to PHP 7 today!</p>
<p>There is a great recorded webinar sharing more thoughts on <a href="http://blog.zend.com/2017/09/14/webinar-recap-avoiding-php-migration-hiccups/">migrating to PHP 7</a>.</p>
<p>Happy PHP&#8217;ing!</p><p>The post <a href="https://geekyboy.com/archives/1376">Stop the pain, upgrade to PHP 7</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Easy Docker dev environments for PHP with CloudEstuary</title>
		<link>https://geekyboy.com/archives/1321</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Sun, 16 Apr 2017 18:13:38 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[cloudestuary]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker-compose]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1321</guid>

					<description><![CDATA[<p>Lately I&#8217;ve been messing around with Docker, and specifically with containerizing PHP applications to perform quick services, such as static analysis of PHP code, compatibility of existing PHP code to specific versions of PHP, and performing security checks on PHP libraries included in my projects. However, I&#8217;ve not created a development environment for my projects [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1321">Easy Docker dev environments for PHP with CloudEstuary</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Lately I&#8217;ve been messing around with Docker, and specifically with containerizing PHP applications to perform quick services, such as <a href="https://hub.docker.com/r/adamculp/php-code-quality/">static analysis of PHP code</a>, <a href="https://hub.docker.com/r/adamculp/php-compatibility-check/">compatibility of existing PHP code</a> to specific versions of PHP, and performing <a href="https://hub.docker.com/r/adamculp/php-security-checker/">security checks on PHP libraries</a> included in my projects. However, I&#8217;ve not created a development environment for my projects using Docker.</p>
<p style="text-align: justify;">Like most professional PHP developers, I&#8217;ve been using <a href="https://www.vagrantup.com/">Vagrant</a> to create virtual environments for most of my development. It works fantastic, but one of the downfalls is that it leads to a largeÂ VM file for each virtual machine taking up disk space on my laptop. This is unfortunate for a consultant like myself, who createsÂ a separate VM for each client.</p>
<p style="text-align: justify;">But today I found another way. A way to easily create PHP development environments with Docker. The fine folks at <a href="https://cloudestuary.com">CloudEstuary</a>Â have created an easy to use web-based tool to create PHP development environments (yml files) for use withÂ <a href="https://docs.docker.com/compose/overview/">Docker-compose</a>.</p>
<p style="text-align: justify;"><a href="https://cloudestuary.com"><img decoding="async" loading="lazy" class="aligncenter wp-image-1331 size-medium" src="https://geekyboy.com/wp-content/uploads/2017/04/6e046ae63700cd6bd28c2b9f5e613fe3-300x300.png" alt="CloudEstuary" width="300" height="300" srcset="https://geekyboy.com/wp-content/uploads/2017/04/6e046ae63700cd6bd28c2b9f5e613fe3-300x300.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/6e046ae63700cd6bd28c2b9f5e613fe3-150x150.png 150w, https://geekyboy.com/wp-content/uploads/2017/04/6e046ae63700cd6bd28c2b9f5e613fe3.png 512w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">The entire process was super easy, assuming we already have Docker and Docker-Compose installed.</p>
<h3 style="text-align: justify;">Create a Project</h3>
<p style="text-align: justify;">To start I selected the framework, of which I decided to try this with the very popularÂ <a href="https://framework.zend.com/">Zend Framework</a>Â in an application I&#8217;ve been working on, so I clicked the Zend Framework icon. The tool chosen will cause the runtime settings in the next section to be altered to accommodate.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.24.33.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1326" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.24.33-1024x164.png" alt="" width="660" height="106" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.24.33-1024x164.png 1024w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.24.33-300x48.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.24.33-768x123.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.24.33.png 1936w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p style="text-align: justify;">Next I added a custom name for my project and chose PHP 7.1 for the Runtime, butÂ left the rest of the items set as default.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.25.29.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1327" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.25.29-1024x406.png" alt="" width="660" height="262" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.25.29-1024x406.png 1024w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.25.29-300x119.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.25.29-768x305.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.25.29.png 1900w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p style="text-align: justify;">Following that, there is a list of pre-existing Addons to be enabledÂ as desired. It seems Postgres is selected by default, but it is simple enough to Remove it and select another solution if desired.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.26.54.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1328" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.26.54-1024x754.png" alt="" width="660" height="486" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.26.54-1024x754.png 1024w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.26.54-300x221.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.26.54-768x566.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.26.54.png 1914w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p style="text-align: justify;">Â Then the final step, as of this writing, was to add any workers if I desired. I&#8217;m not sure of the limits of what can be put there, but I&#8217;m sure documentation will be forthcoming.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.29.30.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1330" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.29.30-1024x201.png" alt="" width="660" height="130" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.29.30-1024x201.png 1024w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.29.30-300x59.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.29.30-768x151.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.29.30.png 1902w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p style="text-align: justify;">Then, finally, I was able to click the Generate Docker Compose button to receive the docker-compose.yml file. The final result was a brief explanation of what to do next, and of course, the file contents.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.34.05.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1332" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.34.05-279x300.png" alt="" width="279" height="300" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.34.05-279x300.png 279w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.34.05-768x825.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.34.05.png 922w" sizes="(max-width: 279px) 100vw, 279px" /></a></p>
<p style="text-align: justify;">The docker-compose file expects to be placed in a directory where the application to be served resides in an &#8216;html&#8217; directory. Don&#8217;t worry, you can change this as needed. In my case I simply change the following portions of the yml file (3&#8217;ish places):</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.41.22.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1333" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.41.22-300x49.png" alt="" width="300" height="49" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.41.22-300x49.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.41.22.png 542w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">To become:</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.42.21.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1334" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.42.21-300x58.png" alt="" width="300" height="58" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.42.21-300x58.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.42.21-768x147.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.42.21-1024x197.png 1024w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.42.21.png 1052w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">I placed the docker-compose.yml file toÂ the root of my Zend Framework application. (on the same level as the composer.json file)</p>
<p style="text-align: justify;">Additionally, I have a local installation of Apache running on port 80, so the docker-compose file wouldÂ not work for me out of the box. It sets the Nginx server port forwarding to expect the host port 80 to forward to the Docker container port 80. So I updated the ports from this:</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.45.34.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1335" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.45.34-300x80.png" alt="" width="300" height="80" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.45.34-300x80.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.45.34.png 328w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">To become this:</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.46.28.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1336" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.46.28-300x67.png" alt="" width="300" height="67" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.46.28-300x67.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.46.28-768x173.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.46.28.png 810w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h3 style="text-align: justify;">Use It</h3>
<p style="text-align: justify;">Now I was ready to fire up the Docker container. I did this via CLI by navigating to the root of the application and issuing the docker-compose command.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.53.26.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1337" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.53.26-300x38.png" alt="" width="300" height="38" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.53.26-300x38.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-12.53.26.png 558w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">After a couple minutes of Docker fetching various images, the container was running. Note: the terminal continues showing what it happening inside the container. (Nginx and other apps logs are output to the terminal)</p>
<p style="text-align: justify;">Now I was able to pull up my awesome Zend Framework PHP app in the browser using the address http://localhost:8888</p>
<h3 style="text-align: justify;">Add Account</h3>
<p style="text-align: justify;">One other nice feature of the site is the ability to create an account. I am told there will be more functionality around this later, but for now it allows you to see a list of all projects you&#8217;ve created, and enables you to edit the configurations.</p>
<p style="text-align: justify;">Simply click the link to create an account:</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.49.png"><img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-1342" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.49-300x114.png" alt="" width="300" height="114" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.49-300x114.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.49.png 484w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">Then you can see projects created while you were logged in via the &#8220;My Projects&#8221; menu item.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.33.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1343" src="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.33-1024x174.png" alt="" width="660" height="112" srcset="https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.33-1024x174.png 1024w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.33-300x51.png 300w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.33-768x131.png 768w, https://geekyboy.com/wp-content/uploads/2017/04/Screenshot-2017-04-16-15.49.33.png 1282w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<h3 style="text-align: justify;">Closing</h3>
<p style="text-align: justify;">I hope you found this post helpful. Using Docker to create PHP development environments is easy. Enjoy!</p>
<p style="text-align: justify;"><p>The post <a href="https://geekyboy.com/archives/1321">Easy Docker dev environments for PHP with CloudEstuary</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting up local step debugging with Zend Studio</title>
		<link>https://geekyboy.com/archives/1310</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Tue, 21 Feb 2017 14:30:35 +0000</pubDate>
				<category><![CDATA[applications]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Z-Ray]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[Zend Server]]></category>
		<category><![CDATA[Zend Studio]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[zend debugger]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1310</guid>

					<description><![CDATA[<p>Setting up debugging in an IDEÂ with a local PHP development environment has gotten so easy it can be done in a coupleÂ automated steps. In this post I will demonstrate how to get step debugging functioning with Zend Studio and Zend Debugger when the server is set up on a local environment. To begin with, I [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1310">Setting up local step debugging with Zend Studio</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Setting up debugging in an IDEÂ with a local PHP development environment has gotten so easy it can be done in a coupleÂ automated steps. In this post I will demonstrate how to get step debugging functioning with <a href="http://www.zend.com/en/products/studio">Zend Studio</a> and Zend Debugger when the server is set up on a local environment.</p>
<p style="text-align: justify;">To begin with, I had the following:</p>
<ul style="text-align: justify;">
<li>Local installation of <a href="http://www.zend.com/en/products/zend_server">Zend Server</a> 8.5.+ (basic LAMP stack, but with Zend Debugger included in the Zend Server installation). Alternatively I could have had a vanilla LAMP environment with Xdebug.</li>
<li>Ensure that <a href="http://www.zend.com/en/products/server/z-ray">Z-Ray</a> is active in the Zend Server settings.</li>
<li>A local project set up on Zend Studio, without the server set up in the Zend StudioÂ project configuration. (in this example I have a <a href="https://zendframework.github.io/zend-expressive/">Zend Expressive</a> Skeleton ready)</li>
<li>The local project set up as an Apache virtualhost.</li>
</ul>
<p style="text-align: justify;">Ensure Zend Studio is runningÂ with the project we will debug open.</p>
<p style="text-align: justify;">In a browser with the application rendered I click the debug icon in the Z-Ray toolbar at the foot of the window, and select the desired debugging action.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32.png"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1292" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32.png" alt="" width="522" height="348" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32.png 522w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32-300x200.png 300w" sizes="(max-width: 522px) 100vw, 522px" /></a></p>
<p style="text-align: justify;">This will cause Zend Studio to prompt if we desire to use the Debug Perspective after it receives the debug connection from Zend Debugger. In most cases we can simply click YesÂ and let things happen normally.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-12-29-23.png"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1309" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-12-29-23.png" alt="" width="695" height="333" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-12-29-23.png 695w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-12-29-23-300x144.png 300w" sizes="(max-width: 695px) 100vw, 695px" /></a></p>
<p style="text-align: justify;">That&#8217;s about it, we are debugging!</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2016/04/Screenshot-from-2016-04-03-152724.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1231" src="https://geekyboy.com/wp-content/uploads/2016/04/Screenshot-from-2016-04-03-152724-1024x621.png" alt="" width="660" height="400" srcset="https://geekyboy.com/wp-content/uploads/2016/04/Screenshot-from-2016-04-03-152724-1024x621.png 1024w, https://geekyboy.com/wp-content/uploads/2016/04/Screenshot-from-2016-04-03-152724-300x182.png 300w, https://geekyboy.com/wp-content/uploads/2016/04/Screenshot-from-2016-04-03-152724-768x466.png 768w, https://geekyboy.com/wp-content/uploads/2016/04/Screenshot-from-2016-04-03-152724.png 1385w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p style="text-align: justify;"><strong>Closing</strong></p>
<p style="text-align: justify;">This was a very simplistic local development environment setup. We didn&#8217;t have a firewall to contend with, and the server was set up locally rather than insideÂ a virtual machine. I have other posts, linked below, to help with some of these alternative setups.</p>
<p style="text-align: justify;">Happy Debugging!</p>
<p style="text-align: justify;">Other posts on Debugging you may find helpful:</p>
<ul>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1220">Setting up Remote Debugging with Zend Studio</a></li>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1208">PhpStorm and debugging IP address issue</a></li>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1242">Using an SSH tunnel to step debug through a firewall</a></li>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1289">Setting up local step debugging with PhpStorm</a></li>
</ul><p>The post <a href="https://geekyboy.com/archives/1310">Setting up local step debugging with Zend Studio</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Setting up local step debugging with PhpStorm</title>
		<link>https://geekyboy.com/archives/1289</link>
		
		<dc:creator><![CDATA[Adam]]></dc:creator>
		<pubDate>Tue, 14 Feb 2017 14:31:46 +0000</pubDate>
				<category><![CDATA[applications]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpstorm]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Z-Ray]]></category>
		<category><![CDATA[Zend Server]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[zend debugger]]></category>
		<guid isPermaLink="false">https://geekyboy.com/?p=1289</guid>

					<description><![CDATA[<p>Setting up PHP debugging in an IDEÂ with a local development environment has gotten so easy it can be done in a few automated steps. In this post I will demonstrate how to get step debugging functioning with PhpStorm and Zend Debugger when the server is set up on a local environment. To begin with, I [&#8230;]</p>
<p>The post <a href="https://geekyboy.com/archives/1289">Setting up local step debugging with PhpStorm</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Setting up PHP debugging in an IDEÂ with a local development environment has gotten so easy it can be done in a few automated steps. In this post I will demonstrate how to get step debugging functioning with <a href="https://www.jetbrains.com/phpstorm/">PhpStorm</a> and Zend Debugger when the server is set up on a local environment.</p>
<p style="text-align: justify;">To begin with, I had the following:</p>
<ul style="text-align: justify;">
<li>Local installation of <a href="http://www.zend.com/en/products/zend_server">Zend Server</a> 8.5.+ (basic LAMP stack, but with Zend Debugger included in the Zend Server installation). Alternatively I could have had a vanilla LAMP environment with Xdebug.</li>
<li>Ensure that <a href="http://www.zend.com/en/products/server/z-ray">Z-Ray</a> is active in the Zend Server settings.</li>
<li>A local project set up on PhpStorm, without the server set up in the PhpStorm project configuration. (in this example I have a <a href="https://zendframework.github.io/zend-expressive/">Zend Expressive</a> Skeleton ready)</li>
<li>The local project set up as an Apache virtualhost.</li>
</ul>
<p style="text-align: justify;">With the project open in PhpStorm I click the icon to inform the IDE to start listening for debugging sessions. (Usually in the upper right corner, looks like a telephone receiver with a red indicator that it is not listening, and turns green when you click it)</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-53-44.png"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1291" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-53-44.png" alt="" width="375" height="294" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-53-44.png 375w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-53-44-300x235.png 300w" sizes="(max-width: 375px) 100vw, 375px" /></a></p>
<p style="text-align: justify;">Then a browser with the application rendered I click the debug icon in the Z-Ray toolbar at the foot of the window, and select the desired debugging action.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32.png"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1292" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32.png" alt="" width="522" height="348" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32.png 522w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-54-32-300x200.png 300w" sizes="(max-width: 522px) 100vw, 522px" /></a></p>
<p style="text-align: justify;">This will cause PhpStorm to prompt after it receives the debug connection from Zend Debugger. In most cases we can simply click Accept and let things happen normally.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-03.png"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1293" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-03.png" alt="" width="606" height="471" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-03.png 606w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-03-300x233.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></a></p>
<p style="text-align: justify;">That&#8217;s about it, we are debugging!</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-32.png"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-1294" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-32-1024x675.png" alt="" width="660" height="435" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-32-1024x675.png 1024w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-32-300x198.png 300w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-32-768x506.png 768w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-56-32.png 1329w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
<p style="text-align: justify;">Behind the scenes, PhpStorm created a site and associated it with the project.</p>
<p style="text-align: justify;"><a href="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-57-05.png"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1295" src="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-57-05.png" alt="" width="975" height="473" srcset="https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-57-05.png 975w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-57-05-300x146.png 300w, https://geekyboy.com/wp-content/uploads/2017/02/Screenshot-from-2017-02-14-08-57-05-768x373.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></a></p>
<p style="text-align: justify;">Of course we could have created the serverÂ ahead of time and not be prompted to Accept the incoming connection, but what is the fun in that?</p>
<p style="text-align: justify;"><strong>Closing</strong></p>
<p style="text-align: justify;">This was a very simplistic local development environment setup. We didn&#8217;t have a firewall to contend with, and the server was set up locally rather than insideÂ a virtual machine. I have other posts, linked below, to help with some of these alternative setups.</p>
<p style="text-align: justify;">Happy Debugging!</p>
<p style="text-align: justify;">Other posts on Debugging you may find helpful:</p>
<ul>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1220">Setting up Remote Debugging with Zend Studio</a></li>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1208">PhpStorm and debugging IP address issue</a></li>
<li style="text-align: justify;"><a href="https://geekyboy.com/archives/1242">Using an SSH tunnel to step debug through a firewall</a></li>
</ul><p>The post <a href="https://geekyboy.com/archives/1289">Setting up local step debugging with PhpStorm</a> first appeared on <a href="https://geekyboy.com">GeekyBoy.com</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
