Pensamientos ágiles
Mi empresa y los acantilados de Howth
Enero 31st, 2007 - [Enlace local]
El otro día me tocó hacer horas extras. Bueno, el otro, el otro, y todos estos últimos días que salimos a las tantas. Pero bueno, si es que por irse a Irlanda no significa que nos vayamos a librar de los apretones de los diez días antes de la release 1.0. En fin, que como era domingo y iba a estar sólo hasta terminada la mañana, se me ocurrió llevar la cámara conmigo y hacer alguna fotillo.
Esta es mi empresa: 
La verdad es que no parece el edificio de una empresa, ¿verdad?. Pues está en pleno centro de Dublin. Esto es muy común en Dublin, ya que muchas empresas se encuentran en el centro. Así que ocupan edificios georgianos con las ventajas y desventajas que conlleva. Podéis estar seguros que la primera vez que me acerqué a curiosear donde iba a trabajar, no me lo creía. Ay, ay, ay, donde me he metido. Y yo que iba a Dublin y me esperaba super oficinas en el centro de varios pisos y todo eso. Va a ser que no.
En fin, que después me acerqué a Howth y me encontré con mis amigas las focas (fijaros en el centro), de las que ya hablé hace tiempo, pues puede hacer algunas fotillos más. En fin, que si os interesa Irlanda y todo eso, aquí hay alguna foto más. No hay muchas, pero intentaré ir añadiendo cosillas. 
Por último me fui a los acantilados que hay por la zona, a pasar un poco de frío. He subido algunos videos. Son muy aburridos, y tienen mucho ruido porque había muchísimo viento, pero os dará una idea de lo que es Irlanda. No está nada mal para estar a 15km del centro de Dublin.
» Leer más, comentarios, etc...
Najaraba.com: Software libre, negocios y más.
Firebug: Desarrollo Web Evolucionado
Enero 31st, 2007 - [Enlace local]
No suelo dedicarme a relatar herramientas, pero ésta merece el post: FireBug ha visto la luz en la versión 1.0. Una herramienta indispensable para cualquiera que haga desarrollo web, con numerosas utilidades que nos facilitan la vida para pegarnos con JavaScript, CSSs y HTML. Si todavía no la habeis probado, os la recomiendo encarecidamente. Eso sí, únicamente para FireFox, ¿o acaso utilizais
» Leer más, comentarios, etc...
The New Cult of Dead Cow
Propiedades en PHP5
Enero 31st, 2007 - [Enlace local]
Las propiedades son metodos que te permiten acceder a los atributos de una clase de una manera ordenada.
Me explico, tenemos la siguiente clase:
class Persona{
public nombre;
public edad;
}
Cuando la queremos usar hacemos lo siguiente:
$per = new Persona();
$per->nombre = "Arthas";
$per->edad = 24;
Sin embargo nada nos impide hacer :
$per = new Persona();
$per->nombre = 23;
per->edad = "Lo que sea";
Las propiedades en cambio nos permiten asegurarnos que el acceso a los atributos de una clase, se hacen de la manera especificada por nosotros. Ejemplo:
class Persona{
public nombre;
public edad;public __set($attr,$value)
{
switch ($attr)
{
case "nombre":
if ()
{
$this->nombre = $value;
}
else
{
throw new Exception(”Informacion no valida”);
}}
}
}
Asi cuando hacemos uso de las propiedades, podemos controlar como se accesa a la informacion.
El problema viene cuando heredamos una clase, y en la clase hija queremos redefinir las politicas de control sobre algunas de las propiedades.
Por ejemplo, quisiera que en la clase heredada solo se grabaran los 15 primeros caracteres.
La unica manera es redefinir todo el metodo __get, cargandonos con eso toda una gran cantidad de trabajo. O sea volveriamos al copy & paste, para tener de nuevo el metodo completo y luego hacer las modificaciones que necesitaramos :S. NADA mas fuera de la OO.
En fin, la única solución que se me ocurre es crear una función que reemplace el acceso a esa propiedad, por ejemplo setNombre($value), pero esto no impediria que se ingrese por el metodo antiguo.
Bueno si a alguien se le ocurre otra forma de hacerlo , por favor aviseme.
Haber si para php6, la gente de Zend se les ocurre separar el codigo de acceso para cada propiedad. Algo mas o menos asi:
class Persona{private nombre;
property nombre
{
function __get()
{
return $this->nombre;
}function __set($value)
{
//Codigo de validacion
$this->nombre = $value;
}
}}
» Leer más, comentarios, etc...
MadeInFlex
Bruce Eckel y Flex
Enero 31st, 2007 - [Enlace local]
Guru de Java por escelencia, autor de infinidad de articulos y libros, Bruce habla en profundidad de las virtudes de Flex....
Una muy buena lectura...
http://www.artima.com/weblogs/viewpost.jsp?thread=193593
Enrique
» Leer más, comentarios, etc...
Buayacorp
Variables por referencia
Enero 31st, 2007 - [Enlace local]
Ayer mientras publicaba un ejemplo sobre variables por referencia y comparación de objetos -como respuesta a una pregunta hecha en un foro, me surgió el siguiente problema:
using System; class Program { static void Main(string[] args) { object a = new object(); object b = a; // [1] a = "test"; // [2] Console.WriteLine(a == b); } }
Por algún motivo la expresión a == b evalúa a falso, aún cuando se sabe que en [1] a y b deberían tener la misma referencia para el objeto creado en el paso anterior. En [2] asigno un string para evitar problemas con el boxing/unboxing entre variables por referencia y por valor, he probado asignando otros objetos también pero sin ningún efecto sobre el resultado final.
Lo curioso de esto es que si se comenta [2], esta vez la expresión evalúa a verdadero, resultado que confirma que a y b tienen la misma referencia -cabe recordar que tanto el operador = como el método Equals sólo comparan referencias.
No sé si esto es un bug o feature, en todo caso, estaré muy agradecido si alguien me ahorra tiempo de búsqueda para absolver esta pequeña duda.
Nota: sé que es difícil que el código mostrado pueda aparecer en una determinada aplicación.
» Leer más, comentarios, etc...
.NET o no .NET, esa es la cuestión
El pan nuestro de cada día…
Enero 31st, 2007 - [Enlace local]
... o el padre de todos los bugs (de momento).
Voy a intentar explicar mi última aventura dentro del C++/CLI. Y digo última porque abandono el lenguaje y de momento siempre que pueda haré las cosas en C#, y cuando necesite interop IJW, lo meteré todo en un ensamblado hecho en C++/CLI y lo usaré desde C#. Espero así tener menos problemas, que el IDE se pueda manejar sin que se arrastre mucho, y creo que dejaré de padecer problemas como el que voy a contar ahora. Si el C# fuera tan buggy como el C++/CLI, lo más seguro es que abandone el .NET definitivamente para mis proyectos profesionales, aunque todavía no lo tengo decidido del todo.
La aplicación
Mi último proyecto es una aplicación que irá en un quiosco, completamente autónoma. Aunque no es muy grande, sí que es compleja, pues controla varios dispositivos que yo llamo exóticos (aunque para mí un dispositivo exótico sea un servidor de bases de datos) a través de USB y de canales serie, emplea sockets para conectarse al mundo exterior, y procesa unos 100 megas en elementos gráficos y sonidos.
Este tipo de desarrollos requieren variables globales, pero por desgracia el .NET no las permite, y realmente no entiendo por qué, puesto que tampoco es un entorno Orientado a Objetos puro, y menos aún con las novedades que trae el C# 3.0. Por lo tanto tengo que utilizar clases globales estáticas para realizar el mismo trabajo, pero este tipo de clases tienen una contrapartida, y es que no sabes cuándo se van a instanciar realmente, y en teoría deberían estarlo justo antes de entrar en main, aunque el C++/CLI retarda a veces dicha creación hasta que se llama a cualquier método de la misma, y entonces ejecuta el constructor estático, cosa que para un sistema en tiempo real es inaceptable, por lo que al final lo he tenido que agrupar todo en una clase global que he llamado, ya lo habrán adivinado, Globals. Dentro de esta clase instancio objetos miembro estáticos, que llamo en tiempo de ejecución mediante propiedades:
if(Globals::Devices->InPowerFail) ...
Otros detalles de implementación
Una de las cosas que hace la aplicación es consultar periódicamente si tiene actualizaciones para bajárselas e instalarlas, al más puro estilo Windows Update. Todo ese código está en una pareja de ficheros llamada UpgradeEngine.h/UpgradeEngine.cpp. Ahí dentro hay clases para consultar el estado del sistema remoto, para bajarse lo que quiera que tenga que bajarse y para realizar la descompresión y la pertinente instalación, todo ello cuelga de un método global que llamo dentro de main antes de instanciar la ficha principal. La implementación del método global está al final del fichero, y todas las clases por encima de él, y este método global abre un fichero local, mira si le toca y sólo entonces instancia los objetos pertinentes.
Hay muchas más clases que son globales y estáticas, algunas de ellas crean hilos que van a monitorizar los periféricos, que deben estar disponibles lo antes posible para evitar efectos indeseados, otras simplemente precargan parte de los gráficos y de los sonidos, y otras son meros elementos de soporte.
El primer problema
Todos los programadores somos humanos y nos equivocamos. Partiendo de ese principio, y teniendo en cuenta que aproximadamente el 20% de la aplicación está en los constructores globales estáticos, vamos a tener un 20% del total de los bugs en dichos constructores. Y esos bugs, a veces, van a lanzar excepciones, excepciones que deberían ser manejadas primero por un controlador local si lo hubiera y luego por uno global, terminando en todo caso en el de la máquina virtual.
Eso si no hay bugs dentro de esos controladores. Porque si los hay, podría ocurrirte lo que a mi. Haces una pifia, lanzas la aplicación y ¡tachán!, excepción al canto. Bien, en la primera línea del primer método que haya en UpgradeEngine.cpp. Pero si esa clase ni siquiera se está instanciando ahora, y ahí no he tocado nada, y ni siquiera se ha llamado al código que decide si se instancia o no esa clase (recordemos, estamos en un constructor estático global, antes de entrar en main).
Miras el código que has modificado y descubres la pifia, pero te sigue rondando por la cabeza el hecho de que no se haya disparado ahí la excepción. Pero sigues picando código, y vuelves a cagarla. Nueva excepción, que termina en el mismo sitio que antes, excepción generada en otro constructor estático en la otra punta de la aplicación. La cosa ya te mosquea un poco.
Cambias el orden de las clases en UpgradeEngine.cpp, y resulta que las excepciones se siguen capturando en la primera línea del primer método de la primera clase que haya en dicho fichero, se produzcan en el constructor estático que sea. Y entonces empieza a subir la presión sanguínea.
Ya puestos a probar cosas, haces una construcción en release que sabes va a lanzar una excepción en algún lugar, y si ejecutas desde el IDE el comportamiento es el mismo, pero si lanzas la aplicación por sí sola, peta la máquina virtual entera y se cierra todo. No es que te diga que se ha generado la excepción tal o cual, no, sino que lo que se rompe es la máquina virtual completa, el programa nativo que es el propio .NET.
Y entonces decides visitar ese gimnasio que pagas pero que casi nunca usas, y que ahorita mismo te viene al pelo.
El segundo problema
Ya repuesto de lo anterior, estás terminando el aplicativo, sólo te quedan un par de cosas y que te lo revisen y te saquen bugs. Estás contento con el trabajo bien hecho. Te traen el quiosco para que metas tu aplicación en él.
Y comienza el baile de nuevo.
La máquina virtual se cae sola. En tu PC todo va bien, en la placa final ni siquiera obtienes excepciones, sino que la propia VM .NET se cae miserablemente. Bueno, son cosas que pasan. Intentas depurar de forma remota y no puedes porque el ordenador remoto es un XP Home... Los compis que están haciendo la integración en la cadena de montaje también te vienen con pegas, en algunas instalaciones (todas ellas clonadas), la VM salta con excepciones, en otras simplemente se cae. Me traen una que genera casi siempre excepciones y las excepciones tienen el mismo sentido que cuando me pasaba lo que he explicado en el punto anterior, o sea, ninguno. Y de diez máquinas idénticas en pruebas, sólo dos generan excepciones, y las ocho restantes simplemente se caen. Y no son problemas de hardware, porque intercambias componentes y no tienen relación alguna con los fallos...
El intermedio
Hora del kitkat. O de mandarlo todo a tomar por c*l*. Se ha bajado la máquina virtual del Orcas, y tras los problemas con la clave comentados en otro post, me pongo a jugar con él. Una de las pruebas es recompilar mi proyecto C++/CLI actual con este entorno, que por cierto es idéntico al Visual Studio 2005.
Lanzo la aplicación y... y... y... ¡Joder, una excepción en pleno código del UpgradeEngine.cpp! ¡Pero no en la primera línea del primer método de la primera clase, si no en otro sitio! Y hay una traza a un fichero que ni existe ni tiene una ruta válida si no es en mi máquina de desarollo, y ocurre siempre que la máquina NO tenga que actualizar...
¡Alabados sean los chicos-chapuza de Microsoft!
Las preguntas sin resolver
Está claro que el problema estaba en esa línea, pero el asunto no queda lo suficientemente explicado, y aunque en un principio la culpa sea mía por olvidar quitar esa traza, el compilador del Visual Studio 2005 (versión 14.00.50727.762) debería haberse comportado como el del Orcas (versión 15.00.11209).
Otra pregunta sin resolver es por qué no saltaba la excepción en esa línea en mi placa de pruebas (diferente de todas la demás, es una VIA EPOC de esas tiny).
Otra más es por qué en release la máquina virtual .NET se cae entera.
Otra es por qué en ciertas máquinas daba una excepción sin sentido, en otras no y en otras más se caía la VM siendo estas máquinas completamente idénticas.
Más: ¿Por qué cuando hacía una pifia en otro lugar, en lugar de saltar la excepción en ese lugar y con el tipo concreto, saltaba la otra y encima sin sentido alguno?
Posible explicación
Voy a intentar dar una explicación del comportamiento observado, ya que explicar todos los pasos dados antes de compilar la aplicación con el Orcas sería demasiado largo, y encima está el hecho de que al poner trazas interfería en la secuencia, pero creo que mis conclusiones son correctas.
Una aplicación .NET tiene al menos 8 hilos aunque nosotros no creemos ninguno. Supongo que esos hilos están ahí para el recolector de basura, el precompilador, el scheduler de código, el optimizador, el intérprete de la máquina virtual y otros menesteres similares.
Por lo tanto, mientras se está ejecutando código por un lado, seguro que por el otro se está precompilando, optimizando o simplemente realizando otras tareas de mantenimiento, por lo que aunque pensemos en una máquina de von Newman secuencial, realmente no es así (bueno, sí que es así, pero a efectos prácticos no).
Imagino el siguiente escenario: por un lado un hilo está ejecutando los constructores estáticos, y por el otro está preparando el entorno para entrar en main, por un lado se produce una excepción en un constructor estático y por el otro en el código con la traza mal puesta. Entran en acción los manejadores de excepciones, mientras uno busca un manejador, el otro también lo hace, o es entonces cuando mientras una parte de la vm está buscando un manejador la otra ejectua el código que genera una nueva excepción, de forma que se arma la picha un lío y sale por donde puede.
Como en debug hay más código oculto que en release, los tiempos son diferentes, así como las comprobaciones, y dado que la máquina virtual .NET es algo vivo, en determinadas condiciones se produce ciertas secuencias que llevan a su total caída, en otras a salir por donde puede, y finalmente en alguna más a poder lanzar una excepción más o menos válida.
Creo no equivocarme, pero simplemente toda esta explicación podría ser una mera paja mental, así que lo único que puedo afirmar y reafirmar es que
Sigo pensando que hay algo podrido dentro de la máquina virtual .NET
» Leer más, comentarios, etc...
Linking Paths día a día
Estoy a favor de los colegios de informáticos siempre y cuando…
Enero 31st, 2007 - [Enlace local]
Será que hoy me he levantado peleón (o un poco tonto, sin más), pero después de la entrada de ayer he seguido reflexionando, y me he dado cuenta de que estoy a favor de que se creen colegios de informáticos... siempre y cuando:
- los informáticos tengan responsabilidad legal (penal y/o civil) sobre lo que hacen
- los informáticos tengan que pasar por un exámen de conocimientos reales para entregarles una licencia que puede ser revocada si no demuestran aptitud y actitud
- los informáticos reciban junto con la licencia un poco de imaginación y de dignidad personal (seguro que tú lector eres de los que tienen y no te hace falta, pero al resto mayoritariamente sí)
- los informaticos acepten que en cualquier día se cree un colegio de camareros, estudiantes, empresarios, o cualquier otro gremio que les impida hacer otras cosas que hacen o han hecho en algún momento
Eso sí que arreglaría muchas cosas
Aunque aún faltaría por definir que es un informático, porque no es lo mismo un programador que uno que configura impresoras en una empresa (y conozco informáticos de carrera que hacen ambas cosas), porque existen masters y certificaciones específicas de dirección de proyectos (por ejemplo PMP o Prince 2, ¿quizás ellos también nos vean como intrusos?), etc.
Normalmente no me meto en peleas sin sentido (no demasidas desde hace un tiempo), pero este tema me molesta un poco. No tanto en lo personal (aunque supongo que como ingeniero técnico en informática soy informático de segunda), pero si en el profesional. El mejor informático que conozco es un FP2, y sólo de pensar que alguién le pudiera acusar de intruso/indepto/no apto/etc me da... bueno, lo dejo aquí.
Un poco de cordura, si lo que queremos es mejorar la profesión, el último problema son los intrusos (opinión personal), como indique en mi entrada de ayer.
» Leer más, comentarios, etc...
Programación y más
¿Qué es un EJB?
Enero 31st, 2007 - [Enlace local]
Una versión de lo que es un EJB:
» Leer más, comentarios, etc...
PHPBSD.net
Transfiriendo datos con la librería cURL en PHP
Enero 31st, 2007 - [Enlace local]
cURL es una utilidad de linea de comandos (curl) y una librería (libcurl) para realizar transferencias de archivos que soporta multitud de protocolos distintos (FTP, HTTP, etc.) y un sinfín de opciones. Tanto la utilidad como la librería son muy conocidas y de un uso muy extendido.
La librería se puede usar desde varios lenguajes de programación y entre ellos, como no, el PHP. Puedes encontrar en el manual todo un capítulo dedicado al conjunto de funciones cURL. De entre la infinidad de cosas que puedes hacer usando esta librería con PHP: obtener el contenido de una web, obtener datos XML (como RSS), subir o bajar archivos de servidores FTP, soporte para conexiones seguras (HTTPS, SCP), etc. Una opción destacable es el soporte de peticiones HTTP POST y GET con lo que podéis realizar scraping de casi cualquier cosa.
Un ejemplo de código para obtener el contenido de una página web (o un feed):
-
$ch = curl_init();
-
curl_setopt($ch, CURLOPT_URL, 'http://www.phpbsd.net/');
-
curl_setopt($ch, CURLOPT_HEADER, false);
-
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
-
$resultado = curl_exec($ch);
-
$error = curl_error($ch);
-
curl_close($ch);
Con el código anterior en $resultado nos quedamos con los datos obtenidos o nada si ha ocurrido un error, si ese es el caso en $error tenemos un mensaje de texto con el error. Se usan las siguientes opciones:
- CURLOPT_URL con la URL a descargar.
- CURLOPT_HEADER a false para no incluir las headers HTTP en la respuesta.
- CURLOPT_RETURNTRANSFER a true para que la función curl_exec() devuelva la respuesta como un string en lugar de printarla por pantalla.
Para más opciones consultar la documentación de la función curl_setopt().
De todas las funcionalidades que proporciona el soporte de cURL en PHP una de las más llamativas son todas las funciones multi_* para realizar peticiones en paralelo, esto puede llegar a ser muy útil en numerosas situaciones. En un siguiente post explicaré como lanzar peticiones paralelas desde PHP usando cURL.
Etiquetas en Technorati: articulos, curl, documentos, howto, libcurl, php, programacionarticulos, curl, documentos, howto, libcurl, php, programacion
» Leer más, comentarios, etc...
Vivir del Software
Vivir del software en PDF
Enero 30th, 2007 - [Enlace local]
Hace ya unas semanas entregué mi tesina, razón inicial para crear este blog. Y aunque tengo muchas ideas para seguir escribiendo, las limitaciones de tiempo me hacen no ser tan continuo como realmente debería (aprovecho para reiterar la invitación para que todo aquel viva del software escriba también en este sitio).
Pero en todo caso, si algún lector quiere obtener el contenido de este blog, algo mejor redactado, en otro formato, puede obtenerlo pulsando aquí, con el PDF del trabajo que entregué.
» Leer más, comentarios, etc...
Navegapolis
Real life project management using Scrum
Enero 30th, 2007 - [Enlace local]
En Youtube está disponible la conferencia que con este título impartió Dody Gunawinata , fundador de Silverkey Technologies el 18 del pasado noviembre en el hotel Simiramis InterContinental del Cairo.
En ella hace una descripción ejecutiva de Scrum que en media hora presenta los componentes del proceso, los valores y elementos que hacen que funcione; y donde afirma que tras dos años de usarlo en Silverkey Technologies han encontrado que es un modelo útil para equipos pequeños.
Además como es japonés, habla inglés clarito clarito.
» Leer más, comentarios, etc...
Navegapolis
Llamada a ponencias para las III Jornadas de Linux de Albacete
Enero 30th, 2007 - [Enlace local]
Con motivo de la celebración de las III Jornadas de Software Libre de Albacete, la Asociación Linux Albacete hace un llamamiento a todos sus socios, a la comunidad y a cualquiera que tenga algo que decir con respecto al software libre y materias afines para presentar ponencias, charlas, talleres, conferencias… para incluirlas en el programa de las jornadas de este año.
» Leer más, comentarios, etc...
Pensamientos ágiles
Motorola, otro más que cae
Enero 30th, 2007 - [Enlace local]
Parece que las patas del tigre celta comienzan a temblar, o eso es lo que aventuran algunos pesimistas tras conocerse que otra compañía, en este caso Motorola, va a realizar un ajuste de plantilla. La noticia se une a los anuncios en el último mes de cortes de empleo y producción de BUPA, FCI Ireland, Greencore o Dairygold, entre otros.
Quizás es que como aquí desde hace quince años lo único que hace es crearse empleo, se ponen más nerviosos con las malas noticias. ¿O es que yo he llegado en mal momento?
» Leer más, comentarios, etc...
Linking Paths día a día
Sobre los males del mundo
Enero 30th, 2007 - [Enlace local]
A parte de encontrarme con una desagradable sorpresa en el snipsnap de javaconganas, el día ha venido marcado por dos conversaciones similares y un post que me han invitado a la reflexión. Y es que una invitación para trabajar en una empresa te hace repensar (y recordar) muchas cosas. Una de las principales razones para crear linking fué la de querer hacer algo diferente. Se acerca su segundo cumpleaños de facto (que aún no oficial), y aunque estos dos años han traído muchas cosas (buenas y menos buenas), algunos caídos en el camino (como mi ex-socio) e incluso algún suelo truncado (de momento) como trabajar con mi autodeclarado familiar, no puedo dejar de estar contento con lo conseguido, sobre todo si miro hacia fuera.
Continua leyendo "Sobre los males del mundo"
» Leer más, comentarios, etc...
Rubí Sobre Rieles
Presentación: “Ruby Mola (y por qué)” por The Cocktail
Enero 30th, 2007 - [Enlace local]
Siguiendo con la misma opinión sobre la presentaciones creadas por la empresa TheCocktail, aquí una nueva que cuenta porqué es tan bueno el lenguaje de programación Ruby.
» Leer más, comentarios, etc...
MadeInFlex
Componente Verical MenuBar
Enero 30th, 2007 - [Enlace local]
Doug McCune ha creado un componente basado en el MenuBar pero con la posibilidad de asignar la propiedad direction, la cual define si se quieren renderizar sus elementos horizontal o verticalmente.
Vertical MenuBar Component
» Leer más, comentarios, etc...
MadeInFlex
Componente Horizontal Accordion
Enero 30th, 2007 - [Enlace local]
Nuevo componente de Doug McCune basado en el Accordion pero a diferencia del que viene en el framework de Flex, éste renderiza sus elementos verticalmente.
Horizontal Accordion Component for Flex
» Leer más, comentarios, etc...
MadeInFlex
Scrollable Menus para Flex
Enero 30th, 2007 - [Enlace local]
Doug McCune publica una serie de componentes de menú con la característica que se les puede asignar propiedades que controlan si se muestra o no un scroll.
Even Better Scrollable Menus for Flex
» Leer más, comentarios, etc...
Joan Garnet
Napikin theme para Flex
Enero 30th, 2007 - [Enlace local]
Si quieres el UI de tu aplicación Flex parezca una servilleta

puedes ver como hacerlo en tres pasos:
- CSS styles and graphical skins
- programmatic skins
- subclassing Flex framework classes to achieve fine-grained control of the look-and-feel
[ vía flexed ]
» Leer más, comentarios, etc...
Joan Garnet
Novedades ActionStep
Enero 30th, 2007 - [Enlace local]
Scott Hyndman resucita el proyecto ActionStep con promesas interesantes de presente y de futuro.
Entre otras cosas: NSTableView ( DataGrid ) con todas sus funcionalidades estándar, soporte para ActionScript3, soporte para haXe, nuevo site, nuevo logo…
Enlace al post: * ActionStep: State of the Union
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering
El año del Analista de Negocios
Enero 30th, 2007 - [Enlace local]
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering
El año del Analista de Negocios
Enero 30th, 2007 - [Enlace local]
» Leer más, comentarios, etc...
Buayacorp
The Quality Code Handbook
Enero 30th, 2007 - [Enlace local]
Este es un pequeño ebook, distribuido al parecer de manera gratuita incluye los siguientes temas:
- Desarrollo orientado a pruebas, hace una breve y básica introducción al Desarrollo Orientado a Pruebas, para el ejemplo hace uso del entorno de pruebas de Visual Studio Team System -hubiera sido mejor con algún xUnit pero bueno...
- Como mejorar el rendimiento de aplicaciones administradas, nuevamente hace referencia a una herramienta (profiler) de Team System, para detectar cuellos de botella en nuestras aplicaciones.
- Herramientas de análisis de código para desarrolladores de aplicaciones nativas, en realidad no he leído este capítulo puesto que no uso C++
- Modelado de amenazas: este apartado es un pequeño manual de uso de la aplicación Threat Analysis and Modeling Tool, que permite modelar las amenazas desde el diseño de la aplicación -gran parte de las funcionalidades de esta herramienta están basadas en el libro Writing Secure Code
- Análisis de código con FxCop, FxCop es una herramienta que permite analizar ensamblados para determinar si el código sigue las buenas prácticas definidas para el BCL.
- Pruebas de stress para aplicaciones web, comenta la importancia de este tipo de pruebas en aplicaciones Web
- Personalización de check-ins en Visual Studio Team System, tampoco he leído este capítulo puesto que subversion cubre todas nuestras necesidades en el trabajo
.
Como se habrán dado cuenta, en este ebook se pone énfasis en herramientas de Microsoft -en realidad no existe casi referencia a otras alternativas. Si desean descargarlo pueden hacerlo desde esta dirección, pero para poder visualizar el documento de este software.
Fuente: Blog de Dave Glover
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering
Minería de Datos / Data Mining
Enero 30th, 2007 - [Enlace local]
» Leer más, comentarios, etc...
Buayacorp
mod_rewrite y el modificador L
Enero 29th, 2007 - [Enlace local]
Etienne Kneuss, en un breve pero bastante explicativo artículo comenta sobre: el modificador L (last rule), el funcionamiento interno de mod_rewrite y donde no debería ser usado este modificador cuando las reglas se definen desde el archivo .htaccess.
Es una referencia útil para los que deseen conocer un poquito más sobre el funcionamiento de mod_rewrite, en especial para los que teníamos algunos conceptos errados.