<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3835820450680690950</id><updated>2012-01-25T19:16:58.972-08:00</updated><category term='mobile'/><category term='images'/><category term='custom search'/><category term='parseInt'/><category term='engines'/><category term='flash'/><category term='calendar'/><category term='Virtual PC'/><category term='web app'/><category term='unethical'/><category term='html5'/><category term='hash'/><category term='TinyMCE'/><category term='small business'/><category term='whm'/><category term='hosting'/><category term='adobe'/><category term='allstate'/><category term='art'/><category term='analytics'/><category term='ranking'/><category term='pipe'/><category term='GD'/><category term='BIND'/><category term='church text messaging'/><category term='octal'/><category term='merchant accounts'/><category term='Testing'/><category term='rhel'/><category term='sencha'/><category term='firefox'/><category term='audio'/><category term='iphone'/><category term='css'/><category term='carbonite'/><category term='onchange'/><category term='cPanel'/><category term='GIMP'/><category term='video'/><category term='email'/><category term='inline-block'/><category term='credit cards'/><category term='MD5'/><category term='ShortShout'/><category term='su'/><category term='aws'/><category term='sort'/><category term='backup'/><category term='facebook'/><category term='xml'/><category term='IE7'/><category term='shuffle'/><category term='SMS'/><category term='checkbox'/><category term='jQuery'/><category term='MSN'/><category term='mysql'/><category term='PDF'/><category term='security'/><category term='cloudfront'/><category term='utf-8'/><category term='battery'/><category term='bash'/><category term='wordpress'/><category term='glue record'/><category term='PEAR'/><category term='movie'/><category term='escape'/><category term='cURL'/><category term='html'/><category term='IE8'/><category term='tweet'/><category term='mac'/><category term='innovation'/><category term='errors'/><category term='intermediate ca'/><category term='design'/><category term='payment'/><category term='Picasa2'/><category term='statistics'/><category term='virtual machines'/><category term='CDN'/><category term='ipod touch'/><category term='texting'/><category term='verisign'/><category term='json'/><category term='CENTOS'/><category term='virtualization'/><category term='mail'/><category term='selinux'/><category term='group text messaging'/><category term='javascript'/><category term='search engines'/><category term='videojs'/><category term='mysql_connect'/><category term='SHA1'/><category term='apple'/><category term='CA'/><category term='passwords'/><category term='efficiency'/><category term='status'/><category term='social'/><category term='recipient'/><category term='good design'/><category term='photos'/><category term='osx'/><category term='IP address'/><category term='logo'/><category term='keycodes'/><category term='dhtml'/><category term='compression'/><category term='resolving dns'/><category term='vsftpd'/><category term='Browsers'/><category term='SMTP'/><category term='Chrome'/><category term='ios'/><category term='wildcard ssl'/><category term='shell'/><category term='hebrew'/><category term='macbook'/><category term='domain'/><category term='spell check'/><category term='sIFR'/><category term='salt'/><category term='SSL'/><category term='sitemaps'/><category term='tos'/><category term='Yahoo'/><category term='chown'/><category term='wireless keyboard'/><category term='flowplayer'/><category term='database'/><category term='blue screen'/><category term='apache'/><category term='bots'/><category term='SHA256'/><category term='crawlers'/><category term='math'/><category term='speed'/><category term='PCI'/><category term='Ask'/><category term='IE6'/><category term='law'/><category term='php'/><category term='process'/><category term='ajax'/><category term='anchor link'/><category term='random'/><category term='objectified'/><category term='master-master'/><category term='body'/><category term='fpdi'/><category term='font'/><category term='Google'/><category term='softlayer'/><category term='primopdf'/><category term='regex'/><category term='paypal'/><category term='backblaze'/><category term='twitter'/><category term='search'/><category term='exclamation point'/><category term='wp'/><category term='htaccess'/><category term='TLS'/><category term='parser'/><category term='keystroke'/><category term='mysql_select_db'/><category term='Paint.Net'/><category term='decimal'/><category term='apc'/><category term='donations'/><category term='ftp'/><category term='fdisk'/><category term='replication'/><category term='dns ip'/><title type='text'>Firelit Design</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>91</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3142911771349375550</id><published>2012-01-25T19:11:00.000-08:00</published><updated>2012-01-25T19:16:58.983-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery UI &amp; Disabling Text Selection on Click</title><content type='html'>Part of making a wonderfully interactive website with jQuery is the process of making certain elements clickable. Sometimes that means making a portion of text interactive without using the regular means of a hyperlink. One problem comes up when doing this, however. When a person clicks rapidly the browser usually interprets this to mean you want to highlight a word or paragraph. How do you stop this?Call .disableSelection() on the element with jQuery. This will disable text selection. For example:&lt;pre style="color:blue;"&gt;&lt;br /&gt;$('#elementId').disableSelection();&lt;br /&gt;&lt;/pre&gt;It actually binds an event on the object which prevents the default behavior. It is an undocumented feature but it is awfully handy. Remember: it requires jQuery and jQuery UI as it is part of the jQuery UI core.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3142911771349375550?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3142911771349375550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3142911771349375550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3142911771349375550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3142911771349375550'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2012/01/jquery-ui-disabling-text-selection-on.html' title='jQuery UI &amp; Disabling Text Selection on Click'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3914877521627981854</id><published>2012-01-13T20:21:00.000-08:00</published><updated>2012-01-13T20:22:44.286-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Synchronous AJAX with JQuery</title><content type='html'>Yes, you read that right. I just didn't think anyone would understand SJAX.&lt;br /&gt;&lt;br /&gt;AJAX, if you don't know, stands for&amp;nbsp;Asynchronous&amp;nbsp;JavaScript and XML and is the term widely applied to sending HTTP POST and GET requests from client-side javascript. In JQuery, that would be &lt;a href="http://api.jquery.com/jQuery.ajax/"&gt;$.ajax()&lt;/a&gt; or &lt;a href="http://api.jquery.com/jQuery.getJSON/"&gt;$.getJSON()&lt;/a&gt; or any one of the other &lt;a href="http://api.jquery.com/category/ajax/shorthand-methods/"&gt;similar variations&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The question that I had, to continue with the topic of this post, was, How do I do preform a&amp;nbsp;synchronous&amp;nbsp;AJAX call? That is, how would I treat an AJAX call as if it were inline javascript. The JQuery functions I mention above have a parameter where you would specify the call-back function that would run after the requested document is fully&amp;nbsp;retrieved&amp;nbsp;by the client, hence the response and call back are run asynchronously, or whenever the response has been received from the server. Then, how do I make this synchronous so that the code after the call does not execute until the javascript GET or POST is complete.&lt;br /&gt;&lt;br /&gt;Well, it is pretty darn easy, I've found. There is a single parameter, "async," that you set to false. That's it. I've written this whole blog post and the answer is a one-word parameter: async.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color: blue;"&gt;$.ajax(ajaxurl, {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;async: false&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, now you know how to do SJAX. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3914877521627981854?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3914877521627981854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3914877521627981854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3914877521627981854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3914877521627981854'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2012/01/synchronous-ajax-with-jquery.html' title='Synchronous AJAX with JQuery'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2257052335627039441</id><published>2011-12-01T08:43:00.000-08:00</published><updated>2011-12-16T09:50:05.548-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web app'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='sencha'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Web App Framework Review: Sencha Touch, jQuery Mobile &amp; more</title><content type='html'>I was recently evaluating the different frameworks for developing mobile web apps. I created an app in Sencha Touch, jQuery Mobile and JQTouch.(I also did a responsive web site using media queries, but this isn't so much a framework.) Here is my summary.&lt;br&gt;&lt;Br&gt;&lt;a href="http://www.sencha.com/products/touch"&gt;Sencha Touch&lt;/a&gt; is very different than anything I have used before. All of the content of the web app is built with JS. You code everything with JS. This causes things to be a bit janky, especially on older smart phones that need more time to process all that script. The biggest drawback, however, is that the online documentation is very difficult to use, especially for newbies. They have a few video tutorials online, but some are outdated and many are inconsistent (some use MVC architecture, for instance, which really throws you off if every other tutorial doesn't). All-in-all, if you are a web developer by trade and are used to manipulating DOM-level elements, this is a very frustrating framework to try to learn. Be ready to spend a serious amount of time on the learning curve. (Also, you have to pay Sencha if you want the latest and greatest version of their framework.) After attempting a few different projects with Sencha Touch over months, I grew frustrated and threw in the towel, even outsourcing the remainder of one project to India.&lt;br&gt;&lt;Br&gt;&lt;a href="http://jquerymobile.com/"&gt;jQuery Mobile&lt;/a&gt; is well documented and has plenty of example code for you to follow along. You develop your web app as you would a website and use different data-xxxx attributes on HTML objects to describe how objects should be styled or used. Once you have your structure, jQuery Mobile takes care of the rest, making everything look nice and employing fancy animated screen transitions. There is a small learning curve when getting started, nothing compared to Sencha Touch. And last but not least, jQuery Mobile is FOSS and appears to be in very active development. I was very happy with the example projects I put together with jQuery Mobile. They were easy to finish and worked well.&lt;br&gt;&lt;Br&gt;&lt;a href="http://jqtouch.com/"&gt;JQTouch&lt;/a&gt;, when I evaluated it, didn't appear to be in active development. The documentation was a little sketch and I found the demo/example code and the documentation disagreed on how things should be implemented. It took some trial and error to find out which methods were correct. I wouldn't recommend this framework for development unless they have taken great strides in recent months.&lt;br&gt;&lt;Br&gt;I want to mention &lt;a href="http://www.alistapart.com/articles/responsive-web-design/"&gt;responsive web design&lt;/a&gt; because it has great potential. While it doesn't give you the web app feel and isn't really a web app framework, it is definitely a good way to go if you need to develop a mobile web site. The pages load faster than they would using a web app framework (there is much less styling and JavaScript in the background). On the flip side, there are no fancy transitions, but that can be a good thing. You are in control of all the styling and the size of all the UI elements. Plus when designed right, it works on screens of all sizes -- there is no need for special mobile sub-domains or redirects.&lt;br&gt;&lt;Br&gt;In the end, no web app framework is perfect and completely replicates the native experience -- that hasn't happened, yet. With this said, I recommend jQuery Mobile and responsive web design as my favorites. They are different solutions for different problems (jQuery Mobile for a native-app experience, responsive for informational sites), but I would strongly suggest evaluating them if you have a new mobile web project coming up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2257052335627039441?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2257052335627039441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2257052335627039441' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2257052335627039441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2257052335627039441'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/11/web-app-framework-review-sencha-touch.html' title='Web App Framework Review: Sencha Touch, jQuery Mobile &amp; more'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-9132481265046529547</id><published>2011-11-30T09:27:00.001-08:00</published><updated>2011-11-30T09:32:21.870-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web app'/><category scheme='http://www.blogger.com/atom/ns#' term='sencha'/><category scheme='http://www.blogger.com/atom/ns#' term='hebrew'/><title type='text'>Hebrew Flash Card Web App</title><content type='html'>While evaluating different web app frameworks, I put together a little web app to help me get back up to speed with my biblical Hebrew vocab. And if you know anything about trying to read the Hebrew Bible, knowing a good amount of vocab is (unfortunately) essential. The flash card app is built using Sencha Touch's framework and is at &lt;a href="http://hebrewflash.me/"&gt;http://hebrewflash.me/&lt;/a&gt; ... check it out on your smartphone or iPod touch. The chapter divisions are based on &lt;i&gt;Basics of Biblical Hebrew&lt;/i&gt; by Pratico and Van Pelt (Zondervan) so it is a great free vocab tool for students using this textbook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-9132481265046529547?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/9132481265046529547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=9132481265046529547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/9132481265046529547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/9132481265046529547'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/11/hebrew-flash-card-web-app.html' title='Hebrew Flash Card Web App'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1382767306996359522</id><published>2011-11-17T23:23:00.001-08:00</published><updated>2011-11-17T23:50:56.188-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CENTOS'/><category scheme='http://www.blogger.com/atom/ns#' term='softlayer'/><category scheme='http://www.blogger.com/atom/ns#' term='fdisk'/><title type='text'>Partition and Mount a Drive on CentOS</title><content type='html'>I have a few servers over at Softlayer. I recently procured a monthly computing instance with an additional 200 gigs of drive space. Thing is, the extra HD space doesn't come partitioned, formated or mounted. So, here is what you do:&lt;br /&gt;&lt;br /&gt;First things first. Find the name of the physical drive:&amp;nbsp;&lt;span class="Apple-style-span" style="color: blue;"&gt;fdisk -l&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This command will return a list of drives and information about each. You should find one that hasn't been partitioned with a name like /dev/sdb (or in my case /dev/xvdc for a computing instance) or similar. Check the size of the drive to make sure it is what you are looking for.&lt;br /&gt;&lt;br /&gt;Next, partition the drive: &lt;span class="Apple-style-span" style="color: blue;"&gt;fdisk /dev/xvdc&lt;/span&gt;&amp;nbsp;(using the name of the drive, of course)&lt;br /&gt;&lt;br /&gt;Once in the fdisk utility, press &lt;span class="Apple-style-span" style="color: blue;"&gt;p&lt;/span&gt; to print the partitions to the screen. There should be none, because you haven't created any yet. If there are, are you sure you are using the right drive?&lt;br /&gt;&lt;br /&gt;Next press &lt;span class="Apple-style-span" style="color: blue;"&gt;n&lt;/span&gt; to create a new partition, press &lt;span class="Apple-style-span" style="color: blue;"&gt;p&lt;/span&gt; for a primary partition, &lt;span class="Apple-style-span" style="color: blue;"&gt;1&lt;/span&gt; for the first partition, and then use the default first and last cylinder (unless you know what you are doing, of course). Once this is set up, you can press &lt;span class="Apple-style-span" style="color: blue;"&gt;p&lt;/span&gt; to make sure it worked and then finally, &lt;i&gt;and most importantly&lt;/i&gt;, press &lt;span class="Apple-style-span" style="color: blue;"&gt;w&lt;/span&gt; to write the changes to disk.&lt;br /&gt;&lt;br /&gt;In the previous command, you'll get a slightly different name for the partition you created. It probably added a letter, something like /dev/sdb1 or /dev/xvdc1 would be right. You'll need it to format the drive:&amp;nbsp;&lt;span class="Apple-style-span" style="color: blue;"&gt;mkfs -t ext3 /dev/xvdc1 &lt;/span&gt;(I've used the ext3 file system, here, because it suited me just fine and is probably the most common.)&lt;br /&gt;&lt;br /&gt;Now, where would like the disk mounted? You'll have to create a folder as the mount point. If you want the disk to be used for a new /data directory, then you'll have to create a folder with this name: &lt;span class="Apple-style-span" style="color: blue;"&gt;mkdir /data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, add the drive and mount point to the&amp;nbsp;/etc/fstab file so that it will be mounted at boot time. Use your favorite text editor, as they say. I used&amp;nbsp;&lt;span class="Apple-style-span" style="color: blue;"&gt;vi /etc/fstab&lt;/span&gt; and I added a new row, matching the spacing of the other rows: &lt;span class="Apple-style-span" style="color: blue;"&gt;/dev/xvdc1 &amp;nbsp; /data &amp;nbsp; &amp;nbsp;ext3 &amp;nbsp; defaults &amp;nbsp; 1 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lastly, you mount the drive using &lt;span class="Apple-style-span" style="color: blue;"&gt;mount /dev/xvdc1&lt;/span&gt; and you are all done.&lt;br /&gt;&lt;br /&gt;Head on over to &lt;span class="Apple-style-span" style="color: blue;"&gt;cd /data&lt;/span&gt; and check it out. Or run &lt;span class="Apple-style-span" style="color: blue;"&gt;mount&lt;/span&gt; without parameters to check out the details.&lt;br /&gt;&lt;br /&gt;PS. Here are a &lt;a href="http://www.skullbox.net/newsda.php"&gt;couple&lt;/a&gt; &lt;a href="http://tldp.org/HOWTO/Partition/fdisk_partitioning.html"&gt;websites&lt;/a&gt; I used when I was working through this problem myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1382767306996359522?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1382767306996359522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1382767306996359522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1382767306996359522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1382767306996359522'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/11/partition-and-mount-drive-on-centos.html' title='Partition and Mount a Drive on CentOS'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5682090379181935510</id><published>2011-11-02T17:09:00.000-07:00</published><updated>2011-11-02T17:10:08.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><category scheme='http://www.blogger.com/atom/ns#' term='social'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='status'/><title type='text'>Synchronize Facebook Status &amp; Twitter</title><content type='html'>There is so much unhelpful junk out there on the web when you do a Google search on synchronizing&amp;nbsp;your Facebook status' with Twitter. So, a quick post.&lt;br /&gt;&lt;br /&gt;If you want your Facebook status to auto-tweet, go to&amp;nbsp;&lt;a href="http://www.facebook.com/twitter/"&gt;http://www.facebook.com/twitter/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want your Tweets to auto-Facebook-status-update (why is there no verb for this?), go to&amp;nbsp;&lt;a href="http://apps.facebook.com/twitter/"&gt;http://apps.facebook.com/twitter/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's just a slight change in the sub-domain. You don't need any 3rd part software or other service. Facebook and Twitter worked this out&amp;nbsp;among&amp;nbsp;themselves already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5682090379181935510?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5682090379181935510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5682090379181935510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5682090379181935510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5682090379181935510'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/11/synchronize-facebook-status-twitter.html' title='Synchronize Facebook Status &amp; Twitter'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4774808076433199889</id><published>2011-10-03T10:56:00.000-07:00</published><updated>2011-10-03T10:56:57.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Mobile Date Picker</title><content type='html'>I've been working with &lt;a href="http://jquerymobile.com"&gt;jQuery Mobile&lt;/a&gt; on a new form. I have the need for a datepicker and was really impressed with what a man by the name of jstage has put together. It is really thurough. So, if you are looking a flexible, &lt;a href="http://dev.jtsage.com/jQM-DateBox/"&gt;mobile date picker&lt;/a&gt;, this is a good one. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4774808076433199889?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4774808076433199889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4774808076433199889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4774808076433199889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4774808076433199889'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/10/jquery-mobile-date-picker.html' title='jQuery Mobile Date Picker'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7470627747926239603</id><published>2011-09-28T12:19:00.000-07:00</published><updated>2011-10-03T10:57:19.260-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>2 reasons I dislike Google's new look</title><content type='html'>Google has been rolling out a new look lately. They are going with a very simple gray and red scheme (and orange in blogger?) for most of their products. I like the idea of it. I also think it is very attractive. But I also have 2 problems with it. And they both have to do with the usability of the new design.&lt;br /&gt;&lt;br /&gt;1) They removed all but two visual cues. They've oversimplified it. When our eyes scan pages they pick up visual cues as to what is important and where to find things. It is very quick and very subconcious. Google used to have a lot of visual cues around the page with their old, colorful look. Now, they have red buttons, blue search buttons and everything else is gray. The red indicates something important. Everything else, they are saying, is not important. The problem is that is WAY over simplified. The fact is that this binary visual cue system (that is, red or gray) really slows me down. It is hard to find things quickly or to even orient myself on a page. I even have to think more when I try to figure out what Google service I am using. Their new look doesn't help my brain instantly digest a page. &lt;i&gt;It slows me down because it is ultimately camouflaging the entire page of non-red text links and text interactions in a sea of gray. &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;2) The new look also makes lots of space for the top of the page. The Google search bar is prominent and then the actions. Then the rest of the page, the area I spend most of my time working and interacting with important data (whether it is a calendar, email list or voicemail transcripts), is now smaller. Not a lot smaller but enough that it really is annoying. This area should be bigger if they are going to change things, not smaller. This is the most important part of the page. The search bar does not need 1/4 of the site. Search is a single input and I spend only a fraction of my time there.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FGNG4weQc7Y/ToNzNKvVkeI/AAAAAAAAAAQ/TTXT05U-mPo/s1600/google.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="http://3.bp.blogspot.com/-FGNG4weQc7Y/ToNzNKvVkeI/AAAAAAAAAAQ/TTXT05U-mPo/s320/google.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7470627747926239603?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7470627747926239603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7470627747926239603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7470627747926239603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7470627747926239603'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/09/2-reasons-i-dislike-googles-new-look.html' title='2 reasons I dislike Google&apos;s new look'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-FGNG4weQc7Y/ToNzNKvVkeI/AAAAAAAAAAQ/TTXT05U-mPo/s72-c/google.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3693446221976807845</id><published>2011-09-16T15:24:00.000-07:00</published><updated>2011-10-03T10:57:35.793-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wordpress'/><title type='text'>WordPress - Template for Parent Slug</title><content type='html'>WordPress allows you to create special template files for each category. You can name these theme template files cateogry-ID.php or category-SLUG.php, which is nice. However, if you are viewing a category and it does not have its own template, WordPress doesn't look for a parent template file. It just skips that. In lui of creating a template file for every child category (which would be a real pain), I found a &lt;a href="http://www.kristinfalkner.com/2011/08/a-super-helpful-function/trackback/"&gt;nice script&lt;/a&gt; that I've edited and improved to provide expanded support (it didn't support slugs in the template name).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Place this in your functions.php file: &lt;br /&gt;&lt;pre style="color: blue; font-size: .85em;"&gt;// Use a parent category slug if it exists&lt;br /&gt;function child_force_category_template($template) {&lt;br /&gt;	$cat = get_query_var('cat');&lt;br /&gt;	$category = get_category($cat);&lt;br /&gt;&lt;br /&gt;	if ( file_exists(TEMPLATEPATH . '/category-' . $category-&amp;gt;cat_ID . '.php') ) {&lt;br /&gt;		$cat_template = TEMPLATEPATH . '/category-' . $category -&amp;gt;cat_ID . '.php';&lt;br /&gt;		&lt;br /&gt;	} elseif ( file_exists(TEMPLATEPATH . '/category-' . $category-&amp;gt;slug . '.php') ) {&lt;br /&gt;		$cat_template = TEMPLATEPATH . '/category-' . $category -&amp;gt;slug . '.php';&lt;br /&gt;		&lt;br /&gt;	} elseif ( file_exists(TEMPLATEPATH . '/category-' . $category-&amp;gt;category_parent . '.php') ) {&lt;br /&gt;		$cat_template = TEMPLATEPATH . '/category-' . $category-&amp;gt;category_parent . '.php';&lt;br /&gt;		&lt;br /&gt;	} else {&lt;br /&gt;		// Get Parent Slug&lt;br /&gt;		$cat_parent = get_category($category-&amp;gt;category_parent);&lt;br /&gt;		&lt;br /&gt;		if ( file_exists(TEMPLATEPATH . '/category-' . $cat_parent-&amp;gt;slug . '.php') ) {&lt;br /&gt;			$cat_template = TEMPLATEPATH . '/category-' . $cat_parent-&amp;gt;slug . '.php';&lt;br /&gt;			&lt;br /&gt;		} else {&lt;br /&gt;			$cat_template = $template;&lt;br /&gt;			&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	return $cat_template;&lt;br /&gt;}&lt;br /&gt;add_action('category_template', 'child_force_category_template');&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3693446221976807845?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3693446221976807845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3693446221976807845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3693446221976807845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3693446221976807845'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/09/wordpress-template-for-parent-slug.html' title='WordPress - Template for Parent Slug'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-6592895886374039519</id><published>2011-08-29T14:21:00.000-07:00</published><updated>2011-08-29T14:31:00.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='shuffle'/><category scheme='http://www.blogger.com/atom/ns#' term='sort'/><title type='text'>JavaScript Array Scrambling</title><content type='html'>Ever need to randomly re-order an array in JavaScript? I have. And, unfortunately, there is no native support for a function like shuffle() in PHP.&lt;br /&gt;&lt;br /&gt;I found a few people suggest this technique, but I have found it to not be very good. The elements weren't all that random especially for the first and last elements in particular (they were usually one of two values).&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;myArray.sort( function(a, b) {&lt;br /&gt;	return Math.round((Math.random() * 100) - 50);&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It uses the native sort() function requires a function that will compare two values to determine which one comes first. If the number returned is negative it indicates that the 'a' item goes first and vice-versa if it is positive. &lt;br /&gt;&lt;br /&gt;I found the following function to be more random: &lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;function mixArray(arrayIn) {&lt;br /&gt;	var arrayOut = [];&lt;br /&gt;	var origLength = arrayIn.length;&lt;br /&gt;	for (var x = 0; x &lt; origLength; x++) {&lt;br /&gt;		var randIndex = Math.floor(Math.random() * arrayIn.length);&lt;br /&gt;		if (randIndex == arrayIn.length) randIndex--;&lt;br /&gt;		arrayOut.push(arrayIn.splice(randIndex, 1)[0]);&lt;br /&gt;	}&lt;br /&gt;	return arrayOut;&lt;br /&gt;};&lt;br /&gt;myArray = mixArray(myArray);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-6592895886374039519?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/6592895886374039519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=6592895886374039519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6592895886374039519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6592895886374039519'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/08/javascript-array-scrambling.html' title='JavaScript Array Scrambling'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7725332843567146205</id><published>2011-08-13T16:13:00.000-07:00</published><updated>2011-08-13T16:13:00.636-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='chown'/><category scheme='http://www.blogger.com/atom/ns#' term='rhel'/><category scheme='http://www.blogger.com/atom/ns#' term='CENTOS'/><category scheme='http://www.blogger.com/atom/ns#' term='su'/><title type='text'>CentOS and "su: incorrect password"</title><content type='html'>I made a mistake. I was setting up CentOS and accidentily ran &lt;span style="color:red;"&gt;chown -R 0 /&lt;/span&gt;. Yep, a global &amp;amp; recursive ownership change. Not a good thing.&lt;br /&gt;&lt;br /&gt;The first problem I noticed was that I couldn't use &lt;span style="Color:blue;"&gt;su -&lt;/span&gt;. It kept saying that I was using the "incorrect password" even though I was completely sure I was.&lt;br /&gt;&lt;br /&gt;I after digging around, I found someone who had the &lt;a href="http://forums.fedoraforum.org/archive/index.php/t-70032.html"&gt;same problem&lt;/a&gt; and a nice chap named Mike who, very impressively, pointed out the source of the problem (ie, the globaly recursive chown). His response: "He's got rather a mess, unfortunately." Uh oh.&lt;br /&gt;&lt;br /&gt;Well, it seems that the mess wasn't as bad as I thought. After fretting and digging around the interwebs, I came across this article about &lt;a href="http://www.webupd8.org/2010/02/rhel-chmod-or-chown-issued-by-mistake.html"&gt;resetting file permissions&lt;/a&gt; on RHEL (and CentOS by extension, of course). Hallelujah!!&lt;br /&gt;&lt;br /&gt;Following the instructions there, I did this to fix my woes:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;rpm --setperms -a&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am not convinced everything is back in its proper place and I will probably see more fallout from my careless command executing. BUT, I can successfully "su -" without any bogus password complaints. That I like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7725332843567146205?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7725332843567146205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7725332843567146205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7725332843567146205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7725332843567146205'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/08/centos-and-su-incorrect-password.html' title='CentOS and &quot;su: incorrect password&quot;'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1738740402916161760</id><published>2011-08-08T12:27:00.000-07:00</published><updated>2011-08-09T12:20:59.027-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='allstate'/><title type='text'>Allstate's Roadside "Assistance"</title><content type='html'>&lt;strong style="color:green"&gt;UPDATE 8/9/11:&lt;/strong&gt; &lt;em&gt;Allstate tracked me down to make things right. They are refunding my payment and explained that things don't normally go this way. What an impressive response.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;It should be called "Allstate's Roadside Torture". And, I should have just googled "tow truck" ... I would have saved a lot of wasted time. I need to rant, badly.&lt;br /&gt;&lt;br /&gt;My wife is pregnant and stuck in a parking lot. She calls the number that Allstate gives us for roadside assistance and &lt;span style="font-style:italic;"&gt;can't even get past the first robo-bot operator&lt;/span&gt;. So she calls me for help. So, I call Allstate's well-promoted "Good Hands Roadside Assistance"... this is how it went.&lt;br /&gt;&lt;br /&gt;I call the phone number the publicize for the service (1-800-255-7828). It is answered by a machine that wants me to speak what I want. So I say "roadside assistance." "You want coporate?" replies the machine. No, "I want help". Not working, so it offers me a directory and of course there is no roadside assitance options. After some very unfruitful back and forth with this annoying bot, it sends me to an operator.&lt;br /&gt;&lt;br /&gt;The nice foreign operator would like to validate my policy. He needs my name. Then my SSN last four. Then he needs to validate every other peice of information he can find. Gotta check my zip and address and phone and email address. Seriously!? I need help. And these are the things you want to ask me about?&lt;br /&gt;&lt;br /&gt;When he finally finishes with his 20 questions, THEN he tells me I need to call another number. Call 1-877-248-1266. Great ok. Thanks for that. &lt;br /&gt;&lt;br /&gt;Now I am on to this new number. And a new game. First I get a message about adverse weather conditions in my area... I live near Seattle and it is the middle of the summer. What adverse weather conditions? You mean the 70 degrees and overcast? Is this causing havoc on your systems? Now after explaining that I need help to a new telephone operator, he also tells me I need to call a different number. This is a joke, right? Nope, I have to call a new number: 1-877-266-7561.&lt;br /&gt;&lt;br /&gt;On to the third operator. Now I am having fun. Now I need to give him my credit card, phone number, email address, home address, zip code and whatever else he could come up with. After 10 minutes of divulging personal information he can finally could get me assistance. He puts me on hold and then finds someone that can help within the next 50 minutes. 50 minutes?! I am in the middle of a urban shopping center and 50 minutes is their timeline? I am not in the mountains or in some rural community, I could understand, then. I guess it is the best they can do because of all this crazy weather (sarcasm).&lt;br /&gt;&lt;br /&gt;I will NEVER use Allstate's roadside service again. EVER. And Allstate needs to try their own service before they sell it. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1738740402916161760?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1738740402916161760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1738740402916161760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1738740402916161760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1738740402916161760'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/08/allstates-roadside-assistance.html' title='Allstate&apos;s Roadside &quot;Assistance&quot;'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5628778918046039565</id><published>2011-08-05T20:12:00.000-07:00</published><updated>2011-08-05T20:24:55.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='selinux'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql_connect'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>SE Linux and "Can't connect to MySQL server"</title><content type='html'>&lt;div&gt;I've been setting up a server for the last few days for production. It is to be highly secure, so it is a real pain. Anyway, I ran into this problem where I could not connect to the remote database. It was driving me nuts. (I'm using CentOS by the way, and I was setting up a web server to connect to a remote MySQL database server.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, I checked that I was getting network connectivity by doing &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color:blue;"&gt;telnet 10.0.0.1 3306&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;from the command line (where 10.0.0.1 is the IP of the database server). And, I got some gobbledygook that had the words "MySQL" in it, so I know that worked and the network was there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Then, I checked the database's user list, to make sure connections were allowed from the user at my host. I did this by going into &lt;/span&gt;MySQL's &lt;span class="Apple-style-span"&gt;CLI and entering &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color:blue;"&gt;SELECT `Host`,`User` FROM mysql.user WHERE 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This printed out a list of all the users so I just made sure it and the host were correct. (There are more MySQL troubleshooting tips &lt;a href="http://dev.mysql.com/doc/refman/5.5/en/can-not-connect-to-server.html"&gt;here&lt;/a&gt;.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then it finally hit me. What always causes problems for hours on end? SE Linux!! I know it is good for my server, but it sure does drive me nuts sometimes. If you want your web server to be able to connect to a remote DB, you have to give it rights with SE Linux. Run this at the command line: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color:blue;"&gt;setsebool -P httpd_can_network_connect_db on&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and for good measure: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color:blue;"&gt;setsebool -P httpd_can_network_connect on&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;There, all fixed!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update&lt;/b&gt;: HA HA! I've had this &lt;a href="http://firelitdesign.blogspot.com/2010/10/php-to-remote-database-error-cant.html"&gt;problem before&lt;/a&gt; and completely forgot about it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5628778918046039565?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5628778918046039565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5628778918046039565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5628778918046039565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5628778918046039565'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/08/se-linux-and-cant-connect-to-mysql.html' title='SE Linux and &quot;Can&apos;t connect to MySQL server&quot;'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3465154036320091456</id><published>2011-08-01T08:25:00.000-07:00</published><updated>2011-08-01T08:27:25.708-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utf-8'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP UTF-8 Script Input Cleaner</title><content type='html'>When you switch to UTF-8 on your website, there is a few things that everyone recommends (for good reason) like using multi-byte functions (e.g., mb_strlen()) and adding the HTTP-EQUIV attribute header. One of these commonly recommended things is that you should clean up all user-submitted input.&lt;br /&gt;&lt;br /&gt;With UTF-8 comes the ability to submit a lot of crazy characters to the script, either by POST or GET. These crazy characters might be control characters, invalid UTF-8 characters or some other charset that was mixed in for good measure. So, I created the following function to help clean my inputs: &lt;br /&gt;&lt;br /&gt;&lt;pre style="color:blue;"&gt;&amp;lt;?PHP&lt;br /&gt;&lt;br /&gt;function cleanUTF8(&amp;$input, $stripSlashes = true) {&lt;br /&gt; if ($stripSlashes) $stripSlashes = get_magic_quotes_gpc();&lt;br /&gt; if (is_array($input)) &lt;br /&gt;  foreach ($input as $k =&gt; $v) cleanUTF8($input[$k], $stripSlashes);&lt;br /&gt; else {&lt;br /&gt;  if ($stripSlashes) $input = stripslashes($input);&lt;br /&gt;  $input = mb_convert_encoding($input, "UTF-8", "UTF-8");&lt;br /&gt;  $input = preg_replace('!\p{C}!u', '', $input);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It is a recursive function in that it will iterate into a variable if arrays exist, as they sometimes do. It will also strip slashes for you if your version of PHP still has magic quotes on.&lt;br /&gt;&lt;br /&gt;It removes invalid characters through the &lt;a href="http://www.php.net/manual/en/function.mb-convert-encoding.php"&gt;mb_convert_encoding()&lt;/a&gt; function. Anything that is not UTF-8 is dropped. Lastly, the fancy &lt;a href="http://www.php.net/manual/en/function.preg-replace.php"&gt;preg_replace()&lt;/a&gt; function removes all control characters. (The \p{C} means "&lt;a href="http://www.php.net/manual/en/regexp.reference.unicode.php"&gt;all control characters&lt;/a&gt;", the !! are &lt;a href="http://www.php.net/manual/en/regexp.reference.delimiters.php"&gt;delimiters&lt;/a&gt; the same as // or ##, and the last "u" modifier means "&lt;a href="http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php"&gt;treat this as UTF-8&lt;/a&gt;.")&lt;br /&gt;&lt;br /&gt;At the top of your script add this to iterate over the input array and clean up the data:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:blue;"&gt;&amp;lt;?PHP&lt;br /&gt;&lt;br /&gt;cleanUTF8($_POST);&lt;br /&gt;cleanUTF8($_GET);&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3465154036320091456?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3465154036320091456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3465154036320091456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3465154036320091456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3465154036320091456'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/08/php-utf-8-script-input-cleaner.html' title='PHP UTF-8 Script Input Cleaner'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3672312129166297760</id><published>2011-06-15T08:47:00.000-07:00</published><updated>2011-06-15T08:47:00.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><title type='text'>HTML5 Video File Conversions</title><content type='html'>I think the best part of HTML5 Video is getting to convert the source file into a billion different formats for all the browsers (note: sarcasm). For a while I was struggling with Adobe's Media Encoder, trying to get that to do my work. It never really rose to the challenge. &lt;br /&gt;&lt;br /&gt;Recently I've been using Adobe just for the FLV/FLA files (for flash fall-back) and then using &lt;a href="http://www.mirovideoconverter.com/"&gt;Miro's video converter&lt;/a&gt; for the rest. It works a lot better, but is still not fool proof. I've found that the iPad and iPhone formats are still a little hit or miss when I test on the various iOS versions out there. What I like about Miro, though, is that I don't need to tune every parameter for the mp4. All I do is pick iPad and it takes care of the rest. Beautiful.&lt;br /&gt;&lt;br /&gt;Another option is &lt;a href="http://zencoder.com/"&gt;zencoder&lt;/a&gt; which has a nice API you can use. This would be a great option if you had to convert uploaded video or if you had a ton of video and you wanted to programmatically convert it. Just wanted to throw that out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3672312129166297760?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3672312129166297760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3672312129166297760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3672312129166297760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3672312129166297760'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/06/html5-video-file-conversions.html' title='HTML5 Video File Conversions'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2051461132220783924</id><published>2011-06-04T09:59:00.000-07:00</published><updated>2011-06-09T17:11:55.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudfront'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>iPhone, HTML5 Video &amp; AWS: Movie format unsupported</title><content type='html'>I've been working hard on a website that will have a video section using HTML5 video with a flash video fall back. It has taken way longer than I ever expected. What a mess this has become, trying to support every browser's own format, and then trying to support old browsers on top of that. Yikes.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One particularly troubling part has been the iPhone/iPod Touch support for video. Using multiple video encoders (Miro, QuickTime Pro, and even Sony Vegas HD) I was unable to post any video on the web that did not cause the iPhone to say "This movie format is unsupported." And it was crap, because I knew it WAS supported. And, even worse, the video would &lt;i&gt;sometimes&lt;/i&gt; work... randomly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, after lots of pain and banging my head against the wall, I found it out it was because I was using HTTPS on Cloudfront. For some reason, iOS &lt;a href="http://stackoverflow.com/questions/4889653/jw-player-with-cloudfront-on-ios-not-working"&gt;occasionally rejects&lt;/a&gt; the Amazon Cloudfront SSL/TLS. Nice. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, just take the S off of the HTTPS when playing HTML5 video served from Cloudfront. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2051461132220783924?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2051461132220783924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2051461132220783924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2051461132220783924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2051461132220783924'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/06/iphone-html5-video-movie-format.html' title='iPhone, HTML5 Video &amp; AWS: Movie format unsupported'/><author><name>Eric</name><uri>http://www.blogger.com/profile/15254841764690459317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7468940539420802924</id><published>2011-06-01T08:46:00.000-07:00</published><updated>2011-06-01T08:47:10.669-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE8'/><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='flowplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='videojs'/><title type='text'>Flowplayer Flash Video and SetReturnValue</title><content type='html'>I recently set up a HTML5 video system with flash video fallback, for those crazy people with old browsers. &lt;a href="http://VideoJS.com"&gt;VideoJS.com&lt;/a&gt; is a great site for explaining how to do this. Use this with the site with the &lt;a href="http://diveintohtml5.org/video.html"&gt;info here&lt;/a&gt; for a great solution.&lt;br /&gt;&lt;br /&gt;Anyway, the flash fall back using Flowplayer commercial was giving me a bunch of issues on IE7 &amp; IE8. One was there was an error that was being logged in the console about 'SetReturnValue' not being defined. Turns out, the &amp;lt;object&amp;gt; tag must have an ID. The example code I copied from VideoJs's front page didn't have this. So, make sure you have a unique id set.&lt;br /&gt;&lt;br /&gt;The other issue had to do with Flowplayer's branding removal (with a commercial license). Turns out, the registered domain name is not for the domain the video is being played on, but the domain the swf file is loaded from. I had the swf files on a CDN and the branding was not removed. Just had to move it back to the main site and all was good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7468940539420802924?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7468940539420802924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7468940539420802924' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7468940539420802924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7468940539420802924'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/06/flowplayer-flash-video-and.html' title='Flowplayer Flash Video and SetReturnValue'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2372754152446530500</id><published>2011-04-05T11:08:00.000-07:00</published><updated>2011-07-16T20:28:20.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='master-master'/><category scheme='http://www.blogger.com/atom/ns#' term='replication'/><category scheme='http://www.blogger.com/atom/ns#' term='errors'/><title type='text'>How to fix MySql Replication Error 1236</title><content type='html'>We have some websites that use two database servers in master-master replication. Recently one of the servers died and had to be resurrected. (They are cloud based and SoftLayer doesn't seem to have their cloud-based offering thing nailed down, yet. Every week one of them will go down and be unresponsive until tech support does some magic.)&lt;br /&gt;&lt;br /&gt;After one of the servers was brought back up the other server would not connect. It "Slave_IO_Running: No" and "Seconds_Behind_Master: null" which means it was not playing nicely.&lt;br /&gt;&lt;br /&gt;First, I went to the MySql log files, which for this server is found at /var/log/mysql.log and looked at the last few messages here by running "tail /var/log/mysql.log" from the command prompt. This revealed the error number (server_errno=1236). It also had the following info:&lt;br /&gt;&lt;pre style="color:green;"&gt;Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Just before this entry in the mysql.log it indicates the file and position that it is trying to read. So, with this data in hand, I headed over to the master server and took a look at the bin logs. They are located in /var/lib/mysql/. Here I took a look at the file in question using the &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/mysqlbinlog.html"&gt;mysqlbinlog utility&lt;/a&gt;. I used the following command to check out the bin log. Obviously, you'll have to replace the position and file name with the position and file indicated in your mysql.log.&lt;br /&gt;&lt;pre style="color:blue;"&gt;mysqlbinlog --offset=128694 mysql-bin.000013&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And, this is what I saw here, among other things:&lt;br /&gt;&lt;pre style="color:green;"&gt;Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Well, that explains things! When the server crashed the bin log was not closed properly. This is easy to fix. Going back to the slave server, I stopped the slave, reset the bin log position and started the server.&lt;br /&gt;&lt;pre style="color:blue;"&gt;STOP SLAVE;&lt;br /&gt;CHANGE MASTER TO MASTER_LOG_POS = 0;&lt;br /&gt;CHANGE MASTER TO MASTER_LOG_FILE = 'mysql-bin.000014';&lt;br /&gt;START SLAVE;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I simply pointed the slave to the start of the next bin log. It started right up with no problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2372754152446530500?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2372754152446530500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2372754152446530500' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2372754152446530500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2372754152446530500'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/04/how-to-fix-mysql-replication-error-1236.html' title='How to fix MySql Replication Error 1236'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-6181350135494447399</id><published>2011-03-12T19:20:00.000-08:00</published><updated>2011-03-12T19:22:43.762-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='parser'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='errors'/><title type='text'>SimpleXMLElement and EntityRef XML parser</title><content type='html'>I am using the PHP class SimpleXMLElement to take care of parsing some XML data that I am sourcing from 3rd parties. It had been working well for a while, but I just discovered an error that was popping up frequently. This error was "XML parser error : EntityRef: expecting ';'". &lt;br /&gt;&lt;br /&gt;This error comes about as a result of XML input data being improperly encoded. Two data sources I was using had encoded things like "&amp;", "&lt;" and "&gt;" by leaving off the semi-colon. In other words, the ampersand had been encoded as "&amp;amp" instead of "&amp;amp;". SimpleXMLElement doesn't like this and throws a warning fest.&lt;br /&gt;&lt;br /&gt;To fix the problem, I added a line before calling SimpleXMLElement:&lt;br /&gt;&lt;pre style="color:blue;"&gt;$xmldata = preg_replace('/&amp;(amp|lt|gt)([^;])/', '&amp;$1;$2', $xmldata);&lt;br /&gt;$obj_xml = new SimpleXMLElement($xmldata);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The preg_replace fixes the encoding problem and adds the ampersand for you. Just a note, this will only fix the encoding for the three characters I specified above ("&amp;", "&lt;" and "&gt;"). If there are others that are causing problems, you'll have to add them to the first argument of preg_replace().&lt;br /&gt;&lt;br /&gt;Here is &lt;a href="http://www.microshell.com/programming/php/xml-and-ampersand/"&gt;another blog/article&lt;/a&gt; that helped me discover the underlying issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-6181350135494447399?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/6181350135494447399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=6181350135494447399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6181350135494447399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6181350135494447399'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/03/simplexmlelement-and-entityref-xml.html' title='SimpleXMLElement and EntityRef XML parser'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8079778583695058435</id><published>2011-03-02T19:27:00.000-08:00</published><updated>2011-03-02T19:27:00.517-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='backblaze'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='carbonite'/><title type='text'>Computer Backups</title><content type='html'>I use &lt;a href="http://www.backblaze.com/"&gt;Backblaze&lt;/a&gt; to back-up my computer's files. Let me explain why...&lt;br /&gt;&lt;br /&gt;It is always important to have your files backed-up. And to have those files backed-up in a location that is secure. That is, away from your computer and locked and/or encrypted. There are a few big players in the online backup service sector. Carbonite and Mozy are both good examples.&lt;br /&gt;&lt;br /&gt;It is important to have all my files backed up, especially on my work computer. If something were to happen, like fire or theft, I need to have a backup copy of all my files so I can get back to work as soon as possible. The great thing about online back-up services is that your back-up happens automatically, whenever you have an internet connection. The more automated the better!&lt;br /&gt;&lt;br /&gt;I've been using Carbonite for the past couple of years for my laptop. It has worked pretty good. I like how they add a little icon in your file explorer on top of each folder and file that is backed up. It is a great visual cue that helps me to see exactly what is backed up and what is not.&lt;br /&gt;&lt;br /&gt;HOWEVER, over the past few months my computer fan will turn on really loud, even when I am not using the computer. Looking closer I found that Carbonite's software was eating around 50% of my processor, causing my computer to heat up and the fan to turn on. As soon as I disabled Carbonite, the CPU utilization fell and the fan turned off. That's not right!&lt;br /&gt;&lt;br /&gt;Well, I finally broke down and contacted their technical support. First, their technical support sucks. They have a crumby web interface, their emails are formated all funny, and the people on the other end take forever to get back to you. But, the worst part is that after I jumped through their hoops and they finally got back to me, all they said is that I use my computer "too much." Seriously!? It runs at 50% even when I am not using my computer. &lt;br /&gt;&lt;br /&gt;What a waste of my time.&lt;br /&gt;&lt;br /&gt;SO, now I am using Backblaze. I heard about them a while back through &lt;a href="http://hardware.slashdot.org/story/09/09/02/138209/Build-Your-Own-28M-Petabyte-Disk-Array-For-117k"&gt;this Slashdot article&lt;/a&gt; about how they had made their hardware design public. Very cool: open-source hardware. Now that's an innovative company. And, as a double bonus, they will &lt;a href="http://blog.backblaze.com/2008/11/12/how-to-make-strong-encryption-easy-to-use/"&gt;encrypt my files&lt;/a&gt; in a way that is extra safe. Only I can open my files. (I have a feeling those tech guys are Carbonite can browse my personal files whenever they'd like.) Last, but not least, when I need to restore my backed-up files, they will mail me a physical disk with all my files on it. Awesome!&lt;br /&gt;&lt;br /&gt;And, I must mention this because I am a web designer, the Backblaze website is WAY better looking. Nice work, guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8079778583695058435?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8079778583695058435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8079778583695058435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8079778583695058435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8079778583695058435'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/03/computer-backups.html' title='Computer Backups'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7204949439439246164</id><published>2011-02-24T15:36:00.000-08:00</published><updated>2011-02-28T22:37:01.290-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SHA256'/><category scheme='http://www.blogger.com/atom/ns#' term='passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='SHA1'/><category scheme='http://www.blogger.com/atom/ns#' term='MD5'/><category scheme='http://www.blogger.com/atom/ns#' term='hash'/><category scheme='http://www.blogger.com/atom/ns#' term='salt'/><title type='text'>Storing Passwords in Databases</title><content type='html'>In the last few weeks/months there have been a couple high-profile computer breaches in the news. One was at Plenty of Fish, an online dating website. The second was at HBGary, a computer security company (ah, the irony).&lt;br /&gt;&lt;br /&gt;Plenty of Fish made a major security mistake. They stored passwords in their database in plain text. This means, if you had access to their database (legitimately or through a SQL injection vulnerability) you could see anyone's password. And this is typically a big security no, no. Passwords should always be hashed before being stored in a database. &lt;br /&gt;&lt;br /&gt;Hashing is a one-way encryption that prevents a password (or any character string) from being un-encrypted. So, when a user logs in, you hash their entered password and compare it against the hashed password in the database. If they match, the password is the same. It is simple AND safe.&lt;br /&gt;&lt;br /&gt;Two particular hashes are quite popular. SHA1 and MD5. Although they are beginning to be a bit dated now and, if I remember correctly, MD5 has been shown to have some vulnerabilities. Some of the more recent hashes are SHA256 and SHA512. (Use the hash function to implement them in PHP.)&lt;br /&gt;&lt;br /&gt;Over at HBGary, the "security" firm, they actually did use hashes to store passwords. They used the common MD5 hashing algorithm. The problem with their implementation, is that they added nothing to the password before hashing it. This is an issue because people have created massive online collections of auto-generated hashes from between 1 and 12 characters (typically). So, if you have a hash, and you're a hacker, you look up the hash in this table and (if it is a normal-sized password) it will likely be found.&lt;br /&gt;&lt;br /&gt;The best way to make this look-up table irrelevant is to add a set of constant, known characters to the password before the hashing takes place. This technique, called adding "salt" to the password, will create an extra long password, that will never show up in a look-up table. Why? Because it would take more than a lifetime to compute look-up tables that long. Hashing is an expensive operation, in terms of CPU cycles, and the longer the original text, the longer it takes to compute.&lt;br /&gt;&lt;br /&gt;If you are building a website, and you have passwords to store, remember: salt &amp; hash. Mmmm, sounds tasty!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7204949439439246164?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7204949439439246164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7204949439439246164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7204949439439246164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7204949439439246164'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/02/storing-passwords-in-databases.html' title='Storing Passwords in Databases'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3668680203592436657</id><published>2011-02-18T16:22:00.000-08:00</published><updated>2011-12-30T08:16:14.052-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blue screen'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='macbook'/><title type='text'>Mac crash / Mac blue screen flash during use (not at startup)</title><content type='html'>A few days ago my MacBook Pro (running OSX 10.6.6) starting having some weird issues. I would be working on the computer, and all of a sudden the screen would flash blue, and then a few seconds later show my blank desktop background, and then finally the dock would come back. All within a few seconds. All of my applications would be closed as if it had restarted. &lt;br /&gt;&lt;br /&gt;This has happened about five times, all when I was using different programs. The first time it happened, it was after I dragged a file to trash; after that it happened while using iPhoto and it had frozen up on me; and another time while using Safari. Most recently, the blue screen flash occurred after waking the computer from sleep and trying to close the browser windows in Google Chrome.&lt;br /&gt;&lt;br /&gt;I've researched a lot of Mac forums and apparently this is a common problem, and I saw posts from 2007 that were never resolved; I still haven't found a forum with a clear answer.&lt;br /&gt;&lt;br /&gt;Anyways, I reviewed the console from the crash this morning, and saw that there was quite a bit of activity all occurring around the time of the blue screen flash, like "windowserver port death" and a whole lot of errors and warnings. This narrowed it down to a possible problem with the window server. I took it in to the Apple store nearby and spoke with a Mac Genius. I showed him the console with the errors, and he suspected it might be a permissions error causing the system to crash and then reboot (looks like it is logging out and then re-logging in at rapid pace). &lt;br /&gt;&lt;br /&gt;The Mac Genius attached an external hard drive and rebooted from that and ran permissions repair. He recommended doing this every 3 months or so since it is easy to corrupt permissions. I had never done this before, and it took about 12 minutes. He also said he would recommend doing this at home by booting from the Install DVD I got with the computer. To do this, you have to press the 'option' key during startup in order to have the option to boot from the DVD. (I guess this is a change from pressing "C" with older models.)&lt;br /&gt;&lt;br /&gt;Here's how to reboot and repair permissions from the OSX install DVD:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Insert install DVD, restart computer, and hold down the 'option' key during startup.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This will give the options of booting from the hard drive or the DVD – select DVD&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The reboot could take up to 5 minutes or so.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When install screen comes up, go to "utilities" in the top menu bar and select "Disk Utility."&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on the main hard drive (not the subfolder/partition), and click on "repair disk permission" button, allowing the process to complete. This could take a while, especially if never done before. (It could take up to 3 hours, but mine took 12 minutes.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Quit Mac OSX installer from the menu bar and restart.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;We were thinking this should clear up the problem, but if not, the second resort is to archive &amp;amp; reinstall OSX (archive will save all your data), and a third resort is to erase and install (after full backup of all data, of course).  We'll see what happens! Hopefully it will work. That would be nice, since it is rather annoying to get the blue screen flash in the middle of doing something, and loosing any data you were working on.  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b style="background-color: yellow;"&gt;Update 5/17/11&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Well, after many months, many disk permissions repairs and many more blue screen crashes, we decided to go back to the Genius Bar. It was evident that the problem was not fixed. When we returned they ran a test on the hard drive. It apparently failed the test to some degree because they replaced the hard drive. Perhaps it was a hardware problem all along? We'll see.&lt;br /&gt;&lt;br /&gt;-- This is a guest post by my wife Susan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3668680203592436657?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3668680203592436657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3668680203592436657' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3668680203592436657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3668680203592436657'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/02/mac-crash-mac-blue-screen-flash-during.html' title='Mac crash / Mac blue screen flash during use (not at startup)'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8559145034570896509</id><published>2011-02-15T13:21:00.000-08:00</published><updated>2011-02-15T13:23:01.644-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='selinux'/><category scheme='http://www.blogger.com/atom/ns#' term='CENTOS'/><category scheme='http://www.blogger.com/atom/ns#' term='vsftpd'/><title type='text'>VSFTPD &amp; SELinux</title><content type='html'>This can be a fun combo to work with. SELinux, or Security Enhanced Linux, is the life of any party. And Google searches about SELinux-related problems makes it pretty evident that very few people have taken the time to understand how this program works. I ran across numerous people simply suggesting that you turn off SELinux if it is getting in the way. &lt;br /&gt;&lt;br /&gt;Well, I didn't buy into this wholesale approach to getting things to work. Besides, I want a secure system and if SELinux is going to help me in the long run, I want it enabled.&lt;br /&gt;&lt;br /&gt;So, VSFTPD, or Very Secure FTP Daemon, is pretty standard. You can install it on CentOS systems (or RHEL, for that matter) by running "yum install vsftpd" from the command line. Once you get it installed you can make changes to the configuration file at "/etc/vsftpd/vsftpd.conf" using a file editor. Also, to make sure it is always running in the background run "chkconfig vsftpd on" and "service vsftpd restart" from the command line.&lt;br /&gt;&lt;br /&gt;Make sure the configuration file is set up properly. Only give FTP access to a limited number of users (never include root), disable anonymous access and make sure users they can only access the files they need (I recommend chroot-ing them).&lt;br /&gt;&lt;br /&gt;Now that VSFTPD is running, how do you allow users to access their home directories? SELinux usually will get in the way of this. Well, there is a SELinux setting for this called "ftp_home_dir" and this will allow users to access their home directory via FTP. To set this, from the command line run&lt;br /&gt;&lt;pre style="color:blue;"&gt;setsebool -P ftp_home_dir 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Be sure to also check &lt;a href="http://en.wikipedia.org/wiki/Chmod"&gt;file permissions&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Chown"&gt;file ownership&lt;/a&gt;, if you run into problems. A file must be writable for everyone if they do not specifically own it.&lt;br /&gt;&lt;br /&gt;If this fails to grant you FTP access where you need it, or your set-up is slightly different, you can always allow the FTP daemon full access to all files by running&lt;br /&gt;&lt;pre style="color:blue;"&gt;setsebool -P allow_ftpd_full_access 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is granting a bit more power to the FTP daemon than is necessary, but it is much better than just disabling SELinux all-together. &lt;br /&gt;&lt;br /&gt;By the way, here is a &lt;a href="http://wiki.centos.org/HowTos/SELinux"&gt;great intro to CentOS &amp; SELinux&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8559145034570896509?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8559145034570896509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8559145034570896509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8559145034570896509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8559145034570896509'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/02/vsftpd-selinux-apache.html' title='VSFTPD &amp; SELinux'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5557771253106248239</id><published>2011-02-09T21:15:00.001-08:00</published><updated>2011-02-09T21:15:45.504-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><category scheme='http://www.blogger.com/atom/ns#' term='ranking'/><title type='text'>Calculating Popularity</title><content type='html'>I am working on a new site that will have a sort of ranking system. It will be used to list a series of resources that visitors can rate and score. This scoring will then drive what resources are listed first and what resources are listed last. &lt;br /&gt;&lt;br /&gt;Well, how in the world do you calculate ratings? I want to make sure new sites get a chance to rank high (so that old sites don't stay at the top forever). I also want to make sure that sites with a low number of votes are put at the top, just because all of the 2 people voted the max. And the list goes on, the more you think about it, the more there is to it.&lt;br /&gt;&lt;br /&gt;Well, &lt;a href="http://blog.linkibol.com/2010/05/07/how-to-build-a-popularity-algorithm-you-can-be-proud-of/"&gt;this blog entry&lt;/a&gt; does a great job of explaining different ranking algorithims and how they work. I give it a great score and a high rank. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5557771253106248239?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5557771253106248239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5557771253106248239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5557771253106248239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5557771253106248239'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/02/calculating-popularity.html' title='Calculating Popularity'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4056548041891703943</id><published>2011-01-13T18:35:00.000-08:00</published><updated>2011-01-13T18:35:00.788-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql_connect'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Database connection (mysql_connect) taking a long time</title><content type='html'>After setting up a new database, the connection from the web servers was really slow. We had enough combined traffic to slow down the response of the PHP function mysql_connect() to between 5 and 20 seconds. But the current load on the MySQL server wasn't that high... something fishy was going on. &lt;br /&gt;&lt;br /&gt;What I found was that the database server was trying to do a reverse look-up on every connection using the IP. It was slowing down every connection for this. You can disable this by using the following option, as explained &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_skip-name-resolve"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;--skip-name-resolve&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"Do not resolve host names when checking client connections. Use only IP addresses. If you use this option, all Host column values in the grant tables must be IP addresses or localhost. See Section 7.9.8, "How MySQL Uses DNS"." --&amp;gt; &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_skip-name-resolve"&gt;http://dev.mysql.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway, you can make this change in the configuration file to be loaded at start-up (it doesn't have to be a command-line option). Simply add "skip-name-resolve" on a new line in the /etc/my.cnf file and restart your DB server. Voilà!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4056548041891703943?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4056548041891703943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4056548041891703943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4056548041891703943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4056548041891703943'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/01/database-connection-mysqlconnect-taking.html' title='Database connection (mysql_connect) taking a long time'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7639589824897452203</id><published>2011-01-07T12:14:00.000-08:00</published><updated>2011-01-07T12:14:00.924-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='good design'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Good Design</title><content type='html'>I've been thinking about good design for the past few months. Apple always seems like the best example of good design because of the simplicity, ease of use and rugged product designs.&lt;br /&gt;&lt;br /&gt;I came across &lt;a href="http://www.unplggd.com/unplggd/dieter-rams-design-icon-124834"&gt;this article&lt;/a&gt; today about Dieter Rams, a product designer that has influenced many, including Apple.&lt;br /&gt;&lt;br /&gt;Here are 10 principles of good design attributed to him:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Good design is innovative. &lt;br /&gt;&lt;li&gt;Good design makes a product useful. &lt;br /&gt;&lt;li&gt;Good design is aesthetic. &lt;br /&gt;&lt;li&gt;Good design helps us to understand a product. &lt;br /&gt;&lt;li&gt;Good design is unobtrusive. &lt;br /&gt;&lt;li&gt;Good design is honest. &lt;br /&gt;&lt;li&gt;Good design is durable. &lt;br /&gt;&lt;li&gt;Good design is consequent to the last detail. &lt;br /&gt;&lt;li&gt;Good design is concerned with the environment. &lt;br /&gt;&lt;li&gt;Good design is as little design as possible.&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7639589824897452203?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7639589824897452203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7639589824897452203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7639589824897452203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7639589824897452203'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/01/good-design.html' title='Good Design'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5960402803655899937</id><published>2011-01-01T07:50:00.000-08:00</published><updated>2011-01-01T07:50:33.537-08:00</updated><title type='text'>Happy New Year!</title><content type='html'>It is here: 2011. To begin this new year my wife and I will be moving to Seattle. We are excited and are looking forward to the change in seasons, again. It has also been over one year since I began web development full-time (I had done it part-time for many years prior). Things have gone very well for a first year, a blessing for sure. So many adventures.&lt;br /&gt;&lt;br /&gt;Happy New Year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5960402803655899937?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5960402803655899937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5960402803655899937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5960402803655899937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5960402803655899937'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2011/01/happy-new-year.html' title='Happy New Year!'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7939488611327186257</id><published>2010-12-11T15:37:00.000-08:00</published><updated>2010-12-11T15:41:30.840-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Pure-FTPd and Passwords</title><content type='html'>I use pure-ftpd as my FTP server, mostly because it was on the first server I managed and I got used to it.  I've been having a little difficultly with setting it up on two new cloud computers and I came across this helpful note.&lt;br /&gt;&lt;br /&gt;I set up new linux users and then when I tried to connect via FTP I would get a &lt;span style="color:red;"&gt;530 Login authentication failed&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;For whatever reason, if you create a new user and want to use it for FTP, the user must have a shell assigned. You can check the shell by looking at the /etc/passwd file and looking at the last parameter. If the user has no valid shell assigned, you can set this with a command like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;chsh -s /bin/bash theusername&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7939488611327186257?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7939488611327186257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7939488611327186257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7939488611327186257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7939488611327186257'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/12/pure-ftpd-and-passwords.html' title='Pure-FTPd and Passwords'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2173182733701675518</id><published>2010-10-20T17:58:00.000-07:00</published><updated>2010-10-20T18:03:40.392-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='selinux'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql_connect'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>PHP to Remote Database Error: "Can't connect to MySQL server on..."</title><content type='html'>On a new server migration project I am working on I have separate web and database servers. So, I use a private network to connect them. It took me a day to get working, so I am putting up a post to help others in similar situations.&lt;br /&gt;&lt;br /&gt;First, just to clarify, I knew it was a web server problem (and not a network or db permissions issue), because I could connect to the MySQL server just fine from the MySQL command line on the web server. But, when I pinged the PHP web page from my browser I'd get this error:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Can't connect to MySQL server on '10.1.1.1' (13)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The problem was SELinux, which was installed and crackin' down on Apache rights. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;One simple fix:&lt;/i&gt;&lt;br /&gt;&lt;b&gt;setsebool -P httpd_can_network_connect=1&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;More information can be found in this nice article:&lt;br /&gt;&lt;a href="http://www.ehow.com/how_2090983_connect-remote-database-under-selinux.html"&gt;http://www.ehow.com/how_2090983_connect-remote-database-under-selinux.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SELinux would allow me to connect from the command line just fine. I could even execute the PHP script from the command line and connect fine. But SELinux did not like it when Apache tried to connect to a computer on the network. Hence the policy update, as stated above.&lt;br /&gt;&lt;br /&gt;If you have other issues or it appears that your db server is having issues, here are some other &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/can-not-connect-to-server.html"&gt;MySQL debug tips&lt;/a&gt; as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2173182733701675518?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2173182733701675518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2173182733701675518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2173182733701675518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2173182733701675518'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/10/php-to-remote-database-error-cant.html' title='PHP to Remote Database Error: &quot;Can&apos;t connect to MySQL server on...&quot;'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5231736374848363561</id><published>2010-10-18T17:06:00.000-07:00</published><updated>2011-01-27T16:57:08.902-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='fpdi'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe'/><title type='text'>Add Text to an Existing PDF Using PHP</title><content type='html'>I am finishing up on a project right now that fills out a PDF application for a merchant account. The software helps the user through the application process by asking more targeted questions and filling in fields that are known. In order to do this I had found two PHP libraries that work quite well.&lt;br /&gt;&lt;br /&gt;The first is FPDF. It is a free PHP library that allows you to create PDFs. It is not a module or binary code, just a straight up PHP script library. Color me impressed. You can download it at &lt;a href="http://www.fpdf.org/"&gt;http://www.fpdf.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second bit of code you need is called FPDI. This will import a PDF as a template and allow you to overlay text. It worked quite well for my project as I was taking an existing PDF and filling in fields on top of it. Just like FPDF, it is super easy to install because all it is is a collection of PHP script files. You can download it at &lt;a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/"&gt;http://www.setasign.de/products/pdf-php-solutions/fpdi/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a &lt;a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/simple-demo/"&gt;quick demo&lt;/a&gt; by FPDI on how to use these two modules together.&lt;br /&gt;&lt;br /&gt;To make it all work I created a flat, PDF version of the template PDF. I removed all of the form fields using Adobe Acrobat. The first run I got an error: "probably uses a compression technique which is not supported". &lt;del&gt;This was easily fixed by saving the PDF as PDF/A using Adobe Acrobat.&lt;/del&gt; (Update below.)&lt;br /&gt;&lt;br /&gt;If you have any questions, please let me know. I'd be glad to share more of what I learned.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update (10/22/10):&lt;/b&gt; &lt;del&gt;I've learned that saving the PDf as a PDF/A doesn't always solve the error I explained above. What has worked, however, is running Adobe Pre-Flight on the document. If you go to "Advanced" &gt; "Print Production" &gt; "Preflight" and then click on "Analyze and fix", Adobe will work some magic on the document and make it work with FPDI.&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update (1/27/11):&lt;/b&gt; FPDI, the free version of the PDF parser, requires the PDF to be version 1.4 or below. To save a PDF in this format, open the document in Adobe Acrobat, click "Save As" and then select the type "PDF, Optimized" then click the "Settings" button and select "Adobe Acrobat 5.0". This will save the PDF in version 1.4, which was last used in Adobe Acrobat 5.0!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5231736374848363561?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5231736374848363561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5231736374848363561' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5231736374848363561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5231736374848363561'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/10/add-text-to-existing-pdf-using-php.html' title='Add Text to an Existing PDF Using PHP'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8308172470949073213</id><published>2010-10-05T11:52:00.000-07:00</published><updated>2010-10-05T11:54:59.000-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='wp'/><title type='text'>Removing WordPress LINK: NEXT and PREV</title><content type='html'>In WordPress, in the HTML HEAD, there are two &amp;lt;link&amp;gt; lines that are present. One is rel="next" and the other is rel="prev". Now, if you have some pages that you don't want just anyone to find (and the private and password-protect features are not appropriate), this little feautre may reveal them to the public.&lt;br /&gt;&lt;br /&gt;To remove the LINK data from the HEAD:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;First, pull up your template editor by going to Appearance &gt;&gt; Editor. &lt;br /&gt;&lt;li&gt;On the right side is a list of files. Click on "Theme Functions" or "functions.php" to edit it. &lt;br /&gt;&lt;li&gt;At the top, just after "&amp;lt;?php" add these lines of code:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;remove_action('wp_head', 'parent_post_rel_link', 10, 0); &lt;br /&gt;&lt;li&gt;remove_action('wp_head', 'start_post_rel_link', 10, 0);&lt;br /&gt;&lt;li&gt;remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);&lt;br /&gt;&lt;/ol&gt;&lt;li&gt;Click "update file" at the bottom&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;All done! The link, rel="next" and rel="prev", as well as "start" and "parent", should be all gone from your template.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8308172470949073213?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8308172470949073213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8308172470949073213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8308172470949073213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8308172470949073213'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/10/removing-wordpress-link-next-and-prev.html' title='Removing WordPress LINK: NEXT and PREV'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-625714685746476227</id><published>2010-10-01T23:34:00.000-07:00</published><updated>2010-10-05T11:59:57.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='battery'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>iPod Touch Battery Life Issue</title><content type='html'>I love my iPod touch. But it had a problem. After upgrading to the latest and greatest software (iOS 3), the battery life was awful, to say the least. I charged it, set it on the kitchen table in the evening and by morning it was completely dead. Something was very wrong.&lt;br /&gt;&lt;br /&gt;The first thing I tried was to disable all push notifications and alerts. And, after charging it up, I left it plugged in for a few extra hours (just in case). Unfortunately, I saw no change in performance. The iPod would die, again, within 24 hours, even if I had not used it. This was getting ridiculous.&lt;br /&gt;&lt;br /&gt;I found a blog post that suggested performing a restore. So, I gave this a try. I plugged in the iPod to my laptop, and clicked the restore button in iTunes. After a few warnings and some waiting, the iPod was back to its squeaky-clean state. And I can say that now, after 3 days, that &lt;b&gt;the restore worked and the battery life is back to normal&lt;/b&gt;. I haven't charged it in days and it is still going strong.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bottom line, if your iPod touch's battery life was cut dramatically short after upgrading to iOS 3, try a full restore. Worked for me.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Leave a comment if you've had similar experiences. I'd be interested to hear if it worked for others as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-625714685746476227?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/625714685746476227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=625714685746476227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/625714685746476227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/625714685746476227'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/10/ipod-touch-battery-life-issue.html' title='iPod Touch Battery Life Issue'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3658906865262502421</id><published>2010-09-25T10:58:00.000-07:00</published><updated>2010-09-25T10:58:48.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='innovation'/><title type='text'>Innovation</title><content type='html'>I've been thinking a lot about  innovation lately. &lt;br /&gt;&lt;br /&gt;There are lots of areas where innovation is strong and advancing. I think of cellular phones, as one great example. Companies like Apple lead the pack, forcing the entire industry to innovate. And it seems like it is a good thing for all of us. I also think of Google and the area of internet services, with major innovation in how we use email and how we search the web. There is also, and this has traditionally been the case, a lot of innovation in the area of art and fashion. You can always get art and fashion that is not innovative, but it is not hard to find people who are pushing new boundaries and forging new styles in these areas.&lt;br /&gt;&lt;br /&gt;There are also a lot of sectors where innovation is stagnate or happening at a slow pace. I think of the American automobile industry. There has not been much great innovation in a while and when there is any it is in response to foreign innovation. I also think of telecommunication companies and their service offerings. For instance, home telephone service has had little innovation in quite a while. Plain old telephone is plain old telephone and doesn't look like it is going to change any time soon (which is probably why so many younger people are willing to go without it, now).&lt;br /&gt;&lt;br /&gt;So, what areas need innovation? This is my question. And, how can I contribute to these areas, not being a CEO of a major company? How can I use my talent and drive to affect change in these areas that desperately need innovation? These are the questions I've been exploring, lately...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3658906865262502421?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3658906865262502421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3658906865262502421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3658906865262502421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3658906865262502421'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/09/innovation.html' title='Innovation'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8340371326497752926</id><published>2010-09-02T08:20:00.000-07:00</published><updated>2010-09-02T08:26:53.398-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE8'/><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='inline-block'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Browsers'/><title type='text'>A Better Browser</title><content type='html'>This is my PSA to help the world rid itself of bad browsers:&lt;br /&gt;&lt;br /&gt;So I just wrapped up major development on a &lt;a href="https://www.roguedzn.com/"&gt;3-month project&lt;/a&gt; and I am stoked to be done. But, I am also more and more convinced of Internet Explorer's ... deficiency. &lt;br /&gt;&lt;br /&gt;Now there are the normal "quirks" with IE that every web designer runs into (e.g., version 7's inline-block problem). These "features" are annoying and I have to deal with them often, but at least there are a number of known work-arounds to help me. &lt;br /&gt;&lt;br /&gt;There is one major thing that I've come to see about IE in these past 3 months for which there are no work-arounds. It is dreadfully slow and clunky. Things that will run smoothly and look great on Chrome, Safari and Firefox, will look awful slow on IE. This last project uses a lot of DHTML and it has a really high level of user interaction, so naturally there are a lot of animations and fading of images, etc. IE just cannot handle it and I've had to remove a lot of animations for people who are visiting the site with IE. &lt;br /&gt;&lt;br /&gt;So, now that the browser Google Chrome is celebrating its &lt;a href="http://techcrunch.com/2010/09/02/google-chrome-birthday/"&gt;second birthday&lt;/a&gt;, I thought I'd share my thoughts about browsers once again. Use Chrome if you want a fast, responsive, useful browser. I particularly enjoy the streamlined UI. Switch between Chrome and IE and you'll notice MAJOR speed enhancements. I love Chrome and &lt;a href="http://www.google.com/chrome"&gt;you will, too&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8340371326497752926?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8340371326497752926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8340371326497752926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8340371326497752926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8340371326497752926'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/09/better-browser.html' title='A Better Browser'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4154570295576396380</id><published>2010-07-20T08:46:00.000-07:00</published><updated>2010-07-20T08:46:40.242-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='intermediate ca'/><category scheme='http://www.blogger.com/atom/ns#' term='verisign'/><title type='text'>Installing Intermediate CA with cPanel</title><content type='html'>When I saw that the VeriSign EV SSL / TLS certificates required an intermediate CA to be installed, I was worried it was going to be a long and painful process. Well, turns out it is super easy to install.&lt;br /&gt;&lt;br /&gt;It seems that some of the modern browsers have no problem when the intermediate CA is not installed, but older ones, on the other hand, don't like it. So, here is how you make your cert work on most browsers.&lt;br /&gt;&lt;br /&gt;First, copy the &lt;a href="https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&amp;id=AR657"&gt;appropriate intermediate CA root bundle&lt;/a&gt; from VeriSign. I had a standard EV SSL, so I used the first cert on &lt;a href="http://www.verisign.com/support/verisign-intermediate-ca/extended-validation/apache/index.html"&gt;this page&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Now, log in to cPanel and click on "SSL/TLS Manager" &gt; "Activate SSL on Your Web Site (HTTPS)". Use the drop-down box to select your domain and the domain's certificate should show up (the one you installed at an earlier time, or google "install SSL certificate with cPanel"). Then, you'll see an extra text box at the bottom called "&lt;b&gt;Ca Bundle (CABUNDLE)&lt;/b&gt;." Just paste the intermediate CA there and click "Install." &lt;b&gt;Yep, it's that easy.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4154570295576396380?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4154570295576396380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4154570295576396380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4154570295576396380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4154570295576396380'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/07/installing-intermediate-ca-with-cpannel.html' title='Installing Intermediate CA with cPanel'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-324444969874557691</id><published>2010-06-23T16:00:00.000-07:00</published><updated>2010-06-24T16:08:41.956-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whm'/><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='cPanel'/><category scheme='http://www.blogger.com/atom/ns#' term='wildcard ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='htaccess'/><title type='text'>Wildcard SSL on WHM and cPanel</title><content type='html'>I had the task of implementing a wildcard SSL for a client the other day. I search the web for info on doing this with WHM and cPanel and got a host of wild answers that made it sound difficult to impossible. When I got done, I was surprised by how easy it was. Here is what I did..&lt;br /&gt;&lt;br /&gt;By the way, just as a disclaimer, this is from memory. If you have any feedback, let me know in the comments.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create an account for *.example.com (you must have a dedicated IP for the account for example.com)&lt;br /&gt;&lt;li&gt;Generate private keys (Log into cPanel &gt; SSL/TLS Manager &gt; Private Keys (KEY)) for the domain *.example.com&lt;br /&gt;&lt;li&gt;Generate a signing request (cPanel &gt; SSL/TLS Manager &gt; Certificate Signing Requests (CSR)) for the domain *.example.com&lt;br /&gt;&lt;li&gt;Go to your favorite certificate issuer (RapidSSL, for instance) and get your certificate using the CSR you just created&lt;br /&gt;&lt;li&gt;Upload your new certificate from your issuer (cPanel &gt; SSL/TLS Manager &gt; Certificates (CRT))  by pasting it in the box&lt;br /&gt;&lt;li&gt;Install &amp; enable the new certificate (cPanel &gt; SSL/TLS Manager &gt; Activate SSL on Your Web Site (HTTPS)) for example.com (it is missing the * but this is ok)&lt;br /&gt;&lt;li&gt;Everything should be working now, so try it by going to https://example.com/&lt;br /&gt;&lt;li&gt;Create a * sub-domain so that all sub-domains will work (cPanel &gt; Subdomains) directing them to the document root of public_html&lt;br /&gt;&lt;li&gt;Create a folder in public_html for each sub-domain you want to use&lt;br /&gt;&lt;li&gt;Add these lines to your .htaccess file to rewrite the URL:&lt;br /&gt;&lt;span style="color:blue;font-family:courier new, courier;font-size:.8em;"&gt;&lt;br /&gt;# This line should only be in the file once, at the top&lt;br /&gt;RewriteEngine On &lt;br /&gt;&lt;br /&gt;RewriteCond %{HTTP_HOST} ^mysubdomain\.example\.com$&lt;br /&gt;RewriteCond %{REQUEST_URI} !^/mysubdomain/&lt;br /&gt;RewriteRule ^(.*) mysubdomain/$1 [L]&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;And that should be it. Like I said, I am doing this from memory. But, this is the general outline to getting a wildcard SSL working on cPanel. It does work and is not that hard to get going, contrary to many other posts. If I missed something or did a step wrong, please let me know so I can update this post.&lt;br /&gt;&lt;br /&gt;Peace!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-324444969874557691?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/324444969874557691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=324444969874557691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/324444969874557691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/324444969874557691'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/06/wildcard-ssl-on-whm-and-cpanel.html' title='Wildcard SSL on WHM and cPanel'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-917293479835071554</id><published>2010-05-19T13:47:00.001-07:00</published><updated>2010-05-19T13:52:06.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='octal'/><category scheme='http://www.blogger.com/atom/ns#' term='decimal'/><category scheme='http://www.blogger.com/atom/ns#' term='parseInt'/><title type='text'>Base Dependency, JavaScript and how parseInt() returns 0</title><content type='html'>I learned today that the parseInt() function in JavaScript actually has a second parameter that is optional. This second parameter defines the number's base. Thus, you can parse an integer that is binary, octal and hexadecimal. However, if you do not define the base, the parseInt function takes a guess at the base instead of defaulting to decimal.&lt;br /&gt;&lt;br /&gt;So, if you have a parseInt('08') or parseInt('09'), the function will return 0. This is because it is guessing that these are octal numbers (based on the 0 in front) and then returns a 0 because they are invalid octal numbers. &lt;br /&gt;&lt;br /&gt;The fix is simple, define the base. Use parseInt('08',10) or parseInt('09',10) instead. &lt;a href="http://www.faqts.com/knowledge_base/view.phtml/aid/8108/fid/53"&gt;This blog post&lt;/a&gt; helped me and has more info on the matter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-917293479835071554?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/917293479835071554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=917293479835071554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/917293479835071554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/917293479835071554'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/05/base-dependency-javascript-and-how.html' title='Base Dependency, JavaScript and how parseInt() returns 0'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5649432677015084958</id><published>2010-05-13T17:00:00.000-07:00</published><updated>2010-05-13T18:22:57.814-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='hash'/><category scheme='http://www.blogger.com/atom/ns#' term='anchor link'/><category scheme='http://www.blogger.com/atom/ns#' term='onchange'/><title type='text'>Hash Changing, detecting the Back button in JavaScript</title><content type='html'>If you use gmail and you are a web developer, you have probably noticed that they use hash or anchor links (e.g., "example.html#hash") to make your browser's back button very effective. These hash or anchor links were designed to bring your browser to a certain position in a page. Often they are used on help pages or FAQ pages to make the browser window scroll to a certain point. But, interestingly, they can also be used to set certain JavaScript states, when configured properly.&lt;br /&gt;&lt;br /&gt;In order to monitor the hash state and determine if the browser's back or forward button were hence used, you must set up a polling loop. It will check the current hash against the last hash. If there is a change it will do something magical (whatever you want to do).&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;/* set defaults */&lt;br /&gt;var curHash = window.location.hash;&lt;br /&gt;&lt;br /&gt;/* check for a change in hash (back or forward buttons) */&lt;br /&gt;setInterval(function() {&lt;br /&gt; if (curHash != window.location.hash) {&lt;br /&gt;  curHash = window.location.hash;&lt;br /&gt;  /* -- do what you need to do when the hash changes! -- */&lt;br /&gt; }&lt;br /&gt;}, 250);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The check time is set to 250 ms. But this can be tweaked for your particular needs.&lt;br /&gt;&lt;br /&gt;There is rumors that in HTML 5 there will be a hash onchange event. This will really clean up the code, removing the need for polling. Until then, this is the next best thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5649432677015084958?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5649432677015084958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5649432677015084958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5649432677015084958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5649432677015084958'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/05/hash-changing-using-back-button-in.html' title='Hash Changing, detecting the Back button in JavaScript'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4910863506670104502</id><published>2010-05-03T11:59:00.000-07:00</published><updated>2010-05-03T12:08:33.707-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PEAR'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='recipient'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>PEAR Mail.php - Failed to add recipient (code: 451)</title><content type='html'>I decided to use the PEAR mailer for a web project in order to send emails through my SMTP server. However, I was getting a strange error:&lt;br /&gt;&lt;pre style="color:blue;"&gt;Failed to add recipient: xxxxx@gmail.com [SMTP: Invalid response code received from server (code: 451, response: Temporary local problem - please try later)]&lt;/pre&gt;&lt;br /&gt;Yikes! That is not a very helpful error. If the server doesn't know what what the response code means, how am I supposed to? Using SSH, I took a look at the exim_rejectlog located at /var/log and found that my mail server didn't particularly care for the source or 'From' email address.&lt;br /&gt;&lt;br /&gt;After a bit of trial and error, it became clear that &lt;span style="font-weight:bold;"&gt;'From' address must match the SMTP account's address&lt;/span&gt;. It is a nice anti-abuse feature (for shared servers) that I wasn't even aware of. &lt;br /&gt;&lt;br /&gt;Anyway, if you get this error, it probably could be a number of things, but be sure to check that your 'From' email address matches the email address of the SMTP account you are using to send the email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4910863506670104502?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4910863506670104502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4910863506670104502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4910863506670104502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4910863506670104502'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/05/pear-mailphp-failed-to-add-recipient.html' title='PEAR Mail.php - Failed to add recipient (code: 451)'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8067563091693608540</id><published>2010-04-28T08:59:00.001-07:00</published><updated>2010-04-28T09:03:43.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='speed'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Page Loading Speed-Up</title><content type='html'>I found out today that if you have JavaScript and CSS externally linked in your HTML head, the CSS should come first. This will allow browsers to fetch both external files at the same time. I use JavaScript to do some last minute page styling, depending on some parameters and also found that this helped the page flicker. &lt;br /&gt;&lt;br /&gt;On a related note, the &lt;a href="http://code.google.com/speed/page-speed/"&gt;Page Speed add-on&lt;/a&gt; to Firefox is a handy little tool for determining areas for improvement for a website (that's where I learned of this CSS before JS tip).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8067563091693608540?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8067563091693608540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8067563091693608540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8067563091693608540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8067563091693608540'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/04/page-loading-speed-up.html' title='Page Loading Speed-Up'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4212500972863616119</id><published>2010-04-19T11:04:00.001-07:00</published><updated>2010-04-19T11:18:22.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search engines'/><category scheme='http://www.blogger.com/atom/ns#' term='bots'/><category scheme='http://www.blogger.com/atom/ns#' term='crawlers'/><title type='text'>Blocking Bots and Crawlers without Blocking Search Engines</title><content type='html'>If you run any high-traffic websites it becomes apparent rather quickly that there are people out there trying to download your entire website (and there are many more people doing it than you would think). The question is, how do you block users with ill intent without blocking the major search engine bots (i.e., Yahoo, Google &amp; Bing)? &lt;br /&gt;&lt;br /&gt;The Google-recommended way is to do a reverse DNS look-up using the IP address. Then double-check the reverse DNS with a normal DNS look-up. The explanation is found &lt;a href="http://googlewebmastercentral.blogspot.com/2006/09/how-to-verify-googlebot.html"&gt;here&lt;/a&gt;. Note that this code will not work alone. If implemented, all regular visitors will be blocked. You must add some code to count the number of visits from a unique IP address and use this information as well.&lt;br /&gt;&lt;br /&gt;How is this done in code? Check out this &lt;a href="http://smbrown.wordpress.com/2009/04/29/verify-googlebot-forward-reverse-dns/"&gt;great PHP solution&lt;/a&gt;. (Not sure if Bing uses the old msn search bot domain name or not.)&lt;br /&gt;&lt;br /&gt;There is one issue that comes up with an implementation like this. By doing this you are blocking all bots and search engine crawlers which are not in your list. In other words, you are helping ensure that no other search engines can index your site. While it does still allow the major search engines to compete on the same level (at least in terms of your site), it is a bit anti-entrepreneurial and anti-competition because it locks-out small search engines and start-ups.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4212500972863616119?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4212500972863616119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4212500972863616119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4212500972863616119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4212500972863616119'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/04/blocking-fake-bots-and-crawlers.html' title='Blocking Bots and Crawlers without Blocking Search Engines'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-6521250064571254364</id><published>2010-04-09T15:05:00.000-07:00</published><updated>2010-04-09T15:05:00.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exclamation point'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Random exclamation points inserted into emails</title><content type='html'>I use PHP mail() to send out emails quite often. I recently found out that if you create your email as one long string without line breaks, you'll get random exclamation points in your emails. I was recently pointed towards &lt;a href="http://tools.ietf.org/html/rfc2822#section-2.1.1"&gt;RFC 2822 section 2.1.1&lt;/a&gt; for the solution. It appears that no line can be longer than 998 characters without a line break. &lt;br /&gt;&lt;br /&gt;How do you fix this? (1) The first way is to base-64 encode the data (best solution for &lt;span style="font-weight:bold;"&gt;plain text emails&lt;/span&gt; to retain long lines). Check out &lt;a href="http://thetoddsthoughts.blogspot.com/2007/07/exclamation-mark-showing-up-in-emails.html"&gt;this blog&lt;/a&gt; for some info on that. (2) The other, much easier way, is to simply insert line breaks in your email (best solution for &lt;span style="font-weight:bold;"&gt;HTML emails&lt;/span&gt; where long lines are not needed). Add a "\r\n" to the end of each line in your email to make sure you never go over 998 characters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-6521250064571254364?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/6521250064571254364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=6521250064571254364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6521250064571254364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6521250064571254364'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/04/random-exclamation-points-inserted-into.html' title='Random exclamation points inserted into emails'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-46051240529053141</id><published>2010-04-05T12:46:00.000-07:00</published><updated>2010-09-10T23:41:43.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keystroke'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='errors'/><title type='text'>Microsoft Wireless Keyboard 700 v2.0 - Keystroke Problem</title><content type='html'>I thought I'd post this real quick in case someone else is experiencing the frustrating problem I was having. I have a Microsoft Wireless keyboard and mouse 700 and it has been driving me up the wall lately. The keyboard would miss keystrokes, would occasionally respond with a repeated keystroke and would otherwise be annoying. I tried replacing the batteries, re-syncing and restarting and nothing helped.&lt;br /&gt;&lt;br /&gt;Then, I tried moving the receiver device that plugs into my USB port further away and voilà: Here I am typing up a storm without getting stressed. It is nice to have a keyboard that works again. &lt;span style="font-weight:bold;"&gt;Apparently the USB receiver cannot be within a certain distance from my keyboard...&lt;/span&gt; maybe I should have read the instruction manual.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update (6/23/10): The manual states that the mouse &amp; keyboard should be between 8 inches and 4 feet from the receiver.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 2 (8/10/10): I've officially given up on this mouse &amp; keyboard. The mouse drains a fresh pair of AA batteries in about two weeks and the keyboard constantly has connectivity problems. I went back to old-fasioned wired replacements, for now.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-46051240529053141?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/46051240529053141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=46051240529053141' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/46051240529053141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/46051240529053141'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/04/microsoft-wireless-keyboard-700-v20.html' title='Microsoft Wireless Keyboard 700 v2.0 - Keystroke Problem'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2142119505407222756</id><published>2010-03-31T14:21:00.000-07:00</published><updated>2010-04-05T22:12:18.528-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtual machines'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='small business'/><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>PCI and multiple servers</title><content type='html'>I noticed that a few web hosting companies out there recommend that you lease two servers when trying to reach PCI compliance. Which leaves me wondering, how can a small business afford to even be PCI compliant if this is a requirement?&lt;br /&gt;&lt;br /&gt;PCI DSS compliance requires that "only one primary function is performed per server" (2.2.1). Because "primary function" can be interpreted different ways, on-site auditors (QSAs) will sometimes require 2 servers (one for the web servers and one for the database). The logic is that there is an increase risk for data breaches if there are multiple services on one box, giving a potential hacker multiple avenues of attack. &lt;br /&gt;&lt;br /&gt;As a side note, many interpret "one primary function" to mean one collective function (e.g., one server is used for payments and thus can have a web server and database server to achieve this collective function). Moreover, you may be able to mitigate the danger of running too many services by never storing sensitive data in the first place (this is my recommendation).&lt;br /&gt;&lt;br /&gt;So how is a small business supposed to do business online if a QSA happens to require 2 or more dedicated servers? A couple of cheap dedicated servers would run you about $300 a month.&lt;br /&gt;&lt;br /&gt;I've not run this past a QSA but I wonder, why not use virtualization software like XenServer? Chuvakin and Williams, in their book &lt;span style="font-style:italic;"&gt;PCI Compliance&lt;/span&gt;, talk about how virtualization can be effectively used to separate sensitive environments from other websites. With virtualization you can create multiple virtual machines (VM) on one server. Each VM acts as a separate server, completely isolated and contained. Each VM has its own resources and cannot take more than its share of CPU or memory. Because of this, for the purposes of PCI compliance, each VM could be considered an isolated server. Each VM could be used for separate tasks and they would be kept entirely isolated. It seems to me that this would be an acceptable solution for everyone involved.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: Stumbled across &lt;a href="http://searchservervirtualization.techtarget.com/news/article/0,289142,sid94_gci1338681,00.html"&gt;this article&lt;/a&gt; about virtualization and PCI compliance. Looks like they are working towards clearing up this area of the PCI DSS. Also, &lt;a href="http://searchsecurity.techtarget.com/news/interview/0,289202,sid14_gci1353166,00.html"&gt;this PCI DSS &lt;em&gt;expert&lt;/em&gt;&lt;/a&gt; believes that, "just like virtualization, running logical partitions that are segmented from each other doesn't violate what the council is trying to prevent" in requirement 2.2.1. Lastly, &lt;a href="http://www.infosec-rusch.com/wp-content/uploads/2010/01/pci-dss-mpls-vlans-virtualization-highlighted.pdf"&gt;this QSA&lt;/a&gt; states that "Virtual machines need to be treated just like physical machines when assessing them for PCI&lt;br /&gt;compliance" (pg 7).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2142119505407222756?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2142119505407222756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2142119505407222756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2142119505407222756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2142119505407222756'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/03/pci-and-multiple-servers.html' title='PCI and multiple servers'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1378390474916812620</id><published>2010-03-19T09:44:00.000-07:00</published><updated>2010-03-19T09:45:41.726-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efficiency'/><title type='text'>efficiency</title><content type='html'>"In the clarity of this morning, I'm thankful for sleep cycles that disrupt our progress, for children that stop your work and force you to keep someone you love alive, for the need to stop and eat, to stop and drink water, to stop and talk to friends. We buy billions of dollars in books that help us be more efficient, we praise the profit margin, and all the while, God is trying to slow us down, trying to remind us of what matters and what doesn't, trying to stop our human progress, stop our creation of false Gods." -- &lt;a href="http://donmilleris.com/2010/03/19/if-it-werent-for-god-youd-be-more-efficient/"&gt;Donald Miller&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1378390474916812620?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1378390474916812620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1378390474916812620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1378390474916812620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1378390474916812620'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/03/efficiency.html' title='efficiency'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3700712266641501835</id><published>2010-03-17T18:02:00.000-07:00</published><updated>2010-03-17T18:28:56.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BIND'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='PCI'/><title type='text'>BIND, Security and PCI Compliance</title><content type='html'>I get to go through some of the fun known commonly as PCI Compliance. PCI Compliance is a good thing on the whole, nevertheless, it is time consuming. Today I spent time on my DNS server. I use BIND, the open source name server that is very popular across the net. &lt;br /&gt;&lt;br /&gt;Upon a PCI scan I got this warning: "Bind Banner." It was a result of my system telling the world what version it is running. This could help a would-be hacker determine if my system is old and if it is vulnerable to certain security holes.&lt;br /&gt;&lt;br /&gt;To tighten it up a bit, I made some edits in my config file at /etc/named.conf&lt;br /&gt;&lt;br /&gt;At the end of the "options" section of named.conf, I added these lines:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt; dnssec-enable no;&lt;br /&gt; version none;&lt;br /&gt; hostname none;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This disables or hides the display of the version number, the BIND hostname and disables DNSSEC (which PCI scans tell me is dangerous, even though it is intended for security).&lt;br /&gt;&lt;br /&gt;Now, to check to make sure your BIND version is hidden (be sure to restart BIND, first), enter this into the bash command line:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;dig -t txt -c chaos VERSION.BIND @myhostname.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you want some protection against an easy DoS target, add this to your "external" view in named.conf:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt; additional-from-auth no;&lt;br /&gt; additional-from-cache no;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;"&lt;span style="color:blue;"&gt;recursion no;&lt;/span&gt;" should be in there already and this will prevent your server from being an open DNS server for the world. These extra lines above will go a step further and prevent the display of root name servers for external queries. While this is just your DNS server trying to be helpful, your server should just ignore all external queries that are for domains you don't serve. (&lt;a href="http://isc.sans.org/diary.html?storyid=5713"&gt;More info here&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;PS. Looking for a list of all the available options in BIND? &lt;a href="http://www.gsp.com/cgi-bin/man.cgi?section=5&amp;topic=named.conf"&gt;Here is a good one&lt;/a&gt;, although there is not a lot of description, it does look complete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3700712266641501835?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3700712266641501835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3700712266641501835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3700712266641501835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3700712266641501835'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/03/bind-security-and-pci-compliance.html' title='BIND, Security and PCI Compliance'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5455925058304503836</id><published>2010-03-15T19:24:00.000-07:00</published><updated>2010-03-15T19:33:08.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='law'/><category scheme='http://www.blogger.com/atom/ns#' term='tos'/><category scheme='http://www.blogger.com/atom/ns#' term='small business'/><title type='text'>Terms of Service - Don't Add This</title><content type='html'>Because I run a small business, I have to do everything &amp;ndash; marketing, accounting, IT security, legal &amp;ndash; on top of the real work of making the web site or application for my clients. When it comes to the big, confusing or time-intensive tasks, though, I am willing to pony up and pay the professionals (like when I do my taxes). Today I decided I should put on one of my many hats and take a look, once more, at my company's Terms of Service (TOS). &lt;br /&gt;&lt;br /&gt;Interestingly, I came across this very helpful blog entry about including the famous "we can change this whenever we want and you have to check this website everyday for changes" clause that many businesses add to the top of the TOS. I always wondered about this. It doesn't seem quite fair &amp;ndash; is it really legal? Well Eric Goldman argues that it can pretty much make your TOS invalid. &lt;a href="http://blog.ericgoldman.org/archives/2009/06/stop_saying_we_1.htm"&gt;Read here&lt;/a&gt; for more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5455925058304503836?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5455925058304503836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5455925058304503836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5455925058304503836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5455925058304503836'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/03/terms-of-service-dont-add-this.html' title='Terms of Service - Don&apos;t Add This'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-403837792871956614</id><published>2010-02-18T20:13:00.000-08:00</published><updated>2010-02-18T20:19:43.463-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dns ip'/><category scheme='http://www.blogger.com/atom/ns#' term='resolving dns'/><category scheme='http://www.blogger.com/atom/ns#' term='glue record'/><title type='text'>Resolving Name Server IP Addresses</title><content type='html'>Ever thought about this? If I want to find the website example.com then my computer begins by contacting the TLD (.com) and finding the authoritative name server for example.com. If it is ns1.example.com, then how does my computer figure out the IP address for this subdomain? Is there a name server for the name server?&lt;br /&gt;&lt;br /&gt;After searching about, I've been educated. &lt;br /&gt;&lt;br /&gt;This problem is called circular referencing, for obvious reasons. So, to solve this problem, you register name servers with the same people you register the domain with. You specify the name of the name server and an IP address and they register what's called a glue record. This glue record is stored by the TLD (e.g., .com) name servers so that the IP address of your name server (e.g., ns1.example.com) can be sent when needed.&lt;br /&gt;&lt;br /&gt;Bit 'o knowledge for you. &lt;br /&gt;&lt;br /&gt;Need to check your glue records? A quick search on Google for glue record provides promising results, like &lt;a href="http://www.webdnstools.com/dnstools/domain_check"&gt;this site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-403837792871956614?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/403837792871956614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=403837792871956614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/403837792871956614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/403837792871956614'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/02/resolving-name-server-ip-addresses.html' title='Resolving Name Server IP Addresses'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5773857137777403318</id><published>2010-02-16T11:03:00.001-08:00</published><updated>2010-02-16T11:09:06.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='GD'/><title type='text'>PHP image manipulation</title><content type='html'>If you have ever wanted to dynamically create or edit images, &lt;a href="http://php.net/manual/en/book.image.php"&gt;GD is a great solution&lt;/a&gt; for PHP (and LAMP configurations). I am writing this blog entry mostly because I was amazed at how easy it was to install. I just picked it in easyApache (using WHM) and "tada!" &amp;ndash; it works. I can't say that about imagemagick. I've tried and tried to get that bit of software to work (on multiple servers) and it is always a pain. I remember on my first server (hosted by another company) I had requested imagemagick and they even had trouble installing it&amp;mdash;the help desk ticket was pretty long by the time it was closed.&lt;br /&gt;&lt;br /&gt;Anyway, moral of the story: Go with GD for dynamic image manipulation in PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5773857137777403318?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5773857137777403318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5773857137777403318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5773857137777403318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5773857137777403318'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/02/php-image-manipulation.html' title='PHP image manipulation'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2502700534855075910</id><published>2010-02-15T01:00:00.000-08:00</published><updated>2010-02-15T01:06:51.948-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apc'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>APC.php not Working</title><content type='html'>I was getting a new server up and running and wanted to install APC (Alternative PHP Cache). Things were going great. I even ran phpinfo() and noted that APC had an entry. Everything was super, right? &lt;br /&gt;&lt;br /&gt;I wanted more confirmation, so I used SSH, located &lt;span style="font-weight:bold;"&gt;apc.php&lt;/span&gt; and copied it to a domain for public access. I wanted to know how well APC was working for me. However, it wouldn't run. It sent back errors and when I tried to debug it I got no where.&lt;br /&gt;&lt;br /&gt;Turns out, APC wasn't really doing much of anything. I had &lt;span style="font-weight:bold;"&gt;PHP installed and running as a CGI instead of an Apache Module&lt;/span&gt;. If PHP runs as a CGI, APC closes at the end of each script run and the cache is lost&amp;mdash;it doesn't make much sense to use APC in this situation. While runing as a CGI has some security benefits you lose a bit of performance and, more importantly to me, APC doesn't really work.&lt;br /&gt;&lt;br /&gt;I use WHM and so I went to &lt;span style="font-weight:bold;"&gt;"Main &gt;&gt; Service Configuration &gt;&gt; Apache Configuration"&lt;/span&gt; and then changed the &lt;span style="font-weight:bold;"&gt;PHP 5 handler to DSO&lt;/span&gt;. This solved the problem and apc.php loaded just fine the next time I tried. And it even had some pretty stats for me to see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2502700534855075910?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2502700534855075910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2502700534855075910' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2502700534855075910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2502700534855075910'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/02/apcphp-not-working.html' title='APC.php not Working'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2011997461093403410</id><published>2010-02-13T10:09:00.000-08:00</published><updated>2010-02-13T10:30:29.002-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='paypal'/><category scheme='http://www.blogger.com/atom/ns#' term='merchant accounts'/><category scheme='http://www.blogger.com/atom/ns#' term='donations'/><title type='text'>Easy Ways to Accept Donations Online</title><content type='html'>There are a lot of options out there to help non-profits accept donations online. I want to briefly mention to different categories of solutions to help people who are trying to figure out what is best for their non-profit or church.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Perhaps the easiest solution is to use a service like &lt;A href="http://paypal.com/"&gt;PayPal&lt;/a&gt;. You sign up for an account and give them your account info and you are up and running soon. This is technically called an &lt;a href="http://www.braintreepaymentsolutions.com/blog/high-risk-mechant-account-third-party-payments-aggregation/"&gt;aggregation service&lt;/a&gt;, because you do not need to have any special accounts set up&amp;mdash;PayPal has done that and accepts payments on your behalf. Google has a &lt;a href="http://googlecheckout.com"&gt;similar solution&lt;/a&gt; except that it, unlike PayPal, unfortunately requires donors to have Google checkout accounts. With these types of services you will have to pay higher per-transaction fees (10 to 30 cents) and transaction rates (around 3%).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The second option is to get what's called a merchant account. This is a special bank account that allows you to accept credit card payments directly (instead of through an aggregator, like PayPal). This is a process that requires an application and some extra steps to setup, but it is often worth the time. The per-transaction rates are almost always lower this route, but there are monthly service fees that are standard (around $10 to $30). Because of this, merchant accounts best for non-profits who are accepting more than a couple hundred in donations a month (but you'll have to do the math to make sure). The cool thing is that if you decide to get a merchant account, your donor's bank statements will actually have your organization's name next to each donation (as opposed to PayPal or Google).&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;If you want to accept donations online, the second option is a little trickier (because of security standards called PCI-DSS). But, there are companies out there like &lt;a href="http://www.donateblue.com/"&gt;BlueFire Donations&lt;/a&gt;, which can help make this a breeze, helping get non-profits accepting credit credits online in no time.&lt;br /&gt;&lt;br /&gt;Got a question? Post in the comments and I'll do my best to help out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2011997461093403410?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2011997461093403410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2011997461093403410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2011997461093403410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2011997461093403410'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/02/easy-ways-to-accept-donations-online.html' title='Easy Ways to Accept Donations Online'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5372157294034524158</id><published>2010-01-22T14:52:00.000-08:00</published><updated>2010-01-22T15:01:44.372-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='CA'/><category scheme='http://www.blogger.com/atom/ns#' term='CENTOS'/><category scheme='http://www.blogger.com/atom/ns#' term='cURL'/><title type='text'>cURL and SSL</title><content type='html'>cURL is a nice little extension to PHP. You can read an intro &lt;a href="http://www.php.net/manual/en/intro.curl.php"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I use cURL a lot. It seems that do a lot of web applications that connect to other servers for transactions (like payment gateways). You can do SSL or HTTPS requests to other web hosts without validating their certificates but you leave yourself open to man-in-the-middle attacks. While this seems unlikely if you are running out of a data center, checking the certificate validity is too easy to skip.&lt;br /&gt;&lt;br /&gt;The one thing that you must do for this to work is tell cURL where the CA-bundle (or CURLOPT_CAINFO) is located. I am running CENTOS 5.4 and found CA info at "/etc/pki/tls/certs/ca-bundle.crt". I can enable this with the following two lines added before curl_exec();&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt; curl_setopt($ch, CURLOPT_CAINFO, "/etc/pki/tls/certs/ca-bundle.crt");&lt;br /&gt; curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5372157294034524158?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5372157294034524158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5372157294034524158' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5372157294034524158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5372157294034524158'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/01/curl-and-ssl.html' title='cURL and SSL'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1268958842136537605</id><published>2010-01-22T10:18:00.001-08:00</published><updated>2010-01-22T10:23:48.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='church text messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='group text messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='ShortShout'/><title type='text'>Group Text Messaging - Schedule Text Messages</title><content type='html'>I wanted to take a moment to promote another site I relaunched yesterday. It is ShortShout and it is a group text messaging platform. I've worked out some pretty low per-message rates to make it an affordable service. It can be used by any group and has some special info for churches who want to do text messaging. Check it out at ShortShout.com.&lt;br /&gt;&lt;br /&gt;One of ShortShout's customers is a marketing team in Michigan led by Denise. Denise told me that she uses the system "to encourage and stay in touch with her friends/team members." Denise, in her own words, "is a motivator and keeps her team focused on their goals" with &lt;a href="http://shortshout.com/"&gt;group text messaging&lt;/a&gt; and ShortShout.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1268958842136537605?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1268958842136537605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1268958842136537605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1268958842136537605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1268958842136537605'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/01/group-text-messaging-schedule-text.html' title='Group Text Messaging - Schedule Text Messages'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3092630803256802756</id><published>2010-01-14T08:06:00.000-08:00</published><updated>2010-01-14T08:06:00.952-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql_connect'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql_select_db'/><title type='text'>MySQL and mysql_select_db</title><content type='html'>I was convinced that mysql_select_db() was not working today. I wanted to simultaneously connect to two different databases. However, when I called the mysql_select_db function, it seemed that both connections were changing to the database I specified. I couldn't get one link to stay on the original database while I changed the second link to a new database.&lt;br /&gt;&lt;br /&gt;After a little digging around &lt;a href="http://www.php.net/manual/en/function.mysql-select-db.php#77690"&gt;I found a helpful user comment&lt;/a&gt; about using mysql_connect. The fourth parameter of this function is "new_link" and if you want to simultaneously have two connections open and both connections use the same credentials, you must set this parameter to TRUE. If you don't, it sees that the credentials are the same and will reuse the same resource link, even if you set a different variable.&lt;br /&gt;&lt;br /&gt;So, this:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;&amp;lt;?PHP&lt;br /&gt;$conn1 = mysql_connect(HOST, USER, PASS);&lt;br /&gt;mysql_select_db(TABLE_1, $conn1);  &lt;br /&gt;$conn2 = mysql_connect(HOST, USER, PASS);&lt;br /&gt;mysql_select_db(TABLE_2, $conn2); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;turned into this:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;&amp;lt;?PHP&lt;br /&gt;$conn1 = mysql_connect(HOST, USER, PASS, true);&lt;br /&gt;mysql_select_db(TABLE_1, $conn1);  &lt;br /&gt;$conn2 = mysql_connect(HOST, USER, PASS, true));&lt;br /&gt;mysql_select_db(TABLE_2, $conn2);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And tada, I could simultaneously connect to two (or more) databases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3092630803256802756?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3092630803256802756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3092630803256802756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3092630803256802756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3092630803256802756'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/01/mysql-and-mysqlselectdb.html' title='MySQL and mysql_select_db'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3580773858857689633</id><published>2010-01-08T19:28:00.000-08:00</published><updated>2010-01-08T19:36:26.280-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='escape'/><category scheme='http://www.blogger.com/atom/ns#' term='keycodes'/><category scheme='http://www.blogger.com/atom/ns#' term='body'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery and onKeyUp</title><content type='html'>jQuery has the method keyup to take the place of the html attribute onkeyup. So, for example, let's say want to run a javascript function each time escape is pushed. You would do this like so:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$(document).keyup(function(event) {&lt;br /&gt;  if(event.keyCode == 27) { // Capture Esc key&lt;br /&gt;      doSuperSpecialFunction();&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With this script anytime a key is pressed and goes up in the body of the document, the function specified runs. Simply replace the keyCode number (27, above) with the number that corresponds to &lt;a href="http://www.webonweboff.com/tips/js/event_key_codes.aspx"&gt;your key&lt;/a&gt; (like 13 for enter or 8 for backspace). Remember, you must have jQuery "installed" in order for this to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3580773858857689633?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3580773858857689633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3580773858857689633' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3580773858857689633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3580773858857689633'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2010/01/jquery-and-onkeyup.html' title='jQuery and onKeyUp'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-625202598042285914</id><published>2009-12-01T16:10:00.000-08:00</published><updated>2009-12-01T16:10:00.628-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inline-block'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Inline Block, A Quick Work-Around</title><content type='html'>I've had &lt;a href="http://firelitdesign.blogspot.com/2009/08/css-inline-block.html"&gt;previous struggles&lt;/a&gt; with inline-block quirks, and have been recently using a handy css solution I thought I'd share. Whenever I want a certain div, for example, to be displayed as &lt;a href="http://www.w3.org/TR/CSS2/visuren.html#inline-boxes"&gt;inline-block&lt;/a&gt;, I simply add the class "inlineBlock" to it. Well, you ask, how do I define this class? I am glad you asked. I define it like so:&lt;br /&gt;&lt;pre style="color:blue;"&gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;.inlineBlock {&lt;br /&gt; display:-moz-inline-stack;&lt;br /&gt; display:inline-block;&lt;br /&gt; zoom:1;&lt;br /&gt; *display:inline;&lt;br /&gt;}&lt;br /&gt;.myClass1 {&lt;br /&gt; /* other stuff */&lt;br /&gt;}&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="myClass1 inlineBlock"&amp;gt;&lt;br /&gt; A fancy inline-block div.&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This CSS causes my div to be displayed correctly as an inline-block in every browser I've checked. Not sure how the magic works specifically, but it does the job! If you have improvements or observations, add a comment below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-625202598042285914?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/625202598042285914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=625202598042285914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/625202598042285914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/625202598042285914'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/11/inline-block-quick-work-around.html' title='Inline Block, A Quick Work-Around'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1467615040980378660</id><published>2009-11-24T17:49:00.000-08:00</published><updated>2009-11-24T17:49:00.358-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='inline-block'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='IE6'/><title type='text'>Browser detection with jQuery</title><content type='html'>Those who create web apps to work for the widest possible audience, know that overcoming browser quirks is an unfortunate part of the job. The two greatest pains for me are IE6 and IE7, both common browsers with an uncommon ability to screw up my pages. (I think IE8 is a wonderful improvement to this line of browsers.) Recently I found out how to determine if a browser is IE7 or lower using this handy jQuery statement:&lt;br /&gt;&lt;pre style="color: blue;"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;if ($.browser.msie &amp;&amp; (parseFloat($.browser.version) &lt; 8)) {&lt;br /&gt;     // Do something for IE7 or IE6&lt;br /&gt;     // Like replace some image src with a gif (instead of transparent png)&lt;br /&gt;     // or change a style to look right&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of course, you must have the &lt;a href="http://docs.jquery.com/Downloading_jQuery"&gt;jQuery library&lt;/a&gt; included on the page before this. But this little script is great for dealing with those demanding IE-specific quirks, like &lt;a href="http://firelitdesign.blogspot.com/2009/08/css-inline-block.html"&gt;display:inline uniqueness&lt;/a&gt;, select-box borders and transparent png support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1467615040980378660?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1467615040980378660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1467615040980378660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1467615040980378660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1467615040980378660'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/11/browser-detection-with-jquery.html' title='Browser detection with jQuery'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-6142504505466899999</id><published>2009-11-24T16:53:00.001-08:00</published><updated>2009-11-24T16:58:21.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='IP address'/><title type='text'>IP Geo-Location Database</title><content type='html'>In a previous post I talked about a nice website that will help you &lt;a href="http://firelitdesign.blogspot.com/2009/10/block-countries-from-your-website.html"&gt;block countries from your site&lt;/a&gt; using the IP address. &lt;br /&gt;&lt;br /&gt;In a related stream of thought, I found an entire database of IP addresses that is available for free. The nice people at IpInfoDb have an entire &lt;a href="http://www.ipinfodb.com/ip_database.php"&gt;database of IP-to-location data&lt;/a&gt; available for download (in SQL, too). And, they give you some tips and PHP code on how to most effectively use it. Thanks IpInfoDb!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-6142504505466899999?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/6142504505466899999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=6142504505466899999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6142504505466899999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6142504505466899999'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/11/ip-geo-location-database.html' title='IP Geo-Location Database'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1487158122934206845</id><published>2009-11-21T21:35:00.000-08:00</published><updated>2009-11-21T21:43:13.209-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='good design'/><category scheme='http://www.blogger.com/atom/ns#' term='objectified'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Good Design</title><content type='html'>I respect good design. Or maybe I should say that I love good design. Trained as an engineer I have always appreciated the extra effort that has been put into certain objects, products, services, etc. There is something about the well designed computer or cell phone or chair, that just seems to captivate me. It is a form of art that everyone can appreciate.&lt;br /&gt;&lt;br /&gt;I just recently watched the movie &lt;a href="http://www.objectifiedfilm.com/"&gt;Objectified&lt;/a&gt; by Gary Hustwit. The movie explores the concept of design and what it means. In one interview a designer in Europe comments that the one company in the world that takes design seriously right now is Apple. I agree with that. Their products exhibit a quality of design that far surpasses many others. &lt;br /&gt;&lt;br /&gt;It has me thinking about good design in websites. What does a well designed web site look like? How can I make my websites function and work on a higher level? It is a fun thing to think about and has my head filled with new ideas and approaches. I hope to be able to put some of it to the test soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1487158122934206845?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1487158122934206845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1487158122934206845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1487158122934206845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1487158122934206845'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/11/good-design.html' title='Good Design'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4293680961545256016</id><published>2009-11-07T21:39:00.000-08:00</published><updated>2009-11-07T21:42:06.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='compression'/><title type='text'>javascript compression</title><content type='html'>Compression of JavaScript is highly recommended. It reduces file sizes and quickens browser response times. There are a few good sites out there that do JavaScript compression. There are even some that will "obfuscate" your code, making it much harder to reverse-engineer.&lt;br /&gt;&lt;br /&gt;Well, Google has released its JavaScript compression tool called Closure. &lt;a href="http://closure-compiler.appspot.com/home"&gt;There is even an online version.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4293680961545256016?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4293680961545256016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4293680961545256016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4293680961545256016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4293680961545256016'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/11/javascript-compression.html' title='javascript compression'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7163563984230751954</id><published>2009-10-30T10:10:00.000-07:00</published><updated>2009-10-30T10:18:39.892-07:00</updated><title type='text'>Block countries from your website</title><content type='html'>Ever wish you could block certain countries from your web server? I have. Sometimes it seems like all the hackers live in one place. I came across &lt;a href="http://www.ip2location.com/blockvisitorsbycountry.aspx"&gt;this website&lt;/a&gt; today that will create an .htaccess file for your web server. You can block any number of countries from your website based on their IP addresses. It cannot prevent determined people from using VPNs or proxies, but it works as a first line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7163563984230751954?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7163563984230751954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7163563984230751954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7163563984230751954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7163563984230751954'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/10/block-countries-from-your-website.html' title='Block countries from your website'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8189761057441270791</id><published>2009-10-14T23:09:00.000-07:00</published><updated>2009-10-14T23:20:30.467-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='checkbox'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery, checkbox status</title><content type='html'>I wanted to find the state of a checkbox and hide or show some text using jQuery. The thing that I got stuck on was determining if the checkbox was checked. This is how I ended up doing it:&lt;br /&gt;&lt;pre style="color: blue;"&gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt; $(&amp;quot;input[name='cbname']&amp;quot;).click( function() {&lt;br /&gt;  if ($(this).attr('checked'))&lt;br /&gt;   $('#text').hide();&lt;br /&gt;  else&lt;br /&gt;   $('#text').show();&lt;br /&gt; });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;cbname&amp;quot;&amp;gt; Hide!&lt;br /&gt;&amp;lt;div id=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;Disappearing Text&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Simply checking the attribute 'checked' of the checkbox returns its state (in jQuery 1.3.2, at least).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8189761057441270791?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8189761057441270791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8189761057441270791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8189761057441270791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8189761057441270791'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/10/jquery-checkbox-status.html' title='jQuery, checkbox status'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2050834212410600629</id><published>2009-09-12T13:38:00.001-07:00</published><updated>2009-09-12T13:52:16.052-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Starting another script</title><content type='html'>I have a PHP script that customers would use to start a process. The process was time-intensive, so I had it start another script in the background. It was important that the customer did not have to wait until the long process ended. After trying a few things, I found a forum that gave me my solution (sorry, can't find where it is anymore). This starts a PHP script in the background from within another PHP script:&lt;br /&gt;&lt;pre style="color:blue;"&gt;shell_exec('php /public_html/accountname/longProcess.php &amp;gt; /dev/null 2&amp;gt;/dev/null &amp;amp;');&lt;/pre&gt;&lt;br /&gt;Simply replace the script name with our own and it should work (note: not sure if the whole path is required). What this does is force the standard output and error output to be discarded and the final ampersand causes it all to be run in the background.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2050834212410600629?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2050834212410600629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2050834212410600629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2050834212410600629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2050834212410600629'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/09/starting-another-script.html' title='Starting another script'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5453159633732693693</id><published>2009-09-08T21:57:00.001-07:00</published><updated>2009-09-12T13:53:16.035-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TinyMCE'/><category scheme='http://www.blogger.com/atom/ns#' term='spell check'/><title type='text'>TinyMCE Spell Checking</title><content type='html'>In my last post I talked about the HTML/Rich-Text editor called TinyMCE. I have used it on a few sites for content management. Well, today I've learned of a plug-in for TinyMCE that is very promising. &lt;br /&gt;&lt;br /&gt;This plug-in is a spell and grammar checker called After the Deadline. It is free for personal use, and from some of my limited tests it appears to be very powerful. I read on TechCrunch that it was recently acquired by WordPress co-founder Matt Mullenweg and is already enabled for users on their platform.&lt;br /&gt;&lt;br /&gt;Need a spell checker? Check it out: &lt;a href="http://www.afterthedeadline.com/"&gt;http://www.afterthedeadline.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5453159633732693693?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5453159633732693693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5453159633732693693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5453159633732693693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5453159633732693693'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/09/tinymce-spell-checking.html' title='TinyMCE Spell Checking'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2347254690452687939</id><published>2009-09-03T01:00:00.000-07:00</published><updated>2009-09-03T01:33:33.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TinyMCE'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Text Area to HTML Editor</title><content type='html'>&lt;a href="http://tinymce.moxiecode.com/"&gt;TinyMCE&lt;/a&gt; is my visual HTML editor of choice (a.k.a. What You See Is What You Get or WYSIWYG). I use it on a number of websites to allow customers to update content without needing to take a class on HTML and CSS. It has worked pretty good for me thus far and best of all, its free.&lt;br /&gt;&lt;br /&gt;One particular feature that I've recently discovered has made me pretty happy. TinyMCE allows me to supply a list of URLs for TinyMCE to make available when a user wishes to insert a hyper link. This is a beautiful thing. Before the user had to copy and paste every URL they wanted to link to. &lt;br /&gt;&lt;br /&gt;Just as cool is that I can also supply a list of images and videos that can easily be inserted (no copying and pasting these URLs either). So after uploading an image to the server, they can edit a webpage and TinyMCE already has this image's URL ready if it is to be used.&lt;br /&gt;&lt;br /&gt;In order to do all this, at the end of my TinyMCE initialization script I added these three lines:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; tinyMCE.init({&lt;br /&gt;  ...&lt;br /&gt;  external_link_list_url : "/tiny_mce/links.php",&lt;br /&gt;  external_image_list_url : "/tiny_mce/images.php",&lt;br /&gt;  media_external_list_url : "/tiny_mce/media.php"&lt;br /&gt; });&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, on the other side of these specified URLs I have a PHP script that rounds up every URL (or image or video) on the server and provides it in a JSON encoded list for TinyMCE. This way, when a user wants to insert a link (or image or video), TinyMCE already has a good list of links that the user can choose from.&lt;br /&gt;&lt;br /&gt;Let's assume, for the PHP example script, that you have a 2D PHP array called $linkOptions that had every link the user might want to use. Here is a part of links.php, specified above:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?PHP&lt;br /&gt; header("Content-type: application/javascript");&lt;br /&gt; &lt;br /&gt; echo "var tinyMCELinkList = new Array( \n\t";&lt;br /&gt;&lt;br /&gt; $firstLink = true;&lt;br /&gt; for ($j = 0; $j &lt; sizeof($linkOptions); $j++) {&lt;br /&gt;  // Go through each link of the array&lt;br /&gt;  if ($firstLink) {&lt;br /&gt;   echo "\n\t"; // No comma for the 1st&lt;br /&gt;   $firstLink = false;&lt;br /&gt;  } else echo ",\n\t";&lt;br /&gt;&lt;br /&gt;  echo '['. htmlentities($linkOptions[$j][0]); // Link Name&lt;br /&gt;  echo '","'. htmlentities($linkOptions[$j][1]) .'"]'; // Link URL&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; echo "\n".');'; // All done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then, you would need to do replicate something like this for each of the link lists specified. Hope you find this feature as useful as I. Good luck!&lt;br /&gt;&lt;br /&gt;PS. TinyMCE is also the HTML editor used for WordPress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2347254690452687939?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2347254690452687939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2347254690452687939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2347254690452687939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2347254690452687939'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/09/text-area-to-html-editor.html' title='Text Area to HTML Editor'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7199798539946657969</id><published>2009-08-25T20:02:00.000-07:00</published><updated>2009-08-25T20:15:32.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unethical'/><category scheme='http://www.blogger.com/atom/ns#' term='domain'/><title type='text'>Domain Renewal Group</title><content type='html'>This company has such awful business practices, I have to make a quick entry about. Today I received a bill-like letter in the mail from Domain Renewal Group (the same company as Domain Registry of America). In the letter they say that my domain name is expiring soon (as in 5 months from now) and that I should renew with them today. But, they are not the company I originally registered with nor would I ever want to (their fees are ridiculously high).&lt;br /&gt;&lt;br /&gt;It is clear that Domain Registry of America has made a conceited effort to trick people into paying them through what appears to be a bill. They do say that "This notice is not a bill" but it is buried in the middle of a wordy paragraph, where it will be easily missed. I personally know of one organization that unwittingly sent them money, thinking that they were obliged to do so. Instead they fell for what amounts to a dirty scam and wasted their money. (Unfortunately their IT people were not consulted by their accounting people.)&lt;br /&gt;&lt;br /&gt;So, if you get a fake bill from Domain Renewal Group, toss it in the garbage and maybe write your own review of this unethical company.&lt;br /&gt;&lt;br /&gt;Other related sites: &lt;a href="http://www.bbb.org/upstate-new-york/business-reviews/internet-web-hosting/domain-renewal-group-in-buffalo-ny-154340290/"&gt;Domain Registry's BBB record&lt;/a&gt;, &lt;a href="http://www.dynadot.com/resource/article/qa.html?aid=21"&gt;Dynadot's warning&lt;/a&gt; (a good registrar), and &lt;a href="http://www.davidrisley.com/2008/11/03/screw-you-domain-renewal-group/"&gt;an understandably frustrated blogger&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7199798539946657969?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7199798539946657969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7199798539946657969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7199798539946657969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7199798539946657969'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/08/domain-renewal-group.html' title='Domain Renewal Group'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8396351842802319517</id><published>2009-08-22T15:22:00.000-07:00</published><updated>2009-11-22T18:11:25.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='inline-block'/><category scheme='http://www.blogger.com/atom/ns#' term='IE6'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS: inline-block</title><content type='html'>So much time spent on one CSS statement - "display: inline-block;"&lt;br /&gt;&lt;br /&gt;This statement is perfect for a new site I am working on. I want three columns of data to display side-by-side. But, I had many frustrations trying to get it to work cross-browser. This is what I found...&lt;br /&gt;&lt;br /&gt;Inline-block works great on IE 8, Chrome and recent versions of Safari.&lt;br /&gt;&lt;br /&gt;I had issues when it came to IE6 and IE7, no big surprise there. I fixed this with some &lt;a href="http://www.quirksmode.org/css/condcom.html"&gt;conditional comments&lt;/a&gt; and the CSS property "display: inline" which acts the same as inline-block in IE. &lt;br /&gt;&lt;br /&gt;I also had problems with &lt;span style="font-weight:bold;"&gt;Firefox 3&lt;/span&gt;! My old love of a browser takes issue with this statement (when used with other specific statements). Apparently "display: inline-block" does not play nice with "overflow: hidden" and "text-align: center". This strange alignment of the planets causes my text to align left, instead. Quirky. I ended up &lt;span style="font-weight:bold;"&gt;commenting out the overflow property&lt;/span&gt;, and everything worked for Firefox 3. (I also added a strange Firefox style statement to make sure it worked on FF 2: "display: -moz-inline-stack;".)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8396351842802319517?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8396351842802319517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8396351842802319517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8396351842802319517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8396351842802319517'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/08/css-inline-block.html' title='CSS: inline-block'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4290136575741848979</id><published>2009-08-06T00:10:00.000-07:00</published><updated>2009-08-06T00:41:55.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texting'/><category scheme='http://www.blogger.com/atom/ns#' term='SMS'/><title type='text'>Group text messaging</title><content type='html'>Just recently ShortShout has been released to the world, so I thought I'd give it a mention here. ShortShout is a &lt;a href="http://shortshout.com/"&gt;group texting manager&lt;/a&gt;. It is a great way to keep groups up to date on events and changes and other things. It allows group leaders to send out SMS messages to everyone who subscribes. I originally designed it for my youth group. I found that many of the youth didn't check their email very often at all&amp;ndash;and I think this is true for most people in general. But, they did check every text message they got. And that's what makes ShortShout such a great tool. You can send messages to people and not only are they read, but they are read almost as soon as they are sent. You can't beat that. This makes ShortShout a great tool for all kinds of groups, from youth groups to bowling leagues, basketball leagues to office pools. Check it out: &lt;a href="http://shortshout.com/"&gt;http://shortshout.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4290136575741848979?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4290136575741848979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4290136575741848979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4290136575741848979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4290136575741848979'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/08/group-text-messaging.html' title='Group text messaging'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-6622475896373601736</id><published>2009-07-17T22:35:00.000-07:00</published><updated>2009-07-17T22:57:24.506-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CDN'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>Scaling</title><content type='html'>Sometimes in life we have to face good problems -- problems that we are happy to have. One such problem is scaling. And it is only really thought about when your website is doing well and receiving a lot of traffic. Thus it is a good problem.&lt;br /&gt;&lt;br /&gt;Here are some tips to scaling well and enabling your website to grow large, easily. (By the way, I am assuming a LAMP configuration.)&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;1. Be very careful using session data (e.g., $_SESSION['varname']), because if you ever need to expand to multiple web servers, this wont work. Session data is stored in memory and will not be present if the web visitor would happen to use a different server for a second request.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;2. I know this is common practice, but I will repeat it anyway: Use library and include files for your scripts. In these files include common functions and common parts of your rendered pages (e.g., headers, menus and footers). This makes updating your entire website as simple as editing one file.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;3. Plan ahead for major traffic spikes by using grid hosting (e.g., Media Temple's "Grid Service"). Grid hosting is a deal where server resources are pooled together and used for whatever site needs them. This way, when you get a major spike in traffic (e.g., you get slashdotted), you have ample processing power and bandwidth to handle it. You may have to pay a bit more when you get traffic spikes, but it is better than being suspended by your host.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;4. Deliver your media content on another set of servers. Media files like movies and audio can take up a lot of bandwidth and file space. Whenever possible offload these files on to someone else's site and you'll save some cash and be more scalable. For example, upload your movies to YouTube or Vimeo and then embed their flash players in your own site. Alternatively, you can use a Content Delivery Network or something like Amazon's S3. When you host content with any one of these solutions you also gain in the area of speed and quality of delivery.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;There is a lot more that can be said in this area, but these are the things I've come across that have helped me.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-6622475896373601736?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/6622475896373601736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=6622475896373601736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6622475896373601736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6622475896373601736'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/07/scaling.html' title='Scaling'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-327892009093652014</id><published>2009-07-02T08:45:00.000-07:00</published><updated>2010-02-15T01:08:19.381-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='IE6'/><title type='text'>jQuery's getJSON</title><content type='html'>I recently had a struggle getting jQuery's $.getJSON function to work on Internet Explorer (IE6 &amp; IE7). I tried and tried to debug the javascript, but was getting no where. After giving up for a while and coming back to it the next day, I thought of checking the target file&amp;mdash;the file jQuery was fetching asynchronously&amp;mdash;for problems. &lt;br /&gt;&lt;br /&gt;It turns out that &lt;span style="font-weight:bold;"&gt;IE doesn't like JSON encoded documents that are specified as UTF-8&lt;/span&gt;. Not sure what the problem is, but the document has to be returned in a format IE likes. If not, IE will not allow jQuery to process it. Now, I had a header on this file that specified the content-type and charset. But, I changed it and instead I put only the content-type at the top of my JSON-returning PHP files:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?PHP&lt;br /&gt;header("Content-Type: application/json");&lt;br /&gt;?&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Why does IE balk at UTF-8 specified charsets for JSON-encoded responses?? Who knows. But, from the research I've done, specifying the charset in the HTTP header is not something that is required. I am sure there are good reasons to specify the charset, but this (above) works great for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-327892009093652014?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/327892009093652014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=327892009093652014' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/327892009093652014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/327892009093652014'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/07/jquerys-getjson.html' title='jQuery&apos;s getJSON'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4853198321995645219</id><published>2009-04-28T15:56:00.000-07:00</published><updated>2009-04-28T16:12:41.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pipe'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>email piping with PHP and cPanel</title><content type='html'>I had a lot of trouble piping emails to a PHP script today. There was a real scarcity out there in terms of information (or I just didn't know how to search for the right terms). So, I thought I'd post about my fun in case someone else got stuck. (By the way, I use cPanel 11 and started with &lt;a href="http://www.evolt.org/article/Incoming_Mail_and_PHP/18/27914/index.html"&gt;this script&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;What I wanted to do was set up an email address that would pipe to a PHP script. That is, my PHP script would get a copy of the emails. Then the PHP script could parse the file and do whatever; make a database entry or something similar.&lt;br /&gt;&lt;br /&gt;I ran into two problems.&lt;br /&gt;&lt;br /&gt;First, I would get a return email that said "Local delivery failed." It would have this at the top of the email:&lt;br /&gt;&lt;pre style="color:#5555FF;"&gt;pipe to |/home/accountname/public_html/emailin.php&lt;br /&gt;   generated by msg@accountname.com&lt;br /&gt;   local delivery failed&lt;/pre&gt;&lt;br /&gt;I found some website somewhere that suggested changing the file permissions for the PHP script (emailin.php in this case). So that is what I did, and it seemed to help. I used the cPanel File Manager to change the permissions to 754. &lt;br /&gt;&lt;br /&gt;That fixed this problem. &lt;br /&gt;&lt;br /&gt;The second problem was that despite receiving the email at the script and doing the appropriate things with it, I would still get an error email back. So, even though it all worked, my email would bounce back saying:&lt;br /&gt;&lt;pre style="color:#5555FF;"&gt;A message that you sent could not be delivered to one or more of its&lt;br /&gt;recipients. This is a permanent error. The following address(es) failed:&lt;br /&gt;&lt;br /&gt; pipe to |/home/accountname/public_html/emailin.php&lt;br /&gt;   generated by msg@accountname.com&lt;br /&gt;&lt;br /&gt;The following text was generated during the delivery attempt:&lt;br /&gt;&lt;br /&gt;------ pipe to |/home/accountname/public_html/emailin.php&lt;br /&gt;      generated by msg@accountname.com ------&lt;/pre&gt;&lt;br /&gt;Again, after a few hours of searching I found someone that suggested changing the hash bang at the top of the script file to this: #!/usr/bin/php -q&lt;br /&gt;&lt;br /&gt;That dash q made all the difference. &lt;br /&gt;&lt;br /&gt;This was my adventure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4853198321995645219?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4853198321995645219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4853198321995645219' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4853198321995645219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4853198321995645219'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/04/email-piping-with-php-and-cpanel.html' title='email piping with PHP and cPanel'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7002383086150423395</id><published>2009-04-17T13:46:00.000-07:00</published><updated>2009-04-17T13:46:00.879-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logo'/><title type='text'>Logo Design</title><content type='html'>Logos are everywhere. And I think every group needs a good logo, if they want to have their stuff easily recognized. I recognize logos much faster than I can read. Logos helps brand everything you do. Moreover, logos have truly utilitarian value for all types of cultural groups. Most churches and non-profits can benefit from a good logo. It ends up being used on websites, business cards and envelopes. &lt;br /&gt;&lt;br /&gt;But, I have seen my share of ugly logos. (And, I must admit, I've even designed a few ugly ones myself.) As I am in the process of redesigning the Firelit logo, I did a little searching and found a couple good sites about logo designs, along with some sites with really good examples of logos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.davidairey.com/5-vital-logo-design-tips/"&gt;David Airey&lt;/a&gt; has a good primer in logo design.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logopond.com/"&gt;LogoPond&lt;/a&gt; has examples of well done logos.&lt;br /&gt;&lt;br /&gt;Or use &lt;a href="http://stufffchristianslike.blogspot.com/2008/10/423-creating-holiest-church-logo.html"&gt;this site&lt;/a&gt; to see how "holy" your current church logo really is. He he ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7002383086150423395?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7002383086150423395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7002383086150423395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7002383086150423395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7002383086150423395'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/04/logo-design.html' title='Logo Design'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-960531442113941756</id><published>2009-04-10T08:45:00.000-07:00</published><updated>2009-04-10T08:45:00.616-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='dhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>javascript wonderland</title><content type='html'>There is a lot you can do with JavaScript and DHTML. You can have custom pop-up messages, you can make things move around the screen, you can have pop-down menus, you can even send data to web servers (AJAX). But, it takes some work to get everything running smoothly. Especially when you want a certain user interface to work great no matter what browser is used. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; is a great solution for JavaScript and user interface problems. They have a wonderful library of visual affects and more. Just take a look at their &lt;a href="http://jqueryui.com/demos/"&gt;demos&lt;/a&gt; to get a feel for what I am talking about (in terms of UI). Then, if you want to integrate it into your own site, just download the code and plug it in (with a few tweaks and bumps - but that is expected, right?). It is a great way to get good functionality going quickly and reliably in a web site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-960531442113941756?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/960531442113941756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=960531442113941756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/960531442113941756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/960531442113941756'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/04/javascript-wonderland.html' title='javascript wonderland'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1390240103138204294</id><published>2009-04-02T08:03:00.000-07:00</published><updated>2009-04-02T08:03:00.953-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sIFR'/><category scheme='http://www.blogger.com/atom/ns#' term='font'/><title type='text'>sIFR</title><content type='html'>Ever want to do a design for the web but are totally dismayed to find the font families available are very limited. There aren't many fonts to choose from when you want your design to look the same across all browsers.&lt;br /&gt;&lt;br /&gt;Mike Davidson and Mark Wubben take the credit for this great solution called &lt;a href="http://www.mikeindustries.com/blog/sifr/"&gt;sIFR&lt;/a&gt; (Scalable Inman Flash Replacement). It takes the normal text within your page and places a flash movie over the text with whatever font you want. So your plain, boring text is hidden with a flash movie of identical content and your personal, fully-cross-browser-compatible font. You can learn a lot more by checking out &lt;a href="http://www.mikeindustries.com/blog/sifr/"&gt;their site&lt;/a&gt;. It takes a little effort to set up, but works good and is virtually seamless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1390240103138204294?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1390240103138204294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1390240103138204294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1390240103138204294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1390240103138204294'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/04/sifr.html' title='sIFR'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-3683887373082656424</id><published>2009-03-25T09:16:00.000-07:00</published><updated>2009-03-25T09:20:10.623-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><title type='text'>Audio</title><content type='html'>I use a website called iStockphoto when I need to find some good images for a website I am designing. And I usually have good luck finding something that will work. &lt;br /&gt;&lt;br /&gt;Yesterday, I received an email from iStock and I learned that they do audio, too. They call it &lt;a href="http://www.istockphoto.com/audio.php"&gt;iStockaudio&lt;/a&gt; and you can find all kinds of royalty free music at fairly inexpensive prices. It could be a great place to find audio for your next website's flash or even for YouTube videos. It has potential. It only seems that searching for the right audio clip would be the hard part.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-3683887373082656424?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/3683887373082656424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=3683887373082656424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3683887373082656424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/3683887373082656424'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/03/audio.html' title='Audio'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-2667264982846055479</id><published>2009-02-25T23:08:00.000-08:00</published><updated>2009-02-25T23:12:09.772-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='font'/><category scheme='http://www.blogger.com/atom/ns#' term='movie'/><title type='text'>Helvetica</title><content type='html'>I watched the movie "Helvetica" tonight. Yes it is about a font. And, as you might guess, it is kinda a slow movie. Nonetheless, some things were interesting. In particular I liked the short and interspersed review of part of the history of graphic design. Despite its focus on "Helvetica" and type face in general, it had many ideas and implications for design in general. I recommend it as a rainy day movie for any interested graphic design.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-2667264982846055479?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/2667264982846055479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=2667264982846055479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2667264982846055479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/2667264982846055479'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/02/helvetica.html' title='Helvetica'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-98196800493276705</id><published>2009-01-22T20:49:00.000-08:00</published><updated>2009-01-22T20:50:40.177-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Trends &amp; Ideas</title><content type='html'>After a Google search I came across this great site that lists some of the web design trends that they noticed in 2008. It is a great site to get ideas and/or insiparation for any kind of design. There are some neat things going on and some uber creative people out there. Check it out: &lt;a href="http://www.webdesignerwall.com/trends/2008-design-trends/"&gt;http://www.webdesignerwall.com/trends/2008-design-trends/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-98196800493276705?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/98196800493276705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=98196800493276705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/98196800493276705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/98196800493276705'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/01/trends-ideas.html' title='Trends &amp; Ideas'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4751276675842669500</id><published>2009-01-21T10:12:00.000-08:00</published><updated>2009-01-22T21:15:17.279-08:00</updated><title type='text'>Accepting Donations Online</title><content type='html'>Many online non-profits want to accept donations online. And for good reason, it is just easier for a lot of people to give that way. I know my wife and I prefer to give this way. We don't have to carry cash and we can donate whenever we want, easily and securely. The problem is, that most non-profits don't have the expertise or the money to pay for a custom solution.&lt;br /&gt;&lt;br /&gt;In comes &lt;a href="http://www.bluefirecart.com/"&gt;BlueFire&lt;/a&gt;. I have partnered with Halo Merchant Services to provide non-profits and faith based organizations an easy and low-cost way to accept donations online. Everything is taken care of for you. No need to worry about SSL certificates, advanced web scripting, or anything else on the technical side. All you do is copy and past a piece of code on to your website and viola, all done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4751276675842669500?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4751276675842669500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4751276675842669500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4751276675842669500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4751276675842669500'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/01/accepting-donations-online.html' title='Accepting Donations Online'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5899048937966470517</id><published>2009-01-03T23:17:00.000-08:00</published><updated>2009-01-03T23:25:35.668-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='credit cards'/><category scheme='http://www.blogger.com/atom/ns#' term='payment'/><title type='text'>Payments &amp; Donations</title><content type='html'>I often work with groups that would like to accept donations online. There are always the easy alternatives available, like PayPal and Google Checkout. But, I recently had the chance to integrate a payment gateway into a custom cart. I had great success and was impressed with the business I worked with so I am giving them a shout-out here. If you are a non-profit (like a church or charity) and need to process credit cards or e-checks online, check out &lt;a href="http://www.halomerchantservices.com/"&gt;Halo Merchant Services&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5899048937966470517?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5899048937966470517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5899048937966470517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5899048937966470517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5899048937966470517'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2009/01/payments-donations.html' title='Payments &amp; Donations'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7234680770999547460</id><published>2008-12-09T11:47:00.000-08:00</published><updated>2008-12-09T11:59:53.879-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engines'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='sitemaps'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Sitemaps</title><content type='html'>Sitemaps are always a little fun. You get to see just how many pages your site has and which ones are more important to you. But, they are really important for search engines. It helps the automated search spiders find all the pages you have and then they can gain a helpful perspective based on the last update and your priority ranking.&lt;br /&gt;&lt;br /&gt;This is the website to check out if you want to learn more about Sitemaps: &lt;a href="http://www.sitemaps.org/protocol.php"&gt;http://www.sitemaps.org/protocol.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I usually do my sitemaps in PHP. So, I am going to break new ground here and drop some code on my blog. Since most of my sites are now PHP, here is what I typically use:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?PHP header("Content-Type: text/xml; charset= UTF-8"); ?&amp;gt;&lt;br /&gt;&amp;lt;?PHP echo "&amp;lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&amp;gt;\n"; ?&amp;gt;&lt;br /&gt;&amp;lt;urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"&amp;gt;&lt;br /&gt; &amp;lt;url&amp;gt;&lt;br /&gt;  &amp;lt;loc&amp;gt;http://www.mydomain.com/&amp;lt;/loc&amp;gt;&lt;br /&gt;  &amp;lt;lastmod&amp;gt;&amp;lt;?PHP &lt;br /&gt;     echo date ("Y-m-d", filemtime("index.php")); &lt;br /&gt;     ?&amp;gt;&amp;lt;/lastmod&amp;gt;&lt;br /&gt;  &amp;lt;changefreq&amp;gt;monthly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;  &amp;lt;priority&amp;gt;0.5&amp;lt;/priority&amp;gt;&lt;br /&gt; &amp;lt;/url&amp;gt;&lt;br /&gt; &amp;lt;url&amp;gt;&lt;br /&gt;  same stuff here...&lt;br /&gt; &amp;lt;/ulr&amp;gt;&lt;br /&gt; &lt;br /&gt; ... and add more urls as needed&lt;br /&gt; &lt;br /&gt;&amp;lt;/urlset&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Make sure you test the URL in your browser first, but then it should be good to go. You can let the search engines know about it in the webmaster tools or even add a reference to it in your robots.txt file ("Sitemap: http://www.mydomain.com/sitemap.php").&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7234680770999547460?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7234680770999547460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7234680770999547460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7234680770999547460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7234680770999547460'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/12/sitemaps.html' title='Sitemaps'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-352036438432841346</id><published>2008-12-01T17:17:00.000-08:00</published><updated>2008-12-01T18:40:57.253-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='dhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS: background-position</title><content type='html'>Today I discovered a new trick I can use for background images in CSS. It is based on the background-position property. This allows the designer to offset a background image used in an object (like a span or div).&lt;br /&gt;&lt;br /&gt;I was looking at the images that Google uses in Gmail and noticed that some of their icons come all together in one larger PNG file. They form an array of icons. After some searching the web I landed on this article that explained how to select a single image from an image array: &lt;a href="http://www.guistuff.com/css/css_imagetech1.html"&gt;http://www.guistuff.com/css/css_imagetech1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pretty neat. It reduces page load-time (because you load one image instead of multiple ones, and each file comes with overhead transaction data) and removes the need to pre-cache images for DHTML. A little bit of JavaScript and CSS and you're all set. It is going to be a handy thing to have in my design toolbox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-352036438432841346?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/352036438432841346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=352036438432841346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/352036438432841346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/352036438432841346'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/12/css-background-position.html' title='CSS: background-position'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7938635520477477562</id><published>2008-11-20T10:23:00.000-08:00</published><updated>2008-11-20T10:35:19.879-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='primopdf'/><title type='text'>PDF Creator</title><content type='html'>Whenever posting documents to the internet (or emailing them) it is always best to use PDFs. Using a PDF ensures that the document will look exactly like you intended it. If you use Word or Excel or something similar, there is always the chance that someone else wont have the same version or same fonts and that the end result will look very different. And, not everyone has the same software programs--Microsoft Office is expensive. But, &lt;a href="http://www.adobe.com/products/acrobat/readstep2.html"&gt;Adobe Acrobat Reader&lt;/a&gt; is free! Also, it is generally more professional to send documents in PDF, such as invoices or proposals. &lt;br /&gt;&lt;br /&gt;So, how do you create these PDFs without dishing out all the cash for Adobe Acrobat, the not-so-free version? I have been using the free PDF creator &lt;a href="http://www.primopdf.com/"&gt;PrimoPDF&lt;/a&gt; for some time now. I really like it and it has not given me any problems. It creates great looking PDFs very quickly. It installs a new printer on your computer so that you can create a PDF from any program. But instead of something being printed physically it creates a PDF file that you can save. &lt;br /&gt;&lt;br /&gt;Works great and it is free. Two things I value, as is apparent by previous blog posts. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7938635520477477562?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7938635520477477562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7938635520477477562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7938635520477477562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7938635520477477562'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/11/pdf-creator.html' title='PDF Creator'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-6454953929826348612</id><published>2008-11-07T23:00:00.000-08:00</published><updated>2008-11-07T23:24:57.938-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'>Images</title><content type='html'>Images are very important to the construction of an appealing website. &lt;a href="http://firelitdesign.blogspot.com/2008/08/image-editors.html"&gt;I wrote before&lt;/a&gt; about the use of great image software, like GIMP. But, we still need to get those great stock photos to round of a site.&lt;br /&gt;&lt;br /&gt;There are some great sites for this, even for free pics. Flickr, for instance, is one of these free picture sites. But not all pictures are available for all purposes. Use &lt;a href="http://www.flickr.com/search/advanced/"&gt;Flickr's advanced search&lt;/a&gt; to find those that you can use. On the bottom of their search page, you'll see options for creative commons licensed images. You can search multpile sites at once using &lt;a href="http://everystockphoto.com/"&gt;everystockphoto.com&lt;/a&gt;. Or, if you want the easy and high-quality route and are willing to pay a small fee, check out &lt;a href="http://istockphoto.com"&gt;iStockphoto&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-6454953929826348612?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/6454953929826348612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=6454953929826348612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6454953929826348612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/6454953929826348612'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/11/images.html' title='Images'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-173231646028276212</id><published>2008-10-04T12:39:00.000-07:00</published><updated>2009-06-29T19:04:42.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engines'/><category scheme='http://www.blogger.com/atom/ns#' term='MSN'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='Ask'/><title type='text'>New Site - Search Engine Submission</title><content type='html'>Do you have a new website? Is it time to let the world know about it? Then submit it to the major search engines! And don't be fooled, this is not something you have to pay for. There are a lot of people out there trying to make money by submitting your site to search engines for you. You don't need to do this because it is really easy and straight forward.&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://www.hitwise.com/datacenter/searchengineanalysis.php"&gt;Hitwise.com&lt;/a&gt;, the top 4 used search engines are Google, Yahoo, MSN and Ask. Almost 97% of all searches done on the internet are through one of these engines. So, these are the guys you will want to inform about your new website.&lt;br /&gt;&lt;br /&gt;Visit each of the links, and you should be good to go:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.google.com/addurl/"&gt;Google&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://siteexplorer.search.yahoo.com/submit"&gt;Yahoo&lt;/a&gt; (you'll have to make an account)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://search.msn.com.sg/docs/submit.aspx"&gt;MSN Live&lt;/a&gt; &lt;b&gt;UPDATE&lt;/b&gt; &lt;a href="http://www.bing.com/docs/submit.aspx"&gt;new URL for Bing&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://about.ask.com/en/docs/about/webmasters.shtml#18"&gt;Ask&lt;/a&gt; (you'll have to make a sitemap)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-173231646028276212?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/173231646028276212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=173231646028276212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/173231646028276212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/173231646028276212'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/10/new-site-search-engine-submission.html' title='New Site - Search Engine Submission'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-7350976894697225463</id><published>2008-09-26T09:09:00.001-07:00</published><updated>2008-09-26T09:32:05.676-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='custom search'/><title type='text'>Site Search Engine</title><content type='html'>This is my last post about free Google services (for now). This one is about &lt;a href="http://www.google.com/coop/cse/"&gt;Custom Search&lt;/a&gt; by Google. Searching is a very important tool for a website to have, especially for sites with a large amount of content. You can not have visitors getting frustrated and leaving because they can not find what they are looking for.&lt;br /&gt;&lt;br /&gt;The problem is, search engines are not easy things to create. If you have ever seriously thought about the prospect, you know it takes a lot of time and energy to implement a good one. Instead, why not use the great search technology that Google has created right on your site?&lt;br /&gt;&lt;br /&gt;Google allows webmasters to install code that will allow your visitors to search your site. They constrain all search results to the domains you choose so the results are specific to you. And you can integrate the search results directly into your own template, so it all has a very coherent look and feel.&lt;br /&gt;&lt;br /&gt;PS. "Custom Search" is similar to but not the same as "Site Search," a commercial (i.e., not free) service offered by Google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-7350976894697225463?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/7350976894697225463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=7350976894697225463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7350976894697225463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/7350976894697225463'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/09/site-search.html' title='Site Search Engine'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-8920275545027252993</id><published>2008-09-17T13:07:00.001-07:00</published><updated>2009-03-25T09:32:43.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Calendar</title><content type='html'>The third blog post in my series of great Google freebies is &lt;a href="http://www.google.com/calendar/"&gt;Google Calendar&lt;/a&gt;. Google calendar is great for my wife and I. We both share a calendar and we can setup events to remind each other of upcoming appointments. It helps us communicate about our shared schedule. &lt;br /&gt;&lt;br /&gt;Beyond this, Google Calendar is great for non-profits for two big reasons. First, everyone involved with a non-profit can have a shared calendar. This way everyone is on the same page and they are totally up-to-date with what is going on. You can also manage assets and room reservations through it, if you wanted. Just like with Outlook exchange server, you can see the busy/free calendar of your invitees when you try to find a good meeting time. And it is all free!&lt;br /&gt;&lt;br /&gt;The second reason is that you can embed your calendar in your webpage. This is great for web designers. It takes a lot of programing to get a good calendar back-end up and running. Why not use what Google has done instead? You can do a simple embed of html calendar code (&lt;a href="http://www.fbcofla.org/sub_about/calendar.asp"&gt;like this one&lt;/a&gt;) or you can completely customize the front-end while using Google's back-end. There are just so many options!&lt;br /&gt;&lt;br /&gt;Google Calendar has worked well for me and saved me a lot of time. It is worth considering, especially with its low price tag (its FREE, if you missed that).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-8920275545027252993?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/8920275545027252993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=8920275545027252993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8920275545027252993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/8920275545027252993'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/09/google-calendar.html' title='Google Calendar'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-1479240071881304321</id><published>2008-09-12T22:08:00.000-07:00</published><updated>2008-09-17T13:16:23.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Free Email</title><content type='html'>The next Google service that I would like to highlight is &lt;a href="http://www.google.com/nonprofits/gmailtutorial.html"&gt;hosted email&lt;/a&gt;. This is a lesser known service offered by Google, I believe. However, it is probably the most powerful and most beneficial free service available to non-profits! Google offers free email service for any domain. Non-profits also get enhanced services that businesses have to pay for. You can get as many email addresses as you want, the SPAM protection is amazing, and each account gets over 7 GB of space!!&lt;br /&gt;&lt;br /&gt;Once you set it up you get an administrator panel where you can manage all account information. And even though it is Gmail, all of your email addresses will reflect your domain name (e.g., name@your-domain.org). You can also customize it a bit and use your own logo. Additionally, you will get chat and other Google applications automatically. It can really boost in-office communication and efficiency.&lt;br /&gt;&lt;br /&gt;I have used this service on multiple domains. I have set it up for the First Baptist Church of Los Angeles, and it has been a dream for them. Major universities have also started using it. Fuller Seminary, for example, uses it for all their student accounts.&lt;br /&gt;&lt;br /&gt;Check it out. I really think you'll like it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-1479240071881304321?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/1479240071881304321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=1479240071881304321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1479240071881304321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/1479240071881304321'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/09/free-email.html' title='Free Email'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4339428390759558139</id><published>2008-09-08T22:22:00.000-07:00</published><updated>2008-09-17T13:16:54.399-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='analytics'/><title type='text'>Analyzing Traffic</title><content type='html'>Google has tons of great tools for webmasters. And the best part is that most of them are free! So, I decided to spend some time mentioning some of Google's free services. They are &lt;span style="font-style:italic;"&gt;perfect&lt;/span&gt; for non-profits, ministries and whoever else is trying to save some money. This is the first post in a series on free Google resources. &lt;br /&gt;&lt;br /&gt;The first Google service I want to mention in &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;. It is a great statistics and web traffic analyzer available to the public. It has all kinds of nifty features and abilities. For instance, it will produce multiple world and country maps of your visitors, it outlines traffic flow, it details traffic sources, records visitor browser information and tons more. You can also set it up so that periodic PDF reports are sent to email addresses you provide--perfect for that monthly report.&lt;br /&gt;&lt;br /&gt;It has one drawback: it is javascript based. This means you can only track web page hits, not image loading or anything else. It also means that anyone with javascript disabled will be invisible to the reports. However, with this in mind, Google Analytics is still an amazing resource that everyone should know about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4339428390759558139?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4339428390759558139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4339428390759558139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4339428390759558139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4339428390759558139'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/09/analyzing-traffic.html' title='Analyzing Traffic'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-4620699608955137352</id><published>2008-09-02T23:02:00.000-07:00</published><updated>2008-09-17T13:17:22.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='IE7'/><category scheme='http://www.blogger.com/atom/ns#' term='Browsers'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><category scheme='http://www.blogger.com/atom/ns#' term='IE6'/><title type='text'>Virtual PC</title><content type='html'>As a web designer, I want to make my web pages look pretty in any browser people may use. And, one of the hardest browsers to test for is Internet Explorer 6 (IE6). Unfortunately, my Google Analytics show that a little under half of all IE users use version 6. A slight majority have switched it IE7. But not enough to forget about IE6 users.&lt;br /&gt;&lt;br /&gt;To really be certain that my page will look right in nearly every visitor's browser, I test in Firefox, IE7, Safari and IE6. I figure this will cover 95% of my visitors, plus if it works in these there is a good chance it will work in the others (e.g., Opera, Mozilla, etc.). &lt;br /&gt;&lt;br /&gt;The problem I ran into is being able to test a site in IE6 and IE7. You can't have both versions installed on your PC at the same time: Microsoft forbids it. To help us designers out, Microsoft has virtual hard drives (VHDs) available with IE6 installed. So, if you download Virtual PC (free) and the install the VHD for IE6 at &lt;a href="http://go.microsoft.com/fwlink/?LinkId=70868"&gt;http://go.microsoft.com/fwlink/?LinkId=70868&lt;/a&gt;, you can easily test your design with IE6 on the same computer that has IE7 installed.&lt;br /&gt;&lt;br /&gt;There you go. But, this would all be a lot easier if everyone just upgraded to IE7! What are they waiting for?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-4620699608955137352?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/4620699608955137352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=4620699608955137352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4620699608955137352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/4620699608955137352'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/09/virtual-pc.html' title='Virtual PC'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-5332935623943664078</id><published>2008-08-28T23:28:00.001-07:00</published><updated>2008-08-28T23:40:43.379-07:00</updated><title type='text'>Transfering Websites</title><content type='html'>I have transferred a few websites and domain names lately. Here are two tips that I think are worth writing down for now.&lt;br /&gt;&lt;br /&gt;First, do things in the right order. If you are switching both the web host and domain name service, doing things in the right order will eliminate any downtime. Begin by starting your new hosting service and transferring your site's data there from the old host. Next, change your DNS to point to your new host. Then you can initiate the transfer of your domain. Doing it in this order will cause the switch to be seamless. I learned this the hard way. I found that after you initiate a transfer of a domain name it takes 5 business days and the DNS is locked during the period--no updates or changes allowed.&lt;br /&gt;&lt;br /&gt;Second, there is a great tool that can help you change a site's script code from ASP to PHP. For instance, I had a site hosted on Windows Server and wanted to transfer it to a Linux server. The tool is free and it is called &lt;a href="http://asp2php.naken.cc/" target="_blank"&gt;ASP2PHP&lt;/a&gt;. I have used it a bit and had some good successes. There are a few bugs, but it is a lot better than hand coding everything all over again.&lt;br /&gt;&lt;br /&gt;That's all for now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-5332935623943664078?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/5332935623943664078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=5332935623943664078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5332935623943664078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/5332935623943664078'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/08/transfering-websites.html' title='Transfering Websites'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3835820450680690950.post-138897777299308799</id><published>2008-08-26T20:07:00.001-07:00</published><updated>2008-09-17T13:17:57.710-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='GIMP'/><category scheme='http://www.blogger.com/atom/ns#' term='Paint.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Picasa2'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Image Editors</title><content type='html'>There are some good, free image editors out there. If you are on a short budget but want to produce some top quality images, check these out:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://picasa.google.com/" target="_blank"&gt;Picasa2&lt;/a&gt; - This is a really easy program to use and it is great for basic photograph edits. It handles some otherwise intensive tasks with easy (like shrinking and emailing images, exporting at reduced sizes, creating HTML photo albums). I also noticed that its file type compatibility is impressive (it was able to open a raw image file from my SLR).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.getpaint.net/" target="_blank"&gt;Paint.NET&lt;/a&gt; - This is a more advanced image editor that is really easy to learn. It has a lot of features, is constantly being updated by its creator, is pretty powerful, and anyone can learn to use it. There is also an online library with extensions if you want even more graphics tools. When I first got into web design, this is the program I used.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.gimp.org/" target="_blank"&gt;GIMP&lt;/a&gt; - Now this is my favorite. It is even more powerful than Paint.NET and can create some amazing pictures. It rivals Photoshop in many ways. And, just like the others above, this one is free! There is a drawback, however. It is a hard to learn. It took me some real quality time before I felt comfortable with it.  I suggest going to YouTube to watch some free tutorials on how to use it. This will give you a much needed head start on the learning curve and reduce some of the frustration that many experience. This is the only image editor I use now for web and graphic design.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3835820450680690950-138897777299308799?l=firelitdesign.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://firelitdesign.blogspot.com/feeds/138897777299308799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3835820450680690950&amp;postID=138897777299308799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/138897777299308799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3835820450680690950/posts/default/138897777299308799'/><link rel='alternate' type='text/html' href='http://firelitdesign.blogspot.com/2008/08/image-editors.html' title='Image Editors'/><author><name>Eric</name><uri>http://www.blogger.com/profile/04711486359505177802</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://static.flickr.com/65/204515782_bbc25fa1ed_m.jpg'/></author><thr:total>0</thr:total></entry></feed>
