<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7130825122607711418</id><updated>2025-10-06T03:05:43.532-04:00</updated><title type='text'>Assume the Opposite</title><subtitle type='html'>Mark Bartel on technology, human nature, and sometimes both at the same time.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.markbartel.ca/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-4621394380488240844</id><published>2016-10-30T20:51:00.000-04:00</published><updated>2017-06-04T12:12:23.482-04:00</updated><title type='text'>Strongswan to Amazon Virtual Private Gateway</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/d6uQKVFc/tunnel.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:right; float:right; margin-left:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;204&quot; width=&quot;272&quot; src=&quot;http://f.markbartel.ca/d6uQKVFc/tunnel.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Recently I needed to connect a Rackspace subnet to an AWS subnet.  Our VPN software of choice in Rackspace was Strongswan, and for Amazon we wanted to use Amazon&#39;s Virtual Private Gateway (VPG).&lt;/p&gt;

&lt;p&gt;I figured this would be easy.  Set up the Virtual Private Gateway, Customer Gateway, and VPN Connection in AWS, set up Strongswan, and done.  Should really only take a few minutes.&lt;/p&gt;

&lt;p&gt;It took many hours, spread over a couple of weeks, before I actually had it working.  Google searches yielded many sample configurations for Strongswan against Amazon Virtual Private Gateways, but none of them worked for me.  I&#39;m providing the configuration that worked for us in the hopes that others can be spared the same pain of figuring it out.  The end configuration is straightforward:  the part that was troublesome was determining the correct set of options for &lt;code&gt;/etc/ipsec.conf&lt;/code&gt;.  The only other Strongswan file I modified was &lt;code&gt;/etc/ipsec.secrets&lt;/code&gt;; everything else was left untouched (as provided by the Debian Strongswan installation).&lt;/p&gt;

