<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32303233</id><updated>2024-11-01T03:34:30.961-07:00</updated><category term=".NET"/><category term="C#"/><category term="noticias"/><category term="personal"/><category term="php"/><category term="libros"/><category term="proyectos"/><category term="VB.NET"/><category term="ajax"/><category term="elguille.info"/><category term="js"/><category term="bugs"/><category term="he leído"/><category term="linq"/><category term="literatura"/><category term="projects"/><category term="fp"/><category term="frameworks"/><category term="fsharp"/><category term="matlab"/><title type='text'>Horacio Nuñez</title><subtitle type='html'>You never know enough, specially about programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default?alt=atom&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default?alt=atom&amp;start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32303233.post-7855830741394958524</id><published>2011-08-25T01:16:00.000-07:00</published><updated>2011-08-25T01:16:07.529-07:00</updated><title type='text'>Continuando el blog en un dominio propio.</title><content type='html'>El blog continua en este nuevo dominio &lt;a href=&quot;http://merthin.com&quot;&gt;merthin.com&lt;/a&gt;

Gracias por la Visita!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7855830741394958524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7855830741394958524'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2011/08/continuando-el-blog-en-un-dominio.html' title='Continuando el blog en un dominio propio.'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-7007188303125509615</id><published>2010-08-18T12:17:00.001-07:00</published><updated>2010-08-18T12:17:12.560-07:00</updated><title type='text'>My Review of HTML5: Up and Running</title><content type='html'>&lt;div class=&quot;hreview&quot;&gt;&lt;div class=&quot;item&quot;&gt;&lt;p&gt;&lt;a href=&quot;http://oreilly.com/catalog/9780596806033&quot;&gt;Originally submitted at O&#39;Reilly&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;http://images.powerreviews.com/images_products/07/85/7020206_100.jpg&quot; class=&quot;photo&quot; align=&quot;left&quot; style=&quot;margin: 0 0.5em 0 0&quot;&gt;&lt;p style=&quot;margin-top:0&quot;&gt;If you don&amp;#39;t know about the new features available in HTML5, now&amp;#39;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&amp;#39;s new elements and attributes. ...                            &lt;/p&gt;&lt;/div&gt;&lt;a href=&quot;http://oreilly.com/catalog/9780596806033&quot; style=&quot;display: none;&quot; class=&quot;url fn&quot;&gt;&lt;span class=&quot;fn&quot;&gt;HTML5: Up and Running&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br clear=&quot;left&quot;&gt;&lt;p&gt;&lt;strong class=&quot;summary&quot;&gt;The Linkable Book of HTML5&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;By &lt;strong&gt;hnh12358&lt;/strong&gt; from &lt;strong&gt;Havana, Cuba&lt;/strong&gt; on &lt;strong&gt;&lt;abbr title=&quot;2010818T1200-0800&quot; class=&quot;dtreviewed&quot; style=&quot;border: none; text-decoration: none;&quot;&gt;8/18/2010&lt;/abbr&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;div style=&quot;margin: 0.5em 0; height: 15px; width: 83px; background-image: url(http://images.powerreviews.com/images/stars_small.gif); background-position: 0px -180px;&quot; class=&quot;prStars prStarsSmall&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/p&gt;&lt;div style=&quot;display: none&quot;&gt;&lt;span class=&quot;rating&quot;&gt;5&lt;/span&gt;out of 5&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pros: &lt;/strong&gt;Helpful examples, Accurate, Well-written, Easy to understand, Concise&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Best Uses: &lt;/strong&gt;Intermediate&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Describe Yourself: &lt;/strong&gt;Developer, Designer&lt;/p&gt;&lt;p style=&quot;margin-top:1em&quot; class=&quot;description&quot;&gt;Being sincere HTML5:U&amp;amp;R doesn&#39;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.&lt;br xmlns:pr=&quot;xalan://com.pufferfish.core.beans.xmlbuilders.xsl.Functions&quot;&gt;&lt;br&gt;I haven&#39;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 &quot;Further Reading&quot; section of all chapters but instead in the whole book. At least for me this can be very annoying while I&#39;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.&lt;br&gt;&lt;br&gt;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. &lt;br&gt;&lt;br&gt;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&#39;s on web development and microdata excerpts among others. Summarizing this book is like the HTML5 dominical school we don&#39;t have, and surely if you read it will learn something new and start applying it quite immediately.&lt;br&gt;&lt;br&gt;What I missed most? An appendix containing hyperlinks other than those included in &quot;Further Reading&quot; sections:&lt;br&gt;&lt;br&gt;1.Web sites that remarkably uses some of the HTML5 features. There is any social network that inserts microdata on their profile pages?&lt;br&gt;2.Where I can find more &quot;accepted&quot; microdata.&lt;br&gt;3.Applications that build over HTML5 semantic assess other that Google&#39;s. A GreaseMonkey script maybe&amp;hellip;&lt;br&gt;4.Developer tools that support the creation of complain HTML5 documents. Are WebIde and Dreamweaver recognizing HTML5 tags and attributes?&lt;br&gt;5.JavaScript libraries or web frameworks that already used HTML5 tags whenever is possible.&lt;br&gt;&lt;br&gt;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. &lt;br&gt;&lt;br&gt;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&#39;m not suggesting anything to Opera Software ;-).&lt;br&gt;&lt;/p&gt;&lt;p style=&quot;margin-top:0.5em&quot;&gt;(&lt;a href=&quot;http://www.powerreviews.com/legal/terms_of_use.html&quot; rel=&quot;license&quot;&gt;legalese&lt;/a&gt;)&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/7007188303125509615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/7007188303125509615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7007188303125509615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7007188303125509615'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2010/08/my-review-of-html5-up-and-running.html' title='My Review of HTML5: Up and Running'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-5729324206658676796</id><published>2010-08-06T23:15:00.001-07:00</published><updated>2010-08-07T01:44:46.520-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="fp"/><category scheme="http://www.blogger.com/atom/ns#" term="fsharp"/><category scheme="http://www.blogger.com/atom/ns#" term="matlab"/><title type='text'>Verificar si una matriz es Sudoku con un ciclo y con ninguno</title><content type='html'>&lt;p&gt;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).&lt;/p&gt;  &lt;p&gt;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. &lt;/p&gt;  &lt;p&gt;Para verificar estos conjuntos debe observarse que la suma de las potencias de 2 cuyos exponentes son sus elementos es igual 1022:&lt;/p&gt;  &lt;p align=&quot;center&quot;&gt;2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 + 2^8 + 2^9 = 1022&lt;/p&gt;  &lt;p&gt;O bien que dicha sumatoria dividida por 1022 es igual a 1&lt;/p&gt;  &lt;p&gt;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:&lt;/p&gt;  &lt;p align=&quot;center&quot;&gt;C(Fila[n]) + C(Columna[n]) + C(Celda[n]) = 3&amp;#160; &lt;/p&gt;  &lt;p&gt;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.&lt;/p&gt;  &lt;p&gt;Llevando lo anterior a código de MATLAB quedaría como sigue:&lt;/p&gt;  &lt;p align=&quot;left&quot;&gt;&lt;/p&gt;  &lt;p&gt;&lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=function&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;function&lt;/a&gt; R = IsSudoku(SU)     &lt;br /&gt;f = @(x) &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=sum&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;sum&lt;/a&gt;(&lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=sum&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;sum&lt;/a&gt;(power(2,min(10,max(0,x))))) / 1022;     &lt;br /&gt;R = 1;     &lt;br /&gt;&lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=for&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;for&lt;/a&gt; n = 1:9     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; r = &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=sum&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;sum&lt;/a&gt;([1 2 3 4 4 5 5 6 6 7 7 7 8 8 8 9 9 9] == n);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; c = &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=sum&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;sum&lt;/a&gt;([1 2 2 3 3 3 4 5 5 6 6 6 7 8 8 9 9 9] == n);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=if&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;if&lt;/a&gt; &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=sum&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;sum&lt;/a&gt;([f(SU(n,:)) f(SU(:,n)) f(SU(3*r-2:3*r,3*c-2:3*c))]) ~= 3     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; R = 0; &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=return&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;return&lt;/a&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=end&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;end&lt;/a&gt;     &lt;br /&gt;&lt;a style=&quot;color: #0000ff&quot; href=&quot;http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=end&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99&quot;&gt;end&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;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:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYInPmH0-MmHtnWcEnEoXiR90fYypAjMy1FmJIzdsXIfAId7O1QJB5l2JYZ3_xsk2WlSa0gDEZ-HzQXlL_qauy8VEdiYgltRAYDTBiAVbp6NvaMhOIf_2HIRG66txtn7QmOkY1/s1600-h/IsSudoku%5B16%5D.png&quot;&gt;&lt;img style=&quot;display: block; float: none; margin-left: auto; margin-right: auto&quot; title=&quot;IsSudoku&quot; alt=&quot;IsSudoku&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVEYJosFkvYmmuGqw8AkrIbFeHEtxPLfJGU-XP-TWrzB7JIB3qF1WMXRjXNb0yh4ZTC6T_gXWiOY01zD2YPv7j2zCVkQPrNHa2hNYseWVNf2TPV0CFsACY6brdFhBP2XhOhHCd/?imgmax=800&quot; width=&quot;397&quot; height=&quot;295&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;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.&amp;#160; &lt;/p&gt;  &lt;p&gt;Una implementación enteramente funcional (sin ciclos) con el lenguaje F# quedaría así:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;pre style=&quot;border-bottom-color: gray; border-right-width: 1px; border-top-color: gray; border-top-width: 1px; border-bottom-width: 1px; border-right-color: gray; font-size: 13px; border-left-color: gray; border-left-width: 1px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;let&lt;/span&gt; isSudoku (m : FMatrix) =&lt;br /&gt;    requires (m.Dimension = (9,9)) &amp;quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Not a Sudoku Matrix&lt;/span&gt;&amp;quot;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;let&lt;/span&gt; f (a : FMatrix) = (a.Items |&amp;gt; Seq.map (fun x -&amp;gt; Math.Pow(2.0,Math.Min(10,Math.Max(0,x)))) |&amp;gt; Seq.sum) / 1022.0&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;let&lt;/span&gt; pos arr n = arr |&amp;gt; Array.filter ((=) n) |&amp;gt; Array.length&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;let&lt;/span&gt; h n = &lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;let&lt;/span&gt; r,c = pos [|1;2;3;4;4;5;5;6;6;7;7;7;8;8;8;9;9;9|] n, &lt;br /&gt;                  pos [|1;2;2;3;3;3;4;5;5;6;6;6;7;8;8;9;9;9|] n&lt;br /&gt;        f(m.[n .. n, *]) + f(m.[*, n .. n]) + f(m.[3 * r - 2 .. 3 * r, 3 * c - 2 .. 3 * c])&lt;br /&gt;    seq {1..9} |&amp;gt; Seq.map h |&amp;gt; Seq.forall ((=) 3.0)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La clase FMatrix se encuentra en un proyecto de &lt;a href=&quot;http://merthin.codeplex.com&quot;&gt;CodePlex&lt;/a&gt;, dicha clase&amp;#160; implementa una convención de F# para permitir una sintaxis de extración de submatrices equivalente a la de&amp;#160; 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&amp;#160; la secuencia final en un valor booleano obtenido de comprobar que todos los elementos sean iguales a 3.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Espero que les haya resultado interesante.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;-hnh&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;__&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Currently Reading: Frank Herbert – Children of Dune; Aldous Huxley – Brave New World.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/5729324206658676796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/5729324206658676796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/5729324206658676796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/5729324206658676796'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2010/08/verificar-si-una-matriz-es-sudoku-con.html' title='Verificar si una matriz es Sudoku con un ciclo y con ninguno'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVEYJosFkvYmmuGqw8AkrIbFeHEtxPLfJGU-XP-TWrzB7JIB3qF1WMXRjXNb0yh4ZTC6T_gXWiOY01zD2YPv7j2zCVkQPrNHa2hNYseWVNf2TPV0CFsACY6brdFhBP2XhOhHCd/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-4353405626172675491</id><published>2008-08-21T06:01:00.001-07:00</published><updated>2008-08-21T06:01:22.729-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>MTU (0 de N) : EventHelpers</title><content type='html'> &lt;style type=&quot;text/css&quot;&gt;.dn_code { padding:2px; border: 1px solid #000000; background-color:#eeeeee; font-family:consolas courier new; font-size:12px; overflow: scroll; } &lt;/style&gt;  &lt;h4&gt;Introducción&lt;/h4&gt; &lt;p&gt;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].&lt;/p&gt; &lt;p&gt;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&amp;nbsp; al nombre de Helpers. Es decir métodos cuya existencia &quot;nos viene como anillo al dedo&quot; permitiendo evitar el repetir código o patrones de código sin que esto afecta la legibilidad del todo que queramos implementar.&lt;/p&gt; &lt;h4&gt;EventHelpers&lt;/h4&gt; &lt;p&gt;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&amp;lt;T&amp;gt;) 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].&lt;/p&gt; &lt;p&gt;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:&lt;/p&gt;&lt;pre class=&quot;dn_code&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; InvokeSafely&amp;lt;T&amp;gt;(&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt; EventHandler&amp;lt;T&amp;gt; del, &lt;span style=&quot;color: #0000ff&quot;&gt;object&lt;/span&gt; sender, T data) where T : EventArgs&lt;br /&gt;{&lt;br /&gt;	&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (del != &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)&lt;br /&gt;      	del.GetInvocationList().ForEachNoExceptions(d =&amp;gt; d.DynamicInvoke(sender, data));&lt;br /&gt;}&lt;/pre&gt;&lt;pre class=&quot;dn_code&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; ForEachNoExceptions&amp;lt;T&amp;gt;(&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt; T[] array, Action&amp;lt;T&amp;gt; action)&lt;br /&gt;{&lt;br /&gt;	Array.ForEach(array, element =&amp;gt; { &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt; { action(element); } &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt; { } });&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Una vez en ámbito el código se reduce considerablemente, centralizando el proceso para futuras modificaciones. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/hnh12358/SK1nGincaMI/AAAAAAAAAGM/MOrLS8jHVSM/eventHelpers04.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;263&quot; alt=&quot;eventHelpers0&quot; src=&quot;http://lh6.ggpht.com/hnh12358/SK1nIKWIMmI/AAAAAAAAAGQ/QNwUz6HFoLY/eventHelpers0_thumb2.png&quot; width=&quot;567&quot; border=&quot;0&quot;&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ahora bien, tomando este pequeño experimento podemos llevar la clase &lt;strong&gt;EventHelpers &lt;/strong&gt;(propuesta en [2]) a la manera de los métodos extensores. La misma podéis descargarla del sitio de O&#39;Reilly.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;esperando haberles sido útil, me despido :)&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Referencias&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;[1] &lt;strong&gt;Hernández, Octavio.&lt;/strong&gt; &lt;i&gt;C# 3.0 y LINQ. &lt;/i&gt;s.l. : Krasis Press, 2008.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;[2] &lt;strong&gt;Lowy, Juwal.&lt;/strong&gt; &lt;em&gt;DotNet Components 2nd Edition. &lt;/em&gt;s.l. : O&#39;Reilly Press, 2005.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;PD: MTU son las siglas para Metodos Extensores Utiles.&lt;/em&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/4353405626172675491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/4353405626172675491' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/4353405626172675491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/4353405626172675491'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/08/mtu-0-de-n-eventhelpers.html' title='MTU (0 de N) : EventHelpers'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/hnh12358/SK1nIKWIMmI/AAAAAAAAAGQ/QNwUz6HFoLY/s72-c/eventHelpers0_thumb2.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-4392989506683717672</id><published>2008-06-27T05:43:00.001-07:00</published><updated>2008-06-27T05:43:42.835-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="projects"/><title type='text'>Mejoras a XTE</title><content type='html'>&lt;p&gt;&lt;img height=&quot;255&quot; src=&quot;http://lh4.ggpht.com/hnh12358/SGTfeoTdnZI/AAAAAAAAAE4/1g9Jq2DLadg/screenshot07.jpg?imgmax=512&quot; width=&quot;300&quot;&gt; &lt;img height=&quot;255&quot; src=&quot;http://lh5.ggpht.com/hnh12358/SGTfepCa5-I/AAAAAAAAAFA/zwUafsuIBA0/screenshot09.jpg?imgmax=400&quot; width=&quot;300&quot;&gt;  &lt;p&gt;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.  &lt;h3&gt;Explorador de Arboles (Tree Explorer)&lt;/h3&gt; &lt;p&gt;Implementación de arboles de expresiones mutables (inspirado en MetaLinq), + adelante un post específicamente sobre esto.  &lt;p&gt;Interfaz de edición similar a la que ofrece Visual Studio.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;Graficador de funciones (Function Landscape)&lt;/h3&gt; &lt;p&gt;Visualización para funciones que devuelvan Single (float).  &lt;p&gt;Navegabilidad a través de los ejes (Para poner el inicio de las coordenadas en la posición del mouse: Click Derecho).  &lt;p&gt;Zoom.  &lt;h3&gt;Compiladores de expresiones&lt;/h3&gt; &lt;p&gt;&lt;b&gt;CSharpExpCompiler &lt;/b&gt; &lt;blockquote&gt; &lt;p&gt;Expression&amp;lt;Func&amp;lt;int,int&amp;gt;&amp;gt; exp = (x) =&amp;gt; x + x&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;b&gt;CSharpXExpCompiler&lt;/b&gt;  &lt;blockquote&gt; &lt;p&gt;int (int x) =&amp;gt; x + x&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;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.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/4392989506683717672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/4392989506683717672' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/4392989506683717672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/4392989506683717672'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/06/mejoras-xte.html' title='Mejoras a XTE'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/hnh12358/SGTfeoTdnZI/AAAAAAAAAE4/1g9Jq2DLadg/s72-c/screenshot07.jpg?imgmax=512" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-2965077348182279762</id><published>2008-06-18T09:45:00.001-07:00</published><updated>2008-07-28T14:20:57.362-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="bugs"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="linq"/><title type='text'>IntellSense Bug</title><content type='html'>&lt;p&gt;Four days ago while I was working on LINQ I found an error of VS2008&#39;s IntellSense. After notifying it at the &lt;a href=&quot;http://connect.microsoft.com&quot;&gt;Microsoft Connect&lt;/a&gt; site, I was ready to post a comment&amp;nbsp; 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&#39;s C# book in the morning.&lt;/p&gt; &lt;p&gt;By definition, it is possible to have an extensor method of extensible type &lt;strong&gt;T&lt;/strong&gt; and a static method in &lt;strong&gt;T&lt;/strong&gt; that have the same signature. We should remember that an extension method is pure sintactic sugar, the &lt;strong&gt;this&lt;/strong&gt; modifier makes the method get tagged with &lt;strong&gt;System.Runtime.CompilerServices.ExtensionAttribute&lt;/strong&gt; if it complies with the other rules, thus, this is just a simple method.&lt;/p&gt; &lt;p&gt;It&#39;s in this situation where IntellSense gets confused. Let&#39;s reproduce it.&lt;/p&gt; &lt;div style=&quot;border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: consolascourier new; background-color: #eeeeee&quot;&gt;&lt;pre&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; A&lt;br /&gt; {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Method(A obj){Console.WriteLine(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;instance&lt;/span&gt;&quot;);}&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Foo() { }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; AHelper&lt;br /&gt; {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Method(&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt; A obj) { Console.WriteLine(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;extension&lt;/span&gt;&quot;);}&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;br /&gt; {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Main()&lt;br /&gt;        {&lt;br /&gt;            A objA = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; A();&lt;br /&gt;            objA.Method();&lt;br /&gt;            Console.Read();&lt;br /&gt;        }&lt;br /&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;At the second instruction of Main method, if you activate the IntellSense&#39;s engine after you type the &lt;em&gt;punctuator &lt;/em&gt;(&quot;&lt;strong&gt;.&lt;/strong&gt;&quot;)&amp;nbsp; you will see how the Method doesn&#39;t have the expected icon, and neither does the tooltip beginning with &quot;(extension)&quot;:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://lh4.ggpht.com/hnh12358/SFk3VI16ikI/AAAAAAAAAEI/CQGM4oPwZkA/bug.jpg&quot;&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once finnish the writing the name we could see how its now recognized as an extensions method by IntellSense: &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://lh3.ggpht.com/hnh12358/SFk3VCX921I/AAAAAAAAAEQ/Q0UPp58jhIw/bug0.jpg&quot;&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;If we erase the static method of the class, the extension method is redeemed.&lt;img src=&quot;http://lh3.ggpht.com/hnh12358/SFk3VDF10nI/AAAAAAAAAEY/-v5wfu0PLzQ/bug1.jpg&quot;&gt;  &lt;/p&gt;&lt;br /&gt;&lt;p&gt;See you soon bloggers :)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/2965077348182279762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/2965077348182279762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/2965077348182279762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/2965077348182279762'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/06/intellsense-bug.html' title='IntellSense Bug'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/hnh12358/SFk3VI16ikI/AAAAAAAAAEI/CQGM4oPwZkA/s72-c/bug.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-7205937040351178643</id><published>2008-06-18T09:39:00.001-07:00</published><updated>2008-06-18T09:39:40.790-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="bugs"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="linq"/><title type='text'>Bug en IntellSense</title><content type='html'>&lt;p&gt;Hace como 4 días mientras trabajaba con LINQ le encontré un fallo al IntellSense de VS2008. Tras notificarlo en el sitio &lt;a href=&quot;http://connect.microsoft.com&quot;&gt;Microsoft Connect&lt;/a&gt; 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#. &lt;/p&gt; &lt;p&gt;Por definición es posible tener un método extensor de tipo extensible &lt;b&gt;T&lt;/b&gt; y un método estático en &lt;b&gt;T&lt;/b&gt; que tengan la misma firma. Recordemos que un método extensor es puro azúcar sintáctico, el modificador &lt;strong&gt;this&lt;/strong&gt; hace que se marque un método que cumpla las características con el atributo&amp;nbsp; &lt;strong&gt;System.Runtime.CompilerServices.ExtensionAttribute&lt;/strong&gt;, a los efectos es un método como otro cualquiera. &lt;/p&gt; &lt;p&gt;Es en esta situación donde IntellSense se confunde. Vamos a reproducirlo: &lt;/p&gt; &lt;div style=&quot;border-right: white 2px ridge; padding-right: 10px; border-top: white 2px ridge; padding-left: 10px; font-size: 10pt; padding-bottom: 10px; margin: 10px; border-left: white 2px ridge; padding-top: 10px; border-bottom: white 2px ridge; font-family: consolascourier new; background-color: #eeeeee&quot;&gt;&lt;pre&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; A&lt;br /&gt; {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Method(A obj){Console.WriteLine(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;instance&lt;/span&gt;&quot;);}&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Foo() { }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; AHelper&lt;br /&gt; {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Method(&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt; A obj) { Console.WriteLine(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;extension&lt;/span&gt;&quot;);}&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; Program&lt;br /&gt; {&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; Main()&lt;br /&gt;        {&lt;br /&gt;            A objA = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; A();&lt;br /&gt;            objA.Method();&lt;br /&gt;            Console.Read();&lt;br /&gt;        }&lt;br /&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;En la segunda instruccion del metodo Main, si usted activa el motor de IntellSense luego de haber escrito el &lt;em&gt;punctuator &lt;/em&gt;(&quot;&lt;strong&gt;.&lt;/strong&gt;&quot;) vera como el metodo &lt;strong&gt;Method&lt;/strong&gt; no tiene el icono esperado, tampoco el tooltip comienza con &quot;(extension)&quot;:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://lh4.ggpht.com/hnh12358/SFk3VI16ikI/AAAAAAAAAEI/CQGM4oPwZkA/bug.jpg&quot;&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Una vez terminado de escribir el nombre del método podemos ver como ya es reconocido por IntellSense como método extensor: &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://lh3.ggpht.com/hnh12358/SFk3VCX921I/AAAAAAAAAEQ/Q0UPp58jhIw/bug0.jpg&quot;&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Si borramos el método estático de la clase el método extensor quedaría reivindicado: &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://lh3.ggpht.com/hnh12358/SFk3VDF10nI/AAAAAAAAAEY/-v5wfu0PLzQ/bug1.jpg&quot;&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hasta otra bloggers :)&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/7205937040351178643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/7205937040351178643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7205937040351178643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7205937040351178643'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/06/bug-en-intellsense.html' title='Bug en IntellSense'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/hnh12358/SFk3VI16ikI/AAAAAAAAAEI/CQGM4oPwZkA/s72-c/bug.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-5655706479524112740</id><published>2008-06-06T07:28:00.001-07:00</published><updated>2008-06-09T10:57:22.825-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="projects"/><title type='text'>XTE New Version</title><content type='html'>&lt;center&gt;&lt;a title=&quot;logo.jpg&quot; href=&quot;http://www.flickr.com/photos/33815613@N00/2555465783/&quot;&gt;&lt;img src=&quot;http://static.flickr.com/3110/2555465783_259992ecef_m.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;He subido nuevos cambios a XTE, podeis verla en &lt;a href=&quot;http://www.codeplex.com/xte&quot;&gt;CodePlex.&lt;/a&gt;&lt;br /&gt;En los proximos dias seguire comentado las mejoras y nuevas features.&lt;br /&gt;Estare encantado de oir cualquier clase comentarios sobre la solucion!&lt;br /&gt;Os dejo otra captura, esta vez mostrando una funcion entera que utiliza operaciones bitwise: &lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3052/2565339792_cf499d91e6.jpg?v=0&quot; title=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://farm4.static.flickr.com/3052/2565339792_cf499d91e6.jpg?v=0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;  &lt;/center&gt;&lt;p style=&quot;text-align: right; font-size: 8px&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3273/2565339416_004588b02b.jpg?v=0&quot; title=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://farm4.static.flickr.com/3273/2565339416_004588b02b.jpg?v=0&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;  &lt;/center&gt;&lt;p style=&quot;text-align: right; font-size: 8px&quot;&gt;&lt;br /&gt;&lt;br /&gt;Blogged with &lt;a href=&quot;http://www.flock.com/blogged-with-flock&quot; title=&quot;Flock&quot; target=&quot;_new&quot;&gt;Flock&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/5655706479524112740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/5655706479524112740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/5655706479524112740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/5655706479524112740'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/06/xte-new-version.html' title='XTE New Version'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-1327360626874871027</id><published>2008-06-04T06:33:00.001-07:00</published><updated>2008-06-04T06:33:26.226-07:00</updated><title type='text'>He leido: C# 3.0 Design Patterns</title><content type='html'>&lt;a href=&quot;http://www.oreilly.com/catalog/9780596527730/index.html&quot; title=&quot;C# 3.0 Design Patterns&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center;&quot; title=&quot;&quot; alt=&quot;C# 3.0 Design Patterns&quot; src=&quot;http://www.oreilly.com/catalog/covers/9780596527730_cat.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;ES&quot;&gt;El viernes llego&lt;br /&gt;a mis manos este magnífico libro sobre patrones. Un regalo para mi cumpleaños&lt;br /&gt;que fue el sábado 31!(y dale con mi cumpleaños). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Debo reconocer que al inicio del año quería escribir acerca de este tema en el&lt;br /&gt;mundo .NET. Con la premisa de poner ejemplos de el uso de patrones en las&lt;br /&gt;clases más importantes del framework. Por lo que cuando lo vi me dio una&lt;br /&gt;especie de melancolía creativa. Ciertamente la sensación se esfumo tan pronto&lt;br /&gt;como empecé a revisar el índice. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si no sabes de patrones deberías leerlo, si sabes también. Estoy al tanto de la&lt;br /&gt;existencia de otros libros sobre Patrones en el mundo .NET. Este es diferente, además&lt;br /&gt;de estar ligado a C# 3.0 los ejemplos están actualizados con el día a día en&lt;br /&gt;internet y .NET. En conclusión, un libro que deberías tener en la sección de&lt;br /&gt;arquitectura de tu biblioteca.&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br style=&quot;&quot; /&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;ES&quot;&gt;Por último&lt;br /&gt;recalcar en la importancia de los Patrones. Si bien es cierto que los conocimientos&lt;br /&gt;de algoritmia dotan al programador de una serie de armas para atacar problemas&lt;br /&gt;variados. En un nivel similar de importancia se encuentran los patrones de diseño,&lt;br /&gt;conociéndolos:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;ES&quot;&gt;Modelaras tu solución&lt;br /&gt;incorporando criterios que han probado su utilidad y que son los&lt;br /&gt;suficientemente flexibles para que pongas tu granito de arena. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;ES&quot;&gt;Podrás&lt;br /&gt;comunicarte con otros programadores de una manera mucho más efectiva.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p style=&quot;text-align: right; font-size: 8px&quot;&gt;Blogged with &lt;a href=&quot;http://www.flock.com/blogged-with-flock&quot; title=&quot;Flock&quot; target=&quot;_new&quot;&gt;Flock&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/1327360626874871027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/1327360626874871027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/1327360626874871027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/1327360626874871027'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/06/he-leido-c-30-design-patterns.html' title='He leido: C# 3.0 Design Patterns'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-849220973739808187</id><published>2008-06-02T11:52:00.000-07:00</published><updated>2008-12-11T13:39:44.739-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="proyectos"/><title type='text'>Presentando XTE Alpha</title><content type='html'>&lt;p&gt;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.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La idea de hacer este programa me surgió mientras leía los ejercicios que propone Octavio Hernández en su libro &lt;a href=&quot;http://www.campusmvp.com/CampusMVP/C_Sharp_3.0_y_LINQ.htm&quot;&gt;C# 3.0 y LINQ&lt;/a&gt;. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;El viernes publico la primera versión beta para que lo probéis.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Si quereis descargarlo, mirad el primer release en CodePlex: &lt;a href=&quot;http://www.codeplex.com/xte/&quot;&gt;http://www.codeplex.com/xte/&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Aqui les dejo dos capturas:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Tree Explorer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05LEsJqJWMYwclUWYw1FcQBrSunCy8k9LqQJc0h2IyrgEnzMZHixRX_jj0TzbjgnM9H87im3dAgFl6GaGQrBNgVcqgCibEXwiWC0m0AvKsI7jOfDpdHnu8LwlIktPF8D8x8Q5/s1600-h/Untitled2.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05LEsJqJWMYwclUWYw1FcQBrSunCy8k9LqQJc0h2IyrgEnzMZHixRX_jj0TzbjgnM9H87im3dAgFl6GaGQrBNgVcqgCibEXwiWC0m0AvKsI7jOfDpdHnu8LwlIktPF8D8x8Q5/s400/Untitled2.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5207361948739564194&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Function LandScape&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6T7s_u9Ne4oWYfDSl9oRrAyE39l_ambhdHXW1jp5GQnNs5WopwYRkdKfJj4ftnJpoc3ItZFrb4vzE1hoyGRDBbR_gxh62ZyvVp1LuPLegnaGws6Fl3zUPW_8kFSI7LJD5VMUp/s1600-h/Untitled.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6T7s_u9Ne4oWYfDSl9oRrAyE39l_ambhdHXW1jp5GQnNs5WopwYRkdKfJj4ftnJpoc3ItZFrb4vzE1hoyGRDBbR_gxh62ZyvVp1LuPLegnaGws6Fl3zUPW_8kFSI7LJD5VMUp/s400/Untitled.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5207361343149175442&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/849220973739808187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/849220973739808187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/849220973739808187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/849220973739808187'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/06/presentando-xte-alpha.html' title='Presentando XTE Alpha'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05LEsJqJWMYwclUWYw1FcQBrSunCy8k9LqQJc0h2IyrgEnzMZHixRX_jj0TzbjgnM9H87im3dAgFl6GaGQrBNgVcqgCibEXwiWC0m0AvKsI7jOfDpdHnu8LwlIktPF8D8x8Q5/s72-c/Untitled2.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-2646578376944178168</id><published>2008-04-03T07:55:00.000-07:00</published><updated>2008-04-08T14:25:55.916-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="frameworks"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Soporte de Relaciones Muchos a Muchos en Kumbia</title><content type='html'>El desarrollo de aplicaciones web en estos días a menudo trae implícito el aprendizaje y uso de frameworks para agilizar el desarrollo. En el caso de php existe uno cuya curva de aprendizaje es quizás tan corta como la de php mismo. Me refiero a &lt;a href=&quot;http://www.kumbiaphp.com/&quot;&gt;Kumbia&lt;/a&gt;. Un framework de orígenes latinos, que implementa el Modelo Vista Controlador.&lt;br /&gt;&lt;br /&gt;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 &quot;Modelo Vista Controlador&quot;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.kumbiaphp.com/foro/viewtopic.php?f=5&amp;amp;t=538&quot;&gt;http://www.kumbiaphp.com/foro/viewtopic.php?f=5&amp;amp;t=538&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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 =)&lt;br /&gt;&lt;br /&gt;I use version 0.4.7. After I did this, I found out version 0.5 comes with peer-to-peer networking =)</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/2646578376944178168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/2646578376944178168' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/2646578376944178168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/2646578376944178168'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/04/soporte-de-relaciones-muchos-muchos-en.html' title='Soporte de Relaciones Muchos a Muchos en Kumbia'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-2365496692009419201</id><published>2008-04-03T07:17:00.000-07:00</published><updated>2008-04-03T07:54:23.713-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>SQL Server 2005 Driver for PHP</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://i.microsoft.com/global/16289f8a-3720-4cbc-b1cf-a2336d532c3b.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 72px; height: 72px;&quot; src=&quot;http://i.microsoft.com/global/16289f8a-3720-4cbc-b1cf-a2336d532c3b.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://static.php.net/www.php.net/images/php.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 83px; height: 46px;&quot; src=&quot;http://static.php.net/www.php.net/images/php.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;span style=&quot;font-weight: bold;&quot;&gt;mssql_connect&lt;/span&gt;. En la &lt;a href=&quot;http://www.php.net/manual/en/function.mssql-connect.php&quot;&gt;página&lt;/a&gt; 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 &lt;a href=&quot;http://blogs.msdn.com/sqlphp/&quot;&gt;blog&lt;/a&gt; y el &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=85F99A70-5DF5-4558-991F-8AEE8506833C&amp;amp;displaylang=en&quot;&gt;download&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/2365496692009419201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/2365496692009419201' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/2365496692009419201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/2365496692009419201'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/04/sql-server-2005-driver-for-php.html' title='SQL Server 2005 Driver for PHP'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-8349367817967807931</id><published>2008-02-20T13:57:00.000-08:00</published><updated>2008-12-11T13:39:44.879-08:00</updated><title type='text'>Estoy en MATCOM!!!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1hgkIjQfoLAN8TczZl9ezK2BDqqrnxx_z9LCV3i0k72t9_5BvaV2H8ap7634uS9vu0qvAA_ngplw6ckf0op4WNPr42stoN7l848CneLDzzOwTJAp_w2DmCLScdc4c74wNMF0i/s1600-h/PC040075.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1hgkIjQfoLAN8TczZl9ezK2BDqqrnxx_z9LCV3i0k72t9_5BvaV2H8ap7634uS9vu0qvAA_ngplw6ckf0op4WNPr42stoN7l848CneLDzzOwTJAp_w2DmCLScdc4c74wNMF0i/s320/PC040075.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5169192213183254930&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Acabo de enterarme que aprobe las pruebas&lt;br /&gt;de aptitud para estudiar licenciatura en Matematicas en la Facultad de&lt;br /&gt;Matematica y Computación de la Universidad de la Habana.&lt;br /&gt;&lt;br /&gt;Hay tantas cosas que pense en escribir en mi blog si este dia llegaba alguna vez. &lt;br /&gt;Pero llegado el momento solo pienso en mencionar a todos aquellos que me han&lt;br /&gt;apoyado y aconsejado en estos ultimos meses, el orden no importa, &lt;br /&gt;pues es una lista circular implementada en el ambito del namespace Foo.Collections =)&lt;br /&gt;&lt;br /&gt;A mis abuelos, por todo lo que han hecho por mi. Siendo su amor el mejor premio al que puedo aspirar.&lt;br /&gt;&lt;br /&gt;A mi madre, lo mas grande que me ha dado la vida.&lt;br /&gt;&lt;br /&gt;A mi padre y mi hermano, por quererme y apoyarme como lo han hecho.&lt;br /&gt;&lt;br /&gt;A mis compañeros de ECC, por brindarme el tiempo necesario para estudiar y todo lo que he aprendido&lt;br /&gt;con ellos en el trancurso de mis practicas.&lt;br /&gt;&lt;br /&gt;A mis profesores de matematica Rufino, Aleida, Joaquin, Margarita y Maritza.&lt;br /&gt;&lt;br /&gt;A Maruchi y Chucho, por su hospitalidad jajaj y las lecciones de advanced math. Muchos betis&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A Marylin y Rene. por ... ejej ustedes saben windows vista!&lt;br /&gt;&lt;br /&gt;A mis amigos, los del tecnico y los que he hecho en el curso del NIIT.&lt;br /&gt;&lt;br /&gt;A mi primo Carlos y mi amigo Joaquin esperando que podamos celebrar los proximos aniversarios de Undersoft&lt;br /&gt;en las mismas condiciones en que lo fundamos jajaja :)&lt;br /&gt;&lt;br /&gt;A todos aquellos que de una y otra forma me han ayudado a acercarme a esta Facultad y a .NET ;)&lt;br /&gt;&lt;br /&gt;A mi princesa. Mejor te lo digo en privado +) !!m n sv ed t ss t om om&lt;br /&gt;&lt;br /&gt;Si me falta alguien que por favor me perdone, y sientase libre de añadir su nombre a la lista :)&lt;br /&gt;&lt;br /&gt;Ahora me despido que tengo mucho para celebrar, dos proyectos que entregar y una prueba de J2EE&lt;br /&gt;para la que estudiar. &lt;br /&gt;&lt;br /&gt;bytes!&lt;br /&gt;&lt;br /&gt;hora</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/8349367817967807931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/8349367817967807931' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/8349367817967807931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/8349367817967807931'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2008/02/estoy-en-matcom.html' title='Estoy en MATCOM!!!'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1hgkIjQfoLAN8TczZl9ezK2BDqqrnxx_z9LCV3i0k72t9_5BvaV2H8ap7634uS9vu0qvAA_ngplw6ckf0op4WNPr42stoN7l848CneLDzzOwTJAp_w2DmCLScdc4c74wNMF0i/s72-c/PC040075.JPG" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-7158327449082802339</id><published>2007-12-29T13:03:00.000-08:00</published><updated>2007-12-29T14:09:32.631-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="personal"/><title type='text'>Happy New Year!!!</title><content type='html'>&lt;p&gt;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).&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;p&gt;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:&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Luz y Progreso, Dinero y Sexo!!!&lt;br/&gt;&lt;br /&gt;y salud que belleza sobra...&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;happy new year fellows!!!&lt;br/&gt;&lt;br /&gt;Ill see u when i see u&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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 :=)&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Amor = Progreso + Luz + Sexo * 4 + Dinero/log e + 7;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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)&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Nada&lt;br/&gt;&lt;br /&gt;Que lo pasen genial junto a las personas que aman!!!</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/7158327449082802339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/7158327449082802339' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7158327449082802339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7158327449082802339'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/12/happy-new-year.html' title='Happy New Year!!!'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-799746403029873298</id><published>2007-10-08T13:30:00.000-07:00</published><updated>2007-10-08T14:05:53.779-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><title type='text'>El codigo de la BCL debbugeable</title><content type='html'>Hace unos dias &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx&quot;&gt;Scott Guthrie&lt;/a&gt;, publico la genial noticia de que se pondra a disposicion  de los desarrolladores parte del codigo fuente de la BCL (y seguira en aumento). Esto era posible hacerlo con Reflector como mencione en: &lt;a href=&quot;http://elblogdehoracio.blogspot.com/2007/05/utilidades-net.html&quot;&gt;http://elblogdehoracio.blogspot.com/2007/05/utilidades-net.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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...&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;esto de ver la BCL  como parte de la solucion es equivalente al nirvana...&lt;br /&gt;&lt;br /&gt;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...</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/799746403029873298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/799746403029873298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/799746403029873298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/799746403029873298'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/10/el-codigo-de-la-bcl-debbugeable.html' title='El codigo de la BCL debbugeable'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-927845601318870615</id><published>2007-07-23T12:49:00.000-07:00</published><updated>2007-07-23T13:19:14.118-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libros"/><category scheme="http://www.blogger.com/atom/ns#" term="literatura"/><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><title type='text'>Harry Potter and the Deathly Hallows</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://upload.wikimedia.org/wikipedia/en/a/a9/Harry_Potter_and_the_Deathly_Hallows.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;&quot; src=&quot;http://upload.wikimedia.org/wikipedia/en/a/a9/Harry_Potter_and_the_Deathly_Hallows.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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!!!)...&lt;br /&gt;&lt;br /&gt;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!!!&lt;br /&gt;&lt;br /&gt;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:  &lt;a href=&quot;http://hallows-es.blogspot.com/&quot;&gt;accio septimo libro!!!&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/927845601318870615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/927845601318870615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/927845601318870615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/927845601318870615'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/07/harry-potter-and-deathly-hallow.html' title='Harry Potter and the Deathly Hallows'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-5863952872122821852</id><published>2007-07-03T07:39:00.000-07:00</published><updated>2007-07-03T08:02:52.516-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>Buscando archivos en directorios.</title><content type='html'>El otro dia estaba viendo procedimientos que necesitan ejecutarse en un segundo hilo para no bloquear la aplicacion, e implemente algo muy sencillo para buscar archivos de manera &quot;iterativa&quot;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collection.Generic;&lt;br /&gt;using System.IO;&lt;br /&gt;&lt;br /&gt;public class FileSeeker&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; public static string[] RetrieveFilesFrom(string directory, string searchPattern,int level)&lt;br /&gt; { &lt;br /&gt;  List&lt;string&gt; filenames = new List&lt;string&gt;();&lt;br /&gt;  Stack&lt;string&gt; directories = new Stack&lt;string&gt;()&lt;br /&gt;&lt;br /&gt;  directories.Push(directory); &lt;br /&gt;&lt;br /&gt;  while(directories.count!=0)&lt;br /&gt;  {&lt;br /&gt;   string currentDirectory = directoriesStack.Pop();&lt;br /&gt;   &lt;br /&gt;   foreach(string file in Directory.GetFiles(currentDirectory,searchPattern)) &lt;br /&gt;     filenames.Add(file);&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;   if((level==-1) || (directories.count != level))&lt;br /&gt;   {&lt;br /&gt;    foreach(string subDirectory in Directory.GetDirectories(currentDirectory)) &lt;br /&gt;     directories.Push(subDirectory); &lt;br /&gt;   }&lt;br /&gt;  &lt;br /&gt;  }&lt;br /&gt;  return filenames.ToArray();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Program&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; public static void Main(string[] args)&lt;br /&gt; {&lt;br /&gt;  foreach(string path in FileSeeker.RetrieveFilensFrom(@&quot;C:\Program Files\&quot;, &quot;*.exe&quot;,-1)&lt;br /&gt;   Console.WriteLine(path);&lt;br /&gt;  Console.Read();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/5863952872122821852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/5863952872122821852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/5863952872122821852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/5863952872122821852'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/07/buscando-archivos-en-directorios.html' title='Buscando archivos en directorios.'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-1451476927277693779</id><published>2007-07-03T05:39:00.000-07:00</published><updated>2007-07-03T11:45:46.475-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Has oido hablar de Prado?</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.pradosoft.com/css/pradoheader.gif&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;&quot; src=&quot;http://www.pradosoft.com/css/pradoheader.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Cuando comence mi etapa de practicas, empece a usar PHP con Ajax usando el framework &lt;a href=&quot;http://www.xajaxproject.org/&quot;&gt;Xajax&lt;/a&gt;, 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...&lt;br /&gt;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...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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!!!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pero los eventos no es todo. Si te gusta trabajar con componentes de software (como a mi) y en la &lt;span style=&quot;font-style:italic;&quot;&gt;manera punto net&lt;/span&gt; (como a mi) estaras complacido de saber que Prado basado en componentes y provee:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Una especie de token &quot;using&quot; (implementado como un metodo estatico en una clase principal) para compensar la falta de namespaces en php:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Prado::using(&#39;This.Is.Del.I.Cio.Us.MyClass&#39;);&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Propiedades con metodos set y get:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class TControl extends TComponent {&lt;br /&gt;    public function getID() {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;    public function setID($value) {&lt;br /&gt;        ...&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;usados asi:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$id = $component-&gt;ID;&lt;br /&gt;$component-&gt;ID = $id;&lt;/p&gt;&lt;br /&gt;or&lt;br /&gt;$id = $component-&gt;getID();&lt;br /&gt;$component-&gt;setID( $id );&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Eventos:&lt;br /&gt;&lt;pre&gt;$callback = &#39;myFunctionName&#39;;&lt;br /&gt;  or &lt;br /&gt;$callback = array($unsub,&#39;myFunctionName&#39;);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$MyComponent-&gt;OnClick = $callback;&lt;br /&gt;$MyComponent-&gt;OnClick-&gt;add( $callback );&lt;br /&gt;$MyComponent-&gt;OnClick[] = $callback;&lt;br /&gt;$MyComponent-&gt;attachEventHandler( &#39;OnClick&#39; , $callback );&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;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 :-).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.pradosoft.com/&quot;&gt;Prado esta aqui!&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/1451476927277693779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/1451476927277693779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/1451476927277693779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/1451476927277693779'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/07/has-oido-hablar-de-prado.html' title='Has oido hablar de Prado?'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-7123480346836093317</id><published>2007-06-18T06:31:00.000-07:00</published><updated>2007-06-18T07:18:09.095-07:00</updated><title type='text'>&quot;Orcas&quot; el IDE Asesino</title><content type='html'>Finalmente he podido instalar Orcas [la beta], tuve que desmarcar casi todas la opciones para que me alcanzara el espacio (nota mental: no instalar todo lo que cae en mis manos...) vamos que son muchos features.&lt;br /&gt;&lt;br /&gt;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 &lt;a href=&quot;http://www.elavefenix.net/Noticias06.aspx&quot;&gt;esta&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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...&lt;br /&gt;&lt;br /&gt;afortunadamente ya el csc.exe ve &lt;span style=&quot;font-style:italic;&quot;&gt;var&lt;/span&gt;como una nueva palabra reservada (si no he declarado ninguna variable con ese nombre claro :-) &lt;br /&gt;&lt;br /&gt;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 :-(&lt;br /&gt;&lt;br /&gt;por ultimo agradecer a mi amigo del avatar de snoopy que muy amablemente me ayudo a descargar la ya mencionada beta ;-)</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/7123480346836093317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/7123480346836093317' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7123480346836093317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/7123480346836093317'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/06/orcas-el-ide-asesino.html' title='&quot;Orcas&quot; el IDE Asesino'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-1580138760042350373</id><published>2007-06-14T12:12:00.000-07:00</published><updated>2007-07-03T07:35:08.398-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="noticias"/><title type='text'>Dia internacional del webblogger</title><content type='html'>&lt;center&gt;&lt;a href=&quot;http://www.inweday.org/&quot;&gt;&lt;img src=&quot;http://inweday.org/buttons/120x90.gif&quot; alt=&quot;International Weblogger&#39;s Day 2007&quot;&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;a href=&quot;https://jalopez.wordpress.com/&quot;&gt;Jalopez&lt;/a&gt; cuando vi tan importante noticia.&lt;br /&gt;&lt;br /&gt;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&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;un primer post: Hola mundo (nunca mejor dicho), escrito por padres claro&lt;br /&gt;&lt;br /&gt;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&lt;br /&gt;&lt;br /&gt;Desde luego seriamos definivamente una sociedad de la informacion ++.&lt;br /&gt; &lt;br /&gt;Para celebrar el dia del blogger, le he hecho uno de mis &lt;a href=&quot;http://dotjoke.blogspot.com&quot;&gt;tweaks&lt;/a&gt; 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!!!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Imagine there&#39;s no Heaven&lt;br /&gt;&lt;p&gt;&lt;br /&gt;It&#39;s easy if you try&lt;br /&gt;&lt;p&gt;&lt;br /&gt;No wars below us&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Above us only tags&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Imagine all the folks&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Blogging for today&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Imagine there&#39;s no countries&lt;br /&gt;&lt;p&gt;&lt;br /&gt;It isn&#39;t hard to post&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Nothing to kill or die for&lt;br /&gt;&lt;p&gt;&lt;br /&gt;And no religion too&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Imagine all the folks&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Blogging life in peace&lt;br /&gt;&lt;p&gt;&lt;br /&gt;You may say I&#39;m a dreamer&lt;br /&gt;&lt;p&gt;&lt;br /&gt;But I&#39;m not the only one&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I hope someday you&#39;ll join us&lt;br /&gt;&lt;p&gt;&lt;br /&gt;And the world will blog as one&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Imagine no possessions&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I wonder if you post&lt;br /&gt;&lt;p&gt;&lt;br /&gt;No need for greed or hunger&lt;br /&gt;&lt;p&gt;&lt;br /&gt;A socialnetwork of man&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Imagine all the folks&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Blogging all the world&lt;br /&gt;&lt;p&gt;&lt;br /&gt;You may say I&#39;m&lt;br /&gt;&lt;p&gt;&lt;br /&gt;a lonely blogger&lt;br /&gt;&lt;p&gt;&lt;br /&gt;But I&#39;m not the lonely one&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I hope someday you&#39;ll join us&lt;br /&gt;&lt;p&gt;&lt;br /&gt;And the world will blog as one &lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;aprovecho este post para decir que a partir de ahora este blog estara sincronizado en wordpress con los post en ingles, &lt;a href=&quot;http://dotgemini.blogspot.com&quot;&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;ultima cosa, no dejen de buscar en technorati los blogs que linkean el sitio oficial del aniversario&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/1580138760042350373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/1580138760042350373' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/1580138760042350373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/1580138760042350373'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/06/dia-internacional-del-blogger.html' title='Dia internacional del webblogger'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-3694550214765598088</id><published>2007-06-11T13:00:00.000-07:00</published><updated>2007-06-11T13:12:49.176-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="he leído"/><category scheme="http://www.blogger.com/atom/ns#" term="libros"/><title type='text'>He leido: The Programmer&#39;s Guide to SQL</title><content type='html'>&lt;a href=&quot;http://www.apress.com/book/bookDisplay.html?bID=216&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;&quot; src=&quot;http://www.apress.com/ApressCorporate/supplement/1/216/bcm.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Este libro como comente anteriormente me ayudo muchisimo, en el se examina en una secuencia adecuada el standard ANSI SQL-99 para SQL Server, Access, Oracle, MySQL y DB2. El libro es del año 2003 por lo que todo el codigo fue pensando para las respectivas versiones de cada plataforma, el hecho de abordar el standard a traves de varias plataformas lo convierte en un recurso muy util para repasadas rapidas, yo lei solo las secciones&lt;br /&gt;de SQL Server pero de la manera que esta ordenado con solo echar un vistazo ya tenemos un traduccion. Si eres novato este libro te vendra de perlas,&lt;br /&gt;&lt;br /&gt;La unica pega aparente es que esta en ingles, pero en fin si no sabes el idioma tomalo con un ejercicio para que mejores ;-)&lt;br /&gt;&lt;br /&gt;Pablo Picasso decia que siempre estaba intentando hacer lo que no podia para en algun momento llegar a hacerlo... (parafraseando claro)</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/3694550214765598088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/3694550214765598088' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/3694550214765598088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/3694550214765598088'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/06/he-leido-programmers-guide-to-sql.html' title='He leido: The Programmer&#39;s Guide to SQL'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-6077302824726433478</id><published>2007-06-07T09:10:00.000-07:00</published><updated>2008-12-11T13:39:45.305-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="proyectos"/><title type='text'>MaR Containers</title><content type='html'>¿Alguna vez han pensado en como podemos con Visual Studio y demas IDEs redimensionar los componentes, moverlos etc? Bueno el caso es que en los &lt;a href=&quot;http://foros.elguille.info/MensajeEditar.aspx?Responder=30424&quot;&gt;foros del Guille&lt;/a&gt; se pregunto por una via  para lograr esto en tiempo de ejecución. Despues de un par de lineas, he terminado Moveable And Resizable Container; esto es, un control que puede tener varios controles  en su interior(uno preferiblemente) y que tiene todos los mecanismos para arrastrar redimensionar etc. Lo he subido a &lt;a href=&quot;http://www.esnips.com/doc/ac6f6f3d-822e-4b5a-8521-fc742e0c7924/MaRControls&quot;&gt;Snips&lt;/a&gt;. Aqui tienen un form en donde se aprecian los &quot;puntos&quot; que serviran para el m&amp;amp;r.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3U31YMtuqZmB5T0KcbNjhjMqZLhQSZmv9h2kpT3Za8hb1PrHBYVotkgLzJtxHPPHDA_TxHlYTi7eH9nPXDP_lg5c4TjQbZWeL9YyIVHgruiYHFVRdpGiBG2tee4cc-VJ0AeSn/s1600-h/marShot.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3U31YMtuqZmB5T0KcbNjhjMqZLhQSZmv9h2kpT3Za8hb1PrHBYVotkgLzJtxHPPHDA_TxHlYTi7eH9nPXDP_lg5c4TjQbZWeL9YyIVHgruiYHFVRdpGiBG2tee4cc-VJ0AeSn/s320/marShot.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5073408897974956354&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;De seguro debe de haber otras formas de hacer esto, pero... El codigo necesita una muy buena revisión y ver si se puede optimizar (vamos que de seguro...), por ultimo advertirles que más les vale tener un control dentro (dock=fill) que de lo contrario no funciona como debe: esta muy bien hecho o es que estoy a 7 minutos de perder el almuerzo...</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/6077302824726433478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/6077302824726433478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/6077302824726433478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/6077302824726433478'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/06/mar-containers.html' title='MaR Containers'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3U31YMtuqZmB5T0KcbNjhjMqZLhQSZmv9h2kpT3Za8hb1PrHBYVotkgLzJtxHPPHDA_TxHlYTi7eH9nPXDP_lg5c4TjQbZWeL9YyIVHgruiYHFVRdpGiBG2tee4cc-VJ0AeSn/s72-c/marShot.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-6094250654906519035</id><published>2007-05-07T07:45:00.000-07:00</published><updated>2008-12-11T13:39:45.437-08:00</updated><title type='text'>Utilidades .NET</title><content type='html'>Renovando mi directorio dedicado a .NET (dotNetFiles) me he bajado un &quot;par&quot; de herramientas que las considero muy utiles:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.aisto.com/roeder/dotnet/Download.aspx?File=Reflector&quot;&gt;Reflector for .NET&lt;/a&gt; //Esta de + que diga algo sobre reflector&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.codeplex.com/reflectoraddins&quot;&gt;Add-Ins&lt;/a&gt; //Al igual Reflector estan excelentes (hay para casi todos los gustos)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.acorns.com.au/Projects/Hawkeye/&quot;&gt;Hawkeye&lt;/a&gt; //Recuerda al property grid, pero me quedo corto con esa comparacion,  si estas desarrollando controles de usuario lo encontraras muy util [aparece en la lista previa de Add-Ins]&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.sandcastledocs.com/Wiki%20Pages/Home.aspx&quot;&gt;SandCastle&lt;/a&gt; //Utilidad para generar la documentacion con el aspecto que tanto nos gusta&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.inchl.nl/SandcastleGUI/&quot;&gt;SandcastleGUI&lt;/a&gt; //La anterior herramienta no tiene GUI, he aqui la una de las alternativas&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codeplex.com/Wiki/View.aspx?ProjectName=SHFB&quot;&gt;Sandcastle Help File Builder&lt;/a&gt; //Lo mismo que la anterior&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Bueno echenles un vistazo, a mi lo de SandCastle me gusta mucho, en el tiempo que estuve haciendo mi tesis gane muchisimo tiempo gracias a una herramienta parecida lo que para PHP. Me exigian manual de Usuario, al ser una especie de framework la documentación adecuada no encajaria en el estilo que ya tenia el documento, ciertamente &lt;a href=&quot;http://www.phpdocumentor.org&quot;&gt;phpDocumentor&lt;/a&gt; me dio un respiro.&lt;br /&gt;&lt;br /&gt;Aunque para serles sincero lo que más me causo conmoción de los plugins que me baje, es la funcionalidad&lt;a href=&quot;http://www.denisbauer.com/NETTools/FileDisassembler.aspx&quot;&gt;FileDisassembler&lt;/a&gt;. &lt;br /&gt; Extrae el codigo fuente de los emsamblados pudiendo [teniendo en cuenta el tipo de proyecto de VS]. Si es cierto que Reflector de por si permite ver el codigo, pero no es lo mismo que tener el codigo de la BCL en un directorio de la PC, dicen que una imagen vale mas que mil palabras (¿era así?) veanlo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDYllmvLYtDEfs-PBi9EjhpN9uYG5DxSk7O68AD1Gw9_BYxddP2J3Ak0l87xOgZYB0s-rcxN7rpqSL3kSifJYYdNn8In9CoDd4G19NBr2eTwQZspOy9EGFi3jrgSTS9UVZXUDR/s1600-h/util.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDYllmvLYtDEfs-PBi9EjhpN9uYG5DxSk7O68AD1Gw9_BYxddP2J3Ak0l87xOgZYB0s-rcxN7rpqSL3kSifJYYdNn8In9CoDd4G19NBr2eTwQZspOy9EGFi3jrgSTS9UVZXUDR/s320/util.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5061857493753424498&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Solo he tenido el valor para ver la fuente de String e Int32. Estoy reuniendo fuerzas para ver System.Security.Cryptography jej.&lt;br /&gt;&lt;br /&gt;pd: El documento de la tesis no he podido subirlo porque los ejemplos y la constancia de su uso (lo mas importante) expone toda la administracion de datos de el proyecto en que se uso, y eso estimados amigos no se puede divulgar ;)</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/6094250654906519035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/6094250654906519035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/6094250654906519035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/6094250654906519035'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/05/utilidades-net.html' title='Utilidades .NET'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDYllmvLYtDEfs-PBi9EjhpN9uYG5DxSk7O68AD1Gw9_BYxddP2J3Ak0l87xOgZYB0s-rcxN7rpqSL3kSifJYYdNn8In9CoDd4G19NBr2eTwQZspOy9EGFi3jrgSTS9UVZXUDR/s72-c/util.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-734352122781032530</id><published>2007-05-07T06:39:00.000-07:00</published><updated>2007-05-07T10:00:09.660-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="literatura"/><category scheme="http://www.blogger.com/atom/ns#" term="personal"/><title type='text'>Estoy escribiendo: ¡Calamares!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://upload.wikimedia.org/wikipedia/commons/e/e4/Mastigoteuthis_flammea.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/e/e4/Mastigoteuthis_flammea.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora que ando de vacaciones -no por mucho- me ha dado por escribir cuentos  he subido el primero de ellos, espero que les guste ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.esnips.com/doc/b6e3bdab-d409-41a4-861d-e766f387c4d4/Calamares&quot;&gt;¡Calamares!&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/734352122781032530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/734352122781032530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/734352122781032530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/734352122781032530'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/05/estoy-escribiendo.html' title='Estoy escribiendo: ¡Calamares!'/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32303233.post-3717297713380503813</id><published>2007-03-27T14:09:00.000-07:00</published><updated>2007-03-27T14:15:12.454-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="elguille.info"/><category scheme="http://www.blogger.com/atom/ns#" term="VB.NET"/><title type='text'></title><content type='html'>En los foros del Guille (&lt;a href=&quot;http://foros.elguille.info&quot;&gt;http://foros.elguille.info&lt;/a&gt;)&lt;br /&gt;  recientemente se pregunto en dos post como se podría salvar la imagen de un&lt;br /&gt;  PictureBox con todo y controles añadidos. Al principio se sugirió utilizar&lt;br /&gt;  la clase Graphics y dibujar nosotros mismos la apariencia del control teniendo&lt;br /&gt;  en cuenta el tipo: Label, PictureBox, etc. El código necesario para esto se&lt;br /&gt;  hace muy engorroso a medida que necesitamos dibujar más y más controles (por no&lt;br /&gt;  mencionar el hecho de dibujar mediante Graphics un TabControl…). Aquí dejo una&lt;br /&gt;  manera más sencilla:&lt;br /&gt;  &lt;/p&gt;&lt;br /&gt; &lt;br /&gt;  &lt;pre&gt;&lt;br /&gt;   &lt;font color = #0000FF&gt;using&lt;/font&gt; System;&lt;br /&gt;   &lt;font color = #0000FF&gt;using&lt;/font&gt; System.Collections.Generic;&lt;br /&gt;   &lt;font color = #0000FF&gt;using&lt;/font&gt; System.Text;&lt;br /&gt;   &lt;font color = #0000FF&gt;using&lt;/font&gt; System.Windows.Forms;&lt;br /&gt;   &lt;font color = #0000FF&gt;using&lt;/font&gt; System.Drawing;&lt;br /&gt;&lt;br /&gt;   &lt;font color = #0000FF&gt;namespace&lt;/font&gt; Temp&lt;br /&gt;   {&lt;br /&gt;       &lt;font color = #0000FF&gt;class&lt;/font&gt; PictureBoxEx : PictureBox&lt;br /&gt;       {&lt;br /&gt;           &lt;font color = #0000FF&gt;public&lt;/font&gt; Image GetCompleteImage()&lt;br /&gt;           {&lt;br /&gt;               Bitmap bitmap = &lt;font color = #0000FF&gt;this&lt;/font&gt;.Image.Clone() &lt;font color = #0000FF&gt;as&lt;/font&gt; Bitmap;&lt;br /&gt;&lt;br /&gt;               &lt;font color = #0000FF&gt;for&lt;/font&gt; (&lt;font color = #0000FF&gt;int&lt;/font&gt; i = &lt;font color = #0000FF&gt;this&lt;/font&gt;.Controls.Count - 1;i&amp;gt;=0 ; i--)&lt;br /&gt;               { &lt;br /&gt;                   &lt;font color = #0000FF&gt;this&lt;/font&gt;.Controls[i].DrawToBitmap(bitmap,&lt;font color = #0000FF&gt;this&lt;/font&gt;.Controls[i].Bounds);&lt;br /&gt;               }&lt;br /&gt;               &lt;font color = #0000FF&gt;return&lt;/font&gt; bitmap;&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;  &lt;/pre&gt;&lt;br /&gt;  &lt;hr&gt;&lt;br /&gt;  &lt;pre&gt;&lt;br /&gt;   &lt;font color = #0000FF&gt;Imports&lt;/font&gt; System&lt;br /&gt;   &lt;font color = #0000FF&gt;Imports&lt;/font&gt; System.Collections.Generic&lt;br /&gt;   &lt;font color = #0000FF&gt;Imports&lt;/font&gt; System.Text&lt;br /&gt;   &lt;font color = #0000FF&gt;Imports&lt;/font&gt; System.Windows.Forms&lt;br /&gt;   &lt;font color = #0000FF&gt;Imports&lt;/font&gt; System.Drawing&lt;br /&gt;&lt;br /&gt;   &lt;font color = #0000FF&gt;Namespace&lt;/font&gt; Temp&lt;br /&gt;       &lt;font color = #0000FF&gt;Class&lt;/font&gt; PictureBoxEx&lt;br /&gt;           &lt;font color = #0000FF&gt;Inherits&lt;/font&gt; PictureBox&lt;br /&gt;           &lt;font color = #0000FF&gt;Public&lt;/font&gt; &lt;font color = #0000FF&gt;Function&lt;/font&gt; GetCompleteImage() &lt;font color = #0000FF&gt;As&lt;/font&gt; Image&lt;br /&gt;               &lt;font color = #0000FF&gt;Dim&lt;/font&gt; bitmap &lt;font color = #0000FF&gt;As&lt;/font&gt; Bitmap = &lt;font color = #0000FF&gt;TryCast&lt;/font&gt;(&lt;font color = #0000FF&gt;Me&lt;/font&gt;.Image.Clone(), Bitmap)&lt;br /&gt;                   &lt;font color = #0000FF&gt;For&lt;/font&gt; i &lt;font color = #0000FF&gt;As&lt;/font&gt; &lt;font color = #0000FF&gt;Integer&lt;/font&gt; = &lt;font color = #0000FF&gt;Me&lt;/font&gt;.Controls.Count - 1 &lt;font color = #0000FF&gt;To&lt;/font&gt; 0 &lt;font color = #0000FF&gt;Step&lt;/font&gt; -1&lt;br /&gt;&lt;br /&gt;                       &lt;font color = #0000FF&gt;Me&lt;/font&gt;.Controls(i).DrawToBitmap(bitmap, &lt;font color = #0000FF&gt;Me&lt;/font&gt;.Controls(i).Bounds)&lt;br /&gt;                   &lt;font color = #0000FF&gt;Next&lt;/font&gt;&lt;br /&gt;                   &lt;font color = #0000FF&gt;Return&lt;/font&gt; bitmap&lt;br /&gt;               &lt;font color = #0000FF&gt;End&lt;/font&gt; &lt;font color = #0000FF&gt;Function&lt;/font&gt;&lt;br /&gt;           &lt;font color = #0000FF&gt;End&lt;/font&gt; &lt;font color = #0000FF&gt;Class&lt;/font&gt;&lt;br /&gt;       &lt;font color = #0000FF&gt;End&lt;/font&gt; &lt;font color = #0000FF&gt;Namespace&lt;/font&gt;&lt;br /&gt;  &lt;/pre&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  En este fragmento, creamos una&lt;br /&gt;  clase que extiende de PictureBox, añadiendo el método GetCompleteImage. Donde&lt;br /&gt;  se crea una copia de la imagen de fondo y se comienza a iterar a través de la&lt;br /&gt;  propiedad Controls de tipo ControlColecction. Obsérvese que se itera desde el&lt;br /&gt;  último elemento hasta el primero, teniendo el cuenta el Z-order (a los que han &lt;br /&gt;  trabajado con divs y css les debe sonar, y claro WPF ;-) ), el mismo esta&lt;br /&gt;  determinado por el índice del control en la colección. Posteriormente&lt;br /&gt;  utilizamos el método DrawToBitmap existente en la clase control, pasándole el&lt;br /&gt;  bitmap donde dibujaremos y el área donde se pintara  dentro del mismo.</content><link rel='replies' type='application/atom+xml' href='http://elblogdehoracio.blogspot.com/feeds/3717297713380503813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/32303233/3717297713380503813' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/3717297713380503813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32303233/posts/default/3717297713380503813'/><link rel='alternate' type='text/html' href='http://elblogdehoracio.blogspot.com/2007/03/en-los-foros-del-guille-httpforos.html' title=''/><author><name>Horacio Núñez</name><uri>http://www.blogger.com/profile/02593373171524791902</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/_XiCCE9FRMI8/TF0WzoPCDZI/AAAAAAAAAJg/EXWjY3D3NzA/S220/Untitled+picture.png'/></author><thr:total>3</thr:total></entry></feed>