Des dels temps del Golf GTI, allà pel 2000, quan tenia un subwoofer Earthquake, no havia sentit uns greus tan greus. Ara ja sí. He remodelat l'audio que surt del PC per donar-li una mica de profunditat, de calidesa, de vibració. Ara ja la música no només s'escolta, es sent. He posat el següent: un amplificador Harman Kardon AVR3000, uns altaveus Bose 201 i un subwoofer KEF C4.
La clase clsDades, que veurem en detall, conté els mètodes per invocar les SP i les declaracions de variables que fan servir aquests mètodes. En canvi una classe derivada només té les inicialitzacions d'aquestes variables. El programa que genera la capa de dades crea automàticament aquestes inicialitzacions. Es a dir que el següent tros de programa està generat, no picat. Poso un exemple qualsevol, és només indicatiu.
Com es pot veure picar això a mà seria mortal, per aquest motiu hi ha un software que ho genera. Els paràmetres de les SP els obté de les pròpies SP, es a dir, han d'estar generades prèviament, abans de generar aquesta classe. La resta de llistes les obté a partir dels camps de la taula que estan al software generador. Si es marca un camp per serialitzar apareixerà a la llista de "Serialitzar", si es marca per deserialitzar... ja es veu la idea. Llavors la capa d'accés a BBDD es compon de la clsDades i un munt de classes derivades.
#13/12/2013 13:34 Programació C# Autor: Alex Canalda
Aquesta és la primer novel·la de la serie "Imperi" dels Malazans. Curiosament hi ha pocs personatges i tota l'acció transcurreix en una nit. Tracta de l'estratègia que fa servir l'emperador Kellavend per "simular" el seu assassinat i aconseguir infiltrar-se en el món de les ombres i seure en el ShadowThrone (en els altres llibres ell ja és "Shadowthrone"). Això ho fa amb Dancer, cap del servei d'assassins reials.
La gràcia de tot aquest entrellat d'intrigues és que està explicat des del punt de vista de dos personatges que tenen poc a veure amb la trama, la Kiska i Ferrule. La Kiska apareix després a altres llibres de la serie on ja s'ha convertit en guardaespatlles del mag Tayschrenn
En aquesta clase, com cobreix molta funcionalitat, hi ha parts que només serveixen per projectes web i en canvi per projectes d'un altra tipus (per exemple WinForms) donen errors de compilació (per que no hi ha el HttpRequest). Per això he fet servir la compilació condicional, típica.
Aquesta compilació condicional afecta a la serialització, deserialització ja que aquests mètodes no es fan servir en projectes no web. Per això es defineix una constant (o símbol) a Projecte -> Propietats -> Build -> Conditional Compilation symbols. Cal vigilar de definir aquest símbol en totes les configuracions (Debug, Release...).
#11/12/2013 11:55 Programació C# Autor: Alex Canalda
La clsDades conté les declaracions de les diferents variables que fa servir. La gran majoria són arrays de clsCamps. Poso el codi comentat on es veu clarament que fa cada un d'aquestes variables. En les classes que hereten de la clsDades s'inicialitzen les variables amb els valors corresponents a una taula concreta de la BBDD.
publicclass clsDades
{
/// <summary>/// Prefix dels paràmetres de les stored procedures, /// útil per distingir-los de variables declarades dins de la SP./// </summary>publicstring Prefix = "p";
/// <summary>/// Paràmetres del GET, també són params del GETTOP/// </summary>public clsCamp[] ParamsGET;
/// <summary>/// Paràmetres del INS/// </summary>public clsCamp[] ParamsINS;
/// <summary>/// Paràmetres del UPD/// </summary>public clsCamp[] ParamsUPD;
/// <summary>/// Paràmetres del DEL/// </summary>public clsCamp[] ParamsDEL;
/// <summary>/// Paràmetres del QUERY/// </summary>public clsCamp[] ParamsQUERY;
/// <summary>/// Camps que retorna el GET i que seràn columnes del DataTable resultant/// </summary>public clsCamp[] CampsResultat;
/// <summary>/// Cadena de connexió a BBDD/// </summary>publicstring CadConnBBDD;
/// <summary>/// Nom de la SP que fa el GET, p. ex: CLIENTS_GET/// </summary>publicstring spGET;
/// <summary>/// Nom de la SP que fa el INS, p. ex: CLIENTS_INS/// </summary>publicstring spINS;
/// <summary>/// Nom de la SP que fa el UPD, p. ex: CLIENTS_UPD/// </summary>publicstring spUPD;
/// <summary>/// Nom de la SP que fa el DEL, p. ex: CLIENTS_DEL/// </summary>publicstring spDEL;
/// <summary>/// Nom de la SP que fa el QUERY, p. ex: CLIENTS_QUERY/// </summary>publicstring spQUERY;
/// <summary>/// Nom de la SP que fa el COUNT, p. ex: CLIENTS_COUNT/// </summary>publicstring spCOUNT;
/// <summary>/// Objecte conexió a BBDD. Útil per si es vol fer servir/// tota l'estona la mateixa conexió, sense obrir i tancar cada cop./// </summary>publicSqlConnection SQLConn = null;
/// <summary>/// Objecte que conté la transacció. És opcional fer-ne servir./// </summary>public SqlTransaction SQLTrans = null;
/// <summary>/// Indica que la taula té un camp identat/// </summary>publicbool TeIdentitat = false;
/// <summary>/// Indica si la taula fa servir una cache de JSON/// </summary>publicbool TeCache = false;
/// <summary>/// Indica si un INS/DEL/UPD netegen la cache automàticament/// </summary>publicbool AutoNetejaCache = true;
/// <summary>/// Nom de la taula/// </summary>publicstring NomTaula = "";
/// <summary>/// Nom del camp identitat/// </summary>publicstring Identitat = "";
/// <summary>/// Llista dels camps que es serialitzen per enviar al navegador/// </summary>public clsCamp[] Serialitzar = null;
/// <summary>/// Llista de camps que es deserialitzen quan arriben del navegador/// </summary>public clsCamp[] Deserialitzar = null;
//Canviar de projecte en projecte,
//ha de tenir el parametre Taula varchar(50) i el parametre URL varchar(500)privatestring SP_Cache = "DI_EXP_CACHE_DEL";
}
#11/12/2013 11:27 Programació C# Autor: Alex Canalda
Una adorable pel·lícula de robots que lluiten contra monstres. On la física és lo de menys, les tones (o milers de tones) es mouen amb agilitat, la inèrcia és lo de menys, els reactors nuclears van molt bé. On al final d'una lluita t'enrecordes que tens que fer servir una espasa (anda! jo donant cops de puny i resulta que tenia una espasa aquí amagada). Pressing catch amb bèsties grosses a càmara lenta. Edificis destruïts, vaixells fets servir com a porra... Deliciós! No cal pensar gaire i els defectes la fan millor. Ferpecte!
En el desenvolupament d'aplicacions web cal una infraestructura per accedir a les dades a la BBDD, es a dir les stored procedures (SP) i també cal una forma fàcil per invocar-les. I a ser possible que NO sigui muntar les crides a mà. Per això he muntat la clsDades.
La clsDades és la classe principal que conté tots els métodes d'accés a BBDD. S'encarrega d'invocar les SP en funció de la definició concreta per cada taula. Es per això que la resta de classes hereden d'aquesta, i l'amplien definint amb detall els diferents paràmetres de cada SP.
Per tan la clsDades, de fet, conté els mètodes, mentre que la definició la tenen les classes particulars corresponents a cada taula. Per això la clsDades conté la declaració de les llistes de paràmetres i la inicialització es troba separada.
El primer que cal definir són les classes de suport que fa servir la clsDades, es a dir la classe Tipus i la classe clsCamp. Concretament la clsDades conté vectors d'objectes clsCamp destinats a construir els paràmetres de les SP. Per això detallaré aquestes classes primer, a demés que són força simples.
La clase Tipus indica el tipus (valgui la redundància) de BBDD, es farà servir per indicar el tipus en la clase Camp i després en el codi queda més clar.
publicstaticclass Tipus
{
publicconstint bit = 1;
publicconstint tint = 2;
publicconstint bigint = 3;
publicconstint nvarchar = 4;
publicconstint datetime = 5;
publicconstint nchar = 6;
publicconstint dec = 7;
publicconstint varchar = 8;
publicconstint chr = 9;
publicconstint date = 10;
publicconstint time = 11;
}
La classe camp també és força senzilla, conté informació d'un camp de BBDD.
Groucho Marx: Señorita, ¿se acostaría usted conmigo por un millón de dólares?
Señorita: Por supuesto!
Groucho Marx: ¿Y por un dolar?
Señorita ofendida: ¿Qué se cree usted que soy?
Groucho Marx: Eso ya ha quedado claro querida, ahora estamos negociando el precio.
Dell ha anunciat el seu nou monitor 4K de 32 polzades, el UP3214Q. Resumint: 31.5", panell IGZO de 10 bits per color (igual que el DisplayPort) amb una resolució 3840x2160 que vol dir 140 PPI (Pixels per inch). $3,500USD de res...
Finalment veurem les pelis FullHD en una finestra petitona...