Results tagged “Development”

Quite a while ago I compiled a list of Skype chat commands from the ones available in the Skype help as well as from various sources all across the Internet. Later on I got curious and decided to inspect Skype a bit more in depth and I was able to retrieve another list of hidden or mysterious Skype commands from the application.

I have been asked a few times how I did that and I thought maybe it would also be interesting for some who didn't ask and compiled a short step-by-step guide how I extracted the list of commands from Skype which were (at that time) documented or known nowhere else. Maybe it's also interesting and applicable to inspect other applications but I'll concentrate on Skype in this posting. The process is pretty much the same for most other applications.

Tools

For the analysis of Skype there are only two tools needed:

  • Process Explorer - the #1 tool for working with all running processes on your Windows machine. Part of the excellent Sysinternals Suite written by Mark Russinovich. No installation required.
  • Notepad++ or any other texteditor of your choice which can handle really large textfiles and search efficiently in them.

Analysis Steps

For a short summary that's a rough overview how I inspected Skype: loaded up Skype normally, dumped it's memory image (or better: string extract) with Process Explorer and did a manual search for command-like strings in the dump. The detailled process is as follows:

  1. start up Skype normally
  2. start up Process Explorer, confirm first-time dialogs etc. until you see the process overview
    From Skype Memory Analysis
  3. locate "Skype.exe" in the process list and double click it
  4. switch to the "Strings" tab in the occouring process window (could take a few seconds)
  5. select the "Memory" option on the left bottom of the window (could take again a few seconds to complete)
    From Skype Memory Analysis
  6. save the strings dump to a textfile via the "Save" button on the right bottom of the window
  7. load the resulting textfile in the text editor (Notepad++ in my case)
  8. search for one of the already well known commands (e.g. "/help")
    From Skype Memory Analysis

Now you should be in a region of the file where several commands are visible. Looking for additional commands is merely a try&error of the strings around that location and observing possible effects. The same approach can be used for in-text replacements like smilies, flags or similar. From that on things get pretty inconvenient. Some of the commands or usable strings are clearly identifyable as such (like "/help") but not all of them are prepended with a "/". Examples for such are the flag-identifiers ( eg: (flag:uk) ) or the smilies. Looking for such strings in a file with more than 400k lines becomes pretty tedious after a while. But using some of the known strings as anchor points makes it a bit easier.

So, all in all that's how I approached the Skype app and found out about (up to that point) aparently unknown and undocumented commands, icons and shortcuts. Maybe I'll make a run again sometime and look if something as changed but for that there has to be a chunk of spare time available.

| | Comments (1)

I finally received my Raspberry Pi which I've ordered in the first quarter of this year. It's an interesting piece of hardware and even smaller than I expected.

Sadly I'm still unable to spend more time with this. I just took some nights and compiled OpenELEC and put it on a newly purchased class-6 SD card to boot. I chose a self-compiled OpenELEC because initially I only had a 1GB card available and it seems that there is no precompiled image available which fits on cards smaller than 2GB. (In the meanwhile I've purchased some additional cards with reasonable sizes.)

It took some attempts for me to be able to control the XBMC media center on my flatscreen TV but on the second day I've been successful to play some HD videos from the little gadget. The issues I had to deal with were

  • a dependency error in the OpenELEC sources (should be fixed by now)
  • unexpected long build duration on my machine
  • correctly partitioning the SD card manually, configuring the boot-parameters file
  • me not recognizing that the TV should be set to HDMI before turning on the Pi

But these were already all of the issues and since development for the Raspberry Pi is extremely fast I expect things to become faster and easier day by day. And this is currently just for my goal of getting a media center up and running, I wonder what will be possible when developers are going to put these GPIO pins into top gear...

|

For some time now (about 8 months) I've been working at projects where we had to set up a CMS for managing contents of websites. This had been the first contact of our team with this specific technology and although we had some help we had to dig up the internals and methods of creating a CMS infrastructure almost solely by ourselves.

At some point of these projects we felt the need that we should not reinvent the wheels over and over but utilize already gained knowledge in that area and looked for design- or implementation guides how to design your CMS structure in ways so that the later users of your pages "have an easy life" while managing their content.

To give a bit more background on it to make it clearer:

  • we're working with RedDot/OpenText CMS
  • we create the overall structure of the website, not the actual content
  • we also set up an area, where (at a later time) editors enter and manage the actual content of the webpage

And the last two points are the area which caused us some headache. How should we implement the structure of the webpage and set up the administrative areas so that it's easy for the editors to maintain the actual content? Are there any guidelines how to design the implementations so that if editors complain about something we can fix the structure/process without having to overhaul the complete website?

Searching through the Internet I've found a bunch of pages on how to design a CMS system itself, but none of them covered my questions...

|

Some time ago I stumbled over a neat trick in programming languages which understand C++-like comment lines (single- and multi-lined comments). This allows toggling between two different blocks of code by just adding or removing a simple '/' character in the first line.

    /*  <<- Add/remove one '/' here to toggle active code block
    String mode = "release";
    /*/
    String mode = "debug";
    //*/

I found this somewhere on Stackoverflow.com but couldn't locate the article containing this again. I found a reference to this here but I guess this trick is much, much older than this article.

|

Every now and then the well known and never-ending discussion of the "best" programming language comes up. Often this drifts into the direction where people compare specific language capabilities and features and how specific problems can be solved so much easier than in the other language(s).

When I'm caught in such a discussion people often assume that I'm a Java evangelist. But I always try to make clear, that I try to focus on solutions and problems rather than Java features. It's just that when I need to make examples, I use Java because it is currently the language which I know best. This doesn't mean that Java is the best language for the job.

I always try to make clear that I think that different languages always have a specific goal or type of problem which they can handle better than other programming languages. Take for example C/C++ for creating fast and efficient binaries, Perl for excellent handling of large quantities of strings, Shell scripts for quick automation of system management activities, PHP for fast creating dynamic web content, and so on... Of course I know that every of these exercises can be solved with almost every other language as well but the difference is, how fast and understandable the result can be produced. Creating a webserver with shellscripts is possible but I certainly wouldn't try it.

So, once and for all: I think almost any language has its area of excellence and there is no such distinction like a better or worse language. ie. Java is not better than C# nor the other way round.

Of course, if there hast to be a decision made on choosing a language this decision cannot be solely based on which language would be the best for the present problems. One has also to take into account, which languages are known by the developers and how well they know them. Furthermore one has also to be aware that available frameworks for languages often can change the capabilities of languages and how this language can be applied to certain types of problems.

|

Ok, now it seems to be almost sure, that our database developer can stay with us.

I'm glad for that, because now we don't loose the time where I have to become familiar with PL/SQL and our DB schemes and learn Oracle Database Administration.

Instead we can continue our product development with full throotle.

One regression though, I doubt that the new team member I tried to train before I got ill, won't come back to us in the foreseeable future because he has been pulled back into his previous project.

Today I have also finished an import script which transfers a huge requirements matrix from one of our customers into TaskZilla. Ran without errors and lightning fast, I didn't expect that. It took a week to write that script and I had to work around some errors in the source matrix but finally I was able to map all of our required fields. Yep.

|

1

Archives