Categories
werk Wonen

Autovrij

Sinds een kleine twee weken leef ik autovrij. Ik leverde mijn wagen in bij mijn vorige werkgever en startte zonder bij mijn nieuwe. Vanaf nu verplaats ik me met de fiets en als het niet anders kan (lees: het regent) met de bus.

Het kunnen de wittebroodsweken zijn maar ik vind het geweldig. Ik fiets vrolijk fluitend door ‘t Stad en probeer de voetgangers die nog half slapen zo goed mogelijk te ontwijken. Het lukt me aardig, ik heb mijn bel leren gebruiken. Niet dat die iets uithaalt bij de tieners met hun oortjes in, maar je leert deze detecteren en anticiperen.
De afstand van mij thuis naar het werk is 6km. Dat is zoals vroeger, toen ik met de fiets naar school reed. Met dat verschil dat je vroeger in groep reed. Ik vertrok thuis en pikte iedereen op. Soms at ik zelfs nog een hapje mee bij een van m’n vrienden omdat ze zich overslapen hadden of omdat ik wat vroeger was omdat ze nu eenmaal een enorm knappe, doch iets oudere zus hadden. Doorheen mijn middelbare schooljaren fietste ik steeds met die groep die elk jaar iets groter leek te worden 12 km. Nu ik daar aan terug denk lijkt het raar dat van de ene dag op de andere die groep voor mij verdween. Ah, nostalgie.

Het werk is super. Ik werk nu voor de stad waarin ik woon en bouw dus mee aan die A waar ik van hou, met een leuke groep collega’s. Ik heb genoten van mijn dagen in Brussel en Gent en heb deze steden leren kennen en appreciëren. Maar dit, dit is thuiskomen.

Het is niet helemaal waar, natuurlijk, ik rij nog met de wagen. Evelyne heeft er nog eentje en die is nodig om Alexander naar mijn ouders te brengen op vrijdag, om inkopen te gaan doen en op uitstap te gaan. Stuff like that. Ik geloof niet dat ik volledig autovrij kan leven, jammer genoeg. Maar ik kan enkel mijn best doen. En sinds twee weken staat er toch eentje minder in de file.

Categories
werk

IT

Er is nog werk voor ons IT-ers, nog veel werk. Klein voorbeeldje van hoe ik als consultant mijn uren moet registreren:

  • Voor mijn eigen werkgever is er een online applicatie waarin ik noteer op welk project ik wanneer gewerkt heb.
  • Voor mijn huidige klant heb ik een badge. Ik moet badgen bij het binnenkomen en het buitengaan en ook onder de middag. Als de pauze tijdens de middag kleiner is dan een half uur wordt er toch een half uur aangerekend. Indien ik niet tijdens de middag badge, dan rekenen ze anderhalf uur pauze aan. Neem ik minder dan een half uur pauze dan wordt dit naar een half uur gebracht. Met nog deze uitzondering: als ik een pauze kleiner dan 10 minuten neem dan zitten we terug met anderhalf uur (wat een bug blijkt te zijn).
    Ik kan eventuele badgesessies die ik vergeten ben (of als ik op een andere locatie zat) nog ingeven via een online applicatie.
  • Natuurlijk weet de klant nog niet wat ik nu juist gedaan heb. Daarom is er ook een soort online MS Project waar mijn projectmanager mij taken geeft waarop ik dan uren kan boeken. En daar begint de echte Kafka.
  • Als ik alles daar netjes ingegeven heb moet ik een nachtje wachten tot de verwerking van deze gegevens. Daarna kan ik een rapport trekken dat ik moet laten handtekenen door de klant.
  • Met dit papier trek ik naar de administratie bij de klant die er een ‘code’ zal opschrijven.
  • Dit papier stuur ik dan naar mijn werkgever zodat deze dit bij het factuur kan steken dat ze gaan sturen naar de klant.

Ik ben er zeker van dat er nog straffer verhalen zijn. Het probleem is dat ik ergens nog ‘snap’ waarom al deze stappen nodig zijn. Het jammere is dat ik heel slecht ben in zo’n dingen en ik eigenlijk een grondige hekel heb aan controle.

Een zeer grondige hekel.

Categories
werk

Schoolvakanties in SQL

Omdat mijn huidige klant met onderwijs te maken heeft, moest de kalender dimensie alle schoolvakanties bevatten. Deze berekenen kan aan de hand van, jawel, enkele regels die je kan terugvinden op de website van de Vlaamse Overheid.

Met de hulp van een paar berekeningen die het internet reeds voor mij deed (een stored procedure om Pasen te berekenen en eentje om een weekdag van een bepaalde week te kunnen vinden):

CREATE FUNCTION dbo.udf_nthWeekDay
(
  @n       INT,
  @weekDay CHAR(3),
  @year    INT,
  @month   INT
)
RETURNS DATETIME
AS
BEGIN
  DECLARE @date    DATETIME,
    @dow         INT,
    @offset      INT,
    @wd          INT;
   
  SELECT @wd = CASE @weekDay
      WHEN 'SUN' THEN 1
      WHEN 'MON' THEN 2
      WHEN 'TUE' THEN 3
      WHEN 'WED' THEN 4
      WHEN 'THU' THEN 5
      WHEN 'FRI' THEN 6
      WHEN 'SAT' THEN 7
    END,
    @date = CAST
    (
      CAST(@year AS VARCHAR(4)) +
      RIGHT
      (
        '0' + CAST
        (
          @month AS VARCHAR(2)
        ), 2
      ) +
      '01' AS DATETIME
    ),
    @dow = DATEPART(dw, @date),
    @offset = @wd - @dow,
    @date = DATEADD(day, @offset + (@n - CASE WHEN @offset >= 0 THEN 1 ELSE 0 END) * 7, @date);
  RETURN @date;
END;
GO


CREATE FUNCTION [dbo].[fn_EasterSundayByYear]
(@Year char(4))
RETURNS smalldatetime
AS
BEGIN

declare
@c int
, @n int
, @k int
, @i int
, @j int
, @l int
, @m int
, @d int
, @Easter datetime

set @c = (@Year / 100)
set @n = @Year - 19 * (@Year / 19)
set @k = (@c - 17) / 25
set @i = @c - @c / 4 - ( @c - @k) / 3 + 19 * @n + 15
set @i = @i - 30 * ( @i / 30 )
set @i = @i - (@i / 28) * (1 - (@i / 28) * (29 / (@i + 1)) * ((21 - @n) / 11))
set @j = @Year + @Year / 4 + @i + 2 - @c + @c / 4
set @j = @j - 7 * (@j / 7)
set @l = @i - @j
set @m = 3 + (@l + 40) / 44
set @d = @l + 28 - 31 * ( @m / 4 )

set @Easter = (select right('0' + convert(varchar(2),@m),2) + '/' 
    + right('0' + convert(varchar(2),@d),2) + '/' + convert(char(4),@Year))

return @Easter
END 


CREATE TABLE [dbo].[DimKalender](
    [KalenderId] [int] NOT NULL,
    [KalenderDatum] [datetime] NOT NULL,
    [KalenderDag] [int] NOT NULL,
    [KalenderMaandNaam] [varchar](20) NOT NULL,
    [KalenderMaand] [int] NOT NULL,
    [KalenderTrimester] [int] NOT NULL,
    [KalenderSemester] [int] NOT NULL,
    [KalenderJaar] [int] NOT NULL,
    [KalenderSchooljaar] [varchar](9) NOT NULL,
    [KalenderVakantieNaam] [varchar] (10) NOT NULL,
 CONSTRAINT [DimKalender_PK_IT] PRIMARY KEY CLUSTERED 
(
    [KalenderId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF
    , ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

… heb ik om de tabel te vullen, en dus effectief de schoolvakanties te berekenen dit in elkaar gestoken:

SET DATEFIRST 1

DECLARE @startdate                DATETIME
DECLARE @enddate                DATETIME
DECLARE @year                    INT
DECLARE @yearasstring            VARCHAR(4)
DECLARE @month                    INT
DECLARE @prevyearasstring        VARCHAR(4)
DECLARE @nextyearasstring        VARCHAR(4)
DECLARE @easter                    DATETIME
DECLARE @day                    INT
DECLARE @twoweeksaftereaster    DATETIME
DECLARE @firstaprilmonday        DATETIME
DECLARE @xmas                    DATETIME
DECLARE @xmasprevyear            DATETIME
DECLARE @xmasdow                INT
DECLARE @xmasdowprevyear        INT
DECLARE @eastermonday            DATETIME
DECLARE @eastermonth            INT
DECLARE @weekday                INT

SET @startdate = CONVERT(DATETIME,'01-01-1990') 
SET @enddate = CONVERT(DATETIME,'01-01-2100')

WHILE @startdate < @enddate

BEGIN

SET @year = DATEPART(yy,@startdate)
SET @yearasstring = CAST(@year AS VARCHAR(4))
SET @month = DATEPART(MM,@startdate)
SET @prevyearasstring = CAST((@year-1) AS VARCHAR(4))
SET @nextyearasstring = CAST((@year+1) AS VARCHAR(4))
SET @easter = [dbo].fn_EasterSundayByYear(@yearasstring)
SET @day = DATEPART(dd,@startdate)
SET @twoweeksaftereaster = DATEADD(DD,14,@easter)
SET @firstaprilmonday = dbo.udf_nthWeekDay(1,'MON',@year,4)
SET @xmas = ('12-25-')+ @yearasstring
SET @xmasprevyear = ('12-25-')+ @prevyearasstring
SET @xmasdow = DATEPART(DW,@xmas)
SET @xmasdowprevyear = DATEPART(DW,('12-25-')+ @prevyearasstring)
SET @eastermonday = DATEADD(DD,1,@easter)
SET @eastermonth = DATEPART(MM,(@easter))
SET @weekday = DATEPART(DW,@startDate)

INSERT INTO [dbo].[DimKalender]
           ([KalenderId]
           ,[KalenderDatum]
           ,[KalenderDag]
           ,[KalenderMaand]
           ,[KalenderMaandNaam]
           ,[KalenderTrimester]
           ,[KalenderJaar]
           ,[KalenderSchoolJaar]
           ,[KalenderVakantieNaam]
           )
           
           
VALUES  (
/*[KalenderId]*/                @year*10000 + @month*100 + @day,
/*[KalenderDatum]*/                @startdate,
/*[KalenderDag]*/                @day,
/*[KalenderMaand]*/                @month,    
/*[KalenderMaandNaam]*/            CASE @month
                                    WHEN 1 THEN 'Januari'
                                    WHEN 2 THEN 'Februari'
                                    WHEN 3 THEN 'Maart'
                                    WHEN 4 THEN 'April'
                                    WHEN 5 THEN 'Mei'
                                    WHEN 6 THEN 'Juni'
                                    WHEN 7 THEN 'Juli'
                                    WHEN 8 THEN 'Augustus'
                                    WHEN 9 THEN 'September'
                                    WHEN 10 THEN 'Oktober'
                                    WHEN 11 THEN 'November'
                                    WHEN 12 THEN 'December'
                                END,
/*[KalenderTrimester]*/            DATEPART(qq, @startdate),                                
/*[KalenderJaar]*/                @year,
/*[KalenderSchooljaar]*/        CASE WHEN @month <= 8 
                                    THEN @prevyearasstring + '-' + @yearasstring
                                    ELSE @yearasstring + '-' + @nextyearasstring
                                END,
/*[KalenderVakantieNaam]*/        CASE 
                                    WHEN @month = 7 THEN 'Zomer'
                                    WHEN @month = 8 THEN 'Zomer'
                                    WHEN DATEPART(dw,('11-01-' + @yearasstring)) = 7 
                                        AND (@startDate between ('11-02-'+ @yearasstring) 
                                        and ('11-08-'+ @yearasstring)) THEN 'Herfst'
                                    WHEN DATEPART(dw,('11-01-' + @yearasstring)) != 7 
                                        AND DATEPART(WW,@startdate) = DATEPART(WW,('11-01-'+@yearasstring)) 
                                        THEN 'Herfst'
                                    WHEN @month = 12 AND @xmasdow = 6 AND @startdate between ('12-27-' + @yearasstring) 
                                        and ('01-09-' + @nextyearasstring) THEN 'Kerst'
                                    WHEN @month = 12 AND @xmasdow = 7 AND @startdate between ('12-26-' + @yearasstring) 
                                        and ('01-08-' + @nextyearasstring) THEN 'Kerst'
                                    WHEN @month = 12 AND @xmasdow < 6 AND @startdate 
                                        between (DATEADD (dd,(-(@weekday - 1)),(@xmas))) 
                                        and (DATEADD (dd,(- @weekday + 14),(@xmas))) THEN 'Kerst'
                                    WHEN @month = 1 AND @xmasdowprevyear = 6 AND @startdate <= ('01-09-' + @yearasstring) 
                                        THEN 'Kerst'
                                    WHEN @month = 1 AND @xmasdowprevyear = 7 AND @startdate <= ('01-08-' + @yearasstring) 
                                        THEN 'Kerst'
                                    WHEN @month = 1 AND @xmasdowprevyear < 6 AND @startdate    
                                        between (DATEADD (dd,(-(@weekday - 1)),(@xmasprevyear))) 
                                        and (DATEADD (dd,(- @weekday + 14),(@xmasprevyear))) THEN 'Kerst'                                    
                                    WHEN @startdate = '11-11-' + @yearasstring THEN '11 November'
                                    WHEN @startdate = '05-01-' + @yearasstring THEN '1 Mei'
                                    WHEN @eastermonth = 3 AND @startdate between @eastermonday AND @twoweeksaftereaster 
                                        THEN 'Pasen'
                                    WHEN @easter > ('04-15-' + @yearasstring) AND @startdate 
                                        between (DATEADD(DD,-13,@easter)) AND @eastermonday THEN 'Pasen'
                                    WHEN @eastermonth != 3 AND @easter <= ('04-15-' + @yearasstring) 
                                        AND @startdate between @firstaprilmonday AND DATEADD(DD,13,@firstaprilmonday) 
                                            THEN 'Pasen'
                                    WHEN @startdate = DATEADD(DD,49,@twoweeksaftereaster) THEN 'PinksterMaandag'
                                    WHEN @startdate between DATEADD(DD,-48,@easter) AND DATEADD(DD,-42,@easter) 
                                        THEN 'Krokus'
                                    WHEN @startdate between DATEADD(DD,39,@easter) AND DATEADD(DD,40,@easter) 
                                        THEN 'Hemelvaart'
                                    ELSE 'Geen'
                                END                    
)

SET @startdate = DATEADD(dd,1,@startdate)

END

Enjoy ;)

Categories
online werk

Bloggen op de Olympische Spelen

U weet het of u weet het niet, maar mijn werkgever is Atos Origin. Meestal hou ik deze blog enorm gescheiden van het werk, maar een uitzondering op al die jaren mag wel eens.

Wat u misschien ook wel of niet weet is dat Atos Origin ook instaat voor de IT die bij de Spelen komt kijken. Een vast team wordt bij elke editie versterkt van een groot aantal vrijwilligers die wereldwijd bij AO werken. Zo ook collega Patrick, die toevallig ook een blog heeft en daar vanuit Peking op blijft verder schrijven.

Een must-read is dan ook de post op 8-8-8. Wat beloofde een van de meest memorabele dagen te worden uit zijn leven, werd een heuse emotionele rollercoaster toen hij enkele uren voor aanvang van de opening van de Spelen te horen kreeg dat zijn vader in het ziekenhuis opgenomen was. De strijd om het leven kende helaas halfweg de openingsshow een einde.

Patrick, innige deelneming. Hopelijk kan je toch nog wat van deze ervaring genieten. Ik, en ik denk samen met mij het hele Atos Origin team hier, volgen je blog op de voet.

Categories
Lifelog werk

Testimonial

De mensen van marketing (van mijn werkgever) vroegen mij om een testimonial. Deze zou moeten verschijnen in een soort krantje dat op de verschillende job-beurzen en events uitgedeeld zal worden. Ik ben benieuwd of mijn quote het zal halen:

We do not promise cake.