<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-38117766</id><updated>2009-11-14T12:52:56.126-08:00</updated><title type='text'>Justin Hamade's Blog - asterisk, VoIP, linux, mythtv</title><subtitle type='html'>Helping other out with my experiences in VoIP, asterisk, linux, mythtv, typography and technology in general.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-38117766.post-9200027200383939858</id><published>2009-07-17T08:49:00.000-07:00</published><updated>2009-07-17T08:51:04.291-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Foreign Key in Hidden Field</title><content type='html'>In order to have a hidden foreign key your in your form class you need to specify:
&lt;pre class="brush: python"&gt;
class PlanForm(forms.ModelForm):    
    owner = forms.ModelChoiceField(label="",queryset=Profile.objects.all(),                                  widget=forms.HiddenInput())
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-9200027200383939858?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/9200027200383939858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=9200027200383939858' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/9200027200383939858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/9200027200383939858'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2009/07/another-django-forms-foreign-key-in.html' title='Foreign Key in Hidden Field'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-4918771793829045719</id><published>2009-07-17T08:05:00.000-07:00</published><updated>2009-07-17T08:51:21.469-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Class definition order between two related classes</title><content type='html'>I ran into an issue where I wanted to have a foreign key to one class then over ride the save in the other class to update the current class.  It would through and error because one of the classes was not defined.  I finally found this post &lt;a href="http://groups.google.com/group/django-developers/browse_thread/thread/f71db48c87561ad4"&gt;Class definition order between two related classes&lt;/a&gt; and see that you can but the models name in quotes in the foreign key.

example:
&lt;pre class="brush: python"&gt;
class Foo(models.Model):
    bar = models.ForeignKey("Bar")
    name = models.CharField(max_length=100)

class Bar(models.Model):
    name = models.CharField(max_length=100)
    def save(self):
        foos = Foo.objects.filter(item=self)         
        foos.update(name=self.name)
        super(Bar, self).save()

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-4918771793829045719?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/4918771793829045719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=4918771793829045719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/4918771793829045719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/4918771793829045719'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2009/07/class-definition-order-between-two.html' title='Class definition order between two related classes'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-3403707465927011868</id><published>2009-04-23T11:25:00.000-07:00</published><updated>2009-04-23T12:44:48.119-07:00</updated><title type='text'>Django Custom Permissions ... sorta</title><content type='html'>There is no built in way to do row level permissions in Django, yet (&lt;a href="http://code.djangoproject.com/wiki/RowLevelPermissions"&gt;see here&lt;/a&gt;)

I have found a few hacks to get around this in the admin section.  This is using 1.0.2

First add a Foreign key to the model this is an example models.py
&lt;pre class="brush: python"&gt;
from django.contrib.auth.models import User, Group
from django.db import models

class MyModel(models.Model):
   name = models.CharField(max_lenght=100)
   group = models.ForeignKey(Group)
&lt;/pre&gt;
Then in admin.py we need to override the queryset so that the user can only see objects that are part of his group and that he can only add objects that belong to his group
&lt;pre class="brush: python"&gt;
from django.contrib.auth.models import Group
from django.contrib import admin
from myproject.myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
   def __call__(self,request,url):
       self.request = request
       return super(DeviceAdmin, self).__call__(request,url)
   def formfield_for_dbfield(self, db_field, **kwargs):
       field = super(DeviceAdmin, self).formfield_for_dbfield(db_field, **kwargs)
       if not self.request.user.is_superuser and db_field.name == 'group':
           my_choices = [('', '---------')]
           my_choices.extend(
               Group.objects.filter(
                   name__in=self.request.user.groups.all()
               ).values_list('id','name')
           ) # This can be one line it just doesn't fit
           print my_choices
           field.choices = my_choices
       return field
    def queryset(self, request):
        qs = super(MyModelAdmin, self).queryset(request)
        if request.user.is_superuser:
            return qs
        else:
            group_qs = Group.objects.filter(name__in=request.user.groups.all())
            return qs.filter(group__in=group_qs)

admin.site.register(MyModel,MyModelAdmin)
&lt;/pre&gt;
Now if you setup the admin in your settings and urls the groups for MyModel will only show up if the user belongs to that group.  If the user is a super user they will see all the groups.  If they user does not belong to any groups then they will not see any groups.

Note: You can probably submit a post with the ID of a group that you do not belong to and it will work, I have not figured out how to add custom validation based on the request object yet.

Here are some links that I used as a reference:
http://stackoverflow.com/questions/430592/djang-admin-charfield-as-textarea
http://www.djangosnippets.org/snippets/414/
http://code.djangoproject.com/ticket/3987#comment:32&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-3403707465927011868?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/3403707465927011868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=3403707465927011868' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/3403707465927011868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/3403707465927011868'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2009/04/django-custom-permissions-sorta.html' title='Django Custom Permissions ... sorta'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-2355744041674032945</id><published>2008-03-11T11:27:00.000-07:00</published><updated>2009-04-23T12:31:28.770-07:00</updated><title type='text'>Installing MySQL and PHP4 with apache1.3</title><content type='html'>Continued from previous post
&lt;pre class="brush: bash"&gt;

#!/bin/bash
cd /usr/src

wget  http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51a.tar.gz/fr                                                                                                 om/http://mysql.mirror.rafal.ca/
tar xzvf mysql-5.0.51a.tar.gz
cd mysql-5.0.51a
groupadd mysql
useradd -g mysql mysql
./configure
make
make install
cp support-files/my-small.cnf /etc/my.cnf
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
bin/mysqld_safe --user=mysql &amp;

