Category Archives: Open source

Wie, jag kom med!

Häromdagen ansökte jag till MonoTouchprojektet eftersom jag fann det väldigt intressant att utveckla med. Och de snälla människorna gav mig beta access till projektet!

Skall genast testa det och ge det kommentarer, när jag har något. Men testning kan nog inte bli förräns på söndag. Om tio minuter ska vi på födelsedagsevenemang och imorgon skall vi hjälpa min syster med fästman att flytta.

Värt att notera är att MonoTouch kommer bli en kommersiell utgåva, enligt Miguel:

Commersial

För mig är detta helt ok, jag kan tänka mig att det måste vara ett kostsamt avtal med apple för att få lov att göra såhär. Mono i sigsjälvt är ju öppet, och det tycker jag är viktigast!

Jag återkommer som sagt, så fort jag har lite kod att bidra med :).

Tills vidare refererar jag till monotouch.info och detta inlägg:
http://conceptdev.blogspot.com/2009/09/initiate-call-with-monotouch.html

Go kväll!
Marcus

Enkelt övervakningssystem och linux

För längesen satt jag och labbade lite grann med AXIS Nätverkskameror och hur man kan spela in automatiskt med dem.

Jag försökte använda mig av bash och andra linux/gnu-kommando som jag bara kunde för att få systemet uppe och rulla.

Hur fungerar det?
Lösningen är väldigt enkel. Som första program ligger där ett script som väntar på ett tcp-meddelande som kommer in på port 31337 (nördigt va) och som därefter startar en nedladdning av en motion jpeg-ström som hålls vid liv i 5 sekunder per trigger som kommer från kameran. Det vill säga, får man samma larm under en pågående nedladdning av strömmen så läggs fem nya sekunder på innan man stänger strömmen.

Hur ställer jag in det?
Event Server SetupEvent setupBörja med att gå in i din kamera och skapa ett Motion Detection fönster. Därefter går du in till Event Servers och skapar din TCP-server med dina anslutningsinställningar. Glöm inte att porten skall vara 31337. När servern har satts upp, skapar du ett event som triggar på det motion detection-fönster som du skapat. Lägger till att det skall gå till tcp-servern du skapat och att det ska trigga ungefär 30 gånger per minut som eventet är igång. Detta gör att så länge något rör sig så hålls strömmen vid liv.

Som du säkert ser så är meddelandet en MAC-adress som är specific för varje enhet. Du måste givetvis inte döpa dina filer efter MAC-adressen men jag gjorde det för enkelhetens skull. Se bara till att du inte använder mellanrum i namnet.

Nästa steg är att installera filerna som är skapade på en lämplig plats. Låt säga att vi skapar det under en egen användare som vi döper till “security”. Vi lägger filerna i hemmappen, packar upp och skapar mappar.
/home/security:$ tar xvf supersimpleNVR.tar.gz
/home/security:$ cd supersimpleNVR/
/home/security:$ mkdir settings && mkdir captures && mkdir captures/tmp && captures/processed_captures && tmp

Det du ska göra nu är att gå in i settings mappen och skapa en fil som heter precis det meddelandet som du angett i ditt event i kameran och med filändelsen .sh. I mitt fall blir det 00408C630000.sh

I denna skall innehålla:

  1. #!/bin/sh
  2. user=root
  3. pass=pass
  4. fps=5
  5. ip=192.168.1.15
  6. port=80

Ändra allting så att det passar med dina inställningar och behov. Glöm inte att filen måste finnas i mappen som heter settings.

Mappen captures innehåller alla dina inspelningar och mappen captures/tmp används för att extrahera bilddata i sparade strömmar.

Vad ska jag med mappen captures/tmp till?
Mjpg kan ställa till det när det gäller lagring. Därför finns scriptet “creatempeg” som skapar mpeg4-filer av nedladdningarna. Detta script använder ett C#-program som klipper ur bilderna ur strömmen och skapar jpg-filer utav dem.

Vanliga tmp då?
Den gör inget speciellt mer än sparar tidsstämplar för att veta när en ström startades.

Vad behöver jag för program?
Du behöver bara standardprogram för att kunna spela in.

