tag:blogger.com,1999:blog-61792133740726166452024-03-17T09:49:24.712-07:00Jason Robitaillea personal scratchpadpolarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.comBlogger68125tag:blogger.com,1999:blog-6179213374072616645.post-85664523113014853212023-06-14T07:18:00.001-07:002023-06-14T07:18:54.154-07:00batch converting audio codecs only in a folder of videos using ffmpeg<p> So you have a folder of videos with a problematic audio format? In my case i have H264 videos using Apples Audio Codec AAC that will not be compatible to play on any non apple devices like Roku etc. This is annoying when you have many flavours of devices in your house.</p><p>The basic command looks like this:</p><p>ffmpeg -i "video.mkv" -c:v copy -c:a ac3 "video-ac3.mkv"</p><p>but we need to process many files in a folder so we'll create a loop using the following command:</p><p>for i in *.mkv; do ffmpeg -i "$i" -c:v copy -c:a ac3 "${i%.*}-ac3.mkv"; done</p><p>for i in *.mkv; do: This part initiates a loop that iterates over all files with the ".mkv" extension in the current directory. The loop variable i represents each file in the loop.</p><p>ffmpeg -i "$i" -c:v copy -c:a ac3 "${i%.*}-ac3.mkv";: Within the loop, this command is executed for each MKV file.</p><p>-i "$i": This specifies the input file for each iteration of the loop. The $i variable represents the current MKV file.</p><p>-c:v copy: This option ensures that the video stream is copied without re-encoding, maintaining the original video quality.</p><p>-c:a ac3: This option specifies the audio codec to use for the output file. In this case, ac3 is specified, indicating that the audio stream will be encoded using the AC3 codec.</p><p>"${i%.*}-ac3.mkv": This specifies the output file path. The ${i%.*} expression extracts the file name without the extension, and -ac3.mkv is appended to create the output file name. For example, if the input file is "video.mkv", the output file will be "video-ac3.mkv".</p><p>The command essentially processes each MKV file in the current directory, copies the video stream, and encodes the audio stream using the AC3 codec. The resulting output files will have the same video streams as the input files, but with the audio streams encoded in AC3 format and appended with "-ac3" in their names.</p>polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-71653649830153230592023-02-28T09:18:00.002-08:002023-02-28T09:18:50.614-08:00<p><span style="color: white;"> A Simple MOTD script for linux server</span></p><p><span face=""Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif" style="color: white; font-size: 13px;">In order to produce a “System Status” Message Of The Day (MOTD) file in Debian you should write this script (as systemstats.sh) in /usr/local/bin</span></p><p style="border: 0px; font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="border: 0px; color: white; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"><br />#!/bin/bash<br />#<br /># Server Status Script<br /># Version 0.1.3 m<br /># Updated: July 26th 2011 m</span></p><p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="color: white;">CPUTIME=$(ps -eo pcpu | awk ‘NR>1’ | awk ‘{tot=tot+$1} END {print tot}’)<br />CPUCORES=$(cat /proc/cpuinfo | grep -c processor)<br />UP=$(echo `uptime` | awk ‘{ print $3 ” ” $4 }’)<br />echo ”<br />****************************************************************************<br />System Status<br />Updated: `date`</span></p><p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="color: white;">– Server Name = `hostname`<br />– OS Version = `grep openSUSE /etc/SuSE-release`<br />– Load Averages = `cat /proc/loadavg | awk {‘print $1″ “$2” “$3’}`<br />– System Uptime = `uptime | awk {‘print $3” “$4’}`<br />– Platform Data = `uname -orpi| awk {‘print $1” “$4’}`<br />– CPU Usage (average) = `echo $CPUTIME / $CPUCORES | bc`%<br />– Memory free (real) = `free -m | head -n 2 | tail -n 1 | awk {‘print$4’}` Mb<br />– Memory free (cache) = `free -m | head -n 3 | tail -n 1 | awk {‘print$3’}` Mb<br />– Swap in use = `free -m | tail -n 1 | awk {‘print $3’}` Mb<br />– Disk Space Used = `df -h / | awk ‘{ a = $4 } END { print a }’`<br />****************************************************************************<br />” > /etc/motd</span></p><p style="border: 0px; font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="border: 0px; color: white; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"># End of Script<br /></span></p><p style="border: 0px; font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="color: white;">Remember to make it executable (as root or sudo)<br /><span style="border: 0px; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"><br />chmod +x /usr/local/bin/systemstats.sh<br /></span></span></p><p style="border: 0px; font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="color: white;">To make the script update the information automatically, you should edit /etc/crontab as root, and add this two lines at the end of the file<br /><span style="border: 0px; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"><br /># Status Script<br />*/5 * * * * root /usr/local/bin/systemstats.sh<br /></span></span></p><p style="border: 0px; font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="color: white;">After you update the /etc/motd file (by running as root /usr/local/bin/systemstats.sh), it should look like something like this:<br /><span style="border: 0px; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"><br />david@virtual:~> cat /etc/motd</span></span></p><p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="color: white;">****************************************************************************<br />System Status<br />Updated: Thu Oct 20 01:55:01 CEST 2011</span></p><p><span style="color: white;"><span face=""Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif" style="border: 0px; caret-color: rgb(36, 38, 38); font-size: 13px; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"></span><span face=""Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif" style="border: 0px; caret-color: rgb(36, 38, 38); font-size: 13px; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"></span></span></p><p style="border: 0px; font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", "Microsoft YaHei", sans-serif; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px;"><span style="border: 0px; font-style: italic; margin: 0px; outline: 0px; padding: 0px;"><span style="color: white;">– Server Name = virtual<br />– OS Version = openSUSE 11.4 (x86_64)<br />– Load Averages = 0.00 0.01 0.05<br />– System Uptime = 2:22, 1<br />– Platform Data = 2.6.37.6-0.7-desktop GNU/Linux<br />– CPU Usage (average) = 0%<br />– Memory free (real) = 3667 Mb<br />– Memory free (cache) = 138 Mb<br />– Swap in use = 0 Mb<br />– Disk Space Used = 9.5G</span><br /><span style="color: #4d4d4d;">****************************************************************************</span></span></p>polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-28675093837083839782020-05-18T06:29:00.001-07:002020-05-18T06:31:27.037-07:00[Tutorial] "This App Is Incompatible With This iPhone" on iOS 6 and below: The problem + workaround<div class="_2fiIRtMpITeCAzXc4cANKp _1mK-LVHGTTlcFpMsjItjYJ" style="border: 0px; font-family: ibmplexsans, arial, sans-serif; font-size: inherit; font-stretch: inherit; line-height: inherit; margin: 0px 10px 10px 8px; overflow: hidden; padding: 0px; vertical-align: baseline;">
<div class="lrzZ8b0L6AzLkQj5Ww7H1" style="border: 0px; display: inline-block; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">
<br />
<span class="_1jNPl3YUk6zbpLWdjaJT1r " style="background-color: #edeff1; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; border: 0px; display: inline-block; font-family: inherit; font-size: 12px; font-stretch: inherit; font-style: inherit; line-height: 16px; margin: 0px 5px 0px 0px; overflow: hidden; padding: 0px 4px; text-overflow: ellipsis; vertical-align: text-bottom; white-space: pre; word-break: normal;">Tutorial</span></div>
</div>
<div class="_3xX726aBn29LDbsDtzr_6E _1Ap4F5maDtT1E1YuCiaO0r D3IL3FD0RFy_mkKLPwL4" data-click-id="text" style="border: 0px; font-family: ibmplexsans, arial, sans-serif; font-size: inherit; font-stretch: inherit; line-height: inherit; margin: 12px 0px 0px 8px; max-width: 800px; padding: 5px 16px 5px 0px; vertical-align: baseline;">
<div class="_292iotee39Lmt0MkQZ2hPV RichTextJSON-root" style="border: 0px; font-family: "noto sans", arial, sans-serif; font-size: 14px; font-stretch: inherit; font-style: inherit; line-height: 21px; margin: 0px 0px -1px; overflow: auto; padding: 0px 0px 1px; vertical-align: baseline;" theme="[object Object]">
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0px 0px 0.25em; vertical-align: baseline;">
iOS 6 and below are affected by a problem where <span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">if the latest version of an app requires a hardware component that your device doesn't have, they will not serve up the last compatible version</span> of that app as they normally would. In the majority of cases this is when <span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">the app you're trying to download now requires iOS 11.0+</span> (Netflix, YouTube, Twitter etc) <span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">and therefore demands a 64 bit CPU (arm64)</span>, a hardware component that no iOS 4/5/6 device has. As a result, iOS 6 and below won't offer the last compatible version of these apps and they can't be downloaded without carrying out additional steps.</div>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0.25em; vertical-align: baseline;">
The good news is this problem <span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">does not affect iOS 7 & above</span>, which will offer an older version to download even if the latest version requires missing hardware, and will display the message "<span class="_7s4syPYtk5hfUIjySXcRE" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: italic; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">This version of [insert app name] is not compatible with this device. Would you like to download the last compatible version?</span>"</div>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0.25em; vertical-align: baseline;">
<span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">***WORKAROUND***</span></div>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0.25em; vertical-align: baseline;">
Add arm64 as a hardware capability of your device so that it will once again serve up the last compatible version of iOS 11.0+ apps. Carry out the following steps:</div>
<ol class="_1eJr7K139jnMstd4HajqYP" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; list-style-image: initial; list-style-position: outside; margin: 4px 0px 4px 8px; padding: 0px; vertical-align: baseline;">
<li class="_3gqTEjt4x9UIIpWiro7YXz" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; margin: 0.4em 1em; padding: 0px; vertical-align: baseline;"><div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0px; vertical-align: baseline;">
Open iFile on your iOS 4/5/6 device and navigate to /System/Library/CoreServices/Springboard.app/</div>
</li>
<li class="_3gqTEjt4x9UIIpWiro7YXz" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; margin: 0.4em 1em; padding: 0px; vertical-align: baseline;"><div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0px; vertical-align: baseline;">
Locate the file [xxx]AP.plist (filename varies depending on your device, see list below)</div>
</li>
<li class="_3gqTEjt4x9UIIpWiro7YXz" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; margin: 0.4em 1em; padding: 0px; vertical-align: baseline;"><div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0px; vertical-align: baseline;">
Open the file with Property List Viewer and go to capabilities. Click the + icon in the bottom right corner, name it arm64 and set type to Boolean. Then click create, and toggle it on in the list.</div>
</li>
<li class="_3gqTEjt4x9UIIpWiro7YXz" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; margin: 0.4em 1em; padding: 0px; vertical-align: baseline;"><div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0px; vertical-align: baseline;">
Respring or reboot your device and you should now be able to download the affected apps as normal from your purchased history.</div>
</li>
</ol>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0.25em; vertical-align: baseline;">
Thanks to <a class="_3t5uN8xUmg0TOwRCOGQEcU" href="https://www.reddit.com/u/iPodee/" rel="noopener nofollow ugc" style="border: 0px; color: var(--newCommunityTheme-linkText); font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;" target="_blank">u/iPodee</a> for this information and easier solution.</div>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0.25em; vertical-align: baseline;">
Filenames by device:<br />
iPhone 3G - N82AP<br />
iPhone 3GS - N88AP<br />
iPhone 4 - N90AP, N90BAP, N92AP<br />
iPhone 4s - N94AP<br />
iPhone 5 - N41AP, N42AP<br />
iPod Touch (2nd Gen) - N72AP<br />
iPod Touch (3rd Gen) - N18AP<br />
iPod Touch (4th Gen) - N81AP<br />
iPad (1st Gen) - K48AP<br />
iPad (2nd Gen) - K93AP, K94AP, K95AP, K93AAP<br />
iPad (3rd Gen) - J1AP, J2AP, J2AAP<br />
iPad (4th Gen) - P101AP, P102AP, P103AP<br />
iPad Mini (1st Gen) - P105AP, P106AP, P107AP</div>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0.25em; vertical-align: baseline;">
<span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">*Please note this tutorial is specifically intended to fix "</span><span class="_7s4syPYtk5hfUIjySXcRE" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: italic; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">This App Is Incompatible With This iPhone/iPad/iPod</span></span><span class="_12FoOEddL7j_RgMQN0SNeU" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-weight: 700; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">".</span> If you are getting a "<span class="_7s4syPYtk5hfUIjySXcRE" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: italic; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">This app requires iOS x.x</span>" message, it's because;<br />
a) The app is not in your purchased history (download on a newer device or with iTunes 12.6.5.3 first)<br />
b) The app vendor has removed older versions of the app from the App Store (e.g eBay, PayPal) - download and backup all the apps you need while you still can!<br />
c) The app is fairly new and was never compatible with your firmware.</div>
<div class="_1qeIAgB0cPwnLhDF9XSiJM" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant-caps: inherit; line-height: inherit; padding: 0.8em 0px 0px; vertical-align: baseline;">
*Also note that these steps manually replicate most of what the "<span class="_7s4syPYtk5hfUIjySXcRE" style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: italic; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Checkmate, Store!</span>" tweak does, which was released after I wrote this tutorial. However, the tweak has additional usage on iOS 3 as it enables the "download older version" functionality that exists in iOS 4 onwards.</div>
</div>
</div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-41287742865543037612020-05-11T17:57:00.001-07:002020-05-11T17:57:39.978-07:00How to set a random mapcycle with nQuakesv<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">This article assumes you are running the nquakesv server package on a linux flavour.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">I don't know about you but I seem to still be playing Quake multiplayer 25 years after this game was released - Not the entire time, but I'm kind of revisiting it right now after a decade or so of not playing.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">So my biggest issue with nquake is having random levels every time i start a multiplayer match. They say most modern servers work on a map voting system where the players vote for a map but I just can't deal with that and would rather have my server just randomly pumping out a new level after every match.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">nquake does ship with a built in random function you can add to your server.cfg and that parameter is called </span><span style="font-family: Courier New, Courier, monospace;">k_random_maplist 1</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> however the biggest problem with this function is that it repeats levels pretty easily since random is well random... I thought there could be a better way.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">KTX currently loads maps in a way that is numbered like </span><span style="font-family: Courier New, Courier, monospace;">set k_ml_0 "dm2"</span><span style="font-family: inherit;"> </span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">and</span><span style="font-family: inherit;"> </span><span style="font-family: Courier New, Courier, monospace;">set k_ml_1 "dm6"</span><span style="font-family: inherit;"> </span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">etc.. so I thought i would create an array of the level names and then have a script shuffle them.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<br />
<ol>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">run the following command in the /nquakesv/qw/maps/ folder:</span></li>
<li><span style="font-family: Courier New, Courier, monospace;">ls > level_names.txt</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">open this file and find and replace all .bsp and .ent and .txt endings after each filename - you should now have a long list of just the map names alone.</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">copy the contents of the file and paste it into this script I got from one of the nquake discord members</span></li>
</ol>
<div>
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#generate ffa map rotation using specified list in the following format:</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#<span class="Apple-tab-span" style="white-space: pre;"> </span>mapname minplayers maxplayers</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#shuffle map cycle?</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">shuffle=1</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#this is our fallback map</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">firstmap="dm5"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#paste your map names into the array below</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">maps="</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">13edge</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">a2</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">ab2</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">ac4</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">aerowalk</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">ag</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">agenda</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">agent</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">aggressr</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">aghast</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">alk08dm</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">shuffle_com="cat"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">if [ "$shuffle" -eq 1 ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>shuffle_com="shuf"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">shuffled=$(echo "$maps"|sort -u|grep --color=never -v '^#'|$shuffle_com)</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#newmaps=$(echo -e "${firstmap}\n${shuffled}")</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">newmaps=$(echo -e "${shuffled}")</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">count=0</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">while read -r line; do</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if [ -z "$line" ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>continue</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>map=""</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>min=""</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>max=""</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>for part in $line;do</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if [ -z $map ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>map=$part</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>continue</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if [ -z $min ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>min=$part</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>continue</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if [ -z $max ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>max=$part</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>continue</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>done</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>echo 'set k_ml_'$count' "'$map'"'</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if [ -z $min ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>min=0</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>echo 'set k_ml_minp_'$count' "'$min'"'</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if [ -z $max ];then</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>max=0</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>fi</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>echo 'set k_ml_maxp_'$count' "'$max'"'</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>let count=count+1</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">done <<< "$newmaps"</span></div>
<div>
<br /></div>
<div>
<ol>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Save the script above as something like generate_maps.sh and give it a chmod +x</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">The Script on its own simply outputs everything in a way that KTX can use and also sets the min and max player counts per level. If you want to use the min and max settings of this script then where you paste your map names in the array you can put two numbers after each entry like </span><span style="font-family: "Courier New", Courier, monospace;">aerowalk 2 4 </span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">this would set the aerowalk map to have a minimum of 2 players and a max of 4</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">What i did next was create a second shell script called start_mapcycle.sh which also has a chmod +x and save it in the root of nquakesv. The contents of the script are:</span></li>
</ol>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">./generate_mapcycle.sh > ./ktx/configs/usermodes/ffa/mapcycle.cfg</span></div>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<ol>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">This will now write the maps into a text file that KTX understands and in a shuffled way.</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">All you need to do now is have whatever usermode cfg you are running exec your new file in my case i'm using configs/usermodes/ffa/default.cfg</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">inside default.cfg at the map rotation section simply have it read</span></li>
</ol>
</div>
<div>
<span style="font-family: Courier New, Courier, monospace;">exec configs/usermodes/ffa/mapcycle.cfg</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">You'll need to run start_mapcycle.sh before every start of your server if you want a freshly rotated list of maps - but its still an awesome way to do it. All credit to @ciscon at nquake #helpdesk</span></div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-35914704403000346222020-05-11T17:21:00.002-07:002020-05-11T17:21:46.821-07:00How to enable bots on nquake<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggRgs-NatZI6jdjOL3-XZh687lsJKu7avZToKhEI52w7zpBI165W8dpfMiWG8U5ChF_Ky4f0YB7WXHxJSFkEC06dg_wOX4KIpxo7RChmfijVksJYrpZ-HJxB_xr2m46belxdCDyPf1koI/s1600/Screen+Shot+2020-05-11+at+8.20.24+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="230" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggRgs-NatZI6jdjOL3-XZh687lsJKu7avZToKhEI52w7zpBI165W8dpfMiWG8U5ChF_Ky4f0YB7WXHxJSFkEC06dg_wOX4KIpxo7RChmfijVksJYrpZ-HJxB_xr2m46belxdCDyPf1koI/s200/Screen+Shot+2020-05-11+at+8.20.24+PM.png" width="200" /></a></div>
<br />
This article is my experience with nQuakesv server package running on Ubuntu 18.04
<br />
<br />
<br />
<ol>
<li>Make sure your server is not running.</li>
<li>With your new server setup and installed you want to navigate to the nquakesv/ktx folder</li>
<li>You will see 3 files named qwprogs, you want to backup your existing qwprogs.so by renaming it qwprogs.so.bak or something like that.</li>
<li>now you will rename the file called qwprogs-bots-enabled.so to be named qwprogs.so</li>
<li>Start your server again and when connected bring up your player console and type /botcmd enable - this will enable the bot system.</li>
<li>You can now add bots to only the levels that are in your ktx/bots/ folder - these maps have waypoints - if you are using custom maps you have to train the bots via waypoints.</li>
<li>To add a bot to a level simply type /botcmd addbot and then set its skill level with /botcmd skill 1 through 10</li>
</ol>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-42248807754247211292018-01-05T13:21:00.001-08:002018-01-05T13:21:43.521-08:00find and delete files based off grep searchat some point it could be useful to search for the text within a group of file names and delete those, here's an example terminal command to find and execute a deletion of files which meet a certain criteria<br />
<br />
find . -name "*2017-11*" -exec /bin/rm {} \;polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-46458079622400559612017-12-10T07:53:00.002-08:002017-12-10T07:53:36.329-08:00Make Bootable OSX drive from install app<div>
From a terminal:</div>
<div>
<br /></div>
sudo /Applications/Install\ OS\ X\ Yosemite/Contents/Resources/createinstallmedia --volume /Volumes/DRIVENAME --applicationpath /Applications/Install\ OS\ X\ Yosemite\ --nointeraction<br />polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-67114194167783088532017-10-20T12:05:00.002-07:002017-10-20T12:06:20.919-07:00create a playlist file from the linux command line<div>
Here's a quick way to make a .m3u file from the linux command line for a bunch of folders of videos.</div>
<div>
<br /></div>
<div>
navigate to the top folder that contains all your sub-folders of videos and type the following command.</div>
<div>
<br /></div>
find -type f -iname "*.avi" > playlist.m3u<div>
<br />I'll usually open the .m3u after and add any global path names that happen at the beginning of the entries.</div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com1tag:blogger.com,1999:blog-6179213374072616645.post-4214190015333012292017-10-18T10:55:00.003-07:002017-10-18T10:55:46.855-07:00How to see Disk Utilization in % from linux command line<div>
<div>
<br /></div>
<div>
You can get a pretty good measure of this using the iostat tool.</div>
</div>
<div>
<br /></div>
iostat -dx /dev/sde1<div>
<br /></div>
<div>
The disk utilisation is listed in the last column.</div>
<div>
<br /></div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com1tag:blogger.com,1999:blog-6179213374072616645.post-4425498687439315812017-10-11T07:34:00.003-07:002017-10-11T07:34:42.797-07:00Enabling Exodus Downloads on Kodi<br />
<div>
1.Open Exodus</div>
<div>
2.Now scroll down a bit and choose Tools option.</div>
<div>
3.Then go the EXODUS: Downloads option.</div>
<div>
4.Here you have to turn on the Enable downloads.</div>
<div>
5.Click on Movies and TV to select the folder for saving the downloaded files.</div>
<div>
6.Find a movie and load its sources</div>
<div>
7.Find a working source, then long press on the source and select 'download' from menu.</div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-61729994965898902132017-10-02T12:53:00.002-07:002017-10-11T07:30:12.584-07:00Outlook constantly shows welcome screen in Office 365 for OSXI found I was having this issue due to a bad .plist file.<br />
For outlook, you would go to ~/Library/Containers/com.microsoft.Outlook/Data/Library/Preferences/<br />
<br />
In my case, the 'com.microsoft.Outlook.plist' file was unable to be opened by XCode due to an incorrect format. I renamed the file by adding '.old' to the end of it and re-started Outlook. <br />
<br />
This re-created a new .plist file.
After going through the welcome screen again, it no longer opens after restarting.polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-70319303975595968442017-09-13T08:34:00.002-07:002017-09-13T08:34:37.376-07:00Browsing internet doesn't work on OSX but it works in recovery.I recently discovered a macbook pro at my office which was unable to browse the web over both wifi and ethernet regardless of browser. I was however able to ping sites fine from the terminal. I tried creating new user accounts and the problem still existed. Booting into recovery mode however would fix the issue and I could browse the web from recovery mode (command+R at start).<br />
<br />
The fix was fairly simple but it took a long time to figure out the problem.<br />
<br />
Navigate to /System/Library/Extensions/ and have a look at the dates of all the files in this directory. For me there was a very obvious rogue extension which was added that had a really old date of 2014 and it was some NetNanny.kext file<br />
<br />
I deleted the suspect kext file and rebooted. All my problems where solved. Back surfing without having to reinstall the OS.polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-42971321884295723912017-07-07T06:09:00.001-07:002017-07-07T06:17:12.759-07:00installing composer on osxFirst install the composer like mentioned in the composer installation documentation. I just added here for reference.<br />
<br />
curl -sS https://getcomposer.org/installer | php<br />
<br />
and then move the file to '/usr/local/bin'.<br />
<br />
sudo mv composer.phar /usr/local/bin/composer<br />
<br />
Try to run composer -V. If you get a output like Composer version followed by the version number then the composer is installed successfully.<br />
<br />
If you get any output like composer: command not found means use the following command to create a alias for the composer. So it will be executed globally.<br />
<br />
alias composer='/usr/local/bin/composer'<br />
<br />
Now if you run composer -V means you will get the output as Composer Version followed by the version number.<br />
<br />
NEXT MAKE SURE TO ADD VENDOR/BIN TO YOUR OSX PATH<br />
<br />
Yes, you need to make sure that ~/.composer/vendor/bin directory is in your system's PATH, you can check this by running:<br />
<br />
echo $PATH<br />
<br />
If you can't see it there, then you need to add this to your ~/.bash_profile:<br />
<br />
export PATH=$PATH:~/.composer/vendor/binpolarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-43627298232334192992016-09-28T08:36:00.001-07:002016-12-07T07:33:22.108-08:00Prevent terminal in osx from copying style when copying text.You can disable copy/pasting the formatting from Terminal by changing the com.apple.Terminal preferences file.
Open Terminal on your Mac and enter the following command:<br />
<br />
<blockquote>defaults write com.apple.Terminal CopyAttributesProfile com.apple.Terminal.no-attributes</blockquote><br />
<br />
This will strip all text attributes out of copy/pasting from Terminalpolarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-50930742185604737202016-07-12T08:35:00.003-07:002016-07-12T08:35:49.753-07:00Toon Render without Cycles<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1XqLWss6u4eC1rUVZAvI-8DResZjSgJilfh1PD2vhXWRzL22v72wR65yhzFfdpbEw0VSsidHmOUHqnAqpU38yOi9u60KzQZXpiglvPnJTAf79PnSskRMVHCLKZULsOsoqL3szwns4pqQ/s1600/thePerfectToonRender.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1XqLWss6u4eC1rUVZAvI-8DResZjSgJilfh1PD2vhXWRzL22v72wR65yhzFfdpbEw0VSsidHmOUHqnAqpU38yOi9u60KzQZXpiglvPnJTAf79PnSskRMVHCLKZULsOsoqL3szwns4pqQ/s400/thePerfectToonRender.png" width="160" /></a></div>
<br />polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-8797157813347738872016-04-28T07:36:00.001-07:002016-04-28T07:36:40.287-07:00how to find files and successfully search for items using a terminal command linemodern user interfaces I find are getting worse and worse at doing a basic file search. here's a very simple way to search for files anywhere (locally or on a network volume etc)<div>
<br /></div>
<div>
find . -iname \*DVD\*</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
the . tells the find command to search starting at this point in your directory tree. ( by default you'll be in your home folder, so you should navigate to where you want your search to start from )<br />
-iname flag means case insensitive<br />
<br />
the \* is a wildcard option for text before and/or after your text, in my example above i'm saying find any file that has DVD in the title with words either before or after DVD.<br />
<br />
the \ itself is an escape character, which tells the terminal that the character directly after the \ should be treated literally and not as a parameter that needs processing. a classic example of this in linux is that a blank space is typically ignored if you were trying to change your directory to a folder name 'folder name'. in this scenario you need to cd into folder\ name which tells linux that the space you put after the \ should be taken literally as 'space'. In the case of my find command above the \* is telling the shell to process the * literally as a wildcard.</div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-9062666391339199252016-01-20T06:17:00.001-08:002016-01-20T06:20:27.967-08:00Enabling Metric Measurements in Blender<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizuZ4qFKSLGRCUCTIRuV7Nzym8vN9LpzgfaPrCYobnS_ZinuBVii8U79hl55_r0OsiOUQsttAZITHVTzuQkuQxsqmxHho5Wr3cte2eRg4Xg_-JDmqCiuayoU0BjrSlgBKp4NxMCkcZvlE/s1600/Screen+Shot+2016-01-20+at+9.10.20+AM.png" imageanchor="1"><img border="0" height="391" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizuZ4qFKSLGRCUCTIRuV7Nzym8vN9LpzgfaPrCYobnS_ZinuBVii8U79hl55_r0OsiOUQsttAZITHVTzuQkuQxsqmxHho5Wr3cte2eRg4Xg_-JDmqCiuayoU0BjrSlgBKp4NxMCkcZvlE/s400/Screen+Shot+2016-01-20+at+9.10.20+AM.png" width="400" /></a><br />
<br />
<br />
this next setting is in the transform panel which you can pull up by pressing 'n' on the keyboard while in edit mesh mode.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7EiIp8tprghLZsSJwXqkEslamMfPPZ3KE4Vf8hZOn47rdEKGRW9Euzgot3itbGQYeofoKPSxXVAWUVn9YgBOEAYRPM6yiAFq-1OGkbmtxPx1MOiYpfER1RkPKlAvdUAQmsJ2CYIC-i6Q/s1600/Screen+Shot+2016-01-20+at+9.10.08+AM.png" imageanchor="1"><img border="0" height="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7EiIp8tprghLZsSJwXqkEslamMfPPZ3KE4Vf8hZOn47rdEKGRW9Euzgot3itbGQYeofoKPSxXVAWUVn9YgBOEAYRPM6yiAFq-1OGkbmtxPx1MOiYpfER1RkPKlAvdUAQmsJ2CYIC-i6Q/s640/Screen+Shot+2016-01-20+at+9.10.08+AM.png" width="640" /></a>polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-52329777490749083862015-09-17T08:09:00.002-07:002015-09-17T08:11:31.381-07:00Configure an Airport Extreme remotely from an ssh tunnel
I have disabled remote configuration on my Airport Extreme but was out of town and needed to add a new port to the router and forward it to an internal machine, made me scratch my head a bit. After some googling I found information on setting up an SSH tunnel to assist with this.
<br />
On my Macbook I ran the following command to set create the tunnel to my server on my home network. Simply substitute the <em class="markup--em markup--p-em">Router_IP </em>for the IP of your router and then of course change <em class="markup--em markup--p-em">IP_Address_of_home_connection </em>to the IP of your home connection or Dynamic Address (<a class="markup--anchor markup--p-anchor" data-href="http://dyndns.org/" href="http://dyndns.org/" rel="nofollow" title="dyndns.org">dyndns.org</a>)
<br />
<blockquote class="graf--blockquote" id="ceea" name="ceea">ssh -L 5009:Router_IP:5009 IP_Address_of_home_connection</blockquote>
<br />
Once you have established the connection via the terminal on your mac you can then bring up the Airport Utility and goto <em class="markup--em markup--p-em">File->Configure </em>other. Use <strong class="markup--strong markup--p-strong">127.0.0.1 </strong>as the IP of the router and then add your router password. This should then connect (depending on your connection speed it may not be instant.
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com1tag:blogger.com,1999:blog-6179213374072616645.post-63423414165015723702015-09-09T20:04:00.001-07:002015-09-15T07:46:24.151-07:00Acoustic upright piano conversion to digital<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/AVvXsEi2bgr4kpH1gNBXINsubHdKSi7n78uWql7AmcmQXWloZQ9aarMoa2z8oibouUzrXOJkwmEOdA0kLxLPoZfmnNIf-RJqWg1kQeRdlnA7kckDCI92OICLWJID-BVCD1KT9vdo53Eaq3TffUU/s1600/1980-malton04.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2bgr4kpH1gNBXINsubHdKSi7n78uWql7AmcmQXWloZQ9aarMoa2z8oibouUzrXOJkwmEOdA0kLxLPoZfmnNIf-RJqWg1kQeRdlnA7kckDCI92OICLWJID-BVCD1KT9vdo53Eaq3TffUU/s320/1980-malton04.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">My Sister and I with the McMillan in 1981</td></tr>
</tbody></table>
<div>
In 1971 my Father acquired this McMillan upright piano on a barter for a pair of glasses (he’s a retired Optician now). The piano has remained with the family ever since and I eventually inherited it in 2010 when my father moved out of the city to retire in the country. The piano is approximately 111 years old which, of itself, is really impressive but, I don’t really remember it sounding all that great or anything as a child and growing up. It always seemed to be plagued with tuning issues with some of the keys but good enough for the most part. I wonder how many times it’s been restrung during its life? I can visually see that 1 or 2 strings looks shinier or newer than the rest but I don’t remember my family ever restringing it in the 43 years we’ve owned it.</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://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpsPoT-s1OhpQtyZGled1fLuWzdu_jaTjMBVM-ZPccWq8nXBQYYwsJPE_gGdSUYsSEH3-vc5sEOerH5KPfROTy2Os0aNtg2pxMgxfapJi9v-OeXyk9-IhR98wE9nOD0NlMOaAOmAyOWAg/s640/blogger-image--2002968129.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpsPoT-s1OhpQtyZGled1fLuWzdu_jaTjMBVM-ZPccWq8nXBQYYwsJPE_gGdSUYsSEH3-vc5sEOerH5KPfROTy2Os0aNtg2pxMgxfapJi9v-OeXyk9-IhR98wE9nOD0NlMOaAOmAyOWAg/s640/blogger-image--2002968129.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Two shiny strings amidst an ocean of tarnished old strings.</td></tr>
</tbody></table>
</div>
<div>
Fast forward to 2015: My Daughter has turned 6 this year and my wife and I decided we’d like to have a piano teacher come to the house to teach her how to play, so as soon as I’d gotten a nearby teacher secured I figured it was probably a good idea to have a professional tuner come to inspect and tune this thing.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPBOcb1hB8U7DMSQPsu_MXYx6alXZyXcgZ8aPxxOZCIbKfiwnomvNS1voZPJCWbiiItSN_0eNAfnH0QsNuADgAWF8RCy2sY4ul4d81-DCeZQ-rTXESPdrZita3Fb5F0aXo_EcqLT6Y4UM/s1600/mockup.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPBOcb1hB8U7DMSQPsu_MXYx6alXZyXcgZ8aPxxOZCIbKfiwnomvNS1voZPJCWbiiItSN_0eNAfnH0QsNuADgAWF8RCy2sY4ul4d81-DCeZQ-rTXESPdrZita3Fb5F0aXo_EcqLT6Y4UM/s320/mockup.jpg" width="240" /></a></div>
<div>
The tuner came by on a friday morning and spent all of 10 minutes adjusting before he stopped altogether and told us the soundboard pins are too old and weak to hold pitch anymore and that if he continued we’d find the piano would be out of tune again by the next day. His recommendation was to junk it, as it would be cheaper to buy a new piano then to even consider rebuilding this existing one. ….great. what are we gonna do about lesson’s now?</div>
<div>
<br /></div>
<div>
Our daughter's piano teacher arrived the following day and we explained the situation. Her recommendation was a hard pill to swallow, she told us that even though the piano was somewhat in tune, it wouldn’t really be recommended for lessons, because its important for a student to develop the proper ear training when learning an instrument, and if the chords aren’t sounding right, its really not helping things. I get it. She recommended we also purchase a new piano and that unfortunately vintage piano’s have essentially zero resale value and we’d be lucky to even give it away, let alone get paid for it. She also said it would cost well over 10 thousand dollars to rebuild the harp and soundboard inside. Jeez.</div>
<div>
<br /></div>
<div>
By the time her lesson was finished I already had a plan brewing as to what exactly i was gonna attempt, I had explained to her that this was a family heirloom and I couldn’t bring myself to dump something I’ve had around me my whole life.. worthless or not. My plan had a lot of fine details that I wasn’t sure would work out yet, but essentially I was gonna gut the piano entirely and convert it to digital.</div>
<div>
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4KVDSbutJjA8AeejY8U-Kuwp8IKfHzsqhG8z-XiJbE3tfJW1ngVPTxVSVODwSifGck5bUY496CYN4IB0dTtVymUtCEIQA0Foc2uP6DMihA9s4yFX0ARJDMqqKRIfIEwinC2RutgkPwVc/s640/blogger-image-1410667671.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4KVDSbutJjA8AeejY8U-Kuwp8IKfHzsqhG8z-XiJbE3tfJW1ngVPTxVSVODwSifGck5bUY496CYN4IB0dTtVymUtCEIQA0Foc2uP6DMihA9s4yFX0ARJDMqqKRIfIEwinC2RutgkPwVc/s640/blogger-image-1410667671.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
There were two approaches I was entertaining to achieve this, the first was to see if there was some kind of sensor strip that I can could put under the original keys to convert the key-presses into midi data, the 2nd approach would be to replace the entire keys with a digital set from an 88 key modern electronic keyboard.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I spent a couple hours looking into any method that would allow me to preserve all the stock hardware and action, but basically I came to the conclusion that there are only a handful of digital sensors on the market that met my criteria and the cost of these sensors was much higher then I anticipated (about $1400). Let's skip that approach and check out the other way.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
It took me all of 2 minutes to locate an 88 key digital piano on Kijiji for $200. The model was a Yamaha p70 and the reviews looked good enough for me. Within an hour I was back at my house with a new digital Keyboard and ready to gut this thing. Let's do this!</div>
<div class="separator" style="clear: both;">
<br /></div>
<h3>
<b>Step 1: the Gutting.</b></h3>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw8G_FjQn7txY-uTDlc4wFqFN6dhHtai7R8ijI0huhp9PVW_TQaYrZqyGadNqIhezWPKc-mJyiUJKmdDZwyzNdC49ZjbelUyHOV9kxB7kaJxcZn9M06QItgZO8e0rN46FQ9C4Wzd2cNSg/s640/blogger-image--990391901.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw8G_FjQn7txY-uTDlc4wFqFN6dhHtai7R8ijI0huhp9PVW_TQaYrZqyGadNqIhezWPKc-mJyiUJKmdDZwyzNdC49ZjbelUyHOV9kxB7kaJxcZn9M06QItgZO8e0rN46FQ9C4Wzd2cNSg/s640/blogger-image--990391901.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
As I peer inside this thing I'm looking for the screws that hold this thing all together, surprisingly there are few. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAgF4H9Bh_V-pYW0-zJkSK83DBiLHYxGDJ27w0QGXCVSi4eKiwIimyX5CYPmQ1UkTxs-00zA756LczMXJ0yQ5F8tKWwZko9yU3mJca-qAVy-vkdy6V_klqq49klmy9xU6-PRYSnHwNUX8/s640/blogger-image--1840653053.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAgF4H9Bh_V-pYW0-zJkSK83DBiLHYxGDJ27w0QGXCVSi4eKiwIimyX5CYPmQ1UkTxs-00zA756LczMXJ0yQ5F8tKWwZko9yU3mJca-qAVy-vkdy6V_klqq49klmy9xU6-PRYSnHwNUX8/s640/blogger-image--1840653053.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I'm thinking eventually i'll rip the entire soundboard and harp out of this piano, so that its essentially nothing but an empty shell. Right now this piano weighs a rediculous amount, once all this hardware is out it will probably weigh the same as a generic bookshelf.. Pretty handy in the event we move one day.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbilwu4TJiQ5JaxAPA_48lIgqRqHkSsfl-kOna1Di6d21ia48VdVZXyjlFNawd07w_b3OzAA5yETzbIA5J20JJtXLp6uyg2kqO82WKNbTBony9cp6yXwqALAVdwXCjvVhsl4Hhnz5lfS0/s640/blogger-image--1549869112.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbilwu4TJiQ5JaxAPA_48lIgqRqHkSsfl-kOna1Di6d21ia48VdVZXyjlFNawd07w_b3OzAA5yETzbIA5J20JJtXLp6uyg2kqO82WKNbTBony9cp6yXwqALAVdwXCjvVhsl4Hhnz5lfS0/s640/blogger-image--1549869112.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Surprise, the further and deeper i go into the beast I discover a long lost pencil that my mother and grandfather likely used decades ago when they used to practice together. I can see how it might have rolled off the top ledge and found its way into this place.. maybe thats why one of the keys was a little sticky when you pressed it?</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghZSCiYc9uoqQ4d_Btt-FpamWw5AyuFJ8I5K3zUhHrXuOGCnwk3hC8uNQOr2NZmw8xr-7txlAJDHV3Hg3imA4UhLyTBKOK03HdGHHVYKioxZ6HnLU7_4wY7KQKHnieNUZU5kTgj-DI0bo/s640/blogger-image-1988405700.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghZSCiYc9uoqQ4d_Btt-FpamWw5AyuFJ8I5K3zUhHrXuOGCnwk3hC8uNQOr2NZmw8xr-7txlAJDHV3Hg3imA4UhLyTBKOK03HdGHHVYKioxZ6HnLU7_4wY7KQKHnieNUZU5kTgj-DI0bo/s640/blogger-image-1988405700.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
So far i've only needed to take out 4 screws to get to this point. Remarkable design for something so sturdy. Its pretty cool to see how the piano action works with it all exposed like this. My wife decided to casually remind me that people have died in the past from piano strings breaking. I'm not worried though.... </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAZBotKXTMNCsT_Jl5qKXH5TuyUjXk0mAgs-ddrUxlomPeKM31dGJqRBcwgu42PwTLHWwxDa1PStVMYy9Vrjionk_NvTmzL6s2J-jS4nDSkAZTCONqDRfN2_MgKKo0WR3tBSuexhlG47I/s640/blogger-image-303548205.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAZBotKXTMNCsT_Jl5qKXH5TuyUjXk0mAgs-ddrUxlomPeKM31dGJqRBcwgu42PwTLHWwxDa1PStVMYy9Vrjionk_NvTmzL6s2J-jS4nDSkAZTCONqDRfN2_MgKKo0WR3tBSuexhlG47I/s640/blogger-image-303548205.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I have no idea what type of wood these keys are made of but they are remarkably light, They also come out of the piano really easy with just a light lift.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy0SGG9vd1B7tZCJWMuaO-SkIV1qyXRJJTgyof3cQy5nzlTmORNnTOniwR-w7tiKvky9TMEjROcrZUBPsBfXTBg_uoUk1g3P16ZLKQsAnzA6oKrbpRPNMDsM7qR9OjOHOcIPm1PCL20MQ/s640/blogger-image-557737551.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy0SGG9vd1B7tZCJWMuaO-SkIV1qyXRJJTgyof3cQy5nzlTmORNnTOniwR-w7tiKvky9TMEjROcrZUBPsBfXTBg_uoUk1g3P16ZLKQsAnzA6oKrbpRPNMDsM7qR9OjOHOcIPm1PCL20MQ/s640/blogger-image-557737551.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
A baker's dozen.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqCJz8vRMTsW3ndYtbnJ16mMvZ7KE02VKCvbbq-jhBE2zq38-2uiR1AsfD28EcK4atmA6PsSF96tu1M9sNHO9qo7dnkqz2MPmcvkszxYruF8IE5z3eXsq6j94wxSPZ1ErNWdIXfEEOK5Q/s640/blogger-image-187821030.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqCJz8vRMTsW3ndYtbnJ16mMvZ7KE02VKCvbbq-jhBE2zq38-2uiR1AsfD28EcK4atmA6PsSF96tu1M9sNHO9qo7dnkqz2MPmcvkszxYruF8IE5z3eXsq6j94wxSPZ1ErNWdIXfEEOK5Q/s640/blogger-image-187821030.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I've been taking out the keys in groupings that I can tape up and store away somewhere. maybe real ivory will be worth billions one day.</div>
<br />
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3hq3vajE41ZtZonUujBqhhHSk1JNFTNn13YRV6RP4vrFaOiHOwjVDqmKkeAGYxwA1m6vb-3JZwHRZRAiQA4hxlu4JoNxu3GqhY2Urv-Ji8_y6Fg8ZLcl-XqoewlNhAJ-ExIEHZRPj8W4/s640/blogger-image--330496499.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3hq3vajE41ZtZonUujBqhhHSk1JNFTNn13YRV6RP4vrFaOiHOwjVDqmKkeAGYxwA1m6vb-3JZwHRZRAiQA4hxlu4JoNxu3GqhY2Urv-Ji8_y6Fg8ZLcl-XqoewlNhAJ-ExIEHZRPj8W4/s640/blogger-image--330496499.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbEVD0yqmC7stetzlRwcfh5Tj5BWJ1EkP1dA6BurXPiuSX5EO3KPN44hg3IQns-bBz8h8L47IljzHqYKpjHWH94Cs96jb33zMOrdYQH0U1t1VpitmFXfozcSRaWcBCD6I10ss0WKGU0s/s640/blogger-image-2128385555.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbEVD0yqmC7stetzlRwcfh5Tj5BWJ1EkP1dA6BurXPiuSX5EO3KPN44hg3IQns-bBz8h8L47IljzHqYKpjHWH94Cs96jb33zMOrdYQH0U1t1VpitmFXfozcSRaWcBCD6I10ss0WKGU0s/s640/blogger-image-2128385555.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
All the keys are out and now its time to figure out the best way to remove this keybed. It looks like the harp is actually attached to the back of the keybed which means i may have to resort to drastic measures at this point since I don't plan on removing the harp at this stage of the game.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq5QdSdmJmtlWl3tgNbin-iNYNhtStVcDdw7VIOimT0B9_6I9oarAh0Q5mK6BWoqQ5SUYQsTxR2eieC8IjFsxfqkK_T2THt0wQ7ALV4HfO9fe8y5F6CtGmrbkl8xikJpA3duVI6kJFhJM/s640/blogger-image--366689763.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq5QdSdmJmtlWl3tgNbin-iNYNhtStVcDdw7VIOimT0B9_6I9oarAh0Q5mK6BWoqQ5SUYQsTxR2eieC8IjFsxfqkK_T2THt0wQ7ALV4HfO9fe8y5F6CtGmrbkl8xikJpA3duVI6kJFhJM/s640/blogger-image--366689763.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Okay so I ended up just sawing 4 joints which attached the keybed to the incredibly heavy harp. The damage is done, and there's no real going back now.. I mean, I think I possibly could reverse the damage if I really had to, but I don't think i'll be going back to its original state ever at this point.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdALq0zoX1jqOlIdwWOSIRhYXjpsdvzqChhRTDUEBCm1wR18Szg_1xYJtTgEheEnPn71MZutwODvqoaZpaPATu8tMK94mfSmrqgcO0fOMehBWViNnXW7MNgS416IsT_YBmVzQoaKC1CNA/s1600/836528003488483.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdALq0zoX1jqOlIdwWOSIRhYXjpsdvzqChhRTDUEBCm1wR18Szg_1xYJtTgEheEnPn71MZutwODvqoaZpaPATu8tMK94mfSmrqgcO0fOMehBWViNnXW7MNgS416IsT_YBmVzQoaKC1CNA/s640/836528003488483.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both;">
At this stage it was time to just loosely see what I can do with this Yamaha P70</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4NUrZRH5pAWxiZ5pSiC1ccWMIq4LujykL5O7C02HAwViQJmDM4DmbYkUH92q7E6sahWFFGVdPSTrcnxp6MaAA6xe14qib-eLSunVEVhlOEfTSv9D9ORgy1pMVFTzshOv3jlijlXCB3iY/s640/blogger-image--187876997.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4NUrZRH5pAWxiZ5pSiC1ccWMIq4LujykL5O7C02HAwViQJmDM4DmbYkUH92q7E6sahWFFGVdPSTrcnxp6MaAA6xe14qib-eLSunVEVhlOEfTSv9D9ORgy1pMVFTzshOv3jlijlXCB3iY/s640/blogger-image--187876997.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Hilarious.. The P70 fit perfectly on the shelf, If I didn't care so much about preserving a more authentic look of the upright I could have essentially considered the project complete at this stage, but I knew I wanted to go further with it so my next step was to read up on how best to dismantle this P70 and see if I could just put the keys alone into the spot where the old keys were.</div>
<div class="separator" style="clear: both;">
<br /></div>
<h3>
<b>Step 2: the Gutting.. again</b></h3>
<div>
It was time to rip apart this perfectly working keyboard... what could go wrong really? I decided to do a search on youtube about it and I found two particularly useful videos that helped me fully understand what was involved in ripping out the keys.</div>
<div>
<br /></div>
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/72Hybj2zYjo" width="560"></iframe>
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/HWE3t00ouP8" width="560"></iframe>
<br />
<br />
Armed with this newly found wisdom I was able to confidently dismantle this wonderful Yamaha keyboard and it went off without a hitch.<br />
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZoYy3Xg26VHY1HST89F-PvHduX8N_zfVwF2tIAiwKBejWWqHat-XGxIaxp3DBx7NoW5J5f21Smozuc29evbC9Gg-E0Dbut02BKFGoLa5e5lBgvKEFu_7D_yFybPV-UrFF39rGewen130/s640/blogger-image--1195293310.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZoYy3Xg26VHY1HST89F-PvHduX8N_zfVwF2tIAiwKBejWWqHat-XGxIaxp3DBx7NoW5J5f21Smozuc29evbC9Gg-E0Dbut02BKFGoLa5e5lBgvKEFu_7D_yFybPV-UrFF39rGewen130/s640/blogger-image--1195293310.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
At this stage I've managed to roughly place the motherboard, power supply and other controls into an approximate spot behind wehre the keys will be placed. I'm planning on mounting them properly on a separate piece of wood using proper spacers, but this will do for now.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGb3e19EbCUKeVNOw3tcNRU9zEty2nUrYAnoPNfccGU_qTtZPQc-Oz4Ucf3RxTQQDZkri3cHw5_RUmgVmmlhYcaYorI9CeRvkszbGaEZ1CO6Wjeu_c0mPZ1r6H9O_1FTGl305QksCm468/s640/blogger-image--87230904.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGb3e19EbCUKeVNOw3tcNRU9zEty2nUrYAnoPNfccGU_qTtZPQc-Oz4Ucf3RxTQQDZkri3cHw5_RUmgVmmlhYcaYorI9CeRvkszbGaEZ1CO6Wjeu_c0mPZ1r6H9O_1FTGl305QksCm468/s640/blogger-image--87230904.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I decided to wire everything back up and make sure the damn thing still worked. guess what? It did. PHFEWFF, thankfully i've assembled my share of computers in the past so this really wasn't any more difficult than that. Its just a smaller motherboard and a few peripherals right. Actually the hardest part of the entire thing is working with ribbon cables.. I absolutely despise ribbon cables because they are often fragile and you never know if something terrible is about to happen as you pull or push them into their slots, however, compared to the ribbon cables involved in replacing and iphone screen these ones are HUGE. They are also very strong, so don't worry so much k?</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4zMkdp5FXd7hU_B16sGx2IBHQH_-m7jvcGT404hOIkpEFhS-6rs0Zh26srUEyKtS7rpoJgf9aE0CvJreqoZPA5gwI4LFc9c9eaH2PGd9EigYnfXcXkzfpTA1tLN3z_5SZxp9nZ6VZ3wo/s640/blogger-image-2009093982.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4zMkdp5FXd7hU_B16sGx2IBHQH_-m7jvcGT404hOIkpEFhS-6rs0Zh26srUEyKtS7rpoJgf9aE0CvJreqoZPA5gwI4LFc9c9eaH2PGd9EigYnfXcXkzfpTA1tLN3z_5SZxp9nZ6VZ3wo/s640/blogger-image-2009093982.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
So the problem i'm going to have to deal with ultimately is that the keys and their digital mechanism take up about an extra half inch of height vs the original low-profile keys.. this is not really a problem in terms of playability as most piano's and piano stools are all built different and mostly adjustable. It is a problem however for my original front face panel which used roll down over the keys if you wanted. There is just no way I can chop off half an inch from it, nor do I really want to. I'd like to preserve the original pieces JUST in case I change my mind in the future or something. </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I know that at this point i'm going to have to cut 2 pieces of wood in order to make this look natural.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu_zx2V1PAwaO3px4VkBapy-woo0AJ7SB-TIhPyrrCMKP3ofRsxSuSColMIy8M3wmFc3azYTCDr1ht1HJ1SUhrdMB3KZoUcmeFFBc3tA4k7mAoCe3cWsG-boR3E9A1EjNi3EZXjqNQv08/s640/blogger-image-2029767858.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu_zx2V1PAwaO3px4VkBapy-woo0AJ7SB-TIhPyrrCMKP3ofRsxSuSColMIy8M3wmFc3azYTCDr1ht1HJ1SUhrdMB3KZoUcmeFFBc3tA4k7mAoCe3cWsG-boR3E9A1EjNi3EZXjqNQv08/s640/blogger-image-2029767858.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
The first piece i cut was a shim to go underneath the front lip of the piano to give it its more natural key height look. I'll stain it to match as best I can. I almost thought about cutting a whole new piece of wood for the front lip, but there was a few ornate things i'd lose, so i figured a half inch shim would be good enough.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1JK3Dco-J-KqyL-e7HaLwbRX7mMazcFCuhFP76J9npYAfeNlFdiAinSG4GPgAa3TlOd6-gx_WqGUtnYncZIgIKWM9Z1Yg-X9zT6hiGO5UtyMuO3GbD4uAN8LDY-rl3wz60RaZdS8w7Xk/s640/blogger-image-196028280.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1JK3Dco-J-KqyL-e7HaLwbRX7mMazcFCuhFP76J9npYAfeNlFdiAinSG4GPgAa3TlOd6-gx_WqGUtnYncZIgIKWM9Z1Yg-X9zT6hiGO5UtyMuO3GbD4uAN8LDY-rl3wz60RaZdS8w7Xk/s640/blogger-image-196028280.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
In this photo you can also see that my keys are just a few millimeters or so off level, again i'm doubtful any piano player would notice, but this has to do with the design of the digital keys and the type of enclosure they were meant to be mounted into. I suppose I could have raised the front a little more to level it, but at this point i'm not bothering. It plays pretty nice as is.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiJfihvV5vOS9HAjraFJ4kQ_stka0k-GnFCZ3FHs-1pqUj1k6Za-Utyjl4K8tzv7xcfVOBRZudu-DTN27nCuUi2rlqq6P8yC8V6R7yIdzYn2Bro2cagK3lMXIzdHs9HHBrihcwWO-cyD4/s640/blogger-image--256430313.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiJfihvV5vOS9HAjraFJ4kQ_stka0k-GnFCZ3FHs-1pqUj1k6Za-Utyjl4K8tzv7xcfVOBRZudu-DTN27nCuUi2rlqq6P8yC8V6R7yIdzYn2Bro2cagK3lMXIzdHs9HHBrihcwWO-cyD4/s640/blogger-image--256430313.jpg" /></a></div>
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRZQrEqbl76v_UB2zLqJ7r8l5DGAWDMrt4rFSN3f0gLRvOEmsP7WSExyb5UMSJ_6213opRbpSH4IhVvRq9Mg4ycXZAsNmql-R9-bUc9d6FnoKr44Kp7oEWbhzG5H_ADOkkU0cW0kbFcWs/s640/blogger-image--1819740235.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRZQrEqbl76v_UB2zLqJ7r8l5DGAWDMrt4rFSN3f0gLRvOEmsP7WSExyb5UMSJ_6213opRbpSH4IhVvRq9Mg4ycXZAsNmql-R9-bUc9d6FnoKr44Kp7oEWbhzG5H_ADOkkU0cW0kbFcWs/s640/blogger-image--1819740235.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Now that I knew everything was working properly and sounding great, it was time to circle back around and clean up my work. I mounted all the various PCB circuit boards and motherboard onto 1 piece of scrap wood i had lying around. I used some metal grommets as spacers just to ensure there is airflow beneath all these circuit boards (i have no idea if they get hot or anything)</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKrwFZ6HbxVQ-cjvYVb07WWKO4qXjG1ydZV4PIYIVoUKX7iSyrpjYGQP79A79TsPBnrLJSDttC32_ZwpdS9hNotJYsp6i5NhEVzU7MXzWPTJl_HPmYBiQEMi6OEKoKoZCEFXTVDyV55a8/s640/blogger-image--1426022836.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKrwFZ6HbxVQ-cjvYVb07WWKO4qXjG1ydZV4PIYIVoUKX7iSyrpjYGQP79A79TsPBnrLJSDttC32_ZwpdS9hNotJYsp6i5NhEVzU7MXzWPTJl_HPmYBiQEMi6OEKoKoZCEFXTVDyV55a8/s640/blogger-image--1426022836.jpg" /></a></div>
<br />
Power supply mounted without issue.<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYQBObuyN_J4pXISPEKCyNS-lGSvWhbEfBAHMla4jQY62o_NX2_1klohDAdasObDYka5u-0PQVB3BOEpY3-XIXSZNO8J-3NxQcd5geM__nJN2eirhYe83EmbsMGNlkBAMlj6ksXk1R7-Y/s640/blogger-image--1441396939.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYQBObuyN_J4pXISPEKCyNS-lGSvWhbEfBAHMla4jQY62o_NX2_1klohDAdasObDYka5u-0PQVB3BOEpY3-XIXSZNO8J-3NxQcd5geM__nJN2eirhYe83EmbsMGNlkBAMlj6ksXk1R7-Y/s640/blogger-image--1441396939.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
finally done with the mounting.</div>
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTiEpp2ZqCco2GB3TsPLUxsskOQLB6A1JweLDF0cxmbOAgCoICIi4jraBju2n_AyPSirPf_d-QMmQjEh0t357M3_Gq42DGvcSGO6n1aUtJ_dEbiUcJ8XN6y23VxtLxc_l_hWiWwXB8WKU/s640/blogger-image--1622998217.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTiEpp2ZqCco2GB3TsPLUxsskOQLB6A1JweLDF0cxmbOAgCoICIi4jraBju2n_AyPSirPf_d-QMmQjEh0t357M3_Gq42DGvcSGO6n1aUtJ_dEbiUcJ8XN6y23VxtLxc_l_hWiWwXB8WKU/s640/blogger-image--1622998217.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
next up was getting some new wood for the front face, which i would have to stain. I picked this piece of shelving pine from home depot for 8 dollars.</div>
<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmiaZE9n0tce20D4xTD557fkmBf-dYRIuv4Gf697_2vcOYRBwx9wH25TAeRt46jBhf5T2UAlLvxiI3HSjA0OxsYs0pp6jwu7sVKatFLJj7I9gFK9Uf6g5IgZWpqXyt-KSt9auekST4RQc/s640/blogger-image--1530151119.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmiaZE9n0tce20D4xTD557fkmBf-dYRIuv4Gf697_2vcOYRBwx9wH25TAeRt46jBhf5T2UAlLvxiI3HSjA0OxsYs0pp6jwu7sVKatFLJj7I9gFK9Uf6g5IgZWpqXyt-KSt9auekST4RQc/s640/blogger-image--1530151119.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I cut the panel with an old table saw I have which has a missing guide.. My dad suggested over facetime that I could just clamp a level onto any table saw and instantly have a guide. it worked flawlessly.</div>
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5cOh6KIzAT-cmoXk3KZoL89MlTlZVpgcdi24JPkc9cF294QViLpOuSbyA15sKvbFwUGFjz_fttsU1AU_U5DqdkySOrVxUz39xN4fOZjCq9FWsRkm8mHo3waVyLAcsNnWJj6Er-mB0V9g/s640/blogger-image-1811761366.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5cOh6KIzAT-cmoXk3KZoL89MlTlZVpgcdi24JPkc9cF294QViLpOuSbyA15sKvbFwUGFjz_fttsU1AU_U5DqdkySOrVxUz39xN4fOZjCq9FWsRkm8mHo3waVyLAcsNnWJj6Er-mB0V9g/s640/blogger-image-1811761366.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
The new front panel fit perfectly and it was getting exciting now to see it all coming back together keeping its original feel.</div>
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhTQ-VBpzl7eJ8QNqcmrhZOVNeKbKv53oM-mM63FD6TcbNllaz9tjw-lFwBKui4ibZtQLd6EvvmclMR1EndRXw8s3kGOHcgQygq4BR2lbjSBY1ZipDDUD7Wp6fVD-kQevu_MjE1trsgWc/s640/blogger-image-239359693.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhTQ-VBpzl7eJ8QNqcmrhZOVNeKbKv53oM-mM63FD6TcbNllaz9tjw-lFwBKui4ibZtQLd6EvvmclMR1EndRXw8s3kGOHcgQygq4BR2lbjSBY1ZipDDUD7Wp6fVD-kQevu_MjE1trsgWc/s640/blogger-image-239359693.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Next step was staining.</div>
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh48woMdjBrM1u7_bDPtG60mGx-pLBCrHy7EJ4eOl3kyqqXHDNTD8p5Uh8aRWFoM0J_2huO27EpRMru7qSDMxO5TrnhnRb0LtHe5J24H1ejQzf2Q7RmCGqXZxmAbS1jywA1W9UWgLEgVQE/s640/blogger-image-943560175.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh48woMdjBrM1u7_bDPtG60mGx-pLBCrHy7EJ4eOl3kyqqXHDNTD8p5Uh8aRWFoM0J_2huO27EpRMru7qSDMxO5TrnhnRb0LtHe5J24H1ejQzf2Q7RmCGqXZxmAbS1jywA1W9UWgLEgVQE/s640/blogger-image-943560175.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I decided to go with minwax stain, I've used it in the past and really liked the way it comes out. I'm also planning on sealing it with a minwax wipe-on poly clear coat. I'm skeptical that it will match the original piano... ESPECIALLY the satin finish, but regardless i think it will be decent enough.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPYGfrNk-RYZl_-KaP_969na_e82B-Z-YCJLuWHsbwApBalLrwJ91kROC52NjvmoWaIlb2W_XNdetlGldqukLfu1x7x4DaAr26JwqSzm2ytr7R-CdL5HHMqApyB-kAwrjZkWpWueFalB8/s640/blogger-image--961643783.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPYGfrNk-RYZl_-KaP_969na_e82B-Z-YCJLuWHsbwApBalLrwJ91kROC52NjvmoWaIlb2W_XNdetlGldqukLfu1x7x4DaAr26JwqSzm2ytr7R-CdL5HHMqApyB-kAwrjZkWpWueFalB8/s640/blogger-image--961643783.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
I ended up settling with about 5 coats of wipe-on poly clear coat, its not as smooth looking as the rest of the piano, but its close enough. The color of the stain ended up being slightly less red then I’d hoped also but once again, when you see it in context it looks good enough.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY8HyrfuvvhbWOPSoPaUvx6YTVN_m8BU_-UnUIJWTcQGCEJNaE17jpPi0xB44RZA7daDXXsXXEXGPfFfPrvqcZ8WYrfmw9iXbGitP8Ua1luqtUxC8YxpgchRpafyRHSkwvPpdFBP-5TOs/s640/blogger-image-1814856879.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY8HyrfuvvhbWOPSoPaUvx6YTVN_m8BU_-UnUIJWTcQGCEJNaE17jpPi0xB44RZA7daDXXsXXEXGPfFfPrvqcZ8WYrfmw9iXbGitP8Ua1luqtUxC8YxpgchRpafyRHSkwvPpdFBP-5TOs/s640/blogger-image-1814856879.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
One of the last steps was to get that nice red felt strip added to the bottom of the front panel. I opted for just simple dollar store felt which came in 8.5x11 inch sheets. I cut the pages into the strips i needed and used double sided tape to adhere it to the bottom of the panel.</div>
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip-4xUFINrtqeE6WM4IHKysdx_gQW4wb1yWR7PVBoiBm0-P2rmWYX5DZ9qijTXaPNi6H6TZa-qJQlLApTMMruwnz6ZcFmx6cGih4bff9xpW0OwdAhWox_EaVt08CgOF_PV5Wm0HKqszgI/s640/blogger-image--1145519001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip-4xUFINrtqeE6WM4IHKysdx_gQW4wb1yWR7PVBoiBm0-P2rmWYX5DZ9qijTXaPNi6H6TZa-qJQlLApTMMruwnz6ZcFmx6cGih4bff9xpW0OwdAhWox_EaVt08CgOF_PV5Wm0HKqszgI/s640/blogger-image--1145519001.jpg" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
All thats really left to do is to install a small cover for the left side of the keys which currently is where i have all the controls wired for power and voicing options.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLO4pYJry9_bwhzpQybPwvlJ0x25ssI9un27bqGSx3HPeBIaDpOg9Ax9t3zOeEV4CzsrmZrD14fahRGLVp4HoDdliEpYNP0-77DC9Tkl94zpGjyrTUwHS0RKeOcjJbqLBcGN9rT7Kc0oY/s640/blogger-image--718084100.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLO4pYJry9_bwhzpQybPwvlJ0x25ssI9un27bqGSx3HPeBIaDpOg9Ax9t3zOeEV4CzsrmZrD14fahRGLVp4HoDdliEpYNP0-77DC9Tkl94zpGjyrTUwHS0RKeOcjJbqLBcGN9rT7Kc0oY/s640/blogger-image--718084100.jpg" /></a></div>
<br />
In conclusion, i'd say that a project like this is really not as daunting as it seems, it took me only about 2 days (plus a few days waiting for stain to dry) to complete. anyone wanting to save an old piano that would be cost prohibitive to rebuild should definitely consider doing something like this. It really only came down to cutting 2 pieces of wood and a couple of ribbon cables..<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/Fpkl_lnWILM" width="560"></iframe><br />
<br />
I nor my wife are piano players, but here's a samplepolarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com8tag:blogger.com,1999:blog-6179213374072616645.post-37016310741236686502015-08-04T11:04:00.000-07:002015-08-04T11:05:17.958-07:00Time Machine couldn't complete the backupon a very rare occasion my Mac at home throws an error regarding backing up to Time Machine Volume which is being served off an Ubuntu server.. I've found in those cases a simple restart of the avahi-daemon (linux service for bonjour) will fix the issue.<br />
<br />
issue the following at the linux command prompt.<br />
<br />
sudo /etc/init.d/avahi-daemon restartpolarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-41939717053458714722015-07-21T08:06:00.003-07:002015-08-04T11:05:07.185-07:00Blender 3D: Flip a texture to face the opposite directionSometimes when i'm doing a 3D rendering, my texture is backwards facing the wrong direction. In the past i would painstakingly rotate my mesh 180 degrees in order to have the texture facing the proper orientation. There is an easier way. Simply go to the Texture pallet and under mapping set the Size to the following: SizeX= -1 and SizeZ= -1.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJGNi_f-w6oMT6tdMqKlnXUnh0HRC3HZNaxqJnF0-YJggO11EaRn0pFYPZS8jwSTaAVBAv34sMULv-J-4EnInv2BKIBtAhHHtb3dcxJrMqEZzqIqAKcbFz0Jw47oiB3zIpaEhzpm-2nT8/s1600/Screen+Shot+2015-07-21+at+11.02.28+AM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJGNi_f-w6oMT6tdMqKlnXUnh0HRC3HZNaxqJnF0-YJggO11EaRn0pFYPZS8jwSTaAVBAv34sMULv-J-4EnInv2BKIBtAhHHtb3dcxJrMqEZzqIqAKcbFz0Jw47oiB3zIpaEhzpm-2nT8/s320/Screen+Shot+2015-07-21+at+11.02.28+AM.png" width="320" /></a></div>
<div>
<br />
<div>
<br /></div>
<div>
<br />
<br /></div>
</div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-7576920562458325952015-05-20T07:13:00.000-07:002015-08-04T11:05:26.498-07:00How to fix eclipse if the workspace hangs while loading.<br />
occasionally eclipse fails to launch while loading your workspace, simply issue the following command from the terminal.<br />
<br />
<br />
<div class="p1">
<span class="s1"> rm ~/Documents/workspace/.metadata/.lock</span></div>
<br />polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-62218712539234029872015-04-08T10:28:00.000-07:002015-08-04T11:05:37.272-07:00convert any html file 2 PNG using PhantomJS<img alt="PhantomJS" src="http://phantomjs.org/img/phantomjs-logo.png" height="80" width="240" /><br />
<br />
<span style="color: white; font-family: 'Droid Sans', 'Lucida Grande', sans-serif; font-size: 16px; line-height: 20px;">Since PhantomJS is using WebKit, a real layout and rendering engine, it can capture a web page as a screenshot. Because PhantomJS can render anything on the web page, it can be used to convert contents not only in HTML and CSS, but also SVG and Canvas.</span><br />
<span style="color: white; font-family: 'Droid Sans', 'Lucida Grande', sans-serif; font-size: 16px; line-height: 20px;"><br /></span>
<span style="color: white; font-family: 'Droid Sans', 'Lucida Grande', sans-serif; font-size: 16px; line-height: 20px;">Beside PNG format, PhantomJS supports JPEG, GIF, and PDF.</span><br />
<span style="color: white; font-family: 'Droid Sans', 'Lucida Grande', sans-serif; font-size: 16px; line-height: 20px;"><br /></span>
<br />
<pre 0px="" 1.5em="" 13px="" 24px="" border:="" color:="fff" font-size:="" line-height:="" margin-bottom:="" padding:="" white=""><code class="language-bash" data-lang="bash" style="border: 0px; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 16px; margin: 0px; padding: 0px;">phantomjs rasterize.js http://ariya.github.io/svg/tiger.svg tiger.png</code></pre>
<span style="color: white; font-family: 'Droid Sans', 'Lucida Grande', sans-serif; font-size: 16px; line-height: 20px;">~/phantomjs/phantomjs-1.9.0-linux-x86_64/bin/phantomjs ~/phantomjs/phantomjs-1.9.0-linux-x86_64/examples/rasterize.js http://websiteAddress/file.html ~/file.png</span>polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-58597683371701102062015-03-12T07:18:00.003-07:002015-03-12T07:18:37.106-07:00Adobe Illustrator Overprinting SeparationsOccasionally I do some Silkscreening on T-shirts, and I need to overprint certain colours when outputting my postive separations.. This is the important attributes palette in illustrator that sets a selection to overprint when outputting.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5b9_iAQ429hvM7HRUlEYMClJ93QaOGPWZ4gIEVo5hnmA86afsO0SNXcsqpkcVysd7d1dR9kwLA0PtKhkCiMAz6hMhZYWiHKKKVZXH-_P5SIXYd460h5IerfOxWGUea0XJAzy4lurxM0Q/s1600/Screen+Shot+2015-03-12+at+10.15.51+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5b9_iAQ429hvM7HRUlEYMClJ93QaOGPWZ4gIEVo5hnmA86afsO0SNXcsqpkcVysd7d1dR9kwLA0PtKhkCiMAz6hMhZYWiHKKKVZXH-_P5SIXYd460h5IerfOxWGUea0XJAzy4lurxM0Q/s1600/Screen+Shot+2015-03-12+at+10.15.51+AM.png" /></a></div>
<div>
<br /></div>
polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0tag:blogger.com,1999:blog-6179213374072616645.post-50837906070240291852015-01-23T07:08:00.001-08:002015-01-23T07:17:24.627-08:00How To Set Up Apache Virtual Hosts on Ubuntu 14.04 LTS<b><br /></b>
<br />
<h2>
<b>Introduction</b></h2>
The Apache web server is the most popular way of serving web content on the internet. It accounts for more than half of all active websites on the internet and is extremely powerful and flexible.<br />
Apache breaks its functionality and components into individual units that can be customized and configured independently. The basic unit that describes an individual site or domain is called a virtual host.<br />
<br />
These designations allow the administrator to use one server to host multiple domains or sites off of a single interface or IP by using a matching mechanism. This is relevant to anyone looking to host more than one site off of a single VPS.<br />
Each domain that is configured will direct the visitor to a specific directory holding that site's information, never indicating that the same server is also responsible for other sites. This scheme is expandable without any software limit as long as your server can handle the load.<br />
In this guide, we will walk you through how to set up Apache virtual hosts on an Ubuntu 14.04 VPS. During this process, you'll learn how to serve different content to different visitors depending on which domains they are requesting.<br />
<h2>
<br /></h2>
<h2>
Prerequisites</h2>
Before you begin this tutorial, you should create a non-root user as described in steps 1-4 here.<br />
You will also need to have Apache installed in order to work through these steps. If you haven't already done so, you can get Apache installed on your server through apt-get:<br />
<blockquote class="tr_bq">
sudo apt-get update<br />
sudo apt-get install apache2</blockquote>
After these steps are complete, we can get started.<br />
For the purposes of this guide, my configuration will make a virtual host for example.com and another for test.com. These will be referenced throughout the guide, but you should substitute your own domains or values while following along.<br />
If you do not have domains available to play with, you can use dummy values.<br />
<br />
We will show how to edit your local hosts file later on to test the configuration if you are using dummy values. This will allow you to test your configuration from your home computer, even though your content won't be available through the domain name to other visitors.<br />
<h2>
<br /></h2>
<h2>
Step One — Create the Directory Structure</h2>
The first step that we are going to take is to make a directory structure that will hold the site data that we will be serving to visitors.<br />
<br />
Our document root (the top-level directory that Apache looks at to find content to serve) will be set to individual directories under the /var/www directory. We will create a directory here for both of the virtual hosts we plan on making.<br />
<br />
Within each of these directories, we will create a public_html file that will hold our actual files. This gives us some flexibility in our hosting.<br />
For instance, for our sites, we're going to make our directories like this:<br />
<blockquote class="tr_bq">
sudo mkdir -p /var/www/example.com/public_html<br />
sudo mkdir -p /var/www/test.com/public_html</blockquote>
The portions in red represent the domain names that we are wanting to serve from our VPS.<br />
<h2>
<br /></h2>
<h2>
Step Two — Grant Permissions</h2>
Now we have the directory structure for our files, but they are owned by our root user. If we want our regular user to be able to modify files in our web directories, we can change the ownership by doing this:<br />
<blockquote class="tr_bq">
sudo chown -R $USER:$USER /var/www/example.com/public_html<br />
sudo chown -R $USER:$USER /var/www/test.com/public_html</blockquote>
The $USER variable will take the value of the user you are currently logged in as when you press "ENTER". By doing this, our regular user now owns the public_html subdirectories where we will be storing our content.<br />
<br />
We should also modify our permissions a little bit to ensure that read access is permitted to the general web directory and all of the files and folders it contains so that pages can be served correctly:<br />
<blockquote class="tr_bq">
sudo chmod -R 755 /var/www</blockquote>
Your web server should now have the permissions it needs to serve content, and your user should be able to create content within the necessary folders.<br />
<h2>
<br /></h2>
<h2>
Step Three — Create Demo Pages for Each Virtual Host</h2>
We have our directory structure in place. Let's create some content to serve.<br />
We're just going for a demonstration, so our pages will be very simple. We're just going to make an index.html page for each site.<br />
<br />
Let's start with example.com. We can open up an index.html file in our editor by typing:<br />
nano /var/www/example.com/public_html/index.html<br />
In this file, create a simple HTML document that indicates the site it is connected to. My file looks like this:<br />
<blockquote class="tr_bq">
<html><br />
<head><br />
<title>Welcome to Example.com!</title><br />
</head><br />
<body><br />
<h1>Success! The example.com virtual host is working!</h1><br />
</body><br />
</html></blockquote>
Save and close the file when you are finished.<br />
We can copy this file to use as the basis for our second site by typing:<br />
<blockquote class="tr_bq">
cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html</blockquote>
We can then open the file and modify the relevant pieces of information:<br />
nano /var/www/test.com/public_html/index.html<br />
<blockquote class="tr_bq">
<html><br />
<head><br />
<title>Welcome to Test.com!</title><br />
</head><br />
<body><br />
<h1>Success! The test.com virtual host is working!</h1><br />
</body><br />
</html></blockquote>
Save and close this file as well. You now have the pages necessary to test the virtual host configuration.<br />
<h2>
<br /></h2>
<h2>
Step Four — Create New Virtual Host Files</h2>
Virtual host files are the files that specify the actual configuration of our virtual hosts and dictate how the Apache web server will respond to various domain requests.<br />
Apache comes with a default virtual host file called 000-default.conf that we can use as a jumping off point. We are going to copy it over to create a virtual host file for each of our domains.<br />
We will start with one domain, configure it, copy it for our second domain, and then make the few further adjustments needed. The default Ubuntu configuration requires that each virtual host file end in .conf.<br />
Create the First Virtual Host File<br />
Start by copying the file for the first domain:<br />
<blockquote class="tr_bq">
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf</blockquote>
Open the new file in your editor with root privileges:<br />
sudo nano /etc/apache2/sites-available/example.com.conf<br />
The file will look something like this (I've removed the comments here to make the file more approachable):<br />
<blockquote class="tr_bq">
<VirtualHost *:80><br />
ServerAdmin webmaster@localhost<br />
DocumentRoot /var/www/html<br />
ErrorLog ${APACHE_LOG_DIR}/error.log<br />
CustomLog ${APACHE_LOG_DIR}/access.log combined<br />
</VirtualHost></blockquote>
As you can see, there's not much here. We will customize the items here for our first domain and add some additional directives. This virtual host section matches any requests that are made on port 80, the default HTTP port.<br />
<br />
First, we need to change the ServerAdmin directive to an email that the site administrator can receive emails through.<br />
<blockquote class="tr_bq">
ServerAdmin admin@example.com</blockquote>
After this, we need to add two directives. The first, called ServerName, establishes the base domain that should match for this virtual host definition. This will most likely be your domain. The second, called ServerAlias, defines further names that should match as if they were the base name. This is useful for matching hosts you defined, like www:<br />
<blockquote class="tr_bq">
ServerName example.com<br />
ServerAlias www.example.com</blockquote>
The only other thing we need to change for a basic virtual host file is the location of the document root for this domain. We already created the directory we need, so we just need to alter the DocumentRootdirective to reflect the directory we created:<br />
<blockquote class="tr_bq">
DocumentRoot /var/www/example.com/public_html</blockquote>
In total, our virtualhost file should look like this:<br />
<blockquote class="tr_bq">
<VirtualHost *:80><br />
ServerAdmin admin@example.com<br />
ServerName example.com<br />
ServerAlias www.example.com<br />
DocumentRoot /var/www/example.com/public_html<br />
ErrorLog ${APACHE_LOG_DIR}/error.log<br />
CustomLog ${APACHE_LOG_DIR}/access.log combined<br />
</VirtualHost></blockquote>
Save and close the file.<br />
Copy First Virtual Host and Customize for Second Domain<br />
Now that we have our first virtual host file established, we can create our second one by copying that file and adjusting it as needed.<br />
Start by copying it:<br />
<blockquote class="tr_bq">
sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf</blockquote>
Open the new file with root privileges in your editor:<br />
sudo nano /etc/apache2/sites-available/test.com.conf<br />
You now need to modify all of the pieces of information to reference your second domain. When you are finished, it may look something like this:<br />
<blockquote class="tr_bq">
<VirtualHost *:80><br />
ServerAdmin admin@test.com<br />
ServerName test.com<br />
ServerAlias www.test.com<br />
DocumentRoot /var/www/test.com/public_html<br />
ErrorLog ${APACHE_LOG_DIR}/error.log<br />
CustomLog ${APACHE_LOG_DIR}/access.log combined<br />
</VirtualHost></blockquote>
Save and close the file when you are finished.<br />
<h2>
<br /></h2>
<h2>
Step Five — Enable the New Virtual Host Files</h2>
Now that we have created our virtual host files, we must enable them. Apache includes some tools that allow us to do this.<br />
We can use the a2ensite tool to enable each of our sites like this:<br />
<blockquote class="tr_bq">
sudo a2ensite example.com.conf<br />
sudo a2ensite test.com.conf</blockquote>
When you are finished, you need to restart Apache to make these changes take effect:<br />
sudo service apache2 restart<br />
You will most likely receive a message saying something similar to:<br />
* Restarting web server apache2<br />
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message<br />
This is a harmless message that does not affect our site.<br />
<h2>
<br /></h2>
<h2>
Step Six — Set Up Local Hosts File (Optional)</h2>
If you haven't been using actual domain names that you own to test this procedure and have been using some example domains instead, you can at least test the functionality of this process by temporarily modifying the hosts file on your local computer.<br />
<br />
This will intercept any requests for the domains that you configured and point them to your VPS server, just as the DNS system would do if you were using registered domains. This will only work from your computer though, and is simply useful for testing purposes.<br />
<br />
Make sure you are operating on your local computer for these steps and not your VPS server. You will need to know the computer's administrative password or otherwise be a member of the administrative group.<br />
If you are on a Mac or Linux computer, edit your local file with administrative privileges by typing:<br />
<blockquote class="tr_bq">
sudo nano /etc/hosts</blockquote>
If you are on a Windows machine, you can find instructions on altering your hosts file here.<br />
The details that you need to add are the public IP address of your VPS server followed by the domain you want to use to reach that VPS.<br />
<br />
For the domains that I used in this guide, assuming that my VPS IP address is 111.111.111.111, I could add the following lines to the bottom of my hosts file:<br />
<blockquote class="tr_bq">
127.0.0.1 localhost<br />
127.0.1.1 guest-desktop<br />
111.111.111.111 example.com<br />
111.111.111.111 test.com</blockquote>
This will direct any requests for example.com and test.com on our computer and send them to our server at 111.111.111.111. This is what we want if we are not actually the owners of these domains in order to test our virtual hosts.<br />
Save and close the file.<br />
<h2>
<br /></h2>
<h2>
Step Seven — Test your Results</h2>
Now that you have your virtual hosts configured, you can test your setup easily by going to the domains that you configured in your web browser:<br />
<blockquote class="tr_bq">
http://example.com</blockquote>
You should see a page that looks like this:<br />
Apache virt host example<br />
Likewise, if you can visit your second page:<br />
<blockquote class="tr_bq">
http://test.com</blockquote>
You will see the file you created for your second site:<br />
Apache virt host test<br />
<br />
If both of these sites work well, you've successfully configured two virtual hosts on the same server.<br />
If you adjusted your home computer's hosts file, you may want to delete the lines you added now that you verified that your configuration works. This will prevent your hosts file from being filled with entries that are not actually necessary.<br />
If you need to access this long term, consider purchasing a domain name for each site you need and setting it up to point to your VPS server.<br />
<h2>
<br /></h2>
<h2>
Conclusion</h2>
If you followed along, you should now have a single server handling two separate domain names. You can expand this process by following the steps we outlined above to make additional virtual hosts.<br />
There is no software limit on the number of domain names Apache can handle, so feel free to make as many as your server is capable of handling.<br />
<br />polarisx3http://www.blogger.com/profile/01359279871479143367noreply@blogger.com0