Tuesday, September 30, 2014

Frico

You have some shredded cheese, but no cheese slices...









Ingredients:

4 ounces sharp white cheddar or your favorite cheese, grated (about 2 cups)
1 teaspoon all-purpose flour

Directions

Step 1

In a medium bowl, toss together cheese and flour. Heat a large nonstick skillet over medium-low heat. Sprinkle about 1 1/2 tablespoons cheese mixture into skillet to form a 4-inch round.

Step 2

Cook until cheese is starting to melt and become firm, 1 1/2 to 2 minutes. Using a small offset spatula, turn; continue cooking until it is firm and slightly golden, 15 to 30 seconds more. If skillet gets too hot and frico begin to color too quickly, remove from heat for several minutes before proceeding.


Grab videos.

Good job for an old computer to get videos from youtube. Data flle (aka vidlist) consists of lines like this:

https://www.youtube.com/watch?v=3kJXbXhEPrk
https://www.youtube.com/watch?v=yxAhrUAvjo0
http://www.youtube.com/watch?v=9DTjssGms8I
https://www.youtube.com/watch?v=ACsy6xSIBm8

The code:



<code>
 #================================
#
#  Get youtube videos
#
#=================================
# Assignments
# --------------------------------
datafile="vidlist"
#=================================
#
# Data input
#---------------------------------
while read line
        do theurl=$line
                youtube-dl $theurl -f flv
done < $datafile
</code>


Sunday, September 28, 2014

Couple of legacy web tricks.

Legacy way to combine text and a graphic.


<table>
    <tr>
        <td>
                <img src="prof.png" alt="">
       </td>
       <td>06/01/2008 The Info pages are done <br> 06/09/2008 Locally on-line as of 03/05/2008 <br> 06/08/2009 Some web pages updated <br> 06/30/2010 Redoing student services web pages. <br> 09/15/2014 Menus are restructured
       </td>
   </tr>
</table

----------------------------------

Change text in many files with one command.



Say you want to duplicate some web pages to another server, but the web server names are different. That means all the links in the pages will be wrong. For example take the following simple web page:

[code]
<html>
<title> Offshore Educators (C1001) </title>
<title> Send us some comments </title>
<body bgcolor="aquamarine">
<CENTER><h2><B><I>Offshore Educators</I></B></h2></CENTER>
Sylabus: C1001 - Introduction to computing 1.
<hr>
<br>
<p>
This course introduces students to fundamental hardware concepts in the use of microcomputers and to some practical applications of software. The course focuses primarily on word processing, spreadsheets and business charts and presentation software using the Open Office products on the Linux platform. The course examines the use of computers for communication and collaboration including e-mail, conferencing software and the Internet for exploring the resources of the World Wide Web. Students participate in group discussions using groupware, work with computerized library databases and make decisions about the purchase of hardware, software and service providers.
</p>
<a href="descripts.html"> Returm me to the class listing</a>
<br>
<a href="http://oesrvr1"> Click on me to return to the homepage!</a>
</body
</html>
[/code]

Our goal is to change oesrvr1 to oemsrvr1. Now just for one file this is no big deal, unless you have tens or even hundreds of web pages. Then you are talking about a major project to change all the server names in links. This can be made real easy. After the web pages have been copied overto a new server, just go to the appropriate web directory such as /var/www on the new server and issue the following command:

$ sudo grep -lr -e 'oesrvr1' * | xargs sudo sed -i 's/oesrvr1/oemsrvr01/g'

In a few seconds all the files are changed without having to edit a single file. So now

"<a href="http://oesrvr1"> Click on me to return to the homepage!</a>" is changed to

"<a href="http://oemsrvr01"> Click on me to return to the homepage!</a>".

This command is for a nix based system, but you could share an MSWindows server web directory and let a nix box access the web directories via samba to make the needed changes. (Do it while the server is offline for security purposes.)


Go one step further to automate it using namechange.sh.
namechange.sh

[code]
sudo grep -lr -e '$1' * | xargs sudo sed -i 's/$1/$2/g'
[/code]

Be sure to make the program executable

$ chmod +x namechange.sh


Then at the command line you could use:

$ ./namechange.sh oesrvr1 oemsrvr01

More than one way to skin a cat. Hope this article helps you out. Definitely helped me out.


Saturday, September 27, 2014

Parallel port floppy control.

Though floppy drives are not really used anymore, they can be adapted for other purposes. Most web cameras only look in one direction. With the help of a floppy drive and a sort of lazy Susan, you can control the direction of view for the webcam.



The electronic wiring is fairly  simple. You can connect in several ways.



 Variation:


if the jumper from pin 11 to 12 is set and you have the power source connected, the led of the disk drive should be on. If you do not want to use the picture:

A. Connect Pin 11 and 12 with a Jumper on the drive.
B. Connect Pin 18 of the drive with Pin 2 of the parallel port.
C. Connect Pin 20 of the drive with Pin 3 of the parallel port.
D. Connect the rightest pin of the power from the drive to the red wire of the floppy power cable.
E. Connect the pin left of the rightest pin of the power with black wire on the floppy power connector and to the ground to pin 18 of the parallel port. Actually I did not touch the ground wire on the power cable. I took pins 17 and 19 off the drive to pin 18 on the cable.


Probably use a cut off floppy cable connector with some ribbon cable attached. No need to solder directly to the pins, but you will need to connect wires together for pins 11 and 12 on the drive.


 or
 

Now moving the head:

We need to connect the following:
  • 14: Drive select enables or disables the motor and also the LED. This is useful if you want the LED only to be active when you hear a tone but clearly optional.
  • 20: Step steps the motor by one step by changing it from HIGH to LOW.
  • 18: Dir controls the direction of the motor. You should change it every step so your motor vibrates. Personally, I prefer vibrating over moving up and down as moving is not very loud and doesn't sound very good either

Direction change
x = 0
out 888, 2^x

Step motor
X = 1
out 888, 2^x

out 888, 0

Port 888 can be used to send data to the parallel port. Examples of code can be found at: http://computoman.blogspot.com/2014/09/kitt-code-released.html.

  • Direction pin: use on for forward and off for backward.
  • Stepping pin: An on followed by an off will step the drive.
