Thursday, August 25, 2011
Continuando el blog en un dominio propio.
Wednesday, August 18, 2010
My Review of HTML5: Up and Running
Originally submitted at O'Reilly
If you don't know about the new features available in HTML5, now's the time to find out. The latest version of this markup language is going to significantly change the way you develop web applications, and this book provides your first real look at HTML5's new elements and attributes. ...
The Linkable Book of HTML5
Pros: Helpful examples, Accurate, Well-written, Easy to understand, Concise
Best Uses: Intermediate
Describe Yourself: Developer, Designer
Being sincere HTML5:U&R doesn't turn in the book I was expected. My expectation was a book that augments the set of volumes that with slightly practice examples, coupled with less enthusiastic transcriptions of the standard, make their way to the last page. My bad from tag to tag, the truth is that the subtitle could not be more accurate for a book so simple and yet useful.
I haven't read too much pages before I realized that I was reading the archive of a blog never published, sense that remains until the end of the material. Like a blog post the text used hyperlinks extensible not just in the "Further Reading" section of all chapters but instead in the whole book. At least for me this can be very annoying while I'm reading other than the digital version, but it proves to summarize the value of the book: avoid extensive research of the standard from the reader while advocate meticulous resources on the internet (W3C documents included). In the presence of and HTML book, kudos goes to the author for using this approach.
Really there is nothing hard to grasp within HTML5, which is his joy. The dare is, of course, archive the same output from different browsers, a subject that Mark Pilgrim had well covered for the reader. Each chapter starts with a short (and kind of epic) introduction followed by a well-timed table about the implementation state of the features that will be discussed. Next is the zealous discussion about how HTML5 help you to write better webs pages.
Beginning with a bit of www history and how we can be proactive against the lack of HTML5 universal support the author will visit several topics of relevance, local storage, offline access, demystify video codec's on web development and microdata excerpts among others. Summarizing this book is like the HTML5 dominical school we don't have, and surely if you read it will learn something new and start applying it quite immediately.
What I missed most? An appendix containing hyperlinks other than those included in "Further Reading" sections:
1.Web sites that remarkably uses some of the HTML5 features. There is any social network that inserts microdata on their profile pages?
2.Where I can find more "accepted" microdata.
3.Applications that build over HTML5 semantic assess other that Google's. A GreaseMonkey script maybe…
4.Developer tools that support the creation of complain HTML5 documents. Are WebIde and Dreamweaver recognizing HTML5 tags and attributes?
5.JavaScript libraries or web frameworks that already used HTML5 tags whenever is possible.
Conclusions? Basically if the reader of this note builds web pages on daily basics and has time for 190 pages he or she shall read this book and became easily inducted into the future of web development. Maybe when nobody remember IE6 and the support for is native in IEx and Google finally has taken the world, the web sites you build the next three years (applying the recommendations of this book) will be that kind of old HTML set of documents completely transparent to the future first-class semantic engines.
Hopefully when that time comes the W3C also had long time issued a mandatory rule to browser vendors, that if they intend to provide support for input tags (like date time) they should ensure make it with style or at least mimic the OS theme (and I'm not suggesting anything to Opera Software ;-).
(legalese)
Friday, August 06, 2010
Verificar si una matriz es Sudoku con un ciclo y con ninguno
Voy a compartir un pequeño divertimento de como verificar si una matriz de 9x9 cumple las condiciones para ser un Sudoku utilizando un ciclo [MATLAB] y ninguno [F#]. El objetivo no es reducir líneas de código sino hacer el código más declarativo (es decir que el código “hable por sí solo” o casi).
Las condiciones que debe cumplir una matriz son que en cada una de sus filas, columnas y celdas de orden 3 deben estar todos los números del 1 al 9, es decir no puede haber repeticiones en cada uno de los 27 conjuntos.
Para verificar estos conjuntos debe observarse que la suma de las potencias de 2 cuyos exponentes son sus elementos es igual 1022:
2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 + 2^8 + 2^9 = 1022
O bien que dicha sumatoria dividida por 1022 es igual a 1
Por otra parte si agrupamos cada uno de los 27 conjuntos en tres grupos (filas, columnas, celdas) resulta que cada uno contiene 9 elementos. Esta enumeración nos lleva a utilizar un solo ciclo para analizar la terna de la fila, columna y celda n. Donde si aplicamos el criterio de verificación anterior como una función, a cada uno de los conjuntos de la terna su suma debe ser igual a 3:
C(Fila[n]) + C(Columna[n]) + C(Celda[n]) = 3
Cualquier otro valor indicaría que el conjunto no tiene todos los números naturales menores que 10 y por tanto que la matriz no es un Sudoku.
Llevando lo anterior a código de MATLAB quedaría como sigue:
function R = IsSudoku(SU)
f = @(x) sum(sum(power(2,min(10,max(0,x))))) / 1022;
R = 1;
for n = 1:9
r = sum([1 2 3 4 4 5 5 6 6 7 7 7 8 8 8 9 9 9] == n);
c = sum([1 2 2 3 3 3 4 5 5 6 6 6 7 8 8 9 9 9] == n);
if sum([f(SU(n,:)) f(SU(:,n)) f(SU(3*r-2:3*r,3*c-2:3*c))]) ~= 3
R = 0; return;
end
end
Lo más destacable es la obtención de cada uno de los conjuntos a partir de la sintaxis que soporta MATLAB para extraer submatrices, en especial la submatriz correspondiente a la celda. Una manera de sacar la formula puede verse en la siguiente imagen:
Nótese que aunque podria haberse creado una función con condicionales, al obtener los resultados mediante 3k-2 es más sencillo plantear una función en forma de vector que tome el indice de la celda y obtenga el k para calcular el valor deseado.
Una implementación enteramente funcional (sin ciclos) con el lenguaje F# quedaría así:
let isSudoku (m : FMatrix) =
requires (m.Dimension = (9,9)) "Not a Sudoku Matrix"
let f (a : FMatrix) = (a.Items |> Seq.map (fun x -> Math.Pow(2.0,Math.Min(10,Math.Max(0,x)))) |> Seq.sum) / 1022.0
let pos arr n = arr |> Array.filter ((=) n) |> Array.length
let h n =
let r,c = pos [|1;2;3;4;4;5;5;6;6;7;7;7;8;8;8;9;9;9|] n,
pos [|1;2;2;3;3;3;4;5;5;6;6;6;7;8;8;9;9;9|] n
f(m.[n .. n, *]) + f(m.[*, n .. n]) + f(m.[3 * r - 2 .. 3 * r, 3 * c - 2 .. 3 * c])
seq {1..9} |> Seq.map h |> Seq.forall ((=) 3.0)
La clase FMatrix se encuentra en un proyecto de CodePlex, dicha clase implementa una convención de F# para permitir una sintaxis de extración de submatrices equivalente a la de MATLAB. En esta versión para no utilizar ciclos se utiliza una secuencia (seq {1..9}) como secuencia de entrada, un mapping (Seq.map) para aplicar el criterio y el operador forall que consolida la secuencia final en un valor booleano obtenido de comprobar que todos los elementos sean iguales a 3.
El performance de los dos códigos es bueno, en parte gracias a la instrucción: min(10,max(0,x)) que previene de evaluar una potencia de 2 costosa al tiempo que mantiene el resultado final. En el caso de MATLAB no estoy 100% seguro que no se utilicen otros ciclos en el proceso de hallar la submatriz, para el código en F# puede comprobarse que los iteradores involucrados (incluso los definidos en la biblioteca de F#) no utilizan variables de estado para soportar contadores.
Espero que les haya resultado interesante.
-hnh
__
Currently Reading: Frank Herbert – Children of Dune; Aldous Huxley – Brave New World.
Thursday, August 21, 2008
MTU (0 de N) : EventHelpers
Introducción
La intención de este post es ser el primero de una serie para documentar algunos métodos extensores que además de considerarlos potencialmente útiles cumplen con las guías de diseño que promueven los expertos en el tema [1].
En lo adelante dividiremos los métodos extensores en dos categorías, aquellos que sirven de puntos de entrada para el uso de LINQ to Objects (lógicamente los más importantes), y otros que responden al nombre de Helpers. Es decir métodos cuya existencia "nos viene como anillo al dedo" permitiendo evitar el repetir código o patrones de código sin que esto afecta la legibilidad del todo que queramos implementar.
EventHelpers
Hace unas semanas tuve necesidad de implementar una colección que tuviera como añadido la notificación de cambios en la misma mediante eventos. En lugar de escribir por enésima vez el mismo patrón de publicación/subscripción de eventos, decidí probar y crear un método extensor que tomando ventaja del uso de los delegados genéricos (EventHandler<T>) permitiera publicar correctamente el evento escribiendo la menor cantidad de código posible. La noción de publicar eventos correctamente, podemos encontrarla en el capítulo 6 de [2].
En pocas palabras, validar si el delegado asociado al evento no está vacio para posteriormente ejecutar uno a uno los elementos de la lista de invocación, protegiéndonos de que al ejecutarlos ninguna excepción ascienda hasta nuestro código garantizando la correcta finalización del proceso de notificación. Una vez escrito el código seria:
public static void InvokeSafely<T>(this EventHandler<T> del, object sender, T data) where T : EventArgs
{
if (del != null)
del.GetInvocationList().ForEachNoExceptions(d => d.DynamicInvoke(sender, data));
}
public static void ForEachNoExceptions<T>(this T[] array, Action<T> action)
{
Array.ForEach(array, element => { try { action(element); } catch { } });
}
Una vez en ámbito el código se reduce considerablemente, centralizando el proceso para futuras modificaciones.
Ahora bien, tomando este pequeño experimento podemos llevar la clase EventHelpers (propuesta en [2]) a la manera de los métodos extensores. La misma podéis descargarla del sitio de O'Reilly.
esperando haberles sido útil, me despido :)
Referencias
[1] Hernández, Octavio. C# 3.0 y LINQ. s.l. : Krasis Press, 2008.
[2] Lowy, Juwal. DotNet Components 2nd Edition. s.l. : O'Reilly Press, 2005.
PD: MTU son las siglas para Metodos Extensores Utiles.
Friday, June 27, 2008
Mejoras a XTE
He subido un nightybuild de XTE para codeplex. El próximo release será la versión 1.0. La intención de esta liberación es de mostrar un pedacito de las posibilidades de edición en runtime que tendrán la aplicación y que actualmente están en proceso de refactorización.
Explorador de Arboles (Tree Explorer)
Implementación de arboles de expresiones mutables (inspirado en MetaLinq), + adelante un post específicamente sobre esto.
Interfaz de edición similar a la que ofrece Visual Studio.
Graficador de funciones (Function Landscape)
Visualización para funciones que devuelvan Single (float).
Navegabilidad a través de los ejes (Para poner el inicio de las coordenadas en la posición del mouse: Click Derecho).
Zoom.
Compiladores de expresiones
CSharpExpCompiler
Expression<Func<int,int>> exp = (x) => x + x
CSharpXExpCompiler
int (int x) => x + x
He dividido estas funcionalidades en tres ensamblados de manera que será mas fácil reutilizar los componentes. En particular la librería XTE.Lib tiene una interesante cantidad de métodos extensores que a más de uno podrían serles útiles.
Wednesday, June 18, 2008
IntellSense Bug
Four days ago while I was working on LINQ I found an error of VS2008's IntellSense. After notifying it at the Microsoft Connect site, I was ready to post a comment about this issue. Before we see how to reproduce this error I have to say that I can see it because I read Jon Skeet's C# book in the morning.
By definition, it is possible to have an extensor method of extensible type T and a static method in T that have the same signature. We should remember that an extension method is pure sintactic sugar, the this modifier makes the method get tagged with System.Runtime.CompilerServices.ExtensionAttribute if it complies with the other rules, thus, this is just a simple method.
It's in this situation where IntellSense gets confused. Let's reproduce it.
public class A
{
public static void Method(A obj){Console.WriteLine("instance");}
public static void Foo() { }
}
public static class AHelper
{
public static void Method(this A obj) { Console.WriteLine("extension");}
}
static class Program
{
static void Main()
{
A objA = new A();
objA.Method();
Console.Read();
}
}
At the second instruction of Main method, if you activate the IntellSense's engine after you type the punctuator (".") you will see how the Method doesn't have the expected icon, and neither does the tooltip beginning with "(extension)":
Once finnish the writing the name we could see how its now recognized as an extensions method by IntellSense:
If we erase the static method of the class, the extension method is redeemed.
See you soon bloggers :)
Bug en IntellSense
Hace como 4 días mientras trabajaba con LINQ le encontré un fallo al IntellSense de VS2008. Tras notificarlo en el sitio Microsoft Connect me dispongo a comentarlo en este post. Antes de empezar a ver como reproducir este error del IDE de C# debo decir que pude percatarme de el por haber leído en la mañana el capitulo sobre el tema en el libro de Jon Skeet sobre C#.
Por definición es posible tener un método extensor de tipo extensible T y un método estático en T que tengan la misma firma. Recordemos que un método extensor es puro azúcar sintáctico, el modificador this hace que se marque un método que cumpla las características con el atributo System.Runtime.CompilerServices.ExtensionAttribute, a los efectos es un método como otro cualquiera.
Es en esta situación donde IntellSense se confunde. Vamos a reproducirlo:
public class A
{
public static void Method(A obj){Console.WriteLine("instance");}
public static void Foo() { }
}
public static class AHelper
{
public static void Method(this A obj) { Console.WriteLine("extension");}
}
static class Program
{
static void Main()
{
A objA = new A();
objA.Method();
Console.Read();
}
}
En la segunda instruccion del metodo Main, si usted activa el motor de IntellSense luego de haber escrito el punctuator (".") vera como el metodo Method no tiene el icono esperado, tampoco el tooltip comienza con "(extension)":
Una vez terminado de escribir el nombre del método podemos ver como ya es reconocido por IntellSense como método extensor:
Si borramos el método estático de la clase el método extensor quedaría reivindicado:
Hasta otra bloggers :)
Friday, June 06, 2008
XTE New Version
He subido nuevos cambios a XTE, podeis verla en CodePlex.
En los proximos dias seguire comentado las mejoras y nuevas features.
Estare encantado de oir cualquier clase comentarios sobre la solucion!
Os dejo otra captura, esta vez mostrando una funcion entera que utiliza operaciones bitwise:
Blogged with Flock
Wednesday, June 04, 2008
He leido: C# 3.0 Design Patterns
El viernes llego
a mis manos este magnífico libro sobre patrones. Un regalo para mi cumpleaños
que fue el sábado 31!(y dale con mi cumpleaños).
Debo reconocer que al inicio del año quería escribir acerca de este tema en el
mundo .NET. Con la premisa de poner ejemplos de el uso de patrones en las
clases más importantes del framework. Por lo que cuando lo vi me dio una
especie de melancolía creativa. Ciertamente la sensación se esfumo tan pronto
como empecé a revisar el índice.
Si no sabes de patrones deberías leerlo, si sabes también. Estoy al tanto de la
existencia de otros libros sobre Patrones en el mundo .NET. Este es diferente, además
de estar ligado a C# 3.0 los ejemplos están actualizados con el día a día en
internet y .NET. En conclusión, un libro que deberías tener en la sección de
arquitectura de tu biblioteca.
Por último
recalcar en la importancia de los Patrones. Si bien es cierto que los conocimientos
de algoritmia dotan al programador de una serie de armas para atacar problemas
variados. En un nivel similar de importancia se encuentran los patrones de diseño,
conociéndolos:
- Modelaras tu solución
incorporando criterios que han probado su utilidad y que son los
suficientemente flexibles para que pongas tu granito de arena. - Podrás
comunicarte con otros programadores de una manera mucho más efectiva.
Blogged with Flock
Monday, June 02, 2008
Presentando XTE Alpha
Ciertamente la idea de poner un programa aun incompleto no me hace mucha gracia, pero dado que pase gran parte de mi veinte cumpleaños haciéndolo (bastante geek verdad?) y estoy bastante satisfecho del código escrito hasta ahora me apetece compartirlo en mi blog.
El programa es acerca de los arboles de expresiones presentes en C# 3.0: manipularlos y optimizarlos para su uso en distintos escenarios. Todo de manera visual.
La idea de hacer este programa me surgió mientras leía los ejercicios que propone Octavio Hernández en su libro C# 3.0 y LINQ.
El viernes publico la primera versión beta para que lo probéis.
Si quereis descargarlo, mirad el primer release en CodePlex: http://www.codeplex.com/xte/
Aqui les dejo dos capturas:
Tree Explorer

