Archive for the ‘Fri programvara’ Category

Google waves i MediaWiki

måndag, augusti 3rd, 2009

Jag har skrivit en extension till MediaWiki som gör det möjligt att bädda in en eller flera waves på en wikisida.

Här kan ni som har ett sandlådekonto hos Google kolla hur det ser ut här: http://mickenordin.se/wiki/Wave

Waves är ett nytt sätt att kommunicera som kan liknas vid en chatt, ett dokument, en wiki och e-post, allt i hopslaget till ett enda paket som uppdateras i realtid. Google släpper också hela härligheten under Apachelicensen. Här finns en lååång demofilm för den som är intresserad:

Se även

Läsa XML med PHP

söndag, juli 26th, 2009

Det tog av någon anledning lång tid för mig att fatta att PHP har utmärkta inbyggda funktioner för att läsa XML. Så här gör man:

Först måste vi ha nått att parsa, så vi hämtar väderleksrapporten för Södertälje hos Yahoos väderapi:

$data = file_get_contents('http://weather.yahooapis.com/forecastrss?p=SWXX0026&u=c');

När XMLen nu ligger i variabeln $data fixar vi en parser och ber den lägga informationen i en array:

$parser = xml_parser_create_ns();
xml_parse_into_struct( $parser, $data, $values );

Detta lägger informationen som finns i varaibeln $data i arrayen $values. Nu kan vi komma åt värdena genom vanliga indexeringsnotation, i det här fallet hämtar vi temperaturen:

print_r( $values[48][attributes][TEMP] );

Slutligen stänger vi parsern:

xml_parser_free( $parser  );

Hela koden ser ut så här:

<?php
$data = file_get_contents('http://weather.yahooapis.com/forecastrss?p=SWXX0026&u=c');
$parser = xml_parser_create_ns();
xml_parse_into_struct( $parser, $data, $values );
print_r( $values[48][attributes][TEMP] );
xml_parser_free( $parser  );
?>

Ett hett tips är att använda print_r() på hela arrayen, på så vis kan man lätt få reda på vilken information som finns och vilka indexeringsnycklar som kan komma åt informationen:

print_r( $values );

Läs även andra bloggar om ,

Ladda ner alla torrent-filer från TPB

lördag, juli 4th, 2009

I dag blir det ingen guide, utan mer en fråga. Efter att ha läst det här började jag fundera. Hur gör man för att ladda hem alla torrent-filer från TPB? Om man hade en lista över alla URL:er, skulle det vara trivialt. Hur får man då en lista över alla URL:er till alla torrent-filer på TPB? Min första tanke var att hämta alla länkar som man får via länken "Bläddra bland torrenter" på TPB. Jag skrev då ett skript som hämtar alla sådana länkar:

#!/bin/bash
it=100
while [[ $it -lt 700 ]]; do
 
i=0
    while [[ $i -lt 100  ]] ; do
      xmlstarlet sel --net --html -T -t -m "//*[local-name()='a']" -o 'NAME: ' -v "translate(. , '&#10;', ' ')" -n -o 'LINK: ' -v @href -n -n \
      "http://thepiratebay.org/browse/$it/$i/3" | grep torrent | grep -v phpAdsNew | sed -e 's|LINK: /|http://thepiratebay.org/|g' \
      -e 's|LINK: http://|http://|g' | grep ".TPB.torrent" >> tpb.links
      let "i=i+1"
      sleep 1s
  done
  let "it=it+100"
done

Tyvärr verkar inte detta funka, det verkar som om TPB har lagt upp en begränsning som gör att man bara får hämta 100 sidor med 30 länkar vardera från varje kategori (därav begränsningarna i while-looparna i skriptet), det innebär i praktiken att jag bara får 17970 länkar totalt tillbaka från skriptet. Bry er för övrigt inte så mycket om själva skriptet, det är ett ful-hack med massa cruft, eftersom jag bara ville kolla lite snabbt hur man kan göra.

Så finns det någon som är bättre än mig på TPB som vet hur man kan göra får att få tag på fler resultat? Svara gärna i kommentarerna om ni kommer på nått.

Se även:

Läs även andra bloggar om , ,

Despotify utan premiumkonto

fredag, juli 3rd, 2009

Via en trådubuntu-se.org  (tack för tipset DMZ och tack Rasmus för att du tipsade mig!) fick jag reda på att det finns en revision av despotify som funkar utan premiumkonto: revision 291. Så här gör du för att köra, öppna en terminal och kör:

svn checkout --revision 291 https://despotify.svn.sourceforge.net/svnroot/despotify despotify

Därefter måste du göra en liten ändring i koden:

cd despotify/
nano src/lib/session.c

Leta efter session->client_revision = 44764; (sök genom att trycka ctrl+w) och ändra så att det i stället står:  session->client_revision = 99999;

Spara genom att tryck ctrl+x och välj "j". Nu kan du kompilera och köra:

make
sudo make install

Därefter kan du starta despotify i terminalen genom att skriva:

simple användarnamn lösenord

Klart!

 

Om du inte vill skriva ditt lösenord synligt i terminalen tipsar Konservburk om en skalfunktion i tråden på Ubuntu-se, lägg bara koden:

despotify(){ simple "${1:-$(read -p "user: " user; printf "$user")}" "${2:-$(stty -echo; read -p "pass: " pass; stty echo; printf "$pass")}"; }
 

i ~/.bash_aliases:

nano .bash_aliases

Klistra in med ctrl-shift-v och spara genom att trycka ctrl+x och svara "j" sedan kan du starta despotify genom att ange "despotify" i terminalen.

Information om beroenden med mera finns på : http://despotify.se/

Se även:

Läs även andra bloggar om , ,

Sätt upp en proxyserver åt iranierna

tisdag, juni 16th, 2009

Iranska myndigheter stänger ned internet för sina medborgare (HADOPI on steroids). Så här kan du göra för att hjälpa till, sätt upp en proxyserver som de kan använda för att komma förbi portvakterna:

I Ubuntu:

sudo apt-get install squid

I CentOS/RedHat:

yum install squid

Sedan måste du redigera squid.conf (som root, dvs med sudo före i Ubuntu):

nano -w /etc/squid/squid.conf

Leta reda på raden “http_access deny all” och ändra till “http_access allow TRUSTED”. Lägg sedan till detta före http_access-raden:

acl TRUSTED src 62.60.128.0/17 62.193.0.0/19 62.220.96.0/19 77.36.128.0/17 77.77.64.0/18 77.104.64.0/18 77.237.64.0/19 77.237.160.0/19 77.245.224.0/20 78.38.0.0/15 78.109.192.0/20 78.110.112.0/20 78.111.0.0/20 78.154.32.0/19 78.157.32.0/19 78.158.160.0/19 79.127.0.0/17 79.132.192.0/19 79.170.144.0/21 79.175.128.0/18 80.66.176.0/20 80.69.240.0/20 80.71.112.0/20 80.75.0.0/20 80.191.0.0/16 80.242.0.0/20 80.253.128.0/20 80.253.144.0/20 81.12.0.0/17 81.28.32.0/20 81.28.48.0/20 81.31.160.0/20 81.31.176.0/20 81.90.144.0/20 81.91.128.0/20 81.91.144.0/20 82.99.192.0/18 82.115.0.0/19 83.147.192.0/18 84.47.192.0/18 84.241.0.0/18 85.9.64.0/18 85.15.0.0/18 85.133.128.0/17 85.185.0.0/16 85.198.0.0/18 86.109.32.0/19 87.107.0.0/16 87.247.160.0/19 87.248.128.0/19 89.144.128.0/18 89.165.0.0/17 89.221.80.0/20 89.235.64.0/18 91.98.0.0/15 91.184.64.0/19 91.186.192.0/19 91.206.122.0/23 91.208.165.0/24 91.209.242.0/24 91.212.16.0/24 91.212.19.0/24 91.212.252.0/24 92.42.48.0/21 92.50.0.0/18 92.61.176.0/20 92.62.176.0/20 92.242.192.0/19 93.110.0.0/16 93.190.24.0/21 94.74.128.0/18 94.101.128.0/20 94.101.176.0/20 94.101.240.0/20 94.139.160.0/19 94.182.0.0/15 94.184.0.0/17 94.232.168.0/21 94.241.128.0/18 95.38.0.0/16 95.80.128.0/18 95.81.64.0/18 95.82.0.0/18 95.82.64.0/18 95.130.56.0/21 95.130.240.0/21 188.34.0.0/16 188.93.64.0/21 188.121.96.0/19 188.121.128.0/19 188.136.128.0/17 188.158.0.0/15 193.189.122.0/23 194.225.0.0/16 195.146.32.0/19 212.16.64.0/19 212.33.192.0/19 212.50.224.0/19 212.80.0.0/19 212.95.128.0/19 212.120.192.0/19 213.176.0.0/19 213.176.32.0/19 213.176.64.0/18 213.195.0.0/18 213.207.192.0/18 213.217.32.0/19 213.233.160.0/19 217.11.16.0/20 217.24.144.0/20 217.25.48.0/20 217.64.144.0/20 217.66.192.0/20 217.66.208.0/20 217.146.208.0/20 217.172.96.0/19 217.174.16.0/20 217.218.0.0/15

