Passa al contingut principal

Entrades

S'estan mostrant les entrades d'aquesta data: 2013

M'estrene en la programació de videojocs ;)

Tinc un greu problema que ja he descrit en uns altres posts. M'agrada provar una tecnologia i quan ja faig algo, perd l'interés en mi. Ara intentaré què no ho faça. Em vaig proposar a mi mateixa programar videojocs. És una de les meues assignatures pendents. Després de pegar-me algunes òsties que altres, especialment, per què pensava que la part principal era la del programador, però ja he vist i comprés que no, he trobat la tecnologia adequada. Farà uns 16 anys ho vaig intentar en ASM (i no ho vaig aconseguir). Després en Pascal, C... fa poc menys d'un any ho vaig intentar amb  MonoGame. També em vaig cansar. Finalment he aconseguit dur un xicotet projecte a terme amb Unity. La primera ventaja que té, és que pots comprar (alguns són debades) assets (gràfics, so, scripts...), cosa que et permet, si eres un patan amb els programes de disseny gràfic com jo, obtindre algua imatge per als jocs. La segona és que té una versió gratuïta (amb certs límits). Total, que després de un

Rotllo personal ;)

Després de pegar-li voltes ja he trobat què m'agrada fer. Sempre he pecat de no agradar-me els projectes grans i llargs (sobretot açò). Em canse de seguida de fer el mateix. No valdria per a estar en una línia de muntatge  ni per a professions no repetitives (o potser sí, mai se sap que et vindrà en aquesta vida). Sempre m'ha agradat fer un projecte curt, una "proveta" per provar tal o qual cosa i ja està. Ja duc temps programat aplicacions per a mòbil (mini aplicacions). Però trobe que estic a gust. Es poden fer de més complicades, però. Però també simples. Una funcionalitat i avant. Això et permet fer una aplicació en dos-tres setmanes (de moment açò és el meu hobby, possiblement en dos-tres dies podria fer alguna de les aplicacions que ja tinc publicades, inclús alguna en menys). El cas és què, de moment, mentres dure sóc feliç i prompte (espere) em clavaré al món dels jocs. Veure'm com queda la cosa... ;)

Clean Code... WTF? És realment viable?

Després d'haver llegit un bon grapat (realment no tants però així quede d'entés ;)) de llibres sobre fer codi clar, bona programació... no sé com dir-ho, en anglés Clean Code, he trobat a l'anar a modificar (adaptar) programes d'altres (programari lliure) que no hi havia per on agarrar-ho. Vaig a posar un cas (no, no vaig a refactoritzar-lo ni vaig a menyspreuar-lo) en el que volia "treballar" actualment. Volia fer una modificació del fòrum Simple Machines Forum (el fòrum és una passada, va molt bé i inclou de serie una versió per a mòbil que ve molt bé). El resultat és què  la funció (on supose) que volia fer la modificació, té un tamany de més de 600 línies!!! Recordem que uns dels principis (segons l'Uncle Bob) és què les funcions han de fer una i només una cosa, i han de ser curtes. El que caldria supose què és refacoritzar-lo, però a veure qui és el guapo que es posa ara a fer-ho  (hi ha molt de codi al fòrum). He de dir també que el codi està fet en

Secret Santa

Per fi, i fruit de la necessitat he creat una nova "aplicació". Realment és una web per a mòbil, però que es pot visitar com aplicació des de qualsevol mòbil (bo, de moment només windows phone i android). Es tracta d'una aplicació per a fer els sortejos d'amic invisible. Cada usuari tindra un altre usuari com a resultat. També es pot veure via web a : http://secretsanta.vicentfernandez.cat Podeu veure unes captures de pantalla:

Comence un curs de programació

He començat un curs de programació (realment seran una série de cursos), obert a tot el públic clar (es pot entrar com a visitant), http://moodle.plataformesdigitals.cat/course/view.php?id=8 La idea és anar fent un curs o cursos de totes les fases de programació: Programació bàsica (Introducció a la programació)  Entorns de programació Programació Orientada a Objectes Programació de jocs Programació RAD Programació Mòbil Programació servidor TDDs Gestió de projectes (gestió de codi, personal..) ...

Quan dos "gurús" recomanen el contrari

Ja m'ha passat alguna vegada i fa poc estava comentant-ho amb un col·lega (Hola Master Jail /Juan Ramon ;)). Després de llegir-me el llibre Clean Code de Robert C. Martin, vaig començar a llegir-me el llibre Test-Driven Development by Example de Kent Beck. El llibre me l'havia recomanat molta gent, des de Juan Ramon fins al mateix autor de Clean Code al seu llibre. La meua sorpresa ha sigut al inspeccionar les recomanacions d'eliminació de duplicitat al fer els tests, al final el codi del test queda així: public void testMultiplication() {    Dollar five= new Dollar(5);    assertEquals(new Dollar(10), five.times(2));    assertEquals(new Dollar(15), five.times(3)); } o encara pitjor: public void testEquality() {      assertTrue(new Dollar(5).equals(new Dollar(5)));      assertFalse(new Dollar(5).equals(new Dollar(6)));          assertTrue(new Franc(5).equals(new Franc(5)));      assertFalse(new Franc(5).equals(new Franc(6))); } En canvi, Bob Marti

TDD estan molt bé però...

Doncs com ja heu vist (si és que algú segueix el meu bloc, clar ;)) que estic intentant aprendre a programar decentment. I intente, per això, gastar TDDs. Però de vegades em planteja més problemes propis del sistema de test, que si no els gastara. L'exemple que m'ha fet "pedre" unes quantes hores, és amb el nunit de Visual Studio, fent un test d'una classe em C# de Windows Phone Class Library (target 7.1 SDK, no sé si això és rellevant però pense que no). En resum, el test seria algo així:    [TestMethod]         public void testAutenticadorLogin()         {             Autenticador au = new Autenticador("http://localhost", 800, "test", "test");             au.login();         } Què simplement intenta autenticar mitjançant un webservice instal·lat en localhost, l'usuari test i la contrassenya test. Doncs sempre que intentava llançar el test em traia una excepció d'arxiu no trobat. Després de diverses proves, inclús

