Alarmclock

by marc 29. december 2014 06:23

It happens quite often that i see a cool Raspberry Pi project that i want to have working in my own home.  Basic functionality usually is operational in no time.Then the real challenge begins.

 

How to fit this in as a real monkeyproof/wifeproof solution for everyday use?

 

In this case I wanted an alarmclock. Not just an alarm that beeps at 6.30 in the morning, but a little screen that tells me time, google calendar events for the day, the weather,etc.

Raspberry, touchscreen, speaker. Installed a webserver to display some webpages with time, weather and events and  to control MPD.

Ready?

 

 

 

The raspberry has a light indicator (red). The usb wifi dongle flickers blue. The screen has white backlight visible.

Usb wifi dongle light flickering is very annoying in an otherwise dark bedroom. But there is no configurable setting to switch this off. I saw some forum posts on compiling new versions for specific kernels. Too difficult for me. So for this I had to use tape. I also taped off the raspberry light. The backlight of the screen was killed by switching off the screen during daytime and in the middle of the night with the help of a conjob.

But.. When i awake somewhere during the night, i do want to see the time. But the screen is off.

How to solve this? No solution found yet.

The clockradio is another item. I want ease of use when setting an alarmtime, and ease of use on stopping the alarm. 

A cronjob can switch on the radio at a specific time during weekdays. But cronjobs are not easily disabled when there happens to be a day you can sleep in.  Nor can I easily change the time.

Still I sticked to using cronjobs. The cronjob starts up MPC at a specific time but sets no volume. So by manually setting the volume to zero, I can skip an alarm. Of course then I have to remember to turn up the volume the next day. For occasional later or earlier alarms I can use http://raspctl.com This allows for webbased alarm setting, but strangely requires a specific date to be entered. 

Ease of use for stopping the alarm. Throwing the alarmclock against the wall is not an option of course, but with a sleepy head trying to find the right button is also not desirable. The solution is found in stopping MPC by touching the screen (the entire div leads to url that stops mpd). 

Tags:

Wilde Ideeën

Twitterende Kerstboom

by marc 22. december 2013 06:00

De kerstboom aan de tijdschakelaar? Nee, laat de mensen op internet onze kerstboom maar aan en uitzetten!

 

Benodigdheden:

klikaan klikuit schakelaar -- om de kerstverlichting aan en uit te kunnen zetten

homewizard -- om de klikaan klikuitschakelaar aan te kunnen sturen

phpscript -- om tweets met een bepaalde hashtag te kunnen lezen, op te slaan in db, laatste (onbehandelde) tweet(s) te selecteren en dan de actie voor de schakelaar te gaan bepalen.

