1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Popplio728 has added a photo to the pool:

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Credit: Samuel Sebenzo of Panorama.

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Popplio728 has added a photo to the pool:

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Credit: Samuel Sebenzo of Panorama.

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Popplio728 has added a photo to the pool:

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Credit: Samuel Sebenzo of Panorama.

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Popplio728 has added a photo to the pool:

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Credit: Samuel Sebenzo of Panorama.

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Popplio728 has added a photo to the pool:

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Credit: Samuel Sebenzo of Panorama.

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Popplio728 has added a photo to the pool:

1980 Kessner 8x4 Tandem Axle Box Trailer (Facebook Marketplace find)

Credit: Samuel Sebenzo of Panorama.

Great Oyster Bay Pt. VIII

niggyl :) has added a photo to the pool:

Great Oyster Bay Pt. VIII

Another frame from what may have been the most productive afternoon I've ever had with a camera.

A decayed cold front passing over Great Oyster Bay with Freycinet Peninsula and Schouten Island on the horizon. Tasmania.

Nikon Z6, Nikkor Z 24-200mm f/4-6.3. 1/640th sec at f/18, ISO 400 ~ 24mm

Wel.nl

Minder lezen, Meer weten.

FT: president Lagarde waarschijnlijk vroegtijdig weg bij ECB

LONDEN (ANP) - President Christine Lagarde van de Europese Centrale Bank (ECB) gaat haar termijn, die in oktober volgend jaar afloopt, waarschijnlijk niet afmaken. Dat meldt de Britse zakenkrant Financial Times op basis van bronnen bij de centrale bank in Frankfurt. De Française is sinds november 2019 president van de ECB.

Volgens Financial Times zou Lagarde met haar vroegtijdige vertrek de Franse president Emmanuel Macron en de Duitse bondskanselier Friedrich Merz de mogelijkheid willen geven om een nieuwe voorzitter te benoemen bij de ECB. Frankrijk houdt in april volgend jaar presidentsverkiezingen. Macron kan dan niet herkozen worden, omdat hij al twee termijnen op rij president is geweest.

Het is niet duidelijk wanneer de 70-jarige Lagarde dan precies zou vertrekken bij de ECB.


Burgemeesters bezorgd over verruwing in samenleving en wereld

DEN HAAG (ANP) - Burgemeesters maken zich grote zorgen over verharding en verruwing. Die zien ze in de politiek, in de samenleving en in de wereld. In de aanloop naar de gemeenteraadsverkiezingen, over precies een maand, waarschuwen ze daarvoor in hun toespraken.

Het ANP heeft ongeveer honderd recente speeches van burgemeesters geanalyseerd, onder meer met gebruik van kunstmatige intelligentie. De redes werden gehouden bij nieuwjaarsrecepties, herdenkingen en andere gelegenheden.

De burgemeesters klagen onder meer over intimidatie van bestuurders. Bedreigingen "leiden er zelfs toe dat sommige raadsleden zich niet meer verkiesbaar stellen", concludeert burgemeester Maarten Haverkamp van De Bilt. Collega Cor Lamers (Nissewaard) ziet ook dat "tegenstellingen snel worden uitvergroot, de omgangsvormen stroef zijn en het publieke debat verhardt". De burgemeesters van Zaltbommel en De Fryske Marren zeggen dat fatsoensnormen worden vergeten.

Geweld

Die houding keert zich ook tegen andere mensen. "Ook vandaag zien wij hoe mensen worden gereduceerd tot groepen, tot vijanden, tot minderwaardigen. En ook vandaag zien wij hoe woorden kunnen verharden en uitmonden in geweld", zei burgemeester Karen Heerschop van Houten bij de jaarlijkse herdenking van de Holocaust. Die herhaalt zich niet, stelde ze, maar "we zien hoe ontmenselijkende taal steeds normaler wordt. Migranten, religieuze minderheden, lhbtqi+ personen of politieke tegenstanders worden niet langer beschreven als mensen, maar als 'vijanden van binnenuit'. In nazi-Duitsland begon het precies zo."

De burgemeesters willen dat landelijke politici het goede voorbeeld geven. "Wat mij betreft hebben wij, zeker in deze tijd, geen politici meer nodig die zich gedragen alsof ze constant in de puberteit zijn: impulsief, egocentrisch, polariserend, altijd wijzend naar een ander, gebruikmakend van desinformatie, enkel gericht op aandacht en kortetermijnsucces", zegt burgemeester Nicole Ramaekers (Gulpen-Wittem).

De kritiek van de burgemeesters richt zich ook op de Amerikaanse president Donald Trump en de mensen in zijn entourage. "Er zijn wereldleiders bij wie feiten onderhandelbaar zijn. Er zijn techondernemers voor wie genoeg nooit genoeg lijkt. We worden gestuurd en tegen elkaar opgezet door algoritmen van sociale media", zegt de burgemeester van Hendrik-Ido-Ambacht. Hij stoort zich aan "het gebrek aan verantwoordelijkheidsbesef" van "techbro's" als Elon Musk en concludeert: "er bestaat ook zoiets als te rijk." De burgemeester van Renswoude vindt dat leiders van de grote machten de weg kwijt zijn. "Ze gedragen zich als een stel bokito's met maar 1 doel en dat is hun eigen macht en positie te vergroten, en dat gaat ten koste van mensenlevens."


The Daily WTF

Curious Perversions in Information Technology

CodeSOD: Contains Some Bad Choices

While I'm not hugely fond of ORMs (I'd argue that relations and objects don't map neatly to each other, and any ORM is going to be a very leaky abstraction for all but trivial cases), that's not because I love writing SQL. I'm a big fan of query-builder tools; describe your query programatically, and have an API that generates the required SQL as a result. This cuts down on developer error, and also hopefully handles all the weird little dialects that every database has.

For example, did you know Postgres has an @> operator? It's a contains operation, which returns true if an array, range, or JSON dictionary contains your search term. Basically, an advanced "in" operation.

Gretchen's team is using the Knex library, which doesn't have a built-in method for constructing those kinds of queries. But that's fine, because it does offer a whereRaw method, which allows you to supply raw SQL. The nice thing about this is that you can still parameterize your query, and Knex will handle all the fun things, like transforming an array into a string.

Or you could just not use that, and write the code yourself:

exports.buildArrayString = jsArray => {
  // postgres has some different array syntax
  // [1,2] => '{1,2}'
  let arrayString = '{';
  for(let i = 0; i < jsArray.length; i++) {
    arrayString += jsArray[i];
    if(i + 1 < jsArray.length) {
      arrayString += ','
    }
  }
  arrayString += '}';
  return arrayString;
}

There's the string munging we know and love. This constructs a Postgres array, which is wrapped in curly braces.

Also, little pro-tip for generating comma separated code, and this is just a real tiny optimization: before the loop append item zero, start the loop with item 1, and then you can unconditionally prepend a comma, removing any conditional logic from your loop. That's not a WTF, but I've seen so much otherwise good code make that mistake I figured I'd bring it up.

exports.buildArrayContainsQuery = (key, values) => {
  // TODO: do we need to do input safety checks here?
  // console.log("buildArrayContainsQuery");

  // build the postgres 'contains' query to compare arrays
  // ex: to fetch files by the list of tags

  //WORKS:
  //select * from files where _tags @> '{2}';
  //query.whereRaw('_tags @> ?', '{2}')

  let returnQueryParams = [];
  returnQueryParams.push(`${key} @> ?`);
  returnQueryParams.push(exports.buildArrayString(values));
  // console.log(returnQueryParams);
  return returnQueryParams;
}

And here's where it's used. "do we need input safety checks here?" is never a comment I like to see as a TODO. That said, because we are still using Knex's parameter handling, I'd hope it handles escaping correctly so that the answer to this question is "no". If the answer is "yes" for some reason, I'd stop using this library!

That said, all of this code becomes superfluous, especially when you read the comments in this function. I could just directly run query.whereRaw('_tags @> ?', myArray); I don't need to munge the string myself. I don't need to write a function which returns an array of parameters that I have to split back up to pass to the query I want to call.

Here's the worst part of all of this: these functions exist in a file called sqlUtils.js, which is just a pile of badly re-invented wheels, and the only thing they have in common is that they're vaguely related to database operations.

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.