woensdag 30 september 2020

Leaflet prunecluster permanent tooltip problem and solution

Prunecluster is a nice plugin for Leaflet for realtime clustering.

However, if you use permanent tooltips on markers, the label will not disappear when you zoom.
You can fix the problem by adding a codeline, see below:

    Unspiderfy: function () {
        var _this = this;
        for (var i = 0, l = this._currentMarkers.length; i < l; ++i) {
            this._currentMarkers[i].unbindTooltip(); // This line is added to remove permanent tooltips.
            this._currentMarkers[i].setLatLng(this._currentCenter).setOpacity(0);
        }

woensdag 23 september 2020

npm: self signed certificate in certificate chain

Deze melding krijg je als de certificaten niet gecontroleerd kunnen worden op je nexus server. Vervelend, maar op te lossen als je doet:
npm config set strict-ssl false --global

maandag 10 augustus 2020

Youtube download

youtube-dl.exe -f243+251 https://www.youtube.com/watch?v=xxxxxxxx

Om alle formaten te zien: youtube-dl.exe -F https://www.youtube.com/watch?v=xxxxxxx

Update 2021.10.24: Tegenwoordig is yt-dlp de goedwerkende opvolger van youtube-dl


vrijdag 19 juni 2020

Ajax met de gediscrimineerde jQuery

jQuery is een hele kleine handige library, die ontwikkelaars discrimineren omdat er in het verleden zoveel bagger mee gemaakt is. Aan dat ongenuanceerde bashen doe ik niet mee.

Hoe kun je in jQuery een ajax call doen?

Tegenwoordig maakt jQuery niet meer gebruik van z'n eigen Promise objecten, maar van de standaard objecten.

function getObjects(accessToken) {
 return $.ajax({
  headers: {
   'Authorization': 'bearer ' + accessToken
  },
  type: "POST",
  cache: false,
  contentType: 'application/json; charset=UTF-8',
  url: 'https://server/api/Object/Query?apikey=meuk&version=1.0',
  data: JSON.stringify({
   "filter": [
    {
     "Criteria": "value"
    }
   ],
   "othercriteria": null
  }),
  dataType: "json"
 });
}

Je kunt dan doen:

async function loginREST(username, password) {
 let factory = new TokenFactory(username, password);
 factory.getAccessToken().then(async (accessToken) => {
  let objects = await getObjects(accessToken);
  console.log(devices);
 }).catch(function (err) {
  throw err;
 });
}

Ter inspiratie voor een crossdomain ajax call:

$.ajax({
 crossDomain: true,
 xhrFields: {
  withCredentials: true
 },
 url: url + '?type=html',
 timeout: 30000,
 headers: { 'X-Element-Id': xElementId }
}).then(function (response) {
 // code
}).fail(function () {
 // code
});

donderdag 7 mei 2020

newtonsoft C# JSON tips

Newtonsoft JSON.NET heeft een aantal handigheidjes:

Een JSON string omzetten naar een dynamic:
dynamic parsedJson = JsonConvert.DeserializeObject(jsonString, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });

Een JSON string omzetten naar een dictionary:
Dictionary<string, string> dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonString, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });

Een object naar een mooie JSON string omzetten:
string prettyPrinted = JsonConvert.SerializeObject(parsedJson, Formatting.Indented);

Een JSON string omzetten naar een JObject:
JObject body = JsonConvert.DeserializeObject<JObject>(jsonString, new JsonSerializerSettings() { DateParseHandling = DateParseHandling.None });

Vanuit een object naar een JObject gaan:
JObject jObj = JObject.FromObject(otherObj);

Een JToken casten naar een JArray:
JArray theArray = data.Value<JArray>();

Vanuit een JObject naar een ander object:
EigenClass obj = (EigenClass)jobj.ToObject(typeof(EigenClass));

dinsdag 11 februari 2020

Build2 engine released

Er zijn een aantal projecten die interessant zijn voor een retrogamer zoals ik. Bijvoorbeeld de GameBoy emulator in C++ gedaan met SDL2. Alles over de GameBoy internals.
Er zijn wel meer ontwikkelaars die een emulator schrijven leuk vinden, zoals javidx9 met z'n nes emulator. Het is redelijk gestoord om zoveel prive-tijd in programmeren te stoppen.

Maar echt wordt het pas met een pure CPU 3D engine, zoals de Build2 engine van Ken Silverman. De opvolger van de Build-engine die destijds voor Duke Nukem werd gebruikt. Ken heeft in 2007-2011 een versie 2 van de engine gemaakt en redelijk recent de sourcecode vrijgegeven. Ik weet nog dat ik vorig jaar keek en baalde dat de sourcecode niet beschikbaar was. Nu dus wel.

Raycasting is ook een leuke technologie:
https://github.com/Owlzy/OwlRaycastEngine
https://github.com/AWilliams17/RayMage
https://lodev.org/cgtutor/raycasting2.html
https://github.com/JOBBIN9422/raycaster