Saturday, January 25, 2020

Something to Ponder

The paradox of our time in history is that we have taller buildings but shorter tempers, wider freeways, but narrower viewpoints. We spend more, but have less, we buy more, but enjoy less. We have bigger houses and smaller families, more conveniences, but less time. We have more degrees but less sense, more knowledge, but less judgment, more experts, yet more problems, more medicine, but less wellness.

We drink too much, smoke too much, spend too recklessly, laugh too little, drive too fast, get too angry, stay up too late, get up too tired, read too little, watch TV too much, and pray too seldom.

We have multiplied our possessions, but reduced our values. We talk too much, love too seldom, and hate too often.

We've learned how to make a living, but not a life. We've added years to life not life to years. We've been all the way to the moon and back, but have trouble crossing the street to meet a new neighbor. We conquered outer space but not inner space. We've done larger things, but not better things.

We've cleaned up the air, but polluted the soul. We've conquered the atom, but not our prejudice. We write more, but learn less. We plan more, but accomplish less. We've learned to rush, but not to wait. We build more computers to hold more information, to produce more copies than ever, but we communicate less and less.

These are the times of fast foods and slow digestion, big men and small character, steep profits and shallow relationships. These are the days of two incomes but more divorce, fancier houses, but broken homes. These are days of quick trips, disposable diapers, throwaway morality, one night stands, overweight bodies, and pills that do everything from cheer, to quiet, to kill. It is a time when there is much in the showroom window and nothing in the stockroom. A time when technology can bring this letter to you, and a time when you can choose either to share this insight, or to just hit delete.

Remember to spend some time with your loved ones, because they are not going to be around forever.

Remember, say a kind word to someone who looks up to you in awe, because that little person soon will grow up and leave your side.

Remember, to give a warm hug to the one next to you, because that is the only treasure you can give with your heart and it doesn't cost a cent.

Remember, to say, 'I love you' to your partner and your loved ones, but most of all mean it. A kiss and an embrace will mend hurt when it comes from deep inside of you.

Remember to hold hands and cherish the moment for someday that person will not be there again.

Give time to love, give time to speak! And give time to share the precious thoughts in your mind.

And always remember, life is not measured by the number of breaths we take, but by those moments that take our breath away.

George Carlin - 1937-2008

Wednesday, January 1, 2020

Happy New Year

Happy New Year everyone.  Make it a good one.  Don't forget to stop and smell the roses and spend time on who and what is important to you.  Resist the urge to take anyone or anything for granted.  Give a little and leave those you touch better than you found them.  Above all, forgive those who have wronged you and don't let hate win.  Happy New Year.

Tuesday, December 25, 2018

Merry Christmas!

Politically correct or not, let me take this opportunity to wish everyone a Merry Christmas and a Happy New Year.

