Selveid er veleid; mitt fyrste møte med Perl og Irssi::

April 22nd, 2009

Utrykket i tittelen blir diverre ikkje like bra på nynorsk, men like fullt blei eg eid. Då eg kom heim frå påskeferien, køyrde ikkje Irssi slik ho gjorde då eg drog. Ho var daud. Ho hadde faktisk drepe seg sjølv:

03:41 -!- mortehu changed the topic of #ping.uio.no to: “;killall irssi;”

[...]

03:41 <@Egil> irssi(6732): Operation not permitted

03:41 <@Egil> irssi(6770): Operation not permitted

03:41 <@Egil> irssi(6932): Operation not permitted

03:41 <@Egil> irssi(7089): Operation not permitted

*død*

— Log opened Tue Apr 14 14:28:30 2009

Sjølveid

Sjølveid

Årsaka til dette var at eg, den 24. mars, fann ut at kvar gang nokon endra tittel på Pings irc-kanal, #ping.uio.no@IRCnet, burde det bli posta til Identica, slik at ein kan få med seg all den viktige og uviktige informasjonen som måtte stå der, slikt som viktige driftsmeldingar, sosiale påfunn osb. µpostane vart óg vist på www.ping.uio.no.

Det ville vore ein fin oppgåve å løysa med perl, men eg gadd ikkje. Odin og eg (mest Odin) skreiv eit enkelt bash-skript for å nytta twitter for lenge sida, så eg hacka heller det til å nytta Identica sitt twitter-kompatible api. Eg hadde allereie triggerskriptet til Irssi køyrande, så eg lagde ein ny regel for endring av tittel på kanalen, og vips så vart dei på Identica, Twitter og heimesiden. Den køyrde skriptet med den nye tittelen som parametre, og det virka bra.

Eller, det virka fram til nokon skreiv ein tittel med |, ein pipe, i ho. Do tolka skallet pipen slik seg hør og bør, men ikkje slik eg ville. Eg omkransa tittelen med “”, og det virka. Odin sa at det ville brekka om nokon nytta ” i tittelen, men eg tenkte den tid den sorg. I tillegg var eg dum nok til å køyra skriptet med -o, av gamal vane, slik at alt frå stdout blir skreve ut til kanalen. Eg levde lykkeleg fram til eg kom heim frå Påske, men då kom sorga:

03:35 -!- Topic unset by carl_henrik on #ping.uio.no

03:35 <@Egil> Usage: /home/egil/.local/bin/pingdent [YOUR UPDATE]

03:35 <@Egil> -v Verbose

03:35 <@Egil> Not updating status

03:35 <@Egil> -f A list of your friends and their current update

03:35 <@Egil> -F A list of your followers …

03:35 <@Egil> -t Timeline of you and your friends.

03:35 <@Egil> -h Help, this message

03:35 <@carl_henrik> haha

03:35 <@carl_henrik> Egil: Kanskje ikke dytte stdout ut på IRC? :P

03:35 -!- mortehu changed the topic of #ping.uio.no to: ; ls /

Ettersom eg skreiv alt til stdout, spruta skriptet ut hjelpeteksten rett i kanalen. Då var det berre eit spørsmål om tid før nokon klarte å utnytta den skitne hacken som greia mi faktisk var.

03:37 -!- mortehu changed the topic of #ping.uio.no to: “;echo hei

03:37 <@Egil> /bin/sh: Syntax error: Unterminated quoted string

03:37 <@mortehu> Woo

03:37 -!- mortehu changed the topic of #ping.uio.no to: $(echo $((5+6)))

03:37 -!- mortehu changed the topic of #ping.uio.no to: “$(echo $((5+6)))”

03:38 <@mortehu> Hmf.

03:38 <@mortehu> sh, ja.

03:39 -!- mortehu changed the topic of #ping.uio.no to: “”; echo hmf

03:39 <@mortehu> Vanskelig den der.

03:40 -!- mortehu changed the topic of #ping.uio.no to: “;ls;”

03:40 <@Egil> Usage: /home/egil/.local/bin/pingdent [YOUR UPDATE]

03:40 <@Egil> -v Verbose

03:40 <@Egil> Not updating status

03:40 <@Egil> -f A list of your friends and their current update

03:40 <@Egil> -F A list of your followers …

03:40 <@Egil> -t Timeline of you and your friends.

03:40 <@Egil> -h Help, this message

03:40 <@Egil> _

03:40 <@Egil> 02-machinae_supremacy-soundtrack_to_the_rebellion.mp3

03:40 <@Egil> 1040-1

[...]

03:40 <@Egil> /bin/sh: : Permission denied

03:40 <@mortehu> Woot

03:41 -!- mortehu changed the topic of #ping.uio.no to: “;killall irssi;”

*død*

Denne gongen måtte eg gjera jobben ordentleg. Å senda tekst rett frå irc til skallet var rett og slett dumdristig av meg. Sjølvsagt måtte eg sjekka at eg ikkje berre køyrde kva som helst kode, så det var bra at mortehu drepte ho. Det som var endå betre, var at han provoserte meg til å finna ei skikkeleg løysing. Det var faktisk utruleg enkelt, eg var berre for lat til å sjå det. Det var flaut, men eg er takknemleg. Det skal seiast at han sparka seg sjølv ut frå kanalen etterpå, men eg har utruleg nok ikkje nokon logg av dét.

Eg kunne sjølvsagt skriva ein rutine for å fjerna spesialtekn frå tittelen og køyre skriptet som før, men når eg fyrst måtte skriva eit perl-skript for å gjera det, kunne eg like greit gjera jobben ordentleg og gjera heile jobben i ein stad.

Etter eit søk på CPAN, var det klart at sjølve postinga til Identi.ca var utruleg enkelt om ein nytta Net::Identica. Eg prøvde det ut i eit lite skript, så alt som mangla var å gjera det samme frå Irssi kvar gong tittelen blir forandra.

Eg las gjennom Irssi Scripting Tutorial, listå over Irssis signalar, ignorerte avsnittet om at ein burde lera seg perl fyrst, og knota ivei. Etter kort tid hadde eg eit fungerande skript, noko den siste meldingen frå pingeling viser.

use strict;
use vars qw($VERSION %IRSSI);
use Net::Identica;

use Irssi;

$VERSION = '0.01';
%IRSSI = (
	authors	=> 'Kristoffer Egil Bonarjee',
	contact => 'inga spam takk...'.
	description => 'Script for posting new topics on identi.ca',
	license => ''

);

sub topic_changed
{

	my ($server, $channel, $topic, $nick, $addr) = @_;

	my $ident = Net::Identica->new(username=>"pingeling",
		password=>"hemmeleg...");

	if($channel eq "#ping.uio.no")

	{
		print "Microblogging " . $topic;

		$ident->update($topic)

	}

}

Irssi::signal_add("message topic", "topic_changed");

Å løysa problemet på ordentleg var med andre ord veldig lett. Bortsatt frå formaliteter, er jo skriptet berre ein rutine som kaller Net::Identica, og eit kall for å knytta rutinen til det korrekte signalet. Hadde eg berre gidda å gjera det med ein gong! Neste gong eg vil gjera noko med Irssi skal eg berre koda det med ein gong. Eg finn utvilsomt ein modul på CPAN som gjer det eg vil uansett. Selveid er definitivt veleid, og dette er nok ikkje siste gongen eg nyttar perl. Sjølv om eg likar python, er eg ikkje redd for å prøva nye ting. Eg må berre gidde. Det er der problemet ligg…

Leave a Reply

Spam protection by WP Captcha-Free