Du behöver:

  1. Netcat
  2. Curl
  3. Mono
  4. mencoder

Begränsningar för närvarande!
För närvarande kommer filmer som konverteras till mpeg4 alltid gå skapa filer med 5fps, oavsett vad du laddat ner i. Fixa detta själv genom att sätta den fps du önskar.

Hur startar jag det?
Du startar det lättast genom att starta filen nc med screen:
/home/security/reallysimpleNVR/:$ screen sh nc
/home/security/reallysimpleNVR/:$ [ CTRL + A + D ]

Ladda ner källkoden här: reallysimpleNVR.tar

Har inte testat det på länge, och det kan hända att den måste modifieras något. Speciellt c#-koden. Använd på egen risk 🙂

Ha en bra kväll
/marcus

Vattna blommorna – del 10

Nu händer det grejer.

Mitt program för min pic känns komplett. Har suttit och debuggat kod nu ikväll och kommit fram till att den lösningen jag postade nu senast inte var den bästa, för att vara helt ärlig.

Bland annat så verkar inte !RA# fungera riktigt i kompilatorn av någon anledning. Koden beter sig konstigt när detta händer. Eller har jag bara programmerat kasst?

Efter lite kodändringar fungerade det!

Koden ser ut såhär nu:

#include <pic16f690.h>

typedef unsigned int word;

word at 0x2007 __CONFIG = (_INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _BOR_OFF & _PWRTE_ON & _MCLRE_OFF & _IESO_OFF & _FCMEN_OFF);
void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i<=50; i++) //50 iterations is _basically_ 1 ms.
			;
}
unsigned int pumpint=0; //just an int for loops..
unsigned int totalpumpms = 0; //A counter for how many ms the pump has been running
unsigned static int maxpumpms = 100000; //Change this if you are using a slower/faster pump.
void main () {
  TRISC = 0x00;	/* PORTC, All outputs */
  TRISA = 0x1f; /* RA1-RA4 input, RA>4 output */
  while(1)
  {
    pumpint = 0;
    //Start pumping water, if RA3 isn't activated.
    if(RA3 || totalpumpms >= maxpumpms)
    {
		//Do nothing..
		delay_ms(1);
    }
    else
    {

      while(pumpint < 5000) //Max pumptime is 5 secs.
      {
        if(RA3) //If(ra3) is used since while(ra3) doesn't seem to work as good with sdcc compiler.
        {
          break;
        }
	else if (totalpumpms >= maxpumpms)
	{
		break;
	}
        PORTC=0x0f;
        //As an extra marker, never pump for more than 5 secs.
        delay_ms(1);
		totalpumpms++; //Add to the total pumpmscounter.
        pumpint++; //just for this loop.
      }
	  pumpint = 0;
    }
    //Pumping done. Wait 15 minutes
    PORTC=0x00; //Close all outputs

    //Reset button must work within this time. Don't sleep for a whole 15 mins, but keep polling.
    while(pumpint <= 90000) //15 min == 900000ms. We're polling each 100ms.
    {
      if(RA4) //RA4 is the reset switch
      {
		totalpumpms = 0;
		break;
		//at this point, we have resetted the counter, and let the water start pumping again.
      }
      pumpint++;
      delay_ms(100);
    }
  }
}

För närvarande använder jag Windows 7 (ja, jag vet, det är inte omtyckt, men faktum är att win börjar konkurrera med kde och linux..) och mitt debuggingprogram blev “Real Pic Simulator” som utförde sitt arbete mycket väl! Programmet är dock inte gratis, men en 30-dagars testversion gick att ladda ner. Och mer tid behöver jag nog inte :-).

Som open source entusiast skulle jag kört gpsim som är det naturliga och självklara valet om man tycker om öppen mjukvara men jag tyckte inte att jag hade lust med att mecka conf-filer och tillägg för att få just min pic att stödjas. RPS fick funka ikväll, vilket det gjorde!

Nu kan jag lugnt slappna av resten av kvällen och njuta av mitt arbete :).

Imorgon blir det att kolla nya möbler och liknande, då vår flytt har ändrats från 1:a November till 1:a Oktober/Mitten på September.

Ha en god afton. Själv Njuter jag med lite jamaicansk öl. Det är ju inne med Jamaica nu 🙂
/Marcus