Have fun. 



    Linus must be happy.


    Amore.


    Loading...


    Wednesday, September 24, 2014

    Warning: security issue in bash!

    So many have blogged or left a message on the web at such places as Google+, this is probably old news.

    :(){:|:& };:
    env x='() { :;}; echo vulnerable' bash -c "echo this is a test
    envX='(){(a)=>\'bash -c echo "echo date"; cat echo
    ---------------------------------------------------------------------------



    Per ArsTechnica:

    Security vulnerability in the GNU Bourne Again Shell (Bash), the command-line shell used in many Linux and Unix operating systems, could leave systems running those operating systems open to exploitation by specially crafted attacks. “This issue is especially dangerous as there are many possible ways Bash can be called by an application,” a Red Hat security advisory warned.

    The bug, discovered by Stephane Schazelas, is related to how Bash processes environmental variables passed by the operating system or by a program calling a Bash-based script. If Bash has been configured as the default system shell, it can be used by network–based attackers against servers and other Unix and Linux devices via Web requests, secure shell, telnet sessions, or other programs that use Bash to execute scripts.

    The vulnerability affects versions 1.14 through 4.3 of GNU Bash. Patches have been issued by many of the major Linux distribution vendors for affected versions, including:
    • Red Hat Enterprise Linux (versions 4 through 7) and the Fedora distribution
    • CentOS (versions 5 through 7)
    • Ubuntu 10.04 LTS, 12.04 LTS, and 14.04 LTS
    • Debian
    A test on Mac OS X 10.9.4 ("Mavericks") by Ars showed that it also has a vulnerable version of Bash. Apple has not yet patched Bash, though it just issued an update to "command line tools."

    While Bash is often thought of just as a local shell, it is also frequently used by Apache servers to execute CGI scripts for dynamic content (through mod_cgi and mod_cgid). A crafted web request targeting a vulnerable CGI application could launch code on the server. Similar attacks are possible via OpenSSH, which could allow even restricted secure shell sessions to bypass controls and execute code on the server. And a malicious DHCP server set up on a network or running as part of an “evil” wireless access point could execute code on some Linux systems using the Dynamic Host Configuration Protocol client (dhclient) when they connect.
    There are other services that run on Linux and Unix systems, such as the CUPS printing system, that are similarly dependent on Bash that could be vulnerable.
    There is an easy test to determine if a Linux or Unix system is vulnerable. To check your system, from a command line, type:
     
    $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
    If the system is vulnerable, the output will be:
    vulnerable
     this is a test
    

    An unaffected (or patched) system will output:
     
    $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
     bash: warning: x: ignoring function definition attempt
     bash: error importing function definition for `x'
     this is a test
    

    The fix is an update to a patched version of the Bash shell. To be safe, administrators should do a blanket update of their versions of Bash in any case.



    -------------------------------------------------------------------------------------------------

    Our ubuntu 14.04 system before the update:

     $ env x='() { :;}; echo vulnerable' bash -c

    "echo this is a test"
    vulnerable
    this is a test

    After the update:

    $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
    bash: warning: x: ignoring function definition attempt
    bash: error importing function definition for `x'
    this is a test

    ------------------------------------
    The fix: From the command line, you can update your system.

    Debian, Ubuntu, Mint sudo apt-get update && sudo apt-get upgrade
    Fedora sudo yum update
    Arch pacman -Syu



    bash bug first test:
    x='() { :;}; echo vulnerable' bash

    bash but second test:

    env X='() { (a)=>\' bash -c "echo echo vuln"; [[ "$(cat echo)" == "vuln" ]] && \ echo "still vulnerable :("

    Quickie home made video.


    First attempt at merging video and audio. Pretty easy with ffmpeg on Linux. The chess video is no longer a silent film. Microsoft allegedly has an equivalent ffmpeg. ffmpeg may also be known as libav or avconv.

    $ ffmpeg -i git.mp3 -i chess.flv  chess.mp4

    Pretty lucky here as the video and the movie were about the same length. Being a film editor must be fun, We will do more complicated stuff later. Makes for much respect for noted film maker Ken Burns and all his crew.

    Do not have a guitar anymore, but again that was me playing the guitar.

    Egg drop soup

    Recipe 1

    Ingredients

        6 cups reduced-sodium chicken broth
        2 large eggs
        2 tablespoons freshly grated Parmesan
        2 tablespoons chopped flat-leaf parsley
        2 tablepoons chopped fresh basil leaves
        1 cup lightly packed spinach leaves, cut in thin strips
        Salt and freshly ground black pepper

    Directions

    Bring the broth to a boil in a large saucepan over medium-high heat. In a bowl, whisk the eggs, cheese, parsley, and basil to blend. Reduce the heat to medium-low. Stir the broth in a circular motion. Gradually drizzle the egg mixture into the moving broth, stirring gently with a fork to form thin strands of egg, about 1 minute. Stir in the spinach, then season the soup, to taste, with salt and pepper.

    Ladle the soup into bowls and serve.


    -------------------------------------------------
    Recipe 2.

    Ingredients

        6 cups brown chicken stock, recipe follows
        3 eggs
        3 tablespoons semolina
        3 tablespoons grated Parmigiano-Reggiano
        1 tablespoon Italian parsley, finely chopped
        Pinch nutmeg
        Salt and pepper

    Directions

    Measure out 1 of the 6 cups of chicken stock and refrigerate so that it is cold.

    In a large stock pot, bring the remaining 5 cups of chicken stock to a boil. In a large bowl, combine the cold broth, eggs, semolina, cheese, parsley and nutmeg and whisk until well blended. Whisk the mixture into the boiling stock and reduce heat to low. Continue to whisk for 3 to 4 minutes. Adjust seasoning with salt and pepper and divide evenly among 6 warmed soup bowls. Serve immediately, topped with more grated cheese if desired.

    Brown Chicken Stock:

        2 tablespoons extra-virgin olive oil
        3 1/2 pounds chicken wings, backs, and bones
        3 carrots, coarsely chopped
        2 onions, coarsely chopped
        4 ribs celery, coarsely chopped
        2 tablespoons tomato paste
        1 tablespoon black peppercorns
        1 bunch parsley stems

    In a large, heavy-bottomed saucepan, heat the oil over high heat until smoking. Add all the chicken parts and brown all over, stirring to avoid burning. Remove the chicken and reserve. Add the carrots, onions, and celery to the pot and cook until soft and browned. Return the chicken to the pot and add 3 quarts of water, the tomato paste, peppercorns, and parsley. Stir with a wooden spoon to dislodge the browned chicken and vegetables bits from the bottom of the pan. Bring almost to a boil, then reduce heat and cook at a low simmer until reduced by half, about 2 hours, occasionally skimming excess fat. Remove from heat, strain, and press on the solids with the bottom of a ladle to extract out all liquids. Stir the stock to facilitate cooling and set aside. Refrigerate stock in small containers for up to a week or freeze for up to a month.

    Yield: 1 1/2 quarts

    Tuesday, September 23, 2014

    Uses for your own private cloud.

    If you have an old machine that is still good shape, but may not run the latest software, considering turning it into a home server. There is so much you can do with it.  In fact, I just installed a personal accounting application on the server the other day. Using that old machine will be the best money you never spent on a system. More information at: http://www.instructables.com/id/Uses-for-your-own-private-cloud/



    Just tooling around the server. softserv and oesrvr1 are actually coming from the same machine commonly know as virtual hosts.  Actually have five plus hosts on that system. Then you are taken through a myriad of free open software programs that have been installed available from sourceforge.net and other sites. The latter part of the video displays standalone web applications from web pages that have been extracted and added to the server. Plus a few of my own apps are featured.  Pretty powerful coming from an old Pentium III computer. Not for the real world, but for a small business or home is genuinely adequate.






    The clock.





    Code is at: http://www.instructables.com/id/Old-laptop-or-pc-into-a-clock/

    Rasperry Pi security.

    (Article from instructables.com with author's permission).

    Security is becoming more and more important to people. So they are used in protecting property. Actually the are other reasons. Set up security cameras in the testing lab at the school where I use to work to aid in keeping students from cheating.

    Most people want to be able to use a computer to fill that need without spending zillions of dollars on a special system. We use a Raspberry Pi plus an inexpensive web cam to do just that. There are two major software packages for linux to set up video security and they are Zoneminder and Motion. Like Motion because of the smaller footprint. That makes for better performance on embedded devices such as the Raspberry Pi. . Since the video is internet based, you can watch it from virtually anywhere you can connect to the system. More information on Zoneminder at: http://www.instructables.com/id/Computerized-video-security-setup/

    Here is a quickie setup we did for the Raspberry Pi.


    It is wonderful that the Raspberry Pi (aka RPi)  is supported by Debian linux. There already so much software for Debian that the Raspberry Pi can take advantage of. One such piece of software is Motion. Motion is a security cam server software than does not require a gui, That is you can run Motion without a gui installed or activated on the Raspberry Pi.  One caveat is that you will want a disk drive with a lot of space to hold all the pictures. The sd card is just not enough.

    Let's get your system up to date (might take a while if you have not updated very recently).

    $ sudo apt-get update ; sudo apt-get upgrade
    $ sudo apt-get dist-upgrade

    Now let's install Motion

    $ sudo apt-get install motion.

    Does the RPi see your camera?  (aka list usb devices attached.)

    $ lsusb

    ...
    Bus 001 Device 004: ID 046d:08a9 Logitech, Inc. Notebook Deluxe
    ...

    if not, you may need to get a more mainstream camera. usually Logitech sets the standard. I just used a cheap refurbished knockoff. Your output will vary..

    Do a little configuration:


    $ sudo nano /etc/motion/motion.conf
    In here there are a few basic changes that you need to perform:
    • Daemon = OFF to ON
    • webcam_localhost = ON to OFF
    You can change other settings but it’s recommend you don’t take more than 2 frames, and you been the default frame pixel size, for stability.

    To ensure that the motion service will actually start as a daemon we need to change another configuration setting, so enter the following:

    sudo nano /etc/default/motion

    Then change the value “start_motion_daemon=no” to “yes”


    Let's get started:

    Finally you can start the motion service to stream the web cam images

    sudo service motion start


    Then after about 30 seconds browse to the new web interface, which should be at the below URL (where 192.168.0.100 is your Raspberry PI’s IP address yours may vary)

    http://192.168.0.100:8081

    Hint: if you do not have direct access to your RPi, you can use http://www.instructables.com/id/Red-October-network-discovery/ to find it on the network Frequently I will hook up the RPi to the network without a keyboard, mouse, or monitor and then remote into the unit,

    for more information see: http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome


    Note if you want to use an ipcamera it is easy but you have to know about the camera. I ended up going to the Zoneminder wiki and found the answer for my camera. Setup is the same, but you have to add two lines to motion.conf.

     netcam_url http://19.168.10.85/videostreamlocationsomekindof.cgi
     netcam_userpass user:password

    For us  it was:

     netcam_url http://192.168.10.85/video.cgi
     netcam_userpass user:password

    Software equivalents between platforms.




    One of the questions I get is that what software may I use to replace the programs that I used on my old system. Personally, I have been off of proprietary software such as Microsoft systems for more than seven years and have not looked back.  Well here is a table that might help.  By the way, this list is by no means exhaustive.

    One old example Wordstar



    Joe's own editor



    By the way:  Thanx to Troy R. Schulz who compiled this list. 


    MSWindows Application
    Open Source Application
    Adobe Acrobat Reader
    KPDF
    People want to be able to view PDF files quickly and easily. We usually recommend KPDF, but if someone uses Google Apps for Business they can view PDF's right in their Chrome Browser.

    Adobe Illustrator, CorelDRAW!
    Inkscape
    Some of our customers (including myself) do vector graphic design. Some are sign shops. Honestly, most use Corel Graphics Suite, but many are begging Corel to make a Linux version, or at the very least a Wine port for it. Some have elected to use Inkscape.
    Adobe Photoshop, Corel PhotoPaint
    Gimp, Cinepaint, MyPaint
    Again, some of our graphic design customers and photographers need to be able to edit photos. Some actually paint pictures for advertising.

    Microsoft Publisher, Adobe Pagemaker
    Scribus
    Folks in offices that have gotten used to MS Publisher (most) or Pagemaker (not too many) tend to like Scribus. The only beef they usually have is you can't import your Publisher files into it. But, I always point out that you can't import Publisher files into ANYTHING except Publisher. They should be using a real page layout program.

    Adobe Lightroom
    Darktable
    This is a really big one for a couple photographer customers we have. One of them who is just getting started has no problem using Darktable and really likes it.

    AIM, ICQ, YahooChat, MSN Messenger, mIRC, Trillian, GoogleTalk, MySpace Chat, Facebook Chat, Skype
    Pidgeon, Empathy, ChatZilla
    There are a large variety of chat programs on the market. Most are specifically geared toward that chat service who provides the chat program. However, there are some programs, like Trillian, which will let you chat with people on multiple chat services all through one program/interface. The closest equivalent I've found, that is the most user friendly, is Pidgeon.

    Windows Media Player, iTunes, RealPlayer, WinAmp (music players)
    Banshee, Rhythmbox, Audacious, Amarok
    WMP and iTunes are just a pain. iTunes is horribly slow. Real Player is not reliable at all. WinAmp is fantastic. Of the Linux equivalents, most of our people like Rhythmbox the best so far. Many people who work in offices like to listen to music on their computers instead of having a radio or CD player on their desk while they work.

    iViewMedia Pro, Adobe Lightroom, Picasa
    digiKam, fSpot, Shotwell, Darktable, Picasa
    We are specifically talking about photo management and organization. We've had business and home users that all want something to do this easily. So far, most people have liked digiKam and Picasa the best.

    Microsoft - Word, Excel, PowerPoint, Access, Math
    LibreOffice Suite, OpenOffice Suite
    These should be obvious. We put LibreOffice not only on the Linux machines we sell, but on all the new Windows machines too.

    MS Frontpage, Adobe Dreamweaver, MS Expressionweb, Sharepoint
    Bluefish, KompoZer, Nvu
    Not too many people use Frontpage anymore since it's discontinued but there are a couple that still fiddle with the last version that was out. For those that used to use Dreamweaver, most like Nvu the best overall. It's available for Win, Mac, and Lin.

    Internet Explorer, Firefox, Google Chrome, Safari
    Firefox, Opera, Chromium, Google Chrome for Linux
    IE just plain sux bricks. Safari is slow. We put Chrome on ALL our Windows machines. We put Firefox and Google Chrome on our Linux machines. We usually use Google Chrome instead of Chromium because the brand is already familiar to our customer base and because we are Google Apps for Business resellers.

    MS Outlook, Windows Mail, Windows LiveMail, Eudora
    Evolution, Thunderbird
    For those in a business environment, Evolution is a comfortable transition if they have been used to Outlook since it looks so much alike. However, that being said, most of our customers have loved Thunderbird. Plus, if they are Google Apps customers there are a variety of plug-ins to add Google Apps Synchronization support for mail, calendar, and contacts.There are several plug-ins we always put in a Thunderbird install (ESC to close, Minimize to Tray, Google Calendar, Google Task Sync, Google Contacts sync, and more).

    MS Paint
    TuxPaint, MyPaint
    Believe it or not, this tends to be a hot spot with some customers, both business and home users. They don't want to lose MS Paint! Oh my goodness, that would be the end of the world! Puh-lease. Spare me. While Tux Paint is suited more for small children you'd be surprised how many adults like it. However, a more professional program with more features and the one I prefer is MyPaint.

    Nero Burning Rom, Roxio Creator, ImgBurn
    Brasero
    If you've ever used ImgBurn on Windows I think it totally beats everything else available. It's so simple to use, it's very fast, and it just plain works! However, Brasero on Linux is the same. It's really the best alternative.

    NewzCrawler RSS Feed Reader
    Akgregator, Feedly App for Chrome
    Honestly, I used to use Google Reader and was very VERY put out when they closed down the project! So were many many other people. One company stepped up and worked with Google to take over handling Google's old customer's feeds. That would be Feedly. They have apps for almost all major devices and platforms....except Linux. However, you can use feedly in your web browser and it works great! We usually install the Feedly app in Chrome.

    Notepad, TextPad, Notepad++
    gEdit, Kate
    Almost everyone uses Windows Notepad for one thing or another. For those businesses that are trying to troubleshoot website page issues they want a text editor that shows line numbers so they can more easily debug their page designs. We usually recommend gEdit

    Partition Magic, Acronis, many many others....
    gParted
    Being a computer support shop, we have to partition discs all the time. There really just isn't anything better than gParted! It seems to be the easiest and most user friendly, and they even have a LiveCD you can run the application off of while you are building or rebuilding your system.

    Quicken, Microsoft Money
    GNUcash, KMyMoney
    Honestly, most businesses still use Quickbooks. There really just isn't an equivalent out there that I have found that does what they do the way they do it. There's a reason they are an industry standard. However, for those customers that need something for their home or some small business finances, most have opted to use GNUcash. Some have like KMyMoney though.

    Variety of torrent readers....
    Ktorrent, Transmission
    There are so many torrent readers out there that people use to download or share files and video presentations. Most of the customers on Windows usually use BitTorrent. I have found that most people like Ktorrent the best, though.

    CinePlayer, WinDVD
    VLC, Totem
    We have home and business users that tend to watch a lot of DVD's on their computers. Some of our customers are financial planners who record some of their seminars and want to present them or share them with their customers. They burn their presentations to DVD's. Some actually want movies at their desk while they work. There simply is no better multimedia player than VLC. It plays just about every media format on the planet and just plain works. To make the transition more comfortable we always install the Windows Media Player 12 skin on it after installation. This way it looks a lot like the old Media Player they were used to before.

    Cakewalk
    Audacity
    Some of our customer are into music production. Or, they are editing audio from seminars they have done for their MP3 streams to their customers. Both kinds of customers love Audacity both on Windows and Linux platforms.

    Windows Movie Maker, Adobe Premier
    Cinelerra, Kino, OpenShot, VideoLan Movie Creator
    Those of our customers that are actually producing their video presentations or home movies usually ask for an alternative to Windows Movie Maker. So far, they seem to like Cinelarra or OpenShot the best.
    wsFTP, WinFTP
    FileZilla
    There are a ton of FTP programs out there. While there are several open source equivalents, most people whether on Windows or Linux like FileZilla the best.

    Variety of music ripping programs....
    Sound Juicer
    We've got some customers that want to rip music to MP3's to install on the drives of the systems that manage their hold music on their phone systems. Or, they like to listen to the music while they work but don't like having to swap CD's all the time.

    Variety of programs for tethering a dSLR camera to a computer for remote shooting....
    Entangle
    Another thing our photographer customer want is a way to tether their dSLR camera to a laptop so they can do tethered shooting and see their images on the screen after. I am also a photographer and have searched for the same thing. While there better, more seamless solutions, those usually involve spending a bunch of money on special hardware interface devices and special software and wireless modules, etc. You can plug your camera into your Linux laptop with a USB cable and use Entangle. It took me a long time to find this program, but it works great, at least with the Canon camera I and a couple of our customers use.

    Variety of scanning software....
    Xsane
    Many times you buy a scanner or MFC device it comes with the manufacturer's scanning software. Much of it is bloated and very slow. Other times, please will just use a TWAIN driver of some sort and scan directly into the program they wish to edit the image in (for example Corel PhotoPaint or Gimp). Xsane is, in my opinion, the best stand alone scanning software available.

    Windows Remote Desktop (MSTSC)
    KRDC, Vinagre Remote Desktop Viewer
    Many many of our business customers need to be able to remote connect to a desktop computer or Windows server back at the office. While a couple use VNC, most use Microsoft Terminal Services. The best RDC program I've found on Linux so far is KRDC. It seems to be the most compatible, reliable, and fastest.

    HP Universal Print Driver
    HP Universal Print Driver for Linux
    Instead of downloading a specific driver for a specific model of HP printer, HP has been offering a "Universal Print Driver" which is supposed to allow your computer to connect to and use MOST of their printers using this single driver. It seems to work pretty darn well. HP also happens to be a really big Linux supporter so they offer this and many other drivers for Linux on their site. While you can download the latest version "for your particular distro" I have had better luck installing the latest version directly from their site.

    Windows Vista/7 Post It Note Widget
    Tomboy Notes
    I can't believe the number of customers who actually use those desktop widgets - especially the post it notes. If they have to get a new computer they complain they don't want to lose their notes. The closest equivalent I can find is Tomboy Notes and it's full featured and works great!

    Adobe Encore, DVDfab
    Handbrake, Make MKV for Linux
    Many of our financial planning customers who like to record their seminars to share with others, want to convert their video to a format that can be viewed on their iPads. Many of our home users want to save their ripped movies to their iPads. Handbrake really is the best solution for this.

    Windows Backup
    Back In Time, Deja Dup, Simple Backup
    Customer both large and small, business and home, always ask what they can use for backup. Honestly I've had people use all three of the above listed apps and they all like them for one reason or another. Of course this also depends upon whether you want to initiate a simple backup yourself or to automate a backup on a schedule.

    VMware
    VirtualBox
    This has been sort of a sticky issue depending upon the customer's needs. For a lot of our business customers, when they buy a Windows server from us, I install VMware ESXi as the primary operating system and then install their Windows server(s) into it as virtual machines. This allows for easy expansion later on in case they need additional servers, they just virtualize it.They can remote manage their virtual machines using vSphere Client. There is even a vSphere Client app for iPad that works great too! However, some of our smaller customers just want to add another server (maybe SQL, Untangle, etc..) to their existing server. Or they want to virtualize another machine for some other special purpose. We always recommend VirtualBox in these cases. You can setup a customized Linux system to run VirtualBox in a manner similar to ESXi, but it just isn't as polished or easy to use. Keep in mind, VMware is Linux based anyway. ;-) Another thing you can do with either VMware or VirtualBox is to create virtual workstations on your virtualization server. You can then install Linux-based think client software on an old machine you have lying around or boot to a special think client flash drive and you now have a remote virtual desktop machine that runs right off your server.

    Fraps
    Desktop Recorder
    Many homes users, like gamers, use Fraps to record their gaming sessions to post and share on YouTube. However, we've had businesses that record desktop sessions when they are making how-to tutorials for their customers on how to do things on their computers.

    Windows 8 Metro and/or Apple OS X Dock
    Compiz, Cairo Dock
    There are those that think that Windows 8 has a more polished look to it (but they still detest it and how it works), and there are those that love the beautiful, shiny, polished look to OS X and the dock interface. While Ubuntu has a sort of dock, it's just not quite the same as the 3D dock on a Mac.
    Believe it or not, I've gotten more feedback on this from some of our business customers than from the home users. So, I can install Compiz on their systems and turn on several effects, like desktop cube and wobbly windows, or annotating on the screen with fire, etc.... This really blows them away since they like to show off to their colleagues. "Hey! I bet your computer can't do THIS!", that sort of thing. It's quite funny. I also may add Cairo dock for those users that like the Mac interface. I can make it look and work exactly like the Mac dock, or I can change the look of it in a variety of way. The dock can be flat, 3D, shiny, plain, bouncing icons, zooming icons, and so on and soforth.
    I'd have to say, using Compiz and Cairo on my personal laptop has been the number one selling point that has gotten many customers to switch to Linux. They can see things they simple cannot do in a Windows or Mac computer and are just blown away. Many times it doesn't even matter if we give them the default installation of Ubuntu or Linux Mint without the effects. They are still just excited at that point to be using something new.

    Tinymce + Simplenote


    No install software such as a simple editor, can be a real advantage. Here are two.

    A no install web editor is tinymce (http://www.tinymce.com/index.php) The demo version is nothing to look at, but if you download the development version and change one line of code, it becomes a bit more powerful.

    Original:

    <!DOCTYPE html>
    <html>
    <head><!-- Hosted -->
    <script src="tinymce.js"></script>
    <script>tinymce.init({selector:'textarea'});</script>
    </head>
    <body>
     <textarea>Your content here.</textarea>
    </body>
    </html>
     

    With the development package it becomes:

    <!DOCTYPE html>
    <html>
    <head><!-- CDN hosted by Cachefly -->
    <script src="tinymce.dev.js"></script>
    <script>tinymce.init({selector:'textarea'});</script>
    </head>
    <body>
        <textarea>Your content here.</textarea>
    </body>
    </html>

    Another nice little editor is at http://ckeditor.com/



    Then you could just build one yourself. And ever just want to write down some notes and do not care that it looks fancy or not?  Here is just what you need is a simple html5 no frills note taker. This perfect for a system that will only let you use the web browser and a usb device to save data. Warning: There could be some security issues with this so use carefully.




    Code for editor just shown:

    <html>
    <body>

    <table>
        <tr><td>Text to Save:</td></tr>
        <tr>
            <td colspan="3">
                <textarea id="inputTextToSave" style="width:512px;height:256px"></textarea>
            </td>
        </tr>
        <tr>
            <td>Filename to Save As:</td>
            <td><input id="inputFileNameToSaveAs"></input></td>
            <td><button onclick="saveTextAsFile()">Save Text to File</button></td>
        </tr>
        <tr>
            <td>Select a File to Load:</td>
            <td><input type="file" id="fileToLoad"></td>
            <td><button onclick="loadFileAsText()">Load Selected File</button><td>
        </tr>
    </table>

    <script type='text/javascript'>

    function saveTextAsFile()
    {
        var textToWrite = document.getElementById("inputTextToSave").value;
        var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
        var fileNameToSaveAs = document.getElementById("inputFileNameToSaveAs").value;

        var downloadLink = document.createElement("a");
        downloadLink.download = fileNameToSaveAs;
        downloadLink.innerHTML = "Download File";
        if (window.webkitURL != null)
        {
            // Chrome allows the link to be clicked
            // without actually adding it to the DOM.
            downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
        }
        else
        {
            // Firefox requires the link to be added to the DOM
            // before it can be clicked.
            downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
            downloadLink.onclick = destroyClickedElement;
            downloadLink.style.display = "none";
            document.body.appendChild(downloadLink);
        }

        downloadLink.click();
    }

    function destroyClickedElement(event)
    {
        document.body.removeChild(event.target);
    }

    function loadFileAsText()
    {
        var fileToLoad = document.getElementById("fileToLoad").files[0];

        var fileReader = new FileReader();
        fileReader.onload = function(fileLoadedEvent)
        {
            var textFromFileLoaded = fileLoadedEvent.target.result;
            document.getElementById("inputTextToSave").value = textFromFileLoaded;
        };
        fileReader.readAsText(fileToLoad, "UTF-8");
    }

    </script>

    </body>
    </html>

    Monday, September 22, 2014

    Disappearing spreadsheet.

     


    The code is at: http://thiscouldbebetter.wordpress.com/2013/04/16/a-simple-spreadsheet-in-javascript/

    Simple spreadsheet

    Ever wanted to use a spreadsheet just for a quick calculation either on your computer or especially on a touch pad.  If nothing else it can be used as a learning to in building your own spreadsheets. Years ago I found this source code for a minimal spreadsheet from a CPM (forerunner of DOS operating systems) magazine. Typed it in and have been using it since. Of course many improvements have been made since the original code was typed in.  As I port the code to new platforms, there are always enhancements to be made.



    Everything now is web based so why not a basic spreadsheet. It is made up of three files that need to reside in the same directory. Major improvements can and should be made. Hope you enjoy this page as much as I did from the code I used years ago.  To be honest there are many good javascript spreadsheets (aka http://www.simple-groupware.de/cms/Spreadsheet/Home), this article is just for example in case you wanted to dabble one of your own.


    ---------------------------------------------------------------------------------------------------------------

    Main file: ss.html

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <title>Tiny Excel-like app in vanilla JS.</title>
     
      <script type='text/javascript' src='ss.js'></script>
     
      <link rel="stylesheet" type="text/css" href="ss.css">

     script type='text/javascript'>//<![CDATA[
    window.onload=function(){
    for (var i=0; i<10; i++) {
        var row = document.querySelector("table").insertRow(-1);
        for (var j=0; j<10; j++) {
            var letter = String.fromCharCode("A".charCodeAt(0)+j-1);
            row.insertCell(-1).innerHTML = i&&j ? "<input id='"+ letter+i +"'/>" : i||letter;
        }
    }

    var DATA={}, INPUTS=[].slice.call(document.querySelectorAll("input"));
    INPUTS.forEach(function(elm) {
        elm.onfocus = function(e) {
            e.target.value = localStorage[e.target.id] || "";
        };
        elm.onblur = function(e) {
            localStorage[e.target.id] = e.target.value;
            computeAll();
        };
        var getter = function() {
            var value = localStorage[elm.id] || "";
            if (value.charAt(0) == "=") {
                with (DATA) return eval(value.substring(1));
            } else { return isNaN(parseFloat(value)) ? value : parseFloat(value); }
        };
        Object.defineProperty(DATA, elm.id, {get:getter});
        Object.defineProperty(DATA, elm.id.toLowerCase(), {get:getter});
    });
    (window.computeAll = function() {
        INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
    })();
    }//]]> 

    </script>
    </head>
    <body>
    <p><b> Simple sheet</b></p>
    <p>Features:</p>

    <ul>
        <li><b>Use at your own risk</b></li>
        <li>Enter key does not work, click on a cell to accept input</li>
        <li>Libraries used: <strong>none</strong></li>
        <li>Excel-like syntax (formulas start with "=")</li>
        <li>Support for arbitrary expressions (=A1+B2*C3)</li>
        <li>Circular reference prevention</li>
    </ul>
    <br />
    <table></table>
    <br />
    <footer> <p class="copy-left">&copy;</p> 2014 <a href="http://computoman.blogspot.com/">Computoman<a></p></footer>
    </body>
    </html>


    ---------

    CSS file: ss.css


    li {
        list-style: none;
    }
    li:before {
        content: "✓ ";
    }

    input {
        border: none;
        width: 80px;
        font-size: 14px;
        padding: 2px;
    }

    input:hover {
        background-color: #eee;
    }

    input:focus {
        background-color: #ccf;
    }

    input:not(:focus) {
        text-align: right;
    }

    table {
        border-collapse: collapse; 
    }

    td {
        border: 1px solid #999;
        padding: 0;
    }

    tr:first-child td, td:first-child {
        background-color: #ccc;
        padding: 1px 3px;
        font-weight: bold;
        text-align: center;
    }

    footer {
        font-size: 80%;
    }

    .copy-left {
         display: inline-block;
         text-align: right;
         margin: 0px;
        -moz-transform: scaleX(-1);
        -o-transform: scaleX(-1);
        -webkit-transform: scaleX(-1);
        transform: scaleX(-1);
        filter: FlipH;
        -ms-filter: "FlipH";
    }

    ----------------
    Javascript: ss.js

     for (var i=0; i<6; i++) {
        var row = document.querySelector("table").insertRow(-1);
        for (var j=0; j<6; j++) {
            var letter = String.fromCharCode("A".charCodeAt(0)+j-1);
            row.insertCell(-1).innerHTML = i&&j ? "<input id='"+ letter+i +"'/>" : i||letter;
        }
    }

    var DATA={}, INPUTS=[].slice.call(document.querySelectorAll("input"));
    INPUTS.forEach(function(elm) {
        elm.onfocus = function(e) {
            e.target.value = localStorage[e.target.id] || "";
        };
        elm.onblur = function(e) {
            localStorage[e.target.id] = e.target.value;
            computeAll();
        };
        var getter = function() {
            var value = localStorage[elm.id] || "";
            if (value.charAt(0) == "=") {
                with (DATA) return eval(value.substring(1));
            } else { return isNaN(parseFloat(value)) ? value : parseFloat(value); }
        };
        Object.defineProperty(DATA, elm.id, {get:getter});
        Object.defineProperty(DATA, elm.id.toLowerCase(), {get:getter});
    });
    (window.computeAll = function() {
        INPUTS.forEach(function(elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
    })();



    Saturday, September 20, 2014

    Having fun with audio!?!

    Like to use my server as a stereo so to speak. Either can play sound files directly or can play music from the internet! For some reason the sound was not working on my system, so I decided to remove the pulse stuff and reinstall the alsa setup. This is the only method that I have found that works flawlessly:

    $ sudo killall pulseaudio
    $ sudo apt-get purge pulseaudio pulseaudio-utils gstreamer0.10-pulseaudio \
     libpulse-browse0 paman pavumeter pavucontrol 
    $ sudo apt-get purge 
    $ sudo mv /etc/asound.conf /etc/asound.conf-bak
    $ rm ~/.pulse-cookie
    $ rm -r ~/.pulse
    
    
    Reboot. Then install:
     
    $ sudo apt-get install alsa-base alsa-tools alsa-tools-gui alsa-utils alsa-oss \
     alsamixergui libalsaplayer0 
     
    Everything now works fine! In fact, sound is better than it ever has been. 
    Speakers seem to gently boom out the sound. Now you will want to install mplayer. 
    Most everyone knows how to use mplayer, if not use
     
    $ sudo apt-get install mplayer
    $ man mplayer
     
    That should do well enough. Anyway, what I wanted to do was to have an internet radio 
    that I could access from the command line. It is not really hard to do with mplayer.
    The hard part is getting the url with the playlist as part of the url. The reason for
    that is not to have to store the playlist file locally. That saves space and you
    will always have the latest version. You will have to save links to see which ones
    works. Since I will be accessing the server remotely, I plan to use the command line
    so that I do not have to deal with the monitor on the server. It can stay off!
     
     
     
     
    When you deal with anything command line, you are talking about using a batch file
    unless you want to manually always type in the commands. You can go to 
    http://radio-locator.com/ a list of stations. Let's go for the menu method for 
    choosing what internet radio stations to listen to such as this:
     
     
    Since made some changes, but that is ok. Found a better radio station or two. Like I said
    you can enter the commands one at a time for instance if you have a complete url with the
    playlist, you might use:
     
    $  mplayer -playlist  http://www.publicbroadcasting.net/kuhf/ppr/kuha_128.m3u
     
    Not all internet radio stations will let you do that, so you have to download the 
    playlist locally. They you might use:
     
    $ mplayer -playlist koda-fm.m3u
     
    That assuming the playlist is in the current directory, otherwise you will have to use
    the correct path to the file. Since I do not have a lot of radio stations to listen to,
    setting up a simple batch files with all the information to use the playlists is easy. So
    here is some example code that could be used on a server or even an embedded device 
    such as the Raspberry Pi:  
     
    #!/bin/bash
    #
    # Script to emulate a radio.
    #
    while :
    do
    clear
    echo "************************"
    echo "* Radio tuner          *"
    echo "************************"
    echo "* [1] Alvin            *"
    echo "* [2] 91.7 classical   *"
    echo "* [3] 88.7 global      *"
    echo "* [4] Kuhf news        *"
    echo "* [5] KPFT             *"
    echo "* [6] Koda             *"
    echo "* [7] KTBZ             *"
    echo "* [8] KSBJ             *"
    echo "* [9] Klol             *"
    echo "*                      *"
    echo "* [0] Exit/Stop        *"
    echo "************************"
    echo
    echo "Enter your menu choice [1-9 or 0]: "
    read -n 1 yourch
    case $yourch in
    1) mplayer -playlist http://www.kaccradio.com/images/KACCRadio.asx  ;;
    2) mplayer -playlist  http://www.publicbroadcasting.net/kuhf/ppr/kuha_128.m3u  ;;
    3) mplayer -playlist  http://www.publicbroadcasting.net/kuhf/ppr/kuhfglobal_128.m3u  ;;
    4) mplayer -playlist http://www.publicbroadcasting.net/kuhf/ppr/kuhfnews_128.m3u  ;;
    5) mplayer -playlist http://kpft.org/KPFT-hifi.wma ;; 
    6) mplayer -playlist [path]/koda-fm.m3u  ;;
    7) mplayer -playlist [path]/ktbz-fm.m3u  ;;
    8) mplayer -playlist [path]/ksbjfmaac.pls  ;;
    9) mplayer -playlist [path]/klolfmaac.pls ;;
    0) exit 0;;
    *) echo "Oopps!!! Please select choice 1,2,3,4,5,6,7,8, or 9"
    echo "Press Enter to continue. . ." ; read ;;
    esac
    done
    
    
    
    
    You could reuse this script for other projects 
    #!/bin/bash
    #
    # Script to [description].
    #
    while :
    do
    clear
    echo "************************"
    echo "*  [Title]             *"
    echo "************************"
    echo "* [1]                  *"
    echo "* [2]                  *"
    echo "* [3]                  *"
    echo "* [4]                  *"
    echo "* [5]                  *"
    echo "* [6]                  *"
    echo "* [7]                  *"
    echo "* [8]                  *"
    echo "* [9]                  *"
    echo "*                      *"
    echo "* [0] Exit/Stop        *"
    echo "************************"
    echo
    echo "Enter your menu choice [1-9 or 0]: "
    read -n 1 yourch
    case $yourch in
    1)   ;;
    2)   ;;
    3)   ;;
    4)   ;;
    5)   ;; 
    6)   ;;
    7)   ;;
    8)   ;;
    9)   ;;
    0) exit 0;;
    *) echo "Oopps!!! Please select choice 1,2,3,4,5,6,7,8, or 9"
    echo "Press Enter to continue. . ." ; read ;;
    esac
    done
    
    
    ------------------------------------------------------------------------ 
    Under construction: 
     
    So there is the barebones script to play music on the local server speakers. Have fun! You 
    certainly can use a web based menu, so you do not have to log into the machine, but that is 
    for another day. Be sure to add the web user to the audio group. But this might wet your 
    appetite for use as a web page on a server. We will be using the slave mode to finish this 
    script up.  More later.
     
     
     
    #!/bin/sh
     echo "Content-type: text/html\n"
      
     # read in our parameters
     CMD=`echo "$QUERY_STRING" | sed -n 's/^.*cmd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
    
     # our html header
     echo "<html>"
     echo "<head><title>Internet radio</title></head>"
     echo "<body>"
      
     # test if any parameters were passed
     if [ $CMD ]
     then
       case "$CMD" in
    1) 
     echo "mplayer KACCRadio :<pre>"
      /usr/bin/mplayer -playlist http://www.kaccradio.com/images/KACCRadio.asx  
     echo "</pre>"
       ;;
    2) 
     echo "player kuhf :<pre>"
     /usr/bin/mplayer -playlist  http://www.publicbroadcasting.net/kuhf/ppr/kuha_128.m3u  
     echo "</pre>"
       ;;
    3) 
     echo "mplayer kuhfglobal :<pre>"
     /usr/bin/mplayer -playlist  http://www.publicbroadcasting.net/kuhf/ppr/kuhfglobal_128.m3u  
     echo "</pre>"
       ;;
    4) 
     echo "mplayer kuhfnews
     :<pre>"
     /usr/bin/mplayer -playlist http://www.publicbroadcasting.net/kuhf/ppr/kuhfnews_128.m3u  
     echo "</pre>"
      ;;
    5) 
     echo "mplayer kpft :<pre>"
     /usr/bin/mplayer -playlist http://kpft.org/KPFT-hifi.wma 
     echo "</pre>"
       ;;
    6)
     echo "mplayer koda :<pre>" 
       /usr/bin/mplayer -playlist koda-fm.m3u  
     echo "</pre>" 
      ;;
    7) 
       echo "mplayer ktbz :<pre>" 
     /usr/bin/mplayer -playlist ktbz-fm.m3u  
     echo "</pre>"
       ;;
    8) 
     echo "mplayer ksbj :<pre>" 
       /usr/bin/mplayer -playlist ksbjfmaac.pls  
     echo "</pre>" 
      ;;
    9) 
     echo "mplayer klol :<pre>" 
       /usr/bin/mplayer -playlist klolfmaac.pls 
     echo "</pre>"
     ;;
                     
          *)
           echo "Unknown command $CMD<br>"
           ;;
       esac
     fi
      
     # print out the form
      
     # page header
     echo "<p>"
     echo "<center>"
     echo "<h2>Radio stations</h2>"
     echo "</center>"
     echo "<p>"
     echo "<p>"
      
     echo "Choose which radio station do you want to listen to: "
     echo "<form method=get>"
     echo "<input type=radio name=cmd value=1> Alvin <br>"
     echo "<input type=radio name=cmd value=2> 91.7 classical <br>"
     echo "<input type=radio name=cmd value=3> 88.7 global <br>"
     echo "<input type=radio name=cmd value=4> Kuhf news <br>"
     echo "<input type=radio name=cmd value=5> KPFT <br>"
     echo "<input type=radio name=cmd value=6> Koda <br>"
     echo "<input type=radio name=cmd value=7> KTBZ <br>"
     echo "<input type=radio name=cmd value=8> KSBJ <br>"
     echo "<input type=radio name=cmd value=9> Klol <br>"
     echo "<input type=submit>"
     echo "</form>"
     echo "</body>"
     echo "</html>"
    


    Try at your own risk.
    
    
    
    

    Test movie


    Had some old video without audio and had some old audio without video, so I decided to put them together to see what would happen. Feel like I am in an old silent movie theatre playing the piano. Actually that is me playing the guitar from many years ago. Did it in no time at all with ffmpeg.

    Breakfast

    The best meal of the day.





    Method 1: Milk- and oil-based scrambled eggs

    Ingredients

    2 eggs
    Salt and freshly ground black or white pepper or garlic powder to taste
    Butter or oil spray
    Milk (optional)
    Olive oil
    Water (optional)
    Cheese (optional)

    1. Prepare the eggs. Break two eggs per person into a bowl or jug. Add one tablespoon of milk, water and olive oil, or sour cream per egg if you prefer a more tender moist dish; adding liquid to the eggs means the dish is less likely to turn out tough or rubbery.

    2. Mix well until the color and texture are uniform throughout. Add salt and pepper to season, if desired. You may also add cheese for cheesy eggs.

    3. Select the right sized pan for the number of eggs you will scramble. Two eggs will require a very small pan, while a dozen eggs requires a much larger one.

    4. Heat a pat of butter (2 teaspoons), bacon drippings or oil in a frying pan. Move the pan by its handle, so that the melted fat glides around the surface and coats the entire pan.

    5. Flick some tap water onto the skillet from your fingertips to test the heat. When small droplets sizzle and evaporate, the pan is just hot enough to pour in the egg mixture. Continue to whisk as you pour the egg mixture into the pan. Set the burner on low.

    6. Watch that as the eggs start to cook, the mixture solidifies. As soon as this starts happening, move the mixture around the pan with a spatula to scrape the cooked eggs from the bottom to the top of the mixture and expose the still-wet portions to the heat. This keeps the eggs from developing a leathery brown skin on the bottom.

    7. Look to see if your eggs are almost cooked. When they are, take them off the heat, as the hot pan will continue to cook them. If you prefer drier-textured eggs, leave them on the heat as required. Your eggs are done after there's no liquid of any kind left in the skillet. Remove your eggs from the pan before they lose their moist appearance.You can also add strips of cheese to the eggs to get a more vibrant flavor out of them. Make sure to add cheese when the eggs are still hot so it will all melt onto the eggs.


    Method 2: Blended "real" scrambled eggs (no milk or water)

    Ingredients

    2 large or jumbo eggs
    Pinch salt and pepper
    2 tablespoons butter or 1 tablespoon cooking oil

    This method follows the belief that true scrambled eggs should not be yellow, but a blend of yellow and white. This means that milk and water should never be used.

    1. To one eight inch frying pan, add 2 tablespoons butter or 1 tablespoon cooking oil. Turn heat to high for 30 seconds then reduce to medium.

    2. Take 2 large or jumbo eggs or three medium eggs break them into the pan. Using a spoon at first break any yolk and then scramble the eggs using a combination of stirring and flipping. add 1 pinch of salt and 1 pinch of black pepper.

    3, When the eggs are still a touch moist but solid turn off heat, and scramble for 15 to 30 seconds more

    4. Serve. Add a sprig of fresh parsley and serve immediately.

    Menu driven.

    Whether you prefer a graphical user interface such as:


    Where all you have to do is just double click a picture is so sexy and seems very easy. Let's consider and alternative where all you have to do is just press a single key to start the program you want:





    But then you could actually sort of do the same thing with an interface like this:


    Oh but it is not as sexy some might say. It does exactly the same thing, but without using so many system resources. Not only that but you could get even more choices without having to redo the desktop. So if you pressed 1, you would get:





    Or if you pressed 2 than you would get:



    All this was done without any swiping!  Of course that does not prevent you from using your favorite program such as a spreadsheet or whatever:



    But then you could do sort of the same thing with a text based alternative like homecalc or sc:



    With all the embedded devices such as the Raspberry Pi and the like, you will want to be as resource conscious as you can.  Or to put it in another way, with all the impending issues in the world, what if computers, hand held devices and the like were stopped from being made? You still have to compute. What would you use? Those old systems in the closet do not look so bad now!?! Do not worry, computers will not be stop being made.



    ---------------------------------------------------------------------
    A bit of code:

    echo "************************"
    echo "* Music programs       *"
    echo "************************"
    echo "* [1] Autoharp         *"
    echo "* [2] Radio            *"
    echo "*                      *"
    echo "* [0] Exit/Stop        *"
    echo "************************"
    echo
    echo "Enter your menu choice [1-2, or 0]: "
    read -n 1 yourch
    case $yourch in
    1) autoharp.sh  ;;
    2) radio.sh ;;
    0) exit 0 ;;
    *) echo "Oopps!!! Please select choice 1,2 or 0"
    echo "Press Enter to continue. . ." ; read ;;
    esac
    done

    or a gui could be done:



    #! /bin/bash

    while selection=$(zenity --list \
    "1 Autoharp" \
    "2 Radio" \
    "0 Exit/stop" \
    --column="" --text="Music programs" --title="Menu")
    do
    case "$selection" in
    "1 Autoharp") autoharp.sh;;
    "2 Radio") radio.sh;;
    "0 Exit") exit;;
    *)  zenity --error --text="Invalid option. Try another one.";;
    esac
    done

    ~