<?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>Adam Haeder</title>
	<atom:link href="http://adamhaeder.com/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamhaeder.com/wordpress</link>
	<description>Your friendly neighborhood geek</description>
	<lastBuildDate>Thu, 29 Jul 2010 21:12:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>How to add a daily digest email to Kunena forums (Joomla)</title>
		<link>http://adamhaeder.com/wordpress/2010/05/13/how-to-add-a-daily-digest-email-to-kunena-forums-joomla/</link>
		<comments>http://adamhaeder.com/wordpress/2010/05/13/how-to-add-a-daily-digest-email-to-kunena-forums-joomla/#comments</comments>
		<pubDate>Thu, 13 May 2010 19:04:14 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[kunena]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=1429</guid>
		<description><![CDATA[Kunena is a common freely available add-on for the Joomla content management system that gives you the ability to add a message board or forum to your joomla website, with moderation, threads, document uploads, and many other features. The only main feature that seems to be missing is the ability to send all users a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kunena.com">Kunena</a> is a common freely available add-on for the <a href="http://joomla.org">Joomla</a> content management system that gives you the ability to add a message board or forum to your joomla website, with moderation, threads, document uploads, and many other features. The only main feature that seems to be missing is the ability to send all users a regular digest of postings made over a certain period of time. Daily digest functionality exists in other forum software, like Yahoo! Groups and others, and a number of people on the <a href="http://kunena.com/forum">Kunena message boards</a> have talked about wanting such a feature.</p>
<p>I recently helped a local user group migrate from a Yahoo! Groups page to their own website running Joomla for content management and Kunena for forum functionality. They really like the daily digest option Yahoo! offered, so I figured out a way to implement that in the Kunena forum software.</p>
<p>Disclaimer: I&#8217;m not a Joomla developer, and this solution has really nothing to do with Joomla. I&#8217;m a Linux systems administrator, so my preferred method of approaching this problem was to write a script that would query the database directly, finding the posts made in the last 24 hours, putting them in an html page, and then emailing that page to all the registered users. So this solution is not as simple as &#8216;install this joomla module&#8217;, or &#8216;check this configuration option&#8217;. But it does work very well.</p>
<p>First, I wanted to give the users the ability to opt-out of the email if they wished. Rather than modify one of the existing joomla tables to store this opt-out option, I created a new mysql table:</p>
<pre>mysql&gt; describe digest;

+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| username      | varchar(100) | NO   | PRI | NULL    |       |
| receivedigest | char(5)      | NO   |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
2 rows in set (0.25 sec)</pre>
<p>Here is the sql used to create this table:</p>
<pre class="brush:sql">CREATE TABLE `digest` (
`username` varchar(100) NOT NULL,
`receivedigest` char(5) NOT NULL,
PRIMARY KEY  (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1</pre>
<p>The thinking behind this is that everyone is going to get the digest by default. If they choose to opt-out, I will put their username in this table with a value of &#8216;no&#8217; for the receivedigest field. If they change their mind and want it again, I can either erase them from the table, or change the value to &#8216;yes&#8217;.</p>
<p>Now, you need to create the page that people will use to manage their preferences. I created a directory called &#8220;custom&#8221; underneath the main directory of my Joomla install to store custom php scripts that are called within Joomla. Here is the first, digest.php:</p>
<pre class="brush:php">&lt;html&gt;&lt;body&gt;
&lt;?php
global $my;
$username = "$my-&gt;username";
$dbusername="SQLUSER";
$password="SQLPASSWORD";
$database="SQLDATABASE";
$dbserver="SQLSERVER";
$dbtable="digest";

### / Initial mysql connection
mysql_connect($dbserver,$dbusername,$password) or die (" Can't connect");
@mysql_select_db($database) or die( "Unable to select database");

$query = "SELECT * FROM $dbtable where username = '$username';";
$query_result=mysql_query($query);
$query_num=mysql_numrows($query_result);
$i=0;
$result="yes";
while ($i &lt; $query_num)
{
 $result="";
 $result=mysql_result($query_result,$i,"receivedigest");
 $i++;
}

if ( $result == "yes" )
{
 $checked="checked";
}
else
{
 $checked="";
}

print "Hello $username!&lt;br&gt;&lt;br&gt;";
?&gt;

&lt;form name="digest" id="digest" action="custom/digest_submit.php" method="POST"&gt;
&lt;input type="hidden" name="username" value="&lt;?php print "$username" ?&gt;"&gt;
&lt;input &lt;? echo "$checked"; ?&gt; name="receive_digest" TYPE="CHECKBOX" VALUE="yes"&gt;Check this to receive the daily digest via email&lt;br&gt;
&lt;br&gt;&lt;input type="submit" value="Submit"/&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Once the user has made their decision, they submit the form which submits to this page:</p>
<pre class="brush:php">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html lang="en" xml:lang="en"&gt;
&lt;head&gt;
&lt;META HTTP-EQUIV=Refresh CONTENT="3; URL=http://website"&gt;
&lt;/head&gt;
&lt;?php
$dbusername="SQLUSER";
$password="SQLPASSWORD";
$database="SQLDATABASE";
$dbserver="SQLSERVER";
$dbtable="digest";

mysql_connect($dbserver,$dbusername,$password) or die ("Sorry! I couldn't connect to the database! Please try again later");
@mysql_select_db($database) or die( "Unable to select database");

# User submitted variables
$insert_date=date("Y-m-d H:i:s");
$count=1;

$username= mysql_real_escape_string($_POST["username"]);
$receive_digest= mysql_real_escape_string($_POST["receive_digest"]);
if ( $receive_digest == "" )
{
 $receive_digest = "no";
}

$insert = "REPLACE INTO $dbtable ( username, receivedigest ) VALUES ( '$username','$receive_digest')";
$result=mysql_query($insert);
mysql_close();

print "&lt;h2&gt;Preferences Updated.&lt;/h2&gt;";
?&gt;</pre>
<p>Now that you have a preference page, it&#8217;s time to actually write the program that find the daily posts and sends the email. Here it is:</p>
<pre class="brush:bash">#!/bin/bash
TMPDIR=/tmp/digest.$$
rm -Rf ${TMPDIR}
mkdir -p ${TMPDIR}
outfile="${TMPDIR}/digest.html"
outfile2="${TMPDIR}/digest2.html"
email_file="${TMPDIR}/email"
today=`date --date "yesterday" +%Y-%m-%d`
mysql_line="mysql -s -uSQLUSER -pSQLPASSWORD -hSQLSERVER SQLDATABASE"

echo "&lt;html&gt;
&lt;body&gt;
&lt;h2&gt;Message Board Digest for ${today}&lt;/h2&gt;
You are receiving this email because you are subscribed to the daily digest of the message board. To change your subscription, log into &lt;a href=\"http://website\"&gt;website&lt;/a&gt; and click \"Daily Digest Options\" from the User Menu.
&lt;br&gt;
&lt;hr&gt;
&lt;table border=1&gt;
&lt;tr&gt;
&lt;td&gt;
Message Date
&lt;/td&gt;
&lt;td&gt;
Posted By
&lt;/td&gt;
&lt;td&gt;
Subject
&lt;/td&gt;
&lt;/tr&gt;
" &gt; ${outfile}

echo "select a.catid,a.thread,from_unixtime(a.time),a.name,a.subject,b.message from jos_fb_messages a,jos_fb_messages_text b where a.id = b.mesid;" | ${mysql_line} | tr "\t" "|" | sed s/"\\\t"/"\&amp;nbsp;"/g | sed s/"\\\n"/"&lt;br&gt;"/g | while read line;
do
 catid=`echo ${line} | cut -d"|" -f1`
 msgid=`echo ${line} | cut -d"|" -f2`
 msgdate=`echo ${line} | cut -d"|" -f3`
 user=`echo ${line} | cut -d"|" -f4`
 subject=$(echo ${line} | cut -d"|" -f5 |  sed -r s/"\\\\"/""/g)
 message=$(echo ${line} | cut -d"|" -f6 |\
 sed -r s/"url\]"/"url]\n"/g |\
 sed -r s/"\[\/url\]"/"&lt;\/a&gt;"/g |\
 sed -r s/"\[url=(.+)\]"/"&lt;a href=\"\\1\"&gt;"/g |\
 sed -r s/"img\]"/"img]\n"/g |\
 sed -r s/"\[\/img\]"/"\"&gt;"/g |\
 sed -r s/"\[img\]"/"&lt;img src=\""/g |\
 sed -r s/"\[b\]"/"&lt;b&gt;"/g |\
 sed -r s/"\[\/b\]"/"&lt;\/b&gt;"/g |\
 sed -r s/"\\\\"/""/g)
 if [[ "${msgdate}" =~ ${today}.+ ]]; then
  echo "&lt;tr&gt;&lt;td&gt;${msgdate}&lt;/td&gt;&lt;td&gt;${user}&lt;/td&gt;&lt;td&gt;&lt;a href=\"#${msgid}\"&gt;${subject}&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;" &gt;&gt; ${outfile}
  echo "&lt;hr&gt;&lt;a name=\"${msgid}\"&gt;${msgdate} from ${user}&lt;/a&gt;&lt;br&gt;&lt;b&gt;&lt;a href=\"http://website/message-board/${catid}/${msgid}\"&gt;${subject}&lt;/a&gt;&lt;/b&gt;&lt;br&gt;${message}&lt;br&gt;&lt;br&gt;" &gt;&gt; ${outfile2}
 fi
done

echo "&lt;hr&gt;" &gt;&gt; ${outfile2}
echo "&lt;/table&gt;&lt;br&gt;" &gt;&gt; ${outfile}
cat ${outfile2} &gt;&gt; ${outfile}
echo "&lt;/body&gt;&lt;/html&gt;" &gt;&gt; ${outfile}

# figure out who to send the digest to
# for some reason, I stored the table that indicates whether or not a user wants to get the digest in a
# different database than the joomla site was stored in. The first database is "DB1", the joomla database is "DB2"
# modify accordingly for your setup
echo "select DB2.jos_users.email  from DB2.jos_users LEFT JOIN DB1.digest on DB2.jos_users.username = DB1.digest.username where (DB1.digest.receivedigest &lt;&gt; 'no' or DB1.digest.receivedigest IS NULL) and DB2.jos_users.username &lt;&gt; 'admin';" | ${mysql_line} &gt; ${TMPDIR}/list_to_email

for item in `cat ${TMPDIR}/list_to_email`
do
 # append SMTP header
 # replace SENDTO with the appropriate To:
 echo "HELO myserverhostname.com
 MAIL FROM: admin@website
 RCPT TO: SENDTO
 DATA
 From: Daily Digest &lt;admin@website&gt;
 To: SENDTO
 Subject: Daily Digest for $today
 MIME-Version: 1.0
 Content-Type: text/html; charset=us-ascii
 Content-Transfer-Encoding: 7bit" | sed "s/SENDTO/${item}/g" &gt; ${email_file}
 # need an extra newline to conform to HTTP protocol
 # this separates the header from the content
 echo "" &gt;&gt; ${email_file}
 cat ${outfile} &gt;&gt; ${email_file}
 # Tell the mail server we are done
 echo ".
quit" &gt;&gt; ${email_file}
 echo "sending to ${item}"
 cat ${email_file} | /usr/bin/nc localhost 25 1&gt; /dev/null
 sleep 1
done
rm -Rf ${TMPDIR}</pre>
<p>This script gets every Joomla user (except those who have opted out) and emails them the html file created for the last day of messages. I run this out a user&#8217;s cron sometime after midnight (since it&#8217;s querying for yesterday). And it works and everyone is happy!<br />
Still todo:</p>
<ul>
<li>Handle the formatting in the body of the &#8216;psuedo-html&#8217; that kunena uses (BBCode)</li>
<li>Make the opt-out form more AJAX-y</li>
<li>More direct links from the digest into individual threads and users</li>
</ul>
<p>I know this isn&#8217;t the easiest thing to implement, but if you&#8217;re not that familiar with Linux, find someone who can help you set this up. Until Kunena comes out with a quicker way to do this, this is probably your best bet.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/05/13/how-to-add-a-daily-digest-email-to-kunena-forums-joomla/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lincoln Journal-Star article about cloud computing</title>
		<link>http://adamhaeder.com/wordpress/2010/05/03/lincoln-journal-star-article-about-cloud-computing/</link>
		<comments>http://adamhaeder.com/wordpress/2010/05/03/lincoln-journal-star-article-about-cloud-computing/#comments</comments>
		<pubDate>Mon, 03 May 2010 20:46:45 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=1284</guid>
		<description><![CDATA[I was quoted in an article in this Sunday&#8217;s Lincoln Journal-Star about a cloud computing company in Lincoln, NE called Cost Effective Technology. The complete article is here: http://journalstar.com/business/local/article_bda758a4-548b-11df-8c93-001cc4c03286.html]]></description>
			<content:encoded><![CDATA[<p>I was quoted in an article in this Sunday&#8217;s Lincoln Journal-Star about a cloud computing company in Lincoln, NE called Cost Effective Technology. The complete article is here: <a href="http://journalstar.com/business/local/article_bda758a4-548b-11df-8c93-001cc4c03286.html">http://journalstar.com/business/local/article_bda758a4-548b-11df-8c93-001cc4c03286.html</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/05/03/lincoln-journal-star-article-about-cloud-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick notes from Stephan Balzac&#8217;s presentation at Infotec2010</title>
		<link>http://adamhaeder.com/wordpress/2010/04/14/quick-notes-from-stephan-balzacs-presentation-at-infotec2010/</link>
		<comments>http://adamhaeder.com/wordpress/2010/04/14/quick-notes-from-stephan-balzacs-presentation-at-infotec2010/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 20:04:04 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[infotec]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/2010/04/14/quick-notes-from-stephan-balzacs-presentation-at-infotec2010/</guid>
		<description><![CDATA[No conflict is as bad as too much conflict Create autonomy If you&#8217;re not excited about the product, who else is? make feedback easy and unobtrusive A couple isn&#8217;t married until they&#8217;ve had their first fight If they don&#8217;t argue, you don&#8217;t have a team, you have henchmen You have to know what success and [...]]]></description>
			<content:encoded><![CDATA[<p>No conflict is as bad as too much conflict</p>
<p>Create autonomy</p>
<p>If you&#8217;re not excited about the product, who else is?</p>
<p>make feedback easy and unobtrusive</p>
<p>A couple isn&#8217;t married until they&#8217;ve had their first fight</p>
<p>If they don&#8217;t argue, you don&#8217;t have a team, you have henchmen</p>
<p>You have to know what success and failure look like</p>
<p>Turn the team lose, and don&#8217;t care if you succeed or fail. The results will surprise you.</p>
<p>Never judge and punish. Always be willing to adjust resources</p>
<p>Experts are people that recognize their mistakes sooner, and get out of them quickly</p>
<p>The key to power is to find opportunities to share it</p>
<p>Become a role model to your team</p>
<p>Turn objections around. Invite brainstorming</p>
<p>Book recommendation: The one-minute manager</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/04/14/quick-notes-from-stephan-balzacs-presentation-at-infotec2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Good security advice from Ron Woerner</title>
		<link>http://adamhaeder.com/wordpress/2010/04/09/good-security-advice-from-ron-woerner/</link>
		<comments>http://adamhaeder.com/wordpress/2010/04/09/good-security-advice-from-ron-woerner/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 14:50:37 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=194</guid>
		<description><![CDATA[Ron Woerner (@RonW123) recently posted this message to the Secure0maha security mailing list. Good advice as always. There's been a lot of talk lately around the Security Blogosphere on getting into Security and being successful in your security career. Here's few of note: 1. CSO Online: http://www.csoonline.com/article/590096/Are_You_Making_a_Security_Career_or_Working_a_Job_ 2. I Am InfoSec, and So Can You: [...]]]></description>
			<content:encoded><![CDATA[<p>Ron Woerner (<a href="http://twitter.com/RonW123">@RonW123</a>) recently posted this message to the Secure0maha security mailing list. Good advice as always.</p>
<pre>There's been a lot of talk lately around the Security Blogosphere on
getting into Security and being successful in your security career.
Here's few of note:</pre>
<pre>1. CSO Online:
<a href="http://www.csoonline.com/article/590096/Are_You_Making_a_Security_Career_or_Working_a_Job_">http://www.csoonline.com/article/590096/Are_You_Making_a_Security_Career_or_Working_a_Job_</a></pre>
<pre>2. I Am InfoSec, and So Can You: <a href="http://bit.ly/a3I4mI">http://bit.ly/a3I4mI</a></pre>
<pre>3. Bootstrapping the next generation
(<a href="http://layer8.itsecuritygeek.com/layer8/bootstrapping-the-next-generation/">http://layer8.itsecuritygeek.com/layer8/bootstrapping-the-next-generation/</a>)</pre>
<pre>4. Who to Recruit for Security, How to Get Started, and Career Tracks
(<a href="http://securosis.com/blog/who-to-recruit-for-security-how-to-get-started-and-career-tracks">http://securosis.com/blog/who-to-recruit-for-security-how-to-get-
started-and-career-tracks</a>)</pre>
<pre>We're in a tough field. It's kinda like being a UN Nuclear Inspector:
no one really wants us around, but we're critical for keeping things
safe. I find these articles inspiring and reminding me of
what's important.</pre>
<pre>Ron W</pre>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/04/09/good-security-advice-from-ron-woerner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My O&#8217;Reilly LPI book is available for pre-order</title>
		<link>http://adamhaeder.com/wordpress/2010/04/05/my-oreilly-lpi-book-is-available-for-pre-order/</link>
		<comments>http://adamhaeder.com/wordpress/2010/04/05/my-oreilly-lpi-book-is-available-for-pre-order/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 22:29:34 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=174</guid>
		<description><![CDATA[Should be available in bookstores sometime in June 2010. Preorder from Amazon Preorder from O&#8217;Reilly]]></description>
			<content:encoded><![CDATA[<p>Should be available in bookstores sometime in June 2010.</p>
<p>Preorder from <a href="http://bit.ly/bvQQ0I">Amazon</a></p>
<p>Preorder from <a href="http://oreil.ly/a0FGdy">O&#8217;Reilly</a></p>
<p><a href="http://oreil.ly/a0FGdy"><img class="alignnone" title="LPI" src="http://covers.oreilly.com/images/9780596804886/cat.gif" alt="" width="180" height="270" /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/04/05/my-oreilly-lpi-book-is-available-for-pre-order/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Restaurants with discounted kids menus in Omaha, NE</title>
		<link>http://adamhaeder.com/wordpress/2010/03/26/restaurants-with-discounted-kids-menus-in-omaha-ne/</link>
		<comments>http://adamhaeder.com/wordpress/2010/03/26/restaurants-with-discounted-kids-menus-in-omaha-ne/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 15:06:51 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=154</guid>
		<description><![CDATA[Some are &#8216;kids eat free&#8217;, some are just discounts. EVERYDAY: Denny&#8217;s &#8211; kids eat free &#8211; 4-10pm IHop &#8211; free kids meal w/ adult entree &#8211; 4-10pm Roja &#8211; Happy Hour in back room &#8211; 5-6:30 &#8211; $1.50 tacos Hector&#8217;s &#8211; free kids meal w/ adult entree MONDAY: Upstream (170 &#38; Center) &#8211; kids eat [...]]]></description>
			<content:encoded><![CDATA[<p>Some are &#8216;kids eat free&#8217;, some are just discounts.</p>
<p><!-- .hmmessage P { margin:0px; padding:0px } body.hmmessage { font-size: 10pt; font-family:Verdana } -->EVERYDAY:<br />
Denny&#8217;s &#8211; kids eat free  &#8211; 4-10pm<br />
IHop &#8211; free kids meal w/ adult entree &#8211; 4-10pm<br />
Roja &#8211; Happy  Hour in back room &#8211; 5-6:30 &#8211; $1.50 tacos<br />
Hector&#8217;s &#8211; free kids meal w/ adult  entree</p>
<p>MONDAY:<br />
Upstream (170 &amp; Center) &#8211; kids eat free w/ adult  entree<br />
Doc &amp; Eddie&#8217;s (168 &amp; Harrison) &#8211; kids eat free<br />
Texas  Roadhouse &#8211; Kids eat free &#8211; 1 per adult entree<br />
Sam &amp; Louie&#8217;s (downtown  Elkhorn) &#8211; buy one pizza, get one free<br />
Grandmothers &#8211; $.99 kids meals<br />
Grisanti&#8217;s &#8211; Kids eat free w/ adult entree &#8211; 4-10pm<br />
Julio&#8217;s West (123 rd  &amp; Center) &#8211; Kids eat free<br />
Sizzler &#8211; For each adult salad bar you get 2  free kids salad bars<br />
Spaghetti Works &#8211; Kids eat free &#8211; 2 children per 1  adult entree<br />
Summer Kitchen &#8211; Kids eat free<br />
Fuddrucker&#8217;s &#8211; 4-9 pm &#8211; kids  12 and under eat for $.99 &#8211; drink included<br />
Buffalo Wild Wings &#8211; kids 12 and  under eat for $.99 &#8211; 5-8pm</p>
<p>TUESDAY:<br />
Applebee&#8217;s &#8211; Order 1 adult meal and get 2 kids meals for  $.99 each<br />
Doc &amp; Eddie&#8217;s (168 &amp; Harrison) &#8211; kids eat free<br />
94/95 &#8211;  $.99 kids&#8217; meals<br />
Grisanti&#8217;s &#8211; Kids eat free from 4-10 w/ adult entree<br />
Paradise Bakery &#8211; Kids 12 and under eat free after 4pm (2 per adult entree)<br />
Fazoli&#8217;s &#8211; Kids eat for $.99 with 1 adult entree from 5-8<br />
Sizzler &#8211; For  each adult salad bar you get 2 kids salad bars for free<br />
Summer Kitchen &#8211;  Kids eat free<br />
China Buffet &#8211; Kids 10 and under eat free w/ adult entree<br />
Fuddrucker&#8217;s &#8211; 4-9 pm &#8211; kids 12 and under eat for $.99 &#8211; drink included<br />
Godfathers &#8211; kids 10 and under eat free buffet &#8211; 5-8pm<br />
Lonestar &#8211; kids  eat free with adult entree &#8211; drink included</p>
<p>WEDNESDAY:<br />
Pepper Jax &#8211;  Kids eat free &#8211; 4-9pm<br />
Doc &amp; Eddie&#8217;s (168 &amp; Harrison) &#8211; kids eat free<br />
Sizzler &#8211; for each adult salad bar you get 2 kids salad bars for free<br />
Perkins &#8211; free kids meal with adult entree &#8211; kids 12 and under &#8211; 4-9pm</p>
<p>THURSDAY:<br />
Applebee&#8217;s &#8211; for each adult entree get 2 kids meals for  $.99 each<br />
Paradise Bakery &#8211; Kids 12 and under eat free after 4pm (2 per  adult entree)</p>
<p>SATURDAY:<br />
Perkins &#8211; free kids meal with adult entree &#8211;  12 and under &#8211; 4 &#8211; 9pm</p>
<p>SUNDAY:<br />
Red Zone BBQ &#8211; Kids eat free<br />
Valentino&#8217;s Buffet (138th &amp; P) &#8211; Kids eat free buffet all day<br />
Hooters &#8211; Kids eat free all day<br />
Planet Sub &#8211; free kids meal with adult entree</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/03/26/restaurants-with-discounted-kids-menus-in-omaha-ne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QAM Channels on Cox in Omaha, NE</title>
		<link>http://adamhaeder.com/wordpress/2010/01/31/qam-channels-on-cox-in-omaha-ne/</link>
		<comments>http://adamhaeder.com/wordpress/2010/01/31/qam-channels-on-cox-in-omaha-ne/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 15:37:33 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cox]]></category>
		<category><![CDATA[hd]]></category>
		<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=42</guid>
		<description><![CDATA[Cox Communications in Omaha, NE offers many HD channels over their digital cable service, as long as you rent their set-top cable box from them. However, they also offer a number of HD channels over their basic and expanded cable offerings, which do not require a set-top box. However, you must have a tv that [...]]]></description>
			<content:encoded><![CDATA[<p>Cox Communications in Omaha, NE offers many HD channels over their digital cable service, as long as you rent their set-top cable box from them. However, they also offer a number of HD channels over their basic and expanded cable offerings, which do not require a set-top box. However, you must have a tv that includes a <a href="http://en.wikipedia.org/wiki/QAM_tuner">QAM tuner </a>in it to see these HD channels. Most TVs sold after 2006 contain a QAM tuner, but check your TV documentation to make sure. Here are the channels my TV picked up on the auto scan:</p>
<p>105.1    CBS (KMTV)<br />
105.2    Big 12 Network<br />
107.1    NE Public TV<br />
107.2    NE Public TV<br />
107.3    FOX (KPTM)<br />
107.4    this Omaha<br />
108.1    ABC (KETV)<br />
108.2    NBC (WOWT)<br />
108.3    NBC-US<br />
108.4    ABC (KETV) News<br />
111.1    Cox Preview &#8211; Kids<br />
111.2    Cox Preview &#8211; News<br />
111.3    Cox Preview &#8211; Sports<br />
111.4    Cox Preview<br />
111.5    Public Access<br />
111.6    SCOLA<br />
111.8    IA Public TV<br />
116.2    IA Public TV<br />
116.3    IA Public TV<br />
116.4    IA Public TV</p>
<p>One of the problems is that Cox doesn&#8217;t send any channel ID information with these channels, so your TV&#8217;s on screen guide won&#8217;t show any information. However, they certainly look better than their non-HD counterparts <img src='http://adamhaeder.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/01/31/qam-channels-on-cox-in-omaha-ne/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The truth about the lottery</title>
		<link>http://adamhaeder.com/wordpress/2010/01/28/the-truth-about-the-lottery/</link>
		<comments>http://adamhaeder.com/wordpress/2010/01/28/the-truth-about-the-lottery/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 22:10:07 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=39</guid>
		<description><![CDATA[Like my grandfather (a math professor) always used to say: &#8220;The lottery is a tax on people who are bad at math.&#8221;]]></description>
			<content:encoded><![CDATA[<p>Like my grandfather (a math professor) always used to say: &#8220;The lottery is a tax on people who are bad at math.&#8221;</p>
<p><a href="http://www.smbc-comics.com/index.php?db=comics&#038;id=1744"><br />
<img src="http://www.smbc-comics.com/comics/20091229.gif"></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/01/28/the-truth-about-the-lottery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to configure XBMC as a MythTV frontend</title>
		<link>http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/</link>
		<comments>http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 06:08:17 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mythtv]]></category>
		<category><![CDATA[tv]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=29</guid>
		<description><![CDATA[XBMC (formerly the Xbox Media Center) is an amazing cross-platform application for all your media viewing needs. At it&#8217;s base, it&#8217;s a program to watch video files and dvds, play mp3s, and view pictures. With the plugins and addons from the community, you can stream YouTube, listen to internet radio, sing karaoke, watch TED talks, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://xbmc.org">XBMC</a> (formerly the Xbox Media Center) is an amazing cross-platform application for all your media viewing needs. At it&#8217;s base, it&#8217;s a program to watch video files and dvds, play mp3s, and view pictures. With the plugins and addons from the community, you can stream <a href="http://youtube.com">YouTube</a>, listen to internet radio, sing karaoke, watch <a href="http://ted.com">TED talks</a>, and much, much more. There is even progress being made on XBMC being a &#8216;standard&#8217; frontend for a number of different DVR systems. One of those systems is <a href="http://mythtv.org">MythTV</a>. XBMC has native MythTV support, which means that, out of the box, XBMC can connect to your MythTV server, view your list of recorded programs, and play them. You can also delete recordings, browse the program guide, and watch live TV (although that feature is pretty experimental). However, as good as XBMC is, configuring it correctly to make it the best it can be for MythTV support can be a little tricky. Here are the steps I have taken to make my XBMC install good enough to score high on the <a href="http://http://en.wikipedia.org/wiki/Wife_acceptance_factor">Wife Acceptance Factor</a>.</p>
<p>This howto assumes you have:</p>
<ul>
<li>A working MythTV backend system</li>
<li>You&#8217;ve configured a MythTV frontend before, preferably on a box different from your backend. This isn&#8217;t required, but if you&#8217;ve made this work, then your MythTV database is setup correctly to accept remote connections.</li>
<li>A box that&#8217;s ready to be your MythTV frontend. This howto will assume this is a Windows box, but these instructions work the same for Mac/Linux/XBOX.</li>
</ul>
<p>Short Version (<a href="http://www.urbandictionary.com/define.php?term=tl%3Bdr">tl;dr</a>):</p>
<ul>
<li>Install the latest XBMC from xbmc.org. As of this writing, the latest release for Windows is 9.11. Or, if you&#8217;re really brave, grab the latest SVN snapshot. NOTE: there is a MythTV-specific bug in version 9.11: if you&#8217;re watching a recording that is longer than one hour, after the first hour the skip forward and skip backward will work very intermittently, if at all. This has been fixed in subversion. So if you really need this, use a nightly build.</li>
<li>Configure XBMC to hit your MythTV backend, and verify this works</li>
<li>Modify the XBMC skin to show the plots of recorded shows</li>
<li>Optional: configure a Streamzap remote to work under Windows</li>
</ul>
<p>Long Version:</p>
<p>Here is my setup:</p>
<ul>
<li>MythTV server running version .21 (yes I know I need to upgrade) on Fedora 8 (again, I know I need to upgrade). IP address is 10.0.0.1 and fully qualified domain name is fileserv.haederfamily.org. It&#8217;s a home-built AMD Athlon XP 2400+ with 512MB RAM and 2TB of disk.</li>
<li>Frontend system is a MiniITX-based system running Windows XP Pro SP3. This is connected to my 100MB switched home network.</li>
</ul>
<p>After you successfully install XBMC, run the program to see the default startup screen. The latest versions of XBMC use the skin &#8216;Confluence&#8217; as the default, so we&#8217;re assuming that&#8217;s the case here. Other skins work as well, but the modification you need to see the recorded show plot is different depending upon the skin layout.</p>
<p>Go into the Videos section and select &#8216;Add Source&#8217; from the menu. Hit enter on the name (where is says &lt;None&gt;) and type this:</p>
<p>myth://username:password@10.0.0.1/</p>
<p>where &#8216;username&#8217; is the username you use to connect to your MythTV mysql database and &#8216;password&#8217; is the password. If you didn&#8217;t change anything from the default MythTV install, this is probably &#8216;mythtv&#8217; and &#8216;mythtv&#8217;. Hit enter here, and arrow down &#8216;Enter a name for this media source&#8217;. Name it &#8216;MythTV&#8217; and click &#8216;OK&#8217;. You should now see a &#8216;MythTV&#8217; in your video sources. Highlight that and hit enter, and if all goes well, you should see a screen like this:</p>
<p><a rel="attachment wp-att-30" href="http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/xbmc_mythtv_screen1/"><img class="alignnone size-full wp-image-30" title="xbmc_mythtv_screen1" src="http://adamhaeder.com/wordpress/wp-content/uploads/2010/01/xbmc_mythtv_screen1.png" alt="" width="640" height="400" /></a></p>
<p>And when you select &#8216;TV Shows&#8217; it should look something like this:</p>
<p><a rel="attachment wp-att-31" href="http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/xbmc_mythtv_screen2/"><img class="alignnone size-full wp-image-31" title="xbmc_mythtv_screen2" src="http://adamhaeder.com/wordpress/wp-content/uploads/2010/01/xbmc_mythtv_screen2.png" alt="" width="640" height="400" /></a></p>
<p>and when you click &#8220;America&#8217;s Funniest Home Videos&#8221; hopefully you&#8217;ll see a list of recorded episodes:</p>
<p><a rel="attachment wp-att-32" href="http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/xbmc_mythtv_screen3/"><img class="alignnone size-full wp-image-32" title="xbmc_mythtv_screen3" src="http://adamhaeder.com/wordpress/wp-content/uploads/2010/01/xbmc_mythtv_screen3.png" alt="" width="640" height="400" /></a></p>
<p>Select an episode, hit enter, and it should start playing.</p>
<p>If it doesn&#8217;t, and you get some sort of a popup XBMC-style error, then odds are you have a DNS problem. This plagued me the first time I set this up. In your MythTV server settings, you have to identify the fully qualified domain name of your MythTV server. When you first setup MythTV, this is set to &#8216;localhost&#8217;. You MUST change this in order to get any kind of a MythTV frontend to work on your network. Once you have this set, you need to make sure that the fully qualified domain name for your MythTV server resolves to the correct IP address when you query it from your frontend. So, in my example, I need to make sure that when I ping &#8216;fileserv.haederfamily.org&#8217; from my Windows XP frontend, it resolves to &#8217;10.0.0.1&#8242;. If this is not the case, you must correct your DNS or add entries to your host file in order for this to work. You can&#8217;t go any further until you do this.</p>
<p>Once you&#8217;re in a position where you can watch recorded episodes, you only have 2 steps left: change the skin so the plots of recorded shows are displayed, and possibly setup a StreamZap remote.</p>
<p>The MythTV native support for XBMC works very well, but it is lacking some functionality compared to the full-blown MythTV linux frontend. One thing you might notice initially is that when you highlight a recorded episode, you don&#8217;t see any plot or episode information. Don&#8217;t blame XBMC support; the fault lies with the skin. The plot information for recordings is available through the XBMC MythTV interface, but the skin has to display that data somewhere. It seems that none of the skins available for XBMC (at least not the ones that ship with the &#8216;official&#8217; release) display this data anywhere. This is a relatively simple fix, and it makes the MythTV experience on XBMC much, much better.</p>
<p>They key lies in the file ViewsFileMode.xml, in the directory XBMC/skin/Confluence/720p. Now, I am not an expert on XMBC skinning, and in fact I got this addition from a posting on the xbmc.org forums. So this works for me, try it, it will probably work for you.</p>
<p>Open up that file in an editor, go to line 163, and insert this block of text:</p>
<pre>&lt;!-- plot mod --&gt;</pre>
<pre> &lt;control type="textbox"&gt;</pre>
<pre> &lt;posx&gt;0&lt;/posx&gt;</pre>
<pre> &lt;posy&gt;10&lt;/posy&gt;</pre>
<pre> &lt;width&gt;344&lt;/width&gt;</pre>
<pre> &lt;height&gt;300&lt;/height&gt;</pre>
<pre> &lt;label&gt;$INFO[ListItem.Plot]&lt;/label&gt;</pre>
<pre> &lt;/control&gt;</pre>
<pre>&lt;!-- end plot mod --&gt;</pre>
<p>The key is the variable $INFO[ListItem.Plot]. This references the &#8216;Plot&#8217; (or synopsis) or the recorded show. This information is available through the XBMC interface, but the skin does not show it by default. This addition will put the plot information in a 344x300px box in the upper right hand corner of the screen, which seems to be the perfect spot for the Confluence skin. If you don&#8217;t want to modify your file, <a href="http://adamhaeder.com/ViewsFileMode.xml">download a copy of mine</a> and replace your ViewsFileMode.xml. REMEMBER: this file gets overwritten everytime you upgrade XBMC, so keep a backup copy!</p>
<p>Once you&#8217;ve made this change, restart XBMC and you should see a screen that looks something like this:</p>
<p><a rel="attachment wp-att-33" href="http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/xbmc_mythtv_screen4/"><img class="alignnone size-full wp-image-33" title="xbmc_mythtv_screen4" src="http://adamhaeder.com/wordpress/wp-content/uploads/2010/01/xbmc_mythtv_screen4.png" alt="" width="640" height="400" /></a></p>
<p>And there you go. Plot information for your recordings.</p>
<p>A few questions:</p>
<ul>
<li>Why isn&#8217;t this in a skin somewhere by default?</li>
<li>What other MythTV variables do I have access to? I&#8217;d love to show the length of an episode somewhere, or the episode title. I&#8217;m sure that&#8217;s documented somewhere, but I can&#8217;t see to find it.</li>
</ul>
<p>Ok, now that that part is done, let&#8217;s configure a remote control for XBMC. I prefer the <a href="http://www.streamzap.com/">StreamZap remote</a>, which is a remote designed for PCs. The IR receiver has a USB interface, and it works great with Windows and Linux (through LIRC, specifically the lirc_streamzap kernel module). Under Windows, the StreamZap software is responsible for handling keypresses and actions for an application. However, currently the StreamZap software does not &#8216;natively&#8217; support  XBMC. The basic keys work (arrow keys, OK key, power key) but not much else. In order to really get the StreamZap to work effectively, you need to use a free application called <a href="http://www.eventghost.org/">EventGhost</a>. EventGhost will recognize the StreamZap keypresses, and will pass the appropriate command along to XBMC. Rather than walking you through screen shots of how to configure EventGhost, you can just <a href="http://adamhaeder.com/streamzap.xml">download my EventGhost config file for StreamZap and XBMC</a>. Install EventGhost, run it, select File -&gt; Open, and open my StreamZap.xml file. Then fire up XBMC and try your remote. It should work like a charm!</p>
<p>Note that the default software that comes with the Streamzap Remote will interfere with EventGhost! Make sure you stop that software, remove it from your PC&#8217;s startup settings, and then run EventGhost.</p>
<p>Please leave me feedback on if this worked for you, and any other tips or tricks you have regarding XBMC and MythTV.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/01/19/how-to-configure-xbmc-as-a-mythtv-frontend/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>The new LEGO MMORPG looks sweet</title>
		<link>http://adamhaeder.com/wordpress/2010/01/10/the-new-lego-mmorpg-looks-sweet/</link>
		<comments>http://adamhaeder.com/wordpress/2010/01/10/the-new-lego-mmorpg-looks-sweet/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 02:13:35 +0000</pubDate>
		<dc:creator>Adam Haeder</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamhaeder.com/wordpress/?p=25</guid>
		<description><![CDATA[Official site: http://universe.lego.com More video, including in-game videos, here: http://www.gametrailers.com/game/lego-universe/4954]]></description>
			<content:encoded><![CDATA[<p>Official site: <a href="http://universe.lego.com">http://universe.lego.com</a></p>
<p><object id="viddler" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="437" height="265" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="flashvars" value="fake=1" /><param name="src" value="http://www.viddler.com/simple_on_site/41303407" /><param name="name" value="viddler" /><param name="allowfullscreen" value="true" /><embed id="viddler" type="application/x-shockwave-flash" width="437" height="265" src="http://www.viddler.com/simple_on_site/41303407" name="viddler" flashvars="fake=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>More video, including in-game videos, here: <a href="http://www.gametrailers.com/game/lego-universe/4954">http://www.gametrailers.com/game/lego-universe/4954</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://adamhaeder.com/wordpress/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://adamhaeder.com/wordpress/2010/01/10/the-new-lego-mmorpg-looks-sweet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
