<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[JeffreyMeagher]]></title><description><![CDATA[JeffreyMeagher]]></description><link>http://jeffreymeagher.com/</link><image><url>http://jeffreymeagher.com/favicon.png</url><title>JeffreyMeagher</title><link>http://jeffreymeagher.com/</link></image><generator>Ghost 5.26</generator><lastBuildDate>Mon, 06 Apr 2026 19:00:39 GMT</lastBuildDate><atom:link href="http://jeffreymeagher.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Host Ghost on Ploi]]></title><description><![CDATA[<p>Running multiple PHP versions on a server by yourself can be a real pain in the ass. Being a developer, I just want to get things out on the web. &#xA0;Test a new product here, play with a new technology there. So recently I started with Ploi as a</p>]]></description><link>http://jeffreymeagher.com/host-ghost-on-ploi/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4b7</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Thu, 21 Oct 2021 02:03:41 GMT</pubDate><media:content url="http://jeffreymeagher.com/content/images/2021/10/ploi-ghost-1.png" medium="image"/><content:encoded><![CDATA[<img src="http://jeffreymeagher.com/content/images/2021/10/ploi-ghost-1.png" alt="Host Ghost on Ploi"><p>Running multiple PHP versions on a server by yourself can be a real pain in the ass. Being a developer, I just want to get things out on the web. &#xA0;Test a new product here, play with a new technology there. So recently I started with Ploi as a way to help more easily manage my PHP versions on the server set up with the currently acceptable <em>best practice</em> for speed and security. </p><p>Ploi does an excellent job with all this PHP. They provide extra tools for Laravel projects, WordPress installs, CakePHP, etc. &#xA0;And recently they&apos;ve added node support. This blog is made using Ghost, a node project. After moving all my other projects over to Ploi, I was a bit annoyed that I would have to keep my old server running just to host a few Ghost blogs. Then an email came touting a new feature on Ploi - Node.js. </p><p>I followed the suggestions, installed Node, tried to get Ghost installed, and was <em>thwarted</em>! Using the Ghost command line requires some special <code>sudo</code> privileges so that it can set up permissions correctly after the install. But I have my sites set up under separate users on the server in hopes that it will be less attractive to those crazy hackers (at least that&apos;s what I tell myself), and don&apos;t want to put each of those users in as sudoers. &#xA0;Luckily, there are other ways to install ghost! &#xA0;If you have the same issue, check out this article from <a href="https://nehalist.io/installing-ghost-1-0-without-ghost-cli/">nehalist.io</a>. &#xA0;It&apos;s outdated now, since it&apos;s talking about installing version 1.0, but you can definitely get the idea and make any necessary changes to get that thing installed!</p><p>Now Ghost&apos;s installed, it&apos;s running, and I configured the NodeJS settings before spawning a new instance. &#xA0;I loaded up the URL and... 502 Bad Gateway. Check out the logs and everything looks good; the site&apos;s up, but it&apos;s not accepting connections through the reverse proxy for some odd reason. Not wanting to waste a ton of time with this, I looked for ways to make sure that Ghost was always running the background with Supervisor, manually, instead of going through Ploi&apos;s admin section. After getting that set up, we had a site working perfectly!</p><p>I run ubuntu, so supervisor config is under <code>/etc/supervices/conf.d</code>, and I quickly whipped up a conf file with the help of <a href="http://ahmed.amayem.com/running-a-node-js-app-ghost-in-the-background-continuously-with-supervisor-supervisord/">Ahmed Amayem</a>.</p><!--kg-card-begin: markdown--><pre><code>[program:woodnbooze_ghost]
command = node /home/woodn...com/index.js
directory = /home/woodn...com
user = woodn...
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/woodnbooze_ghost.log
stderr_logfile = /var/log/supervisor/woodnbooze_ghost_err.log
environment = NODE_ENV=&quot;production&quot;
</code></pre>
<!--kg-card-end: markdown--><p>Restart supervisor and it&apos;ll pick up this config file. Since Ploi was already set with nginx to reverse proxy requests off to the ghost node server on the correct port, so as soon as ghost starts up, your web address starts working! &#xA0;Finally. </p><p>Of course, the easy way out of all of this is to pay for ghost hosting at ghost.org and just let them deal with all the node things if you don&apos;t want to bother with any of it yourself. &#xA0; &#xA0;</p>]]></content:encoded></item><item><title><![CDATA[Veronica Mars Kickstarter Delivery Failure]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;m a backer of the Veronica Mars kickstarter campaign. As one of my first backings, I was a bit overwhelmed by the options, but settled on th $35 level so that I&apos;d be guaranteed a digital copy a few days after the theatrical release. You&apos;</p>]]></description><link>http://jeffreymeagher.com/veronica-mars-kickstarter-delivery-failure/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4b3</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Sat, 15 Mar 2014 03:00:25 GMT</pubDate><media:content url="http://jeffreymeagher.com/content/images/2018/08/veronica_mars.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://jeffreymeagher.com/content/images/2018/08/veronica_mars.jpg" alt="Veronica Mars Kickstarter Delivery Failure"><p>I&apos;m a backer of the Veronica Mars kickstarter campaign. As one of my first backings, I was a bit overwhelmed by the options, but settled on th $35 level so that I&apos;d be guaranteed a digital copy a few days after the theatrical release. You&apos;ve probably heard how much of a clusterfuck the whole release has been.</p>
<p>First, I backed this campaign to get a movie. Second, I backed this campaign to get a movie earlier than the Bluray/DVD release as movie theatres kind of creep me out with their super-sticky floors (that can&apos;t just be spilled pop) and their smell of popcorn and body odor. Perhaps back in the day, before all the over-comercialization and food, movie theaters would have had their appeal to me.</p>
<p>When I heard that the digital copies would be released to those who did and didn&apos;t back the campaign on the same day, I immediately wondered if the servers housing this digitial copy would be able to handle the demand the 91,000 backers alone would put on it, not to mention the rest of the world that wants to (and would now be able to) watch the movie right away.  I was prepared to start the download of the movie in the morning before I left for work in hopes it would be downloaded by this evening so my wife and I could watch it.</p>
<p>The next big blow: the movie is only being released to backers through ultraviolet and Flixster. Questionably the worst streaming service out there. It&apos;s for your computer, or your mobile device. What&apos;s the point of getting to watch a movie on the day its released if you have to watch it on your tiny computer instead of a nice home theatre with digital surround?</p>
<p>With the plethora of digital equipment in my house, I figured I would be able to somehow get it on to my TV. My bluray player connects to BestBuy&apos;s CinemaNow, and Vudu. My AppleTV would be able to AirPlay anything on my iMac (although not my MacBook Pro cause it&apos;s too old.) My smartTV also has some streaming options.</p>
<p>Flixster connected to Ultraviolet which connected to BestBuy&apos;s CinemaNow which I was able to open on my Bluray player. Awesome. I had a way to watch the stupid ultraviolet/flixster movie.  Boy was I wrong.  Every copy of every movie I had on Ultraviolet would not play. All I got was, &quot;there&apos;s some issue; contact best buy help.&quot; Awesome.  Plus, while logged in on my computer, I saw that none of my devices connectable to TVs would be able to play the HD version on the movie. I&apos;d be stuck with SD.  That&apos;s one hell of an expensive Stardard Definition movie that I can&apos;t even watch.</p>
<p>I went to Vudu now. Connected my ultravoilet account (this is now the 4th account I&apos;ve had to use to maybe watch the movie. 4th!) and connected on my Bluray player. No movies. None at all.  I reset the Bluray player (turned it on and back off again) and the movies finally showed up. We&apos;re in business, right?  WRONG! My original fears were brought to life. The streaming servers couldn&apos;t keep up. I barely got 2 mins of the movie at a time before it buffered.  And vudu&apos;s buffering is terrible. It stops the video, puts up the movie cover with a loading graphic, buffers, starts the audio, then lets the video catch up.  Not a way to watch a movie.</p>
<p>So there&apos;s a buffering problem; how about I download it and then watch it? Sounds reasonable, right? Turns out that this flixster app, the one that the mars people said was the only way to get the movie out to everyone at the same time (bullshit, by the way), won&apos;t install on OS X Mavericks. The default archiver won&apos;t unzip the file. I tried Archiver, which unzipped it, but it won&apos;t run. So there goes the idea of getting the movie to everyone on opening night. Those of us with Macs are completely screwed. Can&apos;t stream it without buffering, can&apos;t download it because we can&apos;t install the downloader.</p>
<p>Had I not pledged, I could have bought the movie in HD from iTunes and been watching it right now. But I chose to back something and got screwed by the big movie companies again.</p>
<p>I still have not seen it.</p>
<p>So what have I learned from this experience is to not back anything that has big movie potential. Only back those indie movies, people!</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Enabling ImageMagick on MAMP Pro 2.2]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Not a terribly easy task, but eventually I got ImageMagick to work with MAMP Pro 2.2 with PHP 5.5.3. Here&apos;s a few steps.</p>
<p>Brew never worked for me, so I used MacPorts instead.</p>
<ul>
<li>Follow the steps to install <a href="http://www.macports.org/install.php">MacPorts</a></li>
<li>Install ImageMagick with <code>sudo port install</code></li></ul>]]></description><link>http://jeffreymeagher.com/enabling-imagemagick-on-mamp-pro-2-2/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4b2</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Mon, 06 Jan 2014 05:25:18 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Not a terribly easy task, but eventually I got ImageMagick to work with MAMP Pro 2.2 with PHP 5.5.3. Here&apos;s a few steps.</p>
<p>Brew never worked for me, so I used MacPorts instead.</p>
<ul>
<li>Follow the steps to install <a href="http://www.macports.org/install.php">MacPorts</a></li>
<li>Install ImageMagick with <code>sudo port install ImageMagick</code></li>
<li>Install IMagick PHP class for ImageMagick <code>sudo port install php53-imagick</code> Install the correct version for your PHP version from <a href="http://www.macports.org/ports.php?by=name&amp;substr=imagick">this list</a></li>
<li>Copy files so they can be loaded by PHP/Apache
<ul>
<li><code>/opt/local/lib/php55/extensions/no-debug-non-zts-20121212/imagick.so</code> to <code>/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212</code></li>
<li>this is specific to php 5.5.3. If you&apos;re on another version, the version numbers and the date in the last folder may be different.</li>
</ul>
</li>
<li>Update php.ini files located
<ul>
<li><code>/Applications/MAMP/bin/php/php5.3.x/conf</code></li>
<li><code>/Library/Application Support/appsolute/MAMP PRO/conf/php.ini</code></li>
<li><code>MAMP PRO &gt; File &gt; Edit Template &gt; PHP &gt; SELECT YOUR VERSION</code> (this is from the menu inside MAMP Pro.)</li>
<li>add <code>extension=imagick.so</code> to these files</li>
</ul>
</li>
<li>I had a issue with outdated dlls, and I followed the steps here from <a href="http://kingori.co/minutae/2013/04/imagick-on-mamp-pro/">King&apos;Ori</a>.
<ul>
<li>Fix library version incompatibilities by open the file <code>/Applications/MAMP/Library/bin/envvars</code> in the editor, and comment out the following lines:<br>
<code>cDYLD_LIBRARY_PATH=&quot;/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH&quot; export DYLD_LIBRARY_PATH</code></li>
</ul>
</li>
</ul>
<p>Restart your services and you&apos;ll be manipulating images like crazy.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[WordPress Theme Breaking Plugins like The Event Calendar]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;ve been working with a <a href="http://themeforest.net/item/ikebana-masonry-wordpress-portfolio-theme/5295994">wordpress theme</a> from <a href="http://themeforest.net">ThemeForest.net</a> and ran into a most peculiar issue. I don&apos;t claim to be a WP guru or anything, but the theme stopped working correctly by not showing all the featured articles on the home page.  I got</p>]]></description><link>http://jeffreymeagher.com/wordpress-theme-breaking-plugins-like-the-event-calendar/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4b1</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Thu, 05 Dec 2013 21:19:58 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;ve been working with a <a href="http://themeforest.net/item/ikebana-masonry-wordpress-portfolio-theme/5295994">wordpress theme</a> from <a href="http://themeforest.net">ThemeForest.net</a> and ran into a most peculiar issue. I don&apos;t claim to be a WP guru or anything, but the theme stopped working correctly by not showing all the featured articles on the home page.  I got an error that looked like this:</p>
<pre><code>Call to a member function get() on a non-object in [website]/wp-includes/query.php on line ##
</code></pre>
<p>So that&apos;s a bit of a problem.  A huge error, right on the home page. No way I can hand this off to the client as a finished site.</p>
<p>It turns out that even though the theme was released recently, it&apos;s using some old-style code. Mainly this multiple times in the theme code:</p>
<pre><code>$wp_query = null;
</code></pre>
<p>Commenting out the lines where it was setting <code>$wp_query</code> to null, everything started working fantastic.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Setting up Ghost on a MediaTemple DV4]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>After backing <a href="http://www.kickstarter.com/projects/johnonolan/ghost-just-a-blogging-platform">Ghost on Kickstarter</a> and getting my copy of it (Yes, I know it&apos;s been <a href="http://blog.ghost.org/public-launch/">released to the public</a> already), I thought I&apos;d share how I got it all set up and running on my MediaTemple DV4.0. Actually wasn&apos;t that difficult.</p>
<h3 id="step1installnodejs">Step</h3>]]></description><link>http://jeffreymeagher.com/setting-up-ghost-on-a-mediatemple-dv4/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb499</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Fri, 18 Oct 2013 21:14:03 GMT</pubDate><media:content url="http://jeffreymeagher.com/content/images/2018/08/mediatempleghost.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://jeffreymeagher.com/content/images/2018/08/mediatempleghost.png" alt="Setting up Ghost on a MediaTemple DV4"><p>After backing <a href="http://www.kickstarter.com/projects/johnonolan/ghost-just-a-blogging-platform">Ghost on Kickstarter</a> and getting my copy of it (Yes, I know it&apos;s been <a href="http://blog.ghost.org/public-launch/">released to the public</a> already), I thought I&apos;d share how I got it all set up and running on my MediaTemple DV4.0. Actually wasn&apos;t that difficult.</p>
<h3 id="step1installnodejs">Step 1: Install Node.js</h3>
<p>I followed these <a href="http://davidseah.com/infotech/2013/07/26/installing-node-js-on-mediatemple-dv-4/">instructions by David Seah</a> as I&apos;ve never worked with Node.js before.  I only went through the <a href="https://www.codeschool.com/paths/javascript#node-js">CodeSchool Node.js course</a> that was included in my Kickstarter Backing package.</p>
<p>Only one thing I&apos;d note here: Make sure you download the latest version of Node by heading over to the <a href="http://nodejs.org/download/">Node.js download page</a>. Then use the link you grab from there during Mr. Seah&apos;s <code>wget</code> line.</p>
<p>I stopped following the tutorial after I successfully dumped out Node&apos;s version to the command line. I figured it was working well enough at that point.</p>
<h3 id="step2createasite">Step 2: Create a Site</h3>
<p>Jump into your plesk install and create a new site. Either use a Top Level Domain (TLD) you&apos;ve just had sitting around, or create a subdomain. I opted for the subdomain route. Way cheaper. Take note of where you&apos;re putting the document root. I&apos;ll be using <a href="http://ghost.jeffreymeagher.com">ghost.jeffreymeagher.com</a> as my subdomain throughout these steps. I entered <code>ghost.jeffreymeagher.com</code> into the little document root box while setting this up.</p>
<h3 id="step3installghost">Step 3: Install Ghost</h3>
<p><a href="https://en.ghost.org/download/">Download the latest Ghost</a> and get the zip file on your server (use sftp, ftp, or wget.) Keeping it as a zip file will greatly lower the time it takes to upload to your server.</p>
<p>Extract the archive to a new directory you made. For me, that consisted of these command-line steps.  <strong>NOTE:</strong> this is not in the same location as the webroot that was created in step 2.</p>
<ol>
<li><code>cd /var/www/vhosts/jeffreymeagher.com</code></li>
<li><code>mkdir ghost</code></li>
<li><code>cd ghost</code></li>
<li><code>unzip /root/ghost-0.3.3.zip</code></li>
</ol>
<h3 id="step4configureghost">Step 4: Configure Ghost</h3>
<p>Now that it&apos;s all extracted, we need to set it up. Make sure you run (as directed in <a href="http://docs.ghost.org/installation/linux/">ghost&apos;s documentation</a>) the install command to get all the extra node.js bits that ghost relies on. <code>npm install --production</code></p>
<p>I had a few erros when node tried to install sqlite drivers. I was fine with that, since I wanted to hook this up to MySQL anyway. In the <a href="https://en.ghost.org/forum/installation/113-ghost-using-mysql">ghost forums</a> they tell you exactly what you put in your <code>config.js</code> file.  Here it is for easy viewing. Just replace the current database lines with these:</p>
<pre><code>database: {
	client: &apos;mysql&apos;,
    connection: {
    	host: &apos;localhost&apos;,
    	user: &apos;root&apos;,
    	password: &apos;p@s$word&apos;,
    	database: &apos;ghost-dev&apos;,
    	charset: &apos;utf8&apos;
	}
}
</code></pre>
<p>I also took the time to configure my email settings as outlined in the <a href="http://docs.ghost.org/mail/">ghost install documentation</a>.</p>
<h3 id="step5configureapache">Step 5: Configure Apache</h3>
<p>Since the requests on port 80 (normal http port) are handled by Apache, we need a way to pass that request from apache to Node.js. Apache&apos;s ProxyPass is the answer.</p>
<p>Find your newly created (sub)domain&apos;s conf directory. Typically it&apos;s inside the (sub)domain&apos;s folder at <code>/var/www/vhosts/</code>. <strong>NOTE:</strong> this does not have to be in the same place as the document root you created in step 2. For me, it was at, <code>/var/www/vhosts/ghost.jeffreymeagher.com/conf/</code> Now you can start with these steps.</p>
<ol>
<li>
<p>Create <code>vhost.conf</code> if it does not exist</p>
<pre><code> touch vhost.conf
</code></pre>
</li>
<li>
<p>Edit <code>vhost.conf</code> to change the DocumentRoot and add ProxyPass directives:</p>
<pre><code> vim vhost.conf
</code></pre>
</li>
</ol>
<p>Then paste the following in, as derived from <a href="http://blog.0x1a.us/installing-ghost-using-apache/">this post</a></p>
<pre><code>	DocumentRoot /dir/path-to-extracted-ghost-root
	ProxyPass / http://127.0.0.1:2368/
	ProxyPassReverse / http://127.0.0.1:2368/
	ProxyPreserveHost On
