<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matthew Gyurgyik</title>
	<atom:link href="http://pyther.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://pyther.net</link>
	<description>My IT Adventures</description>
	<lastBuildDate>Mon, 29 Oct 2012 01:32:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>nxt2004 firmware</title>
		<link>http://pyther.net/2012/07/nxt2004-firmware/</link>
		<comments>http://pyther.net/2012/07/nxt2004-firmware/#comments</comments>
		<pubDate>Sat, 07 Jul 2012 03:05:58 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[dvb]]></category>
		<category><![CDATA[kwold atsc 115]]></category>
		<category><![CDATA[nxt2004]]></category>

		<guid isPermaLink="false">http://pyther.net/?p=655</guid>
		<description><![CDATA[I needed to obtain the firmware for my KWorld ATSC 115 which uses the nxt2004 demodulator. The kernel module saa7134 requires the nxt2004 firmware to operate correctly. In the past the process to obtain the firmware was easy, but now that avermedia-usa now longer makes available the driver, it was much harder to track down [...]]]></description>
				<content:encoded><![CDATA[<p>I needed to obtain the firmware for my KWorld ATSC 115 which uses the nxt2004 demodulator. The kernel module saa7134 requires the nxt2004 firmware to operate correctly. In the past the process to obtain the firmware was easy, but now that avermedia-usa now longer makes available the driver, it was much harder to track down the need firmware file.</p>
<p><strong>The problem:</strong></p>
<pre class="brush:text">m2n:~ $ /tmp/get_dvb_firmware nxt2004
--2012-07-06 22:51:22--  http://www.avermedia-usa.com/support/Drivers/AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip
Resolving www.avermedia-usa.com... 66.85.153.58
Connecting to www.avermedia-usa.com|66.85.153.58|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2012-07-06 22:51:22 ERROR 404: Not Found.

wget failed - unable to download firmware at /tmp/get_dvb_firmware line 662.</pre>
<p>I figured I could just search for AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip or dvb-fe-nxt2004.fw and be in business. Unfortunately, it was not that easy as it took me over an hour to find the file.</p>
<p>I came across <a href=" linux-firmware-nonfree_1.11_all.deb">linux-firmware-nonfree_1.11_all.deb</a> which contained nxt2004.fw</p>
<p>Since it was so hard to find the firmware file I decided to mirror it along with the original deb package that I got it from.</p>
<p><strong>Files:</strong></p>
<ul>
<li><a href="http://pyther.net/files/firmware/nxt2004/dvb-fe-nxt2004.fw">dvb-fe-nxt2004.fw</a></li>
<li><a href="http://pyther.net/files/firmware/nxt2004/linux-firmware-nonfree_1.11_all.deb">linux-firmware-nonfree_1.11_all.deb</a></li>
</ul>
<p><strong>To Install:</strong></p>
<ol>
<li><code>wget http://pyther.net/files/firmware/nxt2004/dvb-fe-nxt2004.fw</code></li>
<li><code>cp dvb-fe-nxt2004.fw /lib/firmware</code></li>
<li>reload appropriate module or reboot</li>
<li>check out dmesg to confirm firmware was loaded</li>
</ol>
<p>Hope this has helped someone&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2012/07/nxt2004-firmware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Password Manager</title>
		<link>http://pyther.net/2012/03/password-manager/</link>
		<comments>http://pyther.net/2012/03/password-manager/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 05:14:08 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[gnome-keyring]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://pyther.net/wp/?p=629</guid>
		<description><![CDATA[Best practice states that passwords should contain letters (mixed case), numbers, and symbols, should be at least 8 characters in length, and should never be used twice. However, this isn&#8217;t very practical! How are you suppose to remember a different password for each site you have an account for? I have been using 4 different [...]]]></description>
				<content:encoded><![CDATA[<p>Best practice states that passwords should contain letters (mixed case), numbers, and symbols, should be at least 8 characters in length, and should never be used twice. However, this isn&#8217;t very practical! How are you suppose to remember a different password for each site you have an account for?</p>
<p>I have been using 4 different password for my various accounts. This method has been working moderately well, but from a security standpoint, it&#8217;s suicide. I wanted to use a random password for each of my accounts. But, how would I ever remember all my passwords? A password manager, of course!</p>
<p>What I needed:</p>
<ul>
<li>Passwords stored in an encrypted file</li>
<li>Master password to unlock the encrypted file</li>
<li>View passwords from the cli/ssh</li>
<li>Include additional information such as Security Questions and Answers</li>
<li>Integrated support for Firefox</li>
</ul>
<p>What I used&#8230;</p>
<p><strong>Vim Outliner</strong></p>
<p><strong></strong><a href="https://github.com/vimoutliner/vimoutliner">Vim Outliner</a> is an outline processor. A screenshot is worth a thousand words.</p>
<p><a href="/wp/wp-content/uploads/2012/03/vim_pwdManager.png"><img class="alignnone size-full wp-image-636" title="vim_pwdManager" src="/wp/wp-content/uploads/2012/03/vim_pwdManager.png" alt="" width="724" height="354" /></a></p>
<p><em>Encryption</em></p>
<p>By default when you save the file it will be a simple tab delimited text file. Vim, however, supports encryption. First, you need to set the encryption method by typing <code>:setlocal cm=blowfish</code>. If you want Blowfish to be the default encryption method for vim add the setlocal command to ~/.vimrc. Next, to encrypt the file, type <code>:X</code>. You will be prompted to set a password. Finally, save the file. When you open the file, you will be prompted for the password. If you fail to enter the right password you will see garbage characters.</p>
<p><strong>Firefox Integration  (Mozilla-gnome-keyring)</strong></p>
<p>Mozilla-gnome-keyring allows Firefox to store passwords and form logins in gnome-keyring. Gnome-keyring is much more secure than the default password manager in Firefox. The mozilla keyring must be unlocked to add / retrieve passwords. You can define how long the keyring should remain unlocked for (never, 15 minutes, 60 minutes, etc&#8230;). On my desktop I unlock the keyring for 60 minutes, but on my laptop I only unlock it for 10. When logging into a site, Firefox still prompts to  &#8220;Remember the Password&#8221;.  If you let Firefox remember the password, the password automatically gets recorded in the keyring.</p>
<p>Conclusion</p>
<p>I have been using this solution for about a month and it has fit my needs perfectly. I updated most of my accounts so they each have an unique password such as <em>Dmqngi8ZoPyO</em> or <em>XGVoBOmd7Gar</em>. Passwords are being stored twice: in the password file and in gnome-keyring. Since mozilla-gnome-keyring takes care of adding the passwords into gnome-keyring when I login to a site, I only have to record/update my passwords in the encrypted text file. In the rare case that I&#8217;m not at my computer, and I need a password, I simply ssh into my server and open the password file in vim.</p>
<p>Although the password file and keyring is encrypted it is still subject to a brute force attack. Make sure to use a strong master password, the longer the better. I would suggest at least 20 characters. In 2009, it would take a super computer 1.5hrs to crack an 8 character (alpha only; lower-case) password, but it would take 631 Billion years to crack a 20 character (alpha only; lower-case) password. Remember, as computers advance these times will decrease. And of course, a key logger could compromise the master password nearly instantly.</p>
<p><a href="http://www.lockdown.co.uk/?pg=combi&amp;s=articles">http://www.lockdown.co.uk/?pg=combi&amp;s=articles</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2012/03/password-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>01/16/2012</title>
		<link>http://pyther.net/2012/01/01162012/</link>
		<comments>http://pyther.net/2012/01/01162012/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 20:40:28 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Screenshots]]></category>
		<category><![CDATA[openbox]]></category>
		<category><![CDATA[urxvt]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=561</guid>
		<description><![CDATA[WM: Openbox GTK: MurrinaGilouche Not much has changed. Just Wallpaper and Terminal Colors]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="/screenshots/2012-01-16.jpg"><img style="border: 1px solid #000;" src="/screenshots/2012-01-16-thumb.jpg " alt="2012-01-16" /></a></p>
<p style="text-align: center;">WM: Openbox<br />
GTK: MurrinaGilouche</p>
<p>Not much has changed. Just Wallpaper and Terminal Colors</p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2012/01/01162012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modem Power Level Graphing</title>
		<link>http://pyther.net/2011/11/modem-power-level-graphing/</link>
		<comments>http://pyther.net/2011/11/modem-power-level-graphing/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 04:05:16 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[cable]]></category>
		<category><![CDATA[modem]]></category>
		<category><![CDATA[power level]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=542</guid>
		<description><![CDATA[I wanted to monitor the downstream and upstream power levels on my Scientific-Atlantic modem (provided by my ISP). My intended goal was to keep logs of the power levels and if my modem &#8220;froze&#8221; then I could go back to the logs and look for any abnormal power levels. At first, I just logged the [...]]]></description>
				<content:encoded><![CDATA[<p>I wanted to monitor the downstream and upstream power levels on my Scientific-Atlantic modem (provided by my ISP). My intended goal was to keep logs of the power levels and if my modem &#8220;froze&#8221; then I could go back to the logs and look for any abnormal power levels.</p>
<p>At first, I just logged the power levels to a simple text file. This worked, but the aggressive logging I was doing generated a lot of data. I thought it&#8217;d be nice to see how the power levels changed throughout the day.</p>
<p>The following emerged:</p>
<p><strong>Logging Script (python)</strong></p>
<pre class="brush:python">#!/usr/bin/env python2

import urllib2
from BeautifulSoup import BeautifulSoup
from lxml import etree
from StringIO import StringIO
import sys
import datetime

URL = 'http://192.168.100.1/system.asp'

def timestamp():
    now=datetime.datetime.now()
    return now.strftime("%b %d %H:%M:%S")

def error():
    print "Error"
    return

try:
    page = urllib2.urlopen(URL, timeout=10)
except:
    print timestamp() + ": # dBmV (rx), # dBmV (tx)"
    sys.exit()

soup = BeautifulSoup(page)

# Remove   markups, because they break the XML parser.
f = StringIO(str(soup.findAll('tbody')[0]).replace(' ', ''))

dom = etree.parse(f)
nodes = dom.xpath('//font')
# We take every value we can get, but do not use them, yet
modemvalues = []
for i in xrange(0, len(nodes), 2):
    modemvalues.append((nodes[i].text, nodes[i+1].text.strip()))

rpl = float(modemvalues[5][1].split(' ')[0]) # dBmV
tpl = float(modemvalues[6][1].split(' ')[0]) # dBmV

print timestamp() + ": " + str(rpl) + " dBmV (rx), " + str(tpl) +" dBmV (tx)"</pre>
<p><em>Usage:</em> ./getModemPl.py &gt;&gt; logFile (cron job)</p>
<p><strong>Output:</strong></p>
<pre class="brush:plain">Nov 06 22:30:41: 0.7 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:31:41: 0.8 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:32:41: 0.9 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:33:41: 0.5 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:34:41: 0.5 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:35:41: 0.5 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:36:41: 0.6 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:37:41: 0.7 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:38:41: 0.7 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:39:41: 0.7 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:40:41: 0.7 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:41:41: 0.6 dBmV (rx), 35.4 dBmV (tx)
Nov 06 22:42:41: 0.7 dBmV (rx), 35.4 dBmV (tx)</pre>
<p><strong>Graph Generator (takes every 5th log entry)</strong></p>
<pre class="brush:bash">#!/bin/bash

if [[ ! $1 ]]; then
    echo "No File to Parse"
    exit
fi

startRange=$2
endRange=$3

tmpDir="/tmp"
currentDir="$PWD"
logFile="$1"
data="/tmp/modempowerdata"

# Takes every sample from log File
#cat $logFile | sed 's/.dBmV.(rx),//' | sed 's/.dBmV.(tx)//' | sed 's/: / /'  | perl -pe 's/(.*?)\s(.*?)\s(.*)/$1-$2-$3/;' &gt; $data

# Takes every 5th sample (we log every minute)
cat $logFile | sed 's/.dBmV.(rx),//' | sed 's/.dBmV.(tx)//' | sed 's/: / /'  | sed -n 'p;n;n;n;n;' | perl -pe 's/(.*?)\s(.*?)\s(.*)/$1-$2-$3/;' &gt; $data

date=$(head -1 $logFile | cut -d' ' -f1,2)
date2=$(echo $date | sed 's/ /-/')

png="$currentDir/$date2.png"
svg="$currentDir/$date2.svg"

#rm "$data"

plot=""

cat &lt;&lt; EOF | gnuplot
#
# --- gnuplot ---
#
# PNG output
#set terminal png enhanced size 1400,900
set terminal pngcairo size 1200,600 enhanced font 'Verdana,10'
set output "$png"

# SVG Output
#set terminal svg enhanced size 1440,900

# Adds White Background to SVG
set object 1 rect from screen 0, 0, 0 to screen 1, 1, 0 behind
set object 1 rect fc  rgb "white"  fillstyle solid 1.0
#set output "$svg"

# Line Sytes
set style line 1 lc rgb "#8b1a0e" pt 1 ps 1 lt 1 lw 2
set style line 2 lc rgb "#5e9c36" pt 6 ps 1 lt 1 lw 2
set style line 12 lc rgb '#808080' lt 0 lw 1

set timefmt "%b-%d-%H:%M:%S"
set grid
#set grid back ls 12
set key left box
set title "$date - Power Levels"

# X Label
set xdata time
set format x "%H:%M"
#set xlabel "Time"

# Y Data
set ylabel "dBmV (rx)"
#set yrange [-2:2]
#set ytics 0.2
set yrange [-1.6:4.4]
set ytics 0.2

# Y2 Data
set y2range [31:37]
set y2label "dBmV (tx)"
set y2tics 0.2

plot "$data" u 1:2 ls 1 axis x1y1 ti "rx" with lines, "$data" u 1:3 ls 2 axis x1y2 t "tx" with lines

EOF</pre>
<p><em>Notes:</em></p>
<ul>
<li>Usage: ./graphModemPower.bash /path/to/logfile</li>
<li>Modify yrange and y2range to scale to appropriate power levels for you</li>
</ul>
<p><strong>Graph:</strong></p>
<p><a href="http://pyther.net/blog/wp-content/uploads/2011/11/Nov-05.png"><img class="alignnone size-large wp-image-547" title="Nov-05" src="http://pyther.net/blog/wp-content/uploads/2011/11/Nov-05-1024x512.png" alt="" width="800" /></a></p>
<p>&nbsp;</p>
<p>Feel free to use the scripts,  they work for me, and hopefully they work for you. As always, use at your own risk.</p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2011/11/modem-power-level-graphing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weather Underground Script</title>
		<link>http://pyther.net/2011/10/weather-underground-script/</link>
		<comments>http://pyther.net/2011/10/weather-underground-script/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 19:01:28 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=527</guid>
		<description><![CDATA[Since weather.com is ending their free XOAP service conkyForecast will no longer work at the end of this month. Therefore I wrote a small script to get the temperature and condition from Weather Underground #!/usr/bin/python # # Fetches Weather info from Weather Underground # # Usage: ./wundergound.py zipcode # # International: # * Go to [...]]]></description>
				<content:encoded><![CDATA[<p>Since weather.com is ending their free XOAP service conkyForecast will no longer work at the end of this month.</p>
<p>Therefore I wrote a small script to get the temperature and condition from Weather Underground</p>
<pre class="brush:python">#!/usr/bin/python
#
# Fetches Weather info from Weather Underground
#
# Usage: ./wundergound.py zipcode
#
# International:
#  * Go to http://www.wunderground.com/
#  * Find your city
#  * Click the RSS icon
#  * Station ID is the number that follows /stations/ in the url
#
#

# Values are either True or False
metric=False
international=False

import sys
import feedparser

def usage():
    print("Usage:")
    if international:
        print("  ./wunderground.py StationID")
    else:
        print("  ./weunderground.py zipcode")
    sys.exit(1)

if not len(sys.argv) == 2:
    usage()

location=sys.argv[1]

if international:
    url="http://rss.wunderground.com/auto/rss_full/global/stations/"
else:
    url="http://rss.wunderground.com/auto/rss_full/"

feed=feedparser.parse(url+location)

if not feed.feed:
    # Assume Error
    print("Error")
    sys.exit(1)

current=feed['items'][0].title

if metric:
    temp=current.split(",")[0].split(":")[1].split("/")[1].strip()
else:
    temp=current.split(",")[0].split(":")[1].split("/")[0].strip()

condition=current.split(",")[1].split("-")[0].strip()

print('%s - %s' % (temp, condition))</pre>
<p>&nbsp;</p>
<p><strong>Example:</strong></p>
<p style="padding-left: 30px;"><code><br />
$ ./wunderground 11201<br />
69.6F - Clear<br />
</code></p>
<p>I&#8217;m using this script for my conky config:</p>
<pre>${execi 600 /home/pyther/scripts/wunderground 11201}</pre>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2011/10/weather-underground-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Make Windows 7 USB installer in Linux</title>
		<link>http://pyther.net/2011/09/make-windows-7-usb-installer-in-linux/</link>
		<comments>http://pyther.net/2011/09/make-windows-7-usb-installer-in-linux/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 14:50:39 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=516</guid>
		<description><![CDATA[So for whatever reason you need to install Windows 7 from a flash drive that&#8217;s not a problem! In Linux: Format flash drive: mkfs.vfat -F 32 /dev/sdx Set Label: mlabel -i /dev/sdd1 ::WIN7x64 (optional) Download Grub4Dos &#8211; http://download.gna.org/grub4dos/ unzip grub4dos-0.4.4.zip Run ./bootlace.com /dev/sdx Copy grldr and menu.lst to the root of the flash drive Add [...]]]></description>
				<content:encoded><![CDATA[<p>So for whatever reason you need to install Windows 7 from a flash drive that&#8217;s not a problem!</p>
<p><strong>In Linux:</strong></p>
<ol>
<li>Format flash drive: <code>mkfs.vfat -F 32 /dev/sdx</code></li>
<li>Set Label: <code>mlabel -i /dev/sdd1 ::WIN7x64 (optional)</code></li>
<li>Download Grub4Dos &#8211; <a href="http://download.gna.org/grub4dos/">http://download.gna.org/grub4dos/</a></li>
<li><code>unzip grub4dos-0.4.4.zip</code></li>
<li>Run <code>./bootlace.com /dev/sdx</code></li>
<li>Copy <strong>grldr</strong> and <strong>menu.lst</strong> to the root of the flash drive</li>
<li>Add to menu.lst
<pre class="brush:text">title Install Windows 7
root (hd0,0)
chainloader (hd0,0)/bootmgr</pre>
</li>
<li>Copy Win 7 Install files to root of USB flash drive.</li>
<li>Boot Flash Drive &#8211; Select Install Windows 7</li>
</ol>
<p><strong>TIP:</strong> To install any version of Windows 7 (Home Premium, Professional, Ultimate) remove ei.cfg from the sources directory. However, you still need a product key for the appropriate version.</p>
<p><strong>In Windows:</strong></p>
<ol>
<li>Format Drive as Fat32</li>
<li>Copy Files from Install DVD to Flash drive</li>
</ol>
<p>That&#8217;s it, boot from the flash drive you are all good.<br />
<strong></strong></p>
<p><strong>Note:</strong> The windows disk formater writes code to the MBR and VBR. This obvisouly doesn&#8217;t happen in Linux therefore we need to use grub4dos as our bootloader.</p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2011/09/make-windows-7-usb-installer-in-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Remote Assistance &#8211; Win XP/Vista/7</title>
		<link>http://pyther.net/2011/06/remote-assistance-win-xpvista7/</link>
		<comments>http://pyther.net/2011/06/remote-assistance-win-xpvista7/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 15:38:03 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[offer ra]]></category>
		<category><![CDATA[remote assistance]]></category>
		<category><![CDATA[whoami]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[windows server 2008 r2]]></category>
		<category><![CDATA[windows vista]]></category>
		<category><![CDATA[windows xp]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=475</guid>
		<description><![CDATA[I was looking for a solution that would allow me to remotely connect to machines on the local network. We often get phone calls form users asking for help. It is way easier to provide help if we can see their screens and we usually end up having to visit their workstation. This can be [...]]]></description>
				<content:encoded><![CDATA[<p>I was looking for a solution that would allow me to remotely connect to machines on the local network. We often get phone calls form users asking for help. It is way easier to provide help if we can see their screens and we usually end up having to visit their workstation. This can be time consuming, especially when we are in the middle of a project.</p>
<p>In my search, I came across a wonderful gem called <strong>Microsoft Remote Assistance</strong> which happens to be included in Windows XP/Vista/7.</p>
<p><strong>How does it Work?</strong></p>
<ol>
<li>Tech enters the Machine name of the client that he/she wants to provide Remote Assistance to.</li>
<li>User is prompted to allow Tech to view their computer (Yes/No)</li>
<li>Tech then can request to take control</li>
<li>Again, the user is prompted to allow the tech to take control</li>
</ol>
<p><strong>Enabling Remote Assistance on the Domain (via Group Policy)</strong></p>
<p>Computer Configuration -&gt; Policies -&gt; Admin Templates -&gt; System -&gt; Remote Assistance</p>
<ul>
<li>Offer Remote Assistance -&gt; Enable</li>
<li>Solicited Remote Assistance -&gt; Disable (If you don&#8217;t want your users requesting others for Remote Assistance)</li>
</ul>
<p><a href="/wp/wp-content/uploads/2011/06/RA_gpedit.jpg"><img class="alignnone size-medium wp-image-480" title="RA_gpedit" src="/wp/wp-content/uploads/2011/06/RA_gpedit-300x183.jpg" alt="" width="300" height="183" /></a></p>
<p>You then have two choices &#8220;Allow helpers to control the computer&#8221; or &#8220;Allow helpers to only view the computer&#8221;. In addition to selecting one of these choices, you have to add the users and groups that should be able to provide remote assistance.</p>
<p><a href="/wp/wp-content/uploads/2011/06/RA_gpedit2.jpg"><img class="alignnone size-medium wp-image-481" title="RA_gpedit2" src="/wp/wp-content/uploads/2011/06/RA_gpedit2-282x300.jpg" alt="" width="282" height="300" /></a></p>
<p><strong>Offering Remote Assistance</strong></p>
<ul>
<li>Start -&gt; All Programs -&gt; Maintenance -&gt; Windows Remote Assistance or type in msra.exe</li>
<li>Click &#8220;Help Someone who has invited you&#8221;</li>
<li>Click &#8220;Advance connection option for the help desk&#8221;</li>
<li>Lastly, enter the machine name or ip address of the machine you want to provide Remote Assistance to</li>
</ul>
<p><a href="/wp/wp-content/uploads/2011/06/ra_connect.jpg"><img class="alignnone size-medium wp-image-485" title="ra_connect" src="/wp/wp-content/uploads/2011/06/ra_connect-300x210.jpg" alt="" width="300" height="210" /></a></p>
<p>&nbsp;</p>
<p><strong>How can I possibly remember all the host names?</strong></p>
<p>I&#8217;ve created a small C# application that you can have your users run. I would put it on a shared drive and push out a shortcut via group policy.</p>
<p>WhoAmI</p>
<p><a href="/wp/wp-content/uploads/2011/06/whoami.jpg"><img class="alignnone size-full wp-image-487" title="whoami" src="/wp/wp-content/uploads/2011/06/whoami.jpg" alt="" width="298" height="216" /></a></p>
<p>Source: <a href="http://pyther.net/files/RA/WhoAmI.zip">WhoAmI.zip</a><br />
Bin: Included in source ./WhoAmI/bin/Release/WhoAmI.exe</p>
<p><strong>Offering Remote Assistance &#8211; A nice GUI app</strong></p>
<p>Although the method mentioned above works it is long and convoluted. I put together a small  C# app to easily offer Remote Assistance to a user.</p>
<p><a href="/wp/wp-content/uploads/2011/06/offer_ra.jpg"><img class="alignnone size-full wp-image-489" title="offer_ra" src="/wp/wp-content/uploads/2011/06/offer_ra.jpg" alt="" width="303" height="207" /></a></p>
<p>The app simply calls <code>msra.exe /offerra &lt;hostname&gt;</code></p>
<p>Source: <a href="http://pyther.net/files/RA/RemoteAssistance.zip">RemoteAssistance.zip</a><br />
Bin: Included in souce ./RemoteAssistance/bin/Release/RemoteAssitance.exe</p>
<p><em>Ideas for the two Easy GUI apps came from SYNACK over at edugeek. <a href="http://www.edugeek.net/forums/coding/49448-easy-gui-remote-assistance-support.html">http://www.edugeek.net/forums/coding/49448-easy-gui-remote-assistance-support.html</a></em></p>
<p><strong>More Information:</strong><a href="http://windows.microsoft.com/en-US/windows-vista/Windows-Remote-Assistance-frequently-asked-questions"></a></p>
<ul>
<li><a href="http://windows.microsoft.com/en-US/windows-vista/Windows-Remote-Assistance-frequently-asked-questions">http://windows.microsoft.com/en-US/windows-vista/Windows-Remote-Assistance-frequently-asked-questions</a></li>
<li> <a href="http://technet.microsoft.com/en-us/library/bb457004.aspx">Step-by-Step Guide to Remote Assistance</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2011/06/remote-assistance-win-xpvista7/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DNS Conditional Forwarding &#8211; dnsmasq</title>
		<link>http://pyther.net/2010/12/dns-conditional-forwarding-dnsmasq/</link>
		<comments>http://pyther.net/2010/12/dns-conditional-forwarding-dnsmasq/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 17:00:50 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[dnsmasq]]></category>
		<category><![CDATA[openvpn]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=427</guid>
		<description><![CDATA[Why would I want to use Conditional Forwarding? In my case, my local dns server has entries for local hostnames such as m2n.ion.lan, mongo.ion.lan, and tux.ion.lan. If I am using the vpn dns, then these address lookups would fail. By using Conditional Forwarding I can do all lookups locally, except for ones that match the [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Why would I want to use Conditional Forwarding?</strong></p>
<p>In my case, my local dns server has entries for local hostnames such as m2n.ion.lan, mongo.ion.lan, and tux.ion.lan. If I am using the vpn dns, then these address lookups would fail. By using Conditional Forwarding I can do all lookups locally, except for ones that match the remote top level domain (example.local). Anything that matches example.local would be forwarded to the remote dns server.</p>
<p><strong>Problem:</strong></p>
<ol>
<li>Connect to remote vpn server and use local DNS server</li>
<li>Ping server.remote.local (remote FQDN) &#8211; fail</li>
<li>Ping server.ion.lan (local FQDN) &#8211; success</li>
</ol>
<p>Of course the remote ping fails because the local DNS server knows nothing about the remote domain. If I was to configure my machine to use the remote DNS server the opposite would happen. I would be able to ping <em>server.remote.local</em>, but a ping to<em> server.ion.lan</em> would fail.</p>
<p><strong>Solution:</strong> Use dnsmasq with conditional forwarding to forward <em>*.work.local</em> requests to the remote dns server.</p>
<p>1. Install dnsmasq using your local package manager</p>
<p>2. Edit <code>/etc/dnsmasq.conf</code></p>
<pre class="brush:plain"># Tells dnsmasq to forward anything with the domain of remote.local to dns server 10.25.11.2
server=/remote.local/10.25.11.2

# Listen to requests only coming from the local machine
listen-address=127.0.0.1

# Do not cache anything
# A decent dns server will already cache for your local network
cache-size=0</pre>
<p>3. Edit <code>/etc/resolv.conf</code></p>
<pre class="brush:plain"># Local LAN Domain
domain ion.lan

# local dnsmasq server
nameserver 127.0.0.1

# Your main dns server (dnsmasq will forward all requests to this server)
nameserver 10.20.1.1</pre>
<p>4. Start dnsmasq</p>
<p>5. Test &#8211; ping a local server and remote server using the FQDN</p>
<p>All dns requests will be forwarded to 10.20.1.1 except any matching <em>*.remote.local</em>. <em>server.remote.local</em> will be forwarded to 10.25.11.2</p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2010/12/dns-conditional-forwarding-dnsmasq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenVPN Client &#8211; DNS Script</title>
		<link>http://pyther.net/2010/12/openvpn-client-dns-script/</link>
		<comments>http://pyther.net/2010/12/openvpn-client-dns-script/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 04:16:23 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[openvpn]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=418</guid>
		<description><![CDATA[The OpenVPN server can pass DNS servers and a domain name to the client. This gives the benefit of using the remote dns servers for local hostname lookups. Finding a good script that worked to do this provide difficult&#8230; In server.conf add: push "dhcp-option DOMAIN ion.lan" push "dhcp-option DNS 10.25.11.2" Then save this script on [...]]]></description>
				<content:encoded><![CDATA[<p>The OpenVPN server can pass DNS servers and a domain name to the client. This gives the benefit of using the remote dns servers for local hostname lookups.</p>
<p>Finding a good script that worked to do this provide difficult&#8230;</p>
<p>In server.conf add:</p>
<pre>
push "dhcp-option DOMAIN ion.lan"
push "dhcp-option DNS 10.25.11.2"
</pre>
<p>Then save this script on the client in same location as the client config</p>
<pre class="brush:bash">
#!/bin/bash

case "$1" in
    up)
	    mv /etc/resolv.conf /etc/resolv.conf.bak

		echo "# Generated by OpenVPN Client UP Script" > /etc/resolv.conf
		for opt in ${!foreign_option_*};
		do
	        echo ${!opt} | sed -e 's/dhcp-option DOMAIN/domain/g' -e 's/dhcp-option DNS/nameserver/g' >> /etc/resolv.conf
        done
        ;;
    down)
        mv /etc/resolv.conf.bak /etc/resolv.conf
        ;;
    *)
        echo "Pass either UP or DOWN"
        ;;
esac
</pre>
<p>In the client.conf add</p>
<pre>
script-security 2

up "./vpn_dns_update.sh up"
down "./vpn_dns_update.sh down"
</pre>
<p>Now connect and check /etc/resolv.conf to see if the VPN nameserver and domain is listed.</p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2010/12/openvpn-client-dns-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syslinux</title>
		<link>http://pyther.net/2010/11/syslinux/</link>
		<comments>http://pyther.net/2010/11/syslinux/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 03:16:33 +0000</pubDate>
		<dc:creator>Pyther</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bootloader]]></category>
		<category><![CDATA[Syslinux]]></category>

		<guid isPermaLink="false">http://pyther.net/blog/?p=387</guid>
		<description><![CDATA[Syslinux is a simple bootloader for fat, ext2/3/4, and brtfs. Syslinux works in the following way (in a nutshell): MBR looks for the active partition (the one tagged as bootable) The MBR loads the code found on the partition&#8217;s boot sector and executes it This code then loads the rest of the boot loader code [...]]]></description>
				<content:encoded><![CDATA[<p>Syslinux is a simple bootloader for fat, ext2/3/4, and  brtfs.</p>
<p>Syslinux works in the following way (in a nutshell):</p>
<ol>
<li>MBR looks for the active partition (the one tagged as bootable)</li>
<li>The MBR loads the code found on the partition&#8217;s boot sector and executes it</li>
<li>This code then loads the rest of the boot loader code from /boot partition (file: ldlinux.sys)</li>
<li>COM32 modules are loaded to provide extra functionality such as a graphical menu or chain loading</li>
</ol>
<p>For a more detailed explanation: <a href="https://wiki.archlinux.org/index.php/Syslinux#Syslinux_Boot_Process">https://wiki.archlinux.org/index.php/Syslinux#Syslinux_Boot_Process</a></p>
<p>Sample configuration:</p>
<pre class="brush:plain">UI vesamenu.c32
DEFAULT arch
PROMPT 0
MENU TITLE Boot Menu
MENU BACKGROUND splash.png
TIMEOUT 100

MENU WIDTH 78
MENU MARGIN 4
MENU ROWS 5
MENU VSHIFT 10
MENU TIMEOUTROW 13
MENU TABMSGROW 11
MENU CMDLINEROW 11
MENU HELPMSGROW 16
MENU HELPMSGENDROW 29

# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu

MENU COLOR border       30;44   #40ffffff #a0000000 std
MENU COLOR title        1;36;44 #9033ccff #a0000000 std
MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel        37;44   #50ffffff #a0000000 std
MENU COLOR help         37;40   #c0ffffff #a0000000 std
MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07        37;40   #90ffffff #a0000000 std
MENU COLOR tabmsg       31;40   #30ffffff #00000000 std

LABEL arch
	MENU LABEL Arch Linux
	LINUX /vmlinuz26
	APPEND root=/dev/sda2 ro nomodeset
	INITRD /kernel26.img

LABEL archfallback
	MENU LABEL Arch Linux Fallback
	LINUX /vmlinuz26
	APPEND root=/dev/sda2 ro nomodeset
	INITRD /kernel26-fallback.img
</pre>
<p>As you can see, the majority of the config contains MENU statements declaring colors and positing for the menu. If you removed all the MENU statements, the config would be less than 20 lines.</p>
<p>Screenshot:</p>
<p><a rel="attachment wp-att-403" href="http://pyther.net/blog/index.php/2010/11/syslinux/syslinux-2/"><img class="alignnone size-full wp-image-403" title="syslinux" src="http://pyther.net/blog/wp-content/uploads/2010/11/syslinux.png" alt="Syslinux Graphical Boot Menu" width="415" height="311" /></a></p>
<p>I was lazy and took a screenshot of the Arch Linux installer menu. The configuration above generates the same menu, except there are only two boot choices, Arch Linux and Arch Linux Fallback.</p>
<p>The arch wiki has a whole lot of good information on configuring Syslinux. <a href="https://wiki.archlinux.org/index.php/Syslinux">https://wiki.archlinux.org/index.php/Syslinux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pyther.net/2010/11/syslinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
