binfalse
Web Screenshots. W/O browser!
August 30th, 2014Just discovered a nice way to take screenshots of web sites from the command line! No browser needed. Cool.
The tool I’d like to advertise is called gnome-web-photo
:
aptitude install gnome-web-photo
For instance. To take generate an image of my website just call:
gnome-web-photo --timeout=60 binfalse.png
Just take a look at binfalse.png
to examine the result. I obtained a 1024x6334
image. I guess the main use case is to generate some kind of preview/thumbnail. To get a thumbnail simply add --mode=thumbnail
:
gnome-web-photo --timeout=60 --mode=thumbnail binfalse-thumb.png
Afaik, there is no option to generate a larger thumb, but you could just pass --width=
without the --mode=thumbnail
. And then crop the pic yourself (e.g. using imagemagick). However, you need to run X and you need to have GTK, if I understand correctly. Nevertheless, I like that solution.
Record Stream Using VLC
July 2nd, 2014I just needed to record a video stream. Usually, I use mplayer for these kinds of jobs, but this time it failed. However, on the internet I found a way to do it using VLC, which apparently has quite a command line interface.
This comment revealed that the VLC media player comes with some command line magic. Of course, not much is documented in the man page, but the user guide on their website seems to be useful.
Long story short, I ended up with the following command to save the stream http://STREAM.mp4
to /tmp/file.mkv
:
vlc http://STREAM.mp4 --sout="#std{access=file,mux=mkv,dst='/tmp/file.mkv'}" vlc://quit
Cool.
For the records, here are some alternatives:
# using mplayer
mplayer -dumpstream http://STREAM.mp4 -dumpfile /tmp/file.mp4
# using ffmpeg
ffmpeg -i http://STREAM.mp4 -acodec copy -vcodec copy /tmp/file.mp4
New GPG Key
January 15th, 2014It was time to finally replace my old GPG key. I created the key in 2008 and from today’s perspective a 1024 bit DSA key is really weak. Thus, today I decided to move to a new key and created a 4096 bit RSA key.
My old key was
pub 1024D/446DB306 2008-07-15 [expires: 2017-07-13]
Key fingerprint = 0E75 62A5 405E 65B1 B477 4215 D9B3 5173 446D B306
And the new key is:
pub 4096R/8D2DD9BD 2014-01-15 [expires: 2019-01-14]
Key fingerprint = 08E6 6E72 A83A 9871 CD49 3441 E81B C307 8D2D D9BD
For those of you who already trust my old key I created a transition note which is signed by both my old and my new key.
To import my new key to your key chain you can use the following command:
gpg --keyserver pgp.mit.edu --recv-key 8D2DD9BD
The new key is already signed by the old key. Those of you trusting my old key may verify the signature using:
gpg --check-sigs 8D2DD9BD
To sign the new key execute the following command:
gpg --sign-key 8D2DD9BD
And it would be nice if you upload the signed to one of the key servers:
gpg --keyserver pgp.mit.edu --send-key 8D2DD9BD
You are of course free to give me a call in order to verify the fingerprint ;-)
Gajim idling error
January 8th, 2014Just stumbled upon a small bug in Debian’s version of Gajim (0.15.4-2 – currently in testing and sid).
The following error occurs when Gajim starts to idle:
Traceback (most recent call last):
File "/usr/share/gajim/src/common/xmpp/idlequeue.py", line 533, in _process_events
return IdleQueue._process_events(self, fd, flags)
File "/usr/share/gajim/src/common/xmpp/idlequeue.py", line 394, in _process_events
obj.pollin()
File "/usr/share/gajim/src/common/xmpp/transports_nb.py", line 420, in pollin
self._do_receive()
File "/usr/share/gajim/src/common/xmpp/transports_nb.py", line 606, in _do_receive
self._on_receive(received)
File "/usr/share/gajim/src/common/xmpp/transports_nb.py", line 620, in _on_receive
self.on_receive(data)
File "/usr/share/gajim/src/common/xmpp/dispatcher_nb.py", line 488, in dispatch
handler['func'](session, stanza)
File "/usr/share/gajim/src/common/connection_handlers.py", line 2009, in _StreamCB
conn=self, stanza=obj))
NameError: global name 'obj' is not defined
This results in a dis- and a subsequent reconnection. As the traceback already suggests the error can be found in /usr/share/gajim/src/common/connection_handlers.py
on line 2009. This is the corresponding function:
def _StreamCB(self, con, iq_obj):
log.debug('StreamCB')
gajim.nec.push_incoming_event(StreamReceivedEvent(None,
conn=self, stanza=obj))
Obviously, there is no variable obj
: The passed argument is called iq_obj
…
To fix that mistake just substitute the function definition with (replace iq_obj
→ obj
in line 2006):
def _StreamCB(self, con, obj):
log.debug('StreamCB')
gajim.nec.push_incoming_event(StreamReceivedEvent(None,
conn=self, stanza=obj))
This bug is already fixed in their repository (13861:239ec662de5a). Thus, this article is mainly for people not familiar with python/programming, who need a quick fix. (wasn’t able to find something on the Internet)
Btw. I’m not sure why, but this error just affected one of my four machines which are running Gajim.
Challenge is over.
November 28th, 2013About 6 or 10 moths ago we were searching for a student to work with us in the SEMS project. In order to reduce the number of applications I started a challenge. To solve this challenge you had to show some understanding for basic techniques and programming languages, so we didn’t waste our time with people not able to write a single line of source code.
And what should I say? It was successful! We’re now a great team with three students :D
However, currently this challenge seems to spread over the internet. And lot’s of people try to solve it (and many submit a wrong answer^^). But even worse, some of you guys try to exploit it by submitting something like
"; SHOW TABLES;
In general I don’t care. It was just some lines of PHP that send me an email in case of a correct answer. There is no database and the worst that can happen is a full inbox, but now I decided to close this challenge and instead forward users to this article.
Thus, if you arrive here feel free to apply for a job! I guess all of my readers, even if they didn’t solve this challenge, are perfect fellows…
If you nevertheless want to give it a try you can download the challenge.