Vattna blommorna – Del 9

Efter arbetet idag blev det en snabb sväng inom biltema för att köpa en tio-liters hink med lock samt lite slang som kan transportera vatten. Jag passade även på att köpa mig en annan pump på biltema, den som nämnts i ett utav de första inläggen gällande mitt blomsterprojekt.

Alltså:

  • 362772 – Lock till 10L hink 9,90kr
  • 362770 – 10L hink 14,90kr
  • 15331 – Vattenslang 10Mx9mm 36,90
  • 25980 – Pentry-pump 79,90

Totalt: 142,40kr

Efter det bar det hem och testa hur fort jag tömde mina tio liter och resultatet blev prick 100 sekunder att pumpa vattnet till den nivå att den nästan torrkörts.

Detta ger mig lite modifikation i mitt program som ska ligga i PIC:en

#include <pic16f690.h>

typedef unsigned int word;

word at 0x2007 __CONFIG = (_INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _BOR_OFF & _PWRTE_ON & _MCLRE_OFF & _IESO_OFF & _FCMEN_OFF);
void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i<=50; i++) //50 iterations is _basically_ 1 ms.
			;
}
unsigned int pumpint=0; //just an int for loops..
unsigned int totalpumpms = 0; //A counter for how many ms the pump has been running
unsigned static int maxpumpms = 100000; //Change this if you are using a slower/faster pump.
void main () {
  TRISC = 0x00;	/* PORTC, All outputs */
  TRISA4 = TRUE; /* RA4 input */
  while(1)
  {
    //Start pumping water, if RA3 isn't activated.
    //Wait for the breaking SW1
    if(RA3 == false && totalpumpms < maxpumpms)
    {
      while(1)
      {
        if(RA3) //If(ra3) i used since while(ra3) doesn't seem to work as good with sdcc compiler.
        {
          break;
        }
        PORTC=0x0f;
        //As an extra marker, never pump for more than 5 secs.
        delay_ms(1);
		totalpumpms++; //Add to the total pumpmscounter.
        if(pumpint >= 5000) //Loop until 5000ms == 5secs is reached.
        {
          pumpint = 0;
          break;
        }
        pumpint++;
      }
    }
    //Pumping done. Wait 15 minutes
    PORTC=0x00; //Close all outputs
    //Reset button must work within this time. Don't sleep for a whole 15 mins, but keep polling.
    while(pumpint <= 90000) //15 min == 900000ms. We're polling each 10ms.
    {
      if(RA2) //RA2 is the reset switch
      {
		totalpumpms = 0;
        pumpint = 0;
      }
      pumpint++;
      delay_ms(10)
    }
  }
}

Jag har inte verifierat koden än, men jag tror det skall fungera :). Skall testa det imorgon, och i helgen ska jag göra mitt bästa för att bygga ihop den helt!
Jag vill ju ha den klar innan flytten, som förvisso inte är förräns i November, men jag vill gå vidare till mina andra små projekt.

Förresten, har ni någon bra bok ni kan rekommendera om embedded c-programmering. Vad man bör tänka på i minnesvägar och sådär? Jag hade uppskattat lite tips på denna fråga :).

Mvh
Marcus

Publish to WordPress plasmoid v0.02

Igårkväll satt jag och skissade lite på hur framtida versioner av wordpress-plasmoiden skulle kunna se ut.

Jag använde mig utav QT Designer för att göra själva moc-upen och det blev såhär:

Wordpress Plasmoid
Wordpress Plasmoid

Plasmoiden blir lite större, men känns mer komplett, med möjligheterna att:

  • Lägga till taggar
  • Markera flera kategorier
  • Editera i redan skapade bloggposter
  • Förhandsvisa material

Jag tror det kan bli riktigt bra!
Funderar även på hur mycket jobb det skulle vara att lägga in bilder med drag-n-dropfunktionalitet. WordPress libbet som är integrerat stöder det, men det är nog lite jobb att ställa in storlek med en extra dialogruta. Vi får helt enkelt se.

Bilbo blogger

Bilbo på persiska
Bilbo på Persiska

Tänkte bara att jag kunde tipsa om denna fantastiska bloggapplikation till KDE 🙂

Programmet heter Bilbo blogger och är skrivet för KDE version 4.x och är ett utmärkt ersättningsval för min WordPress Plasmoid 🙂

De flesta bloggar stöds och man kan enkelt lägga in den man har genom att enbart skriva in adressen till den, därefter listar bilbo själv ut vilken bloggtyp det är och konfigurerar efter det.

Användargränssnittet är väldigt smidigt och det fungerar väldigt bra. Jag har inget att klaga på när det gäller denna applikation. Den är perfekt när Firefox inte vill svara lika snabbt som du hinner skriva på tangentbordet (vilket händer ovanligt mycket på min netbook, tyvärr).

Skulle jag sätta betyg just nu får den 5/5. Jag hittar inget som är dåligt!

Nedladdning:

Vattna blommorna – Del 7

God morgon!

Tänkte jag kunde bidra med koden som jag skrev igår. Den är nog inte helt färdig vid närmaste eftertanke, men jag tror den fungera som den skall just nu. Det enda som inte är testat är RA2 och hur den fungerar. Men det hoppas jag den gör :-).

Blir det att köra till Kjell.com och köpa lödkort ikväll? 🙂

Koden jag skrev ser ut enligt följande:

#include <pic16f690.h>

typedef unsigned int word;

word at 0x2007 __CONFIG = (_INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _BOR_OFF & _PWRTE_ON & _MCLRE_OFF & _IESO_OFF & _FCMEN_OFF);
void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i<=50; i++) //50 iterations is _basically_ 1 ms.
			;
}
unsigned int pumpint=0; //just an int for loops..
unsigned int totalpumps = 10; //Keeping total pumps for ten pumps before a reset is needed (until calculated how much 10 litres goes for)
void main () {
	TRISC = 0x00;	/* PORTC, All outputs */
  TRISA2 = 0x01; /* RA2 input */
  while(1)
  {
    //Start pumping water, if RA3 isn't activated.
    //Wait for the breaking SW1
    if(!RA3 && totalpumps < 10)
    {
      while(1)
      {
        if(RA3)
        {
          break;
        }
        PORTC=0x0f;
        //As an extra marker, never pump for more than 5 secs.
        delay_ms(1);
        if(pumpint >= 5000) //Loop until 5000ms == 5secs is reached.
        {
          PORTC=0x00;
          pumpint = 0;
          totalpump++;
          break;
        }
        pumpint++;
      }
    }
    //Pumping done. Wait 15 minutes
    PORTC=0x03;
    //Reset button must work within this time. Don't sleep for a whole 15 mins, but keep polling.
    while(pumpint <= 90000) //15 min == 900000ms. We're polling each 10ms.
    {
      if(RA2) //RA2 is the reset switch
      {
        totalpumps = 0;
        pumpint = 0;
      }
      pumpint++;
      delay_ms(10)
    }
  }
}

Som ni säkert ser så är det inget direkt avancerat för att skriva program till en PIC:-).
Ska ta och skapa mig en riktig projektsida här på bloggen om just detta. Så fort jag har lite mer fysiskt arbete klart!

Vi hörs
Marcus

Vattna blommorna – Del 6

Idag har jag fått lite tid till att programmera lite mer på mitt blomstervattnarprojekt!

Den stora anledningen till varför det har tagit så lång tid har varit för att jag har tyckt att det har varit roligare med att programmera annat,men framförallt att Windows har krävts för att labbkortets switchknapp skall fungera. Och jag är ju ingen jättefan av Windows, när det gäller hemanvändning :-).

Oavsett operativsystem så fick jag igång alltihop och nu ser det ut att fungera precis som det skall.

Programflödet i piccen ser ut enligt följande:

  1. Vänta 60 sec innan rutinen körs igångs.
  2. Kolla att RA3 är FALSE
  3. Om FALSE Pumpa vatten 5 sec eller till RA3 blir TRUE
  4. Vänta 15 min. Kör om rutinen.

Det är ett relativt enkelt program (till att börja med iallafall) som inte gör mer än vattnar på enklaste vis.

Kod kan jag posta först imorgon, då datorn är avstängd och jag för närvarande skriver från min netbook.

