<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>opgenorth.net</title>
    <description>Mindless missives of a programmer from the North. Sometimes programming, sometimes other things, sometimes interesting.
</description>
    <link>http://opgenorth.net/</link>
    <atom:link href="http://opgenorth.net/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 21 Jun 2021 03:20:07 +0000</pubDate>
    <lastBuildDate>Mon, 21 Jun 2021 03:20:07 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>.22LR Ammo Evaluation - Sterling Cross</title>
        <description>&lt;p&gt;Over the past couple of years there has been a surge of interest in .22 Rimfire in Canada (at least from my perspective). Arguably, it could be traced to the start of &lt;a href=&quot;http://www.mapleseedrifleman.com&quot;&gt;Project Mapleseed&lt;/a&gt; back in 2017, which then spawned the &lt;a href=&quot;https://rimfireprecision.ca&quot;&gt;Canadian Rimfire Precision Series&lt;/a&gt; in 2018, and now this year the &lt;a href=&quot;https://outlawrimfire.com&quot;&gt;Outlaw Rimfire Precision Series&lt;/a&gt;. My friends south of the border have &lt;a href=&quot;https://appleseedinfo.org&quot;&gt;Project Appleseed&lt;/a&gt; and the &lt;a href=&quot;https://nrl-22.org&quot;&gt;National Rimfire League&lt;/a&gt;. As you can see, plenty of opportunity to participate/compete with the humble .22LR cartridge.&lt;/p&gt;

&lt;p&gt;Prior to this I had always assumed that all .22LR ammunition was the same - it didn’t matter what brand you used they all performed the same. I’ve come to learn that this isn’t the truth. Much like their centre-fire big brothers, .22LR rifles have their own personalities and will shoot better with some brands of ammo than other. Don’t assume that the cheap ammo will always shoot poorly in a given rifle. Likewise, it’s entirely possible that expensive match grade ammo will perform poorly in your rifle. The best method (and probably the most fun) is to try out different brands and see what works best.&lt;/p&gt;

&lt;p&gt;The first brand of .22LR I decided to check out was from &lt;a href=&quot;http://www.sterling-cross.com&quot;&gt;Sterling Cross&lt;/a&gt;. This is available from &lt;a href=&quot;https://www.canadaammo.com/&quot;&gt;Canada Ammo&lt;/a&gt;. In went to my indoor range at 40 yards with a brick and fired a few groups to see how it performed. The rifle in question was a stock &lt;a href=&quot;https://www.remington.com/rifles/rimfire/model-597&quot;&gt;Remington Model 597&lt;/a&gt; and a &lt;a href=&quot;https://www.bushnell.com/products/riflescopes/ar-optics/ar-optics-riflescopes-2-7x36/&quot;&gt;Bushnell AR-22&lt;/a&gt; (the older version). The ammunition seemed to group okay:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/22LR-evaluation/sterling-cross-group.jpg&quot; alt=&quot;Sterling Cross .22LR group&quot; /&gt;&lt;/p&gt;

&lt;p&gt;However, there is very little ballistic information available for this brand of .22LR. The box has the muzzle velocity printed on the outside as 1130fps, and that is about it.  I wanted a bit more information so that I could build a drop-chart, and so I went to an outdoor range with a chronograph to do some testing at 50m.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/22LR-evaluation/chrony-setup.jpg&quot; alt=&quot;Shooting bench at the range&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ballistic nerds will appreciate that environmental conditions have a significant impact on ammunition and the calculation of the BC. Here is the environmental information that I recorded on that day:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt; &lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Imperial&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Metric&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Altitude:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2490 feet&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;758 metres&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Temperature:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;59 F&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15 C&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Air Pressure:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;  26.961 inHg&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;913 mb&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Humidity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;51%&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;—&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The wind was pretty brutal.  It was typically about 5mph with prolonged gusts around 10mph.  The highest wind I observed was 22mph. In general, the wind seemed to come in from about the 10:30 to 11:00 direction.&lt;/p&gt;

