[FGJ] Organizing your ideas

By YopY on Thursday 27 May 2010 23:00 - Comments (6)
Category: -, Views: 3.766

First off, my WoW subscription just expired, so I should spend more time on this blog / development thing. If you've been following my series (all two episodes of it), which I'm probably going to prefix from now on to make it more recognizable from the blog (and site) index, you'll know that this series is about building an application, from the initial phases to the actual running of it.

Long sentence, excuse me.

In this post, I'll get to the first thing that you really should do before getting down to coding. I know that a lot of people - including myself - have an idea for a website or -app and just start hacking away in code, building up their program incrementally, slapping on features whenever they feel like it. I'm not saying that is a bad thing, by the way, just making note of it.

For this project, however, I'd like to work on it in a structured and organized fashion. To apply structure to a project however, one first needs to define the project, to make a list of Things It Should Do. For this particular project, it's been milling around in my head (and on various forums) for probably years now, but I never got around to putting it into words.

...Alright, I'm lying here, I did write a two-page document in half an hour or something early this year. But for the purpose of this document, let's pretend that didn't happen, alright?

In any case, back in the old days in uni (or the Dutch equivalent of that, HBO), I 'discovered' a technique called brainstorming. Or, to be more accurate, I found a piece of software written for the purpose of brainstorming. I played around with it a few times, read around the internets (or well, Wikipedia, the rest of the internets doesn't matter much about such subjects), and even applied it to a few smaller projects.

Brainstorming is, as Wikipedia puts it, "a group creativity technique designed to generate a large number of ideas for the solution of a problem." But of course, and for my own purposes, this can also be applied to just yourself.

Now, one of the key things about brainstorming - or, that thing I like to do to think about a project to be done - is that you need to be able to write your ideas down quickly, without being bothered with things like formatting or things like that.

The particular piece of software I referred to three paragraphs ago is called Freemind, an open source, visual mindmapping software kit. In itself, it's really not that great of a program - it lets you make graphs, and add pretty colors and fonts to it. See the screenshots I stole from their own site.

http://freemind.sourceforge.net/FreeMind-computer-knowledge-thumb.png http://freemind.sourceforge.net/FreeMind-my-health-thumb.png

The thing that made it work for me though is that it's easy and quick to use, with just your keyboard. You create a new (sub)node with insert, and add a node on the same level with enter - that's it. You can navigate with the arrow keys, too.

Now, with the softare installed, we go to the actual storming of ye brain. It's important that you can spend some time on it - half an hour to an hour should be enough time to get a lot of ideas out there, but try to take as long as you still get ideas. Also, if you're easily distracted, turn off all of your IM and email software (or the internet in general), put on some music (that doesn't annoy you into skipping it too often), whatever you need to be able to concentrate for a little while.

Second, one of the key rules of brainstorming is: Don't judge. Ideas only, write them all down, do not delete anything. Nothing. Thinking about an idea beyond adding some more in-depth ideas about them will destroy your creative high. Or well, can destroy it.

In any case, let's start with the actual process. Open up Freemind, and put The Word in the center. This 'root node' is the central idea, the central concept of the thing you're trying to create ideas for.

Next, enable Automatic Layout, it's under the Format menu. This'll give the nodes colors and styles automatically, so you can differentiate between deeper levels without having to manually edit the formatting - because that'll distract you, and break the flood of ideas.

Then, it's time to get busy. Write down the first things that come to mind when you look at the first word. Key words, random ideas - just spew out anything. Don't worry about it being in the wrong place - you can easily move it once your ideas crystallize.

I blurted out 'Community website' and 'Music news from various sources' (simply typing those words and pressing enter) after a few seconds. When typing down that last one, the 'sources' came bubbling up, so then I pressed Insert to add nodes to the 'sources' node. Here's an image of what it looked like after blurting out a few ideas.

http://img405.imageshack.us/img405/9904/mindmap1.png

'WTF', quoth I, 'Automated?'. Well yeah, it's not very likely you will be able to gather a team of editors that spend enough time writing up articles to fill your site with content, especially not if your site pretends to have a wide audience and coverage of most genres, does it? Or that's what the random idea was. So, the minute your original train of thought is derailed by ideas and thoughts popping up about that 'automated' thing, you insert into that node, and spew out key words - 'crawlers', 'automatically gathered, manually checked and edited', 'daily / continuously / regularly', as well as questions that suddenly arise, such as 'permissions?', about whether it'd be legal to crawl certain pages on Myspace to effectively copy content.

Oh, and don't worry about technical implications at this point - you're spewing ideas instead of being realistic. Besides, in this day and age, almost everything is possible - at least, technology isn't as much a factor anymore. I can cook up a simple crawler in a few minutes if I need to. In fact, I did a few years ago, for the heck of it and because I didn't want to shell out hundreds of dollars to get a database dump of my free-hosted forum, wrote up a multithreaded forum crawler thing in an afternoon (or two?) and had it backup the 250.000 posts gathered over the years.

But I'm distracting myself. I should get back to properly finishing that mindmap now. Be right back.

There. I probably didn't follow some of the things I said in this post, but I don't listen to myself, nor should you - do what you feel is right, there's really no rules in this thing besides being creative and listening to yourself.

I was going to format the map I cooked up in just a few minutes (ran out of ideas then), but then the program crashed (I used the most recent pre-release version). Do make sure to save regularly. I was lucky that Freemind automatically makes backups, in your user profile folder, subfolder .freemind. Better save it properly this time around.

Below is the image of the mindmap. I'm too lazy to upload the .mm file for you to play around with at the moment, so it'll have to do.

http://img28.imageshack.us/img28/3172/musicaggregationwebsite.th.png

I think that about wraps it up. The next step is to copy the ideas and put them into a proper word document, put the random ideas to writing. It's preferable you don't wait too long with this, or that you at least go over the mindmap and add enough things to it so the random words and sentences make sense, and that you go 'Oh right that's what I meant with that' when you see it again later. I'll try to do that for next time, but won't bore you with a post about that. Instead, I think I'll write up The Plan itself, or what the site should do for a first version. Based on that come requirements, and from there on I can start thinking about the technical side of things - technical requirements, to be precise. And based on that, and I know all of you are more interested in that than this overly long paragraph, I can look into programming languages, frameworks, databases, webservers, etcetera. I'll try not to be biased in that.

tl;dr, see you later. C&C is welcome, I probably should add more images and actually re-read my post before posting it, but I'm lazy.

Installeren van Trac, voor geweldige justitie nl

Door YopY op dinsdag 11 mei 2010 13:37 - Reacties (7)
Categorie: -, Views: 6.097

Hé hé, tweakblogs menu weer gevonden.

Deze post zal in het Nederlands zijn, aangezien er al een redelijk leesbare handleiding voor het onderwerp van deze post beschikbaar is op het internet. De post is een beetje uit volgorde - in mijn vorige post beloofde ik dat ik het min of meer op volgorde ga doen, maar dat is heel moeilijk (ook aangezien ik nog niet aan het officiële plan begonnen ben).

Het onderwerp van deze post is onderdeel van een halfbakken serie over het opzetten van een ontwikkelomgeving. Om dit alvast uit te doeken te doen, mijn definitie van een ontwikkelomgeving betreft:
  • Een development server (aangezien het een webapp betreft
  • Een IDE (want een editor is gewoon niet pr0 genoeg
  • Een issue management systeem
  • De Rest
Het derde punt zal de gemiddelde hobbyist misschien een beetje vreemd overkomen, maar het is, denk ik, wel iets dat kan helpen met het op een georganiseerde manier werken. Je kunt het ook zien als een soort van 'to do list', zoals ik het in de eerste fase van het project ga gebruiken, waarbij je je features (en subfeatures) één voor één kunt afvinken. Als je het systeem goed bijhoudt, kun je zeggen dat je bij de eerste release versie bent zodra je alle issues die daarbij horen af hebt.

Maar dit is allemaal natuurlijker uit te leggen als het systeem er eenmaal staat. Nog een beetje achtergrond, en dan begin ik met de echte post.

Voor m'n werk (webdeveloper voor tot noch toe een dozijn-en-nogwat websites, samen met sinds een paar maand twee andere developers, sinds vorige week een projectmanager, en hopelijk binnenkort nog een frontend developer) gebruikten we de afgelopen twee jaar (nog van voor mijn tijd) nog Mantis, het systeem dat Tweakerts.net ook gebruikt.

Echter, op den duur voldeed dat niet meer. Het is op zich geen verkeerd systeem, maar het is voor een semi-leek zoals de non-developers onder ons niet makkelijk in gebruik of overzichtelijk, het voelt en lijkt zwaar uit de tijd, en zo nog een lijstje met dingen die, volgens ons, beter konden.

Het bedrijf van wie we het content management systeem in licentie hebben voor onze websites gebruiken intern Jira, een grote, bekende maar commerciële issue tracker, maar door de stevige prijsvoering niet echt een optie voor ons. Dus ik mocht op zoek gaan naar een alternatief.

Uitendelijk waren er twee kandidaten: Redmine, een issue tracker op Ruby on Rails gebouwd en Trac, nog een issue tracker op Python gebouwd. Beide systemen zijn globaal gezien vergelijkbaar qua features - issue tracker, ingebouwde wiki, integratie met Subversion, Mantis import optie, etc - en qua licentie - beide zijn het open source projecten - maar uiteindelijk is voor Trac gekozen omdat die volwassener oogt en voelt, meer gebruikers heeft en daaropvolgend ook beter support heeft, zouden er wel problemen zijn.

Dus, ik Trac installeren, met een verouderd en niet-werkend Mantis import script worstelen, en uiteindelijk is het gelukt.

Er lopen geruchten dat Trac moeilijk is om te installeren, en dit kan inderdaad waar zijn, maar als je de makkelijke weg kiest - zoals ik - valt het genoeg mee. Ik heb het in Windows geïnstalleerd (omdat we dat van de systeembeheerders kregen, :w), maar de installatie voor Linux en Mac moet vergelijkbaar zijn.

De makkelijke manier


1. Installeer Python.

Trac ondersteunt het redelijk splinternieuwe Python 3.0 nog niet - ook omdat die opzettelijk backwards compatibility de deur uitsmeet (wat ik alleen maar kan aanprijzen, overigens, mits de oude versie nog een tijd ondersteund wordt). Python >= 2.4 en < 3.0 is dus nodig. Wij hebben de meest recente stabiele 2.x versie gebruikt, [http://www.python.org/download/releases/2.6.5/]versie 2.6.5 van Python[/url]. 2.7 zit nog in béta, dus die hebben we nog niet gebruikt (wat overigens een beetje hypocriet is, aangezien we Trac 0.12 gebruiken, die ook nog maar net in de eerste beta zit).

Python 2.6.5 komt gewoon in een installer, dus kies je smaak, en gaan met die banaan. Vervolgens wil je Python ook in je systeem z'n PATH zetten. Ik weet niet of iedereen daar bekend mee is, dus:
  1. Rechtermuisklik op Deze Computer -> Eigenschappen
  2. Geavanceerde tab (XP), of linkje Geavanceerd in Windows 7, dan tab Geavanceerd.
  3. Knopje 'Omgevingsvariabelen' indrukken
  4. Pak de variabele 'PATH' (of 'Path') in het lijstje van systeemvariabelen, en vul deze aan. De bestaande informatie niet aanpassen, overigens. Scheidt het vorige pad in deze lijst met een puntkomma, en vul in:


    code:
    1
    
    c:\Python26\;c:\Python26\Scripts



    (waar c:\Python26 je installatiedirectory is). Zo kun je op de commandline Python aanroepen, en kan de andere software Python ook vinden.
De volgende stap:

2. installeer Setuptools.

Setuptools is een setje van installatietools voor Python bibliotheken, ruwweg gezegd. Dat maakt het installeren makkelijk. Ook dit komt gewoon in een installer voor Windows, dus selecteer je platform en de versie van Python die je hebt (de 2.6 versie in dit geval) en gaan met die banaan. De installer installeert een .exe in c:\Python26\Scripts, dus die werkt gelijk vanaf de commandline na installatie.

Tot zover het moeilijke gedeelte.


3. Installeer Genshi.

Genshi is een template taal voor Python, van dezelfde makers als Trac. Is nodig. Om het leven je makkelijk te maken, open een commandline (start -> uitvoeren -> cmd) en typ:


code:
1
easy_install Genshi



Even wachten, klaar.


4. Installeer Trac

Commandline, typ


code:
1
easy_install Trac



klaar.

Ja, dat is het.


5. Trac omgeving initialiseren

Vervolgens gaan we nog even "een Trac opzetten". Ga weer naar je commandline, en typ:


code:
1
trac-admin c:\trac\mijnproject initenv



Even wachten, klaar. Lijkt wel een magnetronmaaltijd. Dit commando zal je een tweetal vragen stellen - de naam van je project, en een database connectie string. Out-of-the-box komt Trac met ondersteuning voor SQLite, dus door gewoon op enter te drukken bij de databasevraag maakt Trac automagisch een SQLite databasebestand aan. Wij gebruiken het ook, en voor het meeste werk moet het gewoon voldoen.

Tenslotte starten we de webserver even op. Ja, Trac komt ook met een ingebouwde webserver.


code:
1
tracd --port 8000 c:\trac\mijnproject



Nu kun je een browser opstarten, en naar http://localhost:8000 gaan om je splinternieuwe Trac omgeving te bekijken. Of, een lijst met projecten die je lokaal hebt te draaien - je kunt per project een nieuwe Trac omgeving opzetten, wat wel zo makkelijk is als je de zaken gescheiden wilt houden.

Dat is het. Ik zal nu een eind aan deze post breien, want volgens mij ben ik al driemaal over de aandachtsspanne heen.

De moeilijke manier van Trac installeren behelst:
  • Het installeren en draaien onder je eigen webserver (Apache)
  • Het gebruiken van iets anders dan SQLite (mag je ook de databasebindings voor je databasesoftware gaan installeren)
  • Localisatie toevoegen (nog zwaar beta)
  • Trac (+ de rest) zelf compilen vanuit de source
Ik heb geen zin om dat allemaal uit te leggen (ook omdat ik het niet gedaan heb, :+), dus doe ik goedkoop en plaats nog een linkje naar de officiële installatiehandleiding (engels).

En met dat sluit ik af. Ik kan, indien zo gewenst, nog een post wijden aan de werkwijze die ik zal aanhouden - als daar vraag naar is natuurlijk.

Verder zou ongezouten kritiek op deze post ook welkom zijn - duidelijkheid, schrijfstijl (opzettelijk informeel), leesbaarheid, nuttigheid, etcetera. Maar ik verwacht niks minder, :w.

FGJ: A development project blog

By YopY on Monday 3 May 2010 21:00 - Comments (8)
Category: -, Views: 3.423

I've long tried to maintain a blog, and even made a dozen or so posts (of varying quality, neutrality and readability) on my existing webpage, Great Justice. However, as you can see, I haven't posted there since forever because, simply said, I can't be arsed.

However, I've long felt that I should be doing something constructive with my time, and I believe that a blog that will get some actual exposure from people that know a thing or two and who can at least pretend they care (either by constructive criticism, attempts at that, or flat-out ridicule - either are fine by me, by the way) will give me the motivation I need.

I've decided to start my new blogging career with finally getting started with developing one of the projects I've long had in the back of my head. The project I've had in mind is, summarized, a social music news website, where the members can select a number of topics, bands, genres or anything they would like the latest news on (you know, like tags). Said news would be semi-automatically gathered from a number of sources, including official band sites, Facebook profiles, Twitter, and in-house editors.

For this blog series, I want to post about the entire development process - from the setup of a development environment (a version control system, issue tracker for my own administration), the writing of a design document (or an attempt at that), to the decision making into a language and, if applicable, a framework, then through aspects of development and, in the long run, the actual release of the application and the website.

The blog posts will usually be in English, however I think that some of the posts will be in Dutch. One of the first next posts I expect to make will be on installing a development environment, and I think that posts like that would be better posted in Dutch because most documentation on such tools already is in English.

I'll try not to be too dry with my posts, however I cannot guarantee I'll be short and concise - I tend to be lengthy in my writings, which can be seen as both positive and negative. If it's too long, please let me know, but I can't promise I'll change.

Finally, no, this blog doesn't have a custom layout yet. I'm nowhere near good at design (although I know my CSS). If anything, I'd put a giant cookie monster in the header. Like this one, only bigger.

I hope that, using this blog, my motivation will keep up and that, at the same time, my own skills in all the areas of software development will improve with the comments I'll most likely get by using Tweakblogs instead of my own domain with a Wordpress installation.


offtopic:
FGJ? WTF?

FGJ is an internet-TLA for For Great Justice, the One Reason to Do It All. If you don't get it, you're too young. I can't think of any good names for my project, so I'll just go with that. It's also a neat short address for the blog.