tag:blogger.com,1999:blog-72995821729075670872024-03-19T06:06:03.167-07:00Left Brain TinkeringWilliam Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.comBlogger64125tag:blogger.com,1999:blog-7299582172907567087.post-74828649846170873432023-04-08T15:37:00.012-07:002023-11-19T14:59:09.892-08:00Configuring the EZABL with Klipper on a Creality Ender 3 ProTrying to get my EZABL bed leveling sensor to work with Klipper on a Creality
Ender 3 Pro took several hours and about 50 open browser tabs. Here is what I
learned from this exercise so you don't have to go through the same thing. Here are the changes you'll need to make in your printer.cfg file:<div><ul style="text-align: left;"><li>Reconfigure the [stepper_z] section</li><li>Add a new [probe] section</li><li>Determine the correct pin configuration for [probe]</li><li>Add a new [safe_z_home] section</li><li>Configure the bed mesh</li></ul><h4 style="text-align: left;"><u>Reconfigure the [stepper_z] Section</u></h4></div><div><br /></div><div>The default [stepper_z] section for a Creality Ender 3 Pro <a href="https://github.com/Klipper3d/klipper/blob/master/config/printer-creality-ender3pro-2020.cfg">looks like this</a>:</div><br /><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><span style="font-family: courier;">[stepper_z]<br /></span><span style="font-family: courier;"> step_pin: PB6<br /></span><span style="font-family: courier;"> dir_pin: !PB5<br /></span><span style="font-family: courier;"> enable_pin: !PC3<br /></span><span style="font-family: courier;"> microsteps: 16<br /></span><span style="font-family: courier;"> rotation_distance: 8<br /></span><span style="font-family: courier;"> endstop_pin: ^PA7<br /></span><span style="font-family: courier;"> position_endstop: 0.0<br /></span><span style="font-family: courier;"> position_max: 250</span></blockquote><div></div><div><span style="font-family: courier;"><br /></span></div><div>Since the EZABL acts as a Z-axis endstop, we will make the following changes:<br /><br /></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><div><span style="font-family: courier;">[stepper_z]</span></div></div><div><div><span style="font-family: courier;">step_pin: PB6</span></div></div><div><div><span style="font-family: courier;">dir_pin: !PB5</span></div></div><div><div><span style="font-family: courier;">enable_pin: !PC3</span></div></div><div><div><span style="font-family: courier;">microsteps: 16</span></div></div><div><div><span style="font-family: courier;">rotation_distance: 8</span></div></div><div><div><span style="background-color: #fcff01; font-family: courier;">endstop_pin: probe:z_virtual_endstop #see note (1)</span></div></div><div><div><span style="font-family: courier;">position_max: 250</span></div></div><div><div><span style="background-color: #fcff01; font-family: courier;">position_min: -7 #see note (2)</span></div></div></blockquote><div><ul style="text-align: left;"><li>(1) The <span style="font-family: courier;">endstop_pin</span> setting will be replaced with 'probe:z_virtual_endstop', which is described in the excellent Klipper documentation <a href="https://www.klipper3d.org/Config_Reference.html?h=probe#probe">here</a>. This basically tells the z axis that it will get it's endstop info from the probe section.</li><li>(2) The <span style="font-family: courier;">position_min</span> setting will allow the Z axis to descend below zero while printing, depending on bed height variation.</li><li>If you followed the <a href="https://support.th3dstudio.com/helpcenter/ezabl-pro-installation-guide/">EZABL guide</a> when you installed the sensor, you will remember that the sensor is positioned 1-2 mm above the nozzle. You will also remember that you had to <a href="https://support.th3dstudio.com/helpcenter/ezabl-pro-installation-guide/#8-calibrating-the-ezabl-pro-sensor">calibrate the sensor during installation</a> by raising the nozzle another 2mm off the bed. This means, if you followed all of the installation instructions, the sensor will be triggered when the nozzle is 2mm away from the bed. We will deal with this later.</li></ul></div><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSkN8A2L0g289pyFswfE_D1zl7erDzeslAWNNmUgETJVxG7Y3Dd7umD6Uz9HScSaG9x6ty3E8O1y7iFw-yulLhII5KulySMVq0n9ziLQP6q8J4eW0IK0WeaU3Vzqpj8CxXBf0hQ2_PT6yc0-0qJmcn_BUyXSagjX6y8EgwqlCYhXDGANAYNXyxpHiS" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="686" data-original-width="580" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSkN8A2L0g289pyFswfE_D1zl7erDzeslAWNNmUgETJVxG7Y3Dd7umD6Uz9HScSaG9x6ty3E8O1y7iFw-yulLhII5KulySMVq0n9ziLQP6q8J4eW0IK0WeaU3Vzqpj8CxXBf0hQ2_PT6yc0-0qJmcn_BUyXSagjX6y8EgwqlCYhXDGANAYNXyxpHiS=w338-h400" width="338" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div></div><h4 style="text-align: left;"><u>Add a new [probe] section</u></h4></div><div><u><br /></u></div><div>A section called [probe] will need to be added to your printer.cfg file. Here is mine:</div><div><br /></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><div><span style="font-family: courier;">[probe]</span></div></div><div><div><span style="font-family: courier;"># Pin for the z-min endstop input</span></div></div><div><div><span style="background-color: #fcff01; font-family: courier;">pin: ^!PA7 #see note (1)</span></div></div><div><div><span style="background-color: #fcff01; font-family: courier;"># Offset between the nozzle and the EZABL sensor, see note (2)</span></div></div><div><div><span style="background-color: #ffa400; font-family: courier;">x_offset: 48.0 # (+) right of nozzle</span></div></div><div><div><span style="background-color: #ffa400; font-family: courier;">y_offset: -2.0 # (-) behind nozzle</span></div></div><div><div><span style="background-color: #ffa400; font-family: courier;">z_offset: 2.0 # (+) 2 mm above nozzle</span></div></div><div><div><span style="font-family: courier;">speed: 5.0</span></div></div><div><div><span style="font-family: courier;">lift_speed: 30.0</span></div></div><div><div><span style="font-family: courier;">sample_retract_dist: 1.0</span></div></div><div><div><span style="font-family: courier;">samples: 2</span></div></div><div><div><span style="font-family: courier;">samples_tolerance_retries: 6</span></div></div></blockquote><p></p><ul style="text-align: left;"><li>(1) the pin used for the Z-axis limit switch is used here. Note that we added an exclamation point so that it reads <span style="font-family: courier;">^!PA7 </span>now! We will determine the correct setting for the pin later, which is critical.</li><li>(2) <strike>I am using the <a href="https://www.thingiverse.com/thing:4775320">Petsfang Bullseye cooling duct</a></strike> (went back to stock cooling in November, my updated config is linked below) and I also have a MicroSwiss printhead, so the position of my EZABL sensor is probably different from yours. <span style="background-color: #ffa400;">Adjust these to match your setup!</span></li></ul><p></p><h4 style="text-align: left;"><u>Determine the correct pin configuration for [probe]</u></h4><div style="text-align: left;"><div><br /></div><div>⚠️This step is critical, not following these instructions can cause damage, be ready to switch the printer off in case the z-axis is lowered too far!</div><div><br /></div></div><div style="text-align: left;">Position something underneath the EZABL probe (you can use your hand) such that the red light on the probe comes ON. With the red light on, issue a M119 command in the Octoprint terminal:</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjfNzChQ_Obdli8KA8-hFC9GD8ECkOb2E8gdwqapRmaJZdAuDLEvlkVh9uhOuiXvrElXCdC6RDffW-_udoZazj98xsifs9_bn7vZC-5fbIJK_VTrhPAqCLYZplPxaFo3IyenO8uO30MEIAAHySI5UZorUymHMmr7jXsv5aj8_lDd_q_uH58hR2UsxuZ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="330" data-original-width="701" height="302" src="https://blogger.googleusercontent.com/img/a/AVvXsEjfNzChQ_Obdli8KA8-hFC9GD8ECkOb2E8gdwqapRmaJZdAuDLEvlkVh9uhOuiXvrElXCdC6RDffW-_udoZazj98xsifs9_bn7vZC-5fbIJK_VTrhPAqCLYZplPxaFo3IyenO8uO30MEIAAHySI5UZorUymHMmr7jXsv5aj8_lDd_q_uH58hR2UsxuZ=w640-h302" width="640" /></a></div><br /><br /></div><div>You should see:<br /><br /></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><span style="font-family: courier;">Send: M119</span></div><div><span style="font-family: courier;">Recv: x:open y:open z:TRIGGERED</span></div></blockquote><p>Great, the pin is configured correctly!</p><p>If you see this instead:</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><span style="font-family: courier;">Send: M119</span></div><div><span style="font-family: courier;">Recv: x:open y:open z:open</span></div></blockquote><p>...then the pin configuration for the [probe] is incorrect. The Z axis will probably only move UP, thinking that the z limit has been reached. In this case, remove the exclamation from the pin configuration so that it reads: <span style="background-color: #fcff01; font-family: courier;">pin: ^PA7</span>, restart Klipper, and try this exercise again. It should read z:TRIGGERED when the sensor detects an object.</p><h4 style="text-align: left;"><u>Add a new [safe_z_home] section</u></h4><div><br /></div><div><a href="https://www.klipper3d.org/Config_Reference.html?h=safe_#safe_z_home">This section</a> determines where the printhead will jog to before it starts to plunge downward and detect where the bed is. </div><div><br /></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><div><span style="font-family: courier;">[safe_z_home]</span></div></div><div><div><span style="background-color: #fcff01; font-family: courier;">home_xy_position: 110, 110 #see note (1)</span></div></div><div><div><span style="font-family: courier;">speed: 200</span></div></div><div><div><span style="font-family: courier;">z_hop: 10</span></div></div><div><div><span style="font-family: courier;">z_hop_speed: 60</span></div></div></blockquote><p></p><ul style="text-align: left;"><li>(1) you may want to adjust this for the size of your bed.</li></ul><p></p><h4><u>Perform z-axis offset calibration</u></h4><p>Follow the <a href="https://www.klipper3d.org/Probe_Calibrate.html#calibrating-probe-z-offset">steps here</a> to calibrate the z probe offset. After following the z offset calibration steps, you will see something like this automatically added to your printer.cfg:<br /></p><span style="font-family: courier;"><br /></span><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><span style="font-family: courier;">#*# <---------------------- SAVE_CONFIG ----------------------><br /></span><span style="font-family: courier;">#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.<br /></span><span style="font-family: courier;">#*#<br /></span><span style="font-family: courier;">#*# [probe]<br /></span><span style="font-family: courier;">#*# z_offset = 2.700</span></blockquote><p> </p><div><h4><u>Configure the bed mesh</u></h4><div style="text-align: left;"><span style="font-weight: normal;"><br /></span></div><div style="text-align: left;"><span style="font-weight: normal;">Add [bed mesh] to config. This specifies how many mesh points for bed leveling and where those points are. For more details see <a href="https://www.klipper3d.org/Bed_Mesh.html">the Klipper documentation</a>.</span></div><div style="text-align: left;"><span style="font-weight: normal;"><br /></span><span style="font-weight: normal;">⚠️ You may want to tweak the mesh_min and mesh_max points for your setup.</span></div><div style="text-align: left;"><span style="font-weight: normal;"><br /></span></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><div><div><span style="font-family: courier;">[bed_mesh]</span></div></div></div><div><div><div><span style="font-family: courier;">speed: 120 #how fast to move between points </span></div></div></div><div><div><div><span style="font-family: courier;">horizontal_move_z: 5 #how much the z axis rises between points</span></div></div></div><div><div><div><span style="font-family: courier;">mesh_min: 60, 20 #the x,y location of the first mesh point</span></div></div></div><div><div><div><span style="font-family: courier;">mesh_max: 200, 200 #the x,y location of the last mesh point</span></div></div></div><div><div><div><span style="font-family: courier;">probe_count: 3 # 3x3 grid</span></div></div></div></blockquote><div><h4><u><br /></u></h4><h4><u>Make Klipper understand the G29 command</u></h4><div><br /></div><div><a href="https://marlinfw.org/docs/gcode/G029-ubl.html">The G29 command</a> is the bed-leveling command that you may have set already in your slicer start code. Unfortunately, this command is not natively understood by Klipper. Fortunately, this is easy to fix. You can make Klipper understand G29 by adding these lines to your config file:</div><div><br /></div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><div><div><span style="font-family: courier;">[gcode_macro G29]</span></div></div></div><div><div><div><span style="font-family: courier;">gcode:</span></div></div></div><div><div><div><span style="font-family: courier;"> BED_MESH_CALIBRATE</span></div></div></div></blockquote><div><div><br /></div><div>That should be it. If you already had the EZABL working before, it should work almost exactly the same way now.</div><div><br /></div><h4 style="text-align: left;"><u>Update 28-May-2023; Improved G29 command</u></h4><div><br /></div><div>This is an update to the G29 command that will grab the target temps of the extruder and the bed, turn off the heaters before meshing, and then turn the heaters back on, waiting for them to reach temp before continuing. <br /><br /><div><span style="font-family: courier;">[gcode_macro G29]</span></div><div><span style="font-family: courier;">gcode:</span></div><div><span style="font-family: courier;"> {% set BED_TEMP = printer.heater_bed.target %}</span></div><div><span style="font-family: courier;"> {% set EXTRUDER_TEMP = printer[printer.toolhead.extruder].target %}</span></div><div><span style="font-family: courier;"> TURN_OFF_HEATERS</span></div><div><span style="font-family: courier;"> BED_MESH_CALIBRATE</span></div><div><span style="font-family: courier;"> # turn on heaters</span></div><div><span style="font-family: courier;"> M140 S{BED_TEMP} ; set bed temp</span></div><div><span style="font-family: courier;"> M104 S{EXTRUDER_TEMP} ; set extruder temp</span></div><div><span style="font-family: courier;"> M190 S{BED_TEMP} ; wait for bed</span></div><div><span style="font-family: courier;"> M109 S{EXTRUDER_TEMP} ; wait for extruder</span></div><div><span style="font-family: courier;"><br /></span></div><h4><u>Update 19-Nov-2023</u></h4><p style="text-align: left;"><span style="font-family: georgia;">Here is my Klipper config file as a <a href="https://gist.github.com/skelliam/f0f75df9a1cc9f5bd7b15a0ae3f4fff0">github.com gist</a>.</span></p><br /></div><div><br /></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"><br /></span><div><span face="Roboto, Arial, sans-serif" style="background-color: #202124; color: #e8eaed; font-size: 16px; font-variant-ligatures: none; letter-spacing: 0.1px; white-space: pre-wrap;"><br /></span></div></div></div>William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-85182181014682902692022-09-10T15:29:00.001-07:002022-09-10T15:29:10.209-07:00Downriver Walleye Federation Waypoints GPX file<p>Yesterday I wrote a simple Python script to convert the waypoints from the the <a href="http://www.dwfonline.org/">Downriver Walleye Federation</a> <a href="http://www.dwfonline.org/?page_id=24">waypoints</a> page (a text format) into gpx, and I tested the result using <a href="http://gpx.studio">gpx.studio</a>. You can easily upload this gpx file into your fish finder or GPS.</p><p>There were a few typos/errors in the original data that I corrected, as well as removal of some waypoints that were plotted in the middle of Ohio.</p><p>I make no claim as to the accuracy of these points, they are reproduced here as a gpx file for reference only. Any damage, loss, injury, etc resulting from the use of these coordinates is entirely your responsibility.</p><p>You can download the gpx file <a href="https://drive.google.com/file/d/11qsyHDYNT4NVKWLl4LzDpBOrP0yRDSOo/view?usp=sharing">here</a>.</p><p>Thanks again to the <a href="http://www.dwfonline.org/">Downriver Walleye Federation</a> for the original data.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEigaCgSlbN63Kh_q1e7AMnqtKeISpgGIr4BqBg4a12HCcJhXVZuosiZj5jPse8rc43dej4u5HkIRyNvUcy-qWN5KTJ8nLF4O1AjQ2LSkEDLVBuRawyR68BXXPHNHs2ddRSrDoOoimpsLlXblE7oEe6BKCa3ZOm3vEHpgggyAJxaXtkhmtiT9O9au38j" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="933" data-original-width="1441" height="414" src="https://blogger.googleusercontent.com/img/a/AVvXsEigaCgSlbN63Kh_q1e7AMnqtKeISpgGIr4BqBg4a12HCcJhXVZuosiZj5jPse8rc43dej4u5HkIRyNvUcy-qWN5KTJ8nLF4O1AjQ2LSkEDLVBuRawyR68BXXPHNHs2ddRSrDoOoimpsLlXblE7oEe6BKCa3ZOm3vEHpgggyAJxaXtkhmtiT9O9au38j=w640-h414" width="640" /></a></div><br /><br /><p></p>William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-15912334420786939162022-01-29T10:27:00.005-08:002022-01-29T10:30:52.671-08:00Micro Swiss Direct Drive Installation for Creality Ender 3 Pro with a Press-Fit Extruder Gear<p>I'm installing the <a href="https://amzn.to/3ubNAeb">Micro Swiss direct drive kit</a> for my Ender 3 Pro and I encountered two problems: </p><p></p><ol style="text-align: left;"><li>The drive gear on my machine is <b>pressed onto the stepper motor rather than held in place with a set screw</b>.</li><li><b>The stepper motor shaft is round and does not have a flat keyway</b>. The Micro Swiss kit depends on the shaft having a flat spot on it for the new gear.</li></ol><p></p><p><br /></p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjyN5HbhyQ2jcZSWQFHzq73MqMrLR3bK0FzwmZe9z6wcFpankyl9l3rgCEB-GBsVeu_u2fUVZk1CChx1nzCuSrGdHJFATOpR5JrW8a3fsE9RjnpQXt_QasVJEat2ACulQNaUm09Msn7FBU0gZxp32ABHlfV2LkaERxdjkTJst67On1MM4WQHY8K8Lzc" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="788" data-original-width="878" height="575" src="https://blogger.googleusercontent.com/img/a/AVvXsEjyN5HbhyQ2jcZSWQFHzq73MqMrLR3bK0FzwmZe9z6wcFpankyl9l3rgCEB-GBsVeu_u2fUVZk1CChx1nzCuSrGdHJFATOpR5JrW8a3fsE9RjnpQXt_QasVJEat2ACulQNaUm09Msn7FBU0gZxp32ABHlfV2LkaERxdjkTJst67On1MM4WQHY8K8Lzc=w640-h575" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Ender 3 Pro extruder stepper motor with pressed-on brass gear.<br /> (note a drop of penetrating oil in the center)<br /></td></tr></tbody></table><br /><br /></p><br /><h2 style="text-align: left;">Creality Press-Fit Extruder Gear Removal</h2>I read at least one claim that this gear easily pulls off with a pair of pliers; unfortunately I found that to not be the case with my motor and gear.<br /><br />Here is how I got the little gear off:<p></p><ul style="text-align: left;"><li><b>Apply a little penetrating oil</b> to the interface between the gear and the shaft. I used PB Blaster, WD-40 will work fine as well.</li><li><b>Heat the gear</b> with a MAP gas torch (the same kind used for soldering plumbing joints). You could probably use one of those little butane torches used for lighting cigars as well. Brass expands quite a bit when heated, so to increase your chances of success, heat the brass gear heavily and avoid applying heat anywhere else on the drive gear.</li><li><b>Clamp the gear into a bench vice</b>, and position a couple of wrenches as in the picture below:</li></ul><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhYxNvCt16E4Kh76ICzr-irkuL3eGbFE5rpbv6y4mXPdLKPOJNx6z-Xc4Kp1ezULR_QqdaHxQPYaIVvFUuHLHR3Wd_liHACXduEjjhfdXrhDbZvhEO1fOBdE0GMo0-cPQQ-TrzAKmjT9tGXklKA2GR24EG_1_2Vaqjlre5dqoj3WqDvyQBA8S10DHRH" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="935" data-original-width="910" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEhYxNvCt16E4Kh76ICzr-irkuL3eGbFE5rpbv6y4mXPdLKPOJNx6z-Xc4Kp1ezULR_QqdaHxQPYaIVvFUuHLHR3Wd_liHACXduEjjhfdXrhDbZvhEO1fOBdE0GMo0-cPQQ-TrzAKmjT9tGXklKA2GR24EG_1_2Vaqjlre5dqoj3WqDvyQBA8S10DHRH=w622-h640" width="622" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Using a couple of wrenches to pop the brass gear off of the motor.<br /><br />(My vice was frosty -- it was in the negative teens here in Michigan this morning!)</td></tr></tbody></table><br /><ul style="text-align: left;"><li>Gently tap the end of the wrench in the photo (see red arrow) with another wench. The metal-to-metal impact should jar the heated brass gear loose. This is a precision stepper motor, so <u><b>do not use a hammer!</b></u></li><li><b>Be careful, this is not the correct way to remove this gear.</b> The correct way to do this is with a tiny bearing puller <a href="https://amzn.to/3ALLwe3">like this one</a> as it <b>will not</b> apply any force to the internals of the motor. Rather, the bearing puller will only apply force inward to the end of the shaft and an equivalent force outward to both sides of brass gear. The method shown here will transfer whatever force you apply to the gear to the entire length of the drive shaft as well as the internals of the motor. <b>Proceed with caution and at your own risk.</b></li><li>If you choose not to heat the gear, it will be harder to remove and you could increase the risk of motor damage. Apply heat to the brass gear and use light, gentle taps; the impact force should knock it loose.</li></ul><h2 style="text-align: left;">Add Missing Flat to Drive Shaft</h2><div>When you install the new Micro Swiss direct drive gearset, the included gear has a small set screw that is intended to sit onto the flat portion of the shaft. From the Micro Swiss installation instructions:<br /><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi4_pXLUvQOPcHsQjTsIueUxBIdg4mgNzz5XF9_kGW-sSE_sDzAmVfOzxqHOiVX7sM9VEp3-aEwsn43vA4VxQzdWTfvgPGq0ZaIVnRHojLvQXwYHzxdHHFhHkQN_woNrpzKYB744KhrRv8zxQBX38UGl1ZMG1whdhzIK1eHOhxTQMetmTCqoMRRnLuY" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="766" data-original-width="1244" height="394" src="https://blogger.googleusercontent.com/img/a/AVvXsEi4_pXLUvQOPcHsQjTsIueUxBIdg4mgNzz5XF9_kGW-sSE_sDzAmVfOzxqHOiVX7sM9VEp3-aEwsn43vA4VxQzdWTfvgPGq0ZaIVnRHojLvQXwYHzxdHHFhHkQN_woNrpzKYB744KhrRv8zxQBX38UGl1ZMG1whdhzIK1eHOhxTQMetmTCqoMRRnLuY=w640-h394" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Step 14 of Micro Swiss direct drive installation instructions </td></tr></tbody></table><br /><br /></div><div>Since my machine does not have a flat part of the drive shaft, I had to add one as follows:<br /><ul style="text-align: left;"><li>Follow the Micro Swiss installation instructions for aligning the new filament drive gears.</li><li>Proceed to tighten down the set screw *as if* there were a flat spot in the shaft. This step will make a tiny <a href="https://en.wiktionary.org/wiki/witness_mark">witness mark</a> (scratch) in the shaft that you will use to determine where to grind the shaft down</li><li>Release the set screw and remove the Micro Swiss drive gear.</li><li>Use a magnifying glass, if necessary, to examine the surface of the shaft; you should see a tiny witness mark where the set screw was tightened down. (The shaft is hard steel and it may be hard to see this mark!)</li><li>Use an abrasive wheel (I used a cut-off disc) to gently grind an area away on the shaft where the witness mark was. I went several millimeters on either side of the witness mark. See below:</li></ul></div><div><br /></div><div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEirfGTZx1p-cWPLjsv3UZj41MNM6NAPij88kT6YfPRf00YRarcn5LC5m5EoRYpN1t8XDT2YJa7NXdZiIFFfMLiXhJVamVxFBdNMzwmn34tRQ48b7-xgrIuZEHSLFW9D6VckDenx1HUqD94T9XYoCDTZAqzWM6seXOdRdUG9b4GGoWRuIR8zK5NEjgRD" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="897" data-original-width="915" height="627" src="https://blogger.googleusercontent.com/img/a/AVvXsEirfGTZx1p-cWPLjsv3UZj41MNM6NAPij88kT6YfPRf00YRarcn5LC5m5EoRYpN1t8XDT2YJa7NXdZiIFFfMLiXhJVamVxFBdNMzwmn34tRQ48b7-xgrIuZEHSLFW9D6VckDenx1HUqD94T9XYoCDTZAqzWM6seXOdRdUG9b4GGoWRuIR8zK5NEjgRD=w640-h627" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Creating a flat in the stepper motor drive shaft for Micro Swiss gear installation.<br /></td></tr></tbody></table><br /><ul style="text-align: left;"><li>Follow the Micro Swiss installation instructions for gear alignment *again* but make sure the set screw is directly over the new flat spot that you just made. </li><li>Tighten the set screw down against the new flat spot once you are satisfied with drive gear alignment.</li></ul><div>I hope this helps you with your Micro Swiss direct drive installation.</div></div><p></p>William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-15817505422176857702019-07-14T08:19:00.001-07:002019-07-14T08:25:51.007-07:00Valterra universal vent lid installation problemThe vent lid over the bathroom on my small 19' camper was completely destroyed by the sun. As a new camper owner, I learned that this is fairly common and <a href="https://amzn.to/2lkOnIr" target="_blank">there is a 'universal' replacement</a> from a company called Valterra. This replacement lid promises to withstand the beating that UV rays dish out, and Valterra offers a limited lifetime warranty to boot.<br />
<br />
The company has created a nice five minute <a href="https://www.youtube.com/watch?v=z2Mmn42lIkA" target="_blank">installation video on YouTube</a> that shows the entire installation process, which I recommend watching completely before starting the installation.<br />
<br />
As instructed, I started the installation process on the inside of the camper before moving to the roof. With the new vent installed on the roof, I went back into the camper to wrap up the installation. This is when I discovered the design flaw with the Valterra product.<br />
<br />
The Valterra vent has a new lift slide pre-installed. Here is a photo from their own installation video. Notice how the circular opening for the lift slide is positioned away from the hinge:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DX-QShwXtd2dREnjlg5L1z1JPnktiJ4AMi-Vq3aSpZsRkRe0YQodWumVvSUis_Whp7ewIkrD9_4t-gCiIWndJLrB6Lxhpe5yFNJHT8Czmg5XJE_6Lw4F1uuctxeLUwcn4g5I8i09EqU/s1600/valterra_shot_of_new_lid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="850" data-original-width="1365" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DX-QShwXtd2dREnjlg5L1z1JPnktiJ4AMi-Vq3aSpZsRkRe0YQodWumVvSUis_Whp7ewIkrD9_4t-gCiIWndJLrB6Lxhpe5yFNJHT8Czmg5XJE_6Lw4F1uuctxeLUwcn4g5I8i09EqU/s640/valterra_shot_of_new_lid.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
This directly conflicts with the factory installation, as you'll see later in their installation video when they remove the factory vent lid:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmC3fmQnvOl4In10UepCxRUXo8s1wzygaPqOuwxL_tj4AtJePsSX230lYzVTWLL6EgFK9oucbWpmKkjo2HlupR2eLk8dj6wZjSs23dPQVpc2bAqfkkgPazOOhU-iyKq6TzTP6wzbBYmKU/s1600/valterra_removal_of_factory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="842" data-original-width="1341" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmC3fmQnvOl4In10UepCxRUXo8s1wzygaPqOuwxL_tj4AtJePsSX230lYzVTWLL6EgFK9oucbWpmKkjo2HlupR2eLk8dj6wZjSs23dPQVpc2bAqfkkgPazOOhU-iyKq6TzTP6wzbBYmKU/s640/valterra_removal_of_factory.png" width="640" /></a></div>
<br />
Later in their installation video, we see the completed installation:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrZlfu0lvvMcFVOgwkwe2fsiMCeBLrNtn_bQCxFLN_Hi7U_MAsSLcFBrk0MUAHyjh7gHlAMPBNGyxswQYx0T7qSpTrEpzqQTaDoICPOXGFK6u5k9fgFUlBMYskTUSf2XyyDysZUSpW90M/s1600/valterra_finished_installation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="850" data-original-width="1339" height="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrZlfu0lvvMcFVOgwkwe2fsiMCeBLrNtn_bQCxFLN_Hi7U_MAsSLcFBrk0MUAHyjh7gHlAMPBNGyxswQYx0T7qSpTrEpzqQTaDoICPOXGFK6u5k9fgFUlBMYskTUSf2XyyDysZUSpW90M/s640/valterra_finished_installation.png" width="640" /></a></div>
<br />
<br />
The problem is the Valterra lid bracket -- it is backwards. The way the circular opening is positioned creates two problems:<br />
<br />
<ul>
<li>The lift arm can become dislodged from the slide when the vent lid is closed</li>
<li>There will be a larger effort to "start" the lift process, as the lift arm needs enough force to pop out of the circular opening and begin sliding down the track. This has the potential to put additional wear on the lift mechanism.</li>
</ul>
<div>
In order to fix this, you need to manually invert the bend in the Valterra bracket, and drill two new locating holes. Here are the steps I used to complete this process:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLN7hZFbhtMsx-kO-G0cd2pq7RPiSp2l99spukM7NGKIAdX-omjmMx4vEowg0izpbtbtfIVn8a_VQxYlf6_Q8q7Zyln-EcncW3ukmgUIi1HxbJ5gUuKehb-ODw0KhYgLnxzwHvqZ8_gu0/s1600/image8056.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="887" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLN7hZFbhtMsx-kO-G0cd2pq7RPiSp2l99spukM7NGKIAdX-omjmMx4vEowg0izpbtbtfIVn8a_VQxYlf6_Q8q7Zyln-EcncW3ukmgUIi1HxbJ5gUuKehb-ODw0KhYgLnxzwHvqZ8_gu0/s640/image8056.png" width="640" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFTIY0eP1xSONavPfV28h9nIOgnCYzqdtIwcA6eRx9IzWdVNNY8_yFj5ee_X-ElMc_JvXJkz7xXtpOv559AItae5nID5rttFDXphat_rNWZobB9f6_pEt_4JJ9DaMhqK-Y00wZLCdfiKs/s1600/image8233.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="736" data-original-width="552" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFTIY0eP1xSONavPfV28h9nIOgnCYzqdtIwcA6eRx9IzWdVNNY8_yFj5ee_X-ElMc_JvXJkz7xXtpOv559AItae5nID5rttFDXphat_rNWZobB9f6_pEt_4JJ9DaMhqK-Y00wZLCdfiKs/s640/image8233.png" width="480" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwz0e2nU-FFea2IhGfxcpM9o2DQyz5HZp9lh1HCZjVFBVjeABm9lm6lHj6RMk-tW5WyzYN0-Urubz9hcEBafapXtfMms3dqedAr3pGpu9yhJ8qg-5J7TnBt5x2-6DgqW6rQ2hrXgKIh4o/s1600/g13013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="754" data-original-width="566" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwz0e2nU-FFea2IhGfxcpM9o2DQyz5HZp9lh1HCZjVFBVjeABm9lm6lHj6RMk-tW5WyzYN0-Urubz9hcEBafapXtfMms3dqedAr3pGpu9yhJ8qg-5J7TnBt5x2-6DgqW6rQ2hrXgKIh4o/s640/g13013.png" width="480" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ57FWDMZCHvcKhgenzUIIMy8i1EQEer-Gz_yrnE1tEEPszkKkzMEwuOSHOmSrDgT5nZkc2R01ceTdC8YPJmusE5O2g4J881ExX-rSgz40b3hZawXwwCNSBYNaKdpso3N6Qo2aAUjVysY/s1600/image12779.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="763" data-original-width="573" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ57FWDMZCHvcKhgenzUIIMy8i1EQEer-Gz_yrnE1tEEPszkKkzMEwuOSHOmSrDgT5nZkc2R01ceTdC8YPJmusE5O2g4J881ExX-rSgz40b3hZawXwwCNSBYNaKdpso3N6Qo2aAUjVysY/s640/image12779.png" width="480" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie19LkssDzohGzh6a7kS1Rb39Hd9HmqjFYd0S4PGlkqfiBv5Cb-hnj4NkOlzr1DpYjQY2FivvcSufcJmbhsArrdRfNp5Ky91-7AvYDxwiwTiT7sua6ReHfyFni2p4gjPZZFtYvnz8aexI/s1600/g13205.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="698" data-original-width="930" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie19LkssDzohGzh6a7kS1Rb39Hd9HmqjFYd0S4PGlkqfiBv5Cb-hnj4NkOlzr1DpYjQY2FivvcSufcJmbhsArrdRfNp5Ky91-7AvYDxwiwTiT7sua6ReHfyFni2p4gjPZZFtYvnz8aexI/s640/g13205.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7v-mYP__zr8FMEUdZHtSzS0l4_o4H04EL6xl-BtfLcjMP7nIoMZDCpxMZo5eN-UGn6WLR2gozapfB8c5-JGEpD7K0qLvZ7mR3GWnBGHuJ2nH00CiNMjpBTLJf_5AN5DMrq5OeYsjawjM/s1600/image13362.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="758" data-original-width="569" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7v-mYP__zr8FMEUdZHtSzS0l4_o4H04EL6xl-BtfLcjMP7nIoMZDCpxMZo5eN-UGn6WLR2gozapfB8c5-JGEpD7K0qLvZ7mR3GWnBGHuJ2nH00CiNMjpBTLJf_5AN5DMrq5OeYsjawjM/s640/image13362.png" width="480" /></a></div>
<br />
<div>
<br /></div>
<div>
This is a nice product, and I recommend it, but the included bracket needs to be redesigned such that the vent continues to operate as the original. Valterra's own installation video shows this design flaw clearly.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-67734043725086311392019-06-30T08:12:00.004-07:002019-06-30T08:13:39.646-07:00Sonos Playbar, an "old" TV, and Dolby 5.1My wife got me a Sonos Playbar for my birthday. I was reluctant to accept it, because the 1980s Acoustic Research speakers I have and my old Onkyo receiver were working just fine!<br />
<div>
<br /></div>
<div>
I installed the bar underneath my TV and was blown away by the clarity and volume -- the old speakers and receiver had to go. I also bought the Sonos sub, because bass.</div>
<div>
<br /></div>
<div>
After playing with the speaker for a while I realized the following:</div>
<div>
<ul>
<li>With the optical IN to the Sonos coming from my TV, and <b>only</b> when using the TV's internal tuner (I am a cord cutter), I could see (using the "Settings --> About My Sonos System" option in the Sonos phone app) that the bar was receiving a Dolby Digial 5.1 surround signal.</li>
<li>When I switched to my Roku streaming box, which goes to the TV via an HDMI input, the Sonos would <b>only</b> receive Dolby Digital 2.0. This was the same for any device I connected to the HDMI input.</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM-j0HNGPWozR6tJmRhf3VtRuBsWn8aJ5MseLAaJjO0Vo53O_nK8FAFAhDdC-V-mGeQsfyfzKlFqAtovJ02zn5ghPjgAbZxFqaXqk4RlaZiTlSvdGQfv7W6NTU-Qa_o67Cf3sEyGisf9Q/s1600/oldsetup.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="376" data-original-width="866" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM-j0HNGPWozR6tJmRhf3VtRuBsWn8aJ5MseLAaJjO0Vo53O_nK8FAFAhDdC-V-mGeQsfyfzKlFqAtovJ02zn5ghPjgAbZxFqaXqk4RlaZiTlSvdGQfv7W6NTU-Qa_o67Cf3sEyGisf9Q/s640/oldsetup.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td class="tr-caption" style="font-size: 12.8px;">My original setup, which didn't provide Dolby Digital 5.1 to the Playbar unless using the TV's internal tuner</td></tr>
</tbody></table>
</td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
What I found out was that <b>older </b>TVs will not pass the Dolby Digital 5.1 signal through from HDMI. For whatever reason, the signal will be stripped by the TV. Newer sets apparently don't have this problem.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I also found out that devices like the Roku don't support Dolby Digital 5.1 anyway -- they only support a different standard called DTS Digital Audio. DTS is a competing format, all of the differences between Dolby Digital and DTS are <a href="https://www.maketecheasier.com/dts-vs-dolby-digital/" target="_blank">explained here</a>.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The Sonos Playbar <b>does not support DTS, </b>so we need to make sure to provide the Sonos Playbar with a Dolby Digital signal.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Really, there are two problems:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>An old TV that strips the surround signal from the HDMI input</li>
<li>A streaming box that doesn't support Dolby Digital 5.1</li>
</ul>
<div>
<b><u>Solution(s):</u></b></div>
<div>
<br /></div>
<div>
There is no single solution for both problems. Purchasing a new TV would probably (after careful homework) not strip the surround information from the HDMI input. However, a new TV isn't an option for me. I paid dearly for this TV in 2010, and it is staying on my wall until it dies.</div>
<div>
<br /></div>
<div>
It turns out that <a href="https://amzn.to/2LuJaso" target="_blank">there is a box</a> that will strip the Dolby information off of the HDMI input, and route that signal to its own optical digital output.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="margin-left: auto; margin-right: auto;"><a href="https://amzn.to/2LuJaso" target="_blank"><img border="0" data-original-height="332" data-original-width="823" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtdBgYAuJH5ohY5fjElJIRDTZgqYUqjCG9XjwjoxyIrO0N3kpIb8xum4BFOy3XJ9Ke6hYtkqmfpBeQNHJbVgyWU7Hkj8zYnnUlowtULrNq9jodxeXpdcqNYeTZr5iK-85fuYG5fy11V-s/s400/2019-06-30+10_17_40-Clipboard.png" width="400" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="https://amzn.to/2LuJaso" target="_blank">J-Tech Digital 5 Port HDMI Switch & Audio Extractor</a></td></tr>
</tbody></table>
<div>
<br />
For streaming, the <a href="https://amzn.to/2RJcRal" target="_blank">Amazon Fire TV Cube</a> supports Dolby Digital 5.1. It has the capability to <a href="https://developer.amazon.com/docs/fire-tv/dolby-integration-guidelines.html" target="_blank">transcode DTS</a> (which most streaming providers support) into Dolby Digital 5.1. </div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><span style="margin-left: auto; margin-right: auto;"><a href="https://amzn.to/2RJcRal" target="_blank"><img border="0" data-original-height="315" data-original-width="375" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYX6gTPYzHTKuTqjD_LG91Y1esxvtbIAwF3DM8XwAQOtsnev2CxniyFrKoWuyClf1YtZO0V2fhWFtR8_Z9JU-UGdBT984fZ_eVhfNOepEnkS0KtByVJ_ZJZ0tZTDGxiQYRvc15Ga8BXaQ/s320/2019-06-30+10_25_08-Amazon+Fire+TV+Cube%252C+hands-free+with+Alexa+and+4K+Ultra+HD%252C+streaming+media+play.png" width="320" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="https://amzn.to/2RJcRal" target="_blank">Amazon Fire TV Cube</a></td></tr>
</tbody></table>
<div>
<div>
The only downside to this device is the continual feud between Google and Amazon, so you will lose YouTube and Google Play video support. (Update: <a href="https://arstechnica.com/gadgets/2019/04/amazon-and-google-settle-feud-bring-youtube-back-to-fire-tv-devices/" target="_blank">It looks like the feud is ending</a>?) </div>
<div>
<br /></div>
<div>
To continue to use the Google Play movies that you purchased, you can use a service like <a href="http://moviesanywhere.com/">moviesanywhere.com</a>, which will aggregate movies that you've paid for from different providers and let you view them all under one roof. Note, <a href="https://help.moviesanywhere.com/hc/en-us/articles/115005452166-Movie-is-missing-from-my-Movies-Anywhere-collection" target="_blank">this is supported for most movies, but not all</a>. </div>
</div>
<div>
<br /></div>
<div>
Make sure you tell the Fire TV Cube to always use Dolby Digital, you'll find this in the settings for the Fire TV Cube as below:</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh42Vix7c9oPdifX9O3pjQArg8kf0cKZS6VibcXqDMK9iAg5iMkxzRL3rNvNsxwn3WrW9-95PFATthCM2Wd8sbSt-FgXr-5yrOv1iHu5IDe6kD_zr-Lu1w4r21ahbbvIYWa3s0cPep4njM/s1600/IMG_20190630_105433335.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh42Vix7c9oPdifX9O3pjQArg8kf0cKZS6VibcXqDMK9iAg5iMkxzRL3rNvNsxwn3WrW9-95PFATthCM2Wd8sbSt-FgXr-5yrOv1iHu5IDe6kD_zr-Lu1w4r21ahbbvIYWa3s0cPep4njM/s640/IMG_20190630_105433335.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Configure Fire TV Cube to always output Dolby Digital</td></tr>
</tbody></table>
<div>
I've noticed that *some* providers don't give you the surround until you turn it on explicitly. moviesanywhere.com is one of those providers. So, keep an eye on your Sonos phone app to see what the Playbar is receiving:</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFGjpjqfCDzCdBL1q7f1vX0dP4osxaAGDpoSe7_EC2yHl_mt4RxDAfCV5-9DHJ-SDvw2nEJYK6NDAixROgiVbZKjnLxwDiO9NI-7mYfJ1vV5eCCodKqU3nVkDo1PRHPYi_oz1vqb0SVpE/s1600/Screenshot_20190630-092835.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="800" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFGjpjqfCDzCdBL1q7f1vX0dP4osxaAGDpoSe7_EC2yHl_mt4RxDAfCV5-9DHJ-SDvw2nEJYK6NDAixROgiVbZKjnLxwDiO9NI-7mYfJ1vV5eCCodKqU3nVkDo1PRHPYi_oz1vqb0SVpE/s640/Screenshot_20190630-092835.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The "About My Sonos System" dialog on my Android phone, indicating what type of signal the Playbar is receiving</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
My new setup looks like this:</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwJosiHNyKHsv0MYDJ55CejRsKPEWg-1YSAH3KwL_KZzZxYo3CLfiXrdPCXeb7NcXwca51IeufO__uDM4qZ6qp8oLvv1c9j_7SzIYO_Em0EII9lRC1vVsPjWeAajT81UHUv0RuKdq1k7Y/s1600/2019-06-30+10_42_26-Clipboard.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="525" data-original-width="962" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwJosiHNyKHsv0MYDJ55CejRsKPEWg-1YSAH3KwL_KZzZxYo3CLfiXrdPCXeb7NcXwca51IeufO__uDM4qZ6qp8oLvv1c9j_7SzIYO_Em0EII9lRC1vVsPjWeAajT81UHUv0RuKdq1k7Y/s640/2019-06-30+10_42_26-Clipboard.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The new setup uses the J-Tech HDMI switch to strip Dolby Digital signals from HDMI inputs and pass them to the Playbar via its own optical digital output</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLTwm2HKk5IfUUBxGB64oed3k85Ur90rFV6yy7ja0avWhIXqEMpOn0IvrxOIF-BOSJn5-xcAEWPBtJTHpkDcjbqzHnsuLkovjoewPo3z_-obldTtIAdTbvJx_qZJvRkimfuTHwNfRlC4/s1600/IMG_20190630_105307006.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLTwm2HKk5IfUUBxGB64oed3k85Ur90rFV6yy7ja0avWhIXqEMpOn0IvrxOIF-BOSJn5-xcAEWPBtJTHpkDcjbqzHnsuLkovjoewPo3z_-obldTtIAdTbvJx_qZJvRkimfuTHwNfRlC4/s320/IMG_20190630_105307006.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The J-Tech HDMI switcher in service</td></tr>
</tbody></table>
<div>
The only remaining problem with this setup is the internal TV tuner. If I want to watch OTA TV, I have to connect the optical output from the TV directly to the Playbar. This might be solved by adding a separate TV tuner device, like <a href="https://amzn.to/2ZWFi7v" target="_blank">this one</a> (that also provides recording capability). There are also several devices that will provide one or two TV tuners, and make that TV signal available for streaming by your laptop, TV, phone, etc. The <a href="https://amzn.to/2Jgl0iD" target="_blank">Amazon Fire TV Recast</a> is one such device.</div>
<div>
<br /></div>
<div>
I hope this helps you with your Sonos Playbar setup.</div>
<div>
<br /></div>
<br />
<div>
<br /></div>
</div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-50548255861002523342018-01-07T14:07:00.000-08:002018-01-07T14:38:37.401-08:00How to install KICAD libraries in Ubuntu Linux (or Mint)After installing KiCAD from PPA on my Linux machine, I had no libraries installed. Here's he method used to install the libraries from github. I did the following with KiCAD 4.0.7.<br />
<br />
1. Use github to pull the kicad libraries:<br />
<div>
<pre class="snippet">~/Projects $ git clone https://github.com/KiCad/kicad-library.git</pre>
<br /></div>
<div>
2. Switch to kicad-library and do: </div>
<div>
<pre class="snippet">~/Projects/kicad-library $ cmake .</pre>
<br />
<br /></div>
<div>
3. After cmake creates the makefile, run:<br />
<pre class="snippet">sudo make install</pre>
<br />
<br />
4. Watch the output of the above command. You should find that stuff gets installed into<br />
<pre class="snippet">/usr/local/share/kicad</pre>
<br />
<ol>
</ol>
5. Restart KiCAD and adjust paths under<br />
<pre class="snippet">Preferences->Configure Paths</pre>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9i9H2a46HYkHR1EjJiDD8j6TdfNtYz6-9iqEMD036spmv2dTuOE4xfxG5seS4KyVZXFrqrhn6z5crtBmXsIAw7G3GUSSwwYPu6T9dqFpyYsyyZ2ZcwDq1x-EvmIGVmjYSOIy6zefXes/s1600/Selection_195.png" imageanchor="1"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9i9H2a46HYkHR1EjJiDD8j6TdfNtYz6-9iqEMD036spmv2dTuOE4xfxG5seS4KyVZXFrqrhn6z5crtBmXsIAw7G3GUSSwwYPu6T9dqFpyYsyyZ2ZcwDq1x-EvmIGVmjYSOIy6zefXes/s400/Selection_195.png" width="400" /></a><br />
<br />
6. Restart KiCAD again.<br />
<br />
You may *still* see this window in Linux:<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifL5oRMd2YGcwTTcAKIq34vV3rRuUH3GukhiDLDL3kV34tWaqfwW_eZcNONwJ1ewxW55OV0YDLzYsClSpXyM4FqJrVGo0rrAClZpmBF8vann_EjhNA2LXfr4RQyngJEwvs3mrRCygyxA8/s1600/Selection_196.png" imageanchor="1"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifL5oRMd2YGcwTTcAKIq34vV3rRuUH3GukhiDLDL3kV34tWaqfwW_eZcNONwJ1ewxW55OV0YDLzYsClSpXyM4FqJrVGo0rrAClZpmBF8vann_EjhNA2LXfr4RQyngJEwvs3mrRCygyxA8/s320/Selection_196.png" width="320" /></a><br />
<br />
This is because, as near as I can tell, these are old library names, and in Linux, they should be case-sensitive. For example, the above error shows that "switches" is not found, but:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaVT4pJLuL_dwAyQx7JZa1v8_98BBo4MA5CfQXJz7-khLkDDfti03Ols5SvbQBp4mEP93e4PeaAHr7XhZqQ5NvUylayFuyiAhQLrPmUao1b4INx13ZmuEL6w7AdJD_e4AbHpFUOum1ygM/s1600/Selection_197.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaVT4pJLuL_dwAyQx7JZa1v8_98BBo4MA5CfQXJz7-khLkDDfti03Ols5SvbQBp4mEP93e4PeaAHr7XhZqQ5NvUylayFuyiAhQLrPmUao1b4INx13ZmuEL6w7AdJD_e4AbHpFUOum1ygM/s1600/Selection_197.png" /></a><br />
<br />
Notice there is a "analog_switches.lib" as well as a "Switch.lib". From the Component libraries preferences, you can remove *all* of the default component library files:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWW6K7Z-D7XQyL28_4IrX56wuidCFdUYfpKjLwJ2PAIE5n0Xz19RHna7T5d6_SsGCgI8nrh1D2hAbmYwPLDrqhyphenhyphenuBfmrrVKFV5nMjtjDqkmUiFbLdRgq569IqAmsb1onrHxk2_ilHCCuA/s1600/Selection_199.png" imageanchor="1"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWW6K7Z-D7XQyL28_4IrX56wuidCFdUYfpKjLwJ2PAIE5n0Xz19RHna7T5d6_SsGCgI8nrh1D2hAbmYwPLDrqhyphenhyphenuBfmrrVKFV5nMjtjDqkmUiFbLdRgq569IqAmsb1onrHxk2_ilHCCuA/s320/Selection_199.png" width="252" /></a><br />
<br />
Now click "Add" and select *all* of the *.lib files from /usr/local/share/kicad/library.<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-3728635872748122232017-04-09T13:20:00.002-07:002017-04-09T13:20:36.414-07:00Updated: Datalogging with Google Sheets in 2017In 2011 I posted an <a href="http://leftbraintinkering.blogspot.com/2011/07/datalogging-with-google-spreadsheets.html" target="_blank">article</a> about datalogging with Google Sheets. I just got a <a href="http://leftbraintinkering.blogspot.com/2011/07/datalogging-with-google-spreadsheets.html?showComment=1491503328519#c6264708727496035878" target="_blank">comment</a> asking if the info was still valid. Google Sheets has changed a lot in the last few years, so here is an updated tutorial for 2017.<br />
<br />
1. Go to <a href="http://sheets.google.com/" target="_blank">Google Sheets</a><br />
2. Create a blank sheet<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL-JRtCQ9Vsm-0lV7N7wdgUanNBTiugi_psGsvU0SgyQQoL88q71i36epPGQjcayXLHLWdwG8Z4Wq6EW2tCoJee9PSSChJTdLOINR1TWQD_tfd3DaZkmDwc1ZRguFZP0XC1yqvmI00fcI/s1600/Selection_163.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL-JRtCQ9Vsm-0lV7N7wdgUanNBTiugi_psGsvU0SgyQQoL88q71i36epPGQjcayXLHLWdwG8Z4Wq6EW2tCoJee9PSSChJTdLOINR1TWQD_tfd3DaZkmDwc1ZRguFZP0XC1yqvmI00fcI/s400/Selection_163.png" width="400" /></a></div>
<br />
<br />
3. Create a form<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7C0HO18Y9cR_xNqS2GkbkzonFOKqX04AI1p4yoyYxDPmWaK86c2kneM_3UcMdDo7hx0uF-j1BAox8TD5QfFlzyjrZM13fQTRNRyVX77EbutEe37g9k5wPEIRdpvBJriPwEneiVeMqnSg/s1600/Selection_160.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7C0HO18Y9cR_xNqS2GkbkzonFOKqX04AI1p4yoyYxDPmWaK86c2kneM_3UcMdDo7hx0uF-j1BAox8TD5QfFlzyjrZM13fQTRNRyVX77EbutEe37g9k5wPEIRdpvBJriPwEneiVeMqnSg/s400/Selection_160.png" width="400" /></a></div>
<br />
<br />
4. Create a single question of type "short answer"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLtA6Mm0m3pPGTU9qLjZybAEJVxCLKmF-ZiZj9Yeah0AxmEMIAhSuM7ijER3GbBcgqga3VBuI5VhkgBhdCh6wEs8VAlqJWT9VrrNrX6Zs5oqRyNWZ3I-F4x9Mgpm78EK9cLz5PfWlyttY/s1600/Selection_162.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLtA6Mm0m3pPGTU9qLjZybAEJVxCLKmF-ZiZj9Yeah0AxmEMIAhSuM7ijER3GbBcgqga3VBuI5VhkgBhdCh6wEs8VAlqJWT9VrrNrX6Zs5oqRyNWZ3I-F4x9Mgpm78EK9cLz5PfWlyttY/s400/Selection_162.png" width="400" /></a></div>
<br />
5. When you've created the question "What is the temperature" with type "short answer" as above, close the tab in your browser.<br />
<br />
6. Reopen the spreadsheet from step 3. You should now see:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDqrK3guYxpvC1edb1bNhB9baBWbg1OtWpM_MK-kqKHsBdbEvnkrk2byqh5WygIuXFY6SwZTsdQJzGOBpAK_4M8LA0trF5dTgxK_XSnDlu9yQZ3HbM-5DE9H8-gXRI_IT6RMR-OFYvB9w/s1600/Selection_164.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDqrK3guYxpvC1edb1bNhB9baBWbg1OtWpM_MK-kqKHsBdbEvnkrk2byqh5WygIuXFY6SwZTsdQJzGOBpAK_4M8LA0trF5dTgxK_XSnDlu9yQZ3HbM-5DE9H8-gXRI_IT6RMR-OFYvB9w/s400/Selection_164.png" width="400" /></a></div>
<br />
If you don't see this, close and re-open the spreadsheet from Google Sheets.<br />
<br />
7. Google now stores all of your forms at <a href="http://forms.google.com/" target="_blank">Google Forms</a>. Go there and you should see the form you created in step 4.<br />
<br />
8. Click the SEND button<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYD5fX_vkoFqLRFucmuZ5RAlFM42-v-OX3Rd0w1tdv0CLdJA7QBYOJmX6G_v2ZJwJs6criXX_6DouUUnL7F5TB4ivCkC2uYfReRENNZ8hS-AXxTarGgx2fy6bfmThL2INlHMADrwqrvDI/s1600/Selection_165.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYD5fX_vkoFqLRFucmuZ5RAlFM42-v-OX3Rd0w1tdv0CLdJA7QBYOJmX6G_v2ZJwJs6criXX_6DouUUnL7F5TB4ivCkC2uYfReRENNZ8hS-AXxTarGgx2fy6bfmThL2INlHMADrwqrvDI/s400/Selection_165.png" width="400" /></a></div>
<br />
9. Click the link icon to get a link to your form<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNU4v_bFcWM5MDqG1OxCKgK97ff4EEYh4SpY_shujug3Qqx6axTihustGGDamHtGnRy5dTqaiAmGQ7lW4KpMGa5jfU8MX7XWIxBxa5wdvMI-IAyIfXfU4Rs7OzxB4kbZbXX82aQ2GZoCg/s1600/Selection_166.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNU4v_bFcWM5MDqG1OxCKgK97ff4EEYh4SpY_shujug3Qqx6axTihustGGDamHtGnRy5dTqaiAmGQ7lW4KpMGa5jfU8MX7XWIxBxa5wdvMI-IAyIfXfU4Rs7OzxB4kbZbXX82aQ2GZoCg/s400/Selection_166.png" width="400" /></a></div>
<br />
10. Copy/paste the link into your browser. I'm using Chrome.<br />
<br />
11. After the form opens in your browser, hit ctrl+shift+i to open the developer console.<br />
<br />
12. Click the "Network" tab, and also click the option "Preserve Log". Your screen should look like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfq3Ep3xus1lS2NlAmhOsbW8SQ10O728Ru7EexcGFI7VG5tv31zWXKdNgHLaImymi-n_Y91EcIHaWgU8yk0RtpDbtKwBkUB5VoJ16fst-z95kS4WCX4gG3wTdvPpCl-b5t2AWcou2l45s/s1600/Selection_167.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfq3Ep3xus1lS2NlAmhOsbW8SQ10O728Ru7EexcGFI7VG5tv31zWXKdNgHLaImymi-n_Y91EcIHaWgU8yk0RtpDbtKwBkUB5VoJ16fst-z95kS4WCX4gG3wTdvPpCl-b5t2AWcou2l45s/s400/Selection_167.png" width="400" /></a></div>
<br />
13. Type an answer in your form and hit submit.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVh1qy3VeeaeLf0YG9pdpQH8rxq-hd6ha95PKU_z_Ff6oAp4SZmFA6poaVHZCQ_FhvlNH_dkghIev0ZtA7-qia6n9Szjz2h19YLFOgNvXzfdgtw4j3z29jhyphenhyphenpITUQl8E6RadCsPSUeCY0/s1600/Selection_168.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVh1qy3VeeaeLf0YG9pdpQH8rxq-hd6ha95PKU_z_Ff6oAp4SZmFA6poaVHZCQ_FhvlNH_dkghIev0ZtA7-qia6n9Szjz2h19YLFOgNvXzfdgtw4j3z29jhyphenhyphenpITUQl8E6RadCsPSUeCY0/s400/Selection_168.png" width="400" /></a></div>
<br />
14. A bunch of stuff will appear in the Network tab. This is the browser magic that happens in the background. Scroll to the top and find the "formResponse" with type "document", like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJLmi68aSXd0MMuOOO9FAGrLKNJyCKWX9dymVkYMOV8n2UU2dd5YupnbUT3E2iUKn0pJHOrzu_2mzOHQ1XifVJJdcTbPio33juaO0EwrslaJvJVRpPXRs9MdaWvN9J7Pk536MS_VoNdX0/s1600/Selection_170.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJLmi68aSXd0MMuOOO9FAGrLKNJyCKWX9dymVkYMOV8n2UU2dd5YupnbUT3E2iUKn0pJHOrzu_2mzOHQ1XifVJJdcTbPio33juaO0EwrslaJvJVRpPXRs9MdaWvN9J7Pk536MS_VoNdX0/s640/Selection_170.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
15. Click this line, and you'll be able to see more information. The cool stuff will be the "general" tab and the "form data" tab as shown here:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJLW4KxFRp4v4HcwoLseltGXUzqfzQio2j8K8uOLKQrGpjKalH_z79LzzinQd41jodulpYSoOFltpFHFrzG3-97ba6OFIlX5nrMEAABoD9DNp0ufrcds03WR9Kfo2NL245HaRQHZnZ9co/s1600/Selection_171.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJLW4KxFRp4v4HcwoLseltGXUzqfzQio2j8K8uOLKQrGpjKalH_z79LzzinQd41jodulpYSoOFltpFHFrzG3-97ba6OFIlX5nrMEAABoD9DNp0ufrcds03WR9Kfo2NL245HaRQHZnZ9co/s640/Selection_171.png" width="640" /></a></div>
<br />
16. Now we have enough information to assemble a URL that simulates a form response. The format is:<br />
<br />
<ul>
<li>Your request URL: (copy/paste from the information above)</li>
<li>Add a question mark to the end of the request URL</li>
<li>Add entry.xxxxxx=<your_value_here> after the question mark (copy from the "Form Data" section)</your_value_here></li>
<li>Paste that entire string into your browser's address bar and hit enter.</li>
</ul>
<div>
Here is an example using my spreadsheet:</div>
<div>
<br /></div>
<div>
<pre class="snippet">https://docs.google.com/forms/d/e/1FAIpQLSe0K7ICSWcMv_-oBO42-irBkkSln4Qu5IxPfPgT-9GQqOyB7w/formResponse?entry.1743242728=11223344</pre>
</div>
<br />
<br />
If you copy/paste the above URL into your browser, you will append "11223344" into my example sheet.<br />
<br />
Similarly, if you copy/paste this URL into your browser:<br />
<br />
<pre class="snippet">https://docs.google.com/forms/d/e/1FAIpQLSe0K7ICSWcMv_-oBO42-irBkkSln4Qu5IxPfPgT-9GQqOyB7w/formResponse?entry.1743242728=999999</pre>
<br />
<br />
999999 will be appended into my example sheet. I've made the sheet public and you can see the results instantly <a href="https://docs.google.com/spreadsheets/d/1PDfS7pz99ei9v1jQmSAjnu_yI0atiauxBAdxFrVRJuY/edit?usp=sharing" target="_blank">here</a>.<br />
<br />
If you follow the instructions above, you can do the same thing for your own sheets, and use them for datalogging, from IoT devices or really anything that is internet-enabled. <br />
<br />
Have fun.<br />
<br />William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-67926616325420337492017-04-01T14:05:00.005-07:002017-04-01T14:05:49.555-07:00Martian Notifier Teardown<br />
<div>
I bought a <a href="https://www.amazon.com/gp/product/B00IGJ67R2/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B00IGJ67R2&linkCode=as2&tag=leftbraitink-20&linkId=dfb5c18a4f7363abd512fb2e513bba33" target="_blank">Martian Notifier</a> watch new from Amazon for $33. This seemed to be the perfect 'smart' watch for me, it has only one line of text and has a battery life (for the 'smart' portion) of about five days. The 'watch' portion uses a quartz movement and separate battery that will give you the time with real hands for about three years. Although it is now on the market for more than 3 years, the liquidation price was attractive to me.</div>
<div>
<br /></div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-8bDR4zX_NqI/WOAGxVNtQ7I/AAAAAAAAnMY/a_Pv5aEkDwcS14YDAjyzJpDi_8vaBn1lwCPcB/s1600/IMG_20170401_155920.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="207" src="https://1.bp.blogspot.com/-8bDR4zX_NqI/WOAGxVNtQ7I/AAAAAAAAnMY/a_Pv5aEkDwcS14YDAjyzJpDi_8vaBn1lwCPcB/s400/IMG_20170401_155920.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">My <a href="https://www.amazon.com/gp/product/B00IGJ67R2/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B00IGJ67R2&linkCode=as2&tag=leftbraitink-20&linkId=dfb5c18a4f7363abd512fb2e513bba33">Martian Notifier</a> (with aftermarket nylon <a href="https://www.amazon.com/gp/product/B005P1GO9K/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B005P1GO9K&linkCode=as2&tag=leftbraitink-20&linkId=20a36bcf457c32c88356f1eccb6568dc">band</a>)</td></tr>
</tbody></table>
</div>
<div>
I like the look of a nylon band (seems military-ish) so I bought <a href="https://www.amazon.com/gp/product/B005P1GO9K/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B005P1GO9K&linkCode=as2&tag=leftbraitink-20&linkId=20a36bcf457c32c88356f1eccb6568dc" target="_blank">this one</a> originally for my Moto 360 (a pile of garbage that I returned after a week). I still had this band and the 22mm size was a match for the Notifier, so on it goes:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-KFslPH9hl2Y/WOAG4GjzOgI/AAAAAAAAnMg/Uy6op5Iwv0obBuRfkkQU70wZI9K3-7oYgCPcB/s1600/IMG_20170401_155926.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="336" src="https://2.bp.blogspot.com/-KFslPH9hl2Y/WOAG4GjzOgI/AAAAAAAAnMg/Uy6op5Iwv0obBuRfkkQU70wZI9K3-7oYgCPcB/s400/IMG_20170401_155926.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Aftermarket <a href="https://www.amazon.com/gp/product/B005P1GO9K/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B005P1GO9K&linkCode=as2&tag=leftbraitink-20&linkId=20a36bcf457c32c88356f1eccb6568dc">22mm nylon band</a> on the Notifier</td></tr>
</tbody></table>
</div>
<h4>
(Thinking about) Hacking the Notifier</h4>
<div>
I've been wearing the Notifier for a week now, and I like it. However, as with any tech there are things I wish it did differently.<br />
<br />
I can't find any evidence that anyone has tried to hack the Notifier's firmware yet. So far I've been able to capture a firmware flash of the watch, but I've not tried to reflash it yet. Martian created a Windows or Mac based Firmware upgrade tool that downloads the firmware and updates the watch.<br />
<br />
I've got USB captures of this tool asking the watch for the firmware version as well as the entire upgrade process.</div>
<div>
<br /></div>
<div>
Before bricking my new watch, I wanted to know what kind of hardware was inside it, so I purchased a broken one on eBay for $5. The broken watch was in perfect shape, so I charged it overnight to be sure it was dead. The watch showed some signs of life, with the notification LED blinking red (solid red is normal for charging) but the watch never fully booting. I took the watch apart and found that it had terminal water damage. It was a good teardown candidate.</div>
<div>
<h4>
Notifier Teardown</h4>
<div>
Surprisingly, it seems no one has done a public teardown of this watch yet. I did find this <a href="http://www.techinsights.com/reports-and-subscriptions/open-market-reports/Report-Profile/?ReportKey=11261">commercially available teardown report</a> but to you have to buy it to read it.</div>
<div>
<br /></div>
Here's my ten-cent teardown.</div>
<div>
<br /></div>
<div>
Photo album of terrible photos <a href="https://goo.gl/photos/5KEuh6BxKNfufBtR9">here</a>.</div>
<div>
<br /></div>
<div>
<b>Martian Notifier Watch</b></div>
<ul>
<li><b>Watch movement</b>: Miyota 2025 2 hand quartz movement</li>
<ul>
<li>Same movement used in Citizen quartz watches</li>
<li>3 year battery life</li>
<li><a href="http://miyotamovement.com/pdf/spec_2025.pdf">Specifications</a></li>
<li><a href="http://miyotamovement.com/pdf/draw_2025.pdf">Drawing</a>:</li>
<li><a href="https://www.youtube.com/watch?v=KiecL-aZh40">Video</a> of movement appearance</li>
</ul>
<li><b>Watch battery</b>: 377 / SR626SW</li>
</ul>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgfoJ0Ygxq8ip9TbMCacH9PtjetfVti7lOeSSyahk-ppDnhz4CXzeGRhADA657lua7H8dauug0d3CQLWXbwsLD5qtPY0CcySgdh9S29eUMoT_jpBR7t23RDH3zjI5y8uxnCY9XX-zwKz0/s1600/IMG_20170330_200059.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgfoJ0Ygxq8ip9TbMCacH9PtjetfVti7lOeSSyahk-ppDnhz4CXzeGRhADA657lua7H8dauug0d3CQLWXbwsLD5qtPY0CcySgdh9S29eUMoT_jpBR7t23RDH3zjI5y8uxnCY9XX-zwKz0/s400/IMG_20170330_200059.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Martian Notifier Layout</td></tr>
</tbody></table>
<div>
<b><br /></b>
<b>Martian Notifier Connected Device Hardware Details</b></div>
<ul>
<li><b>Battery</b>: AE292025P -- marked as containing lead -- LiPoly? </li>
<ul>
<li>3.7V (?), 0.44Wh</li>
<li>Can't find a hit for the 292025 part number, but <a href="https://www.alibaba.com/showroom/302025-battery.html">302025</a> looks very similar.</li>
</ul>
<li><b>Display</b>: PG-9616TSWD</li>
<ul>
<li>96x16 OLED</li>
<li>I2C interface</li>
<li><a href="http://kitronixdisplay.en.ecplaza.net/offers/069-96x16-mono-blue-oled-display_8061215">This one</a> is similar</li>
</ul>
<li><b>Microprocessor</b>: CSR <a href="http://www.csr.com/products/63/csr8670">8670CG</a></li>
<ul>
<li>Has a lot of capabilites, including onboard DSP and audio output</li>
<li>Not much info about programming this device in the public domain</li>
</ul>
<li><b>3-Axis Accelerometer</b>: 263 8451 3EAF</li>
<ul>
<li>Comes from NXP. Datasheet <a href="http://www.nxp.com/assets/documents/data/en/data-sheets/MMA8451Q.pdf">here</a>.</li>
<li>Probably Martian was intending to use this accelerometer for fitness tracking, but maybe due to the hit to battery life decided against it. The watch software and phone companion app makes no use of this hardware that I can tell.</li>
</ul>
<li><b>Flash memory</b>: <a href="http://www.macronix.com/Lists/Datasheet/Attachments/5176/MX25U1635E,%201.8V,%2016Mb,%20v2.1.pdf">MX25U1635E</a> (3R181 000-X)</li>
<ul>
<li>Macronix serial flash, 1.8V, 16 MBit</li>
<li>Not clear what the purpose of this flash storage is. The 8670 micro has 16 Mbit of flash onboard already.</li>
<li>Guess: this flash storage is possibly used for holding an updated version of the device firmware, rather than reprogramming the flash storage on the micro?</li>
</ul>
</ul>
<div>
If I get any farther hacking the watch, I'll have another post about it.</div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com11tag:blogger.com,1999:blog-7299582172907567087.post-62032813579462457822017-02-05T14:10:00.001-08:002017-03-26T11:02:00.017-07:00Moto G4 Root from LinuxHere are the steps I followed to root my Moto G4. There were some guides on xda that involved reflashing boot.img. While it seems many have done this with success, flashing the boot.img is not something I like doing and I try to avoid it if at all possible. The below method will will modify the boot image, but the SuperSU installation script does it for you. In my opinion this is still risky but perhaps less risky than flashing a boot.img that you found on the internet.<br />
<br />
I performed all of the below steps from my Linux machine; there is no need to use Windows.<br />
<br />
Unlocking the bootloader is the same as performing a system reset; <b>you <u>will</u> lose all of your data</b>, so make a backup first.<br />
<br />
If you brick your phone following these steps, well, that's on you.<br />
<h2>
<u>Preliminary Steps</u></h2>
<ol>
<li>Enable developer options on the phone</li>
<li>Inside developer options, enable "OEM Unlocking"</li>
<li>Enable "USB debugging"</li>
<li>On the computer: have the Android SDK installed (at least adb and fastboot utilities)</li>
<li>Back up important data/pictures/etc from the phone.</li>
</ol>
<h2>
<u>Unlock Bootloader</u></h2>
<h3>
Reboot the phone into the bootloader:</h3>
<br />
<pre class="snippet">wskellenger@marquette ~ $ adb reboot bootloader
</pre>
<br />
<h3>
See if the device is visible:</h3>
<pre class="snippet">wskellenger@marquette ~ $ fastboot devices
no permissions (verify udev rules); see [http://developer.android.com/tools/device.html] fastboot
</pre>
For me, it was visible but with no permissions. Try it with root:
<br />
<pre class="snippet">wskellenger@marquette ~ $ sudo $(which fastboot) devices
ZY223R9KC9 fastboot
</pre>
<h3>
Obtain the unlock (unique to your phone):</h3>
<pre class="snippet">wskellenger@marquette ~ $ sudo $(which fastboot) oem get_unlock_data
(bootloader) slot-count: not found
(bootloader) slot-suffixes: not found
(bootloader) slot-suffixes: not found
...
(bootloader) Unlock data:
(bootloader) 3A45210437945222#
(bootloader) 5A5932323352394B4339004D6F746F2047200000#
(bootloader) 5342C312F53218107391149534B38F6928DBBD07#
(bootloader) C6506801000000000000000000000000
OKAY [ 0.103s]
finished. total time: 0.103s
</pre>
<div>
<br /></div>
<h3>
Format the unlock seed:</h3>
Copy the output lines and paste them into vim. Then do:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTr44j1XLVUiJVmyGedaAXXD8SCx7Lsg5LtjoB0Z6IXa-_ZoYoxlilnp8Mjl8zIif7F_hWrU3tpANWYu7vE9vywUl2PGtbz8esKTwuZywMOsooE5dXJjMBg1gjoobFWzYCYSfXfvyM9fA/s1600/%255BNo+Name%255D+%252B+-+GVIM_144.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTr44j1XLVUiJVmyGedaAXXD8SCx7Lsg5LtjoB0Z6IXa-_ZoYoxlilnp8Mjl8zIif7F_hWrU3tpANWYu7vE9vywUl2PGtbz8esKTwuZywMOsooE5dXJjMBg1gjoobFWzYCYSfXfvyM9fA/s400/%255BNo+Name%255D+%252B+-+GVIM_144.png" width="400" /></a></div>
<br />
<br />
(note the search/replace command at the bottom)<br />
<pre class="snippet">:%s/(bootloader) //gc
</pre>
<br />
Accept all replacements. You now have this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_WUh2raHNDA8TrxQsHyMNyb508_h_dTSBy5ZvjdMueSmcBXvPfK8-yW5g3ezMOMZ6PWLQRDShKdIWBCFRicPHeQWb9W8jLL1iMx3s30iaCZBOiDVndnGtHPTnNzB6aRY4qewCkX8__HU/s1600/%255BNo+Name%255D+%252B+-+GVIM_145.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_WUh2raHNDA8TrxQsHyMNyb508_h_dTSBy5ZvjdMueSmcBXvPfK8-yW5g3ezMOMZ6PWLQRDShKdIWBCFRicPHeQWb9W8jLL1iMx3s30iaCZBOiDVndnGtHPTnNzB6aRY4qewCkX8__HU/s400/%255BNo+Name%255D+%252B+-+GVIM_145.png" width="400" /></a></div>
<br />
Place your cursor on the first line and type "4gJ" to join all of the lines without spaces:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHW7n98QoDhimQHjJ6WcNrJwhFZgHaSxl-x0SGvfUgGhE30Bc28A2sjaImvnWfEXnsvkN6K6u_Y2_U3ZKjMMB8VIlBhih7lsKBVCg9ZkT2kqc770qHNVX_44HxHBXBUqbA_m4CN54VjdI/s1600/%255BNo+Name%255D+%252B+-+GVIM_146.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHW7n98QoDhimQHjJ6WcNrJwhFZgHaSxl-x0SGvfUgGhE30Bc28A2sjaImvnWfEXnsvkN6K6u_Y2_U3ZKjMMB8VIlBhih7lsKBVCg9ZkT2kqc770qHNVX_44HxHBXBUqbA_m4CN54VjdI/s400/%255BNo+Name%255D+%252B+-+GVIM_146.png" width="400" /></a></div>
<br />
<h3>
Get your unlock key from Motorola:</h3>
Go <a href="https://motorola-global-portal.custhelp.com/app/standalone%2Fbootloader%2Funlock-your-device-b">here</a>, and paste the string you created above from vim into Motorola's webpage:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ79j5jigxcD_3V_9kIYMFyzK55w3IJPMjfY6O3cWL0ZMAADytZXx1-idlFGp-wtCR9-iBjbWd6qdOmSPO4BbX_RoUYUbITu4o7Pr5vBytfOqVAV8Q3HIgd2mNIc3u39SLYXHyF1Gxm0g/s1600/Selection_147.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ79j5jigxcD_3V_9kIYMFyzK55w3IJPMjfY6O3cWL0ZMAADytZXx1-idlFGp-wtCR9-iBjbWd6qdOmSPO4BbX_RoUYUbITu4o7Pr5vBytfOqVAV8Q3HIgd2mNIc3u39SLYXHyF1Gxm0g/s400/Selection_147.png" width="315" /></a></div>
<br />
A friendly/pleasant (really!) email will arrive with the unlock code:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFhvnoZOHt_HuCtb7Bupmj9IfNuzaAHI_QS3gKC-xunoECErTnADbx9YHq7aNqaK07IDK49wU6s4TG2Q2OYincezl4xdnpEXMJHD7Cyp0fH9AGl72teiWnLh3IqCbFkuxMTrWQWbg7YmY/s1600/Selection_148.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFhvnoZOHt_HuCtb7Bupmj9IfNuzaAHI_QS3gKC-xunoECErTnADbx9YHq7aNqaK07IDK49wU6s4TG2Q2OYincezl4xdnpEXMJHD7Cyp0fH9AGl72teiWnLh3IqCbFkuxMTrWQWbg7YmY/s400/Selection_148.png" width="400" /></a></div>
<br />
<br />
<span style="color: red; font-size: x-large;"><b><u style="background-color: yellow;">UNLOCKING THE BOOTLOADER IS THE SAME AS PERFORMING A FACTORY RESET.</u></b></span><br />
<span style="color: red; font-size: x-large;"><b><u style="background-color: yellow;"><br /></u></b></span>
<span style="color: red; font-size: x-large;"><b><u style="background-color: yellow;">YOU *WILL* LOSE DATA.</u><span style="background-color: white;"> SEE <a href="https://mobilesupport.lenovo.com/us/en/Solution/MF92013">HERE</a>.</span></b></span><br />
<br />
<br />
If you are comfortable with this, unlock it with:<br />
<br />
<pre class="snippet">sudo $(which fastboot) oem unlock [your key here]
</pre>
<br />
You have to run the command twice:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ4UVYYNUkWQ1aIGwUKlRtIv99amg_q7RW_y1Ht9dTrmTlxxvkBhvNb8zyuIfWYVMW3f6fLvPI6lL2SV-RlBvn0f2AXGMp83ljusWLCoon-4AIEcQQHEhREeqxtzUxKIA7ND3SjkdKuy4/s1600/wskellenger%2540marquette+%257E_149.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ4UVYYNUkWQ1aIGwUKlRtIv99amg_q7RW_y1Ht9dTrmTlxxvkBhvNb8zyuIfWYVMW3f6fLvPI6lL2SV-RlBvn0f2AXGMp83ljusWLCoon-4AIEcQQHEhREeqxtzUxKIA7ND3SjkdKuy4/s400/wskellenger%2540marquette+%257E_149.png" width="400" /></a></div>
<br />
<h2>
<u>Install TWRP</u></h2>
<h3>
Get what you need</h3>
<div>
<a href="https://forum.xda-developers.com/showpost.php?p=67031805&postcount=3">This post</a> from xda-developers describes what you need.</div>
<h3>
Download the TWRP image</h3>
The TWRP image is available <a href="https://dl.twrp.me/athene/twrp-3.0.2-0-athene.img.html">here</a>.<br />
<h3>
Verify image integrity</h3>
You should confirm integrity of the download by also downloading the md5 file, and checking that the first few/last few characters of each md5 agree:<br />
<pre class="snippet">wskellenger@marquette ~/Downloads $ md5sum twrp-3.0.2-0-athene.img
1c3ed996a8e978c05bfd25da47eb1e47 twrp-3.0.2-0-athene.img
wskellenger@marquette ~/Downloads $ cat twrp-3.0.2-0-athene.img.md5
1c3ed996a8e978c05bfd25da47eb1e47 twrp-3.0.2-0-athene.img
</pre>
<br />
<h3>
Use mfastboot to flash the recovery image</h3>
<b><i>mfastboot</i></b> is a motorola specific fastboot utility. You can find it on xda-developers.com. Use it to flash the recovery image. Here I'm also updating the logo so I don't have the annoying bright white warning about the unlocked bootloader.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7QoPTTWZCxtsLcciV4vbykbQNtwABtO6hc6bTwc3dIC_ZlfMG_JRBa712xzRHDtHouY5NOv_1gFx_bshjddHxbA9__Xbxs_Z6UEdzU46IezJs5Bqz85CnzZszYeULV-Wm-RDybO72w1M/s1600/wskellenger%2540marquette+%257E-Downloads_150.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7QoPTTWZCxtsLcciV4vbykbQNtwABtO6hc6bTwc3dIC_ZlfMG_JRBa712xzRHDtHouY5NOv_1gFx_bshjddHxbA9__Xbxs_Z6UEdzU46IezJs5Bqz85CnzZszYeULV-Wm-RDybO72w1M/s400/wskellenger%2540marquette+%257E-Downloads_150.png" width="400" /></a></div>
<br />
<h3>
Reboot into TWRP recovery</h3>
While you are still in the bootloader, you can use the up/down arrows to highlight "recovery" and the press the power button to go into recovery.<br />
<br />
When you see TWRP recovery appear, great! The updated recovery works. You can reboot the system and set up your Google account, restore your backups, etc. <b>Note: you aren't rooted yet.</b><br />
<h2>
<u>Install SuperSU</u></h2>
<div>
Thanks to <a href="https://forum.xda-developers.com/moto-g4/how-to/how-to-root-g4-fix-bootable-attempted-t3417592">this post</a> on XDA.</div>
<div>
<br /></div>
<div>
From the phone's browser, download the SuperSU zip from here:</div>
<div>
http://download.chainfire.eu/supersu-stable</div>
<div>
<br /></div>
<div>
Shut the phone down, and reboot into TWRP recovery. Go into the terminal by selecting Advanced-->Terminal.</div>
<div>
<br /></div>
<div>
Inside the terminal, type the following (exactly as written, obeying all spaces, etc.) and press enter:</div>
<div>
<pre class="snippet">echo SYSTEMLESS=true>>/data/.supersu
</pre>
<div>
<br /></div>
<div>
In TWRP, exit the terminal. Press the home button. </div>
<div>
<br /></div>
<div>
Install the SuperSU zip from your phone's download directory. The exact version I used:</div>
<div>
SR3-SuperSU-v2.79-SR3-20170114223742.zip</div>
<div>
<br /></div>
<div>
Reboot the phone. </div>
<div>
<br /></div>
<div>
It may reboot itself once after this. When the phone boots, SuperSU will be in the app list. </div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com3tag:blogger.com,1999:blog-7299582172907567087.post-15872072605410225072016-12-10T10:38:00.001-08:002016-12-10T10:38:40.893-08:00Don't Be a Cotton Headed Ninnymuggins T-Shirt Iron-On Transfer Design<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This line from Will Ferrell in the movie <i>Elf</i> has turned into a <a href="https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&client=ubuntu#q=cotton+headed+ninny+muggins&tbm=shop">bunch of t-shirts</a>. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Fig956-MuVA/0.jpg" src="https://www.youtube.com/embed/Fig956-MuVA?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
When my wife wanted one for a Christmas party we were going to, I decided to duplicate one of the designs by hand in Inkscape, which would then allow me to resize it as large as I wanted without distortion. I already had some iron-on transfer paper in stock.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8vRdeXhJy9wOcnidGZAucrfH38hSKgu_fMBYdIkGPgozgDYw2uW5zfyE7u1ryr6B_E6MxHqufLQwO5dwOD4BQdXqVZy2Xxfcs46Tvki0_nZ5YKfJJ_fKJZq-mKwqCQh1T3S8pIZu4a7M/s1600/ninnymuggins.svg+-+Inkscape_137.png" imageanchor="1"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8vRdeXhJy9wOcnidGZAucrfH38hSKgu_fMBYdIkGPgozgDYw2uW5zfyE7u1ryr6B_E6MxHqufLQwO5dwOD4BQdXqVZy2Xxfcs46Tvki0_nZ5YKfJJ_fKJZq-mKwqCQh1T3S8pIZu4a7M/s400/ninnymuggins.svg+-+Inkscape_137.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here's <a href="https://drive.google.com/open?id=0B_HybwuTfXlSYVMydnM4VkIxc0E">the inkscape svg file</a> if you want to iron-on this design to your own t-shirt.</div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-2890769365740737042016-07-10T09:22:00.002-07:002016-10-16T06:43:10.441-07:00"Obsolete" Yamaha/Mando Marine Alternator Drop-In Replacement for YSC-10140-01-AC<h3>
<i>The short version:</i></h3>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwcaF4cZMQ1PjVSbFEqt5vzGa_v61vCriESKQDCvnJRFZ4SDRVV6ztaZF4wjYpMTXPlb6X8Cx_OOwUQ9YXU-PbhcR_frnp7mX5BojzMi0EqocB8GiPCGuQMPdEyOpsQXb17Om0qqvr330/s1600/IMG_20160702_193154.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwcaF4cZMQ1PjVSbFEqt5vzGa_v61vCriESKQDCvnJRFZ4SDRVV6ztaZF4wjYpMTXPlb6X8Cx_OOwUQ9YXU-PbhcR_frnp7mX5BojzMi0EqocB8GiPCGuQMPdEyOpsQXb17Om0qqvr330/s200/IMG_20160702_193154.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div style="font-size: 12.8px;">
<span style="background-color: white; color: #333333; font-family: "times new roman" , "times" , "freeserif" , serif; font-size: 11.2px; line-height: 15.68px;">Smoked 51A Mando alternator</span></div>
<div style="font-size: 12.8px;">
<span style="background-color: white; color: #333333; font-family: "times new roman" , "times" , "freeserif" , serif; font-size: 11.2px; line-height: 15.68px;">Yamaha part number YSC-10140-01-AC</span></div>
<div style="font-size: 12.8px;">
<span style="background-color: white; color: #333333; font-family: "times new roman" , "times" , "freeserif" , serif; font-size: 11.2px; line-height: 15.68px;">Mando part number A000B0511</span></div>
</td></tr>
</tbody></table>
<ul>
<li>25 year old alternator with Yamaha part number YSC-10140-01-AC failed</li>
<li>An exact replacement is no longer available</li>
<li><a href="https://www.amazon.com/gp/product/B0081SCC40/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B0081SCC40&linkCode=as2&tag=leftbraitink-20&linkId=19483faa92ae41715b444c3ae07f7224" target="_blank">This one</a> worked as a replacement</li>
<li>Do your own research, don't blame me if it doesn't work for you.</li>
</ul>
<br />
<hr />
<br />
<h3>
<i>The long version:</i></h3>
My dad has a 1993-ish Sylvan Barritz that he purchased new. The boat gets used only about 3-4 months out of the year, and pretty infrequently at that. Still, our family has gotten almost 25 years of enjoyment out of this boat with relatively little trouble.<br />
<br />
<br />
Last year (2015), he had a little bit of trouble with a 60A breaker between the alternator and the battery that kept tripping. One time it tripped and would not reset while he was out in the middle of the bay with some friends. The solution at that time was to simply eliminate the breaker, which would let them at least get back to shore. The thinking was that maybe the breaker was flaky after all of the time the nearly 25 year-old boat spends sitting, from fall through spring.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXCYkPYI1C3eIF1GE8DE6VyG4kHGwrVlVeUJS-X3JBxyKuCOhsi3OJDyCYs8fQ9DkhyphenhyphenL0AdVz4-jJbhryKwIvqebyY7jsGeJwngsIxr93_ID8y3pPSXcKRtaGh5OyMwZ7PQhHkiIZgPDo/s1600/IMG_20120715_182605.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXCYkPYI1C3eIF1GE8DE6VyG4kHGwrVlVeUJS-X3JBxyKuCOhsi3OJDyCYs8fQ9DkhyphenhyphenL0AdVz4-jJbhryKwIvqebyY7jsGeJwngsIxr93_ID8y3pPSXcKRtaGh5OyMwZ7PQhHkiIZgPDo/s400/IMG_20120715_182605.jpg" style="cursor: move;" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div style="font-size: 12.8px;">
Still enjoying the heck out of this 90s Sylvan Barritz that my dad bought new</div>
<div style="font-size: 12.8px;">
(2012 Photo)</div>
</td></tr>
</tbody></table>
This year (2016) he had the entire boat reupholstered, and it looks like new. He was excited to get it on the water, and my kids were excited to go swimming, so for the first voyage this year he and I decided to take it out and iron out any kinks from sitting all winter. Launching was fine, and after a little cranking she started right up. We headed east from Gladstone across Little Bay de Noc for our shakedown run. The boat was running well and we got her right on plane. Things were looking fine until about half way across the bay the engine suddenly died and smoke started pouring out from under the engine cover.<br />
<br />
Some quick investigation and we found that the 'bush fix' of eliminating the 60A breaker was thankfully not done in a serious or long term way. The two 8 gauge wires that were meant to be connected and protected by the 60A circuit breaker were smoking and mostly melted, and the small sheet metal screw that was intended last year as a stop gap measure to hold them together had thankfully let go, preventing a major fire.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img alt="Photo: " class="q0xqzc" height="300" jsname="xJzy8c" src="https://lh3.googleusercontent.com/2_raHpUI3hnb3-4gJFNR1ednczYqu2023ID406RMoi51b03OfzRKx01KWvtmVLZOWWAA2Kvtsw=w293-h220-rw" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The boat has made hundreds of trips across Little Bay de Noc. <br />
Often my dad will take multiple trips carting family and friends over<br />
to a nice swimming area on the east side of the bay.<br />
(2013 Photo)</td></tr>
</tbody></table>
Obviously, we had a dead short on our hands somewhere. Nothing else in the boat would draw as much current as an oven, which given the smoke and melted wires, is what we had. We waited a bit for the wires to cool and then tried to touch them together where they had formerly been held with a screw. This produced a violent arc, as the two red wires were now somehow one red, one black.<br />
<br />
Tracing the heavy wire around the back of the engine we discovered that the wire attached to the back of the alternator was somewhat melted-looking. This indicated that somehow internally the alternator had failed, causing a dead short to ground. It was now clear that the 60A breaker tripping in 2015 was a warning shot; the alternator was telling us that it had provided almost 25 years of service and could do no more.<br />
<br />
Luckily my dad had a few tools on board, so without too much trouble we pulled the main wire from the back of the alternator and again tried to touch the red wires together. This time, no arc. This confirmed the suspicion that the alternator was the cause of the short, and without the 60A breaker in the circuit the wires had no choice but to become toaster elements.<br />
<br />
We were able to start the boat up and run it back to shore without the alternator, knowing that the battery would power the starter and ignition system, but without the alternator we would only be okay as long as the battery would stay about 9-10V or so.<br />
<br />
After landing the boat we pulled her home and I pulled out the old alternator. We found it had a lot of missing cooling fins and the unit would rattle when shaken.<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Sidebar: Let me briefly describe the engine in this boat. It is a GM-derived 3.0L 4 cylinder. Someone should write up the entire history of this thing, but from what I've read, it appears to be developed for marine use by Mercury Marine (however some sources say Yamaha developed it). Some people say it derived from the 2.5L iron duke, others say <a href="http://grassrootsmotorsports.com/forum/grm/learn-me-mercruiser-engines/97039/page1/" target="_blank">no, it was an older engine</a>. Nevertheless this engine seems to have a home in lots of boats.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
The stern drive is another story. This particular one is from Yamaha, and from what I can tell it is quite rare in the US. A search of marine forums for "Yamaha 3.0L stern drive" and you will find posts where people are in search of parts, or they bought such a boat as a 'project boat' and quickly found <a href="http://www.marineengine.com/boat-forum/showthread.php?383324-Yamaha-Stern-1990-3-0-engine" target="_blank">they can't find parts</a> for the stern drive.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Still, I thought finding an alternator would not be a big deal for this thing. <i>Another side note: I quickly discovered that you *must* use a marine alternator replacement, as they are fitted with spark arresting devices to avoid igniting the fumes in the engine compartment. <b>Do NOT attempt to replace this alternator with an automotive unit!</b></i></div>
<div style="text-align: left;">
<b></b><br />
<b></b></div>
<div style="text-align: left;">
A first search yielded a guy trying to sell this exact alternator, used, for $300:<br />
<br /></div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-Gfnt4-3ty0I4UPEqiwWiLIVVAB-QlFCmLrq6LxglKyFpku9azEK_b0cjKWw7prPKxaElEQ5BqI3juX0gJNeHV-XuTiTi-5qeUaq6Sscd5saHOkAsIX3E5xouCsvFRz0gPMGzByPC8cU/s1600/Selection_101.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-Gfnt4-3ty0I4UPEqiwWiLIVVAB-QlFCmLrq6LxglKyFpku9azEK_b0cjKWw7prPKxaElEQ5BqI3juX0gJNeHV-XuTiTi-5qeUaq6Sscd5saHOkAsIX3E5xouCsvFRz0gPMGzByPC8cU/s640/Selection_101.png" width="640" /></a></div>
<br /></div>
<div style="text-align: left;">
Absolutely no way would I purchase a 25 year old alternator for $300. I blurred out the seller name above as I don't want this to reflect badly on him; if he can get $300 for it, more power to him. But having the exact replacement isn't necessary. If I can get a 60A unit or a 40A unit it should work fine. (Even a 90A unit would be fine if I knew that the wires would handle the current and the existing circuit breaker were upgraded.)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
You can search around and find out more panic-inducing results like <a href="http://www.boats.net/parts/detail/yamaha/Y-YSC-10140-01-AC.html" target="_blank">this one from boats.net</a>, indicating that it is NOT AVAILABLE and OBSOLETE even thought it used in a lot of different marine engines:</div>
<div style="text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-tvslhnu-Gz6W_Knok9tRAtk5vYZvxHoTut0bC161alBJIO5rq3QJmH9InDXkfVoEEYlUttSXu4bn4wzqFF7gsnnJiFNiDos6GF_T7OhJtx4Sg1KY0rKTDv8gVjSkvzztxSEWFMA088Q/s1600/Selection_102.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="562" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-tvslhnu-Gz6W_Knok9tRAtk5vYZvxHoTut0bC161alBJIO5rq3QJmH9InDXkfVoEEYlUttSXu4bn4wzqFF7gsnnJiFNiDos6GF_T7OhJtx4Sg1KY0rKTDv8gVjSkvzztxSEWFMA088Q/s640/Selection_102.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">$301 new, but obsolete and not available</td></tr>
</tbody></table>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Finally I hit on <a href="http://dbelectrical.com/" target="_blank">DB Electrical</a> and their AMN0016, which is also available at their <a href="https://www.amazon.com/gp/product/B0081SCC40/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B0081SCC40&linkCode=as2&tag=leftbraitink-20&linkId=19483faa92ae41715b444c3ae07f7224" target="_blank">Amazon Store</a>.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<a href="https://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_tl?ie=UTF8&tag=leftbraitink-20&keywords=DB%20Electrical%20AMN0016&index=aps&camp=1789&creative=9325&linkCode=ur2&linkId=bdda633500357f4d5d6016b7627604b9" target="_blank"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBRFNgvcGZZ620hB71KrrTnn9ly6yi34xrBcwDGJC8LmEH-dvZanphnrTS2olAQRw5U9EHqoUU8BkdZHYVtf0aNS5wTfKgmixIbnllA_af2yIcHymdvXWGmdB2q0Hw80ixWZddr60zG6Q/s640/Selection_103.png" width="640" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Specs are nearly the same. The stock alternator was 51A, this one is listed as 55A. It is marine-grade. It has a one year warranty.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd4D6iXDdinqmPl1dDndS8nW4HEVvaAkxxKTcwOlDvNvUz62y-CmWrsRp6lqkoEv8FRThgT1XsD5qLw71Q0loqs50MatTnQrlKUtQJ4EwM8Z3oataDT1tJuL-X9p7Htt05OvKKz-CssTk/s1600/Selection_104.png" imageanchor="1"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd4D6iXDdinqmPl1dDndS8nW4HEVvaAkxxKTcwOlDvNvUz62y-CmWrsRp6lqkoEv8FRThgT1XsD5qLw71Q0loqs50MatTnQrlKUtQJ4EwM8Z3oataDT1tJuL-X9p7Htt05OvKKz-CssTk/s320/Selection_104.png" width="312" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
The <i>only</i> difference I can find, physically, is that this unit has a single pulley while the stock unit had a double pulleys, for use in two different mounting applications. Still, if you need a different pulley offset in your application you can swap out the single pulley for the double that you already have. So don't scrap the existing one until you have the new one in your hands.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I tried calling DB Electrical to discuss this application before I bought it but their tech support line on July 5th was busy, with > 20 minute wait time, so I decided to just order it. As long as the housing matched the picture it should work fine. The bolt that it pivots on is a huge 1/2" grade 8 monster, and that hole diameter and the width of the mounting 'foot' was what I was going to ask about.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Here it is installed. Note the single pulley that came on it was perfectly aligned. It is literally a drop-in replacement.</div>
<div style="text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img alt="" aria-label="Picture. Press Enter to open it in a new page." class="uqvYjb KgFPz" height="360" src="https://lh3.googleusercontent.com/-WpwTi5lAjxc/V4AMb3dFaNI/AAAAAAAAGCs/-hw2zdeBNdUW41AOMdKcobB0VL3EqCMcgCK8B/s640/3362279299002152247%253Faccount_id%253D1" style="margin-left: auto; margin-right: auto;" width="640" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DB Electric <a href="https://www.amazon.com/gp/product/B0081SCC40/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B0081SCC40&linkCode=as2&tag=leftbraitink-20&linkId=19483faa92ae41715b444c3ae07f7224" target="_blank">AMN0016</a> installed, replacing the broken <span style="font-size: 12.8px;">YSC-10140-01-AC</span><span style="font-size: 12.8px;"> </span></td></tr>
</tbody></table>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
The datasheet that came with it:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<img alt="" aria-label="Picture. Press Enter to open it in a new page." class="uqvYjb KgFPz" src="https://lh3.googleusercontent.com/-gSpA7Kjfvvw/V4AL8uVyYnI/AAAAAAAAGCU/MHI5ZaIbJhI70cGpfjfjagUMxx2H4XuYgCK8B/s512/6520682836812230624%253Faccount_id%253D1" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
I wasn't there for the first trip after installation but my dad reports that it worked flawlessly. He notes that it isn't charging at idle, but just above idle he is seeing 14V on his voltmeter. This seems to be confirmed by the datasheet above; there is no current output until about 750 rpm or so. This might be remedied by swapping on a slightly smaller pulley if you need charging while at idle. Typically you're not sitting and idling the boat for long so I don't think this is a problem.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<i><b>Disclaimer: I post this information in the hopes that it helps someone else. You are responsible for your own property and you are responsible for doing your own homework and research. If you are not comfortable with a non-standard replacement, you can have the original unit rebuilt (find a starter/alternator repairman), or you can try your luck with a 25 year old used replacement.</b></i></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-34129107374344536042016-02-14T21:23:00.002-08:002016-02-14T21:24:02.025-08:00[FIXED] Fellowes DM8C Paper Shredder Motor Never Stops Running<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjayNLHwdYM_Y0APiyYpUKhRDwJ_oZONnljBiBh9LSJba44-7DfmDyYKaV_rUwvgPkWTfTa0iFCvXp1_pqsIMSPXmjTwTrFSRchDU9a2zy4pqfnKseKLtImQj0fzquimtYjyGxfJG5TCS4/s1600/IMG_20160214_231458110_HDR.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjayNLHwdYM_Y0APiyYpUKhRDwJ_oZONnljBiBh9LSJba44-7DfmDyYKaV_rUwvgPkWTfTa0iFCvXp1_pqsIMSPXmjTwTrFSRchDU9a2zy4pqfnKseKLtImQj0fzquimtYjyGxfJG5TCS4/s320/IMG_20160214_231458110_HDR.jpg" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fellowes DM8C</td></tr>
</tbody></table>
A long while back I bought a Fellowes DM8C paper shredder. <br />
<br />
Over the years, it has shredded just about anything I've fed it.<br />
<br />
It is designed with an infrared LED emitter and receiver in its mouth, whose job it is to trigger the shredder's motor to start as soon as a piece of paper breaks the invisible beam of light that passes betweent the two components.<br />
<br />
When shredding is complete, the document is no longer blocking the beam, and after a short delay shredding stops.<br />
<br />
For the past few years, this automatic start/stop feature hasn't worked. I've cleaned it several times, but without any luck. A cell phone camera can usually 'see' infrared light, but I couldn't see anything coming from either of these guys with mine. To be sure I could see IR light, I tried my TV remote, and my cell camera could see it as plain as day. So, I figured maybe the infrared emitter had gone bad. <br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLDYE03sVC6F9sJWqtlT707fw1EJOB6zrgSznFGkOlaMtjYHAfBC1_-kEdTXBKm8ll6zOkEHAmIm04QQSXkkyirckc_55GLwtVRKA1dKFh_s2gF-OUrw_lNX7DodUukr_zWlyG7BPYpsU/s1600/IMG_20160214_231928216.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLDYE03sVC6F9sJWqtlT707fw1EJOB6zrgSznFGkOlaMtjYHAfBC1_-kEdTXBKm8ll6zOkEHAmIm04QQSXkkyirckc_55GLwtVRKA1dKFh_s2gF-OUrw_lNX7DodUukr_zWlyG7BPYpsU/s320/IMG_20160214_231928216.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Location of the infrared sensor</td></tr>
</tbody></table>
What next, except to take it apart?<br />
<br />
Disassembly is pretty easy, the silver piece lifts off of the catch bin, and on the underside of the silver piece there are about 7-8 Phillips screws. Remove them all, and you'll be staring at the shredder assembly as well as a small control board. <br />
<br />
With the unit taken apart I could get a clear view of the IR LED with my phone camera, and indeed I found that it was dimly lit. So, the LED wasn't bad.<br />
<br />
With the IR emitter and receiver both on long leads, I was allowed to bring the two components close enough to be touching. At this point the shredder DID shut down as it should. If I tried to separate them slightly, the shredder would turn on.<br />
<br />
So, the circuit was working as it should, but it was too sensitive. I needed the emitter and receiver to be far enough away that they could be mounted in their factory locations.<br />
<br />
<div>
I tried my best to understand the circuit by taking a photo of the component side of the board, a photo of the solder side of the board, and then using GIMP to superimpose a flipped image of the solder side on top of the component side. By rotating and scaling the solder layer, I could position it over the component layer and then kind of trace out a rough schematic. This method was somewhat successful:</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK5PsLyorJBprhBxsBubX1kVOvisT0TJ9BqHo74bPH8EgmSb-Ify_capyjSKlFx2kBwtNWeDEelN05bxcOAp01dRpdTzUTnGBKNqXFTetm_W_-wng78v82Z55rNMhTMYC56txF8RwApz4/s1600/-paper_shred.xcf-1.0+%2528RGB+color%252C+3+layers%2529+2168x2914+%25E2%2580%2593+GIMP_095.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK5PsLyorJBprhBxsBubX1kVOvisT0TJ9BqHo74bPH8EgmSb-Ify_capyjSKlFx2kBwtNWeDEelN05bxcOAp01dRpdTzUTnGBKNqXFTetm_W_-wng78v82Z55rNMhTMYC56txF8RwApz4/s640/-paper_shred.xcf-1.0+%2528RGB+color%252C+3+layers%2529+2168x2914+%25E2%2580%2593+GIMP_095.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.8px;">Using GIMP to try to understand the IR portion of the circuit.</td></tr>
</tbody></table>
Gimp isn't really friendly for making straight lines and technical notation. For that, I think Inkscape is better. Above you can see how sloppy my freehand mouse drawing is.<br />
<br />
Here we find a few important components:<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfbOA3YZQ9noCs6XbIcwPNNI20e4OWzJ54GJJaDv9iu7XawcNgnAAKkqmqkSgWif2m_dJjwNhI8wNmhJq0pkqpBB2cMfwiV9gfs2V-ugaSJ0I40mZX0vvrrJAlekfX4T_gIIUXLl7GiwY/s1600/IMG_20160214_212518905.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfbOA3YZQ9noCs6XbIcwPNNI20e4OWzJ54GJJaDv9iu7XawcNgnAAKkqmqkSgWif2m_dJjwNhI8wNmhJq0pkqpBB2cMfwiV9gfs2V-ugaSJ0I40mZX0vvrrJAlekfX4T_gIIUXLl7GiwY/s640/IMG_20160214_212518905.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Shredder's control board</td></tr>
</tbody></table>
<br />
<br />
<ul>
<li>[A] The connection to the infrared LED</li>
<li>[B] The connection to the photo diode (IR receiver)</li>
<li>[C] LM324N, a quad op-amp (<a href="http://www.ti.com/lit/ds/symlink/lm124-n.pdf" target="_blank">datasheet</a>)</li>
<li>[D] Resistor "R30", value 1.8k ohms, that goes from the cathode (negative) side of the LED to ground</li>
</ul>
<div>
<br /></div>
<br />
Now, not being a hardware expert but at least pretending to be, I determined that the op-amp part of the circuit was used as a <a href="http://www.electronics-tutorials.ws/opamp/op-amp-comparator.html" target="_blank">comparator</a>. If the IR light is present, don't do anything (op-amp output low). When the IR light falls below a threshold, trigger the motor to start by setting the op-amp's output high.<br />
<br />
So, I thought of two approaches to solving my poor sensitivity issue:<br />
<br />
<b><u>Approach 1:</u></b> Alter the sensitivity of the comparator by playing with resistor values.<br />
<a href="http://maxembedded.com/2013/08/how-to-build-an-ir-sensor/" target="_blank">Here's another circuit</a> involving an IR emitter that is probably very close to what is done here. The designer of that circuit wisely incorporated a variable resistor so that he could adjust sensitivity. I didn't have a decent selection of variable resistors in stock, and I wasn't entirely sure which resistor to alter. <br />
<br />
<b><u>Approach 2:</u></b> Increase the brightness of the IR LED slightly.<br />
Again, I don't plan to analyse the entire circuit here. This is a blog about tinkering. I found that the resistor marked "D" above would just restrict current through the LED, so why not choose a slightly smaller value for this?<br />
<br />
I chose the second approach, but would've preferred to figure out the first approach. At the end of the day, I already spent a few hours messing with this and I wanted to wrap it up and have the shredder working again.<br />
<br />
<b>Solution:</b><br />
I swapped out the 1.8k resistor for a 1.5k ohm, which I had in my inventory. Subjectively, I didn't notice any change in brightness with the cellphone camera, but I did notice that I could hold the emitter and receiver farther apart now. It seemed like only a couple of millimeters but it was a noticeable difference. Now I could install the emitter and receiver back into their factory holders, and the shredder remained off. <br />
<br />
Well, the problem is solved and the shredder is sitting here quietly waiting for a job. It was a waste of an afternoon but I learned a little bit about op amps.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-8536357127633335012016-02-06T10:54:00.002-08:002016-02-09T19:19:35.948-08:00Dell Inspiron 3520 Wifi Upgrade (Goodbye, Broadcom 43142)I <a href="http://leftbraintinkering.blogspot.com/2012/12/dual-boot-linux-mint-13-with-windows-8_2.html" target="_blank">bought this laptop in 2012</a> for $399, and the biggest complaint I've had about it, by far, is the Broadcom 43142 Wifi card in Linux. I even completely switched distros once to get the updated BlueZ Bluetooth stack, hoping for better Bluetooth support. Nope. I switched back to Linux Mint.<br />
<br />
In Windows the card has seemed to work well, but in Linux -- not so much.<br />
<ul>
<li>Frequently reports signal strength as 100% but has no connection at all</li>
<li>Bluetooth will stop working after the laptop sleeps in Linux (a boot to Windows will resolve this problem, presumably because the card gets updated w/ fresh firmware)</li>
<li>Terrible wifi reception when the card is actually working</li>
</ul>
<div>
I wrote once before <a href="http://leftbraintinkering.blogspot.com/2014/01/dell-inspiron-3520-boradcom-43142.html?q=broadcom">about my frustrations</a> with this card, and I had another article written about my experience with BlueZ and Arch Linux, but I never published it, and probably won't.</div>
<div>
<br /></div>
<div>
You win, Broadcom, I can't beat you. So you're sitting on my desk, and I <a href="http://www.amazon.com/gp/product/B00HJCBV64/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B00HJCBV64&linkCode=as2&tag=leftbraitink-20&linkId=YLN5XRK5MACX4YXV" rel="nofollow" target="_blank">bought the Intel 7260 from Amazon</a> to replace you.</div>
<div>
<br /></div>
<div>
Removal of the old card was a snap:</div>
<div>
<ul>
<li>Remove the keyboard</li>
<li>Disconnect the antenna coax cables</li>
<li>Remove one screw that secures the card</li>
<li>Tilt the card out</li>
</ul>
</div>
<div>
Installation of the new card is the reverse of removal.<br />
<br />
<div style="text-align: center;">
</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4e_U1oWLFD4TYex3Jt0HbZWAscIsqsNAa3jkmK4PpegwDLLHS5M_hHy09fCZCZ-f9zwEy9_hpoFJ3PWVsi5VkOM8ByVpi1PbPF_izzwLzTqE6mFDkWg9PdAidiQ9f12uS3Xw7saC4NP4/s1600/IMG_20160203_175715583.jpg" imageanchor="1"><img border="0" height="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4e_U1oWLFD4TYex3Jt0HbZWAscIsqsNAa3jkmK4PpegwDLLHS5M_hHy09fCZCZ-f9zwEy9_hpoFJ3PWVsi5VkOM8ByVpi1PbPF_izzwLzTqE6mFDkWg9PdAidiQ9f12uS3Xw7saC4NP4/s640/IMG_20160203_175715583.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
Goodbye:</div>
<div>
wskellenger@marquette ~ $ sudo apt-get remove bcmwl-kernel-source<br />
<br />
Booting into Windows it was almost as if I made no changes, the device was detected and drivers installed. It just worked. <br />
<br />
It was the same booting into Linux, the card was identified and started working without any intervention on my part. I can't say the same for the Broadcom card, which required some Googling to initially get it running in Linux.<br />
<br />
Update Feb-9-2016:<br />
I had some dropped connections with dmesg showing a bunch of stuff like this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.105430] cfg80211: Calling CRDA for country: US</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.110984] cfg80211: Regulatory domain changed to country: US</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.110992] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.110996] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2700 mBm)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.111000] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 1700 mBm)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.111004] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.111007] cfg80211: (5490000 KHz - 5600000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.111010] cfg80211: (5650000 KHz - 5710000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.111013] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 3000 mBm)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">[ 415.111016] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 4000 mBm</span>)</div>
<div>
<br />
Typically after seeing some stuff like this the connection would drop.<br />
<br />
Solution: <a href="http://askubuntu.com/a/621502/149183" target="_blank">This post</a> has the steps that resolved this issue for me. </div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-44075685436143081662016-02-06T07:38:00.001-08:002016-02-06T11:01:53.393-08:00Chrysler 3.6L Pentastar V6 Oil Filter ReplacementLast weekend, when I went to perform an oil change on my 2014 Wrangler, I could not figure out where the oil filter was! After consulting the interwebs, I was delighted to discover that the 3.6L V6 has a replaceable element oil filter, much like the 2.4L I4 in my 2010 Corolla. <br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDxHvXseah6CuFH1k-3QC7oaaBssYEr4WeO1ZjMRe7zjL43qQ-MMhoTE5p3LnTVcvnRb_PitswYujnWnqP7gcS89yeX49WN64BR0soFCd-YIFYHC6gFXx1D7QXNVsAO22V0XAagvbwYJk/s1600/chrysler-pentastar-v618.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDxHvXseah6CuFH1k-3QC7oaaBssYEr4WeO1ZjMRe7zjL43qQ-MMhoTE5p3LnTVcvnRb_PitswYujnWnqP7gcS89yeX49WN64BR0soFCd-YIFYHC6gFXx1D7QXNVsAO22V0XAagvbwYJk/s400/chrysler-pentastar-v618.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Chrysler 3.6L Pentastar V6 Oil Filter Location</td></tr>
</tbody></table>
<div style="text-align: center;">
<br /></div>
The benefits to this design are readily apparent:<br />
<br />
<ul>
<li>No steel canister that winds up in a landfill</li>
<li>Cheaper and easier to produce, with fewer raw materials</li>
<li>Less unused oil gets disposed with the filter</li>
<li>Less weight</li>
<li>Can offer more filter surface area for less money</li>
</ul>
<br />
<span style="font-family: inherit;">Needless to say, I'm a fan of this design. On the 3.6L Pentastar V6, the oil filter is mounted on the top of the engine, so when it gets removed, the excess oil drains back into the engine and not all over the floor. Unlike the 2.4L Toyota I4, you don't need a special tool for this one. I used a 15/16" socket and a 1/2" drive ratchet.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">A WIX filter is available <a href="http://www.amazon.com/gp/product/B00IEOW444/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B00IEOW444&linkCode=as2&tag=leftbraitink-20&linkId=Z2WEKG3GCDVKT4KJ" rel="nofollow">from Amazon for under ten bucks.</a><img alt="" border="0" src="http://ir-na.amazon-adsystem.com/e/ir?t=leftbraitink-20&l=as2&o=1&a=B00IEOW444" height="1" style="border: none !important; margin: 0px !important;" width="1" /> (I got mine from my very capable <a href="http://www.mazzaautoparts.com/" target="_blank">local parts store</a> and I paid only slightly more than this.)</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">I already had some experience with this type of filter, but I figured it is likely others haven't, so I made a short YouTube video documenting the replacement process:</span><br />
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/Y7JUm4BM2cA" width="560"></iframe><br /></div>
<br />
<br />William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-15337243625478973572016-01-02T08:51:00.003-08:002016-01-02T16:34:29.816-08:00Rescuing a Motorola Droid Razr M (or any other Android phone) from the Junk DrawerI was up in northern Michigan visiting my parents over the Christmas holiday, and I discovered that my mom had placed a Motorola Droid Razr M in a junk drawer. I remember her being extremely frustrated with this phone, and the few times I looked at it for her, I noticed it was STUFFED with bloatware that couldn't be removed because they were all installed as system apps.<br />
<br />
Anyway, sure, she says I can have it. I have a project in mind for it that will probably place it back in their hands anyway, but I like it so much, it might be my new ATV GPS. (The beautiful OLED screen is easier to read in sunlight!)<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRAGUPkGinP4HP2ldiTCsQMrWAm6DJLNLzTOCBBDo1hqCvzPShjff931ndlOoWTctdIDu5ndayDoeMLTynsaWL6QruvwCaeOKOyB41BPUen5Tmw0klp3DEj7fGlvgoYxjZgBAB7haBS5U/s1600/3e00b356e89819422d82280b031d0cbe.image.350x380.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRAGUPkGinP4HP2ldiTCsQMrWAm6DJLNLzTOCBBDo1hqCvzPShjff931ndlOoWTctdIDu5ndayDoeMLTynsaWL6QruvwCaeOKOyB41BPUen5Tmw0klp3DEj7fGlvgoYxjZgBAB7haBS5U/s320/3e00b356e89819422d82280b031d0cbe.image.350x380.jpg" width="294" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Motorola "Droid" Razr M</td></tr>
</tbody></table>
Turns out, this is a great little phone! It is a "world phone" (I'm old and I guess that term isn't used anymore), so it supports both CDMA and GSM. It ships with the SIM unlocked, which means that should you leave the US, in theory you can plug a drug store SIM card in and get service.<br />
<br />
The trouble is, Verizon has prevented the use of this "world phone" inside the United States on GSM networks. If you try to insert an AT&T SIM card or a T-Mobile SIM card, you'll be SOL. It turns out, <a href="http://forum.xda-developers.com/showthread.php?t=2166542">as some smart guys on XDA have figured out</a>, there is only one byte (arguably ONE BIT) that stands between you and your Razr M living on cheap drug store pay-as-you-go SIM cards here in the US.<br />
<br />
Several years ago I mentioned on this blog that modern smartphones are amazing pieces of technology. Where else can you find a high res, touch-sensitive color screen, Bluetooth, Wi-Fi, USB, a 2000+ mAh battery, SD storage, and above all, a Linux kernel + Android? <br />
<br />
Out of the junk drawer, this phone (and many others) can be <b><i>immediately</i></b> used for:<br />
<ul>
<li>Standalone GPS navigation with an excellent app like <a href="http://www.oruxmaps.com/index_en.html">OruxMaps</a> (for Geocaching or for outdoor use)</li>
<li>Streaming music from Amazon or Google Play</li>
<li>Playing MP3s</li>
<li>Watching video on Netflix or YouTube</li>
<li>Casting video to Chromecast</li>
<li>Getting News and Weather</li>
<li>Reading books with the Kindle app</li>
<li>An Alarm Clock</li>
<li>Playing Games (<a href="https://play.google.com/store/apps/details?id=com.seleuco.mame4all&hl=en">MAME4droid</a> or Angry Birds, anyone?)</li>
<li>this list doesn't end....</li>
</ul>
<br />
Once all the crapware is removed, the Razr M runs the stock Android 4 (Kit Kat) beautifully. It also has near-field communication (NFC), which I don't even have on my daily driver phone (Moto G 1st gen). <br />
<br />
A negative is that the Razr M lacks a gyro, which means it can't be used with <a href="https://www.google.com/get/cardboard/">Google Cardboard</a>.<br />
<br />
To prepare this phone for tinkering, we need to do a few things.<br />
<h3>
Root</h3>
Root the device following <a href="http://forum.xda-developers.com/droid-razr-m/general/root-droid-razr-m-xt907-183-46-15-t3137351">these instructions</a>. This method took a little messing around, but I was able to get root this way in about 30 minutes. One of my problems was that I had a flaky USB cable that was making data transfer a bit difficult. This <a href="http://forum.xda-developers.com/android/apps-games/one-click-root-tool-android-2-x-5-0-t3107461">alternative root method</a> may also work, and is said to be much easier. I didn't discover it until later so I didn't try it.<br />
<br />
Once rooted, install these apps from the Google Play Store. All of these are pay apps and most of them are less than a pint of beer. Some of them are less than a bottle of water. Seriously. If you spend maybe $15 on these apps, combined, you will have them forever AND you can use them on other Android projects. Skip one visit to Chipotle and buy these instead:<br />
<ul>
<li>Tasker (duh)</li>
<li>Secure Settings (with the Pro upgrade)</li>
<li>Titanium Backup</li>
<li>Optional: Busybox Pro (Pro has nicer installation options)</li>
</ul>
<h3>
Debloat</h3>
<div>
With root attained, we need to give the phone a courtesy flush.</div>
<div>
<br /></div>
<div>
The amount of crap Verizon ships with this phone is unimaginable. There is no doubt that many first-time smartphone users have been soured on Android and switched to iOS because their experience with Android was poor. Was the poor user experience the fault of Android, or was it all the bullshit installed on the phone that the user never wanted, and is unable to remove? Most of these apps are just using data, consuming RAM, tracking location, and burping up useless notifications. <br />
<br />
Does Apple allow their phones to be shipped to the end customer with so much garbage pre-installed?</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbvs9ePL98csKLtS0Yn8Da7SMpAnYi9rGnuZhEcT7iRC9iUTRHfUUlC1J3c8ui9vSQqF67kL05I7u7Bu_nfX9z7eeuZfqzBIvEBee_U2wk4AI_IP9ZvZ0_UndHKGBHkRrRJBq1u0wLgSo/s1600/Screenshot_2016-01-02-11-24-12.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbvs9ePL98csKLtS0Yn8Da7SMpAnYi9rGnuZhEcT7iRC9iUTRHfUUlC1J3c8ui9vSQqF67kL05I7u7Bu_nfX9z7eeuZfqzBIvEBee_U2wk4AI_IP9ZvZ0_UndHKGBHkRrRJBq1u0wLgSo/s320/Screenshot_2016-01-02-11-24-12.png" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><div style="font-size: medium; text-align: start;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td class="tr-caption" style="font-size: 12.8px;">Frozen apps appear with a blue bar in Titanium Backup</td></tr>
</tbody></table>
</div>
</td></tr>
</tbody></table>
<div>
Using the extensive list <a href="http://forum.xda-developers.com/droid-razr-m/general/guide-faq-how-to-root-boot-unlock-t2869432">here</a> (look for the debloat list), freeze as many of these useless apps as you want using Titanium Backup. Some of the apps, like Facebook and IMDB, can actually be completely removed without fear of screwing something up. For other apps, it is safer to use the 'freeze' option in Titanium Backup to disable the app and make it invisible to Android. If the phone starts misbehaving, you can easily unfreeze the apps to make them visible again. The debloat list on XDA is extensive and perhaps overkill. I *want* the Play Store and I *want* the YouTube app. I don't want notifications from Verizon telling me to set up cloud storage.<br />
<br />
In Titanium Backup, just press/hold on an app in the Backup/Restore list, then click the "Freeze!" button:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwpk0hL2lhd6W-4vaaR-OyU3v3i_W2ZCXwfTEW-MRVpJWh92wxkT8YJLUZkagOJNw4JLJ5AWCzkyo3la7npUq75E_2ka3CIIi_Cm8MPWUlEJRlHjY3vcmOASwQE9da_c_nxbB0uJZIhA4/s1600/Screenshot_2016-01-02-11-25-40.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwpk0hL2lhd6W-4vaaR-OyU3v3i_W2ZCXwfTEW-MRVpJWh92wxkT8YJLUZkagOJNw4JLJ5AWCzkyo3la7npUq75E_2ka3CIIi_Cm8MPWUlEJRlHjY3vcmOASwQE9da_c_nxbB0uJZIhA4/s320/Screenshot_2016-01-02-11-25-40.png" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The button marked "Freeze!" will disable the app <br />
and make it invisible to Android without actually removing anything</td></tr>
</tbody></table>
</div>
<h3>
Airplane Mode</h3>
<div>
Since I don't plan to actually use this phone as a phone, it is best to put it into airplane mode. This will disable all of the radios on the phone (Wifi, Bluetooth, and Cellular) and significantly increase battery life. However, since you probably want to access the Play Store, you probably want to re-enable Wifi AFTER the phone is already in airplane mode.</div>
<div>
<br /></div>
<div>
You can use Tasker + Secure Settings to automatically enable Airplane mode at every boot, and subsequently re-enable Wifi.</div>
<div>
<br /></div>
<h3>
Ready for Use!</h3>
<div>
That's it, with root and all of the crap removed, the phone runs really well and is ready to use immediately for any of the tasks I mentioned earlier.</div>
<div>
<br /></div>
<div>
I've got a project in mind that I will write more about in the future.</div>
<div>
<br /></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com2tag:blogger.com,1999:blog-7299582172907567087.post-37367907163511687412015-12-21T10:33:00.002-08:002016-01-02T11:34:13.869-08:00Printing Address Labels from Spreadsheet Data Source with LibreOffice (OpenOffice)Every year it takes me a solid hour to figure out how to run a mail merge using LibreOffice so that I can print labels for my Christmas cards. <br />
<br />
It really isn't that difficult, but I documented the process here for myself and hopefully others:<br />
<br />
Before starting, all of your addresses should be in a spreadsheet, with each column representing a unique bit of information. What I'm doing is:<br />
<ul>
<li>Addresses are stored in a Google Docs spreadsheet which both my wife and I have access to </li>
<li>I want to use LibreOffice to print labels using this spreadsheet as a source</li>
</ul>
<div>
To start, I export the Google Docs spreadsheet to LibreOffice format. Now:</div>
<div>
<br /></div>
<div>
1. Start LibreOffice Base (if you don't have Base, you may need to install it: sudo apt-get install libreoffice-base)<br />
<br />
2. Create a new database from spreadsheet.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOLVQxpo9cMPzod4SuPy66qphs1oRFbkCs11ryf_TFCe63VyjDPip-YUbQZk80xtqRtyV0Bhv0bLK5137gKLINc4mFxUmlVYn2NbvLpzLBe58TtwPxCgqXJyvGhyDXM2D2Rt4wsoVsCHk/s1600/Selection_002.png" imageanchor="1"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOLVQxpo9cMPzod4SuPy66qphs1oRFbkCs11ryf_TFCe63VyjDPip-YUbQZk80xtqRtyV0Bhv0bLK5137gKLINc4mFxUmlVYn2NbvLpzLBe58TtwPxCgqXJyvGhyDXM2D2Rt4wsoVsCHk/s400/Selection_002.png" width="400" /></a><br />
<br />
3. Point to the spreadsheet that contains your addresses.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMmlyvsFwUTq_U3VOXE9TyTG8TTGhdzBjBVd06LcsbB1dMxvRj2Jc1hPqntSrWZhRUo38kbY_ddPH9g6LMTmYQWcqYHcsPmIqb_J3KQabLTud-9xgmI5YXfSoA4Zoo4KahfUfodIclPSM/s1600/Selection_074.png" imageanchor="1"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMmlyvsFwUTq_U3VOXE9TyTG8TTGhdzBjBVd06LcsbB1dMxvRj2Jc1hPqntSrWZhRUo38kbY_ddPH9g6LMTmYQWcqYHcsPmIqb_J3KQabLTud-9xgmI5YXfSoA4Zoo4KahfUfodIclPSM/s400/Selection_074.png" width="400" /></a><br />
<br />
4. Allow Base to register the database for you, because you will need to see it from the word processor.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisxo3enF59SSzs0F3wuUvZ-JBHRqI60Su3Yc1vAVbcgXrzgEPlYubvlb4RAUqKZyEKez22cndk6Cq2SVGuvdCCFA98RYMDc7BPX4W4abVJUuk7tCO9X0Rr-x9WR5NGV0z88JhhL5FND_k/s1600/Selection_075.png" imageanchor="1"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisxo3enF59SSzs0F3wuUvZ-JBHRqI60Su3Yc1vAVbcgXrzgEPlYubvlb4RAUqKZyEKez22cndk6Cq2SVGuvdCCFA98RYMDc7BPX4W4abVJUuk7tCO9X0Rr-x9WR5NGV0z88JhhL5FND_k/s400/Selection_075.png" width="400" /></a><br />
<br />
5. Click 'Finish' and save the database.<br />
<br />
6. Open LibreOffice Writer</div>
<div>
<b><u><br /></u></b>
7. Select File --> New --> Labels<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyiRSyUULomI5yshyHl9WwUqvQY2G_qrSahLRXd7GJL6YOcqp3l3t0n-5cxTymhgUxKQJZOMszGntAdGpAeIPCvH3JXOOZokU6_WhoBT3cOrZqCK2f6tk737OCLgaimwEbtr2AWwpSAw/s1600/Selection_076.png" imageanchor="1"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyiRSyUULomI5yshyHl9WwUqvQY2G_qrSahLRXd7GJL6YOcqp3l3t0n-5cxTymhgUxKQJZOMszGntAdGpAeIPCvH3JXOOZokU6_WhoBT3cOrZqCK2f6tk737OCLgaimwEbtr2AWwpSAw/s400/Selection_076.png" width="400" /></a><br />
<br />
8. In the resulting dialog, see below for detailed explanation:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_eZ5Hh_I_leSR8G9giTqOBwQ4xmmewnfMC5C5mQZ7Ljrl7NxXULo4MDTjuWimyseFcmNyfuQHshzKfouWyvZRMVHT4bX_amEdOzB88rukvW_uOrsuGXx-dLcc5NwAVbmpAlHt9C6vDHI/s1600/Selection_077.png" imageanchor="1"><img border="0" height="362" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_eZ5Hh_I_leSR8G9giTqOBwQ4xmmewnfMC5C5mQZ7Ljrl7NxXULo4MDTjuWimyseFcmNyfuQHshzKfouWyvZRMVHT4bX_amEdOzB88rukvW_uOrsuGXx-dLcc5NwAVbmpAlHt9C6vDHI/s640/Selection_077.png" width="640" /></a><br />
<br /></div>
<div>
A. Select the brand and type of labels you want to print.<br />
B. Select the database you created earlier.<br />
C. Select the table the data will come from (if you started with a spreadsheet there should probably only be one table here)<br />
D. Select the field to add to the label<br />
E. Add the field into the label<br />
F. Repeat D and E, and arrange the fields in the "Label Text" box.<br />
G. Finally make sure the correct printer is selected under the "Options" tab.<br />
<br />
Note for section F I have arranged fields like so:<br />
[First Name] [Last Name]<br />
[Address]<br />
[City], [State] [Zip]<br />
<br />
<br />
9. Go to the options tab. This is critical.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmu-iFp7D_RokM-WZ6tX_pFJESR68OZ_4IUbt-OfAMHSLDl6jd5BkLAETIdpIXvjkpVtBcU1FEV4Fe60ot1aw-h5hl7Bf6NHNL_QR9I1vR6o2VScdSwKC7tT6LebPdNFxO09gQtj6npvs/s1600/Selection_081.png" imageanchor="1"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmu-iFp7D_RokM-WZ6tX_pFJESR68OZ_4IUbt-OfAMHSLDl6jd5BkLAETIdpIXvjkpVtBcU1FEV4Fe60ot1aw-h5hl7Bf6NHNL_QR9I1vR6o2VScdSwKC7tT6LebPdNFxO09gQtj6npvs/s400/Selection_081.png" width="400" /></a><br />
<br />
Select "Synchronize contents" and set up your printer. The "Synchronize contents" option will allow you to manipulate the formatting of the first label, and apply those changes to all of the labels.<br />
<br />
Click 'New Document' when you're finished.<br />
<br />
10. Done.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdGrZl7VSdbKKIF_8cdvV-10d9SeqFxNCKsMlvNjtc87l1pp5oTwMaDTIqzZVxJJtoYFXoznxOX_aIovwY-vslAAbkMFXN6BME60q41WirT3hLOVZ02mquCD-et-XMt4nMK_2QmQ8O3E/s1600/Selection_082.png" imageanchor="1"><img border="0" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdGrZl7VSdbKKIF_8cdvV-10d9SeqFxNCKsMlvNjtc87l1pp5oTwMaDTIqzZVxJJtoYFXoznxOX_aIovwY-vslAAbkMFXN6BME60q41WirT3hLOVZ02mquCD-et-XMt4nMK_2QmQ8O3E/s640/Selection_082.png" width="640" /></a><br />
<br />
11. Now, we probably want to clean things up a bit. I like to center the address horizontally and vertically, and maybe change the font. Do this for the first label:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7XzF87BQc87DJP5LJPENDs4eiEeeND2Ko_NtKh29YvYjZhTKzf12xL8ztXx0Hpc4iKLnzA3Q2O7CPv_NrkpgPoX6yce9qzh9-Gs8hweRuUGEpR5N3Q4bUBauWJgGbt16___qt5ODd7p8/s1600/Selection_083.png" imageanchor="1"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7XzF87BQc87DJP5LJPENDs4eiEeeND2Ko_NtKh29YvYjZhTKzf12xL8ztXx0Hpc4iKLnzA3Q2O7CPv_NrkpgPoX6yce9qzh9-Gs8hweRuUGEpR5N3Q4bUBauWJgGbt16___qt5ODd7p8/s640/Selection_083.png" width="640" /></a><br />
<br />
<br />
12. Once you've made your changes to the first label, click "Synchronize Labels" to apply the changes to all labels.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMXwaGWN0k6vZaaV0vsi6mPm92FPLQbDXYZN46xt64pBQdGIC2E8llWQTeoK42oArUkatWa7m8KJ27sQzhVE7DRZIlkoR4f3_c-MLd1Ws6kWv74kFx8NDNBW_xkM9YtD-qa7QswSZypko/s1600/Selection_084.png" imageanchor="1"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMXwaGWN0k6vZaaV0vsi6mPm92FPLQbDXYZN46xt64pBQdGIC2E8llWQTeoK42oArUkatWa7m8KJ27sQzhVE7DRZIlkoR4f3_c-MLd1Ws6kWv74kFx8NDNBW_xkM9YtD-qa7QswSZypko/s640/Selection_084.png" width="640" /></a><br />
<br />
13. When you're done formatting, do File --> Print. You will get this message, to which you will click "Yes" to continue.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqLjybo_p8NJteQSgLRlUe-EcEEHJZwC7fk5qOS07ttP2q78RFYS5hzuQ5n680JXwNwoJ_IAQrjCiDAT7A3ITw72fD6EPIh43u0BhdZj-PTJHUXESm2gNF9H-60lgQjHvyNXHLcvcOWs8/s1600/Selection_085.png" imageanchor="1"><img border="0" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqLjybo_p8NJteQSgLRlUe-EcEEHJZwC7fk5qOS07ttP2q78RFYS5hzuQ5n680JXwNwoJ_IAQrjCiDAT7A3ITw72fD6EPIh43u0BhdZj-PTJHUXESm2gNF9H-60lgQjHvyNXHLcvcOWs8/s640/Selection_085.png" width="640" /></a><br />
<br />
14. After clicking "Yes" you are presented with yet another dialog:<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg671AFRnQXUMFVvsLoPYsyYKmauRTPA8lF7lvOI4u61WCzpFRtME_sSUWVeiM8v-f17xuN_MlNbQUXdiPg1nE73QZAQ9fuh6j7401q3BzDyRKKAiWv2AGUwsGrGzVck7FLzAGR-Op1nNc/s1600/Selection_086.png" imageanchor="1"><img border="0" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg671AFRnQXUMFVvsLoPYsyYKmauRTPA8lF7lvOI4u61WCzpFRtME_sSUWVeiM8v-f17xuN_MlNbQUXdiPg1nE73QZAQ9fuh6j7401q3BzDyRKKAiWv2AGUwsGrGzVck7FLzAGR-Op1nNc/s640/Selection_086.png" width="640" /></a><br />
For the final project, you probably want to select "All" to merge all, but for a test, maybe try merging the first 10 records or so and printing.<br />
<br />
When you have maybe addresses printed on plain paper, you can hold the plain paper over the labels, then hold them both up to bright light to see if the labels would align properly.<br />
<br />
When you are satisfied, load labels and print.<br />
<br />
<br />
<br /></div>
<div>
<br /></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com5tag:blogger.com,1999:blog-7299582172907567087.post-37744909346835492182015-04-13T18:06:00.000-07:002018-06-23T18:50:08.263-07:00Installing kanboard onto a Raspberry PiI wanted to try running the open source software "<a href="http://kanboard.net/">kanboard</a>" on my Raspberry Pi. The installation was pretty simple.<br />
<br />
First, get updates.<br />
<br />
<pre class="snippet">sudo apt-get update</pre>
<br />
<span style="font-family: inherit;">Now install the web server, Apache:</span><br />
<span style="font-family: inherit;"></span><br />
<pre class="snippet"><span style="font-family: inherit;">sudo apt-get install apache2</span></pre>
<span style="font-family: inherit;">
</span>
<span style="font-family: inherit;"><br /></span>
After this is finished, you should try to hit your Raspberry Pi with your browser (type in the address of your Pi and hit enter):<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUW2UKwzKK-64X3wvRVOXFaldWuOxbiLzw6Xl6xaK477Z_nLEuydutJcXipbmyYta-XxLddGcqHa2OzaTIOnKDX1kzHKCCBXHaJylzI3fj3pAoVPE6Ais2gf_3-xZu-PBCgfdzLmNIya8/s1600/Selection_053.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUW2UKwzKK-64X3wvRVOXFaldWuOxbiLzw6Xl6xaK477Z_nLEuydutJcXipbmyYta-XxLddGcqHa2OzaTIOnKDX1kzHKCCBXHaJylzI3fj3pAoVPE6Ais2gf_3-xZu-PBCgfdzLmNIya8/s1600/Selection_053.png" width="320" /></a></div>
We also need php.<br />
<br />
<strike></strike><br />
<pre class="snippet"><strike>sudo apt-get install php5</strike></pre>
<br />
<pre class="snippet">sudo apt-get install php php-gd php-mbstring php-dom</pre>
<br />
<br />
And we need the sqlite plugin as well as unzip if you don't have it already:<br />
<br />
<strike><pre class="snippet">sudo apt-get install unzip php5-sqlite</pre></strike>
<pre class="snippet">sudo apt-get install unzip php7.0-sqlite3</pre>
<br />
<br />
Now restart the webserver:<br />
<br />
<pre class="snippet">sudo service apache2 restart</pre>
<br />
And do:<br />
<br />
<pre class="snippet"> sudo su
cd /var/www/html
git clone https://github.com/kanboard/kanboard.git
cd kanboard && git checkout v1.2.5 && cd ..
chown -R www-data:www-data kanboard/data
service apache2 restart</pre>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Now try to hit http://<your pi IP address>/html/kanboard from your browser, if you were successful you should see:</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwRcdys7QKw1XdpbMhopsFDbG9_nbj8_oz81ovkAs4KTm7CxVRUd5DamgjDDPWiceIkaNkxLDyOzRURXIkkcjM0XfeqdNrFZUi-gfUm8-RcgncnfR6OT9U0h4DFi8GcvX3dvaZ0Wo8wh4/s1600/Selection_054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwRcdys7QKw1XdpbMhopsFDbG9_nbj8_oz81ovkAs4KTm7CxVRUd5DamgjDDPWiceIkaNkxLDyOzRURXIkkcjM0XfeqdNrFZUi-gfUm8-RcgncnfR6OT9U0h4DFi8GcvX3dvaZ0Wo8wh4/s1600/Selection_054.png" width="640" /></a></div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span>William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com10tag:blogger.com,1999:blog-7299582172907567087.post-12324382134082838472015-03-31T17:37:00.004-07:002015-03-31T17:37:59.232-07:00Amazon Dash?This caught me off guard today: a free <a href="https://www.amazon.com/oc/dash-button">Dash button</a> (for Prime members only) to instantly purchase certain products from Amazon:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC_LBHbdOdvdyvr1BLKf7c14rVxUdnsE2EhkQf7Tua1VUUNNUQoYwI-OPhBmVlEFa0wSPcg3kFoEJsLox8eptElOLBWLnK-9_aI_YZ1L8s-wMSkr57cWISuK1LNs9b4AVr59PSxNd3oQ8/s1600/Selection_047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC_LBHbdOdvdyvr1BLKf7c14rVxUdnsE2EhkQf7Tua1VUUNNUQoYwI-OPhBmVlEFa0wSPcg3kFoEJsLox8eptElOLBWLnK-9_aI_YZ1L8s-wMSkr57cWISuK1LNs9b4AVr59PSxNd3oQ8/s1600/Selection_047.png" height="301" width="400" /></a></div>
<br />
Amazon has posted a <a href="https://www.youtube.com/watch?t=55&v=NMacTuHPWFI">YouTube video</a> demonstrating the use of the button.<br />
<br />
My first reaction: how long will it take for the maker/hacker community to figure out other uses for this button?<br />
<br />
My second reaction after watching the video: I could use this.<br />
<br />
So I requested an invite.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQshSHGNcU9aUgQoF32VvEYZp7KM0dJcc0Y-5qpmD9pCZDOSFAeTkI9vGyrOUZd73xN6aDz_E5uZuyabGLeSFX-RG0867ppfMeVFRo2ikWX_p9S4RGI2uDxBqfOavQDFSixyWfHqG3nHc/s1600/Selection_049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQshSHGNcU9aUgQoF32VvEYZp7KM0dJcc0Y-5qpmD9pCZDOSFAeTkI9vGyrOUZd73xN6aDz_E5uZuyabGLeSFX-RG0867ppfMeVFRo2ikWX_p9S4RGI2uDxBqfOavQDFSixyWfHqG3nHc/s1600/Selection_049.png" height="197" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Amazon is also pretty, um, curt with their terms and conditions:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-pIjdecca-hSYiDZFwW1IdjpBzEkN1kv2VPGfyEJaBQCHe6NBns_R2ubryMRQvsAtvePft1QpdTQsx8vBEYQagrYDyjMGSK0UNFFgvV89bx-al6Uf-sCowGPOCDdOGUwmAydwwCskQvw/s1600/Selection_048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-pIjdecca-hSYiDZFwW1IdjpBzEkN1kv2VPGfyEJaBQCHe6NBns_R2ubryMRQvsAtvePft1QpdTQsx8vBEYQagrYDyjMGSK0UNFFgvV89bx-al6Uf-sCowGPOCDdOGUwmAydwwCskQvw/s1600/Selection_048.png" height="352" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
I'm very curious how it works. There is some indication that using an app on your phone is how you configure what product the button is tied to:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb_KaQuUE3aQKBv_aOWjukzVAVqZL4UZ-1-Qbkz-JXFRJhXxRVXuKSuia1GpZ13i3Hp3MdAMz3K0mvEiEII5YMRyU8TOp7SCHYxnClTldrwzkTsq-oXTF3EW-4ux0Swlk2LqghWRWe9y0/s1600/Selection_050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb_KaQuUE3aQKBv_aOWjukzVAVqZL4UZ-1-Qbkz-JXFRJhXxRVXuKSuia1GpZ13i3Hp3MdAMz3K0mvEiEII5YMRyU8TOp7SCHYxnClTldrwzkTsq-oXTF3EW-4ux0Swlk2LqghWRWe9y0/s1600/Selection_050.png" height="368" width="640" /></a></div>
<br />
<br />
There is no indication as to how the button press translates into the order, but using the Google patent search I found <a href="https://www.google.com/patents/US20140279276?dq=amazon+order&hl=en&sa=X&ei=2jwbVfWFIsrhsAThg4LIBQ&ved=0CCwQ6AEwAg">this little gem</a>, which describes using SMS messaging to complete "one click" orders. I'm guessing that's what we have here, a tiny cell transmitter, very difficult to modify and use for other purposes.<br />
<br />
We'll see...<br />
<br />
<br />
<br />
<br />
<div>
<br /></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-75519617085603539582015-03-31T16:45:00.001-07:002019-03-14T22:08:01.160-07:00Scanning Double-Sided Documents With a Single Sheet Scanner Under Linux I like to keep documents. Receipts, statements, manuals, pamphlets, you name it. I file things away in hanging folders for later reference.<br />
<br />
Since the kiddos came along it has gotten harder and harder to make time for all of this organization, and with a huge pile of unfiled documents I knew I had to find a way to make this easier, or least require less space.<br />
<br />
Digitizing the documents seemed like a great answer. I got an OfficeJet 6500A about a year ago, and I've created a couple of scripts to make scanning a little easier on the Linux desktop.<br />
<h3>
I've broken down document scanning into a few separate tasks, most of these tasks were scripted:</h3>
<ol>
<li>Scan physical documents into TIFF format</li>
<li>Compress/convert TIFF files into JPEG files to reduce space</li>
<li>Convert JPEG files into PDF (mainly for portability)</li>
<li>Create double-sided PDF documents (so that the front side and back side of a single page are in one PDF file)</li>
<li>Concatenate the double-sided PDF files into a single PDF file.</li>
</ol>
<h3>
Prerequisites for Linux:</h3>
<ul>
<li>convert (package: imagemagick). The ImageMagick package provides a commandline tool called 'convert' that will handle image conversion.</li>
<li>scanimage (package: sane (or sometimes sane-utils)). This will actually handle the scanning.</li>
<li>pdftk (package: pdftk). The pdf toolkit will handle just about any PDF-related digital activity you can think of.</li>
<li>(In Ubuntu/Mint: sudo apt-get install imagemagick sane pdftk)</li>
</ul>
<h2>
Setup</h2>
In my case I'm using an HP Officejet 6500A Plus. Make sure you've set
up the printer with hp-setup and that you can print to it from other
applications.<br />
<br />
Test your setup by typing "scanimage" at the commandline and see what happens. You should see something like:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">scanimage: output is not a file, exiting</span><br />
<div>
<br /></div>
If you don't have any error messages, you can skip past the following troubleshooting steps.<br />
<br />
<h2>
Troubleshooting</h2>
<h3>
<b>Potential problem 1:</b></h3>
<pre class="snippet">wskellenger@marquette ~ $ scanimage
scanimage: no SANE devices found
</pre>
<h3>
<b>Solution:</b></h3>
<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: x-small;">uncomment hpaio in /etc/sane.d/dll.conf<br /><br />...snip from dll.conf...</span></span><br />
<pre class="snippet">#umax_pp
umax1220u
#v4l #don't care about this
hpaio #uncomment this line
</pre>
<h3>
Potential problem 2:</h3>
<div>
Note the very last line, which contains the error:</div>
<br />
<pre class="snippet">wskellenger@marquette ~ $ scanimage
MIB search path: /home/wskellenger/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp
Cannot find module (SNMPv2-TC): At line 10 in /usr/share/snmp/mibs/UCD-DLMOD-MIB.txt
Cannot find module (SNMPv2-SMI): At line 34 in /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Cannot find module (SNMPv2-TC): At line 37 in /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Did not find 'enterprises' in module #-1 (/usr/share/snmp/mibs/UCD-SNMP-MIB.txt)
Did not find 'DisplayString' in module #-1 (/usr/share/snmp/mibs/UCD-SNMP-MIB.txt)
Did not find 'TruthValue' in module #-1 (/usr/share/snmp/mibs/UCD-SNMP-MIB.txt)
Unlinked OID in UCD-SNMP-MIB: ucdavis ::= { enterprises 2021 }
Undefined identifier: enterprises near line 39 of /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Did not find 'DisplayString' in module #-1 (/usr/share/snmp/mibs/UCD-DLMOD-MIB.txt)
Did not find 'ucdExperimental' in module UCD-SNMP-MIB (/usr/share/snmp/mibs/UCD-DLMOD-
..... stuff removed .....
Cannot adopt OID in UCD-SNMP-MIB: dskUsed ::= { dskEntry 8 }
Cannot adopt OID in UCD-SNMP-MIB: dskAvail ::= { dskEntry 7 }
Cannot adopt OID in UCD-SNMP-MIB: dskTotal ::= { dskEntry 6 }
Cannot adopt OID in UCD-SNMP-MIB: dskMinPercent ::= { dskEntry 5 }
Cannot adopt OID in UCD-SNMP-MIB: dskMinimum ::= { dskEntry 4 }
Cannot adopt OID in UCD-SNMP-MIB: dskDevice ::= { dskEntry 3 }
Cannot adopt OID in UCD-SNMP-MIB: dskPath ::= { dskEntry 2 }
Cannot adopt OID in UCD-SNMP-MIB: dskIndex ::= { dskEntry 1 }
Cannot adopt OID in UCD-DISKIO-MIB: diskIOTable ::= { ucdDiskIOMIB 1 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsLoggingGroup ::= { nsConfigGroups 2 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsDebugGroup ::= { nsConfigGroups 1 }
Cannot adopt OID in UCD-SNMP-MIB: snmperrErrMessage ::= { snmperrs 101 }
Cannot adopt OID in UCD-SNMP-MIB: snmperrErrorFlag ::= { snmperrs 100 }
Cannot adopt OID in UCD-SNMP-MIB: snmperrNames ::= { snmperrs 2 }
Cannot adopt OID in UCD-SNMP-MIB: snmperrIndex ::= { snmperrs 1 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsTransactionTable ::= { nsTransactions 1 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsLogStatus ::= { nsLoggingEntry 5 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsLogMaxLevel ::= { nsLoggingEntry 4 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsLogType ::= { nsLoggingEntry 3 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsLogToken ::= { nsLoggingEntry 2 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsLogLevel ::= { nsLoggingEntry 1 }
Cannot adopt OID in NET-SNMP-EXTEND-MIB: nsExtendResult ::= { nsExtendOutput1Entry 4 }
Cannot adopt OID in NET-SNMP-EXTEND-MIB: nsExtendOutNumLines ::= { nsExtendOutput1Entry 3 }
Cannot adopt OID in NET-SNMP-EXTEND-MIB: nsExtendOutputFull ::= { nsExtendOutput1Entry 2 }
Cannot adopt OID in NET-SNMP-EXTEND-MIB: nsExtendOutput1Line ::= { nsExtendOutput1Entry 1 }
Cannot adopt OID in NET-SNMP-EXTEND-MIB: nsExtendOutLine ::= { nsExtendOutput2Entry 2 }
Cannot adopt OID in NET-SNMP-EXTEND-MIB: nsExtendLineIndex ::= { nsExtendOutput2Entry 1 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsNotifyStart ::= { netSnmpNotifications 1 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsNotifyShutdown ::= { netSnmpNotifications 2 }
Cannot adopt OID in NET-SNMP-AGENT-MIB: nsNotifyRestart ::= { netSnmpNotifications 3 }
Cannot adopt OID in UCD-SNMP-MIB: laErrMessage ::= { laEntry 101 }
Cannot adopt OID in UCD-SNMP-MIB: laErrorFlag ::= { laEntry 100 }
Cannot adopt OID in UCD-SNMP-MIB: laLoadFloat ::= { laEntry 6 }
Cannot adopt OID in UCD-SNMP-MIB: laLoadInt ::= { laEntry 5 }
Cannot adopt OID in UCD-SNMP-MIB: laConfig ::= { laEntry 4 }
Cannot adopt OID in UCD-SNMP-MIB: laLoad ::= { laEntry 3 }
Cannot adopt OID in UCD-SNMP-MIB: laNames ::= { laEntry 2 }
Cannot adopt OID in UCD-SNMP-MIB: laIndex ::= { laEntry 1 }
scanimage: open of device hpaio:/net/Officejet_6500_E710n-z?ip=192.168.1.125 failed: Error during device I/O
</pre>
<br />
<h3>
Solution:</h3>
<br />
I had this issue when my wireless printer was set to get an IP Address automatically using DHCP. You might see this in the HP Device Manager -- an indication that all is not well communicating with the printer:<br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"></span></span><br />
<div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7bUQT5epo71hmL_iDbzSJruxeeYXv9dxzRT8lEpNECpxm7fIgFPIwToAHaPhTBnzMSLYklppoBc0l_rozPKllGfLoBSrUcZIQJzMqFuPYLEAzGqxuGSbm90EhmNSnilgTWgTj5ld2JTY/s1600/HP+Device+Manager+-+HP+Officejet+6500+e710n-z+(Printer)_021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7bUQT5epo71hmL_iDbzSJruxeeYXv9dxzRT8lEpNECpxm7fIgFPIwToAHaPhTBnzMSLYklppoBc0l_rozPKllGfLoBSrUcZIQJzMqFuPYLEAzGqxuGSbm90EhmNSnilgTWgTj5ld2JTY/s1600/HP+Device+Manager+-+HP+Officejet+6500+e710n-z+(Printer)_021.png" width="320" /></a></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span></span></div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">Do the following:</span></span><br />
<ul><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">
<li>Drop the printer from the HP Device Manager or from CUPS</li>
<li>Configure the printer for a static IP address</li>
<li>Add the printer to HP Device Manager or CUPS again</li>
</span></span></ul>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">This is what you should see -- an indication that all is well:</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy_dgpKnv1BpMw57UVP5zh1WusB8mw23VHDW-eeixx9I1z8yf5d9hVPZtlCSffwavIn-ppC1SFiVeZZ059l9vAuDBToFT49NJw1tiS4ugWKeYIwmahfe-9acC7lDzfiFCRwuMSJHEdz9c/s1600/HP+Device+Manager+-+HP+Officejet+6500+e710n-z+(Printer)_022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy_dgpKnv1BpMw57UVP5zh1WusB8mw23VHDW-eeixx9I1z8yf5d9hVPZtlCSffwavIn-ppC1SFiVeZZ059l9vAuDBToFT49NJw1tiS4ugWKeYIwmahfe-9acC7lDzfiFCRwuMSJHEdz9c/s1600/HP+Device+Manager+-+HP+Officejet+6500+e710n-z+(Printer)_022.png" width="320" /></a></span></span></div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span></span></div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">
When you run scanimage now, <span style="background-color: yellow;">you may still get a bunch of "Cannot adopt OID" warnings</span>, but it should still work and hopefully you can make a scan from the commandline. <span style="background-color: yellow;"><b><u>You should *not* get the "Error during device I/O" message that is highlighted above.</u></b></span><br />
<br />
</span></span><br />
<hr />
<br />
You need to have "scanimage" working at this point to continue.<br />
<br />
Let's scan some stuff.<br />
<br />
<h3>
Installing the Scripts</h3>
You can get the scripts from my git repo <a href="https://github.com/skelliam/nautilus-scripts">here</a>. Note, you need <b><u>Python 2.x</u></b> to run them. Clone the repo and then find your file manager below:<br />
<ul>
<li>Nautilus: Use the master branch of the scripts and copy everything into your ~/.gnome2/nautilus-scripts/ directory. </li>
<li>Thunar: Use the master branch of the scripts. I'm pretty sure you have to edit the "Custom Actions" in the Edit menu and add each script manually. I tested it and it worked, but it was in Arch Linux and I've since gone back to Mint. So I don't have screenshots of that configuration but it wasn't too difficult. </li>
<li>Nemo: Use the nemo branch of the repo and copy everything into your<strike> ~/.gnome2/nemo-scripts/</strike> /.local/share/nemo/scripts</li>
<li>Other: ??? The scripts are pretty generic, they should work with almost any extendable file manager. </li>
<li>In order for pdf conversions to work properly in newer (2018+) versions of convert, you need to change the policy file in /etc/ImageMagick-6/policy.xml. See <a href="https://askubuntu.com/questions/1081895/trouble-with-batch-conversion-of-png-to-pdf-using-convert">here</a>.</li>
</ul>
<h3>
Workflow</h3>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW57RCc6F1bDxkLpzzmo5y8FYAjZDtLPzobQrKJ4q_YdDdBBbuGgIwqJSKcjFbl_bqzDGdrwGZNsHcNK__dcFtA-iCn-tpAtWVwz25Lt_3I8YIJrRbYUPZgxtasCwVqrQF7bDMRqRcSe0/s1600/out.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW57RCc6F1bDxkLpzzmo5y8FYAjZDtLPzobQrKJ4q_YdDdBBbuGgIwqJSKcjFbl_bqzDGdrwGZNsHcNK__dcFtA-iCn-tpAtWVwz25Lt_3I8YIJrRbYUPZgxtasCwVqrQF7bDMRqRcSe0/s1600/out.png" width="451" /></a></div>
<br /></div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">
</span></span>
<br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"></span></span></div>
<div>
<ol><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">
</span></span>
<li>This example uses four double-sided pages </li>
<li>Pages are numbered (front/back) 1/2, 3/4, 5/6, 7/8. </li>
<li>Load the documents into the scanner in order, with page one facing up (page one will be scanned first), and run the script "Scan sheet feeder documents to PDF" </li>
<li>The documents will now be face down, with the last page (8) at the top. Grab the stack of documents as is, rotate 180 degrees, and put into the sheet feeder again. </li>
<li>The sheets are loaded exactly as they came out of the scanner, the back of the last page should be at the top, facing up. Run the script "Scan sheet feeder documents to PDF" again. </li>
<li>The sheets are now in the original order. You are done handing the paper. </li>
</ol>
<div>
<br /></div>
<h2>
Postprocessing</h2>
Now we need to duplex the output (put the fronts and backs together) and concatenate the resulting documents (put them together).</div>
<div>
<h3>
Duplex the front and back pages of the output:</h3>
Select all of the pages you scanned and create duplex PDFs (this will put together pages 1+2, 3+4, 5+6, 7+8) <br />
<h3>
Finally, concatenate the duplexed pages into complete documents, as desired: </h3>
Select some or all of the above duplexed documents and concatenate into single documents as necessary.<br />
<h3>
If you're confused, watch this:</h3>
</div>
<div>
<div style="text-align: center;">
<br /></div>
</div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/TlloF_xF8nk" width="560"></iframe>
</div>
<div>
<div style="text-align: center;">
<br /></div>
</div>
<h3 style="text-align: center;">
Why so many steps?</h3>
<div>
One of the goals was to be able to take a huge stack of receipts, statements, whatever documents, and scan them all at once. When finished there is some tedious renaming, but for me this is easier than manual filing in a file cabinet.<br />
<br />
Notes:</div>
<div>
<ul>
<li>If you only scan a bunch of single-sided documents, you can skip the duplex step and just concatenate all of the pages immediately, or do nothing and you have a bunch of single sided scans.</li>
<li>If you have a bunch of mismatched documents, as I described, you can select three or four of your duplexed documents, and concatenate only those if you wish. </li>
</ul>
<br />
<h3>
<span style="font-family: inherit;"><b>Scan some stuff</b></span></h3>
</div>
</div>
In Nautilus (or Nemo or Thunar), navigate to the folder where you want the scans to go. From here right click and select Scripts --> 1-Scan_sheet_feeder_docs_to_PDF. It may take a few seconds, but your scanner should fire up and start scanning. The files will first be scanned to .tiff, then compressed to .jpg, then converted to .pdf. I took the extra step of .jpg compression to reduce the file size before converting to .pdf. The .tiff may be 24 MB in size while a .jpg of the same file might only be 600 kb. The extra step is worth it.<br />
<br />
Once the files are scanned, you'll have a bunch of files the destination directory like so:<br />
<br />
scan1409007022-1.pdf<br />
scan1409007022-2.pdf<br />
scan1409007022-3.pdf<br />
scan1409007022-4.pdf<br />
scan1409007022-5.pdf<br />
scan1409007022-6.pdf<br />
scan1409007851-1.pdf<br />
scan1409007851-2.pdf<br />
scan1409007851-3.pdf<br />
scan1409007851-4.pdf<br />
scan1409007851-5.pdf<br />
scan1409007851-6.pdf<br />
<br />
The naming convention is scan<timestamp>(start_time)-(number)<number>.pdf.<br />
<br />
The first six scans are all of the front sides of the pages, the second six scans are the back sides.<br />
</number></timestamp><br />
The front side files are all numbered scan1409007022 while the back side files are all numbered scan1409007851.<br />
<br />
<timestamp>When you scan all of the front sides first, and then flip the stack over, and scan the back sides, the files need to be duplexed in a special sequence, that is (don't worry, I handle this automatically!):</timestamp><br />
<ul>
<li>front side file #1 + back side file #6</li>
<li>front side file #2 + back side file #5</li>
<li>front side file #3 + back side file #4</li>
<li>front side file #4 + back side file #3</li>
<li>front side file #5 + back side file #2</li>
<li>front side file #6 + back side file #1</li>
</ul>
Now we just need to select all of the files you just scanned, and then right click, and select scripts --> 2-Make_Duplex_PDFs. The script will combine the files as described above. <br />
<br />
Now you've got:<br />
<br />
dplx-scan1409007022-01-06.pdf<br />
dplx-scan1409007022-02-05.pdf<br />
dplx-scan1409007022-03-04.pdf<br />
dplx-scan1409007022-04-03.pdf<br />
dplx-scan1409007022-05-02.pdf<br />
dplx-scan1409007022-06-01.pdf<br />
<br />
<h3>
We're almost done!</h3>
At this point, if the stack of papers you scanned are all from the same document, just select them all, right click, and select 3-Concatenate_Selected_PDFs. The script will ask you if you want to rename the result, and then it will ask you if it should delete the files you've selected.<br />
<br />
If the stack of papers you scanned are from DIFFERENT documents, you can select the group of duplexed documents that represent one document, and then concatenate those. Repeat until you've concatenated the files into the appropriate document.<br />
<br />
For example:<br />
<br />
dplx-scan1409007022-01-06.pdf<br />
dplx-scan1409007022-02-05.pdf<br />
dplx-scan1409007022-03-04.pdf<br />
<br />
might be a T-Mobile bill, while:<br />
<br />
dplx-scan1409007022-04-03.pdf<br />
dplx-scan1409007022-05-02.pdf<br />
<br />
...is a bank statement and:<br />
<br />
dplx-scan1409007022-06-01.pdf<br />
<br />
...is a cable bill.<br />
<br />
You proceed as above, select the documents <b>that belong together</b>, and then right click, select scripts, then 3-Concatenate_Selected_PDFs.<br />
<br />
And that's it.<br />
<br />
I've added some additional scripts that I find useful:<br />
<br />
4-Rotate_Selected_PDFs<br />
5-Scan_flatbed_docs_to_PDF<br />
6-Scan_flatbed_photo_to_JPG<br />
<br />
<div>
</div>
<div>
They pretty much do what they say.</div>
<br />
<br />William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-60872212266080025132015-03-26T17:23:00.001-07:002015-03-26T17:23:16.792-07:00Set your Raspberry Pi shell prompt to another colorI've got two terminal windows open, one is on my local machine and the other is on my Raspberry Pi. The problem I've got is that when I'm switching back and forth I sometimes forget if I'm in the correct window or not. Here is what they look like:<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYXmn4Hn0EEP4ynYde8smm-VbMb9sCBrG9znNPNu6h-9oFFCCV8hXBWdVAts67Stf72Sl5mlhKtp0A6ZnyUeSfW25ihS19ev8SGEn3PcOrkmO2JQenT300eAELaxSQFrLYwY8CQ-vFmDQ/s1600/Selection_042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYXmn4Hn0EEP4ynYde8smm-VbMb9sCBrG9znNPNu6h-9oFFCCV8hXBWdVAts67Stf72Sl5mlhKtp0A6ZnyUeSfW25ihS19ev8SGEn3PcOrkmO2JQenT300eAELaxSQFrLYwY8CQ-vFmDQ/s1600/Selection_042.png" height="78" width="640" /></a></div>
<div>
<br /></div>
<div>
They look exactly the same, save for the "pi@raspberrypi" prompt in one window vs. the other.</div>
<div>
<br /></div>
<div>
I want the Rpi to have a pink or red or raspberry (heh) or some other bright colored prompt.</div>
<div>
<br /></div>
<div>
Alter .bashrc with whatever editor you want. I use vim, so from your home directory:</div>
<div>
<br /></div>
<div>
vim .bashrc</div>
<div>
<br /></div>
<div>
Look for these lines:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1h-u9G16H7FV6fj2b8SWXsQdXfYBQwoTrL9Rc9cZr2l3sxnxtX8Ybc_l79Z9_P9o_cMOq1mgXXbFRevypw8NvK65B3Ws-d02ETmfHqt8C_eh_3C-JdzFatGpiCFC03aZaKzmy6VA40SY/s1600/pi@raspberrypi:+~_043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1h-u9G16H7FV6fj2b8SWXsQdXfYBQwoTrL9Rc9cZr2l3sxnxtX8Ybc_l79Z9_P9o_cMOq1mgXXbFRevypw8NvK65B3Ws-d02ETmfHqt8C_eh_3C-JdzFatGpiCFC03aZaKzmy6VA40SY/s1600/pi@raspberrypi:+~_043.png" height="400" width="373" /></a></div>
<div>
<br /></div>
<div>
I want something sort of startling -- so I know I'm at the rpi prompt.</div>
<div>
<br /></div>
<div>
You can find a <a href="https://wiki.archlinux.org/index.php/Color_Bash_Prompt#List_of_colors_for_prompt_and_Bash">list of color codes here</a>.</div>
<div>
<br /></div>
<div>
Here's what I changed:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIF7nDk0ByJy83dqws52yaFgGW0DZCtz0-uXQLyDZq_4Qi0KqnMGsAiiyVzauHCJp6KAr8Q_Mp90IgXcg1jJ4uABVIrandijr4JfYfqb9McPEBlfvgr1bvxw4y1AbX_Qp89s4FyWIXvC8/s1600/pi@raspberrypi:+~_044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIF7nDk0ByJy83dqws52yaFgGW0DZCtz0-uXQLyDZq_4Qi0KqnMGsAiiyVzauHCJp6KAr8Q_Mp90IgXcg1jJ4uABVIrandijr4JfYfqb9McPEBlfvgr1bvxw4y1AbX_Qp89s4FyWIXvC8/s1600/pi@raspberrypi:+~_044.png" height="400" width="373" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Then do a "source .bashrc" when you're finished.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9zJOYodGcSHhF_F9lA7Sskx8SvLIJItKAgJqEFB4CNhyTBSx2lBN_W_q2M8yz3Wq-LA5nLxbOHeNgmcR-6KwF3U0g5MNkwFYpfewxpCRGp9dR-bPfZ3HBM7MzQk5_9p85nk6F5mOvosE/s1600/pi@raspberrypi:+~_045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9zJOYodGcSHhF_F9lA7Sskx8SvLIJItKAgJqEFB4CNhyTBSx2lBN_W_q2M8yz3Wq-LA5nLxbOHeNgmcR-6KwF3U0g5MNkwFYpfewxpCRGp9dR-bPfZ3HBM7MzQk5_9p85nk6F5mOvosE/s1600/pi@raspberrypi:+~_045.png" height="400" width="373" /></a></div>
<div>
<br /></div>
<div>
Pretty simple. I'm not sure if I'm startled enough by it -- but it is a good start.</div>
<div>
<br /></div>
<div>
<br /></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-64054333945196381182015-03-15T14:06:00.001-07:002017-03-26T12:22:15.275-07:00Programming an ATmega (168, 328) using your Arduino as a programmerYou might be working on a project with your Arduino, and you've decided that it is time to move your project OFF of the Arduino board. There are a lot of reasons for doing so:<br />
<ul>
<li>Make your project smaller</li>
<li>Eliminate the stuff you don't need (voltage regulator, USB to serial converter, etc)</li>
<li>Consume less power by not having the extra stuff</li>
<li>Reduce cost</li>
</ul>
<div>
Before continuing you should know these definitions:</div>
<div>
<br /></div>
<div>
<b>ATmega168, ATmega328:</b> An 8-bit microcontroller made by Atmel. This is a "chip" with some pins on it, it fits in the palm of your hand. </div>
<div>
<b>Arduino:</b> A circuit board for hobbyists, usually containing an ATmega168/328. It has an onboard voltage regulator, USB port, header pins, LEDs, and protection circuitry. </div>
<div>
<br /></div>
<div>
When I mention the "Arduino" I want to be clear that I am talking about the development board, not the microcontroller that is on it. I will try to use "ATmegaxxx" when I am talking about the microcontroller IC.</div>
<h3 style="text-align: left;">
<span style="font-family: inherit;">Turn your Arduino into an In-System Programmer (ISP)</span></h3>
<div>
I had an ATmega168 in a drawer and I wanted to use it on a breadboard without the Arduino. I needed to know also how to program the device without a programmer.</div>
<div>
<br /></div>
<div>
Well, included with the Arduino IDE is a sketch under examples called ArduinoISP:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDK3qjHe4whGOK_24RXKCfkQlgx97ThzOPpCer4uybpmKw728zNGFHfFue2-FVGiwUP9EL8OJ-T2R5HZiX62CibiG5ZuCB5mI2zqxz_1_OWJx6qRmDI9utPKk0HjJxGfsJqqCKOwsWC4/s1600/Workspace+2_032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDK3qjHe4whGOK_24RXKCfkQlgx97ThzOPpCer4uybpmKw728zNGFHfFue2-FVGiwUP9EL8OJ-T2R5HZiX62CibiG5ZuCB5mI2zqxz_1_OWJx6qRmDI9utPKk0HjJxGfsJqqCKOwsWC4/s1600/Workspace+2_032.png" width="400" /></a></div>
<div>
</div>
<br />
<br />
Stop and just FORGET ABOUT the breadboard for a second! Some other tutorials and having you change the board type and so forth right now. NO. <br />
<br />
Upload the ArduinoISP sketch to your Arduino board as you would any other sketch.<br />
<br />
Did it upload successfully? If so, your Arduino is now a programmer.<br />
<br />
Thank you to Randall Bohn for writing the ArduinoISP sketch, this is really pretty amazing. <br />
<br />
Some more info can be learned from the comments in the first few lines of the sketch:<br />
<pre class="snippet">// ArduinoISP version 04m3
// Copyright (c) 2008-2011 Randall Bohn
// If you require a license, see
// http://www.opensource.org/licenses/bsd-license.php
//
// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name: not-mega: mega(1280 and 2560)
// slave reset: 10: 53
// MOSI: 11: 51
// MISO: 12: 50
// SCK: 13: 52
//
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat - shows the programmer is running
// 8: Error - Lights up if something goes wrong (use red if that makes sense)
// 7: Programming - In communication with the slave
</pre>
<h3>
Getting ready to burn the bootloader</h3>
<br />
At this point we are ready to flash an ATmega168 or 328 IC, using our Arduino board as a programmer. <br />
<br />
Wait, why do we need to burn a bootloader anyway?<br />
<br />
The bootloader is just a small piece of code on the micro that sets up the execution environment in which your programs (sketches) will run. Most of the Arduino boards come with the ATmega chip already on it, and it thus already has a bootloader that, among other things, tells it to expect a 16 MHz oscillator. So if the chip you want to use on a breadboard has already been in an Arduino, it almost certainly is configured this way. This is important to know going forward.<br />
<br />
The Arduino webpage gives some more <a href="http://arduino.cc/en/Tutorial/ArduinoISP">details about connections</a>, one method includes a crystal (external oscillator) and some capacitors (on the right below), while the other doesn't (on the left below).<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLR3-HNIaWYD6OXS1wSwdMMsCUEUoWK0PIu2Qt2vn-P_OMmjQHHMlajUEx8r1D2kyUt7c5rO9o3NTKt7KioJaqv4SLjq6S9q8SZQUwrTBwgsrWiPA8EwyvPnxmiRkml2Q7g0xPvJJcV1E/s1600/Selection_034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLR3-HNIaWYD6OXS1wSwdMMsCUEUoWK0PIu2Qt2vn-P_OMmjQHHMlajUEx8r1D2kyUt7c5rO9o3NTKt7KioJaqv4SLjq6S9q8SZQUwrTBwgsrWiPA8EwyvPnxmiRkml2Q7g0xPvJJcV1E/s1600/Selection_034.png" width="400" /></a></div>
<br />
Let's stop and take a breather before we panic about not having a 16 MHz crystal and some tiny caps in our junk drawers.<br />
<br />
IF the chip you want to use ALREADY HAS a bootloader on it, chances are quite good that it <u>requires</u> the external oscillator, as I mentioned a few paragraphs earlier. You won't know until you actually try to burn the bootloader and get a message like this in the Arduino IDE:<br />
<pre class="snippet">avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
</pre>
<br />
Optionally, you can confirm what the Arduino IDE is telling you with avrdude from the Linux command line:<br />
<pre class="snippet">wskellenger@marquette ~ $ avrdude -p m168 -P /dev/ttyUSB0 -c avrisp -b 19200
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x000000 (retrying)
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x000000 (retrying)
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
</pre>
<br />
In this case you *must* use the design on the right, OR, follow this great tip from from the comments <a href="http://www.instructables.com/id/Atmega-Standalone-Running-without-crystal-oscillat/">here</a>:<br />
<br />
<div class="comment-info" style="background-color: white; color: #999999; font-family: Arial, Helvetica, sans-serif; font-size: 14px; margin-bottom: 10px; margin-left: 55px;">
<span class="comment-author"><a class="author-link " href="http://www.instructables.com/member/matias.colorfrequency/" style="color: #ff5200; cursor: pointer; font-weight: bold; text-decoration: none;">matias.colorfrequency</a><i class="bg-icon next" style="background-image: url(https://www.instructables.com/static/img/icon-sprite.3.png); background-position: -8px -749px; background-repeat: no-repeat; display: inline-block; height: 14px; margin-left: 5px; overflow: hidden; position: relative; text-indent: -999em; vertical-align: text-top; width: 7px;"></i> <a class="in-reply-to" href="http://www.instructables.com/id/Atmega-Standalone-Running-without-crystal-oscillat/#C7WNYH8I327GIXQ" style="color: #ff5200; cursor: pointer; text-decoration: none;">zwebster</a></span></div>
<div class="txt comment-txt" style="background-color: white; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 16px; line-height: 1.3em; margin-left: 55px; overflow: hidden; padding: 0px 5px 5px 0px;">
<div style="margin-bottom: 10px; margin-top: 3px;">
If you don't have any crystal, this is a workaround you can use:</div>
<div style="margin-bottom: 10px; margin-top: 3px;">
1- Before to start the burn the bootloader, connect a jumper wire between the physical pin 9 (XTAL1) of your ATMEGA in the Arduino UNO board and the same pin 9 on the ATMEGA in the breadboard. This will feed temporarily to your standalone chip with a clock signal.<br />
<br />
2- Burn the bootloader from the Arduino IDE menu.<br />
<br />
3- Disconect the temporary jumper wire, and thats it. Now you can upload the sketches as usual with your Arduino UNO as an ISP.</div>
</div>
<br />
It also helps to have a sticker on your ATmega chip so you know which pins are where. I used one <a href="http://todbot.com/blog/2009/05/23/arduino-chip-sticker-label/">from here</a> and some double-sided tape to affix it to the top of my ATmega168. Note the little half-circle at one end needs to be aligned over the similar shape on the chip itself. This will help greatly when you are breadboarding with this guy.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtQCXAg9xUVDf6CVJ4W9Z1wKqeSCguawHg7Yq9AqH6zBZYWaMbY0BSz2YWO-Q91S3e6oZGrVPO3CMsnUK8lbjIjF0AB0LUg8bbAGPQtZ9cF2mHKjmBu35UWYDWMCZSFI9GjCm2rdMiB_s/s1600/Selection_035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="89" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtQCXAg9xUVDf6CVJ4W9Z1wKqeSCguawHg7Yq9AqH6zBZYWaMbY0BSz2YWO-Q91S3e6oZGrVPO3CMsnUK8lbjIjF0AB0LUg8bbAGPQtZ9cF2mHKjmBu35UWYDWMCZSFI9GjCm2rdMiB_s/s1600/Selection_035.png" width="320" /></a></div>
With the connections made between your breadboard and the Arduino, you can probe the XTAL1 or XTAL2 pins with a scope (marked XT1 and XT2 on the sticker above), and you should see a nice 16 MHz sine wave already. If you don't have a scope, assume that signal is there, because if your Arduino is working, it is.<br />
<br />
(Here is what avrdude says when I have XTAL1 jumped as described...)<br />
<pre class="snippet">wskellenger@marquette ~ $ avrdude -p m168 -P /dev/ttyUSB0 -c avrisp -b 19200
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.07s
avrdude: Device signature = 0x1e9406
avrdude: safemode: Fuses OK (H:00, E:DD, L:FF)
avrdude done. Thank you.
</pre>
<h3>
Burning the bootloader</h3>
<ul>
<li>Okay, we've got the ArduinoISP sketch uploaded onto our Arduino board.</li>
<li>We have the appropriate connects made between the Arduino and our breadboard.</li>
<li>Our ATmega chip is installed on the breadboard.</li>
<li>The Arduino is plugged into our PC and we are ready to burn the bootloader.</li>
</ul>
<br />
Select what type of chip you are going to burn first (If you don't see these options, scroll to the bottom of this post).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwkH20MG189F7o5K5Bt7N07D4uL9M65_jQTnldMn370KYFIt3B1psE-Lxn-vU3djyFsIk57JBZTEuvUmoVDj0F82xvZl0IaPlWs4eWFLMQ_PV008nO8bHwJmkMqqfwzTZ3zfgzQQof10w/s1600/Workspace+2_036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwkH20MG189F7o5K5Bt7N07D4uL9M65_jQTnldMn370KYFIt3B1psE-Lxn-vU3djyFsIk57JBZTEuvUmoVDj0F82xvZl0IaPlWs4eWFLMQ_PV008nO8bHwJmkMqqfwzTZ3zfgzQQof10w/s1600/Workspace+2_036.png" width="320" /></a></div>
<br />
<br />
Make sure you've selected "Arduino as ISP":<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq3ZZRkSg1t9TggvT0NpSJW4KqPasOJrb_XCCGqCQeF3aacEQlCE8tII1zjabKluaArBKaU0nxi2IVI_RIyfDN0LXavEJlnCA6mDsd3wLL9ooKj2UG2H0Cu9tVwhKKVGSuqfiDC3PTJt0/s1600/Workspace+2_038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq3ZZRkSg1t9TggvT0NpSJW4KqPasOJrb_XCCGqCQeF3aacEQlCE8tII1zjabKluaArBKaU0nxi2IVI_RIyfDN0LXavEJlnCA6mDsd3wLL9ooKj2UG2H0Cu9tVwhKKVGSuqfiDC3PTJt0/s1600/Workspace+2_038.png" width="320" /></a></div>
<br />
<br />
Now select "Burn Bootloader":<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiih4SVNBPD9UEaiMwi0WLG7ncmoCw782Op4MmVAADWPIGKFWnzhE36mJaJv4zF2HVTXIRWrP7pcC0qkH4w7Up7gXOlGdYal62HZ5n3LtVIGISDYVvefg2G9yvQMM9TKyVO0vfXj9LEuTQ/s1600/Workspace+2_037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiih4SVNBPD9UEaiMwi0WLG7ncmoCw782Op4MmVAADWPIGKFWnzhE36mJaJv4zF2HVTXIRWrP7pcC0qkH4w7Up7gXOlGdYal62HZ5n3LtVIGISDYVvefg2G9yvQMM9TKyVO0vfXj9LEuTQ/s1600/Workspace+2_037.png" width="320" /></a></div>
<br />
<br />
Hopefully you see this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe5_N45mJTgugC-7P_v4XVkN_Xs77wBnI2bq4D8cnFodC4uz_mhrRfYYmxKJF82QxjIuQSHn51Hye5GsXdiBoT4ILImtUFh60LzHt8SQeoXyRc3VGOHyBqo8SE98_5UuQqSl09mjx451s/s1600/Selection_039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe5_N45mJTgugC-7P_v4XVkN_Xs77wBnI2bq4D8cnFodC4uz_mhrRfYYmxKJF82QxjIuQSHn51Hye5GsXdiBoT4ILImtUFh60LzHt8SQeoXyRc3VGOHyBqo8SE98_5UuQqSl09mjx451s/s1600/Selection_039.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
If not:<br />
<br />
<ul>
<li>you haven't made the correct connections </li>
<li>possibly you need a 10 uF cap across reset and ground (Arduino Uno)</li>
<li>there is a change you need to make to the ArduinoISP sketch (Arduino v1.0)</li>
<li>you don't have the external oscillator, so you need to add it or jump from XTAL1 on the Arduino to XTAL1 on the target ATmega IC on the breadboard, as described above.</li>
</ul>
<div>
See these notes <a href="http://arduino.cc/en/Tutorial/ArduinoISP">from here</a> under "Instructions":</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEixkmIT23h4JbrLdzjUE_p47tHl3A4OslNkjKCyHhSTNXhqJJFRBYmHovvOVJytKM9QSEWQguXqShcUMAgzs8rkHgWX7zi7zHZU8RRUxLzvEy82UgKJNhScpZlDw9Y3S7-PU4CsNo-Nw/s1600/Selection_040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEixkmIT23h4JbrLdzjUE_p47tHl3A4OslNkjKCyHhSTNXhqJJFRBYmHovvOVJytKM9QSEWQguXqShcUMAgzs8rkHgWX7zi7zHZU8RRUxLzvEy82UgKJNhScpZlDw9Y3S7-PU4CsNo-Nw/s1600/Selection_040.png" width="400" /></a></div>
<div>
<br /></div>
<br />
<h3>
Now what?</h3>
Okay, now you have an ATMega168 or 328 on a breadboard. You've cut the apron strings. Now in order to flash it, you can still use your Arduino board, but you need to remove the ATmega IC from the Arduino board in order to use it as a programmer to flash sketches onto the breadboarded microcontroller.<br />
<br />
<a href="http://arduino.cc/en/Tutorial/ArduinoToBreadboard">Flashing sketches</a> onto the breadboarded ATmega IC:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSZRAFsMpMPaPvQlVBl_53Xc-qM9qYpldczqUCe-4TQvARScGg7vk4EfXE1RvlFho5UKJuXFXFIeJWjJyDjN5GEHQAvkMdO8nHjWL_zJSCR1kQFzJA7dkZ-HR-T3k0xtvlc901tPko7sc/s1600/Selection_041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSZRAFsMpMPaPvQlVBl_53Xc-qM9qYpldczqUCe-4TQvARScGg7vk4EfXE1RvlFho5UKJuXFXFIeJWjJyDjN5GEHQAvkMdO8nHjWL_zJSCR1kQFzJA7dkZ-HR-T3k0xtvlc901tPko7sc/s1600/Selection_041.png" width="251" /></a></div>
<div class="txt comment-txt" style="background-color: white; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 16px; line-height: 1.3em; margin-left: 55px; overflow: hidden; padding: 0px 5px 5px 0px;">
<div style="margin-bottom: 10px; margin-top: 3px;">
<br /></div>
</div>
<h3>
<span style="background-color: white; color: #333333; font-size: 16px; line-height: 20.7999992370605px;"><span style="font-family: inherit;"><u>Adding the "ATmegaxxx on Breadboard" options to the Arduino IDE:</u></span></span></h3>
It looks like there are two ways to do this. <br />
<br />
<u>Method 1</u>:<br />
In your sketchbook folder, add a folder called "hardware" and unzip <a href="http://arduino.cc/en/uploads/Tutorial/Breadboard1-5-x.zip">this file</a> (Arduino IDE 1.5) or <a href="http://arduino.cc/en/uploads/Tutorial/Breadboard1-0-x.zip">this file</a> (Arduino IDE 1.0) into it. Reload the IDE, and open the sketch you were working on, and the additional option will be there. This is discussed under "Minimal Circuit" <a href="http://arduino.cc/en/Tutorial/ArduinoToBreadboard">here</a>.<br />
<br />
<u>Method 2:</u><br />
Modify boards.txt in /usr/share/arduino/hardware/arduino (Linux location):<br />
<br />
Here is the text I've added to the end of boards.txt:<br />
<pre class="snippet">
##############################################################
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=standard
##############################################################
atmega168bb.name=ATmega168 on a breadboard (8 MHz internal clock)
atmega168bb.upload.protocol=stk500
atmega168bb.upload.maximum_size=14336
atmega168bb.upload.speed=19200
atmega168bb.bootloader.low_fuses=0xE2
atmega168bb.bootloader.high_fuses=0xDD
atmega168bb.bootloader.extended_fuses=0x00
atmega168bb.bootloader.path=arduino:atmega
atmega168bb.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
atmega168bb.bootloader.unlock_bits=0x3F
atmega168bb.bootloader.lock_bits=0x0F
atmega168bb.build.mcu=atmega168
atmega168bb.build.f_cpu=8000000L
atmega168bb.build.core=arduino:arduino
atmega168bb.build.variant=standard
</pre>
<br />William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-82811396335592934142015-02-21T08:30:00.002-08:002015-04-13T17:45:42.518-07:00Dealing with Android MTP devices in LinuxA couple of frustrating errors you might see when trying to exchange files with your Android phone:<br />
<div>
<br /></div>
<div>
"-1: Unspecified error."</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU88FD_wi5jmaxSHTysKwJ98TL1YfeOrFU8cwSJieoc5NaKnuOtfsAQ0-LQBVr-lJ4fNfuwF7ej0qJS989QMHQ6Xsa2l2oyzvWLSCOU4SouWPvrExdatlLk_RtdFMJFL9kRwyJ8903qhU/s1600/Untitled+window_018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU88FD_wi5jmaxSHTysKwJ98TL1YfeOrFU8cwSJieoc5NaKnuOtfsAQ0-LQBVr-lJ4fNfuwF7ej0qJS989QMHQ6Xsa2l2oyzvWLSCOU4SouWPvrExdatlLk_RtdFMJFL9kRwyJ8903qhU/s1600/Untitled+window_018.png" height="125" width="320" /></a></div>
<div>
<br /></div>
<div>
My personal favorite when copying a file to or from the device, the "-6: Not Supported."</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqKFpHvclwDzwWuQnzcb-gtkIo-F5l1aiqMffQq8myaEPgsy5SXgdmkB-xCblDoBnADJEVVdxh3uIn8ol6zQpjpTUNclRRUiK58sfCnCbOMCTPMi5XPIPKgUw6Pk40a829f3bvN1rVGZE/s1600/Untitled+window_019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqKFpHvclwDzwWuQnzcb-gtkIo-F5l1aiqMffQq8myaEPgsy5SXgdmkB-xCblDoBnADJEVVdxh3uIn8ol6zQpjpTUNclRRUiK58sfCnCbOMCTPMi5XPIPKgUw6Pk40a829f3bvN1rVGZE/s1600/Untitled+window_019.png" height="154" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<strike>Try using <a href="https://github.com/JasonFerrara/jmtpfs" target="_blank">jmtpfs</a>. From Ubuntu/Mint, it is a simple install with "sudo apt-get install jmtpfs".</strike></div>
<div>
<strike><br /></strike></div>
<strike>It isn't perfect, but better than the "native" MTP transfer provided by libmtp, which is clearly broken in Linux and has been for some time. There is no other explanation, as there are several other MTP solutions which according to the Arch Wiki, "...<a href="https://wiki.archlinux.org/index.php/MTP#Functionality" target="_blank">aim at better functionality and performance over libmtp.</a>"</strike><br />
<strike><br /></strike>
<strike>Using jmtpfs is pretty simple, just create a directory to use as a mount point, then use jmtpfs to mount your device at that directory. You can then use the command line or a file manager to navigate to that folder and copy files to/from it. </strike><br />
<strike><br /></strike>
<strike>Other usage patterns can be found in the jmtpfs <a href="https://github.com/JasonFerrara/jmtpfs/blob/master/README" target="_blank">readme</a>.</strike><br />
<strike><br /></strike>
<strike>I still got an error while trying to overwrite an existing file, so as I said this solution isn't perfect, but it works better than libmtp with my Moto G. Here is an example of mounting the device to a directory called "mnt":
</strike><br />
<br />
<span style="font-size: xx-small;">Removed demonstration gist, but you can view it <a href="https://gist.github.com/skelliam/6eb3a2fd31feea05a119">here</a> if you are interested.</span><br />
<br />
<span style="background-color: yellow;">Update 28-Feb-2015:</span><br />
After more use, I found that jmtpfs is useful for one or two files, but if you need to transfer, say, all of your phone data to your computer as a backup, it was not reliable. I found the <a href="https://github.com/hanwen/go-mtpfs">go-mtpfs</a> solution to work very well. Initially I was not very excited about this solution because it required installing another language (Google's "Go") and some usb libraries, BUT -- the author has kindly provided (or linked to) <a href="http://hanwen.home.xs4all.nl/public/software/go-mtpfs/">compiled binaries</a>, which eliminate these worries!<br />
<br />
All you need to do is download the binary for your environment. In my case I chose <a href="http://hanwen.home.xs4all.nl/public/software/go-mtpfs/go-mtpfs.x86_64">go-mtpfs.x86_64</a>. <br />
<br />
Make the binary executable and test it to see if it runs:<br />
<br />
<div class="gistLoad" data-id="cea5182e733b38fd8950" id="gist-cea5182e733b38fd8950">
</div>
<br />
Then plug in your phone and mount it:<br />
<br />
<div class="gistLoad" data-id="33e93a657031456ece62" id="gist-33e93a657031456ece62">
</div>
<br />
<br />
That's it! You should see your phone mounted at ~/phone. Now you can use Nautilus or whatever to copy and move files. The author warns that renaming between directories isn't implemented, and you may not see updates to the filesystem done by the phone. These concerns are minor for what I'm after.<br />
<br />
To unmount the phone, do:<br />
<br />
<div class="gistLoad" data-id="8c58efeb7ed01c74dd10" id="gist-8c58efeb7ed01c74dd10">
</div>
<br />
Works very reliably. I just transferred 2GB of data without an issue.<br />
<br />
<br />William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0tag:blogger.com,1999:blog-7299582172907567087.post-60192392865335719062015-02-07T10:31:00.001-08:002015-02-28T17:05:06.437-08:00Google Play Music App Unresponsive or Slow<div dir="ltr">
I reverted my Moto G (2013) to the stock ROM and rooted it, but since I did this, I have been having frustrating problems with Play Music that make it unusable:</div>
<div dir="ltr">
</div>
<ul>
<li>Select a song and nothing happens </li>
<li>Press play and nothing happens </li>
<li>After several minutes a song may play, but pressing pause won't stop it</li>
</ul>
<br />
<div dir="ltr">
Killing the running Music app will obviously get a playing song to stop, but the base problem is still there -- the entire app is basically useless.</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
I tried wiping data for the app, wiping the app's cache, rebooting the phone... nothing helped, and Play Music remained a slug. </div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<b>SOLUTION:</b><br />
Today I completely uninstalled the app using Titanium Backup. Since Google Play Music is a system app, you will need root privileges to do this. </div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
After completely uninstalling the system version of the app from the phone, I re-installed it through the Play Store, and so far it behaves as I expect it to. Something must be incompatible between the factory version and the "update", however that mechanism (system app vs. "updated" version from market) works in Android. <br />
<br />
<span style="background-color: yellow;">Update 28-Feb-2015:</span><br />
<span style="background-color: white;">This started happening again. I removed Play Music and re-installed it, and it started behaving again. It might be due to having a lot of cached music on the phone, I don't know, but it is annoying the hell out of me and I am going to install CyanogenMod again tonight to see if it is a problem with the stock ROM.</span></div>
William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-27388915983522428272014-12-28T11:20:00.000-08:002014-12-29T05:37:24.124-08:00DLNA Streaming from Linux --> 1st Gen Sony GoogleTV<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZbINvsgU7CPXpeSFcJJCx-qdC-32SX4QFW_VeU95rEbb-4Tldf2oHe5pu6OY-yLsJKA448vn498aKoUtisoAd8Rz_A_BwaRzOJ2s4iMPFGKS28hjL-rsg31W5gTMwJffKUQA_VhrUvM/s1600/dlna-578-80.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigCWJ6NTN2Y_bYhDmsqpYdpUWUXTYlbJ2DQnEGJ2aWG9J6TGdK-yEoK4yTLR_HNmPR9YHBOuMOt93akm1g-dZATxFeinlJiu5CyDs8Hn8Zz5irGNqqaAg-y6SrKkBi01S7nnJmGXtuAGw/s1600/2000px-Tux.svg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigCWJ6NTN2Y_bYhDmsqpYdpUWUXTYlbJ2DQnEGJ2aWG9J6TGdK-yEoK4yTLR_HNmPR9YHBOuMOt93akm1g-dZATxFeinlJiu5CyDs8Hn8Zz5irGNqqaAg-y6SrKkBi01S7nnJmGXtuAGw/s1600/2000px-Tux.svg.png" height="200" width="172" /></a></div>
While cleaning up my wife's tablet I found a few hundred photos/videos from 2010-2011 time frame. I copied them all to offline storage. My kids were having a ball watching younger versions of themselves over my shoulder, so I thought, why can't I just stream this stuff?<br />
<br />
The Sony GoogleTV already supports streaming from other DLNA devices. This generally includes a lot of devices, like Windows laptops, that appear on the network and make videos and pictures available to DLNA clients.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZbINvsgU7CPXpeSFcJJCx-qdC-32SX4QFW_VeU95rEbb-4Tldf2oHe5pu6OY-yLsJKA448vn498aKoUtisoAd8Rz_A_BwaRzOJ2s4iMPFGKS28hjL-rsg31W5gTMwJffKUQA_VhrUvM/s1600/dlna-578-80.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZbINvsgU7CPXpeSFcJJCx-qdC-32SX4QFW_VeU95rEbb-4Tldf2oHe5pu6OY-yLsJKA448vn498aKoUtisoAd8Rz_A_BwaRzOJ2s4iMPFGKS28hjL-rsg31W5gTMwJffKUQA_VhrUvM/s1600/dlna-578-80.jpg" height="111" width="200" /></a>I tried a few different approaches in Linux before I found one that just worked right out of the box.<br />
<br />
First, there's <a href="http://sourceforge.net/projects/minidlna/" target="_blank">MiniDLNA</a> (now called ReadyMedia). This project is "sort of" supported by Ubuntu with a separate repo. However the objects in that old repo seem out of date, and the only way to get this up and running with the latest and greatest version is by building it from source. I didn't want to mess with that this morning, so I moved on without even giving this one a go.<br />
<br />
Next, I found <a href="http://mediatomb.cc/" target="_blank">MediaTomb</a>. While this was relatively easy to set up under Ubuntu, I couldn't get my Sony GTV to recognize it. My phone w/ a DLNA client, however, *would* recognize it, but it refused to play any of the content. I messed w/ the config file and uncommented some lines for the PS3, Google'd around a bit, didn't find any solution. Uninstalled, moving on.<br />
<br />
I looked around for <a href="https://plex.tv/" target="_blank">Plex</a>, which I know is popular, but it is commerical and I didn't really like the license terms, so I moved on.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinzov1hlzCALQoQ67jd_pVynfulTH_Hto5LxI7DpKuTd8IcrP80h56jLN3lj09khFIQdpK8roQiZukRsqsuhVRrD4LDFZhvynVLCNoeQnGberZie6j5K7zIM0IsWZ-ElrxTR-WXeR7tuQ/s1600/Rygel_logo_v1.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinzov1hlzCALQoQ67jd_pVynfulTH_Hto5LxI7DpKuTd8IcrP80h56jLN3lj09khFIQdpK8roQiZukRsqsuhVRrD4LDFZhvynVLCNoeQnGberZie6j5K7zIM0IsWZ-ElrxTR-WXeR7tuQ/s1600/Rygel_logo_v1.png" height="91" width="320" /></a></div>
I finally found <a href="https://wiki.gnome.org/Projects/Rygel" target="_blank">Rygel</a>, which installed easily under Mint/Ubuntu and in literally minutes I had it running. I also installed the companion app, <a href="https://launchpad.net/ubuntu/precise/+package/rygel-preferences" target="_blank">rygel-preferences</a>, which made it super easy to point to specific folders that had the content I wanted to publish. <br />
<br />
I did have to run "rygel &" from the commandline to start the server, but after that the Sony GTV discovered it immediately and the kids could look at all 6GB of short movies and photos.<br />
<br />
<br />
<br />
<!-- Blogger automated replacement: "https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F1.bp.blogspot.com%2F-3xG-RrMIty8%2FVKBXm0asJTI%2FAAAAAAAAW7o%2Fne30ROfrno0%2Fs1600%2Fdlna-578-80.jpg&container=blogger&gadget=a&rewriteMime=image%2F*" with "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeZbINvsgU7CPXpeSFcJJCx-qdC-32SX4QFW_VeU95rEbb-4Tldf2oHe5pu6OY-yLsJKA448vn498aKoUtisoAd8Rz_A_BwaRzOJ2s4iMPFGKS28hjL-rsg31W5gTMwJffKUQA_VhrUvM/s1600/dlna-578-80.jpg" -->William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com1tag:blogger.com,1999:blog-7299582172907567087.post-59087157294019621922014-09-21T19:41:00.002-07:002014-09-21T19:43:28.772-07:00FreeMind XML Parse Exception When Opening an Old MapI think this bug has been fixed in a more recent version of FreeMind, but you may go through this with version 1.0.1 for Linux, possibly for Windows also:<br />
<br />
1. Try to open a map<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihe2MGIQ1oBPjOyV_gKSTv4xxnspp6TZ4HfSvanu83QjfehFIE9y8v2XBtfkWK3-YaBWrL5-lqNgtrMi0Qhh3wsIffpe2uLufO03mIoCAB_621E2d7_j5Mcvza64Uap9SLbWxC1FDmVoc/s1600/Workspace+4_008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihe2MGIQ1oBPjOyV_gKSTv4xxnspp6TZ4HfSvanu83QjfehFIE9y8v2XBtfkWK3-YaBWrL5-lqNgtrMi0Qhh3wsIffpe2uLufO03mIoCAB_621E2d7_j5Mcvza64Uap9SLbWxC1FDmVoc/s1600/Workspace+4_008.png" height="179" width="320" /></a></div>
<br />
2. Get this error <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitdX_0M48mSqVEb5JI44psdtJwTimEGnz98jVwxmF0PXC1UXSvTGNYBfWpUoREbcm__kwFY6HE_peX1kfnHh8Okf_7S1Q9qrqKbKlouDsUevT4hhaXyubDhtpOeiBqkXp-xA2sfy3Y1II/s1600/Workspace+4_009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitdX_0M48mSqVEb5JI44psdtJwTimEGnz98jVwxmF0PXC1UXSvTGNYBfWpUoREbcm__kwFY6HE_peX1kfnHh8Okf_7S1Q9qrqKbKlouDsUevT4hhaXyubDhtpOeiBqkXp-xA2sfy3Y1II/s1600/Workspace+4_009.png" height="179" width="320" /></a></div>
<br />
This is clearly a bug, and I haven't seen it with newer versions of FreeMind on Windows. A workaround is to fix the first line of the .mm file in question: <br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;"><br /></span></span>
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;"><span style="background-color: yellow;"><map version="0.9.0"></span><br /><!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net --><br /><node CREATED="1386726098959" ID="ID_368233367" MODIFIED="1386726102812" TEXT="git"></span></span><br />
<br />
To resolve the issue, replace "0.9.0" with "1.0.1" using a text editor, save the file, and you should be able to open the file again.<br />
<br />
If you want to update a large number of maps try the following (Linux command line):<br />
<br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">sed -i -e 's/0\.9\.0/1.0.1/' *.mm</span></span><br />
<br />
The above command will look for "0.9.0" and replace it with "1.0.1" in all files named *.mm, and the -i option means it will update the file in place.<br />
<br />
(You can also use sed under Windows, see the <a href="http://unxutils.sourceforge.net/" target="_blank">unixutils package</a> at Sourceforge) William Skellengerhttp://www.blogger.com/profile/03503590017618208201noreply@blogger.com0