&lt;p&gt;I gathered some velocity measurements on about 40 rounds I fired.  My chorograph captured the velocity of the projectiles at several points between  0 to 50 yards.  (Yes, I know I’m mixing systems of measure here; it’s an imperfect world but at least I’m not making you do to the math). Without boring you on the velocities that were recorded, here’s what I observed:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt; &lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Imperial&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Metric&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Average Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1103 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;336 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Highest Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1155 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;352 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Lowest Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1014 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;309 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Extreme Spread:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;140 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.7 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Std. Dev:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.5 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.16 m/s&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Punching all the above values into the online &lt;a href=&quot;http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi&quot;&gt;JBM BC calculator&lt;/a&gt;, and we arrive at the following two BC values:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;BC Model&lt;/th&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;Value&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;G1&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0.140&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;G7&lt;/td&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;0.074&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The .22 projectile seems more like the G1 reference projectile, so I stuck with that value to calculate a drop chart.  I did this once with &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.borisov.strelokpro&quot;&gt;Strelok Pro&lt;/a&gt;, and then again with &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.appliedballisticsllc.appliedballistics&quot;&gt;Applied Ballistics&lt;/a&gt;.  Here’s the results (in MOA) for my rifle:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Metres&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;   Strelok &lt;br /&gt; Pro&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;     Applied&lt;br /&gt; Ballistics&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;- 0.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;- 1.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;-0.75&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;0.00&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+ 3.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+ 3.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+ 7.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+ 7.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;125&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+11.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+11.50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;150&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+16.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+16.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;175&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+21.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+21.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;200&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+26.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+26.75&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;225&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+32.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+32.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;250&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+37.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+38.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;275&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+43.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+44.50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;300&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+50.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+50.75&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;325&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+56.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;+57.25&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;It’s comforting to me that Strelok and Applied Ballistics have very similar values (theortical they may be). The next step for me is to head out and actually test these values in the Real World at 100m, 150m, 200m, and (time permitting) 300m.&lt;/p&gt;
</description>
        <pubDate>Fri, 26 Apr 2019 14:39:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2019/04/26/22LR-ammo-sterling-cross/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2019/04/26/22LR-ammo-sterling-cross/</guid>
        
        
        <category>.22LR</category>
        
        <category>Firearms</category>
        
        <category>ballistics</category>
        
      </item>
    
      <item>
        <title>Reforming Brass: From One Cartridge to Another</title>
        <description>&lt;p&gt;The 8mm Mauser (7.92x57mm) round, in it’s current incarnation, has been around since 1903. It is a improvement of the original 7.92x57mm cartridge that was developed in 1888 by Peter Paul Mauser.  Arguably, 8mm Mauser has been one of the world’s most popular cartridges, having seen significant military and civilian use over the past 100+ year. It also influenced the design of many of today’s cartridges, such as .30-06.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2018-09-28-reforming-brass-for-8mm/01.png&quot; alt=&quot;8mm Mauser cartridges&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finding good 8mm Mauser ammunition (in Canada at least) is becoming harder. The glut of military surplus rifles and ammunition for this cartridge is long over, and there are more modern cartridges which have gained a significant following.&lt;/p&gt;

&lt;p&gt;The solution to the scarcity of 8mm Mauser is to hand load your own ammunition. Generally speaking all of the components necessary for reloading 8mm Mauser are common enough that a competent hand loader need not worry about having a supply of 8mm Mauser on hand.&lt;/p&gt;

&lt;p&gt;Lately this seems to have changed (in Canada at least).  The availability of 8mm Mauser brass seems to be drying up – it’s hard to find on the range (leftover by those who do shoot this cartridge), and buying commercial brass can be expensive.&lt;/p&gt;

&lt;p&gt;One option available to the hand loader is to reform brass from another cartridge to 8mm Mauser. Note that while I’m talking about 8mm Mauser, these principles can apply to pretty much any cartridge; for example reforming .223 brass to 300BLK.&lt;/p&gt;

&lt;h1 id=&quot;reforming-brass&quot;&gt;Reforming Brass&lt;/h1&gt;

&lt;p&gt;Forming brass isn’t as bad as it sounds. Brass is a soft metal, and can be easily shaped without using to much specialized equipment or force. Not all brass cartridges can be reformed to 8mm Mauser. As a general rule of thumb, anything that is a derivative of 8mm Mauser and is as long or longer that the 8mm Mauser case can be reformed. A good example would be .30-06 Springfield or .270 Winchester. Both are very common hunting cartridges in North America.&lt;/p&gt;

&lt;p&gt;This picture shows the brass and reloading dies that I use to reform:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2018-09-28-reforming-brass-for-8mm/05.png&quot; alt=&quot;Reforming .270 Winchester to 8mm Mauser&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From left to right:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Original .270 Winchester brass.&lt;/li&gt;
  &lt;li&gt;Redding Form &amp;amp; Trim die for 8mm Mauser.&lt;/li&gt;
  &lt;li&gt;.270 Winchester after the reforming die.&lt;/li&gt;
  &lt;li&gt;Reformed .270 Winchester, after a rough cut to remove excess material.&lt;/li&gt;
  &lt;li&gt;8mm Mauser full length resizing die.&lt;/li&gt;
  &lt;li&gt;Reformed .270 Winchester brass, after full length resizing.&lt;/li&gt;
  &lt;li&gt;New piece of 8mm Mauser brass: trimmed to 2.230”, chamfered, deburred, and annealled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;collecting-tools-and-components&quot;&gt;Collecting tools and components&lt;/h2&gt;

&lt;p&gt;The first step is to collect the  necessary materials and tools. In my case I gathered up:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A bunch of .270 Winchester brass, donated to me by a fellow at the range who had the foresight to collect his brass and the generosity to give it to me.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.cabelas.ca/product/3565/lee-resizing-lubricant&quot;&gt;Lee Precision Resizing Lube&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.brownells.com/reloading/reloading-dies/rifle-dies/trim-dies-prod34753.aspx&quot;&gt;Redding Form and Trim Die&lt;/a&gt; for 8mm Mauser (SKU 749-003-765WB). RCBS also makes trim die. Some people will just run their brass through a full length resizing die. I this case, I opted to use a reforming die.&lt;/li&gt;
  &lt;li&gt;Hack saw.&lt;/li&gt;
  &lt;li&gt;8mm Mauser full length resizing die.&lt;/li&gt;
  &lt;li&gt;Tools to trim, chamfer, and deburr brass.&lt;/li&gt;
  &lt;li&gt;A good friend who knows how to anneal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-process&quot;&gt;The process&lt;/h2&gt;

&lt;p&gt;Once I had everything, it was necessary to prep the brass. I tumbled it to clean it up, and then lubed each case. So far, nothing different for reloading any metallic cartridge.&lt;/p&gt;

