Aquest passat cap de setmana hem visitat el parc del Laberint d'Horta. Està força bé i encara que hi havia una gentada es podia caminar sense problemes. El laberint pròpiament dit està força bé, ni massa senzill ni massa complicat. Tenia alguns arbres arrancats però amb una mica d'imaginació es fa veure que estan. La resta de parc també dóna per una passejada molt agradable, sobre tot el pavelló que hi ha dalt de tot (també hi ha uns lavabos).
Les obres van començar a l'any 1791 quan Joan Antoni Desvalls i d'Ardena, marquès de Llupià, quart del Poal i marquès consort d'Alfarràs, propietari del terreny, va crear el disseny d'un jardí neoclàssic en col·laboració amb l'arquitecte italià Domenico Bagutti. L'execució es va fer a càrrec dels mestres d'obres Jaume i Andreu Valls i del jardiner francès Joseph Delvalet i s'acabà el 1802.
A mitjans del segle XIX els descendents del marquès van ampliar el parc sota la direcció de l'arquitecte Elies Rogent pel costat del torrent d'en Pallós amb un jardí romàntic amb parterres, placetes, grans arbres i una cascada. A més van afegir al jardí neoclàssic un canal d'aigua entre la terrassa superior i la terrassa intermèdia.
El 1880 es va crear un jardí domèstic al costat del palau Desvalls.
A finals del segle XIX la finca Desvalls esdevé l'escenari de vetllades socials i culturals amb representacions de teatre a l'aire lliure.
L'any 1967 la família Desvalls cedeix el parc a l'ajuntament de Barcelona que el va obrir al públic al 1971. Amb diners de la Unió Europea es va sotmetre a una àmplia restauració l'any 1994.
Avui el parc és un jardí-museu amb un nombre de visitants limitat a un màxim de 750 persones al mateix temps per preservar l'àmbit natural i les estructures de l'àrea. L'antic palau Desvalls acull des de l'any 1993 el Centre de Formació del Laberint (un institut municipal per a la formació en jardineria que depèn de Parcs i Jardins de Barcelona) a més d'una biblioteca especialitzada.
Quan faig un SSIS (Sql Server Integration Service) per mi, vull que quan acabi m'envii un mail amb el resultat de l'execució, tan si ha anat bé com si ha anat malament.
#16/03/2014 00:26 Programació SQLServer Autor: Alex Canalda
Fa temps que vaig donant-li voltes al tema de la transferència de fitxers per Internet. Recentment el meu proveïdor d'Internet ha tingut a bé augmentar-me la velocitat, passant a 1Gigabit de baixada i 200Megabit de pujada i clar transferir fitxers grossos ja és possible.
A casa tinc un router GPON (Gigabit Passive Optical Network) però és força limitat a nivell de gestió de ports i protocols. Aleshores un protocol com el FTP queda descartat per que al ser multiport sempre em dóna problemes (el 21 és pel canal de control però després cal establir el canal de dades (amb un mètode passiu o actiu) i aquí és on es donen els errors ja que cal obrir un rang de ports i el GPON això no ho fa). A més és un protocol antic i no he trobat una implementació gratuïta segura (el Filezilla server no hem dóna prou seguretat).
Així que m'he posat a investigar i he trobat eines privades que cobren per transferències mensuals (fins a 2GB gratis), he trobat el FTPS (que és el FTP però sobre SSL i amb TLS). El FTPS també queda descartat per que, encara que és més segur, té el mateix problema que el FTP, és multicanal.
Llavors he trobat el SFTP, o SSH File Transfer Protocol. I aquest està securitzat, tot viatja encriptat. És monoport, fa servir el port 22, així que gestionant aquest port en tots els tallafocs hi ha prou (tallafocs de Windows i en el GPON). El protocol és relativament nou, la última versió és de l'any 2006.
Per fer la transferència es necessita un programa client i un servidor.
Com programa servidor he fet servir el de Bitvise que per us personal i no comercial és gratuït. El servidor dóna suport a tot el protocol SSH, però és fàcil quan s'instal·la limitar-ho a la transferència de fitxers (ho pregunta). Un cop instal·lat cal crear un/varis usuari virtual. Pot vincular-se a usuaris normals de Windows, però he preferit no fer-ho. Si es fa servir un usuari virtual s'ha d'especificar a quines carpetes té accés. I donar permisos NTFS al grup BvSsh_VirtualUsers sobre la carpeta en qüestió.
Com a part client BitVise també té un programa, que no està gens malament, però he fet servir el WinSCP. És de programari lliure i té una versió "portable" que no s'ha ni d'instal·lar, cosa que en certs llocs va molt bé. El cert és que ha estat descarregar, posar usuari/contrasenya i començar a transferir.
Aquest llibre pertany a la sèrie de "The Lost Fleet" (la flota perdida). La "Flota perdida" està composta de 5 llibres (de fet es podrien ajuntar en un sol però l'autor els va traient per anar cobrant).
Aquest llibre comença tot just on acaba el cinquè de la sèrie anterior. En els 5 llibres anteriors es tracta de la lluita de la flota de la "Aliança" con els "Mons Sindicats", durant aquesta lluita es descobreix la presència d'una estranya raça alienígena que vol exterminar la humanitat fent que s'enfrontin dues faccions, fomentant la guerra. Aquest fil argumental no acaba al 5 llibre, es per això que hi ha la sèrie "Beyond Frontier" (més enllà de la frontera). En aquesta sèrie s'envia la flota més enllà de l'espai ocupat per la humanitat per investigar els aliens. En el primer llibre tot just s'aconsegueix preparar la flota i començar la missió. I acaba abruptament, típic en aquest autor. Suposo que va escrivint i quan porta 500 pàgines, klak! Talla i següent llibre. El cert és que m'agraden les "space opera" i aquesta, encara que no és molt original, es deixa llegir força bé.
Per implementar la cache en la clsDades calen diferents parts: la taula, les stored procedures (SP) i el codi per consultar i invalidar parts de la cache.
En el primer post ja he parlat de la taula, les SP són les normals per qualsevol taula (GET, INS, DEL, UPD), excepte que com no hi ha camps del grid no es genera la SP QUERY per la taula CACHE.
Cal centrar-se doncs en la consulta a la cache i com s'invalida un conjunt de registres de la cache quan hi ha una operació de modificació de dades (UPD, DEL, INS). La consulta de la cache consisteix en modificar la funció que genera els grids en la clsHelper. Aquesta consisteix en el següent codi:
if (TA.TeCache)
{
URL.AppendFormat("{0}{1}", Ordenacio.ToString(), SentitOrdre.ToString());
URL.AppendFormat("{0}{1}", Req["rows"], Req["page"]);
ParamsCache.Add("Taula", TA.NomTaula);
ParamsCache.Add("URL", URL.ToString());
ParamsCache.Add("GridID", GridID);
TBL = Cache.GET(ParamsCache);
if (TBL.Rows.Count != 0)
{
//Cache hit
Result = TBL.Rows[0]["JSON"].ToString();
return Result;
}
}
Si es dóna un cache miss (no es troben les dades a la cache) es fa un processat normal, però al final de tot es grava el resultat a la cache.
//Es un MISS cal fer un insert a la cacheif (TA.TeCache)
{
Params.Clear();
Params.Add("Taula", TA.NomTaula);
Params.Add("URL", URL.ToString());
Params.Add("GridID", GridID);
Params.Add("JSON", Result);
Cache.INS(Params);
}
return Result;
Fins aqui és el que tracta l'obtenció de dades de la cache, ara toca la invalidació de la cache. Això es fa dins de la clsDades. Es pot configurar per que la clsDades per cada INS/UPD/DEL automàticament buidi la cache cada cop o cridar al mètode de neteja de cache explícitament des de la capa superior. A les funcions INS/UPD/DEL es posa el següent tros de codi:
if (TeCache && AutoNetejaCache)
{
ClearCache();
}
La clsDades té la funció ClearCache per tal que es pugui netejar explícitament la cache.
Dins del desenvolupament web hi ha un punt que a vegades no es té en compte quan es desenvolupa: la quantitat de dades a tractar en una taula. Quan aplicació entra en manteniment és habitual rebre peticions de que en algun punt l'aplicació va lenta, per que quan es va desenvolupar no es va valorar correctament l'estructura d'aquell punt i ara es pateixen les conseqüències.
Igualment quan hi ha un munt de dades el rendiment tard o d'hora es resenteix, és pot posar un hardware més potent, línies amb més capacitat però el pressupost marca el límit. És aleshores quan s'han de buscar alternatives. En el cas de la clsDades consisteix en activar la caché per una taula en concret. Normalment quan s'executa una stored procedure QUERY contra una taula amb milions de registres aquesta triga el seu temps, per molt que estiguin ben posats els indexos, total per extreure 20-50 registres d'entre milions. Aquests registres després s'empaqueten en JSON i s'envien al navegador de l'usuari. La caché es dedica a guardar els JSONs més usats, de tal manera que
Per aconseguir això calen varies coses:
Una taula on guardar el JSON, la taula que es diu CACHE.
Stored procedures per accedir a aquesta taula.
Interceptar en el codi les peticions dels grids per tal de veure si cal consultar la cache.
Interceptar en el codi els INS/UPD/DEL que invaliden la cache.
Començaré per taula cache que té la següent estructura:
Taula: camp que guarda quina taula estem cachejant.
Pantalla: pantalla on està el grid que estem cachejant.
Grid: ID del grid que estem cachejant.
Pag: pàgina del grid.
NumRegs: número de registres de la pàgina.
SortOrder: ordre del grid.
Filtre: filtre aplicat per obtenir aquests registres. Normalment el trec de la URL i el poso aqui tal com raja.
El codi de creació de la taula:
CREATETABLE [dbo].[CACHE](
[Taula] [nvarchar](20) NOT NULL,
[Pantalla] [nvarchar](20) NOT NULL,
[Grid] [nvarchar](20) NOT NULL,
[Pag] [int] NOT NULL,
[NumRegs] [int] NOT NULL,
[SortOrder] [nvarchar](30) NOT NULL,
[Filtre] [nvarchar](200) NOT NULL,
[Resultat] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_DI_EXP_CACHE] PRIMARY KEY CLUSTERED
(
[Taula] ASC,
[Pantalla] ASC,
[Grid] ASC,
[Pag] ASC,
[NumRegs] ASC,
[SortOrder] ASC,
[Filtre] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
La resta de temes els tractaré en el següent post.
#13/03/2014 16:48 Programació C# SQLServer Autor: Alex Canalda
Intel està desenvolupant cables de fibra òptica per connectar servidors dins d'un datacenter. Fan servir la seva tecnologia (de Intel) Silicon Photonics que permet enviar 25Gbps per cada fibra, però ara han desenvolupat un cable i un connector (que anomenen MXC) que té 64 fibres dins. Es poden configurar 32 fibres per enviar i 32 per rebre fent un cable de 800Gbps full-duplex o configurar les 64 per enviar arribant a la monstruosa xifra de 1,6Tbps. Les dades arriben bé fins a una distància de 300 metres.
Aquests cables han estat desenvolupats juntament amb Corning (els mateixos que fan el Gorilla Glass dels mòbils) i una altra empresa anomenada USConec. Estaran disponibles comercialment al Q3 de 2014, en versions de 8, 16, 32 i 64 fibres (i diferents preus).
Els primers a instal·lar aquests cables són Microsoft, Facebook i algun centre de supercomputació. Però els fabricants estan pendents de com aprofitar aquests amples de banda tan exagerats per dissenyar servidors on els processadors estiguin a una banda, la RAM en una altra, els discs en una tercera etc...
No crec que veiem en un entorn domèstic aquests cables en uns anys, però tot el que comença al món dels servidors acaba arribant.
Aquest llibre ha estat escrit per Neal Stephenson i està ambientat en una societat humana ciberpunk. En el futur la nanotecnologia està a l'ordre del dia, i totes les coses surten del "compiladors de matèria", que es dedica a enganxar àtoms seguint un model (com una impressora 3D). Els àtoms li arriben d'una cosa que diu "Toma" (com un endoll). Les tomas les controla una tribu neo-victoriana.
La societat està divida en tribus, ja no en països ja que es pot fer "crèixer" terra allà on convingui. Les principals són la "Nueva Atlantis" (els neo-victorians, on s'aglutinen les cultures europees) que són bastant steampunk, els Nipon (japonesos) i els Han (xinesos). Pel mig estan la resta de minories, i algunes tribus "sintètiques".
Aquí és on es situa l'acció, quan un aristòcrata victorià encarrega a un enginyer la creació d'un manual que eduqui correctament a la seva neta. L'enginyer, anomenat Hackworth també té una filla petita i vol crear una còpia del manual, per fer-ho i que no quedi registrat fa servir un hacker anomenat DoctorX. El DoctorX també vol una còpia del manual per educar milers de nenes xineses orfes.
Quan en Hackworth va a entregar el manual a la seva filla li roben i cau en mans d'una nena petita d'una família conflictiva, la Nell que serà la protagonista del llibre.
En aquest moment hi ha una rebel·lió dels Han que volen liquidar totes les Tomes i la nanotecnologia. El llibre acaba de forma molt brusca quan la Nell es retroba amb la Miranda (que era una actriu que a través del llibre li fa de mare), però no explica gaire sobre el per que de la rebel·lió, ni si guanyen o no, ni que passa amb el DoctorX ni el Hackworth.
Tots els posts de programació d'aquest blog dedicats a SQLServer o a la clsDades o als ASHX fan referència a la mecanització. I això en que consisteix? La resposta és en treballar més en menys temps, o fer que un programa programi en lloc meu... Es tracta de treure la part repetitiva de la programació i que la faci un programa.
És hora d'anar veient amb detall que és això de la mecanització, com funciona la eina que genera codi i fins a on arriba.
Una mica d'història (les batalletes de l'avi): quan vaig començar amb la v0.1 tenia stored procedures fetes amb Oracle. Un company les muntava i jo tenia que fer les invocacions. Eren SP molt grosses i em moria fent les invocacions, sortien errors com: "tipo o número de parámetros incorrectos" i clar posat a revisar 80 i pico paràmetres i veient que no m'hagués equivocat en cap tipus i/o longitud.
Amb aquest panorama desolador vaig fer un programa sense interface d'usuari on tot estava "hardcoded" (posat a foc al codi font) i modificant el programa et generava la classe on hi havia la crida a la SP de torn.
El projecte va acabar i amb l'experiència acumulada vaig anar a pel següent. Aquí el company que feia les SP no hi era, les tenia que fer jo. I llavors ja era letal, així que vaig afegir l'opció al programa que donada una taula generés unes SP bàsiques. Però clar era molt rudimentari modificar el codi font d'un programa per generar SPs i classes. Aleshores vaig començar a treballar en un interface rudimentari d'usuari. Ja era un avanç per que podia guardar en fitxers XML informació sobre la generació de SP, classes, etc...
Posteriorment vaig veure que per motius de rendiment calia fer més ajustos, que a la pantalla es podien fer més coses, més opcions a tot arreu... és quan vaig fer el Generador v2. La v2 ja ha passat per uns quants projectes i està més polida amb temes de rendiment, bugs, ... Però ja l'explicaré més endavant.