Afrikaans: Geseënde Kersfees
Afrikander: Een Plesierige Kerfees
African/ Eritrean/ Tigrinja: Rehus-Beal-Ledeats
Albanian: Gezur Krislinjden
Arabic: Milad Majid
Argentine: Feliz Navidad
Armenian: Shenoraavor Nor Dari yev Pari Gaghand
Azeri: Tezze Iliniz Yahsi Olsun
Bahasa Malaysia: Selamat Hari Natal
Basque: Zorionak eta Urte Berri On!
Bengali: Shuvo Naba Barsha
Bohemian: Vesele Vanoce
Bosnian: (BOSANSKI) Cestit Bozic i Sretna Nova godina
Brazilian: Feliz Natal
Breton: Nedeleg laouen na bloavezh mat
Bulgarian: Tchestita Koleda; Tchestito Rojdestvo Hristovo
Catalan: Bon Nadal i un Bon Any Nou!
Chile: Feliz Navidad
Chinese: (Cantonese) Gun Tso Sun Tan'Gung Haw Sun
Chinese: (Mandarin) Sheng Dan Kuai Le
Choctaw: Yukpa, Nitak Hollo Chito
Columbia: Feliz Navidad y Próspero Año Nuevo
Cornish: Nadelik looan na looan blethen noweth
Corsian: Pace e salute
Crazanian: Rot Yikji Dol La Roo
Cree: Mitho Makosi Kesikansi
Croatian: Sretan Bozic
Czech: Prejeme Vam Vesele Vanoce a stastny Novy Rok
Danish: Glædelig Jul
Duri: Christmas-e- Shoma Mobarak
Dutch: Vrolijk Kerstfeest en een Gelukkig Nieuwjaar! or Zalig Kerstfeast
English: Merry Christmas
Eskimo: (inupik) Jutdlime pivdluarit ukiortame pivdluaritlo!
Esperanto: Gajan Kristnaskon
Estonian: Rõõmsaid Jõulupühi
Ethiopian: (Amharic) Melkin Yelidet Beaal
Faeroese: Gledhilig jol og eydnurikt nyggjar!
Farsi: Cristmas-e-shoma mobarak bashad
Finnish: Hyvaa joulua
Flemish: Zalig Kerstfeest en Gelukkig nieuw jaar
French: Joyeux Noel
Frisian: Noflike Krystdagen en in protte Lok en Seine yn it Nije Jier!
Galician: Bo Nada
Gaelic: Nollaig chridheil agus Bliadhna mhath ùr!
German: Fröhliche Weihnachten
Greek: Kala Christouyenna!
Haiti: (Creole) Jwaye Nowel or to Jesus Edo Bri'cho o Rish D'Shato Brichto
Hausa: Barka da Kirsimatikuma Barka da Sabuwar Shekara!
Hawaiian: Mele Kalikimaka
Hebrew: Mo'adim Lesimkha. Chena tova
Hindi: Shub Naya Baras (good New Year not Merry Christmas)
Hungarian: Boldog Karácsonyt
Icelandic: Gledileg Jol
Indonesian: Selamat Hari Natal
Iraqi: Idah Saidan Wa Sanah Jadidah
Irish: Nollaig Shona Dhuit, or Nodlaig mhaith chugnat
Iroquois: Ojenyunyat Sungwiyadeson honungradon nagwutut. Ojenyunyat osrasay.
Italian: Buone Feste Natalizie
Japanese: Shinnen omedeto. Kurisumasu Omedeto
Jiberish: Mithag Crithagsigathmithags
Korean: Sung Tan Chuk Ha
Kurdish: Serî sallî nwê pîroz
Lao: souksan van Christmas
Latin: Natale hilare et Annum Faustum!
Latvian: Prieci'gus Ziemsve'tkus un Laimi'gu Jauno Gadu!
Lausitzian: Wjesole hody a strowe nowe leto
Lettish: Priecigus Ziemassvetkus
Lithuanian: Linksmu Kaledu
Low Saxon: Heughliche Winachten un 'n moi Nijaar
Luxembourgish: Schèine Chreschtdaag an e gudde Rutsch
Macedonian: Sreken Bozhik
Maltese: IL-Milied It-tajjeb
Manx: Nollick ghennal as blein vie noa
Maori: Meri Kirihimete
Marathi: Shub Naya Varsh (good New Year not Merry Christmas)
Navajo: Merry Keshmish
Norwegian: God Jul, or Gledelig Jul
Occitan: Pulit nadal e bona annado
Papiamento: Bon Pasco 
Papua New Guinea: Bikpela hamamas blong dispela Krismas na Nupela yia i go long yu
Pennsylvania German: En frehlicher Grischtdaag un en hallich Nei Yaahr!
Peru: Feliz Navidad y un Venturoso Año Nuevo
Philippines: Maligayang Pasko!
Polish: Wesolych Swiat Bozego Narodzenia or Boze Narodzenie
Portuguese: Feliz Natal
Pushto: Christmas Aao Ne-way Kaal Mo Mobarak Sha
Rapa-Nui (Easter Island): Mata-Ki-Te-Rangi. Te-Pito-O-Te-Henua
Rhetian: Bellas festas da nadal e bun onn
Romanche: (sursilvan dialect): Legreivlas fiastas da Nadal e bien niev onn!
Rumanian: Sarbatori vesele or Craciun fericit
Russian: Pozdrevlyayu s prazdnikom Rozhdestva is Novim Godom
Sami: Buorrit Juovllat
Samoan: La Maunia Le Kilisimasi Ma Le Tausaga Fou
Sardinian: Bonu nadale e prosperu annu nou
Scots Gaelic: Nollaig Chridheil dhuibh
Serbian: Hristos se rodi.
Singhalese: Subha nath thalak Vewa. Subha Aluth Awrudhak Vewa
Slovak: Vesele Vianoce. A stastlivy Novy Rok
Slovene: Vesele Bozicne Praznike Srecno Novo Leto or Vesel Bozic in srecno Novo leto
Spanish: Feliz Navidad
Swedish: God Jul and (Och) Ett Gott Nytt År
Switzerland (Swiss-German): Schöni Wienachte
Tagalog: Maligayamg Pasko. Masaganang Bagong Taon
Tamil: (Tamizh) Nathar Puthu Varuda Valthukkal (good New Year not Merry Christmas)
Trukeese: (Micronesian) Neekiriisimas annim oo iyer seefe feyiyeech!
Thai: Sawadee Pee Mai or souksan wan Christmas
Turkish: Noeliniz Ve Yeni Yiliniz Kutlu Olsun
Ukrainian: Z Rizdvom Khrystovym or S rozhdestvom Kristovym
Urdu: Naya Saal Mubarak Ho (good New Year not Merry Christmas)
Vietnamese: Chuc Mung Giang Sinh
Welsh: Nadolig Llawen
Yoruba: E ku odun, e ku iye'dun!