</code></pre>
<ol start="3">
<li>
<p>Rebuild the site configuration:</p>
<pre><code> /usr/local/psa/admin/sbin/httpdmng --reconfigure-domain ghost.jeffreymeagher.com
</code></pre>
</li>
</ol>
<h3 id="step6startghost">Step 6: Start Ghost</h3>
<p>For a quick ghost start, just to test that your settings are correct, you can go to the ghost root <code>/var/www/vhosts/ghost.jeffreymeagher.com/ghost/</code> and type</p>
<pre><code>npm start --production
</code></pre>
<p>This basically temporarily fires up ghost so you can check your work. Hit up the (sub)domain with your favorite broswer and see if it works.  If it does, you&apos;ll see Ghost.  If it doesn&apos;t, you&apos;ll either see a 500 error (meaning some configuration is wrong), or you&apos;ll see the Apache default page.  Go back and check your work.</p>
<h3 id="step7startghostforever">Step 7: Start Ghost Forever</h3>
<p>I followed <a href="http://docs.ghost.org/installation/deploy/">this simple guide</a> to get ghost to start forever using <code>forever</code>. Unfortunately I couldn&apos;t get the thing to work with an init script, so if I ever shut the server down, I&apos;ll have to remember to bring Ghost back up with forever!</p>
<pre><code>NODE_ENV=production forever start index.js
</code></pre>
<h3 id="upgradingtoghost04from033">Upgrading to ghost 0.4 from 0.3.3</h3>
<p>ghost 0.4 needs python 2.7+. Unfortunately media temple&apos;s DV4 only has 2.4.x on it. So you&apos;ll need to remember to tell node to use python 2.7 that you installed in the steps outlined by David Seah. For a shortcut, simply paste this in the terminal and run it.</p>
<pre><code>export PYTHON=python2.7
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[So I Bought this Piano...]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>As a refinishing project, I picked up this piano from a free ad on craig&#x2019;s list. It&#x2019;s a B. Shoninger upright grand piano. Looking at it&#x2019;s finish, it&#x2019;s all crackly. The patents inside on the sound board say things such as &#x201C;</p>]]></description><link>http://jeffreymeagher.com/so-i-bought-this-piano/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb498</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Fri, 19 Apr 2013 18:00:00 GMT</pubDate><media:content url="http://jeffreymeagher.com/content/images/2018/08/IMG_0566.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0566.jpg" alt="So I Bought this Piano..."><p>As a refinishing project, I picked up this piano from a free ad on craig&#x2019;s list. It&#x2019;s a B. Shoninger upright grand piano. Looking at it&#x2019;s finish, it&#x2019;s all crackly. The patents inside on the sound board say things such as &#x201C;Mar. 12. 78&#x2033;, and &#x201C;Feb. 5. 84&#x2033;.  The finish was in much to terrible of shape for this to be created after 1989 and the wood looked very dry.  The B. Shoninger decal by the keys was also worn badly and from more usage than scraping I guessed.</p>
<p>After some internet searching, I was able to find out that once I had the serial number of the piano I would be able to date it.  So I went off to the storage unit to take a look for a serial number. I found two numbers, both pictured below. Then I set off to the public library to see if I couldn&#x2019;t come across some sort of encyclopedia that would help determine the date.  There&#x2019;s a website that should help you date, but I was unable to find the B. Shoninger company on it. You may have some luck though at Bluebook of Pianos.</p>
<p>The reference librarian was a fantastic help, waddling through the aisle of the library I&#x2019;d never been in before pulling books here and there. We sat down and started paging through them only to find that I did, indeed, have the correct serial number and the book that I needed to property date this musical instrument is Pierce Piano Atlas. As it turns out, the library didn&#x2019;t have it, but a nearby one did. We opted for the inter library loan option instead of trying to beat the clock and make it to the neighboring city before the library closed.</p>
<p>Just a few days later, we had the book. And in 5 minutes after that, we had the piano dated.  Our serial number falls between 1890 and 1895.  Pretty darn neat to have a turn of the 20th century piano.</p>
<p>This piano needs work.  One of the hammers was broken. The finish is terrible and the wood is drying out. I don&#x2019;t have a clue about piano repair, but with the right tools and books, I should be able to make this playable again.  If I can&#x2019;t, then at least it will look amazing after a refinish in period finishes.  I&#x2019;m sure there&#x2019;ll be more about the process later.</p>
<p><img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0563.jpg" alt="So I Bought this Piano..." loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0566-1.jpg" alt="So I Bought this Piano..." loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0567.jpg" alt="So I Bought this Piano..." loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0564.jpg" alt="So I Bought this Piano..." loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0565.jpg" alt="So I Bought this Piano..." loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[An upgrade from cakePHP 2.2 to 2.3 with DebugKit]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>For my latest project, <a href="http://www.parentapprovedschools.com" target="_blank">ParentApprovedSchools.com</a>, I was lucky enough to do a fresh install of <a href="http://www.cakephp.org" target="_blank">cakePHP 2.3</a>. And with that, I found the handy-dandy plugin called <a href="https://github.com/cakephp/debug_kit" target="_blank">DebugKit</a> right there in the cakePHP install directions. So I gave it a try. It&apos;s pretty much amazing.&#xA0; Clients</p>]]></description><link>http://jeffreymeagher.com/an-upgrade-from-cakephp-2-2-to-2-3-with-debugkit/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4b0</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Thu, 28 Feb 2013 17:10:14 GMT</pubDate><media:content url="http://jeffreymeagher.com/content/images/2018/08/codes1.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://jeffreymeagher.com/content/images/2018/08/codes1.png" alt="An upgrade from cakePHP 2.2 to 2.3 with DebugKit"><p>For my latest project, <a href="http://www.parentapprovedschools.com" target="_blank">ParentApprovedSchools.com</a>, I was lucky enough to do a fresh install of <a href="http://www.cakephp.org" target="_blank">cakePHP 2.3</a>. And with that, I found the handy-dandy plugin called <a href="https://github.com/cakephp/debug_kit" target="_blank">DebugKit</a> right there in the cakePHP install directions. So I gave it a try. It&apos;s pretty much amazing.&#xA0; Clients that see the site in development no longer ask me, &quot;what&apos;s all this stuff below the footer?&quot; when I have debugging turned on and I can still see a whole var dump. Pretty amazing, I know.</p>
<p>But once I got that all set up, I though, &quot;hey, why not get this installed on your other projects like <a href="http://pawlister.com" target="_blank">pawlister</a>?&quot; With a quick git submodule add, I had DebugKit installed.</p>
<pre><code>git submodule add \
	https://github.com/cakephp/debug_kit.git Plugin/DebugKit</code></pre>
