Thank god, the a/c was fixed.

Leave a comment

Chit chat


Happy system administrator day,


The basis of this article  is based on the dialog from the movie known as “The hunt for the Red October”. In the movie, one of the key lines was I think “One ping and one ping only”. Pinging was a method by submarines equipped with sonar to detect what is around them. Normally you would use more than one ping. In computing we also have a program called ping that does the same thing to detect what is around on the network. There is a very powerful program called nmap that usually automates such activity. That usually takes some kind of administrative power to implement. We will be using a simple linux batch file (could be easily converted to other platforms) to detect what is around us. This tool is perfect for the home network. It will probably not detect what is known as “Man in the middle devices”, but at least you can see the visible systems on your network.Note a quick way to see who has been active on the network with you is to ping your netmask:
for a 192.168.1.x network$ ping -c 2 -b$ sudo arp -aThe code.
pingall.sh: (do not forget “chmod +x pingall.sh)

for i in {1..254}
ping 192.168.1.$i -c1 -w1 -v | grep "icmp_seq=1"

If you have a different network, you will have to change “192.168.1” accordingly, here again we are using the good old “grep” command to extract data from the return stream. it is our sonar scope. Let’s run it.

$ ./pingall.sh
64 bytes from icmp_seq=1 ttl=64 time=0.852 ms
64 bytes from icmp_seq=1 ttl=64 time=0.260 ms
64 bytes from icmp_seq=1 ttl=255 time=2.75 ms
64 bytes from icmp_seq=1 ttl=64 time=0.261 ms
64 bytes from icmp_seq=1 ttl=64 time=0.064 ms
$ _

Ok, there are five devices on the network. We need to know more. There is what is call DNS or “Domain naming service”. We can use the router to tell us what the ipaddresses maybe are known as.

The code.

nslookup.sh: (Do not forget to make it executable with chmod +x nslookup.sh”)

for i in {1..254}
nslookup 192.168.1.$i |grep name

Let’s run it.
$ ./nslookup.sh name = my_network. name = router2. name = router3. name = oesrvr1. name = oesrvr104

Notice the ipadresses are backwards, but we still can identify units on the network from the list. Two devices show up known as router2 and router3. I know that they are not connected to the network at this time. They just have reserved names in the router. The unit at 99 is actually the print server and should have a reserved name in the router, I can take care of that later. 109 is a temp machine I have set up to test some software. Now if there were any unknown numbers, they would need to be investigated immediately. Again you would need to change “192.168.1.” to work with your network.

There you are, two simple tools to check on your network.

Yet another way to look at the network.

$ for d in {1..255} ;do rev=$( dig +short -x 192.168.1.$d ) ; echo “$d $rev” ; done


See if the website is alive.

$ ping missingwebsite.com

