Harsh J

Memoirs of a QWERTY Keyboard

Archive for the ‘Programming’ tag

Sorting entries in a QStringList Case-insensitively

4 comments

This post is simply a snippet-post for the users of Nokia’s Qt C++ cross-platform toolkit.

While writing some C++ code (after 2 long years since I last wrote them for academic reasons), I had this simple issue of sorting a QStringList in a case-insensitive manner. Normally, there exists a QStringList::sort() function that does the sorting of the strings stored in it in a case-sensitive manner, and is very fast at it. But Qt does not provide a way to perform the sort in a non case-sensitive manner, although it has hints on how to in the class’ documentation.

Being mostly a PyQt/PySide user who uses inbuilt Python lists to do all list-work, here’s how its apparently done in Qt/C++, using a QtCore class called QMap:

#include <QtCore/QStringList>
#include <QtCore/QMap>

void sortNonCaseSensitive( QStringList &sList ) {
    ///  Sorts the passed sList non-case-sensitively.
    ///  (Preserves the cases! Just doesn't use them
    ///  while sorting.)
    QMap<QString, QString> strMap;
    foreach ( QString str, sList ) {
        strMap.insert( str.toLower(), str );
    }
    sList = strMap.values();
}

That’s it.

Written by Harsh

October 24th, 2009 at 10:54 pm

Color Hot-Tracking in Smooth Tasks Plasmoid

3 comments

Polishing your K Desktop never seems to stop. First its the Desktop appearances, the plethora of widgets available to choose and use from for the desktop and the taskbar, the hilighting schemes in Kate/KWrite, it keeps going on. Maybe a bad thing – you never settle.

I was trying out the kde-extragear-plasmoids AUR package yesterday on my ArchLinux’s plain KDE installation and I came across this wonderful plasmoid known as Smooth Tasks. While nothing innovative in itself, its a simple plasmoid that apes the Windows 7 taskbar. Provides icon views of the applications running and allows peeking into them when hovered upon, and if grouped – lets you switch using the previews. I’ll leave the screenshots to do the rest of explanation.

What I liked most about Windows 7 is its ability to color the hover-glow on the icons in the taskbar based on the average computed color of the icon itself. This feature, as explained by Long Zheng, “delivers some sentimental value by making it easy to identify applications by color.” I completely agree with that point. However, Smooth Tasks missed this feature, and the built in light feature didn’t move entirely with the mouse pointer as well.

I cloned the code today to add, at least an initial working version, the color hot-tracking to Smooth Tasks and it was done by the afternoon. I’ve pushed the changes to the Smooth Tasks fork over at Bitbucket (which is a great site, by the way) and the image below describes how the initial work looks like. Notice the soft color glow. Here are some more pictures, with other icons.

Color Hot-tracking in Smooth Tasks on KDE

Color Hot-tracking in Smooth Tasks on KDE

Now all I’ve to figure out is a way to enhance the glow or another component of the effect to give it a more polished look. Windows 7 also colors the border of the taskbar item with the average color but that’s not possible with the way the KDE’s glow around items work, as far as I know. Please let me know if am wrong.

You need to a flashplayer enabled browser to view this YouTube video

Written by Harsh

October 10th, 2009 at 1:25 pm

Install Python Packages locally

8 comments

There’s a great feature in Python versions 2.6 and up that I hardly see being used; it’s the ability to install modules and packages in a per-user local directory. I like this feature since it doesn’t have any super-user power requirements and lets me install packages, modules and even scripts in my own Home directory and use it just as normally as the other global files.

To do so, one must first create the local site-packages directory, and then place the required package or module file or folder under it. The following commands are all for UNIX. ~/ expands to the user’s $HOME automatically.

# To create the required directory
mkdir -p ~/.local/lib/python2.6/site-packages

Now place the module or package folder under this directory, or link to it for achieving the same installation effect as you would with a global site-packages directory. For example, for my django copy from svn I’d do:

ln -s ~/.django-svn/django-trunk/django ~/.local/lib/python2.6/site-packages/django

Running the Python interpreter (in the same user account) will show this working:

Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 

So there you have it, when you want a package just for your user account while developing just put it under the local site-packages directory. Python automatically adds this to its path (PYTHONPATH).

References: PEP 370 (Has notes for OS X and Windows users)

Written by Harsh

May 21st, 2009 at 11:00 am

Posted in Linux,Software

Tagged with ,

Clearing all log files in /var/log

leave a comment

Stupid things you end up writing when you worry about filling disk spaces at 3 AM in the morning of the day right before your exams begin. The following will delete all your log files in a safe manner, by simply rewriting them to null.

cd /var/log
for file in `find .`
do
	if [ -f $file ];
	then
		cat /dev/null > $file
	fi
done

Suggest better methods if known, and thank you!

Optionally, get in there and delete those now-stagnant .gz files with the following:

find /var/log -name "*.gz" | xargs rm

P.s. So much for BS code highlight plugins printing angled brackets in HTML notations when asked to do bash.

Written by Harsh

May 19th, 2009 at 3:31 am

Posted in Blog,Linux,Personal

Tagged with , ,

PyQt – Signals, Slots and Layouts Tutorial

18 comments

Note: If you’re new to using PyQt but are interested in great cross-platform GUI application development please read the PyQt Introduction article.

Having seen how a simple PyQt application code looks, let’s delve into user-interaction. We’ll learn about Qt’s signal-to-slot connection model for processing input and other events, and layouts for proper placement of widgets on a window.

The PyQt Class Hierarchy

PyQt is completely built upon the Object-Oriented concepts, so it is important to understand how all classes are related to each other in it.

Almost all GUI classes extend upon their Abstract class which defines common behaviour for similar widgets. These abstract classes, or any widget class, inherit QWidget, the base class of all drawable GUI components. QWidget inherits QObject, a class that has nothing to do with GUI but forms the base class of every PyQt class and helps provide the framework-related features.

The following hierarchy diagram depicts this clearly for the QPushButton class:

The QPushButton Class Hierarchy

The QPushButton Class Hierarchy

The QPaintDevice class helps draw (or paint) things on the screen, thus its also used with anything that’s drawable – We’ll learn more about Painting in a later article.

References: QWidget
Read the rest of this entry »

Written by Harsh

May 14th, 2009 at 11:37 am

Posted in Software

Tagged with , , , , ,