Featured

Do you use a personal computer every day? Chances are, you need a laptop or a PC for everyday use and for work. However, the computer system's logic is sometimes difficult to understand. That's why you need to learn specific command keys to access databases, software, or any other programs. Some operating systems, like Fedora, use these keys to allow access to even the most basic files. Don't be scared; you can master those commands. You don't have to be an experienced coder or a college-educated software engineer. You can learn more by checking out online platforms like BestCustomWriting. Custom papers that can accommodate any student's needs are written by professional writers. These writers are exceptionally talented and have many years of experience in academic writing. Also, a team of customer support specialists will be there to answer your questions at any time. As well as that, you can find many positive reviews on their website, so that you won't have any doubts left. Place an order today, and you will get an amazing custom paper that will guarantee that you get good grades!

Let’s try to recover some old stuff…

About a year ago this site was hacked. The maintainers gave me a back up (there’s still the hacker’s code!) to try to get the contents back. And now that I’ve some spare time…

Dummy Image Viewer (DiV) – I don’t like WPF very much but…

…I needed a lightweight image viewer to quick scan thousands snapshots coming from the Ladle Tracking system (steelworks) I work on. Unfortunately (IMHO :)) the main company I’m working for at the moment, uses MS WPF (Windows Presentation Foundation) as platform for its software. Therefore, in the last year I’ve had to learn a bit of C# , WPF, MVVM pattern and so on, and it was the easiest method to get a small program quickly.

In two days of work this small size, standalone and quite dummy viewer has born. The main feature is the possibility to watch the current snapshot, 4 “previous” snapshots (at -8, -16, -32, -64) and 4 “following” (at +8, + 16, +32, +64) and skip (+/- 32 but configurable) forward/backward with Down/Up arrow keys. A bit of zoom stuff, some settings and finally I can avoid loosing time watching file previews in a painfully slow VPN!

It’s a really raw small program but maybe someone can find it useful and help to improve. I’ve load it on GitHub:

DiV on GitHub

Press H for a quick help and have fun!

Download Dummy Image Viewer

screenshot

A small RTSP MJPEG client library (with ffmpeg)

Just a small client library that uses ffmpeg to read a RTSP (MJPEG) stream. I wrote it for a project I’m working on, where I need to grab frames from network cameras. I’ve put it on GitHub just because when I was looking for something similar I didn’t find much examples. The client library itslef is written in C++11. There’s a C# wrapper and tests, msvc12, WinForm and Qt (built with Ubuntu 14.04).

To build you need:

  • log4cplus
  • ffmpeg (for Windows zeranoe)

The Qt projects build library and tests for GNU/Linux.

Here’s the GitHub repository: https://github.com/qualibit/rtspmjpegclient

and here’s a build of the WinForm client: RTSPMJPEGClientTestWinForm.zip

Quick and Dirty bash script to check bandwidth usage

I need it to shutdown my home server when it’s idle for a long time. Nothing very elegant, a bit of grep on ifconfig output but it seems to work fine. Have fun!

Donwload bwusage

#! /bin/bash

# BandWidth Usage
#   Federico Zanco 


IFACE=eth0
TIMEOUT=10
RX="1"
TX="1"
TRAFFIC="FALSE"
UNIT="KiB"
VERBOSE=


show_help () {
    echo
    echo "usage: bwusage [-h|--help] [-i|--interface ] [--rx-only]"
    echo "               [--tx-only] [--traffic] [-t|--timeout ]"
    echo "               [-u|--unit  [-v|--verbose]"
    echo
}


change_unit () {
    case "$UNIT" in

        "KiB")
            [ "$1" = "RX" ] && RX=`echo "$RX"|awk '{printf "%0.4f", $1 / 1024}'`
            [ "$1" = "TX" ] && TX=`echo "$TX"|awk '{printf "%0.4f", $1 / 1024}'`
            ;;

        "MiB")
            [ "$1" = "RX" ] && RX=`echo "$RX"|awk '{printf "%0.4f", $1 / 1048576}'`
            [ "$1" = "TX" ] && TX=`echo "$TX"|awk '{printf "%0.4f", $1 / 1048576}'`
            ;;

    esac
}


TEMP=`getopt -q -o hi:t:u:v --long help,interface,rx-only,tx-only,traffic,timeout,unit,verbose -- "[email protected]"`

