Category Archives: Uncategorized

Be Masters of Our Mouth

Once upon a time an old man and a young man were living nearby.

The old man spread rumors that his young neighbor was a thief.

As a result, the young man was arrested by the police and brought to magistrate.

Days later the young man was proven innocent.

After been released he sued the old man for wrongly accusing him.

In court the old man told the Judge:

He just made comments, didn’t harm anyone..

The judge, before passing sentence on the case, told the old man:

Write all the things you said about him on a piece of paper.

Cut them up and on the way home, throw the pieces of paper out.

Tomorrow, come back to hear the sentence.

The next day, the judge told the old man:

Before receiving the sentence, you will have to go out and gather all the pieces of paper that you threw out yesterday.

The old man said:

I can’t do that ! The wind spread them and I won’t know where to find them.

The judge then replied:

The same way, simple comments may destroy the honor of a man to such an extent that one is not able to fix it.

“If you can’t speak well of someone, rather don’t say anythıng.”

Let’s all be masters of our mouths, so that we won’t be slaves of our words.

VIM: Vundle to vim-plug

After several years of using my old .vimrc with vundle, finally bit the bullet and converted to vim-plug. It was quite an easy transition, and in my case, vim is now quicker to load.

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs

I then wrote out the new .vimrc as follows

" Plugins will be downloaded under the specified directory.
call plug#begin('~/.vim/plugged')
" Declare the list of plugins.
" git plugins
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-git'
Plug 'tpope/vim-obsession'
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-sleuth'
Plug 'tpope/vim-surround'

" statusbar
Plug 'vim-airline/vim-airline'

" syntax highlighting
Plug 'scrooloose/syntastic'
Plug 'vim-pandoc/vim-pandoc'
Plug 'vim-pandoc/vim-pandoc-syntax'
Plug 'dense-analysis/ale'

" colourstuff
Plug 'nightsense/night-and-day'
Plug 'altercation/vim-colors-solarized'
Plug 'tpope/vim-vividchalk'
Plug 'gkjgh/cobalt'
Plug 'vim-scripts/mayansmoke'
" List ends here. Plugins become visible to Vim after this call.
call plug#end()

" Now ensure certain stuff on
filetype plugin indent on

" other settings
set encoding=utf-8
set mouse=a
set ff=unix
set spelllang=en_au
syntax enable
set termguicolors

" Console ui and text display
" -------------------------------------------------------------
set vb t_vb =
set ruler
set noerrorbells
set scrolloff=5
set number                                                     "line numbering
set showmatch                                                  " show matches

" TAB specific options
" -------------------------------------------------------------
set tabstop=4
set expandtab
set softtabstop=4
set shiftwidth=4
set smarttab
set shiftround
set nojoinspaces

"  colourscheme settings depending on sunlight levels.
" -------------------------------------------------------------
let g:nd_themes = [
  \ ['sunrise+0/0',  'mayansmoke',       'light' ],
  \ ['sunset+0/0',  'cobalt',           'dark'  ],
  \ ]

let g:nd_latitude = '-30'
let g:nd_timeshift = '0'
let g:nd_airline = 1

set wildmenu
set wildmode=list:longest

set fileformats=unix,dos,mac

set incsearch
set ignorecase
set smartcase

if filereadable(".vim.custom")
	so .vim.custom

" vim airline
let g:airline#extensions#branch#enabled = 1
let g:airline#extensions#branch#empty_message = ''
let g:airline#extensions#branch#syntastic#enabled = 1
let g:airline#extensions#tabline#enabled = 1

It was then just a matter of restarting vim and entering:


Updating is simple as well:


To update vim-plug itself, just enter:


Install ClamAV in Debian Linux

Can your Linux installation catch a virus? Yes it can, even though they are rare. This is the case especially if you are sharing data (documents and other files) from Windows based computers. It is useful to install ClamAV to remove those viruses.

ClamAV is an open source antivirus engine for detecting trojans, viruses, malware and other malicious threats. Of course, it is available for the most common Linux distributions including Debian, Ubuntu, and CentOS.

In case you didn’t know, ClamAV is the standard for mail gateway scanning software. Of course, we are talking about the open source area. This tells you how powerful and reliable it is. All this, with a high performance, which assures you that you will not have an unnecessary expense of computer resource.

Install ClamAV

Installing ClamAV is really simple because it is available in the main repositories of most Linux distributions.

To install for Debian

sudo apt update && sudo apt upgrade -y
sudo apt install clamav clamav-daemon

The installation is done.

Using ClamAV

Like any antivirus, its effectiveness depends on how often you update your virus definition. So the first step is to update ClamAV.


Next, scan your home directory

clamscan -r /home/you

The -r option ensures all directories are scanned, even the hidden ones.

Setup ClamAV to Constantly Monitor

