Design probleempje ..

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java Developer / Sociaal domein

Dit ga je doen Nieuwbouw en doorontwikkeling; Beheer en wanneer nodig onderhoud; Bijdrage leveren in het functioneel- en technisch ontwerptraject; Analyseren van productie verstoringen; Meedenken over vernieuwingen en verbeteringen. Hier ga je werken De organisatie waar jij komt te werken focust zich op software development met een maatschappelijk tintje. De afdeling software ontwikkeling bestaat uit vijf verschillende scrum teams, met allen hun eigen focus gebied. Zo zijn er een aantal teams die zich focussen op specifieke applicaties, maar is er ook een team gericht op projecten. Binnen de organisatie staat innovatie en kwaliteit voorop. Een aantal applicaties draait nog op

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Senior Developer ERP Dynamics 365

Samengevat: Deze werkgever is een softwarebedrijf. Ben jij een enthousiaste developer? Heb je ervaring met ERP of Dynamic 365 bussines central? Vaste baan: ERP Applicatie Specialist ERP MBO €3.600 - €5.200 Wij houden ons als bedrijf bezig met het leveren en implementeren van het Microsoft Dynamics pakket binnen verschillende industriële sectoren. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Binnen ons open team is er een no-nonsense cultuur. Daarnaast is er veel onderling contact door de korte communicatielijnen. Het team werkt enthousiast samen om een

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Junior Front-End Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale oplossingen van Coolblue. Wat doe je als Junior Front-End Developer bij Coolblue? Als Junior Front-End Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen. Op dat moment komt je wil om te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te maken. Je sterk analytisch vermogen komt dan goed van pas! Ook Junior Front-End Developer worden bij Coolblue?

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Als junior .NET Developer lever je met jouw oplossingen direct een bijdrage aan de bedrijfsprocessen van de klanten. Werkzaamheden waar jij je zoal mee bezig houdt zijn; Het ontwikkelen, onderhouden en optimaliseren van de draaiende platforms van de klanten; Softwareontwikkeling middels C#, .NET; Klantcontact om de wensen te bespreken en uit te werken; Optimaliseren van de (huidige) bedrijfsprocessen; De IT-afdeling bestaat uit 30 personen verdeeld over 3 teams. Het team waar je in terecht komt bestaat uit ongeveer tien man. Het is een team wat bestaat uit betrokken collega’s, waar iedereen bereidt is om elkaar te

Bekijk vacature »

Fullstack Software Developer

Bedrijfsomschrijving Functieomschrijving Java ontwerpen, bouwen en testen (T-shaped). Als senior ontwikkelaar ben je bekend in zowel de back-end als de frontend van een applicatie. Angular, Continious Delivery / Integration. Een ervaren iemand die de leiding kan nemen, een weg vindt in nieuwe situaties, en in oude applicaties. Initiatiefrijk, bekend met de (technische) omgevingen die we bij duo gebruiken, niet te beroerd om collega’s te helpen. Als senior programmeur in staat om op te treden als lead programmeur. Ondersteunt de testers bij de testautomatisering en minder ervaren programmeurs bij dagelijks werkzaamheden. Dit laatste met name op het gebied van Angular. Achtergrond

Bekijk vacature »

SQL ontwikkelaar

Functieomschrijving Voor een gave werkgever in regio Breda zijn wij per direct op zoek naar een SQL ontwikkelaar/ functioneel consultant. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Je test de ontwikkelde oplossingen om er zeker van te zijn dat deze voldoen aan de functionele specificaties en de behoeften van de organisatie; Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Je stelt op

Bekijk vacature »

Mendix Consultant / Developer

Dit ga je doen Het in kaart brengen en analyseren van de functionele wensen van de klant rondom Mendix applicaties; Het fungeren als sparringpartner voor de (interne) klanten; Het opstellen van requirements en het vertalen hiervan naar technische mogelijkheden; Het opstellen van user stories; Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Het testen van op te leveren software en het zorg dragen voor de implementatie; Trainen van gebruikers in het gebruik van de applicatie; Werken in een Agile omgeving. Hier ga je werken De organisatie begeeft zich in de retail branche en focust zich

Bekijk vacature »

Medior Mobile Developer iOS Amsterdam

Functie What will you be doing as Mobile Developer? As an iOS app developer you will work in a multidisciplinary team of app developers, web developers and designers. You will work on world-class apps that will be used by thousands of people. There is a lot of room for self-development on a technical and personal level. Together with the rest of the team you develop in the newest techniques and you go for the best quality. We work with Kotlin Multiplatform Mobile to develop hybrid apps and we guarantee quality with peer reviews, unit testing and we use a CI/CD.

Bekijk vacature »

.NET developer

Functie Als .NET developer werk jij samen in een multidisciplinair ontwikkel team met 1-2 Senior .NET developers, twee front-end developers, Data Scientists en één UX designer. Als team werken jullie aan het ontwikkelen van een Cloud based applicatie en aan het stabieler maken van deze applicatie. Ook unit testing gaat erg belangrijk worden in jouw nieuwe functie. Samen met de Senior .NET ontwikkelaar wordt jij verantwoordelijk voor het ontwikkelen van de API. Jullie werken met veel data en incidenteel komen er ook data vraagstukken en zullen er wat queries gedraaid moeten worden. Dit betekend dat jij veel gaat werken met

Bekijk vacature »

Low Code Developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Voor een leuke opdrachtgever in omgeving Rotterdam zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten in heel het land! Wat ga je hier zoal doen? Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je kunt denken aan

Bekijk vacature »

Software Developer

Functie omschrijving Veel begeleiding en de kans om je verder te ontwikkelen als software developer. Dat kunnen wij jou bieden bij deelname aan deze leuke traineeship. Je krijgt een mentor toegewezen die jou alle kneepjes van het vak leert. Heb jij al wat ervaring als software developer? Daar worden wij heel blij van! Lees snel verder! Bedrijfsprofiel Als software developer neem je deel aan een trainings programma in de omgeving van Haarlem waar je persoonlijk wordt begeleidt, zodat je alle kneepjes van het vak leert. Aan de hand van jouw kennis en ervaring krijg je een persoonlijk opleidingstraject. Je gaat

Bekijk vacature »

SQL Database developer

Functie omschrijving Wil jij meewerken aan het creëren van slimme software om magazijnen als een geoliede machine te laten lopen? Wij zoeken een zorgvuldig persoon, iemand die niet snel de hand omdraait voor complexe algoritmes. Denk jij dat jij de SQL ontwikkelaar bent die wij zoeken? Lees snel verder en wie weet zitten we binnenkort samen aan tafel! Jouw werkzaamheden zullen er als volgt uitzien: Je houdt je bezig met het ontwerpen en ontwikkelen van MS SQL server databases, dit doe je met T-SQL als programmeer laag. Je gaat aan high-end software oplossingen werken, dit doe je voor de optimalisatie

Bekijk vacature »
Remco

Remco

08/05/2008 10:38:00
Quote Anchor link
Hoi,

jammergenoeg zit ik met een probleem wat m'n hele vooruitgang belemmert. Ik weet namelijk niet hoe ik nou het beste en het netste m'n klassen kan scheiden. Hier de situatie. Je hebt een beheerder, en een deel daarvan. Zegmaar een index, en een socket. De socket klasse heeft zelf zijn eigen functies voor beheer ( lezen / schrijven / connecten ), logisch. Maar de beheerder / index heeft in 1 functie toch echt een property van de socket nodig ( de resource ). Nu kun je dit heel simpel oplossen ( getResource() ), maar ik ben bang dat dit nogal wat performance-verlies tot gevolg heeft ( zit in een while(true) loop en als je dan elke keer al die resources moet opvragen .. ).

Nu kan het ook heel simpel worden opgelost, dat de beheerder/index zelf functies heeft om naar een socket te schrijven, en dat je dan een 2e object hebt, puur om data in op te slaan. Maar dat is dan weer niet zo "OOP-conform", normaal had ik de 2e manier al lang gekozen maar ik heb mezelf voorgenomen dat ik wat moet werken aan m'n oop design skills. :P

Iemand een ideetje? :$
 
PHP hulp

PHP hulp

27/12/2024 00:41:50
 
Jacco Engel

Jacco Engel

08/05/2008 10:44:00
Quote Anchor link
Je beheer klasse je socket class laten extenden?

class beheer extends socket


Dan kun je binnen beheer met $this->functie socket functies aanroepen

Lijkt mij de gewenste oplossing
 
Danny K

Danny K

08/05/2008 12:14:00
Quote Anchor link
Als je, zoals jij zegt, je "oop design skills" wilt verbeteren, heb je natuurlijk een mooi (klein) UML diagrammetje gemaakt!
Laat die maar even zien, dan kunnen we pas een echt goed antwoord op je vraag geven!
 
Jelmer -

Jelmer -

08/05/2008 14:33:00
Quote Anchor link
Ik zou het opdelen in 3 delen: De Socket, de BeheerderHandler en de Beheerder.

De Socket is puur een OO jasje om de socket_* functies van PHP. De instantie beheert zelf de socket resource, die komt er niet buiten. Alle read & write acties gaan via de public methods.

De BeheerderHandler is specifiek voor dat wat er aan de andere kant van de socket zit. Deze klasse is als het ware de enige die dingen over de socket stuurt, die de taal spreekt die naar de andere kant moet. Alle acties die mogelijk zijn aan de andere kant zijn in dit object gerepresenteerd door public methods. Bijvoorbeeld addIets, removeIets, getIets etc. vertalen en sturen binnen de klasse iets naar de instantie van de Socket-klasse, en wachten op antwoord. Dit antwoord vertalen ze weer naar een waarde waar je in PHP wat mee kan (dictionary strings worden vertaald naar associative arrays om maar even een voorbeeld te geven) Voor de naam van de klasse zou ik trouwens [naam-van-applicatie-aan-de-andere-kant]Handler gebruiken. Ik heb bijvoorbeeld een klasse die met XBT praat, en die heet heel toepasselijk XBTHandler.

De BeheerderHandler en de Socket zijn in iedere bedenkbare applicatie herbruikbaar. Je zou ze in een PHP-GTK programmaatje kunnen gebruiken, of in een webapp. Ze bevatten dus geen presentatie, geen echo-aanroepen, geen die of exit. Ze hebben alleen methods die je aanroept en die een antwoord in de vorm van een return value teruggeven. Onopgemaakt, gewoon als pure PHP dingen. Geen strings die HTML bevatten, of tekst die door htmlentities is gehaald etc.

Als laatste heb je dan nog het frontend. Deze is afhankelijk van de toepassing die je maakt. Voor een webapp verwerkt hij bijvoorbeeld de aanvraag en geeft HTML terug. Deze communiceert dus met de BeheerderHandler, maar niet met de Socket.

Waarom van Socket nog een aparte klasse? Omdat je die dan eventueel zou kunnen vervangen door een andere klasse die dezelfde methods heeft. Zo zou je heel gemakkelijk je applicatie werkend kunnen krijgen met een proxy of een ssh tunnel. Je hoeft alleen maar de Socket klasse te extenden en uit te breiden zodat deze via de nieuwe weg verbinding maakt met de andere kant. Waarom dan de BeheerderHandler apart? Omdat je dan gemakkelijk herbruikbare code hebt voor later, of omdat je nu gemakkelijk een andere of nieuwere versie van het programma aan de andere kant kan installeren die een nieuw protocol hanteert. Het enige wat je in je huidige applicatie aan deze kant dan hoeft te bewerken is de Handler.
 
Remco

Remco

08/05/2008 16:13:00
Quote Anchor link
Leuk idee Jelmer, maar zover ik lees kun je dan niet meer dan 1 socket hebben. Terwijl mijn doel juist is om meerdere sockets te hebben (d.m.v. polling).

Afbeelding

Mijn idee was meer: de protocol afhandelaar maakt een socketClient instantie, en koppelt die aan de socketIndex. Deze kan dan weer met pollSockets() een socket_select() doen.

Of, de socketIndex beheeft gewoon alle sockets, en socketClient dient slechts voor opslag van de resource etc.
Gewijzigd op 01/01/1970 01:00:00 door Remco
 
Jelmer -

Jelmer -

08/05/2008 17:20:00
Quote Anchor link
Wat zit er dan aan de andere kant van de sockets? Vraagt datgene dingen op, of wil je dat ding juist vragen stellen? Is het een server of een client?
 
Remco

Remco

08/05/2008 17:46:00
Quote Anchor link
Een server, een irc server welteverstaan. Maar maakt dat uit ..? Echter kan het ook netzogoed een client zijn (ddc transfer).
Gewijzigd op 01/01/1970 01:00:00 door Remco
 
Jelmer -

Jelmer -

08/05/2008 18:35:00
Quote Anchor link
Je hebt toch maar 1 verbinding met de server? De andere verbindingen zijn met clients. Ik zou die 2 verschillende soorten verbindingen niet door elkaar gooien, maar naast elkaar laten bestaan (het mooiste zou natuurlijk zijn als het aparte processen waren zodat de een druk bestanden kan binnen halen terwijl de ander rustig verder chat)

Ik zou uitgaan van 1 algemene handler, die beheert het programma. Bij deze handler kan je subprocessen registreren. Een daarvan is bijvoorbeeld het proces dat de verbinding met de chatserver afluistert, een ander daarvan kan een direct chat via dcc zijn.

De algemene handler zorgt voor de oneindige lus, en loopt dus oneindig lang alle subprocessen af. Om de beurt wordt bijvoorbeeld $subProces->yield() aangeroepen waar dan het subproces 1 rondje mag uitvoeren. Dat kan een select_socket zijn, of een beetje bestand ophalen, of een setje chatberichten verwerken (en eventueel dus een nieuw subproces starten dat een DCC SEND aanroep verder afhandelt)

Geen idee hoe de performance is, maar ik denk dat het een mooie structuur is die makkelijk is uit te breiden en later indien nodig makkelijk is om te zetten naar echte threads zodat het ophalen van bestanden werkelijk tegelijkertijd (of iig op kernelniveau opgedeeld) gebeurt.
 
Remco

Remco

08/05/2008 19:59:00
Quote Anchor link
Heb je verstand van sockets? In een eerder project van me had ik precies de opzet die je noemt, een klasse voor irc protocol, andere voor dcc, en weer eentje die een socket voorstelt. Op een gegeven moment wordt dat traag-as-hell en is je bot niet meer vooruit te branden. Je hebt blockende, en non-blockende sockets. Logischerwijs blockt de 1e en wacht totdat de actie is voltooid, en doet de 2e dat niet. Jammergenoeg heeft dat meer zorg nodig, en als je dan elke socket bijlanges gaat (pollen) gaat dat nogal wat cpu-cycles vreten.
 
Jelmer -

Jelmer -

08/05/2008 20:05:00
Quote Anchor link
Ik was uitgegaan van non-blocking sockets. Met usleep kan je je cpu cycles drukken. Een simpel testje wat ik ooit gedaan heb met pcntl_fork en socket_accept (voor iedere verbinding die er gemaakt wordt forkte ik m'n script zodat iedere socket door een apart child process werd afgehandeld) en een usleep(200) in de while-lus koste me ongeveer 1% processorkracht. Maar volgens mij kan je die usleep nog wel wat opvoeren, 200 microseconden is heel weinig.
 
Remco

Remco

09/05/2008 09:51:00
Quote Anchor link
Het kan wel, wat je zei, maar met socket_select kan het zó veel efficienter. Je kunt met die functie alles controleren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
readfds:

    * If listen has been called and a connection is pending, accept will succeed.
    * Data is available for reading (includes OOB data if SO_OOBINLINE is enabled).
    * Connection has been closed/reset/terminated.

writefds:

    * If processing a connect call (nonblocking), connection has succeeded.
    * Data can be sent.

exceptfds:

    * If processing a connect call (nonblocking), connection attempt failed.
    * OOB data is available for reading (only if SO_OOBINLINE is disabled).


Je kunt lezen dat je met een simpele functie precies weet wat een socket kan, en al heeft gedaan. Het is dan zeer onlogisch om de heletijd te loopen en gewoon de functies aanroepen en hopen dat er wat gebeurt. (Van de Windows documentatie .. )
Gewijzigd op 01/01/1970 01:00:00 door Remco
 
Jelmer -

Jelmer -

09/05/2008 10:23:00
Quote Anchor link
Wel als sockets de enige gebeurtenissen genereren, niet als er ook andere gebeurtenissen moeten kunnen gebeuren, zoals bijvoorbeeld gebeurtenissen op basis van een timer, of van een bepaalde system status.

Ook is het probleem met socket_select dat het een array van socket-resources wil, en ook slechts socket-resources teruggeeft. Je zal dus op basis van de socket-resource moeten achterhalen wel proces - of het nu chatten of toch bestanden binnentrekken was - achterhalen, en dat maakt een echt mooie OO aanpak inderdaad lastig.

Op basis van socket_select een systeem maken, hmm, ik denk dat ik het het zo zou doen:
De opperhandler wordt een SocketList die de main() lus beheert, en daarin socket_select constant aanroept en veranderde sockets afhandelt.

Bij deze opperhandler kan je processen registreren, en deze processen hebben allemaal 2 dingen in gemeen: een method om de Socket-instantie(s) op te vragen, en een method die wordt aangeroepen wanneer hun socket weer wakker wordt, wanneer er weer werk te doen is.

De Socket-instanties hebben met elkaar in gemeen dat ze een state hebben. Ze lezen, of ze schrijven. (of als je nog een exception-state wilt gebruiken, doe je die er ook bij) Op basis van deze state kan de opperhandler bepalen in welke array de socket moet. Verder kunnen de socket-instanties hun resource via een public method weggeven aan de opperhandler. En dit is waar het OO gezien lelijk wordt.

De opperhandler verbindt op basis van de resources (key) de sockets & hun processen (value) aan elkaar, en vergelijkt deze bij een antwoord van socket_select weer zodat hij weet welke processen een schop moeten hebben.
 
Remco

Remco

09/05/2008 12:55:00
Quote Anchor link
Je kunt heel simpel een uniek id genereren op basis van het resource id, die kun je opvragen met intval( $resource );
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.