Så nu har jag kompilerat kde 4.5. Den distron som jag använder är ju archlinux men i dags dato så har det inte släppts några paket. Så jag fick ta och göra det själv. Det är ju inte så krångligt om man har hållit på med sådant förr. Annars brukar dom säga att tålamodet när det gäller sådant sjunker med åren. Det betyder alltså att jag har iaf ett år kvar på tålamods-skalan när det gäller kompilering och självletande av de småbiblioteken som behövs :=)

Så vad har jag upplevt som förbättringar?

Första intrycket jag fått är utseendemässiga förändrigar i systray-dockan. Där märker jag ganska snabbt att ett nytt ikon-set har blivit till.

Det ser verkligen ”polerat” ut och vackert. Må hända Windows 7 likt, men varför inte rida på gemene design-våg som kommer att vara välkänd nu ett par år fram tills nästa Windows verision kommer. Nu talade jag alltså om ikonerna…
Och det är själva design-stilen som är väldigt lika. Se själva:

Om det är något som har funnits tidigare eller inte så upplever jag det som tydligare. I verision 4.4.x hittade jag inte konfiguerings möjligheten för att enbart visa fönster per virtuellt skrivbord, det var istället så att alla fönster visades i aktivitetsfältet oavsett vilken av de virtuella skrivborden man valde.

Nu hittar man tydligt, tex när man har ett program redan öppet, du högerklickar på ett program i aktivitetsfältet och väljer ”Inställningar av aktivitetshanterare”. Ett dialogfönster kommer fram och du kan välja 3 st filter. Jag har valt ”Visa bara aktiviteter på nuvarande skrivbord”. Nu har jag äntligen det beteendet som jag efterfrågat!

I filhanteraren dolphin så finns det ett fint filtreringsverktyg, det kan ni få fram som standard genom att i inställningarna markera rutan ”Visa filterrad”:

Om du behöver det enbart i vissa instanser och inte alltid att det ska vara synligt, så kan du trycka på Ctrl+I. Filteringsverktyget ser ut så här:


Har ni några godbitar som ni vill dela med er utav från KDE 4.5 SC så dela gärna med er.
Mer godbitar som jag hittar med tiden kommer jag att posta 😉

Håll till godo!

Det är ett prisat, hyllat och ett hatat ramverk. En del kanske gör det av skälen att det skulle kunna rendera i skada och slå tillbaka för andra som inte har ett förbund med Microsoft såsom Novell har.

Andra tycker kanske att det finns ju annat som Python eller Java och anser att det är ett bättre alternativ. Hur det än, så blev jag mäkta imponerad över ett program som jag börjat utveckla på, skrivet i just C#. Varför blev jag imponerad? Hur långt har Novell kommit när det gäller att utveckla en likvärdig produkt när det gäller funktionallitet jämfört med Microsoft .NET?

Namnutrymmet System.Windows.Forms innehåller grafiska kontroller för att skapa ett gränssnitt med knappar, textrutor, listor osv. Det är grunden, själva basen i en grafisk applikation. Programmet som jag utvecklar, är i själva verket en grafisk server applikation, där en del trådhantering förstås ingår. Servern skall fjärrstyras från webbklienter, det kan vara en sådan skrivet i ASP.NET eller PHP språket.
Programmet har flera klasser, varav en Form-klass som har en webbkontroll. Jag började utveckla detta på praktik-platsen i Windows XP miljö. Hur skulle jag kunna utveckla detta vidare när jag kom hem till min Linux-miljö då?

Webbkontrollen är i själva verket ett Internet Explorer objekt. Så jag tänkte förstås att det finns inte en chans att min kod kommer kommer kompileras med en gång utav Mono C# kompileraren mcs. För att kunna smidigt utveckla i C# så hämtade jag ner den mycket kompetenta utvecklingsmiljön MonoDevelop.

Jag hämtade hem källkoden och importerade projekt-filen med MonoDevelop. Det spännande ögonblicket inträdde när jag skulle trycka på menyvalet ”Kompilera”. Döm om min förvåning, när det kompilerades utan ett fel. Ingen varning om någon klass som ännu inte var implementerad för namnutrymmet Windows.Forms. T om webbläsarobjektet fungerade! Fast den använde då ett mozillaobjekt. Screen klassen fungerade också, en klass som gör det möjligt att styra vilken av monitorerna som en applikation skall visa sig på.

Mono har verkligen gjort ett bra jobb med detta ramverk. Sitter du kanske och utvecklar i Windows miljö? Om det inte finns någon annan anledning till att behöva göra det, varför inte överväga en migrering till Gnu/Linux? Om inte, kanske iaf köra ett test i en virtuell miljö? Det kan jag starkt rekommendera!

Sist vill jag inflika med ett kort föredrag som hölls vid FOSDEM, det är killen bakom MonoTorrent. Han ger en del fina tips angående utvecklandet av trådar (threads) i C#. Ha det gutt!

För ett par månader sedan så skrev jag och beklagade mig att jag hade problem med en flexibel layout för mitt tidtagnings-program khronos.

Till slut så löste jag det, och jag skulle berätta vad det var som var felet. Dom som inte läst om detta innan behöver väl lite bakgrundsinformation så jag skall ta upp det. När antalet tidtagningar var flera än gränsnittets storlek så behövdes det förstås en scroll-yta för att lösa detta. Sagt och gjort, jag tog och implementerade det med Qt:s fina klass QScrollArea och dess syskon. Men det ville inte riktigt fungera med layout systemet av någon anledning så jag var tvungen att använda en listen-event för uppdateringar som händer med fönstret, t ex när fönstret förstoras eller minsaks.

Skapade en sådan och gjorde så att den anropade en funktion som uppdaterade scroll-ytan att skalas om till hur program-fönstret förstorades.

void TTimer::resizeEvent( QResizeEvent * event )
{

layoutResize();

}

Och ja, det fungerade, tills jag startade klockan för att ta tiden. Då så skalades scroll-ytan och anpassades till program-fönstret och skalades tillbaks till orginal storleken som den har när programet startar första gången. Varför den gjorde det har med QResizeEvent att göra, som av någon anledning ju förstås triggas när man ändrar storleken, men som inte riktigt fungerar ändå :=).
Det skapade en hel del huvudbry hoss mig, men jag kom på idèn att lyssna på paintEvents, alltså händelser som har med att GUI:t uppdateras eller ritas om.

void TTimer::paintEvent ( QPaintEvent * event )
{

layoutResize();

}

Så ja, nu fungerade det perfekt! Nåväl åtminstone i 10 minuter. När 10 minuter hade gått så förstorades QLabel-kontrollen som jag använder för att visa tidsförloppet sig sidledes. Allting skalade sig fint men tidtagningen stoppades och QLabel-kontrollen uppdaterades inte längre med aktuell tid. Kan det månne ha o göra med paintEvent nu då? Nej, inte denna gången. Ni är väl förstås nyfikna vad som finns i funktionen layoutResize()? Jag misstänkte väl det.

void TTimer::layoutResize()
{

QWidget *widget=scrollArea->widget(); //The scrollarea parent widget.

QSize newsize; //QSize.

newsize=size(); //Copy this->widget size.

newsize.setWidth(newsize.width()-100); /*Needs to subtract 100 so it will be visible in the widget.*/

newsize.setHeight(newsize.height()-70); /*Needs to subtract 70 so it will be visible in the     widget.*/

widget->resize(newsize); //Resize the widget according to the QSize newsize values.

scrollArea->resize(newsize); //Resize the scrollArea to adapt to the window size change

}

Problemet med denna är att storleken på scroll-ytan skalas om oavsett om det blir en förändring (förstoring/förminskning) eller om det är oförändrat. Ännu en gång, en frukt av spekulerande och antagande ledde till att jag provade att kasta in ett villkor för att endast uppdatera scroll-ytans storlek om fönstrets storlek verkligen har förändrats.

void TTimer::layoutResize()
{

/*We need this function to resize the scrollarea to fit   beautiful to the rest of the application     windows size.
There is something with the QLayout system and     QScrollArea that doesnt     really cowork well…or the other     way(probarly) it’s me that don’t understand it :]. Anyway,     this works good as it is now! */

QSize newsize=size(); //Copy the size of main application window widget.

newsize.setWidth(newsize.width()-lblClock->width()-10); //Store a size change

newsize.setHeight(newsize.height()-70); //Store a size change

if(newsize!=scrollArea->size())
{

/*If there is no change in the gui…we dont call this function unessecary.
If we call it,       it sooner or later       will render in a bug that causes the widget lblClock to not update it’s       value
according to the timer value; and that is something we don’t want to, arent we?
*/

scrollArea->resize(newsize); /*Applicate the size information from newsize to the       scrollArea!.*/

}

}

Så smidigt var det, kanske kommer att vara till nytta för dig någon gång när du råkar ut för ett liknande problem. Ha det gott alla ni ute på Internet.

Kalkylator är väl ett verktyg som vi alla använt någon gång i vårat liv. När vi ska betala räkningar, när vi ska se om vi har råd med resan, när vi ska se hur många mil vi kan komma med resterande bränsle-nivå i bilen. Det var bara ett fåtal exempel på det som man använder en kalkylator till. Alla operativsystem har en kalkylator. Även om du är nöjd med den, så tycker jag att du skall ta en titt på speedcrunch.

Speedcrunch är utvecklad enligt modellen öppen källkod, vilket gör att du som sagt kan modifiera programvaran efter dina behov som uppstår.

Det som jag bl a tycker är smidigt är möjligheten att skapa egna variabler som gör uträkningarna mera abstrakta. Men det finns faktiskt något som jag tycker saknas. Så vad gör man när det är öppen källkod? Man utvecklar det man saknar!