eval set -- "$TEMP"

while true ; do
    case "$1" in

        -h|--help)
            show_help
            exit 0
            ;;

        -i|--interface)
            IFACE=$2
            shift 2
            ;;

        --rx-only)
            TX=
            shift
            ;;

        --tx-only)
            RX=
            shift
            ;;

        --traffic)
            TRAFFIC="TRUE"
            shift
            ;;

        -t|--timeout)
            TIMEOUT=$2
            shift 2
            ;;

        -u|--unit)
            [ "$2" != "B" -a "$2" != "KiB" -a "$2" != "MiB" ] && echo && echo "ERROR: unit $2 not valid" && show_help && exit 1
            UNIT=$2
            shift 2
            ;;

        -v|--verbose)
            VERBOSE="1"
            shift
            ;;

        *)
            # [ "--" != "$1" ] && echo && echo "ERROR: $1 unknown option" && show_help && exit 1
            break
            ;;
    esac
done

[ -z "$(ifconfig -s |grep $IFACE)" ] && echo && echo "ERROR: $IFACE not up or not valid" && exit 1

[ -n "$VERBOSE" ] && echo 
[ -n "$VERBOSE" ] && echo "IFACE=$IFACE"
[ -n "$VERBOSE" ] && echo "TIMEOUT=$TIMEOUT s"
[ -n "$VERBOSE" ] && echo "TRAFFIC=$TRAFFIC"
[ -n "$VERBOSE" ] && echo "UNIT=$UNIT"
[ -n "$VERBOSE" ] && echo
[ -n "$VERBOSE" ] && echo "... please wait $TIMEOUT seconds ..."
[ -n "$VERBOSE" ] && echo

[ -n "$RX" ] && rx1=`cat /sys/class/net/$IFACE/statistics/rx_bytes`
[ -n "$TX" ] && tx1=`cat /sys/class/net/$IFACE/statistics/tx_bytes`

sleep $TIMEOUT

[ -n "$RX" ] && rx2=`cat /sys/class/net/$IFACE/statistics/rx_bytes`
[ -n "$TX" ] && tx2=`cat /sys/class/net/$IFACE/statistics/tx_bytes`

if [ -n "$RX" ] 
then
    RX=`echo "$rx2 - $rx1"|bc`
    [ "$TRAFFIC" = "FALSE" ] && RX=`echo "$RX $TIMEOUT"|awk '{printf "%0.4f", $1 / $2 }'`
    change_unit "RX"
    [ -n "$VERBOSE" ] && echo -n "RX: "
    echo "$RX"|awk '{printf "%0.2f", $1 }'
    [ -n "$VERBOSE" ] && echo -n " $UNIT" && [ "$TRAFFIC" = "FALSE" ] && echo -n "/s"
fi

[ -n "$RX" ] && [ -n "$TX" ] && echo -n "    "

if [ -n "$TX" ] 
then
    TX=`echo "$tx2 - $tx1"|bc`
    [ "$TRAFFIC" = "FALSE" ] && TX=`echo "$TX $TIMEOUT"|awk '{printf "%0.4f", $1 / $2 }'`
    change_unit "TX"
    [ -n "$VERBOSE" ] && echo -n "TX: "
    echo "$TX"| awk '{printf "%0.2f", $1 }'
    [ -n "$VERBOSE" ] && echo -n " $UNIT" && [ "$TRAFFIC" = "FALSE" ] && echo -n "/s" 
fi

echo

Instant messaging Virtual Terminal

screenshot

Description:

This plugin opens a Virtual Terminal in your host and allows buddies to execute commands on it. This can be useful (and very risky!) in several situations:

  • when you’re behind a NAT or firewall that allow traffic on port 80
  • when you cannot carry your PC with you but you can access i.e. to your Facebook/Gmail chat (AAAAARRRRGH!)
  • when all other remote methods are precluded (SSH server crashed… think about it, it could happen! 😀 )

There are huge security problems in doing this so you should absolutely limit as much as possible the privileges of the user running the terminal. Of course it’s not such a great idea give your root password to Gmail (unless you disable chat recording Gmail logs all your chats!) so don’t execute programs like su or SSH (although in theory you can do).

