The site www.netmarketshare.com displays the current break-up of the desktop operating systems market for July 2015 (Figure 1). At the outset, its important to acknowledge the problems related to software, which are always the same. On my computer at home, I have the freedom to install my preferred GNU Linux distro, but if I work at a company, I’m forced to use Windows, which is so prevalent across enterprises. Generally speaking, at home, I can also use Windows, usually pre-installed, as a base on which it is possible to add free and open source software. The software shown in Table 1 can be classified, more or less, into the following three categories:
1. Free and open source
2. Free (or free for personal use only) but not open source
3. Commercial (only one: FaxTalk)
With the only exception of FaxTalk (in my opinion, nice and cheap), for personal use, the cost of using either of the above is equal to zero. This article will present some tips and tricks tested on Windows 7 and related to the software that is highlighted in bold in Table 1.
Text editors
The importance of a text editor is well known. On Windows, a long list of text editors is available. This section describes how to build a syntax highlighting file for jEdit (http://jedit.org) and for Notepad++ (https://notepad-plus-plus.org). Now, I would like to consider an imaginary programming language called qwerty. In the qwerty language, a comment line starts with a double slash (// this is a comment) and the strings are those between two quotation marks (this is a string). This language has many keywords which can be classified into various categories. In jEdit, the syntax highlighting file has the following structure:
<?xml version=1.0?> <!DOCTYPE MODE SYSTEM xmode.dtd> <!-- jEdit syntax file for the qwerty language --> <MODE> <RULES IGNORE_CASE=FALSE HIGHLIGHT_DIGITS=FALSE> <SPAN TYPE=LITERAL1 ESCAPE=\ NO_LINE_BREAK=FALSE> <BEGIN></BEGIN> <END></END> </SPAN> <EOL_SPAN TYPE=COMMENT1>//</EOL_SPAN> <KEYWORDS> <!-- Category 1 --> <KEYWORD1>this-is-a-keyword</KEYWORD1> ... <!-- Category 2 --> <KEYWORD2>this-is-a-keyword</KEYWORD2> ... <!-- Category 3 --> <KEYWORD3>this-is-a-keyword</KEYWORD3> </KEYWORDS> </RULES> </MODE>
Because Im not interested in highlighting the digits, this option is defined as false. Save the file as, for example, qwerty.xml, and put it in the modes directory (C:\Program Files\jEdit\modes). Then add the following line to the catalogue file located in the same directory:
<MODE NAME=qwerty FILE=qwerty.xml FILE_NAME_GLOB=*.qwe />
For Scilab (http://www.scilab.org), the complete file about this first example is freely (as in freedom and in beer) available at https://github.com/astonfe/scilab. In Notepad++, a syntax highlighting file is not very different from that for jEdit, and has a structure divided more or less into three sections. The comment line, math operators, punctuation, parentheses and some keywords, for example, in an if-else-end statement are in the first section:
<Keywords name=Comments>00//</Keywords> <Keywords name=Operators1>+ - * / = ' , ; . : < > ( ) [ ] { } | & ~</Keywords> <Keywords name=Folders in code2, open>for function if select try while</Keywords> <Keywords name=Folders in code2, middle>case catch else elseif</Keywords> <Keywords name=Folders in code2, close>end endfunction</Keywords>
The keywords according to the following simple schema are defined in the second section:
<Keywords name=Keywords1> this-is-a-keyword ... </Keywords> <Keywords name=Keywords2> this-is-a-keyword ... </Keywords> <Keywords name=Keywords3> this-is-a-keyword ... </Keywords>
The strings, as well as the colours and fonts for each of the above categories, are defined in the last section. Save as UserDefineLang.xml and copy to C:\Users\AppData\Roaming\Notepad++. This editor also has its own built-in editor for custom languages, so its not necessary to directly edit (Figure 2). For Scilab, a complete file is written by Samuel Gougeon and is available from https://fileexchange.scilab.org/toolboxes/140000.
Firefox and Thunderbird
The user and not the software must determine whether or not to install updates. The use of internal options of each program may not work, so an alternative way is presented here. To disable the installation of add-ons, it is necessary to put two files in four directories, according to the following schema:
C:\Program Files\Mozilla Firefox\defaults\pref\local-settings.js C:\Program Files\Mozilla Firefox\mozilla.cfg C:\Program Files\Mozilla Thunderbird\defaults\pref\local-settings.js C:\Program Files\Mozilla Thunderbird\mozilla.cfg
To turn off the updates of each application, one file must be added to your profile:
C:\Users\[your-username]\AppData\Roaming\Mozilla\Firefox\Profiles\[your-profile].default\user.js C:\Users\[your-username]\AppData\Roaming\Thunderbird\Profiles\[your-profile].default\user.js
The contents of these three files are as follows:
// local-settings.js pref(general.config.obscure_value,0); pref(general.config.filename,mozilla.cfg); // mozilla.cfg lockPref(xpinstall.enabled,false); // user.js user_pref(app.update.enabled,false);
One of the easiest things about Firefox and Thunderbird is how to do a backup. Im comfortable using the following batch script. A copy of each directory with the current date is created on the desktop.
@rem Backup for Firefox and Thunderbird @rem Copy from source to destination including subdirs and hidden @echo off @for /F tokens=1,2,3 delims=/ %%A in (date /t) do @( set Day=%%A set Month=%%B set Year=%%C set All=%%C-%%B-%%A ) mkdir C:\Users\[your-username]\Desktop\Mozilla_%All% C:\Windows\System32\xcopy.exe C:\Users\[your-username]\AppData\Roaming\Mozilla C:\Users\[your-username]\Desktop\Mozilla_%All% /S /E /H mkdir C:\Users\[your-username]\Desktop\Thunderbird_%All% C:\Windows\System32\xcopy.exe C:\Users\[your-username]\AppData\Roaming\Thunderbird C:\Users\[your-username]\Desktop\Thunderbird_%All% /S /E /H echo Backup completed. pause
GhostScript
To configure a PDF printer, first install GhostScript and RedMon, the Redirection Port Monitor. I have installed GhostScript in C:\ so its directory is C:\gs9.15. The next step is to add a new printer on the port RPT1. The driver for the HP ColorLaserJet 2800 PS works because its both colour and postscript. For this printer, choose a name you like for example, GS2PDF. Then put the following code in the file C:\gs9.15\pdfwrite.txt:
-IC:\gs9.15\lib;C:\gs9.15\fonts -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dCompatibilityLevel=1.4 -dNOPAUSE -dSAFER -sPAPERSIZE=a4 -r600
The last step is the configuration of the RPT1 port on which the GS2PDF printer is installed, as shown in Figure 3. Also, under Device Settings, set Send Ctrl-D before each job to ‘No’ and ‘Wait Timeout’ to 1 second. The arguments for GhostScript are as follows:
@C:\gs9.15\pdfwrite.txt -sOutputFile="%1.pdf" -c .setpdfwrite -f -
This first part about GhostScript is based on the notes written by Michael B. McClelland (Reference 1) and by Henrik Schmiediche (Reference 2). On PDF files, there are some common operations that are easy to carry out on Windows. If I need to extract some pages from a large PDF file, I use the following batch script. It’s only necessary to specify the first and the last page numbers to extract the input and the output file names.
@rem PDF extract @echo off cd C:\gs9.15\bin gswin32c.exe -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dBATCH -dSAFER -dQUIET ^ -dFirstPage=2 ^ -dLastPage=6 ^ -sOutputFile="C:\Users\[your-username]\extract4.pdf" ^ "C:\Users\[your-username]\input.pdf" echo Done. pause
Another common operation is the merger of some PDF files to obtain one single file. In this case, I use the following batch script, in which it’s necessary to specify the output file name and the file names of each file to merge them.
@rem PDF merge @rem Input as single files "extract1.pdf extract2.pdf ..." @echo off cd C:\gs9.15\bin gswin32c.exe -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dBATCH -dSAFER -dQUIET ^ -sOutputFile="C:\Users\[your-username]\output.pdf" ^ "C:\Users\[your-username]\extract1.pdf" ^ "C:\Users\[your-username]\extract2.pdf" ^ "C:\Users\[your-username]\extract3.pdf" ^ "C:\Users\[your-username]\extract4.pdf" echo Done. pause
There is also another operation that’s sometimes useful – the conversion from a PostScript file to a PDF file. Even in this case, GhostScript can be the solution. In the following script, it’s only necessary to specify the file names of the input and output:
@rem PS2PDF @echo off cd C:\gs9.15\bin gswin32c.exe -o "C:\Users\[your-username]\output.pdf" ^ -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress ^ -dHaveTrueTypes=true -dEmbedAllFonts=true -dSubsetFonts=false ^ -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" ^ -f "C:\Users\[your-username]\input.ps" echo Done. pause
GNU Emacs and ImageMagick
There is a lot of software that can be used as a personal finance manager. Some examples are: GnuCash, HomeBank, KMyMoney and Skrooge. I have tested them on GNU Linux and not on Windows, so I cant say more about their installation and use on Windows. This kind of program is nice but Im not satisfied with it.
Another option is to use something like Ledger (http://www.ledger-cli.org), which is available for Windows too. But I prefer to follow a personal method and use org-mode to build some tables. With these tables, I cant do queries and reports, but I dont need them. A typical table I use has seven columns:
1. ID, which is a progressive integer
2. Day, which is the date when the operation is done
3. Payee, which is the payee
4. Memo, which is the explanation of that operation
5. R, which is used to show if the operation has been reconciled or not
6. Amount, which is the amount in that operation that can be a positive or a negative number
7. Balance, which is the running total
The first row is the total balance for the previous year. At the end of the table, there are the following three rows:
#+tblfm: $1=@#-1 #+tblfm: @>$6=vsum(@I..@II);%.2f #+tblfm: $7=vsum(@2$6..@$6);%.2f
The first adds the ID number (column 1), the second calculates the total balance value (the sum of all the values in column 6) and the third calculates the running total (column 7). This is a simple, practical and very fast way to open a file on a text editor and to print as html, when necessary. Figure 4 shows an org-mode file opened in Notepad++ with the free and open source font Hack v2.010 (http://sourcefoundry.org/hack). Regarding ImageMagick – after the installation, to verify if its working properly, type each of the following lines at the command prompt:
convert logo: logo.gif identify logo.gif imdisplay logo.gif
If the file mfc100u.dll is missing, its impossible to run imdisplay. Simply download and install Microsoft Visual C++ 2010 SP1 Redistributable Package. Some useful common operations are summarised in the following code from the command prompt. ImageMagick is very powerful and has many capabilities. More examples can be found at http://www.imagemagick.org/Usage
- Reduce image quality/size convert -strip -quality 25 big_image.jpg new_image.jpg - Generate a canvas with a specific size and color convert -size 1280x800 canvas:#708090 background.jpg - Convert from PNG to ICO convert -define icon:auto-resize=256,128,64,48,32,16 file.png file.ico - Convert from PDF or EPS to PNG convert -density 300 -quality 100 -layers flatten file.pdf file.png - Convert from color to gray scale convert -colorspace Gray color_image.png gray_image.png - Modulate Brightness, Saturation, Hue convert -modulate 100,100,-50 image.png new_image.png - Resize mogrify -resize 128x256 image.png
Before the final conclusions, I would like to add some remarks about these three kinds of software: database, CAD and RAD. For a database on a network, I prefer to use MySQL/MariaDB with some PHP (see the OSFY August 2015 issue) and for Drupal websites too. But for a small, desktop only application the story is different. I like well-known commercial software, but find them expensive.The well-known LibreOffice Base is interesting but, in my opinion, it’s not a so good alternative to the above-mentioned commercial software, because it still needs a lot of work before it can be considered a true alternative. The Java engine is slow; Firebird has some stability problems and the GUI is not the best. So, actually for me, this is an open topic.
About CAD, I have no experience about 3D so I would like to list six interesting free alternatives to AutoCAD LT and to VectorWorks (I havent used them both for years): DoubleCAD XT, DraftSight, FreeCAD, Medusa, nanoCAD and Solid Edge 2D. Some of these options also have 3D capabilities but only FreeCAD is open source. Ive tested only Solid Edge (because its used in the CAD/CAE course at my college) and DraftSight, and I think that the second, for my simple needs, can be an alternative because its available for GNU Linux (note that DraftSight is unsupported on Linux 32-bit machines).
Last, some short notes about NetBeans and Lazarus. As well as in the case of text editors, I cant make a definitive choice because Java is very widely used and having some knowledge about it has certain advantages, but I also like the Pascal syntax. At this point a big section could be open to talk about the Python programming language on Windows. But this is another story. Finally, can Windows be a good base for free and open source software? I think it can, because on Windows, I can install many other free software (even if not open source) or, if necessary, commercial software thats not available for GNU Linux. But for the future, I hope that it will be possible to use only GNU Linux.
References
[1] http://mbmcclelland.blogspot.it/2012/11/creating-free-pdf-printer-in-windows-7.html, last visited on 28/08/2015.
[2] http://www.stat.tamu.edu/~henrik/GSWriter/GSWriter.html, last visited on 28/08/2015.