wget http://ca3.php.net/get/php-4.4.8.tar.gz/from/ca.php.net/mirror
tar zxvf php-4.4.8.tar.gz
cd php-4.4.8
#assumes apache was configure as DSO
./configure --with-apxs=/usr/local/apache/bin/apxs
make
make install
&lt;/pre&gt;
Review /usr/local/apache/conf/httpd.conf
LoadModule php4_module libexec/libphp4.so should already be in the config file
Add or verify
Addtype application/x-httpd-php .php
Addtype application/x-httpd-php-source .phps&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-2355744041674032945?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/2355744041674032945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=2355744041674032945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/2355744041674032945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/2355744041674032945'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2008/03/installing-mysql-and-php4-with-apache13.html' title='Installing MySQL and PHP4 with apache1.3'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-7905460419003301734</id><published>2008-03-11T11:15:00.000-07:00</published><updated>2009-04-23T12:32:13.349-07:00</updated><title type='text'>Install Apache with modssl from source</title><content type='html'>copy and paste the following into a new file then chmod it to 755
&lt;pre class="brush: bash"&gt;
#!/bin/bash

cd /usr/src
wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz
tar xzvf openssl-0.9.8g.tar.gz
cd openssl-0.9.8g
./config
read -p "If ./config finished press enter to make"
make
read -p "If make finished press enter to make install"
make install
read -p "If make install finished press enter to install apache and modssl "

wget http://archive.apache.org/dist/httpd/apache_1.3.41.tar.gz
tar zxvf apache_1.3.41.tar.gz
wget http://www.modssl.org/source/mod_ssl-2.8.31-1.3.41.tar.gz
tar xzvf mod_ssl-2.8.31-1.3.41.tar.gz
cd mod_ssl-2.8.31-1.3.41
./configure --with-apache=../apache_1.3.41 \
 --with-ssl=../openssl-0.9.8g \
 --prefix=/usr/local/apache \
 --enable-shared=max
read -p "If ./configure finished press enter to make"
cd ../apache_1.3.41
make
read -p "If make finished press enter to make install"
make certificate
make install
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-7905460419003301734?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/7905460419003301734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=7905460419003301734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/7905460419003301734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/7905460419003301734'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2008/03/install-apache-with-modssl-from-source.html' title='Install Apache with modssl from source'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-3591147008115451439</id><published>2008-01-03T08:58:00.001-08:00</published><updated>2009-04-23T12:38:51.399-07:00</updated><title type='text'>Asterisk Install Script for Debian</title><content type='html'>&lt;pre class="brush: bash"&gt;
#!/bin/bash

# Script to download and untar lastest asterisk build
# Justin Hamade v1 - March 24, 2007
# Justin Hamade v1.1 - May 28, 2007 - Added:
# 1. ability to install 1.2 or 1.4
# 2. dep check for wget, make, and gcc
# 3. install asterisk-gui option for 1.4


# ----------------------------------------------------------------------------
# Pause.
# ----------------------------------------------------------------------------
pause()
{

        if test $NONINTERACTIVE; then
                return 0
        fi

        [ $# -ne 0 ] &amp;amp;&amp;amp; echo -e $* &amp;gt;&amp;amp;2
        echo -e "Press [Enter] to continue...\c" &amp;gt;&amp;amp;2
        read tmp
        return 0
}
# ----------------------------------------------------------------------------
# Prompt user for input.
# Usage:
# prompt "Prompt"
# $CMD
# ----------------------------------------------------------------------------
prompt()
{
        if test $NONINTERACTIVE; then
                return 0
        fi

        echo -ne "$*" &amp;gt;&amp;amp;2
        read CMD rest
        return 0
}

# ----------------------------------------------------------------------------
# Get Yes/No
# Usage:
# getyn "\nWould you like to continue?" || return 1
# ----------------------------------------------------------------------------
getyn()
{
        if test $NONINTERACTIVE; then
                return 0
        fi

        while prompt "$* (y/n) "
        do      case $CMD in
                        [yY])   return 0
                                ;;
                        [nN])   return 1
                                ;;
                        *)      echo -e "\nPlease answer y or n" &amp;gt;&amp;amp;2
                                ;;
                esac
        done
}
# ----------------------------------------------------------------------------
# Get Version
# ----------------------------------------------------------------------------
getversion()
{
        if test $NONINTERACTIVE; then
                return 0
        fi

        while prompt "Enter $* minor version number (for 1.$BRANCH.0 enter 0 for 1.$BRANCH.1.1 enter 1.1): "
        do      case $CMD in
                        [0-9]|[1-2][0-9]|[0-9].[0-9]|[1-2][0-9].[0-9])
                                return 0
                                ;;
                        *)      echo -e "Please answer a number from 0 to 29" &amp;gt;&amp;amp;2
                                ;;
                esac
        done
}

getbranch()
{
        if test $NONINTERACTIVE; then
                return 0
        fi

        while prompt "Enter asterisk branch number (for 1.2 enter 2 for 1.4 enter 4): "
        do      case $CMD in
                        [2]|[4])
                                return 0
                                ;;
                        *)      echo -e "Please enter 2 or 4" &amp;gt;&amp;amp;2
                                ;;
                esac
        done
}

install_libpri ()
{
        getyn "Install libpri?" || return 1
        LIBPRIVERSION=0
        getversion "libpri"
        LIBPRIVERSION=$CMD
        cd $SRCDIR
        wget ftp://ftp.digium.com/pub/libpri/libpri-1.$BRANCH.$LIBPRIVERSION.tar.gz
        tar zxvf libpri-1.$BRANCH.$LIBPRIVERSION.tar.gz
        rm libpri-1.$BRANCH.$LIBPRIVERSION.tar.gz
        cd $SRCDIR/libpri-1.$BRANCH.$LIBPRIVERSION
        make &amp;amp;&amp;amp; make install
        cd $SRCDIR
}

