Sunday, May 29, 2011

The future of Windows

Last week I participated in a Windows 7 course. I was sent to the course by my employer, although in my official role is Linux System Engineer. 9 people attended the course. Looking around my colleagues I had some interesting observations, I'd like to share.
First of all, among the participants, I was the youngest. 2 Other guys where also Linux admins, the rest were Windows admins. Some external appearances really struck me. Usually, Linux guys have the image of being wild hairy beasts with long unshaven beards. Well ... there are some differences with the Windows guys, but not what I expected:
  • All the Linux guys were younger then 35, windows guys are older. This is a very strong indicator about the future of this OS.
  • The Linux Guys (including me) dress sportive casual stuff, short pants, some sport brand cool shirt or just plain T's. Windows guys are dressed business casual: jeans or some fancy pants, with a button up shirt tucked in their pants behind some leather belt usually holding a role over fat stomach.
  • Linux Guys come to the course cycling (MTB or Road bike), Windows guys all came with a Car, which can explain the fat stomach phenomena.
  • Out of 6 guys, 3 guy actually had facial hairs, and our instructor a mustache! Personally, I find people with mustaches unreliable.
This are just my few observations on being in a Windows 7 course.

Another anecdote I have noticed while learning Windows 7, is it's lousy backward compatibility. Windows 7 does not include Solitaire or Minesweeper, at least in the VM's we had ... Imagine, passing 2 days in front of the most boring OS, without minesweeper...


Thursday, May 26, 2011

2 Cool Python Learning resources

A couple of nights ago I was browsing code.google.com in random search for interesting Python projects.
Here are two nice catches from my random fishing, which are worth mentioning. The first one is a Free python book, which attempts to bring Python and the joy of creating software for kiddies, here is what they write as an intro:

"Snake Wrangling for Kids" is a printable electronic book, for children 8 years and older, who would like to learn computer programming. It covers the very basics of programming, and uses the Python 3 programming language to teach the concepts.

The second one, is a Python interactive learning program. Although I have not played a lot with it, it seems fun. However, the project seems a little bit sleepy (no updates for almost a year):

RUR-PLE is an environment designed to help you learn computer programming using the language Python. Within an artificial world in which a robot can be programmed to perform various tasks, you will learn what it means to write a computer program, using Python's syntax

If you are a self learner type like me, you would appreciate these resources.



Tuesday, May 24, 2011

Building Octave-3.4 on Debian Sid

I wanted to build the latest Octave (3.4) on my Debian Sid. Well, it wasn't as easy as before, since I upgrade it quite often. So now, the GCC-4.6 is used in Octave. However, due to some bugs in GCC-4.6 or Octave(?), it won't build. So, the trick that did it for me:

sudo aptitude build-dep octave3.2
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
sudo aptitude install gcc-4.5 gfortran-4.5 g++-4.5

than, we need to do something ugly, but it does work ... ;-)

sudo mv /usr/bin/gfortran /usr/bin/gfortran.ORG
sudo ln -s /usr/bin/gfortran-4.5 /usr/bin/gfortran

now we tell Octave to build using GCC-4.5:
export CC=/usr/bin/gcc-4.5
export CXX=/usr/bin/g++-4.5

the rest is easy:
./configure
make 
make test
sudo make install
sudo checkinstall

Et viola! A post which is more positive and not ranting! Octave 3.4 is faster, and provides better Matlab comparability. Give it a try and you want look back!



Friday, May 06, 2011

More UNITY Crap

Take a loot at this post. You need a "how to" to run multiple copies of the same program. Hmm... Ubuntu is turning Linux boxes into IPHONES who are locked down to run one application at the time.
Idiots. We have multicore processors, and more multithreaded applications, but Ubuntu users need a how to if they want to open two instances of GEDIT for example if they want to compare two documents, and NOT use TABS.
Honesty, the title of my previous post was "Are Linux developers getting dumber" maybe I should not have censor myself.


Better Apps in Linux

