The Most Versatile VoIP Provider: FREE PORTING

Broadband for Asterisk: Now Just $10 a Month… NOT!

If you’re lucky enough to be living in one of the old BellSouth territories of the new AT&T, then you won’t want to miss AT&T’s new DSL offer. It’s the perfect backup for your Asterisk® system. Beginning today, customers ordering new phone service can sign up for 768K DSL service for just $10 a month (prepaid for the first year). The deal lasts for two and a half years, but you must sign up online at fastaccess.com. Not surprisingly, the site has been down most of the morning.

The Fine Print. Well, this was a special offer to fulfill a promise reportedly made in exchange for approval of the AT&T merger with BellSouth and Cingular. The company obviously isn’t too thrilled with the deal as we found out when we tried to sign up at the link above. Once you get to their web site using Internet Explorer only, you’ll notice a little Chat with Live Person icon. So I clicked on that and asked where to find the $10 DSL special for new customers. This may come as a shock to you, but I was disconnected by my PenPal four times in a row. Persistence, however, paid off and my helper finally settled into Royal Runaround mode where she was equally adept.

Suffice it to say, whenever there’s a Live Chat application that won’t let you cut-and-paste the conversation, you should know at the outset that things can only go downhill. And downhill it went… quickly. We’re only sorry that we didn’t capture screen shots of all of the dialogue, but you get the gist of it from the snippet above which transpired at about the 10-minute mark in our little chat. Law school wasn’t nearly enough training to deal with Runaround Sue Jessica.

First, we were told that the special was only available to existing customers. That’s just the opposite of what all the trade rags are saying. Next we were told that we’d have to sign up for dial-up Internet service first ($19.95 a month!) in order to get the "special modem" required for this DSL service. Later, we were told that 768K DSL service was only available in areas where fiber-optic cable (rather than copper) had been run to the neighborhood curb. That wipes out about 99% of the country.

So-called IFITL service is typically a prerequisite for getting AT&T’s 6 megabit DSL service. You can certainly understand why fiber might be necessary to support top performance DSL. But why would you need a fiber optic cable to support rot-gut DSL when the next two higher speeds of DSL service (at additional cost, of course) work perfectly well with copper? Ever heard of a bandwidth shaping router? Well, you can bet that the AT&T folks have because they use traffic shaping routers routinely to restrict bandwidth on their other tiers of DSL service. So why not with 768K service? Uh, because then they’d have to sell it for $10 a month. Why didn’t we think of that?

Bottom Line: AT&T isn’t that thrilled about signing up new customers that only want $10 DSL service. We, of course, will do the only right thing and forward all of this information to our Congressmen and the FCC. In the meantime, if you’ve got a little spare time, go online and chat with Jessica. You probably will get Jessica since everyone we chatted with at BellSouth over a period of almost twelve hours just happened to be named Jessica. Then post your results here so we can enjoy a good chuckle. Just don’t hold your breath waiting for your $10 DSL connection to arrive. Here’s the Monday, June 16 version from our workaholic Jessica.

Introducing Telephone Reminders 3.0: The Free Asterisk Telephone Reminder System

It's free software day again at Nerd Vittles, and today we're updating our Telephone Reminder System for Asterisk® to version 3. The original system let you schedule reminders for future events and, when the appointed date and time arrived, Asterisk swung into action and placed a call to the number you designated to deliver your customized reminder message. Today we add the bells and whistles that just about everyone using the original application requested. Now you can set up recurring reminders that call daily or on weekdays as well as weekly, monthly, and annually. This means it can be used to wake you up in the morning, or to remind Granny to take her medicine every day, or to remind your Little League team of practice times and locations, or to remind you and your customers of scheduled and recurring events.

The smarts for the original system already have been incorporated into our TeleYapper 2.5 Voice Messaging System. But that's a real-time system meaning it begins calling immediately after you choose a group of people to call. This phone reminder system is different in that you can schedule the calls for the near or distant future, you can specify different numbers for the calls, and you can customize the recorded messages for each call. In short, it's perfect for appointment reminders, birthday reminders, anniversary reminders, and anything else you want to remember. All it takes is a phone call to set up each reminder. There's no web page to fill in and no database required to manage the reminders. You can schedule as many reminders per phone number as your little fingers care to dial! And, in our next article, we'll show you how to use a single entry from the new Asterisk Telephone Reminder System to contact a small or large group of people on a recurring basis.

Prerequisites. We've tested version 3 of our appointment reminder system with ISO-installed versions of Asterisk@Home 2.5 and TrixBox 1.2.3 in addition to the Nerd Vittles VMware builds of TrixBox 1.2.3. If you wish to use it with later versions of TrixBox or with a "pure Asterisk" system (not 1.4!), then you shouldn't have any problems. It won't work with version 1.x of Asterisk@Home or 1.4 releases of Asterisk. Post a comment if you have problems. You also will need a system which includes PHP to run this application. We've tested it with PHP 4.3.9, but PHP 5 systems probably will function without many changes in the underlying code. You should be able to install this project and get everything working in under 30 minutes. For those using our VMware TrixBox builds or our Linux PBX-in-a-Flash script for TrixBox 1.2.3 which can be downloaded at the top of this page, we'll walk you through the 5-minute upgrade drill so that you can take advantage of the new Version 3 recurring reminders feature set. If you're installing Telephone Reminders for the first time, complete installation instructions are available on our Best of Nerd Vittles site.

How It Works. The reminder system is actually quite simple to use. You dial extension 1-2-3 on your Asterisk system, enter your password, and then you'll be prompted to record a reminder message. Next you enter the phone number, date, and time for delivery of the reminder message. Finally, you're prompted whether to schedule a single reminder or recurring reminders (weekdays, daily, weekly, monthly, or annually). When the appointed date and time arrives, Asterisk will place the call to the number you specified using your default dialing rules and will play the customized reminder when the call is answered. If the call is not answered, the call will be repeated n number of times with a delay between calls of x minutes before giving up on the call. You'll get an email with the call reminder setup if desired. You also get to configure the number of retries and the delay between calls. Finally, end of the month recurring reminders pose a special problem. Why? Because not all months end on the same numbered day. January has 31, February has 28, April has 30. You get the idea. So the default behavior is as follows, If you schedule monthly reminders on the last day of any month, then we assume you want the reminders delivered on the last day of every month. You can alter this behavior by setting a flag in the reminder.php script if you want monthly reminders to always be delivered on the 28th day of the month, for example.

Finally, a word about failed calls. Reminders are important to most folks, or you wouldn't be scheduling them. So failed calls are problematic. On the one hand, you don't want to overburden your phone system placing thousands of reminder calls just because the calls continue to fail. You may have entered an incorrect phone number, for example. So our middle-of-the-road solution to failed calls is this. You can tell the system how many times to repeat the call and how much time to eat up between attempts. If the call still fails, non-recurring reminders will be deleted from the system. But the reminder message is preserved as well as the recurring reminder for the next date on which to place the call. If you look in /var/lib/asterisk/sounds/custom on your system, you will see some custom sound files (such as the reminder prompts which all begin with reminder). In addition, you will see the actual reminder messages for each of your reminders. The naming convention is HourMinute.Date.PhoneNumber.gsm. If you see entries in this directory with dates before today's date, those are failed call reminders. You can play the sound files on most computers by simply double-clicking on the files. You can delete old reminders for a specific date while logged in as root on your Asterisk system with a command like this:

rm -f /var/lib/asterisk/sounds/custom/*.20060123.*.gsm

Be sure you don't delete today's reminder messages or messages with a future date, or your entire reminder system will be toast!

Here are the components that make up the complete system:

  • AutoAttendant Contexts to Create Reminders
  • Code Snippet to Answer 1-2-3 Calls
  • Allison Voice Prompts for Telephone Reminder 3.0 IVR Interface
  • checkdate.php AGI script to Check for Dates in the Past
  • checktime.php AGI script to Check for Times in the Past
  • reminder.php AGI script to Schedule Calls
  • Reminder Call Processing Contexts
  • run_reminders script to Check for Today's Reminders
  • run_recurring script to Reschedule Recurring Reminders Due Today
  • Limitations. There are a few limitations you need to be aware of. First, you can't schedule delivery of a reminder within the first 5 minutes after midnight each night. That's when the reminder system does its housekeeping. Second, you must schedule reminders at least 5 minutes after you place your call to set up the reminder. This gives the system ample time to generate the configuration files it needs and to put them in the right places. Third, the current reminder system does not fully support simultaneous scheduling of multiple reminders. The current system uses unique names to identify sound files generated by multiple simultaneous callers. However, it still is theoretically possible for two different callers to schedule two reminders for the same phone number and the same reminder time and to do so at the exact same time. This would cause one of the reminders to be discarded. We just wanted to alert you to this remote possibility. But we hasten to add that the chance of this happening is pretty small even in a very large Asterisk system with hundreds of users.

    License. This software is licensed for your use under a Creative Commons Attribution-ShareAlike 2.5 license. Before using this software, please read the terms of the license. A Plain English version of the license is available here. You may not charge a fee for something we are giving you for free. Finally, we ask that you preserve our copyright notice in any copies of the software you make. The same applies to derivative works. If you do not accept the terms of the license, do not use the software. Even if you accept the terms of the license, keep in mind that BY USING THIS SOFTWARE, YOU ASSUME ALL RISKS OF USE AND NO WARRANTIES EXPRESS OR IMPLIED ARE PROVIDED WITH THIS FREE SOFTWARE INCLUDING FITNESS FOR A PARTICULAR USE AND MERCHANTABILITY. In short, it's up to you to determine, at your own risk, whether this software meets your needs. Don't assume that it will, and don't assume that the code is error-free. It's probably not.

    The Game Plan. In today's article, we're going to walk you through upgrading a system on which you already have installed an earlier version of our Telephone Reminders system. As mentioned, if you're installing the software for the first time, stop here and use our Best of Nerd Vittles tutorial. To get the Reminder System upgraded, we're first going to move all of the code into the proper places. This includes the modifications to the dialplan contexts, installation of a new Allison voice prompts, and installation of the upgraded PHP/AGI scripts. Then we'll walk you through configuring the system. And finally we'll schedule a reminder to make sure everything went according to plan.

    Modifying Your Dialplan. Step #1 is to replace some code that's already in your dialplan. The original contexts in extensions_custom.conf looked like this. Find ALL of this code (toward the bottom of the extensions_custom.conf file or, for TrixBox systems, extensions_trixbox.conf in the /etc/asterisk directory on your system) and delete it. The contexts to delete are the following: reminder, reminder2, reminder3, reminder4, reminder5, reminder6, reminder7, reminder8, reminder9, remindem, and remindem2. Replace the deleted contexts with this version 3.0 code.

    For Step #2, make sure the following code snippet is still located in the top section of extensions_custom.conf in the [from-internal-custom] context or, for TrixBox systems, extensions_trixbox.conf in the [from-internal-trixbox] context:

    exten => 123,1,Answer
    exten => 123,2,Wait(1)
    exten => 123,3,Authenticate(12345678)
    exten => 123,4,Goto(reminder,s,1)

    If, for some reason, you already are using extension 1-2-3 on your Asterisk system for some other purpose, then simply adjust the 123 extension in the four lines above to another number that works on your system. This is the number you will dial to schedule reminders. Line 3 is important as well. This is where you set a password for scheduling reminders on your system. Anyone that knows the password can schedule reminders. Simply replace 12345678 with a password that's secure enough for you to sleep well.

    Finally, a head's up. When you do the cut-and-paste, double-check the long lines of code such as h,1 in [reminder9] and be sure all of the text ends up on a single line. Otherwise, things won't work correctly. Once you've added the two sections of code above, save your new config file and reload Asterisk.

    Installing Reminder Voice Prompts. These voice prompts are free for the taking subject to the terms of the license agreement, and they're all the same as version 2.5 except there is a new reminder6.gsm. Just log into your Asterisk server as root and enter the following command to install the new voice prompt:

    cd /var/lib/asterisk/sounds/custom
    wget http://nerdvittles.com/aah2/reminder6.gsm
    chmod 664 reminder*.gsm
    chown asterisk:asterisk reminder*.gsm

    If you need all of the voice prompts, then use these commands instead:

    cd /var/lib/asterisk/sounds/custom
    wget http://nerdvittles.com/aah2/nv-reminder3_voice.zip
    unzip nv-reminder3_voice.zip (be sure to overwrite existing files!)
    chmod 664 reminder*.gsm
    chown asterisk:asterisk reminder*.gsm
    rm -f nv-reminder3_voice.zip

    Installing the Reminder PHP/AGI Scripts. Now we're getting to the new code for version 3. While you're still logged in as root, let's install the final pieces of code that you'll need to get things working. Just execute the commands below:

    cd /var/lib/asterisk/agi-bin
    mv reminder.php reminder25.php
    mv run_reminders run_reminders.25
    mv checkdate.php checkdate25.php
    mv checktime.php checktime25.php
    wget http://nerdvittles.com/aah2/nv-reminder3.zip
    unzip nv-reminder3.zip
    chmod 775 reminder.php
    chown asterisk:asterisk reminder.php
    chmod 775 check*.php
    chown asterisk:asterisk check*.php
    chmod 777 run_reminders
    chown asterisk:asterisk run_reminders
    chmod 777 run_recurring
    chown asterisk:asterisk run_recurring

    Creating Reminders Directories. While you're still logged in as root, create the following directories to store your reminders until the day arrives to execute them. Just issue the following commands. You should already have the reminders directory, but it won't hurt execute the command again just to be sure.

    su asterisk
    cd /var/spool/asterisk
    mkdir reminders
    mkdir recurring
    exit

    Setting Up the Crontab Entries. Now we need to set up the cron jobs to actually move reminders and recurring reminders into the Asterisk call processing directory on the day they are scheduled to run. Be very careful here. If you already have a working Telephone Reminders system, then there will already be an entry for run_reminders. For the new system to work, you MUST adjust the time that the run_reminders script executes so that it occurs AFTER the run_recurring script each day. While logged in as root, edit the crontab file: nano -w /etc/crontab. Be sure you typed the exit command in the last step, or you'll be logged in as asterisk instead of root. And you won't be able to edit the file! Now insert the following commands at the bottom of the crontab file and delete the existing run_reminders entry if you have one. Each command below should go on its own line.

    0 0 * * * root /var/lib/asterisk/agi-bin/run_recurring >/dev/null 2>&1
    3 0 * * * root /var/lib/asterisk/agi-bin/run_reminders >/dev/null 2>&1

    Once you've added the two news lines and deleted the existing run_reminders line, save your changes: Ctrl-X, Y, then press Enter. Whew! That's it for the Reminder code. Now let's configure the system, and you'll be all set.

    Configuring the Reminder System. To configure the reminder system, you'll need to edit the reminder.php script while logged in as root: nano -w /var/lib/asterisk/agi-bin/reminder.php. You'll notice a section of variables at the top of the file that looks like this:

    $endofmonthflag=1 ;
    $extensionmaxdigits=4 ;
    $debug = 1;
    $newlogeachdebug = 1;
    $emaildebuglog = 0;
    $email = "yourname@yourdomain" ;
    $trunk = "local" ;
    $callerid = "6781234567" ;
    $numcallattempts=6 ;
    $calldelaybetweenruns=300 ;
    $timetoring=40 ;
    $acctcode= "Reminder" ;

    This is the only section of code you ought to mess with. When we update the code, we'll assume everything else has been left intact. Be very careful when editing this file. Don't remove any semicolons or quotation marks, or nothing will work! Here's a quick run-down on what each of the above variables does:

  • $endofmonthflag=1 ... Forces monthly recurring reminders scheduled on the last day of a month to the last day of every succeeding month
  • $extensionmaxdigits=4 ... Sets the maximum number of digits for treating outbound calls as calls to local extensions.
  • $debug = 1 ... If set to 1, then a debug log is created in /var/log/asterisk/reminder.txt. Instructions for deleting reminders are in the log.
  • $newlogeachdebug = 1 ... If set to 1, then a new debug log is created each time a reminder is scheduled. Otherwise, file grows and grows.
  • $emaildebuglog = 0 ... If set to 1, the debug log is emailed to the email address set below when each reminder is scheduled.
  • $email = "yourname@yourdomain" ... Enter your actual email address between the quotation marks. Only works if line above is set to 1.
  • $trunk = "local" ... If set to "local", calls are routed using your default dialplan rules. Otherwise, specify a trunk to use, e.g. "sip/telasip-gw".
  • $callerid = "6781234567" ... Specify your caller ID number. Only used if $trunk is not set to "local" above.
  • $numcallattempts=6 ... If there is no answer on the Reminder call, how many times should Asterisk attempt to deliver the reminder?
  • $calldelaybetweenruns=300 ... How many seconds delay should there be between failed call attempts to deliver a reminder?
  • $timetoring=40 ... How many seconds should the call ring when attempting to deliver a reminder?
  • $acctcode= "Reminder" ... What accouting code should be used for reminder calls?
  • Once you've configured the Reminder System to meet your needs, save your changes: Ctrl-X, Y, then press Enter. HINT: You may want to start with the defaults which will work well for most folks.

    Scheduling A Reminder. We're ready to take the Reminder System for a trial run at this juncture. Make sure you've reloaded your Asterisk system, and then dial 123 from an extension on your system. Enter the password you set up for your system and then press the pound key.

    Entering a Reminder Message. You'll first be prompted to record a reminder message. This is the message that will be played when someone answers the reminder call. If you're not scheduling this reminder for yourself, then the message ought to explain who's calling and what the purpose of the call is. Once you've recorded your message, press the pound key to end the recording. You can replay or rerecord the reminder if desired while you're in this step of the reminder creation process.

    Entering the Callback Number. When prompted for the reminder callback number, there are a couple of things to keep in mind. First, if you've specified "local" as the trunk to use for reminders in the reminder.php script, then the phone numbers can be entered in any format supported by your dialplan. Press the pound key after entering the appropriate number. The calls will be placed using the trunks specified in your dialplan rules. The one exception is extensions on your local Asterisk system since these can't be routed by Asterisk@Home or TrixBox systems using your outbound calls dialplan rules. The way we handle extensions is by examining the length of the phone number. At the top of reminder.php, you can specify the maximum number of digits for local extensions by setting $extensionmaxdigits. So long as the callback number is less than or equal to this number of digits, the system has the smarts to correctly route the call to a local extension.

    If you have designated a particular trunk for placement of reminder calls, then you'll need to make certain that the format of the phone numbers entered for reminders on your system matches a dial string supported for this outbound trunk in your dialplan. For example, if this trunk requires that calls be entered with a 1 and then an area code and 7-digit number, then that is the only format that should be used for entering callback numbers in your reminder system. Again, the one exception is calls to local extensions. So long as the number of a local extension is entered with less than or equal the number of digits set for the $extensionmaxdigits variable in reminder.php, the call will be routed properly to the local extension regardless of the trunk setting.

    Finally, here's a shortcut that can be used if the phone you're using to schedule the reminder is the same one on which you want to get the reminder callback. In this case, just press the pound key when prompted for the number to which to deliver the reminder message. This will set the callback number as the caller ID of the phone you used to schedule the call. If it's a local extension, then the caller ID will be set to the local extension number of the phone from which you placed the reminder scheduling call. Just be sure your $extensionmaxdigits is set correctly or calls to local extensions will fail.

    Entering the Date of the Reminder. Once you accept the reminder message, you'll be prompted to enter the date on which this reminder will be delivered. Dates are entered using a four-digit year, then a two-digit month, and then a two-digit day using the time zone of the Asterisk system running the Telephone Reminders System. There is some error correction but not much. You obviously can't schedule reminders in the past! And you don't need to press the pound key after entering the eight digits. Beginning in version 2.5, you now can press the pound key (#) instead of entering an 8-digit date, and the system will set the reminder date to today. Once you've entered a date, the system will tell you what date you entered including the day of the week. If the entry is correct, just press 1 to move on.

    Entering the Time of the Reminder. Now you'll be prompted to enter the delivery time for your reminder. Times are entered as a two-digit hour and two-digit minute using the time zone of the Asterisk system running the Telephone Reminders System. For times less than 1200, you will be prompted whether you meant AM or PM. For those that understand military time, you can avoid this step by entering times using the format: 1345 which means 1:45 p.m. You don't need to press the pound key after entering the four-digit time for delivery of your reminder. Keep in mind that you cannot schedule a reminder for delivery in the first five minutes after midnight. Other times "in the midnight hour" should be entered in the format: 0045 which means 12:45 a.m. Keep in mind that reminder times always must be at least 5 minutes in the future. Finally, you cannot schedule two reminders for the exact same date and time for delivery to the same phone number. Once you enter a delivery time, the system will play back both the date and time for the reminder as a precaution. Press 1 to accept your entries.

    Entering Recurring Reminders. Beginning with version 3, you now will be prompted whether to schedule (1) a single reminder, (2) a recurring reminder every weekday (M-F), (3),a recurring reminder every day, (4) a recurring reminder every week, (5) a recurring reminder every month, or (6) a recurring reminder every year. Once you make a selection, your reminder will be scheduled. If you choose an option other than 1 through 6, a single reminder will be scheduled.

    Where Reminders Are Stored. There are actually two files that make up each reminder: the .call file which places the actual call and the .gsm file which is the reminder message itself. The file naming convention is HourMinute.Date.PhoneNumber with either a .call or .gsm extension. The sound files are all stored in /var/lib/asterisk/sounds/custom. For recurring reminders, duplicates of the .call script and the .gsm message are stored in /var/spool/asterisk/recurring with the date of the next recurring reminder. At midnight on the next scheduled date, the two files are copied to the /var/spool/asterisk/reminders and /var/lib/asterisk/sounds/custom folders respectively. Then the next scheduled reminder date is set in the two filenames. For single reminders, prior to the delivery date of the reminder message, the .call file is stored in /var/spool/asterisk/reminders. Then, at 12:03 am on the date the reminder is scheduled for delivery, the run_reminders script in /var/lib/asterisk/agi-bin moves the affected .call files to /var/spool/asterisk/outgoing. The .call files in the outgoing directory are reviewed every minute of the day by Asterisk. By examining the time stamp of the file, Asterisk looks for a match with the current hour and minute of the day. Once the time for the call arrives, Asterisk processes the .call script and places the call. All dialing retries are handled internally by Asterisk with no user or program control so it's important to set your default values correctly in the reminder.php script as explained above. Once the .call file is processed, Asterisk discards the file whether the call was successful or not. As noted above, the reminder message file is only discarded if the call is completed successfully. So, from time to time, you do need to review the contents of /var/lib/asterisk/sounds/custom and discard reminder messages, if any, with dates in the past. Note also that, if you begin scheduling a reminder and change your mind and hang up after recording a reminder message, that recorded message will still exist in /var/lib/asterisk/sounds/custom.

    Finally, a word of caution about the reminder message files: be very careful in deleting these files. The message files and .call files are linked by filename only, and there is no error detection or correction if the message file gets discarded before the time for the reminder call arrives. What would happen in such a situation is the call would be placed, someone would answer, Allison would say "please hold for an important reminder," and then there would be a brief silence followed by Allison saying "to repeat this reminder, press 1; otherwise, press 2" which is not entirely helpful. To delete a recurring reminder, delete both the .call and .gsm files from /var/spool/asterisk/recurring. Note that the .call file will have an additional extension which tells the recurring type, e.g. .daily, .weekly, etc.

    Reminder and Wakeup Call Processing. It has been documented that flooding Asterisk with a bunch of .call scripts simultaneously can cause some of the scripts to be discarded without being executed. We hope this has been resolved in Asterisk 1.2.4, but just be alert to the possibility of a problem if multiple calls are scheduled at exactly the same time to different numbers.

    When you're first getting started with the reminder system, it's probably a good idea to fire up Asterisk's Command Line Interface (CLI): asterisk -rvvvvv. Then you can watch as the reminders are scheduled and reminder calls are placed. Just schedule a reminder for five minutes from the time you begin the reminder call, and you'll be all set to give it a whirl. By default, there's also a reminder log file produced for the last reminder call placed. You can display this file with the following command: cat /var/log/asterisk/reminder.txt.

    For Programmers Only. If you're just getting into PHP and AGI programming with Asterisk, then have a second look at reminder.php. In particular, take a look at the section of code that begins with parse agi headers into array. As best we can tell, our initial tutorial on Telephone Reminders was the first version of this subroutine written in PHP that actually worked. We've tried to repeat our success here. If you review the log file (reminder.txt), you will see a listing of all the AGI headers which are passed by Asterisk to PHP. But this is the first code we've seen that correctly reads the headers into variables where you can actually retrieve the content. We call it a feature. For example, the commented out line ($tmp = $agi['dnid']) shows the syntax to retrieve the DNID value from Asterisk. Just make a mental note that the parse AGI headers code in reminder.php actually works. Some of our previous code inherited the mistakes of others, but we've now taken the time to get this functioning properly because we needed it for something else. Here's the complete list of AGI headers that can be saved to variables in your PHP code should the need ever arise:

    read: agi_request: reminder.php
    read: agi_channel: SIP/204-6a1a
    read: agi_language: en
    read: agi_type: SIP
    read: agi_uniqueid: 1138010325.1367
    read: agi_callerid: "Line2" <204>
    read: agi_dnid: 123
    read: agi_rdnis: unknown
    read: agi_context: reminder9
    read: agi_extension: h
    read: agi_priority: 2
    read: agi_enhanced: 0.0
    read: agi_accountcode:

    You'll also want to take note of a little quirk in Asterisk (compared to some PBXs). To decipher the extension which actually placed a call, you must parse the agi_channel variable for the data between the slash and hyphen characters since the DNID (dialed number identifier) returns the extension being called (as opposed to the originating extension) when an internal call is placed. Here's one PHP approach to get the answer which in this case happens to be extension 204. Regex wizards could probably save a line of code, but who cares.

    $CallingID = substr(stristr($agi['channel'],"/"),1);
    $CallingID = substr($CallingID,0,strrpos($CallingID,"-"));

    Web Interface to Telephone Reminders. We've built a very simple web page that will let you review which reminders are pending on your system. Recurring reminders are NOT yet included excepted those scheduled for delivery today. You can access the web page directly at http://192.168.0.111/reminders/ using the IP address of your Asterisk system. To install the Telephone Reminders web interface, log into your Asterisk system as root and then issue the following commands:

    cd /var/www/html
    mkdir reminders
    cd reminders
    wget http://nerdvittles.com/aah2/webreminder.zip
    unzip webreminder.zip
    rm webreminder.zip

    Be advised that we are just getting started with a web interface to the Telephone Reminders application. Stay tuned for loads of additional features!

    Security Reminder. If you plan to open the Asterisk web interface on your system to the public Internet, make sure to take security precautions to reduce the risk of a stranger trashing your system or running up your phone bill. Just click here and search for our articles on security to get your system up to speed.

    Hot Tip! O'Reilly's must-have book, Asterisk: The Future of Telephony, is still available for free download here under a Creative Commons license. This is a cleaned up version of the original PDF which fixes pagination and compresses the file size to 3.9MB using Acrobat's Reduce File Size tool. Requires at least Acrobat 4 to load. Special thanks to Alexander Burke for all the hard work cleaning this up.

    Email Delivery of Reminders. Assuming you have email messaging working on your Asterisk system, Telephone Reminders has the ability to deliver an email copy of reminders to the recipient in addition to a phone call. Be advised that, if the phone call is never completed, the email copy of the reminder will not be delivered. The reason for this is because Asterisk never passes the call to the context which handles delivery of the email message until the call is connected. So ... no connection, no email. However, if the recipient has an answering machine or voice mail, that would trigger delivery of the email message.

    Once you've installed the new contexts to support email messaging, step two is registering email addresses for extensions and phone numbers to which you want email reminders delivered. Log in to your Asterisk server as root, and start up the Command Line Interface (CLI): asterisk -r. For each extension and phone number for which you want to activate email reminders, enter a command at the CLI prompt that looks like this: database put EMAIL 6781234567 joe@schmo.com where 6781234567 is the phone number of the reminder recipient and joe@schmo.com is the recipient's email address. You can display all existing EMAIL addresses that have been entered into your Asterisk database with this command: database show EMAIL. If you need to modify an existing entry, simply delete it and reenter it. To delete an existing entry, use the following syntax: database del EMAIL 6781234567.

    MIME-Construct: Wherefore Art Thou? A Linux utility, MIME-Construct, made it easy to convert images (like faxes) to PDF documents and also facilitated the emailing of just about any other document including reminder messages. Unfortunately, it came up missing in TrixBox, and it's difficult to install because of all the Linux dependencies. So here's a simple solution that restores the original functionality of MIME-construct thanks to the programming genius of Rob Thomas. Since Rob's fax-process.pl code (included in freePBX) mimics the old MIME-construct application, the simple solution was just to tweak it a bit for Nerd Vittles and TrixBox compatibility and then copy a renamed version into the PATH (remember the DOS PATH!) on your Linux box. Log in as root and issue these commands, and you'll be back in the mime-construct business with TrixBox:

    cd /usr/local/bin
    wget http://nerdvittles.com/trixbox123/mime-construct
    chmod +x mime-construct


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive... by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You're not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles Fan Club Map. Thanks for visiting! We hope you'll take a second and add yourself to our Frappr World Map compliments of Google. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don't know the difference in the last two, here's the best definition we've found: "a nerd is very similar to a geek, but with more RAM and a faster modem." We're always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you're visiting as well.


    Some Recent Nerd Vittles Articles of Interest...

    Putting TeleYapper to the Test

    For those that are new to Nerd Vittles, you may not recall that, on Valentine's Day in 2006, we released TeleYapper, a telephone broadcasting system that distributes reminders and other messages to large or small groups of people by phone, of course. Believe it or not, it still works with almost all versions of TrixBox and Asterisk@Home 2.5 or later. But, it's one thing to develop a piece of software that can send unattended telephone reminders to your clients, patients, or Little League team. It's quite another to actually use it for a huge project and find out where all the warts are. As the resident cheerleader in our new neighborhood, I was wrestling with how to get detailed information about a meeting to review a proposed zoning change to a group of 700+ homeowners... in a hurry. Delivering flyers door-to-door was not going to happen. E-mail was certainly an option, but that unfortunately is hit and miss these days. With spam blockers, spam filters, missing email addresses, and verification requirements from companies such EarthLink, we decided we could only count on a delivery success rate of about 50 per cent.

    The one piece of technology that everyone in the neighborhood had was a telephone. And our neighborhood database showed only 7 people with unlisted or do-not-call telephone numbers. So it was time to dust off our very own, free TeleYapper software and put it to the test using Asterisk®. Could it really deliver 700 phone calls using Voice Over IP with a home broadband connection in a reasonable time at a reasonable cost without any problems? To preserve our existing home phone system, we decided to really push the envelope by running it on a Windows desktop using our out-of-the-box VMware version of TrixBox 1.2.3.

    Picking a Provider. It may not sound like a big deal, but choosing a really good VoIP provider matters when all of your neighbors are going to be listening to a 60 second message that has your name all over it. Can you imagine getting complaints from all your neighbors that go something like this: "I got some funny message from you last night on my answering machine, and I couldn't understand a single word of it. There was all this echoing, and I finally deleted the message after listening to about 10 seconds of gibberish." So, yes, there was the personal reputation to preserve. And picking a high-quality VoIP service provider was crucial in getting the actual message content delivered reliably. But there was more to consider as well.

    First, you can't really use an all-you-can-eat VoIP service for something like this because it will trigger virtually every safeguard mechanism providers have put in place to make certain that folks aren't making unlimited, automated business calls on a residential phone plan. Second, with the exception of TelaSIP, most all-you-can-eat providers won't let you adjust the CallerID of the outbound calls. We wanted to do this to identify the call as coming from the neighborhood association's telephone number, not mine! Then there's the cost factor. We didn't mind paying by the minute within reason, but 2¢ per minute was just too expensive, and we'll explain why in a moment.

    We ended up picking Vitelity for a number of reasons. Most importantly, they have outstanding VoIP service with support for unlimited outbound trunks if you have the bandwidth to support it. We chose to use up to 4 simultaneous trunks which worked well using Comcast broadband service. They also have the best and most flexible configuration options in the business. You can even create your own sub-accounts. Thus, we could set up a new TrixBox system with a sub-account even though we also use Vitelity as a fallback provider on our home system. Most providers don't support sub-accounts or even multiple accounts. With any other provider, you would have been forced to disable the existing trunk on your main system before you could use it on another system. With a Vitelity sub-account, none of this juggling is necessary. Vitelity also provides adjustable CallerID and excellent call accounting with detailed, tailorable logs which made it easy to print a report and get reimbursed for the calls. And, last but not least, their pricing was reasonable at 1.39¢ per minute with six second billing increments and no charges for failed calls. We made the right choice. Setup was easy using their Asterisk and TrixBox templates, and the calls were flawless with no hiccups.

    Setting Up the Database. Now things get interesting. As installed, TeleYapper comes with a MySQL database that is preconfigured to work with TeleYapper. The problem is that you either have to do a lot of typing to get the data into that database before you make the first call, or you need a way to quickly assimilate information from an alternate source. Since we were working with a fairly large number of records, we didn't relish banging in 700+ names and phone numbers. So here's a little trick that works with just a little bit of database knowledge. There is no easy way to "import" data from a text file or other MySQL database because the fieldnames and field sizes won't match up. However, you can do something similar. What we did was export the neighborhood database into a comma-delimited ASCII text file. Then, using phpMyAdmin which comes with TrixBox, you can create a MySQL database table using this file as your source. There are hundreds of good tools for importing data into MySQL. Just do a little Googling. Or you can try Navicat which works for many formats. That's only half the battle unfortunately.

    You still need to get the data into a format that TeleYapper can use, or you have a good bit of programming work ahead of you. We wrote the TeleYapper code, but we still didn't want to muck around in it to make this database work. So here's the trick. When you create your new table (we'll call it XYZ), create it as part of the teleyapper database on your system. Then take a look at the callees table that comes with TeleYapper. You'll notice that it has the following fields with the field types and lengths shown in parentheses:

    id (medium integer 9)
    name (varchar 40)
    phonenum (varchar 20)
    group (tiny integer 1)
    lastokcall (datetime)
    lastcall (varchar 7)

    Using phpMyAdmin, you want to modify the structure of your new XYZ table so that it includes the fields shown above. For example, if your XYZ table has a field called LASTNAME, simply rename it to name and adjust the field length. You won't lose your existing data. Do the same thing with the phone number field. You'll probably have to add new fields to your XYZ table for id, group, lastokcall, and lastcall. Don't leave any of the fields out or TeleYapper will croak when you try to run it. For the id field, be sure to choose the auto-increment and index options so you get a unique field in your table. Once you're finished, browse through the file and make sure everything looks right. For phone numbers, be sure they're in one of the two following formats: 404-123-4567 or 4041234567. That's what TeleYapper is expecting to find.

    When we originally wrote TeleYapper, we weren't really focused on folks using external databases, but you may need to. So, if your phone numbers aren't in this format, you can edit the teleyapper.php file in /var/lib/asterisk/agi-bin and add a few lines of code that look like this to convert 404.123.4567 and (404) 123-4567 to 4041234567 and to get rid of spaces in entries like 404 123 4567:

    $phonenum = str_replace( ".", "", $phonenum );
    $phonenum = str_replace( " ", "", $phonenum );
    $phonenum = str_replace( "(", "", $phonenum );
    $phonenum = str_replace( ")", "", $phonenum );

    This new code should be inserted immediately after existing line 231 which reads: $phonenum = $row["phonenum"].

    Now where were we? Once your new database table looks good to go, delete the existing callees table using the Drop icon. Then rename your XYZ table to callees. Now your TeleYapper database is ready for use. If you want to be able to use subsets of the table to make calls, you'll need to fill in appropriate group numbers. Otherwise, every entry will have a group entry of zero.

    Calling Logistics. We built some flexibility into TeleYapper to handle multiple, simultaneous calls as well as redials. Call us nervous, but we like to watch what's going on when calls are placed. And when you get too many things going on at the same time, it's difficult to monitor with asterisk -rvvvv. This is especially true if the length of the message you plan to deliver is 50 seconds or more. Why? Well, answering machines don't typically pick up on the first ring, and neither do people. So, if you only separate your calls by one minute and you permit redials for calls that go unanswered, you can quickly have 7 or 8 calls going on at the same time since TeleYapper is designed to replay your message once if an answering machine picks up or no one presses a key after the initial message plays out. Our solution was to space out the calls a bit more (2 minutes instead of 1) and turn off the automatic redial of failed calls. To do this, edit the TeleYapper app and make the following entries using your desired CallerID number, of course: nano -w /var/lib/asterisk/agi-bin/teleyapper.php:

    $numcallattempts=0 ;
    $callspread=2 ;
    $callerid = "6781234567" ;

    Unexpected Surprise. Some folks are never home when you try to call them, and we expected that when TeleYapper was designed. But, believe it or not, about 50 people out of 700 in our neighborhhood don't have an answering machine. In short, they don't seem to care if they miss that all-important call announcing that they've won the latest lottery sweepstakes in England. To be honest, I hadn't really appreciated the scope of that wrinkle when TeleYapper was being developed. Yes, there was a way to kick off another round of calling, but this quantity of redials forced us to adjust the redial option ($numcallattempts) to 0 to avoid dozens of simultaneous outbound calls. Here's a little tidbit of practical wisdom for would-be programmers. If someone isn't answering their phone at 10:02 on a weekday morning, chances are they're probably not going to answer at 10:04 a.m. either. They're at work, stupid! So you can waste the entire day with fruitless redials, or come up with a new Plan B. Our solution was pretty simple, we placed a round of calls beginning at 9 a.m. in the morning, and then we placed another round of calls (to pick up the failed calls) starting at 6 p.m. the following night. Keep in mind that, if you want to cancel your round of calls in the middle, you can't just shut down Asterisk and pick up where you left off the next day. Why? Because TeleYapper schedules each call for a specific time of the day on the specific day that you first run the application. If you shut down your system and restart it the following morning, it will try to place all the remaining calls at once. The solution is fairly simple. Just delete all the files in /var/spool/asterisk/outgoing with commands like this. The first command is a good idea when you first start your calling spree. Look at the last entry in the directory to decipher what time your last call will be placed. If it's in the middle of the night, you might want to delete some of the entries and place those calls on a subsequent day during daylight hours.

    ls -all /var/spool/asterisk/outgoing
    rm -f /var/spool/asterisk/outgoing/*

    The next day when you're ready to pick up where you left off, initiate another TeleYapper session with the same group ID and choose option 3 to dial calls that never were completed.

    TeleYapper's Calling Process. Here are the actual steps in the TeleYapper call setup process:

  • Caller with TeleYapper password places call to M-S-G (extension 674) to activate a TeleYapper session.
  • Asterisk answers the call, provides IVR menu: playback a message, record a new message, or place a call.
  • If caller chooses to place a call, IVR prompts for Group number to call (0-9).
  • Asterisk passes the Group number to MySQL (checkgroup.php) to look up the number of callees in the chosen Group.
  • Group count is passed back to Asterisk which uses Allison to tell the caller how many callees are in the chosen Group.
  • Caller has option of placing the call, hanging up, or choosing advanced options (This is Option 3. It redials previously unsuccessful calls in chosen Group again).
  • If caller chooses to place a new call, Asterisk thanks the caller, hangs up, and then passes control to teleyapper.php to handle placing the calls.
  • TeleYapper time stamps dialing scripts a minute apart for each call beginning two minutes after the initiating request. Scripts are placed in the Asterisk outgoing calls queue.
  • TeleYapper initializes the date/time and status fields for each record in the Group to be called. These are only filled in when a call is then answered.
  • If you've enabled logging in teleyapper.php, then the log is generated after all of the call setups have been completed.
  • If you've enabled emailing of the teleyapper.php log, then the log is emailed to your email address at the same time.
  • Asterisk checks its call queue each minute and places each call at the appointed time, Then it waits for the callee to answer.
  • If no one answers the call, nothing is posted to the MySQL database regarding call completion. That's how we identify unsuccessful calls.
  • If the call is answered, the callee is advised to hold for an important message and then your prerecorded message plays.
  • Callee is then prompted to press 1 to replay the message, press 2 to blacklist the last caller (you!), or press 3 to hang up.
  • If callee presses 1, your message is replayed, and then the call is disconnected. MySQL database will show date/time of call with ReplayedMsg as status.
  • If callee presses 2, log will reflect that caller requested blacklisting. MySQL will actually DELETE this person from your database. It's the LAW!
  • If callee presses 3, Allison says goodbye and Asterisk hangs up the call. MySQL database will show date/time of call with status of OK.
  • If callee makes no choice, Asterisk will replay your message, then hang up, and record the date/time of call with status of AnsMachine.
  • If you've enabled logging in teleyapper2.php, then the individual call log is generated and appended to the main log file after each call has been placed.
  • If you've enabled emailing in teleyapper2.php, then the call log is emailed to your email address after EACH call has been placed.
  • The Tab. You're probably wondering what the cost was to deliver all of the messages to 700 people since we were paying by the minute. Since the message was about a minute long, that translated into roughly a two minute call for calls in which an answering machine picked up since TeleYapper automatically replays a message if the callee doesn't press a button on their phone. That accounted for roughly 70% of the calls. Even with the large volume of calls to answering machines, the total tab for placing the 700 calls was just under $10. Enjoy!


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive... by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You're not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles Fan Club Map. Thanks for visiting! We hope you'll take a second and add yourself to our Frappr World Map compliments of Google. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don't know the difference in the last two, here's the best definition we've found: "a nerd is very similar to a geek, but with more RAM and a faster modem." We're always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you're visiting as well.


    Some Recent Nerd Vittles Articles of Interest...

    Another Asterisk Security Hole to Plug in TrixBox Systems (updated)

    Here we go again to patch another denial of service problem and some SIP vulnerabilities with Asterisk®. All versions are apparently affected. We obviously can't provide step-by-step instructions for each and every version of Asterisk@Home and TrixBox. But we have thousands of loyal readers that depend upon TrixBox 1.2.3 systems in a production environment. So today's column is for these folks. Our special thanks to Bubba for lending a technical hand as well. We've tested this pretty carefully on Nerd Vittles editions of TrixBox 1.2.3. That includes PBX-in-a-Flash implementations on Linux systems as well as Nerd Vittles VMware builds of TrixBox 1.2.3 which run on Windows and Mac desktop systems. If you're running a different system, you'll have to read between the lines and do the best you can. It reportedly works fine to upgrade Trixbox 2.x sysems as well. If you really get stumped, post your questions on the TrixBox forums and someone will come to your rescue. Make a backup of your system before you begin. For an excellent free backup solution, visit Thomas King's site for Backup 2 and follow the instructions.

    The Asterisk Security Problem. Today's issues are well documented on the asterisk-announce mailing list. You can read the archive here. Incidentally, for those that didn't know it, we've provided a convenient link to all of the Asterisk mailing list archives in the right column. Just click on Asterisk ListServ. New versions of both Asterisk and Zaptel are now available, and today we'll show you how to apply the upgrade to Nerd Vittles TrixBox 1.2.3 systems.

    Getting the Latest Kernel Source for TrixBox. TrixBox systems don't ship with kernel source code so we have to begin there before we have the necessary pieces in place to compile the new version of Asterisk and Zaptel. Log into your Asterisk server as root and issue the following command:

    yum -y install kernel-devel kernel

    Addressing the RedHat Bug. Every time there is an update using the Asterisk kernel, module support needs to be rebuilt using the new kernel. Unfortunately, a RedHat bug (inherited by CentOS) causes the rebuilding process to fail. Here's the fix. Log into your new server as root and issue the following commands to determine which new kernel source was loaded on your system:

    cd /usr/src/kernels
    ls

    You should see an entry that looks something like this: 2.6.9-34.0.2.EL-something. Depending upon the processor in your system, the something may be different than our machine. Write down the name of the new kernel directory and substitute it below for 2.6.9-34.0.2.EL-i686. Now issue these commands:

    cd /usr/src/kernels/2.6.9-34.0.2.EL-i686/include/linux
    mv spinlock.h spinlock.h.old
    wget http://nerdvittles.com/trixbox/spinlock.h
    shutdown -r now

    Fixing Some Source Code Wrinkles. At least one of the existing (older) source modules in the TrixBox 1.2.3 build will cause Asterisk to fail to restart after updating Asterisk. The simple fix below solved it for us. Your mileage may vary. If you have problems, look at the tail of the Asterisk error log (tail /var/log/asterisk/full) and then find the offending source module in the directory shown below. Rename the module and try the compiles again. Here's the error we received (app_speech_utils.so: Asterisk died with code 1.) and what solved it for us without breaking anything (actually it apparently does break Lumenvox; review Comment #7 in our previous security column for how to fix it):

    cd /usr/lib/asterisk/modules
    mv app_speech_utils.so app_speech_utils.so.old

    It also has been reported that some versions of TrixBox may no longer function without adding the openssl-devel module. Thanks to David Josephson for the heads up.

    yum install openssl-devel

    Installing Asterisk 1.2.18 and Zaptel 1.2.17 and AddOns 1.2.6. Now we're ready to install the updates. While still logged in as root, execute the following commands in order:

    amportal stop

    cd /usr/src
    wget http://ftp.digium.com/pub/telephony/zaptel/zaptel-1.2.17.1.tar.gz
    wget http://ftp.digium.com/pub/telephony/libpri/libpri-1.2.4.tar.gz
    wget http://ftp.digium.com/pub/telephony/asterisk/asterisk-1.2.18.tar.gz
    wget http://ftp.digium.com/pub/telephony/asterisk/asterisk-addons-1.2.6.tar.gz

    tar -zxvf zaptel-1.2.17.1.tar.gz
    tar -zxvf libpri-1.2.4.tar.gz
    tar -zxvf asterisk-1.2.18.tar.gz
    tar -zxvf asterisk-addons-1.2.6.tar.gz

    cd zaptel-1.2.17.1
    make clean
    make install
    cd ..

    cd libpri-1.2.4
    make clean
    make install
    cd ..

    cd asterisk-1.2.18
    make clean
    make install
    cd ..

    cd asterisk-addons-1.2.6
    make clean
    make install
    cd ..

    shutdown -r now

    Now rebuild support for your ZAP devices or ztdummy if you have no ZAP devices. Log in as root again and type the following command: rebuild_zaptel. Then reboot your system: shutdown -r now. Now log in as root again. If you have zaptel devices, type modprobe wcfxo. Whether you have zaptel devices or not, type amportal stop and then genzaptelconf. Reboot your system again, and you should be back in business.

    freePBX Cleanup. For some reason, these security updates cause some minor problems with the freePBX configuration. Some users report that Music on Hold stops functioning while others have indicated that the introductory prompt for voice mail stops functioning. Both fixes are simple. Here's how.

    For the Music on Hold problem, open freePBX with your web browser. Click MusicOnHold, then click Default under the Add Music Category listing. Now click Enable Random Play button, and click the Red Bar to reload Asterisk.

    For the introductory voice prompt with voice mail, click General Settings. The fifth option on the page is Direct Dial to VoiceMail Message Type. Change the setting from Default to Unavailable. Save your change and click the Red Bar to reload Asterisk. You should have smooth sailing after these tweaks. Enjoy!

    Securing AsteriDex. If you have a preconfigured TrixBox system that includes our very own AsteriDex, you'll need to download and install this simple patch to resolve a security vulnerability that was discovered. Log into your Asterisk server as root and issue the following commands:

    cd /var/www/html/asteridex
    rm -f callboth.php
    wget http://nerdvittles.com/trixbox11/callboth.zip
    unzip callboth.zip
    rm -f callboth.zip
    chown asterisk:asterisk callboth.php
    chmod 775 callboth.php


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive... by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You're not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles Fan Club Map. Thanks for visiting! We hope you'll take a second and add yourself to our Frappr World Map compliments of Google. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don't know the difference in the last two, here's the best definition we've found: "a nerd is very similar to a geek, but with more RAM and a faster modem." We're always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you're visiting as well.


    Some Recent Nerd Vittles Articles of Interest...

    Introducing The Idolizer II for American Idol Fans with Asterisk

    Last year's demise of Kelly Pickler prompted us to put on our programming hat to conquer FOX TV® network's American Idol® and this year they've destroyed the singing career of poor Sanjaya Malakar. You'll have to agree that there's nothing quite as mind numbing as an hour of American Idol and 50 of your favorite commercials. As if that weren't enough, they expect you to sit by your telephone for TWO FOUR HOURS voting for your hero after the commercials end.

    Since our original release of The Idolizer, much has changed. Not only are there new contestants, but now there's freePBX and TrixBox. Enter, The Idolizer II. So today's Asterisk® project is for those that have better things to do than dialing a tollfree number for two hours every Tuesday evening now that we're getting down to the wire on American Idol. And, no, the show's producers don't like autodialers. We don't like commercials (especially ten at a time), but they're still showing those. So here's the deal. Cut out the commercials, and we'll turn off our autodialer. And we'd bet DialIdol.com will, too. And, no, we're not affiliated with the Fair and Balanced® network nor the American Idol® show. We just don't want to waste two hours dialing the same phone number over and over ... when we could be doing our Honey-Do's to make the Little Mrs. happy.

    Prerequisites. To use The Idolizer II autodialer with Asterisk, you'll need a free TrixBox PBX or at least a copy of the VMware version of TrixBox 1.2.3 for Windows or a Mac. Both run in a window on your desktop machine of choice. This works on any version of TrixBox or a plain Asterisk system running a current version of freePBX. Our tutorial will get you up and running in under an hour. Then you'll need an account with a hosting provider that gives you free calls to toll-free numbers or unlimited outbound calling in the U.S.

    Installation. Using a web browser, open the TrixBox Control Panel and choose System Administration->Config Edit->extensions_trixbox.conf and add the following custom context to the bottom of the file:

    [custom-idolizer]
    exten => s,1,SetGlobalVar(COUNTER=1)
    exten => s,2,Answer
    exten => s,3,Wait(2)
    exten => s,4,Dial(sip/8664365701@telasip-gw|18|L(10000:2000:5000)) ; 18 for TelaSIP, 22 for FWD
    ;exten => s,4,Dial(iax2/*18664365701@fwd|22|L(10000:2000:5000)) ; 18 for TelaSIP, 22 for FWD
    exten => s,5,Goto(h,1)
    exten => s,105,NoOp(BUSY)
    exten => s,106,Goto(h,1)
    exten => h,1,SetGlobalVar(COUNTER=$[${COUNTER} + 1])
    exten => h,2,NoOp(Counter: ${COUNTER})
    exten => h,3,Wait(6)
    exten => h,4,GotoIf($["${COUNTER}" < "999"]?s,2) exten => h,5,Hangup

    Once you know the phone number of the contestant you wish to vote for, make the following adjustments to the code above:

  • Provider ... Replace telasip-gw with the trunk name of your VoIP provider in line s,4 (see samples)
  • Protocol ... Be sure you specify the correct protocol for your provider: sip or iax2 (see samples)
  • Dialing Prefix ... The dialing prefix must be added to match what your provider expects to receive before the 10-digit, toll-free number (see samples)
  • Toll-Free Number ... Enter the 10-digit number (default: 8664365701) of your favorite contestant in line s,4 (see samples)
  • AutoDial Counter ... Set the maximum number of times you want the call placed in line h,4 (999 is default)
  • Now move to the top of the file and insert the following code in the [from-internal-trixbox] context using an available extension number on your system (default=4365 which spells I-D-O-L on your trusty Asterisk telephone):

    exten => 4365,1,Goto(custom-idolizer,s,1)

    Click the Update button to save your changes. Now open freePBX and choose Setup->Misc Destinations. For the Description, enter Idolizer II. For the Dial entry, type 4365. Click Submit Changes and then the Red Bar to reload your Asterisk settings.

    Tweaking the Settings. If you find that your calls aren't being completed or that your votes aren't being registered (i.e. the call disconnects before you are thanked for voting), it's easy to fine tune the script. The number 18 in s,4 tells the dialer how many seconds to wait for an answer when placing calls. The number 10000 in s,4 (in thousandths of a second) tells Asterisk how long to stay connected once a call is answered. And the number 6 in h,3 tells Asterisk how many seconds to wait between placing calls. After making changes, log into your server as root and type: amportal restart.

    Using the AutoDialer. When you're ready to begin your dialing spree, pick up an extension on your system and dial the extension number you assigned to The Idolizer II. Remember, the default number is 4365. Put the receiver down (don't hang up!) and enjoy the rest of your evening while The Idolizer II does the dialing for you. When you're ready to stop voting, hang up the phone. If you'd like to follow the progress of your calls, fire up the Command Line Interface (CLI) on your Asterisk system (asterisk -rvvvvv) after logging in as root. Enjoy the show!


    The Year of Flash. If you're a slow learner like us, be glad you waited until now to tackle Adobe's Flash technology. The unbelievably simple tools that are now available to build Flash applications are nothing short of mind-boggling. We've been prototyping some of this technology for a new neighborhood web site. Have a look at this link, and click around the various Flash applets. We built it all from nothing in UNDER 3 HOURS! They look almost as good as Apple's Dashboard Widgets except they'll run on any platform: Windows, Mac, or Linux. All you need is a current web browser with a Flash Player to run these babies. Internet Explorer, Firefox, and Safari all work just fine. If you want to do a little experimenting, here's the deal of the year. The best flash tools on the planet are made by CoffeeCup Software. A close runner-up is Amara Software. You can visit their sites and get free demos to try out. Then you can buy all the tools from CoffeeCup for about $700 or from Amara for $129... or you can sign up for a year of hosting with Lunarpages and get every single CoffeeCup application for free. And, just so you don't feel totally ripped off by the one-year web hosting fee of $84, Lunarpages throws in support for 10 domains, 250 gigs of storage space, 2.5 terabytes of monthly bandwidth, and a free domain registration for as long as you host with them. Use the coupon code blog25 when you sign up to save an additional $25. That makes the total cost $59 for all you math wizards. Our site link to the Flash Widgets is actually hosted at Lunarpages so you can judge the performance for yourself. If you want them to back up your data every night and restore any or all files from a backup at any time, add another whopping $1.50 a month. Yes, we get a spiff if you sign up using our link. Sure beats clicking on the Donate button, doesn't it? And, if you happen to work in a K/12 school, the deal is even sweeter: the web hosting is free and so are five of the very best CoffeeCup Software applications. Now go learn something new or, better yet, teach it to a kid!


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive... by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You're not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles User Map. Thanks for visiting! We hope you'll take a second and add yourself to our Frappr World Map. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don't know the difference in the last two, here's the best definition we've found: "a nerd is very similar to a geek, but with more RAM and a faster modem." The map still isn't quite representative of where all of our visitors are coming from, but we're getting there. We're always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you're visiting as well. We'll check it out one of these days.


    Some Recent Nerd Vittles Articles of Interest...

    Introducing the Asterisk WiFi HotSpot Finder

    We’re all rested up now that we’ve had a little R&R time. So today we’ve put together an application requested by one of our loyal readers. It’s an Asterisk®-based WiFi HotSpot Locator. All you do is pick up a telephone on your Asterisk system and dial WiFi. Then plug in any U.S. zip code and wait for E-Gor to read you the addresses of the closest Wi-Fi Hot Spots. We initially had planned to include all of the free FON hot spots, but their database is going to take a little work to get it into proper shape for use in this application. So we decided to save the FON hot spots for version 2. In the meantime, there’s a terrific (meaning free) WAP service for cellphone users at wap.4info.net that works quite well for our purposes today. As with some of our other software, this application is provided as an educational tool to teach you how to write Asterisk AGI scripts, and it should only be used for personal, non-commercial purposes.

    We’ve previously covered the basics of writing a PHP script that can be used by Asterisk to retrieve data over the Internet. All of our weather applications perform this magic. So the only trick today was parsing results to determine whether a WiFi Hot Spot was commercial or free. That matters to some folks… like us. So when you set up the Asterisk WiFi HotSpot Finder, you can configure it to retrieve only free hotspots, only commercial hotspots, or all hotspots. As installed, you get the kitchen sink. Simply adjust the $PayWiFi and $FreeWiFi flags if you prefer a different list. As was true with the Nerd Vittles Weather Applications, you also need to add a chunk of code to the extensions_custom or extensions_trixbox config file and restart Asterisk. Then you’ll be off to the races. Pick up a phone on your system and dial 9434 ("WiFi"). When prompted for a zip code, key in a 5-digit zip code. After a brief pause, Flite will read you the names and addresses of up to 10 Wi-Fi Hot Spots at or near the zip code you entered. It doesn’t get much easier than that.

    Rather than repeat the entire tutorial here, we’ve posted the complete documentation including the code on our Best of Nerd Vittles site which has a much more flexible and intuitive interface for documenting applications. Enjoy!


    The Year of Flash. If you’re a slow learner like us, be glad you waited until now to tackle Adobe’s Flash technology. The unbelievably simple tools that are now available to build Flash applications are nothing short of mind-boggling. We’ve been prototyping some of this technology for a new neighborhood web site. Have a look at this link, and click around the various Flash applets. We built it all from nothing in UNDER 3 HOURS! They look almost as good as Apple’s Dashboard Widgets except they’ll run on any platform: Windows, Mac, or Linux. All you need is a current web browser with a Flash Player to run these babies. Internet Explorer, Firefox, and Safari all work just fine. If you want to do a little experimenting, here’s the deal of the year. The best flash tools on the planet are made by CoffeeCup Software. A close runner-up is Amara Software. You can visit their sites and get free demos to try out. Then you can buy all the tools from CoffeeCup for about $700 or from Amara for $129… or you can sign up for a year of hosting with Lunarpages and get every single CoffeeCup application for free. And, just so you don’t feel totally ripped off by the one-year web hosting fee of $84, Lunarpages throws in support for 10 domains, 250 gigs of storage space, 2.5 terabytes of monthly bandwidth, and a free domain registration for as long as you host with them. Use the coupon code blog25 when you sign up to save an additional $25. That makes the total cost $59 for all you math wizards. Our site link to the Flash Widgets is actually hosted at Lunarpages so you can judge the performance for yourself. If you want them to back up your data every night and restore any or all files from a backup at any time, add another whopping $1.50 a month. Yes, we get a spiff if you sign up using our link. Sure beats clicking on the Donate button, doesn’t it? And, if you happen to work in a K/12 school, the deal is even sweeter: the web hosting is free and so are five of the very best CoffeeCup Software applications. Now go learn something new or, better yet, teach it to a kid!


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive… by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You’re not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles Fan Club Map. Thanks for visiting! We hope you’ll take a second and add yourself to our Frappr World Map compliments of Google. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don’t know the difference in the last two, here’s the best definition we’ve found: "a nerd is very similar to a geek, but with more RAM and a faster modem." We’re always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you’re visiting as well.


    Some Recent Nerd Vittles Articles of Interest…

    No Asterisk on Cruise Ships … Yet

    My in-law’s once-removed (see if you can figure that one out) chartered one of the finest cruise ships on the planet last week to take 200 of their closest friends on a seven-day cruise in the Caribbean. Do you have 200 close friends?? If you’ve watched the movie Speed 2: Cruise Control, you’ve seen this ship up close. They chartered the ship for several months to make the movie. There were actually 197 passengers and 179 crew on the ship for our cruise so life was pretty good… for a week. Now I’m cooking my own breakfast again. We were lucky enough to squeak onto the invitation list for the bottom deck. Actually, there was no bottom deck. Every room was palatial with digital TV, a DVD Player, thousands of free DVD movies, unlimited booze, slot machines, and… Well, you get the idea.

    For those that live and breathe technology (like we do), I thought you might enjoy a brief technical update on cruising as it pertains to Internet and telephony use, especially Asterisk® and Skype. We set sail in St. Thomas for the West Indies with stops in Antigua, St. Martin, Virgin Gorda, and Nassau before returning to Fort Lauderdale. You can click on the photo to visit our Photo Gallery if photography happens to be one of your pastimes or if you just want to see what you missed.

    Cruising and the Internet. Those two big round balls you see on the top deck of the Seabourn Legend are actually antennas that provide Internet service via satellite 24/7. We’re accustomed to Comcast’s 8 megabit service in Charleston, and it’s not quite that good. But it’s pretty damn fast. That’s the good news. The not so good news is that it’s still expensive, and the bandwidth is shared between Internet surfers and those wishing to make phone calls from the ship. Phone calls from the ship are $4.95 a minute, and Internet service via a ship-wide Wi-Fi HotSpot is $25 an hour. As you might imagine, while others were soaking up the sun, I was quizzing the Captain and Hotel Manager about unlimited service, cost, bandwidth, and better telephony solutions. They were very attentive. This technology is less than a year old. While there have been other providers for several years, reliability has been pretty terrible until now. As with any Internet service provider, the next step is figuring out how much bandwidth you actually need and whether it is cost effective to implement all-you-can-eat Internet service. Disney and some of the other big ships already have it, but 3,000 people sharing a satellite link is not exactly broadband at its finest. Seabourn, on the other hand, has ships that are technology marvels in and of themselves, and they want nothing less than the best Internet experience for every one of their 200 passengers. I’d give it one more year unless you have deep pockets. And, after signing up for a Seabourn cruise, you probably won’t.

    Once we got past the sticker shock of $25 an hour Internet service, Plan B was to figure out a way to use Asterisk or Skype to beat the $4.95 a minute telephony charges. After all, even at $25 an hour, that works out to just over 40¢ a minute which is less than one-tenth the cost of their telephony offering. More bad news unfortunately. The service provider who set up the system has locked down all ports except port 80. Yes, Skype and Asterisk can live with port 80, but all of the UDP ports were blocked as well so home-grown IP telephony was pretty much dead. According to the hotel manager, they will unlock other ports as soon as they get the system stabilized. And unlimited Internet service is also on the drawing board. The temporary high cost is designed primarily to discourage heavy usage until they can put sufficient bandwidth in place to support the 10% of passengers who will probably use it.

    Cellphone Service Onboard Ship. Seabourn is about half way through providing transparent cellphone service onboard every one of their ships all the time. The only prerequisitie is a GSM phone which left our Sprint service dead in the water, literally. Many onboard with Cingular service made and received calls regularly, and their Blackberrys had no trouble receiving and sending messages. Just wait until they get home and discover that all those calls were billed at $2.95 or more per minute. Roaming outside the U.S. isn’t included in any U.S. cellphone plans that we know of. Until Skype or Asterisk work, the real key to inexpensive telephone calls while cruising the world is to buy an unlocked Quadband GSM phone and then purchase a local SIM card at each destination. They are readily available within 100 yards of the dock so don’t bother to take one with you. If you don’t own an unlocked GSM phone, you can even rent one for about $35 a week. If you’d prefer to purchase a SIM card in advance of your trip, use Google to search for the country of interest: free incoming calls gsm sim card "antigua". Once known only for its postage stamps, the Principality of Liechtenstein has become the SIM card mecca of the universe, much like what Iowa has done for free international calling from the United States.

    Using the One Ringy-Dingy Phone Trick. Be sure you purchase a local SIM card that includes free incoming calls. Why? Because you then can use Nerd Vittles’ One Ringy-Dingy Phone Trick to call your home Asterisk system from your new GSM phone, let it ring once, hang up, and let your Asterisk system call you back with outbound dialtone using DISA. Actually, this has gotten considerably easier since our original article 18 months ago. Newer versions of freePBX include a Callback option which does all the work for you without writing a single line of code:


    http://AsteriskIPaddress/admin/config.php?type=setup&display=callback

    If you want a more flexible SIM card that works in most countries with low-cost inbound calls, try a service such as United Mobile. Their incoming call rates for Antigua from the U.S. are 19¢ a minute. In 80 countries whose territory doesn’t look like an Island, the incoming calls are free. Doing the math, you’d pay 19¢ a minute for the inbound cell call plus your Asterisk rate from your U.S.-based Asterisk server to your assigned cellphone number from United Mobile. That total will almost always be considerably less than the outbound U.S. calling rate on your SIM card.

    If you have additional telephony tips for those traveling around the globe, feel free to leave a comment and share it with our readers. Enjoy your cruise! We did.


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive… by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You’re not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles Fan Club Map. Thanks for visiting! We hope you’ll take a second and add yourself to our Frappr World Map compliments of Google. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don’t know the difference in the last two, here’s the best definition we’ve found: "a nerd is very similar to a geek, but with more RAM and a faster modem." We’re always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you’re visiting as well.

    Keeping Telemarketers At Bay With TrixBox and freePBX-Enabled Asterisk Systems

    Just when you thought the National Do-Not-Call Registry was getting you some peace and quiet during the dinner hour, VoIP telephony comes into its own and gives the telemarketers a brand new universe to pollute. And, of course, the politicians exempted themselves and non-profits from the Do-Not-Call rules anyway. So the unwanted dinnertime calls from your best friends at campaign headquarters and the Fraternal Order of Police will always need to be dealt with. Lucky for all of us, there’s an Asterisk® PBX standing between the telemarketers and the dinner table. We first wrote about this 16 months ago so we wanted to provide an update showing how much simpler things have become with TrixBox and any other Asterisk system running freePBX 2.2.x. In the "old days" you had to do a good bit of mucking around in the Asterisk code to blacklist callers. And that method still works. However, you now can avoid the coding knuckle drill. With the latest versions of freePBX, you can send a special information tone to certain callers to block autodialers just by adding the unwanted numbers to your BlackList. There’s no code to modify at all. And there are three simple ways to manage your blacklist. Here’s how.

    BlackListing Callers With freePBX. freePBX 2.2.x now includes all the tools you’ll need to block unwanted calls. If you’re running one of the free TrixBox 1.2.3 systems at the top of this page, we’ve already provided a tutorial to get your freePBX system upgraded. Once you’ve done that or if your running TrixBox 2.x, to block calls from unlisted numbers, simply log into freePBX and choose Setup, General Settings, and set Allow Anonymous Inbound SIP Calls to No. This may cause too many calls to be blocked with some hosting providers. Another option is to set Privacy Manager to Yes in each of your Inbound Routes setups. This forces Asterisk to prompt callers for their phone number when no CallerID is provided. If there are old girlfriends and ex-wives that you’d prefer to never hear from again, choose Setup, Blacklist, and plug in the numbers. When they call, they’ll be greeted by a disconnect tone and a message that your number is no longer in service. It’s as simple as that. If you change your mind, you can remove numbers from your blacklist just as easily. freePBX now displays the list of all the numbers you’ve blacklisted. Just click Delete beside the number you wish to remove from your blacklist, and you’re done. It doesn’t get much easier than that.

    BlackListing Callers Using Your Phone. You may not always want to run to your computer to block future calls from someone that annoys you. freePBX now includes built-in support for blacklisting callers using any telephone on your Asterisk system. If you’ve just hung up and wish to blacklist the last caller, pick up your telephone and dial *32. You’re done. If you want to manually enter a different number into your blacklist, pick up any phone on your system and dial *30. Enter the number to be blacklisted when prompted. To remove a number from your blacklist, dial *31 and enter the number to be removed.

    BlackListing Callers Using Phone Genie for Asterisk. If you’ve installed our free Phone Genie for Asterisk web utility, you also can blacklist callers by sending an HTML command to your Asterisk server using any web browser including the one on your cellphone.

    To add a number to your blacklist, just enter a command like this where 192.168.0.123 is the IP address or fully-qualified domain name of your Asterisk server, 6781234567 is the number to be blacklisted, and 1234 is your admin password for Phone Genie:

    http://192.168.0.123/nv-genie.php?action=dbput&family=blacklist&key=6781234567&value=1&pw=1234

    To remove the same number from your blacklist, the web command would look like the following:

    http://192.168.0.123/nv-genie.php?action=dbdel&family=blacklist&key=6781234567&pw=1234

    To display the numbers in your blacklist, the web command would look like the following:

    http://192.168.0.123/nv-genie.php?action=dbshow&family=blacklist&pw=1234

    You’re an expert now. So just sit back and wait for the Bad Guys to call. They will.

    Our Special Thanks. We’re actually out cruising in the middle of the Carribean this week soaking up a little sun. So don’t be frustrated if your comments don’t get posted until next week. We did want to take a moment to thank all you for reading Nerd Vittles. About 50,000 folks from 137 countries around the globe read Nerd Vittles every week. The Nerd Vittles Official Flag at left shows all of your home towns, and that’s just this month. Incidentally, the countries are ordered by the number of actual visitors from each country. We like detail work unfortunately. InfoWorld finally discovered Open Source VoIP this week, and Vonage would do well to brush up on the advantages of open source VoIP… within the next two weeks. The VoIP Revolution is, of course, old news to us and to you. But it does demonstrate that our little secret is becoming front page news worldwide almost every day. Thanks again for your support. And, yes, we’re still looking for a few good advertisers. You don’t get a huge ad, but you get an enormous, focused, loyal group of readers. And we’ve got the cheapest ads on the planet, just $500 a month. Give it a shot. You won’t be disappointed, and you’ll be helping us hire some H-E-L-P, not to mention paying for these Carribean junkets.

    Security Reminder. If the version of Asterisk displayed when you start up the Command Line Interface (asterisk -r) predates Asterisk 1.2.17, your system is extremely vulnerable to a SIP denial of service attack. For complete upgrade instructions, read this Nerd Vittles article.


    trixbox Appliance. In case you missed it, Fonality has announced a new line of turnkey trixbox appliances. Two-port and six-port configurations as well as models with one and two preconfigured T1’s, mirrored drives, and redundant power supplies will be available for purchase in June starting at $999 for the base model. Stay tuned to Nerd Vittles for a sneak peak and test drive of what’s coming. In the meantime, you can read all about the new line of trixbox appliances by clicking on the link at the top of the page. Great idea!


    Nerd Vittles Demo Hot Line (courtesy of les.net). You now can take a number of Nerd Vittles projects for a test drive… by phone! The current demos include (1) MailCall for Asterisk with password 1111 (retrieve your email by phone), (2) NewsClips for Asterisk (latest news headlines in dozens of categories), (3) Weather Forecasts by U.S. Airport Code, and (4) Weather Forecasts by U.S. ZIP Code. You’re not prompted for #4 yet, but it does work! Just call our number (shown in the left margin) and take any or all of them for a spin. The sound quality may not be perfect due to performance limitations of our ancient Intel 386 demo machine. But the price is right.

    Nerd Vittles Fan Club Map. Thanks for visiting! We hope you’ll take a second and add yourself to our Frappr World Map compliments of Google. In making your entry, you can choose an icon: guy, gal, nerd, or geek. For those that don’t know the difference in the last two, here’s the best definition we’ve found: "a nerd is very similar to a geek, but with more RAM and a faster modem." We’re always looking for the best BBQ joints on the planet. So, if you know of one, add it to the map while you’re visiting as well.


    Some Recent Nerd Vittles Articles of Interest…