The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,861 other subscribers

Archive for September, 2016

Converting sendmail .db files to text

Posted by jpluimers on 2016/09/15

If you want to inverse the work of newaliases, you can use makemap to convert them to text:

makemap -u hash access.db

This is quite handy to see if the newaliases indeed put all information into the db file (for instance if you use a script, you can verify it ran correctly).

It works for any db, but you need to be aware of the database format: hash type or btree type.

To my knowledge only one uses the btree type format:

  • userdb.db

All others use hash type format:

  • aliases.db
  • aliases-maillist.db
  • mailertable.db
  • genericstable.db
  • virtusertable.db
  • access.db
  • auth-info.db
  • domaintable.db

–jeroen

via: Reading Sendmail .db files.

Posted in *nix, *nix-tools, bash, Development, Linux, openSuSE, Power User, Scripting, Software Development, SuSE Linux | Leave a Comment »

Mac OS X – installing pdf-tools using homebrew to circumvent “For the best experience, open this PDF portfolio in Acrobat 9 or Adobe Reader 9, or later.”

Posted by jpluimers on 2016/09/14

Adobe marketing scam

Adobe marketing scam

I don’t want Acrobat/Adobe Reader on my Mac. Period.

But Preview will show some PDF files as “For the best experience, open this PDF portfolio in Acrobat 9 or Adobe Reader 9, or later.” or “For the best experience, open this PDF portfolio in Acrobat X or Adobe Reader X, or later.

This is some Adobe marketing scam where they generate a PDF file actually as a portfolio of PDF files having the first PDF being “marketing” message.

So I needed the pdf-tools on my Mac for which many sites suggest to use brew install pdf-tools. That worked not so well:

$ brew install pdf-tools
Error: No available formula with the name "pdf-tools" 
==> Searching for similarly named formulae...
This similarly named formula was found:
mupdf-tools
To install it, run:
  brew install mupdf-tools
==> Searching taps...
This formula was found in a tap:
homebrew/emacs/pdf-tools
To install it, run:
  brew install homebrew/emacs/pdf-tools

Searching for “Error: No available formula with the name” “pdf-tools” didn’t return useful results but looking for brew “pdf-tools” gone revealed pdf-tools: move to homebrew/emacs · wingyplus/homebrew@6e73af9 indicating the command should indeed be brew install homebrew/emacs/pdf-tools however that also ended up failing, in fact with multiple errors:

==> make server/epdfinfo
Error: No available formula with the name "homebrew/dupes/tcl-tk" 
Please tap it and then try again: brew tap homebrew/dupes
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
Error: No formulae found in taps.

After doing abrew tap homebrew/dupes it finally worked.

Read the rest of this entry »

Posted in Apple, Development, DVCS - Distributed Version Control, git, GitHub, Home brew / homebrew, Power User, Source Code Management | Leave a Comment »

Gmane Alive! – Random Thoughts

Posted by jpluimers on 2016/09/14

Just found out that about a week ago this happened: Gmane Alive! – Random Thoughts [WayBack]

Wonderful! Thanks Lars for taking care of it so long, and thanks to the new team from Yomura Corporation for bringing it back alive!

I don’t use Gmane often, but when I do

So after six weeks of cold turkey for many (The End of Gmane? – via: Random Thoughts) it’s back (:

If you don’t know what it is: Gmane – Wikipedia, the free encyclopedia [WayBack]

–jeroen

Posted in gmane, Power User, SocialMedia | Leave a Comment »

ESXi: when esxtop shows garbage.

Posted by jpluimers on 2016/09/14

The ESXi console top to show processes is not available *, the alternative is esxtop. But that can show garbage because the ESXi console has a very limited support of terminals **.

For instance, when connecting from a Mac OS X terminal through ssh, this is my terminal:

# echo $TERM
xterm-256color

The solution:

TERM=xterm esxtop

–jeroen

via: VMware KB: Output of esxtop defaults to non-interactive CSV with unknown TermInfo.

Read the rest of this entry »

Posted in *nix, *nix-tools, bash, bash, Development, ESXi5, ESXi5.1, ESXi5.5, ESXi6, Power User, Scripting, Virtualization, VMware, VMware ESXi | 2 Comments »

Firebird gbak backing up a remote database that has spaces in the path and is on a remote Windows machine

Posted by jpluimers on 2016/09/13

I will likely need a batch file like this again:

setlocal
set gbakExe=C:\Program Files (x86)\Firebird\Firebird_2_5\bin\gbak.exe
set dbPart=MyDatabase
set dbSource=192.168.199.24:C:\Path with spaces\%dbPart%.fdb
set dbUser=sysdba
set dbPassword=masterkey
"%gbakExe%" -verify -transportable -user %dbUser% -password %dbPassword% "%dbSource%" %dbPart%.fbk
endlocal

You need the quotes around %gbakExe% and %dbSource% to ensure spaces in paths are preserved.

–jeroen

Sources:

Posted in Batch-Files, Database Development, Development, Firebird, Scripting, Software Development | Leave a Comment »

vim-cmd suspending/resuming a bunch of VMs

Posted by jpluimers on 2016/09/13

These two vim-cmd scripts come in very handy:


#!/bin/sh
VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'`
for VM in $VMS ; do
# echo "Probing VM with id: $VM."
PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | awk -F'"' '{print $2}'`
echo "VM with id $VM has power state $PWR (name = $name)."
done


#!/bin/sh
# https://wiert.me/2021/04/30/vmware-esxi-console-viewing-all-vms-suspending-and-waking-them-up-part-5/
RUNNING=0
vmids=`vim-cmd vmsvc/getallvms | sed -n -E -e "s/^([[:digit:]]+)\s+((\S.+\S)?)\s+(\[\S+\])\s+(.+\.vmx)\s+(\S+)\s+(vmx-[[:digit:]]+)\s*?((\S.+)?)$/\1/p"`
for vmid in ${vmids} ; do
# echo "Probing VM with id: $vmid."
powerState=`vim-cmd vmsvc/power.getstate ${vmid} | sed '1d'`
name=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/\(vim.vm.ConfigInfo\) \{/,/files = \(vim.vm.FileInfo\) \{/ s/^ +name = "(.*)",.*?/\1/p'`
vmPathName=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/files = \(vim.vm.FileInfo\) \{/,/tools = \(vim.vm.ToolsConfigInfo\) \{/ s/^ +vmPathName = "(.*)",.*?/\1/p'`
# echo "VM with id ${vmid} has power state ${powerState} (name = ${name}; vmPathName = ${vmPathName})."
if [ "${powerState}" == "Powered on" ] ; then
RUNNING=1
echo "Powered on VM with id ${vmid} and name: $name"
echo "Suspending VM with id ${vmid} and name: $name"
vim-cmd vmsvc/power.suspend ${vmid} > /dev/null &
fi
done
while true ; do
if [ $RUNNING -eq 0 ] ; then
echo "Gone…"
break
fi
RUNNING=0
for vmid in ${vmids} ; do
# echo "Probing VM with id: $vmid."
powerState=`vim-cmd vmsvc/power.getstate ${vmid} | sed '1d'`
name=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/\(vim.vm.ConfigInfo\) \{/,/files = \(vim.vm.FileInfo\) \{/ s/^ +name = "(.*)",.*?/\1/p'`
vmPathName=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/files = \(vim.vm.FileInfo\) \{/,/tools = \(vim.vm.ToolsConfigInfo\) \{/ s/^ +vmPathName = "(.*)",.*?/\1/p'`
# echo "VM with id ${vmid} has power state ${powerState} (name = ${name}; vmPathName = ${vmPathName})."
if [ "${powerState}" == "Powered on" ] ; then
RUNNING=1
echo "Waiting for id ${vmid} and name: $name…"
fi
done
sleep 1
done
exit 0


#!/bin/sh
SUSPENDED=0
VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'`
VMstateToProcess="Suspended"
for VM in $VMS ; do
# echo "Probing VM with id: $VM."
PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | awk -F'"' '{print $2}'`
echo "VM with id $VM has power state $PWR (name = $name)."
if [ "$PWR" == "$VMstateToProcess" ] ; then
SUSPENDED=1
echo "Suspended VM with id $VM and name: $name"
echo "Resuming VM with id $VM and name: $name"
# you'd think power.suspendResume is the inverse of power.suspend, but actually power.on is:
vim-cmd vmsvc/power.on $VM > /dev/null &
fi
done
while true ; do
if [ $SUSPENDED -eq 0 ] ; then
echo "Gone…"
break
fi
SUSPENDED=0
for VM in $VMS ; do
PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
if [ "$PWR" == "$VMstateToProcess" ] ; then
name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | awk -F'"' '{print $2}'`
echo "Waiting for id $VM and name: $name…"
SUSPENDED=1
fi
done
sleep 1
done

–jeroen

Posted in bash, Development, ESXi4, ESXi5, ESXi5.1, ESXi5.5, ESXi6, Power User, Scripting, Software Development, Virtualization, VMware, VMware ESXi | Leave a Comment »

New Book: MVVM in Delphi by John Kouraklis should be available at the beginning of november.

Posted by jpluimers on 2016/09/13

John Kouraklis last week announced a new book: MVVM in Delphi.

It will be available early november and is already listed at the APress site: MVVM in Delphi – Architecting and Building Model View ViewModel Applications [WayBack] where you can pre-order.

It’s good to see that the last years more Delphi books have been published and I hope this MVVM book falls in the more advanced category.

Since I’ve given a few Delphi MVVM talks (latest at https://github.com/jpluimers/Conferences/tree/master/2013/20131121-BE-Delphi) I’m genuinely interested. So I will get this book and – time permitting – write a review.

Nick Hodges did the technical review, and since Nick’s book are great I have high hopes (:

From the APress site:

Full Description

Dive into the world of MVVM, learn how to build modern Windows applications, and prepare for cross-platform development. This book introduces you to the right mindset and demonstrates suitable methodologies that allow for quick understanding of the MVVM paradigm. MVVM in Delphi shows you how to use a quick and efficient MVVM framework that allows for scalability, is of manageable complexity, and provides strong efficiency.

One of the biggest challenges developers face is how to convert legacy and monolithic Delphi applications to the MVVM architecture. This book takes you on a step-by-step journey and teaches you how to adapt an application to fit into the MVVM design.

What you’ll learn

  • Gain the fundamentals of MVVM
  • Visualize MVVM as a design philosophy
  • Create easy-to-use frameworks for building your own MVVM applications
  • Develop a methodology for converting legacy applications to the MVVM pattern
  • Architect cross-platform and multi-lingual applications using the MVVM pattern

Who this book is for

Delphi developers with a good knowledge of Delphi or programming experience in a different language. In addition, this book is attractive to Delphi developers who want to modernize existing applications based on the MVVM design.

and

Table of Contents

1. MVVM as Design Pattern
2. Setting Up the POSApp
3. MVVM as Design Philosophy
4. Two-way Communication
5. MVVM and Delphi
6. Planning the Application
7. Developing the Application
8. How to Convert your App to MVVM
A. Appendix: Other MVVM Delphi frameworks

–jeroen

via: New Book: MVVM in Delphi… [WayBack]

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | Leave a Comment »

10 Reason to date Programmer – I’m Programmer

Posted by jpluimers on 2016/09/12

Happy programmers’ day.

10 Reason to date Programmer – I’m Programmer

I think the original was from https://teespy.com/app/campaigns/viralstyle/10-reasons-to-date-a-programmer-limited but last time I checked that domain wasn’t responding, nor was the page archived.

–jeroen

via: 10 Reasons to Date a Programmer

Read the rest of this entry »

Posted in Development, Fun, Software Development | Leave a Comment »

Flush deferred messages in sendmail queue :: Stephan Paukner :: syslog

Posted by jpluimers on 2016/09/12

Be careful with setting the timeout of sendmail to zero when trying to flush the mail queue:

sendmail -OTimeout.hoststatus=0m -q -v

Reason: a lot of target systems do rate-limiting if you retry too much in too short time, for instance gmail does that:

421-4.7.0 [###.###.###.### 15] Our system has detected an unusual rate of
421-4.7.0 unsolicited mail originating from your IP address. To protect our
421-4.7.0 users from spam, mail sent from your IP address has been temporarily
421-4.7.0 rate limited. Please visit
421-4.7.0 https://support.google.com/mail/answer/81126 to review our Bulk Email
421 4.7.0 Senders Guidelines. w1si28749381wju.16 - gsmtp

–jeroen

via Flush deferred messages in sendmail queue :: Stephan Paukner :: syslog.

Posted in *nix, *nix-tools, Linux, openSuSE, Power User, SuSE Linux | Leave a Comment »

Happy “Day of the Programmer”

Posted by jpluimers on 2016/09/12

Happy debugging, suckers

Happy debugging, suckers

Or maybe not…

(yes, this year it’s not on the 13th of September, but the 12th, guess why…)

--jeroen

via: Day of the Programmer – Wikipedia, the free encyclopedia

PS: The oldest reference I could find for define true (rand() > 10) was this one from 20121014:

// Happy debugging, suckers
# define true (rand() > 10)

Source: codecrap.com – snippet #6

It reminds me of a 1990s prank I once put in central consts unit of a Turbo Pascal project somewhere way beyond the right margin in a search directory outside of version control:

                                                                                     const True = False; False = not True;

A lot more pranks are at Happy debugging, suckers : ProgrammerHumor – reddit

Posted in Conference Topics, Conferences, Development, Event, Fun, Prank, Software Development | Leave a Comment »