<?xml version="1.0" encoding="UTF-8" ?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
    <title><![CDATA[Verbosity.ca/devops]]></title>
    <link>http://verbosity.ca</link>
  <description><![CDATA[Software development journal by Ryan Weal (devops posts)]]></description>
  <lastBuildDate>Mon, 30 Dec 2024 22:51:05 GMT</lastBuildDate>
    <image>
        <url>http://verbosity.ca/favicon.png</url>
        <title><![CDATA[Verbosity.ca/devops]]></title>
        <link>http://verbosity.ca</link>
    </image>
    
        <item>
            <title>Moving beyond just tagging using del.icio.us</title>
      <link>http://verbosity.ca/devops/2007-07-25-moving-beyond-just-tagging</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2007-07-25-moving-beyond-just-tagging</guid>
            <description><![CDATA[<p>How often do you go to a blog and see a swarm of tags down the side of the page which have little or no relevance? Well, if you look at this blog you will see just that. Right now most of the new tags are empty but this is intentional as I rework the blog.  </p>
<p>We run a few blogs out of my office which has led me to have some criticisms of tagging in general. The first lesson that I have taken away is to keep the format your tags consistent. In my del.icio.us bookmarks I use all lower case words for my tagging for consistency, while on the blog I&#39;m trying to reinforce proper capitalization of words to bring it more in line with news media. Many blogs I see have a mixture of both and it appears unprofessional to the casual viewer visiting the blog for the first time.  </p>
<p>Another strategy that I am keen to embrace is to limit the number of tags. I hinted in a previous post but I think more needs to be said. Some bloggers will add new keywords each time they post an article but this quickly gets out of control. One particular entry in a blog I read has only one story about religion but a tag was created so this is visible on every single page. The author may not realize this, but the post challenges the blog&#39;s credibility in other ways when the general topic of the blog has nothing to do with religion. To avoid these mishaps I think the best strategy is to limit yourself to a set number of tags. If something doesn&#39;t fit, cut the article as it will deviate from the defined scope of the blog (or tag it with something more meaningful).  </p>
<p>Since we&#39;re now in the business of defining our tags I think a further step is needed in blog functionality that has been missing for some time. Tags as landing pages. Yes, that&#39;s right, when you click on a tag you should be taken to some kind of customized section. Perhaps a definition of the tag, what it means to you, it&#39;s history and why you use it on the blog. This makes sense when you think about the tags as &quot;categories&quot; of information. Users will rejoice that your tags will become research topics for them and the SEO (search engine optimization) benefits will be great too: no longer would search engines ignore your tags but rather see them as individual pages worthy of indexing. The thought of that sounds enticing.</p>
]]></description>
            <pubDate>Wed, 25 Jul 2007 19:35:02 GMT</pubDate>
        </item>
    

        <item>
            <title>Managing mailing lists with ecartis software</title>
      <link>http://verbosity.ca/devops/2006-07-19-managing-mailing-lists-ecartis-software</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-07-19-managing-mailing-lists-ecartis-software</guid>
            <description><![CDATA[<p>For all of the domains hosted on this server they have one thing in common: they all use <a class="linkthumb" href="http://www.ecartis.org/">ecartis</a> as their mailing list manager.</p>
<p>Why ecartis as opposed to <a class="linkthumb" href="http://www.gnu.org/software/mailman/index.html">mailman</a>? It was a tough choice, but it basically came down to the configuration steps required on Debian. Mailman needed to be recompiled or something like that or I would have had to redesign a bunch of webpages to get it going. Ecartis just works once you know the system.</p>
<h4 id="lets-update-your-mailing-list">Let&#39;s update your mailing list</h4>
<p>You need to interact with ecartis by sending it email. You can be either a manager or a user, it doesn&#39;t matter. Your commands will be different depending on who you want to be.</p>
<h4 id="letting-users-take-care-of-things-themselves">Letting users take care of things themselves:</h4>
<p>To add or remove yourself from a list you must email ecartis with the word &quot;subscribe&quot; or &quot;unsbuscribe&#39; from the account you are using. The email address to send to is often <listname>-request@<website></p>
<h5 style="margin-left: 40px;">
  Subscribing
</h5>

<ul>
<li>  Draft an email to ecartis</li>
<li>  Put &quot;subscribe&quot; in the subject line</li>
<li>  Send the message</li>
</ul>
<h5 style="margin-left: 40px;">
  Unsubscribing
</h5>

<ul>
<li>  Draft an email to ecartis</li>
<li>  Put &quot;unsubscribe&quot; in the subject line</li>
<li>  Send the message</li>
</ul>
<p> </p>
<h4 id="for-administrators">For administrators:</h4>
<p>Your commands will be the following, email them to ecartis. It will take these values and send you a ticket you must approve before the changes are made.</p>
<p> </p>
<pre># always start with admin2 and the
        # list name

        admin2 testlist

        # then manage your old users,
        # changing all their settings around

        setfor user@site.xyz MODERATOR
        setfor user@site.xyz CCERRORS
        setfor user@site.xyz REPORTS
        setfor user@site.xyz ADMIN

        # a command structured as these unset
        # commands will assume the last email
        # from above will be the same here

        unset CCERRORS
        unset REPORTS

        # we can also add people to the list
        # or remove them.  bye joe!

        unsubscribe joe@example.com

        # the rest of the commands for
        # managing users, use them as the
        # commands above are used

        NOPOST 
        DIGEST
        DIGEST2 (digest & the rest)
        VACATION
        ECHOPOST (self copy)
        HIDDEN

        # say goodbye to ecartis!
        adminend2
        
</pre>

<p> </p>
]]></description>
            <pubDate>Wed, 19 Jul 2006 22:55:46 GMT</pubDate>
        </item>
    

        <item>
            <title>Automatic Upgrade</title>
      <link>http://verbosity.ca/devops/2007-04-11-automatic-upgrade</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2007-04-11-automatic-upgrade</guid>
            <description><![CDATA[<p>I had an automatic upgrade on my computer this week. I had troubles with my laptop and fearing the worst (virus) I decided to investigate. Upon running my update I noticed a huge amount of activity so I let the system update.  </p>
<p>Within the evening I had unintentionally upgraded my computer to Debian 4.0, the latest version which until now had escaped my notice. For the Windows and Mac users out there, that&#39;s like a major upgrade (like from XP to Vista but without the scary hardware considerations).  </p>
<p>A few things broke but I was able to fix them all really quickly. Though I had to change some configurations I was well aware of which areas of the system that needed the changes and I&#39;m already working away and enjoying the new stability.  </p>
<p>Another bonus to this new release is that my Wacom tablet finally works on Linux for PowerPC. Previously I had only been able to use it with my Mac desktop (which is <em>extremely</em> slow) or with a Windows computer (which I only use at work). Now I can have my cake and eat it too.  </p>
<p>This laptop is long for this world, the display and the hard disk each routinely fail. I doubt it will survive until the next Debian upgrade. To those who contributed to the release, thank you. Once again your efforts have gone far and beyond my expectations. My next PC will be running an x86 chipset but for now my PowerPC is still going strong. Nice.</p>
]]></description>
            <pubDate>Wed, 11 Apr 2007 19:44:09 GMT</pubDate>
        </item>
    

        <item>
            <title>Always buy two (different) computers for mission critical applications</title>
      <link>http://verbosity.ca/devops/2007-09-04-always-buy-two-different-computers-mission-critical-applications</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2007-09-04-always-buy-two-different-computers-mission-critical-applications</guid>
            <description><![CDATA[<p>The mantra &quot;always have a backup&quot; is a good phrase to live by. This past Friday my computer parts arrived and what followed was a hunt to find all the proper drivers. After a day I was back in order and everything was blazing fast. In the planning stages of this project I recognized that I would be buying something other than commodity hardware: I wanted a quiet energy-saving version of a computer that could fit on my bookshelf. So I bought two.  </p>
<p>Justification for buying two computers is easy in my world. I&#39;m always telling people about some fun things you can do with servers but it&#39;s hard to demonstrate when all your important files are just sitting there waiting to be corrupted by a demonstration. A second computer would be great for experimentation with new software and if I get bored with it I can always find a home for it, after all, it&#39;s so little. Even as a simple music player it would serve a very fitting purpose.  </p>
<p>So when the crashes started I was a little taken aback. I had plans for this system and suddenly I wasn&#39;t so sure. Memories of computing past came back to haunt me. That time I bought a multimedia kit for my 486 computer which never worked at all, the second one I quickly killed by crossing some wires, and so on. It happened more recently with my Blackberry which promises &quot;instant mail&quot; but takes up to 15 minutes to arrive (if you&#39;re lucky and the servers aren&#39;t overwhelmed like usual). Promises not delivered for one reason or another and unfortunately all to common in the technology arena.  </p>
<p>Once again my high hopes were quickly shot down.  </p>
<p>Then I thought about the purpose of this adventure. It&#39;s to help me get my business off the ground. By September I was hoping to be in the late planning stages. So far, still on target. This computer is a serious threat to my productivity though. With this in mind I looked across the room and suddenly that spare computer I bought never looked so sexy.  </p>
<p>So this is round two. I&#39;m now up and running on the second computer with my fingers crossed, hoping for the sake of my timelines that this one will do the trick. Sure, I won&#39;t have that spare tire lying around anymore but isn&#39;t this exactly what a spare tire is for? In this case, it certainly is.</p>
]]></description>
            <pubDate>Tue, 04 Sep 2007 18:59:13 GMT</pubDate>
        </item>
    

        <item>
            <title>The newsletter writer's guide to project management</title>
      <link>http://verbosity.ca/devops/2006-06-27-newsletter-writers-guide-project-management</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-06-27-newsletter-writers-guide-project-management</guid>
            <description><![CDATA[<p>The newsletter is a lost art. Long before the rise of blogging and networking sites the newsletter was one of the only ways to organize socially on the internet. The ease of use compared to any &quot;web 2.0&quot; technology is unparalleled. &quot;Here&#39;s the email address, it goes to everybody.&quot; Do you really need to say more than that?</p>
<p>Key to the success of any list is a general understanding of how and when your audience uses computers. For those of us who work day jobs this is relatively simple. Catch us during working hours, Monday through Friday, and you&#39;ve got our attention.</p>
<p><strong>When to send</strong></p>
<ul>
<li>  Monday morning review. This is the best time to have a great impact with your readership</li>
<li>  Tuesday individuals. Contact people individually to get the buzz going</li>
<li>  Wednesday business. Get whatever it is you need to complete done today Why not?</li>
<li>  Thursday event. This is a very reliable day to host any event, it beats NBC sitcoms</li>
<li>  Friday wrap up. The thank-you letters must go out now, or they won&#39;t go out at all</li>
</ul>
<p><strong>Distribution methods</strong></p>
<ul>
<li>  Mailing list. This will make managing the list simple. Web forms are ok too.</li>
<li>  Blog. The common man&#39;z way of learnin stuff.</li>
</ul>
]]></description>
            <pubDate>Tue, 27 Jun 2006 15:10:10 GMT</pubDate>
        </item>
    

        <item>
            <title>New hardware coming soon</title>
      <link>http://verbosity.ca/devops/2007-06-26-new-hardware-coming-soon</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2007-06-26-new-hardware-coming-soon</guid>
            <description><![CDATA[<p>Well after many deliberations I think I have finally decided on my new computer. I&#39;m going to buy a mini-itx case on eBay and a small motherboard to match it. The unit will have a riser card so I can plug in an alternate sound card, tuner card, or network card should the need arise.  </p>
<p>This computer will replace my server which I built in 2004 out of spare parts from around Vancouver. Back then I just needed something that I could churn out resumes with while my laptop was in repair. It&#39;s still going strong and now manages my entire media collection and all of my communication related archives.  </p>
<p>The new unit will sit on the book shelf as opposed to on the floor and should be much quieter than it&#39;s predecessor. I will also be purchasing an LCD display so I can retire my laptop.</p>
]]></description>
            <pubDate>Tue, 26 Jun 2007 19:37:22 GMT</pubDate>
        </item>
    

        <item>
            <title>Posting with Blackberry</title>
      <link>http://verbosity.ca/devops/2006-11-02-posting-blackberry</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-11-02-posting-blackberry</guid>
            <description><![CDATA[<p>Hey folks, I finally took the plunge and purchased a Blackberry when I was in Montreal. My contact list migrated over nicely and I crafted a whitelist system so only those people I have emailed or referenced in past conversations make it to my mobile (so no spam while I&#39;m out and about).  </p>
<p>The other neat feature is this post, which was originally an email from my wireless device. What fun!</p>
]]></description>
            <pubDate>Thu, 02 Nov 2006 03:29:08 GMT</pubDate>
        </item>
    

        <item>
            <title>Use more than two DNS servers</title>
      <link>http://verbosity.ca/devops/2017-07-27-use-more-than-two-dns-servers</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2017-07-27-use-more-than-two-dns-servers</guid>
            <description><![CDATA[<p>Toward the end of 2016 I was visiting California for BadCamp and hosting a day-long training during which
&quot;Internet of Things&quot; (IoT) devices were wreaking havock on the Internet by DDOS&#39;ing DNS servers.
It caused an outage for major sites that covered much of North America.</p>
<p>I was slightly smug that day as the night before I had emailed the trainees and encouraged them
to download the materials in advance, and most had done so! Those who did not were able to use
Pantheon&#39;s hosted environment as their DNS provider seemed to be unaffected where we were.</p>
<p>We carried on. The training went smoothly.</p>
<p>Throughout the day I kept thinking to myself... <em>I run a DNS</em>. I should probably do a full review
of the aftermath of this incident. So I did...</p>
<h3 id="what-should-we-be-doing-for-dns">What <em>should</em> we be doing for DNS</h3>
<p>Later on in reading about the aftermath I read a comment about DNS servers.
Most people have their websites hosted by <em>two</em> DNS servers. I did the
same... no problems here, right?</p>
<p>However, there were problems... I noticed them first when travelling to South
America a couple years prior. The first request to my website on any network
seemed to timeout, and on second try the DNS would resolve. At the time my
servers were in Canada. So I moved them to New York. Problem solved. Or so I
thought...</p>
<p>A couple years later I was in India. Guess what happened? More or less the
same thing as in South America, but it was possible on some networks to get a
reply on first hit. Whenever I got a request it was slow to arrive.</p>
<p>Back to 2016 in California I was surprised to learn that a lot of people &quot;in
the know&quot; on these matters recommend you have at least THREE (3)
authoratiative name servers for your domains!</p>
<p>There was also a suggestion by some commentators during that huge DNS outage
in 2016 that having diversity <em>within</em> those three servers would be a good
idea as well. Both geographic and also TLD-diversity.</p>
<p>Knowing all of this, I knew I could be doing better on DNS. I created a
modest goal: improve the reachability of the site; to increase resiliance to
network failures.</p>
<h3 id="time-for-some-tests">Time for some tests</h3>
<p>Simply testing connection speeds from where I live in Montréal to New York
wasn&#39;t going to do the trick. Ping times are typically really fast. What I
needed was a way to measure global latency. There are a few providers out
there but I settled on <a href="http://maplatency.com/">Maplatency.com</a> as it seemed to do what I needed and
the DNS tests were free.</p>
<img src="data:image/png;base64,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" width="580" height="326" alt="beginning graph" />


<p>The tests confirmed my experiences travelling internationally. For people close to North America thigns are good, but
once you start crossing oceans - and multiple oceans - the picture changes quite a lot.</p>
<h3 id="improvement-1-a-third-dns-server">Improvement 1: a third DNS server</h3>
<p>The next step was to add a third DNS server. My existing servers were in NYC and San Francisco so I added
one to Europe (Frankfurt) as that is my next most visited place in real life.</p>
<img src="data:image/png;base64,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" width="580" height="326" alt="now with 3 dns servers" />

<p>Huge improvement already. Wow. 62 users are getting the response within 50ms (up from 53 users before), and now we have 88 people getting a response (up from 71 before).</p>
<p>Note that I&#39;m not doing anything fancy here - no load balancing, no geo IP targeting, just simply adding an
IP address to the pool and letting the magic of the Internet work the way it was designed.</p>
<h3 id="improvement-2-a-fourth-dns-server-on-a-different-tld">Improvement 2: a fourth DNS server, on a different TLD</h3>
<p>Following the advice of commentators I thought I would setup a new domain (on the &quot;.global&quot; tld in this case)
to &quot;diversify&quot; my DNS in case the top-level domain that I normally use goes down. Simple enough to do... but
I forgot about how to add a custom DNS server to my registrar to &quot;authorize&quot; a DNS running on that domain.
Minor detail, but I have been running DNS for so long I had forgotten about it.</p>
<p>Once I figured that out we were in business. I used <a href="https://mxtoolbox.com/">MXtoolbox</a> to check the results and made changes until
everything synced up nicely.</p>
<p>Time for more tests:</p>
<img src="data:image/png;base64,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" width="580" height="326" alt="even more users getting replies" />

<p>Wow! That is an amazing improvement. Now roughly the same 62 people are getting the request within 50ms, but there are so many more users now, 99 people are getting replies (the progression was 71-&gt;88-&gt;99).</p>
<p>I compared this result to one of my Cloudflare-powered sites and although Cloudflare preforms <em>slightly better</em> at this task the chart is looking very much the same. Not bad for a first attempt!</p>
<p>Huge win for very little effort. I won&#39;t have any timeouts on the first request when I travel anymore.</p>
<p>If you&#39;re still not willing to host your own DNS, use a service like Cloudflare or Fastly to speed things up. They will likely make you publish only 2 nameservers but they have other magic to achieve similar results.</p>
<p>When you&#39;re ready to go to the next level I recommend reading <a href="http://blog.serverfault.com/2017/01/09/surviving-the-next-dns-attack/">&quot;Surviving the next DNS attack&quot;</a> to get more insight into tuning DNS.</p>
]]></description>
            <pubDate>Thu, 27 Jul 2017 14:30:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Thinking of Websites as a Series of Apps</title>
      <link>http://verbosity.ca/devops/2020-07-09-thinking-of-websites-as-a-series-of-apps</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2020-07-09-thinking-of-websites-as-a-series-of-apps</guid>
            <description><![CDATA[<p>Are you responsible for managing a website? If you are you probably know that
what seems like every few years it is time to &quot;refresh&quot; the site and often that
means reviewing everything that is there and trying to update or re-implement
things in the site.</p>
<p>Quite often the project becomes overwhelming as you realize all of the features
that have been added to the site over the years. A lot of things happen when a
site is in &quot;maintenance mode&quot; and what seems like a small project can quickly
become large when this is factored in.</p>
<p>A common question we were asked in the 2010s was &quot;can&#39;t we just go part-way
with this, upgrade one feature, and move onto the next&quot; but in the early 2010s
most CMS software would not allow this approach or would make it quite
difficult. Each few years a new major version would come out and force a bunch
of re-working to occur.</p>
<h2 id="enter-the-microservices-era">Enter the Microservices Era</h2>
<p>In the late 2010s a new trend started: to split up the functions of a website
into &quot;microservices&quot;. This essentially means dividing up the functionality of a
site into logical parts and dealing with them separately - either embedded in
the page or hosted on a different domain.</p>
<p>The main idea is to isolate the development and testing of that &quot;component&quot; so
that it is easier and less risky to make changes.</p>
<p>So what is an &quot;app&quot; exactly in this context?</p>
<p>For a typical brochure site you may have something like this in terms of &quot;apps&quot;
running the site:</p>
<ul>
<li>Contact form</li>
<li>Shopping cart</li>
</ul>
<p>...but the rest of the site is largely static.</p>
<p>A microservices architecture would suggest a collection of apps that are
presented together as one website. Our collection of apps for the above site
would be the following:</p>
<ul>
<li>a CMS application - used for managing content and visual assets</li>
<li>a static front-end application - used to generate static pages for content</li>
<li>the contact form app</li>
<li>the shopping cart app</li>
</ul>
<p>The benefit of rendering a static site is that if any of these other services
goes down the users may not even notice. CMS applications often require
frequent security updates so rendering static files from the CMS acts as an
extra layer of security by not exposing that part of the application to the
public at all.</p>
<p>Another benefit of this strategy is that we could swap out different components
of the site for different solutions, including commercial options. So unlike
getting WooCommerce <em>because</em> you are using Wordpress, you could alternatively
use a service like Snipcart or Shopify or many others.</p>
<h2 id="faster-dev-with-some-additional-complexity">Faster Dev With Some Additional Complexity</h2>
<p>As you embrace microservices you will start to enjoy that each of your little
&quot;apps&quot; is now self-contained and much smaller than the original beast of a
project you were dealing with before. It is all rainbows from here on out,
right? Well, not really. As is usual with programming tasks you are really just
choosing to have a different problem to solve.</p>
<p>In this case the new problem to solve is how to make sure everything is always
running together and running well. </p>
<p>Testing that the website is &quot;up&quot; is a great starting point. That might only
test your static files though, so it is also important to note if our shopping
cart widget loaded. What happens if it fails to load? Do the users see the
contact form? Is everything available and functional?</p>
<p>All of the individual apps need to have their own tests to ensure they do what
they are supposed to do. An additional layer of integration tests is necessary
to ensure that the different apps are working <em>together</em> in the way you want
them to.</p>
<h2 id="keeping-good-records">Keeping Good Records</h2>
<p>Once you have all of your tests in place things are going to start feeling
really good and you&#39;re going to be able to iterate quickly on new challenges
and deploy faster due to less scope of testing when you have made a change.
That&#39;s great! With automated tests this gets even better.</p>
<p>What happens when you try to onboard a new team member though?</p>
<p>If you were doing CMS-based development there would be a &quot;typical way&quot; things
are done and that would enable developers to get to work quickly without having
to put much thought into the architecture. If you are developing multiple apps
from scratch things can go awry really fast when a new developer isn&#39;t aware
that part of your app already does something that they are in the process of
re-implementing.</p>
<p>The way around this issue, of course, is to write documentation. Specifically
to write good <em>requirements</em> even if it means documenting the software after it
is written. It should be factual and to-the-point so other developers can rely
on it to answer questions without involving the project architect for each
change.</p>
<p>Some projects may opt to keep the documentation as part of the code repository,
while others may want to keep it internal to their team on some form of wiki.
Either way, getting a high-level overview of your project &quot;in writing&quot; will
help you work with other developers so they can understand the intention of how
your project is supposed to work.</p>
<p>Another tip on the documentation front: keep a changelog. For some of our
smaller projects we manage the changelog as more of a &quot;monthly report&quot; that
captures requests and bugs. This will help other developers see where project
is being made so they can focus their energy appropriately.</p>
<h2 id="potential-for-cost-reductions">Potential for Cost Reductions</h2>
<p>One final word about microservices... as you embrace microservices your hosting
costs will likely start trending downward, perhaps all the way to zero.</p>
<p>Going back to our list of services our site offers:</p>
<ul>
<li>the CMS (no longer serving data to the public - therefore could use &quot;free&quot; tier of some hosts)</li>
<li>the front-end static rendering process - could be generated by a continuous deployment pipeline, some of these services offer a free tier as well, and deploy the files to a free static host like GitHub pages or others</li>
<li>the contact form could use a hosted service (formspree.io, etc)</li>
<li>the shopping cart could use a hosted service (snipcart, shopify, etc)</li>
</ul>
<p>For those last two you might choose to pay for a service. Or perhaps you will
set it up in a smaller more focused hosting account. Or... perhaps you design
that part of your application to run once and be done, so you could make a
&quot;serverless&quot; script that processes what you need which can cost a lot less than
managing to run a server 24x7 and having to make sure it is always running. The
best part of this is that you get to make the choice of what strategy will be
best and if it isn&#39;t working for you it will be possible to swap out that one
part for another service without disrupting the things that are already working
and which you are happy with.</p>
]]></description>
            <pubDate>Thu, 09 Jul 2020 13:00:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Authenticated Email for Newsletters</title>
      <link>http://verbosity.ca/devops/2008-08-21-authenticated-email-newsletters</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2008-08-21-authenticated-email-newsletters</guid>
            <description><![CDATA[<p>I work with a lot of individuals who run their own businesses and I am often surprised by the variety of email addresses from these clients and service providers. Nearly all of them have their own websites, but yet only some of them actually use their website address as their email provider as well. Back in the early days of the Internet I think this practice was less common. If you had a domain, you used it. It is a good promotion strategy for your website if people can find your product information, right? <strong>So what happened?</strong> You probably won&#39;t be surprised to learn that SPAM was likely the main cause of this mess. People keep getting more and more SPAM so some big companies with interests online decided to try and <a href="http://en.wikipedia.org/wiki/E-mail_authentication">authenticate email</a>. The idea is that you send a message to someone, then the recipient will &quot;look you up&quot; to see if you are who you say you are. If the email is not from you, it gets rejected. That means less spam for everyone because spoof emails get cut out of the picture. This is an improvement on the &quot;as-is&quot; system of processing mail where most everything goes to junk mail unless it comes from someone (or some organization) that you regularly correspond with. That isn&#39;t good if you&#39;re trying to follow up with a contact who has never received an email from you before. Of course, big companies never get along so there are many ways of authenticating users. Here are a few: </p>
<ul>
<li>  <a href="http://www.openspf.org/">Sender Policy Framework</a>, or SPF, which is an open standard</li>
<li>  <a href="http://www.microsoft.com/mscorp/safety/technologies/senderid/default.mspx"> Sender ID</a>, a Microsoft variant that tries to do what SPF does, even going as far as copying the syntax and calling itself &quot;SPF2&quot;(sigh)</li>
<li>  <a href="http://www.dkim.org/">Domain Keys Identified Mail</a>, or DKIM, a variant pushed by Yahoo which requires each message to be modified before it goes out, and lastly:</li>
<li>  <a href="http://www.ferris.com/2008/03/12/dkim-vs-domainkeys-confusion/">DomainKeys</a>, the original Yahoo creation that spawned DKIM</li>
</ul>
<p> Whew. That&#39;s a lot of stuff to configure. If you go through the process though you will get less &quot;false positives&quot; going into your recipients junk mail folder so it is worth the effort. If you are sending out newsletters, these technologies might be a vital step to increase your open rates. </p>
<p><strong>Who is using email authentication?</strong> I know <a href="http://www.mailchimp.com/authentication/">almost all webmail service providers use at least one form of email authentication</a> to verify incoming mail. I know of some offices with off the shelf firewalls that also check this information as it comes in. What is surprising though, is that many email marketing companies, the ones who send things out, such as <a href="http://www.constantcontact.com/index.jsp">Constant Contact</a> and <a href="http://www.cvent.com/">Cvent</a>, do not provide a means of authenticating email. This is probably why they are so cheap compared to providers like <a href="http://www.responsys.com/">Responsys</a> which publish their email authentication records so their client messages get through to all of their subscribers. You can test your configuration by following the <a href="http://www.openspf.org/Tools">verification steps on this page</a> or by sending an email to a test server which is also <a href="http://www.mydigitallife.info/2007/08/08/how-to-check-test-and-validate-spf-record-in-dns-is-correct-and-valid/"> discussed in this article about SPF records</a>. For a server without any of these services you should always get &quot;neutral&quot; as a response for each test. If you have these services configured, you should see &quot;passed&quot; for each method you setup. Currently I have implemented Sender Policy Framework and Sender ID for all of my hosting clients. These two are the most widely deployed and also the most easy to implement. If you could only do one I would recommend Sender Policy Framework as many services should respect those settings as they are similar to Sender ID. If you absolutely must get into Hotmail inboxes I will always recommend both. I am not certain that DKIM &amp; DomainKeys will last due to the complexity of the setup. If they do last awhile longer I will probably add these methods to the server too, but for now I am taking a wait-and-see approach.</p>
]]></description>
            <pubDate>Thu, 21 Aug 2008 16:14:01 GMT</pubDate>
        </item>
    

        <item>
            <title>Falling in love with wikis again</title>
      <link>http://verbosity.ca/devops/2008-06-08-falling-love-wikis-again</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2008-06-08-falling-love-wikis-again</guid>
            <description><![CDATA[<p>From time to time I have taken on technical documentation projects and enjoyed one particular stint where I had to use a Wiki to do so. It has been far too long. Recently I installed a wiki on my server as a makeshift document sharing system.  </p>
<p>The setup was relatively easy, I checked out a few websites, figured out the easiest, most debian of ways to do this. <a href="https://metacpan.org/pod/Kwiki">Kwiki was my answer</a>. I checked the features: minimal. This is software zen. Add what you want, or take nothing more.  </p>
<h2 id="whats-less-is-more">What&#39;s less is more</h2>
<p>Years ago I became really excited by the wiki concept, utilized it to do a few specific work-related tasks and moved on. Using it as a document management system is a creative person&#39;s delight. Whenever you need a page, JoinWords with capital letters and it&#39;s there. You also get a save button, edit button, and rudimentary formatting. What could be simpler than this?  </p>
<p>A large part of the creative process is simply getting information on to paper before you move on to something else. If you can cut down on reformatting documentation over and over again it makes much more sense to use a wiki.  </p>
<p>Consider what happens when you use a Word document to manage this process. You are writing a manual for a machine. Do you start with turning the machine on if most people are not responsible for powering up the engine? How do you decide where this content best fits in the documentation? You really don&#39;t know, it&#39;s a small bit of information that is basically filler text with a logical flow of events.  </p>
<p>That content goes in a place that is relative to the document structure. In a product like Microsoft Word, or <a href="http://www.openoffice.org">OpenOffice</a> you have to configure placeholders for titles and this and that, copy things here and there, update the table of contents, perhaps split the entire document into two at some point. Copy additional data, rebuild menus, rebuild the other things, rebuild rebuild rebuild. Also consider that Word is not a particularly fun product to use these days if the formatting gets messed up.  </p>
<p>The Kwiki has very simple rules for formatting. If you need to branch off somewhere for technical users or people in a hurry you can instantly hyperlink out of a document without overwhelming people with technical details they may not need to know. Often I find as I browse through that sub-headings are often not necessary as you are better off rearranging the content than getting that deep with the information. For people developing a company website for the first time a wiki would be an interesting way to go.  </p>
<p>Do you want a wiki? I can set you up with one if you like. If you do go with another host keep in mind what country it is hosted in because your content will be subject to those laws.</p>
]]></description>
            <pubDate>Sun, 08 Jun 2008 18:25:34 GMT</pubDate>
        </item>
    

        <item>
            <title>Radio station prototype on Debian</title>
      <link>http://verbosity.ca/devops/2006-07-23-radio-station-prototype-debian</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-07-23-radio-station-prototype-debian</guid>
            <description><![CDATA[<p>Dreaming in Linux. Just prior to making the switch from the Macintosh to Linux as my primary operating system you could find me in the <a class="linkthumb" href="http://www.sfu.ca/sonic-studio/">Sonic Research Studio</a> editing tapes and doing other fun stuff with audio. This had been going on for a couple years during my time spent in the <a class="linkthumb" href="http://www.sfu.ca/communication">Communication School</a> at <a class="linkthumb" href="http://www.sfu.ca/">SFU</a>.</p>
<p>After spending countless hours copying files back and forth from disks to tapes and back again I started to think there could be a better way of doing all of this. Networking has advanced a lot since sound research has been going on, but distribution has been lacking. I&#39;m sure something could be said about the <a class="linkthumb" href="http://www.eff.org/IP/P2P/howto-notgetsued.php">RIAA and it&#39;s tactics</a> but let&#39;s leave that one alone for now.</p>
<h4 id="differing-approaches-to-online-media-distribution">Differing approaches to online media distribution</h4>
<p>Currently sound is delivered to users through a number of methods. One methodology is through file transfer, where users connect either by http, ftp, or p2p networks to exchange files with one another. Instant messaging works similarly by acting as a p2p framework where users can send files right off the desktop without having to &quot;repackage&quot; the media into different forms. Since it is just a copy little new creative work is put into the transfer.</p>
<p>The other emerging framework is that of push technology, the technology buzzword of yesteryear. In this camp you have two common offerings: streaming media and podcast-style downloadable shows. Both of these share a common thread in that they require some kind of &quot;programming&quot; (not in the technical sense) to go on prior to the music being put into production. This usually involves some kind of radio announcer and/or DJ to coordinate the pieces that make up the &quot;show&quot;. These technologies cross the line into <em>composition</em> where much more creativity is possible.</p>
<h4 id="configuration-steps-required-to-get-running">Configuration steps required to get running</h4>
<p>Having a personal webserver at my disposal I decided to make an attempt at constructing my very own Internet radio station. Over the course of an evening I was able to setup a prototype site, streaming some media over my home network to my Linux laptop without ever copying a single file. The most important thing I learned was the division of responsibility for the programs that run the station. You need to run something like a web server, which is fed the streams by a streaming server (there are a few out there), and finally you need some kind of playlist-generating script to load up the content.</p>
<p>After the initial configuration was setup I had a chance to review my work. The low bitrates were a little disappointing at first, and the sound quality cannot compare to an original file since the compression takes a lot of the fun away. What really excited me about this setup is that with <a class="linkthumb" href="http://star.arm.ac.uk/%7Espm/software/liveice.html">LiveIce</a> I was able to perform some light mixing tasks as the files are being encoded. The two-channel mixer has speed, volume and source file commands that will excite any novice that is new to mixing. When I&#39;m done playing with this program I will likely switch to &quot;shout&quot;, a streaming program that I hear may have some additional options for playlist controls.</p>
<p><em>Looking for more information on how to setup your own server? Be sure to <a class="linkthumb" href="http://www.tldp.org/HOWTO/MP3-HOWTO-11.html">check out the MP3 Howto</a> for a general overview of the configuration steps.</em></p>
]]></description>
            <pubDate>Sun, 23 Jul 2006 17:46:53 GMT</pubDate>
        </item>
    

        <item>
            <title>Internet remote control</title>
      <link>http://verbosity.ca/devops/2006-11-18-internet-remote-control</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-11-18-internet-remote-control</guid>
            <description><![CDATA[<p>Today I spent just 25 minutes coming up with the idea of changing my music with my blackberry as a remote control. Knowing nothing about programming for the device I turned to my server farm to write a script.  </p>
<p>The server accepts the message with the request, uses some &quot;closest match&quot; logic to know what you&#39;re talking about and then plays the music. In my 3 years using Linux I don&#39;t think I developed anything so cool (imho) so fast.</p>
]]></description>
            <pubDate>Sat, 18 Nov 2006 03:00:00 GMT</pubDate>
        </item>
    

        <item>
            <title>After years of Photoshop, the Gimp is rocking my world</title>
      <link>http://verbosity.ca/devops/2006-11-04-after-years-photoshop-gimp-rocking-my-world</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-11-04-after-years-photoshop-gimp-rocking-my-world</guid>
            <description><![CDATA[<p>Years of Photoshop skills wasted. Or perhaps just a precursor to the destination I have found with the <a href="http://www.gimp.org/">Gimp</a>. The interface is different but the workflow is nice. In Photoshop I was an intermediate user with the Gimp I finding that I&#39;m becoming an expert faster. Maybe I&#39;m just too excited.</p>
<p> </p>
<p>As a novice user my favorite feature was the detaching menus, so you can leave the filters menu and others on the screen for convenient clicking. This is great for new users who just need to get things done. Another love is the right mouse button menu. It lists all of the menu options from the top of the screen. Much quicker if you have been working in a tiny area of the screen for some time as artists often do.</p>
<p> </p>
<p>The downfall with the Gimp is the text rendering. It doesn&#39;t seem to support letter spacing at all, the only movement allowed is line spacing. Scribus does a better job of doing this for print layouts but for web work I almost want to stay in the Gimp as much as possible. Designing website comps outside of a graphics suite would shock and amaze the people in my office. We only get Photoshop files. This file dependency also causes a problem as the newer versions of Photoshop don&#39;t layer right. Always get a Tiff to verify you&#39;re looking at the same thing as your clients.</p>
<p> </p>
<p>Most people don&#39;t use Photoshop that much but they still need some basic graphics editing. If this sounds like you the Gimp will do your task. For the super math kids in the crowd, you probably already know how fun this software suite is. Have fun everybody.</p>
]]></description>
            <pubDate>Sat, 04 Nov 2006 13:00:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Winter technology meanderings - web and email system upgrades</title>
      <link>http://verbosity.ca/devops/2008-01-26-winter-technology-meanderings-web-and-email-system-upgrades</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2008-01-26-winter-technology-meanderings-web-and-email-system-upgrades</guid>
            <description><![CDATA[<p>Today I&#39;m nearing the end of a full week off. It&#39;s been great sleeping in, snowboarding and working on some projects I&#39;ve been putting off for a long time.</p>
<p>As you <a href="http://verbosity.ca/archives/cat_2/index.html">probably already know</a> I have a web server I own that I maintain as a hobby. Recently a few friends who have accounts on the server started requesting new features and I figured it was probably time to bit the bullet and start the upgrades.  </p>
<p>So in the past few weeks I did a lot of research and performed the following upgrades: </p>
<ul>
<li>  Migrated 12 live websites to a newer web server</li>
<li>  Rolled out a secure webmail platform</li>
<li>  Deployed an IMAP server to synchronize mail and read/replied status across devices</li>
<li>  Added or improved secure mechanisms for hosting content and backing up file</li>
</ul>
<p>Upon doing this I discovered another great thing I have recently accomplished: </p>
<ul>
<li>  I am no longer dependent on the &quot;Blackberry Internet Service&quot; provided by Rogers in partnership with RIM. This service is horribly slow for personal email accounts and is better served by running an IMAP client like <a href="http://www.logicprobe.org/proj/logicmail">LogicMail</a>, or to use another device altogether. Periodic or &quot;on demand&quot; message checking works better than the &quot;push&quot; message service on the Blackberry which really only checks your messages every 15 minutes.</li>
</ul>
<p>Good luck planning lunch with that kind of delay.  </p>
<p>I would highly recommend that small businesses skip the fanfare around the Blackberry and get themselves access to an IMAP server, it&#39;s much more accommodating than I had expected. Synchronization is a great tool to have at your disposal. Doing the same tasks over and over again is definitely not in most creative people&#39;s interest so I&#39;m happy to be settling into the new configuration.  </p>
<p><em>Oh yeah, and for those of you on the RSS feed, yes it&#39;s been awhile. Now you know why! Stay tuned for more fun in the comng weeks.</em></p>
]]></description>
            <pubDate>Sat, 26 Jan 2008 17:37:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Want to be a Linux admin?  Start here.</title>
      <link>http://verbosity.ca/devops/2009-08-08-want-be-linux-admin-start-here</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2009-08-08-want-be-linux-admin-start-here</guid>
            <description><![CDATA[<p>This collection of links originally appeared on my <a href="http://weal.ca/consulting">consulting website</a>.  If you are a developer new to using Linux or Unix systems these guides will probably come in handy at some point.  Enjoy.</p>
<ul>
<li>  <a href="http://linuxcommand.org/learning_the_shell.php">Learning the shell</a> - everything you need to know to get up and running with Linux as a power user or administrator</li>
<li>  <a href="http://www.howtoforge.com/useful_linux_commands">Useful commands for the command line</a> - how to get around the system</li>
<li>  <a href="http://tldp.org/LDP/abs/html/">Advanced Bash Scripting Guide</a> - for those times when you would rather script an activity</li>
<li>  <a href="http://www.fprintf.net/vimCheatSheet.html">VIM editor cheat sheet</a> - Instructions on using the powerful &quot;vim&quot; (vi, iMproved) editor that ships with Unix &amp; Linux (use <em>nano</em> if you do not like vi)</li>
<li>  <a href="http://worldtimzone.com/res/vi.html">Another Vi/Vim overview</a> - The ins &amp; outs of editing text files the advanced way</li>
<li>  <a href="http://www.linuxjournal.com/content/how-be-good-and-lazy-system-administrator">How to be a good and lazy (Linux) system administrator</a> - An entertaining read about approaches to system management</li>
</ul>
]]></description>
            <pubDate>Sat, 08 Aug 2009 20:29:16 GMT</pubDate>
        </item>
    

        <item>
            <title>A Linux weekend</title>
      <link>http://verbosity.ca/devops/2006-09-04-linux-weekend</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-09-04-linux-weekend</guid>
            <description><![CDATA[<p>This Labour Day weekend I took some much needed time to organize my life and made a lot of changes to the server configurations. After about a day and a half at the console I was able to accomplish the following tasks:</p>
<ul>
<li>  Migrate my iBook and media server to Linux 2.6.8 kernel</li>
<li>  Install a new sound subsystem, alsa, on iBook</li>
<li>  Configure wacom tablet to work with Linux on PowerPC (still not perfect)</li>
<li>  Update file share configurations for the media server</li>
<li>  Move all the laptops to the router (as opposed to the media server)</li>
<li>  Setup Macintosh OSX to run <em>within</em> Linux, like Windows runs in Parallels</li>
<li>  Configure networking for the virtual Macintosh</li>
<li>  Change firewall configurations on three of the servers</li>
</ul>
<p>Migration of the kernel spurred all this activity. Back in 2004 I had a similar configuration but lost it all due to a hardware failure. With all of the advances in the kernel and Debian packages this will finally enable me to do some serious audio routing on Linux.</p>
<p>None of this would be possible using the &quot;bleeding edge&quot; technology that many Linux fans love. I stick with a &quot;stable&quot; version of Debian because by the time I get around to doing these tasks most situations (even on a freaky iBook configuration) have been well documented.</p>
]]></description>
            <pubDate>Mon, 04 Sep 2006 04:36:37 GMT</pubDate>
        </item>
    

        <item>
            <title>Typing in Chinese on Debian</title>
      <link>http://verbosity.ca/devops/2006-11-06-typing-chinese-debian</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-11-06-typing-chinese-debian</guid>
            <description><![CDATA[<p>Months ago I installed the software necessary to type Chinese in Linux, called SCIM (<a href="http://www.scim-im.org/">Smart Common Input Method</a>), but I could not figure the program out. I am an absolute beginner with the language so finding the characters I wanted was a lot of trouble.  </p>
<p>After visiting <a href="http://en.wikipedia.org/wiki/Montreal">Montréal</a> I have a new found desire to learn more languages so I&#39;m back at the table. Working in the Gimp I started typing. Rather than use full pinyin (romanized words) I started only with the first character. The words suddenly appeared. It makes typing Chinese faster.  </p>
<p>I also ran some tests in Inkscape, the vector graphics program for Linux. I drafted some signs, outlined the fonts, and sent them out to the printer. Nice work. I was surprised it all worked so well. Now I&#39;m going to make some flash cards to send out to my blackberry and desktops.</p>
]]></description>
            <pubDate>Mon, 06 Nov 2006 03:00:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Migration to Debian 5, aka, Lenny</title>
      <link>http://verbosity.ca/devops/2009-03-09-migration-debian-5-aka-lenny</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2009-03-09-migration-debian-5-aka-lenny</guid>
            <description><![CDATA[<p>Todays post is a quick review of the upgrade process to get your existing <a href="http://www.debian.org/News/2009/20090214">Debian system up-to-date with version 5</a>.  For those who are unfamiliar with Linux, Debian is a variation of the free computer operating system that is well suited for server usage.  It also happens to strip out most of the branding you would find in other Linux distributions which is one of the reasons I like it.</p>
<p><strong>The Upgrade Process</strong></p>
<p>Moving up to the new version of Debian was as simple as running the distribution update command:</p>
<blockquote>
<p>apt-get install dist-upgrade</p>
</blockquote>
<p>... except for the fact that my OS partition is now getting quite full.  So eventually it would stop, complain about disk space and ask me to resume later.  Apparently Lenny, the codename for Debian 5, requires more space.  Go figure.</p>
<blockquote>
<p>apt-get clean</p>
</blockquote>
<p>Ok, we&#39;ve dumped all the installer files for these packages that have been installed.  Resume installation.  Everything goes pretty smoothly from here.</p>
<p>At the end I need to run Lilo and I <em>really</em> need a new Kernel (I had been shamefully running an ancient Kernel on this box - over a year old at least).  So I asked the system for a new kernel and got it. </p>
<p>One blip: the video driver.  I have a strange Intel-based motherbord - the IntelD201GLY - which has an integrated SIS graphics card with little/no support anywhere to be found.  I had to <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=482927">compile the drivers myself</a>... (against the new kernel of course) and now having done this process twice I will be more diligent about kernel updates because it really doesn&#39;t take that long to fix.</p>
<p><strong>The User Experience</strong></p>
<p>The difference in performance was profound.  The combination of a new kernel, a more modern browser (Firefox 3 - packaged as Iceweasel 3) and the vast array of other updates have made the first few minutes an amazingly refreshing adventure.  The few hours I spent debugging were well worth the effort.</p>
<p>The icons changed, themes changed, and in some cases syntax changed (which of course means fixing a variety of scripts).  Overall the system feels more integrated, nicer to look at and less invasive.  I can see myself getting very comfortable with this.</p>
<p><strong>The Missing Link</strong></p>
<p>The one change that did catch me really off guard is the <a href="http://help.lockergnome.com/linux/Considerations-xmms-removal-Debian--ftopict476283.html">disappearance of the original Xmms</a>.  I had been using it for years as a secondary player and I apprecaited the support it had for changing output devices on the fly.  No other gui player seems to have that feature implemented as far as I have been able to tell.  Why not just use Xmms2 you ask?  As far as I am concerned Xmms2 is a nightmare.</p>
<p>With Xmms2 it seems the developers wanted to make a server-based player.  Fair enough, but I already use Moosic for this and it does a good job.  I wanted to drag and drop from Nautilus - no more.  Of all the gui interfaces to Xmms2 none of them seem to support drag and drop from external apps.  Further to this, Gxmms2 can&#39;t seem to load the queue with files from within it&#39;s own interface.  Abraca is the same.  Esperanza will load the files into the list but runs the KDE interface - the only app on my desktop that does.</p>
<p>The main issue I have with Xmms2 is the lack of support for changing devices in the gui apps.  I have to run commands to update text files.  Frustrating!  The volume controls do not seem to want to associate with the proper device no matter what I try and no features other than the bare minimum are documented.  What seems to have happened here is that Xmms2 became a radio streaming program and lost sight of why it was created in the first place.  I don&#39;t mean to be harsh - I&#39;m sure I will like all those new features when I get to them... but in the meantime, how do I listen to tunes on my second audio card without a bunch of hassle?  Suggestions?</p>
<p><strong>Last Word</strong></p>
<p>Debian 5 is a nice update to a great OS.  There are small improvements everywhere and it makes my old desktop a lot more fun to use.  Hardware support seems to be gradually improving over time and this is a good thing.  I was thinking about jumping ship to Ubuntu a few months ago but it was worth the wait.  I use Debian on the desktop and the server so the consistency is a huge advantage to me.</p>
]]></description>
            <pubDate>Mon, 09 Mar 2009 15:40:59 GMT</pubDate>
        </item>
    

        <item>
            <title>As Linux grows, Mac market share set to increase?</title>
      <link>http://verbosity.ca/devops/2006-06-19-linux-grows-mac-market-share-set-increase</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-06-19-linux-grows-mac-market-share-set-increase</guid>
            <description><![CDATA[<p>It&#39;s been a long time coming. With all the changes happening at Apple these days it is becoming hard to imagine how bad it really was for the company back in the 1990s. So much has changed since then, OS X has indeed brought the fortunes that Steve Jobs predicted.</p>
<p>The reason OS X has been so successful is based on the culture it has created. When I studied in Computer Science at the beginning of my degree OS X was something new. Perhaps it was my shiny blue iBook that looked like a hello kitty purse or perhaps it was the beta operating system, but either way the general feedback I received was &quot;weak computer&quot; when in the halls of the computing concourse.</p>
<p>Back then OSX was difficult to use and the real savvy Mac users were all in the graphics arena. The Macintosh interface was nowhere near finished and documentation was sparse. Arguably, compared to Linux it still lacks documentation given all the howtos out there. The philosophy is different than Linux or Windows too... in most online guides you will find that there is in fact only one way to do &quot;that&quot; on a Macintosh. For many users this is a sigh of relief. To nerds, this is a burden.</p>
<p>So what changed? Was it the legions of devoted Unix-types that jumped the Microsoft&#39;s ship when Apple unmasked the largest widespread Unix implementation in history? Or, did the disparity of tools available spark a creative chord with those who had given up on the Windows world? Was it just the viruses?</p>
<p><strong>The nerds took over.</strong></p>
<p>Years later I am looking at the current version of the operating system and a little awestruck at what has happened. The Unix underpinnings of the system made thousands of new software titles available at the flip of a switch. The programming environment enabled cross-platform development which supported Apple&#39;s move to Intel. Then they made a boot loader that supports Windows. In short order Apple will likely support running Windows programs within the Mac interface, and this is where things start to get crazy.</p>
<p>Following these moves it is now clear that the Macintosh is positioned to be &quot;everything to everyone&quot; by supporting both Windows and Linux/Unix applications in addition to the easy to use Mac fare everyone loves. Market forecasters are predicting that with some agressive pricing strategy the Mac is slated to take off. Some say that <a href="http://hardware.silicon.com/desktops/0,39024645,39159467,00.htm">changes are happening but we don&#39;t know the direction yet</a> while others are claiming that <a href="http://hardware.silicon.com/desktops/0,39024645,39159467,00.htm">Apple&#39;s sour times are over</a>. Others in the Mac community are <a href="http://macdailynews.com/index.php/weblog/comments/9854/">even a little more excited about the prospects</a>.</p>
]]></description>
            <pubDate>Mon, 19 Jun 2006 15:10:10 GMT</pubDate>
        </item>
    

        <item>
            <title>Finally, a schedule... done a very strange way...</title>
      <link>http://verbosity.ca/devops/2006-07-17-finally-schedule-done-very-strange-way</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-07-17-finally-schedule-done-very-strange-way</guid>
            <description><![CDATA[<p>I am now ready to give up paper. Long ago I gave up on Outlook&#39;s calendaring functionality as my primary time management system. At work it proves useful and it does a lot of good things. As you would expect though, I have a better way.</p>
<p>For a long time that better way was paper. I like to have a 7-day spread in front of me at all times in meetings and at play. During my hour-long commutes to <a href="http://www.sfu.ca/">Simon Fraser</a> this was a flexible way of managing time. Since then my needs have changed only slightly but the nature of my work has changed too.</p>
<p>At the office I have fewer meetings than I had back in my university days. Hard to believe, but it&#39;s true. I was at a lot of meetings when I was studying. The other major shift is that I am now often chained to a desk like most workers. And this means Internet. The same thing goes for home, and at the cafe, so I&#39;m noting this trend: the Internet seems to be everywhere. I bet you noted it too. So why is it that most people with calendars do things the same old way?</p>
<p>Familiarity is one reason. Having the ability to see things as a seven day spread is is vital to the success of any scheduling system I use. Simplicity is another. I prefer paper because there is only ever one way to use it: by writing. For me only the shell compares, so I wrote some scripts that utilize the shell and a software package called <a href="http://packages.debian.org/stable/misc/mhc">mhc</a> to come up with a new way of scheduling.</p>
<p>How does my schedule work? First, I input things into my calendar using a command line tool. It prompts me for the necessary information and then quickly disappears when everything is ready to go. Then, I produce a listing of this week&#39;s entries by using the &quot;today&quot; command. I made one modification to the default behaviour by overriding the reporting of Sunday. I prefer Monday as the start of my week.</p>
<p>The last step in my configuration is to display the information out somewhere I can find it. I have a special program on my computer which I created as a &quot;dashboard&quot; for the shell. It displays random information so I extended it and added some additional sections. Here&#39;s what it looks like, by section:</p>
<ul>
<li>  Time - current to North American time zones, in 24 hour format</li>
<li>  Week - the official week of the year, counting up to 52</li>
<li>  Schedule - listing from Monday to Friday ending this story on a good note</li>
<li>  Calendars - the three most relevant months, this one, the last, and the next one</li>
<li>  Fun - stuff that is fun, like the music currently playing</li>
</ul>
<p>Why did I select these items? Primarily because they are related to time. The 24-hour clock makes things easy to work with, and time zones are necessary for my work. The week of the year is a great planning tool for newsletters. The seven day schedule is a requisite but it is sorted to create the maximum level of personal excitement. The rest is all relative to what you think is important. For me this is the current song, making only the very top and bottom of the listing to have frequently updated information.</p>
]]></description>
            <pubDate>Mon, 17 Jul 2006 23:50:25 GMT</pubDate>
        </item>
    

        <item>
            <title>'Week of month' calculation for cron</title>
      <link>http://verbosity.ca/devops/2006-07-10-week-month-calculation-cron</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-07-10-week-month-calculation-cron</guid>
            <description><![CDATA[<p>For those of you who actually keep a regular schedule you will love this one. How often do you find that Unix is so much fun but it just can&#39;t do the simple math to figure out what week of the month it is? Well, with this script you will fix that in short order.</p>
<p>To accomplish this I owe one to Irek Szczesniak, who had created a script to put a calendar onto an image. Irek&#39;s code figured out what the week of the month was in some simple statements so I expanded upon these to produce some creative output.</p>
<p><strong>Use 1: Finding the week of the month</strong></p>
<p>This one is pretty simple, run the command and it will produce the current week of the month, assuming Monday as the first day and that the first &quot;full week&quot; is the one that counts.</p>
<p><code>kappa@verbosity.ca:~$ &lt;b&gt;wom&lt;/b&gt;&lt;br /&gt; 1&lt;br /&gt; &lt;br /&gt; kappa@verbosity.ca:~$</code></p>
<p>Here the script has checked the calendar and determined that the 9th of July in 2006 is the last day of the first full week. Again, rememeber that Monday is the first day of the week you crazy North Americans!</p>
<p><strong>Use 2: Executing commands based on the week of month</strong></p>
<p> </p>
<p>This is what I really wrote the script for. The &quot;wom&quot; script also accepts one parameter which is the &quot;desired week&quot; you are seeking. If you input a value here it will be compared against the current week of the month and set the exit status accordingly.</p>
<p><code>kappa@verbosity.ca:~$ &lt;b&gt;wom 1 &amp;&amp; date&lt;/b&gt;&lt;br /&gt; Sun Jul 9 21:06:42 PDT 2006&lt;br /&gt; &lt;br /&gt; kappa@verbosity.ca:~$ &lt;b&gt;wom 2 &amp;&amp; date&lt;/b&gt;&lt;br /&gt; &lt;br /&gt; kappa@verbosity.ca:~$&lt;br /&gt;</code></p>
<p>So, if you have a command that you want to put into your crontab all you need to do is prefix it with &quot;wom 1 &amp;&amp;&quot; to make sure it only happens on the first week of the month. Enjoy.</p>
<p> </p>
<p> </p>
]]></description>
            <pubDate>Mon, 10 Jul 2006 02:10:23 GMT</pubDate>
        </item>
    

        <item>
            <title>Linux media server rebooted, uptime ramblings will follow...</title>
      <link>http://verbosity.ca/devops/2006-07-03-linux-media-server-rebooted-uptime-ramblings-will-follow</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-07-03-linux-media-server-rebooted-uptime-ramblings-will-follow</guid>
            <description><![CDATA[<p>The root of my network will be restarted today, the server &quot;mcluhan&quot; acts as my main file server for all things media. The network services like web serving and email continue running, as does the desktop in the apartment.</p>
<p>In the computer world we celebrate uptime like some kind of cult. mcluhan has been running 196 days until now. This rivals the uptime that I had when living on 1086 Bute Street when my uptime was also around 200 days. I am always recoiling over the amount of time I spend confiugring computers and this outage is no different. I will have to reopen a few documents I have had open for months, and restart a couple system services. Crazy times. It makes me glad I settled with Linux after brief forays with Macintosh and Windows failed to excite me.</p>
<p>Forthcoming upgrades will provide extended battery backup and some network redundancy in another city. That will allow this system to serve out busy sites and develop out some creative email services. Look for within about a year&#39;s time. You know I only restart once or twice a year.</p>
]]></description>
            <pubDate>Mon, 03 Jul 2006 15:10:10 GMT</pubDate>
        </item>
    

        <item>
            <title>On changing Linux server configurations...</title>
      <link>http://verbosity.ca/devops/2006-07-03-changing-linux-server-configurations</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-07-03-changing-linux-server-configurations</guid>
            <description><![CDATA[<p>Today&#39;s reboot was a success. The TV tuner card is now firmly embedded in my network. Thus far not a single frame of video has appeared. I&#39;m saving the configuration for another day. Reason being: I need to recompile the modules (drivers) for it. That sounds really scary but it&#39;s just a matter of knowing the special incantation to make it work. This will require some browsing of my notes from the ol&#39; kernel compiling days.</p>
<p>Once I&#39;ve run the commands to compile the modules I will just need to load them into the system and the card should become active. At least that&#39;s my expectation. Rebooting should not be required unless a core-level kernel change is required. If that&#39;s the case I will likely take the opportunity to get a new kernel to run the drivers. Should everything go according to plan the next step will be adopting the ALSA subsystem for my environmental audio.</p>
<p>Music rotation is now being handled by &quot;moosic&quot;, a free program that can slice and dice a playlist any way you like. A few of my script wrappers are getting updated to reflect the changes. This system should allow me to create multiple ongoing streams, like radio stations, and push them out on any device (to multiple sets of speakers) or to the Internet in real time.</p>
<p>UPDATE! The server experienced it&#39;s first crash ever. The user space halted as a result of either overheating or electrical disturbances caused by the tuner card. This card is pretty much junk, so it has been removed from the network. Good thing I didn&#39;t invest all day in this. Whew!</p>
]]></description>
            <pubDate>Mon, 03 Jul 2006 14:40:10 GMT</pubDate>
        </item>
    

        <item>
            <title>Microsoft finally changes their message on Linux</title>
      <link>http://verbosity.ca/devops/2006-02-06-microsoft-finally-changes-their-message-linux</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2006-02-06-microsoft-finally-changes-their-message-linux</guid>
            <description><![CDATA[<p>In the late 1990s <a href="http://www.pbs.org/newshour/bb/cyberspace/july-dec97/apple_8-6a.html">Microsoft stepped in to help Apple out</a> when the stock price fell through the floor. The effort was enough to let Apple continue operating while they radically changed their direction to embrace Unix as the core of the Macintosh operating system. In return Microsoft provided a really terrible version of Internet Explorer to help people along on the web with their old OS 9 machines. Years later that move paid off, Microsoft abandoned the Apple deal but the software support for the Mac is better than it ever was now that everything is running smoothly on Unix.  </p>
<p>Now <a href="http://news.cnet.com/Microsoft-makes-Linux-pact-with-Novell/2100-1016_3-6132119.html">Microsoft plans to strike a deal with Novell</a>. They distribute a version of Linux, called Suse, which competes with Red Hat in the enterprise desktop and server markets. Up until now Microsoft has been denying Linux any headway by promoting a &quot;Get the facts&quot; campaign that seeks to dispel any studies that find Linux to be more efficient than Windows. So this move is shocking but familiar territory for the software giant.  </p>
<p>Maybe they&#39;ll finally release a stable and secure version of Windows based on Linux. We can only dream.</p>
<p>Here&#39;s that clip from Macworld 1997 in case you missed it -  </p>
<p> </p>
<p> </p>
<p> </p>
]]></description>
            <pubDate>Mon, 06 Feb 2006 14:32:18 GMT</pubDate>
        </item>
    

        <item>
            <title>Hosting your own Git-based shared repositories using SSH</title>
      <link>http://verbosity.ca/devops/2012-12-24-hosting-your-own-git-based-shared-repositories-using-ssh</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2012-12-24-hosting-your-own-git-based-shared-repositories-using-ssh</guid>
            <description><![CDATA[<p>Git has become one of the most important tools in a developer&#39;s toolkit. To a Drupal developer, it is even more critical as nearly everyone in the community has standardized on it. While there are many great Git hosting services out there, sometimes clients need to have only local copies and Git is all about making each copy a distinctive repo to itself... so why not create your own Git host on your own server? That is what we are here to do today.</p>
<p>Part of our objective here is to use the Linux/Unix file permissions scheme <em>as intended</em> in a way that limits access to the bare-minimum necessary. We presume each developer has their own SSH account on the git server and that is all they should ever need. </p>
<h2 id="requirements">Requirements</h2>
<p>This recipe is for any Linux host that has Git installed. It requires SSH as it will be used for managing the connections with your users. By default, SSH uses the Linux system&#39;s user accounts as an authentication system (known as &quot;auth&quot; method) but if your needs require it, you can also use SSH modules to plug into your local LDAP or ActiveDirectory® authentication systems. One thing that will be of great importance in this tutorial is permissioning the users correctly and setting up a deployment action that suits your needs best. The strategies we use here may be adapted to your own use cases. </p>
<h2 id="getting-started-with-git-as-a-host">Getting Started with Git as a Host</h2>
<p>By now I&#39;m sure you&#39;ve probably heard the philosophy behind Git is that every repo contains all the history of a project and any copy can become the master copy if the original is lost. While this is <em>great</em> in principle, in reality, to share Git with others we will need to setup a special type of repository that is accessible to your system&#39;s users.</p>
<h3 id="installing-applications">Installing Applications</h3>
<p>First, let&#39;s make sure we have Git and SSH installed. On Debian or Ubuntu the command to install Git is as follows: <code>apt-get install git-core openssh-server</code> There is no special version of Git to do shared repositories, the standard one will do it all. </p>
<h3 id="storage">Storage</h3>
<p>You will need to create yourself a folder where your repositories will be stored. In my case I&#39;m creating a new directory right in the root of the server so that my users will have a nice path to work with when I give them access to the server. The storage should *not* be your production webserver. You need to put it somewhere that is not live to your users as the shared repository has a bunch of files you don&#39;t want to put into a production environment. <code>mkdir /projects</code> </p>
<p><em>I actually created my projects folder under /var/projects and just created a symlink here, to better integrate with our existing backup processes.</em> </p>
<h3 id="grouping-the-users">Grouping the Users</h3>
<p>Make sure that we have a group for our users. I&#39;m using the group name &quot;webmasters&quot; but you may already have a group established for your team. If that is the case, use the group you are already using. <code>addgroup webmasters</code> We will have to do additional work on the user account to make this work... but for now this is enough. </p>
<h3 id="initializing-the-shared-repository">Initializing the Shared Repository</h3>
<p>Now we will create a new project called &quot;newsite&quot;. When your colleagues connect to the site the path will be /projects/newsite.git with this configuration. <code>cd /projects git init --bare --shared newsite.git chgrp -R webmasters newsite.git</code> </p>
<h2 id="adding-users-to-the-mix">Adding Users to the Mix</h2>
<p>If you already have users on your site, great. If not... <code>adduser newdeveloper webmasters usermod -a -G webmasters newdeveloper</code> The usermod step is necessary so that each time your user, newdeveloper, creates a file, that it will be permissioned to the entire group. This will allow other users to modify the file if it was created by another user. There is one last step to get the permissions structure <em>just right</em>. By default, most Linux systems only allow user files to be edited by the user who created it, even though you have put the file into the group. There are many strategies for how to override this. My personal favourite is to change the system umask value to apply the same permission for the owner to the group as well.</p>
<p> To make a global change to enable &quot;group writeable&quot; by default in Debian or Ubuntu do the following: Edit the file <code>/etc/profile</code> with your favourite text editor. Add <code>umask 002</code> to the end of the file. If you already have a umask value, you can change it rather than adding a new line. You can also add the <code>umask 002</code> line to the user&#39;s ~/.bashrc file if you wish to do per-user setup for this. Be sure to test that this is working by logging in as your new user by doing <code>su newdeveloper</code> and then typing <code>cd</code> to go to their home folder (note, be sure to login after making the change), then in the user&#39;s home directory try doing <code>touch testfile</code> followed by <code>ls -la | grep testfile</code>.</p>
<p> You should see the following output: <code> -rw-rw-r-- 1 newdeveloper webmasters 0 2012-12-20 13:17 testfile </code> <em>In particular: look at the codes at the start. If you see -rw-r--r-- then umask is not set correctly for some reason. You should also see newdeveloper and webmasters as the user and group respectively. If not, go back to the step where you set the user&#39;s group to be set to new files by default.</em> Does it all look ok? Then <code>rm testfile</code> and log out of your new user&#39;s account. The Control-D key will get you out of their account fast. ;) Keep in mind there are other methods for doing this. If you already have a different system for managing group ownership of files, you will probably want to stick to the system you are already using if it is appropriate for your use case. </p>
<h2 id="accessing-the-repository">Accessing the Repository</h2>
<p>Your repository can now be accessed using the following paths. Keep in mind, if it is the first time you clone your repository it will warn you that you are cloning an empty repository. That is ok! You can add some files later and push up to the server so that the next person to clone does not get that message. From the same (local) machine: <code> git clone file:///projects/newsite.git cd newsite </code> From a remote computer anywhere on the Internet: <code>git clone <a href="mailto:&#110;&#101;&#119;&#x64;&#x65;&#118;&#101;&#x6c;&#x6f;&#112;&#101;&#x72;&#64;&#101;&#x78;&#97;&#x6d;&#x70;&#x6c;&#101;&#x2e;&#x63;&#x6f;&#x6d;">&#110;&#101;&#119;&#x64;&#x65;&#118;&#101;&#x6c;&#x6f;&#112;&#101;&#x72;&#64;&#101;&#x78;&#97;&#x6d;&#x70;&#x6c;&#101;&#x2e;&#x63;&#x6f;&#x6d;</a>:/projects/newsite.git cd newsite</code> If you are using a remote computer, you will be asked for your password unless you have added your public key from your remote computer to the user&#39;s account on the server. </p>
<h2 id="for-bonus-points-auto-checkout-into-stage">For Bonus Points, auto-checkout into stage</h2>
<p>There is one critical thing that you will want to consider before you go live. How are you going to update your staging environment? By default there IS an action performed when users push new updates to git, defined in the shared repository&#39;s hooks folder (under /projects/newsite.git/hooks in the file system), in the post-commit file. One word of warning here though - it will run as the user who does the commit. So your staging environment will constantly have permission errors. Ideally your stage environment probably has one user who is in control of it.</p>
<p><strike>To fix this, a really crude way, I rigged up a script that checks for updates every 30 seconds. Eventually I&#39;ll come up with something better, an action that can be taken by any user that doesn&#39;t involve giving everyone sudo access to the stage user. Run this &quot;daemon&quot; as a script from cron as the user you want to be responsible for stage:</strike> <strike><code>#!/bin/bash cd /stage while [ 'FALSE' != 'TRUE' ] do git pull origin master sleep 30 done</code></strike></p>
<p><em>WARNING: it should be obvious that this code won&#39;t scale... and will waste some resources unnecessarily; you&#39;ve been warned!</em></strike></p>
<p>In my second crude attempt at solving this issue I have taken the following approach:</p>
<ol>
<li>Create a <code>hooks/post-receive</code> file inside your repo</li>
<li>Set this file to echo your destination path into a queue file: <code>echo "/var/www/newsite" >> /projects/queue</code></li>
<li>Create the <code>/projects/queue</code> file: <code>touch /projects/queue && chown root:webmasters /projects/queue && chmod 660 /projects/queue</code></li>
<li>Create a checkout script: <code>while read PATH; do cd $PATH; /bin/su target_username -c "/usr/bin/git pull origin master" done </code></li>
<li>Then create a watcher to trigger that checkout script: <code>echo "" >/projects/queue # empty the queue first tail -f /projects/queue | /usr/local/bin/checkout</code> This solves the issue of having multiple users accessing the repository because you specify a user to run the checkout. All the users are able to write to the queue file, and the watcher just keeps an eye on that file. Since the watcher must sudo into another user&#39;s account to do the checkout, we can run the watcher as root and there is no possibility to any of our users figuring out they can sudo as someone else - because we don&#39;t use sudo at all. You should add your watcher to your startup scripts. </li>
</ol>
<h2 id="more-bonus-points-disable-ssh-interactive-mode-for-some-users-and-allow-logins-without-passwords">More Bonus Points, disable SSH interactive mode for some users, and allow logins without passwords</h2>
<p>This can be considered a sort of cruel and unusual punishment by some... however, in some cases it is handy, for example, when you have a designer changing theme files but who shouldn&#39;t be able to get into all your databases and other things. This is really simple to accomplish: <code>usermod newdeveloper -s /usr/bin/git-shell</code></p>
<p>The recommendation for dealing with public keys is to have the user login to SSH normally, then drop the user into git-shell. I&#39;ll be rolling this out soon so I can collect some of these bonus points. Have your user generate the public key. You may wish to avoid RSA because some server-wide sshd_config files have it off by default. I have used DSA in this example, if you use a different encoding, just make sure you use the associated id_XXX.pub file for that. </p>
<p><em>On the developer&#39;s machine</em>, grab the existing <code>.ssh/id_dsa.pub</code> or generate one using: <code>ssh-keygen -t dsa</code> Be sure to leave the challenge response blank. Then copy the contents of the <code>id_dsa.pub</code> file to the server. The contents of the file should be appended to the <code>.ssh/authorized_keys</code> file on the server... then... the important stuff: Back on the <em>server</em>: <code>chmod 700 /home/newdeveloper/.ssh chmod 600 /home/newdeveloper/.ssh/authorized_keys</code> That is it! Now the user should be able to log in automatically, and they will not be able to SSH into the host... only to use git to post the files.</p>
]]></description>
            <pubDate>Mon, 24 Dec 2012 11:38:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Upgrading the Debian way</title>
      <link>http://verbosity.ca/devops/2007-08-06-upgrading-debian-way</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2007-08-06-upgrading-debian-way</guid>
            <description><![CDATA[<p>With the summer beginning to fade away I&#39;ve run into a couple small snags during my hardware upgrade fiesta. My old Debian box needed many software upgrades for me to continue working and as such, my blog lost it&#39;s categories.  </p>
<p>Once again, without much sluething I was able to find the solution (though clearly it has not been implemented yet). As always, notes related to the software were located in <strong>/usr/share/doc</strong>, a directory tree I used to ignore but has become my lifeline.  </p>
<p>Typically when my Linux servers go down my instinct is to search Google for hours. It&#39;s a behavioural legacy from using Windows and the Macintosh. When something goes wrong in Debian, check your /usr/share/doc and you will likely find the answer to the problem you are having.</p>
]]></description>
            <pubDate>Mon, 06 Aug 2007 19:28:33 GMT</pubDate>
        </item>
    

        <item>
            <title>Creating a static archive of a Drupal site</title>
      <link>http://verbosity.ca/devops/2017-04-24-creating-static-archive-of-drupal-site</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2017-04-24-creating-static-archive-of-drupal-site</guid>
            <description><![CDATA[<p>Each year another DrupalCamp comes to pass and as event organizers we are left with +1 sites to maintain. After awhile this builds up to a lot of sites that need continuious updates. What to do?</p>
<p>When a site is ready to become an archive it can be a good idea to convert it to a static site. Security updates are no longer necessary, but interactive features of the site disappear... which is usually a good thing in this scenario.</p>
<h2 id="creating-a-site-mirror">Creating a site mirror</h2>
<p>Long before I used Drupal this was all possible with <code>wget</code>, and it continues to work today:</p>
<pre><code>#!/bin/bash
wget -o download.log -N -S --random-wait -x -r -p -l inf -E --convert-links --domains=&quot;`echo $1`&quot; $1
</code></pre>
<p><em>I call this script &quot;getsite&quot;, you use it by typing &quot;getsite example.com&quot;</em></p>
<p>This is a simple script that I place in the /usr/local/bin folder of the computer I will be using to create the site mirror.</p>
<p>This script will probably take awhile to run. You can run <code>tail -f download.log</code> in another terminal to watch the progress.</p>
<h3 id="what-does-it-do">What does it do?</h3>
<p>This is a simple web crawler that will follow all links on the page that you provided, but ONLY the links that are on the same domain.</p>
<p>It will try to fetch ALL the assets that come from this exact domain name you provide.</p>
<p>While doing so, it changes all of the paths to be relative to the root.</p>
<p>I also have it set to crawl slowly so as not to scare any firewalls we may be traversing.</p>
<p>You can look up all of the command line options by typing <code>man wget</code> on your system.</p>
<p>After running the command you will have a folder with the name of the domain and all of the files for the site, in addition to a download.log file that you can use to audit the download.</p>
<p>It can be very useful to use the utility <code>tree</code> to see all of the files.</p>
<h3 id="oh-noes-all-my-paths-have-html-appended-now">Oh noes! All my paths have .html appended now!</h3>
<p>Relax. Just like we can do clean URLs with index.php files we can specify some rules on our webserver to mask that ugly file extension.</p>
<p>In Nginx you can do this as follows:</p>
<pre><code>location / {
  root   /var/www/html
  index  index.html index.htm;
  try_files $uri $uri/index.html $uri/ =404;
}
</code></pre>
<p>The &quot;try_files&quot; patterns will match what used to be our Drupal clean URLs.</p>
<p>You may also want to add some kind of htpasswd-style restriction if your content is not intended to be available to the public.</p>
<p>It is as simple as that! Wget is a great utility for making site mirrors or legal archives.</p>
<h2 id="cleaning-up-loose-ends">Cleaning up loose ends</h2>
<p>Your Drupal site is going to have some interactive components that will no longer work.</p>
<p>In particular:</p>
<ul>
<li>User login form</li>
<li>Webforms</li>
<li>Commenting</li>
<li>Anything else using a form and/or a captcha (maybe disable captcha too)</li>
</ul>
<p>It may be simpler to disable these before taking the snapshot, or alternatively opening the resulting HTML in a text editor and removing the form components after the fact.</p>
<p>You may also want to enable or disable caching of different things depending on what results you get. By default you are probably going to see a lot of security tokens in the downloaded paths, so you may want to disable that... on the other hand, you may want to bundle your CSS to make fewer requests. Review your downloaded archive to see what will be best before you shut down your source site.</p>
<h2 id="other-uses">Other uses</h2>
<p>My team has used variations of this script for a variety of other needs as well:</p>
<ul>
<li>to estimate the size and scope of a migration project;</li>
<li>to get a complete list of paths we may want to alias or redirect after a migration;</li>
<li>to make an archive of a site for legal proceedings (ie, gathering evidence of copyright infringement);</li>
<li>to migrate data from a static archive when source databases do not contain fully rendered content;</li>
<li>and finally: to &quot;pepper&quot; the caches of large sites by hitting each URL after a migration when the caches are all cold.</li>
</ul>
<p>In that last example we use the spider option to &quot;not&quot; download the files, but simply request them and then move on.</p>
<p>Wget is an extremely powerful tool for mirroring entire sites and provides us an easy way to archive old dynamically-rendered sites without much hassle, and zero ongoing maintenance.</p>
<p>To find out what other things you can do with wget just type <code>man wget</code> on your console and read all the options that are available.</p>
]]></description>
            <pubDate>Mon, 24 Apr 2017 16:57:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Securing your site with SSL</title>
      <link>http://verbosity.ca/devops/2009-03-27-securing-your-site-ssl</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2009-03-27-securing-your-site-ssl</guid>
            <description><![CDATA[<p>I have now implemented SSL a couple of times and each time I attempt an install it feels like I am starting over from scratch with my SSL knowledge.  It can be complicating for a newbie but it is entirely possible for someone with a technical aptitude to achieve.  In this article I describe things to look out for when you are doing work with SSL.</p>
<p>This article assumes that you are working on a Debian Linux installation, but would probably work on Ubuntu and other modern Linux distributions as well.</p>
<p><strong>Generate the Keys</strong></p>
<p>In every article you read you are going to see that same heading.  Keys are the things that keep your privacy, and you must generate them on your own.   In this example my <em>certificate signing authority</em> wanted an AES-256 type of key (that&#39;s the type of encryption) so I ran the following command in Debian:</p>
<blockquote>
<p><strike>openssl genrsa -aes256 -out personal.key 1024</strike></p>
<p><em>Update 2011-11-02: new recommended command from my provider: openssl req -nodes -newkey rsa:2048 -keyout personal.key -out personal.csr</em></p>
</blockquote>
<p>As you may have guessed, that creates a file called personal.key.  That&#39;s your key!  Keep it safe.  You&#39;re probably wanting to do more with it though, because if you go this route you will need to get the certificate signed as well.  If you aren&#39;t looking to get a signed key you could <a href="http://www.debian-administration.org/articles/284">alternatively generate a self-signed certificate</a>, but always keep in mind that modern browsers do not like these.  They throw all kinds of errors, <a href="http://www.freesoftwaremagazine.com/columns/self_signed_certificates_and_firefox_3_possible_solution">security warnings</a> and other messages about your security settings.  So if you want that, go check it out, otherwise let&#39;s get that key signed:</p>
<blockquote>
<p><strike>openssl req -new -nodes -keyout personal.key -out request.csr</strike></p>
<p><em>If you&#39;re using the italics version above, you can probably skip this step!</em></p>
</blockquote>
<p>In this example you take that key you just created and you <a href="http://www.omegasphere.net/ssl-certificate/faq/csr/apache-mod_ssl/">generate a signing request</a>.  It wants information - so be honest!  This is your online reputation when someone clicks to view the certificate so make sure it is accurate.</p>
<!-- break -->

<p><strong>The Waiting Game</strong></p>
<p>After your SSL signing request is ready to go it is time to contract your signing authority.  I have gone to two different ones in the past - a Vancouver company called <a href="http://www.omegasphere.net/ssl-certificate/ssl-certificate.shtml">Omegasphere issues these</a> and I have also signed up for one through <a href="https://www.godaddy.com/gdshop/ssl/ssl.asp">Godaddy</a>.  You could buy one from Verisign too, but you will pay a lot more for the privelege.</p>
<p>Once your certificate signing authority gets your request they will do some kind of verification with you and/or your site.  Typically you can pay more for deeper inspection of records.  I&#39;m not sure exactly how that benefits the site owner, but it could make users feel better (provided they understand SSL <em>really</em> well - I&#39;m going to assume most users don&#39;t give a F*#$).</p>
<p>All they want is your request.csr file with accurate information.  Be available to respond to their inquiries and requests.  After waiting you should get two new files if your request is approved:</p>
<blockquote>
<p>personal.crt<br>ca-bundle.crt</p>
</blockquote>
<p>The file names will certainly differ but the concept is always the same.  You need to install three files when you get into your SSL setup (coming up next, read on!).  First, you need your personal.key.  That has your secret data.  Then you have your personal.crt.  That has your information and signature that says your key is legit.  Lastly, the Certificate Authority Bundle (ca-bundle.crt) is a file that says who vouched for you, and I believe it might also provide a way of authenticating them.  Rest assured, no matter what the case, that last file is about your service provider, not you, but you still need it.</p>
<p><strong>Confirm the Goods</strong></p>
<p>The biggest challenge when you are debugging these files that you just paid for is knowing if you got what you paid for <em>before</em> you spend countless hours trying to force the key into your system(s). I <a href="http://linuxfr.org/comments/564769.html#564769">found the solution to this one here</a>, but I&#39;ll warn you that the forum is all in French.  Here is a translation.</p>
<p>Run these two commands, they should provide the same answer:</p>
<blockquote>
<p>openssl x509 -noout -modulus -in personal.crt | openssl md5<br>openssl rsa -noout -modulus -in personal.key | openssl md5</p>
</blockquote>
<p>Do those look the same?  Good.  Ok, you got what you paid for.</p>
<p>Just in case though, let&#39;s do one more test.</p>
<blockquote>
<p>openssl x509 -noout -text -in server.crt<br>openssl rsa -noout -text -in server.key</p>
</blockquote>
<p>This one is more complicated.  Check that the <em>exponent</em> is the same.  Typically it is 65537 in most configurations.  So long as you have a match you are gold.</p>
<p><strong>Installing Away</strong></p>
<p>Using Apache2</p>
<p style="margin-left: 40px;">
  Installation on Apache2 is "simple" in the sense that there are <a href="http://httpd.apache.org/docs/2.0/ssl/">lots</a> of <a href="http://httpd.apache.org/docs/2.0/ssl/ssl_howto.html">howto</a> documents out there for you to sink your teeth into.  Sometimes you will chip a tooth.  I took one recommendation and accidentally removed PHP5 while trying to setup SSL.  Be wary of what you copy and paste, it is a mixed bag out there.
</p>

<p style="margin-left: 40px;">
  Your server will not restart if you do not get this configuration right.  So do it when the sun is not shining.  Also, be sure you checked out the test steps above, they will save you some headaches here.
</p>

<p style="margin-left: 40px;">
  <em>Enable mod-ssl</em>
</p>

<p style="margin-left: 80px;">
  Apache2 needs modules to get SSL support configured.  So install it with this command:
</p>

<blockquote>
<p style="margin-left: 40px;">
  a2enmod ssl
</p>
</blockquote>
<p style="margin-left: 40px;">
  <em>Edit ports.conf</em>
</p>

<p style="margin-left: 80px;">
  You need to enable Port #443 to get SSL in gear.  Update your ports.conf as such:
</p>

<blockquote>
<p style="margin-left: 40px;">
  Listen 80<br /> Listen 443
</p>
</blockquote>
<p style="margin-left: 80px;">
  There, the "Listen 80" line was there so we added a second entry.
</p>

<p style="margin-left: 40px;">
  <em>Virtual Hosts</em>
</p>

<p style="margin-left: 80px;">
  This is where virtual hosts get weird.  You need to add the NameVirtualHost directive and define at least one new site.  You can only have one SSL certificate per IP address so start adding some to your account if you intend to run a few different certificates on your server.
</p>

<blockquote>
<p style="margin-left: 80px;">
  NameVirtualHost 127.0.0.5:80<br /> NameVirtualHost 127.0.0.5:443
</p>
</blockquote>
<p style="margin-left: 80px;">
  Be sure to replace 127.0.0.5 with your server's IP address. 
</p>

<p style="margin-left: 80px;">
  Now define your new site.  Copy your existing virtual host entry and paste it into the same file, making sure to paste it <em>after</em> the end of the primary virtual host.
</p>

<p style="margin-left: 80px;">
  Now, change your IP address and port in the new entry:
</p>

<blockquote>
<p style="margin-left: 80px;">
  From: <VirtualHost 127.0.0.5:80><br /> To: <VirtualHost 127.0.0.5:443>
</p>
</blockquote>
<p style="margin-left: 80px;">
  Be sure to skip the from/to part that I typed in there, that was just for reference.  You can customize the other settings in here now or come back to it later.  You might want to setup a different log file for SSL errors, for example.
</p>

<p style="margin-left: 80px;">
  Now, somewhere in the definition of the ssl virtual host add the following lines. 
</p>

<blockquote>
<p style="margin-left: 80px;">
  SSLEngine on<br /> SSLCertificateFile /etc/apache2/personal.crt<br /> SSLCertificateKeyFile /etc/apache2/personal.key<br /> SSLCertificateChainFile /etc/apache2/ca-bundle.crt
</p>
</blockquote>
<p style="margin-left: 80px;">
  Note that you must change the path to these files to match where you have stored them on your system.  As mentioned earlier, if this statement fails your server will not start any more.  You can comment out "SSLEngine on" by putting a # in front of it if you need to get your site back up in a hurry (obviously without SSL).
</p>

<p style="margin-left: 80px;">
  If you added a password during the setup process you will now need to enter it each time you start Apache2.  It is possible to remove this "feature" if you automate updates and can't predict when your server restarts itself.
</p>

<p>For other services</p>
<p style="margin-left: 40px;">
  When it comes time to expand your SSL presence beyond Apache2 you can start plugging these three files into your other servers.  You need to keep in mind that the IP address and domain name should be the same as the Apache2 server. 
</p>

<p style="margin-left: 40px;">
  In my experience certain programs requrie you to change the format of the information to convert it to a PEM file.  This will also probably reduce the number of files you need to install the key, but your mileage may vary.  Ideally, you still want your CA-Bundle in there but sometimes it isn't necessary. 
</p>

<p>For Drupal</p>
<p style="margin-left: 40px;">
  If you plan on using your SSL certificate with Drupal setup Apache as noted above and then install the <a href="http://drupal.org/project/securepages">Secure Pages Drupal module</a> in your site.  I had to add "user" as one of the paths to encrypt so that visitors know their data is safe.  Otherwise it handled the web side of things quite gracefully.
</p>]]></description>
            <pubDate>Fri, 27 Mar 2009 19:07:00 GMT</pubDate>
        </item>
    

        <item>
            <title>Introducing New Servers, East and West</title>
      <link>http://verbosity.ca/devops/2008-03-07-introducing-new-servers-east-and-west</link>
      <guid isPermaLink="false">http://verbosity.ca/devops/2008-03-07-introducing-new-servers-east-and-west</guid>
            <description><![CDATA[<p>Just a quick note to see everyone off to the weekend. I&#39;ll be traped in my house packing my bags and getting ready to move to a new place. In the process my data needs to be backed up and accessable so I&#39;m happy to announce not one but two new servers: one in Vancouver and another in Toronto.</p>
<p>For those of you still reading my ramblings about technology this marks the end of a great project to learn Linux. Now I&#39;m getting down to business. If you don&#39;t hear from me you can trust I&#39;m working away learning new tricks and helping people with their online marketing projects.  </p>
<p>Enjoy the weekend!</p>
]]></description>
            <pubDate>Fri, 07 Mar 2008 17:32:28 GMT</pubDate>
        </item>
    
</channel>
</rss>