Det öppnar proxien, men bara för iranska ip-ranger. Du kan stänga av loggning genom att lägga till dessa rader:

access_log none
cache_store_log none

Avkommentera eller skriv in denna rad, så att inte användare som kommer in via squid kan köra saker via localhost:

http_access deny to_localhost

Spara sedan och stäng genom att trycka ctrl+x och välj j och enter. Starta sedan om servern.

I Ubuntu:

sudo /etc/init.d/squid restart

I CentOS/Redhat, kör detta som root:

service squid start

Obs! Glöm inte att öppna port 3128 i din brandvägg/router så att det går att komma åt proxyn utifrån! Du kan också ställa in vilken port proxyn ska lyssna på genom variabeln http_port i /etc/squid/squid.conf.

När du är klar kan du skicka ett mejl med adressen till: me@austinheap.com eller gr88proxies@googlegroups.com. Skicka inte adressen öppet på Twitter. Mer info och länkar för Windows finns här: http://www.piratpartiet.se/proxy

Guiden baserad på denna engelska guide: http://blog.austinheap.com/2009/06/15/how-to-setup-a-proxy-for-iran-citizens/ och är inte vältestad. Hittar du fel, säg gärna till i kommentarerna. OBS! Gör inte det här om du har en massa viktiga grejer på din dator/server, eller kör kritiska tjänster på den.

Uppdatering: Här finns en färdig konfigurationsfil för squid som tar ett helhetsgrepp på säkerheten och öppnar icke-standardportar i stället för 3128: dev.austinheap.com/iran/squid-iran-ideal.txt Kör gärna på den. Kom ihåg att öppna de portar som anges i filen.

Läs även andra bloggar om , ,

Twitter i bash

söndag, juni 14th, 2009

I dag hittade jag en roligt, men ack så ofärdig, twitterklient för terminalen skriven i python:

jspr.tndy.me/2008/05/twitterminal-a-terminal-based-twitter-client-in-python/

Tyvärr visade det sig att det inte ens gick att skicka tweets med klienten i fråga, och när jag skulle fixa denna lilla brist i programmet snubblade jag över lite bashkod för twitter på Twitter Fan Wiki. Det kunde jag naturligtvis inte motstå och resultatet blev att jag skrev en liten twitterklient i bash.

För att testa skriptet måste du först installera curl och xmlstarlet, i Ubuntu gör du så här:

sudo apt-get install curl xmlstarlet

sedan måste du ladda hem och köra skriptet:

wget http://mickenordin.se/files/twitter.sh
chmod +x twitter.sh
./twitter.sh

Så här ser det ut:


Om du inte vill skriva in ditt användarnamn och lösenord varjegång du startar skriptet kan du skapa en fil kallad user.inc med följande innehåll (och bara det innehållet):

username=your_username_here
password=your_password_here

user.inc sparar du sedan i samma katalog som du lagt twitter.sh i. Klart!

Uppdatering: en uppdaterad version av skriptet hittar du här:http://mickenordin.se/files/twitter.tar.gz där finns också skriptet twitter_friends.sh som kör en oändlig loop med uppdatreing av din friends timeline varannan minut.

 Läs även andra bloggar om , , ,

Hacka MediaWiki

söndag, maj 17th, 2009

Jag har skrivit en rätt användbar extension till MediaWiki med benägen hjälp av David Öhlin. Det programtillägget kan ändra vilka tabbar som visas för en användare som kommer till din wiki:

Att skriva extensions till MediaWiki är både enkelt och kul. MediaWiki är skriven i PHP, så det är en förutsättning att du kan det språket för att kunna hacka MediaWiki. Jag tänkte här gå igenom ett enkelt exempel på hur man kan göra för att skriva en egen extension. Här blir exemplet en extension som låter dig byta logo direkt på wikin (om du nu skulle vara som google och vill byta logo ofta 8) ).

En enkel extension för MediaWiki består av tre delar, varav två är obligatoriska för funktionen. Först måste du få MediaWiki att köra din extension. Det kan du göra på två sätt, antingen via arrayen $wgExtensionFunctions, eller via en av MediaWikis hooks. Jag kommer inte gå igenom hooks här, men du kan kolla själv på mediawiki.org:

I stället kommer jag använda den första metoden. Jag börjar med att bestämma vad min funktion skall heta, i det här fallet bir det "setLogo". Jag lägger sedan till den i ExtensionFunctions arrayen:

$wgExtensionFunctions[]='setLogo'; //Register function

Nästa steg blir att tala om för MediaWiki att du har skrivit en extension och få wikin att visa information om den på specialsidan "Special:Version". Det görs med arrayen $wgExtensionCredits:

$wgExtensionCredits['other'][] = array(
    'name' => 'SetLogo',
    'version' => 0.1,
    'author' => 'Micke Nordin',
    'url' => 'http://mickenordin.se/',
    ‘description’ => 'Easy interface for changing logo',
);

Ovanstående är väl rätt självförklarande, man beskriver helt enkelt sin extension.

Slutligen måste du skriva din funktion:

function setLogo()
{
    $logoURL = Article::newFromId(Title::newFromText("Mediawiki:LogoURL")->getArticleId());
    if(isset($logoURL)) //If that worked
    {
        global $wgLogo;
        $wgLogo = $logoURL->getRawText(); //Set $wgLogo to the URL on that page
       
    }
   
    return true;
}

Jag har bestämt att jag vill lagra URL till min logo på en sida i MediaWiki-namnrymnden kallad "MediaWiki:LogoURL". Jag använder metoden Article::newFromId för att skapa ett objekt av typen Article som jag lagrar som $logoURL. newFromId tar ett idnummer för en artikel som argument och jag använder metoden getArticleId() på ett nytt objekt av typen Title som jag skapar med metoden newFromText där parametern är namnet på sidan jag vill läsa in. Kanske finns det ett enklare sätt att skapa ett objekt av typen Article, jag vet inte. Sedan kollar jag om objektet har skapats korrekt. Om det inte gjort det kan det t.ex. bero på att sidan vi vill hämta url:en från inte är skapad ännu. Därefter ändrar jag värdet på den globala varibeln $wgLogo som innehåller sökvägen till logon. Det gör jag med den nya metoden getRawText(). Metoden är så ny, att den bara funkar med utvecklingsversionen av MediaWiki och inte den sensste stabila utgåvan som i dagsläget är 1.14.0. Slutligen är det viktigt att komma ihåg att ens extension alltid bör returnera true. Klart! Nu kan man lägga in den fullständiga sökvägen till en bild man vill ha som logo på wikisidan MediaWiki:logoURL och sedan kommer MediaWiki att visa den bilden som logo i de skins som har en sådan. Allt som allt ser koden ut så här:

<?php

$wgExtensionFunctions[]='setLogo'; //Register function

$wgExtensionCredits['other'][] = array(
    'name' => 'SetLogo',
    'version' => 0.1,
    'author' => 'Micke Nordin',
    'url' => 'http://mickenordin.se/',
    ‘description’ => 'Easy interface for changing logo',
);

function setLogo()
{
    $logoURL = Article::newFromId(Title::newFromText("Mediawiki:LogoURL")->getArticleId());
    if(isset($logoURL)) //If that worked
    {
        global $wgLogo;
        $wgLogo = $logoURL->getRawText(); //Set $wgLogo to the URL on that page
       
    }
   
    return true;
}

Du installerar programtillägget som vanligt genoma att placera koden i extensionsmappen på servern och lägga sedan använda require_once för att inkludera filen i LocalSettings.php. I det här fallet blir det:

 require_once "$IP/extensions/setLogo/setLogo.php";

om du lagt filen i en mapp kallad "setLogo" i din extensionskatalog och sdan döpt filen till "setLogo.php".

Se även:

Läs även andra bloggar om , ,

Inget hårdbröd utan smör

tisdag, maj 12th, 2009

I dag gick jag till ICA för att köpa Leksandsknäcke. Väl på affären plockar jag på mig en förpackning brungräddat Leksandsbröd, men blir stoppad av en anställd på affären som säger att jag inte får köpa brödet utan att jag också köper normalsaltat Bregott. Jag har dock några kompisar som själva brukar kärna smör och ge till mig utan att ta betalt, så jag säger att jag inte är intresserad utan bara vill ha hårdbrödet. Bryskt rycker den butiksanställda personen förpackningen ur handen på mig och säger att det där får jag ta med mejeriet som tillverkar Bregott. Brödet kommer tillsammans med smöret från leverantören, säger personen, så vi kan inte göra något.

Så gick det förstås inte till. Jag försökte köpa en bärbar HP550 från Dustinhome. De ville inte sälja den utan operativsystem till mig. När jag påtalade att jag inte trodde att det var lagligt enligt gällande konkurenslagstiftning att tvinga på mig mjukvara, när jag bara ville ha datorn fick jag följande svar:

Detta får ni ta med Microsoft då dessa kommer förinstallerade till oss. Det är ingenting vi blandar oss i, beklagar!

Kul! De vill inte sälja hårdbröd utan att jag samtidigt köpte smör. Gillar du inte dealen, ta upp det med smörtillverkaren. What?

Se även:

Läs även andra bloggar om , , , , ,

Ny hemsida

söndag, maj 3rd, 2009

Jag har länge varit fundersam på hur jag skulle göra med min hemsida mickenordin.se. Jag installerade Drupal i någon tanke att jag skulle lära mig en till CMS, men det blev inte mycket till innehåll. Något som också störde mig var det disparata utseendet min site fick, WordPress såg ut på ett sätt medan Drupal såg ut på ett annat. Så var det ända tills den enkla lösningen slog mig: jag installerade en till MediaWiki, vid sidan av min testwiki, och sedan portade jag WordPresstemat till ett eget MediaWikiskin.

Resultatet kan du se här: av länkarna ovan är det bara "blogg"-länken som går till WordPress, resten går till MediaWiki. På MediaWikin finns också den extension som jag skrivit tillsammans med David Öhlin: DynamicTabs, den används  i det här fallet för att gömma länkarna "redigera", "historik" osv på wikin, eftersom det bara är jag som ska redigera där.

Att porta temat var tämligen enkelt, jag kopierade helt enkelt exempelskinnet som finns på MediaWiki.org, skrev om det till att innehålla samma element som WordPresstemat och sedan flyttade jag över lämpliga delar av css:en. Temat som jag använder kommer förövrigt från SiteGround.

 

WYSIWYG-editor till MediaWiki

tisdag, mars 17th, 2009

Låt mig bara säga på en gång, ska man hålla på med MediaWiki tycker jag att man ska lära sig WikiML. Jag förbannar varje dag WYSIWYG-editorn i Wordpress och önskar att jag kunde få skriva WikiML i stället. Dock skall ingen hindra en om man ändå vill prova att ha en WYSIWYG-editor på sin wiki (och dessutom kan man stänga av den med ett enkelt knapptryck). Själv fick jag för mig att testa på grund av en diskussion på Wikipedia. Så här gör man i alla fall:

Denna guide är testad under Ubuntu 8.10, den funkar säkert på precis samma sätt i andra Linuxdistributioner, kör du Windows måste du använda Tortoise SVN, i övrigt ska det funka. Du måste dock ha shellaccess till servern, det går nog bra att installera via ftp också, då får du först ladda hem alla filer till din egen dator och sedan flytta över dem till servern manuellt via ftp. Observera också att FCKEditor som vi ska installera inte funkar med WikED.

1. Ställ dig i extensionskatalogen i MediaWikis huvudmapp:

cd /sökväg/till/mediawiki/extensions

2. Ladda hem FCK-tillägget via svn:

svn export http://svn.fckeditor.net/MediaWiki/trunk FCKeditor

3. Byt till den nya katalogen:

cd FCKeditor

4. Hämta själva editorn:

svn export http://svn.fckeditor.net/FCKeditor/tags/2.6.2 fckeditor

5. Öppna LocalSettings.php

nano ../../../LocalSettings.php

6. Lägg till följande rader längst ned i filen

#FCKEditor
require_once( "extensions/FCKeditor/FCKeditor.php" );

7. Klart!

Nästa gång du öppnar en sida för redigering på din wiki har du nu ett WYSIWYG-gränssnitt. För att avinstallera tar du bara bort raderna i LocalSettings.php och raderar hela katalogen FCKeditor i extensionsmappen (i den ordningen). Lycka till!

Se även:

Läs även andra bloggar om , , ,