You should not even let all your buddies to control the terminal. What I’ve done to test this plugin is create a new account and add only personal accounts as contacts.

I’m not a code guru and I’ve wrote only a rudimentary very buggy terminal but in most cases it works decently.

I apologize to the authors of rxvt from which I watched and copied part of the code. I really hope someone more experienced than me can help me improve the code.

For now take it carefully and in no way consider this plugin safe or stable.

Download

Compiled on libpurple 2.10.0 (this means you have to use this version or newer!).

ARCH File Last Update Version
Linux i386 imvt-0.0.2.i386.tar.gz 19/10/2011 0.0.2
Linux amd64 (thanks to dbenux) imvt-0.0.1.amd64.tar.gz 19/01/2011 0.0.1
Source imvt-0.0.2.src.tar.gz 19/10/2011 0.0.2

Changelog

Date Version Note
19/10/2011 0.0.2 Corrected #Ret, Arrow keys and simplified timeout
19/01/2011 0.0.1 First

Contacts:

For bugs reports, hints, … email me at federico.zanco ( at ) gmail.com.

How to install:

These are general instructions to build and install my purple plugins.
LINUX:
To build the plugin you have to install gcc, GNU make, pkg-config and pidgin developing dependencies (or maybe only libpurple if in your os they are distribuited separately). I.e. in Debian/Ubuntu, open a terminal and type:

sudo apt-get install gcc make pkg-config pidgin-dev

then to build type:

make

to install (default directory is ~/.purple/plugins) type:

make install

You can also create a compressed tar by typing:

make tar

How to use:

Compile and Install (read INSTALL) or Download (from this page) the plugin for your arch.

Linux: if you don’t have GNU make program installed on your system, to install the plugin manually copy imvt.so in your purple dir:

(if ~/.purple/plugins/ does not exist: $ mkdir ~/.purple/plugins/ )
$ cp imvt.so ~/.purple/plugins/

Restart Pidgin and in Tools/Plugins you should see Instant messaging Virtual Terminal.

Once enabled you should adjust settings. Buffer dimensions it’a a try/catch task. I’ve noticed that Gmail start to loose messages if you send a lot of messages in a short period of interval. To start the terminal just open a chat with your host client and send the command:

<strong>#Imvt</strong>

it’s case sensitive so write it exactly as above. In a while you should see the prompt. #Help to get a quick help that display some useful private commands. In general all private ImVT commands starts with a #. An interesting command is ‘##‘ (direct input) that allows you to enter text without confirm it with return.

License:

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02111-1301, USA.

What’s my IP

screenshot

Description:

Fetches and prints external IP address of the machine where the plugin is running. By default the URL used is http://checkip.dyndns.org but you can change it in the plugin’s settings adding a regex to parse the html retrieved.

Download

Compiled on libpurple 2.10.7 (this means you have to use 2.10.X or newer!).

ARCH File Last Update Version
Linux i386 whats-my-ip-0.0.1.i386.tar.gz 30/03/2013 0.0.1
Linux amd64 whats-my-ip-0.0.1.amd64.tar.gz 30/03/2013 0.0.1
Win32 whats-my-ip-0.0.1.win32.zip 30/03/2013 0.0.1
Source whats-my-ip-0.0.1.src.tar.gz 30/03/2013 0.0.1

Changelog

Date Version Note
30/03/2013 0.0.1 First

Contacts:

For bugs reports, hints, … email us at riccardo.catto ( at ) gmail.com and federico.zanco ( at ) gmail.com.

How to install:

These are general instructions to build and install my purple plugins.
LINUX:
To build the plugin you have to install gcc, GNU make, pkg-config and pidgin developing dependencies (or maybe only libpurple if in your os they are distribuited separately). I.e. in Debian/Ubuntu, open a terminal and type:

sudo apt-get install gcc make pkg-config pidgin-dev

then to build type:

make

to install (default directory is ~/.purple/plugins) type:

make install

You can also create a compressed tar by typing:

make tar

How to use:

Compile and Install (read INSTALL) or Download (from this page) the plugin for your arch.

Linux: if you don’t have GNU make program installed on your system, to install the plugin manually copy whats-my-ip.so in your purple dir:

(if ~/.purple/plugins/ does not exist: $ mkdir ~/.purple/plugins/ )
$ cp whats-my-ip.so ~/.purple/plugins/