Function LandScape
Thursday, April 03, 2008
Soporte de Relaciones Muchos a Muchos en Kumbia
Nowadays application development implicitly requires learning and using frameworks to speed things up. When it comes to php, there is a framework that can be learned maybe as fast as php itself. That is Kumbia, a framework that implements the "Modelo Vista Controlador"
En mi trabajo lo hemos usado para varias aplicaciones, las mismas han devenido en una especia de meta framework. En el que entre otras cosas hemos incorporado una capa de seguridad teniendo en cuenta los conceptos del MVC. Para facilitar la interacción con las tablas en las que esta contenida esta funcionalidad implemente unos métodos para que la implementación de Active Record que trae Kumbia, soporte relaciones muchos a muchos.
We have used it at work for several applications, which themselves have become some sort of meta framework. In this framework, we have built in a security layer (among other things) that takes into account the MVC concepts. To make the interaction with the tables that contain this functionality easier, I implemented some methods that allow the implementation of Active Record that comes with Kumbia to support peer-to-peer networking.
http://www.kumbiaphp.com/foro/viewtopic.php?f=5&t=538
Que conste, uso la version 0.4.7 la 0.5 tiene soporte muchos a muchos de serie. Pero son cosas que uno se entera cuando ya las hizo =)
I use version 0.4.7. After I did this, I found out version 0.5 comes with peer-to-peer networking =)
SQL Server 2005 Driver for PHP
En el dia de ayer tuve necesidad de conectarme con un servidor SQL Server 2005 desde codigo php. Experimente problemas al conectarme con la función mssql_connect. En la página de la misma varios usuarios reportan los mismos inconvenientes. Los motivos pueden ser varios, pero si estas en Windows (como yo!) puedes usar el driver que ha publicado Microsoft. Aqui tienes el link del blog y el download.
En febrero se lanzo CTP con la que ir haciendo boca. El proceso de instalación es sencillo. Solo echo en falta el completamiento en Zend Studio para estas funciones. Adicionalmente seria de ayuda que se incluyera en las ediciones de XAMPP (para windows) y WAMP.
Por la parte de Microsoft, seria deseable la inclusión de un binario para usar desde Linux. No creo que sea pedir demasiado =) la integración es la base sobre la que se desarrollan las tecnologías y la computación actualmente.
Wednesday, February 20, 2008
Estoy en MATCOM!!!
Acabo de enterarme que aprobe las pruebas
de aptitud para estudiar licenciatura en Matematicas en la Facultad de
Matematica y Computación de la Universidad de la Habana.
Hay tantas cosas que pense en escribir en mi blog si este dia llegaba alguna vez.
Pero llegado el momento solo pienso en mencionar a todos aquellos que me han
apoyado y aconsejado en estos ultimos meses, el orden no importa,
pues es una lista circular implementada en el ambito del namespace Foo.Collections =)
A mis abuelos, por todo lo que han hecho por mi. Siendo su amor el mejor premio al que puedo aspirar.
A mi madre, lo mas grande que me ha dado la vida.
A mi padre y mi hermano, por quererme y apoyarme como lo han hecho.
A mis compañeros de ECC, por brindarme el tiempo necesario para estudiar y todo lo que he aprendido
con ellos en el trancurso de mis practicas.
A mis profesores de matematica Rufino, Aleida, Joaquin, Margarita y Maritza.
A Maruchi y Chucho, por su hospitalidad jajaj y las lecciones de advanced math. Muchos betis
A Marylin y Rene. por ... ejej ustedes saben windows vista!
A mis amigos, los del tecnico y los que he hecho en el curso del NIIT.
A mi primo Carlos y mi amigo Joaquin esperando que podamos celebrar los proximos aniversarios de Undersoft
en las mismas condiciones en que lo fundamos jajaja :)
A todos aquellos que de una y otra forma me han ayudado a acercarme a esta Facultad y a .NET ;)
A mi princesa. Mejor te lo digo en privado +) !!m n sv ed t ss t om om
Si me falta alguien que por favor me perdone, y sientase libre de añadir su nombre a la lista :)
Ahora me despido que tengo mucho para celebrar, dos proyectos que entregar y una prueba de J2EE
para la que estudiar.
bytes!
hora
Saturday, December 29, 2007
Happy New Year!!!
Escribo este post lleno de positivos pensamientos en estos ultimos dias del año, con la idea de que empezemos con buen karma el 2008 (yo # por supuesto).
Nada, que espero que logren todo lo que se proponen, y que hagan realidad aquello que más anhelan, bla bla bla ... (remitanse a las cadenas que han recibido a lo largo del año jeejej), nada de preocupaciones solo placeres: en 4 palabras:
Luz y Progreso, Dinero y Sexo!!!
y salud que belleza sobra...
happy new year fellows!!!
Ill see u when i see u
pd0: he patentado la frase, si obtienes alguna de esas cosas hazme llegar el elemento que este a la izquierda del que sacaste lo jejeje, o su equivalente en metalico :=)
Amor = Progreso + Luz + Sexo * 4 + Dinero/log e + 7;
Este fue el correo que le envie a mis amigos y dadas las fechas he decidido extenderlo a los que se dejan caer por aquí (no sin antes adaptarlo). Hace mucho que no me aparecia por blogger ... y es que la verdad he estado muy ocupado. Ando sumergido en una esquizofrenia de plataformas (PHP5,.NET, J2EE) donde .NET (mi preferida y a la cual esta dedicada este blog) no tiene la prioridad que yo quisiera ... cosa que espero se invierta al finalizar el primer trimestre del proximo año (please please)
Nada
Que lo pasen genial junto a las personas que aman!!!
Monday, October 08, 2007
El codigo de la BCL debbugeable
Aunque si usamos reflector es posible que el codigo cambie algo a como se ve en la solucion. Recordemos que una de las tareas del compilador es la de optimizar el codigo. Pero no es que sea un cambio gigantesco, no se incluye ningun codigo agnostico ni nada por el estilo ... lo funcional seguira igual. Quizas el compilador que mas optimizaciones efectue sea el de C++/CLI...
Pero nada lo otro es que podremos debuggear el codigo de la BCL como si fuera de nuestra solucion, ya no sera solo el callstack, sino que iremos al mismo codigo fuente.
esto de ver la BCL como parte de la solucion es equivalente al nirvana...
A todo esto, cabria preguntarse por que no copiar aqui y pegar alla, y cambiar la BCL a nuestro antojo, no me hagan caso creo que la noticia me tiene delirando...
Monday, July 23, 2007
Harry Potter and the Deathly Hallows
Bueno como todos saben el pasado sabado salio a a la venta el tan esperado titulo. Despues de tantos años la serie esta completa, y finalmente no queda -al menos eso parece- más que descubrir. De cualquier manera tan magnificos libros seran releidos una y otra vez con el pasar de los años (personalmente yo voy por 7 veces los 4 primeros y por 2 el 5to y sexto, EN SERIO!!!)...
Lo unico que no me ha gustado de todo el lanzamiento es que los hispano hablantes no han podido adquirirlos en su lengua, la autora ha dicho que desea que los niños que han crecido leyendo a Harry descubran por si solos el fin de su gran aventura, llamando asi a que los por arte de magia se han leido el libro antes de la salida o en apenas horas (si hubiesen visto wikipedia el sabado verian a que me refiero) no comenten de que trata. Pero entonces la otra gran mitad de los niños tienen que esperar, casi 6 meses cuando llegado el momento todo el mundo sabra que Harry NO MUERE (ups), desde luego no es justo!!!
Pero como todos los que leemos a Harry estamos conectados por la magia, solo basta hacer un encantamiento convocador para traer a tu navegador aquello-que-no-puede-ser-nombrado: accio septimo libro!!!
Tuesday, July 03, 2007
Buscando archivos en directorios.
using System;
using System.Collection.Generic;
using System.IO;
public class FileSeeker
{
public static string[] RetrieveFilesFrom(string directory, string searchPattern,int level)
{
Listfilenames = new List ();
Stackdirectories = new Stack ()
directories.Push(directory);
while(directories.count!=0)
{
string currentDirectory = directoriesStack.Pop();
foreach(string file in Directory.GetFiles(currentDirectory,searchPattern))
filenames.Add(file);
if((level==-1) || (directories.count != level))
{
foreach(string subDirectory in Directory.GetDirectories(currentDirectory))
directories.Push(subDirectory);
}
}
return filenames.ToArray();
}
}
public class Program
{
public static void Main(string[] args)
{
foreach(string path in FileSeeker.RetrieveFilensFrom(@"C:\Program Files\", "*.exe",-1)
Console.WriteLine(path);
Console.Read();
}
}
Estoy encapsulando todo en un componente con muchas mas funcionalidades, como buscar mediante expresiones regulares, tamaño, fecha de creación, etc. En cuanto lo termine hago un articulo para el sitio de elguille
Has oido hablar de Prado?
Desde que utilize WebForms con ASP.NET supe que ese era el tipo de programacion web que realmente queria hacer, lo llaman basado en eventos (event driven). Quien necesita preocuparse de los tags html si tenemos el viestate y toda la infraestructura que trabaja en el.
Cuando comence mi etapa de practicas, empece a usar PHP con Ajax usando el framework Xajax, realmente buenos momentos con tan genial framework (creanme lo es) no paraba de decirle a mis compañeros de trabajo: ...una especie de code behind en php...
Todos mis paginas web utilizaban eventos en el cliente que disparaban metodos en el servidor: mediante unas cuantas lineas en javascript y el motor de xajax, pero...
Las ultimas dos semanas comence a oir acerca de Prado en mi(en ese mometo futuro) trabajo, PRADO ... es un framework que gano la competencia de Zend ... hay que verlo! ... lei sobre él en la web ... oh esta inspirado en ASP.NET 2.0!!! entonces ... si soporta todas esas magnificas caracteristicas podremos programar basado en eventos con php de manera transparente? ... la respuesta es SI!!!
Pero los eventos no es todo. Si te gusta trabajar con componentes de software (como a mi) y en la manera punto net (como a mi) estaras complacido de saber que Prado basado en componentes y provee:
Una especie de token "using" (implementado como un metodo estatico en una clase principal) para compensar la falta de namespaces en php:
Prado::using('This.Is.Del.I.Cio.Us.MyClass');
Propiedades con metodos set y get:
class TControl extends TComponent {
public function getID() {
...
}
public function setID($value) {
...
}
}usados asi:
$id = $component->ID;
$component->ID = $id;
or
$id = $component->getID();
$component->setID( $id );
Eventos:
$callback = 'myFunctionName';
or
$callback = array($unsub,'myFunctionName');
$MyComponent->OnClick = $callback;
$MyComponent->OnClick->add( $callback );
$MyComponent->OnClick[] = $callback;
$MyComponent->attachEventHandler( 'OnClick' , $callback );
Esto es solo la punta del iceberg, PRADO es un framework único, deberias probarlo. No soporta el patron MVC pero trae los eventos en web a php de una manera facil y divertida. De que otra forma iba a ser?, si esa inspirado en ASP.NET :-).
Prado esta aqui!
Monday, June 18, 2007
"Orcas" el IDE Asesino
Que placer ver la alerta de revisar los parches de seguridad junto a la indicación que ya la instalación estaba completa. Era de esperar que consumiera mucho, pero nunca pense que no pudiera inicializar el ToolBox... al final tendre que cambiar la pc con una como esta
Definitivamente nunca he tenido tantas ganas de programar como en los ultimos meses leyendo por aqui y por alla de WPF, WCF, y Linq sobre todo LINQ!!! sin poder compilar nada, mira y no toques...
afortunadamente ya el csc.exe ve varcomo una nueva palabra reservada (si no he declarado ninguna variable con ese nombre claro :-)
Prometo retomar la linea *editorial*, adelanto que MaR container esta tolamente optimizado en el proximo post les comento (me lo deje hoy en la casa :-(
por ultimo agradecer a mi amigo del avatar de snoopy que muy amablemente me ayudo a descargar la ya mencionada beta ;-)
Thursday, June 14, 2007
Dia internacional del webblogger
Gracias al blogging me he enterado de que hoy es el dia internacional de los que hacemos blogging, repetitivo verdad? Pero completamente cierto, pues hace instantes estaba por el blog de Jalopez cuando vi tan importante noticia.
Hoy es el dia de los bloggers, dia fichado hace 4 años. Se imaginan como ha ascendido el numero de personas que realizan esta actividad desde ese tiempo. Vamos que unos cuantos ceros. Si es increible que haya tantas personas compartiendo y escribiendo a lo largo de todo el mundo, no es extraño que tengamos (no puedo parar de incluirme en el conjunto)un dia donde podamos poner todas
Se imaginan que llegue un dia en el que cada persona del planeta tenga un blog :-), solo con los habitantes de China serian millones de blogs para revisar, muchos para marcar en los servicios de tag, y muchos para recomendar. Quizas dentro de un par de años ese pensamiento se haga realidad, un blog para cada persona, desde que nazca:
un primer post: Hola mundo (nunca mejor dicho), escrito por padres claro
hasta el dia que pase a un lugar mejor -...tocando madera...-: no se me ocurre que iria aqui, quien mejor que los amigos para llenar ese espacio
Desde luego seriamos definivamente una sociedad de la informacion ++.
Para celebrar el dia del blogger, le he hecho uno de mis tweaks a la cancion de John Lennon Imagine, con la idea de un mundo donde todos bloguearamos y todos viviearamos felices los uno de los otros en una paz extendida por todo el ciberespacio y la tierra que pisamos, felicidades bloggers amen!!!
Imagine there's no Heaven
It's easy if you try
No wars below us
Above us only tags
Imagine all the folks
Blogging for today
Imagine there's no countries
It isn't hard to post
Nothing to kill or die for
And no religion too
Imagine all the folks
Blogging life in peace
You may say I'm a dreamer
But I'm not the only one
I hope someday you'll join us
And the world will blog as one
Imagine no possessions
I wonder if you post
No need for greed or hunger
A socialnetwork of man
Imagine all the folks
Blogging all the world
You may say I'm
a lonely blogger
But I'm not the lonely one
I hope someday you'll join us
And the world will blog as one
aprovecho este post para decir que a partir de ahora este blog estara sincronizado en wordpress con los post en ingles, here
ultima cosa, no dejen de buscar en technorati los blogs que linkean el sitio oficial del aniversario