&lt;p&gt;I took each piece of brass, and ran it through the reforming die.  I didn’t lower the ram of the reloading press immediately, I left it up:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2018-09-28-reforming-brass-for-8mm/03.png&quot; alt=&quot;Cartridge in the die&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With the ram all the way up, I used my trusty hacksaw to trim away the excess material from the case:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2018-09-28-reforming-brass-for-8mm/04.png&quot; alt=&quot;Cutting off the excess brass&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After performing this rough cut on each piece of brass, I’d lower the ram, take the brass out, and quicking inspect the mouth of the case to make sure there weren’t any significant burrs around the mouth of the cartridge. Any burrs should be removed before proceeding on to the next step.&lt;/p&gt;

&lt;p&gt;After reforming and making the rough cut, I pressed the brass through my full length resizing die. I didn’t find it necessary to lube the case a second time. Note that if there are excessive burrs on the case of the mouth, the full length sizer may mangle the piece of brass, rendering it useless.&lt;/p&gt;

&lt;p&gt;Finally I would trim the brass to the SAAMI spec for 8mm Mauser, and then deburr it. It is recommended to trim the case to 2.230”, and the maximum length of the case must not exceed 2.240”.  This diagram shows the SAAMI spec for 7.92x57mm (dimensions are in millimetres):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2018-09-28-reforming-brass-for-8mm/02.png&quot; alt=&quot;SAAMI spec for 8mm Mauser&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Afterwards, I had the brass &lt;a href=&quot;http://www.massreloading.com/annealing.html&quot;&gt;annealled&lt;/a&gt;. This is necessary because the steps involved with reforming and resizing the brass will result in it being “work hardened”. This means that the brass has become brittle and hard as a result of the forces being used to reshape it. The case necks will quickly crack due to the pressure generated when the cartridge is fired.&lt;/p&gt;

&lt;p&gt;At this point, I can have prepped brass, ready for the process of being primed, charged with gunpowder, and being topped off with a projectile.&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Oct 2018 14:39:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2018/10/01/reforming-brass-for-8mm/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2018/10/01/reforming-brass-for-8mm/</guid>
        
        
        <category>Reloading</category>
        
        <category>Firearms</category>
        
      </item>
    
      <item>
        <title>Ballistics of the Norinco 7.62x51</title>
        <description>&lt;p&gt;After an amateur attempt at trying to calculate the &lt;a href=&quot;/blog/2017/05/07/norinco-762x39-ballistics/&quot;&gt;BC of the Norinco 7.62x39mm&lt;/a&gt; ammunition, I thought I would do the same thing with Norinco’s 7.62x51mm ammo. As one would expect, this stuff is fairly inexpensive as well, running aroun $0.50/round. I don’t think this is “precision ammo”, but it works well enough in my M-305 rifle.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/Norc76251.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;First off, I pulled one bullet apart, and weight it. The projecticle itself weight 146.1 grains, so I guess this is supposed to be 147gr ammo. I measured ~ 42.0 grains of “mystery gun powder”.&lt;/p&gt;

&lt;p&gt;First some environmental data that I recorded while I was at the range (or looked up on Google Maps) earlier this week:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt; &lt;/th&gt;
      &lt;th&gt;Imperial&lt;/th&gt;
      &lt;th&gt;Metric&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Altitude:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;2490 feet&lt;/td&gt;
      &lt;td&gt;758 metres&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Temperature:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;47 F&lt;/td&gt;
      &lt;td&gt;8 C&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Air Pressure:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;27.07899 inHg&lt;/td&gt;
      &lt;td&gt;917 mb&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Humidity:&lt;/strong&gt; 77%&lt;/p&gt;

&lt;p&gt;Next, after firing 19 (well, it was 20, but only 19 shots were recorded by my chronograph) rounds through my M-305, I collected the following information:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt; &lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Imperial&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Metric&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Average Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2670 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;814 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Highest Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2731 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;832 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Lowest Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2621 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;799 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Extreme Spread:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;109 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.1 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Std. Dev:&lt;/strong&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27 fps&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.34 m/s&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;I’ll omit the velocities from the flight of the bullet, we’ve got enough boring numbers. So running these numbers through the &lt;a href=&quot;http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi&quot;&gt;JBM BC calculator&lt;/a&gt; and we get the following two BC values:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;BC Model&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;Value&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;G1&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;0.351&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;G7&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;0.176&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

</description>
        <pubDate>Tue, 16 May 2017 00:14:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2017/05/16/norinco-762x51-ballistics/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2017/05/16/norinco-762x51-ballistics/</guid>
        
        
        <category>Firearms</category>
        
        <category>ballistics</category>
        
      </item>
    
      <item>
        <title>Ballistics of the Norinco 7.62x39</title>
        <description>&lt;p&gt;On of the great things about 7.62x39mm rifles (like the SKS) is that (for the time being) ammo is fairly inexpensive. A fellow who keeps his eye open for a deal can find 7.62x39mm in the range of $0.16CAD (for corrosive) to $0.30CAD (for non-corrosive) ammo. Of course being surplus ammo, finding ballistics data on this ammunition can be a bit of a trick. Granted, the 7.62x39 cartridge isn’t exactly a “precision” round, but intellectual curiousity had me wondering what the ballistic coefficient (BC) of this Norinco ammo was.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/762x39_round.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Given the right inputs, it is possible to calculate the BC for a given round. The tricky thing is that you need the velocity of the projectile at two points along the path of the bullet. This requirement makes it somewhat difficult (if not impossible) for the layman to perform his own amateur calculations.&lt;/p&gt;

&lt;p&gt;Luckily, technology has improved a bit, and now the &lt;a href=&quot;http://mylabradar.com/&quot;&gt;tools are available&lt;/a&gt; to track the velocity of a projectile. So, what does a middle-age guy do on a Friday night? Why he analyzes the data from his previous trip to the range and tries to figure out what the BC of this surplus ammo is.&lt;/p&gt;

&lt;p&gt;(For the curious, I used the &lt;a href=&quot;http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi&quot;&gt;BC Calculator&lt;/a&gt; available from &lt;a href=&quot;http://www.jbmballistics.com&quot;&gt;JBM Ballistics website&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;First some environmental data that I recorded while I was at the range (or looked up on Google Maps) earlier this week:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt; &lt;/th&gt;
      &lt;th&gt;Imperial&lt;/th&gt;
      &lt;th&gt;Metric&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Altitude:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;2490 feet&lt;/td&gt;
      &lt;td&gt;758 metres&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Temperature:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;61 F&lt;/td&gt;
      &lt;td&gt;16 C&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Air Pressure:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;29.58 inHg&lt;/td&gt;
      &lt;td&gt;1001.6 mb&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Humidity:&lt;/strong&gt; 31%&lt;/p&gt;

&lt;p&gt;Next, after firing 20 rounds through my SKS, here is the ballistic data from the rounds that were discharged:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt; &lt;/th&gt;
      &lt;th&gt;Imperial&lt;/th&gt;
      &lt;th&gt;Metric&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Average Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;2450.63 fps&lt;/td&gt;
      &lt;td&gt;746.95 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Highest Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;2483.85 fps&lt;/td&gt;
      &lt;td&gt;757.08 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Lowest Velocity:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;2421.29 fps&lt;/td&gt;
      &lt;td&gt;738.01 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Extreme Spread:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;62.56 fps&lt;/td&gt;
      &lt;td&gt;19.07 m/s&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;Std. Dev:&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;12.74 fps&lt;/td&gt;
      &lt;td&gt;3.88 m/s&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;I’ll omit the velocities from the flight of the bullet, we’ve got enough boring numbers. So running these numbers through the &lt;a href=&quot;http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi&quot;&gt;JBM BC calculator&lt;/a&gt; and we get the following two BC values:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;BC Model&lt;/th&gt;
      &lt;th&gt;Value&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;G1&lt;/td&gt;
      &lt;td&gt;0.266&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;G7&lt;/td&gt;
      &lt;td&gt;0.131&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Comparing these BC values to commercial ammo, and we can see that &lt;a href=&quot;http://en.tulammo.ru/products/rifle_cartridges/762x39_fmj/&quot;&gt;Tula has a G1 BC of 0.306&lt;/a&gt; and that &lt;a href=&quot;http://www.hornady.com/store/7.62x39-123-gr-sst/&quot;&gt;Hornady has a BC of 0.295&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope this information is useful to someone else out there.&lt;/p&gt;
</description>
        <pubDate>Sun, 07 May 2017 01:10:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2017/05/07/norinco-762x39-ballistics/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2017/05/07/norinco-762x39-ballistics/</guid>
        
        
        <category>Firearms</category>
        
        <category>ballistics</category>
        
      </item>
    
      <item>
        <title>Don't Let Crud, Corruption, and Communism Kill Your Smart Watch</title>
        <description>&lt;p&gt;I have a &lt;a href=&quot;http://www.samsung.com/global/microsite/gear/gearlive_design.html&quot;&gt;Samsung Gear Live&lt;/a&gt;. One day, all of sudden, it wouldn’t turn on after I had it charging in it’s little charging dock. I thought the problem was with the watch, and Google the symptoms led me to one of two conclusions:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The watch was defective, and I should send it back under warranty.&lt;/li&gt;
  &lt;li&gt;I could fix the problem by taking the watch apart, disconnecting the battery for a minute, and then reconnecting the battery. Or something like that.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I was a bit dismayed that for a device not even a year old that these were my options. I was mulling over the options, and I flipped the watch over to see what tools I would need to take the watch apart (who doesn’t like disassembling electronics), when I notice that the contact points on the watch were filthy (as one the NCOs on my infantry course used to say when inspecting rifles – “crud, corruption, and communism”). You can see the contacts for the charging dock right in the picture below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/back-of-samsung-gear-live.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I figured cleaning these contact points was easier than taking the watch apart and quicker than sending the watch back, so I grabbed an eraser and gave the contacts a quick scrub.  I plugged the watch back into the charging cradle, and all of a sudden it started charging again.&lt;/p&gt;

&lt;p&gt;I’ve had to do this a couple of times now. I recently found out that some erasers may leave a thin film of residue that may attract dirt. There are a couple of options available:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Rubbing alcohol and a Q-Tip&lt;/strong&gt;. One fellow I work with will clean the back of his watch every week with this.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CAIG Deoxit&lt;/strong&gt;. Another co-worker with an electronics background suggested &lt;a href=&quot;http://www.parts-express.com/caig-deoxit-d5s-6-spray-5-oz--341-200?utm_source=google&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=pla&quot;&gt;Deoxit&lt;/a&gt; by Caig. Put a bit on a Q-Tip, and then clean away. This product will not only clean the contacts and remove oxidation but will leave behind a thin layer to help prevent oxidation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anybody else experienced this problem with their watch? What solutions did you use?&lt;/p&gt;
</description>
        <pubDate>Fri, 25 Sep 2015 03:45:32 +0000</pubDate>
        <link>http://opgenorth.net/blog/2015/09/25/dont-let-crud-corruption-and-communism-kill-your-smartwatch/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2015/09/25/dont-let-crud-corruption-and-communism-kill-your-smartwatch/</guid>
        
        
      </item>
    
      <item>
        <title>Getting Started with Data Binding in Android</title>
        <description>&lt;p&gt;&lt;em&gt;(Note: This is an updated version of a post from June, 2015)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In May, 2015 at Google announced &lt;a href=&quot;https://developer.android.com/tools/data-binding/guide.html&quot;&gt;a data binding library for Android&lt;/a&gt;. The data binding library is currently in beta, so things might change and make what I am saying here irrelevant/obsolete. When in doubt, consult the official documentation.&lt;/p&gt;

&lt;p&gt;It’s long overdue – developers no longer have to come up with their own schemes for displaying or retrieving data from their views. With two-way data binding, it’s possible to remove a lot of redundant boilerplate code from the activities and fragments that make up an application.&lt;/p&gt;

&lt;p&gt;There were several steps/phases when I went through while I was learning this. Here’s what I did:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Just a warning - Android data binding is still a beta product, so as such things may or may not work when they should, and the documentation may or may not be accurate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/topgenorth/drunken-bear&quot;&gt;source code for this sample&lt;/a&gt; is up on Github.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Add data binding to Android Studio&lt;/strong&gt; – This is a one time thing, a couple of lines in some Gradle files.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Create a POJO for the binding&lt;/strong&gt; – You don’t necessarily want to bind to a domain object. Arguable it’s a cleaner design to have another class with responsiblity of data binding (and maybe some validation too). Model-View-ViewModel is an excellent pattern in this regard.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Update the layout file&lt;/strong&gt; – We help the data binding library out by adding some meta-data/markup to our layout files.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Update the activity to declare the data binding&lt;/strong&gt; – This will tell the data binding library how to connect the views to the POJO.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;adding-data-binding-to-your-project&quot;&gt;Adding Data Binding to Your Project&lt;/h1&gt;

&lt;p&gt;First off, make sure you’re running Android Studio 1.3 or higher. As long as you’re keeping current with the Android Studio&lt;/p&gt;

&lt;p&gt;Next I had to edit the project’s &lt;strong&gt;build.gradle&lt;/strong&gt; file, my  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dependencies&lt;/code&gt; section looks like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;dependencies {
    classpath 'com.android.tools.build:gradle:1.3.1'
    // TODO: when the final verison of dataBinder is release, change this to use a version number.
    classpath 'com.android.databinding:dataBinder:1.+'
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After that, I updated the &lt;strong&gt;build.gradle&lt;/strong&gt; for the app module. The first two line in the file are:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That’s pretty much about it. Now that our project is aware of data binding, let’s see about the code and UI changes I had to make.&lt;/p&gt;

&lt;h1 id=&quot;using-data-binding&quot;&gt;Using Data Binding&lt;/h1&gt;

&lt;p&gt;From here, you might be best off reading &lt;a href=&quot;https://developer.android.com/tools/data-binding/guide.html&quot;&gt;Google’s docs on data binding&lt;/a&gt;, just to get a feel for how things work. If you’re familiar with data binding in XAML (say WPF or Xamarin.Forms), you might notice some simularities.&lt;/p&gt;

&lt;p&gt;(&lt;em&gt;Allow me digress a bit and offer this piece of advice again: think twice about binding directly to your data model. This is a perfect opportunity to bring some Model-View-ViewModel goodness into your Android application. I’m not going to talk to much about MVVM though.&lt;/em&gt;)&lt;/p&gt;

&lt;h2 id=&quot;updating-the-source-code&quot;&gt;Updating the Source Code&lt;/h2&gt;

&lt;p&gt;To keep my UI as code free as possible, I abstracted much of the data binding logic into the following class (his isn’t all the code, just the parts relevant for this example):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public class PhonewordViewModel extends BaseObservable {
    private boolean mIsTranslated = false;
    private String mPhoneNumber = &quot;&quot;;
    private String mPhoneWord = &quot;&quot;;
    private String mCallButtonText = &quot;Call&quot;;

    @Bindable
    public String getPhoneNumber() {
        return mPhoneNumber;
    }

    @Bindable
    public String getCallButtonText() {
        return mCallButtonText;
    }

    @Bindable
    public boolean getIsTranslated() {
        return mIsTranslated;
    }

    @Bindable
    public String getPhoneWord() {
        return mPhoneWord;
    }


    public void setPhoneWord(String phoneWord) {
        mPhoneWord = phoneWord;
        onTranslate(null);

    }

    public void onTranslate(View v) {
        mPhoneNumber = toNumber(mPhoneWord);

        if (TextUtils.isEmpty(mPhoneNumber)) {
            mCallButtonText = &quot;Call&quot;;
            mIsTranslated = false;
        } else {
            mIsTranslated = true;
            mCallButtonText = &quot;Call &quot; + mPhoneNumber + &quot;?&quot;;
        }
        notifyPropertyChanged(net.opgenorth.phoneword.BR.phoneNumber);
        notifyPropertyChanged(net.opgenorth.phoneword.BR.isTranslated);
        notifyPropertyChanged(net.opgenorth.phoneword.BR.callButtonText);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here I’ve encapsulated logic into a view class that subclasses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BaseObservable&lt;/code&gt;. Subclassing isn’t mandatory – a naked POJO will work too. However, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BaseObservable&lt;/code&gt; provides the infrastructure for setting up the data binding; the POJO can notify registered listeners as values change. As well, POJO’s should be kept as dumb as possible.&lt;/p&gt;

&lt;p&gt;Notice that the getters are adorned with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@Bindable&lt;/code&gt; annotation - this identifies how the listeners should retrieve values from the properties.&lt;/p&gt;

&lt;p&gt;It’s the responsibility of the bound class to notify clients when a property has changed. You can see this happening with the use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;notifyPropertyChanged&lt;/code&gt;. This causes a signal to be raised to listeners; this is how they find out the name has changed.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BR&lt;/code&gt; class is generated by the data binding library. It is to data binding what the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;R&lt;/code&gt; class is to layout files. Each POJO field or method adorned with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@Bindable&lt;/code&gt; will have a constant declared in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BR&lt;/code&gt; class at compile time corresponding to the name. So, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getPhoneNumber()&lt;/code&gt; becomes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BR.phoneNumber&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;With the code out of the way, it’s time to update the layout.&lt;/p&gt;

&lt;h2 id=&quot;update-the-xml-layout&quot;&gt;Update the XML Layout&lt;/h2&gt;

&lt;p&gt;There were a couple of changes that I needed to make to my existing layout for things to work:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Declare some variables in my layout.&lt;/li&gt;
  &lt;li&gt;Identify properties on the various widgets that will be bound to the variable declared above.&lt;/li&gt;
  &lt;li&gt;Establish the data binding in the Activity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Android’s data binding requires that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;layout&amp;gt;&lt;/code&gt; be the root element of the layout. My old layout started with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;LinearLayout&amp;gt;&lt;/code&gt;. It’s also necessary to add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;data/&amp;gt;&lt;/code&gt; section that will declare variables and the classes that will be bound to.&lt;/p&gt;

&lt;h3 id=&quot;declare-a-variable&quot;&gt;Declare A Variable&lt;/h3&gt;

&lt;p&gt;We need to declare a variable that the data binding framework can… bind too. I had to add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;data&amp;gt;&lt;/code&gt; element with a child &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;variable&amp;gt;&lt;/code&gt; element that names the variable and identifies the type Android should use for the binding:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;layout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;&amp;gt;

		&amp;lt;data&amp;gt;
        &amp;lt;variable
            name=&quot;phonewordVM&quot;
            type=&quot;net.opgenorth.phoneword.PhonewordViewModel&quot; /&amp;gt;
    &amp;lt;/data&amp;gt;

    &amp;lt;!-- my old layout is here, but omitted for clarity --&amp;gt;

&amp;lt;/layout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This declares a variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;phonewordVM&lt;/code&gt; that I can use inside my layout file.&lt;/p&gt;

&lt;p&gt;Notice that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/code&gt; will automatically drag local namespaces into your XML. This helps you out a bit because you don’t have to explicitly declare all the namespaces in layout file.&lt;/p&gt;

&lt;h3 id=&quot;declare-the-bindings-in-the-layout&quot;&gt;Declare the Bindings in the Layout&lt;/h3&gt;

&lt;p&gt;Next, I need to set up the binding. In this example, all I want to do is to bind &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setName()&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getName()&lt;/code&gt; in my POJO to an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EditText&lt;/code&gt;. This little XML snippet shows the binding in action:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;EditText
		android:id=&quot;@+id/phoneword_text&quot;
		android:layout_width=&quot;fill_parent&quot;
		android:layout_height=&quot;wrap_content&quot;
		android:layout_marginLeft=&quot;10dp&quot;
		android:layout_marginRight=&quot;10dp&quot;
		android:hint=&quot;@string/phoneword_label_text&quot;
		android:text=&quot;@{phonewordVM.phoneWord}&quot;
		tools:ignore=&quot;TextFields&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notice the syntax to declare the binding: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@{phonewordVM.phoneWord}&lt;/code&gt;. This binds the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EditText&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setPhoneWord&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getPhoneWord&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PhonewordViewModel&lt;/code&gt;. With this in place, the last thing to do is to setup the data binding in the activity.&lt;/p&gt;

&lt;h1 id=&quot;establish-the-data-binding&quot;&gt;Establish the Data Binding&lt;/h1&gt;

&lt;p&gt;Finally, setting up the data binding. This is a very minimal amount of code. We no longer have to first get a reference to a view, access properties on the view, and then manually transfer the value of that view to some domain object or variable in our application.&lt;/p&gt;

&lt;p&gt;Below is a snippet from the fragment:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;public class MainActivityFragment extends Fragment {

    private PhonewordViewModel mPhonewordViewModel;
    private FragmentMainBinding mBinding;

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mPhonewordViewModel = new PhonewordViewModel();

        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false);
        mBinding.setPhonewordVM(mPhonewordViewModel);
        View v = mBinding.getRoot();

        mBinding.callButton.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        final Intent callIntent = new Intent(Intent.ACTION_CALL);
                        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
                        alertDialogBuilder
                                .setMessage(mBinding.callButton.getText())
                                .setNeutralButton(R.string.call_button_text, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        callIntent.setData(Uri.parse(&quot;tel:&quot; + mPhonewordViewModel.getPhoneNumber()));
                                        PhonewordUtils.savePhoneword(getActivity(), mPhonewordViewModel.getPhoneWord());
                                        startActivity(callIntent);
                                    }
                                })
                                .setNegativeButton(R.string.cancel_text, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        // Nothing to do here.
                                    }
                                })
                                .show();
                    }
                }
        );


        mBinding.translateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPhonewordViewModel.setPhoneWord(mBinding.phonewordText.getText().toString());
                mPhonewordViewModel.translatePhoneWord();
            }
        });

        return v;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There are a couple of key things to notice here. First, observe that the fragment inflates a view called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fragment_main.xml&lt;/code&gt;. The data binding library generates the code of a class called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FragmentMainBinding&lt;/code&gt;. The name of the binding class is derived from the name of the layout file, with the work &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Binding&lt;/code&gt; appended to it.&lt;/p&gt;