Restart Pidgin and in Tools/Plugins you should see a plugin named What’s my IP. Once enabled every buddy in buddy list can ask your external ip address writing ‘ip’ in a instant message window. By default the plugin uses http://checkip.dyndns.org to fetch the ip address but you can change it in plugin’s settings changing the regex to parse the url too.

License:

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02111-1301, USA.

Instant messaging NetCat Port Forwarding

Description:

Creates a dummy port forwarding on demand between two buddies via instant messaging. The bandwidth is not spectacular but sometimes it could be useful (i.e. to screw a poor firewall). It’s a toy plugin that exploits once more the possibility to carry traffic via instant messaging.

Download

Compiled on libpurple 2.10.6 (this means you have to use 2.10.X or newer!).

ARCH File Last Update Version
Linux i386 instant_messaging_ncat_port_forwarding-0.0.1.i386.tar.gz 14/12/2012 0.0.1
Linux amd64 instant_messaging_ncat_port_forwarding-0.0.1.amd64.tar.gz 14/12/2012 0.0.1
Source instant_messaging_ncat_port_forwarding-0.0.1.src.tar.gz 14/12/2012 0.0.1

Changelog

Date Version Note
14/12/2012 0.0.1 First

Contacts:

For bugs reports, hints, … email me at federico.zanco ( at ) gmail.com.

How to install:

These are general instructions to build and install my purple plugins.
LINUX:
To build the plugin you have to install gcc, GNU make, pkg-config and pidgin developing dependencies (or maybe only libpurple if in your os they are distribuited separately). I.e. in Debian/Ubuntu, open a terminal and type:

sudo apt-get install gcc make pkg-config pidgin-dev

then to build type:

make

to install (default directory is ~/.purple/plugins) type:

make install

You can also create a compressed tar by typing:

make tar

How to use:

Compile and Install (read INSTALL) or Download (from this page) the plugin for your arch.

Linux: if you don’t have GNU make program installed on your system, to install the plugin manually copy instant-messaging-ncat-port-forwarding.so in your purple dir:

(if ~/.purple/plugins/ does not exist: $ mkdir ~/.purple/plugins/ )
$ cp instant-messaging-ncat-port-forwarding.so ~/.purple/plugins/

Restart Pidgin and in Tools/Plugins you should see a plugin named Instant messaging NetCat Port Forwarding.

To use it you must install ncat (in Debian it is in the nmap package). To ask a port forwarding send a message like this:

#IMNPF_REQ#

to a buddy with the same plugin installed and activated, where is the local port, is the remote port and the remote host. For example:

#IMNPF_REQ# 5000 www.example.org 80

creates a port forwarding from localhost:5000 to www.example.com:80. If you open the address localhost:5000 with your browser you should see the page of example.org.

Other commands are:

#IMNPF_QUI# to quit an active session
#IMNPF_RST# to reset an active session even if you’re not the local peer

In preferences you can set to manage more than a connection at a time (-m argument of ncat) but keep in mind that all traffic is sent through a unique forwarding and mixed up. You cannot really keep sessions distinct:

[local app1]

–lport–[pidgin]—-|Internet|—-[pidgin]–rport–[rhost]

[local app2]

–+

[local app3]

–+

It’s a toy plugin, all the sockets stuff is demanded to ncat for simplicity and to avoid to manage I/O with blocking functions. Next step would be to implement a real server that accepts many connection keeping them separated.

The main issue is to do that using only non blocking system calls.

Policy settings are available in plugin settings. To add/remove a buddy to a ACL just right click on the buddy and choose the operation. “Which ACLs” tells in which ACLs buddy is subscibed.

License:

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02111-1301, USA.

Instant messaging Remote Access

Description:

This plugin executes a command in a pseudo terminal on remote host (i.e. a buddy PC running pidgin/finch). How it works:

Let’s say that Buddy A wants to run a shell session on Buddy B’s host computer. So in A’s PC the plugin client is installed and in B’s PC the server.

  1. A opens a chat and sends ‘#IMRA_REQ#’ to B, create input and output FIFO (named pipe)
  2. B receives ‘#IMRA_REQ#’ and opens pseudo teminal and execs the shell (you can exec any command, bash is the default command)
  3. A writes input on input FIFO and writes output on output FIFO (I wrote a little console to make it easy but you can use 2 cat instead)
  4. input data from A to B and responses (terminal output) from B to A are exchanged by messages translated in base64. Text is prefixed with ‘#IMRA_DAT#’ header
  5. data flow until A or B close the conversation sending a ‘#IMRA_QUI#’ message (if A or B closes the conversation window, ‘#IMRA_QUI#’ is sent automatically)