install_zaptel ()
{
        getyn "Install zaptel?" || return 1
        ZAPTELVERSION=1
        getversion "zaptel"
        ZAPTELVERSION=$CMD
        cd $SRCDIR
        wget ftp://ftp.digium.com/pub/zaptel/zaptel-1.$BRANCH.$ZAPTELVERSION.tar.gz
        tar zxvf zaptel-1.$BRANCH.$ZAPTELVERSION.tar.gz
        rm zaptel-1.$BRANCH.$ZAPTELVERSION.tar.gz
        ln -s $SRCDIR/zaptel-1.$BRANCH.$ZAPTELVERSION /usr/src/zaptel
        cd $SRCDIR/zaptel-1.$BRANCH.$ZAPTELVERSION
        if [ "$BRANCH" = "4" ]; then
                ./configure &amp;amp;&amp;amp; make menuselect
        fi
        make &amp;amp;&amp;amp; make install
        cd $SRCDIR
}

install_asterisk ()
{
        getyn "Install asterisk?" || return 1
        ASTERISKVERSION=2
        getversion "asterisk"
        ASTERISKVERSION=$CMD
        cd $SRCDIR
        wget ftp://ftp.digium.com/pub/asterisk/asterisk-1.$BRANCH.$ASTERISKVERSION.tar.gz
        tar zxvf asterisk-1.$BRANCH.$ASTERISKVERSION.tar.gz
        rm asterisk-1.$BRANCH.$ASTERISKVERSION.tar.gz
        cd $SRCDIR/asterisk-1.$BRANCH.$ASTERISKVERSION
        if [ "$BRANCH" = "4" ]; then
                ./configure &amp;amp;&amp;amp; make menuselect
        fi
        make &amp;amp;&amp;amp; make install
        cd $SRCDIR
}

install_addons ()
{
        getyn "Install asterisk-addons?" || return 1
        ADDONSVERSION=0
        getversion "addons"
        ADDONSVERSION=$CMD
        cd $SRCDIR
        wget ftp://ftp.digium.com/pub/asterisk/asterisk-addons-1.$BRANCH.$ADDONSVERSION.tar.gz
        tar zxvf asterisk-addons-1.$BRANCH.$ADDONSVERSION.tar.gz
        rm asterisk-addons-1.$BRANCH.$ADDONSVERSION.tar.gz
        cd $SRCDIR/asterisk-addons-1.$BRANCH.$ADDONSVERSION
        if [ "$BRANCH" = "4" ]; then
                ./configure &amp;amp;&amp;amp; make menuselect
        fi
        make &amp;amp;&amp;amp; make install
        cd $SRCDIR
}
install_gui ()
{
        getyn "Install asterisk-gui?" || return 1
        cd $SRCDIR
        svn checkout http://svn.digium.com/svn/asterisk-gui/trunk asterisk-gui
        cd $SRCDIR/asterisk-gui
        ./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install &amp;amp;&amp;amp; make samples
        cd $SRCDIR
}
install_sounds ()
{
        getyn "Install asterisk-sounds?" || return 1
        SOUNDSVERSION=0
        getversion "sounds"
        SOUNDSVERSION=$CMD
        cd $SRCDIR
        wget ftp://ftp.digium.com/pub/asterisk/asterisk-sounds-1.$BRANCH.$ADDONSVERSION.tar.gz
        tar zxvf asterisk-sounds-1.$BRANCH.$SOUNDSVERSION.tar.gz
        rm asterisk-sounds-1.$BRANCH.$SOUNDSVERSION.tar.gz
        cd $SRCDIR/asterisk-sounds-1.$BRANCH.$SOUNDSVERSION
        make install
        cd $SRCDIR
}
install_wanpipe ()
{
        getyn "Install sangoma wanpipe?" || return 1
        prompt "Enter wanpipe version (ie 2.3.4-9 or 3.1.0)"
        WANPIPEVERSION=$CMD
        cd $SRCDIR
        wget ftp://ftp.sangoma.com/linux/current_wanpipe/wanpipe-$WANPIPEVERSION.tgz
        tar zxvf wanpipe-$WANPIPEVERSION.tgz
        rm wanpipe-$WANPIPEVERSION.tgz
        cd $SRCDIR/wanpipe-$WANPIPEVERSION
        ./Setup install
        cd $SRCDIR
}

banner ()
{
        cat &amp;lt;&amp;lt; ENDOFTEXT
This script will download and install Asterisk 1.2 or 1.4 and its required packages including Sangoma drivers.
ENDOFTEXT
pause
}

checkwget ()
{
        echo "Checking wget ...";
        if [ ! -x $WGET ]; then
                getyn "wget not installed run, apt-get install wget?" || return 1
                apt-get install wget
        fi
        echo "success"
}
checkmake ()
{
        echo "Checking make ...";
        if [ ! -x $MAKE ]; then
                getyn "make not installed, run apt-get install make?" || return 1
                apt-get install make
        fi
        echo "success"
}
checkgcc ()
{
        echo "Checking gcc ...";
        if [ ! -x $GCC ]; then
                getyn "gcc not installed, run apt-get install gcc?" || return 1
                apt-get install gcc
        fi
        echo "success"
}


banner
WGET=/usr/bin/wget
checkwget
MAKE=/usr/bin/make
checkmake
GCC=/usr/bin/gcc
checkgcc
getbranch
BRANCH=$CMD

SRCDIR="/usr/src/asterisk-1.$BRANCH"
if [ -d $SRCDIR ]; then
        echo "directory exsists"
else
        mkdir $SRCDIR
fi
cd $SRCDIR

install_libpri
install_zaptel
install_asterisk
install_addons
if [ "$BRANCH" = "2" ]; then
        install_sounds
fi
if [ "$BRANCH" = "4" ]; then
        install_gui
fi
install_wanpipe&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-3591147008115451439?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/3591147008115451439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=3591147008115451439' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/3591147008115451439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/3591147008115451439'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2008/01/asterisk-install-script-for-debian.html' title='Asterisk Install Script for Debian'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-4723170542815461661</id><published>2007-12-07T09:38:00.001-08:00</published><updated>2009-04-23T12:39:16.271-07:00</updated><title type='text'>My stdexten macro</title><content type='html'>I always forget this so I figure I will post it and update it when I improve it.