I torsdags så började jag med att titta på koden för att få ett grepp om programmet är uppbyggt, för att sedan läsa lite dokumentation på hur man skulle kunna gå till väga för att skapa ett flik-gränssnitt (tabbar). Jag kände att jag behövde ha flera tabbar igång när jag gör mina uträkningar, alltså flera instanser, samt smidigt kunna välja mellan dom.

Ni som använder Mozilla Firefox vet ju ungefär hur ett flik-baserat system fungerar och vad det går ut på. Men för er som kanske inte riktigt känner till det smidiga, så har jag ett litet klipp på youtube så att ni kan förstå vad jag menar.

Det jag gjort är ännu inte färdigt. Jag fick det att fungera först i lördags så som jag ville. Vad jag ännu vill ha som funktion är att kunna räkna ut summan av resultat i en flik eller flera flikar. Har ni några tips och förslag? Ni kanske använder det här programmet och har någon fundering? Kommentera!

Nu finns time som git respository på github.com. Det gör att du kan ladda ner att och bidra med patchar och förbättringar till mitt projekt!
Adressen dit är: http://github.com/joelmandell/time.

För att kunna köra programmet i nuläget så måste man ladda ner källkoden (alltså instruktionerna, eller själva receptet till vad datorn skall utföra). För att kunna köra det som ett program, så måste det först kompileras som det heter. Så jag rekommenderar ingen som inte håller på med programmering att köra denna metoden, utan vänta på att ett installations-program som gör det enkelt att köra programmet kommer ut.

Kanske är det så att du har en programmerings-bakgrund, men har inte hängt med dom senaste åren. Då är du välkommen att skriva till mig personligen för att fråga hur man kan komma igång.

Jag har nu kommit på vad programmet skall heta: khrohnos.

Utvecklingen av tidtagnings-programmet går sakta men framåt. Tycker hitills att det är väldigt roligt att få lära sig mera om de möjligheter som programmerings-biblioteket Qt ger en. Det finns mycket som är ganska självklart, men ibland så sker det en del oväntande problem att lösa.

Ett sådant skedde här om dagen. Ja, förrästen så har jag inte löst det ännu. Nu söker jag hjälp för att kunna lösa det på olika forum. Om du som läser har kunskap om Qt, så kan du gärna titta på detta klippet som finns på youtube.

Problemet är att ytan som visar dom olika tidtagningarna skall förstoras efter hur fönstret förstoras, men när man startar en tidtagning så går det inte att göra det.

Å andra sidan så har jag fixat så att det går att omkasta tidtagningar om det skulle vara så att någon föreläsnings-hållare t ex kommer försent.

Jo förhoppningsviss tar man till hjälp programmet time. Det är ett program som jag utvecklar för just det ändamålet. Namnet är just nu ganska fantasilöst, men varför slösa tids-resurser (mycket om tid i detta inlägget) på det istället för att skriva funktionerna för programmet.

Vad är då i planeringen för programmet?

  • Omkastning av program
  • Projektion via extern skärm/projektor till föreläsarens laptop.
  • Olika profiler.
  • On-the-fly tids-förändring.

Jag jobbar just nu med första punkten, omkastning av program. Det är så att ibland händer det oförutsedda, han som skulle haft föreläsning 1 missade ett tåg. Då kan man göra en snabbändring i tidtagningsschemat. Flytta fram föreläsning 2 t ex.

Dom andra grundstenarna i programmet skall jag tala om i senare blogg-inlägg.

Att bygga är väl något alla drömmer om? Att få bygga sitt hus, sin båt, sin diesel-motor, sin dator. Vi människor tycker om att skapa. Vi har underbara verktyg: händer, ögon, öron. Det hjälper oss att skapa. Genom tidernas varv, finns det sådant som har skapats som inte funkat så bra, man har provat sig fram; sakta men säkert i och med att man fått kunskap har det gått bättre. Men även om man väl har lärt sig är det lätt att i efterhand inte tillämpa principen bygg noggrant från början. Hur kan skall man göra i programmeringens värld

När du bygger ett hus så planerar du. Du kanske måste i teorin först rita på ett papper. Det hjälper en att så att säga själv resonera sig fram till om det man vill göra är realistiskt. Så är det med programmering, planera innan – sketcha upp målet, syftet med din programvara.

Planera för framtiden! Kan det vara så att det behövs släppas på flera språk i ett senare skede? Vad händer om du måste ta bort en funktion, måste du då ändra i övrig kod, eller kan du bara ta bort en hel klass och programmet går att kompilera ändå i efterhand? Varför inte ha i din organisation en feedback-grupp som simultant läser planeringen. Feedback i tidigt skede kan vara jobbigt, men det är värre i sent skede. Abstraktera bort program-kod och data-ut-matning och gränssnitt. Ju mindre beroende av varandra dom är desto mer modulbart blir det. Med andra ord: MVC!