Toon posts:

[Alg] Welke tools heb jij gemaakt? - deel IV Vorige deelOverzicht

Pagina: 1 ... 48 ... 51 Laatste
Acties:

Onderwerpen


Acties:
  • +1Henk 'm!

  • Marcel317
  • Registratie: December 2012
  • Laatst online: 27-03 16:02
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. ;)

Acties:
  • +1Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 27-03 08:58
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. ;)
Kun je die delen?
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!!


Acties:
  • 0Henk 'm!

  • Marcel317
  • Registratie: December 2012
  • Laatst online: 27-03 16:02
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
Ik ben de laatste dingetjes aan het afronden, als ik 'm af heb zal ik 'm zeker delen! :)

Acties:
  • 0Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 21:58
boe2 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.
Nee joh, in een Access database :)
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]

Roomba E5 te koop


Acties:
  • +1Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 27-03 16:16
sig69 schreef op zondag 21 juli 2019 @ 23:35:
[...]

Nee joh, in een Access database :)

>:)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • +2Henk 'm!

  • Nilltris
  • Registratie: Mei 2011
  • Laatst online: 27-03 10:16
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!
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

Acties:
  • +8Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 22-03 21:34
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

Door fouten te maken, verdien je geld.


  • dimmak
  • Registratie: December 2006
  • Laatst online: 27-03 08:29
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
Dit is best cool eigenlijk. Jammer dat mijn woonplaats geen openbare dataset heeft.

  • VeQVQUCjsxagUCH
  • Registratie: Juni 2015
  • Laatst online: 26-03 11:22
Op zoek naar een goede twee-factor authenticatie app? In mijn vrije tijd heb ik Raivo OTP ontwikkeld!

⚡ Raivo OTP

Raivo OTP synchroniseert je one-time passwords (OTP's) naar al je iDevices door middel van iCloud. De app ondersteund zowel time-based (TOTP) als counter-based (HOTP) tokens.

Onderstaand een lijstje van de huidige features:
  • Synchroniseer je OTP's automagisch naar iCloud
  • Voeg aangepaste logo's toe voor je OTP's
  • Exporteer OTP's naar een AES versleuteld archief
  • Scan een QR-code of voeg handmatig een OTP toe
  • Toon de huidige en vorige tokens
  • Zoeken aan de hand van 'fuzzy' search
  • Optionele FaceID of TouchID ontgrendeling
  • De app is ontzettend snel (native, gemaakt in Swift 5)
  • Je data is veilig (zie de security policy voor meer info)
  • De app is volledig open-source (zie GitHub)


Source: GitHub
Download: AppStore

En hier is een lijst met dingen waar ik me aan irriteerde in andere OTP-apps :( :
  • Ontbrekende zoekmogelijkheden (terwijl ik >30 tokens heb)
  • De token dat veranderde terwijl ik nog niet klaar was met typen
  • Mijn eigen icoontjes/logo's niet kunnen toevoegen
  • Ontbrekende exportfunctionaliteit (naar mijn eigen back-up schijf)
  • Ontbrekende synchronisatiefunctionaliteit
  • Sommige apps zijn niet native en ondersteunen geen iOS gestures
  • Ontbrekende HOTP (counter-based) OTP-ondersteuning
  • Ontbrekende functionaliteit (b.v. de OTP seed bewerken)

  • RobIII
  • Registratie: December 2001
  • Laatst online: 01:52

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • VeQVQUCjsxagUCH
  • Registratie: Juni 2015
  • Laatst online: 26-03 11:22
VeQVQUCjsxagUCH schreef op dinsdag 13 augustus 2019 @ 21:13:
Op zoek naar een goede twee-factor authenticatie app? In mijn vrije tijd heb ik Raivo OTP ontwikkeld!

⚡ Raivo OTP

Raivo OTP synchroniseert je one-time passwords (OTP's) naar al je iDevices door middel van iCloud. De app ondersteund zowel time-based (TOTP) als counter-based (HOTP) tokens.

Onderstaand een lijstje van de huidige features:
  • Synchroniseer je OTP's automagisch naar iCloud
  • Voeg aangepaste logo's toe voor je OTP's
  • Exporteer OTP's naar een AES versleuteld archief
  • Scan een QR-code of voeg handmatig een OTP toe
  • Toon de huidige en vorige tokens
  • Zoeken aan de hand van 'fuzzy' search
  • Optionele FaceID of TouchID ontgrendeling
  • De app is ontzettend snel (native, gemaakt in Swift 5)
  • Je data is veilig (zie de security policy voor meer info)
  • De app is volledig open-source (zie GitHub)
[Afbeelding]

Source: GitHub
Download: AppStore

En hier is een lijst met dingen waar ik me aan irriteerde in andere OTP-apps :( :
  • Ontbrekende zoekmogelijkheden (terwijl ik >30 tokens heb)
  • De token dat veranderde terwijl ik nog niet klaar was met typen
  • Mijn eigen icoontjes/logo's niet kunnen toevoegen
  • Ontbrekende exportfunctionaliteit (naar mijn eigen back-up schijf)
  • Ontbrekende synchronisatiefunctionaliteit
  • Sommige apps zijn niet native en ondersteunen geen iOS gestures
  • Ontbrekende HOTP (counter-based) OTP-ondersteuning
  • Ontbrekende functionaliteit (b.v. de OTP seed bewerken)
Mochten er nog mensen willen migraten van Authy naar Raivo OTP. Bij deze de instructies waarmee de Authy Chrome extensie misbruikt kan worden om OTP's te extracten :)

  • Proxi
  • Registratie: April 2012
  • Laatst online: 24-03 20:49
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

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 27-03 16:16
Proxi schreef op zaterdag 31 augustus 2019 @ 20:38:
Zijn (nutteloze) over-engineered dingen hier ook toegestaan?
Wat mij betreft wel, graag zelfs :)

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.


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:17

Matis

Rubber Rocket

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
Ik kan het wel waarderen, al heeft het voor mij geen toegevoegde waarde.

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


  • Proxi
  • Registratie: April 2012
  • Laatst online: 24-03 20:49
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?
Nah, die sessie is allang niet meer geldig. Die is van gisteravond.
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.
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).

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 >:).

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 25-03 22:48

Douweegbertje

Wat kinderachtig.. godverdomme

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).

  • Luc45
  • Registratie: April 2019
  • Laatst online: 21:58
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).
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.

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 25-03 22:48

Douweegbertje

Wat kinderachtig.. godverdomme

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.
Ik wil ten eerste "consumers" kunnen aansluiten op de stream die specifieke dingen kunnen doen/zoeken.
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]


  • biomass
  • Registratie: Augustus 2004
  • Laatst online: 22:10
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?

  • Nindustries
  • Registratie: Januari 2012
  • Laatst online: 23-03 11:10
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

~ beware of misinformation.


  • Nindustries
  • Registratie: Januari 2012
  • Laatst online: 23-03 11:10
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.
Ter info: https://certstream.calidog.io/ }:O

~ beware of misinformation.


  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 27-03 08:40
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.
...
Mijn browsers vinden deze site niet lief... Het certificaat is niet in orde.

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 25-03 22:48

Douweegbertje

Wat kinderachtig.. godverdomme

- cali dog die wel een stream public heeft, echter is die super instabiel en lijkt ook niet alles aan data te hebben
;)
Acid_Burn schreef op donderdag 3 oktober 2019 @ 09:28:
[...]

Mijn browsers vinden deze site niet lief... Het certificaat is niet in orde.
Klopt, ik heb hem offline gehaald :)
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.

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 23:27
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).

[Voor 10% gewijzigd door BarôZZa op 27-11-2019 22:25]


  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 25-03 17:53
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).
Zodra die Firefox versie er is, ga ik m zeker installeren!
Ik trek ze nu vaak uit de network tab, maar das allemaal wel omslachtig

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 06-12-2022
Toffe extensie, nuttig! De overload aan console-meldingen is alleen wel irritant, zou fijn zijn als je dat zou willen aanpassen :)

Full-stack webdeveloper in Groningen


  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 23:27
Spinal 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 :)
Ai, dacht dat ik dat er nog uitgehaald had. Zal hem updaten idd. Thanks voor de melding

  • Chicken88
  • Registratie: Juli 2012
  • Laatst online: 16:55
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... :(

https://addons.cdn.mozilla.net/user-media/addon_icons/2609/2609410-64.png
Instagram endless scroll
Voor Chrome
Voor Firefox

Tweakers Topic Watcher | Hacker News Watcher


  • Firesphere
  • Registratie: September 2010
  • Laatst online: 20-03 23:23

Firesphere

Yoshis before Hoshis

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!


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:17

Matis

Rubber Rocket

Het antwoord op jouw vraag staat toch letterlijk in de laatste zin die je quote :?

[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


  • huiz
  • Registratie: Augustus 2001
  • Laatst online: 26-03 15:26
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).
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.

  • LuNaTiC
  • Registratie: Februari 2000
  • Niet online

LuNaTiC

Olijke schavuit

Handige extensie, dank _O_

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


  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 23:27
Firesphere schreef op vrijdag 29 november 2019 @ 22:58:
Nice, komt er een Firefox versie?


[...]
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 ;)
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.
Heb je toevallig een linkje naar een site waar het voorkomt?

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.

  • huiz
  • Registratie: Augustus 2001
  • Laatst online: 26-03 15:26
BarôZZa schreef op maandag 2 december 2019 @ 13:53:

[...]

Heb je toevallig een linkje naar een site waar het voorkomt?
..
Voorpagina AD, Afbeeldingenzoeker Google... overal wel.

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! _/-\o_

  • EfBe
  • Registratie: Januari 2000
  • Niet online
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

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • eenhoogh
  • Registratie: Januari 2014
  • Laatst online: 03-01 21:53
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!

[Voor 8% gewijzigd door eenhoogh op 05-02-2020 10:07]


  • Giesber
  • Registratie: Juni 2005
  • Laatst online: 27-03 15:27
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.

  • GrooV
  • Registratie: September 2004
  • Laatst online: 24-03 15:45
Giesber 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.
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 hebt

  • Nilltris
  • Registratie: Mei 2011
  • Laatst online: 27-03 10:16
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.

  • KoningsGap
  • Registratie: Augustus 2013
  • Laatst online: 16:19
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]
Mag ik vragen hoe je dit appje gemaakt hebt? Gebruik gemaakt van een framework als flutter of react?

  • eenhoogh
  • Registratie: Januari 2014
  • Laatst online: 03-01 21:53
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?
Ja, voor deze app heb ik inderdaad React Native gebruikt!

  • tjallo
  • Registratie: Januari 2014
  • Laatst online: 13-03 19:13
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

[Voor 3% gewijzigd door tjallo op 17-02-2020 15:16]

Doe wat je niet laten kan


  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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:

http://www.gamesdust.nl/uploads/3dc9150d71b81bbb63f5e2661715d64a.png

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


  • JapyDooge
  • Registratie: Juli 2002
  • Laatst online: 25-03 10:48

JapyDooge

NoxiousPluK

Ik kon niet slapen, dus maar gaan nerden en zojuist m'n eerste NuGet package gepublished :9
https://www.nuget.org/packages/MonoGame.Primitives2D

Nu het voorbeeldproject maar weer oppoetsen en in een aparte repository publishen :) :)


Edit: done *O*
https://github.com/DoogeJ/MonoGame.Primitives2D.Sample

[Voor 51% gewijzigd door JapyDooge op 19-02-2020 05:47]


  • PressPlayOnTape
  • Registratie: Augustus 2012
  • Laatst online: 24-03 14:00

PressPlayOnTape

Loading.. Ready... Run!

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 :)

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.


  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-



Ik heb de A* pathfinding nu aan mijn game toegevoegd. Maakt het spel in één klap echt een stuk moeilijker! :o


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


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:48
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.

PV Output


Acties:
  • +3Henk 'm!

  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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:

http://www.gamesdust.nl/uploads/441cf9e90b632df16595fb24215ee691.PNG
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... :P

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? 8)7

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


Acties:
  • +2Henk 'm!

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 20-03 23:23

Firesphere

Yoshis before Hoshis

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 :)

[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!


Acties:
  • 0Henk 'm!

  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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 :)
Ziet er leuk uit!

Paar dingetjes die ik zo snel tegenkom


Op mobiel loopt de tekst door het plaatje heen:



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


  • Firesphere
  • Registratie: September 2010
  • Laatst online: 20-03 23:23

Firesphere

Yoshis before Hoshis

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]
Dat was niet alleen op mobiel een probleem! :D Zou gefixed moeten zijn.
switchboy 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.
Ja, probleem met het menu, het doet niet in/uit klappen :/ Ik ben aan't uitzoeken waarom de boel niet hooked.

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

Also, er is een menu-button bovenaan ;) Die lastig te zien is door het wit op lichte achtergrond ;) Next up to fix :D Fixed

[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!


  • Firesphere
  • Registratie: September 2010
  • Laatst online: 20-03 23:23

Firesphere

Yoshis before Hoshis

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 :D )

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!


Acties:
  • +11Henk 'm!

  • julianf
  • Registratie: Februari 2016
  • Laatst online: 23-03 10:58
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! _/-\o_

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]


Acties:
  • +1Henk 'm!

  • JapyDooge
  • Registratie: Juli 2002
  • Laatst online: 25-03 10:48

JapyDooge

NoxiousPluK



Een update van NetPing met eigenlijk alleen wat bugfixes/opschonen :P

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

:)

  • Belindo
  • Registratie: December 2012
  • Laatst online: 21:00

Belindo

▶ ─🔘─────── 15:02

boe2 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.
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 :(

Coding in the cold; <brrrrr />


Acties:
  • +2Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Belindo 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 :(
"it works on my machine". Met die disclaimer achter de rug: Ik heb hem even op github gegooid :).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


Acties:
  • +1Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 21:00

Belindo

▶ ─🔘─────── 15:02

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 :).
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!

Coding in the cold; <brrrrr />


  • bluewalk
  • Registratie: Juli 2004
  • Niet online
Chicken88 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.
Het lijkt in de FireFox extensie niet meer mogelijk te zijn topics toe te voegen ;( wordt de extensie nog bijgehouden?

Acties:
  • +1Henk 'm!

  • Chicken88
  • Registratie: Juli 2012
  • Laatst online: 16:55
bluewalk schreef op dinsdag 24 maart 2020 @ 09:26:
[...]


Het lijkt in de FireFox extensie niet meer mogelijk te zijn topics toe te voegen ;( wordt de extensie nog bijgehouden?
He, 'k heb het direct even getest en het lijkt hier nog wel gewoon te werken.
Heb je wat meer informatie voor me? Versie FF ofzo? (mag ook in DM)

Tweakers Topic Watcher | Hacker News Watcher


  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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.

My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83


  • WK100
  • Registratie: Februari 2011
  • Laatst online: 26-02 18:13

WK100

Zeer baas.

@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.

[Voor 7% gewijzigd door WK100 op 27-03-2020 16:23]


Acties:
  • +3Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 20:34

ElCondor

Geluk is Onmisbaar

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.
Wat ga je doen tijdens de quarantaine?

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. >:) De URL is nog steeds hetzelfde.

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. O-)

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)


Acties:
  • +1Henk 'm!

  • ThinkCreative
  • Registratie: Oktober 2009
  • Laatst online: 24-03 08:40
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. :)

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
    }

Acties:
  • +1Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Na het zien van dit: YouTube: YouTube

Leek het me wel leuk om het na te maken:

https://tweakers.net/i/f_blDVtddsN_5O1tHk3T2eFw_vc=/100x75/filters:gifsicle():strip_exif()/f/image/F58NTE2wj14RncLwZ63alTTu.gif?f=fotoalbum_small

Het is nog wat ruw. maar het idee is er.

Less alienation, more cooperation.


  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 20:34

ElCondor

Geluk is Onmisbaar

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.
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... :X

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • +1Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

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... :X
Dat had ik ook, ik had het idee om een tweede camera te maken die het bord rendered.

Less alienation, more cooperation.


Acties:
  • +1Henk 'm!

  • Sharkware
  • Registratie: November 2003
  • Laatst online: 21:44
ElCondor 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. :)
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?

Acties:
  • +5Henk 'm!

  • Redsandro
  • Registratie: Januari 2007
  • Niet online
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

🤘 Amp.lol. No bloat, just radio. ☕ Ninite-killer. 1000+ packages. ⛟


  • bertware
  • Registratie: December 2013
  • Laatst online: 25-03 11:47
@Redsandro 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?

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 20:34

ElCondor

Geluk is Onmisbaar

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?
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. ;)

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • +1Henk 'm!

  • Redsandro
  • Registratie: Januari 2007
  • Niet online
bertware schreef op woensdag 1 april 2020 @ 09:22:
@Redsandro 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
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.

Want het grootste publiek zit in India. Tot een paar jaar terug was alles compatible met Internet Explorer uit Windows XP :') Uit analytics bleek dat veel bezoekers met dergelijke browsers op oude hardware kwamen. Inmiddels heb ik dat wel laten varen want het is (bijna) niet te doen om een beetje een moderne site zo ver backwards compatible te houden. Kost gewoon te veel tijd.
dat is dan ook maar 1 categorie en op een aparte pagina.
Een categorie kan heel ruim zijn. Deze pagina bijvoorbeeld moet eigenlijk nodig opnieuw opgesplitst worden.

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". d:)b Disclaimer: Dit is een slow-motion project. Low hanging fruit first.

🤘 Amp.lol. No bloat, just radio. ☕ Ninite-killer. 1000+ packages. ⛟


  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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.
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. :X

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


Acties:
  • +11Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19:18
Een paar zaken gemaakt die nu in coronatijd goed uitkomen en we hebben ze al een aantal keer succesvol op 't werk gebruikt :D


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]


  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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


  • Chloortablet
  • Registratie: Augustus 2015
  • Niet online

Chloortablet

Atoomnummer 17

Het is niet echt een nuttige tool, maar het heeft toch weer voor een paar uur amusement gezorgd in deze quarantaine-tijd :z .

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 :+ .


  • DutchITMaster
  • Registratie: Augustus 2004
  • Laatst online: 18:41

DutchITMaster

Pay peanuts, get monkeys.

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 :D
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.

Netwerk Engineer


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19:18
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.
Wat bedoel je?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • DutchITMaster
  • Registratie: Augustus 2004
  • Laatst online: 18:41

DutchITMaster

Pay peanuts, get monkeys.

Deed een pull request en hij kon hem niet naar binnen halen

Netwerk Engineer


Acties:
  • +3Henk 'm!

  • OverSoft
  • Registratie: December 2000
  • Laatst online: 25-03 21:37
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.

Acties:
  • +3Henk 'm!

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 :9 )

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).







[Voor 53% gewijzigd door Anoniem: 674295 op 13-04-2020 13:55. Reden: Even mijn email weggepoetst]


  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

Anoniem: 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 :9 )

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]
Zoiets zouden we op de soos gehad moeten hebben. Hoeveel barkaarten wel niet zoekgeraakt zijn :'(

My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83


Anoniem: 674295

nou als er animo voor is, wil ik best het best delen hoor ;)

  • AlexFL
  • Registratie: December 2006
  • Laatst online: 22:29
Anoniem: 674295 schreef op maandag 13 april 2020 @ 17:10:
nou als er animo voor is, wil ik best het best delen hoor ;)
Zou tof zijn als je het zou willen delen.

Acties:
  • +1Henk 'm!

  • Athylus
  • Registratie: September 2012
  • Laatst online: 13-06-2022
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/

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 23-03 22:44
@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.

  • dimmak
  • Registratie: December 2006
  • Laatst online: 27-03 08:29
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/
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?

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 20:44
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?
Uiteindelijk met als doel om een RSS feed van dumper filmpjes te krijgen. Zou top zijn!

Acties:
  • +3Henk 'm!

  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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!

[Voor 7% gewijzigd door switchboy op 28-04-2020 15:20]

My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83


Acties:
  • +1Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 15-03 12:12
switchboy 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
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 :)

  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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 :)
Ja klopt. Alleen ziet dat werken in Unity er wel fancy uit zeg! :o

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! O-)

My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83


Acties:
  • 0Henk 'm!

  • biomass
  • Registratie: Augustus 2004
  • Laatst online: 22:10
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

Acties:
  • +2Henk 'm!

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 01:04

ZaZ

Tweakers abonnee

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.

Lekker op de bank


Acties:
  • +1Henk 'm!

  • switchboy
  • Registratie: September 2002
  • Laatst online: 13-03 21:11

switchboy

-ruimte te huur-

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

My Steam Profile (Name Switch) Worth: 889€ (225€ with sales)Games owned: 83


Acties:
  • +2Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 02:14
@switchboy, leuke devblog! Je stem doet me een beetje denken aan Slimme Schemer :)

Acties:
  • 0Henk 'm!

  • dimmak
  • Registratie: December 2006
  • Laatst online: 27-03 08:29
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).
Komt er nog een FireFox versie? :)

  • nielsnl68
  • Registratie: September 2016
  • Laatst online: 16-12-2022
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.



  • DenBeke
  • Registratie: September 2014
  • Laatst online: 27-03 15:24
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.

[Voor 10% gewijzigd door DenBeke op 04-08-2020 10:38]


  • MichielPH
  • Registratie: Februari 2005
  • Laatst online: 18-03 11:16
Een hele simpele app gemaakt die het huidige nummer van Spotify toont.
https://play.google.com/s...com.glitch.coverframe.app




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.

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 18-03 11:50
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.
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.


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.

  • Bas170
  • Registratie: April 2010
  • Laatst online: 21:27

Bas170

Sir Miss-a-Lot

Joen 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.
@MichielPH
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

PSN: Bas170 | Hier had wat nuttigs kunnen staan
Російський військовий корабель, іди на хуй

Pagina: 1 ... 48 ... 51 Laatste

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.

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee