View posts for Author Frane

After three months of KDE 4

I’m quite happy with the new KDE release. It’s well structured, the applications are redisigned and simplified and the unsability has done a big step up the ladder.
BUT I still miss some basic functions from the old 3.5 version, some applications crash unexpectedly and the probably most annoying thing for me: the lack real desktop icons. The “Folder View” desklet which is intended to replace teh classical desktop icons is not a really good replacement. I’m looking forward to the next major release of KDE, namely 4.2, which is announced for January 2009. I will bring a lot of new and old features back to KDE. Most notably it will bring back the good old desktop icons!

Sorry, comments are closed for this post.

Back from vacation

I’ve been the last five weeks in Croatia on vacation. I had great time there as every year and I’m looking forward to my next vacation there in the next summer.

Sorry, comments are closed for this post.

How to download videos from YouTube

YouTube is the world’s #1 source for more or less funny or interesting videos. Unfortunately YouTube does not offer any options to download the videos from their site. YouTube even hides the direct links to their video resources. Even though it’s quite easy to find a download link for the real .flv videos:

  • Just go to the site where your desired video is i.e. http://de.youtube.com/watch?v=-xEzGIuY7kw .
  • View the source code of the site and search for a section that starts with “swfArgs”.
  • From this section you need the values for “video_id” and “t” (i.e. “video_id”: “dsfaAfdaAfs” and “t”: “sdfkljasldfjlkasflshdfjaiosjjsknfjkhJhjdf”)
  • With these values you should be able to call “http://www.youtube.com/get_video.php?video_id=<your video_id value>&t=<your t vlaue>” and to download your desired video.

I’ve made a little shell script for Linux and Mac that does all the searching stuff for me and that returns the url to the video source.

#!/bin/sh

if [ $1 == "" ]; then echo -e "$0: No URL specified\nUsage: $0 <url>\n"; exit 1; fi

which curl > /dev/null
if [ "$?" == 0 ]; then GET_COMMAND=curl
else
  which wget > /dev/null
  if [ "$?" == 0 ]; then echo "Didn't find curl nor wget. Exiting."; exit 1;
  else
    GET_COMMAND=wget -O ytf| cat ytf; rm ytf;
  fi
fi

# Use GNU version of sed on Darwin/OS X
if [ `uname -s` == "Darwin" ]; then SED=gsed;
else SED=sed; fi

RELEVANT_DATA=`$GET_COMMAND $1 | grep 'swfArgs' | $SED 's/,/\n/g'`
VIDEO_ID=`echo "$RELEVANT_DATA" | grep 'video_id' | $SED 's/"//g' | $SED 's/ //g' | $SED 's/:/=/g'`
T=`echo "$RELEVANT_DATA" | grep 't"' | $SED 's/"//g' | $SED 's/ //g' | $SED 's/:/=/g'`

LINK="http://www.youtube.com/get_video.php?$VIDEO_ID&$T"

if [ "$VIDEO_ID" != "" ] && [ "$T" != "" ]; then echo $LINK; exit 0;
else echo "Couldn't retrieve the needed data from the specified URL."; exit 1;
fi

To run the script correctly the GNU version of “sed” is needed.

Sorry, comments are closed for this post.

Qt4.4 for beginners

Quite some time ago I have worked with Qt3 and C++ to do some Linux projects. I had taken a look on GTK and wxWidgets too, but I felt most comfortable with Qt.

Now I had to build small program that was able to play a list of audio files and to give the user an option to rate these files. It’s a quite simple little program which for some reasons is needed to be written in C++.

So I installed Qt4.4 and started Qt’s Designer. I spent half an hour searching the source code editor in Designer. After five minutes with Google I found out that one “feature” of Qt4 was the complete separation of GUI code and logic code, so I had to work a slightly different way from what I was familiar with. Though I never used Qt’s Designer that way (usually I coded the whole GUI stuff by hand or used Designer’s built-in source code editor), I started “designing” my GUI. After I was finished I saved the file as “MainWindow.ui” (I know it’s not a smart name but I don’t care). So, what now? There were no other files and the Designer wasn’t able to produce any other files. The answer: qmake! qmake is some kind of Qt’s own make, which is not intended to replace make, but to give you a smart ability to handle *.ui and other Qt related files. One just needs to create a file named somefile.pro and add something like the following code to it:

