Entrades

S'estan mostrant les entrades amb l'etiqueta programació

Modificació del apprise de jquery

Imatge
Per al projecte en el que estic treballant, necessitava mostrar un popup amb un editor de text. L'editor elegit ha segut el tinyMCE editor (http://www.tinymce.com/). Per tant, vaig decidir modificar el apprise. Primer anem a explicar com funciona el tinyMCE. Necessita un textarea (etiqueta <textarea>) que transformarà en un editor. El podrem identificar per classe, per nom, per id... Per exemple per a transformar amb un identificador:  tinymce.init({selector: "textarea#"+idTiny });  Això seleccionaria el textarea amb identificador contingut en idTiny. Val a dir que gasta la nomenclatura jquery, ja que utilitza esta biblioteca. Aleshores, si volem que mostre un editor haurem d'afegir al popup, una etiqueta textarea, sobre la línia 180, veurem que trobem:   $Apprise.html('').append( $_inner.append('<div class="apprise-content">'  que té pinta de ser el codi, afegit les etiquetes <textarea> amb un identificador arreu (per...

Jasime TDD en javascript

Imatge
Em vaig decidir provar el jasmine. La veritat què 2.0 mola per què no depen d'altra biblioteca (ajuda molt) i s'arranca des d'una web (més fàcil no pot ser), ens el baixem i mirem (editem) l'arxiu SpecRuner.html. Ahí haurem d'incloure els tests i els nostres arxius .js: Per exemple, podem veure el generador de questionaris que on estic treballant ara (https://github.com/fercavi/jsquest). Els tests es poden agrupar, el grup haurà de rebre un nom i es fa amb la funció describe: describe("Generar html per a preguntes individuals", function() {   test1   test2 ... }); cada test es realitzarà amb la funció it: it("Generar una pregunta de resposta llarga", function() {   cos del test }); el cos del test deurà de tindre unes condicions, definides amb la funció  expect, per exemple: expect(obj1).toEqual(obj2) (caldria mirar la documentació per veure totes les comparacions, anem a veure un test sencer: describe("Generar html per...

Primer mal de cap en javascript, l'abast de les variables

Per sort o per desgràcia vaig decidir provar javascript (en part per què volia veure com funcionava jasmine per fer tests, hauré de fer un altre post amb això). Aneu a veure el meu mal de cap, imaginem aquest codi: function recorrecvector2(){   for(i=0;i<vector2.length;i++){       //fer algo amb el vector2      }   } for(i=0;i<Vector.length;i++){   recorrecvecto2(); } Així a simple vista pot resultat correcte, però, però, però... resulta que en Js al no haver declaració de tipus, les variables "comencen el seu abast" quan són declarades i no són "substituïdes" a no ser que posem var. Si ens fixem amb l'index i dels bucles, és la mateixa variable. tant en el bucle de fora com en la funcio recorrecvector2. Els resultats són esotèrics ;). Amb una declaració estricta de tipus això no passaria, però javascript (ni en general cap llenguatge d'scripting) solen tindre eixe tipus de declaració. Després de dos dies ca...

PHP vs Node.js: rendiment en concurrència

Bo, doncs per motius laborals i familiars he estat un poc absent (del bloc), però ja aprofitant unes proves que he fet al treball, vaig a mostrar els resultats obtesos. En principi, com sempre li he tingut mania al javascript, pensava que seria més lent que el php, però pareix ser que l'asincronisme fa que en determinades coses vaja molt més ràpid. La prova consisteix en recorrer un parell de taules enormes (400k registres) i fer alguns càlculs. He fet les proves amb el benchmarking de apache (ab), anem a veure el codi, he obviat les consultes per simplificar: PHP $sql=''; $preguntesResult =  mysql_query($sql) or die('Consulta fallidaA: ' . mysql_error()); $sqlrespostes= '' $respostesResult =  mysql_query($sqlrespostes) or die('Consulta fallidaB: ' . mysql_error()); while($line = mysql_fetch_array($preguntesResult, MYSQL_ASSOC)){   $preguntes[]= $line; } foreach ($preguntes as $pregunta) { } $cadena = ""; while($line = mysq...

TDDs a Unity (i V)

Al final, la demo la podeu veure a : http://hangedman.vicentfernandez.cat/ Necessitareu instal·lar el plugin d'Unity

Utilitzar un gestor de plantilles en php: Twig

Imatge
Tenia un parell de projectes a la vista, un personal i un altre per a una empresa en php, ambdós fallats ;) vaig començar a fer-los, i vaig pensar en utilitzar una cosa que tenia pendent: un gestor de plantilles en php. Em vaig decidir a utitzar Twig (no per res, però li tenia mania a smarty per què és el que gasta Vicent-Santi-programadorphp.es). Em va sorprendre com n'era de fàcil d'utilitzar, per a realitzar una aplicació normal he utilitzat 3 "capes": Scripts d'accés a la base de dades mysql en php, cada petició tornarà el resultat en JSON Scripts php que faran el processaran la plantilla La plantilla on es poden mesclar diferents llenguatges: Html,css, javascript i "Twig". Per al disseny he gastat bootstrap i com a framework javascript: jquery. Per a instal·lar el Twig només farà falta baixar-lo en una carpeta i enllaçar-lo a la nostra aplicació. Anem a fer per exemple la pantalla de login: <?php require_once 'Twig/Autoloa...

TDDs a Unity(IV)

Imatge
I per últim, ara que les obligacions familiars m'han donat un respir (tinc al menut dormint al meu costat), li posarem una interfície gràfica al nostre joc. Com ja sabeu he triat Unity 3D, per què m'encanta, i accepta el meu llenguatge de programació preferit (C#) per a l'scripting. El primer que he fet és crear uns apassionants gràfics amb el meu supertalent i el... mspaint!!! Per no avorrir-vos, vos pose un exemple: Com podreu suposar, he creat una imatge per cada "vida", com el típic joc del penjat, així només s'ha de carregar en cada moment la imatge corresponent al nombre de vides (es podria fer més difícil, composant, animant... però el disseny no m'agrada, és molt avorrit i tediós i valdria més l'esperat que l'escurada). Ara vos pose els objectes que he posat: Si mirem la imatge tenim: 1 Sprite, Vides que es on anem posant la imatge del penjat segons les vides 5 3DText (TextMesh): Paraula: La paraula que hem d...

TDDs a Unity(III)

Bo, seguint amb el joc del penjat, ara necessitarem alguna font de dades de les paraules. La forma més fàcil que he pensat és llegir d'un arxiu que continga un text (aleatori, lliure...) i extraiga una paraula, és a dir, Indique l'arxiu demane una paraula entre min i max lletres (ens permetrà configurar nivell de dificultat) si després d'un determinat nombre d'intents no la trobe retorne "fail" (alguna cosa debia de fer) Per tant només he trobat dos TDDs reals (altres com arxiu no existent... no els he contemplat, la veritat): TestFailWord() TestWordBetwenLimits() Analitzem el codi del primer test:  [TestMethod]         public void TestFailWord()         {             WordExtractorClass W = new WordExtractorClass(@"C:\Users\Vicent\Desktop\prova.txt", 100,200);             W.getNewWord();             Assert.AreEqual(W....

TDDs a Unity (II)

Bo, doncs com ja comentava intentarem crear un joc simple del penjat. Les regles són simple: Es tria una paraula Es tenen 6 vides (cap, braços, cos, cames) La paraula ix inicialment substituida cada lletra per un caràcter '_' Es pot elegir entre resodre i endivinar una lletra Si resols i encertes guanyes Si resols i no encertes perds una vida Si endivines una lletra se substituix el caràcter '_' per la lletra corresponent en la posició pertinent Si no encertes la lletra perds una vida Comencem a programar ;) Obrim el Visual Studio i creem un projecte C# (per exemple de consola). Si no elegixes un projecte buid com jo, a l'intentar fer els tests, et dona un error que no troba cap main, te tocarà crear un nou arxiu.cs, i posar-li una funció main dummy:  class Program     {         static void Main(string[] args)         {         }     } Afegim a la solució un proje...

TDDs a Unity

Sí ja sé que feia molt de temps que no escrivia al bloc, no és que ho tinga abandonat, però acabe de ser pare, i l'embaraç i la meua xiqueta i el treball han segut prou durets últimament. A banda, duc aprenent a gastar Unity3D estos temps, la veritat és que estic enamorat del seu sistema, i a més em permet gastar el meu actual llenguatge preferit: C#. Unity no és un entorn de desenvolupament, si no un entorn per a la creació de videojocs. Només es gasten llenguatges de programació per al comportament (scripting). Per a això és gasta un editor extern (ve per defecte el Monodevelop, però vaig aconseguir una vegada posar el Visual Studio.). Una de les primere limitacions que veig com a programador, és què Unity3d no està pensat en ells. Per tant no hi ha moltes opcions. Per exemple no he trobat cap eina per a realitzar els TDDs. Pot ser amb un plugin del Monodevelop, però vaig idear no pedre el temps. En un minijoc que estic realitzant ara (dels meus projectes mitjanets ja parlaré e...

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

Imatge
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)));   ...

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 tra...

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

Imatge
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

Imatge
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) {        ...

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...

TDDs + reutilització d'objectes en Visual Studio 2012

Imatge
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 ...