[{"data":1,"prerenderedAt":790},["ShallowReactive",2],{"collection-blogs--1219277129":3,"_apollo:default":789},{"data":4,"meta":786},[5],{"id":6,"title":7,"excerpt":8,"slug":9,"createdAt":10,"updatedAt":11,"publishedAt":12,"backDate":13,"documentId":14,"imageUrl":15,"expertises":58,"author":530,"blocks":556,"seo":752},8,"Pixel display aansturen met .NET. Kunnen wij het maken? Nou en of!","Het internet staat tegenwoordig vol met Pixel Displays zoals de Divoom Pixoo-64 of misschien wel de bekendste, de LaMetric clock. Maar de prijzen van deze displays schrokken mij nogal af. Toen kwam ik op Amazon de Coolwell RGB Full-Color LED Matrix Panel tegen. \n\n","pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of","2023-10-13T10:26:23.262Z","2025-04-15T11:34:40.695Z","2023-10-13T10:26:22.902Z","2023-06-22","rynl3tb39snhousgy4iruf52",{"id":16,"name":17,"alternativeText":18,"caption":18,"width":19,"height":20,"formats":21,"hash":51,"ext":23,"mime":26,"size":52,"url":53,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":55,"updatedAt":55,"documentId":56,"publishedAt":57},257,"pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of.jpg",null,1280,500,{"large":22,"small":31,"medium":37,"thumbnail":44},{"ext":23,"url":24,"hash":25,"mime":26,"name":27,"path":18,"size":28,"width":29,"height":30},".jpg","https://incredible-beef-2a6059b946.media.strapiapp.com/large_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f.jpg","large_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f","image/jpg","large_pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of.jpg",42.74,1000,391,{"ext":23,"url":32,"hash":33,"mime":26,"name":34,"path":18,"size":35,"width":20,"height":36},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f.jpg","small_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f","small_pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of.jpg",15.68,195,{"ext":23,"url":38,"hash":39,"mime":26,"name":40,"path":18,"size":41,"width":42,"height":43},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f.jpg","medium_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f","medium_pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of.jpg",28.32,750,293,{"ext":23,"url":45,"hash":46,"mime":26,"name":47,"path":18,"size":48,"width":49,"height":50},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f.jpg","thumbnail_pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f","thumbnail_pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of.jpg",4.94,245,96,"pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f",59.84,"https://incredible-beef-2a6059b946.media.strapiapp.com/pixel_display_aansturen_met_net_kunnen_wij_het_maken_nou_en_of_b8017f4e8f.jpg","strapi-provider-upload-strapi-cloud","2023-10-13T10:21:13.455Z","veo1p87gd1lc7cqrt9d10phf","2026-01-05T12:38:34.018Z",[59,253],{"id":60,"title":61,"subTitle":62,"description":63,"shortDescription":64,"slug":65,"createdAt":66,"updatedAt":67,"publishedAt":68,"isCoreExpertise":69,"documentId":70,"image":71,"blocks":90,"midPageBlocks":153,"seo":18},3,"Microsoft .NET","Maatwerkoplossingen voor ieder vraagstuk","Ons team van .NET-experts staat niet alleen klaar om onze klanten te ondersteunen bij diverse implementatie uitdagingen, maar we zijn ook gespecialiseerd in het testen van applicaties op verschillende niveaus, zoals unit tests, integratietests en acceptatietests. We streven naar uitmuntende testdekking om de stabiliteit en betrouwbaarheid van de applicaties te waarborgen.\n\nDaarnaast zijn we bedreven in het gebruik van verschillende Azure-services om schaalbare en veilige oplossingen te bieden aan onze klanten. Zo bieden we met Azure DevOps krachtige tools voor het beheren van de ontwikkeling, het automatiseren van tests en het geautomatiseerd uitrollen naar acceptatie- of productieomgevingen met CI/CD-pipelines.\n\nHet samenwerken met onze klanten staat centraal in ons werk, en we denken proactief mee om samen de meest optimale oplossingen te realiseren.","In de praktijk komen de .NET developers van ShareValue terecht in allerlei verschillende branches met uiteenlopende technische uitdagingen.","dotnet","2023-08-17T11:19:57.991Z","2024-12-13T12:16:04.480Z","2023-08-17T11:22:08.050Z",false,"v9pl553hsjk98esvs5gzoso3",{"id":72,"name":73,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":76,"hash":85,"ext":78,"mime":81,"size":86,"url":87,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":88,"updatedAt":88,"documentId":89,"publishedAt":57},17,"dotnet_logo.png",282,130,{"thumbnail":77},{"ext":78,"url":79,"hash":80,"mime":81,"name":82,"path":18,"size":83,"width":49,"height":84},".png","https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_dotnet_logo_d38dbc3865.png","thumbnail_dotnet_logo_d38dbc3865","image/png","thumbnail_dotnet_logo.png",7.14,113,"dotnet_logo_d38dbc3865",2.93,"https://incredible-beef-2a6059b946.media.strapiapp.com/dotnet_logo_d38dbc3865.png","2023-08-17T09:47:56.313Z","nnimzsossci29qmi8z0texlp",[91,131],{"__component":92,"id":93,"title":94,"aside":18,"postType":95,"limit":60,"expertise":96},"strapi.related-kennisbank-list",167," Lees meer over .NET Development","alle",[97],{"id":60,"title":61,"subTitle":62,"description":63,"shortDescription":64,"slug":65,"createdAt":66,"updatedAt":67,"publishedAt":68,"isCoreExpertise":69,"documentId":70,"image":98,"blocks":101,"midPageBlocks":110,"seo":18},{"id":72,"name":73,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":99,"hash":85,"ext":78,"mime":81,"size":86,"url":87,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":88,"updatedAt":88,"documentId":89,"publishedAt":57},{"thumbnail":100},{"ext":78,"url":79,"hash":80,"mime":81,"name":82,"path":18,"size":83,"width":49,"height":84},[102,103],{"__component":92,"id":93,"title":94,"aside":18,"postType":95,"limit":60},{"__component":104,"id":105,"titleLeft":106,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":109,"callToActionTextRight":107,"callToActionLinkUrlRight":108},"call-to-action.double",212,"Heb je een .NET expert nodig?","Neem contact met ons op","/contact","Weten welke expert op dit moment beschikbaar is?",[111,117,121,125],{"__component":112,"id":113,"title":114,"subTitle":18,"content":115,"callToActionText":116,"callToActionLink":108,"colorStyle":18,"showAsides":18},"global.alternating-page-section",36,"Bouwen en testen","Onze .NET-experts kunnen uiteraard goede en betrouwbare applicaties ontwikkelen met de laatste .NET-versies. Ook zijn onze collega’s ervaren in het onderhouden van oudere software. We kunnen je helpen met het upgraden en uitbreiden van je applicatie zodat deze aan de laatste wensen en eisen voldoet. Het uitvoeren van uitgebreide unit- en integratietests om de stabiliteit van applicaties te waarborgen, wordt meegenomen als standaard onderdeel van het werk. Met een focus op grondige testdekking streven we ernaar om eventuele bugs vroegtijdig op te sporen en op te lossen, waardoor de algehele kwaliteit van jouw product wordt verbeterd.  \n\nVan Blazor Front-End of REST API’s tot database communicatie, onze .NET-experts hebben er ruime ervaring mee.","Weten wat onze experts voor jou kunnen doen?",{"__component":112,"id":118,"title":119,"subTitle":18,"content":120,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},37,"Combineren met Azure","Wil je profiteren van Azure-services voor jouw project? Ons team van experts kan je helpen met het selecteren en opzetten van de juiste services. Of je gebruik wil maken van App services, Function Apps, storage of database oplossingen of bijvoorbeeld een Service Bus, onze experts kunnen je helpen bij het kiezen en het realiseren van stabiele, schaalbare en veilige oplossingen die voldoen aan jouw specifieke behoeften.",{"__component":112,"id":122,"title":123,"subTitle":18,"content":124,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},35,"Houd het veilig!","Om de toegang tot je producten veilig te houden, kan ons team van .NET-experts je helpen bij het opzetten en onderhouden van authenticatie en autorisatie. Onze experts zijn ervaren in het opzetten de juiste entra diensten zodat de toegang tot zowel Front-End als Back-End of deamon-processen op een juiste manier afgehandeld wordt. Ook kunnen we je helpen met het opzetten van verschillende groepen, rechten en rollen, en deze op de juiste manier toepassen binnen de applicatie zodat onterechte toegang op functieniveau geregeld kan worden. Bij het opzetten en implementeren wordt er rekening gehouden met het reduceren van de administratieve overhead zonder concessies te doen aan de beveiliging.",{"__component":126,"id":127,"title":128,"callToActionText":129,"callToActionLinkUrl":130,"body":18},"call-to-action.single",46,"Wil je weten wat onze collega's allemaal kunnen?","Lees de klantcase over ons werk bij KPN","/klantcases/de-continue-bereikbaarheid-van-een-alarmcentrale",{"__component":104,"id":105,"titleLeft":106,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":109,"callToActionTextRight":107,"callToActionLinkUrlRight":108,"iconUrlLeft":132,"iconUrlRight":145},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},6,"bulb.svg",71,70,"bulb_dd2e1d4efb",".svg","image/svg+xml",3.75,"https://incredible-beef-2a6059b946.media.strapiapp.com/bulb_dd2e1d4efb.svg","2023-08-17T08:31:37.036Z","2025-04-01T14:08:08.648Z","l2lglwkh4lf7ip36sjvs42rc",{"id":146,"name":147,"alternativeText":18,"caption":18,"width":136,"height":136,"formats":18,"hash":148,"ext":138,"mime":139,"size":149,"url":150,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":151,"updatedAt":151,"documentId":152,"publishedAt":57},250,"looking-glass.svg","looking_glass_cfa3801802",0.6,"https://incredible-beef-2a6059b946.media.strapiapp.com/looking_glass_cfa3801802.svg","2023-10-11T09:43:10.911Z","suv3p7h0kw7jdnuddk1l2rdu",[154,191,221,251],{"__component":112,"id":113,"title":114,"subTitle":18,"content":115,"callToActionText":116,"callToActionLink":108,"colorStyle":18,"showAsides":18,"imageUrl":155},{"id":156,"name":157,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":159,"hash":186,"ext":23,"mime":163,"size":187,"url":188,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":189,"updatedAt":189,"documentId":190,"publishedAt":57},790,"code matrix.jpg",850,{"large":160,"small":167,"medium":173,"thumbnail":179},{"ext":23,"url":161,"hash":162,"mime":163,"name":164,"path":18,"size":165,"width":29,"height":166},"https://incredible-beef-2a6059b946.media.strapiapp.com/large_code_matrix_939256fff4.jpg","large_code_matrix_939256fff4","image/jpeg","large_code matrix.jpg",164.22,664,{"ext":23,"url":168,"hash":169,"mime":163,"name":170,"path":18,"size":171,"width":20,"height":172},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_code_matrix_939256fff4.jpg","small_code_matrix_939256fff4","small_code matrix.jpg",42.02,332,{"ext":23,"url":174,"hash":175,"mime":163,"name":176,"path":18,"size":177,"width":42,"height":178},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_code_matrix_939256fff4.jpg","medium_code_matrix_939256fff4","medium_code matrix.jpg",97.04,498,{"ext":23,"url":180,"hash":181,"mime":163,"name":182,"path":18,"size":183,"width":184,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_code_matrix_939256fff4.jpg","thumbnail_code_matrix_939256fff4","thumbnail_code matrix.jpg",8.35,235,156,"code_matrix_939256fff4",258.04,"https://incredible-beef-2a6059b946.media.strapiapp.com/code_matrix_939256fff4.jpg","2024-08-09T08:30:59.615Z","s5v68ezvz0ho9m6ot0mbk8z2",{"__component":112,"id":118,"title":119,"subTitle":18,"content":120,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18,"imageUrl":192},{"id":193,"name":194,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":195,"hash":216,"ext":23,"mime":163,"size":217,"url":218,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":219,"updatedAt":219,"documentId":220,"publishedAt":57},791,"service bus.jpg",{"large":196,"small":201,"medium":206,"thumbnail":211},{"ext":23,"url":197,"hash":198,"mime":163,"name":199,"path":18,"size":200,"width":29,"height":166},"https://incredible-beef-2a6059b946.media.strapiapp.com/large_service_bus_2b48e3a7cc.jpg","large_service_bus_2b48e3a7cc","large_service bus.jpg",82.82,{"ext":23,"url":202,"hash":203,"mime":163,"name":204,"path":18,"size":205,"width":20,"height":172},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_service_bus_2b48e3a7cc.jpg","small_service_bus_2b48e3a7cc","small_service bus.jpg",29.35,{"ext":23,"url":207,"hash":208,"mime":163,"name":209,"path":18,"size":210,"width":42,"height":178},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_service_bus_2b48e3a7cc.jpg","medium_service_bus_2b48e3a7cc","medium_service bus.jpg",54.72,{"ext":23,"url":212,"hash":213,"mime":163,"name":214,"path":18,"size":215,"width":184,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_service_bus_2b48e3a7cc.jpg","thumbnail_service_bus_2b48e3a7cc","thumbnail_service bus.jpg",8.71,"service_bus_2b48e3a7cc",117.51,"https://incredible-beef-2a6059b946.media.strapiapp.com/service_bus_2b48e3a7cc.jpg","2024-08-09T08:35:35.231Z","rbpawsulv6vrsistrk2yupwg",{"__component":112,"id":122,"title":123,"subTitle":18,"content":124,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18,"imageUrl":222},{"id":223,"name":224,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":225,"hash":246,"ext":23,"mime":163,"size":247,"url":248,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":249,"updatedAt":249,"documentId":250,"publishedAt":57},792,"security dotnet.jpg",{"large":226,"small":231,"medium":236,"thumbnail":241},{"ext":23,"url":227,"hash":228,"mime":163,"name":229,"path":18,"size":230,"width":29,"height":166},"https://incredible-beef-2a6059b946.media.strapiapp.com/large_security_dotnet_a65d687baf.jpg","large_security_dotnet_a65d687baf","large_security dotnet.jpg",38.7,{"ext":23,"url":232,"hash":233,"mime":163,"name":234,"path":18,"size":235,"width":20,"height":172},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_security_dotnet_a65d687baf.jpg","small_security_dotnet_a65d687baf","small_security dotnet.jpg",13.37,{"ext":23,"url":237,"hash":238,"mime":163,"name":239,"path":18,"size":240,"width":42,"height":178},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_security_dotnet_a65d687baf.jpg","medium_security_dotnet_a65d687baf","medium_security dotnet.jpg",24.75,{"ext":23,"url":242,"hash":243,"mime":163,"name":244,"path":18,"size":245,"width":184,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_security_dotnet_a65d687baf.jpg","thumbnail_security_dotnet_a65d687baf","thumbnail_security dotnet.jpg",4.63,"security_dotnet_a65d687baf",57.25,"https://incredible-beef-2a6059b946.media.strapiapp.com/security_dotnet_a65d687baf.jpg","2024-08-09T08:36:56.895Z","srupv8bm7kvcgseu2efeadhk",{"__component":126,"id":127,"title":128,"callToActionText":129,"callToActionLinkUrl":130,"body":18,"imageUrl":252},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},{"id":254,"title":255,"subTitle":62,"description":256,"shortDescription":257,"slug":258,"createdAt":259,"updatedAt":260,"publishedAt":261,"isCoreExpertise":262,"documentId":263,"image":264,"blocks":279,"midPageBlocks":424,"seo":525},10,"Development","Ons Development-team biedt oplossingen die de verwachtingen van onze opdrachtgevers overtreffen. Wij zijn experts op het gebied van alle aspecten van Development, wat ons in staat stelt om veelzijdige en schaalbare oplossingen te creëren. Van gebruiksvriendelijke interfaces tot krachtige Back-End-architecturen: wij hebben de kennis en ervaring om jouw project tot een succes te maken.","Ons Development-team biedt oplossingen die de verwachtingen van onze opdrachtgevers overtreffen. Wij zijn experts op het gebied van alle aspecten van Development, wat ons in staat stelt om veelzijdige en schaalbare oplossingen te creëren. ","development","2024-12-13T12:15:40.484Z","2025-04-11T13:13:55.384Z","2024-12-13T12:15:42.976Z",true,"lpzfadokpxn5sdnx9czcdg47",{"id":265,"name":266,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":267,"hash":273,"ext":78,"mime":81,"size":274,"url":275,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":276,"updatedAt":277,"documentId":278,"publishedAt":57},950,"Logo Development 2025 web.png",{"thumbnail":268},{"ext":78,"url":269,"hash":270,"mime":81,"name":271,"path":18,"size":272,"width":49,"height":84},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_Logo_Development_2025_web_d7711df072.png","thumbnail_Logo_Development_2025_web_d7711df072","thumbnail_Logo Development 2025 web.png",8.58,"Logo_Development_2025_web_d7711df072",2,"https://incredible-beef-2a6059b946.media.strapiapp.com/Logo_Development_2025_web_d7711df072.png","2024-12-17T15:02:47.479Z","2024-12-19T08:35:22.054Z","okwfs117fps338v5fj5dnrpb",[280,403],{"__component":92,"id":281,"title":282,"aside":18,"postType":95,"limit":60,"expertise":283},179,"Lees meer over Development",[284,338,391],{"id":254,"title":255,"subTitle":62,"description":256,"shortDescription":257,"slug":258,"createdAt":259,"updatedAt":260,"publishedAt":261,"isCoreExpertise":262,"documentId":263,"image":285,"blocks":288,"midPageBlocks":296,"seo":321},{"id":265,"name":266,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":286,"hash":273,"ext":78,"mime":81,"size":274,"url":275,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":276,"updatedAt":277,"documentId":278,"publishedAt":57},{"thumbnail":287},{"ext":78,"url":269,"hash":270,"mime":81,"name":271,"path":18,"size":272,"width":49,"height":84},[289,290],{"__component":92,"id":281,"title":282,"aside":18,"postType":95,"limit":60},{"__component":104,"id":291,"titleLeft":292,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":293,"callToActionTextRight":294,"callToActionLinkUrlRight":295},251,"Heb je een Developer nodig?","Zoek je een nieuwe baan?","Bekijk onze vacatures","/word-onze-collega/vacatures",[297,302,307,311,316],{"__component":112,"id":298,"title":299,"subTitle":18,"content":300,"callToActionText":18,"callToActionLink":18,"colorStyle":301,"showAsides":69},47,"Optimale gebruikerservaring","Een goede Front-End is meer dan alleen een aantrekkelijke interface; het vormt de schakel tussen technologie en eindgebruiker. Onze Developers combineren hun kennis van frameworks zoals React, Angular en Vue met ervaring in geavanceerde technologieën zoals GraphQL en CI/CD pipelines. Dit stelt ons in staat om interactieve, intuïtieve en betrouwbare applicaties te ontwikkelen die voldoen aan de hoogste standaarden.\n\nWij werken nauw samen met UX-designers om via design patterns en design tokens een naadloze integratie van ontwerp naar functionaliteit te realiseren. Dankzij regelmatige LevelUp-sessies, interne projecten en kennisdeling blijven onze Front-End specialisten altijd up-to-date.","Sugar Glaze",{"__component":112,"id":303,"title":304,"subTitle":18,"content":305,"callToActionText":18,"callToActionLink":18,"colorStyle":306,"showAsides":69},49,"Betrouwbaarheid en schaalbaarheid","Voor robuuste Back-End-oplossingen vertrouwen we op onze kennis van .NET. Of het nu gaat om het bouwen van nieuwe applicaties, het onderhouden van bestaande software of het implementeren van geavanceerde authenticatie- en autorisatiesystemen: ons team levert maatwerk dat aansluit bij de specifieke wensen en behoeften van jouw organisatie.\n\nHierbij maken we onder andere gebruik van onze kennis van Azure-services zoals Function Apps, Service Bus en App Services, maar ook tools als Docker en Kubernetes om veilige, schaalbare oplossingen te realiseren.\n\nOnze focus op grondige tests – van unit tests tot integratietests – garandeert stabiliteit en betrouwbaarheid.","White",{"__component":112,"id":308,"title":309,"subTitle":18,"content":310,"callToActionText":18,"callToActionLink":18,"colorStyle":301,"showAsides":69},50,"Full-Stack mogelijkheden","Wat ons uniek maakt, is onze combinatie van Front-End en .NET-expertise. Onze Developers zijn niet alleen gespecialiseerd in het creëren van intuïtieve interfaces, maar beheersen ook de complexiteit van Back-End-architectuur en Azure-integraties. Dit maakt hen volwaardige Full-Stack Developers die moeiteloos schakelen tussen de verschillende onderdelen van jouw project.",{"__component":112,"id":312,"title":313,"subTitle":18,"content":314,"callToActionText":315,"callToActionLink":108,"colorStyle":306,"showAsides":69},48,"Samen naar succes","Onze aanpak is erop gericht om samen met jou het optimale resultaat te behalen. Door proactief mee te denken en onze kennis te delen, zorgen we ervoor dat jouw project voldoet aan de hoogste standaarden van gebruiksvriendelijkheid, betrouwbaarheid en veiligheid. Of het nu gaat om een tijdelijke versterking van je team of volledige projectondersteuning: ons Development-team staat voor je klaar.\n\nOntdek wat wij voor jouw project kunnen betekenen."," Neem contact met ons op voor meer informatie!",{"__component":126,"id":317,"title":318,"callToActionText":319,"callToActionLinkUrl":320,"body":18},103,"Wil je weten wat onze collega’s allemaal kunnen?","Lees de klantcase over ons werk bij Rovict","https://www.sharevalue.nl/klantcases/rovict-vernieuwt-leerlingadministratie-en-leerlingvolgsysteem-esis",{"id":322,"metaTitle":323,"metaDescription":324,"structuredData":325},27,"Maatwerk software & integraties – ShareValue Development","Van webapps tot koppelingen: onze developers bouwen slimme oplossingen die passen bij jouw Microsoft-omgeving.",{"url":326,"@type":327,"@context":328,"provider":329,"areaServed":333,"description":336,"serviceType":337},"https://www.sharevalue.nl/wat-we-doen/development","Service","https://schema.org",{"url":330,"name":331,"@type":332},"https://www.sharevalue.nl","ShareValue","Organization",{"name":334,"@type":335},"Nederland","Country","Onze developers realiseren maatwerkoplossingen binnen Microsoft-omgevingen. Denk aan webapplicaties, API-integraties, extensies voor Microsoft 365 en koppelingen met externe systemen. Technisch sterk én begrijpelijk ingericht.","Maatwerk softwareontwikkeling en integraties",{"id":274,"title":339,"subTitle":340,"description":341,"shortDescription":342,"slug":343,"createdAt":344,"updatedAt":345,"publishedAt":346,"isCoreExpertise":69,"documentId":347,"image":348,"blocks":362,"midPageBlocks":370,"seo":18},"Front-End","Steeds complexer en steeds belangrijker","In een online wereld vol moderne webapplicaties is een goede Front-End onmisbaar. Het is nodig om aan de behoeften en verwachtingen van de gebruikers te voldoen. De interactie voor de gebruiker moet daarbij zo snel en optimaal mogelijk zijn. Met trots kunnen wij zeggen dat juist dáár de kracht van onze Front-End Developers zit.\n\nOnze ervaren Developers staan klaar om jouw team te versterken en te zorgen voor een optimale gebruikerservaring. Of je nu een tijdelijke aanvulling op je team nodig hebt of op zoek bent naar gespecialiseerde kennis voor een specifiek project, onze Front-End Developers zijn uitgerust om de uitdagingen van onze klanten aan te gaan en hun doelen te bereiken.","Onze Front-End developers zijn bedreven in diverse programmeertalen, frameworks en methodieken en daardoor breed inzetbaar.","front-end","2023-08-17T09:50:12.632Z","2024-12-13T12:15:57.609Z","2023-08-17T09:50:14.418Z","l6bdicvjcb7ue03zpciuc888",{"id":349,"name":350,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":351,"hash":357,"ext":78,"mime":81,"size":358,"url":359,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":360,"updatedAt":360,"documentId":361,"publishedAt":57},15,"frontend.png",{"thumbnail":352},{"ext":78,"url":353,"hash":354,"mime":81,"name":355,"path":18,"size":356,"width":49,"height":84},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_frontend_d8fa4dbfc1.png","thumbnail_frontend_d8fa4dbfc1","thumbnail_frontend.png",5.3,"frontend_d8fa4dbfc1",1.19,"https://incredible-beef-2a6059b946.media.strapiapp.com/frontend_d8fa4dbfc1.png","2023-08-17T09:47:56.273Z","gyo35xg1rnualaf1vog9edz8",[363,367],{"__component":92,"id":364,"title":365,"aside":366,"postType":95,"limit":60},161,"Lees meer over Front-End Development","Onze blogs",{"__component":104,"id":368,"titleLeft":369,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":293,"callToActionTextRight":294,"callToActionLinkUrlRight":295},210,"Heb je een Front-End Developer nodig?",[371,376,380,384,388],{"__component":112,"id":372,"title":373,"subTitle":18,"content":374,"callToActionText":375,"callToActionLink":108,"colorStyle":18,"showAsides":18},20,"Experts in verschillende frameworks","De huidige markt wordt al enige jaren gedomineerd door de drie grote Front-End frameworks: Angular, Vue en React. Voor elk framework hebben wij experts die altijd up-to-date blijven van de laatste ontwikkelingen. Hierdoor kunnen wij aan alle wensen voldoen. Het houdt de interactie binnen het team ook levendig; we sparren vaak en organiseren regelmatig LevelUp-sessies om elkaar op de hoogte te houden.","Neem contact op voor de mogelijkheden",{"__component":112,"id":377,"title":378,"subTitle":18,"content":379,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},22,"Meer dan HTML, CSS en Javascript","Over het algemeen bestaat een Front-End framework uit HTML, CSS en Javascript, maar als Front-End competence in een multidisciplinaire agile omgeving doen we steeds meer. Of het nu gaat om de integratie van middleware zoals GraphQL of het inrichten van een pipeline voor productie- en staging-omgevingen. Wij weten wat we ermee moeten doen. Onze experts zijn zeer bekwaam en ervaren in de samenwerking met UX-designers. Door het gebruik van design patterns en design tokens zorgen ze voor een naadloze integratie van ontwerp naar ontwikkeling.",{"__component":112,"id":381,"title":382,"subTitle":18,"content":383,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},21,"Kennis up-to-date","De Front-End Developers krijgen ruim de mogelijkheid om hun kennis up-to-date te houden door trainingen te volgen en evenementen te bezoeken. Maar wat is leerzamer dan de opgedane kennis in de praktijk brengen? Daarvoor hebben we binnen ShareValue een aantal interne projecten lopen zoals de herbouw van onze website met Nuxt met een Strapi CMS, en de ontwikkeling van een eigen CV-generator met Angular. De kennis die onze experts opdoen, delen zij regelmatig in blogs.",{"__component":112,"id":385,"title":386,"subTitle":18,"content":387,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},23,"Full-Stack Development","Onze Developers zijn niet alleen experts in Front-End technieken, maar ook getraind in .NET en Azure. Dit verbreedt hun vaardigheden en maakt hen volwaardige Full-Stack Developers. Wat natuurlijk niet wegneemt dat wij trots zijn op onze specialistische kennis als Front-End Developers. ",{"__component":126,"id":389,"title":128,"callToActionText":319,"callToActionLinkUrl":390,"body":18},100,"/klantcases/rovict-vernieuwt-leerlingadministratie-en-leerlingvolgsysteem-esis",{"id":60,"title":61,"subTitle":62,"description":63,"shortDescription":64,"slug":65,"createdAt":66,"updatedAt":67,"publishedAt":68,"isCoreExpertise":69,"documentId":70,"image":392,"blocks":395,"midPageBlocks":398,"seo":18},{"id":72,"name":73,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":393,"hash":85,"ext":78,"mime":81,"size":86,"url":87,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":88,"updatedAt":88,"documentId":89,"publishedAt":57},{"thumbnail":394},{"ext":78,"url":79,"hash":80,"mime":81,"name":82,"path":18,"size":83,"width":49,"height":84},[396,397],{"__component":92,"id":93,"title":94,"aside":18,"postType":95,"limit":60},{"__component":104,"id":105,"titleLeft":106,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":109,"callToActionTextRight":107,"callToActionLinkUrlRight":108},[399,400,401,402],{"__component":112,"id":113,"title":114,"subTitle":18,"content":115,"callToActionText":116,"callToActionLink":108,"colorStyle":18,"showAsides":18},{"__component":112,"id":118,"title":119,"subTitle":18,"content":120,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},{"__component":112,"id":122,"title":123,"subTitle":18,"content":124,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18},{"__component":126,"id":127,"title":128,"callToActionText":129,"callToActionLinkUrl":130,"body":18},{"__component":104,"id":291,"titleLeft":292,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":293,"callToActionTextRight":294,"callToActionLinkUrlRight":295,"iconUrlLeft":404,"iconUrlRight":415},{"id":405,"name":406,"alternativeText":18,"caption":18,"width":407,"height":408,"formats":18,"hash":409,"ext":138,"mime":139,"size":410,"url":411,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":412,"updatedAt":413,"documentId":414,"publishedAt":57},7,"people.svg",83,60,"people_6bb632d0d7",1.47,"https://incredible-beef-2a6059b946.media.strapiapp.com/people_6bb632d0d7.svg","2023-08-17T08:31:37.039Z","2024-09-13T08:11:42.408Z","iyvqylwtkx5qokq2hk77ppgf",{"id":416,"name":417,"alternativeText":18,"caption":18,"width":303,"height":408,"formats":18,"hash":418,"ext":138,"mime":139,"size":419,"url":420,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":421,"updatedAt":422,"documentId":423,"publishedAt":57},372,"magnifier.svg","magnifier_d084afba36",1.05,"https://incredible-beef-2a6059b946.media.strapiapp.com/magnifier_d084afba36.svg","2023-11-03T11:13:25.446Z","2026-05-12T12:19:53.518Z","e7czsfz9jg7oi93q44vomebz",[425,455,462,493,523],{"__component":112,"id":298,"title":299,"subTitle":18,"content":300,"callToActionText":18,"callToActionLink":18,"colorStyle":301,"showAsides":69,"imageUrl":426},{"id":427,"name":428,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":429,"hash":450,"ext":23,"mime":163,"size":451,"url":452,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":453,"updatedAt":453,"documentId":454,"publishedAt":57},904,"development.jpg",{"large":430,"small":435,"medium":440,"thumbnail":445},{"ext":23,"url":431,"hash":432,"mime":163,"name":433,"path":18,"size":434,"width":29,"height":166},"https://incredible-beef-2a6059b946.media.strapiapp.com/large_development_6e5abdca44.jpg","large_development_6e5abdca44","large_development.jpg",129.5,{"ext":23,"url":436,"hash":437,"mime":163,"name":438,"path":18,"size":439,"width":20,"height":172},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_development_6e5abdca44.jpg","small_development_6e5abdca44","small_development.jpg",47.86,{"ext":23,"url":441,"hash":442,"mime":163,"name":443,"path":18,"size":444,"width":42,"height":178},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_development_6e5abdca44.jpg","medium_development_6e5abdca44","medium_development.jpg",86.06,{"ext":23,"url":446,"hash":447,"mime":163,"name":448,"path":18,"size":449,"width":184,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_development_6e5abdca44.jpg","thumbnail_development_6e5abdca44","thumbnail_development.jpg",14.65,"development_6e5abdca44",184.35,"https://incredible-beef-2a6059b946.media.strapiapp.com/development_6e5abdca44.jpg","2024-12-13T12:36:11.969Z","qqi9wubjpzs8w6daj98mtc7a",{"__component":112,"id":303,"title":304,"subTitle":18,"content":305,"callToActionText":18,"callToActionLink":18,"colorStyle":306,"showAsides":69,"imageUrl":456},{"id":193,"name":194,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":457,"hash":216,"ext":23,"mime":163,"size":217,"url":218,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":219,"updatedAt":219,"documentId":220,"publishedAt":57},{"large":458,"small":459,"medium":460,"thumbnail":461},{"ext":23,"url":197,"hash":198,"mime":163,"name":199,"path":18,"size":200,"width":29,"height":166},{"ext":23,"url":202,"hash":203,"mime":163,"name":204,"path":18,"size":205,"width":20,"height":172},{"ext":23,"url":207,"hash":208,"mime":163,"name":209,"path":18,"size":210,"width":42,"height":178},{"ext":23,"url":212,"hash":213,"mime":163,"name":214,"path":18,"size":215,"width":184,"height":185},{"__component":112,"id":308,"title":309,"subTitle":18,"content":310,"callToActionText":18,"callToActionLink":18,"colorStyle":301,"showAsides":69,"imageUrl":463},{"id":464,"name":465,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":466,"hash":487,"ext":23,"mime":163,"size":488,"url":489,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":490,"updatedAt":491,"documentId":492,"publishedAt":57},778,"stack.jpg",{"large":467,"small":472,"medium":477,"thumbnail":482},{"ext":23,"url":468,"hash":469,"mime":163,"name":470,"path":18,"size":471,"width":29,"height":166},"https://incredible-beef-2a6059b946.media.strapiapp.com/large_stack_fec3a2bfae.jpg","large_stack_fec3a2bfae","large_stack.jpg",95.19,{"ext":23,"url":473,"hash":474,"mime":163,"name":475,"path":18,"size":476,"width":20,"height":172},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_stack_fec3a2bfae.jpg","small_stack_fec3a2bfae","small_stack.jpg",29.21,{"ext":23,"url":478,"hash":479,"mime":163,"name":480,"path":18,"size":481,"width":42,"height":178},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_stack_fec3a2bfae.jpg","medium_stack_fec3a2bfae","medium_stack.jpg",58.57,{"ext":23,"url":483,"hash":484,"mime":163,"name":485,"path":18,"size":486,"width":184,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_stack_fec3a2bfae.jpg","thumbnail_stack_fec3a2bfae","thumbnail_stack.jpg",8.24,"stack_fec3a2bfae",143.32,"https://incredible-beef-2a6059b946.media.strapiapp.com/stack_fec3a2bfae.jpg","2024-08-08T08:26:50.506Z","2024-12-09T10:18:46.269Z","kpz9iiz9dr551k3umhmtwy3k",{"__component":112,"id":312,"title":313,"subTitle":18,"content":314,"callToActionText":315,"callToActionLink":108,"colorStyle":306,"showAsides":69,"imageUrl":494},{"id":495,"name":496,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":497,"hash":518,"ext":23,"mime":163,"size":519,"url":520,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":521,"updatedAt":521,"documentId":522,"publishedAt":57},789,"teamwork.jpg",{"large":498,"small":503,"medium":508,"thumbnail":513},{"ext":23,"url":499,"hash":500,"mime":163,"name":501,"path":18,"size":502,"width":29,"height":166},"https://incredible-beef-2a6059b946.media.strapiapp.com/large_teamwork_8f4a7b0c14.jpg","large_teamwork_8f4a7b0c14","large_teamwork.jpg",80.4,{"ext":23,"url":504,"hash":505,"mime":163,"name":506,"path":18,"size":507,"width":20,"height":172},"https://incredible-beef-2a6059b946.media.strapiapp.com/small_teamwork_8f4a7b0c14.jpg","small_teamwork_8f4a7b0c14","small_teamwork.jpg",27.14,{"ext":23,"url":509,"hash":510,"mime":163,"name":511,"path":18,"size":512,"width":42,"height":178},"https://incredible-beef-2a6059b946.media.strapiapp.com/medium_teamwork_8f4a7b0c14.jpg","medium_teamwork_8f4a7b0c14","medium_teamwork.jpg",51.59,{"ext":23,"url":514,"hash":515,"mime":163,"name":516,"path":18,"size":517,"width":184,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_teamwork_8f4a7b0c14.jpg","thumbnail_teamwork_8f4a7b0c14","thumbnail_teamwork.jpg",8.11,"teamwork_8f4a7b0c14",116.53,"https://incredible-beef-2a6059b946.media.strapiapp.com/teamwork_8f4a7b0c14.jpg","2024-08-08T10:07:23.468Z","uo85gvimf7llsbaoahqw08m3",{"__component":126,"id":317,"title":318,"callToActionText":319,"callToActionLinkUrl":320,"body":18,"imageUrl":524},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},{"id":322,"metaTitle":323,"metaDescription":324,"structuredData":526,"metaImage":18,"metaSocial":529},{"url":326,"@type":327,"@context":328,"provider":527,"areaServed":528,"description":336,"serviceType":337},{"url":330,"name":331,"@type":332},{"name":334,"@type":335},[],{"id":531,"name":532,"jobTitle":533,"about":18,"createdAt":534,"updatedAt":535,"publishedAt":536,"documentId":537,"image":538,"contactOptions":555},53,"Marco","Developer","2023-08-18T08:37:46.178Z","2024-12-13T12:51:36.125Z","2023-08-18T08:37:45.681Z","i4pvbfw1hyfpczn3iqembajr",{"id":539,"name":540,"alternativeText":18,"caption":18,"width":541,"height":542,"formats":543,"hash":550,"ext":78,"mime":81,"size":551,"url":552,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":553,"updatedAt":553,"documentId":554,"publishedAt":57},576,"Marco websitefoto.png",278,326,{"thumbnail":544},{"ext":78,"url":545,"hash":546,"mime":81,"name":547,"path":18,"size":548,"width":549,"height":185},"https://incredible-beef-2a6059b946.media.strapiapp.com/thumbnail_Marco_websitefoto_d48e2635bc.png","thumbnail_Marco_websitefoto_d48e2635bc","thumbnail_Marco websitefoto.png",24.32,133,"Marco_websitefoto_d48e2635bc",28.96,"https://incredible-beef-2a6059b946.media.strapiapp.com/Marco_websitefoto_d48e2635bc.png","2024-03-08T12:44:24.310Z","c3p868w7tpr33j25tk3vv62c",[],[557,562,566,570,574,578,582,586,590,594,598,601,604,607,611,614,617,620,624,627,630,633,636,640,644,648,652,654,657,744],{"__component":558,"id":559,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":262,"aside":18,"content":561,"introductionText":18},"global.pagesection",216,"","Toevallig had mijn collega Raymon hetzelfde scherm gevonden en al in bezit. Hij kon mij precies vertellen wat er allemaal bij zat en wat er nog moest worden aangeschaft. Met maar 40 euro is dit een veel schappelijkere prijs. Echter kan het scherm zelf niet meer dan hem verteld wordt, dus is er een controller nodig. Iets wat het scherm vertelt “dit moet je tonen”. \n\nDe Raspberry Pi zou hier zeer geschikt voor zijn, klein maar krachtig genoeg om een API te draaien en het scherm aan te sturen. Zo is dit project dus begonnen.\n\nIn deze blog leg ik de volgende dingen uit:\n\n*   Hoe de kabel mapping in elkaar steekt\n*   Hoe het scherm opdrachten krijgt vanuit .NET\n*   Hoe je graphics omzet naar bitmaps en vervolgens naar pixels zodat het scherm dit begrijpt",{"__component":558,"id":563,"title":18,"asideText":564,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":565,"introductionText":18},215,"Kabel mapping","## Kabel mapping\n\nOm het scherm aan te sturen, moet deze worden aangesloten op de Raspberry Pi. De pins van het scherm moeten op de juiste pins van de GPIO header van de Raspberry Pi worden aangesloten zodat de Raspberry Pi de commando’s kan geven om op het scherm te tekenen.",{"__component":558,"id":567,"title":18,"asideText":568,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":569,"introductionText":18},217,"GPIO header pins","### GPIO header pins\n\nDe GPIO (General Purpose Input/Output) header pins op een Raspberry Pi zijn fysieke aansluitpunten op het bord die verschillende functies bieden voor het verbinden van externe apparaten.\n\nVoor meer informatie over de functionaliteit van alle pins verwijs ik door naar:\n- [GPIO2](https://pinout.xyz/pinout/pin3\\_gpio2)\n- [Simple guide to the RPI GPIO header and pins](https://www.raspberrypi-spy.co.uk/2012/06/simple-guide-to-the-rpi-gpio-header-and-pins/)\n \n\n![](https://www.sharevalue.nl/images/sharevalue/blogs/pixel_1.png)",{"__component":558,"id":571,"title":18,"asideText":572,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":573,"introductionText":18},219,"Pixel display pins","### Pixel display pins\n\nHet pixel display heeft de volgende pins op de achterkant:\n\n*   R1: Deze pin wordt gebruikt om de intensiteit van de rode kleur van de LED's in het display te regelen.\n*   G1: Deze pin wordt gebruikt om de intensiteit van de groene kleur van de LED's in het display te regelen.\n*   B1: Deze pin wordt gebruikt om de intensiteit van de blauwe kleur van de LED's in het display te regelen.\n*   R2: Deze pin wordt gebruikt voor extra controle van de rode kleurintensiteit in displays die ondersteuning bieden voor dubbele kleurkanalen.\n*   G2: Deze pin wordt gebruikt voor extra controle van de groene kleurintensiteit in displays die ondersteuning bieden voor dubbele kleurkanalen.\n*   B2: Deze pin wordt gebruikt voor extra controle van de blauwe kleurintensiteit in displays die ondersteuning bieden voor dubbele kleurkanalen.\n*   A, B, C, D: Deze pinnen worden gebruikt voor het selecteren van de rij- of kolomadressen van het display, waardoor specifieke rijen of kolommen van LED's kunnen worden ingeschakeld of uitgeschakeld.\n*   CLK: Deze pin wordt gebruikt voor klok-synchronisatie en timingcontrole van gegevensoverdracht naar het display.\n*   LAT: Deze pin wordt gebruikt om de gegevens in de shiftregisters van het display vast te leggen, waardoor de weergegeven afbeelding wordt bijgewerkt.\n*   OE: Deze pin wordt gebruikt om de uitvoer van het display in of uit te schakelen.\n*   GND: Deze pin is de grondaansluiting voor het displaymodule.\n*   E: Deze pin komt overeen met de extra rij (E-rij) en wordt gebruikt voor specifieke functies of adresseringsdoeleinden.",{"__component":558,"id":575,"title":18,"asideText":576,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":577,"introductionText":18},218,"Mapping","### Mapping\n\nDe pins die gebruikt worden voor het aansturen van het pixel display zijn:\n\n*   Pin 6 ( GND ), deze pin wordt verbonden aan de eerste GND van het display\n*   Pin 7 (GPIO4 ). Dit is een algemene klokpuls uitgang. Het kan worden gebruikt om klokpulsen te genereren voor verschillende toepassingen. Deze gaat op de LAT pin van het display\n*   Pin 9 ( GND ), deze pin wordt verbonden aan de tweede GND van het display\n*   Pin 10 ( GPIO15/RXD0 ). Dit is een UART RX (ontvangst) pin. Het wordt gebruikt voor het ontvangen van seriële communicatie. Gaat op de E pin van het display\n*   Pin 11 ( GPIO17 ). Deze wordt verbonden met de N pin van het display \\*\n*   Pin 12 ( GPIO18 ). Deze wordt verbonden met de OE pin van het pixel display\n*   Pin 13 ( GPIO27 ) . Deze wordt verbonden met de G1 pin van het pixel display \\*\n*   Pin 15 ( GPIO22 ). Deze wordt verbonden met de A pin van het pixel display \\*\n*   Pin 16 ( GPIO23 ). Deze wordt verbonden met de B pin van het pixel display \\*\n*   Pin 18 ( GPIO24 ) . Deze wordt verbonden met de C pin van het pixel display \\*\n*   Pin 19 ( MOSI/GPIO10 ). Dit is een SPI (Serial Peripheral Interface) Master Output Slave Input-pin. Het wordt gebruikt voor seriële communicatie met SPI-apparaten. Gaat op B2 van het pixel display\n*   Pin 21 ( MISO/GPIO9 ). Dit is een SPI Master Input Slave Output-pin. Het wordt gebruikt voor seriële communicatie met SPI-apparaten. G2 van het pixel display.\n*   Pin 22 ( GPIO25 ) \\*\n*   Pin 23 ( SCLK/GPIO11 ). Dit is een SPI-klokpin. Het wordt gebruikt voor het synchroniseren van gegevensuitwisseling met SPI-apparaten. R1 van het pixel display\n*   Pin 24 ( CE0/GPIO8 ). Dit is een SPI Chip Select 0-pin. Het wordt gebruikt om te selecteren welk SPI-apparaat met de Raspberry Pi communiceert. R2 van het pixel display\n*   Pin 26 ( CE1/GPIO17 ). Dit is een SPI Chip Select 1-pin. Het wordt gebruikt om een ander SPI-apparaat te selecteren voor communicatie met de Raspberry Pi. B1 van het pixel display\n\n\\* Dit is een algemene GPIO-pin",{"__component":558,"id":579,"title":18,"asideText":580,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":581,"introductionText":18},220,"Scherm","## Aansturen van het scherm\n\nOm het scherm aan te sturen heb ik gebruik gemaakt van een open-source library, ontwikkeld door Henner Zeller, voor het aansturen van RGB LED-matrixpanelen met de Raspberry Pi: [https://github.com/hzeller/rpi-rgb-led-matrix](https://github.com/hzeller/rpi-rgb-led-matrix)\n\nDeze library stelt je in staat om RGB LED-matrixpanelen aan te sluiten op je Raspberry Pi en ze te bedienen via de GPIO-pinnen. Het biedt geavanceerde functionaliteiten voor het weergeven van kleurrijke patronen, afbeeldingen en animaties op de LED-matrix.\n\nOm deze library te kunnen gebruiken in een .NET project, moet er een dll van gemaakt worden. Gelukkig heeft Henner hier aan gedacht en hier een handleiding voor geschreven: [https://github.com/hzeller/rpi-rgb-led-matrix/tree/master/bindings/c%23](https://github.com/hzeller/rpi-rgb-led-matrix/tree/master/bindings/c%23)",{"__component":558,"id":583,"title":18,"asideText":584,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":585,"introductionText":18},221,"Mapping testen","### Testen mapping\n\nVoordat er code geschreven kan worden moet er eerst getest worden of het scherm goed werk en/of de kabels goed zijn aangesloten op de Raspberry Pi. De eerder genoemde library heeft een aantal scripts om bijvoorbeeld tekst op het scherm te printen, een plaatje te tonen of scrolling tekst.\n\nDoor deze scripts aan te roepen kon ik zien of de kabels goed zaten. Zo zaten er bij de eerste keer de B en D kabels omgedraaid, wat er in resulteerde dat de onderste helft van het plaatje boven getoond werd en andersom.  Als alle scripts de juiste output tonen is het tijd om verder te gaan naar het schrijven van C# API.",{"__component":558,"id":587,"title":18,"asideText":588,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":589,"introductionText":18},222,".NET","## .NET\n\nAls de kabels goed zitten en de dll gemaakt is, kunnen we het .NET project opzetten. Ik heb gekozen voor een API, omdat ik het vanaf het netwerk of misschien zelfs vanaf het internet aan wil kunnen roepen. Maar uiteraard kan er ook een console application gemaakt worden om het scherm aan te sturen, dit ligt eraan wat de wensen zijn.",{"__component":558,"id":591,"title":18,"asideText":592,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":593,"introductionText":18},223,"API","## API\n\nNu de keuze duidelijk is kan ik eindelijk code gaan schrijven. Natuurlijk met de nieuwste .NET versie, en dat is op het moment van schrijven .NET 7.   \nDe API moet een REST API zijn en vooralsnog zonder authenticatie, want eerst moet getest worden of alles werkt. De authenticatie is alleen echt nodig als het scherm echt wordt opgehangen voor gebruik, en zelfs dan kan het zelfs niet nodig zijn. Natuurlijk als het scherm aan het internet gehangen wordt, dan moet er wel authenticatie ingebouwd worden.",{"__component":558,"id":595,"title":18,"asideText":596,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":597,"introductionText":18},224,"Plaatjes","### Plaatjes\n\nDe REST API endpoint maken was het makkelijke werk, maar hoe zet je een plaatje om naar pixels? Het scherm bestaat immers uit pixels. Dit heb ik gedaan met de volgend code:  \n\n\n```\npublic void DrawBitmapFromUrl(string imageUrl)\n  {\n    var bitmap = GraphicsHelper.GetBitmapFromUrl(imageUrl, _ledRows, _ledColumns).Result;\n\n    var canvas = Matrix.CreateOffscreenCanvas();\n    canvas = DrawBitmapOnCanvas(canvas, bitmap);\n\n    SwapCanvas(canvas);\n  }\n```",{"__component":558,"id":599,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":600,"introductionText":18},225,"Het endpoint roept DrawBitmapFromUrl aan, deze vraagt aan de GraphicsHelper om de bitmap op te halen. Vervolgens wordt er een canvas aangemaakt om op te tekenen, de bitmap wordt daarop getekend en het canvas wordt verwisseld met de huidige canvas die op het scherm getoond wordt. Het wisselen van de canvas is het daadwerkelijke tekenen op het scherm.\n\n```\npublic static async Task\u003CSKBitmap> GetBitmapFromUrl(string url, int screenWidth, int screenHeight)\n  {\n    using var client = new HttpClient();\n    using var response = await client.GetAsync(url);\n    using var stream = await response.Content.ReadAsStreamAsync();\n\n    var bitmap = SKBitmap.Decode(stream);\n\n    return ResizeBitmap(screenWidth, screenHeight, bitmap);\n  }\n```",{"__component":558,"id":602,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":603,"introductionText":18},226,"De GetBitmapFromUrl methode download het plaatje en zet het om naar een stream. De stream kan gedecode worden naar een SKBitmap. Deze wordt vervolgens aan de ResizeBitmap method gegeven met de hoogte en breedte van het scherm.\n\nSKBitmap is onderdeel van de SkiaSharp Nuget package: [https://www.nuget.org/packages/SkiaSharp/](https://www.nuget.org/packages/SkiaSharp/)  \n\n    \n```\nprivate static SKBitmap ResizeBitmap(int screenWidth, int screenHeight, SKBitmap bitmap)\n  {\n    int targetWidth, targetHeight;\n    CalculateDimensions(bitmap, screenWidth, screenHeight, out targetWidth, out targetHeight);\n\n    // Create a new bitmap with the desired dimensions\n    var resizedBitmap = new SKBitmap(targetWidth, targetHeight);\n\n    // Create a new surface from the resized bitmap\n    using (var surface = new SKCanvas(resizedBitmap))\n      {\n        // Draw the original bitmap onto the new surface, scaling it to fit while maintaining aspect ratio\n        surface.DrawBitmap(bitmap, SKRect.Create(targetWidth, targetHeight));\n      }\n\n    return resizedBitmap;\n  }\n```",{"__component":558,"id":605,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":606,"introductionText":18},227,"De ResizeBitmap method berekend de hoogte en breedte aan de hand van de dimensies van het scherm met behoud van de aspect ratio. Vervolgens wordt er een SKCanvas geïnitialiseerd met de juiste dimensies en daar wordt de bitmap op getekend.",{"__component":558,"id":608,"title":18,"asideText":609,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":610,"introductionText":18},228,"Gifjes","### Gifjes\n\nGifjes tekenen op het scherm gaat bijna hetzelfde als een plaatje. Alleen een gifje is niet een stilstaand plaatje. Een gif bestaat uit meerdere plaatjes die een bepaalde periode getoond worden.\n\n\n```\nprivate RGBLedCanvas DrawGifOnCanvas(RGBLedCanvas canvas, string imageUrl, RenderPoint start, RenderPoint end, CancellationToken cancellationToken)\n  {\n    (List\u003CSKBitmap> frames, List\u003Cint> durations) = GraphicsHelper.IsBase64String(imageUrl) ? GraphicsHelper.GetGifFromBase64(imageUrl, end.Y - start.Y, end.X - start.X)  : GraphicsHelper.GetGifFromUrl(imageUrl, end.Y - start.Y, end.X - start.X);\n\n    while(!cancellationToken.IsCancellationRequested)\n      {\n        for(var i = 0; i \u003C frames.Count; i++)\n          {\n            canvas = DrawBitmapOnCanvas(canvas, frames[i], start, end);\n            canvas = SwapCanvas(canvas);\n\n            Thread.Sleep(durations[i]);\n          }\n      }\n\n    return canvas;\n  }\n```",{"__component":558,"id":612,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":613,"introductionText":18},229,"De DrawGifOnCanvas methode vraag aan de GraphicsHelper om de gif op te halen en krijgt een tuple van frames en durations terug. Door deze tuple wordt heen gelopen, de bitmap wordt op het scherm getekend en vervolgens wordt er gewacht ( de duration van de bitmap ).\n\n```\npublic static (List\u003CSKBitmap> frames, List\u003Cint> durations) GetGifFromUrl(string url, int screenWidth, int screenHeight)\n    {\n        using var client = new HttpClient();\n        using var stream = client.GetAsync(url).Result.Content.ReadAsStream();\n\n        return GetGifFromStream(screenWidth, screenHeight, stream);\n    }\n```",{"__component":558,"id":615,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":616,"introductionText":18},230,"Deze methode download het gifje, geeft deze aan GetGifFromStream mee en geeft het resultaat terug.\n\n```\nprivate static (List\u003CSKBitmap> frames, List\u003Cint> durations) GetGifFromStream(int screenWidth, int screenHeight, Stream response)\n    {\n        using (var codec = SKCodec.Create(response))\n        {\n            var frameCount = codec.FrameCount;\n            Console.WriteLine($\"Frame count: {codec.FrameCount}\");\n\n            var info = codec.Info;\n            var count = codec.FrameCount;\n\n            // Get all frames from gif and duration and add to list\n            var bitmap = new SKBitmap(info);\n            var frames = new List\u003CSKBitmap>();\n            var frameLengths = new List\u003Cint>();\n\n            for (int i = 0; i \u003C count; i++)\n            {\n                var opts = new SKCodecOptions(i);\n\n                if (codec?.GetPixels(info, bitmap.GetPixels(), opts) == SKCodecResult.Success)\n                {\n                    bitmap.NotifyPixelsChanged();\n\n                    var resized = ResizeBitmap(screenWidth, screenHeight, bitmap);\n\n                    frames.Add(resized);\n                    frameLengths.Add(codec.FrameInfo[i].Duration);\n                }\n            }\n\n            return (frames, frameLengths);\n        }\n    }\n```",{"__component":558,"id":618,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":619,"introductionText":18},232,"GetGifFromStream maakt een SKCodec (SkiaSharp) en loopt door de frames. Van elk frame wordt de bitmap opgehaald (geresized naar de juiste dimensies) en de duration.",{"__component":558,"id":621,"title":18,"asideText":622,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":623,"introductionText":18},231,"Tekst","### Tekst\n\nOm tekst te tonen op het scherm roept de endpoint DrawText aan.\n\n```\npublic void DrawText(string text, CancellationToken cancellationToken)\n    {\n        text = text ?? \"This is a static text.\";\n\n        var canvas = Matrix.CreateOffscreenCanvas();\n\n        canvas = DrawTextOnCanvas(canvas, text, new RenderPoint(1, 6), null);\n\n        SwapCanvas(canvas);\n    }\n```",{"__component":558,"id":625,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":626,"introductionText":18},233,"De canvas is aangemaakt om op te tekenen en DrawTextOnCanvas wordt aangeroepen. Vervolgens wordt er weer de SwapCanvas methode aangeroepen om de tekst op het scherm te tekenen.\n\n```\nprivate RGBLedCanvas DrawTextOnCanvas(RGBLedCanvas canvas, string text, RenderPoint start, RenderPoint? end)\n    {\n        var font = new RGBLedFont(\"fonts/6x10.bdf\");\n\n        var textLength = canvas.DrawText(font, start.X, start.Y, new Color(0, 255, 0), text);\n\n        // TODO make text as big as fits in the section\n        canvas.DrawText(font, start.X, start.Y, new Color(0, 255, 0), text);\n\n        return canvas;\n    }\n```",{"__component":558,"id":628,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":629,"introductionText":18},234,"Het font wordt geladen, de tekst wordt op de canvas getekend en de canvas wordt terug gegeven.\n\nDe DrawText is een methode uit de dll die gecompileerd is uit de eerder genoemde library van Henner Zeller.",{"__component":558,"id":184,"title":18,"asideText":631,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":632,"introductionText":18},"Scrolling tekst","### Scrolling tekst\n\nScrolling tekst werkt hetzelfde als de gewone tekst, alleen de tekst beweegt (scrolt) over het scherm.\n\n```\npublic void ScrollText(string text, CancellationToken cancellationToken) \n    {\n        text = text ?? \"This is a scrolling text.\";\n\n        var canvas = Matrix.CreateOffscreenCanvas();\n        var font = new RGBLedFont(\"fonts/6x10.bdf\");\n\n        var textLength = canvas.DrawText(font, 1, 6, new Color(0, 255, 0), text);\n\n        canvas = Matrix.CreateOffscreenCanvas();\n\n        int animationCount = 0;\n\n        while (animationCount \u003C 5 && !cancellationToken.IsCancellationRequested)\n        {\n            var x = canvas.Width;\n            canvas.Clear();\n\n            while (x > -textLength) {\n                canvas.DrawText(font, x, 20, new Color(0, 255, 0), text);\n                x -= 1;\n                canvas = SwapCanvas(canvas);\n\n                Thread.Sleep(50);\n            }\n\n            animationCount++;\n            x = canvas.Width;\n        }\n    }\n```",{"__component":558,"id":634,"title":18,"asideText":560,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":635,"introductionText":18},236,"De canvas wordt aangemaakt, het font geladen en de lengte van de tekst bepaald door te tekenen op de canvas. \n\nDe tekst wordt 5 keer gescrold door het scherm, en bij elke animatie wordt de tekst telkens opnieuw getekend op het scherm maar dan 1 pixel naar links. Dit geeft de illusie van een bewegende tekst: het scrollen.",{"__component":558,"id":637,"title":18,"asideText":638,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":639,"introductionText":18},237,"Issues","## Waar liep ik tegen aan?\n\nToen ik eenmaal wat ideeën had uitgeschreven in code was het tijd om te testen of het werkt. Ik kreeg netjes het plaatje te zien op het scherm, of de tekst. Zelfs gifjes werkten, maar meerdere commando’s achter elkaar leken niet te werken. De applicatie bleef hangen. \n\nIn de logging stond een foutmelding dat de applicatie niet de juiste rechten had bij een volgend commando. Multi-threading was een issue hier. Er moest één verbinding komen met het scherm en niet elke keer een nieuwe. Gelukkig is hier een simpel pattern voor, de singleton. Dit loste de problemen op en achtereen volgende commando’s werden goed verwerkt.",{"__component":558,"id":641,"title":18,"asideText":642,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":643,"introductionText":18},238,"GitHub","## GitHub\n\nDe uiteindelijke API, met wat uitleg over de endpoints is te vinden op GitHub: [https://github.com/marcokreeft87/pixel-sharp](https://github.com/marcokreeft87/pixel-sharp)",{"__component":558,"id":645,"title":18,"asideText":646,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":647,"introductionText":18},239,"Werkend scherm","![](https://www.sharevalue.nl/images/sharevalue/blogs/pixel_2.jpg)",{"__component":558,"id":649,"title":18,"asideText":650,"underline":69,"centered":69,"blankAside":69,"aside":18,"content":651,"introductionText":18},240,"We helpen graag!","Wil jij ook iets als dit laten werken met .NET en kan je daar hulp bij gebruiken? Mijn collega’s en ik helpen graag!",{"__component":653,"id":298,"title":18,"showBlankAside":262},"global.social-sharing",{"__component":655,"id":656,"name":18,"jobTitle":18},"strapi.author-card",5,{"__component":92,"id":658,"title":282,"aside":18,"postType":95,"limit":60,"expertise":659},16,[660,695],{"id":60,"title":61,"subTitle":62,"description":63,"shortDescription":64,"slug":65,"createdAt":66,"updatedAt":67,"publishedAt":68,"isCoreExpertise":69,"documentId":70,"image":661,"blocks":664,"midPageBlocks":671,"seo":18},{"id":72,"name":73,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":662,"hash":85,"ext":78,"mime":81,"size":86,"url":87,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":88,"updatedAt":88,"documentId":89,"publishedAt":57},{"thumbnail":663},{"ext":78,"url":79,"hash":80,"mime":81,"name":82,"path":18,"size":83,"width":49,"height":84},[665,668],{"__component":92,"id":93,"title":94,"aside":18,"postType":95,"limit":60,"expertise":666},[667],{"id":60,"title":61,"subTitle":62,"description":63,"shortDescription":64,"slug":65,"createdAt":66,"updatedAt":67,"publishedAt":68,"isCoreExpertise":69,"documentId":70},{"__component":104,"id":105,"titleLeft":106,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":109,"callToActionTextRight":107,"callToActionLinkUrlRight":108,"iconUrlLeft":669,"iconUrlRight":670},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},{"id":146,"name":147,"alternativeText":18,"caption":18,"width":136,"height":136,"formats":18,"hash":148,"ext":138,"mime":139,"size":149,"url":150,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":151,"updatedAt":151,"documentId":152,"publishedAt":57},[672,679,686,693],{"__component":112,"id":113,"title":114,"subTitle":18,"content":115,"callToActionText":116,"callToActionLink":108,"colorStyle":18,"showAsides":18,"imageUrl":673},{"id":156,"name":157,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":674,"hash":186,"ext":23,"mime":163,"size":187,"url":188,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":189,"updatedAt":189,"documentId":190,"publishedAt":57},{"large":675,"small":676,"medium":677,"thumbnail":678},{"ext":23,"url":161,"hash":162,"mime":163,"name":164,"path":18,"size":165,"width":29,"height":166},{"ext":23,"url":168,"hash":169,"mime":163,"name":170,"path":18,"size":171,"width":20,"height":172},{"ext":23,"url":174,"hash":175,"mime":163,"name":176,"path":18,"size":177,"width":42,"height":178},{"ext":23,"url":180,"hash":181,"mime":163,"name":182,"path":18,"size":183,"width":184,"height":185},{"__component":112,"id":118,"title":119,"subTitle":18,"content":120,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18,"imageUrl":680},{"id":193,"name":194,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":681,"hash":216,"ext":23,"mime":163,"size":217,"url":218,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":219,"updatedAt":219,"documentId":220,"publishedAt":57},{"large":682,"small":683,"medium":684,"thumbnail":685},{"ext":23,"url":197,"hash":198,"mime":163,"name":199,"path":18,"size":200,"width":29,"height":166},{"ext":23,"url":202,"hash":203,"mime":163,"name":204,"path":18,"size":205,"width":20,"height":172},{"ext":23,"url":207,"hash":208,"mime":163,"name":209,"path":18,"size":210,"width":42,"height":178},{"ext":23,"url":212,"hash":213,"mime":163,"name":214,"path":18,"size":215,"width":184,"height":185},{"__component":112,"id":122,"title":123,"subTitle":18,"content":124,"callToActionText":18,"callToActionLink":18,"colorStyle":18,"showAsides":18,"imageUrl":687},{"id":223,"name":224,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":688,"hash":246,"ext":23,"mime":163,"size":247,"url":248,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":249,"updatedAt":249,"documentId":250,"publishedAt":57},{"large":689,"small":690,"medium":691,"thumbnail":692},{"ext":23,"url":227,"hash":228,"mime":163,"name":229,"path":18,"size":230,"width":29,"height":166},{"ext":23,"url":232,"hash":233,"mime":163,"name":234,"path":18,"size":235,"width":20,"height":172},{"ext":23,"url":237,"hash":238,"mime":163,"name":239,"path":18,"size":240,"width":42,"height":178},{"ext":23,"url":242,"hash":243,"mime":163,"name":244,"path":18,"size":245,"width":184,"height":185},{"__component":126,"id":127,"title":128,"callToActionText":129,"callToActionLinkUrl":130,"body":18,"imageUrl":694},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},{"id":254,"title":255,"subTitle":62,"description":256,"shortDescription":257,"slug":258,"createdAt":259,"updatedAt":260,"publishedAt":261,"isCoreExpertise":262,"documentId":263,"image":696,"blocks":699,"midPageBlocks":708,"seo":739},{"id":265,"name":266,"alternativeText":18,"caption":18,"width":74,"height":75,"formats":697,"hash":273,"ext":78,"mime":81,"size":274,"url":275,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":276,"updatedAt":277,"documentId":278,"publishedAt":57},{"thumbnail":698},{"ext":78,"url":269,"hash":270,"mime":81,"name":271,"path":18,"size":272,"width":49,"height":84},[700,705],{"__component":92,"id":281,"title":282,"aside":18,"postType":95,"limit":60,"expertise":701},[702,703,704],{"id":254,"title":255,"subTitle":62,"description":256,"shortDescription":257,"slug":258,"createdAt":259,"updatedAt":260,"publishedAt":261,"isCoreExpertise":262,"documentId":263},{"id":274,"title":339,"subTitle":340,"description":341,"shortDescription":342,"slug":343,"createdAt":344,"updatedAt":345,"publishedAt":346,"isCoreExpertise":69,"documentId":347},{"id":60,"title":61,"subTitle":62,"description":63,"shortDescription":64,"slug":65,"createdAt":66,"updatedAt":67,"publishedAt":68,"isCoreExpertise":69,"documentId":70},{"__component":104,"id":291,"titleLeft":292,"callToActionTextLeft":107,"callToActionLinkUrlLeft":108,"titleRight":293,"callToActionTextRight":294,"callToActionLinkUrlRight":295,"iconUrlLeft":706,"iconUrlRight":707},{"id":405,"name":406,"alternativeText":18,"caption":18,"width":407,"height":408,"formats":18,"hash":409,"ext":138,"mime":139,"size":410,"url":411,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":412,"updatedAt":413,"documentId":414,"publishedAt":57},{"id":416,"name":417,"alternativeText":18,"caption":18,"width":303,"height":408,"formats":18,"hash":418,"ext":138,"mime":139,"size":419,"url":420,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":421,"updatedAt":422,"documentId":423,"publishedAt":57},[709,716,723,730,737],{"__component":112,"id":298,"title":299,"subTitle":18,"content":300,"callToActionText":18,"callToActionLink":18,"colorStyle":301,"showAsides":69,"imageUrl":710},{"id":427,"name":428,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":711,"hash":450,"ext":23,"mime":163,"size":451,"url":452,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":453,"updatedAt":453,"documentId":454,"publishedAt":57},{"large":712,"small":713,"medium":714,"thumbnail":715},{"ext":23,"url":431,"hash":432,"mime":163,"name":433,"path":18,"size":434,"width":29,"height":166},{"ext":23,"url":436,"hash":437,"mime":163,"name":438,"path":18,"size":439,"width":20,"height":172},{"ext":23,"url":441,"hash":442,"mime":163,"name":443,"path":18,"size":444,"width":42,"height":178},{"ext":23,"url":446,"hash":447,"mime":163,"name":448,"path":18,"size":449,"width":184,"height":185},{"__component":112,"id":303,"title":304,"subTitle":18,"content":305,"callToActionText":18,"callToActionLink":18,"colorStyle":306,"showAsides":69,"imageUrl":717},{"id":193,"name":194,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":718,"hash":216,"ext":23,"mime":163,"size":217,"url":218,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":219,"updatedAt":219,"documentId":220,"publishedAt":57},{"large":719,"small":720,"medium":721,"thumbnail":722},{"ext":23,"url":197,"hash":198,"mime":163,"name":199,"path":18,"size":200,"width":29,"height":166},{"ext":23,"url":202,"hash":203,"mime":163,"name":204,"path":18,"size":205,"width":20,"height":172},{"ext":23,"url":207,"hash":208,"mime":163,"name":209,"path":18,"size":210,"width":42,"height":178},{"ext":23,"url":212,"hash":213,"mime":163,"name":214,"path":18,"size":215,"width":184,"height":185},{"__component":112,"id":308,"title":309,"subTitle":18,"content":310,"callToActionText":18,"callToActionLink":18,"colorStyle":301,"showAsides":69,"imageUrl":724},{"id":464,"name":465,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":725,"hash":487,"ext":23,"mime":163,"size":488,"url":489,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":490,"updatedAt":491,"documentId":492,"publishedAt":57},{"large":726,"small":727,"medium":728,"thumbnail":729},{"ext":23,"url":468,"hash":469,"mime":163,"name":470,"path":18,"size":471,"width":29,"height":166},{"ext":23,"url":473,"hash":474,"mime":163,"name":475,"path":18,"size":476,"width":20,"height":172},{"ext":23,"url":478,"hash":479,"mime":163,"name":480,"path":18,"size":481,"width":42,"height":178},{"ext":23,"url":483,"hash":484,"mime":163,"name":485,"path":18,"size":486,"width":184,"height":185},{"__component":112,"id":312,"title":313,"subTitle":18,"content":314,"callToActionText":315,"callToActionLink":108,"colorStyle":306,"showAsides":69,"imageUrl":731},{"id":495,"name":496,"alternativeText":18,"caption":18,"width":19,"height":158,"formats":732,"hash":518,"ext":23,"mime":163,"size":519,"url":520,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":521,"updatedAt":521,"documentId":522,"publishedAt":57},{"large":733,"small":734,"medium":735,"thumbnail":736},{"ext":23,"url":499,"hash":500,"mime":163,"name":501,"path":18,"size":502,"width":29,"height":166},{"ext":23,"url":504,"hash":505,"mime":163,"name":506,"path":18,"size":507,"width":20,"height":172},{"ext":23,"url":509,"hash":510,"mime":163,"name":511,"path":18,"size":512,"width":42,"height":178},{"ext":23,"url":514,"hash":515,"mime":163,"name":516,"path":18,"size":517,"width":184,"height":185},{"__component":126,"id":317,"title":318,"callToActionText":319,"callToActionLinkUrl":320,"body":18,"imageUrl":738},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},{"id":322,"metaTitle":323,"metaDescription":324,"structuredData":740,"metaImage":18,"metaSocial":743},{"url":326,"@type":327,"@context":328,"provider":741,"areaServed":742,"description":336,"serviceType":337},{"url":330,"name":331,"@type":332},{"name":334,"@type":335},[],{"__component":104,"id":745,"titleLeft":746,"callToActionTextLeft":747,"callToActionLinkUrlLeft":748,"titleRight":106,"callToActionTextRight":107,"callToActionLinkUrlRight":749,"iconUrlLeft":750,"iconUrlRight":751},74,"Hoor van onze experts hoe leuk ShareValue is","Lees de verhalen van onze collega's","https://www.sharevalue.nl/word-onze-collega/collegas-aan-het-woord","https://www.sharevalue.nl/contact",{"id":405,"name":406,"alternativeText":18,"caption":18,"width":407,"height":408,"formats":18,"hash":409,"ext":138,"mime":139,"size":410,"url":411,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":412,"updatedAt":413,"documentId":414,"publishedAt":57},{"id":133,"name":134,"alternativeText":18,"caption":18,"width":135,"height":136,"formats":18,"hash":137,"ext":138,"mime":139,"size":140,"url":141,"previewUrl":18,"provider":54,"provider_metadata":18,"createdAt":142,"updatedAt":143,"documentId":144,"publishedAt":57},{"id":753,"metaTitle":754,"metaDescription":755,"structuredData":756,"metaImage":18,"metaSocial":785},102,"Pixel display aansturen met .NET? Nou en of! | ShareValue","Hoe stuur je een pixel display aan met .NET? Marco laat zien hoe hardware en code samenkomen in een tof project.",[757,768],{"url":758,"@type":759,"author":760,"@context":328,"headline":754,"publisher":763,"description":755,"datePublished":767},"https://www.sharevalue.nl/blogs/pixel-display-aansturen-met-.net-kunnen-wij-het-maken-nou-en-of","BlogPosting",{"name":532,"@type":761,"jobTitle":533,"worksFor":762},"Person",{"name":331,"@type":332},{"logo":764,"name":331,"@type":332},{"url":765,"@type":766},"https://www.sharevalue.nl/_nuxt/img/sharevalue-logo.3c5e7cb.svg","ImageObject","2024-01-25",{"@type":769,"@context":328,"mainEntity":770},"FAQPage",[771,777,781],{"name":772,"@type":773,"acceptedAnswer":774},"Wat was de aanleiding voor dit pixel display-project?","Question",{"text":775,"@type":776},"Marco wilde iets bouwen dat zichtbaar impact had en besloot een matrix-led-display te combineren met zijn kennis van .NET.","Answer",{"name":778,"@type":773,"acceptedAnswer":779},"Hoe is de aansturing van het display technisch opgezet?",{"text":780,"@type":776},"De aansturing is gedaan via een Raspberry Pi, .NET 6, GPIO-pins en een aangepaste driver voor het matrixdisplay.",{"name":782,"@type":773,"acceptedAnswer":783},"Wat zijn mogelijke toepassingen van zo'n display?",{"text":784,"@type":776},"Je kunt het gebruiken voor dashboards, tijdsaanduidingen, meldingen in kantoren of zelfs voor kunstprojecten.",[],{"pagination":787},{"page":788,"pageSize":389},1,{},1781259246353]