Why this plugin?

I’ve tried to make a plugin to realize a virtual terminal emulator in a chat between two buddies but I could create only a small, very incomplete (and buggy!) proof of concept. The problem with that plugin was that a terminal emulator it’s something very complex and there’s no complete libraries that implements the “backend” only (I mean that manages only the virtual terminal) so I had to develop the terminal emulator inside the plugin and that was a huge work (and of course incomplete!).
The real problem are escape and control sequences, how to pipe in and out form terminal and manage them.
There are libraries like VTE but you can’t use them without a GUI (the main reason that push me to develop such plugins is that I want a remote access through nat in a remote (home obviously :)) server without GUI). There’re some libraries not really well done (IMHO) like libROTE (no more developed) and a derivate libvterm but they do, maybe a little better, what I already do with ImVT plugin but far away to be effectively usable.
To write such kind of library it’s a very very hard task and although I’d like to develop a new one that manage several aspects (i.e. colours, bold, …), I know it will take too long. Maybe one day…
Take a look at Miguel de Icaza’s blog to get an idea of what should be done.

The idea behind this plugin is to forward raw user input (signals included) from local host to terminal and forward all terminal output (escape and control sequences) to a virtual terminal emulator (i.e. xterm). Doing this then the virtual terminal emulator will interpret escape and control sequences correctly. The screenshots show how I could run safetly htop and vim (no more problem using arrows).

imra network scheme

The console is a little application to simplify client input/output.

There are huge security problems in doing this so you should absolutely limit as much as possible the privileges of the user running the terminal. Of course it’s not such a great idea give your root password to Gmail (unless you disable chat recording Gmail logs all your chats!) so don’t execute programs like su or SSH (although in theory you can do).

I’ve added Access Control List mechanism to choose which buddies are allowed to REQUEST, STEAL or RESET sessions. ACLs are the default choice for each operation. You can modify default policy in the server plugin settings. To add/remove a buddy to a ACL just right click on the buddy and choose the operation. “Which ACLs” tells in which ACLs buddy is subscibed.

You should not even let all your buddies to control the terminal. What I’ve done to test this plugin is create a new account and add only personal accounts as contacts.

I could see some odd behavior i.e. with Home key. Let’s debug!

For now take it carefully and in no way consider this plugin safe or stable.

Dummy Protocol used:

  1. CLIENT to SERVER: #IMRA_REQ# (or #IMRA_STL#)
  2. SERVER to CLIENT: #IMRA_ACP# (or #IMRA_DNY# if server don’t accept for any reason such as steal not allowed)
  3. CLIENT to SERVER and SERVER to CLIENT: #IMRA_DAT#[BASE64 I/O]
  4. CLIENT to SERVER or SERVER to CLIENT: #IMRA_QUI# (on closing the conversation window client or server side)

Command #IMRA_RST# implies SERVER close the active session if any and listen for new requests.


TODO:

  • Secure Session that is to encrypt data

Download

Compiled on libpurple 2.7.11 (this means you have to use 2.7.X or newer!).

ARCH File Last Update Version
Linux i386 instant_messaging_remote_access_client-0.0.1.i386.tar.gz 29/05/2011 0.0.1
Linux i386 instant_messaging_remote_access_server-0.0.2.i386.tar.gz 04/06/2011 0.0.2
Linux i386 imra_console-0.0.1.i386.tar.gz 29/05/2011 0.0.1
Linux amd64 Coming soon… ? 29/05/2011 0.0.1
Source instant_messaging_remote_access_client-0.0.1.src.tar.gz 29/05/2011 0.0.1
Source instant_messaging_remote_access_server-0.0.2.src.tar.gz 04/06/2011 0.0.2
Source imra_console-0.0.1.src.tar.gz 29/05/2011 0.0.1

Changelog

Date Version Note
29/05/2011 0.0.1 First
04/06/2011 0.0.2 Added ACLs to server to improve security

