Een tooltje die een zekere website voor huizen checkt op basis van een aantal filters en eventuele nieuwe huizen e-mailt naar mij. Aangezien ik liever lui dan moe ben.
Kun je die delen?Marcel317 schreef op zondag 21 juli 2019 @ 00:13:
Een tooltje die een zekere website voor huizen checkt op basis van een aantal filters en eventuele nieuwe huizen e-mailt naar mij. Aangezien ik liever lui dan moe ben.
Kan hij meerdere zoekopdrachten uitvoeren? Bij een zekere site kun je er slechts één opslaan
De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!
Ik ben de laatste dingetjes aan het afronden, als ik 'm af heb zal ik 'm zeker delen!pietje63 schreef op zondag 21 juli 2019 @ 10:33:
[...]
Kun je die delen?
Kan hij meerdere zoekopdrachten uitvoeren? Bij een zekere site kun je er slechts één opslaan
Nee joh, in een Access databaseboe2 schreef op dinsdag 14 mei 2019 @ 14:09:
Dat is niet eens zo'n slecht idee. Ik ga hem in mijn vrije tijd ook nog uitbreiden om alle Access objecten te doorzoeken, betere wildcard support toevoegen en content bewaren in een sqlite DB. Zal de boel meteen ook op github zetten.
Maar eigenlijk moet die organisatie z'n kont even uit het 2e millennium trekken en Access dumpen natuurlijk.
SqlLite is wat mij betreft het nieuwe Access overigens. Leuk in het begin, maar performance stort snel in als je er iets serieus mee wil doen.
[ Voor 25% gewijzigd door sig69 op 21-07-2019 23:43 ]
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Lelydingen
https://lelydingen.marcjansen.net/
Een website waarop meerdere open-datasets, specifiek voor de mooiste hoofdstad van Nederland, getoond kunnen worden op een kaart. Altijd al willen weten welke kunstwerken in Lelystad staan? Of waar je, na een lange wandeltocht langs de Bataviahaven, je billetjes kunt laten rusten op een bankje? Of net langs de McDonalds geweest en opzoek naar een prullenbak om je afval in te dumpen? Kijk op Lelydingen en je weet het allemaal!
https://lelydingen.marcjansen.net/
Een website waarop meerdere open-datasets, specifiek voor de mooiste hoofdstad van Nederland, getoond kunnen worden op een kaart. Altijd al willen weten welke kunstwerken in Lelystad staan? Of waar je, na een lange wandeltocht langs de Bataviahaven, je billetjes kunt laten rusten op een bankje? Of net langs de McDonalds geweest en opzoek naar een prullenbak om je afval in te dumpen? Kijk op Lelydingen en je weet het allemaal!
Bedankt voor het verrijken van mijn kennis over Lelystad! - Anke de Boer (Support Team Civity)
- Simpel HTML/Javascript pagina met een leaflet kaart
- Datasets worden direct vanaf via de REST Api van het opendata platform van de gemeente gehaald
- Hosting en SSL certificaat gaat via Google Firebase; op mijn eigen website staat niets
RitRegister
Omdat ik mijn kilometerregistratie moet bijhouden voor mijn werkgever en ik van collega's hoorde dat dat niet altijd even handig/fijn is, heb ik een webtool gemaakt die dat voor mij oplost.
Men stoeide onder andere met Excel-lijsten of andere zaken waarvoor ze hun laptop nodig hadden. Anderen gebruikten een app op basis van GPS, een betaalde app, een app die niet anoniem gebruikt kan worden of een app waarbij het alsnog niet praktisch werkte om elke keer registreren.
Toen ik voor mezelf een weboplossing wilde maken hiervoor, dacht ik er aan om dit publiek beschikbaar te gaan maken met de volgende vijf punten in het achterhoofd:
- Eenvoud
- Privacyvriendelijk
- Gratis
- Dataportabiliteit
- Zelf kunnen verwijderen van al jouw data
De tool kan volledig anoniem gebruikt worden als men dat wil.
Data zal nooit verkocht of weggegeven worden. Data zal nooit anders gebruikt worden dan waarvoor de tool het nodig heeft.
Verdienmodel? Nog geen. Wellicht later iets met wat functionaliteiten voor bedrijfjes / bedrijven.
https://RitRegister.nl
Omdat ik mijn kilometerregistratie moet bijhouden voor mijn werkgever en ik van collega's hoorde dat dat niet altijd even handig/fijn is, heb ik een webtool gemaakt die dat voor mij oplost.
Men stoeide onder andere met Excel-lijsten of andere zaken waarvoor ze hun laptop nodig hadden. Anderen gebruikten een app op basis van GPS, een betaalde app, een app die niet anoniem gebruikt kan worden of een app waarbij het alsnog niet praktisch werkte om elke keer registreren.
Toen ik voor mezelf een weboplossing wilde maken hiervoor, dacht ik er aan om dit publiek beschikbaar te gaan maken met de volgende vijf punten in het achterhoofd:
- Eenvoud
- Privacyvriendelijk
- Gratis
- Dataportabiliteit
- Zelf kunnen verwijderen van al jouw data
De tool kan volledig anoniem gebruikt worden als men dat wil.
Data zal nooit verkocht of weggegeven worden. Data zal nooit anders gebruikt worden dan waarvoor de tool het nodig heeft.
Verdienmodel? Nog geen. Wellicht later iets met wat functionaliteiten voor bedrijfjes / bedrijven.
https://RitRegister.nl
Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)
Dit is best cool eigenlijk. Jammer dat mijn woonplaats geen openbare dataset heeft.Nilltris schreef op dinsdag 23 juli 2019 @ 14:46:
Lelydingen
https://lelydingen.marcjansen.net/
Een website waarop meerdere open-datasets, specifiek voor de mooiste hoofdstad van Nederland, getoond kunnen worden op een kaart. Altijd al willen weten welke kunstwerken in Lelystad staan? Of waar je, na een lange wandeltocht langs de Bataviahaven, je billetjes kunt laten rusten op een bankje? Of net langs de McDonalds geweest en opzoek naar een prullenbak om je afval in te dumpen? Kijk op Lelydingen en je weet het allemaal!
[...]
- Simpel HTML/Javascript pagina met een leaflet kaart
- Datasets worden direct vanaf via de REST Api van het opendata platform van de gemeente gehaald
- Hosting en SSL certificaat gaat via Google Firebase; op mijn eigen website staat niets
-
[ Voor 99% gewijzigd door VeQVQUCjsxagUCH op 01-06-2024 10:56 ]
VeQVQUCjsxagUCH schreef op dinsdag 13 augustus 2019 @ 21:13:
En hier is een lijst met dingen waar ik me aan irriteerde in andere OTP-apps:
- Ontbrekende zoekmogelijkheden (terwijl ik >30 tokens heb)

Eén van m'n grootste ergernissen aan LastPass Authenticator
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
-
[ Voor 99% gewijzigd door VeQVQUCjsxagUCH op 01-06-2024 10:56 ]
Zijn (nutteloze) over-engineered dingen hier ook toegestaan? Ik heb gisteravond een tooltje in elkaar geflanst die het gemiddelde berekent van mijn cijfers op Educator, omdat dat niet ingebouwd in de pagina zit. Kon ook even in Excel, maar ik moet toch ergens mijn expertise als programmeur inzetten. Dat gaat namelijk nogal lastig op de hedendaagse zakelijke markt.
Bij deze: https://github.com/Reintjuu/EducatorGrades
Bij deze: https://github.com/Reintjuu/EducatorGrades
Wat mij betreft wel, graag zelfsProxi schreef op zaterdag 31 augustus 2019 @ 20:38:
Zijn (nutteloze) over-engineered dingen hier ook toegestaan?
Wat je screenshot betreft, moet je die niet wat blurren zodat de session en saml info niet zichtbaar is?
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Ik kan het wel waarderen, al heeft het voor mij geen toegevoegde waarde.Proxi schreef op zaterdag 31 augustus 2019 @ 20:38:
Zijn (nutteloze) over-engineered dingen hier ook toegestaan? Ik heb gisteravond een tooltje in elkaar geflanst die het gemiddelde berekent van mijn cijfers op Educator, omdat dat niet ingebouwd in de pagina zit. Kon ook even in Excel, maar ik moet toch ergens mijn expertise als programmeur inzetten. Dat gaat namelijk nogal lastig op de hedendaagse zakelijke markt.
Bij deze: https://github.com/Reintjuu/EducatorGrades
Het zou overigens veel gaver zijn geweest als je vanuit de applicatie zelve inlogt op de server om de punten op te halen en een berekening te doen.
Het kopiëren vanuit de browser voelt een beetje omslachtig.
If money talks then I'm a mime
If time is money then I'm out of time
Nah, die sessie is allang niet meer geldig. Die is van gisteravond.Freeaqingme schreef op zaterdag 31 augustus 2019 @ 21:13:
Wat je screenshot betreft, moet je die niet wat blurren zodat de session en saml info niet zichtbaar is?
Haha ja, dat is het ook. In m'n eerste opzet gebruikte ik zelfs https://curl.olsh.me/ om het gekopiëerde cURL command te converteren naar C#. Het was natuurlijk het mooist geweest als ik gewoon een greasemonkey scriptje had geschreven die het zou uitrekenen en weergeven op de pagina zelf, zonder enige gebruikersinteractie (op het installeren van het script na dan).Matis schreef op zaterdag 31 augustus 2019 @ 21:14:
Het zou overigens veel gaver zijn geweest als je vanuit de applicatie zelve inlogt op de server om de punten op te halen en een berekening te doen.
Het kopiëren vanuit de browser voelt een beetje omslachtig.
Ik kwam er net achter dat de cum laude-berekening een gewogen gemiddelde gebruikt op basis van de studiepunten. Moet ik er nog maar even in hacken dus
https://certlog.sysrant.com/
Een websocket met een stream van domeinnamen die onder het certificaat vallen die "nu" worden uitgegeven. M.a.w. als je nu een letsencrypt certificaat aanvraagt zul je hem vrij snel door die websocket zien komen.
Het houdt certificaten van meerdere certificate authorities bij, o.a. google, comodo en letsencrypt.
De website is meer even als "proof of concept", eigenlijk idem de websocket zelf. Zo'n stream/websocket is niet mijn (eind)doel.
De architectuur zit ongeveer zo in elkaar:
- Ongeveer 30 "workers" gemaakt in Go die certificate logs doorspitten en dit processen naar een valid x509 cert
- Die workers zetten dit naar kafka over meerdere partities met 2 replications
- Dan draaien er 9 consumers die data weer uit Kafka halen en dit in Elasticsearch plaatsen
- Er draait ook 1 consumer, gemaakt in Go, die van alle data de domainname (max 1, een cert kan er meerdere hebben) eruit pakt en op een websocket zet.
Alles is opgezet op k8s met 3 kafka brokers, 3 elasticsearch nodes en dus de verschillende "services" voor produce/consume data.
Ik zou ook de historische data kunnen verwerken maar dan loop ik echt tegen een resource probleem aan wat mij persoonlijk veel te veel geld gaat kosten. Op een gegeven moment had ik meer dan 200Mb/s aan traffic en ongeveer 100Mb/s aan storage benodigd. (ja, dus 1 gig per 10 seconden.. en dat is duur
)
Uiteindelijk ga ik de data gebruiken voor security doeleinden, hopelijk ook iets wat ik vrij kan geven aan "iedereen". Dit soort initiatieven zijn er al deels maar;
- Dan heb ik het over ISP's die het in hun vrije tijd doen, en niet beschikbaar maken
- Security partijen als fox-it, die het ook intern houden
- cali dog die wel een stream public heeft, echter is die super instabiel en lijkt ook niet alles aan data te hebben
- geen historische data
- geen search
- superrrr duurrrrr (100k per jaar bijv voor insights).
Een websocket met een stream van domeinnamen die onder het certificaat vallen die "nu" worden uitgegeven. M.a.w. als je nu een letsencrypt certificaat aanvraagt zul je hem vrij snel door die websocket zien komen.
Het houdt certificaten van meerdere certificate authorities bij, o.a. google, comodo en letsencrypt.
De website is meer even als "proof of concept", eigenlijk idem de websocket zelf. Zo'n stream/websocket is niet mijn (eind)doel.
De architectuur zit ongeveer zo in elkaar:
- Ongeveer 30 "workers" gemaakt in Go die certificate logs doorspitten en dit processen naar een valid x509 cert
- Die workers zetten dit naar kafka over meerdere partities met 2 replications
- Dan draaien er 9 consumers die data weer uit Kafka halen en dit in Elasticsearch plaatsen
- Er draait ook 1 consumer, gemaakt in Go, die van alle data de domainname (max 1, een cert kan er meerdere hebben) eruit pakt en op een websocket zet.
Alles is opgezet op k8s met 3 kafka brokers, 3 elasticsearch nodes en dus de verschillende "services" voor produce/consume data.
Ik zou ook de historische data kunnen verwerken maar dan loop ik echt tegen een resource probleem aan wat mij persoonlijk veel te veel geld gaat kosten. Op een gegeven moment had ik meer dan 200Mb/s aan traffic en ongeveer 100Mb/s aan storage benodigd. (ja, dus 1 gig per 10 seconden.. en dat is duur
Uiteindelijk ga ik de data gebruiken voor security doeleinden, hopelijk ook iets wat ik vrij kan geven aan "iedereen". Dit soort initiatieven zijn er al deels maar;
- Dan heb ik het over ISP's die het in hun vrije tijd doen, en niet beschikbaar maken
- Security partijen als fox-it, die het ook intern houden
- cali dog die wel een stream public heeft, echter is die super instabiel en lijkt ook niet alles aan data te hebben
- geen historische data
- geen search
- superrrr duurrrrr (100k per jaar bijv voor insights).
Dat is een flink cluster, waar host je dit en wat zijn de kosten hiervan? Ik ben toevallig zelf ook aan het onderzoeken of ik DNS en certificaatinfo goed doorzoekbaar kan maken. Ik ben benieuwd wat voor zoekfunctionaliteit je er aan toe wilt voegen.Douweegbertje schreef op zondag 1 september 2019 @ 20:46:
https://certlog.sysrant.com/
Een websocket met een stream van domeinnamen die onder het certificaat vallen die "nu" worden uitgegeven. M.a.w. als je nu een letsencrypt certificaat aanvraagt zul je hem vrij snel door die websocket zien komen.
Het houdt certificaten van meerdere certificate authorities bij, o.a. google, comodo en letsencrypt.
De website is meer even als "proof of concept", eigenlijk idem de websocket zelf. Zo'n stream/websocket is niet mijn (eind)doel.
De architectuur zit ongeveer zo in elkaar:
- Ongeveer 30 "workers" gemaakt in Go die certificate logs doorspitten en dit processen naar een valid x509 cert
- Die workers zetten dit naar kafka over meerdere partities met 2 replications
- Dan draaien er 9 consumers die data weer uit Kafka halen en dit in Elasticsearch plaatsen
- Er draait ook 1 consumer, gemaakt in Go, die van alle data de domainname (max 1, een cert kan er meerdere hebben) eruit pakt en op een websocket zet.
Alles is opgezet op k8s met 3 kafka brokers, 3 elasticsearch nodes en dus de verschillende "services" voor produce/consume data.
Ik zou ook de historische data kunnen verwerken maar dan loop ik echt tegen een resource probleem aan wat mij persoonlijk veel te veel geld gaat kosten. Op een gegeven moment had ik meer dan 200Mb/s aan traffic en ongeveer 100Mb/s aan storage benodigd. (ja, dus 1 gig per 10 seconden.. en dat is duur)
Uiteindelijk ga ik de data gebruiken voor security doeleinden, hopelijk ook iets wat ik vrij kan geven aan "iedereen". Dit soort initiatieven zijn er al deels maar;
- Dan heb ik het over ISP's die het in hun vrije tijd doen, en niet beschikbaar maken
- Security partijen als fox-it, die het ook intern houden
- cali dog die wel een stream public heeft, echter is die super instabiel en lijkt ook niet alles aan data te hebben
- geen historische data
- geen search
- superrrr duurrrrr (100k per jaar bijv voor insights).
Ben je al bekend met het initiatief https://crt.sh/? Hier kun je al zoeken naar certificaten in een erg grote database.
Ik wil ten eerste "consumers" kunnen aansluiten op de stream die specifieke dingen kunnen doen/zoeken.D0bly schreef op maandag 2 september 2019 @ 12:13:
[...]
Dat is een flink cluster, waar host je dit en wat zijn de kosten hiervan? Ik ben toevallig zelf ook aan het onderzoeken of ik DNS en certificaatinfo goed doorzoekbaar kan maken. Ik ben benieuwd wat voor zoekfunctionaliteit je er aan toe wilt voegen.
Ben je al bekend met het initiatief https://crt.sh/? Hier kun je al zoeken naar certificaten in een erg grote database.
Daarnaast m.b.t. zoeken - Ik ken crt.sh maar je mist natuurlijk wel wat dingen. Wildcards, like, etc. etc.
Als je er uiteindelijk echt iets nuttigs mee wilt doen dan moet je ook dingen gaan automatiseren. Met ~100-1000 certs per seconden zijn manuele acties vrijwel een no-go. (er zijn wel wildcards, maar probeer even daar snelle en goede resultaten uit te halen
Mijn initiele PoC was gebouwd op Hetnzer, nu heb ik delen overgezet naar GKE.
[ Voor 4% gewijzigd door Douweegbertje op 02-09-2019 12:30 ]
Mijn tweede PHP script ooit wordt de derde post over AVM FRITZ!Boxen in dit topic.
Een PHP script om het System Log van m'n ADSL modem in Synology Log Center in te lezen.
https://github.com/biocod...x-SynologyLogCenterDaemon
OT: @ThinkPad je Tweakblog post over Grafana is van de server afgevallen?
Een PHP script om het System Log van m'n ADSL modem in Synology Log Center in te lezen.
https://github.com/biocod...x-SynologyLogCenterDaemon
OT: @ThinkPad je Tweakblog post over Grafana is van de server afgevallen?
Heb gisterenavond een scraper geschreven voor de afleveringen op de nickelodeon websites in Go.
Ondersteunt scannen met Plex achteraf. Enjoy :-)
https://github.com/hazcod/nicky
Ondersteunt scannen met Plex achteraf. Enjoy :-)
https://github.com/hazcod/nicky
~ beware of misinformation.
Ter info: https://certstream.calidog.io/Douweegbertje schreef op zondag 1 september 2019 @ 20:46:
https://certlog.sysrant.com/
Een websocket met een stream van domeinnamen die onder het certificaat vallen die "nu" worden uitgegeven. M.a.w. als je nu een letsencrypt certificaat aanvraagt zul je hem vrij snel door die websocket zien komen.
Het houdt certificaten van meerdere certificate authorities bij, o.a. google, comodo en letsencrypt.
~ beware of misinformation.
Mijn browsers vinden deze site niet lief... Het certificaat is niet in orde.Douweegbertje schreef op zondag 1 september 2019 @ 20:46:
https://certlog.sysrant.com/
Een websocket met een stream van domeinnamen die onder het certificaat vallen die "nu" worden uitgegeven. M.a.w. als je nu een letsencrypt certificaat aanvraagt zul je hem vrij snel door die websocket zien komen.
Het houdt certificaten van meerdere certificate authorities bij, o.a. google, comodo en letsencrypt.
...
Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site
- cali dog die wel een stream public heeft, echter is die super instabiel en lijkt ook niet alles aan data te hebben
Klopt, ik heb hem offline gehaaldAcid_Burn schreef op donderdag 3 oktober 2019 @ 09:28:
[...]
Mijn browsers vinden deze site niet lief... Het certificaat is niet in orde.
Het was een proof-of-concept die ook wel geslaagd was. Grote kans dat hij er t.z.t weer komt maar met een iets wat andere insteek. Voornaamste issue was even $$$, Op een gegeven moment ging er enorm veel data doorheen en had ik een hoge retentie.
Wellicht met een sponsor e.d. dat het weer in die vorm kan draaien.
Ik stoorde me eraan dat ik vaak de Element Inspector moest openen om een afbeelding op te slaan in plaats van gewoon rechtermuisknop kon doen en 'Opslaan als' of kopiëren/openen in nieuw tab.


Normaal gesproken werkt het in je browser alleen bij IMG-tags zonder dat er elementen overheen zitten.
Dus heb ik een Chrome Extensie geschreven waarbij dat wel werkt op alle afbeeldingen die ik heb getest. Img tags, background images, canvas elementen, video's met een poster attribute, veel SVG's(dat is nog vrij tricky en werkt niet altijd) etc. Het werkt ook als er andere elementen overheen liggen.
Werkt op alle sites die ik heb getest, dus inclusief Instagram, Flickr, Pinterest en zelfs Google Maps/Street View. Mochten er sites zijn waarbij het niet werkt, laat het weten.
Right Click On Any Image
Er komt binnenkort waarschijnlijk ook een Firefox versie van uit, maar daar zijn nog kleine issues mee (clipboard deel werkt nog niet).


Normaal gesproken werkt het in je browser alleen bij IMG-tags zonder dat er elementen overheen zitten.
Dus heb ik een Chrome Extensie geschreven waarbij dat wel werkt op alle afbeeldingen die ik heb getest. Img tags, background images, canvas elementen, video's met een poster attribute, veel SVG's(dat is nog vrij tricky en werkt niet altijd) etc. Het werkt ook als er andere elementen overheen liggen.
Werkt op alle sites die ik heb getest, dus inclusief Instagram, Flickr, Pinterest en zelfs Google Maps/Street View. Mochten er sites zijn waarbij het niet werkt, laat het weten.
Right Click On Any Image
Er komt binnenkort waarschijnlijk ook een Firefox versie van uit, maar daar zijn nog kleine issues mee (clipboard deel werkt nog niet).
[ Voor 10% gewijzigd door BarôZZa op 27-11-2019 22:25 ]
Zodra die Firefox versie er is, ga ik m zeker installeren!BarôZZa schreef op woensdag 27 november 2019 @ 22:20:
Ik stoorde me eraan dat ik vaak de Element Inspector moest openen om een afbeelding op te slaan in plaats van gewoon rechtermuisknop kon doen en 'Opslaan als' of kopiëren/openen in nieuw tab.
[Afbeelding]
[Afbeelding]
Normaal gesproken werkt het in je browser alleen bij IMG-tags zonder dat er elementen overheen zitten.
Dus heb ik een Chrome Extensie geschreven waarbij dat wel werkt op alle afbeeldingen die ik heb getest. Img tags, background images, canvas elementen, video's met een poster attribute, veel SVG's(dat is nog vrij tricky en werkt niet altijd) etc. Het werkt ook als er andere elementen overheen liggen.
Werkt op alle sites die ik heb getest, dus inclusief Instagram, Flickr, Pinterest en zelfs Google Maps/Street View. Mochten er sites zijn waarbij het niet werkt, laat het weten.
Right Click On Any Image
Er komt binnenkort waarschijnlijk ook een Firefox versie van uit, maar daar zijn nog kleine issues mee (clipboard deel werkt nog niet).
Ik trek ze nu vaak uit de network tab, maar das allemaal wel omslachtig
Toffe extensie, nuttig! De overload aan console-meldingen is alleen wel irritant, zou fijn zijn als je dat zou willen aanpassenBarôZZa schreef op woensdag 27 november 2019 @ 22:20:
[...lang verhaal...]
Full-stack webdeveloper in Groningen
Ai, dacht dat ik dat er nog uitgehaald had. Zal hem updaten idd. Thanks voor de meldingSpinal schreef op donderdag 28 november 2019 @ 09:47:
[...]
Toffe extensie, nuttig! De overload aan console-meldingen is alleen wel irritant, zou fijn zijn als je dat zou willen aanpassen
Erg herkenbaar probleem, en nice oplossing.
Zelf heb ik ook weer een irritatie puntje weggewerkt met een extension.
Namelijk de inlog-popup op Instagram als je stukje naar beneden scrolt...

Instagram endless scroll
Voor Chrome
Voor Firefox
Nice, komt er een Firefox versie?
BarôZZa schreef op woensdag 27 november 2019 @ 22:20:
Ik stoorde me eraan dat ik vaak de Element Inspector moest openen om een afbeelding op te slaan in plaats van gewoon rechtermuisknop kon doen en 'Opslaan als' of kopiëren/openen in nieuw tab.
[Afbeelding]
[Afbeelding]
Normaal gesproken werkt het in je browser alleen bij IMG-tags zonder dat er elementen overheen zitten.
Dus heb ik een Chrome Extensie geschreven waarbij dat wel werkt op alle afbeeldingen die ik heb getest. Img tags, background images, canvas elementen, video's met een poster attribute, veel SVG's(dat is nog vrij tricky en werkt niet altijd) etc. Het werkt ook als er andere elementen overheen liggen.
Werkt op alle sites die ik heb getest, dus inclusief Instagram, Flickr, Pinterest en zelfs Google Maps/Street View. Mochten er sites zijn waarbij het niet werkt, laat het weten.
Right Click On Any Image
Er komt binnenkort waarschijnlijk ook een Firefox versie van uit, maar daar zijn nog kleine issues mee (clipboard deel werkt nog niet).
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Het antwoord op jouw vraag staat toch letterlijk in de laatste zin die je quoteFiresphere schreef op vrijdag 29 november 2019 @ 22:58:
Nice, komt er een Firefox versie?
[ Voor 5% gewijzigd door Matis op 30-11-2019 06:20 ]
If money talks then I'm a mime
If time is money then I'm out of time
Top idee! Net even geprobeerd maar heb nog iets gevonden. Soms wordt aangegeven dat er 2 afbeeldingen worden gevonden, terwijl je maar 1 kunt opslaan (een SVG). Alleen de optie om beide in aparte tabs te tonen laat wel beide zien (de SVG is leeg). Misschien een trucje van de pagina om een lege SVG over een afbeelding te tonen? Geen idee.BarôZZa schreef op woensdag 27 november 2019 @ 22:20:
Ik stoorde me eraan dat ik vaak de Element Inspector moest openen om een afbeelding op te slaan in plaats van gewoon rechtermuisknop kon doen en 'Opslaan als' of kopiëren/openen in nieuw tab.
[Afbeelding]
[Afbeelding]
Normaal gesproken werkt het in je browser alleen bij IMG-tags zonder dat er elementen overheen zitten.
Dus heb ik een Chrome Extensie geschreven waarbij dat wel werkt op alle afbeeldingen die ik heb getest. Img tags, background images, canvas elementen, video's met een poster attribute, veel SVG's(dat is nog vrij tricky en werkt niet altijd) etc. Het werkt ook als er andere elementen overheen liggen.
Werkt op alle sites die ik heb getest, dus inclusief Instagram, Flickr, Pinterest en zelfs Google Maps/Street View. Mochten er sites zijn waarbij het niet werkt, laat het weten.
Right Click On Any Image
Er komt binnenkort waarschijnlijk ook een Firefox versie van uit, maar daar zijn nog kleine issues mee (clipboard deel werkt nog niet).
Handige extensie, dank
My own opinion is enough for me, and I claim the right to have it defended against any consensus, any majority, anywhere, any place, any time. And anyone who disagrees with this can pick a number, get in line, and kiss my ass. - Christopher Hitchens
Yes, maar kwam erachter dat het bij Firefox nog wat complexer is. Normaal kan je een extensie zo overgooien van Chrome, maar nu moet de hele message passing op de schop en zitten er verschillen tussen welke API's beschikbaar zijn in de content/background scripts. Ook de clipboard functionaliteit is beperkter.
Ik wil ook één codebase hebben voor beide extensies, dus moet ben je in twee browsers aan het debuggen omdat een wijziging in de ene het voor de ander kan breken. En beide tegelijkertijd in content/background scripts. Het is dus nog wat werk
Heb je toevallig een linkje naar een site waar het voorkomt?huiz schreef op maandag 2 december 2019 @ 07:34:
[...]
Top idee! Net even geprobeerd maar heb nog iets gevonden. Soms wordt aangegeven dat er 2 afbeeldingen worden gevonden, terwijl je maar 1 kunt opslaan (een SVG). Alleen de optie om beide in aparte tabs te tonen laat wel beide zien (de SVG is leeg). Misschien een trucje van de pagina om een lege SVG over een afbeelding te tonen? Geen idee.
In sommige gevallen is het ook een timing issue. Je kan het context menu niet aanpassen on click, omdat de click handler in het context script draait en het context menu alleen kan worden aangepast door in het background script van de extensie. Hoe het nu werkt is dat het bij een pointerdown(mousedown) event het script gaat lopen en er een message naar het background-script gaat dat het context menu aanpast. In verreweg de meeste gevallen voordat het context menu getoond wordt. In zeldzame gevallen is de data daar niet geheel up to date. Heel lastig om dat er geheel uit te krijgen.
Voorpagina AD, Afbeeldingenzoeker Google... overal wel.BarôZZa schreef op maandag 2 december 2019 @ 13:53:
[...]
Heb je toevallig een linkje naar een site waar het voorkomt?
..
Als je een tijdje niets doet dan wil het menu ineens anders zijn en wordt wel direct de afbeelding gevonden zonder een branding svg.
Anyway, handige extensie hoor!
Universal Unreal Engine 4 Console Unlocker / dumper
Als hobby heb ik het maken van screenshots in games en het maken van tools om dat mogelijk te maken. Een tijdje geleden kregen SunBeam (een hacker die al lang met het bloodleggen van de internals van Unreal engine bezig is) en ik het idee om het maken van een Unreal engine 4 console unlocker, een dll die je kunt injecten in een UE4 game en die dan de in-game console weer enabled (die is tijdens de compilatie eruit gestript met #ifdefs). Dit resulteerde in een unlocker voor de console voor een aantal UE4 games en na veel research en programmeren is de lijst van supported games uitgegroeid tot meer dan 130 games.
De in-game console heeft als voordeel dat je de debugcamera kunt activeren en daarmee screenshots maken
Sinds de 1e versie heb ik veel features bijgebouwd zoals een hud toggle, meerdere manieren om de game te pauseren, game speed control en nu ook een volledig in-game camera system met fov control/camera control en verschillende screenshot types zoals panorama shots en lightfield shots (voor 3D displays).
URL: https://framedsc.github.i...l_ue4_consoleunlocker.htm
Als hobby heb ik het maken van screenshots in games en het maken van tools om dat mogelijk te maken. Een tijdje geleden kregen SunBeam (een hacker die al lang met het bloodleggen van de internals van Unreal engine bezig is) en ik het idee om het maken van een Unreal engine 4 console unlocker, een dll die je kunt injecten in een UE4 game en die dan de in-game console weer enabled (die is tijdens de compilatie eruit gestript met #ifdefs). Dit resulteerde in een unlocker voor de console voor een aantal UE4 games en na veel research en programmeren is de lijst van supported games uitgegroeid tot meer dan 130 games.
De in-game console heeft als voordeel dat je de debugcamera kunt activeren en daarmee screenshots maken
URL: https://framedsc.github.i...l_ue4_consoleunlocker.htm
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Ik heb een hobby appje gemaakt wat mensen hier misschien wel leuk vinden en waar ik graag wat feedback op zou willen ontvangen!
Www.lifeliner.app
Met de app kun je trauma- en politiehelikopters volgen op de radar. Ook kun je P2000 meldingen voor de lifeliners zien. En natuurlijk, als je wilt, een berichtje ontvangen als er een melding binnen komt of een helikopter op de radar verschijnt!
Www.lifeliner.app
Met de app kun je trauma- en politiehelikopters volgen op de radar. Ook kun je P2000 meldingen voor de lifeliners zien. En natuurlijk, als je wilt, een berichtje ontvangen als er een melding binnen komt of een helikopter op de radar verschijnt!

[ Voor 8% gewijzigd door eenhoogh op 05-02-2020 10:07 ]
Is zo'n app eigenlijk wel gewenst? De bedoeling is misschien om vanuit de zetel een en ander te volgen, wat op zich geen probleem is. Maar dit kan door ramptoeristen gebruikt worden. als ze in de buurt een melding zien, snellen ze daar naartoe. Volgens mij is dat niet iets wat hulpverleners op prijs stellen.
Die data is allang publiekelijk beschikbaar net zoals sites als 112meldingen en alarmeringen. Daarnaast als jij in een straal van 1km woont waar een heli gaat landen je dat ook wel door hebtGiesber schreef op woensdag 5 februari 2020 @ 13:40:
Is zo'n app eigenlijk wel gewenst? De bedoeling is misschien om vanuit de zetel een en ander te volgen, wat op zich geen probleem is. Maar dit kan door ramptoeristen gebruikt worden. als ze in de buurt een melding zien, snellen ze daar naartoe. Volgens mij is dat niet iets wat hulpverleners op prijs stellen.
Op het werk ben ik de laatste tijd wat aan het expirimenteren met Google Actions.
Als soort van 'Hello World' hebben we 'Koffie Halen' gemaakt.
Ben je klaar met de strijd over wie er nou aan de beurt is om koffie te halen?
Laat je Google assistent het lekker bepalen!
https://assistant.google....50b7847e?hl=nl&source=web
Zeg tegen Google 'Koffie halen' of 'Praat met Koffie halen', vervolgens zal je gevraagd worden wie er mee doen. Roep een aantal namen en voila; de (on)gelukkige winnaar wordt bepaald.
Als soort van 'Hello World' hebben we 'Koffie Halen' gemaakt.
Ben je klaar met de strijd over wie er nou aan de beurt is om koffie te halen?
Laat je Google assistent het lekker bepalen!
https://assistant.google....50b7847e?hl=nl&source=web
Zeg tegen Google 'Koffie halen' of 'Praat met Koffie halen', vervolgens zal je gevraagd worden wie er mee doen. Roep een aantal namen en voila; de (on)gelukkige winnaar wordt bepaald.
Mag ik vragen hoe je dit appje gemaakt hebt? Gebruik gemaakt van een framework als flutter of react?eenhoogh schreef op woensdag 5 februari 2020 @ 10:06:
Ik heb een hobby appje gemaakt wat mensen hier misschien wel leuk vinden en waar ik graag wat feedback op zou willen ontvangen!
Www.lifeliner.app
Met de app kun je trauma- en politiehelikopters volgen op de radar. Ook kun je P2000 meldingen voor de lifeliners zien. En natuurlijk, als je wilt, een berichtje ontvangen als er een melding binnen komt of een helikopter op de radar verschijnt!
[Afbeelding]
Ja, voor deze app heb ik inderdaad React Native gebruikt!KoningsGap schreef op donderdag 13 februari 2020 @ 16:45:
[...]
Mag ik vragen hoe je dit appje gemaakt hebt? Gebruik gemaakt van een framework als flutter of react?
Recentelijk een simpel tooltje gemaakt die een project folder aanmaakt voor het laatst toegevoegde Project (naam van de folder is dan; ProjectNr, Projectnaam, Klantnaam) op TimeChimp (CRM, Uren en Project management). Het maakt gebruik van de API van TimeChimp, Flask en Python3. Dit draait ondertussen op de lokale Synology NAS, waar hij zijn webserver host. (Werken met de DSM van synology was misschien wel de grootste uitdaging
)
Als je naar de lokale webserver gaat van Flask maakt hij dus de project folder (van de laatste toevoeging op TimeChimp) aan op de NAS. Waarom via een webserver? Omdat iedereen dit snel en makkelijk lokaal moest kunnen doen.
Leuke persoonlijke uitdaging om bekend te worden met Flask en om eventuele (onconventionele) mogelijkheden te ontdekken.
Link: https://github.com/tjallo/SynologyTimeChimpFolder
Als je naar de lokale webserver gaat van Flask maakt hij dus de project folder (van de laatste toevoeging op TimeChimp) aan op de NAS. Waarom via een webserver? Omdat iedereen dit snel en makkelijk lokaal moest kunnen doen.
Leuke persoonlijke uitdaging om bekend te worden met Flask en om eventuele (onconventionele) mogelijkheden te ontdekken.
Link: https://github.com/tjallo/SynologyTimeChimpFolder
[ Voor 3% gewijzigd door tjallo op 17-02-2020 15:16 ]
Na lange tijd weer eens wat tijd voor programmeren gemaakt. Nou had ik de wens bij een top down RPG de vijanden wat slimmer op de speler af te laten komen. Dus heb ik een prototype voor A* pathfinding geschreven. Op zichzelf al best een geinig speeltje geworden:

Het programma berekend via het A* algoritme de kortste weg tussen groen en rood. Door met de muis op de witte vakje te klikken kan je er obstakels van maken.
Nu maar hopen dat het meteen snel genoeg is om (als het nodig is) iedere 0,3 seconden (als de speler verplaats) opnieuw voor 20 NPC's een pad te berekenen.
En zoals je aan de screenshot kan zien springt hij nu langs twee blokjes die schuin wel tegen elkaar aanliggen.
Edit schuin over twee hokjes springen gefixed:

Het programma berekend via het A* algoritme de kortste weg tussen groen en rood. Door met de muis op de witte vakje te klikken kan je er obstakels van maken.
code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
| #define MAP_WIDTH 20 #define MAP_HEIGHT 20 #include <SFML/Graphics.hpp> #include <iostream> #include <math.h> #include <list> int mainWindowHeight = 800; int mainWindowWidth = 800; int currentMap[MAP_WIDTH][MAP_HEIGHT]; int startPosition[2] = { 0, 0}; int endPosition[2] = { 19, 19}; int startCell = (startPosition[0]*MAP_HEIGHT)+startPosition[1]; int endCell = (endPosition[0]*MAP_HEIGHT)+endPosition[1]; int goalCell; class Cells{ public: int positionX, positionY, parentCellId, cummulativeCost, cellId; double costToGoal, totalCostGuess; bool visited = false; bool obstacle = false; std::list<int> neighbours; }; double dist(double x1, double y1, double x2, double y2) { double x = x1 - x2; //calculating number to square in next step double y = y1 - y2; double dist; dist = pow(x, 2) + pow(y, 2); //calculating Euclidean distance dist = sqrt(dist); return dist; } Cells cellsList[MAP_HEIGHT*MAP_WIDTH]; int main(){ bool focus = true; bool mousePressedLeft = false; bool stateHasChanged = true; sf::Event event; sf::RenderWindow window(sf::VideoMode(mainWindowHeight, mainWindowWidth), "A Star"); window.setFramerateLimit(60); sf::RectangleShape cellShape; cellShape.setSize(sf::Vector2f( mainWindowWidth/MAP_WIDTH, mainWindowHeight/MAP_HEIGHT)); cellShape.setFillColor(sf::Color(255,255,255)); cellShape.setOutlineThickness(-1); cellShape.setOutlineColor(sf::Color(0,0,0)); for(int i = 0; i < MAP_WIDTH; i++){ for(int j = 0; j < MAP_HEIGHT; j++){ currentMap[i][j] = 0; } } while(window.isOpen()){ while (window.pollEvent(event)){ switch(event.type) { case sf::Event::Closed: window.close(); break; case sf::Event::LostFocus: focus = false; break; case sf::Event::GainedFocus: focus = true; break; } } //Mouse interaction if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && !mousePressedLeft && focus) { stateHasChanged = true; sf::Vector2i mousePosition = sf::Mouse::getPosition(window); if( currentMap[mousePosition.x/(mainWindowWidth/MAP_WIDTH)][mousePosition.y/(mainWindowHeight/MAP_HEIGHT)] == 0){ currentMap[mousePosition.x/(mainWindowWidth/MAP_WIDTH)][mousePosition.y/(mainWindowHeight/MAP_HEIGHT)] = 1; } else { currentMap[mousePosition.x/(mainWindowWidth/MAP_WIDTH)][mousePosition.y/(mainWindowHeight/MAP_HEIGHT)] = 0; } mousePressedLeft = true; } else if(!sf::Mouse::isButtonPressed(sf::Mouse::Left)) { mousePressedLeft = false; } if(stateHasChanged){ std::list<Cells> listToCheck; std::list<Cells> checkedList; int n = 0; for(int i = 0; i < MAP_WIDTH; i++){ for(int j = 0; j < MAP_HEIGHT; j++){ cellsList[n].positionX = i; cellsList[n].positionY = j; if(currentMap[i][j] == 1){ cellsList[n].obstacle = true; } else { cellsList[n].obstacle = false; } cellsList[n].costToGoal = NULL; cellsList[n].visited = false; cellsList[n].parentCellId = NULL; cellsList[n].cummulativeCost = NULL; cellsList[n].totalCostGuess = NULL; cellsList[n].neighbours.clear(); cellsList[n].cellId = n; n++; } } for(int i = 0; i < (MAP_HEIGHT*MAP_WIDTH) ; i++){ if(cellsList[i].positionX > 0){ //de cell links kan toegevoegd worden if(!cellsList[i-MAP_HEIGHT].obstacle){ cellsList[i].neighbours.push_back(i-MAP_HEIGHT); } } if(cellsList[i].positionX < MAP_WIDTH-1){ //de cell rechts kan toegevoegd worden if(!cellsList[i+MAP_HEIGHT].obstacle){ cellsList[i].neighbours.push_back(i+MAP_HEIGHT); } } if(cellsList[i].positionY > 0){ //de cell erboven kan toegevogd worden if(!cellsList[i-1].obstacle){ cellsList[i].neighbours.push_back(i-1); } } if(cellsList[i].positionY != MAP_HEIGHT-1){ //de cell eronder kan toegevoegd worden if(!cellsList[i+1].obstacle){ cellsList[i].neighbours.push_back(i+1); } } //achuin gaan... if(cellsList[i].positionY != MAP_HEIGHT-1 && cellsList[i].positionX < MAP_WIDTH-1){ //de cell rechtsonder kan toegevoegd worden if(!cellsList[i+1+MAP_HEIGHT].obstacle){ cellsList[i].neighbours.push_back(i+1+MAP_HEIGHT); } } if(cellsList[i].positionY >0 && cellsList[i].positionX < MAP_WIDTH-1){ //de cell rechtsboven kan toegevoegd worden if(!cellsList[i-1+MAP_HEIGHT].obstacle){ cellsList[i].neighbours.push_back(i-1+MAP_HEIGHT); } } if(cellsList[i].positionY != MAP_HEIGHT-1 && cellsList[i].positionX > 0){ //de cell linksonder kan toegevoegd worden if(!cellsList[i+1-MAP_HEIGHT].obstacle){ cellsList[i].neighbours.push_back(i+1-MAP_HEIGHT); } } if(cellsList[i].positionY >0 && cellsList[i].positionX > 0){ //de cell rechtsboven kan toegevoegd worden if(!cellsList[i-1-MAP_HEIGHT].obstacle){ cellsList[i].neighbours.push_back(i-1-MAP_HEIGHT); } } } listToCheck.push_back(cellsList[startCell]); cellsList[startCell].visited = true; bool pathFound = false; while(!listToCheck.empty()){ //sorteer de lijst en zet de cell met de laagste cost to goal bovenaan om het eerst te testen listToCheck.sort([](const Cells &f, const Cells &s) { return f.totalCostGuess < s.totalCostGuess; }); //Check of de te checken cell het doel is. Als dat zo is zijn we klaar if(listToCheck.front().cellId == endCell){ listToCheck.clear(); pathFound = true; } else { for (std::list<int>::const_iterator iterator = listToCheck.front().neighbours.begin(), end = listToCheck.front().neighbours.end(); iterator != end; ++iterator) { //We have found neighbours! //check if neighbours was found before if(!cellsList[*iterator].visited){ //Deze cell heeft geen parent is is dus nooit eerder gevonden! //De cell waarvan we de neighbours onderzoeken is dus automagisch tot nu toe de kortste route hiernaartoe cellsList[*iterator].parentCellId = listToCheck.front().cellId; //Nu moeten de kosten voor de route hiernatoe uitgerekend worden (Dit zijn de kosten van naar de buurman gaan +1 cellsList[*iterator].cummulativeCost = listToCheck.front().cummulativeCost+1; //Als laatste zetten we de cell in de lijst met cellen die gecheckt moet worden listToCheck.push_back(cellsList[*iterator]); //Bereken de afstand naar het doel cellsList[*iterator].costToGoal = dist(cellsList[*iterator].positionX,cellsList[*iterator].positionY,listToCheck.front().positionX,listToCheck.front().positionY); cellsList[*iterator].totalCostGuess = cellsList[*iterator].costToGoal + cellsList[*iterator].cummulativeCost; cellsList[*iterator].visited = true; }else{ //Deze cell is al eerder gevonden, staat dus als in de te checken cell lijst if(listToCheck.front().cummulativeCost+1 < cellsList[*iterator].cummulativeCost){ //Er is een kortere route naar deze cell! Pas de parent cell dus aan en geef een nieuwe cummulative Cost; cellsList[*iterator].parentCellId = listToCheck.front().cellId; cellsList[*iterator].cummulativeCost = listToCheck.front().cummulativeCost+1; cellsList[*iterator].totalCostGuess = cellsList[*iterator].costToGoal + cellsList[*iterator].cummulativeCost; } } } checkedList.push_back(listToCheck.front()); listToCheck.pop_front(); } } if(!pathFound){ std::cout << "No path found!"; } stateHasChanged = false; } //Draw stuff: window.clear(); for(int i = 0; i < MAP_WIDTH; i++){ for(int j = 0; j < MAP_HEIGHT; j++){ if(currentMap[i][j] == 1){ cellShape.setFillColor(sf::Color(40,40,40)); cellShape.setPosition((mainWindowWidth/MAP_WIDTH)*i, (mainWindowHeight/MAP_HEIGHT)*j); window.draw(cellShape); cellShape.setFillColor(sf::Color(255,255,255)); } else { cellShape.setPosition((mainWindowWidth/MAP_WIDTH)*i, (mainWindowHeight/MAP_HEIGHT)*j); window.draw(cellShape); } } } //Draw path //Create a list with the end as starting point std::list<Cells> route; route.push_back(cellsList[endCell]); bool endReached = false; while(!endReached){ route.push_front(cellsList[route.front().parentCellId]); cellShape.setFillColor(sf::Color(0,0,255)); cellShape.setPosition((mainWindowWidth/MAP_WIDTH)* route.front().positionX, (mainWindowHeight/MAP_HEIGHT)*route.front().positionY); window.draw(cellShape); route.pop_back(); if(route.front().parentCellId == startCell){ endReached = true; } } cellShape.setFillColor(sf::Color(0,255,0)); cellShape.setPosition((mainWindowWidth/MAP_WIDTH)*startPosition[0], (mainWindowHeight/MAP_HEIGHT)*startPosition[1]); window.draw(cellShape); cellShape.setFillColor(sf::Color(255,0,0)); cellShape.setPosition((mainWindowWidth/MAP_WIDTH)*endPosition[0], (mainWindowHeight/MAP_HEIGHT)*endPosition[1]); window.draw(cellShape); cellShape.setFillColor(sf::Color(255,255,255)); window.display(); } return 0; } |
Nu maar hopen dat het meteen snel genoeg is om (als het nodig is) iedere 0,3 seconden (als de speler verplaats) opnieuw voor 20 NPC's een pad te berekenen.
En zoals je aan de screenshot kan zien springt hij nu langs twee blokjes die schuin wel tegen elkaar aanliggen.
Edit schuin over twee hokjes springen gefixed:
code:
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
40
41
| //schuin gaan... if(cellsList[i].positionY != MAP_HEIGHT-1 && cellsList[i].positionX < MAP_WIDTH-1){ //de cell rechtsonder kan toegevoegd worden if(!cellsList[i+1+MAP_HEIGHT].obstacle ){ if(cellsList[i+1].obstacle && cellsList[i+MAP_HEIGHT].obstacle){ //Dit hokje wordt door de twee buur hokjes geblokkeerd! } else { cellsList[i].neighbours.push_back(i+1+MAP_HEIGHT); } } } if(cellsList[i].positionY >0 && cellsList[i].positionX < MAP_WIDTH-1){ //de cell rechtsboven kan toegevoegd worden if(!cellsList[i-1+MAP_HEIGHT].obstacle){ if(cellsList[i-1].obstacle && cellsList[i+MAP_HEIGHT].obstacle){ //Dit hokje wordt door de twee buur hokjes geblokkeerd! } else { cellsList[i].neighbours.push_back(i-1+MAP_HEIGHT); } } } if(cellsList[i].positionY != MAP_HEIGHT-1 && cellsList[i].positionX > 0){ //de cell linksonder kan toegevoegd worden if(!cellsList[i+1-MAP_HEIGHT].obstacle){ if(cellsList[i+1].obstacle && cellsList[i-MAP_HEIGHT].obstacle){ //Dit hokje wordt door de twee buur hokjes geblokkeerd! } else { cellsList[i].neighbours.push_back(i+1-MAP_HEIGHT); } } } if(cellsList[i].positionY >0 && cellsList[i].positionX > 0){ //de cell rechtsboven kan toegevoegd worden if(!cellsList[i-1-MAP_HEIGHT].obstacle){ if(cellsList[i-MAP_HEIGHT].obstacle && cellsList[i-1].obstacle){ //Dit hokje wordt door de twee buur hokjes geblokkeerd! } else { cellsList[i].neighbours.push_back(i-1-MAP_HEIGHT); } } } |
[ Voor 16% gewijzigd door switchboy op 18-02-2020 17:41 ]
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Ik kon niet slapen, dus maar gaan nerden en zojuist m'n eerste NuGet package gepublished 
https://www.nuget.org/packages/MonoGame.Primitives2D
Nu het voorbeeldproject maar weer oppoetsen en in een aparte repository publishen

Edit: done
https://github.com/DoogeJ/MonoGame.Primitives2D.Sample
https://www.nuget.org/packages/MonoGame.Primitives2D
Nu het voorbeeldproject maar weer oppoetsen en in een aparte repository publishen
Edit: done

https://github.com/DoogeJ/MonoGame.Primitives2D.Sample

[ Voor 51% gewijzigd door Noxious op 19-02-2020 05:47 ]
Geen idee of het kwalificeert voor dit topic, maar recent heb ik Rebellion Build Queue Map gemaakt. Dit stelt een map voor van het Star Wars universum zoals gebruikt in het bordspel Star Wars: Rebellion.
Kort samengevat: in het spel kunnen systemen een bepaalde loyaliteit hebben (neutraal, loyaal aan de Rebels, loyaal aan de Empire of bezet door de Empire) en aan de hand van die loyaliteit en de status van een systeem (gesaboteerd, aanwezigheid van de vijand) wordt bepaald of en wat een speler in bepaalde beurten mag bouwen.
Middels dit tooltje kan je per systeem makkelijk switchen tussen loyaliteit en status en met een druk op de knop zien wat er die beurt allemaal gebouwd mag worden. Dit scheelt aanzienlijk wat tijd vergeleken met iedere keer het (behoorlijk grote!) bord af te gaan om te checken welke systemen allemaal in aanmerking komen voor wat je deze beurt mag bouwen.
Al met al ben ik zelf redelijk tevreden met het resultaat
Kort samengevat: in het spel kunnen systemen een bepaalde loyaliteit hebben (neutraal, loyaal aan de Rebels, loyaal aan de Empire of bezet door de Empire) en aan de hand van die loyaliteit en de status van een systeem (gesaboteerd, aanwezigheid van de vijand) wordt bepaald of en wat een speler in bepaalde beurten mag bouwen.
Middels dit tooltje kan je per systeem makkelijk switchen tussen loyaliteit en status en met een druk op de knop zien wat er die beurt allemaal gebouwd mag worden. Dit scheelt aanzienlijk wat tijd vergeleken met iedere keer het (behoorlijk grote!) bord af te gaan om te checken welke systemen allemaal in aanmerking komen voor wat je deze beurt mag bouwen.
Al met al ben ik zelf redelijk tevreden met het resultaat
You know, I rather like this God fellow. He’s very theatrical. A little pestilence here, a plague there... Omnipotence...got to get me some of that.
Ik heb de A* pathfinding nu aan mijn game toegevoegd. Maakt het spel in één klap echt een stuk moeilijker!
Als je het spelletje wilt proberen:
https://1drv.ms/u/s!Ajy8AUieJ-iKgZ9E6hwrfjD4jqTDDA?e=s3C1qY
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Twee dagen geleden zijn er zonnepanelen op mijn dak geplaatst. En het leek mij wel leuk als ik gegevens van de omvormer en de slimme meter op een makkelijke manier kan bekijken. Zonder apps of gedoe, gewoon op een schermpje in de woonkamer. Dus dat is dit geworden:

Het toont:
- Weergegevens (voorspelling, actueel, min/max waarden, buienradar van mijn stad)
- Energie (huidig gebruik, hoeveel vanaf het net komt en vanaf de panelen)
- Gemiddeld verbruik voor gas en stroom en opwekking zonnepanelen
- Afspraken van vandaag
De applicatie is gebouwd in Javascript (Electron JS in kiosk mode) en draait op een Raspberry Pi 4 met het officiële LCD touch screen in een case. Scherm gaat uit na een paar minuten en dan stopt ook het pollen van data. Als ik het scherm aanraak gaat het scherm weer aan en gaat het gegevens binnen trekken weer verder.
Het werkt goed, even een tik tegen het scherm om te zien hoeveel de vaatwasser verbruikt of om te zien wat dat ene zonnestraaltje voor de zonnepanelen betekent.

Het toont:
- Weergegevens (voorspelling, actueel, min/max waarden, buienradar van mijn stad)
- Energie (huidig gebruik, hoeveel vanaf het net komt en vanaf de panelen)
- Gemiddeld verbruik voor gas en stroom en opwekking zonnepanelen
- Afspraken van vandaag
De applicatie is gebouwd in Javascript (Electron JS in kiosk mode) en draait op een Raspberry Pi 4 met het officiële LCD touch screen in een case. Scherm gaat uit na een paar minuten en dan stopt ook het pollen van data. Als ik het scherm aanraak gaat het scherm weer aan en gaat het gegevens binnen trekken weer verder.
Het werkt goed, even een tik tegen het scherm om te zien hoeveel de vaatwasser verbruikt of om te zien wat dat ene zonnestraaltje voor de zonnepanelen betekent.

Isometric demo:
Ik wil een old skool RTS game gaan maken. Hierbij is het leuk is om in plaats van de wereld top down te zien (zoals in mijn RTS) je een semi 3D perspectief van de wereld hebt. Ik moet dus een isometric projection maken. De moeilijkheid hierbij is dat waar je op het scherm bent met de muis niet correspondeert met waar je in de game wereld bent.Ik heb nu in SFML een simpel prototype gemaakt waarin een map isometisch geprojecteerd wordt en waarbij je met de muis de juiste tegel in de map kan selecteren en door te klikken de tegel eigenschappen kan veranderen.
Door die eigenschappen te veranderen veranderd de sprite voor die tegel en kan je dus een map tekenen:
Screenshot:
Fig: 1 Voorbeeld
Volgende moeilijkheid
In een 2D spelletje kon ik alle actors na het renderen van de map over de map heen tekenen. Echter als ik de actors nu op die manier ga tekenen dan zullen ze 'op' de bomen getekend worden in plaats van eronder. Het handigste is denk ik om een actor die op een bepaalde tegel staat net na het tekenen van die tegel te tekenen zodat de actor op de zelfde diepte ligt. Ik moet dus een efficiënte manier vinden om uit te zoeken welke actor er op een tegeltje staat zondat dat ik voor ieder tegeltje een hele actor list door moet spitten om actor.positionX en actor.positionY te controleren...Daarnaast denk ik dat een actor die van tegel 1 naar 2 loopt ook gek afgesneden kan worden als tegel 2 er later overheen getekend wordt. Dus die moet ik misschien dan maar twee keer tekenen?

De code:
code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
| #define MAP_WIDTH 20 #define MAP_HEIGHT 20 #include <SFML/Graphics.hpp> #include <iostream> int mainWindowHeight = 1350; int mainWindowWidth = 675; int mapOffsetX = MAP_WIDTH/2; int mapOffsetY = 0; int currentMap[MAP_WIDTH][MAP_HEIGHT]; sf::RenderWindow window(sf::VideoMode(mainWindowHeight, mainWindowWidth), "Isometric Demo"); sf::Sprite spriteSelectedTile, spriteEmptyTile, spriteGrassTile, spriteSandTile, spriteSandTileNE, spriteSandTileNW,spriteSandTileSE,spriteSandTileSW, spriteCactusTile, spriteCypressTrileTile, spriteNormalTreeTile, spritePineTreeTile; sf::Texture textureSelectedTile, textureEmptyTile, textureGrassTile, textureSandTile, textureSandTileNE, textureSandTileNW,textureSandTileSE,textureSandTileSW, textureCactusTile, textureCypressTrileTile, textureNormalTreeTile, texturePineTreeTile, textureCheatTile; void loadTextures(){ if(texturePineTreeTile.loadFromFile("textures/pineTree.png")){ spritePineTreeTile.setTexture(texturePineTreeTile); spritePineTreeTile.setOrigin(0,32); } else { std::cout << "Error loading texture: normalTree.png " << std::endl; } if(textureNormalTreeTile.loadFromFile("textures/normalTree.png")){ spriteNormalTreeTile.setTexture(textureNormalTreeTile); spriteNormalTreeTile.setOrigin(0,32); } else { std::cout << "Error loading texture: normalTree.png " << std::endl; } if(textureCypressTrileTile.loadFromFile("textures/cypressTree.png")){ spriteCypressTrileTile.setTexture(textureCypressTrileTile); spriteCypressTrileTile.setOrigin(0,32); } else { std::cout << "Error loading texture: cypressTree.png " << std::endl; } if(textureCactusTile.loadFromFile("textures/cactus.png")){ spriteCactusTile.setTexture(textureCactusTile); spriteCactusTile.setOrigin(0,32); } else { std::cout << "Error loading texture: cactus.png " << std::endl; } if(textureSelectedTile.loadFromFile("textures/tileSelected.png")){ spriteSelectedTile.setTexture(textureSelectedTile); } else { std::cout << "Error loading texture: tileSelected.png " << std::endl; } if(textureEmptyTile.loadFromFile("textures/emptyTile.png")){ spriteEmptyTile.setTexture(textureEmptyTile); } else { std::cout << "Error loading texture: emptyTile.png " << std::endl; } if(textureGrassTile.loadFromFile("textures/grassTile.png")){ spriteGrassTile.setTexture(textureGrassTile); } else { std::cout << "Error loading texture: grassTile.png " << std::endl; } if(textureSandTile.loadFromFile("textures/sand.png")){ spriteSandTile.setTexture(textureSandTile); } else { std::cout << "Error loading texture: sand.png " << std::endl; } if(textureSandTileNE.loadFromFile("textures/sandNE.png")){ spriteSandTileNE.setTexture(textureSandTileNE); } else { std::cout << "Error loading texture: sandNE.png " << std::endl; } if(textureSandTileNW.loadFromFile("textures/sandNW.png")){ spriteSandTileNW.setTexture(textureSandTileNW); } else { std::cout << "Error loading texture: sandNW.png " << std::endl; } if(textureSandTileSE.loadFromFile("textures/sandSE.png")){ spriteSandTileSE.setTexture(textureSandTileSE); } else { std::cout << "Error loading texture: sandSE.png " << std::endl; } if(textureSandTileSW.loadFromFile("textures/sandSW.png")){ spriteSandTileSW.setTexture(textureSandTileSW); } else { std::cout << "Error loading texture: sandSW.png " << std::endl; } if(!textureCheatTile.loadFromFile("textures/cheatTile.png")){ std::cout << "Error loading texture: cheatTile.png " << std::endl; } } int worldSpace(int x, int y, bool getX){ int wX = mapOffsetX*64 + ((x - y) * (64/2)); int wY = mapOffsetY*32 + (x + y) * (32/2); if(getX){ return wX; } else { return wY; } } void drawMap(){ for(int j = 0; j < MAP_HEIGHT; j++){ for(int i = 0; i < MAP_WIDTH; i++ ){ switch(currentMap[i][j]){ case 0: spriteEmptyTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteEmptyTile); break; case 1: spriteGrassTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteGrassTile); break; case 2: spriteSandTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteSandTile); break; case 3: spriteSandTileNE.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteSandTileNE); break; case 4: spriteSandTileNW.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteSandTileNW); break; case 5: spriteSandTileSE.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteSandTileSE); break; case 6: spriteSandTileSW.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteSandTileSW); break; case 7: spriteCactusTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteCactusTile); break; case 8: spriteCypressTrileTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteCypressTrileTile); break; case 9: spriteNormalTreeTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spriteNormalTreeTile); break; case 10: spritePineTreeTile.setPosition(worldSpace(i,j,true), worldSpace(i,j,false)); window.draw(spritePineTreeTile); break; } } } } void drawMousePosition(int x,int y){ spriteSelectedTile.setPosition(worldSpace(x, y,true), worldSpace(x, y,false)); window.draw(spriteSelectedTile); } int main(){ loadTextures(); auto cheatTile = textureCheatTile.copyToImage(); window.setFramerateLimit(60); bool focus = true; bool mousePressedLeft = false; sf::Event event; while(window.isOpen()){ //Bereken de positio van de muis in de wereld sf::Vector2i mousePosition = sf::Mouse::getPosition(window); int cellX = mousePosition.x/64; int cellY = mousePosition.y/32; int offSetX = mousePosition.x % 64; int offSetY = mousePosition.y % 32; int worldX = (cellY-mapOffsetY)+(cellX-mapOffsetX); int worldY = (cellY-mapOffsetY)-(cellX-mapOffsetX); //Selecteer aan de hand van de kleur een naburige cell auto color = cheatTile.getPixel(offSetX, offSetY); if(color == sf::Color::Red){ worldX += -1; } else if(color == sf::Color::Green){ worldY += +1; } else if(color == sf::Color::Blue){ worldY += -1; } else if(color == sf::Color::Yellow){ worldX += +1; } while (window.pollEvent(event)){ switch(event.type) { case sf::Event::Closed: window.close(); break; case sf::Event::LostFocus: focus = false; break; case sf::Event::GainedFocus: focus = true; break; } } //Mouse interaction if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && !mousePressedLeft && focus) { if(!(worldX >= MAP_WIDTH || worldX < 0 || worldY >= MAP_HEIGHT || worldY < 0)){ mousePressedLeft = true; currentMap[worldX][worldY] += +1; if(currentMap[worldX][worldY] > 10){ currentMap[worldX][worldY] = 0; } } } else if(!sf::Mouse::isButtonPressed(sf::Mouse::Left)) { mousePressedLeft = false; } //Draw stuff window.clear(sf::Color(255, 255, 255)); drawMap(); drawMousePosition(worldX, worldY); window.display(); } return 0; } |
Box dragging
Om straks units te kunnen selecteren is het handig dat ik er een manier van box dragging inbouw. Dit heeft voor heel wat hoofdpijn gezorgd maar ik heb nu iets dat soort van werk. Het plaatst de vier hoekpunten van de rechthoek die je trekt op de wereld map en het algoritme zoekt dan uit welke hokjes er tussen vallen en selecteerd ze:
De stukjes gras zijn de vier punten die hij in de wereldmap plaatst vanuit de muispositie bij het begin van het klikken en de verrandering in x en y erna. De zand tegeltjes worden vervolgens uitgerekend en aan de lijst met tegels toegevoeg. Als laatste gaat hij voor iedere Y waarvan hij twee tegels heeft de tussenliggende tegels aan de lijst toevoegen. (dit zijn de watertegels)
Het resultaat:

Ik heb er fixes aan toegevoegd dat wanneer je de muis naar boven en of naar links beweegt hij de vier punten goed zet en alsnog hetzelfde algortime doorloopt.
Een snellere manier om dit te doen kon ik niet bedenken. Het werkt goed behalve als je net op de grens tussen twee cellen inzit kan hij soms gek doen:

De twee blauwe pijlen geven aan waar de muis was bij klikken en slepen.
code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
| if(mousePressedLeft){ //Endlocation = current world mouse location endLocation[0] = worldX; endLocation[1] = worldY; //calculate highY = same screen Y but with start X highYLocation[0] = toWorldMousePosition(startMouseCords[0], mousePosition.y, true); highYLocation[1] = toWorldMousePosition(startMouseCords[0], mousePosition.y, false); //calculate lowY = same screen X but with start Y lowYLocation[0] = toWorldMousePosition(mousePosition.x, startMouseCords[1], true); lowYLocation[1] = toWorldMousePosition(mousePosition.x, startMouseCords[1], false); /** Fix for edge-case: mouse Y is < start mouse Y This means that: 'endLocation' is to be swapped with 'lowY', 'highY' is to be swapped with 'startLocation' **/ int startLocation2[2] = {startLocation[0], startLocation[1]}; if(mousePosition.y < startMouseCords[1]){ int tempStorage[2] = {endLocation[0], endLocation[1]}; int tempStorage2[2] = {highYLocation[0], highYLocation[1]}; endLocation[0] = lowYLocation[0]; endLocation[1] = lowYLocation[1]; lowYLocation[0] = tempStorage[0]; lowYLocation[1] = tempStorage[1]; highYLocation[0] = startLocation2[0]; highYLocation[1] = startLocation2[1]; startLocation2[0] = tempStorage2[0]; startLocation2[1] = tempStorage2[1]; } /** Fix for edge-case: mouse X is < start mouse X This means that: 'endLocation' is to be swapped with 'highY', 'lowY' is to be swapped with 'startLocation' **/ if(mousePosition.x < startMouseCords[0]){ int tempStorage[2] = {endLocation[0], endLocation[1]}; int tempStorage2[2] = {startLocation2[0], startLocation2[1]}; endLocation[0] = highYLocation[0]; endLocation[1] = highYLocation[1]; highYLocation[0] = tempStorage[0]; highYLocation[1] = tempStorage[1]; startLocation2[0] = lowYLocation[0]; startLocation2[1] = lowYLocation[1]; lowYLocation[0] = tempStorage2[0]; lowYLocation[1] = tempStorage2[1]; } rectangleCords.clear(); rectangleCords.push_back({startLocation2[0],startLocation2[1]}); rectangleCords.push_back({endLocation[0],endLocation[1]}); rectangleCords.push_back({highYLocation[0],highYLocation[1]}); rectangleCords.push_back({lowYLocation[0], lowYLocation[1]}); //calculate the inbetweens form startLocation to lowYLocation int i = startLocation2[0]+1; int j = startLocation2[1]-1; while(i < lowYLocation[0] && j > lowYLocation[1]){ //add new coördanate {i, j} to a list rectangleCords.push_back({i, j}); i++; j--; } //calculate the inbetweens from lowYlocation to endLocation i = lowYLocation[0]+1; j = lowYLocation[1]+1; while( i < endLocation[0] && j < endLocation[1]){ //add new coördenates {i, j} to a list rectangleCords.push_back({i, j}); i++; j++; } //calculate the inbetweens from highYLocation to endLocation i = highYLocation[0]+1; j = highYLocation[1]-1; while(i < endLocation[0] && j > endLocation[1]){ //add new coördenates {i, j} to a list rectangleCords.push_back({i, j}); i++; j--; } //calculate the inbetweens from startLocation to highYLocation i = startLocation2[0]+1; j = startLocation2[1]+1; while( i < highYLocation[0] && j < highYLocation[1]){ //add new coördanates {i, j}to a list rectangleCords.push_back({i, j}); i++; j++; } //sort the list on the Y coördanates std::sort(rectangleCords.begin(),rectangleCords.end(), rectCord); /**add the cells on the list with the Y coordanetes to a final lis and add the cells between the two cells with the same Y coördanets to this list; remove the first two elements from the list repeat until list is empty**/ if(!rectangleCords.empty()){ int stopAt = rectangleCords.size(); for(int i = 0; i < stopAt; i++){ if(rectangleCords[i].y == rectangleCords[i+1].y){ if(rectangleCords[i].x < rectangleCords[i+1].x){ for(int j = rectangleCords[i].x+1; j < rectangleCords[i+1].x; j++){ rectangleCords.push_back({j, rectangleCords[i].y}); } } else{ for(int j = rectangleCords[i+1].x+1; j < rectangleCords[i].x; j++){ rectangleCords.push_back({j, rectangleCords[i].y}); } } } } } //Throw out any cells wich are out of bounds for(int i = 0; i< rectangleCords.size();){ if(rectangleCords[i].x < 0 || rectangleCords[i].x >= MAP_WIDTH || rectangleCords[i].y < 0 || rectangleCords[i].y >= MAP_HEIGHT){ //Dexe cell is out of bounds gooi hem weg rectangleCords.erase(rectangleCords.begin()+ i); } else { i++; } } //Throw out duplicates std::sort(rectangleCords.begin(), rectangleCords.end(), compareCord); rectangleCords.erase(std::unique( rectangleCords.begin(), rectangleCords.end(), compareCord), rectangleCords.end()); } |
..
Framework voor het plaatsen en tekenen van gebouwen
In een RTS heb je vaak gebouwen nodig. Deze gebouwen hebben allen een verschillende grote kunnen verschillende dingen en moeten in de wereld getekend kunnen worden.Dat in de wereld tekenen gaat natuurlijk niet zonder slag of stoot:

Maar uiteindelijk lukt het dan mooi:

[ Voor 60% gewijzigd door switchboy op 05-03-2020 11:03 ]
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Nieuwe website. Stickers zijn nogal populair in de IT sector, om op de laptop te plakken.
Omdat er nogal wat mensen zijn die stickers kunnen ruilen, heb ik deze site opgezet:
https://stickertrade.me
Het is een beetje halverwege een beta status, en ik wil nog wat andere feature toevoegen. Maar so-far, so-good!
Het kan so af en toe nog wat buggy zijn, als je ergens tegen aan loopt, email me even
Omdat er nogal wat mensen zijn die stickers kunnen ruilen, heb ik deze site opgezet:
https://stickertrade.me
Het is een beetje halverwege een beta status, en ik wil nog wat andere feature toevoegen. Maar so-far, so-good!
Het kan so af en toe nog wat buggy zijn, als je ergens tegen aan loopt, email me even
[ Voor 12% gewijzigd door Firesphere op 08-03-2020 09:32 ]
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Ziet er leuk uit!Firesphere schreef op zondag 8 maart 2020 @ 01:13:
Nieuwe website. Stickers zijn nogal populair in de IT sector, om op de laptop te plakken.
Omdat er nogal wat mensen zijn die stickers kunnen ruilen, heb ik deze site opgezet:
https://stickertrade.me
Het is een beetje halverwege een beta status, en ik wil nog wat andere feature toevoegen. Maar so-far, so-good!
Het kan so af en toe nog wat buggy zijn, als je ergens tegen aan loopt, email me even
Paar dingetjes die ik zo snel tegenkom
Op mobiel loopt de tekst door het plaatje heen:
/f/image/a3aIWQY9TtA8NmMubPPYjL2o.jpg?f=fotoalbum_large)
Op de landingspagina staat een heel verhaal, maar om op de mobiele site bij de stickers te komen moet ik helemaal naar beneden scrollen.
[ Voor 10% gewijzigd door switchboy op 08-03-2020 18:50 ]
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Dat was niet alleen op mobiel een probleem!switchboy schreef op zondag 8 maart 2020 @ 18:40:
[...]
Ziet er leuk uit!
Paar dingetjes die ik zo snel tegenkom
Op mobiel loopt de tekst door het plaatje heen:
[Afbeelding]
Ja, probleem met het menu, het doet niet in/uit klappenswitchboy schreef op zondag 8 maart 2020 @ 18:40:
Op de landingspagina staat een heel verhaal, maar om op de mobiele site bij de stickers te komen moet ik helemaal naar beneden scrollen.

Het helpt natuurlijk, als je gewoon je hook aan het correcte element koppelt

Also, er is een menu-button bovenaan
[ Voor 11% gewijzigd door Firesphere op 09-03-2020 00:41 ]
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Update:
Tagging is nu ook beschikbaar.
Dankzij allthetalks.online, gaan we samenwerken voor een leuke "free trade agreement" van stickers, etc., via mijn nieuwe website, en zij linken dus naar mijn site.
Dat gezegd hebbende, kan ik allthetalks.online alleen maar aanraden, momenteel 30~ish uur aan informatieve presentaties (Ik wordt niet betaald voor deze promotie
)
Verder heb ik "original owner editing" toegevoegd. Dus de originele eigenaar van stickers, kan de sticker aanpassen. Evenals de optie om de tag "Exclusive" toe te voegen. Een exclusive kan automatisch niet meer worden gedeeld met anderen, door anderen.
WIP, maar ik ben best blij met deze updates.
Nu alleen nog even m'n buik overtuigen dat alles okay is. /NotCOVID-19
Tagging is nu ook beschikbaar.
Dankzij allthetalks.online, gaan we samenwerken voor een leuke "free trade agreement" van stickers, etc., via mijn nieuwe website, en zij linken dus naar mijn site.
Dat gezegd hebbende, kan ik allthetalks.online alleen maar aanraden, momenteel 30~ish uur aan informatieve presentaties (Ik wordt niet betaald voor deze promotie
Verder heb ik "original owner editing" toegevoegd. Dus de originele eigenaar van stickers, kan de sticker aanpassen. Evenals de optie om de tag "Exclusive" toe te voegen. Een exclusive kan automatisch niet meer worden gedeeld met anderen, door anderen.
WIP, maar ik ben best blij met deze updates.
Nu alleen nog even m'n buik overtuigen dat alles okay is. /NotCOVID-19
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Hoi,
Ik heb een landing page template gemaakt voor Bootstrap 4 dat ik graag met jullie wil delen.
Dit template bevat een bewegende achtergrond, met het doel een blijvende indruk achter te laten bij de bezoekers. Hij is gratis en open source (MIT license). Er zit een GulpJS workflow bij die SCSS (SASS) compiled en minified, en JavaScript ook minified.
Je kunt 'm hier vinden: https://github.com/vantagedesign/exodus-landing-page
En de demo is hier te zien: https://docs.vantage-design.com/exodus/demo
Ik ben op zoek naar feedback voor verbeteringen en nieuwe functies. Tevens wil ik meer van dit soort templates maken, dus ik ben benieuwd of daar interesse voor is!
EDIT:
Hier is nog een landing page template bij gekomen: Identity, gericht op agencies/startups/bedrijven.
Je kunt 'm hier vinden: https://github.com/vantagedesign/identity-landing-page
En de demo is hier te zien: https://docs.vantage-design.com/identity/demo
Hebben jullie nog verzoekjes voor dit soort pagina's? Erg leuk om te maken
Ik heb een landing page template gemaakt voor Bootstrap 4 dat ik graag met jullie wil delen.
Dit template bevat een bewegende achtergrond, met het doel een blijvende indruk achter te laten bij de bezoekers. Hij is gratis en open source (MIT license). Er zit een GulpJS workflow bij die SCSS (SASS) compiled en minified, en JavaScript ook minified.
Je kunt 'm hier vinden: https://github.com/vantagedesign/exodus-landing-page
En de demo is hier te zien: https://docs.vantage-design.com/exodus/demo
Ik ben op zoek naar feedback voor verbeteringen en nieuwe functies. Tevens wil ik meer van dit soort templates maken, dus ik ben benieuwd of daar interesse voor is!
EDIT:
Hier is nog een landing page template bij gekomen: Identity, gericht op agencies/startups/bedrijven.
Je kunt 'm hier vinden: https://github.com/vantagedesign/identity-landing-page
En de demo is hier te zien: https://docs.vantage-design.com/identity/demo
Hebben jullie nog verzoekjes voor dit soort pagina's? Erg leuk om te maken
[ Voor 22% gewijzigd door julianf op 20-03-2020 15:09 ]

Een update van NetPing met eigenlijk alleen wat bugfixes/opschonen
Info/downloads van deze update hier:
https://github.com/DoogeJ/NetPing/releases/tag/1.0.2.0
Algemene info:
https://github.com/DoogeJ/NetPing/blob/master/README.md
Source:
https://github.com/DoogeJ/NetPing
Hey @boe2, ik had deze post een tijd geleden gezien, maar nu loop ik tegen een goede use-case aan. Hier op het werk hebben ze een team wat al jaren 'Team' heet, aangepast naar 'Ander Team'. Aangezien 'Team' verweven zit in zo ontiegelijk veel files, databases, VBA, PHP etc, vroeg ik mij af of je deze tool ergens beschikbaar kunt stellen. PHP lukt nog wel met Notepad++ (find in files), maar voor Access ben ik nu handmatig alle configuratietabellen, queries en VBA aan het doorspittenboe2 schreef op vrijdag 10 mei 2019 @ 14:45:
Op mijn huidige opdracht hebben we nog hopen losse Access applicaties die een cumulatie zijn van bijna 20 jaar aan ontwikkeling. Massas VBA code verspreid over massas access bestanden, geen documentatie, meerdere migraties doorlopen naar nieuwer formaat. En dan krijg je de opdracht om uit te zoeken waar met waarde 'X' rekening gehouden wordt...
Dus heb ik een tool gemaakt om in bulk access applicaties te doorzoeken:
[Afbeelding]
Er wordt zowel op VBA code als op query objecten gezocht. Het werkt volledig via interops, dus enorm traag aangezien voor ieder document een access instance gestart moet worden. Desondanks wel een enorme timesaver, want op 20 minuten doorzoek ik zo'n 170 access files op 1 zoekterm.
Coding in the cold; <brrrrr />
"it works on my machine". Met die disclaimer achter de rug: Ik heb hem even op github gegooidBelindo schreef op maandag 23 maart 2020 @ 11:33:
[...]
Hey @boe2, ik had deze post een tijd geleden gezien, maar nu loop ik tegen een goede use-case aan. Hier op het werk hebben ze een team wat al jaren 'Team' heet, aangepast naar 'Ander Team'. Aangezien 'Team' verweven zit in zo ontiegelijk veel files, databases, VBA, PHP etc, vroeg ik mij af of je deze tool ergens beschikbaar kunt stellen. PHP lukt nog wel met Notepad++ (find in files), maar voor Access ben ik nu handmatig alle configuratietabellen, queries en VBA aan het doorspitten
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Held! Ik moest even uitvogelen hoe ik het project naar een .exe kon krijgen, maar hij draait nu op m'n server en de eerste resultaten komen binnen! Je hebt me flink wat werk bespaard!boe2 schreef op maandag 23 maart 2020 @ 12:27:
[...]
"it works on my machine". Met die disclaimer achter de rug: Ik heb hem even op github gegooid.
Coding in the cold; <brrrrr />
Het lijkt in de FireFox extensie niet meer mogelijk te zijn topics toe te voegenChicken88 schreef op dinsdag 8 augustus 2017 @ 22:22:
'k volg dit forum/topic al jaren met veel plezier, en zag dat het hier laatst ging over Chrome Extensies en een tool om Tweaker Topisc in de gaten te houden. Toen dacht ik, kom laat ik ook eens mijn tooltjes posten.
TWEAKERS TOPIC WATCHER
...
Vragen/opmerkingen hoor ik graag.
He, 'k heb het direct even getest en het lijkt hier nog wel gewoon te werken.bluewalk schreef op dinsdag 24 maart 2020 @ 09:26:
[...]
Het lijkt in de FireFox extensie niet meer mogelijk te zijn topics toe te voegenwordt de extensie nog bijgehouden?
Heb je wat meer informatie voor me? Versie FF ofzo? (mag ook in DM)
Ik heb weer wat tijd in mijn isometrische project gestoken.
Je kan nu terein plaatsen, objecten, gebouwen en actors. De actors kunnen dankzij het A* algoritme over de map bewegen. Hierbij dient het terrein, de objecten, de gebouwen en de andere objecten als obstakels.
Ik heb intussen voor lopende actors checks toegevoegd zodat ze niet op dezelfde tegel kunnen eindigen. Vanwege de performance draai ik A* alleen bij het toekennen van de opdracht en wanneer de actor een probleem tegenkomt. Dan probeert het per seconde de komende 5 sec een alternatief te vinden vindt hij die niet geeft hij het op.
Met een paar actors op een kleine map werkt het prima. Maar ik draaide net een proef met 50 actors op een map van 200x200 en dan loop ik tegen issues aan. Bij het geven van de opdracht is er een stotter. Dit gaat dan goed tot de eerste actors in de buurt van de doelcel komen. Ze lopen dan tegen elkaar en gaan 5x proberen of zo nog een route naar het doel uit te stippelen. (Die is er niet, maar het algoritme gaat dan ieder tegeltje van de map na)
De eerste golf stotter wil ik oplossen door de groep in groepjes van 5 te splitsen die waarvan ik ieder groepje een frame later de route uit laat rekenen. Voor het tanken van de framerate op het eind naar 1 frame per 10 seconden moet ik iets bedenken waarmee ik A* niet laat draaien als er geen oplossing meer kan zijn. Maar ik heb nog niet helemaal bedacht hoe.
Een andere misschien eleganter oplossing zou zijn om in plaats van op het botsen van actors te rekenen om soort van een formatie te krijgen dat ik iedere actor alvast een doel geef in de buurt van het daadwerkelijke doel.
Je kan nu terein plaatsen, objecten, gebouwen en actors. De actors kunnen dankzij het A* algoritme over de map bewegen. Hierbij dient het terrein, de objecten, de gebouwen en de andere objecten als obstakels.
Ik heb intussen voor lopende actors checks toegevoegd zodat ze niet op dezelfde tegel kunnen eindigen. Vanwege de performance draai ik A* alleen bij het toekennen van de opdracht en wanneer de actor een probleem tegenkomt. Dan probeert het per seconde de komende 5 sec een alternatief te vinden vindt hij die niet geeft hij het op.
Met een paar actors op een kleine map werkt het prima. Maar ik draaide net een proef met 50 actors op een map van 200x200 en dan loop ik tegen issues aan. Bij het geven van de opdracht is er een stotter. Dit gaat dan goed tot de eerste actors in de buurt van de doelcel komen. Ze lopen dan tegen elkaar en gaan 5x proberen of zo nog een route naar het doel uit te stippelen. (Die is er niet, maar het algoritme gaat dan ieder tegeltje van de map na)
De eerste golf stotter wil ik oplossen door de groep in groepjes van 5 te splitsen die waarvan ik ieder groepje een frame later de route uit laat rekenen. Voor het tanken van de framerate op het eind naar 1 frame per 10 seconden moet ik iets bedenken waarmee ik A* niet laat draaien als er geen oplossing meer kan zijn. Maar ik heb nog niet helemaal bedacht hoe.
Een andere misschien eleganter oplossing zou zijn om in plaats van op het botsen van actors te rekenen om soort van een formatie te krijgen dat ik iedere actor alvast een doel geef in de buurt van het daadwerkelijke doel.
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
@switchboy
Is het mogelijk om tijdens het schedulen bepaalde tiles te reserveren? Op tick τ is tile γ bezet, etcetera. Doelen kun je dan voor onbepaalde tijd afbakenen. Als paden tijdelijk bezet zijn kun je jouw actor laten wachten in een nabijgelegen tile (of een alternatieve (sub)route laten berekenen als dat sneller is dan het wachten).
Overigens heb ik niet door de source code gebladerd, dus wellicht is het al geïmplementeerd -- maar als je vanuit het doel terugrekent naar het startpunt zie je tijdens iteratie 0 al dat het doel bezet is.
Is het mogelijk om tijdens het schedulen bepaalde tiles te reserveren? Op tick τ is tile γ bezet, etcetera. Doelen kun je dan voor onbepaalde tijd afbakenen. Als paden tijdelijk bezet zijn kun je jouw actor laten wachten in een nabijgelegen tile (of een alternatieve (sub)route laten berekenen als dat sneller is dan het wachten).
Overigens heb ik niet door de source code gebladerd, dus wellicht is het al geïmplementeerd -- maar als je vanuit het doel terugrekent naar het startpunt zie je tijdens iteratie 0 al dat het doel bezet is.
[ Voor 7% gewijzigd door WK100 op 27-03-2020 16:23 ]
Wat ga je doen tijdens de quarantaine?ElCondor schreef op woensdag 3 januari 2018 @ 16:22:
Ik had hier al eens een post over gemaakt. Ben de laatse maand druk bezig geweest met het opzetten van een MVC website die de API gebruikt om Comics te lezen. Deze is nu hier te vinden:
ComicReaderWeb
Het is op dit moment nog een MVC3 applicatie (ik ben development ergens in 2015 begonnen) welke ik van plan ben te porten naar een MVC5 site, zo snel als mogelijk. De site zou ook goed te bekijken moeten zijn op een mobile device.
Kan ik eindelijk mijn verzameling lezen onder weg!
Er blijven altijd dingen te doen zoals een betere layout voor de interface en wat functionaliteit die het bladeren vergemakkelijken. Maar ik heb zo goed en zo kwaad als het kan friendly URLs geïmplementeerd dus het ziet er al met al heel aardig uit, al zeg ik het zelf.
Twee jaar na dato was MVC3 echt niet meer supported en bleek de site traag als poep geworden. Ik heb daarom de boel van de grond af opnieuw opgebouwd in .NET Core en Blazor. Allemaal net wat vloeiender en weer een heleboel geleerd.
ComicReaderWeb
Viel me heel erg mee hoe snel je met Blazor een lekker functionerende site in elkaar gesleuteld hebt.
Waar ik me alleen nog in moet verdiepen is state management. Dat gebeurt nu globaal dus als er twee of meer mensen op de site zitten, dan kan de context nog eens vreemd veranderen.

Gaat aan gewerkt worden.
Daarnaast heb ik met Xamarin Forms een Android App versie gebouwd.




Ook op dat gebied weer veel opgestoken. ToDo is nog om ook hier fatsoenlijke state management geïmplementeerd te krijgen. Niet dat als je de app opent je weer helemaal bovenaan begint met scrollen en dat comics die je voor een deel gelezen hebt, openenen op de pagina waar je gebleven was. Ik zit te denken aan een soort bookmarks en bijvoorbeeld ook favorites, zodat je niet de hele lijst door hoeft te scrollen om een comic te vinden.
Ik moet zeggen, waar Xamarin in 2018 nog een wat gekunsteld framework leek is het de laatste paar jaar lekker ontwikkeld en wordt het daarmee ook steeds makkelijker om cross-platform te ontwikkelen.
Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)
Sinds enige tijd doe ik mijn boekhouding met Ledger CLI. Omdat het aardig wat tijd kost om met de hand alle transacties om te zetten naar transactions, heb ik een DSL geschreven in F# (fsharp) met behulp van FParsec: TransactionQL.
Nu kan ik met wat simpele filters bijna al mijn transacties automatisch omzetten naar ledger.
Nu kan ik met wat simpele filters bijna al mijn transacties automatisch omzetten naar ledger.
code:
1
2
3
4
5
6
7
8
9
10
| # Rent Receiver = "NL20INGB0001234567" Amount > 1000.00 or Amount < 100.00 Posting { Expenses:Rent € (total) Assets:Checking } |
Na het zien van dit: YouTube: YouTube
Leek het me wel leuk om het na te maken:
:strip_exif()/f/image/F58NTE2wj14RncLwZ63alTTu.gif?f=fotoalbum_small)
Het is nog wat ruw. maar het idee is er.
Leek het me wel leuk om het na te maken:
:strip_exif()/f/image/F58NTE2wj14RncLwZ63alTTu.gif?f=fotoalbum_small)
Het is nog wat ruw. maar het idee is er.
Less alienation, more cooperation.
Leuk, alleen moet ik wel zeggen, als ik dat YouTube filmpje bekijk, als ik mee zou moeten kijken met een leraar, dan zou ik binnen tien minuten strontmisselijk zijn... FPS, precies hetzelfde...Sandor_Clegane schreef op dinsdag 31 maart 2020 @ 10:23:
Na het zien van dit: YouTube: YouTube
Leek het me wel leuk om het na te maken:
[Afbeelding]
Het is nog wat ruw. maar het idee is er.

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)
Dat had ik ook, ik had het idee om een tweede camera te maken die het bord rendered.ElCondor schreef op dinsdag 31 maart 2020 @ 10:31:
[...]
Leuk, alleen moet ik wel zeggen, als ik dat YouTube filmpje bekijk, als ik mee zou moeten kijken met een leraar, dan zou ik binnen tien minuten strontmisselijk zijn... FPS, precies hetzelfde...
Less alienation, more cooperation.
Blazor, fijn framework voor iemand die gewoon niet kan (wil) wennen aan jsElCondor schreef op dinsdag 31 maart 2020 @ 09:29:
[...]
...
Daarnaast heb ik met Xamarin Forms een Android App versie gebouwd.
...
Ik moet zeggen, waar Xamarin in 2018 nog een wat gekunsteld framework leek is het de laatste paar jaar lekker ontwikkeld en wordt het daarmee ook steeds makkelijker om cross-platform te ontwikkelen.
Uit interesse, waarom heb je gekozen voor Xamarin? Waarom niet een PWA?
Ik heb een online Ninite-alternatief gemaakt (WindowsRemix.com), met vandaag een veel gevraagde feature: Permalinks voor een software selectie.
De selectie kan je bookmarken (knopje permalink), en als je opnieuw Windows 10 installeert, kan je via de bookmark makkelijk alles opnieuw installeren.
Er zijn geen dependencies als je een browser van Microsoft gebruikt, dus na het opnieuw installeren van Windows 10 kan je meteen met Edge (of Internet Explorer) naar WindowsRemix gaan.
De installatie gebeurt met BoxStarter, Chocolatey en NuGet.
Voorbeeld: https://www.windowsremix....sh,bleachbit,7zip,dropbox
De selectie kan je bookmarken (knopje permalink), en als je opnieuw Windows 10 installeert, kan je via de bookmark makkelijk alles opnieuw installeren.
Er zijn geen dependencies als je een browser van Microsoft gebruikt, dus na het opnieuw installeren van Windows 10 kan je meteen met Edge (of Internet Explorer) naar WindowsRemix gaan.
De installatie gebeurt met BoxStarter, Chocolatey en NuGet.
Voorbeeld: https://www.windowsremix....sh,bleachbit,7zip,dropbox
🇪🇺 Buy from EU (GoT)
@Sando iets dat ik precies mis is een overzichtspagina met alle beschikbare software, nu krijg ik telkens slechts een beperkt aanbod te zien tenzij ik op "more" klik, maar dat is dan ook maar 1 categorie en op een aparte pagina. Een "more" knop die uitklapt op de pagina zelf (zodat je op dezelfde selectiepagina kan blijven) of een optie om alles op de softwarepagina te tonen kan misschien interessant zijn?
Ik wilde het niet in een browser draaien, maar in een eigen app. Ben altijd wel op zoek naar uitdagingen om nieuwe technologieën te ontdekken en te gebruiken. Ik heb daarom ook Java geprobeerd om native op Android te ontwikkelen, maar ik liep steeds tegen de vergelijking aan tussen C# en Java. Is toch weer net even anders en kreeg het niet lekker in de vingers. Xamarin was een fijne vervanger daartussen. Maar, ik moet wel zeggen, pas sinds vorig jaar of zo. Toen ik er net mee begon was het allemaal nog een beetje clunky... en er is gelukkig ook steeds mee informatie over te vinden. Al moet je de search filter dan altijd beperken tot maximaal tot een jaar terug.Sharkware schreef op dinsdag 31 maart 2020 @ 15:56:
[...]
Blazor, fijn framework voor iemand die gewoon niet kan (wil) wennen aan js![]()
Uit interesse, waarom heb je gekozen voor Xamarin? Waarom niet een PWA?
Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)
Dit is een lastig punt. De aller eerste lelijke versie had een grote lijst, en toen was de meestgehoorde kritiek juist dat het niet een grote lijst moest zijn. Uiteindelijk is dit vooral omlaag geschroefd vanwege de performance op oude hardware.bertware schreef op woensdag 1 april 2020 @ 09:22:
@Sando iets dat ik precies mis is een overzichtspagina met alle beschikbare software, nu krijg ik telkens slechts een beperkt aanbod te zien tenzij ik op "more" klik
Want het grootste publiek zit in India. Tot een paar jaar terug was alles compatible met Internet Explorer uit Windows XP
Een categorie kan heel ruim zijn. Deze pagina bijvoorbeeld moet eigenlijk nodig opnieuw opgesplitst worden.dat is dan ook maar 1 categorie en op een aparte pagina.
Als je weet wat je zoekt, dan kan je het in de zoekbox bovenin typen. Na 3 letters krijg je automatisch een lijstje matches. En het is min of meer éénmalig; Een permalink kan je vervolgens op meerdere laptops deployen.

Ik zal je advies overigens wel meenemen en eens nadenken over een "god mode".
🇪🇺 Buy from EU (GoT)
Ik heb het anders opgelost. Een groep wordt opgedeeld in vijf actors per keer. De eerste vijf actors mogen 'deze frame' de route uitrekenen. De volgende vijf de frame erna enzovoorts. Tevens heb ik het naar hetzelfde hokje kunnen lopen als ze als groep de opdracht krijgen dit te doen opgelost door de groep een formatie te laten aannemen. Ik heb nu gekozen voor een driehoek zodat je altijd wel tactisch staat. Later wil ik afhankelijk van de looprichting en wens van de speler de formatie dynamisch maken. Hiermee zijn de problemen bij het geven van de opdracht opgelost. Echter als je het systeem gaat plagen door veel onmogelijke routes te plannen dan gaat hij nog wel stotteren. Daar moet ik nog iets op vinden zonder dat je niet meer van de ene naar de andere kant van de map kan lopen.WK100 schreef op vrijdag 27 maart 2020 @ 16:21:
@switchboy
Is het mogelijk om tijdens het schedulen bepaalde tiles te reserveren? Op tick τ is tile γ bezet, etcetera. Doelen kun je dan voor onbepaalde tijd afbakenen. Als paden tijdelijk bezet zijn kun je jouw actor laten wachten in een nabijgelegen tile (of een alternatieve (sub)route laten berekenen als dat sneller is dan het wachten).
Overigens heb ik niet door de source code gebladerd, dus wellicht is het al geïmplementeerd -- maar als je vanuit het doel terugrekent naar het startpunt zie je tijdens iteratie 0 al dat het doel bezet is.

Omdat ik even wat anders wou heb ik wat ik al wel aan pathfinding werkend heb gebruikt om resources te kunnen verzamelen. Omdat ik alleen nog boom sprites en houthak sprites heb voor nu alleen hout. Maar ik heb het zo opgezet dat om andere resources werkend te krijgen in princiepe alleen de sprites en animaties nodig zijn.
Iedere boom begint nu nog met 200 hout. Een villager kan 10 hout per keer van een boom halen. Dan moet hij teruglopen naar een verzamelpunt en het hout afgeven. Hierna zal hij terug naar de boom lopen waar hij bezig was. Als de boom op is verdwijnt deze en zal de villager teruglopen naar het verzamelpunt en hierna naar de dichtsbijzijnde andere boom lopen.
Ik heb lang nagedacht over hoe ik dit zoeken efficient kon maken. Uiteindelijk heb ik voor de bomen een andere methode dan voor het verzamelpunt gekozen:
Voor het verzamelpunt itereerd hij door de lijst met gebouwen en als hij dan een gebouw tegenkomt waar hij die resource kwijt kan en dit gebouw van het juiste team is zal hij de hemelsbrede afstand berekenen. Als die korter is dan een eerder gevonden gebouw of het eerste gebouw is wordt dit het nieuwe beste gebouw. Aan het eind hou je het gebouw over met de kortste afstand!
De redenatie was: het gebouw kan ver weg staan en ieder team zou zo'n beetje 20-30 gebouwen hebben met 8 teams maakt dit 240 gebouwen.
Voor de bomen kijkt hij in een grid van 20x20 hokjes om de speler heen naar alle objecten. Als dit object de juiste resource heeft zal de hemelsbreede afstand berekend worden en vergeleken met het tot dan toe beste object. Voor deze kleine radius heb je dus al 400 hokjes bekeken. Als je echter uitgaat van een map van 200*200 hokjes en 10% van deze hokjes zijn objecten in een typische game zou je met de andere methode 4000 objecten moeten beoordelen.
Source: https://github.com/switchboy/isometric
(Is inmiddels veel te lang voor copy & paste hier dus dan maar zo)
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Een paar zaken gemaakt die nu in coronatijd goed uitkomen en we hebben ze al een aantal keer succesvol op 't werk gebruikt 




Downloads | Source code (GPLv3) | Docker




Downloads | Source code (GPLv3) | Docker
Return - realtime retrospective tool
Return is een real-time retrospective tool gebouwd in ASP.NET Core Blazor. Via de verschillende stadia kan de facilitator de retrospective door de verschillende fases heenleiden, zoals het opschrijven van de items, discussie, groeperen en stemmen.



Downloads | Source code (GPLv3) | Docker
PokerTime - planning poker
PokerTime is een simpele tool om planning poker sessies te hosten. Ook gebouwd op ASP.NET Core Blazor.



Downloads | Source code (GPLv3) | Docker
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Ik heb mijn pathfinding probleem voor het grootste gedeelte opgelost door vanuit het doel en de actor twee floodfills te laten beginnen. Als één van de twee ophoud voor het in contact komt met de andere zitten de actor en zijn doel op twee verschillende 'eilanden' en kunnen ze elkaar niet bereiken. Dit werkt redelijk snel als het 'eiland' klein genoeg is. Ik bendenk me net dat als ik nummers per iteratie van de flood toevoeg aan de cellen kan ik via de cell waar ze ontmoeten zelfs meteen een pad uitrekenen door vanuit die cel steeds naar de buurman te gaan met het laagste cijfer. Als je die paden aan elkaar plakt ben je klaar. Natuurlijk is A* vaak sneller.
code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| struct islandCell { int positionX; int positionY; int cellId; }; bool canTargetBeReached(int sourceX, int sourceY, int targetX, int targetY) { int cellsList[MAP_HEIGHT*MAP_WIDTH][2]; int startCell = (sourceX*MAP_HEIGHT)+sourceY; int endCell = (targetX*MAP_HEIGHT)+targetY; for(int i = 0; i < MAP_HEIGHT*MAP_WIDTH; i++) { cellsList[i][0] = 0; cellsList[i][1] = 0; } cellsList[startCell][0] = 1; cellsList[endCell][1] = 1; std::list<islandCell> checkedListFromSource; std::list<islandCell> toCheckListFromSource; std::list<islandCell> checkedListFromTarget; std::list<islandCell> toCheckListFromTarget; toCheckListFromSource.push_back({sourceX, sourceY, startCell}); toCheckListFromTarget.push_back({targetX, targetY, endCell}); bool cellIsInBothLists = false; while(!toCheckListFromSource.empty() && !toCheckListFromTarget.empty() && !cellIsInBothLists) { for(int i = 0; i < 8; i++) { int tempSourceCellId; int tempSourceX; int tempSourceY; int tempTargetCellId; int tempTargetX; int tempTargetY; switch(i) { case 0: //north tempSourceX = toCheckListFromSource.front().positionX; tempSourceY = toCheckListFromSource.front().positionY-1; tempTargetX = toCheckListFromTarget.front().positionX; tempTargetY = toCheckListFromTarget.front().positionY-1; break; case 1: //NorthEast tempSourceX = toCheckListFromSource.front().positionX+1; tempSourceY = toCheckListFromSource.front().positionY-1; tempTargetX = toCheckListFromTarget.front().positionX+1; tempTargetY = toCheckListFromTarget.front().positionY-1; break; case 2: //East tempSourceX = toCheckListFromSource.front().positionX+1; tempSourceY = toCheckListFromSource.front().positionY; tempTargetX = toCheckListFromTarget.front().positionX+1; tempTargetY = toCheckListFromTarget.front().positionY; break; case 3: //SouthEast tempSourceX = toCheckListFromSource.front().positionX+1; tempSourceY = toCheckListFromSource.front().positionY+1; tempTargetX = toCheckListFromTarget.front().positionX+1; tempTargetY = toCheckListFromTarget.front().positionY+1; break; case 4: //South tempSourceX = toCheckListFromSource.front().positionX; tempSourceY = toCheckListFromSource.front().positionY+1; tempTargetX = toCheckListFromTarget.front().positionX; tempTargetY = toCheckListFromTarget.front().positionY+1; break; case 5: //SouthWest tempSourceX = toCheckListFromSource.front().positionX-1; tempSourceY = toCheckListFromSource.front().positionY+1; tempTargetX = toCheckListFromTarget.front().positionX-1; tempTargetY = toCheckListFromTarget.front().positionY+1; break; case 6: //West tempSourceX = toCheckListFromSource.front().positionX-1; tempSourceY = toCheckListFromSource.front().positionY; tempTargetX = toCheckListFromTarget.front().positionX-1; tempTargetY = toCheckListFromTarget.front().positionY; break; case 7: //NorthWest tempSourceX = toCheckListFromSource.front().positionX-1; tempSourceY = toCheckListFromSource.front().positionY-1; tempTargetX = toCheckListFromTarget.front().positionX-1; tempTargetY = toCheckListFromTarget.front().positionY-1; break; } tempSourceCellId = (tempSourceX*MAP_HEIGHT)+tempSourceY; tempTargetCellId = (tempTargetX*MAP_HEIGHT)+tempTargetY; if(currentGame.isPassable(tempSourceX,tempSourceY)) { if(cellsList[tempSourceCellId][0] == 0) { toCheckListFromSource.push_back({tempSourceX, tempSourceY, tempSourceCellId}); cellsList[tempSourceCellId][0] = 1; if(cellsList[tempSourceCellId][1] == 1) { std::cout << "the cell is in both lists!\n"; cellIsInBothLists = true; i = 8; } } } if(currentGame.isPassable(tempTargetX,tempTargetY)) { if(cellsList[tempTargetCellId][1] == 0) { toCheckListFromTarget.push_back({tempTargetX, tempTargetY, tempSourceCellId}); cellsList[tempTargetCellId][1] = 1; if(cellsList[tempTargetCellId][0] == 1) { std::cout << "the cell is in both lists!\n"; cellIsInBothLists = true; i = 8; } } } } toCheckListFromSource.pop_front(); toCheckListFromTarget.pop_front(); } return cellIsInBothLists; } |
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Het is niet echt een nuttige tool, maar het heeft toch weer voor een paar uur amusement gezorgd in deze quarantaine-tijd
.
Ik speelde vrij vaak Light Up (Akari), maar dat begon na enige tijd te vervelen.
Toen ben ik iets gaan bouwen om de puzzels automagisch op te lossen en zodoende
.

Ik speelde vrij vaak Light Up (Akari), maar dat begon na enige tijd te vervelen.
Toen ben ik iets gaan bouwen om de puzzels automagisch op te lossen en zodoende
:strip_exif()/f/image/v8kPW6F5z2MwYCASoQBsemUC.gif?f=fotoalbum_large)
Dat ziet er goed uit, misschien dat ik deze ook in de planning ga opperen , helaas is de retrospective stuk of ik snap het niet.Sebazzz schreef op donderdag 9 april 2020 @ 23:06:
Een paar zaken gemaakt die nu in coronatijd goed uitkomen en we hebben ze al een aantal keer succesvol op 't werk gebruikt
Netwerk Engineer
Wat bedoel je?DutchITMaster schreef op zaterdag 11 april 2020 @ 22:59:
[...]
Dat ziet er goed uit, misschien dat ik deze ook in de planning ga opperen , helaas is de retrospective stuk of ik snap het niet.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Deed een pull request en hij kon hem niet naar binnen halen
Netwerk Engineer
Gister een projectje afgemaakt. Of ja, ik zeg afgemaakt, maar iets is natuurlijk nooit af. 
Het is een slimme meter lezer en forwarder.

Gebouwd op basis van een ESP32 met een 240x135pixel LCD scherm die aangestuurd wordt over de SPI bus.
De meter laat live zien wat het huidig verbruik of opbrengst is en houdt ook het dagverbruik bij.
Ook bevat de meter een WiFi verbinding, om de data naar Domoticz door te sturen en kun je hem aflezen en upgraden via een HTTP server.
Source is hier te vinden:
https://github.com/OverSoft/ESP32_DSMR
Leuk projectje om te doen terwijl je je thuis aan het vervelen bent.
Het is een slimme meter lezer en forwarder.

Gebouwd op basis van een ESP32 met een 240x135pixel LCD scherm die aangestuurd wordt over de SPI bus.
De meter laat live zien wat het huidig verbruik of opbrengst is en houdt ook het dagverbruik bij.
Ook bevat de meter een WiFi verbinding, om de data naar Domoticz door te sturen en kun je hem aflezen en upgraden via een HTTP server.
Source is hier te vinden:
https://github.com/OverSoft/ESP32_DSMR
Leuk projectje om te doen terwijl je je thuis aan het vervelen bent.
Anoniem: 674295
Laat ik zelf ook maar eens een creatie showen ipv alleen maar inspiratie opdoen
Bij onze scouting wordt na de opkomst natuurlijk wel eens een biertje gedronken. Voorheen werd dit bijgehouden met papieren strookjes die je bij iemand kon kopen (de opbrengst/winst gaat naar de kas en daar word aan het eind van het jaar iets leuks mee gedaan).
Helaas waren de strookjes gedoe; de persoon die het bijhoud had er best veel werk mee en het kwam wel eens voor dat de blanco strookjes op waren / onvindbaar. Wat er dan gebeurd kan je natuurlijk wel raden....
Daarom ben ik in november afgelopen jaar begonnen met de "PivoPeiler" (Pivo=naam van de groep en Tsjechisch voor bier).
Eigenlijk is het een zelfgebouwde POS die werkt met credits, credits onder de 0 krijg je automatisch een email met het verzoek te betalen en tot een per gebruiker in te stellen limiet kan je dan nog bestellen (standaard -10). Voorraad wordt bijgehouden zodat er zo nu en dat gecontroleerd kan worden of iedereen netjes z'n drankjes aanslaat. Ook krijgt de beheerder een melding als er iets op dreigt te raken.
De producten en gebruikers komen geheel dynamisch uit een database waar je eenvoudig met de fijne django-admin interface zaken kan aanpassen.
Nu zijn we aanbeland bij versie 2 waar je ter plekke kan pinnen, veilig en fail-proof via de gekoppelde op de tablet geinstalleerde SumUp app en pinautomaat. Je credit-topup word dan automatisch verwerkt. Ook is er een gastenmodus voor gasten die dan achteraf een rekening krijgen (of bij vertrek pinnen). Ten slotte heeft versie twee een andere bestel-interface gekregen waardoor er veel meer ruimte is voor producten en gebruikers (= ruimte voor speciaalbier
)
Het is een eenvoudige webapp geschreven in python met django en javascript, draait op een raspberry pi 2 en word bedient via een tablet (kan ook via je eigen telefoon).
/f/image/flQ50v3z7Gs87QCkkV7JQUaI.png?f=fotoalbum_large)
/f/image/w1D3Z0ObSvq7bldrxtj2A3HO.png?f=fotoalbum_large)
/f/image/D45H2ZtgSWX0SeQlonav69eY.png?f=fotoalbum_large)
Bij onze scouting wordt na de opkomst natuurlijk wel eens een biertje gedronken. Voorheen werd dit bijgehouden met papieren strookjes die je bij iemand kon kopen (de opbrengst/winst gaat naar de kas en daar word aan het eind van het jaar iets leuks mee gedaan).
Helaas waren de strookjes gedoe; de persoon die het bijhoud had er best veel werk mee en het kwam wel eens voor dat de blanco strookjes op waren / onvindbaar. Wat er dan gebeurd kan je natuurlijk wel raden....
Daarom ben ik in november afgelopen jaar begonnen met de "PivoPeiler" (Pivo=naam van de groep en Tsjechisch voor bier).
Eigenlijk is het een zelfgebouwde POS die werkt met credits, credits onder de 0 krijg je automatisch een email met het verzoek te betalen en tot een per gebruiker in te stellen limiet kan je dan nog bestellen (standaard -10). Voorraad wordt bijgehouden zodat er zo nu en dat gecontroleerd kan worden of iedereen netjes z'n drankjes aanslaat. Ook krijgt de beheerder een melding als er iets op dreigt te raken.
De producten en gebruikers komen geheel dynamisch uit een database waar je eenvoudig met de fijne django-admin interface zaken kan aanpassen.
Nu zijn we aanbeland bij versie 2 waar je ter plekke kan pinnen, veilig en fail-proof via de gekoppelde op de tablet geinstalleerde SumUp app en pinautomaat. Je credit-topup word dan automatisch verwerkt. Ook is er een gastenmodus voor gasten die dan achteraf een rekening krijgen (of bij vertrek pinnen). Ten slotte heeft versie twee een andere bestel-interface gekregen waardoor er veel meer ruimte is voor producten en gebruikers (= ruimte voor speciaalbier
Het is een eenvoudige webapp geschreven in python met django en javascript, draait op een raspberry pi 2 en word bedient via een tablet (kan ook via je eigen telefoon).
/f/image/flQ50v3z7Gs87QCkkV7JQUaI.png?f=fotoalbum_large)
/f/image/w1D3Z0ObSvq7bldrxtj2A3HO.png?f=fotoalbum_large)
/f/image/D45H2ZtgSWX0SeQlonav69eY.png?f=fotoalbum_large)
/f/image/BTGnkJYkDzV91etKwGQoF7d5.png?f=fotoalbum_large)
[ Voor 53% gewijzigd door Anoniem: 674295 op 13-04-2020 13:55 . Reden: Even mijn email weggepoetst ]
Zoiets zouden we op de soos gehad moeten hebben. Hoeveel barkaarten wel niet zoekgeraakt zijnAnoniem: 674295 schreef op maandag 13 april 2020 @ 12:14:
Laat ik zelf ook maar eens een creatie showen ipv alleen maar inspiratie opdoen![]()
Bij onze scouting wordt na de opkomst natuurlijk wel eens een biertje gedronken. Voorheen werd dit bijgehouden met papieren strookjes die je bij iemand kon kopen (de opbrengst/winst gaat naar de kas en daar word aan het eind van het jaar iets leuks mee gedaan).
Helaas waren de strookjes gedoe; de persoon die het bijhoud had er best veel werk mee en het kwam wel eens voor dat de blanco strookjes op waren / onvindbaar. Wat er dan gebeurd kan je natuurlijk wel raden....
Daarom ben ik in november afgelopen jaar begonnen met de "PivoPeiler" (Pivo=naam van de groep en Tsjechisch voor bier).
Eigenlijk is het een zelfgebouwde POS die werkt met credits, credits onder de 0 krijg je automatisch een email met het verzoek te betalen en tot een per gebruiker in te stellen limiet kan je dan nog bestellen (standaard -10). Voorraad wordt bijgehouden zodat er zo nu en dat gecontroleerd kan worden of iedereen netjes z'n drankjes aanslaat. Ook krijgt de beheerder een melding als er iets op dreigt te raken.
De producten en gebruikers komen geheel dynamisch uit een database waar je eenvoudig met de fijne django-admin interface zaken kan aanpassen.
Nu zijn we aanbeland bij versie 2 waar je ter plekke kan pinnen, veilig en fail-proof via de gekoppelde op de tablet geinstalleerde SumUp app en pinautomaat. Je credit-topup word dan automatisch verwerkt. Ook is er een gastenmodus voor gasten die dan achteraf een rekening krijgen (of bij vertrek pinnen). Ten slotte heeft versie twee een andere bestel-interface gekregen waardoor er veel meer ruimte is voor producten en gebruikers (= ruimte voor speciaalbier)
Het is een eenvoudige webapp geschreven in python met django en javascript, draait op een raspberry pi 2 en word bedient via een tablet (kan ook via je eigen telefoon).
[Afbeelding]
[Afbeelding]
[Afbeelding]
[Afbeelding]
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Zou tof zijn als je het zou willen delen.Anoniem: 674295 schreef op maandag 13 april 2020 @ 17:10:
nou als er animo voor is, wil ik best het best delen hoor
Hey allen!
Door de crisis en wat aanmoediging van andere members hier heb ik besloten thuis te blijven van werk, met veel pijn in mijn hart omdat het tegen al mijn principes in gaat. Maar ik weet dat dit de goede keuze is voor mezelf en anderen.
Nu ik extra tijd over heb ben ik bezig geweest met mijn eigen projecten. Ik heb mezelf leren webprogrammeren en heb een online video download website gemaakt (non-profit, geen ads e.d.). Je kan er videos mee downloaden van facebook, insta en onze favoriet dumpert. Privé groepen via facebook lukt niet altijd, dus let op.
Ben zelf niet zo een heel grote social media gebruiker, dus ik weet niet alle ins en outs. Zelf heb ik wat dingen getest en het werkt tot nu toe altijd. Nu wil ik graag dit project met jullie delen en in ruil daarvoor vragen om feedback of het bij jou werkt of niet, en wat er dan fout gaat. Doet ie het goed op je mobiel, op desktop of misschien laadt ie langzaam (Zou best kunnen, servers zitten in Amerika)?
Bij voorbaat dank!
https://www.dumpertdownload.com/
Door de crisis en wat aanmoediging van andere members hier heb ik besloten thuis te blijven van werk, met veel pijn in mijn hart omdat het tegen al mijn principes in gaat. Maar ik weet dat dit de goede keuze is voor mezelf en anderen.
Nu ik extra tijd over heb ben ik bezig geweest met mijn eigen projecten. Ik heb mezelf leren webprogrammeren en heb een online video download website gemaakt (non-profit, geen ads e.d.). Je kan er videos mee downloaden van facebook, insta en onze favoriet dumpert. Privé groepen via facebook lukt niet altijd, dus let op.
Ben zelf niet zo een heel grote social media gebruiker, dus ik weet niet alle ins en outs. Zelf heb ik wat dingen getest en het werkt tot nu toe altijd. Nu wil ik graag dit project met jullie delen en in ruil daarvoor vragen om feedback of het bij jou werkt of niet, en wat er dan fout gaat. Doet ie het goed op je mobiel, op desktop of misschien laadt ie langzaam (Zou best kunnen, servers zitten in Amerika)?
Bij voorbaat dank!
https://www.dumpertdownload.com/
@Athylus waarmee of waarin heb je deze tool gemaakt als ik vragen mag?
Neem aan dat hetzelfde principe opgaat voor andere video sites, hoewel ik mij niet erg heb verdiept in hoe de door jou genoemde sites precies werken qua video streaming.
En weet je trouwens of dit mag vanuit bijvoorbeeld Dumpert? Kan me voorstellen dat ze hier niet zo blij mee zijn en je binnenkort een verzoek krijgt om je website offline te halen.
Neem aan dat hetzelfde principe opgaat voor andere video sites, hoewel ik mij niet erg heb verdiept in hoe de door jou genoemde sites precies werken qua video streaming.
En weet je trouwens of dit mag vanuit bijvoorbeeld Dumpert? Kan me voorstellen dat ze hier niet zo blij mee zijn en je binnenkort een verzoek krijgt om je website offline te halen.
Ik zou mij niet aan Dumpert koppelen maar iets van socialvideodownload ofzo. En dan zoveel mogelijk sites ondersteunen op 1 pagina. Misschien ook wat output variatie? Dat is wat ik nu vaak mis bij die websites. Ga je het ook nog opensource maken?Athylus schreef op dinsdag 14 april 2020 @ 13:08:
Hey allen!
Door de crisis en wat aanmoediging van andere members hier heb ik besloten thuis te blijven van werk, met veel pijn in mijn hart omdat het tegen al mijn principes in gaat. Maar ik weet dat dit de goede keuze is voor mezelf en anderen.
Nu ik extra tijd over heb ben ik bezig geweest met mijn eigen projecten. Ik heb mezelf leren webprogrammeren en heb een online video download website gemaakt (non-profit, geen ads e.d.). Je kan er videos mee downloaden van facebook, insta en onze favoriet dumpert. Privé groepen via facebook lukt niet altijd, dus let op.
Ben zelf niet zo een heel grote social media gebruiker, dus ik weet niet alle ins en outs. Zelf heb ik wat dingen getest en het werkt tot nu toe altijd. Nu wil ik graag dit project met jullie delen en in ruil daarvoor vragen om feedback of het bij jou werkt of niet, en wat er dan fout gaat. Doet ie het goed op je mobiel, op desktop of misschien laadt ie langzaam (Zou best kunnen, servers zitten in Amerika)?
Bij voorbaat dank!
https://www.dumpertdownload.com/
Hey, misschien een idee om je "parsing"-deel te verwerken in een rssbridge componentje?Athylus schreef op dinsdag 14 april 2020 @ 13:08:
Hey allen!
Door de crisis en wat aanmoediging van andere members hier heb ik besloten thuis te blijven van werk, met veel pijn in mijn hart omdat het tegen al mijn principes in gaat. Maar ik weet dat dit de goede keuze is voor mezelf en anderen.
Nu ik extra tijd over heb ben ik bezig geweest met mijn eigen projecten. Ik heb mezelf leren webprogrammeren en heb een online video download website gemaakt (non-profit, geen ads e.d.). Je kan er videos mee downloaden van facebook, insta en onze favoriet dumpert. Privé groepen via facebook lukt niet altijd, dus let op.
Ben zelf niet zo een heel grote social media gebruiker, dus ik weet niet alle ins en outs. Zelf heb ik wat dingen getest en het werkt tot nu toe altijd. Nu wil ik graag dit project met jullie delen en in ruil daarvoor vragen om feedback of het bij jou werkt of niet, en wat er dan fout gaat. Doet ie het goed op je mobiel, op desktop of misschien laadt ie langzaam (Zou best kunnen, servers zitten in Amerika)?
Bij voorbaat dank!
https://www.dumpertdownload.com/
Uiteindelijk met als doel om een RSS feed van dumper filmpjes te krijgen. Zou top zijn!
Ben weer wat aan m'n spelletje wezen klussen. Dit keer wat meer optisch interessante features toegevoegd die zich het best leenden voor een flimpje:
Hier zit je in actie:
- Het pathfinding systeem zoals het zou moeten werken nu het algoritme dankzij een pointer in plaats van een kopie over de juiste informatie bij iedere stap besschikt zie ook: C++ Pathfinding optimalisatie en multithreading
- Robustere villager AI waardoor als ze elkaar blokkeren ze niet direct stoppen met hun taak
- Class om tekst links op het scherm te toveren in verschillende kleuren
- Volledig functionele minimap
- Nieuwe overlay texture
- Werkende actieknoppen voor de geselecteerde unit
Source: https://github.com/switchboy/isometric
====
En nu kan je ook gebouwen bouwen!
Hier zit je in actie:
- Het pathfinding systeem zoals het zou moeten werken nu het algoritme dankzij een pointer in plaats van een kopie over de juiste informatie bij iedere stap besschikt zie ook: C++ Pathfinding optimalisatie en multithreading
- Robustere villager AI waardoor als ze elkaar blokkeren ze niet direct stoppen met hun taak
- Class om tekst links op het scherm te toveren in verschillende kleuren
- Volledig functionele minimap
- Nieuwe overlay texture
- Werkende actieknoppen voor de geselecteerde unit
Source: https://github.com/switchboy/isometric
====
En nu kan je ook gebouwen bouwen!
[ Voor 7% gewijzigd door switchboy op 28-04-2020 15:20 ]
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Leuk! Ik volg al een tijdje ook de devlog van Lumber Mill; YouTube: Lumbermill Devlog lijkt kwa stijl een beetje op jou devlog avonturen. Erg leukswitchboy schreef op zondag 26 april 2020 @ 23:15:
Ben weer wat aan m'n spelletje wezen klussen. Dit keer wat meer optisch interessante features toegevoegd die zich het best leenden voor een flimpje:
[YouTube: Isometric RTS devlog part 3]
Hier zit je in actie:
- Het pathfinding systeem zoals het zou moeten werken nu het algoritme dankzij een pointer in plaats van een kopie over de juiste informatie bij iedere stap besschikt zie ook: C++ Pathfinding optimalisatie en multithreading
- Robustere villager AI waardoor als ze elkaar blokkeren ze niet direct stoppen met hun taak
- Class om tekst links op het scherm te toveren in verschillende kleuren
- Volledig functionele minimap
- Nieuwe overlay texture
- Werkende actieknoppen voor de geselecteerde unit
Source: https://github.com/switchboy/isometric
Ja klopt. Alleen ziet dat werken in Unity er wel fancy uit zeg!PrisonerOfPain schreef op maandag 27 april 2020 @ 10:24:
[...]
Leuk! Ik volg al een tijdje ook de devlog van Lumber Mill; YouTube: Lumbermill Devlog lijkt kwa stijl een beetje op jou devlog avonturen. Erg leuk
Daarmee vergeleken is Code::Blocks, SFML en C++ wel heel spartaans. De manier waarop hij interfaces sleept en doet en dan koppelt aan onderliggende variabelen ziet er erg handig uit. Ik maak eerst een mock-up in fotoshop en moet daarna alle afstanden nameten naar elementen dan dan in een fractie van de breedte en hoogte van de mock-up uitdrukken om ze daarna stuk voor stuk in Code::Blocks kloppen. Voordeel is wel dat hop allerlei resoluties de GUI er hetzelfde uitziet!

My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Mijn verloren uurtjes van afgelopen maand zijn opgegaan aan versleuteling.
M'n PHP script die het Event Log van mijn (FRITZ!OS 6.15) ADSL modem uitleest, praat nu https en heeft geen last meer van de bug in FRITZ!OS 6.13.
https://github.com/biocod...ologyLogCenterDaemon/wiki
De Synology Storage Analyzer Client heeft een update gehad, en kan nu inloggen met een private/public key paar over SSH (met dank aan https://github.com/sshnet/SSH.NET).
https://github.com/biocoder-frodo/SynoDuplicateFolders/wiki
M'n PHP script die het Event Log van mijn (FRITZ!OS 6.15) ADSL modem uitleest, praat nu https en heeft geen last meer van de bug in FRITZ!OS 6.13.
https://github.com/biocod...ologyLogCenterDaemon/wiki
De Synology Storage Analyzer Client heeft een update gehad, en kan nu inloggen met een private/public key paar over SSH (met dank aan https://github.com/sshnet/SSH.NET).
https://github.com/biocoder-frodo/SynoDuplicateFolders/wiki
Ik heb een proxmox machine waar ik ook vm's op draai om dingen voor verschillende OS'en te proberen en ook om op te ontwikkelen.
Omdat ik geen zin heb in een losse mac en 10 verschillende linux dozen naast een windows computer heb ik dus voor een hypervisor gekozen. Omdat ik ook eigenlijk native performance wil (vooral grafisch) doe ik aan gpu passthrough. Leuk in theorie, maar een uitdaging in de praktijk.
Er zit maar 1 videokaart in en die kan niet gelijktijdig gedeeld worden, maar dat is ook niet nodig.
Wat wel nodig is is het vrijgeven van die kaart en dat kan nog wel eens een uitdaging zijn.
Standaard gebruikt proxmox zelf die videokaart dus die moet je lospeuteren, maar dat is eenmalig.
De vm's die die kaart gebruiken geven 'm vaak vrij na het afsluiten maar soms ook niet.
Soms moet zelfs de stroom van de videokaart omdat anders een andere vm 'm gewoon niet meer kan oppikken. Vooral als ik een windows vm heb afgesloten wordt de videokaart niet volledig vrijgegeven
Sorry voor de lange intro maar anders was het een beetje moeilijk te vertellen wat voor 'tooltje' ik gemaakt heb.
Ik heb een tool gemaakt die wat checks doet of de videokaart vrij is en anders doet ie dat zelf.
Hij kijkt of er op dat moment nog andere vm's draaien die de videokaart gebruiken en zo ja dan sluit ie die af.
Daarna suspend ie heel even de hypervisor om de stroom van de videokaart te halen en start daarna de aangevraagde vm op.
Het lijkt redelijk goed te werken.
Ik heb er ook een simpele webinterface bij gemaakt in blazor (ook om meteen effe mee te spelen)
Dus met een single click kan ik van een macosx naar pop os naar windows naar elementary etc.
Ik moet alleen effe wachten omdat er een machine moet afsluiten en een ander booten maar het werkt nu al zoveel beter dan steeds naar de CLI gaan en regelmatig de hele hypervisor rebooten, dus ik ben al wel een beetje happy.
Omdat ik geen zin heb in een losse mac en 10 verschillende linux dozen naast een windows computer heb ik dus voor een hypervisor gekozen. Omdat ik ook eigenlijk native performance wil (vooral grafisch) doe ik aan gpu passthrough. Leuk in theorie, maar een uitdaging in de praktijk.
Er zit maar 1 videokaart in en die kan niet gelijktijdig gedeeld worden, maar dat is ook niet nodig.
Wat wel nodig is is het vrijgeven van die kaart en dat kan nog wel eens een uitdaging zijn.
Standaard gebruikt proxmox zelf die videokaart dus die moet je lospeuteren, maar dat is eenmalig.
De vm's die die kaart gebruiken geven 'm vaak vrij na het afsluiten maar soms ook niet.
Soms moet zelfs de stroom van de videokaart omdat anders een andere vm 'm gewoon niet meer kan oppikken. Vooral als ik een windows vm heb afgesloten wordt de videokaart niet volledig vrijgegeven
Sorry voor de lange intro maar anders was het een beetje moeilijk te vertellen wat voor 'tooltje' ik gemaakt heb.
Ik heb een tool gemaakt die wat checks doet of de videokaart vrij is en anders doet ie dat zelf.
Hij kijkt of er op dat moment nog andere vm's draaien die de videokaart gebruiken en zo ja dan sluit ie die af.
Daarna suspend ie heel even de hypervisor om de stroom van de videokaart te halen en start daarna de aangevraagde vm op.
Het lijkt redelijk goed te werken.
Ik heb er ook een simpele webinterface bij gemaakt in blazor (ook om meteen effe mee te spelen)
Dus met een single click kan ik van een macosx naar pop os naar windows naar elementary etc.
Ik moet alleen effe wachten omdat er een machine moet afsluiten en een ander booten maar het werkt nu al zoveel beter dan steeds naar de CLI gaan en regelmatig de hele hypervisor rebooten, dus ik ben al wel een beetje happy.
Lekker op de bank
Ik heb de afgelopen maand weer wat uurtjes in mijn RTS kunnen stoppen. Helaas heb ik niet alleen naar nieuwe features toegevoegd maar moest ik ook het nodige herschrijven om het werkbaar te houden. Omdat het opsommen van de features die nieuw zijn maar droog is heb ik er een video bij gemaakt:
Github pagina: https://github.com/switchboy/IsoRTS
De release die je in de video ziet: https://github.com/switchboy/IsoRTS/releases/tag/Fog
Github pagina: https://github.com/switchboy/IsoRTS
De release die je in de video ziet: https://github.com/switchboy/IsoRTS/releases/tag/Fog
My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83
Komt er nog een FireFox versie?BarôZZa schreef op woensdag 27 november 2019 @ 22:20:
Ik stoorde me eraan dat ik vaak de Element Inspector moest openen om een afbeelding op te slaan in plaats van gewoon rechtermuisknop kon doen en 'Opslaan als' of kopiëren/openen in nieuw tab.
[Afbeelding]
[Afbeelding]
Normaal gesproken werkt het in je browser alleen bij IMG-tags zonder dat er elementen overheen zitten.
Dus heb ik een Chrome Extensie geschreven waarbij dat wel werkt op alle afbeeldingen die ik heb getest. Img tags, background images, canvas elementen, video's met een poster attribute, veel SVG's(dat is nog vrij tricky en werkt niet altijd) etc. Het werkt ook als er andere elementen overheen liggen.
Werkt op alle sites die ik heb getest, dus inclusief Instagram, Flickr, Pinterest en zelfs Google Maps/Street View. Mochten er sites zijn waarbij het niet werkt, laat het weten.
Right Click On Any Image
Er komt binnenkort waarschijnlijk ook een Firefox versie van uit, maar daar zijn nog kleine issues mee (clipboard deel werkt nog niet).
Ik ben een verwend webcomic lezer en lees er dan ook een heleboel.
Een groot nadeel is van het lezen van meerdere comics te gelijk is dat je een browser nodig hebt die over tab's beschikt, tegenwoordig is dat niet z'n probleem maar dat is wel eens anders geweest.
En als je dat dan hebt dan mag je blij zijn dat de browser niet crashed en al je comics verdwenen zijn en je ze weer moet gaan opzoeken.
Verder lees ik de comics graag op mijn tablet en daar is het hebben van meerdere tab bladen niet echt een suc6 van wegen het slurpen van resources.
Om dat allemaal te ondervangen heb ik een aantal jaren terug een APP ontwikkeld genaamd Comic Relieve. Deze APP is een veredelde webbrowser met als voordeel dat je al je favoriete webcomic's bookmarken kan opslaan. Bij het bekijken van de opgeslagen comic houd de APP netjes bij welke pagina je het laatste hebt bekeken zodat wanneer je terug komt je de laatste pagina die je bekeken hebt weer voor je krijgt.
Tegenwoordig beschikt de APP ook over een grote database van veel bestaande comic voor de kleine en grote lezers, gegroepeerd volgens de internationale film rating standaard. De APP heeft verschillende filters om te voorkomen dat de jonge lezers content kan lezen dat alleen voor de oudere lezers geschikt is.
Ik zou de APP heel graag ook beschikbaar willen stellen aan mede comic readers, maar Google ligt dwars omdat ze mijn APP niet willen zien as browser geven ze steeds andere redenen op om de app te blokkeren.
Ik ben benieuwd of iemand hier ook interesse in heeft? Zo ja laat me het dan maar weten. Voor nu kan Ik alleen de APK naar je opsturen opsturen of laten downloaden.
/f/image/prn714SOlVgP635jjAbFBkdR.png?f=fotoalbum_large)
Een groot nadeel is van het lezen van meerdere comics te gelijk is dat je een browser nodig hebt die over tab's beschikt, tegenwoordig is dat niet z'n probleem maar dat is wel eens anders geweest.
En als je dat dan hebt dan mag je blij zijn dat de browser niet crashed en al je comics verdwenen zijn en je ze weer moet gaan opzoeken.
Verder lees ik de comics graag op mijn tablet en daar is het hebben van meerdere tab bladen niet echt een suc6 van wegen het slurpen van resources.
Om dat allemaal te ondervangen heb ik een aantal jaren terug een APP ontwikkeld genaamd Comic Relieve. Deze APP is een veredelde webbrowser met als voordeel dat je al je favoriete webcomic's bookmarken kan opslaan. Bij het bekijken van de opgeslagen comic houd de APP netjes bij welke pagina je het laatste hebt bekeken zodat wanneer je terug komt je de laatste pagina die je bekeken hebt weer voor je krijgt.
Tegenwoordig beschikt de APP ook over een grote database van veel bestaande comic voor de kleine en grote lezers, gegroepeerd volgens de internationale film rating standaard. De APP heeft verschillende filters om te voorkomen dat de jonge lezers content kan lezen dat alleen voor de oudere lezers geschikt is.
Ik zou de APP heel graag ook beschikbaar willen stellen aan mede comic readers, maar Google ligt dwars omdat ze mijn APP niet willen zien as browser geven ze steeds andere redenen op om de app te blokkeren.
Ik ben benieuwd of iemand hier ook interesse in heeft? Zo ja laat me het dan maar weten. Voor nu kan Ik alleen de APK naar je opsturen opsturen of laten downloaden.
/f/image/prn714SOlVgP635jjAbFBkdR.png?f=fotoalbum_large)
/f/image/8t4cb3D0KoapRF8dvtqMDQrn.png?f=fotoalbum_large)
Vorige maand een 'self hosted forms backend' geschreven:
https://github.com/DenBeke/mailbear
Een soort van formspree.io / formkeep.com alternatief dat je zelf kan hosten (maar dan zonder UI, noch admin ui, noch form ui).
Je configureert de forms waarvoor je submissions wilt ontvangen in een Yaml file, alsook de SMTP server die je gebruikt, en de tool handelt de rest af. (zelf gebruik ik het in combinatie met Sendgrid)
Ideaal om Ajax forms toe te voegen aan een statische HTML website.
Deployen kan door een binary de downloaden op de releases pagina. Ofwel via docker image: denbeke/mailbear.
https://github.com/DenBeke/mailbear
Een soort van formspree.io / formkeep.com alternatief dat je zelf kan hosten (maar dan zonder UI, noch admin ui, noch form ui).
Je configureert de forms waarvoor je submissions wilt ontvangen in een Yaml file, alsook de SMTP server die je gebruikt, en de tool handelt de rest af. (zelf gebruik ik het in combinatie met Sendgrid)
Ideaal om Ajax forms toe te voegen aan een statische HTML website.
Deployen kan door een binary de downloaden op de releases pagina. Ofwel via docker image: denbeke/mailbear.
[ Voor 10% gewijzigd door DenBeke op 04-08-2020 10:38 ]
Een hele simpele app gemaakt die het huidige nummer van Spotify toont.
https://play.google.com/s...com.glitch.coverframe.app
:strip_exif()/f/image/hPTN3EuT0fhdXojj1wfjQmHh.jpg?f=fotoalbum_large)
/f/image/6derXpMp5Djk1HajKQtN8LGP.png?f=fotoalbum_large)
Omdat ik een oude telefoon over had waarvan het touch screen stuk was, doet het ook géén dienst als afstandbediening. Momenteel heeft het 2 layouts, 1 voor landscape en 1 voor portrait. Als muziekbron kan je 1 Spotifygebruiker toevoegen.
Mogelijk dat ik dat ooit nog eens uitbreid, als er veel animo voor blijkt te zijn. Als basis heb ik een eigen assessment gebruikt die mijn kennis van Android architectuur toont, dus mede daarom is het heel abstract opgebouwd. Een extra muziekbron of layout toevoegen is daarom een eitje. Waarschijnlijk publiceer ik het in de toekomst als open source, maar daarvoor wil eerst m'n eigen oneffenheden hebben weggewerkt.
https://play.google.com/s...com.glitch.coverframe.app
:strip_exif()/f/image/hPTN3EuT0fhdXojj1wfjQmHh.jpg?f=fotoalbum_large)
/f/image/6derXpMp5Djk1HajKQtN8LGP.png?f=fotoalbum_large)
Omdat ik een oude telefoon over had waarvan het touch screen stuk was, doet het ook géén dienst als afstandbediening. Momenteel heeft het 2 layouts, 1 voor landscape en 1 voor portrait. Als muziekbron kan je 1 Spotifygebruiker toevoegen.
Mogelijk dat ik dat ooit nog eens uitbreid, als er veel animo voor blijkt te zijn. Als basis heb ik een eigen assessment gebruikt die mijn kennis van Android architectuur toont, dus mede daarom is het heel abstract opgebouwd. Een extra muziekbron of layout toevoegen is daarom een eitje. Waarschijnlijk publiceer ik het in de toekomst als open source, maar daarvoor wil eerst m'n eigen oneffenheden hebben weggewerkt.
Dit lijkt mij een best geinige handige app. Ik krijg hem alleen niet gekoppeld aan mijn Spotify Premium.MichielPH schreef op maandag 17 augustus 2020 @ 12:02:
Een hele simpele app gemaakt die het huidige nummer van Spotify toont.
https://play.google.com/s...com.glitch.coverframe.app
[Afbeelding]
[Afbeelding]
Omdat ik een oude telefoon over had waarvan het touch screen stuk was, doet het ook géén dienst als afstandbediening. Momenteel heeft het 2 layouts, 1 voor landscape en 1 voor portrait. Als muziekbron kan je 1 Spotifygebruiker toevoegen.
Mogelijk dat ik dat ooit nog eens uitbreid, als er veel animo voor blijkt te zijn. Als basis heb ik een eigen assessment gebruikt die mijn kennis van Android architectuur toont, dus mede daarom is het heel abstract opgebouwd. Een extra muziekbron of layout toevoegen is daarom een eitje. Waarschijnlijk publiceer ik het in de toekomst als open source, maar daarvoor wil eerst m'n eigen oneffenheden hebben weggewerkt.
Na het klikken op "Login to Spotify" krijg ik een tijdje "Laden te zien" om daarna weer terug te komen op het scherm met de knop "Login to Spotify".
Android 9 op een Nokia 8 hier.
![]() | ![]() |
Klikken op de thumbnails voor de originele grootte.
Mijn suggestie om toe te voegen:
Als je in een afspeellijst zit dan wat kleiner in een hoekje rechtsonder of zo tonen wat het volgende nummer is.
@MichielPHJoen schreef op maandag 17 augustus 2020 @ 13:30:
[...]
Dit lijkt mij een best geinige handige app. Ik krijg hem alleen niet gekoppeld aan mijn Spotify Premium.
Na het klikken op "Login to Spotify" krijg ik een tijdje "Laden te zien" om daarna weer terug te komen op het scherm met de knop "Login to Spotify".
Android 9 op een Nokia 8 hier.
Hier hetzelfde probleem. Na klikken op de knop zie ik 1 seconde "laden", waarna ik weer terug ben bij het startscherm
Device:
Xiaomi Mi 9T Pro
Android 10
MIUI 12.0.1 Global
https://ifuckinghateJira.com
@CodeCaster: Ik kan niet anders dan concluderen dat Bas170 en Maarten van Rossem gelijk hebben
Let op:
Dit topic is alleen bedoeld om zelfgemaakte tools te showen en te bespreken. Net als in de rest van Programming is het hier dus ook niet toegestaan om 'even te vragen of iemand iets kan maken'. Dit is een forum over zelf programmeren, geen McDonalds afhaalbalie voor lappen code of software.
Dit topic is alleen bedoeld om zelfgemaakte tools te showen en te bespreken. Net als in de rest van Programming is het hier dus ook niet toegestaan om 'even te vragen of iemand iets kan maken'. Dit is een forum over zelf programmeren, geen McDonalds afhaalbalie voor lappen code of software.