Category: Uncategorized

  • Messing with the Skype 4.0 database

    Beginning with version 4.0 Skype changed its internal database format to SQLite (at least the Windows-client, could not yet check other platforms). Besides from better performance it also allows now any curious person to dig a bit into the internals of the local Skype account.

    At first, you need a SQLite client to connect to the database. [SQLite Database Browser][1] is a good choice for this purpose. Then you need to open the Skype database in it. Shut down Skype (you won’t be able to open the file otherwise) and load the file main.db from your **Documents and Settings

    Application DataSkype** directory. You can browse around in the database structure, have a look into the tables contents and even use a SQL editor to query the database. That’s what we’re going to need. Now the fun begins 🙂 In the following statements replace the values in angle brackets eg. * * with the appropiate correct values. Let’s assume, you want to display all messages you exchanged with someone. Beware, that this only works gets the messages you exchanged in a private chat with someone and does not work on chats with more than two participants (you included). SELECT author, timestamp, body_xml FROM messages WHERE dialog_partner = ‘ ‘ Or you want to list all chats, where there have ever been more than you and your chat-partner. So to list all group-chats: SELECT name, participants, posters, activemembers, last_change FROM chats WHERE type = 4 You could also be interested in all previous topics which were set on your group chat: SELECT chatname, timestamp, body_xml FROM messages WHERE chatmsg_type = 5 AND chatname = — get names from the previous query By now you should have recognized, that the timestamps and change-values are not really readable dates in the database. Don’t worry, it’s not encrypted. Its just stored as plain Unix timestamp values. You can easily convert it to a readable time and date using for example the online [UNIX Timestamp To Standard Time Calculator][2] When we’re already with timestamps, you maybe also want to know when someone has also been online the last time when you have been online as well: SELECT skypename, given_displayname, lastonline_timestamp FROM contacts So far we have fetched some interesting information from the database. But now we want to leverage our l33tness a bit and modify our mood message in our profile to include some rich formatting: UPDATE accounts SET profile_timestamp = current_timestamp, rich_mood_text = ‘I feel bold now.’ WHERE skypename = ‘ ‘ Don’t forget to save your database afterwards! This statement updates the profile-timestamp with the current time and adds some rich formatting to our mood message. In this case there is some **bold** text inside. You can look up some more possibilities (like smileys, font coloring, etc.) directly in the [Skype API Documentation][3] ([from][4]). Additionally I’ve found out, that using hyperlinks with the -tag works as well as modifying font-size with the *size*-attribute of the -tag. **Update 2010-02-14:** Meanwhile you can edit your mood-message more easily using my [online Skype mood message editor][5]. You can also delete the chat-history of only certain skype-contacts using the following statement DELETE FROM messages WHERE skypename = ‘ ‘ Again, don’t forget to save your changes afterwards. **Update 2010-10-29:** Skype has dropped the support for “/htmlhistory” since Skype 4.0. An alternate way to get all the messages for a chat is: SELECT timestamp, author, chatmsg_type, body_xml FROM messages WHERE chatname = ‘ ‘ ORDER BY id ASC; You can find out the name of a chat when you write the command “[/showname][6]” in its chat-window. I’ll continue to play around with the database and if I find more interesting stuff, I’ll keep this posting updated. Or I’ll write a new one depending on what I dig up 🙂 [1]: http://sourceforge.net/projects/sqlitebrowser/ “SQLite Database Browser” [2]: http://www.csgnetwork.com/unixds2timecalc.html “Timestamp To Standard Time Calculator” [3]: https://developer.skype.com/Docs/ApiDoc/SET_PROFILE_RICH_MOOD_TEXT “Skype ApiDoc SET_PROFILE_RICH_MOOD_TEXT” [4]: http://forum.skype.com/index.php?s=&showtopic=260131&view=findpost&p=1160831 “Skype4Py” [5]: http://kosi2801.freepgs.com/skype/change-your-skype-mood-message-using-rich-formatting.html “Online Skype Mood Message Editor with Rich Formatting” [6]: http://kosi2801.freepgs.com/2010/10/29/more_mysterious_skype_chat_commands.html “More mysterious Skype chat commands”
  • Levavi

    Today is Levavi, the first Sunday of Advent. In Christianity it is tradition that on this day you light up the first candle on your Advent wreath. I do not know much about the background of this time, just that it’s the period of four Sundays leading up to the birth of Jesus of Nazareth.

    Nevertheless, to light up a candle on a wreath you have to have a wreath at all. Last year I decided, that I did not want one of those off-the-shelf wrathes on my table. I thought a lot about how I’d like my wrath to be and look like and what I needed for building it myself. Eventually I ended up in a market garden where I explained my ideas and wishes to one of the gardeners there and told them which of the parts i their store I’d like to have used. After roughly half an hour I held a wreath in my hands which looked astonishingly similar to what I imagined before. Just for this reason alone I was happy to pay the hefty price tag. But it was softened by the knowledge, that a lot of the parts on it were reusable and that’s what I did this year.

    Yesterday I went shopping for candles and some branches. Candles were found fast but there were no tree-branches I liked so I decided to get some from the woods around my home. The better part of the afternoon was then filled with tinkering and building of the Advent wreath using imagination, the parts from last years wreath and hot glue. Altough it did not end up exactly as in my imagination, I think it’s still quite nice 🙂


  • OpenOffice Impress and the Sun Presenter Console

    Altough my last presentation at the university went not very well I’d like to mention one fine piece of software which makes presentations a lot easier for the one standing in the front of the crowd (and without I would not have had a bad but catastrophic presentation).

    The Sun Presenter Console is a plugin for Impress which adds functionality to the presentation application similar to the PowerPoint Presenter view. In fact this means, that if you have turned on multi-monitor support and are running a presentation with a projector it enables you to run the presentation as you know it on the presenter and have a completely different view on the presentation on your computers screen. This "Presenter Console" has a smaller view on the current slide, a lookahead of the upcoming slide, (depending on the configuration) a view of the notes-area for each slide, a small timer which shows the running-time of the presentation and last/next-controls.

    Altough the info on the download mentions this plugin to be compatible with OpenOffice 3.0 it works flawlessly on my OpenOffice 3.1. Just make sure, that you have the presenter connected to your computer or laptop and set up the correct presentation screen in the settings for the screen presentation.

  • Some bits of fitness

    Over the last three weeks I’ve started again with performing some exercises. I’m doing this because on the one hand I want to strengthen my torso muscles to avoid problems with my spine again as I had in the past. On the other hand I want to raise my overall fitness and condition and to be honest I also hope that it changes my metabolism a bit so that I gain a bit more weight.

    For now I chose the number of pushups I’m able to perform in a row as a quick indicator of my progress. When I started about three weeks ago my limit was 20 maximum leaving me quite exhausted for some minutes. Two days ago I’ve been at 30 maximum but not as exhausted as in the beginning, just with the need for faster breathing now. I’m a bit surprised by this fast improvement.

    I’m not planning to make any investments in sports gear for now as I think it should be possible to work out without special equipment at the current level where I rate myself. But I had a quick chat with a classmate about it who is a bit more serious about training and I try to follow his tips.

    I also returned to the Badminton field with work-colleagues two weeks ago and we’re aiming to keep it a fixed event every week. Maybe I can also return to the Sunday-event with another classmate. But since my last exercise with her, where I damaged my ankle, is already quite a bit in the past and my position has most probably been filled by a replacement player, my hopes are currently not too high for this.

  • Second help-yourself evening

    Yesterday we had our second evening where we tried to cope with the teaching weaknesses of our lecturer. Since we already repeated the theoretical basics last time this instalment was mainly about diving in the code and trying to solve the different parts of the exercise.

    For me this went not too well this time because we were stuck on an algorithm and altough I already had all puzzle parts of the solution in my head I couldn’t put it together for a complete result. At least not in C code. I tried different styles of visualisation and drawings to sort my thoughts and wade through the logic but in the end one of my colleagues found a pseudocode solution on StackOverflow.com which we could use almost 1:1. And it showed me two things. Firstly I saw, that I’ve been already on the right track. And secondly it showed me the power of high-level languages. I mean I’m quite sure that a few years ago, when I still was working full-time on C/C++-code I could have solved this problem without much thought. But the comforts of high-level languages, all their frameworks and idioms, are so tailored to object-oriented solutions and splitting up the problems in small pieces that I’m not used to picking up so many different loose ends of a problem at once and combining them anymore. I’m very aware of the technological basics but I’m just not used to working at such a low level anymore.

    I don’t know if this is a good thing or not. On the one hand abstraction and frameworks make difficult problems easy to tackle with and one becomes more productive. But if those frameworks and abstractions are pulled away, many people (and now also including me) would have serious issues coming up with a solution. They know the theoretical path to finish the work but cannot translate it into actual code.On the other hand if there is hardware involved somewhere low level code has to be created to access the input/output and manage the data. On this level people are used to solving many problems by hand, over and over, just because they cannot use ready-made frameworks out of performance or space-constraints. But these people are unused to solving problems which span several logic units or business layers and I’m quite sure that most of them would struggle the same way if they would have to solve an abstract business-problem with workflows, rulebooks and similar frameworks.

  • Repartitioning relief

    Woke up, checked the computer, repartitioning finished. Total time: a bit over 10 hours.

    Whew….

  • Repartitioning worries

    This late afternoon I decided to do a bit of re-partitioning on my large external harddisk and make some more room on the FAT32-partition to make the data on it (mostly recorded broadcast videos) available for my LCD TV which only accepts FAT32 partitions.

    Everything went well in the beginning, the large 800GB partition was shrinked within two hours (yes, it takes a bit over USB) and the moving of the following partitions took only a few minutes more. But the enlargement of the FAT32 partition from 100 to 300GB is now already taking about six hours and I am getting a bit nervous…

    I’ll let it run overnight now and hope that it’ll be finished in the morning. But I don’t know how I should proceed, if it’s still busy when I get up.

  • If you need help, help yourself

    Last time I ranted about one lecture where the lecturer is completely unable to bring the content of his lecture across. Nevertheless we have an exercise to work on and a goal to reach, even if most of us have not the slightest clue what it’s all about.

    As I’ve been developing in these areas already for more than 10 years (see the old rants in my blog from time to time), there isn’t much of new content for me in this lecture and I’m pretty confident of my knowledge there. That’s also the reason why it upsets me every time in his lecture how incompetent this knowledge can be presented. I tried a few times to unobtrusively help him out with "explainative" questions to enforce simple answers and help my classmates with understanding. But that’s very hard to do all the time and I think he already set me on his personal do-not-like-list.

    So we set up a private lecture event within our class a few days ago where I tried to recap everything from the beginning for my classmates and leave out all of the stuff we didn’t need for understanding the basics and accomplishing the goals of the lecture (eg. how a parser/lexer framework works to process commandline commands). In the end I repeated all of the content in roughly one-and-a-half hours which were presented by our lecturer in more than ten hours. The only difference was that, according to my colleagues, it was presented in a way which was understandable. If it really turned out that way, I’m very happy with that. Of course I hope that my classmates were honest to me…

    Events like these always turn my mind to thoughts if I should really consider to get active in the educational sector. Of course, as long as I’m in education myself, there’s no way to do something like that aside from tiny parts within my class itself. But it’ll surely stay in the back of my head for the future…

  • Worthless lectures continued

    In the last semester we had one lecture where we leared lots of stuff except the things the lecture was intended for. Eventually we managed to get through and we thought that this was just an exception to the common way of teaching here.

    Well, we were wrong. This semester there is another lecture where the curriculum is quite clear about what to learn in the exercises but instead our lecturer now tries to teach us all the stuff around these core knowledges which we don’t really need but are time-intense and complicated anyway.

    What adds to the problem is, that all this stuff is not in the programming languages we’ve learned so far but in another one (C). Therefore it adds anoter level of complexity.

    I hope somehow that we’ll find a way through this lecture…

  • Let it snow, let it snow, let it snow…

    Since it’s already time again for a new post and I have currently nothing interesting at hand, I’d like to just let you know that now it’s the first day in this winter where water in its frozen aggregate state is falling from above (formulated that way to justify that I’ve been called ‘nerd’ quite often in the past few days :P)

    In other news, the first iteration of our project for the university has now passed and from my perspective it went extremely well. The teams performed quite good, there haven’t been any notable problems and in the end all our goals for this iteration have been met. For the upcoming iteration our lecturer already announced that he wants to distribute the work differently to enforce more conflicts between the teams as he already intended for this first iteration.

    But I think our approach to keep the teams in their own "area" at the beginning to let them get comfortable with the development environment, the development style and organization of the project is better for us. That way the less experienced learn how a project can run if there aren’t any large obstacles to overcome and aren’t demotivated too early in the project. Later on, when they’re already up to speed with the development they can be faced with other new aspects of project work like conflicting changes and more intense synchronization between the teams.