Contacts:

For bugs reports, hints, … email me at federico.zanco ( at ) gmail.com.

How to install:

These are general instructions to build and install my purple plugins.
LINUX:
To build the plugin you have to install gcc, GNU make, pkg-config and pidgin developing dependencies (or maybe only libpurple if in your os they are distribuited separately). I.e. in Debian/Ubuntu, open a terminal and type:

sudo apt-get install gcc make pkg-config pidgin-dev

then to build type:

make

to install (default directory is ~/.purple/plugins) type:

make install

You can also create a compressed tar by typing:

make tar

How to use:

Compile and Install (read INSTALL) or Download (from this page) the plugin for your arch.

Linux: if you don’t have GNU make program installed on your system, to install the plugin manually copy instant-messaging-remote-access-[client/server].so in your purple dir:

(if ~/.purple/plugins/ does not exist: $ mkdir ~/.purple/plugins/ )
$ cp instant-messaging-remote-access-[client/server].so ~/.purple/plugins/

Restart Pidgin and in Tools/Plugins you should see ImRA [client/server]

If you want to use imra_console (recommended) you should install it in a directory on your path (make install will install it in /usr/local/bin and you have to be root to do this).

Once enabled you should adjust settings. Buffer dimensions it’a a try/catch task. I’ve noticed that Gmail starts to loose messages if you send a lot of messages in a short interval.
To start the remote access just open a chat with the “buddy server” and send the message:

<strong>#IMRA_REQ#</strong>

it’s case sensitive so write it exactly as above. If there’re no errors, two FIFOs will be created. Default paths are /tmp/imra_input and /tmp/imra_output. Open a virtual terminal emulator (i.e. xterm, gnome-terminal, konsole, …). In the virtual terminal emulator you can use cat command to write input (i.e. $ cat >/tmp/imra_input) and read output (i.e. $ cat /tmp/imra_output) or simply start imra_console (it tries to open default FIFOs but you can specify them passing -i and -o options). That’s all.


To summarize

  1. install and enable client plugin (presumably in your local PC)
  2. install and enable serverplugin (presumably in the PC of a buddy)
  3. open a virtual terminal emulator(gnome-terminal, konsole, xterm, rxvt, … world is full of vte!) and start imra_console
  4. start a chat with the buddy which has the server installed
  5. send msg #IMRA_REQ# and come back to imra_console
  6. if all is gone well you shoud see a very slow remote shell

Other commands

I’ve implemented other 2 commands:

  • #IMRA_STL: to steal a session (steal has to be enabled in server options)
  • #IMRA_RST: to reset a session (reset has to be enabled in server options). This command will kill forcedly the active session if any

Policy settings are available in server plugin settings. To add/remove a buddy to a ACL just right click on the buddy and choose the operation. “Which ACLs” tells in which ACLs buddy is subscibed.

License:

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02111-1301, USA.

Gtalk Shared Status

GTalk logo

Description

Adds Google Shared Status compatibility that permit to set the status for all the resources connected. This allows to go Invisible

NEW [13/07/2013]: for ADIUM!

Thanks to David Ryskalczyk there’s now an Adium Google Shared Status plugin. Adium users can find the code at:
AIGtalkSharedStatus code
and the binaries at:
AIGtalkSharedStatus binaries
Have fun

