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

<channel>
	<title>CentreSource Interactive Agency Blog &#187; Chris Wage</title>
	<atom:link href="http://blog.centresource.com/author/cwage/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.centresource.com</link>
	<description>Web Development &#124; Nashville, TN</description>
	<lastBuildDate>Tue, 09 Mar 2010 16:39:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Backups and the Web</title>
		<link>http://blog.centresource.com/2010/02/19/backups-and-the-web/</link>
		<comments>http://blog.centresource.com/2010/02/19/backups-and-the-web/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 19:47:49 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=1503</guid>
		<description><![CDATA[Backup solutions and disaster recovery are a mainstay of technology, and they have been well-analyzed in the past &#8212; typically...]]></description>
			<content:encoded><![CDATA[<p>Backup solutions and disaster recovery are a mainstay of technology, and they have been well-analyzed in the past &#8212; typically from an IT angle. But choosing a solid backup for a website is just as important, and it&#8217;s an oft-overlooked final step in the successful deployment of any web site or application. Backup technology has changed a lot over the years, and it can be a daunting task to figure out which solution works for you. This is not a technical guide &#8212; there are countless technical solutions to any given backup need. The intent of this guide is to help you understand the nature of your own website and data, and to narrow down the solution that is ideal for your needs. Without a proper understanding of what data your website has and where it&#8217;s stored, any backup solution has the potential to languish or be unrestoreable when the worst happens. Read on:</p>
<p><span id="more-1503"></span></p>
<ol>
<li>The first step is to consider the nature of your website. Is it merely a &#8220;static&#8221; HTML/CSS website with no dynamic data? If not, does it use a database of any kind? How/where does that database store its data? Lastly, does your website include the storage of a large number of files (multimedia, documents, etc)? And if so, are these crucial to the operation of your website?</li>
<li>Next, how much data can you afford to lose? Of course, no one likes to think or talk about losing data, but any solution is a compromise between resources you&#8217;re willing to pay for and the amount of data that&#8217;s guaranteed protection. This &#8220;amount&#8221; is typically/best measured in time. Any backup solution will capture &#8220;snapshots&#8221; of your website &#8212; copies of the data at a certain point in time &#8212; that will vary anywhere from &#8220;realtime&#8221; to hours or days since the last snapshot was made. If you cannot afford to lose any data, then a realtime backup solution is the only option. These solutions will do their best to use a program running non-stop in the background making a backup (somewhere) of your data. If the answer is &#8220;some&#8221; &#8212; then you just make a determination of what your acceptable loss is. Is it a day? A week? 6 hours?</li>
<li>The second &#8220;time&#8221; factor is the time-to-restore. How much time is acceptable to go from a catastrophic failure to a complete restore of your website functionality? This time is determined by many things in addition to the actual type of backup you have, including the type of webhosting you have, and the form of the failure. If you host your website on a VPS (&#8221;Virtual Private Server&#8221;), for example &#8212; and this VPS was backed-up in its entirity on a regular basis &#8212; then restoring is as simple as copying over the VPS backup and restarting it to that point. If your website has a more complicated architecture (multiple frontend webservers and multiple databases, for example), then the restore process is likely to be a more lengthy ordeal of reconfiguring the servers ahead of time before any data is put back in place.</li>
<li>Where is the data backed up? It should be obvious that the best backup is to a location that is physically separate from where your website is hosted. This is not an absolute (in fact it&#8217;s quite relative &#8212; is another server rack in the same datacenter &#8220;off-site&#8221;? What about a different datacenter owned by the same company and on the same network?), but in general you should attempt to distance your data from the potential points of failure: fires, tornadoes, hosting company incompetence, nuclear strikes &#8212; you name it.</li>
<li>Can you test the restore functionality regularly? This is a factor of cost, to some extent, and also practicality. If you opted for any backup solution other than &#8220;realtime&#8221;, you&#8217;ve decided on an acceptable level of data (time) loss &#8212; so testing a full restore right to production is not advisable, since you&#8217;d lose data. But working with your hosting/backup vendor to verify the backup, and maybe test a restore to another location are things you should pursue, if possible.</li>
</ol>
<p>These are all important questions that you need to ask of yourself, and also of your web hosting vendor and your web developer. Together, you can decide on a backup solution that makes sense for your website. That said, what kind of solutions are there? This is not a comprehensive list, but it&#8217;s a general summary of the types of ways you can guarantee continuity of your website. Interestingly, computing/server technology has come a long way in the last couple of years. Virtualization and cloud competing have blurred the lines between continuity, load-balancing, and backup. After all, if your website is running on a virtual server in the cloud, data loss is impossible, right? Well, no, not really.</p>
<ul>
<li>VPS (Virtual Private Servers) &#8211; as mentioned above, a VPS can be a good way of assuring a very quick time from hardware failure to restoration. A VPS is a &#8220;server&#8221; that is entirely self-contained and run in a &#8220;virtual&#8221; environment. This means that your server itself is essentially a file or files that can be copied (regularly, or realtime) to any other backup medium for later restoration. Typically, most hosting providers that offer hosting on a VPS will also offer a backup service that makes restoration of your VPS a cinch. The above questions, however, are still quite pertinent and should be asked: How often do they backup the VPS? How quickly can they restore? Some hosting vendors host their VPS on a &#8220;cloud&#8221; server architecture which makes hardware failure a nearly negligible factor. However, you should still consider how much you trust the competence of your hosting vendor and explore the option of backing up your data somewhere else independent of the VPS itself. Many other things can go wrong &#8212; virtualization software failure, data corruption, etc. These things can all leave your virtual server inoperable or unsalvageable.</li>
<li>Backup &#8220;daemons&#8221; &#8211; &#8220;daemon&#8221; is computer nerd slang for any software that runs non-stop in the background. There are many common backup solutions that use a daemon running in the background to persistently backup your website and its data. Typically, this sort of solution is what&#8217;s required for a &#8220;realtime&#8221; backup of your data. Most hosting vendors that host larger dedicated managed server environments will have some offering in this regard.</li>
<li>Scheduled backup jobs &#8211; there are a wide variety of ways this can be implemented, but loosely speaking, this is any sort of backup script/program that is merely scheduled on a regular basis (say, nightly) and involves a manual copy of the website data (files and database dump) to an arbitrary off-site location.</li>
</ul>
<p>It&#8217;s very likely that any hosting vendor you choose will have one or more of the above options &#8212; and possibly others. But it&#8217;s not enough to simply sign-off on an arbitrary product without understanding what it does and what it guarantees. Hopefully, armed with the above questions and information, you can make the right decision about how to backup your website. In an age where a website is increasingly the face of your business, you can&#8217;t afford to leave it to chance.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2010/02/19/backups-and-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GMail/Google Calendar Integration</title>
		<link>http://blog.centresource.com/2009/05/21/gmailgoogle-calendar-integration/</link>
		<comments>http://blog.centresource.com/2009/05/21/gmailgoogle-calendar-integration/#comments</comments>
		<pubDate>Thu, 21 May 2009 06:13:55 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[mail]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/?p=847</guid>
		<description><![CDATA[Google, why hast thou forsaken us? A long time ago, in a galaxy far away, GMail had this great feature...]]></description>
			<content:encoded><![CDATA[<p>Google, why hast thou forsaken us? A long time ago, in a galaxy far away, GMail had this great feature that was a defining reason in my switch from my previous mail provider (me). That was that if you ever got a message that had any sort of &#8220;event&#8221; &#8212; various combinations of a date, time and place &#8212; gmail would detect it and automatically create a link on the right sidebar to &#8220;Add to calendar&#8221;.</p>
<p>It didn&#8217;t always get it 100% right, but even if it didn&#8217;t, it was still a convenient shortcut and it would get a majority of the info right. It was also amazingly good at picking &#8220;events&#8221; out of e-mail &#8212; either casual e-mail from a person or automated/invite type messages.</p>
<p>Then one day, it disappeared. Poof. Gone. Has anyone else noticed this? Does it still exist for anyone else out there? Is it unique to traditional gmail versus google apps?</p>
<p>Google, please bring this back, or I swear on the Golden Kraut I&#8217;ll have my revenge!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2009/05/21/gmailgoogle-calendar-integration/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>siteground&#8217;s braindead spam-filtering</title>
		<link>http://blog.centresource.com/2007/06/29/sitegrounds-braindead-spam-filtering/</link>
		<comments>http://blog.centresource.com/2007/06/29/sitegrounds-braindead-spam-filtering/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 15:33:14 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[aol]]></category>
		<category><![CDATA[siteground]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/06/29/sitegrounds-braindead-spam-filtering/</guid>
		<description><![CDATA[We have a customer of ours who pays us both for e-mail/web hosting as well as our anti-spam/anti-virus relay service,...]]></description>
			<content:encoded><![CDATA[<p>We have a customer of ours who pays us both for e-mail/web hosting as well as our anti-spam/anti-virus relay service, <a  href="http://www.swirbo.com/">Swirbo</a>. Swirbo is a service that filters mail by having mail for a domain sent to it first, via MX records, and then relayed to its final destination.</p>
<p>Recently, this customer began reporting that she was unable to receive e-mail from certain people. Some investigation yielded this information from Swirbo, while attempting to deliver a legit e-mail message from someone on aol.com:</p>
<blockquote><p>
Jun 14 10:50:10 mta1 postfix/smtp[5285]: 90D0D834038: to=<ourcustomer @redacteddomain.com>, relay=redacteddomain.com[1.2.3.4], delay=3, status=bounced (host redacteddomain.com[1.2.3.4] said: 550 SITEGROUND Faked AOL, so you must be spam. (in reply to RCPT TO command))<br />
</ourcustomer></p></blockquote>
<p>This error message was not exactly clear, so I was forced to contact Siteground to try to determine why they were blocking this mail. Unfortunately, Siteground has no support number to call, or e-mail address to e-mail. So, I attempted to file a ticket, however even this requires 30 minutes of trudging/fighting through obscure attempts to deflect actual contact with support via their &#8220;knowledge base&#8221; and a barely-functionining java applet that tries to detect obvious problems first. Once I made it through this and obtained the customer&#8217;s password (which is required for some reason to even file a ticket), I managed to file a ticket asking them for an explanation.</p>
<p>This was their response, after which they immediately closed the ticket (which I can&#8217;t re-open to respond):</p>
<blockquote><p>
I carefully investigated your case and I noticed that your domain is using an mail exchange server as it&#8217;s MX records point to </p>
<p>redacteddomain.com. 14400 IN MX 10 mta1.swirbo.net.<br />
redacteddomain.com. 14400 IN MX 10 mta2.swirbo.net. </p>
<p>Due to this fact the email messages are coming to our server from email address redacteduser@aol.com and hostname mta2.swirbo.net. due to the fact that mta2.swirbo.net. is relaying them to us. </p>
<p>Our spam prevention filters are checking if the email address domain and the host which the emails come from are the same and if they find a mismatch the email is rejected with the message that it must be fake mail. </p>
<p>My advice is to contact your mail exchanger support team and present them with this information in order to solve the issue more effectively.</p>
<p>Please do not hesitate to contact us if you have any further questions or comments. </p>
<p>Best Regards, </p>
<p>Andrey<br />
Support Team<br />
SiteGround.com
</p></blockquote>
<p>So, aside from their hideous customer service and refusal to give me a chance to respond to a support inquiry, we have what appears to be a very braindead attempt at spam-filtering by Siteground. What they seem to be saying is that when they receive an SMTP connection, they check the reverse-DNS for the IP, and if the domain name in the resulting A record doesn&#8217;t match the sender&#8217;s domain, they reject it. This makes no sense, and contravenes any number of standard practices involving SMTP relays. I&#8217;m assuming they only do this for certain larger domains (AOL, Yahoo, etc.), otherwise it&#8217;s hard to imagine how their customers get any mail at all. The potential here for false-positives is huge.</p>
<p>Similar problems as this emerge with <a  href="http://en.wikipedia.org/wiki/Sender_Policy_Framework">SPF</a>, but this is above and beyond even that.</p>
<p>Unfortunately, due to Siteground&#8217;s complete lack of support, broken e-mail, and inability to address this problem, we&#8217;ll probably be migrating what few accounts we have with them somewhere else.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/06/29/sitegrounds-braindead-spam-filtering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comcast is Not a Business ISP</title>
		<link>http://blog.centresource.com/2007/06/28/comcast-is-not-a-business-isp/</link>
		<comments>http://blog.centresource.com/2007/06/28/comcast-is-not-a-business-isp/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 18:00:30 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[comcast]]></category>
		<category><![CDATA[comcast-sucks]]></category>
		<category><![CDATA[ISP]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/06/28/comcast-timeline/</guid>
		<description><![CDATA[Recently we had one of our regular (every couple of months) Comcast Nightmares. These happen now and again, and by...]]></description>
			<content:encoded><![CDATA[<p>Recently we had one of our regular (every couple of months) Comcast Nightmares. These happen now and again, and by now our entire company is fairly used to the &#8220;Comcast is down &#8212; go work from home or a coffee shop&#8221; routine. This time, however, I wanted to detail a bit of what we experienced, and talk about what it means for us. First, a rough timeline of our original problems:</p>
<p><span id="more-538"></span></p>
<h3>Thursday 6/07</h3>
<p>4PM &#8212; Our comcast cable goes down hard. We reboot the modem and lights sync up fine, but we have no access to the internet. One of our employees called Comcast and they dispatched for the following morning (Friday 6/08)</p>
<h3>Friday morning 6/08</h3>
<p>10AM &#8212; Comcast tech arrives on-site. He checks the signal and it&#8217;s fine, and then proceeds to replace the old SMC modem with a Netgear &#8220;business IP gateway&#8221;. Unfortunately this didn&#8217;t get us back up.</p>
<p>11AM &#8212;  After an hour or so of phone calls, he managed to get a laptop online via NAT from the router. This is good because it means whatever originally went wrong has been fixed, but he had no explanation for what originally caused it.</p>
<p>11:05AM &#8212; Comcast tech looks satisfied and starts hinting that we&#8217;re good to go and I ask about the static IP configuration and remind him that we&#8217;re down until we get the static IP configuration. He clearly has no idea what this even means, so I have to convince him that he&#8217;s not done, since he was arguing at first that &#8220;the static IP is something y&#8217;all have to do, we don&#8217;t do that&#8221;.</p>
<p>11:30AM &#8212; After I convince him that we need the static IP (i nearly whiteboarded a network diagram to try to explain it to him, but he had no TCP/IP/routing/networking knowledge at all whatsoever), he called 2 different Comcast numbers, eventually getting someone. He wouldn&#8217;t let me just talk to them, so I had to relay word-for-word what I needed, which he relayed to them: &#8220;They.. they&#8217;re saying they .. they need a static.. static? right, static IP? a static IP configuration?&#8221;</p>
<p>11:40AM &#8212; After finally relaying this to the woman he was talking to, she informs him that &#8220;We don&#8217;t provide the static IP &#8212; that&#8217;s something the client has to provide..&#8221; As politely as I could, I let them know that I don&#8217;t even know what that means. We pay for a static IP. They give us the IP, route it, and we assign it to our firewall. Pretty simple. We&#8217;ve had it that way for 2 years.</p>
<p>12:30PM &#8212; Finally, they get the static IP config built and pushed to the new modem. At long last, we&#8217;re back up and running. I pack up and head home.</p>
<p>2:30PM &#8212; I get alerts from Nagios that our Comcast has gone down. Again. I venture into the office to check on it, and verify via troubleshooting that it appears our new modem has simply &#8220;lost&#8221; the static IP configuration again. (I know this because I can get online via NAT through the modem itself). I call comcast support, and an hour later, I finally get to a tech that knows what I am talking about, and they get the static IP re-pushed. I head home again.</p>
<p>3:30PM &#8212; I get alerts from Nagios that our Comcast has gone down again. I head back into the office. Same thing. I call Comcast, same song and dance. This time, I again ask what could be causing this that the modem would simply &#8220;lose&#8221; its config so often. He doesn&#8217;t seem to know, and asks if anyone &#8220;hard reset&#8221; the modem. No progress on that front, but he got us back up and running again.</p>
<p>4:45PM &#8212; I get alerts from Nagios that our connection has gone down again. This time, however, just as I arrive at the office, it comes back up. It appears that this perhaps was just a &#8220;normal&#8221; outage. (The fact that I consider outages like these to be &#8220;normal&#8221; is an indication of the quality of Comcast&#8217;s service.)</p>
<h3>Saturday and Sunday (6/09 and 6/10)</h3>
<p>During these two weekend days, our cable went up and down around 3 or 4 times, for 15-20 minutes at a time. Though it concerned me, it never does any good to call Comcast support to &#8220;let them know&#8221; that it went down, so if it comes back up at all, we consider ourselves lucky.</p>
<h3>Monday (6/10)</h3>
<p>Thinking that everything seems peachy keen, our employees arrived at the office fresh and ready for a productive day&#8217;s work for a change. Unfortunately, looks can be deceiving. Not long into the day, we started to realize that something is wrong &#8212; the re-emergence of a problem we had around 6 months ago that subsequently mysteriously disappeared.</p>
<p>The problem was that TCP sessions would timeout during inactivity. I knew this wasn&#8217;t an issue with our firewall, because of the following reasons:</p>
<ul>
<li>Our firewall config hasn&#8217;t changed or been touched substantially in over 2 years.</li>
<li>The problem came and went (usually corresponding with Comcast needing to re-push the static IP config) while no changes were made to our firewall</li>
<li>While the problem is occurring, I could still see a connection in the pf state table (our firewall is OpenBSD running on a Soekris box).</li>
<li>I was able to reproduce the problem by setting up a laptop with the static IP and plugging it straight into the modem.</li>
</ul>
<p>The problem was tolerable in the past, but this time it was much worse &#8212; connections were timing out after around 5 minutes of inactivity. This doesn&#8217;t sound like a big deal, but when you consider the amount of traffic we have that requires a persistent TCP connection, and how poorly some software deals with timeouts (*cough*Outlook*cough*), you can imagine how rough things were for us. Instant Messaging (AOL, MSN or Jabber) would stop working. E-mail (IMAP) would stop working. FTP control connections would stop working, etc.</p>
<p>Making matters worse, from a technical perspective, was that these connections didn&#8217;t merely &#8220;time out&#8221; &#8212; there was no RST or FIN packets sent to terminate the connection. It just disappeared. Traffic goes out, nothing comes back.</p>
<p>I will spare you the blow-by-blow of the troubleshooting for this problem, but you can probably imagine that a company with tech support that can barely understand and support the basic services they provide (i.e. our static IP configuration problems), getting them to understand a slightly esoteric (but devestating) TCP problem was a nightmare. Attempts were made to deflect the issue back to us were made at every turn. Every call was a new call &#8212; no one was able to stay familiar with the problem, and no one every seemed to be working on the issue. I eventually managed to get is escalated to &#8220;tier two&#8221;, who then said he was forwarding it on to their networking team, but I never heard anything from them ever again.</p>
<p>The only resolution came, <b>a week later</b> when I finally got a tier 1 tech to dispatch someone to try replacing the Netgear modem with an SMC modem similar to the one we originally had. This was scheduled for Thursday (6/13) between 10-12, unfortunately no one ever showed up. I got a phone call at 5PM from a dispatch tech saying he &#8220;had the wrong modem, could we reschedule?&#8221; So, Friday comes, and finally, around noon, he shows up with the modem and replaces it. After the usual phone-call song-and-dance he gets a tech that can push the config, and we&#8217;re back up and runing. Problem solved &#8212; no more timeouts. I don&#8217;t know if it&#8217;s a configuration issue, or if it&#8217;s an issue with Netgear, or what.</p>
<p>I do know that Comcast surely doesn&#8217;t know either &#8212; but what&#8217;s worse, is they don&#8217;t care. Our entire company was forced to work at home for a grand total of <b>7 business days</b> due to these issues. To this date, no one has ever followed up on the original ticket(s) we filed about either issue to ask if it was resolved. I&#8217;m afraid to call, because as often as Comcast tech support fixes something, they break something else.</p>
<p>The important thing to realize about this story is that it&#8217;s not unique. It&#8217;s not a one-off experience. We&#8217;ve faced these difficulties every step of the way with Comcast, in multiple locations. They advertise their &#8220;business cable&#8221; as a business-grade Internet connection. It&#8217;s not. You get more bandwidth, but that&#8217;s it. No SLAs. No accountability. No customer service. Nothing.</p>
<p>Further, what I&#8217;ve learned about Comcast is that they are truly too big for their own good. They have so many different departments that even their employees don&#8217;t seem to understand it all. Dispatched techs often make 2-3 phone calls before they even get the right person. Tech support never knows whether or not someone is actually being dispatched. If you&#8217;ve ever heard the expression <i>&#8220;the left hand isn&#8217;t talking to the right&#8221;</i>, that perfectly describes Comcast, except Comcast is a multi-armed Shiva, and none of the hands are talking to eachother. At one point, a tier-1 tech actually transferred me to Gateway. No joke. I wish I could make this up. He said that &#8220;he thinks the problem is with our internet gateway, so he needs to transfer me to Gateway @home support&#8221; (or something like that). Next thing you know, I was on hold with Gateway computers. Naturally, I had to hang up and try again.</p>
<p>I know that after I post this, I&#8217;m sure I&#8217;ll get the standard &#8220;well, we have Comcast and it works fine!&#8221; comments. That&#8217;s great. I&#8217;m not saying there&#8217;s anything wrong with cable technology. It&#8217;s wonderful. The problem is with Comcast&#8217;s business practices and size. If you have no problems, generally, you&#8217;re good to go. But good luck if you ever have any problems. We&#8217;re moving to a new building this fall, and I can assure you, I won&#8217;t even remotely consider Comcast as an option. The ramifications of this is that our ISP cost will easily double or triple. Painful, right? Not really. Not when you factor in the cost of the downtime we&#8217;ve suffered at the hands of Comcast. It&#8217;s not a business-grade ISP. Period. It&#8217;s a no-brainer for us.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/06/28/comcast-is-not-a-business-isp/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Google and Greylisting</title>
		<link>http://blog.centresource.com/2007/06/13/google-and-greylisting/</link>
		<comments>http://blog.centresource.com/2007/06/13/google-and-greylisting/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 15:54:25 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/06/13/google-and-greylisting/</guid>
		<description><![CDATA[We&#8217;d have a recent spat of complaints from our Swirbo customers regarding their inability to receive mail from certain Google...]]></description>
			<content:encoded><![CDATA[<p>We&#8217;d have a recent spat of complaints from our <a  href="http://www.swirbo.com/">Swirbo</a> customers regarding their inability to receive mail from certain <a  href="http://www.google.com/">Google</a> apps &#8212; i.e. if you invite someone to view a blog, or docs.google.com document. Today I got an example of the actual error they are getting:</p>
<blockquote><p>
Technical details of permanent failure:<br />
TEMP_FAILURE: SMTP Error (state 13): 450 <user @domain.com>: Recipient<br />
address rejected: Greylisted for 5 minutes<br />
</user></p></blockquote>
<p>Anyone see a problem? The error we returned was 450, yet Google seems to think it was a permanent failure. Here&#8217;s a bit from the SMTP RFC (2821):</p>
<blockquote><p>
   4yz   Transient Negative Completion reply<br />
      The command was not accepted, and the requested action did not<br />
      occur.  However, the error condition is temporary and the action<br />
      may be requested again.  The sender should return to the beginning<br />
      of the command sequence (if any).  It is difficult to assign a<br />
      meaning to &#8220;transient&#8221; when two different sites (receiver- and<br />
sender-SMTP agents) must agree on the interpretation.  Each reply<br />
      in this category might have a different time value, but the SMTP<br />
      client is encouraged to try again.  A rule of thumb to determine<br />
      whether a reply fits into the 4yz or the 5yz category (see below)<br />
      is that replies are 4yz if they can be successful if repeated<br />
      without any change in command form or in properties of the sender<br />
      or receiver (that is, the command is repeated identically and the<br />
      receiver does not put up a new implementation.)
</p></blockquote>
<p>SMTP 4xx errors are temporary and typically represent transient errors. An SMTP client, upon receiving an error like this, <b>should</b> (i.e. is encouraged to) try again. Greylisting is a spam-filtering technique that takes advantage of this fact by issuing temporary rejections to new clients, in effect filtering out mail sent by software not smart enough to retry (as any proper mailserver would). Google should be queueing and retrying these messages. Anyone else running into this?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/06/13/google-and-greylisting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 2.0</title>
		<link>http://blog.centresource.com/2006/10/24/firefox-20/</link>
		<comments>http://blog.centresource.com/2006/10/24/firefox-20/#comments</comments>
		<pubDate>Tue, 24 Oct 2006 19:01:32 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[firefox-2.0]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/10/24/firefox-20/</guid>
		<description><![CDATA[I just read a quick review of Firefox 2.0. I am not terribly impressed &#8212; with Firefox itself, or the...]]></description>
			<content:encoded><![CDATA[<p>I just read a <a  href="http://www.readwriteweb.com/archives/firefox_20_review.php">quick review</a> of Firefox 2.0. I am not terribly impressed &#8212; with Firefox itself, or the review for that matter:</p>
<blockquote><p>
The first thing that stands out in the new Firefox is the more modern, snappier look and feel. Everything is more shinny, more playful and more clickable.
</p></blockquote>
<p>Can anyone tell me what this means? This is followed by:</p>
<blockquote><p>
Tabbed browsing was a major browser innovation that Firefox popularized
</p></blockquote>
<p>No. Opera popularized tabs. But that&#8217;s a forgiveable mistake. It looks like Firefox 2.0 will of course be a decent browser and a vastly superior choice to even IE 7, but it doesn&#8217;t look substantially different from Firefox 1.5. This appears to be a &#8220;hey let&#8217;s make this a major number release for some reason&#8221; release &#8212; i.e. marketing.</p>
<p>I&#8217;ll continue to stick with Opera.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/10/24/firefox-20/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ACS SEO</title>
		<link>http://blog.centresource.com/2006/08/30/acs-seo/</link>
		<comments>http://blog.centresource.com/2006/08/30/acs-seo/#comments</comments>
		<pubDate>Wed, 30 Aug 2006 21:51:03 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[acsseo]]></category>
		<category><![CDATA[Advantage-Consulting-Services]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/08/30/acs-seo/</guid>
		<description><![CDATA[Early this year, we posted the story of a spammer that left a comment spam on our site &#8212; circumventing...]]></description>
			<content:encoded><![CDATA[<p>Early this year, we <a  href="http://blog.centresource.com/2006/01/27/advantage-consulting-services-spammers/">posted the story</a> of a spammer that left a comment spam on our site &#8212; circumventing the spam protection (<a  href="http://chris.quietlife.net/wordverify">Wordverify</a>) manually.</p>
<p>This week, their <a  href="http://www.cameronolthuis.com/">director of marketing</a> contacted me asking to try to clear up the situation and convey their side of the story. I told him I wouldn&#8217;t amend the original post (barring for any inaccuracy), but that he was welcome to e-mail me an explanation. In the interest of fairness, here it is:</p>
<p><span id="more-498"></span></p>
<blockquote><p>
When you originally called ACS you spoke with an employee, V. Patel. Of<br />
course we prefer that our employees would transfer all phone calls of<br />
these matters to a principal, but that is in the past and what&#8217;s done is<br />
done.</p>
<p>ACS is a company that strives to go above and beyond industry ethics. We<br />
have never endorsed spam of any kind and we never will.</p>
<p>Our side of the story&#8230;.</p>
<p>In this particular case one of our employees was assigned with the task<br />
of link building for a client. The client had recently come to us and<br />
brought with them a checkered past, which included lots of email and<br />
comment spam. I&#8217;m assuming that because of this our employee thought it<br />
would be acceptable for him to continue with these practices. It wasn&#8217;t.<br />
There was really no excuse for him to do this, he knew our ethics and<br />
policies.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/08/30/acs-seo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LiveJournal Jabber</title>
		<link>http://blog.centresource.com/2006/07/08/livejournal-jabber/</link>
		<comments>http://blog.centresource.com/2006/07/08/livejournal-jabber/#comments</comments>
		<pubDate>Sat, 08 Jul 2006 05:09:48 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[instant-messaging]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[XMPP]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/07/08/livejournal-jabber/</guid>
		<description><![CDATA[Are the seemingly never-ending Instant-Messaging wars finally coming to a close?
Jabber/XMPP has gotten another big shot in the arm...]]></description>
			<content:encoded><![CDATA[<p>Are the seemingly never-ending Instant-Messaging wars finally coming to a close?</p>
<p>Jabber/XMPP has gotten another big shot in the arm this week, with the <a  href="http://community.livejournal.com/lj_dev/716451.html">announcement</a> that Livejournal has launched a Jabber server for its users, complete with the friends-list pre-loaded as the Jabber roster. They will be incorporating s2s communication, along with lots of other features.</p>
<p>This comes on the heels of <a  href="http://blog.centresource.com/2006/01/17/google-talk-s2s-open/">Google Talk</a>, which last year launched its XMPP-based Google Talk service, opened it to XMPP s2s on the Internet. They also incorporated an (optional) user-friendly AJAX-based IM client into the gmail web client &#8212; look for Livejournal to do the same, as well as integrating the blogging/comment-notification functions into instant messaging as well.</p>
<p>With two big players like Livejournal and Google backing the open XMPP standard, things are looking more grim than ever for proprietary, closed, and centralized instant messaging services like AOL, Yahoo, et al. Here&#8217;s hoping the trend continues!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/07/08/livejournal-jabber/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Opera 9 Final</title>
		<link>http://blog.centresource.com/2006/06/21/opera-9-final/</link>
		<comments>http://blog.centresource.com/2006/06/21/opera-9-final/#comments</comments>
		<pubDate>Wed, 21 Jun 2006 14:20:59 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[firefox-opera-9.0-web-browser-software]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/06/21/opera-9-final/</guid>
		<description><![CDATA[Opera 9.00 final is out, and they appear to have fixed the cookies bug. And there was much rejoicing.
Now...]]></description>
			<content:encoded><![CDATA[<p>Opera 9.00 final is <a  href="http://www.opera.com/download/">out</a>, and they appear to have fixed the <a  href="http://blog.centresource.com/2006/05/03/opera-9-beta-cookies-bug/">cookies bug</a>. And there was much rejoicing.</p>
<p>Now I don&#8217;t have to switch to <a  href="http://www.mozilla.com/firefox/">Firefox</a> after all.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/06/21/opera-9-final/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Session Lifetime: An Adventure</title>
		<link>http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/</link>
		<comments>http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/#comments</comments>
		<pubDate>Tue, 23 May 2006 05:34:34 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[expire]]></category>
		<category><![CDATA[maxlifetime]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[session.gc_maxlifetime]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/</guid>
		<description><![CDATA[We had a bit of a sticky situation here at the Centresource stomping grounds this past couple of weeks. We...]]></description>
			<content:encoded><![CDATA[<p>We had a bit of a sticky situation here at the Centresource stomping grounds this past couple of weeks. We have a server with a multitude of environments served via our Apache webserver. It&#8217;s a fairly simple setup: we have a virtualhost devoted to development environments for all of our software developers, and then a plethora of virtualhosts for the various web-based applications we use: some home-brewed, some OSS web applications we use for various business functions (CMS, CRM, Groupware, etc..).</p>
<p>The mystery started when sessions started mysteriously expiring prematurely on two of our most popular web applications: <a  href="http://app.dekkotime.com/">DekkoTime</a>, and our internal CRM/groupware application. It started about two weeks ago, with no discernable changes to our configuration that could be responsible.</p>
<p>So to understand what was necessary to track down this problem, we have to explore a little bit about how PHP session data storage and expiration works:</p>
<p><span id="more-484"></span></p>
<p>When PHP creates a session with session_start(), it dumps a file in a particular path. This is governed by the <i>session.save_path</i> parameter in php.ini &#8212; /tmp by default. But naturally, as sessions go idle or are abandoned, they need to be cleaned up, so that our save_path isn&#8217;t overwhelmed with old session data before it has a chanced to be cleaned (usually on reboot, in the case of /tmp). Enter garbage collection.</p>
<p>Garbage collection in PHP is, from what I gather, piggybacked on invocations of the PHP interpreter itself. When (if) it runs, it deletes any session files in the save_path that haven&#8217;t been accessed in a certain amount of time, governed by another php.ini setting: session.gc_maxlifetime. There are other parameters that dictate the probability/frequency with which the garbage collection routine runs, but they are irrelevant to this discussion.</p>
<p>So, naturally, the first thing I checked to see why our sessions were expiring was session.gc_maxlifetime in our php.ini:</p>
<pre>
session.gc_maxlifetime = 72000
</pre>
<p>72000 seconds &#8212; that&#8217;s 20 hours. So, no problem there. It appeared from our experience that sessions were expiring between 45 minutes to an hour &#8212; far less than 20 hours. I roughly verified the time that sessions were disappearing by initiating a new session and doing this:</p>
<pre>
date; while true;
do
if [ ! -f sess_235f09d44d5288554cf7a55fdfbc6df7 ];
then echo "session has disappeared" | mail cwage@centresource.com;
break;
fi;
sleep 1;
done
</pre>
<p>That way, I&#8217;d get mailed when the session disappeared. Pretty sick, I know. This verified that sessions were disappearing after around 45 minutes of idle time. I could not find an explanation for this: session.gc_maxlifetime was set to 72000 in our php.ini. Maybe it was being overridden in that particular php environment? &#8220;print_r(ini_get(&#8221;session.gc_maxlifetime&#8221;))&#8221; bore the same result: 72000. No problem there.</p>
<p>Here I took a slight detour in wondering if there was something else diligently cleaning up an admittedly messy and full /tmp directory (~500 days of uptime will do that). So I started looking for some sort of utility that would let me monitor a file and see what process was responsible for unlinking it (the session file, that is). Sadly, there&#8217;s no utility that can accomplish this with a stock kernel in Linux: <a  href="http://www.fwatch.org/">fwatch</a> appears to accomplish this, but I wasn&#8217;t about to install a kernel module labelled as an alpha release just to track this down. Eventually I convinced myself, anyway, that the likelihood of some rogue process cleaning up /tmp was pretty unlikely, even for Linux.</p>
<p>So, I resorted to just googling my little heart out. Here&#8217;s where things get interesting.</p>
<p>Naturally, any application can override <i>session.gc_maxlifetime</i> to whatever pleases it &#8212; in fact, most OSS PHP applications do just this, in order to enforce its own particular idea of a sensible session expiration time. But here&#8217;s where things get sticky. If you override <i>session.gc_maxlifetime</i> in one particular environment, how does it know which sessions are its own, as opposed to others that should be adhering to the global setting?</p>
<p>Well, apparently, it doesn&#8217;t. When the PHP garbage collection routine runs, as far as I can tell, it blindly removes sessions from <i>session.save_path</i> that haven&#8217;t been accessed in longer than <i>session.gc_maxlifetime</i> &#8212; <b>period</b>. So, as it happens, what changed two weeks ago? We started playing with a number of PHP applications: <a  href="http://www.joomla.org/">Joomla!</a> and <a  href="http://www.zen-cart.com/">Zen-Cart</a>, both of whom (among others), take it upon themselves to override <i>session.gc_maxlifetime</i> to a smaller value, which appears to have been, drumroll please: around 45 minutes. So, every time the PHP interpreter was invoked in this environment, it obliterated sessions for all our other applications if they had been idle for 45 minutes or more. Harsh.</p>
<p>I am not sure what the preferred solution to this is supposed to be, and I&#8217;m also surprised that this isn&#8217;t a more common problem &#8212; overriding <i>session.gc_maxlifetime</i> is a fairly common thing for PHP applications to do these days. I am surprised these unexpected results would go unnoticed. In any event, my solution was just to create a hierarchy of per-application directories inside <i>/tmp/php</i> (owned by www-data, so Apache can write to them), and then adding a line to my Apache virtualhost config for each one, for example:</p>
<pre>
php_admin_value session.save_path /tmp/php4/dekko
</pre>
<p>In this way, the save_path is isolated for each application, so an overridden <i>session.gc_maxlifetime</i> for another codebase won&#8217;t affect it.</p>
<p>Phew.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
	</channel>
</rss>