&lt;pre class="brush: bash"&gt;
[macro-stdexten]
;ARG1 = Device(s) to ring (Default SIP/${MACRO_EXTEN}
;ARG2 = Voicemail Box to go to (Default ${MACRO_EXTEN}
;ARG3 = Timeout in seconds (divide be 5 for number of rings) default 20

exten =&amp;gt; s,1,NoOp
exten =&amp;gt; s,n,Set(DIALSTRING=${IF($[ "${ARG1}" = "" ]?SIP/${MACRO_EXTEN}:${ARG1})})
exten =&amp;gt; s,n,Set(VMAILBOX=${IF($[ "${ARG2}" = "" ]?${MACRO_EXTEN}:${ARG2})})
exten =&amp;gt; s,n,Set(TIMEOUT=${IF($[ "${ARG3}" = "" ]?20:${ARG3})})
exten =&amp;gt; s,n,Dial(${DIALSTRING},${TIMEOUT},twk)
exten =&amp;gt; s,n,Goto(s-${DIALSTATUS},1)

exten =&amp;gt; s-,1,Goto(s-BUSY,1)
exten =&amp;gt; _s-.,1,Goto(s-BUSY,1)
exten =&amp;gt; s-CONGESTION,1,Goto(s-BUSY,1)

exten =&amp;gt; s-BUSY,1,Voicemail(${VMAILBOX}@default,b)
exten =&amp;gt; s-BUSY,n,Hangup()

exten =&amp;gt; s-CHANUNAVAIL,1,Goto(s-NOANSWER,1)

exten =&amp;gt; s-NOANSWER,1,Voicemail(${VMAILBOX}@default,u)
exten =&amp;gt; s-NOANSWER,n,Hangup
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-4723170542815461661?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/4723170542815461661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=4723170542815461661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/4723170542815461661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/4723170542815461661'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/12/my-stdexten-macro.html' title='My stdexten macro'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-1569627639436217792</id><published>2007-11-28T19:38:00.000-08:00</published><updated>2007-12-05T22:27:29.725-08:00</updated><title type='text'>Document Design for Search Engine Optimization</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.searchengineoptimizationcompany.ca/img/Search-Engine-Marketing.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://www.searchengineoptimizationcompany.ca/img/Search-Engine-Marketing.jpg" alt="" border="0" /&gt;&lt;/a&gt;

Digital document design has become much more then just aesthetics and it is now important that a document can be read by "robots" as well a people.  Robots, or crawlers or spiders, are another name for indexing services that search engines use such as google. As you are well aware, search engines are the way people find most things on the web today.  Most people assume that search engines use hidden meta tags to index web pages for searching.  This may have been the case in the early days of the web, and is only partially true for a few search engines today.  Search engines are now programmed to look at the text inside html tags that are used to design a web page.  Weight is given to the words depending on which tag they are in.  This is how Search Engine Optimization, or SEO, relates to document design.  I will discuss the tags that are important to making your site search engine friendly, and some ways to keep the design you want.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.weboma.com/images/posts/title.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://www.weboma.com/images/posts/title.jpg" alt="" border="0" /&gt;&lt;/a&gt;First off is the title tag, this should be descriptive as to who you are and what information you are presenting in your page.  The title tag should also stay short and not be greater the 60 - 70 characters. Keep in mind that the title tag is not only something that search engines use to find keywords to your site, but it is also what the user will see in their search results.

Heading tags are also regarded as important content, as they are meant to be headings on your tags. Designers often use images as headings, but these will not only require descriptive alt attributes, but also are weighted very low by search engine crawlers.  Cascading style sheets (CSS) can also be used to design headings, but be when using CSS make sure to apply your CSS to the heading tag and not to another block element tag, like span or div.

Make sure to use descriptive keywords in your ALT attribute for your image tags.  This will help search engines that index images as the image file name is not always relative to the picture.  The alt tag is included as body text by most search engines, but as mentioned previously is weighted low.

Meta tags are still used by some search engines but are weighted very low due to over use.  For the Meat Description tag, it is best to keep it under 100 characters. The meta tag is also important because it is displayed in the search results.  For the Meta Keyword tag, it should be kept under 250 keywords, and should not contain any words that are not in the document.

As mentioned previously search engine crawlers can not index images, this is something that many designers have problems with for a few reasons.  First text is difficult to control, even when using CSS to format it.  The user must have that font installed, and the user can increase and decrease the font size in their browser easily.  Images solve these problems for a designer  because they can not be changed, but images will hinder its search engine optimization.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.inventatech.co.uk/images/seo-chart.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://www.inventatech.co.uk/images/seo-chart.gif" alt="" border="0" /&gt;&lt;/a&gt;The last and probably most important part of search engine optimization are links.  I will referrer to two different types of links, internal and external.  Internal links are things like menus and site maps.  It is important to have at least one static link to every page on your site that you want indexed.  This is so the search engines know how to get to every page when they spider or crawl your site.  External links referrer to other sites that link back to yours.  This is another way that search engines rank your site.  This is unrelated to design so there is no need to go into any more detail about it.

As with everything, there are people out there that abuse the system, so search engines have put measures into place to not rank these types of sites highly.  Some things I have already mentioned like number of characters in title and meta tags. One additional thing to be careful of is to keep the number of links on one page to under 100, more than 100 links we be thought of as spam.  For a large site map it would be a good idea to split it up into  multiple pages.  Another thing to be careful of is using the same words an excessive amount on a single page.  This is a common practice for people trying to trick search engines.

Currently there is a battle between designers and search engine optimization people.  Both are important elements of marketing your site and your business on the web, but they have contradicting requirements.  As discussed many design needs are not SEO friendly, and many SEO needs are not design friendly.  Make sure you find a good middle ground when designing your site.

References:&lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=40349"&gt;
&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt; How can I create a Google-friendly site?&lt;/span&gt;&lt;/a&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;
&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;&lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=35769"&gt; Webmaster Guidelines&lt;/a&gt;
&lt;a href="http://www.bruceclay.com/emergingstandards.htm"&gt;Search Engine Optimization Standards and Spam Discussion&lt;/a&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;
&lt;a style="font-weight: bold;" href="http://www.interspire.com/content/articles/13/1/Google-SEO-Basics-for-Beginners"&gt;Google SEO Basics for Beginners&lt;/a&gt;
&lt;a style="font-weight: bold;" href="http://www.mediacollege.com/internet/search-engines/seo/basics.html"&gt;Media College.com SEO Basics &lt;/a&gt;
&lt;a style="font-weight: bold;" href="http://www.googlerankings.com/basic.php"&gt;Google Rankings Basic SEO advice&lt;/a&gt;
&lt;a style="font-weight: bold;" href="http://www.searchengineguide.com/jim-hedger/seo-101-basic.php"&gt;&lt;strong&gt;SEO 101 - Basic Optimization Techniques&lt;/strong&gt;&lt;/a&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-1569627639436217792?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/1569627639436217792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=1569627639436217792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/1569627639436217792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/1569627639436217792'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/11/document-design-for-search-engine.html' title='Document Design for Search Engine Optimization'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-2049937619885181799</id><published>2007-10-20T09:32:00.001-07:00</published><updated>2007-10-21T13:28:06.478-07:00</updated><title type='text'>Mythtv Distro Evaluations</title><content type='html'>It is a tough time for Mythtv distros right now with Zap2it cancelling their services is August.  There are 4 major mythtv distro communities right now, knoppmyth, mythdora, mythbuntn and linuxmce.  Today I tried all but knoppmyth and here is what I have found.

LinuxMCE
I first tried LinuxMCE as the demo video they have on their site shows some amazing features.  They do have an update for the new Schedules direct service but the link to the script was down.  The thing that I found about LinuxMCE was that because it is a bunch of custom changes on top of Kubuntu Feisty, updating myth from the Kubuntu repository would break it.  This is a cool system but is a bit behind when on changes.

Mythdora
Mythdora acutally looked good, they have some myth specific questions at install.  The downside I found was the myth version was still the older one and there was no Schedules direct support, also the links for the update at the atrpms site was down as well.

Mythbuntu
Mythbuntu is a supported ubuntu distro and is kept almost as up to date as ubuntu is.  Right now they have a 7.10 release candidate and the 7.10 version has only been released for a few days at this point.  The good thing is it has the newest version of myth and the Schedules Direct is supported right out of the box, no updates needs.

Ubuntu again comes through leading the pack with the most up to date distro in mythbuntu.

If anyone has comments on these distros or any other I would love to hear them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-2049937619885181799?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/2049937619885181799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=2049937619885181799' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/2049937619885181799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/2049937619885181799'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/10/mythtv-distro-evaluations.html' title='Mythtv Distro Evaluations'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-4465643841969271132</id><published>2007-04-19T10:14:00.000-07:00</published><updated>2007-05-04T12:27:52.178-07:00</updated><title type='text'>Polycom Presence and SIP 500 errors</title><content type='html'>I finally got someone at Polycom support that knew what they were talking about and were very helpful. I have been getting a lot of these errors from the Polycoms on my asterisk servers &lt;span style="FONT-STYLE: italic"&gt;Incoming call: Got SIP response 500 "Internal Server Error" back from 192.168.0.100&lt;/span&gt;

The problem was the transport was set to "DNSnaptr" by default. So if you set it to "TCPpreferred" it should fix any issues you are having with presence and also any sip 500 errors.

EDIT*
I am still getting sip 500 errors if I restart asterisk and not the polycom phones.  On a side note for asterisk 1.4 make sure call-limit is set to something.  I set it to 8.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-4465643841969271132?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/4465643841969271132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=4465643841969271132' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/4465643841969271132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/4465643841969271132'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/04/polycom-presence-and-sip-500-errors.html' title='Polycom Presence and SIP 500 errors'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-6168829669718671121</id><published>2007-03-22T22:10:00.000-07:00</published><updated>2007-03-22T23:05:52.644-07:00</updated><title type='text'>Provisioning Polycom phones</title><content type='html'>Provisioning Polycom SIP phones can be a pain.  There are some good examples on www.voip-info.org but I think a explanation would be a good idea.

For an internal LAN setup TFTP is easiest, so I have everything setup as so:
/tftpboot
/tftpboot/contacts
/tftpboot/logs
/tftpboot/overrides

The important thing is DO NOT touch sip.cfg, phone1.cfg and 000000000000.cfg, use it as reference only.  Why you ask, so when new firmware comes out you just drop in the new file.

So where do you make your changes then????
&lt;ol&gt;&lt;li&gt;MAC.cfg
&lt;/li&gt;&lt;li&gt;EXTEN.cfg&lt;/li&gt;&lt;li&gt;00000000000-directory.cfg&lt;/li&gt;&lt;li&gt;contacts/MAC-directory.cfg&lt;/li&gt;&lt;/ol&gt;Here are some examples:
MAC.cfg:
&amp;lt;?xml version="1.0" standalone="yes"?&amp;gt;
&amp;lt;!-- Default Master SIP Configuration File--&amp;gt;
&amp;lt;!-- Edit and rename this file to &amp;lt;Ethernet-address&amp;gt;.cfg for each phone.--&amp;gt;
&amp;lt;!-- $Revision: 1.14 $  $Date: 2005/07/27 18:43:30 $ --&amp;gt;
&amp;lt;APPLICATION APP_FILE_PATH="sip.ld" CONFIG_FILES="300.cfg, site.cfg, phone1.cfg, sip.cfg" MISC_FILES="" LOG_FILE_DIRECTORY="/log" OVERRIDES_DIRECTORY="/overrides" CONTACTS_DIRECTORY="/contacts"/&amp;gt;


EXTEN.cfg (300.cfg)
&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;
&amp;lt;!-- Per-phone configuration in this file --&amp;gt;
&amp;lt;reginfo&amp;gt;
       &amp;lt;reg reg.1.displayName="First Last" reg.1.address="300" reg.1.label="300" reg.1.auth.userId="300" reg.1.auth.password="PASSWORD"/&amp;gt;
&amp;lt;/reginfo&amp;gt;
&amp;lt;msg&amp;gt;
       &amp;lt;mwi msg.mwi.1.subscribe="300@default"/&amp;gt;
&amp;lt;/msg&amp;gt;

site.cfg
&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;
&amp;lt;!-- Our local phone system common configuration in this file --&amp;gt;
&amp;lt;localcfg&amp;gt;
&amp;lt;server voIpProt.server.1.address="192.168.0.1"/&amp;gt;
&amp;lt;SIP&amp;gt;
  &amp;lt;outboundProxy voIpProt.SIP.outboundProxy.address="192.168.0.1"/&amp;gt;
&amp;lt;/SIP&amp;gt;
&amp;lt;TCP_IP&amp;gt;
  &amp;lt;SNTP tcpIpApp.sntp.daylightSavings.enable="1"
       tcpIpApp.sntp.resyncPeriod="86400"
       tcpIpApp.sntp.address="192.168.0.1"
       tcpIpApp.sntp.address.overrideDHCP="1"
       tcpIpApp.sntp.gmtOffset="-28800"
       tcpIpApp.sntp.gmtOffset.overrideDHCP="1"
       tcpIpApp.sntp.daylightSavings.enable="1"
       tcpIpApp.sntp.daylightSavings.fixedDayEnable="1"
       tcpIpApp.sntp.daylightSavings.start.month="3"
       tcpIpApp.sntp.daylightSavings.start.date="8"
       tcpIpApp.sntp.daylightSavings.start.time="2"
       tcpIpApp.sntp.daylightSavings.start.dayOfWeek="1"
       tcpIpApp.sntp.daylightSavings.start.dayOfWeek.lastInMonth="0"
       tcpIpApp.sntp.daylightSavings.stop.month="11"
       tcpIpApp.sntp.daylightSavings.stop.date="1"
       tcpIpApp.sntp.daylightSavings.stop.time="2"
       tcpIpApp.sntp.daylightSavings.stop.dayOfWeek="1"
       tcpIpApp.sntp.daylightSavings.stop.dayOfWeek.lastInMonth="0"
/&amp;gt;
&amp;lt;/TCP_IP&amp;gt;
&amp;lt;reg&amp;gt;
       &amp;lt;reg.1.callsPerLineKey="8"&amp;gt;
&amp;lt;/reg&amp;gt;
&amp;lt;msg&amp;gt;
       &amp;lt;mwi msg.mwi.1.callBackMode="contact" msg.mwi.1.callBack="8500" /&amp;gt;
&amp;lt;/msg&amp;gt;
&amp;lt;user_preferences up.oneTouchVoiceMail="1" /&amp;gt;
&amp;lt;feature feature.1.enabled="1" feature.9.enabled="0" feature.10.enabled="1" feature.11.enabled="1" feature.12.enabled="1" /&amp;gt;
&amp;lt;bitmap&amp;gt;
       &amp;lt;IP_400 bitmap.IP_400.61.name="Idle400.bmp"/&amp;gt;
       &amp;lt;IP_600 bitmap.IP_600.61.name="Idle600.bmp"/&amp;gt;
&amp;lt;/bitmap&amp;gt;
&amp;lt;sound_effects se.stutterOnVoiceMail="0" /&amp;gt;
&amp;lt;localcfg&amp;gt;

contacts/MAC-directory.xml:
&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;
&amp;lt;!-- $Revision: 1.2 $  $Date: 2004/12/21 18:28:05 $ --&amp;gt;
&amp;lt;directory&amp;gt;
        &amp;lt;item_list&amp;gt;
        &amp;lt;item&amp;gt;&amp;lt;fn&amp;gt;First&amp;lt;/fn&amp;gt;&amp;lt;ln&amp;gt;Last&amp;lt;/ln&amp;gt;&amp;lt;ct&amp;gt;301&amp;lt;/ct&amp;gt;&amp;lt;sd&amp;gt;1&amp;lt;/sd&amp;gt;&amp;lt;bw&amp;gt;1&amp;lt;/bw&amp;gt;&amp;lt;/item&amp;gt;

Some gotchas that I have run into:
&lt;ol&gt;&lt;li&gt;/tftpboot/contacts/00000000000-directory.xml does not get used it gets pulled from the /tftpboot/000000000000-directory.xml file (as of bootrom v3.2.2)&lt;/li&gt;&lt;li&gt;The dhcp option to set the tftp server is &lt;span style="font-weight: bold;"&gt;option tftp-sever-name "tftp://192.168.41.1"&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Take a look here if you need more info or more examples or email me.
&lt;a href="http://www.voip-info.org/wiki-Polycom+Phones#PolycomConfigFiles"&gt;http://www.voip-info.org/wiki-Polycom+Phones#PolycomConfigFiles&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-6168829669718671121?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/6168829669718671121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/6168829669718671121'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/03/provisioning-polycom-phones.html' title='Provisioning Polycom phones'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-117071286592430704</id><published>2007-02-05T13:55:00.000-08:00</published><updated>2007-03-13T16:45:06.439-07:00</updated><title type='text'>Linux still not a good desktop</title><content type='html'>So I figured I would bite the bullet and give Kubuntu another go as my desktop.  The install was easy, it supported all my hardware out of the box and I was happy.

I even spent a bunch of time  getting Beryl to work and that was sweet, but then the bugs started.

A list of tasks I needed to be able to accoplish
&lt;ul&gt;&lt;li&gt;I wanted to connect to Exchange and Evolution is pretty good at that now.&lt;/li&gt;&lt;li&gt;I can get to the file server at work fine, but I can't open anything in openoffice directly, ouch.&lt;/li&gt;&lt;li&gt;Firefox locked up and crashed many times.&lt;/li&gt;&lt;li&gt;Wireless configuration is painful for a roaming laptop.&lt;/li&gt;&lt;li&gt;Dual monitors are a must but getting xorg to work with both, good luck.
&lt;/li&gt;&lt;/ul&gt;The more I tried to do the harder it got and the more buggy.  Will Linux ever be stable enough or be able to exist in a Windows network, not for a while.

*UPDATE:
I have switched to Ubuntu and gnome, much better experience, I don't care what Linus says LOL.

Anyway, there are still a lot of bugs.  What will make it better:
-Better and faster drivers from hardware vendors
-More OSS developers to help with apps so they are tested and stable before release
-Corporate support, money talks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-117071286592430704?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/117071286592430704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=117071286592430704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/117071286592430704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/117071286592430704'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/02/linux-still-not-good-desktop.html' title='Linux still not a good desktop'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116867092487326912</id><published>2007-01-12T22:48:00.000-08:00</published><updated>2007-01-12T22:48:44.923-08:00</updated><title type='text'>Asterisk 1.4</title><content type='html'>With asterisk 1.4 finally out of beta I figured I would give it a whirl.  They have now stepped up to the "distro" market to compete with trixbox and probably do a better job.

You do have to register on the asterisk site to download it but oh well.  The wizard is easy to use and the asterisk web GUI is very very nice.  Things that are missing is voicemail, call recording, a reception module and phone provisioning.  Hopefully I can get that intergrated sooner rather then later.

Trixbox is still using an old version of asterisk 1.2.13 I think.  That is not going to work with the amount of changes that have been done for 1.4.0.  Trixbox just doesn't make things much easier if you know what you are doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116867092487326912?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116867092487326912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116867092487326912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116867092487326912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116867092487326912'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/01/asterisk-14.html' title='Asterisk 1.4'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116835527630117074</id><published>2007-01-09T07:07:00.000-08:00</published><updated>2007-01-09T07:07:56.863-08:00</updated><title type='text'>Windows Home Server will live in your closet, simplify your life | Jesse D. Lewin | Microsoft 10</title><content type='html'>Check out the new windows home server.  This will finally will make having multiple computers at home convenient.  Check out the backup feature, that alone makes it worth it.  M$ is doing things right for once.

&lt;a href="http://www.on10.net/Blogs/jesse/windows-home-server-will-live-in-your-closet-simplify-your-life/"&gt;Link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116835527630117074?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116835527630117074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116835527630117074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116835527630117074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116835527630117074'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2007/01/windows-home-server-will-live-in-your.html' title='Windows Home Server will live in your closet, simplify your life | Jesse D. Lewin | Microsoft 10'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116698653343825705</id><published>2006-12-24T10:55:00.000-08:00</published><updated>2006-12-25T01:41:44.573-08:00</updated><title type='text'>Video Editing and Jump Cut</title><content type='html'>I saw this new site/service on techtv looks pretty sweet, it is called &lt;a href="http://www.jumpcut.com/"&gt;Jumpcut&lt;/a&gt;.  I will be trying it out over the next while and post how it is.

Over the years I have made a few highlight tapes for people I play football with and have coached.  This on is of my brother from 2002.  I usually use Ulead Media Studio pro, it makes it really easy.&lt;table xmlns="http://purl.org/atom/ns#" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;embed flashvars="" id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docId=-1902354467777250892&amp;amp;hl=en-CA" style="width:400px; height:326px;" type="application/x-shockwave-flash"&gt; &lt;/embed&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr/&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116698653343825705?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116698653343825705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116698653343825705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116698653343825705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116698653343825705'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2006/12/video-editing-and-jump-cut.html' title='Video Editing and Jump Cut'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116679895310294078</id><published>2006-12-22T06:45:00.000-08:00</published><updated>2006-12-23T13:50:15.590-08:00</updated><title type='text'>Terrible Terry Tate</title><content type='html'>What every company needs as their COO.

Some quotes:
&lt;ul&gt;&lt;li&gt;You can't come into my kitchen, kick my do, and take a box full of ballpoints.
Your ass must be crazy.&lt;/li&gt;&lt;li&gt;You can't come tippy toe'n up in this hump bumpy&lt;/li&gt;&lt;li&gt;The only pain I got time for is the pain I inflict on fools that don't know what time it is&lt;/li&gt;&lt;li&gt;Check Razer, check razer, its the pain train, the pain train is coming
WOOO WOOO, WOOO WOOO&lt;/li&gt;&lt;/ul&gt;
&lt;object height="350" width="425" data="http://www.youtube.com/v/4q4jb-kXebQ"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4q4jb-kXebQ"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/object&gt;
&lt;object height="350" width="425" data="http://www.youtube.com/v/CtJOzE1GJWw"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CtJOzE1GJWw"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/object&gt;
&lt;object height="350" width="425" data="http://www.youtube.com/v/IdoNoDETYnw"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IdoNoDETYnw"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/object&gt;
&lt;object height="350" width="425" data="http://www.youtube.com/v/6EHhwxRls2Y"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6EHhwxRls2Y"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/object&gt;
&lt;object height="350" width="425" data="http://www.youtube.com/v/g91wjVxVn5E"&gt;&lt;param name="movie" value="http://www.youtube.com/v/g91wjVxVn5E"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116679895310294078?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116679895310294078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116679895310294078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116679895310294078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116679895310294078'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2006/12/terrible-terry-tate.html' title='Terrible Terry Tate'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116679402095034592</id><published>2006-12-22T05:10:00.000-08:00</published><updated>2007-02-10T13:41:39.996-08:00</updated><title type='text'>Adding digg to blogger</title><content type='html'>So I wanted to add the dig buttons you see around to my blog, not that anyone is going to even read mine but I though I would add it anyway.  I found this &lt;a href="http://diggbutton.blogspot.com/2006/09/add-digg-button-to-single-blogger-post.html"&gt;post   &lt;/a&gt; which pretty much says to make an html file with only this &lt;a href="http://www.digg.com/tools/count"&gt;javascript&lt;/a&gt; and add it as an iframe.  I looked at the source of the javascript and all it does is add and iframe so why would you add and iframe of an iframe?

The other stupid thing is digg requires you to input the url of the digg story not the url of what you are digging.  This makes it a pain in the ass and requires you to digg the story or the button wont even show up, you just get an error.

The reddit button is makes much more sense and the url is the url of the story so you can easily add it to your blogger template like so.
&lt;div style="font-family: courier;"&gt;
&amp;lt;script&gt;reddit_url='&lt;$BlogItemPermalinkURL$&gt;'&amp;lt;/script&amp;gt;
&amp;lt;script language="javascript" src="http://reddit.com/button.js?t=1"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/div&gt;
The digg buttons I add to the blog post not the template like this:
&lt;div style="font-family: courier;"&gt;
&amp;lt;iframe src="http://digg.com/api/diggthis.php?u=[digurl]"
 frameborder="0" height="82" scrolling="no" width="55"&amp;gt;&amp;lt;/iframe&amp;gt;

&lt;/div&gt;
&lt;iframe src="http://digg.com/api/diggthis.php?u=http://digg.com/programming/Adding_digg_to_blogger" frameborder="0" height="82" scrolling="no" width="55"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116679402095034592?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116679402095034592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116679402095034592' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116679402095034592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116679402095034592'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2006/12/adding-digg-to-blogger.html' title='Adding digg to blogger'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116663133323804786</id><published>2006-12-20T08:06:00.000-08:00</published><updated>2006-12-20T08:15:33.246-08:00</updated><title type='text'>Ever need a math tutor</title><content type='html'>This was just on &lt;a href="http://www.reddit.com"&gt;reddit&lt;/a&gt; nothing new but remeber Winnie from the Wonder years.  Check out her July 2005 photos from stuff &lt;a href="http://thegrumpiest.com/?p=2215"&gt;http://thegrumpiest.com/?p=2215.&lt;/a&gt;

But take a look at here wikipedia page&lt;a href="http://en.wikipedia.org/wiki/Danica_McKellar"&gt; http://en.wikipedia.org/wiki/Danica_McKellar&lt;/a&gt; she published a paper on "Percolation and Gibbs states multiplicity for ferromagnetic
Ashkin–Teller models on Z&lt;span style="font-size:85%;"&gt;2" and offers free math tutoring to her fans.

The other cool thing is her and Natalie Portman are the only two real actors with an &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Erdos-Bacon_number"&gt;&lt;b&gt;Erdős–Bacon number&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116663133323804786?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116663133323804786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116663133323804786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116663133323804786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116663133323804786'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2006/12/ever-need-math-tutor.html' title='Ever need a math tutor'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116663076053252079</id><published>2006-12-20T07:57:00.000-08:00</published><updated>2006-12-20T10:19:52.643-08:00</updated><title type='text'>Asterisk Developers Kit</title><content type='html'>I received a marketing email from Digium yesterday found &lt;a href="http://www.digium.com/en/products/hardware/aadk.php"&gt;here&lt;/a&gt;.  For anyone that does asterisk hacking, or uses it as a product, the &lt;a href="http://www.digium.com/en/products/hardware/aadk.php"&gt;asterisk developers ki&lt;/a&gt;t looks like a very worth while investment.

To summarize it:
&lt;ul&gt;&lt;li&gt; &lt;p&gt;An Asterisk Appliance with 64MB RAM, 8MB on board flash, 5 Ethernet ports (4 LAN, WAN), Craft (serial) port, support for 8 analog (FXS/FXO) ports, Universal power supply.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Quad FXS analog card and Quad FXO analog card&lt;/p&gt;&lt;/li&gt;&lt;li&gt;  &lt;p&gt;Multi-media add-on flash cards&lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Cables for all supported port types&lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;Polycom (TM) IP-430 SIP Phone&lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;p&gt;CD with software&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Documentation and specifications&lt;/p&gt;&lt;/li&gt;&lt;li&gt;  &lt;p&gt;How to manuals&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Access to the Digium AADK Wiki&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;And there are 3 packages:
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;AADK Professional Bundle - for the asterisk hackers
&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;AADK Administrator Bundle - if you want some support and trainning
&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;AADK Standard - if you are cheap&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;iframe src='http://digg.com/api/diggthis.php?u=http://www.digg.com/hardware/Asterisk_Developers_Kit' height='82' width='55' frameborder='0' scrolling='no'&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116663076053252079?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116663076053252079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116663076053252079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116663076053252079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116663076053252079'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2006/12/asterisk-developers-kit.html' title='Asterisk Developers Kit'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38117766.post-116634231386967612</id><published>2006-12-16T23:55:00.000-08:00</published><updated>2006-12-20T10:16:41.686-08:00</updated><title type='text'>Wengo Phone</title><content type='html'>Wengo phone releases a flash based SIP phone.  Being the voip guy that I am figured I would try it out and see if there is any possiblity of intergrating it into &lt;a href="http://www.asterisk.org/"&gt;asterisk&lt;/a&gt; or the project that I am helping out with &lt;a href="http://sourceforge.net/projects/web-meetme/"&gt;Web MeetMe.&lt;/a&gt;

*Edit: Wengo phone requires you to be logged in on you blog with the flash app.  Logging in to the chat software does not work, booo.  Kinda cool but useless, waiting for a sip flash phone.  Did a quick google search for one but couldn't find anything.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38117766-116634231386967612?l=justinhamade.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justinhamade.blogspot.com/feeds/116634231386967612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=38117766&amp;postID=116634231386967612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116634231386967612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38117766/posts/default/116634231386967612'/><link rel='alternate' type='text/html' href='http://justinhamade.blogspot.com/2006/12/wengo-phone.html' title='Wengo Phone'/><author><name>Justin Hamade</name><uri>http://www.blogger.com/profile/00860018276812807157</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07507072215599118344'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>