$ ping http://www.instructables.com
PING prod.fastly.net ( 56(84) bytes of data.
64 bytes from icmp_seq=1 ttl=45 time=51.5 ms
64 bytes from icmp_seq=2 ttl=45 time=50.1 ms
^C64 bytes from icmp_seq=3 ttl=45 time=49.0 ms

— prod.fastly.net ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 10162ms
rtt min/avg/max/mdev = 49.092/50.269/51.552/1.007 ms

Find out if just the internet tubes are down by stepping through all the internet routers.

$ traceroute missingwebsite.com

9  te0-0-0-3.ccr21.dfw01.atlas.cogentco.com (  39.589 ms te0-0-0-4.ccr21.dfw01.atlas.cogentco.com (  41.533 ms te0-1-0-4.ccr21.dfw01.atlas.cogentco.com (  42.982 ms
10  te0-1-0-1.ccr21.mci01.atlas.cogentco.com (  44.677 ms te0-2-0-3.ccr21.mci01.atlas.cogentco.com (  46.383 ms te0-0-0-1.ccr21.mci01.atlas.cogentco.com (  48.315 ms
11  te0-3-0-2.ccr21.ord01.atlas.cogentco.com (  49.768 ms  51.418 ms  52.621 ms
12  te3-8.ccr01.dsm01.atlas.cogentco.com (  44.561 ms  46.309 ms  47.732 ms
13 (  54.185 ms  55.582 ms  49.107 ms
14  edge5-usshc.wikia.net (  50.457 ms  52.333 ms  53.778 ms
15 (  55.999 ms  57.643 ms  59.092 ms
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *^C

Routers are playing possum when you see the asterisks.

Domain name servers can help also.

$ dig missingwebsite.com

$ dig http://www.instructables.com

; <<>> DiG 9.7.0-P1 <<>> http://www.instructables.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40751
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;www.instructables.com.        IN    A

http://www.instructables.com.    2177    IN    CNAME    a.prod.fastly.net.
a.prod.fastly.net.    22832    IN    CNAME    prod.fastly.net.
prod.fastly.net.    16    IN    A
prod.fastly.net.    16    IN    A

;; Query time: 14 msec
;; WHEN: Mon Nov 21 21:14:36 2011
;; MSG SIZE  rcvd: 116

$ nslookup mussingwebsite.com

$ nslookup http://www.instructables.com

Non-authoritative answer:
http://www.instructables.com    canonical name = a.prod.fastly.net.
a.prod.fastly.net    canonical name = prod.fastly.net.
Name:    prod.fastly.net
Name:    prod.fastly.net

pingall.sh improved (you should be able to pick the network now.  i.e.: pingall.sh 2

if [ -z "$1" ]
let n=1
let n=$1
echo “You are using network $n.”

for i in {1..254}
ping 192.168.$n.$i -c1 -w1 -v | grep “icmp_seq=1″

nslookup improved:
if [ -z "$1" ]
let n=1
let n=$1
echo “You are using network $n.” for i in {1..254}
nslookup 192.168.$n.$i |grep name


Simple port scan
Usage portscan.sh host 1stport lastport

$ ./portscan.sh  oesrvr1  1  1024
“22 open”
“25 open”
“80 open”
“110 open”
“111 open”
“143 open”
“993 open”
“995 open”



function portscan

for ((counter=$firstport; counter<=$lastport; counter++))

(echo >/dev/tcp/$IP/$counter) > /dev/null 2>&1 && echo “$counter open”


# end of code


One neat command is arp-scan, but it requires admin rights.

$ sudo arp-scan  –localnet
[sudo] password for eddie:
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)    00:00:00:00:00:00    Buffalo Inc.    00:00:00:00:00:00    DELL COMPUTER CORPORATION    00:00:00:00:00:00    Cellvision Systems, Inc.

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 256 hosts scanned in 1.741 seconds (147.04 hosts/sec). 3 responded


You can also access a linux server and show the desktop on a tablet.



Sauted chicken thighs, cheese infused polenta, and green beans.


Good day.

Summer’s here.

Leave a comment



With all the money spent on fireworks, it hurts to think school budgets will not be fulfilled. An education that would put a twinkle in the eye of a child for a lifetime is replaced by a twinkle in the sky that only last a moment so a few people can have a visual orgasm.

I smelled something like an electrical burn. Thought it might be the UPS, but it was just the router. Need to get a replacement.


Under construction.

Have you ever wanted to ssh to your Linux box that sits behind NAT? Now you can with reverse SSH tunneling. This document will show you step by step how to set up reverse SSH tunneling. The reverse SSH tunneling should work fine with Unix like systems. Let’s assume that Destination’s IP is (Linux box that you want to access). You want to access from Linux client with IP
Destination ( <- |NAT| <- Source (

1. SSH from the destination to the source (with public ip) using command below:

ssh -R 19999:localhost:22 sourceuser@

* port 19999 can be any unused port.

2. Now you can SSH from source to destination through SSH tuneling:

ssh localhost -p 19999

Screenfetch is a simple bash shell fill that will give you some basic information about your system.

The install:

Install screenfetch on linux

Get prerequisites:

sudo apt-get install lsb-release scrot

Now that we have the dependencies installed, we can install screenFetch. Unfortunately, it’s not in the distro repositories for Ubuntu, Mint, or Debian, so we’ll have to download it from the project’s Git repository. First I’ll create a temporary directory for the download.

$ mkdir ~/screenfetch
$ cd ~/screenfetch

Now we can download the latest package. As of this writing, the latest version is v3.2.2.

Now, make the file executable with:

$ chmod +x screenfetch

You can execute it from here if you want with:

$ ./screenfetch

However, I think it’s better to have it installed somewhere where it will be available system wide. I think /usr/local/bin is a good location. So let’s copy it over to there.

$ sudo cp screenfetch /usr/local/bin

Now, assuming /usr/local/bin is in your $PATH, you should be able to run screenfetch from anywhere.


If you have access to MSWindows machines (XP, 7, or 8), you can build an MSWindows tablet for under $50 dollars. Purchase a cheap Android tablet for under fifty dollars and the add a free rdp (remote desktop) app from the app store and you have an instant windows desktop. Just connect to your mswindows box.  If you do not have access to mswindows systems then get a cheap system for a few hundred dollars. Still cheaper than the tablet per se. You come out ahead.


Flag maker script.



# memorial.sh -
# 2009 - Mike Golvach - eggi@comcast.net
# Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License

echo -en "&nbsp;&nbsp; (_)\n&nbsp;&nbsp;&nbsp; &lt;___&gt;\n&nbsp;&nbsp;&nbsp;&nbsp; | |______\n&nbsp;&nbsp;&nbsp;&nbsp; | |* * * )\n&nbsp;&nbsp;&nbsp;&nbsp; | | * * (_________\n&nbsp;&nbsp;&nbsp;&nbsp; | |* * * |* *|####)\n&nbsp;&nbsp;&nbsp;&nbsp; | | * * *| * |&nbsp;&nbsp; (________________\n&nbsp;&nbsp;&nbsp;&nbsp; | |* * * |* *|####|##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | | * * *| * |&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n&nbsp;&nbsp;&nbsp;&nbsp; | |* * * |* *|####|##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | |~~~~~~| * |&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n&nbsp;&nbsp;&nbsp;&nbsp; | |######|* *|####|##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |~~~'&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n&nbsp;&nbsp;&nbsp;&nbsp; | |######|########|##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n&nbsp;&nbsp;&nbsp;&nbsp; | |######|########|##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | |~~~~~~|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |########|##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '~~~~~~~~|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |\n&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |##############|\n&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '~~~~~~~~~~~~~~~\n&nbsp;&nbsp;&nbsp;&nbsp; | |\n&nbsp;&nbsp;&nbsp;&nbsp; | |\n&nbsp;&nbsp;&nbsp;&nbsp; | |\n"

Fireworks script



rows=$(tput lines)
cols=$(tput cols)
colors=(red green blue purple cyan yellow brown)
lock_file_base=/tmp/$(basename $0 .sh)

if [[ "$1" ]]; then
&nbsp;&nbsp;&nbsp; nsingle=$1
&nbsp;&nbsp;&nbsp; shift
&nbsp;&nbsp;&nbsp; nsingle=10
if [[ "$1" ]]; then
&nbsp;&nbsp;&nbsp; nmultiple=$1
&nbsp;&nbsp;&nbsp; shift
&nbsp;&nbsp;&nbsp; if [[ $nmultiple -gt 8 ]]; then nmultiple=8; fi
&nbsp;&nbsp;&nbsp; nmultiple=6

function colorstr()
&nbsp;&nbsp;&nbsp; local&nbsp; row=$1
&nbsp;&nbsp;&nbsp; local&nbsp; col=$2
&nbsp;&nbsp;&nbsp; local&nbsp; color=$3
&nbsp;&nbsp;&nbsp; local&nbsp; v
&nbsp;&nbsp;&nbsp; case "$color" in
&nbsp;&nbsp;&nbsp; red)&nbsp;&nbsp;&nbsp;&nbsp; v=31;;
&nbsp;&nbsp;&nbsp; green)&nbsp;&nbsp; v=34;;
&nbsp;&nbsp;&nbsp; blue)&nbsp;&nbsp;&nbsp; v=32;;
&nbsp;&nbsp;&nbsp; purple)&nbsp; v=35;;
&nbsp;&nbsp;&nbsp; cyan)&nbsp;&nbsp;&nbsp; v=36;;
&nbsp;&nbsp;&nbsp; yellow)&nbsp; v=33;;
&nbsp;&nbsp;&nbsp; brown)&nbsp;&nbsp; v=33;;
&nbsp;&nbsp;&nbsp; white)&nbsp;&nbsp; v=37;;
&nbsp;&nbsp;&nbsp; *)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v=;;
&nbsp;&nbsp;&nbsp; esac
&nbsp;&nbsp;&nbsp; shift 3

&nbsp;&nbsp;&nbsp; if [[ $multiple -ne 0 ]]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; touch $lock_file
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while [[ $(ls $lock_file_base.* 2&gt;/dev/null | head -n 1) != $lock_file ]]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 0.05
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done
&nbsp;&nbsp;&nbsp; fi
&nbsp;&nbsp;&nbsp; tput cup $row $col
&nbsp;&nbsp;&nbsp; echo -n -e "\e["$v"m"
&nbsp;&nbsp;&nbsp; set -f
&nbsp;&nbsp;&nbsp; echo -n $*
&nbsp;&nbsp;&nbsp; set +f
&nbsp;&nbsp;&nbsp; if [[ $multiple -ne 0 ]]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rm -f $lock_file
&nbsp;&nbsp;&nbsp; fi

function center_colorstr()
&nbsp;&nbsp;&nbsp; local&nbsp; row=$1
&nbsp;&nbsp;&nbsp; local&nbsp; color=$2
&nbsp;&nbsp;&nbsp; shift 2
&nbsp;&nbsp;&nbsp; local&nbsp; s="$*"
&nbsp;&nbsp;&nbsp; local&nbsp; slen=${#s}
&nbsp;&nbsp;&nbsp; colorstr $row $(((cols / 2) - (slen / 2))) $color "$s"
function fireworks()
&nbsp;&nbsp;&nbsp; local row=$((rows - 1))
&nbsp;&nbsp;&nbsp; local col=$(((RANDOM % (cols / 2)) + (cols / 4)))
&nbsp;&nbsp;&nbsp; local height=$((RANDOM % rows - 2))
&nbsp;&nbsp;&nbsp; local slant
&nbsp;&nbsp;&nbsp; local h
&nbsp;&nbsp;&nbsp; local color1=${colors[$((RANDOM % ${#colors[*]}))]}
&nbsp;&nbsp;&nbsp; local color2=${colors[$((RANDOM % ${#colors[*]}))]}
&nbsp;&nbsp;&nbsp; local color3=${colors[$((RANDOM % ${#colors[*]}))]}
&nbsp;&nbsp;&nbsp; while [[ $color1 == $color2&nbsp; ||&nbsp; $color1 == $color3&nbsp; ||&nbsp; $color2 == $color3 ]]
&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color2=${colors[$((RANDOM % ${#colors[*]}))]}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color3=${colors[$((RANDOM % ${#colors[*]}))]}
&nbsp;&nbsp;&nbsp; done

&nbsp;&nbsp;&nbsp; case $((RANDOM % 4)) in
&nbsp;&nbsp;&nbsp; 0) slant=-2;;
&nbsp;&nbsp;&nbsp; 1) slant=-1;;
&nbsp;&nbsp;&nbsp; 2) slant=1;;
&nbsp;&nbsp;&nbsp; 3) slant=2;;
&nbsp;&nbsp;&nbsp; esac

&nbsp;&nbsp;&nbsp; if [[ $height -gt 5 ]]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h=$height

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while [[ $h -gt 0 ]]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colorstr $row $col $color1 '.'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let row--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [[ $((col + slant)) -ge $((cols - 3))&nbsp; ||&nbsp; $((col + slant)) -le 2 ]]; then break; fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let col+=slant
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let h--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 0.1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [[ $((col + slant)) -lt $((cols - 3))&nbsp; &amp;&amp;&nbsp; $((col + slant)) -gt 2 ]]; then

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h=$((height / 5))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while [[ $h -gt 0 ]]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colorstr $row $col $color2 '.'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let row++
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [[ $((col + slant)) -ge $((cols - 3))&nbsp; ||&nbsp; $((col + slant)) -le 2 ]]; then break; fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let col+=slant
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let h--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 0.1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colorstr $((row)) $((col - 1)) $color3 '***'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colorstr $((row - 1)) $((col)) $color3 '*'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colorstr $((row + 1)) $((col)) $color3 '*'
&nbsp;&nbsp;&nbsp; fi

for i in $(seq 1 $nsingle)
&nbsp;&nbsp;&nbsp; clear
&nbsp;&nbsp;&nbsp; fireworks
&nbsp;&nbsp;&nbsp; sleep 1


for i in $(seq 1 $nmultiple)
&nbsp;&nbsp;&nbsp; let multiple++
&nbsp;&nbsp;&nbsp; lock_file=$lock_file_base.$i
&nbsp;&nbsp;&nbsp; fireworks &amp;
&nbsp;&nbsp;&nbsp; pids="$pids $!"

trap "kill -9 $pids 2&gt;/dev/null" EXIT

wait $pids
sleep 3

center_colorstr $((rows / 2 - 1)) red "Hope you enjoyed the show!"
center_colorstr $((rows / 2 + 1)) red "Happy forth! "
center_colorstr $((rows / 2 + 3)) red "Computoman"

sleep 5

# vim: tabstop=4: shiftwidth=4: noexpandtab:
# kate: tab-width 4; indent-width 4; replace-tabs false;



Dinner (home made biscuit slice ,mixed vegetables, sauteed chicken breast strips, and salad with ranch dressing (not shown).


Good day.

Summer rain.

Leave a comment



My forearm is beginning to heal. still has a patch that looks like cooked ham. My hand is working fine too. Thankful..

Please be careful with #hot #cars and do not let anyone get hurt, because they are a real #solar #ovenhttp://www.instructables.com/id/Using-your-car-as-a-solar-oven/


Found a neat little web based Eliza program.  Removed the ads for brevity and they are not paying me anything.

Screenshot from 2014-06-25 12:40:46

&lt;META NAME=&quot;Description&quot; CONTENT=&quot;Talk to Eliza!&quot;&gt;
&lt;TITLE&gt;Eliza, Computer Therapist&lt;/TITLE&gt;

&lt;SCRIPT language=&quot;JavaScript&quot;&gt;&lt;!-- 

// Chat Bot by George Dunlop, www.peccavi.com
// Note - Eliza is a Classic Model of chat Bots.. but this implementation is mine :)
// May be used/modified if credit line is retained (c) 1997 All rights reserved

 loaded = false; // load flag for interlocking the pages


// Keys

 maxKey = 36;
 keyNotFound = maxKey-1;
 keyword = new Array(maxKey);

 function key(key,idx,end){
 this.key = key; // phrase to match
 this.idx = idx; // first response to use
 this.end = end; // last response to use
 this.last = end; // response used last time
 maxrespnses =116;
 response = new Array(maxrespnses);

 maxConj = 19;
 max2ndConj = 7;
 var conj1 = new Array(maxConj);
 var conj2 = new Array(maxConj);
 var conj3 = new Array(max2ndConj);
 var conj4 = new Array(max2ndConj);

// Funtion to replaces all occurances of substring substr1 with substr2 within strng
// if type == 0 straight string replacement
// if type == 1 assumes padded strings and replaces whole words only
// if type == 2 non case sensitive assumes padded strings to compare whole word only
// if type == 3 non case sensitive straight string replacement

 var RPstrg = &quot;&quot;;

 function replaceStr( strng, substr1, substr2, type){
 var pntr = -1; aString = strng;
 if( type == 0 ){
 if( strng.indexOf( substr1 ) &gt;= 0 ){ pntr = strng.indexOf( substr1 ); }
 } else if( type == 1 ){
 if( strng.indexOf( &quot; &quot;+ substr1 +&quot; &quot; ) &gt;= 0 ){ pntr = strng.indexOf( &quot; &quot; + substr1 + &quot; &quot; ) + 1; }
 } else if( type == 2 ){
 bstrng = strng.toUpperCase();
 bsubstr1 = substr1.toUpperCase();
 if( bstrng.indexOf( &quot; &quot;+ bsubstr1 +&quot; &quot; )&gt;= 0 ){ pntr = bstrng.indexOf( &quot; &quot; + bsubstr1 + &quot; &quot; ) + 1; }
 } else {
 bstrng = strng.toUpperCase();
 bsubstr1 = substr1.toUpperCase();
 if( bstrng.indexOf( bsubstr1 ) &gt;= 0 ){ pntr = bstrng.indexOf( bsubstr1 ); }
 if( pntr &gt;= 0 ){
 RPstrg += strng.substring( 0, pntr ) + substr2;
 aString = strng.substring(pntr + substr1.length, strng.length );
 if( aString.length &gt; 0 ){ replaceStr( aString, substr1, substr2, type ); }
 aString = RPstrg + aString;
 RPstrg = &quot;&quot;;
 return aString;

// Function to pad a string.. head, tail &amp; punctuation

 punct = new Array(&quot;.&quot;, &quot;,&quot;, &quot;!&quot;, &quot;?&quot;, &quot;:&quot;, &quot;;&quot;, &quot;&amp;&quot;, '&quot;', &quot;@&quot;, &quot;#&quot;, &quot;(&quot;, &quot;)&quot; )

 function padString(strng){
 aString = &quot; &quot; + strng + &quot; &quot;;
 for( i=0; i &lt; punct.length; i++ ){
 aString = replaceStr( aString, punct[i], &quot; &quot; + punct[i] + &quot; &quot;, 0 );
 return aString

// Function to strip padding

 function unpadString(strng){
 aString = strng;
 aString = replaceStr( aString, &quot; &quot;, &quot; &quot;, 0 ); // compress spaces
 if( strng.charAt( 0 ) == &quot; &quot; ){ aString = aString.substring(1, aString.length ); }
 if( strng.charAt( aString.length - 1 ) == &quot; &quot; ){ aString = aString.substring(0, aString.length - 1 ); }
 for( i=0; i &lt; punct.length; i++ ){
 aString = replaceStr( aString, &quot; &quot; + punct[i], punct[i], 0 );
 return aString

// Dress Input formatting i.e leading &amp; trailing spaces and tail punctuation

 var ht = 0; // head tail stearing

 function strTrim(strng){
 if(ht == 0){ loc = 0; } // head clip
 else { loc = strng.length - 1; } // tail clip ht = 1
 if( strng.charAt( loc ) == &quot; &quot;){
 aString = strng.substring( - ( ht - 1 ), strng.length - ht);
 aString = strTrim(aString);
 } else {
 var flg = false;
 for(i=0; i&lt;=5; i++ ){ flg = flg || ( strng.charAt( loc ) == punct[i]); }
 aString = strng.substring( - ( ht - 1 ), strng.length - ht );
 } else { aString = strng; }
 if(aString != strng ){ strTrim(aString); }
 if( ht ==0 ){ ht = 1; strTrim(aString); }
 else { ht = 0; }
 return aString;

// adjust pronouns and verbs &amp; such

 function conjugate( sStrg ){ // rephrases sString
 var sString = sStrg;
 for( i = 0; i &lt; maxConj; i++ ){ // decompose
 sString = replaceStr( sString, conj1[i], &quot;#@&amp;&quot; + i, 2 );
 for( i = 0; i &lt; maxConj; i++ ){ // recompose
 sString = replaceStr( sString, &quot;#@&amp;&quot; + i, conj2[i], 2 );
 // post process the resulting string
 for( i = 0; i &lt; max2ndConj; i++ ){ // decompose
 sString = replaceStr( sString, conj3[i], &quot;#@&amp;&quot; + i, 2 );
 for( i = 0; i &lt; max2ndConj; i++ ){ // recompose
 sString = replaceStr( sString, &quot;#@&amp;&quot; + i, conj4[i], 2 );
 return sString;

// Build our response string
// get a random choice of response based on the key
// Then structure the response

 var pass = 0;
 var thisstr = &quot;&quot;;

 function phrase( sString, keyidx ){
 idxmin = keyword[keyidx].idx;
 idrange = keyword[keyidx].end - idxmin + 1;
 choice = keyword[keyidx].idx + Math.floor( Math.random() * idrange );
 if( choice == keyword[keyidx].last &amp;&amp; pass &lt; 5 ){
 pass++; phrase(sString, keyidx );
 keyword[keyidx].last = choice;
 var rTemp = response[choice];
 var tempt = rTemp.charAt( rTemp.length - 1 );
 if(( tempt == &quot;*&quot; ) || ( tempt == &quot;@&quot; )){
 var sTemp = padString(sString);
 var wTemp = sTemp.toUpperCase();
 var strpstr = wTemp.indexOf( &quot; &quot; + keyword[keyidx].key + &quot; &quot; );
 strpstr += keyword[ keyidx ].key.length + 1;
 thisstr = conjugate( sTemp.substring( strpstr, sTemp.length ) );
 thisstr = strTrim( unpadString(thisstr) )
 if( tempt == &quot;*&quot; ){
 sTemp = replaceStr( rTemp, &quot;&lt;*&quot;, &quot; &quot; + thisstr + &quot;?&quot;, 0 );
 } else { sTemp = replaceStr( rTemp, &quot;&lt;@&quot;, &quot; &quot; + thisstr + &quot;.&quot;, 0 );
 } else sTemp = rTemp;
 return sTemp;

// returns array index of first key found

 var keyid = 0;

 function testkey(wString){
 if( keyid &lt; keyNotFound
 &amp;&amp; !( wString.indexOf( &quot; &quot; + keyword[keyid].key + &quot; &quot;) &gt;= 0 )){
 keyid++; testkey(wString);
 function findkey(wString){
 keyid = 0;
 found = false;
 if( keyid &gt;= keyNotFound ){ keyid = keyNotFound; }
 return keyid;

// This is the entry point and the I/O of this code

 var wTopic = &quot;&quot;; // Last worthy responce
 var sTopic = &quot;&quot;; // Last worthy responce
 var greet = false;
 var wPrevious = &quot;&quot;; // so we can check for repeats
 var started = false; 

 function listen(User){
 sInput = User;
 if(started){ clearTimeout(Rtimer); }
 Rtimer = setTimeout(&quot;wakeup()&quot;, 180000); // wake up call
 started = true; // needed for Rtimer
 sInput = strTrim(sInput); // dress input formating
 if( sInput != &quot;&quot; ){
 wInput = padString(sInput.toUpperCase()); // Work copy
 var foundkey = maxKey; // assume it's a repeat input
 if (wInput != wPrevious){ // check if user repeats himself
 foundkey = findkey(wInput); // look for a keyword.
 if( foundkey == keyNotFound ){
 if( !greet ){ greet = true; return &quot;Don't you ever say Hello?&quot; }
 else {
 wPrevious = wInput; // save input to check repeats
 if(( sInput.length &lt; 10 ) &amp;&amp; ( wTopic != &quot;&quot; ) &amp;&amp; ( wTopic != wPrevious )){
 lTopic = conjugate( sTopic ); sTopic = &quot;&quot;; wTopic = &quot;&quot;;
 return 'OK... &quot;' + lTopic + '&quot;. Tell me more.';
 } else {
 if( sInput.length &lt; 15 ){
 return &quot;Tell me more...&quot;;
 } else { return phrase( sInput, foundkey ); }
 } else {
 if( sInput.length &gt; 12 ){ sTopic = sInput; wTopic = wInput; }
 greet = true; wPrevious = wInput; // save input to check repeats
 return phrase( sInput, foundkey ); // Get our response
 } else { return &quot;I can't help, if you will not chat with me!&quot;; }
 function wakeup(){
 var strng1 = &quot; *** Are We going to Chat? ***&quot;;
 var strng2 = &quot; I can't help you without a dialog!&quot;;

// build our data base here

 conj1[0] = &quot;are&quot;; conj2[0] = &quot;am&quot;;
 conj1[1] = &quot;am&quot;; conj2[1] = &quot;are&quot;;
 conj1[2] = &quot;were&quot;; conj2[2] = &quot;was&quot;;
 conj1[3] = &quot;was&quot;; conj2[3] = &quot;were&quot;;
 conj1[4] = &quot;I&quot;; conj2[4] = &quot;you&quot;;
 conj1[5] = &quot;me&quot;; conj2[5] = &quot;you&quot;;
 conj1[6] = &quot;you&quot;; conj2[6] = &quot;me&quot;;
 conj1[7] = &quot;my&quot;; conj2[7] = &quot;your&quot;;
 conj1[8] = &quot;your&quot;; conj2[8] = &quot;my&quot;;
 conj1[9] = &quot;mine&quot;; conj2[9] = &quot;your's&quot;;
 conj1[10] = &quot;your's&quot;; conj2[10] = &quot;mine&quot;;
 conj1[11] = &quot;I'm&quot;; conj2[11] = &quot;you're&quot;;
 conj1[12] = &quot;you're&quot;; conj2[12] = &quot;I'm&quot;;
 conj1[13] = &quot;I've&quot;; conj2[13] = &quot;you've&quot;;
 conj1[14] = &quot;you've&quot;; conj2[14] = &quot;I've&quot;;
 conj1[15] = &quot;I'll&quot;; conj2[15] = &quot;you'll&quot;;
 conj1[16] = &quot;you'll&quot;; conj2[16] = &quot;I'll&quot;;
 conj1[17] = &quot;myself&quot;; conj2[17] = &quot;yourself&quot;;
 conj1[18] = &quot;yourself&quot;; conj2[18] = &quot;myself&quot;;

// array to post process correct our tenses of pronouns such as &quot;I/me&quot;

 conj3[0] = &quot;me am&quot;; conj4[0] = &quot;I am&quot;;
 conj3[1] = &quot;am me&quot;; conj4[1] = &quot;am I&quot;;
 conj3[2] = &quot;me can&quot;; conj4[2] = &quot;I can&quot;;
 conj3[3] = &quot;can me&quot;; conj4[3] = &quot;can I&quot;;
 conj3[4] = &quot;me have&quot;; conj4[4] = &quot;I have&quot;;
 conj3[5] = &quot;me will&quot;; conj4[5] = &quot;I will&quot;;
 conj3[6] = &quot;will me&quot;; conj4[6] = &quot;will I&quot;;

// Keywords

 keyword[ 0]=new key( &quot;CAN YOU&quot;, 1, 3);
 keyword[ 1]=new key( &quot;CAN I&quot;, 4, 5);
 keyword[ 2]=new key( &quot;YOU ARE&quot;, 6, 9);
 keyword[ 3]=new key( &quot;YOU'RE&quot;, 6, 9);
 keyword[ 4]=new key( &quot;I DON'T&quot;, 10, 13);
 keyword[ 5]=new key( &quot;I FEEL&quot;, 14, 16);
 keyword[ 6]=new key( &quot;WHY DON'T YOU&quot;, 17, 19);
 keyword[ 7]=new key( &quot;WHY CAN'T I&quot;, 20, 21);
 keyword[ 8]=new key( &quot;ARE YOU&quot;, 22, 24);
 keyword[ 9]=new key( &quot;I CAN'T&quot;, 25, 27);
 keyword[10]=new key( &quot;I AM&quot;, 28, 31);
 keyword[11]=new key( &quot;I'M&quot;, 28, 31);
 keyword[12]=new key( &quot;YOU&quot;, 32, 34);
 keyword[13]=new key( &quot;I WANT&quot;, 35, 39);
 keyword[14]=new key( &quot;WHAT&quot;, 40, 48);
 keyword[15]=new key( &quot;HOW&quot;, 40, 48);
 keyword[16]=new key( &quot;WHO&quot;, 40, 48);
 keyword[17]=new key( &quot;WHERE&quot;, 40, 48);
 keyword[18]=new key( &quot;WHEN&quot;, 40, 48);
 keyword[19]=new key( &quot;WHY&quot;, 40, 48);
 keyword[20]=new key( &quot;NAME&quot;, 49, 50);
 keyword[21]=new key( &quot;CAUSE&quot;, 51, 54);
 keyword[22]=new key( &quot;SORRY&quot;, 55, 58);
 keyword[23]=new key( &quot;DREAM&quot;, 59, 62);
 keyword[24]=new key( &quot;HELLO&quot;, 63, 63);
 keyword[25]=new key( &quot;HI&quot;, 63, 63);
 keyword[26]=new key( &quot;MAYBE&quot;, 64, 68);
 keyword[27]=new key( &quot;NO&quot;, 69, 73);
 keyword[28]=new key( &quot;YOUR&quot;, 74, 75);
 keyword[29]=new key( &quot;ALWAYS&quot;, 76, 79);
 keyword[30]=new key( &quot;THINK&quot;, 80, 82);
 keyword[31]=new key( &quot;ALIKE&quot;, 83, 89);
 keyword[32]=new key( &quot;YES&quot;, 90, 92);
 keyword[33]=new key( &quot;FRIEND&quot;, 93, 98);
 keyword[34]=new key( &quot;COMPUTER&quot;, 99, 105);
 keyword[35]=new key( &quot;NO KEY FOUND&quot;, 106, 112);
 keyword[36]=new key( &quot;REPEAT INPUT&quot;, 113, 116);

 response[ 0]=&quot;ELIZA - Javascript Version by George Dunlop ( george@peccavi.com )&quot;
 response[ 1]=&quot;Don't you believe that I can&lt;*&quot;;
 response[ 2]=&quot;Perhaps you would like to be able to&lt;*&quot;;
 response[ 3]=&quot;You want me to be able to&lt;*&quot;;
 response[ 4]=&quot;Perhaps you don't want to&lt;*&quot;;
 response[ 5]=&quot;Do you want to be able to&lt;*&quot;;
 response[ 6]=&quot;What makes you think I am&lt;*&quot;;
 response[ 7]=&quot;Does it please you to believe I am&lt;*&quot;;
 response[ 8]=&quot;Perhaps you would like to be&lt;*&quot;;
 response[ 9]=&quot;Do you sometimes wish you were&lt;*&quot;;
 response[ 10]=&quot;Don't you really&lt;*&quot;;
 response[ 11]=&quot;Why don't you&lt;*&quot;;
 response[ 12]=&quot;Do you wish to be able to&lt;*&quot;;
 response[ 13]=&quot;Does that trouble you?&quot;;
 response[ 14]=&quot;Tell me more about such feelings.&quot;;
 response[ 15]=&quot;Do you often feel&lt;*&quot;;
 response[ 16]=&quot;Do you enjoy feeling&lt;*&quot;;
 response[ 17]=&quot;Do you really believe I don't&lt;*&quot;;
 response[ 18]=&quot;Perhaps in good time I will&lt;@&quot;;
 response[ 19]=&quot;Do you want me to&lt;*&quot;;
 response[ 20]=&quot;Do you think you should be able to&lt;*&quot;;
 response[ 21]=&quot;Why can't you&lt;*&quot;;
 response[ 22]=&quot;Why are you interested in whether or not I am&lt;*&quot;;
 response[ 23]=&quot;Would you prefer if I were not&lt;*&quot;;
 response[ 24]=&quot;Perhaps in your fantasies I am&lt;*&quot;;
 response[ 25]=&quot;How do you know you can't&lt;*&quot;;
 response[ 26]=&quot;Have you tried?&quot;;
 response[ 27]=&quot;Perhaps you can now&lt;*&quot;;
 response[ 28]=&quot;Did you come to me because you are&lt;*&quot;;
 response[ 29]=&quot;How long have you been&lt;*&quot;;
 response[ 30]=&quot;Do you believe it is normal to be&lt;*&quot;;
 response[ 31]=&quot;Do you enjoy being&lt;*&quot;;
 response[ 32]=&quot;We were discussing you, not me.&quot;;
 response[ 33]=&quot;Oh... &lt;*&quot;;
 response[ 34]=&quot;You're not really talking about me, are you?&quot;;
 response[ 35]=&quot;What would it mean to you if you got&lt;*&quot;;
 response[ 36]=&quot;Why do you want&lt;*&quot;;
 response[ 37]=&quot;Suppose you got&lt;*&quot;;
 response[ 38]=&quot;What if you never got&lt;*&quot;;
 response[ 39]=&quot;I sometimes also want&lt;@&quot;;
 response[ 40]=&quot;Why do you ask?&quot;;
 response[ 41]=&quot;Does that question interest you?&quot;;
 response[ 42]=&quot;What answer would please you the most?&quot;;
 response[ 43]=&quot;What do you think?&quot;;
 response[ 44]=&quot;Are such questions on your mind often?&quot;;
 response[ 45]=&quot;What is it that you really want to know?&quot;;
 response[ 46]=&quot;Have you asked anyone else?&quot;;
 response[ 47]=&quot;Have you asked such questions before?&quot;;
 response[ 48]=&quot;What else comes to mind when you ask that?&quot;;
 response[ 49]=&quot;Names don't interest me.&quot;;
 response[ 50]=&quot;I don't care about names, please go on.&quot;;
 response[ 51]=&quot;Is that the real reason?&quot;;
 response[ 52]=&quot;Don't any other reasons come to mind?&quot;;
 response[ 53]=&quot;Does that reason explain anything else?&quot;;
 response[ 54]=&quot;What other reasons might there be?&quot;;
 response[ 55]=&quot;Please don't apologise!&quot;;
 response[ 56]=&quot;Apologies are not necessary.&quot;;
 response[ 57]=&quot;What feelings do you have when you apologise?&quot;;
 response[ 58]=&quot;Don't be so defensive!&quot;;
 response[ 59]=&quot;What does that dream suggest to you?&quot;;
 response[ 60]=&quot;Do you dream often?&quot;;
 response[ 61]=&quot;What persons appear in your dreams?&quot;;
 response[ 62]=&quot;Are you disturbed by your dreams?&quot;;
 response[ 63]=&quot;How are you today.. What would you like to discuss?&quot;;
 response[ 64]=&quot;You don't seem quite certain.&quot;;
 response[ 65]=&quot;Why the uncertain tone?&quot;;
 response[ 66]=&quot;Can't you be more positive?&quot;;
 response[ 67]=&quot;You aren't sure?&quot;;
 response[ 68]=&quot;Don't you know?&quot;;
 response[ 69]=&quot;Are you saying no just to be negative?&quot;;
 response[ 70]=&quot;You are being a bit negative.&quot;;
 response[ 71]=&quot;Why not?&quot;;
 response[ 72]=&quot;Are you sure?&quot;;
 response[ 73]=&quot;Why no?&quot;;
 response[ 74]=&quot;Why are you concerned about my&lt;*&quot;;
 response[ 75]=&quot;What about your own&lt;*&quot;;
 response[ 76]=&quot;Can you think of a specific example?&quot;;
 response[ 77]=&quot;When?&quot;;
 response[ 78]=&quot;What are you thinking of?&quot;;
 response[ 79]=&quot;Really, always?&quot;;
 response[ 80]=&quot;Do you really think so?&quot;;
 response[ 81]=&quot;But you are not sure you&lt;*&quot;;
 response[ 82]=&quot;Do you doubt you&lt;*&quot;;
 response[ 83]=&quot;In what way?&quot;;
 response[ 84]=&quot;What resemblence do you see?&quot;;
 response[ 85]=&quot;What does the similarity suggest to you?&quot;;
 response[ 86]=&quot;What other connections do you see?&quot;;
 response[ 87]=&quot;Could there really be some connection?&quot;;
 response[ 88]=&quot;How?&quot;;
 response[ 89]=&quot;You seem quite positive.&quot;;
 response[ 90]=&quot;Are you Sure?&quot;;
 response[ 91]=&quot;I see.&quot;;
 response[ 92]=&quot;I understand.&quot;;
 response[ 93]=&quot;Why do you bring up the topic of friends?&quot;;
 response[ 94]=&quot;Do your friends worry you?&quot;;
 response[ 95]=&quot;Do your friends pick on you?&quot;;
 response[ 96]=&quot;Are you sure you have any friends?&quot;;
 response[ 97]=&quot;Do you impose on your friends?&quot;;
 response[ 98]=&quot;Perhaps your love for friends worries you.&quot;;
 response[ 99]=&quot;Do computers worry you?&quot;;
 response[100]=&quot;Are you talking about me in particular?&quot;;
 response[101]=&quot;Are you frightened by machines?&quot;;
 response[102]=&quot;Why do you mention computers?&quot;;
 response[103]=&quot;What do you think machines have to do with your problems?&quot;;
 response[104]=&quot;Don't you think computers can help people?&quot;;
 response[105]=&quot;What is it about machines that worries you?&quot;;
 response[106]=&quot;Say, do you have any psychological problems?&quot;;
 response[107]=&quot;What does that suggest to you?&quot;;
 response[108]=&quot;I see.&quot;;
 response[109]=&quot;I'm not sure I understand you fully.&quot;;
 response[110]=&quot;Come, come, elucidate your thoughts.&quot;;
 response[111]=&quot;Can you elaborate on that?&quot;;
 response[112]=&quot;That is quite interesting.&quot;;
 response[113]=&quot;Why did you repeat yourself?&quot;;
 response[114]=&quot;Do you expect a different answer by repeating yourself?&quot;;
 response[115]=&quot;Come, come, elucidate your thoughts.&quot;;

 response[116]=&quot;Please don't repeat yourself!&quot;;

 loaded = true; // set the flag as load done

//* everything below here was originally in dia_1.html *//

// Chat Bot by George Dunlop, www.peccavi.com
// May be used/modified if credit line is retained (c) 1997 All rights reserved

// Put together an array for the dialog

 chatmax = 5; // number of lines / 2
 chatpoint = 0;
 chatter = new Array(chatmax);

// Wait function to allow our pieces to get here prior to starting

 function hello(){
 chatter[chatpoint] = &quot;&gt; Hello, I am Eliza.&quot;;
 chatpoint = 1;
 return write();
 function start(){
 for( i = 0; i &lt; chatmax; i++){ chatter[i] = &quot;&quot;; }
 chatter[chatpoint] = &quot; Loading...&quot;;
 if( loaded ){ hello() }
 else { setTimeout(&quot;start()&quot;, 1000); }

// Fake time thinking to allow for user self reflection
// And to give the illusion that some thinking is going on

 var elizaresponse = &quot;&quot;;

 function think(){
 document.Eliza.input.value = &quot;&quot;;
 if( elizaresponse != &quot;&quot; ){ respond(); }
 else { setTimeout(&quot;think()&quot;, 250); }
 function dialog(){
 var Input = document.Eliza.input.value; // capture input and copy to log
 document.Eliza.input.value = &quot;&quot;;
 chatter[chatpoint] = &quot; \n* &quot; + Input;
 elizaresponse = listen(Input);
 setTimeout(&quot;think()&quot;, 1000 + Math.random()*3000);
 chatpoint ++ ;
 if( chatpoint &gt;= chatmax ){ chatpoint = 0; }
 return write();
 function respond(){
 chatpoint -- ;
 if( chatpoint &lt; 0 ){ chatpoint = chatmax-1; }
 chatter[chatpoint] += &quot;\n&gt; &quot; + elizaresponse;
 chatpoint ++ ;
 if( chatpoint &gt;= chatmax ){ chatpoint = 0; }
 return write();
// Allow for unprompted response from the engine

 function update(str1,str2){
 chatter[chatpoint] = &quot; \n&gt; &quot; + str1;
 chatter[chatpoint] += &quot;\n&gt; &quot; + str2;
 chatpoint ++ ;
 if( chatpoint &gt;= chatmax ){ chatpoint = 0; }
 return write();

 function write(){
 document.Eliza.log.value = &quot;&quot;;
 for(i = 0; i &lt; chatmax; i++){
 n = chatpoint + i;
 if( n &lt; chatmax ){ document.Eliza.log.value += chatter[ n ]; }
 else { document.Eliza.log.value += chatter[ n - chatmax ]; }
 return false; // don't redraw the ELIZA's form!
 function refresh(){ setTimeout(&quot;write()&quot;, 10000); } // Correct user overwrites

// --&gt;&lt;/SCRIPT&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;/station.css&quot;&gt;
&lt;body onload = &quot;start();&quot; bgcolor=#FFFFFF&gt;

&lt;h1&gt;Eliza, computer therapist&lt;/h1&gt;

&lt;p&gt;ELIZA emulates a Rogerian psychotherapist.&lt;/p&gt;

&lt;p&gt;ELIZA has almost no intelligence whatsoever, only
 tricks like string substitution and canned responses
 based on keywords. Yet when the original ELIZA first
 appeared in the 60's, some people actually mistook her for
 human. The illusion of intelligence works best, however,
 if you limit your conversation to talking about yourself
 and your life.&lt;/p&gt;

&lt;p&gt;This javascript version of ELIZA was originally written by
 &lt;a href=&quot;http://www.sabren.net/&quot;&gt;Michal Wallace&lt;/a&gt; and
 significantly enhanced by
 &lt;a href=&quot;http://www.peccavi.com/&quot;&gt;George Dunlop&lt;/a&gt;.

&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; Eliza is dumb! This is common knowledge. Please
 don't write to me telling me she's dumb, or how to fix it.
 If you don't like the way she works, you can change the code
 yourself. Just view source on this page to see the javascript,
 and save it to your hard drive. Then do a search for javascript
 documenation, and you should be able to make Eliza act any
 way you want. :)


&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; border=&quot;0&quot; align=&quot;center&quot; class=&quot;neurotoy&quot;&gt;
 &lt;tr&gt;&lt;th bgcolor=#000000 align=&quot;left&quot;&gt;
 &lt;font color=&quot;#FFFFFF&quot;&gt;Talk to Eliza&lt;/Font&gt;
 &lt;tr&gt;&lt;td bgcolor=#0097FF&gt;
 &lt;form name=&quot;Eliza&quot; onSubmit=&quot;return dialog();&quot;&gt;

 &lt;textarea rows=14 cols=55 name=&quot;log&quot;&gt;&lt;/textarea&gt;
 &lt;center&gt;&lt;font color=#000000&gt;&lt;br&gt;Input:&lt;/font&gt;
 &lt;INPUT TYPE=&quot;text&quot; size = 50 NAME=&quot;input&quot; VALUE=&quot;&quot;&gt;&lt;/center&gt;

&lt;p align=&quot;center&quot;&gt;&lt;br&gt;&lt;small&gt;



Ever wanted or needed a monitor and all you have is an old composite monitor. Try this hack (at your own risk) and see if it works.


Notice: try this at your own risk. If you have a pre-usb computer system, you can still program your Arduino (with built in boot-loader). Stand alone Arduino chips are much cheaper than purchasing the retail board. There are two ports to consider. First is the parallel port and the second is the pin-out on the arduino.

You will need three resistors. Two 470 and one 220 ohm resistors go build the circuit. Parallel connector with a 470 ohm resistor soldered to pin 1. Solder a 220 ohm resistor to pin 11 of the connector. Solder, in order, the three wires of one of the cables to the resistor on pin 11 (which goes to pin 18 on the Atmega8), to the resistor on pin 1 (which goes to pin 19 on the Atmega8), and directly to pin 16 (which goes to the reset, pin 1).  Parallel connector with two of the three wires of a cable soldered to pins 11 and 1, respectively.  Solder the middle wire of the second cable to the resistor on pin 2 (which goes to pin 17 on the Atmega8), and one of the other wires to pin 18 (which goes to ground). (The third wire is not used and may be cut short).

Once you have your circuit built, you will need to find the hex file (we used the blink demo for compiling) for sending to the Arduino. If you use the gui environment, the file will be in a build directory under tmp.

After you install uisp, you should be able to install the binary file with:

$ uisp -dprog=dapa -dpart=ATmega8 if=Blink.cpp.hex -dlpt=0x378 –erase –upload


Made a large tablet holder and an adapter for a smaller touchpad.

Screenshot - 06242014 - 06:21:51 PM


Meatless: (fake hamburger sandwich and chicken fried steak.)



Good day.

Uhmm goodie uhmm goodie.

Leave a comment

Chit chat.


Nice little command but it requires admin rights.

$ sudo arp-scan –localnet
[sudo] password for eddie:
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/) 00:00:00:00:00:00 Buffalo Inc. 00:00:00:00:00:00 DELL COMPUTER CORPORATION 00:00:00:00:00:00 Cellvision Systems, Inc.

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 256 hosts scanned in 1.741 seconds (147.04 hosts/sec). 3 responded


This is an article I wrote a long time ago, but found a minor error. Instead of going back and changing the original article, thought I would repost the article here.

Simple calendar

$ for i in {0..365};do date -d “Jan 1 2012 + $i day” + ”*%B %_d – “; done

In theory would print out:
*January 1 -
*January 2 -
*January 3 -
*January 4 -
*January 5 -

*December 28 -
*December 29 -
*December 30 -
*December 31 -

Now lets put that in a batch file called moncal.sh and mod it a little bit.


# use start month and add number of days after the first day of that month i.e. ./moncal.sh Oct 60
let l=$2-1;for i in $(eval echo {0..$l});do date -d "$1 1 2012 + $i day" +"*%B %_d - ";done

$ chmod +x moncal.sh

Then try it

$ ./moncal.sh Feb 29

You get:
*February 1 -
*February 2 -
*February 3 -
*February 27 -
*February 28 -
*February 29 -

A little fun:

$ ./moncal.sh Feb 60

*February 1 -
*February 2 -
*February 3 -

*March 30 -
*March 31 -

$ ./moncal.sh Feb 29 > feb_databook

$ vim feb_databook

(or nano or gedit, or etc)

Insert data into file using underscores (easier to dump data into spreadsheet).


read -p "Words to add to list: " t
t1=$(echo $t | sed -e 's/ /_/g')
sed '/'$2'/a
&gt;_'$t1 $1 &gt; test
mv test $1

$ ./daterecord.sh Feb_datebook -3
Words to add to list: This date has passed
[eddie@oedt01 ~]$ cat Feb_datebook
*February -1 -
*February -2 -
*February -3 -
*February -4 -
*February -5 -
*February -6 -


Reverse tunnel?

Screenshot - 06052014 - 06:46:48 AM

Have you ever wanted to ssh to your Linux box that sits behind NAT? Now you can with reverse SSH tunneling. This document will show you step by step how to set up reverse SSH tunneling. The reverse SSH tunneling should work fine with Unix like systems.

Let’s assume that Destination’s IP is (Linux box that you want to access).

You want to access from Linux client with IP

Destination ( <- |NAT| <- Source (

1. SSH from the destination to the source (with public ip) using command below:

ssh -R 19999:localhost:22 sourceuser@

* port 19999 can be any unused port.

2. Now you can SSH from source to destination through SSH tuneling:

ssh localhost -p 19999


The CGI (Common Gateway Interface) defines a way for a web server to interact with external content-generating programs, which are often referred to as CGI programs or CGI scripts. It is the simplest, and most common, way to put dynamic content on your web site. The main point of this is that you can use your own programming interface to push or pull data from a web page.

Cgi install in part. assuming apache2 is already installed.

$ sudo apt-get install libapache2-mod-perl2
sudo a2enmod cgi 
$ sudo service apache2 restart

For example I like to use Freebasic to control ports for automation. The cgi interface allows me to do that. Actually what I wanted to talk about is changing the directory where you usually store the files. Here is a typical entry for cgi scripts location.

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
Options FollowSymLinks
Require all granted

The current directory is just fine and probably best for admins to control.However, I would
like to used a different directory. All you have to do is to change the script alias and the directory lines.

 ScriptAlias /cgi-bin/ /var/wwww/cgi-bin/
<Directory "
Options +ExecCGI
AddHandler cgi-script .cgi .pl
Options FollowSymLinks
Require all granted

You will now want to restart Apache2

$ sudo service apache2 restart

Then just copy your cgi and other support files to the directory.

$ cp *.cgi  /var/wwww/cgi-bin/

Now you can use your special pages. 


A bash cgi example:

    echo "Content-type: text/htmln"
    # read in our parameters
    CMD=`echo "$QUERY_STRING" | sed -n 's/^.*cmd=([^&]*).*$/1/p' | sed "s/%20/ /g"`
    FOLDER=`echo "$QUERY_STRING" | sed -n 's/^.*folder=([^&]*).*$/1/p' | sed "s/%20/ /g"| sed "s/%2F///g"`
     FOLDER1=`echo "$QUERY_STRING" | sed -n 's/^.*folder1=([^&]*).*$/1/p' | sed "s/%20/ /g"| sed "s/%2F///g"`
FOLDER2=`echo "$QUERY_STRING" | sed -n 's/^.*folder2=([^&]*).*$/1/p' | sed "s/%20/ /g"| sed "s/%2F///g"`
    # our html header
    echo "<html>"
    echo "<head><title>Bash CGI</title></head>"
    echo "<body>"
    # test if any parameters were passed
    if [ $CMD ]
      case "$CMD" in
          echo "Output of ifconfig :<pre>"
          echo "</pre>"
          echo "Output of uname -a :<pre>"
          /bin/uname -a
          echo "</pre>"
          echo "Output of dmesg :<pre>"
          echo "</pre>"
          echo "Output of df -h :<pre>"
          /bin/df -h
          echo "</pre>"
          echo "Output of free :<pre>"
          echo "</pre>"
              echo "Hardware listing :<pre>"
              echo "</pre>"
              echo "lsusb :<pre>"
              echo "</pre>"
              echo "List of users :<pre>"
              echo "</pre>"
          echo "Output of ls $FOLDER :<pre>"
          /bin/ls "$FOLDER"
          echo "</pre>"
              echo "Output of ls $FOLDER1 :<pre>"
              /bin/ls -al "$FOLDER1"
              echo "</pre>"
              echo "System to wake: $FOLDER2 :<pre>"
              /usr/bin/wakeonlan "$FOLDER2"
              echo "</pre>"
          echo "Ubuntu version :<pre>"
          /usr/bin/lsb_release -a
          echo "</pre>"
              echo "Cpu information :<pre>"
              cat /proc/cpuinfo
              echo "</pre>"
          echo "Unknown command $CMD<br>"
    # print out the form
    # page header
    echo "<p>"
    echo "<center>"
    echo "<h2>Bash commands</h2>"
    echo "</center>"
    echo "<p>"
    echo "<p>"
    echo "Choose which command you want to run"
    echo "<form method=get>"
    echo "<input type=radio name=cmd value=ifconfig checked> ifconfig (Network configuration) <br>"
    echo "<input type=radio name=cmd value=uname> uname -a (Kernel version)<br>"
    echo "<input type=radio name=cmd value=dmesg> dmesg (System messages) <br>"
    echo "<input type=radio name=cmd value=lsb_release> lsb_release (Ubuntu version) <br>"
    echo "<input type=radio name=cmd value=df> df -h (Free disk space) <br>"
    echo "<input type=radio name=cmd value=free> free (Memory info)<br>"
        echo "<input type=radio name=cmd value=cpuinfo> Cpu information <br>"
        echo "<input type=radio name=cmd value=hw> Hardware listing <br>"
    echo "<input type=radio name=cmd value=lsuser> User listing <br>"
    echo "<input type=radio name=cmd value=lsusb> lsusb (Usb ports info)<br>"
    echo "<input type=radio name=cmd value=ls> ls  -- folder <input type=text name=folder value=/mnt/flash><br>"
    echo "<input type=radio name=cmd value=lsal> ls -al -- folder <input type=text name=folder1 value=/mnt/flash><br>"
        echo "<input type=radio name=cmd value=wol> wakeonlan (enter mac address) <input type=text name=folder2 value=00:00:00:00:00:00><br>"
    echo "<input type=submit>"
    echo "</form>"
    echo "</body>"
    echo "</html>"


Two diy tv antennas




Lasagna bianco.


Good day.

I can see it.

Leave a comment

Chit chat

Need to redo my desktop machine, so I can get off the laptop.


The Rasberry Pi or RPi for short is an amazing little unit. It can be a desktop, thin client, server, or a multitude of other devices. It is a sort of jack of all trades. At http://www.instructables.com/id/Raspberry-Pi-Jack-of-all-trades  we look at some of the options of what the RPi can do. One such option is to let the Rpi be a private eye or spy device. Compared to some the commercial video units, it is a bargain in price.

Security is an important subject these days. With the RPi you can easily install yourself a spy setup without bringing in an expensive consultant. Check it out.


Not my video, but I thought it was prolific. Know many adults who might have the same reaction.



For reference only: http://www.apl2bits.net/2011/04/21/uthernet-online/


In the last article, using older computers that does not use the fancy graphics of today. You actually can do quite a bit with text such as movies, radar screens and etc. though the old favorite of using a computer as a clock.

Many command line users really appreciate text graphics to make their terminals more interesting especially at the point of login.

Want to see more?  More at:  http://www.instructables.com/id/Graphics-in-a-text-world/


Sometimes I forget how lucky I am to see. Not everyone has that gift. If you do not have that gift, does not mean you should be limited in using computers. Traditionally you had to let someone install linux for you, Several Linux distros now allow even the seeing and or hearing impaired to install and use Linux. As a test for myself, I took the Debian linux distro to see if I could install and use it blindfolded. As many times as I have done the text install of Linux, I did not do very well with the audio commanded install of Debian Linux (www.debian.org).  I am sure they have improved it. Then again they never advertized it as a distro for the blind. (You use the speech synthesis option).  Later you might need to install Orca if you want to use the gui.

But then you can use the distros meant to be used for the handicapped  such as  Arch (http://talkingarch.tk/). They even have an audio not video tutorial.  You could also use Vinux  (vinuxproject.org/) or Sonar (http://sonargnulinux.com/). Sonar is recommended by the TLLTS podcast team.

There are some excellent text based utilities to start of with before you venture into the gui.

Some of my favorite programs are:
alsa sound modules – music and to support speech programs (and voice recording)
Twidge – twitter client
links2 – internet browser
ps2ascii – convert postscript files to text files.
bashpodder – audio podcast collector
alpine sendEmail – email client tools
irssi – interrelay chat
centerim – instant messaging client
vim can be used as and editor or word processor, there are many others.
antiword – for dealing with proprietary word procesing formats.
screen – allows you to easily switch remote sessions
ledger – accounting program
curl wget – web page and file extracting tools
bash – the built in programming language that can be used with awk, sed, sort tr figlet (make your own database or game programs as well as other tools).
ImageMagick suite – manipulate graphics
cadubi tetradraw – ascii drawing programs
opensched – schedule formater.
hnb – notetaking and outlining
moc mplayer aplay ffmpeg – audio tools and players.
nget newbueter – newsreader
pal – calendar/planner program
cdrecord – burn cd’s and back up computer.
ssh and other tools. – network administration/file amangement
espeak festival – voice synthesis (great for having your computer read outloud documents) Who needs a Kindle?
wyrd – calendaring program.

The bottom line is that you can do word processing. spreadsheets. database, email, listen to podcasts or even hear documents spoken. Who could ask for more?  Happy computing.


A generic script to show a version of the Linux distro installed. I like to use lsb_release, but that is not always available.


lsb_release &gt;/dev/null 2&gt;/dev/null
if [ $? = 0 ]
lsb_release -ds | sed 's/^\&quot;//g;s/\&quot;$//g'
# a bunch of fallbacks if no lsb_release is available
# first trying /etc/os-release which is provided by systemd
elif [ -f /etc/os-release ]
source /etc/os-release
if [ -n &quot;${PRETTY_NAME}&quot; ]
printf &quot;${PRETTY_NAME}\n&quot;
printf &quot;${NAME}&quot;
[[ -n &quot;${VERSION}&quot; ]] &amp;&amp; printf &quot; ${VERSION}&quot;
printf &quot;\n&quot;
# now looking at distro-specific files
elif [ -f /etc/arch-release ]
printf &quot;Arch Linux\n&quot;
elif [ -f /etc/gentoo-release ]
cat /etc/gentoo-release
elif [ -f /etc/fedora-release ]
cat /etc/fedora-release
elif [ -f /etc/redhat-release ]
cat /etc/redhat-release
elif [ -f /etc/debian_version ]
printf &quot;Debian GNU/Linux &quot; ; cat /etc/debian_version
printf &quot;Unknown\n&quot;

 $ chmod +x  release.sh
  $ ./release.sh
Ubuntu 12.04.4 LTS
  $ ./release.sh
Arch Linux


Old coat hanger vs the newer child safer hdtv antenna.



Arch linux: Remove kde
pacman -Rnsc kde

Add ps2 keyboard:

WARNING: There’s a downside to all this: On some motherboards (mostly ancient ones, but also a few new ones), the i8042 controller cannot be automatically detected. It’s rare, but some people will surely be without keyboard. You can detect this situation in advance:

$ dmesg -t | grep '^i8042'
i8042: PNP: No PS/2 controller found. Probing ports directly.

If you have a PS/2 port and get this message, add atkbd to the MODULES= line in mkinitcpio.conf and run mkinitcpio -P. If you just noticed that you are without keyboard after rebooting, fear not! Simply add

earlymodules=atkbd modules-load=atkbd

to your kernel command line in your bootloader.


Maccheroni and cheese again.


Good day.

Summer is a coming.

Leave a comment



The NSA allegedly steals your privacy with a fiber optic beam splitter. No hacking required. They need a bit of time to put a patch in your fiber optic cable.





Game of thrones author George RR Martin has explained why he does all his writing on an obsolete disk operating system (DOS) computer – “because it does not correct his spelling” and other errors. He also said he feels more secure since the dos system is not connected to the internet. He does have a more modern computer to do the internet email, twitter and etc.

More information at: http://www.bbc.com/news/technology-2740750


Two videos as a tribute to Aaron Swartz…




If you liked the British comedy known as the “IT Crowd” then you might like to make this box.

External wifi host > wireless access point > wifi router > clients. External wifi host > wireless access point > wifi router > clients.

the internet = wireless access point > wifi router


Parabolic antenna and a yagi antenna.









You can actually have a network without depending on the internet.

Basic setup (part 1). http://www.instructables.com/id/Your-personal-intranet-Part-1/

More goodies (part 2). http://www.instructables.com/id/Your-personal-intranet-Part-2/

For small offices and neighborhood setups, these ideas can be a boon to privacy.




My old Pentium II running arch linux. It ain’t dead till I say it is.
$ pingall.sh 1 # network 192.168.1
64 bytes from icmp_req=1 ttl=64 time=0.537 ms
64 bytes from icmp_req=1 ttl=64 time=0.054 ms
64 bytes from icmp_req=1 ttl=64 time=0.443 ms
eddie@oelt02:~$ nslookup
Address:    name = archie.

eddie@oelt02:~$ ssh archie

Last login: Fri May 30 00:52:50 2014 from oelt02
Arch Linux
[eddie@archie~]$ uname -a
Linux archie 3.14.4-1-ARCH #1 SMP PREEMPT Tue May 13 16:44:54 CEST 2014 i686 GNU/Linux
[eddie@archie~]$ cat /proc/cpuinfo
processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 5
model name    : Pentium II (Deschutes)
stepping    : 2
cpu MHz        : 451.025
cache size    : 512 KB


Even the Sega Dreamcast runs nix and not MSWindows. Nix runs on almost anything.

Linux is available for


alpha Digital Alpha-based systems
amd64 AMD64-based systems
armish ARM-based appliances (by Thecus, IO-DATA, and others)
hp300 Hewlett-Packard HP 9000 series 300 and 400 workstations
hppa Hewlett-Packard Precision Architecture (PA-RISC) systems
i386 Standard PC and clones based on the Intel i386 architecture and compatible processors
landisk IO-DATA Landisk systems (such as USL-5P) based on the SH4 cpu
loongson Loongson 2E- and 2F-based systems, such as the Lemote Fuloong and Yeeloong, Gdium Liberty, etc.
luna88k Omron LUNA-88K and LUNA-88K2 workstations
macppc Apple New World PowerPC-based machines, from the iMac onwards
mvme68k Motorola 680×0-based VME systems
mvme88k Motorola 881×0-based VME systems
sgi SGI MIPS-based workstations
socppc Freescale PowerPC SoC-based machines
sparc Sun sun4, sun4c, sun4e and sun4m class SPARC systems
sparc64 Sun UltraSPARC and Fujitsu SPARC64 systems
vax Digital VAX-based systems
zaurus Sharp Zaurus C3x00 PDAs



One thing I like about servers is that clients or users can run an application from a server. That means software only has to be installed and or upgraded once at a time. What a savings in support time. Places such as Sourceforge.net have many programs that can run from a web server.

Three of the most common programs that people use are a spreadsheet, word processing. and a database. One such program although it was not in the package I used was a relational database. A flatfile database could be created in the spreadsheet. The program I am talking about is eyeOS. eyeOS is sort of a computer desktop for your browser.  That means the software should be platform independent.  That means you can generally use any touchpad, desktop, laptop, or anything with a browser. No per se special setup is needed in most cases on the user side.

You do need a web server to host the software. A lamp, wamp, mamp, or similar type server should work. We use Apache a lot.The neat thing about web based apps is you do not need a gui based machine to hose the software. We use and old Pentium II computer at home to host the software. In fact, I have run it on an nslu2 running debian.

If you would like to know more about installing eyeOS see:


Need some files that I thought were on a floppy. Went through all the floppies and they were not there. Have to check the old XP machine for them. Anyway, I noticed a change the way I had to mount the floppies.

First we will make a directory to mount to

$ sudo mkdir /media/floppy

We will mount the floppy: (old way: sudo mount -t vfat /dev/fd0 /media/floppy).You will not have the persistent fdx anymore, so you will have to do a sudo fdisk -l to see what drives you have.

$ sudo mount -t vfat /dev/sdb /media/floppy

Get a directory

$ ls /media/floppy

Unmount the drive unless you want to copy some files.

$ sudo umount /media/floppy

Mtools no longer seemed to work properly. At least they did not for me using  traditional commands.


Wondered if there was a way to get information about a web server from the web. After researching, I found an abandoned article with a script that fit the bill. From a few lines, the script has expanded quite nicely. The script is becoming more and more popular. You can get more information at: http://www.instructables.com/id/Simple-linux-commands-from-a-web-page/


Coffee makers are not just for coffee anymore. You can actually make some interesting meals. Soup of course( http://www.instructables.com/id/Tuna-noodle-coffepot-soup/), but you can even make pasta from scratch. http://www.instructables.com/id/Coffee-maker-pasta/ 
But of course those are the standards. We can actually go a bit farther and even make cheese and other goodies (http://www.instructables.com/id/Coffeemaker-meals-and-etc/ ). What will be your next coffeemaker meal?


Time to make fajitas again.



Good day.

Clear skies….

Leave a comment



Highly disappointed about: http://arstechnica.com/tech-policy/2014/05/oracles-java-api-code-protected-by-copyright-appeals-court-rules/

Sometimes I wonder if arstechnica is a subsidiary of the government and big business from the stories they publish.

Someone mentioned that the freedom of linux was in the number of distros. Kind of disagreed with that.  Been using linux since the 1990’s. At home was completely linux about seven years ago after I left my Microsoft based job. Certainly there are plenty of distros, but I think the real freedom is in the variety of application packages and the source code to choose from or not to choose from. Because you have the source code, you can modify not or not modify your system(s) to your whims.. For example, with proprietary software you have globs that per se are functionally separate. I.e. server, desktop, or etc.  With linux as well as bsd, you can morph to be a server desktop, or whatever. you choose. Lastly, you are not limited to hardware platforms. I use or have used linux on x86,  arm,  x86-64, ppc, and etc.  Bsd will run on almost anything. Even run it on my sega dreamcast,, Now that is freedom.


Statistics are so interesting. I was curious about the NFL draft. Thinking how could I look at the results of the draft. Viola a spreadsheet of course. A spreadsheet is sometimes known as a flat file and looks much like an accountant;s worksheet. That is it has no relation to any other file in its most rudimentary form. For our purposes that would be just fine.The original list was in the order of when someone was drafted.

So I gathered the data from the draft with everything in corresponding columns. That makes sense. Then I thought what can I do. Arranging or sorting a list is one of the pluses of the spreadsheet. Let’s see you have the team name, draftee and his position, plus some other vital data. Posed myself a question that maybe opposing teams might ask. The teams obviously drafted where they thought they might need help. Lets do a sort and see who needs what. Instructions to do a sort for your spreadsheet may vary.

Noticed that there was only one punter drafted. Is that not cool? Feel like a NFL manager for a second.


Every program should have at least these two points: start and stop. A program is like a todo list. You could use English, Spanish, or a host of other languages to use your todo list. More on logic steps later.

So with computer languages you can do the same thing.  Examples:

in C
#include <stdio.h>



In basic:

rem start
rem stop

Of course that does not really do anything in that sequence. Now let’s go to the beginner’s hello world example and see how things change. Yes we are adding a step here in the sequence. Let’s just use english for now.


in C

#include <stdio.h>

printf(“Hello, world.\n”);

In Basic

rem start
print “Hello, world.”
rem stop

You can not get any simpler than that for a start, In some ways you are an architect putting rooms together for a house such as a bedroom, bathroom, kitchen, den, living room or etc. With logic you can have loops (repetitive actions), Decision structures (if
this happens then do one or more things, or else just do something else),  or just a sequence of steps. More on all of this later.


We spend so much time worrying about wireless networking we forget to also consider what might be attached to the wired network. What is hidden behind the wall?

Actually I built a network tap for administrative purposes, but it shows how easily something like this could be hidden in the wall behind the sheetrock. Does not hurt to pull the screws once in a while to see what is there.


Connected to the passive tap also could be a wireless device which makes for real security problems such as loss of company secrets and other financial data.

Screenshot - 05142014 - 09:02:17 AM


Playing with OTA tv antennas again.. Took an aluminium plate and cut it to roughly the dimensions of the $49 commercial antenna. If I had not been in a hurry, the antenna would have looked nicer. Without resetting the channels on the receiver still was able to access over 80 tv stations. Not bad for a $3 investment.

 Update: Another antenna comparison. No CBS affiliate either.  Amazon wanted $99.

Again only a $3  investment for me.

Using mathematics or what people have used mathematics for can be fun. One such item is a parabola. It can be used for everything from capturing radio waves to sound. There are a zillion formulas for building a parabola. One such formula is y=x^2/(4+b). But then, if you look closely on the net, there are examples you can use without all the math. In one article, I found a small picture of a parabola form that did not seem useful.

Then I thought to myself, what if I enlarged the picture, could the picture be more useful? Saving the picture to storage was the first task. Then we loaded the picture into a viewing program. There you could enlarge the picture and save it in the expanded format.

So far so good. Then I printed out the picture. Still do not have a parabola yet. Then it was time to get out the scissors and cut between the splines. Easy enough. Now just one last step in that we need to attach the splines together. Cellophane tape makes that easy.


Then I thought, what about an even larger parabola. Poster size maybe. Extend out the spline edges with a straight edge (not like the crude extensions in the picture).

The we could make an even larger parabola all based on the original tiny picture. Let you do that your self. Let’s see solar cooker, sound umbrella, hat, or etc etc.

Update: Even larger parabola.

x y
0 0.0000
3 0.1875
6 0.7500
9 1.6875
12 3.0000
15 4.6875
18 6.7500
21 9.1875
24 12.0000
27 15.1875
30 18.7500
33 22.6875
36 27.0000
39 31.6875
42 36.7500
45 42.1875
48 48.0000
The formula for a parabola is:

y = x² ÷ (4 × p)

where p is the distance from the bottom of the parabola to the focal point, and x and y are cartesian coordinates of points along the parabola.

For a parabola that is to be 96 inches across (that is, -48 inches to +48 inches relative to the focal point) and 48 inches deep, with a focal point 12 inches above the bottom of the parabola, the formula generates the numbers shown in the table on the right.

Sometimes it is useful to be able to locate the focal point after the fact. Rearranging the above formula

p = x² ÷ (4 × y)

where x is the width (from the focal point) of the parabola, y is the depth of the parabola, and f is the distance ahead of the bottom of the parabola of the focal point. For our above 96 inch wide and 48 inch deep parabola, f solves to 12 inches.


A one day fast every once in a while does not hurt.


Good day.


Older Entries


Get every new post delivered to your Inbox.