HEADERS += MainWindow.h #as my ui file is MainWindow.ui
FORMS += MainWindow.ui # my ui file created by Qt Designer
SOURCES  += main.cpp MainWindow.cpp

This should be enough for a valid and working .pro file. Now there are three new file mentioned in the .pro file which are not existing yet. So where do we get these files from? We just create them ourselves. Let’s start with the main.cpp. It’s intended to be – guess what… So, what does it look like:

#include "MainWindow.h" // to integrate my MainWindow class from created by the Designer.
int main(int argc, char *argv[])
{
  QApplication app(argc, argv);
  MainWindow *window = new MainWindow;  //create an instance of our window
  window->show();                       // show our window
  return app.exec();
}

Curious about what the MainWindow.h file is needed and used for?

#ifnedf MAINWINDOW_H
#define MAINWINDOW_H
#include "ui_MainWindow.h"
class MainWindow : public QMainWindow, private Ui::MainWindow
{
  Q_OBJECT
  public:
  MainWindow(QWidget *parent = 0);
};
#endif

First of all one has to understand where the “ui_mainWindow.h” comes from. It’s automatically generated by qmake when you call it. qmake simply generates C++ code out of the XML-ui file. Your can call qmake right now it should generate an “ui_MainWindow.h” file and a Makefile which will be called later. Another alternative to generating “ui_MainWindow.h” is to call the command

uic -o ui_MainWindow.h MainWindow.ui

qmake itself calls uic to get the “ui_MainWindow.h”. Now if you take a look at the “ui_MainWindow.h” you’ll see that it contains pure C++ code calling the different Qt classes to draw the GUI. With “class MainWindow : public QMainWindow, private Ui::MainWindow” in MainWindow.h we inherit the Ui::MainWindow class produced by uic and are able to define our methods, attributes an so on… Now it’s time to create our MainWindow.cpp. This file is also pretty simple but important.

#include "MainWindow.h"
MainWindow::MainWindow(QWidget *parent) {
  setupUi(this);
}

By calling setupUi in the constructor, the GUI elements, which were added to the interface with the Designer, are painted the first time. You can comment the setupUi line out and see what’s happening. After all of these steps we’re finally finished… or let’s say nearly finished. If you have followed all these steps carefully you should call

make

to process the Makefile previously created by qmake. Note: If you use Qt/Aqua on MacOS X, the qmake will produce a something.xcodeproj file/directory instead of a Makefile. To build your foo.app you’ll need to call xcodebuild instead of make.

If you get some errors while building your app, you’re on your own. I’m done for now ;-). If you need more information on Qt then take a look at http://doc.trolltech.com/4.4/index.html . But you’re also free to comment or ask to me ;-).

1 Comment

Just to kick myself…

Huh… I’ve launched this blog two months ago and I have written… NOTHING! Yes I’m still alive and I’ve been busy. But being busy is not a reasonable excuse for writing nothing for two months!

OK. I promise I’ll write some interesting things in the following few days. I’ve got some interesting things I’ve done and now I’m going to write them down.

So… Stay tuned!

2 Comments

Hello world!

So, finally I’ve got my blog installed, up and ready! I’ve been planning to set up a blog for nearly three years and now I finally took some time for myself, created a nice theme and installed the whole thing. A pretty simple process which took three years to be done ;-).

Since this is my first blog, I don’t really know how active I’m going to be, what kind of blogger I am and what I’m going to post here. I think we’ll see with my next posts (and the intervals in which they’ll be posted) if this page is worth to read or not.

I know, that nobody will read this when I publish it, but if you find this on Google or my blog maybe gets popular one day and you’re researching my blog-archives: this is it, my first post.

Have fun, Frane

PS: I know, this post wasn’t very personal. If you want to know who I am and what I do then take a look at my about-page.

1 Comment