I don't know why, but I have the feeling that the rise of Ubuntu, does not bring Linux forward. I have read a few posts about it. And I think that the focus of Linux developers is starting to annoy me so much that I am thinking of ripping Linux off my Laptop and just installing *BSD, although I'd have to twitch my nose, because I prefer GPL over BSD.
My rant is about things like GNOME3, KDE4, UNITY and stupidities like systemd. The first two idiotic examples are a proof of how FOSS developers can be totally disconnected from their users. I mean, KDE4 and GNOME3 both seek to re-invent the user experience. However, the firm hold of windows in the market, shows that user experience is not such big deal. Rather, I think, applications and stability are more important.
True, Windows suck big time. I hate the thought of using such a flawed OS. However, Windows Jane and Joe, don't care. They just want their Photoshop and Adobe Acrobat to work. And while cool Dave has his Unity blowing off cool effects, he can't properly annotate PDFs, while GNOME and Ubuntu developers are still fighting if the awesome bar should be in the bottom of the screen or on the left side.
Systemd, sounds really like an amazing piece of software, which can really fly my laptop to mars upon boot. However, I boot my computer only once in 2-3 months, when I upgrade my kernel, and frankly, I don't care if it takes 2 minutes to boot. The same is true for all Windows 7 users.
Last week, I was riding the train, and the guy next too me booted his Windows XP - took him 5 minutes until he got to his email software. But you know what ? When he did get to it, it worked.
I am at the point, that I am using Linux for 5 years now, and I will never install Windows on a friend's computer. However, I feel that Linux apps really annoy me sometimes. And this week, I just discovered it again, while downloading a PDF with FORMS, which only worked with ADOBE READER for Linux. Evince and Okular the two leading FOSS PDF readers just failed to fill the forms and save the document. Now you can tell me, I can open bugs - which I did (2 and 3 years ago) and they are still not attended, because like I said, the BAR and Desktop effects are more important. Of course, I can role my sleeves up, and put some effort and code it. But at the same time, I can just apt-get ADOBE Reader from Debian's non-free repository.
I hate that last option, and I wish it was the other way. So if some one in GNOME or KDE reads this post, please, forgot about stupid stuff like the SHELL or PLASMOIDS, we don't care about that crap. We want applications that can do more, for less memory, and for less CPU, that will be stable, and have more features than their WINDOWS counters. And then people will come.
This is also trough, not just for PDF reader, but to ALL KINDS of commercial software which abundant for WINDOWS but lack for Linux. The gaming industry has picked it up, and the picture is starting to change. Next I hope to see CAx software, accounting and banking, medical software and more. When these will come, it won't mater if Linux will have Plasmoids or Unity or the SHELL.
Want a Proof ? Look at MacOS, although it is a FAR better operating system then WINDOWS, it stayed always in a niche. Why ? Because Apple played close, and developers did not develop commercial apps to it, compared to the amount of apps available for Windows. Of course, commercial, does not have to be closed source. On the contrary, commercial should be open too.
But that is for another post.
I'll sum up, forgot the decorative stuff like SHELL, PLASMOIDS or UNITY. Give us better applications, better than WINDOWS, and people will rush to LINUX.


Sunday, April 17, 2011

Calcurse, a compact Linux organizer, now with encryption ...

I bumped into calcurse a while ago, but I didn't take the use of it seriously. When I started using it, I was also using Gnome's Evolution. But than, times changed, and I didn't need a calender anymore, so I gradually quit using Evolution. When two weeks ago I decide to organize my life on the computer again, I decided I would like to have a portable application I could carry on a USB stick. There was calcurse, which produces a very compact executable which I can carry around. Since it uses plain text files which are easily editable, I can also edit them on other operating systems without any problem.
So there you have it. A small great lightweight calendar application: Calcurse !

As a bonus to myself I decided to play with the idea, that I would like to encrypt the data I have on my disk on key, since it is possible that I loose my USB with lots of customers private data. So I wrote the following script, which launches the binary from the USB, decrypts the data folder, and then upon closing Calcurse would archive the data directory, encrypt it, and move it back to the USB.