&lt;p&gt;The pieces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rackspace subnet 192.168.17.0/24.&lt;/li&gt;
&lt;li&gt;Amazon subnet 172.18.0.0/16.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Rackspace, spin up a Debian 8.6 (Jessie) server for Strongswan with three network interfaces:
&lt;ol&gt;
&lt;li&gt;PublicNet — this is the public interface over which Strongswan will communicate to the Amazon Virtual Private Gateway.  Let&#39;s say Rackspace gave us 1.2.3.4 as the IP address of this interface.&lt;/li&gt;
&lt;li&gt;ServiceNet — the Rackspace network for communication to Rackspace services, not used by Strongswan.&lt;/li&gt;
&lt;li&gt;192.168.17.0/24 — our private subnet on the Rackspace side.  The Strongswan server will forward traffic between this network and the Amazon 172.18.0.0/16 network.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;On the Strongswan server, set up iptables appropriately.  I&#39;m not going to cover iptables configuration here.  There was nothing specific to Strongswan other than ensuring that both subnets were allowed and forwarding was allowed between them.&lt;/li&gt;
&lt;li&gt;On the Strongswan server, enable forwarding.  In &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;, set &lt;code&gt;net.ipv4.ip_forward=1&lt;/code&gt; and either trigger a reload or just reboot.&lt;/li&gt;
&lt;li&gt;In AWS, create the Virtual Private Gateway:  nothing at all to configure here.&lt;/li&gt;
&lt;li&gt;Create the Customer Gateway.  Set Routing to Static and provide the external IP of the Strongswan server (1.2.3.4 from the Strongswan box above).&lt;/li&gt;
&lt;li&gt;In AWS, create the VPN Connection.  Set Routing Options to Static and provide the Rackspace subnet (192.168.17.0/24) in Static IP Prefixes.&lt;/li&gt;
&lt;li&gt;In AWS, in the Route Propagation tab of the appropriate Route Table, set Propagate to true for the Virtual Private Gateway.  This was the only routing configuration that was needed; I did not need to configure any routes in Amazon or on the Strongswan server for the Strongswan gateway to route appropriately.&lt;/li&gt;
&lt;li&gt;In AWS, on the Tunnel Details tab of the VPN Connection, take note of the IP address of Tunnel 1 (we won&#39;t be using the second tunnel).  Let&#39;s say this value was 5.6.7.8.&lt;/li&gt;
&lt;li&gt;In AWS, select Download Configuration on the VPN Connection and choose Vendor: Generic, Platform: Generic, and Software: Vendor Agnostic.  From this file, locate the Pre-Shared Key for IPSec Tunnel #1.  Let&#39;s say this value was &lt;code&gt;htFtWOVqKkss2EamZ36rFoPefECU18XJ&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On the Strongswan server from step 1, install Strongswan (in this case Strongswan 5.2.1): &lt;pre&gt; apt-get install strongswan&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;On the Strongswan server, update &lt;code&gt;/etc/ipsec.secrets&lt;/code&gt; to contain the following (and only the following) to map the Pre-Shared Key to the Amazon Tunnel 1 endpoint:&lt;pre&gt; 5.6.7.8 : PSK &quot;htFtWOVqKkss2EamZ36rFoPefECU18XJ&quot;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;On the Strongswan server, update &lt;code&gt;/etc/ipsec.conf&lt;/code&gt; to contain the following (and only the following):&lt;pre&gt;conn %default
  mobike=no
  compress=no
  authby=psk
  keyexchange=ikev1
  ike=aes128-sha1-modp1024!
  ikelifetime=28800s
  esp=aes128-sha1-modp1024!
  lifetime=3600s
  rekeymargin=3m
  keyingtries=3
  installpolicy=yes
  dpdaction=restart
  type=tunnel

conn dc-aws1
  leftsubnet=192.168.17.0/24
  right=5.6.7.8
  rightsubnet=172.18.0.0/16
  auto=start
&lt;/pre&gt;Note how the only unique values here are the subnets (&lt;code&gt;leftsubnet=192.168.17.0/24&lt;/code&gt; and &lt;code&gt;rightsubnet=172.18.0.0/16&lt;/code&gt;) and the Amazon Tunnel 1 endpoint (&lt;code&gt;right=5.6.7.8&lt;/code&gt;).  Everything else is boilerplate.&lt;/li&gt;
&lt;li&gt;Restart Strongswan, and done!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After the last step, Tunnel 1 of the VPN connection should have a Status of UP.  Running &lt;code&gt;ipsec status&lt;/code&gt; on the Strongswan server should show something like
&lt;pre&gt;
root@theserver:~# ipsec status
Security Associations (1 up, 0 connecting):
     dc-aws1[1]: ESTABLISHED 5 seconds ago, 1.2.3.4[1.2.3.4]...5.6.7.8[5.6.7.8]
     dc-aws1{1}:  INSTALLED, TUNNEL, ESP in UDP SPIs: cf07b51b_i 1965694d_o
     dc-aws1{1}:   192.168.17.0/24 === 172.18.0.0/16 
root@theserver:~# 
&lt;/pre&gt;

&lt;p&gt;Note that while I managed to get it working on a Debian Jessie server, I tried but failed to get the same configuration working on CentOS 7.  Different defaults for Strongswan, different default software or settings on CentOS 7, or a combination of both?  It remains a mystery.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/4621394380488240844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2016/10/strongswan-to-amazon-virtual-private.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/4621394380488240844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/4621394380488240844'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2016/10/strongswan-to-amazon-virtual-private.html' title='Strongswan to Amazon Virtual Private Gateway'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-98476162666914563</id><published>2012-04-19T23:43:00.000-04:00</published><updated>2012-04-19T23:43:35.442-04:00</updated><title type='text'>Creating key pairs for Amazon EC2</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/w9wZV-CN/key.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:right; float:right; margin-left:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/w9wZV-CN/key.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;A few days ago I needed to generate key pairs for an Amazon account again.  I thought I&#39;d write down the process.&lt;/p&gt;

&lt;p&gt;There are two key pairs that you need:  one pair for making API calls (and using the command line tools which make API calls under the covers), and another pair to log into your EC2 machines with SSH.  The following works on Linux and Mac clients “out of the box”, Windows users will need to download the appropriate software.&lt;/p&gt;

&lt;p&gt;Now, Amazon provides facilities for generating key pairs, why not use those?  The first rule of public-key cryptography is that &lt;b&gt;nobody but you ever sees your private key&lt;/b&gt;.  In fact, that&#39;s not just a rule, that&#39;s the whole point:  the best way to keep a secret is never to share it.  If you use Amazon&#39;s facilities to generate your private keys, you&#39;re violating this rule.  Yes, malicious Amazon employees could force the use of key pairs that they have generated themselves, but that should at least be traceable.  In the end, when you use Amazon&#39;s infrastructure, you are putting a certain level of trust in Amazon, but a basic tenet of security is that having security at multiple levels is A Good Thing.&lt;/p&gt;

&lt;p&gt;Ok, with the reasons to do it yourself covered, this is how you do it:&lt;/p&gt;

&lt;h2&gt;Generating AWS Signing Certificates&lt;/h2&gt;

&lt;pre&gt;
 openssl req -x509 -newkey rsa:2048 -passout pass:a -keyout kx -out cert
 openssl rsa -passin pass:a -in kx -out key
&lt;/pre&gt;

&lt;p&gt;The first command produces the key pair and a self-signed certificate; just hit return to accept the defaults at all the certificate request prompts (real information is not required or useful).  The second command removes the password “a” from the private key file, which is generally required for automation purposes (make sure that the file and your machines are appropriately secured).  The kx file can be deleted.&lt;/p&gt;

&lt;p&gt;To use the key pair, upload the cert file as a signing certificate to Amazon and specify the location of the cert and key files in the appropriate environment variables (EC2_CERT and EC2_PRIVATE_KEY) or directly on the command line.&lt;/p&gt;

&lt;h2&gt;Generating EC2 key pairs&lt;/h2&gt;

&lt;pre&gt;
 ssh-keygen -b 2048 -t rsa -f aws-key
&lt;/pre&gt;

&lt;p&gt;This will generate two files, aws-key and aws-key.pub containing the private and public keys respectively.  Import aws-key.pub as a “key pair” (it&#39;s only the public key, not really a pair) into AWS.  When you launch a Linux instance with this key, this public key is made available to the instance, where it will typically appear in an authorized_keys file for remote access via ssh.  If you don&#39;t set the key as your default ssh key on your client, you can use the -i option of ssh to specify the location.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/98476162666914563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/04/creating-key-pairs-for-amazon-ec2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/98476162666914563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/98476162666914563'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/04/creating-key-pairs-for-amazon-ec2.html' title='Creating key pairs for Amazon EC2'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-4154234198583421857</id><published>2012-03-31T23:59:00.000-04:00</published><updated>2012-04-01T01:35:28.064-04:00</updated><title type='text'>Raising the bar</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/nnCIzy0r/victor-on-bag.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/nnCIzy0r/victor-on-bag.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;A few days ago I arrived home a little late, missing supper.  As I approached the door, I could hear Victor and Anna bouncing in the front hall, raising a call of &quot;Daddy! Daddy! Daddy!&quot;:  what a delightful welcome home.  So I came in, dropped my laptop bag (containing laptop and power brick, keyboard, mouse, tablet), and gave first Victor (seniority has its privileges) and then Anna big hugs.  Then I took off my boots and turned around to see &lt;i&gt;Victor balancing on my laptop bag&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Needless to say in the actual event I didn&#39;t stop to take this photo but rather cried, “Victor, what are you &lt;i&gt;doing&lt;/i&gt;!?”.  I had Victor perform this reenactment (bag empty of course) earlier today, although I now realize that the positioning is correct but the orientation of the bag is wrong.  The bag had fallen on its front, which means that the keyboard, mouse, and brick were on the bottom with tablet and then laptop above.&lt;/p&gt;

&lt;p&gt;Once I established with Victor to never, ever stand on bags again, I brought the bag to my office to assess the damage.&lt;p&gt;

&lt;p&gt;&lt;i&gt;There was none&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;No damage to the MacBook Pro, not to the Apple Wireless Keyboard, not to the iPad, and not even to the Magic Mouse.  Yes, it is actually a laptop bag, so it has some padding, but not a significant amount.&lt;/p&gt;

&lt;p&gt;I knew the MacBook Pro was durable.  A rather younger Victor had once crawled across it with no ill effects, and I&#39;d taken advantage of that durability when doing things like wedging it into hotel room safes.  I might ding the aluminum but I wasn&#39;t worried about that translating into any real damage.  However, with the accessories potentially forming a fulcrum underneath them I&#39;d worried that there might be enough flex to at least crack the screen.  Apparently not, and apparently that applies to the iPad (first generation) as well.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/2o5I5K__/apple-and-dell.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:right; float:right; margin-left:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/2o5I5K__/apple-and-dell.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I&#39;m having a hard time imagining a laptop from any other company surviving that without damage.  Certainly none of the non-Apple laptops I&#39;ve owned in the past: Victor&#39;s weight would have cracked the screens or back even without a fulcrum effect.&lt;/p&gt;

&lt;p&gt;I see other companies attempting to match the style, but not the substance.  Clearly the Dell here is intended to match the MacBook Pro.  But the case of the Dell uses sheet metal, to a completely different effect.  They don&#39;t get it.  It&#39;s actually worse than a plastic case, because the sheet metal flexes much more than plastic.  The owner of the Dell informs me that you can reboot it by applying pressure to the sheet metal on the bottom in a particular place.  I&#39;m actually afraid to hold that Dell anywhere but the edges.&lt;/p&gt;

&lt;p&gt;Prior to owning unibody MacBook Pros, I didn&#39;t see any issue with standard laptop construction.  Laptops were of course delicate pieces of machinery, and if they broke after being subjected to such abuse, well, what did you expect?&lt;/p&gt;

&lt;p&gt;Now I expect more.  Apple has raised the bar.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/4154234198583421857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/03/raising-bar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/4154234198583421857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/4154234198583421857'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/03/raising-bar.html' title='Raising the bar'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-3055559440223848888</id><published>2012-02-04T03:00:00.000-05:00</published><updated>2012-02-04T03:00:02.257-05:00</updated><title type='text'>Mac OS X Lion:  stepping backwards</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/c-1RtGVc/snow-leopard-vs-lion.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;290&quot; width=&quot;230&quot; src=&quot;http://f.markbartel.ca/c-1RtGVc/snow-leopard-vs-lion.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I finally took the plunge and upgraded my MacBook Pro to Lion.  Technically I went to 10.7.2.  The immediate motivation was to upgrade to the current version of Xcode.  I&#39;d delayed for two reasons:  I&#39;d heard about issues with a number of major applications, and I knew there were a couple of major changes that would, at best, take some getting used to.&lt;/p&gt;

&lt;p&gt;My assumption is that by this point companies have fixed their Lion-related issues, so I just made sure I had all the relevant updates and so far so good.  The known changes were another thing, though.&lt;/p&gt;

&lt;p&gt;Yes, scrolling is “backwards” now.  I understand (and agree with) the motivation for changing it, but I can see it is going to take me a long time to get used to it, particularly since I regularly use Linux and Windows boxes too.&lt;/p&gt;

&lt;p&gt;The other major change is that &quot;full-screen mode&quot; uses separate desktops now, so applications on the second monitor disappear.  I &lt;b&gt;hate&lt;/b&gt; this, as apparently do &lt;a href=&quot;https://discussions.apple.com/thread/3196329&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;http://arstechnica.com/civis/viewtopic.php?f=19&amp;t=1156322&quot;&gt;other&lt;/a&gt; &lt;a href=&quot;http://forums.macrumors.com/showthread.php?t=1174757&quot;&gt;people&lt;/a&gt;.  I&#39;d say about 50% of the time I&#39;d have one application in full screen mode on one monitor and one or more activities on the other that I was peripherally monitoring... no more of that now that I&#39;m on Lion.  No more making Chrome full-screen for writing a blog entry while watching some long-running process in a Terminal on another monitor... like I&#39;m doing right now, except not full-screen.  I think I understand why Apple did this too:  the previous ways of doing full-screen didn&#39;t work well for a lot of scenarios and each application did it in a different way.  But it&#39;s rather annoying to me since the pre-Lion methods mostly worked really well for my scenarios.&lt;/p&gt;

&lt;p&gt;The separate-desktop for full-screen mode idea works great when you have just a single screen.  But since I have multiple screens, I want the main activity full-screen (no distractions!) on the main monitor and all the side activities on the second monitor.  I hope Apple comes up with a good paradigm for that, but I suspect they don&#39;t see it as an issue that needs to be resolved.  There are &lt;a href=&quot;http://geetduggal.wordpress.com/2011/08/04/reclaiming-your-second-monitor-in-os-x-lion/&quot;&gt;hacks&lt;/a&gt; to work around this problem but there are significant issues to them.  People say “just don&#39;t use full-screen” but there is no “no-chrome” mode on most applications to achieve the effect that I&#39;d get with most full-screen implementations on Snow Leopard.  That&#39;s what I really want, a way to get rid of the excess application chrome.  Perhaps Apple should provide a standard mechanism for that.&lt;/p&gt;

&lt;p&gt;The final Lion issue (for this post anyway) is Preview.  In Snow Leopard, small images would scale badly (no anti-aliasing etc) when you enlarged them in Preview.  On the other hand, other software like Google Chrome scaled images nicely.  But that&#39;s ok, I&#39;d go full-screen in Preview and then the images would look good.  I was hoping Lion would fix this.  Lion did, indeed, make the behaviour consistent... full-screen images now look like garbage too.  See the image at the top for the difference between what Chrome does (left) and what Preview does (right).&lt;/p&gt;

&lt;p&gt;One more issue:  the Finder crashed while I was writing this.  I don&#39;t remember the last time the Finder crashed on Snow Leopard.&lt;/p&gt;

&lt;p&gt;So with all the negativity out of the way, I will say that I do like Launchpad and Preview does seem a lot faster than it was.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/3055559440223848888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/02/mac-os-x-lion-stepping-backwards.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/3055559440223848888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/3055559440223848888'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/02/mac-os-x-lion-stepping-backwards.html' title='Mac OS X Lion:  stepping backwards'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-5686731013292404962</id><published>2012-02-02T02:12:00.000-05:00</published><updated>2012-02-02T02:13:50.632-05:00</updated><title type='text'>Amazon S3 reliability</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/tXUXr8mu/s3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/tXUXr8mu/s3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;According to the &lt;a href=&quot;http://aws.typepad.com/aws/2012/01/amazon-s3-growth-for-2011-now-762-billion-objects.html&quot;&gt;Amazon Web Services Blog&lt;/a&gt;, they currently have 762 billion objects in Amazon S3.  That&#39;s impressive.  The popularity of Amazon S3 isn&#39;t hard to understand:  it&#39;s easy to use, only $0.14 per gigabyte-month in most regions, and is “designed to provide 99.999999999% durability and 99.99% availability of objects over a given year” (quoted from &lt;a href=&quot;http://aws.amazon.com/s3/&quot;&gt;Amazon Simple Storage Service (Amazon S3)&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;That&#39;s an impressive statement: 99.999999999% durability.  That means that for my 7,038,080 objects, I could expect to lose one in 14,208 years, or to put it another way I have a 0.007% chance of losing an object in a particular year.  That seems like a pretty minuscule risk.&lt;/p&gt;

&lt;p&gt;But then you look at the scale of Amazon Web Services.  There are 762 &lt;b&gt;billion&lt;/b&gt; objects in Amazon S3.  That means by their design criteria (ignoring the reduced redundancy storage option) they expect to lose at least seven of those objects this year.  Have you checked your objects today?&lt;/p&gt;

&lt;p&gt;Now I doubt that the “99.999999999%” probability is a “normal operating conditions” number.  I suspect that&#39;s a guess at the probability of three Amazon data centres being taken out at once, or something like that.  In normal operations I suspect that you might as well just call it 100% reliable in terms of preserving your object.  But I find it amazing that they&#39;re at the scale where such minuscule probabilities become certainties (if you naïvely apply them).&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/5686731013292404962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/02/amazon-s3-reliability.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5686731013292404962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5686731013292404962'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/02/amazon-s3-reliability.html' title='Amazon S3 reliability'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-6575662094067494465</id><published>2012-01-30T17:44:00.000-05:00</published><updated>2012-01-30T17:46:12.714-05:00</updated><title type='text'>RAID redo</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/2GzSqtcq/drive-failed.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;330&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/2GzSqtcq/drive-failed.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I spent some time this weekend rebuilding the family file server, which is a Linux box.  The last time I rebuilt it was several years ago, and at that time I figured I should set it up with (software) RAID 5 to avoid the hassle of having the recover from backup if a disk failed.  This worked great.  A few years ago a disk did fail, I bought a new one, plugged it in, it rebuilt and everything was good.&lt;/p&gt;

&lt;p&gt;Similarly, a few years back at work I configured our new VMware ESXi box with an eight disk RAID 5 array (hardware RAID).  Last year a disk failed, and on that machine I didn&#39;t even have to power it down.  I yanked out the old disk, hot-plugged the new, and the machine didn&#39;t miss a beat.&lt;/p&gt;

&lt;p&gt;So, RAID 5 is wonderful, right?  Well, the time between the disk failure and disk replacement was somewhat stressful.  In both cases, the disk couldn&#39;t be replaced immediately.  The disk in my home server failed the night before I left on a trip, so I couldn&#39;t replace it for two weeks.  And the new disk for the work machine had to be ordered and took some time to arrive.  There was this gap where there was no redundancy.  In both cases there were backups, but restoring from backup takes a lot more time than just plugging in a disk, and I realized that I &lt;b&gt;really, really&lt;/b&gt; didn&#39;t want to waste my time setting up machines when simply providing a little more redundancy would have removed the need.  “You can ask me for anything you like, except time.”&lt;/p&gt;

&lt;p&gt;So the home server needed a bit of maintenance (for example, the root volume was low on space) so I figured while I was doing that I would reorganize the server and take some extra time to fix the redundancy problem, moving to RAID 6 on the four disks.  RAID 6 would allow two disks to fail without loss of data.  I&#39;d lose some space but the extra redundancy would be worth it.  Why RAID 6 over RAID 10?  Well, RAID 6 provides better error checking at the expense of some speed.&lt;/p&gt;

&lt;p&gt;This is what I did to prepare:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Took an LVM snapshot of the root partition and copied that snapshot as an image to an external drive.  Why an image?  Sometimes the permissions and ownership of files are important, I like to preserve that metadata for the root partition.&lt;/li&gt;
&lt;li&gt;Copied the truly critical data on the root partition to another machine for extra redundancy.  The existing backup process copies the data offsite, which is good for safety but not so good for quick recovery, so I wanted to make sure I didn&#39;t have to use the offsite backup.&lt;/li&gt;
&lt;li&gt;Copied the contents of the other partitions to the external drive.  The other partitions don&#39;t contain anything particularly critical so I didn&#39;t feel the need for redundancy there.&lt;/li&gt;
&lt;li&gt;Zero&#39;d out all the drives with dd if=/dev/zero of=/dev/sdX.  Some sites suggested this was important, that the Linux software RAID drivers expected the disks to be zeroed.  It seems unlikely but it didn&#39;t cost me anything to do it.  There was an interesting result here, though:  the first two drives ran at 9.1Mb/s, while the second two ran at 7.7Mb/s.  If I recall correctly there are three identical drives and the one I replaced which is a different brand, so it isn&#39;t a drive issue but rather a controller issue:  the secondary controller is slower.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now that the machine was a blank slate, I set it up from scratch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the Debian 6.0.3 installer from a USB key.&lt;/li&gt;
&lt;li&gt;In the installer, partition each of the four disks with two partitions:  one small 500M partition and one big partition with the rest of the space (~500G).&lt;/li&gt;
&lt;li&gt;Set up RAID 1 across the small partitions (four-way mirroring).&lt;/li&gt;
&lt;li&gt;Set up RAID 6 across the large partitions.&lt;/li&gt;
&lt;li&gt;Format the RAID 1 volume as ext3, mounted as /boot.&lt;/li&gt;
&lt;li&gt;Create an LVM volume group called “main” and added the RAID 6 volume to it.&lt;/li&gt;
&lt;li&gt;Create a 5G logical volume for /.&lt;/li&gt;
&lt;li&gt;Create a 5G logical volume for /home.&lt;/li&gt;
&lt;li&gt;Create a 10G logical volume for swap.&lt;/li&gt;
&lt;li&gt;Create a 20G logical volume for /tmp.&lt;/li&gt;
&lt;li&gt;Create a 200G logical volume for /important.&lt;/li&gt;
&lt;li&gt;Create a 200G logical volume for /ephemeral.&lt;/li&gt;
&lt;li&gt;Tell the installer that this machine should be a DNS, file, and ssh server and let the installer run to completion.&lt;/li&gt;
&lt;li&gt;Copy the important files to /important and the ephemeral files to /ephemeral.&lt;/li&gt;
&lt;li&gt;Configure Samba and NFS.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So why this particular structure?  Well, Linux can&#39;t boot from a software RAID 6 partition, so I needed to put /boot on something that Linux could boot from, therefore the RAID 1 partition.  The separate logical volumes are primarily about different backup policies.  The 5G size for / and /home is to limit growth (these volumes will be backed up as filesystem images) and 5G fits on a DVD for backup, in case I want to do that at some point.  Swap of course needs to be inside the RAID array if you don&#39;t want the machine to crash when a disk fails:  yes Linux knows how to efficiently stripe swap across multiple disks but a disk failure will cause corruption or a crash.  The 20G volume for /tmp is so that there&#39;s lots of temp space and it&#39;s on a separate volume so backup processes can ignore it.  The /important volume contains user files that are the important data and can be backed up on a file-by-file basis (as opposed to / which is backed up as an filesystem image).  The /ephemeral volume contains files that don&#39;t need to be backed up.  All filesystems have the noatime mount flag set, and they&#39;re all ext4 except for /boot which is ext3.&lt;/p&gt;

&lt;p&gt;If you&#39;re counting you&#39;ll note that there is still a lot of empty space in that LVM volume group.  There are several reasons for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some empty space is required if I want to make an LVM snapshot, so I never want to use up all the space.&lt;/li&gt;
&lt;li&gt;I frequently make additional temporary volumes for a variety of purposes.&lt;/li&gt;
&lt;li&gt;If I need to expand any particular logical volume, there is room to do so.&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/6575662094067494465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/01/raid-redo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/6575662094067494465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/6575662094067494465'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/01/raid-redo.html' title='RAID redo'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-1897187137181913439</id><published>2012-01-16T03:00:00.000-05:00</published><updated>2012-01-16T03:00:01.529-05:00</updated><title type='text'>Safe Facebooking with Chrome</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/-yhhOmSR/safe-facebook.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;94&quot; width=&quot;100&quot; src=&quot;http://f.markbartel.ca/-yhhOmSR/safe-facebook.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I don&#39;t like the idea that every page on the web with a Like button will tell Facebook that I&#39;ve browsed to that page.  But at least that information is anonymous... so long as I&#39;m not logged into Facebook.&lt;/p&gt;

&lt;p&gt;I used to just not stay logged in, only logging into Facebook for “Facebook sessions” in incognito mode, use a different browser and clear the history, etc or similar such mechanisms.  But I found &lt;a href=&quot;http://scarybeastsecurity.blogspot.com/2011/04/fiddling-with-chromiums-new-certificate.html&quot;&gt;this post&lt;/a&gt; about Chrome&#39;s certificate pinning where Chris describes how to “Twitter Like A Boss”.  This inspired me to run a new Chrome process with a separate profile for Facebook, using this command line (via an alias):&lt;/p&gt;

&lt;code&gt;/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome&lt;br /&gt;
&amp;nbsp;&amp;nbsp;--user-data-dir=$HOME/.mb/chrome-safe-browsing/facebook&lt;br /&gt;
&amp;nbsp;&amp;nbsp;--disable-plugins&lt;br /&gt;
&amp;nbsp;&amp;nbsp;--proxy-server=localhost:1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;--proxy-bypass-list=&#39;https://facebook.com,https://*.facebook.com,https://*.fbcdn.net,https://*.akamaihd.net&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;https://facebook.com/&lt;/code&gt;

&lt;p&gt;With no line breaks, of course.&lt;/p&gt;

&lt;p&gt;This isolates Facebook&#39;s cookies into a separate profile, which prevents my general web browing in another Chrome instance from being tracked under my Facebook login.  It also disables browsing any other sites (following a link will fail, you need to copy/paste into another browser), forces all Facebook connections to use SSL, and disables plugins.&lt;/p&gt;

&lt;p&gt;Note that this doesn&#39;t use incognito mode (I want to stay logged in now that my everyday browsing isn&#39;t affected) and it doesn&#39;t use certificate pinning.  The main point was to stop leaking information to Facebook.  I may get around to figuring out the certificates to pin at some point, but really I&#39;m hoping that a better solution will arise to the problem that certificate pinning is addressing (which is not to say that certificate pinning &lt;a href=&quot;https://www.eff.org/deeplinks/2011/08/iranian-man-middle-attack-against-google&quot;&gt;hasn&#39;t already proved effective in critical scenarios&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It&#39;s harder to do the same thing with Google because I use so many Google services.  The core principle is to use a separate browser instance for each login for corporations like Facebook and Google that have code on so many third-party web pages; this is one way of doing that which happens to have additional security benefits (forcing SSL etc).&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/1897187137181913439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/01/safe-facebooking-with-chrome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/1897187137181913439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/1897187137181913439'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/01/safe-facebooking-with-chrome.html' title='Safe Facebooking with Chrome'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-371715840475789470</id><published>2012-01-10T03:00:00.000-05:00</published><updated>2012-01-10T03:00:11.753-05:00</updated><title type='text'>Adventures in taxation:  Apple&#39;s App Store versus Google&#39;s Android Market</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/2ZrZ9_Ok/coins.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/2ZrZ9_Ok/coins.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I recently went through the process of registering to distribute paid applications in both Apple&#39;s App Store and Google&#39;s Android Market.  I could talk about those processes, but that&#39;s not what this post is about.  Wait, I couldn&#39;t talk about Apple&#39;s process anyway, as that agreement explicitly forbids discussing said agreement.&lt;/p&gt;

&lt;p&gt;Anyway, this post is about taxes, not about how fast Google&#39;s approval process was (pretty fast) or how slow Apple&#39;s was (longer but not really that long), or about how Google did the bank account verification but Apple didn&#39;t, or about how Apple actually walked me through the banking information whereas Google just said &quot;enter all the numbers&quot;... ok, really, I&#39;m not talking about those items.&lt;/p&gt;

&lt;p&gt;I am not a tax lawyer or accountant, so I may well be completely wrong here, but my research so far indicates to me that if I put an app in an appstore (or sell a subscription to web-based service) I am required to charge GST/HST to customers based in Canada.  If the customer is not in Canada, I do not need to charge any tax.  So, how do I arrange to do that?&lt;/p&gt;

&lt;p&gt;With Apple, the path is to fill out the appropriate paperwork such that Apple can collect the taxes and submit them appropriately.  Once they have processed those forms, Apple will charge the GST/HST on any paid apps I sell and submit that tax to the Canada Revenue Agency.  I no longer have to worry about it.&lt;/p&gt;

&lt;p&gt;With Google, it isn&#39;t so simple.  I need to tell Google the rules about how much tax to charge depending on the location of the buyer and I&#39;ll have to deal with submitting the tax to the Canada Revenue Agency.  I suspect this works better for larger companies (where Apple&#39;s one-size-fits-all mechanism doesn&#39;t work) but as a simple one-location seller Apple&#39;s approach is simpler for me.  I wonder how Apple deals with organizations that have multiple locations and therefore don&#39;t have simple rules for which tax to charge where?&lt;/p&gt;

&lt;p&gt;Now I need to figure out whether I can just charge GST for Google or whether I need to actually have a different per-province rate.  Since Google seems to support per-province tax rates, I&#39;m thinking that it is the second.  I mean, if you look at the rules, they&#39;re quite simple.  Here&#39;s an excerpt (from &lt;a href=&quot;http://www.cra-arc.gc.ca/E/pub/gm/b-103/b-103-e.pdf&quot;&gt;GST/HST Technical Information Bulletin B-103 [53 pages]&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote cite=&quot;http://www.cra-arc.gc.ca/E/pub/gm/b-103/b-103-e.pdf#page=10&quot;&gt;
If the Canadian rights in respect of a supply of intangible personal property (other than a supply of intangible 
personal property that relates to real property or tangible personal property or a supply of intangible personal 
property that relates to services that is deemed to be made in a province based on the place of supply rule that is 
explained in Part IV of this section), can only be used primarily (more than 50%) in the participating provinces, 
the supply is proposed to be made in a participating province if an equal or greater proportion of the Canadian 
rights cannot be used in another participating province.
&lt;/blockquote&gt;

&lt;p&gt;I applaud the Canada Revenue Agency for the crystal clarity of their online documentation.  But I think I&#39;ll seek professional advice, just to be safe.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/371715840475789470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/01/adventures-in-taxation-apples-app-store.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/371715840475789470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/371715840475789470'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/01/adventures-in-taxation-apples-app-store.html' title='Adventures in taxation:  Apple&#39;s App Store versus Google&#39;s Android Market'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-5449248572555836985</id><published>2012-01-07T03:00:00.000-05:00</published><updated>2012-01-07T03:00:12.720-05:00</updated><title type='text'>Storage Spaces:  Linux LVM for Windows?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/80ZjfF1Q/lvm.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/80ZjfF1Q/lvm.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;When I first read about the Windows 8 &lt;a href=&quot;http://blogs.msdn.com/b/b8/archive/2012/01/05/virtualizing-storage-for-scale-resiliency-and-efficiency.aspx&quot;&gt;Storage Spaces&lt;/a&gt; feature, I thought, awesome, Linux LVM capabilities for Windows!  More specifically, a combination of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mdadm&quot;&gt;multiple device (MD) management&lt;/a&gt; in the kernel and the &lt;a href=&quot;http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)&quot;&gt;logical volume manager (LVM)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But then I realized that I hadn&#39;t read anything about atomic snapshot capabilities, which is my favorite feature of LVM2 on Linux.  Atomic snapshots make consistent hot backups trivial.  Snapshots are the top reason I set up LVM on every Linux box I create.  Without snapshots, Storage Spaces seems significantly less interesting.&lt;/p&gt;

&lt;p&gt;Hopefully Storage Spaces will have atomic snapshot capability and they just aren&#39;t talking about it yet.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/5449248572555836985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/01/storage-spaces-linux-lvm-for-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5449248572555836985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5449248572555836985'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/01/storage-spaces-linux-lvm-for-windows.html' title='Storage Spaces:  Linux LVM for Windows?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-5795311448616234858</id><published>2012-01-06T03:00:00.001-05:00</published><updated>2012-01-06T03:00:13.526-05:00</updated><title type='text'>Google gives itself a red card</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/Sd5MO9VT/red-card.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/Sd5MO9VT/red-card.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;So to prove that they are a fair referee for search ranking, Google has &lt;a href=&quot;http://searchengineland.com/google-chrome-page-will-have-pagerank-reduced-due-to-sponsored-posts-106551&quot;&gt;given the Chrome team a red card&lt;/a&gt; and effectively banned &lt;a href=&quot;http://www.google.com/chrome&quot;&gt;the main Chrome page&lt;/a&gt; from the first page of rankings for 60 days.&lt;/p&gt;

&lt;p&gt;I approve.  If this were some non-Google site the punishment would seem out of proportion to the offense — there was only one link that passed PageRank and it seems pretty clear that Google didn&#39;t intend the campaign to create such links — but since this is Google itself, they do need to hold themselves to a higher standard.  And hey, they deserve to be given a penalty just for the incredibly poor quality of the campaign:  articles that say nothing about Chrome or indeed anything at all.&lt;/p&gt;

&lt;p&gt;Will this hurt Chrome in the short term?  I believe so.  As a computer geek, I already use Chrome most of the time and I&#39;d never need to do a search to find a browser.  But I&#39;m not most people.  Most people reading this blog aren&#39;t “most people”.  “Most people” don&#39;t know a lot about browsers and may well discover Chrome through a search.&lt;/p&gt;

&lt;p&gt;Will this do any real damage to Google or Chrome in the long term?  I don&#39;t think so.  I think Google has responded well overall.  As for Chrome, Apple and Microsoft aren&#39;t particularly interested in the web as such, so Safari and Internet Explorer aren&#39;t keeping up with Chrome.  Mozilla has lost its way, instituting policies such as rapid automatic updates (like Chrome) without accepting the corollary that the updates have got to be transparent (unlike Chrome).  I think there is a culture issue at Mozilla.  And Google understands security better than the rest, with silent automatic silent updates for Chrome from the beginning and extra security measures such as public key pinning.  Chrome has growing mind share due to all this and I think Chrome&#39;s market share will continue to grow for some time, or at least until a competitor changes path significantly.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/5795311448616234858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2012/01/google-gives-itself-red-card.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5795311448616234858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5795311448616234858'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2012/01/google-gives-itself-red-card.html' title='Google gives itself a red card'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-5921062037782902984</id><published>2011-12-31T03:00:00.000-05:00</published><updated>2011-12-31T03:00:11.447-05:00</updated><title type='text'>Credit bureaus:  how to annoy customers and inspire skepticism and distrust</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/YJ31x6Hx/credit-card-letter.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;174&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/YJ31x6Hx/credit-card-letter.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Earlier this week I received a new Mastercard in the mail.  But I hadn&#39;t applied for one and the first name wasn&#39;t right.  Identity theft?&lt;/p&gt;

&lt;p&gt;So first, call the issuing bank: they would cancel the card.  Then I called Equifax and TransUnion; all was good with my credit reports.  Whatever was up with this person using my address and a near-name, they hadn&#39;t been connected to my credit file.  I had the bureaus put an alert on my file just in case, so that extra identity verification would be done for any credit requests.  Equifax insisted on charging me $5.65 to put an alert on my file, TransUnion did not charge me.  I also called Canada Post to ensure that there were no mail redirects happening.&lt;/p&gt;

&lt;p&gt;Then today I received a call from the same bank again, about another credit card application.  The call was triggered by the alert on my credit file.  The bank said they would request the applicant go into a branch to verify their identity in the hope of “catching them”.  Seems unlikely.&lt;/p&gt;

&lt;p&gt;This made me want to actually look at my credit file:  we&#39;d renewed our mortgage recently, so we knew all was good at that time, but the assertion of the credit bureau people that “nothing had changed” since that event was no longer enough for me.  I wanted to see the files myself.  And then I thought, maybe I should sign up for credit monitoring too.&lt;/p&gt;

&lt;p&gt;First, Equifax.  I go through the signup process, creating a username and password.  Then I&#39;m prompted to call Equifax for additional verification.  Fair enough, in fact that seems a good thing.  I call the number, and have to wade through a number of menus, all of which have minute+ preambles.  You would think that you&#39;d be given a direct “additional verification” number, rather than a general number.  Moving past that, the preambles (verbosity: maximum) prompting me to go to the website were exceedingly annoying:  I&#39;d just been on the website, stop wasting a whole lot of my time by telling me to go there first, repeatedly!  Eventually, I get a human:  a bored male voice answers.  He asks me a number of questions to verify my identity, but it seemed he just couldn&#39;t get me off the phone fast enough, to the point of being rude.  Clearly there is an significant emphasis on call duration or volume.  He said I&#39;d get an email with my password.  I&#39;m thinking, why, I already set up my password online?  But I check, and I have not one, but four identical emails with the password I&#39;d provided online in plaintext.  What the hell?  What idiot stores passwords in plaintext these days, and sends them over email that way?  These people are responsible for the security of our credit information?  I&#39;d randomly generated a password unique to Equifax, but still concerning.&lt;/p&gt;

&lt;p&gt;I then attempt to sign up for credit monitoring.  But it quickly becomes clear that the provider of the monitoring service is a separate company from Equifax and the integration is poor:  it seemed I was going to have to enter all my information over again and create a separate account for that product.  Given that I decided to just request a credit report (which had nothing unexpected in it).&lt;/p&gt;

&lt;p&gt;Next, TransUnion.  Ok, their site seems a little more professional, and their credit monitoring, while it is probably also a separate company, seems better integrated.  But I couldn&#39;t even get past creating an account there.  I was asked to provide an user id, but there was no indication of whether I&#39;d picked a unique one.  So I went to the next screen, where it said &quot;the information matched an existing account&quot;.  What does that mean?  Was there a userid conflict, or is there already an account with my personal details?  Calling them seemed to indicate the first, but I couldn&#39;t get any further.  Once you get to that screen, there is no way to go back, you have to start over.  In the end I gave up for today.&lt;/p&gt;

&lt;p&gt;These companies are all about tracking information that is particularly vital, both to financial institutions and the population at large.  Accuracy is key and security is critical.  But even ignoring the Equifax password security issue, there is a lot of poor design in both the technology and the processes.  While the individual items I encountered may mostly just be annoying, it leads me to wonder whether these issues are reflective of the quality of the rest of the systems for these two companies.  My experience with both companies doesn&#39;t leave me with warm fuzzy feelings about the safety of my credit information.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/5921062037782902984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/12/credit-bureaus-how-to-annoy-customers.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5921062037782902984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5921062037782902984'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/12/credit-bureaus-how-to-annoy-customers.html' title='Credit bureaus:  how to annoy customers and inspire skepticism and distrust'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-1308070902704025824</id><published>2011-12-30T03:00:00.000-05:00</published><updated>2011-12-30T03:00:04.832-05:00</updated><title type='text'>Strange expectations</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/_7sEOMml/spaceman.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:right; float:right;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;227&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/_7sEOMml/spaceman.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Last night I watched the Apollo 11 launch with my 5-year old son.  Afterwards, he turned to me and said:&lt;/p&gt;
&lt;p&gt;“I&#39;ve changed my mind.  When I grow up, I want to be a, umm, one of the people in the rockets.”&lt;/p&gt;
&lt;p&gt;“You mean an astronaut?  Someone who goes into space is an astronaut.”&lt;/p&gt;
&lt;p&gt;“Yes.  And then, when I&#39;m old enough to drive, then I want to be a race car driver.”&lt;/p&gt;
&lt;p&gt;It was hard not to laugh, but he just doesn&#39;t have the knowledge and experience to have what adults would consider “reasonable expectations”.  It&#39;s not that he wants to be an astronaut or a race car driver that is funny, it is that he knows it is going to be a long time before he can drive, so he figures he may as well be an astronaut in the meantime — after all, as far as he knows there are no age limitations for “people in rockets”, and from his perspective the one is no harder than the other.&lt;/p&gt;
&lt;p&gt;This was a reminder to me that when designing technology we need to be sure to reset our expectations when dealing with those who do not have our knowledge and experience.  They are going to make assumptions that seem bizarre:  it&#39;s not just that they don&#39;t have the knowledge and experience, it is that they don&#39;t have the base expectations that we have accumulated over our experience.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/1308070902704025824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/12/strange-expectations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/1308070902704025824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/1308070902704025824'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/12/strange-expectations.html' title='Strange expectations'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-5891820387992649217</id><published>2011-12-17T15:00:00.000-05:00</published><updated>2011-12-17T15:00:01.882-05:00</updated><title type='text'>The Gravity project</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/nNVquR6J/appletree.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;101&quot; width=&quot;113&quot; src=&quot;http://f.markbartel.ca/nNVquR6J/appletree.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;What is the Gravity project?  Gravity is “OSGi in ActionScript”, which we released last summer as the Client Component Framework in the &lt;a href=&quot;http://help.adobe.com/en_US/enterpriseplatform/10.0/AEPDeveloperGuide/index.html&quot;&gt;Adobe Digital Enterprise Platform&lt;/a&gt;.  A year ago Stacy Young posted about Gravity in his &lt;a href=&quot;http://stacyyoung.org/&quot;&gt;blog&lt;/a&gt; with a link here “if you&#39;re interested”.  Well, I&#39;ve actually been blogging about Gravity over on the &lt;a href=&quot;http://blogs.adobe.com/gravity&quot;&gt;Adobe Gravity blog&lt;/a&gt;, not here, but I&#39;ve been reminded that I should at least &lt;a href=&quot;http://blogs.adobe.com/gravity&quot;&gt;provide a link&lt;/a&gt;!&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/5891820387992649217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/12/gravity-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5891820387992649217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5891820387992649217'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/12/gravity-project.html' title='The Gravity project'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-2375964139071926178</id><published>2011-12-15T00:30:00.000-05:00</published><updated>2011-12-15T00:30:36.604-05:00</updated><title type='text'>Apple and the Paradox of Choice</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/cM2YJV-7/paradox-of-choice.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:right; float:right; margin-left:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;258&quot; width=&quot;300&quot; src=&quot;http://f.markbartel.ca/cM2YJV-7/paradox-of-choice.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I have a confession to make.  I read &lt;a href=&quot;http://daringfireball.net&quot;&gt;Daring Fireball&lt;/a&gt;.  I find that if you tune out the Apple bias, Gruber does provide some interesting information.&lt;/p&gt;

&lt;p&gt;For example, earlier today he &lt;a href=&quot;http://daringfireball.net/linked/2011/12/14/barry-schwartz&quot;&gt;posted a link&lt;/a&gt; to &lt;a href=&quot;http://www.ted.com/talks/barry_schwartz_on_the_paradox_of_choice.html&quot;&gt;Barry Schwartz&#39;s TED talk on the paradox of choice&lt;/a&gt;.  I had already seen it, but it is a great presentation and was a good reminder that more choice is not an unambiguous good.&lt;/p&gt;

&lt;p&gt;The interesting bit is that later in the day Gruber posted a bit &lt;a href=&quot;http://daringfireball.net/linked/2011/12/14/galaxy-nexus&quot;&gt;questioning why nobody lines up for new Android phones like they do for new iPhones&lt;/a&gt;.  I think one large part of the answer is simply the paradox of choice.  One implication of the paradox of choice is that on average the level of happiness with an Android phone will be lower than that with an iPhone, &lt;i&gt;even if all other things are equal&lt;/i&gt;, because the Apple user doesn&#39;t have to second-guess whether maybe they could have bought a better iPhone.&lt;/p&gt;

&lt;p&gt;I&#39;m not saying that&#39;s the only factor, but I found it interesting to see Gruber put the two items so close together without noting the applicability of one to the other.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/2375964139071926178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/12/apple-and-paradox-of-choice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/2375964139071926178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/2375964139071926178'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/12/apple-and-paradox-of-choice.html' title='Apple and the Paradox of Choice'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-284497477087064338</id><published>2011-12-11T21:00:00.000-05:00</published><updated>2011-12-13T23:00:29.787-05:00</updated><title type='text'>The Google garden</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/SrpwmFnp/garden.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:right; float:right; margin-left:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;333&quot; width=&quot;250&quot; src=&quot;http://f.markbartel.ca/SrpwmFnp/garden.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;



&lt;p&gt;I bought a book via Google&#39;s Android Market the other night.  It was not what I&#39;d originally intended to do.&lt;/p&gt;

&lt;p&gt;I wasn&#39;t tired but I was in pain; I&#39;d picked up my five-year old the wrong way (they just keep growing!) and hurt my back.  So I figured I&#39;d just read a novel since I couldn&#39;t concentrate, but I didn&#39;t have any that I hadn&#39;t read.  Hmm, ok, eBooks are generally outrageously priced but if I bought one I could read it &lt;b&gt;right now&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;First, I looked for interesting books in the Kobo application that came preinstalled on my Android phone.  I couldn&#39;t find anything I wanted to read there, so I went to the Android store to get the Kindle reader, to see if there was anything from Amazon I was interested in.  But of course once in the Android Market application there was this Books tab... so naturally I looked there.  I found a book that I was interested in and bought it.  Never got to the Kindle app.&lt;/p&gt;

&lt;p&gt;Now, I bought it on my phone, but I was sitting in front of my laptop as I was doing it.  I wasn&#39;t buying it on my phone because I wanted to read it on my phone at that particular moment, but rather just because I did want to be able to read it on my phone later if I needed to.  So to figure out how to read this book I just bought, I typed in a quick query on my laptop, and up comes the Google books site and since I&#39;m logged in, there&#39;s my book.  So I never did read it on my phone.&lt;/p&gt;

&lt;p&gt;I find this impulse buy sequence interesting because:

&lt;ol&gt;
&lt;li&gt;When I started I had no thought of buying the book from the Android Market (I&#39;d forgotten that Google was selling books), and&lt;/li&gt;
&lt;li&gt;when I switched to my laptop I had no intention of reading the book on my laptop (I didn&#39;t know it was possible).&lt;/li&gt;
&lt;/ol&gt;

I&#39;ve long thought that the ubiquity of Google allows them to enter markets where the barrier to entry is high.  To me this is an example of that, both in that Google controls the Android Market and therefore can feature whatever they want there, and in that since I use other Google services and was therefore logged in, finding my book on my laptop was a matter of seconds despite the fact that I didn&#39;t even know I could do that.  I managed to accidentally discover both Google services in minutes in the path of least resistance.  While I wasn&#39;t even thinking about buying from Google in the beginning, in the end I&#39;m happy I did because I now know that I can read the books I buy there in any browser just by logging into my Google account.  I can be at another location without my own computer and still be able to do so.&lt;/p&gt;

&lt;p&gt;I believe this ubiquity could allow Google to succeed with Google+ despite the daunting head-start that Facebook has:  people will end up in Google+ by accident, and some will start to use it despite not having originally intended to do so.  This plus the network effect could grow Google+ to critical mass if Google sticks it out.&lt;/p&gt;

&lt;p&gt;Some people argue that Google&#39;s just trying to build a Walled Garden like Apple.  I don&#39;t agree.  Certainly they have a big garden, and that contributed to the fact that in the end I bought from Google rather than Kobo or Amazon, but I don&#39;t see the walls.  I don&#39;t have to have Google hardware to read the book, I don&#39;t even have to have Android, the only thing I need is to have is a web browser.&lt;/p&gt;

&lt;p&gt;With respect to Google+ versus Facebook, well, I trust Google to be &lt;a href=&quot;https://www.eff.org/deeplinks/2011/08/iranian-man-middle-attack-against-google&quot;&gt;more&lt;/a&gt; &lt;a href=&quot;http://www.darkreading.com/security/attacks-breaches/231903423/researchers-seven-annoying-attacks-that-facebook-misses.html&quot;&gt;secure&lt;/a&gt; and certainly hope that they&#39;ll be &lt;a href=&quot;http://www.huffingtonpost.com/spencer-green/new-facebook-changes-incl_b_973693.html&quot;&gt;less random&lt;/a&gt;.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/284497477087064338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/12/google-garden.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/284497477087064338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/284497477087064338'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/12/google-garden.html' title='The Google garden'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-2306854509715863043</id><published>2011-11-28T00:42:00.000-05:00</published><updated>2011-11-28T00:42:42.852-05:00</updated><title type='text'>Reboot!</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://f.markbartel.ca/iFD1jPY7/power.png&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;119&quot; width=&quot;114&quot; src=&quot;http://f.markbartel.ca/iFD1jPY7/power.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;I&#39;m back, and the blog has a new name:  Assume the Opposite.&lt;/p&gt;

&lt;p&gt;It&#39;s been a long time since I&#39;ve written anything here, primarily due to the lack of comment support in the home-grown solution I was using:  I wanted feedback!  As time passed it became clear that I wasn&#39;t going to get around to adding comment support any time soon so it was time to find an alternative platform.  So after much fiddling with DNS and Blogger here we are.&lt;/p&gt;

&lt;p&gt;Why “Assume the Opposite”?  &lt;a href=&quot;http://en.wikipedia.org/wiki/Proof_by_contradiction&quot;&gt;Proof by Contradiction&lt;/a&gt; is a standard mathematical technique where you assume the opposite of a hypothesis and follow the ramifications until you reach a contradiction.  If you reach a contradiction, you have proven that your original hypothesis is true.&lt;/p&gt;

&lt;p&gt;However, an inability to find a contradiction can also be illuminating.  A classic example of this is Euclid&#39;s Fifth Postulate:  for two thousand years mathematicians tried to prove that it could be derived from the other four postulates, or convinced themselves that they had derived it via other &quot;simpler&quot; postulates.  It wasn&#39;t until 1830 that two mathematicians independently assumed that it was false and found that you could build a completely consistent geometry around that assumption (now called Bolyai-Lobachevskian geometry after those mathematicians).  Einstein&#39;s general theory of relativity, which thus far seems to describe the universe well, postulates that space is curved and therefore Euclid&#39;s Fifth Postulate does not accurately describe the world we live in.&lt;/p&gt;

&lt;p&gt;Now, computer science (and technology in general) &lt;b&gt;is not mathematics&lt;/b&gt;:  computer programs exist to enable the end users to Get Something Done, and computer source code is consumed as literature by programmers in addition to being evaluated deterministically by a computer.  Nonetheless, I find assuming the opposite of my beliefs to be useful tool, not to prove them true, but rather to prove them false.  Agile methodology exhorts us to Do the Simplest Thing Possible.  When I find myself thinking “We&#39;ll definitely need X” (for example, we&#39;ll need a relational database), assuming the opposite, exploring where the issues might lie if we didn&#39;t have X, frequently leads to greater simplicity.  Perhaps we don&#39;t really need X (a simple file would do), or we only need a particular aspect of X (a NoSQL database would work).&lt;/p&gt;

&lt;p&gt;Question received wisdom.  Assume the opposite, and see if it leads to simplicity instead of trouble.&lt;/p&gt;

&lt;p style=&quot;font-size: 75%&quot;&gt;P.S.  I was tempted to use a purple cube for the picture but decided it would just confuse most people.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/2306854509715863043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/11/reboot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/2306854509715863043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/2306854509715863043'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/11/reboot.html' title='Reboot!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-1447041140984148429</id><published>2010-03-15T22:58:00.000-04:00</published><updated>2012-06-30T18:14:21.551-04:00</updated><title type='text'>Gitosis Remote Repository Cheat Sheet</title><content type='html'>&lt;p&gt;I&#39;ve found myself looking up how to do various operations on remote gitosis repositories recently, so I decided to create myself a cheat sheet. My remote repositories are on Debian systems, so the users and other configuration options are those that you get when you do a stock install of gitosis on a Debian system. Most of this is shamelessly stolen from Garry Dolley&#39;s &lt;a href=&quot;http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way&quot;&gt;“Hosting Git repositories, The Easy (and Secure) Way”&lt;/a&gt; with slight adaptations for the Debian differences. The idea is to cover the specific commands you need to deal with Debian remote gitosis repositories. This intentially doesn&#39;t cover anything that you can figure out from just doing “man git” and digging in.&lt;/p&gt;

&lt;h2&gt;Creating a new local repository from a remote repository&lt;/h2&gt;

&lt;p&gt;There is a remote repository that you don&#39;t have locally, and you want to get a copy to work on.&lt;/p&gt;

&lt;pre style=&quot;padding-left: 20px&quot;&gt;git clone gitosis@&amp;lt;server&gt;:&amp;lt;repository&gt;.git
cd &amp;lt;repository&gt;&lt;/pre&gt;

&lt;p&gt;Note that the admin repository is gitosis-admin.&lt;/p&gt;

&lt;h2&gt;Setting up the remote origin on a new (non-clone) local repository&lt;/h2&gt;

&lt;p&gt;You are creating a new repository on the remote server. You have edited the gitosis-admin configuration files appropriately and pushed the changes, and performed&lt;/p&gt;

&lt;pre style=&quot;padding-left: 20px&quot;&gt;git init&lt;/pre&gt;

&lt;p&gt;on the local directory to create a new local repository, but the remote and local repositories are not yet connected.&lt;/p&gt;

&lt;pre style=&quot;padding-left: 20px&quot;&gt;git remote add origin gitosis@&amp;lt;server&gt;:&amp;lt;repository&gt;.git&lt;/pre&gt;

&lt;h2&gt;Pushing a new local repository to the remote repository for the first time&lt;/h2&gt;

&lt;p&gt;I must admit this command seems more complicated than it should need to be. But at least you only need to do this once per repository.&lt;/p&gt;

&lt;pre style=&quot;padding-left: 20px&quot;&gt;git push origin master:refs/heads/master&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;Updated 2012-07-30:&lt;/b&gt; yes, it is too complicated.  For some time I&#39;ve been using this shorter version:&lt;/p&gt;

&lt;pre style=&quot;padding-left: 20px&quot;&gt;git push origin master&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/1447041140984148429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2011/11/gitosis-remote-repository-cheat-sheet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/1447041140984148429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/1447041140984148429'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2011/11/gitosis-remote-repository-cheat-sheet.html' title='Gitosis Remote Repository Cheat Sheet'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-7503246830489088688</id><published>2010-03-14T23:06:00.000-04:00</published><updated>2011-11-24T00:19:19.871-05:00</updated><title type='text'>Understanding ApplicationDomains</title><content type='html'>&lt;p&gt;I&#39;ve been explaining how ApplicationDomains work in ActionScript frequently in recent days, so I&#39;d&lt;br /&gt;
thought I&#39;d put down an explanation here.&lt;/p&gt;

&lt;p&gt;ApplicationDomains contain ActionScript class definitions.&lt;sup style=&quot;font-size: 80%&quot;&gt;&lt;a href=&quot;#N65610&quot; title=&quot;Technically, all varieties of ActionScript definitions are looked up via ApplicationDomains, not just class definitions.&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;   The rules for ApplicationDomains are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Every ApplicationDomain except for the system ApplicationDomain has a parent ApplicationDomain, so ApplicationDomains form a tree structure.&lt;/li&gt;
&lt;li&gt;Definitions in parent ApplicationDomains are used over definitions in child ApplicationDomains.&lt;/li&gt;
&lt;li&gt;In a particular ApplicationDomain, the “first definition in” is used.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Flash runtime has a special ApplicationDomain called the System ApplicationDomain, and it is special for two reasons: it contains all the definitions that are built into the Flash runtime, and it is the only ApplicationDomain that doesn’t have a parent. All other ApplicationDomains are descendants of the system ApplicationDomain. This means that the classes that are built-in to the Flash runtime will always win over classes defined in swf files loaded by the runtime.&lt;/p&gt;

&lt;p&gt;When a swf is loaded, all the class definitions go into a particular ApplicationDomain. For the main&lt;sup style=&quot;font-size: 80%&quot;&gt;&lt;a href=&quot;#N65637&quot; title=&quot;The swf referenced in the &amp;lt;object&amp;gt; tag of the html wrapper for a web application or the swf specified in the &amp;lt;content&amp;gt; tag of the application descriptor for an Air application.&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;  swf of an application, the Flash runtime creates a new ApplicationDomain that is a child of the system ApplicationDomain. When the application loads other swfs, it can choose the ApplicationDomain that the swf will be loaded into.&lt;/p&gt;

&lt;p&gt;Ok, too many words, time for a demo:&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;260&quot; src=&quot;http://s.markbartel.ca.s3.amazonaws.com/blog/2010/03/b/understanding-applicationdomains/frame.html&quot; style=&quot;border: none&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;This application visually shows how ApplicationDomains affect which version of a class is instantiated, when there are multiple versions of a class present. The tree shown corresponds to the ApplicationDomain hierarchy created by this application: each ellipse corresponds to an ApplicationDomain. When you hover over an ellipse, six small coloured ellipses appear, corresponding to one of six different swfs. Clicking on a small ellipse will load the swf corresponding to the small ellipse into the ApplicationDomain corresponding to the large ellipse, drawing an instance of the class on that large ellipse. The six swfs all contain the same Ellipse class, but each version draws the ellipse in a different colour. This is the ellipse class:&lt;/p&gt;

&lt;div style=&quot;padding-left: 20px&quot;&gt;
&lt;pre style=&quot;font-size: 80%&quot;&gt;&lt;span class=&quot;ActionScriptpackage&quot;&gt;package&lt;/span&gt;
&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;ActionScriptReserved&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;flash&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Sprite&lt;/span&gt;;
    &lt;span class=&quot;ActionScriptReserved&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;flash&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Event&lt;/span&gt;;

    &lt;span class=&quot;ActionScriptReserved&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;ActionScriptclass&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Ellipse&lt;/span&gt; &lt;span class=&quot;ActionScriptReserved&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Sprite&lt;/span&gt;
    &lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;ActionScriptReserved&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;ActionScriptfunction&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Ellipse&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;ADDED_TO_STAGE&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;addedToStageHandler&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;;
        &lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;}&lt;/span&gt;
        
        &lt;span class=&quot;ActionScriptReserved&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;ActionScriptfunction&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;addedToStageHandler&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;event&lt;/span&gt;:&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;:&lt;span class=&quot;ActionScriptReserved&quot;&gt;void&lt;/span&gt;
        &lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;removeEventListener&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;ADDED_TO_STAGE&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;addedToStageHandler&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;;
            &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;graphics&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;lineStyle&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;1&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;;
            &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;graphics&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;beginFill&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;ELLIPSE&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;COLOUR&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;;
            &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;graphics&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;drawEllipse&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;0&lt;span class=&quot;ActionScriptOperator&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;ActionScriptOperator&quot;&gt;,&lt;/span&gt; 50&lt;span class=&quot;ActionScriptOperator&quot;&gt;,&lt;/span&gt; 25&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;;
            &lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;graphics&lt;/span&gt;&lt;span class=&quot;ActionScriptOperator&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;ActionScriptDefault_Text&quot;&gt;endFill&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;)&lt;/span&gt;;
        &lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;ActionScriptBracket/Brace&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The important part to note is the ELLIPSE::COLOUR constant. We create six different versions of this class by simply compiling the class six times, defining the constant differently each time:&lt;/p&gt;

&lt;div style=&quot;padding-left: 20px&quot;&gt;
&lt;pre style=&quot;font-size: 80%&quot;&gt;mxmlc -define=ELLIPSE::COLOUR,0xff0000 -default-size 50 25 -o=ellipse-r.swf Ellipse.as
mxmlc -define=ELLIPSE::COLOUR,0x00ff00 -default-size 50 25 -o=ellipse-g.swf Ellipse.as
mxmlc -define=ELLIPSE::COLOUR,0x0000ff -default-size 50 25 -o=ellipse-b.swf Ellipse.as
mxmlc -define=ELLIPSE::COLOUR,0x00ffff -default-size 50 25 -o=ellipse-c.swf Ellipse.as
mxmlc -define=ELLIPSE::COLOUR,0xff00ff -default-size 50 25 -o=ellipse-m.swf Ellipse.as
mxmlc -define=ELLIPSE::COLOUR,0xffff00 -default-size 50 25 -o=ellipse-y.swf Ellipse.as
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;So to see the rules mentioned at the start in action, click the yellow ellipse in ApplicationDomain 111. That ellipse will turn yellow, because ellipse-y.swf, containing the yellow version of Ellipse, was loaded into ApplicationDomain 111 and an instance of Ellipse was created in that ApplicationDomain and drawn on the large ellipse. Then click the red ellipse in ApplicationDomain 1; this will load ellipse-r.swf into ApplicationDomain 1 and draw an instance from that ApplicationDomain on that ellipse. Click the small yellow ellipse (or any other ellipse) in ApplicationDomain 112 and it will turn red. Why? Since the red version of Ellipse was loaded into an ancestor domain, the new instantiations of Ellipse in ApplicationDomain 112 will be of the red version and any Ellipse versions loaded into ApplicationDomain 112 will be ignored.&lt;/p&gt;

&lt;p&gt;To compile the main application from &lt;a href=&quot;http://s.markbartel.ca.s3.amazonaws.com/blog/2010/03/b/understanding-applicationdomains/source.html&quot; shape=&quot;rect&quot;&gt;source&lt;/a&gt;:&lt;/p&gt;

&lt;div style=&quot;padding-left: 20px&quot;&gt;
&lt;pre style=&quot;font-size: 80%&quot;&gt;mxmlc -o=ad-example.swf ApplicationDomainExample.as
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;I compiled these examples with the Flex 3.5 SDK.&lt;/p&gt;

&lt;hr/&gt;
&lt;ol style=&quot;font-size: 80%&quot;&gt;
&lt;li id=&quot;N65610&quot;&gt;Technically, all varieties of ActionScript definitions are looked up via ApplicationDomains, not just class definitions.&lt;/li&gt;
&lt;li id=&quot;N65637&quot;&gt;The swf referenced in the &amp;lt;object&amp;gt; tag of the html wrapper for a web application or the swf specified in the &amp;lt;content&amp;gt; tag of the application descriptor for an Air application.&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/7503246830489088688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2010/03/understanding-applicationdomains.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/7503246830489088688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/7503246830489088688'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2010/03/understanding-applicationdomains.html' title='Understanding ApplicationDomains'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-6161142994604884674</id><published>2010-03-11T23:01:00.000-05:00</published><updated>2011-11-22T01:03:10.025-05:00</updated><title type='text'>Thawte Privacy Breach?</title><content type='html'>I just received a snail mail notice from Thawte indicating that I have certificates that are up for renewal. Now, I do have certificates from Thawte, so I assumed that the notice was about one of those... but I was thinking, I don&#39;t have any certificates expiring soon, do I?&lt;br /&gt;
&lt;br /&gt;
Then I opened the letter. It did, indeed, indicate that two web server certificates, specified by domain name and order number, were up for renewal in April and May. But they aren&#39;t my domains. If I were a malicious person, I could probably contact Thawte and, armed with the domain name, order number, certificate type, and expiry date, get access to mess with the accounts: change the password, get the certificate revoked, etc.&lt;br /&gt;
&lt;br /&gt;
And of course, having received information for other people, I have to wonder, who has received mine?</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/6161142994604884674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2010/03/thawte-privacy-breach.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/6161142994604884674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/6161142994604884674'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2010/03/thawte-privacy-breach.html' title='Thawte Privacy Breach?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130825122607711418.post-5625476343224402171</id><published>2010-02-28T16:23:00.000-05:00</published><updated>2011-11-22T00:59:58.219-05:00</updated><title type='text'>Hello World</title><content type='html'>Following the long geek tradition of self-referential names, I was tempted to call this blog Yet Another Technology Blog. But that&#39;s been done to death and YATB isn&#39;t particularly pronounceable.&lt;br /&gt;
&lt;br /&gt;
And then I thought about calling it Mark&#39;s Standards, Technology, Unknowns, Practicalities, Innovation, and Design blog. That&#39;s quite a mouthful, but it can conveniently be abbreviated to “Mark&#39;s STUPID blog”. But that doesn&#39;t work because I fully expect that some of my entries will be beyond STUPID. At least in retrospect.&lt;br /&gt;
&lt;br /&gt;
Finally I realized that my topics frequently come from someone popping their head through my door with “Uhm, Mark?”, and so the title of this blog was born.&lt;br /&gt;
&lt;br /&gt;
In this blog I&#39;ll talk about, well, whatever I feel like, but it will mostly be technology-centric, from the social aspects of technology consumption and production to design and coding.</content><link rel='replies' type='application/atom+xml' href='http://www.markbartel.ca/feeds/5625476343224402171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.markbartel.ca/2010/02/hello-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5625476343224402171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130825122607711418/posts/default/5625476343224402171'/><link rel='alternate' type='text/html' href='http://www.markbartel.ca/2010/02/hello-world.html' title='Hello World'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>