Múltiples plataformes amb Visual Studio II ( i Estrenant GitHub )

Ja fa temp que volia fer alguna cosa semblant. Ja fa temps vaig crear un parser C# per a feeds atom que val tant per Android, com per a WP ( i deuria de valer per a IOS també). Molt modest però valia per a fer aplicacions que llegiren de blogs personals. El parser formarà part de d'una col·lecció que aniré afegint anomenada (molt originalment) util, que es pot trobar en  https://github.com/fercavi/util . La classe anomenada cAtom (notació hongaresa, la vaig fer abans de llegir Clean Code ;)), només té una operació, Run() ;) (realment 2, ara ho explique).  Quan acabe el Run tindrà dos llistes, una de títols (getTitle) i una de notícies (getValue). Els passos seran els següents: 1. Inicialitzar-la en el constructor, diguent-li la url que volem llegir i, opcionalment, el nombre d'elements que volem extraure (per defecte 10). 2. Afegir-li un callback, en els mòbils la majoria d'events són asíncrons, per tant necessitarem una funció de callback que serà la que carregue la i

Múltiples plataformes amb Visual Studio

Si recordem estàvem creant un dau fa uns quants posts (m'ha pillat vacances, i les vacances, vacances són ;)). Ara anem a aprofitar el projecte que teníem  que simplement era test i la classe dau, i anem a afegir un nou projecte, per exemple Windows phone: (Botó dret sobre la solució i afegir nou projecte) seleccionem Windows phone: Afegim un botó que quan fem click cree un dau, i mostre el número. Haurem de referenciar els projectes Project->Add Reference, seleccionar projecte i posem el projecte dau per a poder crear el dau, a banda de es recomanable que tot tinga el mateix namespace, si no haurem d'anar afegint usings. Es possible que si actualitzeu els namespaces vos done problemes. Haureu també de canviar-ho als arxius .xaml: x : Class ="RollDice.App ... on RollDice és el nom del namespace . Afegim un botó, i un event capturador de l'event: private void Button_Click_1( object sender, RoutedEventArgs e) {             Dau d = new Dau

Xamarin Studio

Hem va quedar pendent, fa dos posts, explicar com fer una solución en VS multiplataforma. Per a explicar-ho el primer que necessite és un framework multiplataforma. He elegit Xamarin, podía haver elegit qualsevol altre, però este em permet escriure en C# tot el codi, davall el paraigüa de Mono. Si només vols fer programes sense reutilitzar cap component extern ni res, la versió és gratuïta. Si per exemple vols fer jocs i utilitzar Monogame (port de XNA per a moltes plataformes) ahí has d'adquirir alguna versió de pago. També pot ser que vullgues utilitzar VS per a fer programes en Android amb C#....  Doncs hauràs de pagar mínim 300$ per desenvolupador per plataforma mínim. Pot parèixer un poc car, però si vas a dedicar-te professionalment a desenvolupar aplicacions per a móbil no tens més remei (d'este o d'altre similar). M'explique, imaginem que vas a fer un programa per a mòbils i vols fer-ho per a les plataformes més gastades (Windows phone, Iphone i Android). Tens d

Presumint d'ordinador

Mira que m'agrada presumir de ben poques coses. De fet em considere (i em solen considerar) una persona ben modesta. Però ara no me n'he pogut estar... Vaig a presumir d'ordinador: Vaig a sustituir el meu ordinador de sobretaula (amb le stres pantalles) per este bitxet. No està mal, eh? Especificacions: i7 3610QM 8GB de RAM (ampliables a 32) 128 GB SSD (si no teniu disc SSD vos ho recomane abans de canviar de PC) 500 GB de disc mecànic ATI 7970M  2GB (casinà ;)) Això si ho he fet de segona mà, i el problema és que ara no puc fer-li ni una extensió de garantia ni assegurar-lo (no trobe en cap lloc que ho vullguen fer). Però és una filigrana... estic escrivint este post des d'una màquina virtual, sense apenes drivers i MacOS va com el llamp. (No, no m'estic passant a MacOS, però per a fer aplicacions per a iphone/ipad/macos no tens un altre remei). Em queda fer algun test en algun joc, de moment, el heaven engine trau uns 40-50fps, mentres que la

TDDs + reutilització d'objectes en Visual Studio 2012

Doncs això, mai m'he mostrat partidari de cap metodologia de programació, ni tan sols de la programació orientada a objectes... però deu ser que em faig major ;) Anem a matar en un post dos pardals d'un tir. Anem a gastar una de les bases de les metodologies àgils (en realitat no té per què, es pot emprar en qualsevol metodologia) i anem a començar a veure com fer codi "multiplataforma". Anem a gastar Visual Studio 2012. Creem una solució de Portable Class Library (en C#): Creem una nova classe, Dau: namespace RollDice {     public class Dau     {     } Sense cap mètode. Per què sense cap mètode? Ahí està la gràcia dels TDD (Test Driven Development, Desenvolupament Orientat a Test). Anirem omplint la classe segons fallen els tests. Ara anem a afegir una nova solució, què serà de test c#: Ens crearà una classe de test buida, li canviarem el namespace per a que siga el mateix que la classe dau: [TestClass]     public class testDau     {          [TestMethod

Lectures per a l'estiu

Tinc un poc abandonat el blog, per què no he tingut massa temp, estic fent proves i llegint llibres. D'això va este post, de llibres. Lectures recomanades per a ser un bon programador (multiplataforma), especialment dedicat per a jocs. Comencem amb llenguatges de programació, C#, The C# Player's Guide, de TB Whiteker, he arribat a ell mitjançant els seus tutorials: No es pot trobar per kindle, però en Amazon està per 20€. C# trobe que és el llenguatge del futur (més que java), òbviament em puc enganyar (de fet, segur que m'enganye tenint en compte la meua sort en les apostes). I gràcies a la tasca dels xics de Mono, es pot programar per a quasi qualsevol plataforma. De vegades cal una altra biblitoeca (Xamarin, tinc un post pendent sobre eixe tema). Cal recordar que el creador de C# és el mateix què el de delphi, per algo serà... Una vegada tenim clar com es programa en C#, necessitarem que ens diguen com programar per mantindre bé el codi.Al principi pareix una pèrd

Invertir incrementa la productivitat?

De vegades, pareix que invertir és cremar diners, sobretot si observem a l'empresariat "patri". Ja duc diversos dies fent proves, cavil·legant, investigant... En el tema de fer desenvolupaments multiplataforma. La idea més fàcil, baixar-se el sdk de cada plataforma (sol ser gratuït) i ala, a la marxeta. Parlant de mòvils: BB, WP, IOS, Android sense comptar versions. Damunt cada versió té el seu llenguatge de programació (C++,C#-VB,Objective C, Java), encara què són prou pareguts. És a dir que estariem parlant de 4 entorns en 4 (o més) llenguatges de programació. Crec que unificar un programa amb eixos criteris podria ser un esforç massa gran, inclús per als que no ens dediquem professionalment a açò (almenys no de moment). Mirant alternatives, he trobat diverses, sobretot amb diferents preus: Phonegap  http://phonegap.com/ Gratuït, però només treballa amb interfícies Xamarin http://xamarin.com pots fer aplicacions simples gratis amb C#, per a IOS i Android. Hi ha

Nova aplicació: Club Taekwondo La Safor

A la espera de que em deixen drets per a públicar dades i  utilitzar logos del Club de Taekwondo al que pertany, Simplement és un lector de Atom, que he enllaçat al blog del club (http://taekwondolasafor.blogspot.com.es). Bàsicament he realitzat una xorrada de classe lectora, que explicaré en un post posterior, i he posat un component webbrowser que llig del que li passa la classe lectora de Atom, Canviant-li els logos, el  fons, i un línia de codi (la url del blog), es podria fer per a qualsevol Atom.

Passant POST i GET paràmetres en windows phone

Un dels problemes principals quan accedim a urls és passar paràmetres amb GET i POST. No és molt complicat, però pots tirar-te uns quants dies buscant informació si tens la mala sort que tinc jo ;). Primer ja hem treballat amb GET, és la forma "normal" amb que hem treballat en anteriors posts, simplement amb un webclient i  esperar l'arxiu de manera asíncrona, per a passar par1, par2... per get els afegirem a la url que obrim:             WebClient wc = new WebClient();             wc.DownloadStringCompleted += HttpCompleted; //funció que es cridarà quan es connecte l'event             wc.DownloadStringAsync(new Uri("http://url?par1=valor1&par2=valor2"));  private void HttpCompleted(object sender, DownloadStringCompletedEventArgs e)         {             if (e.Error == null)             {                   //en e.Result tindrem l'arxiu com a cadena de text              }        } El problema és que si volem fer-ho per POST o si volem afe

XNA: el perquè de tot plegat

Parafrassejant el títol del mestre Monzó, duc uns dies pegant-li voltes a una cosa, la idea de fer un joc. No tinc massa temps, i estic fent massa coses a l'hora, però m'apasiona la idea d'un joc multiplataforma. Mai de la vida havia programat videojocs, la veritat, mai m'havia agradat. Però ara em pica el cuquet. Però bé com a introducció personal ja n'hi ha prou. He estat mirant, i vaig a provar amb XNA. El què més m'ha agradat és que el mateix codi (repetisc, el mateix codi), val per fer fer programes(jocs) en: -Windows phone -Windows -XBOX Anem a fer una demostració (basada en les tutorials de RB Whitaker): Instal·lem el VS2010 (podem fer-ho amb la versió express, gratuita), i després del SP1, ens baixem i instal·lem el XNA. Una vegada instal·lat podrem elegir quin tipus de projecte volem: Com no tenim (jo almenys) una XBOX, ens haurem de conformar amb un Microsoft Game ;) Veurem que tenim una classe Game1, dins d'un namespace windowsGame2

MyQuery per a Windows Phone

L'aplicació ja està en marxa!!!! Treballant en un projecte nou, desenvolupament oficial per a terminals amb windows phone.  En projecte MyQuery: poder executar consultes SQL a qualsevol servidor MySQL, sent necessaris(alguns són obvis) els següents paràmetres: Servidor de base de dades usuari password Consulta SQL base de dades Pròximament i possible: Xifrat Altres servidors que no siguen MySQL L'aplicació consistirà posar els paràmetres de connexió, introduïr la consulta (bé siga select, insert, alter..) i es mostrarà el resultat de forma tabular. Òbviamnet no hi ha drivers de mySQL per a windows phone, ni trobe què per a cap dispositiu mòvil, per tant he havut d'utilitzar un servidor intermediari que farà les connexions i l'aplicació rebrà el resultat. L'aplicació es gratuïta i a veure si es pot traure algo (si pagara el servidor ja em pegaria amb un canto en les dents) mitjançant adds. Estic platejant-me una aplicació que costé

Per fi!, tema dominat: mysql asincron en node.js

Escoltant marea (no té res a veure, però així indique preferències musicals ;)), he trobat la solució al problema dels posts anteriors. Resulta que la funció query del paquet és asíncrona, és a dir que no se pot saber quan s'executarà, però serà quan s'acabe la funció que la crida. Aleshores el que hem de fer és no retornar la resposta fins que no s'execute el callback. I així ens evitem el problema, si has estat seguint el post entendràs la consulta i tot: function fservidor(request, response){ var resXML="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><resposta>"; function frequeston(){   // El codi 200 vol dir què la petició ha segut correcta, i enviem la resposta en text pla.    response.writeHead(200, {          'Content-Type': 'text/plain'       }); //end writehead  }//end frequeston request.on("end", frequeston);  var client = mysql.createConnection('mysql://'+user + ':'+pass+'

L'estotèric abast de les variables en node.js

Com ja comentava en l'anterior post, ja duc un temps barallant-me amb handlers i demés malea del node.js. Crec que he descobert un altre problema de node.js. L'abast de les variables. Si jo definisc una variable en una funció, les modificacions fetes en la variable en les funcions definides dins no quedaran guardades . Trobe què és molt més fàcil veure-ho amb un exemple, si jo tinc el següent codi paregut als exemples anteriors (recordem la taula de personatges del joc de rol simple): var resXML="<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><resposta>";    var i=0;    client.query(action, function getSQL(err,result,fields){      //console.log(fields);      if (err){        console.log("Error: " + err);      }//if      resXML = resXML + "<" + fields[0].table + ">";      for(i=0;i<result.length;i++){              resXML = resXML+"<"+fields[i].name+">" + i + "<&qu

Handlers d'errors en node.js quina bogeria ;)

Després de dos dies tornat-me varilla amb els handlers d'error en node.js, al final, quasi de casualitat he descobert que passa. Imaginem que vull connectar a una base de dades: function doLogin(){   var client = mysql.createConnection('mysql://'+user + ':'+pass+'@'+server+'/'+database);   client.connect();  }//function doLogin La funció connect pot fallar en cas que els paràmetres siguen incorrectes, no hi haja connexió... si eixe error no és capturat, tanca el programa (tancant el servidor). Primer proví amb try catch, herència d'altres llenguatges no tant moderns ;) i no, no vaig aconseguir capturar l'error. Per tant vaig llegir que la millor cosa que podia fer en javascript (node.js) era afegir  una funció callback (que s'executa en cas d'error, i passada com a paràmetre). La funció ha de ser algo així:   function errResult(err,result){   if (err != null) {          berror = true;    }   else{        berror = false;   }  }//

Accedit a un webservice des de windows phone

Bé, per fi les meues obligacions m'han deixat un ratet per fer el que volia fer fa molt de temps, una aplicació de windows phone que accedira al webservice qeu vam crear en node.js farà mig any. No vaig a entrar en com s'instal·la el sdk per què és abaixar un downloader  de la web de microsoft i ja està. A més, el sdk és gratuït, et baixa la versió de Visual Studio 2010 Express (gratuïta) i tot. La idea era, quan s'aprete un botó, connectar-se a un webservice, que ens retornarà un xml, processar-lo i mostrar-lo en un grid ;) Ha segut ben farragós, per què programar per a dispositius mòbils no és com programar en escriptori, però ha estat divertit... ;) Anem per feina. Primer de tot l'aspecte visual, afegirem un botó i un grid: Ara anem a programar que farà el botó, ja què obtindre un xml remot, no és difícil, però tampoc és tant fàcil com pareix, ja què windows phone no permet les connexions sincrones, i per tant hem de posar un handler per a quan es complete la de

Kodu game Lab

Aprofitant que com a professor tinc accés a algunes eines de microsoft, m'he trobat aquesta eina. Consisteix en un game maker, extremadament fàcil d'utilitzar. De fet està pensat per a docents que no són programadors/informàtics. Un mes després d'haver fet els tutorials he pogut fer aquest exemple en 10 minuts.  Bàsicament consisteix en posar objectes predefinits (pomes, arbres...) i actors (el bo, el dolent...). Els actors poden realitzar accions bé sobre els objectes o bé sobre els altres actors, les accions seran definides mitjançant els programes, d'una manera molt senzilla com veurem més avant, però en resum seran sempre una serie de condicions (WHEN) i accions a realitzar quan es cumplisquen les condicions (DO). La idea de l'exemple a construir era la següent: Un món buid, on hi ha l'actor bo i l'actor roïn.  Si l'actor roïn ens pilla perdem el joc, però si no ens pilla abans d'agafar 5 pomes, guanyem. Molt simple i pas a pas, comencem en un m