&lt;p&gt;Once the binding is instantiated, I tell it what object to bind to. The data binding library created a setter called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setPhonewordVM&lt;/code&gt; – this is because we declared the variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;phonewordVM&lt;/code&gt; in our layout file above.&lt;/p&gt;

&lt;p&gt;Another interesting thing is that the code for the fragment does not use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;findViewById&lt;/code&gt; or hold a reference to any of the views layout. That is because the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FragmentMainBinding&lt;/code&gt; has those references. So, for example, if I want to get the value of an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EditText&lt;/code&gt; with the id &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;+@id/phonewordText&lt;/code&gt;, then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mBinding.phonewordText.getText()&lt;/code&gt; will do the trick.&lt;/p&gt;

&lt;p&gt;I set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OnClickListener&lt;/code&gt; for the buttons in a very traditional way. In theory, the data binding library should allow to bind event listeners to methods on a view model. However, I have’t been able to get that to work yet. Hopefully I’ll have more luck next version of the data binding library (and/or an update to the docs for the data binding library)&lt;/p&gt;

&lt;h1 id=&quot;sie-sind-fertig&quot;&gt;Sie Sind Fertig&lt;/h1&gt;

&lt;p&gt;With all this, data binding has been accomplished. It may seem like a lot of code, and perhaps it is for such a trivial example. Where the true power of this comes into play is when you want to write tests for your code. Two way data binding lays the framework for the Model-View-View Model pattern, which in turn helps you create a loosely coupled app that is easier to test.&lt;/p&gt;
</description>
        <pubDate>Tue, 15 Sep 2015 03:45:32 +0000</pubDate>
        <link>http://opgenorth.net/blog/2015/09/15/android-data-binding-intro/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2015/09/15/android-data-binding-intro/</guid>
        
        
      </item>
    
      <item>
        <title>Wiring Up a Nest</title>
        <description>&lt;p&gt;This weekend I finally broke down and installed a &lt;a href=&quot;http://www.nest.com&quot;&gt;Nest thermostat&lt;/a&gt; in my house. They have a nice &lt;a href=&quot;https://nest.com/widget/compatibility/&quot;&gt;compatibility wizard&lt;/a&gt; which does a pretty good job of showing you how to wire up your Nest based on the wires you can see in your existing thermostat.  There were two gotchas that their wiring diagram didn’t cover. Here is a picture of the old thermostat (a Rodgers-White):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/old_thermostat.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Notice that there were two &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;W&lt;/code&gt; wires. I’m not to sure what is up with that, I suspect that that one wire leads up to the humidifier. I ended up splicing the two wires together with a marette, and then connecting the spliced wire to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;W&lt;/code&gt; connection on the Nest. This was not documented anywhere on the Nest website.&lt;/li&gt;
  &lt;li&gt;The other thing that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rc&lt;/code&gt; post on the thermostat was jumpered over to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rh&lt;/code&gt; post. All I had to do here is remove the jumper and just plug the wire into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rh&lt;/code&gt; connection on my Nest. This issue was &lt;a href=&quot;https://nest.com/ca/support/article/How-do-I-install-Nest-if-my-old-thermostat-had-a-short-wire-connecting-Rh-and-Rc&quot;&gt;documented on the Nest website&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All in all, the process was quick and easy. Now to see if the Nest actually makes a difference in my energy bill.&lt;/p&gt;