cronscript -- iedere x minuten het phpscript uitvoeren. eerst gezet op 1 minuut. Maar voor de vrouw-des-huizes-acceptatiefactor later op 10 minuten gezet. (dit had eventueel ook met een keuze voor een andere hashtag beinvloed kunnen worden.

 

onderstaande script aanpassen/invullen:

- api gegevens twitter

- zoekstring op twitter waarop actie gebaseerd gaat worden

- ip adres van de homewizard

- switch nummer 

- mysql database 

 

 

<?php

ini_set('display_errors', 1);

require_once('TwitterAPIExchange.php');

 

/** Set access tokens here - see: https://dev.twitter.com/apps/ **/

$settings = array(

    'oauth_access_token' => "token",

    'oauth_access_token_secret' => "secret",

    'consumer_key' => "key",

    'consumer_secret' => "secret"

);

 

/** Perform a GET request and echo the response **/

/** Note: Set the GET field BEFORE calling buildOauth(); **/

$url = 'https://api.twitter.com/1.1/search/tweets.json';

$getfield = '?q=%23zetdiekerstboommaar&result_type=recent';

$q = 'zetdiekerstboommaar';

$requestMethod = 'GET';

$twitter = new TwitterAPIExchange($settings);

$response = $twitter->setGetfield($getfield)

             ->buildOauth($url, $requestMethod)

             ->performRequest();

 

/**var_dump(json_decode($response,true));**/

 

$jsonobj=json_decode($response,true);

 

if($jsonobj != null){

$con = mysql_connect('host', 'dbname', 'user');

if (!$con){

die('Could not connect: ' . mysql_error());

}

 

foreach($jsonobj['statuses'] as $item){

              /**var_dump($item);**/

$id = $item['id'];

$created_at = $item['created_at'];

$created_at = strtotime($created_at);

$mysqldate = date('Y-m-d H:i:s',$created_at);

  $from_user = mysql_real_escape_string($item['user']['screen_name']);

              if ($from_user == "") { $from_user = mysql_real_escape_string($item['user']['name']);}

  $from_user_id = 0;

$text = mysql_real_escape_string($item['text']);

$source = mysql_real_escape_string($item['source']);

$geo = $item['geo'];

$iso_language_code = "en";

$profile_image_url = "na";

$to_user_id = 0;

 

mysql_select_db("tweets", $con);

$query = "INSERT into tweets VALUES ($id,'$mysqldate','$from_user',$from_user_id,'$text','$source','$geo','$iso_language_code','$profile_image_url',$to_user_id,'$q','0')";

$result = mysql_query($query);

  }

mysql_close($con);

}

 

/** determine requested switchaction **/

 

$con = mysql_connect('host', 'dbname', 'user');

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

 

$query="SELECT t.id, t.from_user, t.text, t.created_at FROM tweets.tweets t,

(SELECT max(id) as maxid FROM tweets.tweets) maxresults

WHERE t.id = maxresults.maxid AND t.used=0 AND t.from_user like '%'

AND t.id > (SELECT max(t2.id) FROM tweets.tweets t2 WHERE t2.used = 1)";

$result=mysql_query($query);

$num=mysql_numrows($result);

mysql_close();

 

$OnOff="empty";

$user="nobody";

$i=0;

while ($i < $num) 

{

$OnOff=mysql_result($result,$i,"text");

$user=mysql_result($result,$i,"from_user");

echo $OnOff."<br>";

echo $user."<br>";

$i++;

}

 

$action="Neutral";

if (strchr($OnOff,"zetdiekerstboommaaraan")) {$action="On";}

if (strchr($OnOff,"zetdiekerstboommaaruit")) {$action="Off";}

echo $action;

 

 

/** get switch status **/

 

$jsonurl = "http://192.168.x.x/password/get-sensors";

$json = file_get_contents($jsonurl);

$data = json_decode($json,true);

$switches =  $data['response']['switches'];

 

$stand = "onbekend";

foreach($switches as $switch){

        /**echo $switch['id']." <br>";

        echo $switch['name']." <br>";

        echo $switch['status']."<br>";**/

if ($switch['id']=="0" and $switch['status']=="off"){ $stand="Off";}

if ($switch['id']=="0" and $switch['status']=="on"){ $stand="On";}

}

 

echo $stand."<br>";

 

 

/** do actions **/

 

/** action: set switch **/

if ($stand=="Off" and $action=="On") 

{

shell_exec("wget 'http://192.168.x.x/password/sw/0/on'");

}

 

if ($stand=="On" and $action=="Off") 

{

shell_exec("wget 'http://192.168.x.x/password/sw/0/off'");

}

 

 

/** action: tweet **/

 

$consumerKey = 'key';

$consumerSecret = 'secret';

$oAuthToken = 'token';

$oAuthSecret = 'secret';

 

include 'twitteroauth/twitteroauth.php';

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);

/**if ($action=="Neutral") 

{ $text = "$user bedankt";

$tweet->post('statuses/update', array('status' => "$text"));

}**/

if ($stand=="Off" and $action=="On") 

{ $text = "$user heeft mij aangezet!";

$tweet->post('statuses/update', array('status' => "$text"));

}

if ($stand=="Off" and $action=="Off") 

{ $text = "$user wilde mij uitzetten, maar ik stond al uit";

$tweet->post('statuses/update', array('status' => "$text"));

}

if ($stand=="On" and $action=="Off") 

{ $text = "$user heeft mij uitgezet..";

$tweet->post('statuses/update', array('status' => "$text"));

}

if ($stand=="On" and $action=="On") 

{ $text = "$user wilde mij aanzetten, maar ik stond al aan";

$tweet->post('statuses/update', array('status' => "$text"));

}

echo $text;

 

 

/** action: update db **/

$con = mysql_connect('host', 'dbname', 'user');

 

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

 

$query=" UPDATE tweets.tweets SET used=1";

$result=mysql_query($query);

mysql_close();

 

?>


Tags:

Wilde Ideeën

Twitterende Zonnepanelen

by marc 13. februari 2013 08:02

In de donkere dagen voor kerst 2012 werden bij ons zonnepanelen geplaatst. Van de gemeente mochten ze niet aan de 'goede' kant. Dat zou afbreuk doen aan het ononderbroken aangezicht van dakpannen van onze 26-onder-één-kapper. Ondanks dat via google maps te zien is dat 6 huizen verder wel zonnepanelen en slechts 1 huis verderop een dakraam het ononderbroken aanzicht onderbreken... De zonnepanelen zijn nu dus west-noordwest georienteerd en over de terugverdientijd hoeven we het niet meer te hebben.

 

Toch blijft de vraag: doen ze het? hoeveel vermogen leveren ze nou? Om deze vragen te beantwoorden kan ik de hele dag voor de meterkast gaan staan en kijken of die meter nu eindelijk eens een keer terugdraait. Andere optie is om het programma Sunny Explorer van de leverancier van de omvormer te gebruiken en het geleverde vermogen uitlezen. Beide opties voldoen niet aan het criterium om 's avonds op de bank via de iPad het vermogen te kunnen aflezen. 

 

Zoals zovaak bleek door een eenvoudige zoektocht met Google dat ik lang niet de eerste was met deze vraag en de daarbij gestelde randvoorwaarde van bank/iPad.

 

Op http://ictoblog.nl/raspberry-pi/raspberrypi-pvoutput en op http://www.gzeel.nl/sma-bluetooth-pvoutput/ bleken uitstekende handleidingen te staan om mijn probleem op te lossen. Overigens bleek in mijn geval de op deze blogs genoemde versie van sma-bluetooth niet te werken. Op https://code.google.com/p/sma-bluetooth/source/clones staan echter een aantal andere clones. Uiteindelijk vond ik een werkende variant. 

Daarmee had ik m'n eerste succesbeleving. Iedere 5 minuten wordt het vermogen van de zonnepanelen uitgelezen, in een database gezet en geupload naar pvoutput.org. Alle details zijn altijd en overal op te vragen!

Op de eerder genoemde blogs werd ook op de mogelijkheid gewezen om iedere dag een rapport per email te ontvangen. Ik heb gekozen voor een variant hierop. Ik besloot mijn zonnepanelen een eigen twitteraccount te geven. Met mijn eigen twitteraccount volg ik mijn zonnepanelen-account. Zodoende hoef ik niet iedere dag te surfen naar mijn eigen output op een specifieke website, maar kom ik iedere dag een aantal kerngegevens van de zonnepanelen vanzelf tegen in mijn twittertimeline. 

 

 

Voor de geïnteresseerden. Om de output zoals die in de database staat om te vormen naar een dagelijkse tweet heb ik de volgende stappen ondernomen.

 

1. tutorial mbt tweeten vanuit een php-script: http://www.wescutshall.com/2011/09/how-to-post-to-twitter-from-php/

2. maken van php-script (zie hieronder)

3. php-script en files vanuit tutorial in mapje op de webserver geplaatst

4. via crontab dagelijks om 20:25 het php-script uitvoeren zodat ik tijdens het praatje van Gerrit Hiemstra kan kijken wat mijn zonnepanelen van het weer vonden (tweede succesbeleving).

 

NB Zodra de vogels op het dak teveel op de panelen hun behoefte doen, kan ik er op vertrouwen dat de panelen dat vervolgens naar mij zullen tweeten. 

 

---php script ---

<?

$username="user";
$password="password";
$database="database";

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT Date(d1.DateTime) as Date, 
max(d1.ETotalToday) as EToDate, max(d1.ETotalToday)- min(d1.ETotalToday) as EToDay, 
max(d1.CurrentPower) as PeakToday, 
(Select Min(Time(d2.DateTime)) From smatool.DayData d2 where 
          d2.CurrentPower = (SELECT max(d3.CurrentPower) 
          FROM smatool.DayData as d3 where Date(d3.DateTime) = 
                   CURDATE()) and Date(d2.DateTime) = CURDATE() ) as PeakTime, 
max(d1.ETotalToday) / DATEDIFF(CURDATE() , '2012-12-04') as DAvg 
FROM smatool.DayData as d1 where Date(d1.DateTime) = CURDATE()";

$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();

$i=0;
while ($i < $num) {
$Date=mysql_result($result,$i,"Date");
$EToDate=mysql_result($result,$i,"EToDate");
$EToDay=mysql_result($result,$i,"EToDay");
$PeakToday=mysql_result($result,$i,"PeakToday");
$PeakTime=mysql_result($result,$i,"PeakTime");
$DAvg=mysql_result($result,$i,"DAvg");
 
$consumerKey = 'key';
$consumerSecret = 'secret';
$oAuthToken = 'token';
$oAuthSecret = 'secret';

include 'twitteroauth/twitteroauth.php';

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);
$text = "$Date: $EToDay kWh  Total: $EToDate kWh  Average: $DAvg  Peak: $PeakToday W at $PeakTime  ";

// Send tweet 
$tweet->post('statuses/update', array('status' => "$text"));

$i++;
}

?>

https://twitter.com/PJBZonnepanelen

Tags: , , , ,

Wilde Ideeën

ERP en de cloud

by marc 5. september 2011 00:26

Typisch hedendaagse ERP (her) implementatie

 

Een upgrade of herimplementatie van Oracle of SAP naar een hogere versie verloopt in sterke mate als een IT project. Businessinvolvement is nauwelijks aanwezig en IT zelf heeft het moeilijk omdat door outsourcing en uitbesteding veel partijen betrokken zijn. Hieronder een karakterschets.

 

Mate van businessbetrokkenheid

De grotere Nederlandse bedrijven beschouwen hun ERP-systeem weliswaar als kritisch als je er naar vraagt, maar dat gaat niet zo ver dat men er concurrentievoordeel mee wil behalen. Het moet vooral standaard en best practice zijn. De financiele administratie en de inkoopafdeling zijn typische shared service activiteiten. Waar voorheen een bedrijf mogelijk nog meerdere decentrale administraties had, zijn die de laatste jaren samengevoegd en in shared service centra ondergebracht (en in sommige gevallen zelfs buiten het bedrijf gebracht). Het shared  service center moet operationeel excelleren. Dat wil zeggen, de ‘business’  - waar het geld verdiend wordt – wil niet al te veel last hebben van de administratieve processen.

 

Door een dergelijke efficiëntieslag krijgen de operationele processen voorrang boven procesverbetering op tactisch en strategisch niveau. Elke operationeel manager binnen een shared service organisatie zal zijn eigen proces optimaliseren, maar strategische keuzes zijn moeilijk. Strategische keuzes resulteren in een beter proces op bedrijfsniveau, terwijl voor sommige afdelingen het proces mogelijk helemaal niet efficiënter wordt. Het vereist bovendien een gelijkwaardig partnership tussen shared service organisatie en businessonderdelen om overkoepelend het beste resultaat te vinden. Dit vergt initiatief van een sso naar buiten toe,  daar waar de afgelopen tijd juist naar operations binnen sso gekeken is. Dat is lastigomschakelen en het kost tijd om de juiste gelijkgestemde gesprekspartners in de business te vinden. Een ERP heeft betrekking op processen die door het hele bedrijf gaan, het is daarom een noodzaak om die gesprekspartners te vinden en ook nog met de neuzen dezelfde kant op te krijgen.  

 

Als een huidige operationeel proces het leidraad is en er (nog) geen visie is waardoor nieuwe of sterk wijzigende processen in het spel zijn, met andere woorden,  als er moeite is om benefits zichtbaar te maken , dan zal de implementatie van het ERP-systeem door de business en de administratie als een technische exercitie beschouwd worden. Het wordt grotendeels aan IT overgelaten en krijgt onvoldoende aandacht tussen de dagelijkse operationele doelen.

 

 

Mate van IT volwassenheid.

De IT-organisatie is gretig. Een nieuw project, en nog wel een ERP-implementatie. We gaan het hele bedrijf door. Je voelt de honger om grotere invloed van IT ten opzichte van de business. Dit staat los van de mate waarin de business zelf betrokken is.

Waar gaat het mis? Heeft de IT organisatie wel goed naar zichzelf gekeken. Hoe goed zijn ze er eigenlijk voor georganiseerd om een project ‘dat de hele business doorgaat’ te organiseren? Dat gaat langs een aantal dimensies.

- eigen applicatiedeskundigheid

- samenwerking met ingekochte applicatiedeskundigheid

- betrokkenheid leverancier van erp-applicatie

- infra en hardware

- testing en quality assurance

De eerste aangrijpingspunten zitten bij de IT afdeling waar beheer en innovatie van het ERP-platform ligt. Kennen ze de vraag van de business goed? Kennen ze de ontwikkelingen van afgelopen periode goed? Zien ze waar de business naar toe wil? Kan voldoende tegenspel geboden worden tegen de business om prioriteiten te herkennen, om realistische functionaliteiten te scheiden van fantasievolle gedachtenspinsels.

Kan dit vertaald worden naar de functionaliteit van een erp-pakket?, kan voldoende tegenspel geboden worden tegen de leverancier en zijn marketing en salesconsultants?

In de stakeholderlandschap van leverancier en businessrequirements is het al moeilijk om je staande te houden, maar dan moet je toch overgaan tot daadwerkelijk implementeren van een omgeving. Je schakelt de system integrator in. Deze zit in Nederland of deze komt uit India, of deze zit zowel in Nederland als in India en maakt bovendien gebruik van een behoorlijk contigent ZZP-ers en onderaannemers. In theorie vraag je aan 1 persoon om iets in te regelen. In de praktijk is het een bont gezelschap dat op sommige terreinen heel sterk is, maar op andere terreinen inhoudelijk zwak en verbrokkeld georganiseerd. Hoe stuur je dat aan? Je wil er wel voor waken dat je er tussenin gaat staan, maar heb je dat contractueel wel goed afgedekt? Luisteren de applicatieconsultants van de erp-leverancier naar de system integrator, of volgen ze hun eigen pad en moet je als opdrachtgever de samenwerking tussen deze partijen ook nog regelen en bewaken?

Terwijl je de system integrator een ERP-omgeving laat implementeren komen de vragen op over infrastructuur en hardware. Hosting, connectivity en security vraagstukken moeten behandeld worden, maar wie zorgt voor de gezamenlijke communicatie? Er is – in de dagelijkse gang van zaken – betrekkelijk weining interactie tussen applicatie afdelingen en infra afdelingen. De bekendheid met elkaars processen en planningen is minder. Kun je de juiste sparringpartner wel vinden? De system integrator vraagt erom en wijst op de planning, de business verwacht het want dit hoort bij IT, toch gaat hier meer tijd overheen dan voorzien.

Tot zover is het een project waarin al heel wat gecoördineerd moet worden, terwijl we nog niet in de testfase beland zijn. Testers benoemen risico’s. Risico’s kunnen angstaanjagend zijn. Gelukkig kunnen we daar maatregelen tegen inzetten. We benoemen een hele set van testtypen. Sterker nog we benoemen meerdere testpartijen, zodat onafhankelijk vastgesteld kan worden dat de kwaliteit gewaarborgd wordt. We vergeten voor het gemak dat je hier als opdrachtgever weer nieuwe coordinatietaken mee binnen haalt.  Zodanig dat de interne auditor ook wel eens wil weten welke maatregelen je neemt om je projectrisico’s af te dekken.

 

De Cloud

Bovenstaande projectkarakterschets ging in vogelvlucht langs de kritische sucessfactoren van een ERP (her)implementatietraject. De vraag die blijft na deze projectkarakterschets: Kan de cloud een positieve invloed hebben op deze kritische succesfactoren?

We zagen dat bij een hedendaagse typische ERP implementatie bedrijfsdoelen en visie geen grote rol spelen. Dat is eigenlijk een prima uitgangspositie geredeneerd vanuit de cloud. Immers, als de ‘standaard’ aangeboden ERP in de cloud overeenkomt met bedrijfsplan, doelen en visie is er geen issue, en als de ‘standaard’ aangeboden ERP er niet mee overeenkomt, dan is dat eveneens geen probleem. Er zal geen animo zijn om er tegenin te gaan, bij gebrek aan uitgesproken breed gedeelde visie, is elke door derden aangeboden visie welkom.

In de hedendaagse situatie zien we ook dat de IT organisatie veel moeite heeft met het coördineren van de activiteiten van de onderaannemers. Een cloud aangeboden ERP implementatie staat klaar. De aanbieder heeft van te voren de processen om een goed functionerende en beheerde omgeving te laten draaien geoptimaliseerd. Met andere woorden, waar de IT afdeling van bedrijf dit soort activiteiten waarschijnlijk te weinig uitvoert om ervaren in te zijn, zal een cloud erp aanbieder dit goed moeten regelen om goedkoper en/of beter te zijn dan zijn concurrenten.

Waar komen system integrator en cloud-erp-provider elkaar dan tegen in een implementatietraject?

Eigenlijk alleen bij migratie activiteiten en bij training. Lijkt mij wel een goede focus. Het leest bovendien als een verademing ten opzichte van een huidig implementatietraject. 

 

 

Tags:

Mogelijk Interessant

Laaghangend Fruit

by marc 7. juni 2011 11:07

Je kent ze wel die kantoor hydroplanten. Altijd hetzelfde type. Waarom niet groente- en fruit op een kantoortuin plaatsen? Heel gezond af en toe een komkommer, tomaat of appel tussendoor te eten. Het management kan het laaghangend fruit plukken. Europese subsidie om mensen gezond te laten eten. Maatschappelijk verantwoord en duurzaam ondernemen. Weer zo'n briljant idee dat waarschijnlijk nooit verder komt.

Tags:

Wilde Ideeën

Size Estimation in ERP Projects

by marc 22. december 2010 06:37

 

Difference ERP vs non-ERP

          Non-ERP: make your use cases etc. Estimate on a use case basis

          ERP: basic functionality already available, making usecases not seen as useful…

 

ERP: use available components as metric objects

How?

 

 

What is available at the end of Inception phase?

          Highlevel Business Process

          Highlevel Business Requirements

          Global Impact Analysis                

          Use Case Model

          Architecture Description

And because you chose ERP

All documentation/experience/knowledge of that ERP

 

 

 

 

Proposal for Metric Objects in ERP projects

Classify business process

        New: New business process (not implemented in ERP before)

        Modified: Business process implemented in ERP but with modifications

        Re-use: Business process implemented in ERP without processmodifications

 

Classify Standard & Custom components

        New: components to be developed because COTS application does not provide for required functionality

        Modified: components to be modified because COTS application already contains (standard components but these do not entirely meet the requirements

        Re-use: pre-existing software will be used, but needs to be tested and integrated with new and modified components

 

 

 

 

Detail level

Classification business process

        Clear link to process-model tool must be used

Classification COTS components

        ‘Chunk of functionality’ within ERP-module: Receipts, Payments etc

        Independent functioning customization: 1 Interface, 1 report

 

      Detail too low: ERP module Accounts Payable

      Detail too high: Individual form, parameter for report

 

 

Find Agreement on classification

          Classification done individually by

        Business keyusers

        Supplier – application consultants

        Supplier – customization consultant

        Testconsultant

 

 

 

          Together agree on complexity per businessprocess

        Per businessprocess count

      Nr of new components

      Nr of reused components

      Nr of modified components

        Result is: estimation points. A number (like function points) which gives:

      indication of expected effort needed for a businessprocesses

      Indication of complexity of a businessprocess in relation to the other businessprocess (relative weight).

 

 

How to use the results to refine estimates?

First use own experience on how many hours per point

Then:

Ask supplier to report (weekly) on hours spent per business process in elaboration phase.

This gives an indication of the hours needed in elaboration phase per process identified in the impact analysis.

Supplierdeliverables in elaboration phase can be linked to businessprocesses from the impact analysis. Therefore reporting on hours spent per process should not be a problem.

 

Future projects can be used to refine this.

        

 

Tips

          Do not treat it as a science

          Try to find the most suited variable for your situation

          Use more then one estimating technique

          Just do it!

 

 

Tags: , ,

Mogelijk Interessant

Grip op IT systeemintegrators

by marc 18. november 2010 23:52

De trend is dat bedrijven steeds verder teruggaan in hun aantal IT-leveranciers. Doel is om de overgebleven leveranciers te prikkelen mee te denken met het bedrijf en en passant standaard uniforme werkwijzes bij de business af te dwingen. Vragen die dan direct opkomen zijn: - hoe bereiken we dat gedrag bij leveranciers? - hoe houden we grip op zulke leveranciers tijdens projectuitvoering?

Hieronder mijn gedachten.
Bij projecten die ik meemaak lijkt de de leverancier met name aangestuurd te worden aan de hand van gewenste opleverdata die op hun beurt zijn afgeleid uit de mengeling van businesswensdatum en door de IT-demandorganisatie verwachte benodigde inspanning.
Dit kan best anders ingevuld worden. Geef de leverancier inzicht in de businesscase van het project en stel de beloning voor de projectuitvoering aan de hand daarvan vast. Laat de leverancier ideeen op tafel leggen voor het maximaliseren van de businessbenefits. Dit moet de leverancier prikkelen tot een efficiente standaard oplossing met de gewenste businessfunctionaliteiten.
 

Toezicht op de zo'n oplossing zit in de aanhoudende monitoring van de deliverables die tussen supply en demand uitgewisseld worden. De uitdaging voor demand zit 'm er niet in om de deliverables op tijd te willen.
De uitdaging ligt in het bereiken van overeenstemming tussen supply en demand dat de inhoud optimaal bijdraagt aan de business benefits. Eenvoudiger gezegd: de deliverable voldoet aan afgesproken criteria.

Het begint dan bij een globale impactanalyse. Omdat standaardprocessen het best met COTS-producten worden uitgevoerd zou een globale impactanalyse een indruk moeten geven van de mate waarin businessprocessen nieuw zijn of reeds uitgevoerd worden. Daarnaast moet een Globale Impact Analyse indruk geven in de mate waarin COTS-componenten ongewijzigd gebruikt kunnen worden of aangepast moeten worden. Uiteindelijk hebben opdrachtgever en leverancier het hetzelfde beeld bij de volgende projectfase die dan van start gaat.

De deliverables detailanalyse tot en met (eventuele) programmacode worden door de leverancier opgesteld. Alle functionele documenten (detailimpactanalyse, solution design, functioneel ontwerp, business rules) zullen door een keyuser, tester en leverancier beoordeeld moeten worden. Dit doen we natuurlijk nu al...Ik denk dat het ook belangrijk is om bij elke beoordeling ook de vraag te stellen: 'wat schatten we nu in als doorlooptijd voor het vervolg?'. De antwoorden op die vraag zouden zelfs tot een andere oplossing kunnen leiden. Immers doordat de betrokkenen al wat gelezen, gezien, geprototyped etc hebben is meer kennis vergaard en ontstaat een beter beeld over de uiteindelijk gewenste oplossing. Elke keuze op dat moment draagt dan bij aan de businesscase.
De technische deliverables lijken we nu vaak in z'n geheel over te laten aan de supplier ('we hoeven toch niet te beoordelen of de leverancier zijn eigen processen efficient uitvoert?'). Door hier wel afspraken over te maken, geven we aan dat we dit serieus nemen en dat het in ons beider belang is dat de supplier zijn eigen processen efficient uitvoert. Het lijkt mij bovendien vanuit het oogpunt van mogelijke overdraagbaarheid naar een andere leverancier in de toekomst verstandig dit in de gaten te houden.
 

Aan het eind nog even ruimte voor een disclaimer. Het kan natuurlijk ook zo zijn dat het beter is om een hele business proces te outsourcen. Dan is bovenstaande niet van toepassing.

Tags: , , , , ,

Mogelijk Interessant

Midgetgolf

by marc 23. september 2010 07:19

Thuis doe je het nooit. Op vakantie doe je het heel vaak. Midgetgolfen.

Vreemd eigenlijk, want de gemiddelde midgetgolfbaan bij een camping of een restaurant is minstens 20 jaar oud. De verf bladdert van het beton af. Alles ligt scheef, er liggen bladeren en steentjes en overal groeit onkruid. Het is een wonder als je nog een keer het balletje in het putje krijgt.

Tijd voor een nieuw concept. Ik zeg: iedereen met een voortuin kan best 1 midgetgolflane aanleggen. Dat komt de creativiteit en varieteit aan banen enorm te goede. De een verzint iets met ophaalbruggetjes, de ander iets met tunnels. Bovendien kun je op die manier een mooi parcours door de wijk aflopen. Goed voor de buurtintegratie. Iedereen met een mooi ontwerp voor een baan mag zich bij mij aanmelden. De voortuin ligt er klaar voor. 

Tags:

Wilde Ideeën

Reuse in de IT

by marc 19. april 2010 07:30

Een reuse program introduceren op de IT-afdeling

 

 

Beginnen

 

Even kijken op http://en.wikipedia.org/wiki/Code_reuse

  • Opportunistic reuse -  Op het moment dat met een project begonnen wordt, realiseert men zich dat er bestaande componenten zijn die herbruikt kunnen worden.
  • Planned reuse – Een team ontwerpt de componenten zodanig dat ze herbruikbaar zijn in toekomstige projecten.

Iedereen gaat ervoor

 

Analysefase: Architecten identificeren processen of applicatieonderdelen die hergebruikt kunnen worden in het project dat gerealiseerd moet gaan worden.

Architecten identificeren vanuit businessrequirements processen die strategisch zijn en bewaken deze zodanig dat deze processen of te ontwikkelen applicaties in toekomstige projecten herbruikbaar zijn.

 

Ontwerpfase: Consultants herkennen dat er bestaande componenten zijn die herbruikbaar zijn. Consultants ontwerpen de componenten zodanig dat ze later herbruikbaar zijn.

 

Bouwfase: programmeur / leverancier toont aan dat software reuse de normaalste zaak van de wereld is. Onafhankelijke review kan evt bevestigen dat programmeurs zich houden aan het principe van ‘Don’t repeat yourself’ of ‘Once and only once’

 

Testfase: Testconsultants ontwikkelen testware die herbruikbaar is binnen een project. Scripts die in de basis geschikt zijn voor verschillende typen tests

Testconsultants ontwikkelen testware die herbruikbaar is binnen de lifecycle van een application.

 

 

Om te overwegen

 

Elke discipline (architecten, consultants, developers, testers) zou jaarlijks moeten aantonen dat er reuse is toegepast (uiteraard gespecificeerd in eigen metrics hoeveel dan wel!)

 

 

 

Elke discipline moet permanent actief beheren wat de herbruikbare processen, modules, scripts, code etc is. Dat is geen taak voor iemand anders, een beheerder ofzo, dat is een taak voor het eigen team.

 

 

Blijf Agile. Herbruikbaarheid naar de toekomst is geen doel op zich. Maar als je weet dat op een bepaald punt de business al 3 keer eerder zijn mening heeft gewijzigd, zorg dan dat je voorbereid bent.

 

 

Reuse before Buy before Build.

Maar ik doe ERP...: Out-of- the-box-processes before Configuration before Customizing.

 

 

 

Tags:

Mogelijk Interessant

Rolling Planning

by marc 17. januari 2010 07:22

Voortgangsrapportages tonen vaak hoeveel procent een bepaalde taak al is afgerond.

  • Maar heb je wel echt alle activiteiten die nodig zijn voor dat requirement doordacht? Met andere woorden weet je echt wel wat 100% is?
  • En is het niet zo dat de laatste 20% altijd 80% van de tijd kost?

Kortom wat heb je aan voortgangspercentages die zeggen dat een bepaalde taak voor 70% gereed is? Helemaal niets.

Hoe komen we wel tot een een rapportage die een beeld geeft en die aanknopingspunten voor bijsturing biedt?

  • per taak een verwachte einddatum invullen door degene die de taak uitvoert
  • als meer informatie is over een taak, dan deze direct uitsplitsten naar subtaken en per subtaak een verwachte einddatum laten invullen.
  • degene die moet bijsturen, gaat niet verwachte einddata ter discussie stellen. Hij heeft immers minder expertise en het getuigt van weinig respect ten opzichte van de professional die de inschatting maakt als hij zegt het beter te weten
  • degene die moet bijsturen, gaat wel de volgorde van gelijkwaardige, niet onderling afhankelijke taken ter discussie stellen. Sommige verder naar achter schuiven, waardoor meer tijd vrijkomt om risicovolle taken toch op tijd gereed te hebben.

En dat is mijn mening.

Tags:

Mogelijk Interessant