The above process is very easy but it is not a good idea if it has to be done frequently. So, initialize the ClamAV daemon to constantly look for threats.

sudo /etc/init.d/clamav-daemon start
sudo /etc/init.d/clamav-freshclam start

Getting Help

Finally, you can consult the rest of ClamAV usage using its help. It is important to know other options of use and configuration.

clamav -help


It is important to know how to use ClamAV on Linux because security is an issue that should not be taken lightly. Its installation and use are quite simple but because it is open source it guarantees a correct and frequently updated database.

Please share this post with your friends.

An Engineer accidentally goes to Hell instead of Heaven

An Engineer dies and goes to hell. He’s hot and miserable, so he decides to take action. The A/C has been busted for a long time, so he fixes it. Things cool down quickly.

The moving walkway motor jammed, so he unjams it. People can get from place to place more easily.

The TV was grainy and unclear, so he fixes the connection to the Satellite dish and now they get hundreds of high def channels.

One day, God decides to look down on Hell to see how his grand design is working out and notices that everyone is happy and enjoying umbrella drinks. He asks the Devil what’s going on?

The Devil replies, “Things are great down here since you sent us that engineer.”

“What?? An engineer? I didn’t send you one of those, that must have been a mistake. Send him back up right this minute.”

The Devil responds, “No way! We are going to keep our engineer. We like this guy.”

God demands, “If you don’t send him to me immediately, I’ll sue!”

The Devil laughs. “Where are YOU going to get a lawyer?”

Password Generator in tk/tcl

The basis for this program was written in another lifetime to create basically pronouncable passwords for students.

# pass_gen - create pronouncable passwords with 4-20 characters, 1-10 numbers
# and optional symbol
# author:Morpheus Being
# licence: GPL
# tested on
# puppy linux - initial development and testing
# xubutu
# windows xp
# changelog
# 1.5 - Added capital letters
# 1.4 - added template for different forms of password
# 1.3
# 1.2 - fixed random problem not choosing z u 9 etc
# 1.1 - mods to allow different lengths of vowels, letters, digits, symbols
# 1.0 - initial development
exec wish "$0" "$@"

package require BWidget

set version "1.5"
set licence "G.P.L"
set author "Morpheus Being"
set dupdate "August 2018"

