Mijn "luxe hotel" ervaring

Door Gamebuster op donderdag 23 oktober 2014 09:00 - Reacties (45)
Categorie: quite useless, Views: 6.177

http://i.imgur.com/RmyPOwZ.jpg
http://i.imgur.com/illg39o.jpg

Zie je die plaatjes? Dit zijn de plaatjes van de Jungle Suite volgens de website van Van Der Valk Hotel Shiphol A4. Ik heb daar voor een nachtje geboekt.

Hier volgen mijn ervaringen van deze kamer.

Laten we eerst beginnen met het afgaan van het lijstje:

75 m2 floor area
Ik heb het niet opgemeten, het is wel een grote kamer. Dat geloof ik wel.

Open bath room with 2-person bubble bath
Dat is helemaal juist. Je hebt een serieus groot bad waar je comfortabel met z'n 2en in kan zitten. Wel je eigen bad-olie meenemen als je funky geurtjes wil. In de kamer vind je nl. maar 1 klein flesje "standaard" olie. Ik had stiekem toch wel enkele leuke geurtjes verwacht.

2-person rainshower
Ik zou het niet een "2 persoons douche" noemen. Het zijn gewoon 2 douches met daartussen een meter afstand. Als je met z'n 2en lichamelijk contact wil hebben onder de douche, sta je in de praktijk alsnog onder 1 douche. Nog leuker, je hebt dus 2 douches. Je kan hierbij per douche kiezen tussen de "rain shower" (dat het water van boven komt) of water uit de sproeikop. Bij 1 van de 2 douches functioneerde de sproeikop helemaal niet: Er kwam geen water uit, alleen uit de rain shower.

Ik gebruikte die douche kop toch niet, maar het is wel enigszins teleurstellend.

2-person hammock
Een hangmat. Met 1 persoon zakt en kraakt dat ding al zover in dat je nog net niet op de grond ligt. Ik zou er niet met 2 personen in durven. Ook is-ie totaal niet zoals op de foto. Mijne is van geweven touwen en ziet er enigszins in matige staat uit. Zonder iemand erin hangt-ie al enigszins scheef. Hoe dan ook, ik zie de meerwaarde er niet in. Misschien is jouw ervaring anders.

Double bed
Het bed is prima. Enige aanmerking is dat je 2 losse 1 persoons dekens hebt. Volgens de balie medewerker is dit op verzoek van diverse klanten. Ik kan me niet voorstellen dat je op een "romantische" kamer met 2 1 persoons dekens wil, magoed, dat zal ik wel zijn. Op zich is het verder niet storend, maar mijn voorkeur is toch wel een 1 2 persoons deken.

42 inch flatscreen TV
Dit is het lachertje van de dag. Het betreft een HD-Ready flatscreen TV (dus geen "real HD") met vermoedelijk digitene of vergelijkbaar. De beeldkwaliteit is slecht (gewoon klassieke digitenne kwaliteit) en het signaal valt af en toe volledig weg.

Het is bedroevend dat je "fatsoenlijke" zenders als Discovery Channel alleen tegen bijbetaling kan krijgen. Ach ja, je hebt tenminste Family Feud op BNN.

Tijdens het schrijven van deze blog is de TV minstens 5 keer uitgevallen en is het beeld vele keren gaan flikkeren met zichtbare storingen.

Telephone
Niet getest. Gewoon een klassiek bedraad toestel.

Free Wi-Fi
Forget it. Werkt niet in mijn kamer. Ik heb hier 4 WIFI-capable devices, alleen mijn Late 2013 Macbook Retina ziet dat er een WIFI signaal is, maar het bereik is onvoldoende om een verbinding te kunnen leggen. Ik typ dit dus via tethering van mijn telefoon.

Air conditioning
Je hebt inderdaad een goede airco in de kamer. Deze heeft flinke power en je voelt meteen dat de temperatuur daalt zodra je 'm aanzet. Het nadeel: Je kan de temperatuur van je kamer niet lager dan 19 instellen. Niet verschrikkelijk, maar enigszins teleurstellend.

Writing desk
Een klein glazen tafeltje, het doet wat het moet doen.

Seating area
2 stoelen met een ronde tafel. Zoals het vorige tafeltje: Het doet wat het moet doen.

Hairdryer
Jep, een haardroger. En hij doet het ook nog.

Room safe
Gezien, niet getest.

Goed, nou de plaatjes vergelijken. Zie je die rozenblaadjes en kaarsjes op die 1e foto? Die bruine kussentjes? Nou, nope. Die zijn er dus niet. De rozenblaadjes zijn op verzoek en kosten extra, de kaarsen zijn brandgevaarlijk en zijn alleen geplaatst voor de foto (letterlijke woorden van balie-medewerker) en die bruine kussentjes werden structureel gejat dus hebben ze die ook weggelaten.

Ach ja.

Voedsel
Ik was bijna 100 euro kwijt voor een etentje voor 2. Het eten was op zich prima, wat je wel mag verwachten voor een 4 sterren restaurant. Ik heb meegesnoept met het eten van mn vriendin en mijn eigen eten.

4 kleine toevoegingen over het restaurant:
- Ik had een "The Champion"; dat is een voorgerecht met gebakken champignons. Deze waren vrij teleurstellend. De champignons waren zeer zout, vermoedelijk door de spekjes die erbij zaten. Een diep bord met champignons, spekjes en een hoop sap van alles zorgt voor een rijk gevulde zoute soep met spekjes en champignons.
- M'n vriendin had een ossenhaas, medium rare. Deze was erg lekker, alleen een enkele kant hiervan was nog wel erg rauw. Ik vergeet het ze gezien het vrij veel voorkomt dat restaurants zoiets niet volledig egaal "garen", maar voor een 4 sterren restaurant... Ik weet niet of dat de bedoeling is.
- We kregen bij het voorgerecht "gratis" stokbrood met roomboter. De stokbrood was naar mijn mening te grof gesneden (plakke van ruwweg 4cm) en het stokbrood was naar mijn mening te donker. Ik had hiervan wat gezegd, maar volgens m'n bediende was het "normaal" en niet te donker. Ook vroeg ik of ze ipv de roomboter ook kruidenboter konde geven, maar dit kon alleen tegen meerprijs.
- Het nagerecht was een "care to share" o.i.d.; Dat is een nagerecht van 12 euro voor 2 personen. Je krijgt dan een grote schaal met allemaal kleine hapjes, waaronder een stuk cheesecake, paar bolletjes ijs, diverse vruchtjes, slagroom en nog veel meer kleine dingetjes. Dit was echt het hoogtepunt van de hele dag, en dat voor maar 12 euro.

Al met al lekker gegeten. Niet perfect, maar zeker niet slecht.

De Muis
No shit, ik heb een fucking muis gezien in de bar. Ik heb het me niet verbeeld, mijn vriendin zat naast me en die zag het ook.

Wat heb je verder in de kamer?
Niets. Slechts na klagen over een gebrek van waterkoker o.i.d. op de kamer kwam "boven water" dat je tegen een extra borg een waterkoker kan krijgen. Jeej. Eindelijk zelf thee kunnen zetten.

Conclusie
Je hebt WIFI, maar in mijn geval geen bereik. Je hebt een 42" flatscreen TV, maar niet eens HD, slecht signaal en niet echt boeiende zenders. Verder geen mogelijkheid om een DVD af te spelen of bijv. een eigen laptop ofzo aan te sluiten.

In de plaatjes heb je kaarsjes en rozenblaadjes. Ik mag dan een zeurklaas zijn, maar als ik dat op een plaatje zie, verwacht ik ook enigszins dat het er zal zijn. Misschien niet zo perfect netjes als op de plaatjes, maar "helemaal niet" vind ik gewoon slecht.

Het voelt allemaal erg commercieel en "ja dat kost extra". Ik had verwacht dat als je 288 euro neertelt voor een overnachting met ontbijt (exclusief lunch/diner dus) dat je wel soort-van in de watten gelegd wordt. Dit valt toch best wel tegen eigenlijk.

Ik heb een leuke avond gehad, maar ik zou deze kamer niet opnieuw boeken. Je betaalt naar mijn mening veel voor een leuke kamer, maar een aanzienlijke deel van de items die ze aanbieden, zijn het allemaal "net niet". Dit breekt naar mijn mening de ervaring, wat voor mij de prijs van de kamer te hoog maakt om dit te herhalen.

DiScO HeAdEr (met video)

Door Gamebuster op zondag 19 oktober 2014 13:49 - Reacties (15)
Categorie: quite useless, Views: 2.017

Speciaal voor OSX 10.10 Safari mensen:

DISCO HEADER

JS to JS compiler

Door Gamebuster op woensdag 08 oktober 2014 23:01 - Reacties (8)
Categorie: if(post.relatedTo("programming")), Views: 924

Na vele to-JS compilers bekeken, ben ik zelf ook gaan experimenteren met de ontwikkeling van een taal die naar Javascript compileert.

Niet omdat Javascript slecht is, maar omdat het schrijven van "nette" javascript er automatisch voor zorgt dat je codebase groter en slecht comprimeerbaar (minify-baar) wordt. Geen Javascript minifier kan object property names "slim" "obfuscaten". Ik zoek dus een manier om dit wel te realiseren.

Lang verhaal zal ik jullie besparen; een voorbeeld zegt meer dan 1000 woorden:

De "Super" Javascript:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// dom.sjs
export namespace dom {
  function ready(fn) {
    extern window.addEventListener("DOMContentReady", ->{ fn(); });
  }
}

// main.sjs
import "dom";
using namespace dom;

ready(->{
  if(extern window.location.pathname == "/")
    extern console.log("You are at the root page!");
});

if(dom::ready == ready)
  extern console.log("namespaced!");



Resulterende Javascript (geannoteerd)

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// The compiled result of the SJS file. Variable names are not obfuscated for the purpose of this
// demonstration, but they might as well have been. If wrapped in (function() { ... })(), any JS
// minifier will obfuscate and minify the code effectively.

// All extern references. Window is used in multiple extern references, so it is wrapped in a
// variable as well. The extern keyword declares external variables to be imported and used in our
// script.
var _Ewindow = window,
    _Ewindow_Elocation_Epathname = _Ewindow.location.pathname,
    _Econsole_Elog = console.log;

//   import "dom";
//   using namespace dom;
// The import and using statements don't produce any code.
// The function defined in the 'dom' namespace is inlined later since it is only used once.


//   ready(->{
//     if(extern window.location.pathname == "/")
//       extern console.log("You are at the root page!");
//   });
// Here, we use the ready-function with a function argument.
// Since the ready-function is only called once, the function is inlined.

// Extern window.addEventListener is only used once, so it is inlined and not declared at the top.
_Ewindow.addEventListener("DOMContentReady", function() {
  if(_Ewindow_Elocation_Epathname == "/")
    _Econsole_Elog("You are at the root page!");
});

//   if(dom::ready == ready)
//     extern console.log("namespaced!");
// since dom::ready and ready are the same thing (ready implicitly namespaced by the 'use namespace'
// statement) and there is no possible conflict for another ready-function, the comparison always
// equals to 'true'. Therefore, the content of the if-statement can be unwrapped and the
// if-statement removed.
// The extern console.log is stored in a variable at the top of the script, because it is referenced
// as external multiple times.
_Econsole_Elog("namespaced!");



Minified resultaat: (beautified)

JavaScript:
1
2
3
4
5
6
7
8
9
var n=window,
  e=n.location.pathname,
  o=console.log;

n.addEventListener("DOMContentReady", function(){
  "/" == e && o("You are at the root page!")
}),

o("namespaced!")



Besef dat dit theoretisch is. Ik heb geen werkende cross-compiler. Ik ben aan het fantaseren hoe mijn eventuele cross-compiler zijn werk zou doen. Het uiteindelijke doel is modulaire javascript die hevig "comprimeerbaar" is voor een zo compact mogelijk resulterend javascript bestand voor de client, zoals je browser.

In een wereld met megabit verbindingen, is dit nog relevant?
Ik vind van wel. Code-bases groeien hard clientside, waarbij sommige sites meer dan een megabyte aan javascript hebben. Dit vertraagt het laden van de site dramatisch en kost alleen maar onnodig bandbreedte voor zowel jou en mij.

Is een eigen taal ontwikkelen niet een idiote taak?
Ik heb ervaring met het gebruik van parser generators voor "eigen talen". Tevens heb ik een grammar file gevonden die 100% ECMA6 compatible is. Mijn plan is om deze grammer file aan te passen met mijn features en daarmee de "super javascript" te tokenizen en parsen.

Vervolgens moeten er diverse optimalisatie tools en andere scripts op los gelaten worden om de code te transformeren naar "normale" ECMA5-compatible javascript.

Het is veel werk, maar zeker niet onmogelijk.

Javascript is een kut taal. Een taal die naar JS compileert kan JS's gebreken hooguit verstoppen, niet weghalen
Javascript kan een geinige taal zijn. Het heeft zijn sterke punten. Het is ook zeker niet mijn intentie Javascript "features"/gebreken te verbergen. Ik wil dat de taal aanvoelt als javascript, inclusief al zijn gebreken en rare features. Ik wil enkel wat extensies voor het makkelijker maken van bepaalde taken, zoals prototype inheritance en property management (defineProperty enz.): Ik wil geen neppe "Class-oriented taal" ervan maken.

G/b/ tries: Terraria

Door Gamebuster op zaterdag 19 juli 2014 22:36 - Reacties (11)
Categorie: Gaming, Views: 3.034



Ik speel Terraria voor het eerst en lever commentaar over de microfoon. Gewoon, omdat het kan.

Ik vind het altijd leuk om gameplay video's te kijken en mijn interesse ligt er ook al een tijd om zelf video's te gaan maken. Dit is 1 van mijn pogingen. De video is niet bewerkt voor uploaden; Ik vond de video wel voldoende om zonder knippen te uploaden.

edit: Titel aangepast zodat gamenaam zichtbaar is in tweakblogs overzicht.

Groeperen op wat het doet of wat het is?

Door Gamebuster op woensdag 28 mei 2014 18:24 - Reacties (14)
Categorie: if(post.relatedTo("programming")), Views: 3.606

Bij grotere software pakketten groepeer je je code. Of je nou in C, Java, Ruby of Haskell werkt: Groeperen van code doen we allemaal. Voor ieder project waar je wat langer aan verwacht te werken, verschijnen al gauw meerdere bestanden. Voor nog grotere projecten verschijnen de mapjes. Bij frameworks wordt de mappen-structuur zelfs voor je afgedwongen of gegenereerd. Maar wat is eigenlijk de “juiste” manier?

Groeperen op wat het is
Is het een model? Een entity? Een controller? Een view? Bij frameworks als Rails zie je vaak een mappen-structuur waarbij alle modellen onder de “models” map vallen, alle controllers onder de “controllers” map vallen en alle views onder “views”.

Zo heb je alles netjes bij elkaar. Wil je een view wijzigen? Prima, open de views map en leef je uit. Wil je je model wijzigen? Prima, open de models map. Klinkt niet verkeerd toch?

Stel, ik heb een Twitter applicatie gebouwd in een MVC framework als Rails. De modellen User en Tweet zitten in de models map, de controllers hiervoor in de controllers map en de views voor alle acties voor de controllers hiervoor zitten in de views map.

Nu wil je een veld toevoegen aan User. Je wil op iedere profielpagina een link toevoegen naar de website van de gebruiker; deze link kan de gebruiker zelf toevoegen.

Om dit te doen, moet je eerst de User model aanpassen: Je moet een homepage veld toevoegen. Je opent de models-map en voegt het veld toe. Nu moet je toevoegen dat de gebruiker dit veld kan invullen en bewerken. Je hebt al een gebruiker bewerken controller actie en view, dus je hoeft deze 2 alleen nog aan te passen. Je opent de controllers map en past de controller aan met een default value en een assignment van de input params naar het model. Verder open je de views map en pas je de view aan zodat er een veld zichtbaar wordt.

Nou is dit een vrij simpel voorbeeld. Complexer voorbeeld is een test driven applicatie. Al gauw heb je vele mapjes open in je file drawer. Je wijzigingen in de applicatie zijn verspreid over een wijd arsenaal aan mappen.

Groeperen op waarvoor het is
Stel nou dat je alles groepeert op wat het is. Je hebt een users-map met daarin de user-model, de users controller en alle views voor users. In dezelfde map zitten zelfs je tests, want we schrijven natuurlijk wel tests voor de software die we maken, toch?

Voor de bovenstaande aanpassing, hoeven we maar 1 map te openen: users. Daaronder zitten alle bestanden die we moeten wijzigen. De tests, de controller, het model en de views.

Alle wijzigingen zijn gegroepeerd onder 1 map. Je hebt niet hoeven zoeken naar alle bestanden die je nodig hebt. In dit is het direct duidelijk dat je alleen dingen hebt veranderd onder /users.

Wat vind jij?
Tot nu toe heb ik altijd gegroepeerd op wat het is, simpelweg omdat dat “the way to go” is bij frameworks als Rails, maar mijn recente loskoppeling van Rails heeft me aan het denken gezet of dat wel de meest efficiŽnte manier is voor mij.

Ik denk dat het gezond is je primaire mappen-structuur meer te focussen op wat de applicatie inhoudt (tweets, users) en niet wat er allemaal in zit (models, controllers, views)

Dus... Groeperen op wat het is, of waarvoor het is?