ingen slogan
Programmering
En liten joggintur
7 Aug 10
En dålig sak med iPhone är att batteritiden gärna blir lite för liten om man har många saker igång, vilket jag lyckas få på en dags användning, och jag har på senare glömt att ladda den på kvällen, även om den var fulladdad vid 16:00 på dagen. Med andra ord så dör den gärna på natten / morgonen när jag sover, och en klocka som skulle ringa 09:30 ringde aldrig. Jag missade med andra ord morgonträningen på kaisho, som jag var sugen på. Kroppen kändes bättre idag, efter att fått vila lite grann, från torsdagens hårda träning.
Idag är det kalas för en av mina systrar, och jag sitter just nu i bilen påväg till Varberg, för att fira henne. Kalas brukar innebära tårta, snacks och massa andra tomma kolhydrater. Väldigt gott men inte så särskilt nyttigt
. Därför fick det bli en joggingtur innan vi åkte, för inte ha allt för dåligt samvete. Samma runda som vanligt, och tiden blev 25:57. 57 sekunder mer än jag skulle vilja, men kroppen ville inte mer efter 2km, och jag fick mentalt pressa mig för att inte stanna och börja promenera. En joggingpartner skulle kanske inte sitta fel
. Min flickvän vill aldrig springa med mig, det tycker jag e dåligt
.
Fan, jag börjar gilla Runkeeper mer och mer. Det känns så naturligt att ha den igång när benen börjar röra på sig. Tidigare använde jag shapelink, men eftersom mobilstödet inte är det bästa, har jag slutat använda det. Dom har ett API som är påväg ut, och jag har faktiskt en nyckel till det, men det är inte komplett än, så det får vänta innan man gör något konkret av det.
Förutom min konditionsträning skulle jag behöva styrketräna lite och bygga upp styrkan i min överkropp. Tips om funktionell träning för överkroppen uppskattas
2010 – Goals for the year
1 Jan 10
I didn’t make any new year promise to myself. Mostly because there’s nothing more broken than a promise made when welcoming the new year. So, instead of making promises, I’ve made goals that i’ll try to complete and deliver.
#1 – My first iPhone application released
A couple of months ago I beta tested MonoTouch, the .NET framework for the iPhone. It’s a great tool for all of us who doesn’t want to learn Objective-C. After some testing I started to do some actual work for an application. It still needs more work to be functional but at least I have something to go on. I all goes well this will be done somewhat in April.
#2 – Payson Drupal Module
This one is a bit disturbing and embarrasing. For a long time I’ve wanted to make this module for Drupal where you, as a user have the possibility to sponsor sites by paying a small amount of cash using paysons money transaction system. I like Payson, and it really deserves more focus
. Hopefulle this will come handy to Drupal site administrators. Hopefully this will can be expected in fall of 2010.
#3 – Community Site based on Django
The Swedish Community has for a long time lacked a good community web site for tracking one of the finest things with open source – The great open project that makes whatever disitribution worthy of. It can be all from background search engines like beagle to music players like Listen. All small components that makes the linux experience that great! This should be expected in late 2010.
That’s the three prioritized goals that I have as it is right now. I’ll end this post now to get started
.
See you!
/Marcus
Getting Drupal Modules using Python
23 Okt 09
A good friend of mine wrote yesterday a small python script that allows the user to search and download Drupal modules directly via the official ftp.
This was made since it is quite boring/irritating to first browse through the module page on drupal.org and then copy the link to a shell where you download the module you want on your web server.
Instead, Jonas (that’s my friends name, btw) wrote this program that directly scans through the drupal module directory on the ftp and returns the output in a shell where the user just enter the choice that he/she wants. Example:
jonas@thinkpad61:~$ ./idm.py hello Found 32436 files! [0] hellomobile-5.x-1.0.tar.gz [1] hellomobile-5.x-1.1.tar.gz [2] hellomobile-5.x-1.x-dev.tar.gz [3] hellotxt-6.x-1.x-dev.tar.gz Which module do you want to download? 1 Ok, lets get hellomobile-5.x-1.1.tar.gz jonas@thinkpad61:~$ ls -l hellomobile-5.x-1.1.tar.gz -rw-r--r-- 1 jonas jonas 824473 2009-10-22 22:34 hellomobile-5.x-1.1.tar.gz
I believe that this is quite usefull and interesting. But, as Jonas mentions in this post. It does not contain the functions that you might need, such as: version filter and dev filter. Meaning that you don’t want to see results for drupal 5 if you are running six. Nor do you want to use developer packages when you are in a critical installation.
I had some time so I made some improvements on the original:
tomburk@linux-e9bm:~> python idm-mf.py --help Usage: idm-mf.py [options] Options: -h, --help show this help message and exit -f version, --filter=version Filter the results in version numbers. -d, --dev Show developer packages
This allows the user to filter between the version, of course ”all” can be applied, if one wants to show all the results. Plus, It’s possible to toggle between showing the developer packages or not.
Final result:
tomburk@linux-e9bm:~> python idm-mf.py -f 5 hello Found a total of 32451 files! Files containing "hello" Based on filter: 5 Not showing developer packages [0] hellomobile-5.x-1.0.tar.gz [1] hellomobile-5.x-1.1.tar.gz Which module do you want to download? 1 Ok, lets get hellomobile-5.x-1.1.tar.gz tomburk@linux-e9bm:~> ls -s hellomobile-5.x-1.1.tar.gz 812 hellomobile-5.x-1.1.tar.gz
The file is available here: http://marcusfollrud.net/wp-content/idm-mf.py
Or at github: http://github.com/marcusfollrud/idm
See you!
A small update
2009-10-24 – Added support for multiple file download, Available on both github and in wp-content
#MonoTouch how to – Drag and Drop Image
23 Sep 09
My blog posts are commonly in Swedish, but since this might interest users outside the borders of Sweden I decided to write this post in English.
Today, I’ll show how easy it is to Drag an Image around the screen using MonoTouch. Bear with me though, it’s my first how to
.
It’s actually really simple, and you won’t need the Interface Builder.
What we need to do is to create an UIImageView class that overrides the functions TouchesBegan, TouchesMoved and TouchesEnded. It’s looking like this:
public class myDraggableImage : UIImageView {
//Store locations for remembering the last positions, and counting the future ones.
PointF Location;
PointF StartLocation;
bool haveBeenTouchedOnce = false;
public myDraggableImage ( RectangleF frame ){
//Set the position of the frame with RectangleF (Replacement of CGRectangle)
this.Frame = frame;
StartLocation = this.Frame.Location;
}
//This event occurs when you just touch the object
public override void TouchesBegan (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e)
{
Console.WriteLine("Touched the object");
Location = this.Frame.Location;
var touch = (UITouch) e.TouchesForView (this).AnyObject;
var bounds = Bounds;
StartLocation = touch.LocationInView(this);
this.Frame = new RectangleF(Location,bounds.Size);
}
//This event occurs when you drag it around
public override void TouchesMoved (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e)
{
Console.WriteLine("Dragged the object");
var bounds = Bounds;
var touch = (UITouch) e.TouchesForView (this).AnyObject;
//Always refer to the StartLocation of the object that you've been dragging.
Location.X += touch.LocationInView(this).X - StartLocation.X;
Location.Y += touch.LocationInView(this).Y - StartLocation.Y;
this.Frame = new RectangleF(Location,bounds.Size);
haveBeenTouchedOnce = true;
}
public override void TouchesEnded (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e)
{
StartLocation = Location;
}
}
What’s being done here is that as soon as we Touch the object it will run ”TouchesBegan” to start keeping track of the Object. And when we are moving it around, it constantly calls ”TouchesMoved” where we are updating the position of the UIImageView on the screen.
When you’ve implemented the class class in your project, all you need to do is to create the object within ”public override bool FinishedLaunching”.
It can for instance look like this:
myDraggableImage img = new myDraggableImage(new RectangleF(64,64,64,64)); img.UserInteractionEnabled = true; img.BackgroundColor = UIColor.Green; img.Hidden = false; window.AddSubview(img);
The result will be a UIImageView that can be dragged around the screen.
MonoTouch trial
16 Sep 09
Ville bara informera för er som missat att MonoTouch numera finns som testversion, för den som vill testa innan köp.
Du kommer att tillåtas att använda MonoTouch fullt ut, och simulera programmet det på din Mac. Vill du däremot testa på din telefon måste du köpa en licens.
Detta är givetvis väldigt bra, för den som vill testa innan köp.
Du laddar ner trial versionen här: http://monotouch.net/DownloadTrial
Detta är perfekt för den som inte har 3010 SEK att spendera på ett projekt man inte är säker på att använda seriöst!
Det känns bra när ett Arbetsteam lyssnar på request de får, och tar till sig det direkt, istället för att komma med en lösning 6 månader senare. Men åandrasidan är det ”open source” människor som skapat det, så man förstår entusiasmen
Härmed avslutas mitt lunchinlägg!
-m
MonoTouch släppt
14 Sep 09
Idag är det officiellt. MonoTouch, API:et som låter dig programmera .NET-applikationer till din iPhone är släppt.
Inte nog med att du kan använda .NET API:er direkt i ditt program. Där är även Bindings till Objective-C biblioteken, för att kunna maximera din utveckling på iPhone.
Även om jag personligen inte har hunnit programmera något vidare själv har jag följt mailinglistan, och de som testat är mycket nöjda med produkten. De är mer eller mindre nöjda med precis allt, utom prislappen förstås.
Prislappen hamnar på 3010 SEK för enskild användare. Något som förmodligen kommer utesluta de som vill göra alla de populära småprogrammen. Novell verkar ha lagt sitt fokus på seriösa företag som vill åstadkomma mycket med sin kod, och som är beredda att betala för att återanvända den kunskap som redan finns, dvs slippa lära sig Objective-C.
Personligen har jag inte bestämt mig för vad jag tycker om priset. Många har blivit upprörda, medans andra är nöjda med priset och anser att arbetet som utvecklarna har lagt ner på detta projekt gör att prislappen är helt acceptabel.
Jag ser det mer som en positioneringssak. Jag kan tycka att priset är OK för ett företag, men inte för en hobbyutvecklare som vill tjäna lite snabba pengar. Fler kunder, kräver givetvis mer support, vilket är mer utgifter för Novell. Genom att höja priset till vad det är sållar man säkerligen bort de som egentligen inte kan, men tror sig kunna och fokuserar på de personer som verkligen vill. Detta ger givetvis mindre support för Novell, vilket de tjänar pengar på.
Jag tror att om man sänker priset för lågt på ett paket som detta kommer det att kosta mer än vad det kommer gynna, och jag tror Novell är på samma spår de också.
Jag tror med andra ord att det är ett strategiskt beslut, och inte ett pengagirigt.
Nu när jag granskar vad jag själv analyserat fram från texten ovan får jag nog ändå säga att det är ett pris som är helt OK. Jag är nöjd.
Ta en kik på deras hemsida: http://monotouch.net
Tillbaka till min renovering
.
Cu
Wie, jag kom med!
4 Sep 09
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:
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
Veckans intressanta: MonoTouch
2 Sep 09
Läste ett blogginlägg från mr Miguel De Icaza som berättar lite grann om MonoTouch, som är ett ramverk för att koda c# till iphone. Verkligen smart!
Det enda som är lite dåligt är att det inte är open source. Men det är åtminståne baserat på Mono, tror jag. Och mono är ju open source.
Jag är lite glad för detta för Objective C som är standardutvecklingsspråk känns otroligt jobbigt att arbeta i.
Som tur är har jag en MacMini, som förnärvarande arbetar som MediaMac. Dvs, bara en snygg station att kolla på Dvd på! Men nu är jag lite sugen på att installera Xcode och Monodevelop och sätta igång och koda lite till min iphone. Jag får se hur det blir.
Enkelt övervakningssystem och linux
31 Aug 09
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?

Bö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:
- #!/bin/sh
- user=root
- pass=pass
- fps=5
- ip=192.168.1.15
- 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:
- Netcat
- Curl
- Mono
- 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
21 Aug 09
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


