UPDATE: Tweakblog API 0.1

Door pinna_be op donderdag 27 maart 2014 00:30 - Reacties (28)
Categorie: mini projects, Views: 6.842

update
Het project wordt nu gehost op github:
https://github.com/ThomasPinna/TweakblogApi
Dit moet nog een beetje ge÷rganiseerd worden, maar het is alvast makkelijker bereikbaar en makkelijker updatebaar.
Ook zijn ondertussen de utf-8 charset in de testcase verholpen.

inleiding
Dit is de eerste blog waarin ik een klein projectje openbaar maak. Merk op dit is een klein projectje, eerder een fix voor iets dat ontbrak in mijn leven.

Dit projectje is ontstaan doordat ik zin had om mijn blogs ook op een andere manier te tonen dan enkel op tweakblogs.net en ik het stom zou vinden om de blogs te kopiŰren en bij elke wijziging/verbetering beide versies te moeten verbeteren. Bovendien was mijn kennis php / DOM al een beetje aan het vervagen en wilde ik iets klein doen om dit terug op te frissen.

Daarom heb ik een kleine api ontwikkelt die enkele dingen kan met tweakblogs.

features
Features
  • blogs opvragen van een bepaalde blogger
  • van een blog de content, titel en samenvatting opvragen
  • volledig in php, enige dependencies zijn: simplexml en DOMdocument (meestal standaard ge´nstalleerd)
Todo:
  • een lijst van reacties opvragen voor een bepaalde tweakblog ondertussen ge´mplementeerd
  • indien de titel/beschrijving niet bestaat, automatisch opvragen (nu wordt het uit de rss gepikt)
  • (indien ik erin slaag) een reactieformulier afdrukken dat de reactie toevoegt aan tweakblogs
  • blogs opvragen voor meerdere bloggers
  • recente blogs (met blacklist/whitelist features)
  • cache functionaliteit (tekst lokaal/in database opslaan)
howto use
Hier vind je een running example http://pinna.be/tweakers/output.html *, waarbij de hoofdingen in <h3> de commando's voorstellen en het resultaat eronder wordt weergegeven.
* opgelet, lelijke opmaak. Bovendien kan het voorbeeld verouderd zijn ik raad je aan de test op github te runnen. (ondertussen geen running example meer, maar een htmlbestandje met voorbeeldoutput)

Maar dus, je hebt een klasse die als volgt werkt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class TweakBlog {
        // construct a blog with the url to the blog
        function __construct($url);
        // sets a title
        public function setTitle($arg);
        // sets the description
        public function setDescription($arg);
        // get the title
        public function getTitle();
        //  get the description
        public function getDescription();
        // get the contents of the blog
        public function getBlog();
        // returns a list of TweakBlogs
        static public function getTweakblogs( $url_name );
        private $url;
        private $title;
        private $descrip;
    }



En je gebruikt hem als volgt:

code:
1
2
3
4
tb = TweakBlog::getTweakblogs( "pinna" )
    $tb[0]->getTitle();
    $tb[0]->getDescription();
    $tb[0]->getBlog();



Download + install
Download gewoon de php klasse hier http://pinna.be/tweakers/tweakblog_api_0.1.zip, pak de zip uit en include het php bestandje waar je het nodig hebt. Je kan de "installatie" testen door TestTweakBlog() op te roepen. (!!!generereert output)

Als bovenstaande link niet werk: hier een dropbox link: https://dl.dropboxusercon...689/tweakblog_api_0.1.zip (Ik heb enkele problemen met mijn webhost, iets met ddos

update:: je vind de source nu op github: https://github.com/ThomasPinna/TweakblogApi

extra?
Je mag de code vrij gebruiken/aanpassen, wat je maar wil, wel moet je mijn naam (ergens in de code) vermelden wanneer je je baseert op mijn code en het wil releasen. Als je er iets leuk mee hebt gedaan, laat dan zeker iets weten! Ik brand van nieuwsgierigheid, (en ben misschien weer een beetje overenthousiast).
Verder: Als je nog zaken ge´mplementeerd wil zien, laat zeker iets weten. Houd er wel rekening mee dat dit bedoeld is om een klein projectje te zijn, ik zal dus geen grootse Artificial intelligence dingen hierin verwerken. Ook bugs mag je zeker melden (als je wil zelfs met de fix erbij :p ).

Goed gevoel over het internet

Door pinna_be op vrijdag 14 maart 2014 14:05 - Reacties (8)
Categorie: Mijmeringen, Views: 4.629

inleiding
Welkom op mijn eerste blog over mijn mijmeringen. Het doel van deze blogreeks is gewoonweg mijn gedachten die opgesloten zitten in mijn hoofd de wereld in te sturen. Een trend die je zal merken is waarschijnlijk dat ik makkelijk onder de indruk ben en uren kan doorschrijven/praten over eigenlijk enorm kleine dingen.

het internet en mensen
Soms vergeten we wel dat de mensen op het internet ook mensen zijn, met gevoelens, gedachten enzovoort, maar wat ik zelden besef is dat elk van die mensen een leven leidt dat minstens even complex is als het mijne.
Dit is indrukwekkend als je er even bij stil staat. Als je op reddit een post plaatst en 50 mensen hebben de moeite genomen je een upvote te geven, dan is elke upvote gegeven door een mens met een complex leven met moeilijkheden, keuzes, deugden, waarden, beslissingen, meningen, enzovoorts. Machtig gewoon om te beseffen dat een post ergens aan de andere kant van de wereld een reactie heeft uitgelokt in die mate dat ze het nodig hebben geacht om hun appreciatie te laten blijken door op een virtueel knopje te drukken.

hulpvaardigheid
Mensen op het internet zijn ook soms enorm hulpvaardig. Vaak zonder dat ze er rechtstreeks iets aan overhouden. Getuige zijn sommige grote crowdfunding projecten waar sommigen doneren om het doneren, niet om het ontvangen van een product, maar gewoonweg om te steunen. Niet alleen dit: maar ook vind je talloze opensource projecten, gemaakt door mensen gewoon om het anderen gemakkelijker te maken.
Dit drong pas echt tot me door toen ik onlangs aan het spelen was met custom roms voor mijn smartphone. Op de reactiepagina van een custom rom had ik gevraagd naar een bepaalde flashable zip die een niet heel belangrijke maar wel aangename functionaliteit kon bieden. Nu heeft iemand geantwoord dat hij/zij dit zou regelen voor mij. Deze mens is hier nu kostbare tijd van zijn complex leven in aan het steken om mij, iemand waar hij nooit van heeft gehoord, te helpen, zonder er geld of wat dan ook voor te vragen. Mede dankzij hem, geloof ik nu echt in de goedheid van de mensen.

vrije virtuele beschaving?
Ook beschaafdheid kan me enorm raken. Uiteindelijk is het niet vanzelfsprekend dat een groep anonieme mensen op het internet zonder enige vorm van sociale controle of politie of iets dergelijks zich toch nog volwassen en beschaafd kan gedragen.
Uiteraard is dit niet overal even hard en zijn er nog steeds mensen die proberen de sfeer een beetje te verzieken, maar dit is in het echte leven toch ook zo? Onlangs, hier op tweakblogs heb ik op de blog van een ander een reactie achtergelaten. Vol schrijffouten en redelijk slecht geschreven (naar mijn mening), maar toch heeft de schrijver van de blog mij bedankt voor zijn reactie, ondanks dat ik het zelfs niet rechtstreeks voor hem opnam, integendeel zelfs ik was het absoluut niet eens met zijn blog. Dit bezorgde me echt een vreemdsoortig warm gevoel, ik kan moeilijk onder woorden brengen hoe onder de indruk ik hiervan was.

"slechte reacties"
Uiteraard heb je een soort reacties die weinigen graag lezen, met als ultiem voorbeeld reacties van zogenaamde grammar nazi's. Ook heb je wel wat mensen die zaken direct als onzin afschrijven op een redelijk groffe en kortaffe manier. Persoonlijk stoor ik mij hier niet aan, vooral omdat ik geloof dat deze soort mensen in de minderheid zijn en uiteindelijk laten de mensen die beleefde reacties achterlaten een diepere en warmere indruk achter bij mij.
Ook geloof ik niet dat de mensen die "slechte reacties" posten het per se slecht bedoelen, ik kan me niet voorstellen dat je er voldoening uit haalt om mensen die je niet kent met de grond gelijk te maken met een botte reactie. Daarom, voor deze mensen, een afsluiting met een kleine ...

hint
Ben je het niet eens met een mening of stoor je je aan de spellingsfouten, dan heb je 2 opties:
optie 1 Hou de mening voor jezelf. Het zal geen effect hebben op iemand en je maakt dus niemand ongelukkig, even goede vrienden met iedereen.
optie 2 Deel de mening. Deze stap is vaak moeilijker:
voor grammar nazi's: stuur een DM met een vriendelijke boodschap in en eventueel een oplijsting van de fouten die jou heel erg hard stoorden. Op die manier heb je iemand een plezier gedaan, geholpen iemands blog beter te maken en heb je meer kans op succes. Bovendien lijkt het dan ook niet dat je iemand gewoon publiekelijk belachelijk wil maken, maar komt je ware bedoeling, namelijk de schrijver helpen, meer tot uiting.
aan zij die het niet eens zijn met iemand anders' post: argumenteer. Dit is echt de grote regel, schets situaties waarin de schrijver het volgens u fout heeft en leg rustig uit waarom dit volgens u zo is. Denk je echt dat de schrijver van mening zal veranderen als je hem uitmaakt voor het rot van de straat, of denk je dat je mening meer effect heeft wanneer je daadwerkelijk de ander doet inzien dat zijn mening misschien niet absoluut juist is.

tot slot
Dit soort blog is experimenteel, en ik heb geen idee of hier een goed doelpubliek voor is. Laat weten waar je het wel/niet mee eens bent, wat beter zou kunnen in het vervolg en of je mijn blog graag gelezen hebt. Ook filosofeer ik graag, en denk ik graag na over allerlei zaken. Je bent altijd vrij een reactie achter te laten die een eventueel volgende blog zou kunnen inspireren.

Goedendag, tot de volgende, bedankt voor het lezen en geniet van het mooie weer!

De eerste stappen en mislukkingen

Door pinna_be op woensdag 12 maart 2014 21:56 - Reacties (4)
Categorie: Project, Views: 4.728

Inleiding
In deze blog wijd ik verder uit over het software project waarvan ik al een tijd geleden had verteld dat ik het zou starten. Het starten is begonnen en er zijn een paar zaken duidelijker geworden. We hebben een eerste vergadering gehouden, waaruit we een klein beetje dichter staan bij wat we gaan doen.

license
Na veel wikken en wegen hebben we gekozen voor de GPL3 license. Het was reeds vroeg het plan om het project opensource en gratis aan te bieden.
We hebben hiervoor gekozen omdat we ervan overtuigd zijn dat we onder deze license het makkelijkst onze hoofddoelgroep, namelijk studenten en dergelijke, kunnen bereiken. Ook is het blijkbaar mogelijk om onze code onder een andere license uit te geven voor commercieel gebruik, moest dit ooit interessant worden.
Een belangrijke reden is ook dat dit het makkelijker maakt om gebruikt te worden in andere projecten, het is de bedoeling dat code die we schrijven makkelijk gebruikt kan worden in andere opensource projecten. (bvb Stel we maken een efficientere matrix vermenigvuldiging, dan zouden we deze code eveneens kunnen contributen aan projecten zoals octave).
Ook stelt dit ons in staat om andere gpl3 projecten te gebruiken, echter is het dan niet meer mogelijk om een andere license te verschaffen in eventuele latere stadia, maar deze keuze kunnen we alsnog later maken.

tools
documentatie: Eerst en vooral gebruiken we docygen voor de documentatie die naar de programmeur gericht is. Dit omdat dit snel te maken is, er snel proper uitziet en redelijk dicht bij de code staat. We zullen ook een wiki/website starten en onderhouden, waarin we eerder op user-niveau documentatie zetten.
Ook zullen we in ons projectdocument een oplijsting van functionaliteiten geven, zodat het ook mogelijk is om in pdf-formaat een overzicht te downloaden als referentie. In de documentatie zal ook meer info staan over de gebruikte algoritmes.

communicatie: Interne communicatie zal via een licht gemodereerd forum verlopen. Dit omdat het gemakkelijk is om discussie per threads bij te houden en achteraf kan je in de beginpost de conclusie van de discussie zetten. Dit forum hosten we zelf.
Externe communicatie zal verlopen via een website/wiki en zal vooral typische zaken zoals de documentatie, downloads en dergelijke bevatten.

development We werken met cmake zodat iedereen vanuit elk platform en vanuit de meeste IDE's mee kan werken aan het project. Bovendien zullen we git gebruiken als tool voor version management en voor issue tracking.

testen We zullen gebruik maken van google test om onze testcase te maken. We hebben hier allemaal ervaring in en het werkt ook gewoon goed.

specificaties
globaal het project zal bestaan uit 3 lagen:
1) een low-level api : dit is de eigenlijke library waarin we alles implementeren. Hier zal de meeste aandacht gaan naar performance, features (hoeveelheid algoritmes voor een probleem) en herbruikbaarheid. Deze library zal waarschijnlijk niet erg aangenaam zijn om als bioloog of gelijkaardig te gebruiken.
2) een high-level api : in deze laag geven we een eenvoudige interface die het makkelijk moet maken om onze library te gebruiken. Dit zal gebeuren door de gebruiker toe te staan functies te definiŰren in een wiskundige syntax, welke dan gecompileerd zal worden naar c++ code. We hebben deze vorm gekozen bovenop een constructie met wrapperfuncties en typedefs, omdat we zo lekker veel optimalisaties kunnen doorvoeren. Bovendien moet er dan ook minder zaken dynamisch berekent worden, aangezien we een deel van de bewerkingen reeds op voorhand kunnen vereenvoudigen.
3) een gui: we maken ofwel een standalone gui of wel een plugin voor bestaande tekstverwerkers/IDE. Hierin geven we de gebruiker de kans om aan rapid prototyping te doen in onze eenvoudige syntax. Dit is handig voor wanneer het eerder gaat om numeriek gedrag te bestuderen in plaats van daadwerkelijk een project te maken. Ook zal deze gui een export hebben die een header file en een (gecompileerde?) cpp file output, zodat je je functie kan gebruiken in je project.

beginplan
We beginnen met de basis voor ons project: een numerieke library. In het begin zullen we ons vooral focussen op zaken uit de (numerieke) lineaire algebra, waar we dus vooral met matrices, vectoren en dergelijke zullen werken. Later zullen we meer functies toevoegen uit calculus, verzamelingenleer, getallenleer enzovoort.
-> Onze library zal niet enkel een resultaat geven, maar zal voor zover mogelijk ook een bovengrens op de fout op dit resultaat weergeven.
-> Onze libary zal de gebruiker de keuze geven welk algoritme te gebruiken en indien dit niet gekozen is, kiezen wij automatisch de meest performante keuze, voor zover we er inzicht in hebben.
-> We willen multithreading ondersteunen en zullen onderzoeken of opencl een grote meerwaarde bied op vlak van performantie en wat de kost is op vlak van draagbaarheid. Niemand van ons heeft reeds ervaring met opencl, maar we gaan hier zeker prototypes van maken om toepassingen te verkennen en te testen.
-> dependencies worden vermeden en indien toch nodig zo veel mogelijk beperkt. Het project moet hoe dan ook eenvoudig te installeren zijn en er zullen voor meedere platforms installers geschreven worden.

vorm
De specificaties zullen geleverd worden in het input/output formaat. Tevens zullen we trachten onze algoritmes zo vaak mogelijk te bewijzen en indien de bewijzen reeds bestaan, ze toe te voegen.

design
Zoals meerderen erop wezen tijdens de vorige blog willen we zeker geen design-up-front, omwille van tijdsefficientie. We kiezen dan ook voor een incrementeel design, waarbij we per stap een archiectuur opstellen, specificaties opstellen, prototypes maken, testen en implementeren in ons project. We zullen dus een soort weekly version hebben, buiten dan het feit dat het niet wekelijks zal zijn.

versie 0.1
We beginnen hier met het begin: we willen een klasse Number, Vector en Matrix implementeren en alle basisbewerkingen: "+, -, *, /" moeten ook ge´mplementeerd zijn. We houden hier alvast rekening met de fouten op de resultaten (conditiegetal, absolute fout en relatieve fout) en het effect van de bewerkingen hierop.
We zullen in het begin uitgaan van floating_point arithmetiek om snel een werkende versie klaar te hebben en zullen dan een number ontwikkelen die gebruik maken van exacte arithmetiek die dezelfde interface biedt als onze floating_point Number.
Ook willen we al nadenken over optimalisatie zoals: wanneer je 2 diagonaalmarices hebt, kan de som veel efficienter gebeuren, echter moet omzetten van diagonaal naar gewone matrix ook snel en efficient kunnen gebeuren.

Het probleem
Hier hoop ik van invoer van jullie kant, maar er is een groot probleem. Ik krijg mijn groepsgenoten niet warm om voluit te gaan voor het project. Velen willen niet betrokken zijn in fases zoals design en dergelijke terwijl anderen gewoon heel sporadisch willen meewerken. Met andere woorden, ik ben de enige die er met volle kracht voor wil gaan.
Hoe kan ik dit oplossen? Is het beter dat ik het project start als een eigen project, waar ik dan mense toelaat om bij te dragen. te forken (zodat ik alvast kan beginnen, want nu moet ik wachten op de rest)? Moet ik een rangorde opstellen in bevoegdheden in het maken van beslissingen, zodat we al heel snel kunnen beginnen en taken kunnen verdelen over degenen die enkel willen implementeren? Alle input is welkom!