</description>
        <pubDate>Fri, 04 Sep 2015 10:55:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2015/09/04/wiring-up-a-nest/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2015/09/04/wiring-up-a-nest/</guid>
        
        
      </item>
    
      <item>
        <title>Containers Explained for the Novice</title>
        <description>&lt;p&gt;Over at the &lt;a href=&quot;http://www.westerndevs.com/&quot;&gt;WesternDev&lt;/a&gt; “consortium” a random discussion broke out about &lt;em&gt;containers&lt;/em&gt;: what are they, how are they different from virtual machines, and how do they work. While no means a “container expert”, I have dabbled a bit and sought to add some clarity to the discussion. It seems that I made enough sense and so thought I would summarize the dicussion here.&lt;/p&gt;

&lt;p&gt;The whole idea behind containers is to isolate an application in a known environment. This helps prevent strange interactions with other software or libraries installed as well. I think &lt;a href=&quot;http://www.docker.com&quot;&gt;Docker&lt;/a&gt; has the best, concise description of what containers are:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Containers running on a single machine all share the same operating system kernel so they start instantly and make more efficient use of RAM.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;… containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, while both containers and virtual machines provide isolation, they differ in how they do it. VM’s will emulate the hardware; each VM thinks it’s a computer with it’s own CPU’s, RAM, hard disk, kernel, etc. This isolation is provided by the virtualization host which runs on the hardware.&lt;/p&gt;

&lt;p&gt;Containers, on the other hand, have a “host” that uses some kernel extensions to isolate software, but otherwise everything is running on the hardware. Containers share the host computer’s RAM, CPUs, and even the kernel, however each container is secluded from the others and the host operating system. Because of this, containers can startup much faster and appear to be more responsive – they don’t have to talk to a middle man to get access to the hardware.&lt;/p&gt;

&lt;p&gt;Most modern Linux distros ship with somee &lt;a href=&quot;https://linuxcontainers.org&quot;&gt;extensions&lt;/a&gt; to support containers out of the box, so, in theory, you can just dive right and start creating containers without having to do anything extra on Linux.&lt;/p&gt;

&lt;p&gt;In practice it’s easier to use something like Docker to create and manage your containers. Docker also provides a way to share containers via &lt;a href=&quot;https://hub.docker.com/&quot;&gt;DockerHub&lt;/a&gt;. You search DockerHub for something you need, like say &lt;a href=&quot;https://hub.docker.com/_/mono/&quot;&gt;Mono&lt;/a&gt;, and then you grab the &lt;a href=&quot;https://docs.docker.com/reference/builder/&quot;&gt;Dockerfile&lt;/a&gt; (a recipe that tells Docker how to build the container), and away you go. Alternately, you can create your own custom Docker images based on an existing Dockerfile. It’s kind of like subclassing a container, if you will.&lt;/p&gt;
</description>
        <pubDate>Wed, 02 Sep 2015 16:26:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2015/09/02/docker-containers-explained-for-the-novice/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2015/09/02/docker-containers-explained-for-the-novice/</guid>
        
        
        <category>docker</category>
        
        <category>computers</category>
        
      </item>
    
      <item>
        <title>My First QuadCopter</title>
        <description>&lt;p&gt;Just recently I acquired a new quadcopter – a WL Toys 959. Total cost to me was about $75.00 and I ordered from Amazon.ca. I picked this because of the low cost and the fact that it came with camera that can do both photo and video and it was relatively inexpensive.&lt;/p&gt;

&lt;p&gt;First attempts at flying the quadcopter proved somewhat crash prone, so I ended up reading the manual and checking out some YouTube vidoes on quadcopter flight. Most informative was &lt;a href=&quot;https://www.youtube.com/watch?v=LCret4rv0HE&quot;&gt;this YouTube video&lt;/a&gt; on &lt;a href=&quot;https://en.wikipedia.org/wiki/Vortex_ring_state&quot;&gt;Vortex Ring State&lt;/a&gt; and how to deal with it (thanks to colleague Joel Martinez for the tip). I have a video of my first flight – it’s nothing fancy I just wanted to take off, hover, and then land.&lt;/p&gt;

&lt;p&gt;The batteries last about 10 minutes, which I guess is typical for a quadcopter. I will have to order a few more batteries from Amazon.&lt;/p&gt;

&lt;p&gt;The camera itself mounts to the bottom of the quadcopter, but it never seems to want to stay there. I used a piece of scotch tape to help keep the camera attached to the quadcopter. You turn on video by pressing the silver button to the left of the antenna, but you have no way of know if the camera is on or off except by looking at the bottom of the camera. If it is recording then there will be a read blinking light. For some odd reason I don’t seem to be able to take any video at the moment. I did manage to &lt;a href=&quot;/assets/FirstFlight.mp4&quot;&gt;take one video&lt;/a&gt; – the quadcopter is taking off, hovering, and then landing. Nothing fancy at the moment.&lt;/p&gt;
</description>
        <pubDate>Tue, 21 Jul 2015 16:51:00 +0000</pubDate>
        <link>http://opgenorth.net/blog/2015/07/21/my-first-quadcopter/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2015/07/21/my-first-quadcopter/</guid>
        
        
        <category>quadcopter</category>
        
      </item>
    
      <item>
        <title>Reloading 8mm Mauser</title>
        <description>&lt;p&gt;8mm Mauser is a great round, problem is that in North America it’s not always easy to find good 8x57mm ammunition. When you do manage to find it, it tends to bit a bit expensive, &amp;gt; $1.00/round. Here is where hand loading pays itself off. I used to handload my own 8x57mm, however I stopped for a few years and now I can’t seem to find my old load data.  This isn’t a horrible thing as it means I get to go to the range to test out new recipes.&lt;/p&gt;

&lt;p&gt;For the first pass, I happened to have a bunch of 150gr bullets. This is a touch light for an 8mm bullet, but it’s all I had at the moment.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Bullet: &lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;https://www.sierrabullets.com/store/product.cfm/sn/2400/323-dia-8mm-150-gr-SPT&quot;&gt;150gr Sierra Pro Hunter&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Trim Length:&lt;/td&gt;
      &lt;td&gt;2.23&quot;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Primer:&lt;/td&gt;
      &lt;td&gt;Winchester Large Rifle&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;C.O.A.L.:&lt;/td&gt;
      &lt;td&gt;3.04&quot;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
For the first pass, I loaded up three 10 round batches with different powder charges:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;td&gt;Load #1&lt;/td&gt;&lt;td&gt;Load #2&lt;/td&gt;&lt;td&gt;Load #3&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;48.5gr IMR 4064&lt;/td&gt;
      &lt;td&gt;47.6gr IMR 4064&lt;/td&gt;
      &lt;td&gt;49.0gr IMR 4064&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;I didn’t measure velocities at this time, I just wanted to see how the various loads would group. I’ll update this blog post with the pictures of the groups later.&lt;/p&gt;
</description>
        <pubDate>Sat, 04 Jul 2015 03:36:32 +0000</pubDate>
        <link>http://opgenorth.net/blog/2015/07/04/reloading-8mm-mauser/</link>
        <guid isPermaLink="true">http://opgenorth.net/blog/2015/07/04/reloading-8mm-mauser/</guid>
        
        
        <category>Reloading</category>
        
        <category>Firearms</category>
        
      </item>
    
  </channel>
</rss>