<p>However, that&apos;s where the problems started.&#xA0; Cake&apos;s plugin system now works by kind of duplicating the cake directory structure, but in the plugins folder for each plugin. The javascript and css and images were returning 404&apos;s on the server for DebugKit which obviously makes it not work.&#xA0; First thought: they&apos;ve changed something in the app directory that I don&apos;t have since I only updated the cake library.&#xA0; Makes sense to check out the <code>~/webroot/.htaccess</code> file, right? Well there was a tiny difference in there, but it didn&apos;t help. Still had the 404&apos;s. I checked the routes.php file next; found nothing new. So instead of looking through each file, I ran a diff. Found an interesting piece of code that&apos;s supposed to be in <code>~/Config/bootstrap.php</code> about writing configuration for the Dispatcher filer. So I copy that over and BAM! no more 404&apos;s and DebugKit is working perfectly.&#xA0; Here&apos;s the code that needs to be added:</p>
<pre><code>Configure::write(&apos;Dispatcher.filters&apos;, array(
	&apos;AssetDispatcher&apos;,
	&apos;CacheDispatcher&apos;
));</code></pre><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Saginaw Expand-o-matic]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>A few weeks ago we were checking out the local Habitat for Humanity ReStore in town since I&apos;d never been there before. We waded through the typical old tile, vanities, sinks, and even a few microwaves. Then we found a table -- probably the coolest tables I&apos;</p>]]></description><link>http://jeffreymeagher.com/saginaw_expand-o-matic/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4aa</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Thu, 31 Mar 2011 11:35:33 GMT</pubDate><media:content url="http://jeffreymeagher.com/content/images/2018/08/IMG_0021.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0021.png" alt="Saginaw Expand-o-matic"><p>A few weeks ago we were checking out the local Habitat for Humanity ReStore in town since I&apos;d never been there before. We waded through the typical old tile, vanities, sinks, and even a few microwaves. Then we found a table -- probably the coolest tables I&apos;ve ever seen.&#xA0; It looks like a buffet, but pulls out to be a dinner table to a length of just under 7 feet long! At first look, the price tag seemed a little pricy, but after some research, it turns out that it was well worth it.</p>
<p>I had to go back the next day they were open to purchase it, figuring it would fit into the back seat of my ION. Unfortunately, I was mistaken by only about two inches! So the helpful ReStore clerk helped me lift it onto the truck, where we tied it in with my jumper cables.&#xA0; I have since put the bungees and ties back into my trunk. I&apos;ve never driven the roads of Fond du Lac so slowly in my life nor do I plan to ever again.</p>
<p><img src="http://jeffreymeagher.com/content/images/2013/Dec/IMG_0016_e1366843785276.jpg" alt="Saginaw Expand-o-matic" loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0018.jpg" alt="Saginaw Expand-o-matic" loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0019.jpg" alt="Saginaw Expand-o-matic" loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2018/08/IMG_0020_e1366843820584.jpg" alt="Saginaw Expand-o-matic" loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2013/Dec/IMG_0021.jpg" alt="Saginaw Expand-o-matic" loading="lazy"><br>
<img src="http://jeffreymeagher.com/content/images/2013/Dec/IMG_0022.jpg" alt="Saginaw Expand-o-matic" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Amazon's Product Advertising API]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>For a while I&apos;ve been trying to come up with a safe and easy way to catalog my movies. I have quite a few of them and often forget if I have a specific season of <a class="zem_slink" href="http://www.sho.com/site/dexter/home.do" title="Dexter" rel="hulu">Dexter</a> or <a class="zem_slink" href="http://www.hulu.com/psych" title="Psych - Full Episodes and Clips streaming online for free" rel="hulu">Psych</a>. This catalog needed to be both easy to populate</p>]]></description><link>http://jeffreymeagher.com/amazons_product_advertising_api/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4af</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Fri, 04 Mar 2011 12:06:36 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>For a while I&apos;ve been trying to come up with a safe and easy way to catalog my movies. I have quite a few of them and often forget if I have a specific season of <a class="zem_slink" href="http://www.sho.com/site/dexter/home.do" title="Dexter" rel="hulu">Dexter</a> or <a class="zem_slink" href="http://www.hulu.com/psych" title="Psych - Full Episodes and Clips streaming online for free" rel="hulu">Psych</a>. This catalog needed to be both easy to populate and easy to view on the go. So I started playing with the Amazon Product Advertising API as it would let me look up movie data on amazon and store it locally in my own database for fast access on-the-go. No typing the actors, movie length, and description. Sounded good to me. Only one problem: I was not familiar with creating the API signature type that Amazon required.<div><br></div><div>Check out my article over on my business site for more information on <a href="http://www.jelyco.com/blog/2011/amazons-product-advertising-api/">how to create the Amazon API signature with php</a>.</div></p>
<div class="zemanta-pixie" style="margin-top:10px;height:15px"><br></div>
<!--more-->
<div class="zemanta-img mt-image-right" style="margin-top: 1em; margin-right: 1em; margin-bottom: 1em; margin-left: 1em; display: block; float: right; width: 272px; "><a href="http://en.wikipedia.org/wiki/File:Dexter_Morgan.jpg"><img src="http://upload.wikimedia.org/wikipedia/en/4/47/Dexter_Morgan.jpg" alt="Dexter Morgan" width="262" height="222"></a><p class="zemanta-img-attribution" style="font-size:0.8em">Image via <a href="http://en.wikipedia.org/wiki/File:Dexter_Morgan.jpg">Wikipedia</a></p></div><p><br></p>
<div class="zemanta-pixie" style="margin-top:10px;height:15px"><br></div>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[I'm Engaged!]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Quite a bit has happened since I&apos;ve moved from South Carolina to the dying metropolis of Fond du Lac, WI.  So much in fact, that I haven&apos;t even bothered to write anything.  Alright, maybe not really, but still... Here&apos;s a quick update on the</p>]]></description><link>http://jeffreymeagher.com/im_engaged/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4ad</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Thu, 05 Aug 2010 11:35:39 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Quite a bit has happened since I&apos;ve moved from South Carolina to the dying metropolis of Fond du Lac, WI.  So much in fact, that I haven&apos;t even bothered to write anything.  Alright, maybe not really, but still... Here&apos;s a quick update on the projects I&apos;ve been working on and the things I&apos;ve been up to.</p>
<!--more-->
<ul>
<li>Moved from SC to WI
<ul>
<li>Barely found a place to live that wasn&apos;t a college studio apartment.</li>
<li>Traveled for 3 days with a <a href="http://www.pensketruckrental.com/">Penske Truck</a> with stops in <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Indianapolis,+IN&amp;sll=37.0625,-95.677068&amp;sspn=38.638819,78.310547&amp;ie=UTF8&amp;hq=&amp;hnear=Indianapolis,+Marion,+Indiana&amp;z=11">Indianapolis</a>, <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Chillicothe,+IL&amp;sll=40.693649,-89.588986&amp;sspn=0.144732,0.305901&amp;g=Peoria,+IL&amp;ie=UTF8&amp;hq=&amp;hnear=Chillicothe,+Peoria,+Illinois&amp;ll=40.921879,-89.488792&amp;spn=0.036059,0.076475&amp;z=14">Peoria</a>, and <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Fitchburg,+WI&amp;sll=40.921879,-89.488792&amp;sspn=0.036059,0.076475&amp;ie=UTF8&amp;hq=&amp;hnear=Fitchburg,+Dane,+Wisconsin&amp;ll=43.01243,-89.45549&amp;spn=0.139578,0.305901&amp;z=12">Madison</a>.</li>
<li>Didn&apos;t touch the gas or brake pedal for 45 miles while coasting downhill out of the mountains on I-40</li>
<li>Fit everything I owned in a 16 foot truck and my trailered car with just enough room to pick up a couch from my sister and a table/chairs set from my brother.</li>
<li>Got to my new house only to find out the renovations weren&apos;t complete.</li>
<li>Moved in anyway started work the following week at <a href="http://www.morainepark.edu/">Moraine Park Technical College</a> as &quot;Webmaster&quot; (I really, really hate that title.)</li>
</ul>
</li>
<li>Got to go skiing in December.
<ul>
<li>Hit up Pine Mountain in Marquette, MI</li>
<li>Broke my bindings the week before, so I had to use my ski blades and my snow board instead of skiing while trying to teach someone to ski.</li>
<li>Drove through a pretty huge snow storm on the way back down US-141 where the snow was so deep it was reading the underside of my car.</li>
</ul>
</li>
<li>Started development of <a href="http://text-board.com">text-board</a>.
<ul>
<li>Took over development of what&apos;s now one of the best text messaging marketing campaign management tools available on the web with <a href="http://oirinteractive.com/">OIR Interactive, LLC</a>.</li>
<li>Launched the new site and application to a good audience.</li>
<li>Learned a ton about SMS messaging and aggregators and more about how terrible AT&amp;T is as a carrrier.</li>
</ul>
</li>
<li>Purchased a new bike.
<ul>
<li>I wanted a single speed, so with the help from the guys at <a href="http://www.goridebikes.com">The Bike Shop</a> in Houghton, MI, I found the perfect one for me.  The 2010 Jamis Beatnik.</li>
</ul>
</li>
<li>Moved my girlfriend back to WI from MN.
<ul>
<li>Started out with a uhaul truck way too small.</li>
<li>Penske came to the rescue with a 16 footer that we filled way too full of stuff for only having a 1 bedroom apartment.</li>
</ul>
</li>
<li>Bought an engagement ring from the fine peope at <a href="http://kesslersdiamonds.com/">Kessler&apos;s Diamonds</a>.
<ul>
<li>Proposed on a glorious Friday in June while in the twin cities.</li>
</ul>
</li>
<li>Started planning a wedding.
<ul>
<li>This is turning out to be a little more work than anticipated with a 450+ guest list at the moment.</li>
</ul>
</li>
</ul>
<p>Can&apos;t really believe I&apos;ve been that busy in this past year.  Oh, how the time flies...</p>
<p>&#xA0;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Farewell, South Carolina]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>It&apos;s with a partially sad demeanor that I&apos;ll be leaving South Carolina in just 15 days.  It&apos;s been a long &#x2014; very long &#x2014; three and a half years here.  Had some experiences, did a lot of lazing around, but now I&apos;m</p>]]></description><link>http://jeffreymeagher.com/farewell_south_carolina/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4ae</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Sat, 22 Aug 2009 22:51:03 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>It&apos;s with a partially sad demeanor that I&apos;ll be leaving South Carolina in just 15 days.  It&apos;s been a long &#x2014; very long &#x2014; three and a half years here.  Had some experiences, did a lot of lazing around, but now I&apos;m off back to the frozen north and couldn&apos;t be more excited.</p>
<p>There&apos;s been a lot of &quot;Top Lists&quot; around the internet lately.  And their completely random like &quot;Top 53 new websites for designers&quot;, or &quot;Top 18 reasons to dance on your head&quot;.  Keeping with that, I&apos;ve composed not one, but <em>two</em> top lists.</p>
<!--more-->
<h2>Top 3 Things I Will Miss About Myrtle Beach</h2>
<ol>
<li>The Myrtle Beach Volleyball Club -  a great group of volleyball players</li>
<li><a href="http://www.grandstrandbicycles.com/">Grand Strand Bicycles</a> - the best bike shop on the grand strand.  They sell <a href="http://www.specialized.com/">Specialized</a> and give the best advice on riding style, garmets, and equipment.</li>
<li>The friends I&apos;ve made.</li>
</ol>
<p>&#xA0;</p>
<h2>Top 5 Things I Will Not Miss About Myrtle Beach</h2>
<ol>
<li>Dripping Humidity</li>
<li>Blatant disregard for bicycles on the road</li>
<li>People riding their bikes on the wrong side of the road.</li>
<li>Palmetto Bugs (HUGE cock roaches)</li>
<li>Over air conditioned stores and offices.</li>
</ol>
<p>&#xA0;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Myrtle Beach Volleyball]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Recently I got involved with a volleyball group in Myrtle Beach, SC. It&apos;s a bunch of B-level people of all ages getting together 2-3 times a week playing some semi-competitive ball. We play in the sand, on the beach, on the grass, and in the gym. There are</p>]]></description><link>http://jeffreymeagher.com/myrtle_beach_volleyball/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4a9</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Tue, 07 Jul 2009 23:00:50 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Recently I got involved with a volleyball group in Myrtle Beach, SC. It&apos;s a bunch of B-level people of all ages getting together 2-3 times a week playing some semi-competitive ball. We play in the sand, on the beach, on the grass, and in the gym. There are even times when we have some tournaments.</p>
<p>A few of us decided that we need a website to communicate when and where to play, links to volleyball equipment, and all around camaraderie. We tossed a quick site up using <a href="http://www.weebly.com/">Weebly</a> and actually got some traffic to it!</p>
<!--more-->
<p>Some of the people that found us through the website were from Virginia and just down for the 4th of July extended weekend. Turns out they took a little video of us playing and emailed it back to us. I&apos;m the guy in the blue, and I swear this was probably my only semi-decent hit I had all evening.</p>
<p>If you&apos;re in the Myrtle Beach area and would like to play some volleyball, check us out at www.MyrtleBeachVolleyball.com for times and places. We&apos;ll have a much more robust site soon. There&apos;s even a home page design for your pleasure below the video.</p>
<p><object width="425" height="344" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><param name="src" value="http://www.youtube.com/v/0hQJU6y9ra0&amp;hl=en&amp;fs=1"><param name="allowfullscreen" value="true"><embed width="425" height="344" type="application/x-shockwave-flash" src="http://www.youtube.com/v/0hQJU6y9ra0&amp;hl=en&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></object></p>
<p>&#xA0;</p>
<p>&#xA0;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Is the customer still always right?]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I was told not too long ago by someone that the year 2007 brought about a rather large change to the working masses. That change was that the number of service-based jobs out numbered that of production jobs. Now whether this is due to robots from the <a href="http://www.youtube.com/watch?v=WGoi1MSGu64">Robotic Uprising of</a></p>]]></description><link>http://jeffreymeagher.com/is_the_customer_still_always_right/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4a8</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Tue, 13 Jan 2009 10:45:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I was told not too long ago by someone that the year 2007 brought about a rather large change to the working masses. That change was that the number of service-based jobs out numbered that of production jobs. Now whether this is due to robots from the <a href="http://www.youtube.com/watch?v=WGoi1MSGu64">Robotic Uprising of the Late 90&apos;s</a>, or that the majority of the population is too busy or too rich to worry about learning how to do things themselves isn&apos;t quite known. But no matter how you answer that question, an even larger one comes up, &quot;Is the customer always right?&quot; I&apos;m sure everyone&apos;s heard that expression before &#x2014; probably from working in retail or for some older gentleman when they were young &#x2014; &quot;The customer is always right, even when he&apos;s not.&quot; But in today&apos;s society of extreme specialization, can we still opperate productively by that same principle? Can we trust that the consumer (or client) isn&apos;t out to just get a superior service for an inferior price? And once we do believe the consumer/client isn&apos;t out to just get a deal, do we push for their education through our experience and expertise or simply give them that for which they are asking?</p>
<!--more-->
<p>I work for a busy web developement and interactive marketing provider in South Carolina. Often we&apos;re confronted with clients who know what they want and only want it the way that they want it.<br>. o O ( was that too many wants in one sentence? ) Often I&apos;m reminded of a quote a <a href="http://www.kristoferbaxter.com">fellow colleague</a> has on his desk and <a href="http://www.hellomedia.com.au/2007/03/article-if-architects-had-to-work-like.html">an article</a> written by unknown author that tries to compare web developers to architects (which we really are, in some aspects). The only problem is that the typical website consumer treats webdesign as something they could do if they weren&apos;t so busy whereas they treat architure as if it is art and only a few people can successfully do it. I wish sometimes these people would try to develop a simple form to capture 4 fields from a user and have it display correctly across the major browsers (IE6, IE7, Firefox 2, Safari) in a fullly CSS, valid site layout and them come tell us that our jobs are easy and any one can do them.</p>
<p>But I digress, back to the problem at hand: Is the customer always right? Let&apos;s take for instance a client I&apos;ve dealt with on just this exact type of thing. They have a store system they use to sell products and services. During the checkout process, you&apos;re giving the option to add discount codes and serial numbers. The form isn&apos;t the most intuitive, so we had two buttons to update the cart subtotals; one button on the left and another on the right. From past dealings with this client, I thought it would be a good idea to track the number of times each button was used so we could later compare it to page views to see which one was used more often. The client disliked having two buttons and so decided they wanted to remove one. I quickly pulled up the stats and noticed that out of the 60-ish pageviews in the 14 overnight hours this had been up, 25 people used the button on the left and 26 used the button on the right. Now with a bit of stretching, we can assume that each pageview is a new potential customer and that each button click was only done by one potential customer. That means that 85% of the potential customers used one of those two buttons, and of that 85% pretty much one button was used 50% of the time and the other one 50% of the time. Throughout our dealings with what people on the web are like, we&apos;ve noticed that no two users navigate a page exactly the same. So in order to catch personality A <em>and</em> personality D, we need both those buttons there. But the client decided to remove one while stating, &quot;I don&apos;t really care what your numbers say. It&apos;s confusing for me to have two buttons there, so remove the one on the left.&quot;</p>
<p>Sure, the client was solely in the wrong here, but we ended up taking that button off. Was this a fight we should have given up on as easily as we did? Can we really allow a client to dictate to us what they want on their sites when our expertise throws the penatly flag at them? Can we really even afford to do so, especially on ecommerce sites, when we can only continue to get paid if the product does well and sells? Was this customer/client right? I really think they weren&apos;t and believe that their sales are suffering from it.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Jelyco, llc is born]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>It&apos;s been a long haul, but my latest and greatest project is ready to go live.  I&apos;ve joined up with a great friend from college (follow her twitter feed <a href="http://www.twitter.com/lynndro">@lynndro</a>) to start a full-service interactive business that focuses on young company branding.</p>
<p>We both decided that</p>]]></description><link>http://jeffreymeagher.com/jelyco_llc_is_born/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4ab</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Sat, 20 Dec 2008 16:29:36 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>It&apos;s been a long haul, but my latest and greatest project is ready to go live.  I&apos;ve joined up with a great friend from college (follow her twitter feed <a href="http://www.twitter.com/lynndro">@lynndro</a>) to start a full-service interactive business that focuses on young company branding.</p>
<p>We both decided that the typical 8am-5pm lifestyle was not in our best interest and we could make a better impact on the world by being our own bosses.  Sure, that&apos;s easier said than done, but we&apos;ve taken that first step and have become a recognized business in Houghton County, Michigan</p>
<!--more-->
<p>So in an effort to get the word out, we&apos;ll be hitting up twitter and our own personal blogs.  We have excellent background in design, programming, server management, brand design, and writing.  From a web stance, we work mostly in PHP, XHTML, CSS, and jQuery, but also have knowledge of ColdFusion and Perl.  I can&apos;t really say much about the design as I don&apos;t get to touch that much.</p>
<p>If you or someone you know is looking to make a grande web entrance, shoot over to <a href="http://www.jelyco.com/contact/">the Jelyco Contact</a> page and tell us what&apos;s up.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[CakePHP form display]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;m pretty new still when it comes to <a href="http://www.cakephp.org">cakePHP</a>, but there&apos;s a few things that I&apos;ve noticed in my limited exposure that screams a developer created this.  Throughout my job I learned that my foremost expectations of &quot;web developers&quot; is completely not</p>]]></description><link>http://jeffreymeagher.com/cakephp_form_display/</link><guid isPermaLink="false">63a0cf2ad889d100e7bfb4ac</guid><dc:creator><![CDATA[Jeffrey Meagher]]></dc:creator><pubDate>Thu, 18 Dec 2008 00:10:48 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>I&apos;m pretty new still when it comes to <a href="http://www.cakephp.org">cakePHP</a>, but there&apos;s a few things that I&apos;ve noticed in my limited exposure that screams a developer created this.  Throughout my job I learned that my foremost expectations of &quot;web developers&quot; is completely not true.  I was under the impression that everyone in web development (whether they focused on design or development) could build a fully dynamic website.  Sure, people focusing in development may make some odd design and layout issues, but he/she would still get the job done.</p>
<!--more-->
<p>Much to my surprise, my colleagues aren&apos;t all like that.  We have some amazing developers who just barely know CSS, and we have designers that don&apos;t understand how to loop over a query result.  But we do make an excellent team.</p>
<p>The first thing that jumped out at me about cakePHP was how it treats forms using it&apos;s form helper. I know of and have read lots of &quot;the correct way to semantically mark up a form&quot; articles.  So that means I&apos;ve come across ones that say you should wrap every label/input combination inside either a fieldset or a div, but I don&apos;t agree with that mentality.  You can accomplish the same thing by grouping related fields inside fieldsets and using CSS to position your labels and inputs accordingly.</p>
<p>I first used the form helper to output a simple login form:</p>
<div class="code">
&lt;?php<br>
echo $form-&gt;create(&apos;User&apos;, array(&apos;action&apos; =&gt; &apos;login&apos;));<br>
echo $form-&gt;input(&apos;username&apos;);<br>
echo $form-&gt;input(&apos;password&apos;);<br>
?&gt;
</div>
<p>The <a href="http://www.twilightpix.com">designer I was working with</a> at the time let me know that there was a <code>&lt;div&gt; class=&quot;input text&quot;&lt;/div&gt;</code> surrounding both the inputs.  To him, this was unacceptable.  He blamed me, I said I didn&apos;t do add them, he still blamed me. And after I shared the code with him through the greatest code editor ever, <a href="http://www.panic.com/coda/">coda</a>, we set off to find out where those blasted divs were coming from.</p>
<p>This was the first time I really jumped into the underlying code of cake.  It was quite intense.  After much searching and even more throwing of stress balls around the office, we found it.  One little line in the form helper.</p>
<p>Now keep in mind that this is on cakePHP version 1.2RC2 and the form helper was last modified <code>@lastmodified	$Date: 2008-01-02 00:33:52 -0600 (Wed, 02 Jan 2008)</code>, take a look at line 554 and you&apos;ll notice the following.</p>
<div class="code">
$out = &apos;&apos;;<br>
$div = true;
</div>
<p>See that line that sets div equal to true?  I simply switched that to false and had an application-wide setting that wouldn&apos;t wrap my label/input duals with unneeded divs.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>