Notice the following things:
1. I use OpenSSL, this is probably lame, and I should use GPG key.
2. You have to do a few steps manually before you can use the script, you will find them in
the body of the script below as comments.




#!/bin/bash

# ENCRYPTCALCURSE.SH

# Written by Oz Nahum 
# This script is distributed under the terms of the GNU Public License 
# Version 3 or later.
# You can obtaion copies of this license at:
# http://www.gnu.org/licenses/gpl.html

# A script to decrypt the calcurse_date dir, open it in 
# /home//calcurse_data
# then launch calcurse pointing to it, 
# and upon closing calcurse, encrypt the data, move it to usb stick, 
# and delete all data from /home//calcurse_data

# these commands needs to be run manually at first
# 1. make calcurse files only readable by owner
# $ chmod -vR 600 calcurse_data
# 2. creat a tar archive of the data:
# $ tar -cf calcurse_data.tar calcurse_data
# 3. encrypt the archive:
# $ openssl aes-256-cbc -salt -in calcurse_data.tar -out calcurse_d.tar.enc
# 4. copy calcurse binary from your system to the USB key
# $ cp -v `which calcurse` 
# 5. copy the encrypted archive to the USB
# $ cp -v calcurse_d.tar.enc 
# 6. finally, copy the script itself to your USB, and launch:
# $ bash encryptCalcurse.sh

### Begin of Script
#make files readable only by owner
umask 077
trap "find /dev/shm/calcurse_data -type f | xargs shred -fuz;
      shred -u -n 3 -z /dev/shm/calcurse_data_tmp.tar
     " SIGHUP SIGINT SIGQUIT SIGABRT SIGKILL SIGTERM
# first decrypt the data:
openssl enc -d -aes-256-cbc -salt -in calcurse_d.tar.enc -out /dev/shm/calcurse_data_tmp.tar

echo "extracting data"
#silently extract data, no need for verbose output (v flag)
tar -C /dev/shm -xf /dev/shm/calcurse_data_tmp.tar
echo "removing temporary data"
#remvoe the temporary archive
shred  -u -n 3 -z /dev/shm/calcurse_data_tmp.tar
sleep 3
#launce calcurse
calcurse -D /dev/shm/calcurse_data
# when calcurse is done tar the direcotry

tar -cf /dev/shm/calcurse_data_tmp.tar -C /dev/shm calcurse_data
#tar -cf calcurse_data_tmp.tar calcurse_data/

# then encrypt
#if encryption failed $? == 1 so repeat it again ...
openssl aes-256-cbc -salt -in /dev/shm/calcurse_data_tmp.tar -out calcurse_d.tar.enc
es=$?
while [ "$es" = "1" ]; do 
    echo "encrypting data"
    openssl aes-256-cbc -salt -in /dev/shm/calcurse_data_tmp.tar -out calcurse_d.tar.enc
    es=$?    
done
#if encryption succeeded remove the tar file
find /dev/shm/calcurse_data -type f | xargs shred -u -n 3 -z 

rm -rf /dev/shm/calcurse_data
shred -u -n 3 -z /dev/shm/calcurse_data_tmp.tar
#copy the encrypted file back to the USB
#mv ~/calcurse_d.tar.enc .

#note about the salt option note found in openssl man page[1],[2]
#note about lack of compresion with ssl [3]

#sources:
#[1]http://ubuntuforums.org/showpost.php?p=8287351&postcount=9
#[2]http://linux.die.net/man/1/enc
#[3]http://serverfault.com/questions/17855/can-i-compr:ess-an-encrypted-file

Friday, April 15, 2011

Stripping EOL from output in BASH

Sometimes you have to text process the output of many chained commands, e.g. bash command to list all dev package in Debian. The results are usually outputted with "\n", e.g.

output1
output2
output3
output4
If the list is long enough your screen will scroll, and it will be hard to control the output without less. A solution is to strip the EOL marks with echo, for example compare:
getent passwd | cut -f 1 -d ":"
to:
echo $(getent passwd | cut -f 1 -d ":")