# data sets used for creating the password
set vowels { a e i o u A E I O U }
set letters { b c d f g h j k l m n p q r s t v w x y z B C D F G H J K L M N P Q R S T V W X Y Z }
set digits { 0 1 2 3 4 5 6 7 8 9 }
set symbols { ! @ # $ % ^ & * ( ) _ - + }

# -----------------------------------------------------------------------------
# appCreate - create window frame and all its contents, spinboxes, buttons,
# display elements
proc appCreate { } {
variable version

# menu description
set descmenu {
"&File" all file 0 {
{command "E&xit" {} "exit application" {} \
-command appExit }
"&Help" all help 0 {
{command "H&ow To Use" {} "how to use" {} \
-command appHelpHow }
{command "&About" {} "about the application" {} \
-command appHelpAbout }

# create the main menu
wm title . "Password Generator $version"
set wid [expr {25*[font measure mydefault 0]}]
set mainframe [MainFrame .mainframe -menu $descmenu -width $wid]

# create spinboxes for number of letters and numbers
set titf1 [TitleFrame $mainframe.titf1 -text "Number of Characters" ]
set subf1 [$titf1 getframe]
set spin1 [SpinBox $subf1.spin -range { 4 20 1 } -textvariable alpha ]

pack $spin1 -side right
pack $titf1 -fill x -pady 2 -padx 2

set titf2 [TitleFrame $mainframe.titf2 -text "Number of Numbers" ]
set subf2 [$titf2 getframe]
set spin2 [SpinBox $subf2.spin -range { 1 10 1 } -textvariable numeric ]

pack $spin2 -side right
pack $titf2 -fill x -pady 2 -padx 2

# create radio button (yes/no choice) for symbols
set titf3 [TitleFrame $mainframe.titf3 -text "Symbol"]
set subf3 [$titf3 getframe]
set rad1 [radiobutton $subf3.rad1 -text "Yes" \
-variable wantsymbol -value 1 -relief "flat"]
set rad2 [radiobutton $subf3.rad2 -text "No" \
-variable wantsymbol -value 0 -relief "flat"]

pack $rad1 $rad2 -side left
pack $titf3 -fill x -pady 2 -padx 2

# create radiobutton for format type
set titf4 [TitleFrame $mainframe.titf4 -text "Format - symbol is optional"]
set subf4 [$titf4 getframe]
set rad3 [radiobutton $subf4.rad3 -text "w(s)nw" \
-variable ftype -value 0 ]
set rad4 [radiobutton $subf4.rad4 -text "ww(s)n" \
-variable ftype -value 1 ]

pack $rad3 $rad4 -side left
pack $titf4 -fill x -pady 2 -padx 2

# create display box for generated passwords
set titf5 [TitleFrame $mainframe.titf5 -text "Password"]
set subf5 [$titf5 getframe]
set ent1 [Entry $subf5.entry -textvariable genpassword]

pack $ent1 -pady 4 -anchor w -side left
pack $titf5

# create button for generating new password
set but [Button $mainframe.but -text "New" \
-command "newPass" -helptext "create new password" ]

pack $but -side left -padx 4

wm protocol . WM_DELETE_WINDOW { appExit }
pack $mainframe -fill both -expand yes
update idletasks

# newPass - determine how many letters, vowels, digits, symbols and display the
# created password
proc newPass { } {
global genpassword alpha numeric wantsymbol ftype

set fpl [ expr $alpha / 2 ]

if { $alpha % 2 } {
set fpl [ expr int($alpha / 2) + 1]

set lpl [ expr $alpha - $fpl ]

# to change format of password edit following lines
set start [ aPart $fpl ]
set mid [ nPart $numeric ]
set end [aPart $lpl ]

# want symbol in password
if { $wantsymbol == 1 } {
set sym [ sPart ]

# which type of format to display
switch $ftype {
0 {
if { $wantsymbol == 1} {
set genpassword [ format "%s%s%s%s" $start $sym $mid $end ]
} else {
set genpassword [format "%s%s%s" $start $mid $end ]
1 {
if { $wantsymbol == 1} {
set genpassword [ format "%s%s%s%s" $start $end $sym $mid ]
} else {
set genpassword [format "%s%s%s" $start $end $mid ]

# aPart - return randomly selected letters and vowels from the lists
proc aPart { slen } {
global vowels letters

set vlen [ expr [ llength $vowels ] ]
set llen [ expr [ llength $letters ] ]

for { set i 0 } { $i < $slen } { incr i } { if { $i % 2 == 0 } { set randid [ expr int( rand() * $llen ) ] append ret [ lindex $letters $randid ] } else { set randid [ expr int( rand() * $vlen ) ] append ret [ lindex $vowels $randid ] } } return $ret } # # nPart - return randomly selected digit(s) from the digit list # proc nPart { slen } { global digits set dlen [ expr [ llength $digits] ] for { set i 0 } { $i < $slen } { incr i } { set randid [ expr int( rand() * $dlen ) ] append ret [ lindex $digits $randid ] } return $ret } # # sPart - return randonly selected symbol from the list # proc sPart { } { global symbols set sylen [ expr [ llength $symbols ] ] set randid [ expr int( rand() * $sylen ) ] append ret [ lindex $symbols $randid ] return $ret } # # appExit - selected from menu # proc appExit { } { set choice [ tk_messageBox -message "Are you sure you want to exit?"\ -icon question -type yesnocancel ] if {$choice == "yes" } { exit } } # appHelpHow proc appHelpHow { } { tk_messageBox -message "Select the number of\n\ - letters\n\ - numbers\n\Aug 2018 - optional symbol\n\ - format\n\ before pressing the \bNew\b button.\n" } # # appHelpAbout - display info about the program in new disposable window # proc appHelpAbout { } { global version licence author dupdate tk_messageBox -message "Written in tk/tcl.\n\ Author: $author. \n\ Date: $dupdate \n\ Updated: $update. \n\ Version: $version.\n\ Licence: $licence." } # # main procedure to manage window creation and destruction # proc main { } { wm withdraw . appCreate wm deiconify . } main #---------------------------- end of program ----------------------------------

tcl/tk slider example program

Simple program to convert temperatures in F to C and vica versa. Just copy and paste the following code and make it executable.

# script to convert between F and C
# \
exec wish “$0″ ${1+”$@”}

# set window title
wm title . “Temperature Converter”

# convert C to F
proc celsiusTofahren { ctemp } {
global fahrenheit
set fahrenheit [ expr ($ctemp * 1.8) + 32 ]

# convert F to C
proc fahrenToCelsius { ftemp } {
global celsius
set celsius [ expr ($ftemp – 32 ) / 1.8 ]

# create a scale for f temps
set fahrenscale [ scale .fht -orient horizontal \
-from 0 -to 212 -length 500 \
-resolution .1 -tickinterval 20 -label “Fahrenheit” \
-variable fahrenheit -command fahrenToCelsius ]

# create a scale for c temps
set celscale [ scale .cel -orient horizontal \
-from -20 -to 100 -length 500 \
-resolution .1 -tickinterval 20 -label “Celsius” \
-variable celsius -command celsiusTofahren ]

# Grid the widgets
grid $fahrenscale
grid $celscale