Posts by Stefan.J

    darodar.com heb ik ook meermaals voorbij zien komen in Google Analytics statistieken. Deze club stuurt request naar Google met jouw Analytics Tracking-ID en als referal darodar.com. Wat ze ermee willen? Ik denk traffic genereren op hun website. Wellicht levert ze dat reclame-inkomsten op.

    Geen PHP gebruiken. PHP is hier overduidelijk niet geschikt voor. Neem NodeJS of bijvoorbeeld Java om multithreaded of middels callbacks meerdere requests uit te zetten, en ze af te handelen zodra ze binnen zijn.


    Let wel op dat Twitter het waarschijnlijk niet zo heel erg kan waarderen als je 286 requests in een keer uitvoert, ik zou de requests dan ook in batches van bijvoorbeeld 20 uitvoeren.

    Met een MySQL-database hoef je het niet te overwegen voor de performance. Wellicht is het in jouw geval een logische functionele keuze om de boel op te splitsen, maar in andere gevallen zou ik het niet doen.


    Als je beide databases op een andere machine gaat draaien, dan ga je natuurlijk wel performancewinst opleveren, maar ik denk niet dat dat in jouw geval zo is?

    Nee, je kunt hooguit wat muren opwerpen, maar het is een slecht idee. Als je software schrijft, dan moet je erop vertrouwen dat je software waterdicht is, en niet dat de middleware die ervoor staat allerlei gekke trucjes uit haalt om je software uit de wind te houden.


    Mijn advies zal dan ook zijn: Leer wat de mogelijke security issues zijn in je software. Leer op deze manier de software hiertegen te beveiligen, maar leer vooral ook te testen of de software veilig is. Met andere woorden: Hack je eigen software.


    Er is niemand die meer verstand van jouw software heeft dan jij zelf. Dus als je genoeg kennis in huis hebt of haalt, waarom zou dan iemand een lek vinden in je software?

    Er zijn veel standaarden die je kunnen helpen met de implementatie van SSO zoals Kerberos, OpenID, SAML en OAuth. Met OpenID zou je bijvoorbeeld Facebook als provider kunnen kiezen, waarna gebruikers met hun Facebook-account kunnen inloggen op jouw applicaties.


    De keuze hangt helemaal af van je requirements. Waar gaat het zoal om? Zijn het verschillende subdomeinen of verschillende domeinen?

    Basic Authentication kent geen session, feitelijk logt de client bij iedere request opnieuw in door de Authentication-header mee te sturen. Dat je in je browser niet telkens opnieuw je gebruikersnaam en wachtwoord hoeft op te geven komt simpelweg omdat de browser deze onthoudt, en voor jou invult bij iedere request.


    Als je SSO wilt implementeren zul je naar een andere technologie moeten.

    OpenID is best nog wel een redelijk veel gebruikte standaard. Overigens is de website die je doorstuurde wel echt waardeloos, het aanmaken van je gebruikersnaam werkt zelfs niet over HTTPS..


    Het probleem van alle andere authenticatiemethoden, zoals vingerafdrukken en irissen, is dat deze niet te wijzigen zijn. Je iris blijft altijd het zelfde, dus heeft iemand deze in handen, verandert je dit nooit meer.

    Ik zou kiezen voor een oplossing met Javascript. Doormiddel van asynchrone requests (AJAX) kun je detecteren of je verbinding nog stand heeft. Wanneer dat niet het geval is kun je retryen en zolang dat niet lukt een nette rode balk onderin de pagina weergeven waarin je aangeeft dat verbinding verloren is. Refreshes zorgen voor een hoop geknipper en ongein, wat er slordig uit ziet voor de gebruiker. iframes zijn daarbij ook nog eens een drama om tegenaan te moeten programmeren.

    Als ik je een advies moet geven zou ik gaan voor een taal als Java, Scala of Ruby. Allemaal talen met hun eigen paradigma waarvan je niet zomaar kan afwijken. PHP is bijvoorbeeld zowel een imperatieve als object georiënteerde taal (de paradigma's) en Javascript is een prototyping taal, waar je makkelijk omheen kan. Java (object georiënteerd), Ruby (functioneel) en Scala (ook functioneel) bieden minder flexibiliteit. Niet altijd handig (ligt helemaal aan de toepassing) maar wel nuttiger om te leren, juist omdat ze minder flexibel zijn.


    Daarbij denk ik dat het nuttig is statisch getypeerd te beginnen (dus Java, C++ of C# bijvoorbeeld). Stiekem kent iedere taal namelijk typering, en daarmee is het nuttig om het concept en de reden van typing te begrijpen en te kennen.


    Java is daarmee, omdat het relatief lage instapdrempel heeft, een hele goede keuze om mee te beginnen!

    Gezien hoe de extensies van Google zijn opgebouwd (Javascript), moeten ze op een 64 bits versie gewoon werken, tenzij ze de API hebben gestript, maar dat lijkt me sterk.


    Maar je zult zien, er zal nog wel een Chrome driver voor zijn, waardoor Selenium weer niet werkt... :)

    GROUP BY is in deze wel de meeste logische keuze, dus wat dat betreft zat je helemaal goed. Ik denk alleen dat je twee foutjes had, de group velden wil je denk ik omdraaien (eerst groeperen op IP, dan op user-agent) en daarnaast moet je de WHERE-clause verplaatsen naar een HAVING clause met een MAX(). Ofwel:


    SQL
    SELECT * FROM analytics GROUP BY ip, agent ORDER BY date HAVING MAX(date) > DATE_SUB(NOW(), interval 10 minute)


    De kolommen samenvoegen is niet echt een goed idee (eerste normaalvorm). Mocht dit niet werken, kun je dan het CREATE TABLE statement met wat INSERT statements met wat voorbeelddata erin posten?

    Ik denk dat er met je tweede opdracht wordt bedoeld: Print de grootte van de mappen en files in de huidige map, in KB/MB OF GB. De meeste commands die filesizes laten zien hebben een -h switch, om bytes te converteren naar kilo- mega- en gigabytes. Voor du geldt dat ook:


    Code
    du -d 1 -h


    Voor de eerste opdracht klopt het inderdaad dat touch een file aanmaakt als deze niet bestaat. Het moeilijkste had je al opgelost, namelijk een dataformat opgeven aan date. Al met al wordt het dan:


    Code
    touch `date +%Y.%m.%d`.test.txt

    Waarschijnlijk wil je dat de gebruiker zijn bestanden kan beheren met bijv. FTP? Neem een bestaand pakket en probeer niet het wiel opnieuw uit te vinden. Direct Admin is natuurlijk een bekende, maar er is ook vast een gratis alternatief.


    Mocht je toch zelf aan de slag willen, om je op weg te helpen:


    Database aanmaken is eenvoudig met een gebruiker met genoeg rechten, bijvoorbeeld root:


    SQL
    CREATE DATABASE somedb;
    CREATE USER somedb_user IDENTIFIED BY 'somedb_user_pwd';
    GRANT ALL ON somedb.* TO somedb_user;


    Een map aanmaken is nog eenvoudiger, een simpele mkdir doet zijn werk. Maar hoe wil je vervolgens dat de gebruiker zijn bestanden in deze directory krijgt?