Jag återkommer med mer information imorgon!

På återseende!
Marcus

KDE 4.3

Igår släpptes ännu en fantastisk release från KDE-utvecklarna, och även om jag personligen har kört 4.3 ett tag nu via Releasekanditaterna så blir jag mäktigt imponerad varje gång.

I denna release har där fixats 10,000 buggar och 63,000 ändringar har skickats in till KDE‘s gitourious repository. Och även om målet med version 4.3 hela tiden har varit att polera föregående versionhar där ändå kommit 2000 nya features på sex månader. Det kallar jag effektivt arbete! Jämför gärna med gnomes senaste release 2.26 där det uppenbarligen inte händer så mycket:

GNOME 2.26 with its hundreds of bug fixes and user-requested improvements.

Tittar vi lite på vad som hänt på skalet så ser vi att ett nytt plasmatema har tagits fram och blivit standard. Det heter Air och gör hela upplevelsen ordentligt häftig!

KDEs egna annonsering av 4.3 hittar du här

KDE är verkligen fantastiskt, och det får stackars gnome att vara alldeles för gammalmodigt för att en modern människa ska använda det 🙂

Nu är det dags att bege sig till arbetet!
Vi hörs!

Vilken dist kör du?

En ständigt återkommande fråga är vilken dist man kör. Varför man kör den och vilken man borde köra ;). Och eftersom jag fick frågan av @dikatlon på twitter så får detta helt enkelt bli ett inlägg som handlar om vilka distributioner jag för närvarande kör.

Kubuntu

Baserat på Ubuntu (som i sig är baserat på debian) men istället för att köra skrivbordsmiljön gnome har man skapat sin egna touch och lagt in KDE istället. Ett för mig ett helt naturligt val, då jag alltid har gillat hela utseendet med KDE, jämfört med gnome, som ubuntu erbjuder.

Nuvarande version av kubuntu (9.04) kör KDE 4.2.1, som standard men jag har valt att uppgradera till 4.3 :-). Det senare är alltid bättre!. Och om vi bortser från det faktum att den kör KDE så är en anledning till att den håller mig produktiv. Jag behöver inte läsa manualer, confa filer eller köra skript. Kubuntu gör det mesta automatiskt och bara låter mig arbeta på datorn, istället för att arbeta med den.

Näste dist till rakning är Arch linux. Arch linux, som från början bygger på Svenska Crux (vilket var en tidigare favorit) är en dist som låter dig bestämma precis över vad du vill ska installeras i ditt system.  Du börjar med enbart en kärna, lite gnuprylar och pakethanteraren pacman. Arch linux får ett stort plus i kanten för sin fantastiska dokumentationsbas, de aktiva medlemmarna som håller paketen vid liv och ser till att de blir uppdaterade. Även här kör jag med KDE men den verkliga anledningen till att jag använder Arch är mitt sug efter att lära mig saker, att få saker och ting att fungera på egen hand, istället för att låta apt-get sköta rubbet. Man har en lite mer kontroll och man lär sig otroligt mycket på att köra denna dist.

Och till sist. Linux Mint. En dist som är baserad på ubuntu, men där man inte gillade färgen brunt samt dess tankar gällande stängda format som etc flash/java/mp3-stöd. Till en början var jag väldigt skeptisk till varför man överhuvudtaget behövde köra en dist som Mint, när det är så enkelt att installera dessa tillägg. Jag menar, man får ju frågan en gång i Ubuntu, därefter installeras det och problemet är löst. Men efter mycket positiv kritik utav dem som faktiskt testat det på “Linuxportalen” (antagligen tack vare avataren tux-svens påtryckningar) gav jag mig på att testa denna distribution

Och helt ärlig. Den är kanon! Linux mint har tänkt på allt, och utfört sitt arbete bra!

Jag kör linux mint på min Acer aspire one (som har fruktansvärt dålig SSD) med gnome (!!) eftersom KDE inte riktigt vill fungera optimalt (troligen på grund av disken) på den.  Den låter mig surfa, hittar min mobil som får agera modem och den kör på mycket utav det senaste programmen.

Det här var  vi mina tre val av distributioner. Vilka kör du?