Design probleempje ..

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

Bekijk vacature »

Lead developer

Functie Als lead developer wordt jij verantwoordelijk voor een van onze development teams. Samen met de Software Architect bewaak jij de kwaliteit en uitvoering van onze complexe vraagstukken. Daarnaast ben jij verantwoordelijk voor het inschatten, designen en ontwikkelen van middelgrote tot grote veranderingen in de software. Ook coördineer jij het proces rondom complexe technische vraagstukken. Verder bestaat jouw takenpakket uit het volgende: – Het aansturen van jouw development team; – Het begeleiden van Junior Software Engineers; – Het maken van technische analyses m.b.t. nieuwe aanvragen en het tijdsbestek inschatten voor de uitvoering hiervan; – Het uitvoeren van de ontwikkeling van

Bekijk vacature »

.NET Developer

Functie omschrijving Ervaren .NET Developer gezocht! Wij zoeken een ervaren .NET developer die aan de slag gaat voor een softwarebedrijf in de regio Rhenen. In deze rol ben jij zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Daarnaast houdt jij je bezig met de nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en product specialisten om mooie producten te creëren. Bedrijfsprofiel Waar kom je te werken? Je komt te werken voor snelgroeiende softwareleverancier en allround dienstverlener. Klanten van deze

Bekijk vacature »

REMOTE - Front-end Angular developer

Functie Het IT-team bestaat momenteel uit de IT Manager, 2 back-end developers, 1 fullstack developer, 1 designer en een DevOps engineer. Ze zijn momenteel op zoek naar een ervaren Front-end developer die autonoom en gedisciplineerd aan de slag gaat, en bij aanvang als enige developer met hun Front-end applicaties bezig is. Wel hebben ze de ambitie om hier snel een 2e developer bij te vinden die jij dan ook zal kunnen aansturen/begeleiden. Je zult aan de slag gaan met het doorontwikkelen van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde

Bekijk vacature »

Java (Java EE) Developer

In het kort Werken als Java developer betekent werken aan complexe IT projecten bij onder meer een internationaal containeroverslag bedrijf. Zo sturen we apparaten en eindgebruikers aan d.m.v. onze custom-made software oplossing, die dagelijkse vele duizenden containers verwerkt. Denk aan systemen die volautomatische kranen aansturen en op afstand bedienen, de volledige afhandeling van containernummerherkenning bij het laden en lossen van zeeschepen of het tonen van instructies aan de chauffeurs van ruim 300 straddle carriers. En dat allemaal redundant, robuust en in een dynamische 24/7 omgeving! Jij versterkt ons ontwikkelteam en gaat aan de slag met oa. Java i.c.m. Spring (Boot),

Bekijk vacature »

PHP developer

Functie Voor een opdrachtgever in omgeving Leiden zijn wij op zoek naar een PHP developer die affiniteit heeft met C++. Ben jij reeds afgestudeerd of heb je al een paar jaar ervaring? Lees snel verder en kijk of dit iets voor jou is! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van

Bekijk vacature »

Junior PHP Developer

Functieomschrijving Junior PHP Developer gezocht! Voor een opdrachtgever in de regio Gelderland zijn wij op zoek naar een Junior PHP Developer die onderdeel gaat worden van het ontwikkelingsteam van deze organisatie. In deze functie ga jij aan de slag met het schrijven van software voor de aansturing van en het managen van windparken en bijbehorende onderdelen. Hiernaast ga jij je bezighouden met het ontwikkelen, testen en onderhouden van diverse webapplicaties. Het team waarin je komt te werken bestaat uit 3 developers, hierdoor krijg je veel verantwoordelijkheid en de kans om jezelf verder te ontwikkelen. Er wordt echter wel van je

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun

Bekijk vacature »

Senior Java developer

Dit ga je doen Jouw taken als Senior Java Developer zijn: Het maken van strategische keuzes omtrent de nieuwbouw van applicaties; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java FX, JDBC, SQL, REST, Jax-RS, JSON, Maven, JUnit en Spring (boot)); Reviewen van code en feedback geven op collega developers; Analyseren en oplossen van bugs/incidenten door het onderlinge verband te kunnen leggen van verschillende losstaande systemen. Hier ga je werken Het bedrijf waar je als Senior Java Developer komt te werken staat internationaal bekend om het testen van bodemstructuren door middel van echotechnieken en beeldherkenning.

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

C# .NET Ontwikkelaar ASP.NET

Samengevat: Deze werkgever is een inkooporganisatie. Ben jij een ervaren .Net ontwikkelaar? Heb je ervaring met .Net en C#? Vaste baan: C# .NET Developer .Net MBO HBO €3.100 - €4.300 Onze missie is: “Een essentiële bijdrage leveren aan het verlagen van de integrale kostprijs van de aangesloten groothandels, middels het bundelen van inkoopvolume en het creëren van synergie met en tussen de groothandels en leveranciers, met scherpe inkoopprijzen, goede handelscondities en gerichte dienstverlening als resultaat” Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! De branche van dit

Bekijk vacature »

Back-end PHP Software Developer - Juniorfunctie

Functieomschrijving Wij zijn op zoek naar een PHP Software Developer om ons team te versterken en mee te werken aan de ontwikkeling van eigen IOT-oplossingen. In deze functie ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor het uitlezen en managen van sensoren in machines. Je werkt nauw samen met een team van ontwikkelaars en engineers om de beste software-oplossingen te creëren. Jouw werkzaamheden zien er als volgt uit: Je bent in deze rol verantwoordelijk voor het ontwerpen, ontwikkelen en onderhouden van webapplicaties en softwaretoepassingen voor in-house ontwikkelde IOT oplossingen. Je werkt aan complexe databases en back-end

Bekijk vacature »

Ervaren PHP developer gezocht!

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

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 »

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 »
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

14/01/2025 13:37: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.