NOTE:

  • [31/12/2011] Now stripping markup in new status when updating shared status to prevent markup being sent and shown on other Google shared status capable clients. Thanks to Cyryl.
  • [18/10/2011] I’ve started playing with launchpad. If you’re using Ubuntu 11.10 or later you can add the ppa repository and install the plugin by opening a terminal and typing:
    1. sudo add-apt-repository ppa:federico-zanco/ppa-gss
    2. sudo apt-get update
    3. sudo apt-get install gtalk-shared-status
    Restart Pidgin/Finch after installing and remember to enable the plugin.
    To visit the PPA archive go to https://launchpad.net/~federico-zanco/+archive/ppa-gss.
    To visit launchpad project go to https://code.launchpad.net/~federico-zanco/gtalk-shared-status/
  • [13/10/2011]: I was warned that the plugin didn’t work anymore. I’ve taken a rapid check and the only thing I can see is that Google now sends shared status iq with node prefix. I’ve made a quick fix and seems to work. Please email me for any problem
  • [13/10/2011]: Some people have reported that Invisible status has disappeared after Pidgin update. I’ve verified it too in my GNU/Linux PCs (Pidgin 2.10.0) so what I’ve done to solve the problem was disabling and reenabling the plugin and disabling and reenabling my Google accounts in plugin settings. The last version enables all Jabber accounts by default so it should not be a problem anymore
  • [13/10/2011]: Some people have reported that when they change status to Invisible and change again to another status (Available, DnD, …) the status remains invisible. I can’t reproduce this so please send a debug window log (menu Help\Debug Window to open debug window, just copy and paste text) while reproducing this bug.
  • I’ve created an autotools version tar.gz and added a bit of localization support (there’s only italian for now 🙂 but if anyone wants to contribute…) to make package building an easier task. Note that the other tar.gz version don’t have localization.
  • I’ve created a deb package. Tested with Ubuntu 11.10 and Debian Sid. To install: sudo dpkg -i gtalk-shared-status-<version>.deb
  • You have to choose what accounts use Google Shared Status in plugin options.
  • Now it works with Google Apps addresses too.
  • The plugin is written to work with libpurple, so it (should) work with Finch, …, too.
  • The statusbox and the icon in notification area are manged in a quite tricky way in Pidgin. So it can happen that Pidgin doesn’t report correctly the current status of the resource (which is the shared status).
  • I’ve added a mode called Unique shared status that propagates every change of GSS of any account to any other active Google account. With this option disabled, all accounts are managed indipendently. Unique shared status is enabled by default, this means that every change in a resource which address is managed by Pidgin/Finch propagates to every other account managed. I.e. if I use three Google email addresses : [email protected], [email protected], [email protected] (Google Apps) and I use Pidgin at home managing pizza, spaghetti and mandolino and Gmail (web client) at work managing pizza, if I set the status “Prosecco is my favorite white wine” at work, this be set by Pidgin for pizza, spaghetti and mandolino too.
  • There’s an issue when you change from status Invisible to Idle/Away: shared status does not manage Away/Idle that is a per-resource task. I cannot find an effective solution because I can’t simply switch to Available/DnD first and then to Idle/Away (maybe this will become a plugin option). This would change the shared staus of all active resources to Available/DnD and then only Pidgin/Finch resource to Idle Away and maybe this is not what we want. For now I’ve only added an alert to warn the user that changing from Invisible to Idle/Away will leave the shared status invisible and, if he/she wants, to switch to Available or DnD first and then to Idle/Away.
  • The plugin should work with multiple accounts.

TO DO:

  • add an option to force Pidgin (or other clients) status at startup.



*** I’ve been asked to build the plugin for Adium too. Unfortunately I’m not a Mac User and I don’t have a Mac nor a powerful pc to run a Virtual Machine to run MacOS (I work on a old AMD 3200!) and, to tell the truth, I don’t have the time to do the work now. So if any Mac User wants to translate and build the plugin for Adium I’ll be happy to add it in this page. ***

Download

Compiled on libpurple 2.10.0 (this means you have to use this version or newer!).


So many packages… which one to choose?

  • Windows XP/7: download and install (copy to libpurple dir). No localization;
  • Ubuntu 11.10 (i386/amd64): you should add the PPA repository and install the plugin with apt-get. You can add the ppa repository and install the plugin by opening a terminal and typing:
    1. sudo add-apt-repository ppa:federico-zanco/ppa-gss
    2. sudo apt-get update
    3. sudo apt-get install gtalk-shared-status
    Restart Pidgin/Finch after installing and remember to enable the plugin. To visit the PPA archive go to https://launchpad.net/~federico-zanco/+archive/ppa-gss. To visit launchpad project go to https://code.launchpad.net/~federico-zanco/gtalk-shared-status/
  • Debian Sid (i386/amd64): you should download the i386 deb. To install it, open a terminal and t… ok you’re using Debian, I suppose you know what to do! 🙂
  • Any other GNU/Linux Distro: you can
    • download and install any precompiled binary;
    • download, compile and install the src.tar.gz (No localization);
    • (preferred) download, compile and install the autotools version source (with localization) following the common procedure: ./configure && make && sudo make install;
ARCH File Last Update Version
Win32 gtalk-shared-status-0.2.5.win32.zip* 31/12/2011 0.2.5
Linux i386 gtalk-shared-status-0.2.5.i386.tar.gz 31/12/2011 0.2.5
Linux i386 deb** gtalk-shared-status_0.2.5-1_i386.deb 31/12/2011 0.2.5
Linux amd64 gtalk-shared-status-0.2.5.amd64.tar.gz 31/12/2011 0.2.5
Linux amd64 deb** gtalk-shared-status_0.2.5-1_amd64.deb 31/12/2011 0.2.5
Source gtalk-shared-status-0.2.5.src.tar.gz 31/12/2011 0.2.5
Source (autotools) gtalk_shared_status-0.2.5.tar.gz 31/12/2011 0.2.5
  • Tested on Windows XP, Windows 7
    ** Built on/for Debian Sid

ChangeLog

Date Version Note
31/12/2011 0.2.5 Now stripping markup in new status when updating shared status to prevent markup being sent and shown on other Google shared status capable clients. Thanks to Cyryl.
16/10/2011 0.2.4 Changed the default behaviour on plugin load. Now all accounts are enabled by default.
13/10/2011 0.2.3 Quick fix to manage namespace prefix in shared status XML.
15/07/2011 0.2.2 Added an alert to warn the user when changing from Invisible to Idle/Away.
10/07/2011 0.2.1 Now you can/have to choose what accounts should use GSS.
10/07/2011 0.2 Added a way to check Google Shared Status compatibility. Now you use google apps email address (no need to be gmail.com). Found a way to manage status and added the Unique shared status that propagates every change of GSS of any account to any other active Google account.
19/01/2011 0.1.4 Nothing new but I’ve add a Makefile to make compiling easier and more efficient. Now unused dependencies like gtk are no more needed (Finch users should be happy!)
29/06/2010 0.1.3 Fixed a bit of minor bugs. Now status-list are filled in the same way that Google Talk does (before changes, the most recent status for Google Talk was the least recent status for the plugin and vice-versa)
29/06/2010 0.1.2 (Finally) Fixed a bug that freezes Pidgin with new accounts (status-list node)
28/06/2010 0.1.1 Fixed a bug that freezes Pidgin with new accounts (status-list node). Thanks to Xuchen Yao

Contacts

For bugs reports, hints, … email me at federico.zanco ( at ) gmail.com

How to build:

LINUX:
To build the plugin you have to install gcc, GNU make and pidgin dependencies
(or maybe only libpurple if in your os they are distribuited separately).
I.e. in Debian/Ubuntu, open a terminal and type:
sudo apt-get install gcc make pidgin-dev
then to build type:
make
to install (default directory is ~/.purple/plugins) type:
make install
You can also create a compressed tar by typing:
make tar


WINDOWS:
It’s hard for non experts to build the plugin in Windows so the best solution
is to download the binary directly from site.
If you feel brave you have two ways and all of them explained in
HowdoIcompileapluginWindows
where there’s written to setup a build environment like that in
BuildingWinPidgin
I’ve included the Mingw Makefile that I use to build my plugins for Windows.

Restart Pidgin after installing/copying. Then in Tools/Plugins you should see Gtalk Shared Status

How to use:

1) Compile or Download the plugin for your arch (see above).

2)

Linux: if you don’t have GNU make program installed on your system, to install the plugin manually copy gtalk-shared-status.so in your purple home dir:
(if ~/.purple/plugins/ does not exist: $ mkdir ~/.purple/plugins/ )
$ cp gtalk-shared-status.so ~/.purple/plugins/

Windows: Move gtalk-shared-status.dll in Pidgin plugins dir (I suppose you can create C:\Documents and Settings\<user>\Applications data.purple\plugins and move the plugin there too). In Windows it should be something like C:\Programmi\Pidgin\plugins\

3) Restart Pidgin and in Tools/Plugins you should see Gtalk Shared Status Plugin. In plugin options enable/disable Unique shared status options and enable/disable accounts that should use Gtalk Shared Status.

Simply enable the plugin and just change to your favourite status. Note that at startup the plugin reads and sets the status saved on the server. The plugin (should) works with multiple accounts.

Issues:

  • An application restart is required when enabling the plugin with already connected accounts

License:

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA.