Mijn workflow

Door Rubinski op vrijdag 04 januari 2013 08:30 - Reacties (12)
Categorie: -, Views: 4.692

Intro


Ik schrijf deze blog voornamelijk omdat er een aantal mensen (waaronder mede-tweaker GoTCoast) benieuwd waren naar mijn manier van werken inzake development.

Als student heb ik nog niet echt een specifieke taal waarin ik ontwikkel en bijgevolg maak ik dan ook websites, programma's of apps in allerhande talen. Wanneer ik websites ontwikkel is dit ofwel in PHP ofwel in Ruby On Rails, een taal en platform die ik enkele maanden ontdekte door onze vrienden in De Devschuur Coffee Corner - Iteratie 2. Desktop programma's worden meestal geschreven in C# en voor mobiele applicaties heb ik momenteel enkel ervaring met Android (Java dus).

Zoals ik al zei, ben ik momenteel student. Ik probeer in mijn vrije tijd echter zo veel mogelijk hobbyprojectjes uit te werken zodat ik hier het een en ander van kan leren. Naast deze hobbyprojecten heb ik ook al enkele applicaties voor de echte wereld in elkaar gezet als vakantiewerk. Denk hierbij bijvoorbeeld aan een kassasysteem voor in een frituur (C#, SQL Server) of de website van een lokaal bedrijfje (PHP, MySQL) en een webshop voor een ander bedrijf (Ruby On Rails).



Mijn manier van werken


Om ervoor te zorgen dat mijn systeem niet vol staat met verschillende soorten databases, IDE's en platformen, creŽer ik voor elk project een nieuwe Virtuele Machine (VMWare Player). Zo blijft mijn "hostmachine" zo clean mogelijk. Deze hostmachine is een laptop met een Intel Core i7 2600M, 8GB RAM die dan fungeert als server (daarover later meer).

Desktop applicaties

Voor desktop applicaties is het vrij gemakkelijk: Ik maak een VM aan gebaseerd op Windows 7 of Windows 8 (heb licenties via school) met daarin Visual Studio en de database die ik op dat moment nodig heb.

Webdevelopment

PHP

Voor PHP ziet het scenario er grotendeels hetzelfde uit als voor desktop-applicaties. Ook hierbij draai ik een Windows-gebaseerde VM maar in plaats van Visual Studio kies ik hier voor een IDE als PHPStorm of Sublime Text 2. Daarnaast installeer ik WAMP-server. Een pakket dat bestaat uit Apache, MySql en PHP.

Ruby On Rails

Voor Ruby On Rails applicaties gebruik ik een Virtual Machine gebaseerd op Ubuntu. Als IDE gebruik ik hier Sublime Text 2 en gewoonlijk maak ik gebruik van een MySQL-database.

Omdat ik typen op mijn laptop niet zo gek leuk vind (ik ben geen fan van het toetstenbord) en de keyboardshortcuts voor Windows en OSX verschillend zijn, werk ik meestal op mijn Macbook of Mac Mini. Dit doe ik door via SSH een verbinding te maken met de VM die draait op mijn laptop. Mijn laptop fungeert dus als het ware als server. Op deze manier bedien ik dan de server (VM) die op mijn laptop draait van op mijn Macbook of Mac Mini. (Voor Ruby On Rails is een console echt onmisbaar).
Daarnaast mount ik deze netwerklocatie ook nog als schijf via Transmit. Zo open ik de benodigde files dan meteen in Sublime Text 2 en kan ik aan het programmeren.
De reden waarom ik de VM's niet gewoon op mijn Macbook draai is simpel: deze is niet snel genoeg ;).

En dan is er nog iets


Om zo vlot mogelijk te programmeren is het belangrijk dat je je IDE zo goed mogelijk kent. Sublime Text 2 ziet er uit als een simpele texteditor maar is echt razendsnel en eenmaal je de juiste keyboardshortcuts kent, is het echt een plezier om mee te werken. Ik heb de 2 uur durende screencast van leec85 bekeken en heb het gevoel dat ik een pak meer uit de editor haal.



Kan dat niet gemakkelijker?


Eigenlijk wel. Een aantal dagen geleden kwam mede-tweaker armageddon_2k1 met een bijzonder interessante tip. Hij gebruikt Vagrant om het opzetten van deze Virtuele Machines sneller te laten verlopen:

Van op hun website:
Vagrant uses Oracle’s VirtualBox to build configurable, lightweight, and portable virtual machines dynamically.
Zelf heb ik hier nog niet mee gespeeld maar dat zal ik in de toekomst zeker en vast eens doen. Vagrant neemt namelijk een groot deel van mijn workflow uit handen.

Nog een laatste toevoeging


Een aantal weken geleden kregen we op school het bezoek van Koen Van der Auwera (@atog), een Ruby On Rails-ontwikkelaar die ons kwam vertellen hoe we op een gemakkelijke manier een back-end konden opzetten voor een mobiele applicatie. Aangezien we op school geen Ruby On Rails krijgen, was dit voor de meesten onder ons dus iets compleet nieuws. Alhoewel het voor mij vooral herhaling was heb ik toch enkele leuke dingen bijgeleerd. Een van deze zaken is het volgende:

Een Ruby On Rails applicatie maken is simpel. Je opent je terminal venster, gaat naar de locatie waar je je webapplicatie wilt maken en typt het volgende:

rails new sample_app


Stel dat ik op dit moment in: /home/rubinski/projects zit, dan komt de applicatie in /home/rubinski/projects/sample_app en start je de webserver met het volgende commando:
cd sample_app
rails s

De webserver wordt nu op poort 3000 gestart.

Maar: in plaats van naar http://localhost:3000 te surfen, surfte Mr. Van Der Auwera naar app_name.dev, hetgeen - in mijn ogen - een veel duidelijkere, kortere en gemakkelijkere manier is om naar de applicatie te surfen. Ik vroeg me af hoe hij dit deed en dus vroeg ik het hem via Twitter:
RubenBehaeghe: @atog Kan je mij eens vertellen hoe je er voor gezorgd hebt dat je gewoon project.dev kan gebruiken in plaats van localhost:3000/project?
waarop ik onderstaand antwoord ontving:
@RubenBehaeghe http://pow.cx is de gemakkelijke oplossing. De mijne is http://github.com/atog/nginx-app
Ik raad jullie dan ook ten zeerste aan om eens naar een van deze oplossingen te kijken.

Conclusie


Eigenlijk is het niet zo gek spannend. Om niet met 101 verschillende ontwikkelomgevingen te zitten, maak ik voor elk nieuw project een nieuwe VM aan. Deze laat ik draaien op mijn krachtige laptop om hier dan met mijn veel minder krachtige Macbook op te connecteren en van daaruit te werken.

Het is duidelijk dat dit niet de beste manier van werken is. Zo kwam armageddon_2k1 met een manier om het opzetten van een VM aanzienlijk gemakkelijker te maken en kwam Koen Van Der Auwera met een manier om duidelijkere urls voor verschillende rails projecten te krijgen. Waarvoor ik hen trouwens allebei nogmaals wil bedanken.

Als jullie nog ideŽen of voorstellen hebben over hoe het nog allemaal eenvoudiger kan, hoor ik het graag in de reacties hieronder.

Volgende: Invite al je vrienden voor een Facebook-event 06-'12 Invite al je vrienden voor een Facebook-event

Reacties


Door Tweakers user Blokker_1999, vrijdag 04 januari 2013 09:16

Dus in plaats van alle toosl netjes te verzamelen om je systeem proper te houden ga je je systeem extra zwaar belasten met het maken van VMs ... Ik zie er eigenlijk de logica niet echt van in. Heb je gedaan met een project, archiveer het gewoon op een goede manier, ruim je database terug op en ga verder met het volgende project. De tools heb je staan op je host en je verliest nooit tijd met het opnieuw moeten installeren van iets of het afschuimen van VMs op zoek naar waar je weer een bestand hebt gelaten.

Door Tweakers user Gamebuster, vrijdag 04 januari 2013 09:23

Ik ben geen fan van de VMs opzet; Ik heb het geprobeerd, maar het kostte me meer tijd om al die VMs te onderhouden dan dat het me bespaarde

Door Tweakers user Tarabass, vrijdag 04 januari 2013 09:29

Ik werk ook met VM's en vind het erg prettig werken. Ik doe het echter niet per project maar per 'taal'. Zo heb ik een dotnet-bak, een java-bak en een php-bak draaien. Daarnaast heb ik een vm voor een linux server-bak, ťťn voor een windows server-bak en ťťn voor de databases. Het enige nadeel is dat ik vaak meerdere vm's moet opstarten, maar gezien mijn host is dat geen enkel probleem. Opslag/backup van mijn projecten doe ik op een nas..

Door Tweakers user PixelShooter, vrijdag 04 januari 2013 11:16

Hmm, ik heb hier nog over gehoord over deze aanpak, maar ik ben nog niet helemaal 'mee'. Hoe connecteer je dan met een VM gemaakt in VM Player? Toch met iets meer als ssh? Want voor een project in bv. C# (en dus Visual Studio) moet je toch je scherm zelf ook zien? Hoe gaat dat dan? En is er dan geen vervelende input lag vanwege het niet-lokaal werken?

Ik heb zo'n gevoel dat ik totaal fout aan het denken ben, maar goed :Y)

Door Tweakers user Rubinski, vrijdag 04 januari 2013 15:15

Blokker_1999 schreef op vrijdag 04 januari 2013 @ 09:16:
Dus in plaats van alle toosl netjes te verzamelen om je systeem proper te houden ga je je systeem extra zwaar belasten met het maken van VMs ... Ik zie er eigenlijk de logica niet echt van in. Heb je gedaan met een project, archiveer het gewoon op een goede manier, ruim je database terug op en ga verder met het volgende project. De tools heb je staan op je host en je verliest nooit tijd met het opnieuw moeten installeren van iets of het afschuimen van VMs op zoek naar waar je weer een bestand hebt gelaten.
Ik heb verschillende "template" VM's. Wanneer ik een nieuw project start kies ik uit een van deze. Ik moet de verschillende tools dus niet elke keer opnieuw kopiŽren.
Het nadeel aan jouw manier van werken, is dat je geen manier hebt om verschillende soorten versies van bepaalde programma's / databases naast elkaar te draaien. Voor klant X heb ik een Sql Server 2008 nodig, maar voor klant Y moet dit een SQL Server 2012 zijn. Door alles op de host te draaien, kunnen zo conflicten ontstaan.

Wat dat extra zwaar belasten betreft: de laptop wordt voor niets anders gebruikt dan voor het draaien van de VM's. Elke VM krijgt standaard 3GB RAM waardoor ik er 2 naast elkaar kan draaien moest dit nodig zijn.

Voor .NET ontwikkel ik op de VM zelf in Visual Studio maar voor bijvoorbeeld Ruby On Rails heb ik geen IDE nodig in de VM. Ik draai de IDE lokaal op mijn Macbook maar kan via Transmit toch aan de bestanden via SMTP.
Gamebuster schreef op vrijdag 04 januari 2013 @ 09:23:
Ik ben geen fan van de VMs opzet; Ik heb het geprobeerd, maar het kostte me meer tijd om al die VMs te onderhouden dan dat het me bespaarde
Zo gek veel staat er niet in een VM geÔnstalleerd, dus het enige waar wat "onderhoudswerk" komt bij kijken, zijn de Windows Updates.
PixelShooter schreef op vrijdag 04 januari 2013 @ 11:16:
Hmm, ik heb hier nog over gehoord over deze aanpak, maar ik ben nog niet helemaal 'mee'. Hoe connecteer je dan met een VM gemaakt in VM Player? Toch met iets meer als ssh? Want voor een project in bv. C# (en dus Visual Studio) moet je toch je scherm zelf ook zien? Hoe gaat dat dan? En is er dan geen vervelende input lag vanwege het niet-lokaal werken?

Ik heb zo'n gevoel dat ik totaal fout aan het denken ben, maar goed :Y)
Voor .NET-development valt de ssh-connectie weg en ontwikkel ik via mijn laptop in de VM (rechtstreeks dus eigenlijk). Voor webdevelopment komt mijn Macbook wel te pas. In de VM heb ik geen Sublime Text draaien en dus connecteer ik met mijn Macbook naar de VM (die op de laptop draait).

Voor .NET gebeurd het ontwikkelen dus niet via ssh ;)

Door Tweakers user Gropah, vrijdag 04 januari 2013 17:18

Maar heb je dan helemaal geen problemen met de performancehit die je neemt omdat je in een VM draait? Heb zelf het verschillende keren geprobeerd maar ga toch telkens weer terug naar native omdat ik er niet tegen kan dat alles zo langzaam reageert.

Door Tweakers user Gomez12, vrijdag 04 januari 2013 18:35

Hoe zit je dan met je licenties ;)

Ik bedoel school-licenties zijn leuk, maar ik dacht niet dat je die voor commercieel gebruik mocht inzetten?
2 VM's betekent bij veel pakketten ook 2 licentie's benodigd.

Dat is voor mij het grootste struikelblok voor deze methode, ik zou dan tegen een heleboel kleine nieuwe klanten moeten zeggen : Ik heb niets, voordat ik ook maar 1 letter kan tikken moet jij eerst even de windows licentie betalen die ik nodig heb om iets te kunnen tikken...
Gropah schreef op vrijdag 04 januari 2013 @ 17:18:
Maar heb je dan helemaal geen problemen met de performancehit die je neemt omdat je in een VM draait? Heb zelf het verschillende keren geprobeerd maar ga toch telkens weer terug naar native omdat ik er niet tegen kan dat alles zo langzaam reageert.
Simpel gezegd : Betere hardware kopen.
Ik meen dat een VM momenteel iets van 2% performance verlies is, heel erg knappe jongen die dat merkt.

[Reactie gewijzigd op vrijdag 04 januari 2013 18:36]


Door Tweakers user sfranken, zaterdag 05 januari 2013 15:05

Gomez12 schreef op vrijdag 04 januari 2013 @ 18:35:
Simpel gezegd : Betere hardware kopen.
Ik meen dat een VM momenteel iets van 2% performance verlies is, heel erg knappe jongen die dat merkt.
In de host merkt je het misschien niet maar Windows als guest OS is vaak echt wel retetraag bij mij, en dan maakt het niet uit welke virtualisatiesoftware en/of hypervisor ik probeer (Ik heb het gestest met VirtualBox, VMWare Player, KVM Qemu-kvm). De enige die eem beetje redelijke perfomance had was Windows 7 zonder Aero op KVM, maar ook dat was "stroperig" en mijn host PC is toch niet misselijk (AMD FX-8150 met 32gb ram)

Door Tweakers user Tarabass, zaterdag 05 januari 2013 20:07

sfranken schreef op zaterdag 05 januari 2013 @ 15:05:
[...]

In de host merkt je het misschien niet maar Windows als guest OS is vaak echt wel retetraag bij mij, en dan maakt het niet uit welke virtualisatiesoftware en/of hypervisor ik probeer (Ik heb het gestest met VirtualBox, VMWare Player, KVM Qemu-kvm). De enige die eem beetje redelijke perfomance had was Windows 7 zonder Aero op KVM, maar ook dat was "stroperig" en mijn host PC is toch niet misselijk (AMD FX-8150 met 32gb ram)
Erg vreemd, want ik doe dit al jaren en heb nergens last van. Zowel het OS op de pc zelf als de os-en die draaien in de vmware machines zijn vlot en snappy. Soms dan vergeet ik zelfs dat ik op de host bezig ben, of dat ik nog 2 vm's open heb staan. Herken dit dan ook op geen enkele manier..

Door Tweakers user armageddon_2k1, maandag 07 januari 2013 09:23

Blokker_1999 schreef op vrijdag 04 januari 2013 @ 09:16:
Dus in plaats van alle toosl netjes te verzamelen om je systeem proper te houden ga je je systeem extra zwaar belasten met het maken van VMs ... Ik zie er eigenlijk de logica niet echt van in. Heb je gedaan met een project, archiveer het gewoon op een goede manier, ruim je database terug op en ga verder met het volgende project.
Hier ben ik het dus totaal niet mee eens. Weet je wat een drama het is om een website te moeten ontwikkelen die >PHP5.3.8 nodig heeft en vervolgens een andere website aan het bouwen bent die Compass/Less/Ruby nodig heeft en later eentje die PHP5.2 heeft omdat de hoster te lui is up te daten? Ik vind het een drama om al die dingen naast elkaar op mijn computer te moeten installeren. Daarnaast wil ik dat mijn VM zo goed mogelijk de productieomgeving (vaak een Debian-versie) nabootst. Dat gaat me op mijn computer gewoonweg niet lukken.

Met Vagrant heb ik een Debian base box op mijn NAS en met een simpele Vagrantfile heb ik in 1 minuut een VM draaien specifiek voor die web-app. Met wat simpele commandos in die Vagrantfile map ik VM-mappen direct naar de project directory zodat ik gewoon op mijn eigen HDD ontwikkel. Die Vagrantfile staat in de directory bij mijn VCS dus ik hoef me niet druk te maken over developpen op een andere machine.
De tools heb je staan op je host en je verliest nooit tijd met het opnieuw moeten installeren van iets of het afschuimen van VMs op zoek naar waar je weer een bestand hebt gelaten.
De tools (Eclipse, Visual Studio etc) staangewoon op mijn host. Als je je VMs moet afschuimen omdat je een bepaald bestandje kwijt bent moet je misschien eens een VCS gebruiken :)

Ik zal binnenkort eens een blogitempje maken over Vagrant. Ik vond het echt een eye-opener. En dan neem ik die kleine performancedip wel voor lief.

Door Tweakers user Ryur, maandag 07 januari 2013 16:54

armageddon_2k1 schreef op maandag 07 januari 2013 @ 09:23:
Ik zal binnenkort eens een blogitempje maken over Vagrant. Ik vond het echt een eye-opener. En dan neem ik die kleine performancedip wel voor lief.
@Armageddon_2k1 wil jij als je die blogpost hebt gemaakt, mij ook even laten weten? Kan ook gewoon in Devschuur, daar lees ik wel mee.
Kijk bijna nooit meer op Tweakblog, dus vergeet ik het ;)


Reageren is niet meer mogelijk