Categories
Boek

The Windup Girl

Ik ben bezig in The Windup Girl van Paolo Bacigalupi, een boek dat me werd aangeraden in een van de vele Waterstone’s winkels in Londen. Het speelt zich af in een toekomst waar we er blijkbaar niet in geslaagd zijn de dreigende milieurampen een halt toe te roepen. Integendeel, steden hebben hoge muren moeten opzetten om het water tegen te houden en er heerst een heuse zwarte markt wat zaadjes en vruchten betreft. Meer zelfs, genen worden ‘gehackt’ om nieuwe ziekten die gewassen bedreigen het hoofd te kunnen bieden en een wagen is totaal uit den boze aangezien de brandstof die nodig is hallucinant is.

Tijdens het lezen kwam ik op volgende bedenking die bij mij enorm is blijven hangen:

“Food should come from the place of its origin, and stay there. It shouldn’t spend its time crisscrossing the globe for the sake of profit. We went down that path once, and it brought us to ruin.”

Het is niet nieuw. Als je kijkt wat er tegenwoordig allemaal in de supermarkt ligt, dan kan je niet anders dan jezelf afvragen wat zo een exotische vrucht écht kost. Niet alleen wat er uit jou zak komt, ook de prijs die de natuur heeft betaald om het tot bij jou te krijgen. En niet alleen exotische dingen, hoor. Ik kan er niet bij dat garnaal, dat in onze streken gevangen wordt helemaal naar Noord-Afrika moet gebracht worden om daar gepeld te worden om toch uiteindelijk terug hier te belanden voor consumptie.

Het boek is de moeite als je geen problemen hebt met een beetje scifi. Oh, en trouwens, zo een Waterstone’s, dat is er ook in Brussel. No shit, ze spreken Engels en hebben de lidkaart. Het is zo een winkel waar ze een open haard en een goeie zetel zouden moeten zetten. Het enige dat ik dan nodig heb is een badjas en een hoop thee.

Categories
Film muziek

It rubs the lotion on its skin

Ik ga u niet te vragen de film te raden, het zou een kleine schande zijn als u dat niet wist. 
Maar wat een schijf!

Categories
Film

Reel Wisdom

Above all: Do or do not, there is no try.

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
gezondheid

Dromen

First entries in the dream journal are a fact.Een van de grootste mysteries die we nog hebben en daarom ook enorm populair is (zie Inception): Dromen, de dagelijkse schoonmaak en verwerking van alles wat er in die zwarte doos van ons zit. Onlangs zag ik op Discovery HD (yeah, wat een upgrade bij Telenet naar Fibernet 40 niet allemaal met zich meebrengt) een programma over dromen. Ik hou van kanalen als National Geographic en Discovery, ze zorgen er voor dat je altijd wel naar iets kan kijken.
Maar terug over dat programma, een van de zaken die ze daar aanhaalden is lucid dreaming.

Je hebt het ongetwijfeld ook al meegemaakt dat je tijdens een droom beseft dat je aan het dromen bent. Dit zou het walhalla van creativiteit wel eens kunnen zijn want alle wereldse limieten vallen weg en je krijgt vrij spel in een setting die enorm realistisch aanvoelt. Maar hoe krijgen we zo een klare droom? Om nog maar te zwijgen over het controle krijgen van je omgeving eens je beseft dat je aan het dromen bent.

Blijkt dat er best wat technieken voor bestaan. En eerlijk gezegd lijken de technieken met het meeste kans op slagen er die te veel van me zouden vragen. Behalve eentje: een droomdagboek. Vroeger droomde ik veel en hevig en dat doe ik niet meer. Al een hele tijd niet. Maar de wetenschap spreekt me tegen: ik droom altijd, zelfs een paar keer per nacht, ik herinner me ze gewoon niet. En daar kan een droopdagboek bij helpen.

Door je dromen bij te houden, zal je ze beter herinneren. Klinkt logisch, maar dan moet je er ook aan beginnen. Dus ligt er sinds een paar nachten een moleskine naast het bed. Hoe het de eerste nachten is gelopen:

  • Na de eerste nacht: compleet vergeten dat er een schriftje lag en in de verste verte geen herinnering van een droom.
  • Na de tweede nacht wakker geworden met een vage herinnering
  • Tijdens de derde nacht om 4u wakker geworden om een droom op te schrijven
  • Na de derde nacht: droom opgeschreven

No shit, die derde nacht was deze nacht. Toeval dat ik me plots een droom herinner, wat zeg ik, twee dromen? Waarschijnlijk, maar wat geen toeval kan zijn is dat ik bij het wakker worden haast automatisch naar het schriftje greep. Om een of andere reden ben ik me (al) bewust van dat schriftje naast mijn bed. Dit verrast me en maakt me ENORM benieuwd naar hoe dit verder zal gaan. Zeker als ik zie wat voor freaky dingen ik opgeschreven heb.

En wie weet is het genoeg om toch wat lucid dreams te kunnen beleven?