Friday, April 13, 2018

New Due Case

I recently picked up a nice little laser-cut case for my Arduino Due.  This one is by GeauxRobot.  They did a nice job on it including making little T-shaped button plastics to make the reset and erase buttons available.

This one does a nice job of supporting the ends of the board.  All the I/O connectors are nice and flush with the top of the case so shields can be handled as well as the SPI and JTAG connectors being accessible.

Available on Amazon.  Be sure to use and support your favorite charity!

Saturday, January 27, 2018

Optical Isolator

For some time now I have been chasing problems where I have multiple pieces of mains-powered equipment connected together via USB that for seemingly random reasons refuse to communicate.

Speculating that at least some of this behaviour is related the common ground through the USB cable and having separate power sources, I have built an optical isolator.

This incarnation takes 3V3 - 5V inputs and separates the power sources from each side.  There is only an optical signal connection between the sides.  The solution utilizes a 6N137 optical isolator.  I think in some circuits the amount of drive required may be problematic so version 2 will have a input buffer.  The output is inverted so a simple transistor (2N3096) inverter is used to set that right again.

So far so good, no "failure to communicate" issues have been seen with the isolation in place.  This particular board was already available from OSHPark thanks to Jason Pepas ( so all I had to do was build it.  My version has input output buffering, level conversion and an FTDI USB to UART chip.

Jason was kind enough to publish the gerbers, Kicad model and a PDF of the schematic.  He also did a nice write-up on his testing experiences.


Sunday, December 31, 2017

Thursday, December 21, 2017

Christmas Greetings and Puzzle - UPDATED

Just for fun...

Wow, what a year, eh?  I wish all the best for you all in the holidays and the new year.  Here is a little puzzle for you, just for fun.  It is a coloring puzzle, so just shade in the number of squares shown in each row and column with at least one space between.  For example, if you see 4 1 3 1 in a row then you would shade in 4 squares, skip at least 1, shade 1 square, skip at least 1, shade 3, skip at least 1 and then shade 1 square.  But, remember it has to work both vertically and horizontally.  If you get stuck, I will try to help you out.

My best to you and your families in this holiday season and regardless of political or social correctness, Merry Christmas and Happy New Year.

73's de Jeff - ko7m

PS: There was an error in the previously posted image.  Fifth row from the bottom, numbers should be 131231.  I have updated the image below.  My apologies. 

Sunday, November 26, 2017

Web Server Hack

I needed a quick hack of a web server that would simply serve up files on an embedded Linux machine that has only a minimal kernel and shell.  This assumes a working knowledge of Linux and shell scripting.  The script text should be put in a text file and marked as executable.  In my case I chose to use /usr/bin/wwwd.

Tell Linux this is a shell script.

#! /bin/sh

Define the end of line sequence and the location of our web pages.

eol=$(printf "\r\n")

We let inetd deal with the network part of being a web server.  We just read the HTTP request and then parse (and ignore) the header of the request.

read request

Find the end of the header (it is separated from the body by a blank line.)

while /bin/true; do
  read header
  [ "$header" == "$eol" ] && break;

Parse the request and construct a path to the desired file.

url="${request#GET }"
url="${url% HTTP/*}"

If the file exists, then send it to the client with a minimal HTTP header.  If the file does not exist, then issue a 404 error.
if [ -f "$filename" ]; then
  echo -e "HTTP/1.1 200 OK\r"
  echo -e "Content-Type: text/html\r"
  echo -e "\r"
  cat "$filename"
  echo -e "\r"
  echo -e "HTTP/1.1 404 Not Found\r"
  echo -e "Content-Type: text/html\r"
  echo -e "\r"
  echo -e "404 Not Found\r"
  echo -e "\r"


That is really all there is to this hack and this is about as minimalistic as you can get.  If you want to add CGI capabilities, we would need to construct an environment variable to pass to the program to be executed to give it the query that was issued and then pass the program output back as the result of the HTTP GET request.  Since I don't need this ability yet, I will leave that as an exercise for the interested reader. 

In order to integrate with inetd we need to add a line to /etc/inetd.conf to tell inetd what application to launch when web connections are received.  In my case this script is named /usr/bin/wwwd.  Don't forget to make it executable:

chmod +x /usr/bin/wwwd

Add the following line, adjusting the path as necessary to point to your script.  You can find full details on inetd here.

www     stream tcp nowait nobody /usr/bin/wwwd wwwd 

You then need to restart inetd which can be accomplished by killing that process.  On my embedded Linux machine, the following command line will suffice:

kill -SIGHUP $(cat /var/run/

You should now be able to point your web browser to your device and fetch any of the files (HTML or otherwise) that are contained in /var/www.

As always, if you have any questions or issues, I am happy to help. 

Thursday, November 23, 2017

Happy Thanksgiving Everyone

We always say "Rest in Peace" when someone has moved on.  What I hope for all is we can "Live in Peace".  Happy Thanksgiving.

Sunday, October 29, 2017

A fun toy...

Had a bit of fun today running a 6502 processor simulator on an Arduino that was running a copy of EhBasic.  Not much practical you can do with it, but kinda fun to play around with a tiny micro-controller (Arduino) simulating the same processor that was used in the original Apple computers and running a basic emulator on the simulated processor.

This was fun for me because my first experience with micro-controllers was when the MOS Technology 6502 was introduced at the Wescon trade show in San Francisco in 1975.  I was at the time working for Hewlett Packard Advanced Products Division in Santa Clara, CA interestingly enough in the same group of teams that employed Steve Wozniak who later went on to found Apple Computer.

A group of us went to the trade show in the fall of 1975 and were able to purchase the 6502 for $25.  The hardware and programming documentation manuals were another $10.  At the time, Motorola was selling the 6800 microprocessor for a single unit price of $175 and ended up dropping the price to $69 in single unit quantities with further price reductions to follow.  Bringing our loot home spawned a lot of effort to build and program working systems.  Cross-compilers and assemblers were built and utilized to program our new hardware.

I still have my 6502 system built back in the mid-1970's.  I will provide some pictures as soon as I figure out what box contains that little treasure.

It is fun to think that the meager capabilities represented by an Arduino is able to simulate the silicon that was available back when I first started working with micro-controllers.  We have indeed come a long way.