Atlas Control Toolkit, ¿javascript fácil = javascript pesado?

Scott Guthrie, acaba de anunciar la disponibilidad de un nuevo CTP de Atlas Control Toolkit.

The "Atlas" Control Toolkit contains controls and templates that make adding client-side functionality to your site incredibly easy.

A pesar de que algunos están emocionados y nos muestran ejemplos de uso, IMHO, creo que varios de estos controles son prácticamente inútiles en comparación a lo que se puede hacer con otras librerías muchísimo más pequeñas... ya que la supuesta facilidad de uso de estos controles, trae como consecuencia que el navegador del cliente descargue una cantidad considerable de javascript que no usará, esto último debido a la falta de modularización de Atlas ASP.NET AJAX.

Finalmente, creo que es decisión de cada uno, determinar el escenario adecuado para el uso de estos controles u otros frameworks javascript.

Videos de Lang.NET Symposium

Michael Lehman anuncia que ya están disponibles para descargar los videos de Lang.NET Symposium -un evento que convoca a investigadores relacionados con temas de lenguajes de programación y compiladores.

La lista completa de videos está disponible en http://www.langnetsymposium.com/speakers.asp

Lo que debes saber para trabajar en Perú

Creo que el siguiente anuncio explica porque aún no he sido capaz de conseguir un trabajo en mi país :-D:

REQUISITOS PROFESIONALES:

  • Programación: Action Script 2, ASP, ASP.NET, XML, XHTML, DHTML, CSS, Javascript, JSP, PHP, SQL, Visual Fox Pro, Visual Basic, Ajax, J2EE, Perl, etc
  • Base de Datos: SQL Server, My SQL, Visual Fox Pro, MS Access, etc PHP, MySQL
  • Servidores: Windows NT, Windows 2000 Server, Novell, Linux, Apache, etc. Administración de servidores de Correo, FTP, email, Web
  • Otros: Flash (IMPRESCINDIBLE)
  • Experiencia en desarrollo de aplicaciones personalizadas, construcción y gestión de bases de datos, elaboración y mantenimiento de administradores de contenidos, registros en buscadores, envíos de newsletter, carritos de compras, catalogos de productos, etc.
  • De preferencia con conocimientos de administración de negocios, marketing y/o comercio electrónico.

REQUISITOS PERSONALES

  • RESPONSABILIDAD
  • Honestidad
  • Disciplina
  • Puntualidad
  • Comunicativo
  • Capacidad para trabajar en equipo
  • Autodidacta

OTROS

  • Conexión permanente a Internet en casa (Speedy o Cablenet, no desde cabinas)
  • Inglés intermedio
  • Residencia en Lima
  • Computadora en perfecto estado (mínimo Pentium 4 o PowerMac G4)

El trabajo se desarrollará desde casa y los ingresos se fijarán de acuerdo a cada proyecto

Quieres ser parte de nuestros proyectos ?

Envianos tu CV a ---@b2wperu.com detallando tus capacidades y los proyectos que haz realizado

Se realizará una entrevista personal a los candidatos seleccionados en la cual se analizará los conocimientos técnicos asi como el trato personal, facilidad de palabra y carisma

No tengo idea si en otros países suceda lo mismo o no, pero este tipo de anuncios incoherentes, lamentablemente se ven casi a diario en Perú.

Suerte a las personas que tengan el valor de formar parte de ese tipo de empresas...

SQL Injection en Menéame

Nota: Al momento de publicar este post, el bug ya ha sido corregido en la última versión de Menéame, pero probablemente sus clones todavía son vulnerables.

Existe un problema de validación de datos en el código fuente de Menéame, que dadas las condiciones necesarias, hace posible que alguien pueda apoderarse de la cuenta de un usuario, ingreso de datos inconsistentes y la creación nuevas cuentas con nivel "god" -esto último creo que no tiene mucha implicancia.

Continue reading SQL Injection en Menéame

CSS Friendly ASP.NET 2.0 Control Adapters

Como ya había comentando en un post anterior, hacer que el motor de ASP.NET 1.x genere código (X)HTML relativamente correcto para todos los navegadores, es una tarea bastante trabajosa, porque los controles estándar no generan código muy limpio que digamos, esto empeora si usas controles de terceros -sin código fuente- que sólo funcionan bien en Internet Explorer, si bien es cierto que estos problemas se mitigan con algúnas técnicas (configurando algunas cosas en el web.config, escribiendo tus propios controles e inclusive usando módulos http para corregir el HTML generado), es un poco frustrante, cuando existen casos en los que no puedes hacer nada!

Felizmente, muchos de estos problemas han sido solucionados en ASP.NET 2, aunque todavía hay varios controles estándar y de terceros que generan código semánticamente incorrecto (Ejm Menu, FormView, DetailsView, etc), ahora existe la posibilidad de modificar la salida de estos controles sin necesidad de tener el código fuente.

El título del post hace referencia a un proyecto que muestra la forma de implementar los denominados Control Adapters, característica que comenté en el párrafo anterior. La beta 1 de este proyecto fue publicada en Abril de 2006, este mes se ha publicado la Beta 2 con bastantes mejoras y correcciones de fallas, además de traer ejemplos nuevos ejemplos para controles como GridView, Login, CreateUserWizard, etc.

Sin duda, ahora los desarrolladores que trabajen con asp.net, tienen más facilidad para producir páginas con XHTML correcto y válido... aunque también hay que reconocer, que a muchos no les importan este tipo de cosas!

AtackAPI – Ataques desde Javascript

Hace poco tiempo se comentaba sobre un detector de puertos escrito en javascript, esta vez, han publicado AtackAPI, que permite hacer ataques de una manera simple usando javascript.

AttackAPI provides simple and intuitive web programmable interface for composing attack vectors with JavaScript and other client (and server) related technologies. The current release supports several browser based attacking techniques and simple but powerful JavaScript console.

Habrá que ver qué tipo de cosas se harán con esta API.

Notificaciones en PostgreSQL

Desde la versión 8 de este magnífico ORDBMS, existe un mecanismo que permite enviar y recibir notificaciones de manera muy simple.

code:
test=# LISTEN foo;
LISTEN
test=# NOTIFY foo;
NOTIFY
Notificación asíncrona «foo» recibida del proceso de servidor con PID 8872.
test=#

Esta característica -como menciona la documentación- es especialmente útil cuando existen procesos que deben estar englobados por una transacción, ejm. enviar un mail luego de la ejecución satisfactoria de un conjunto de procesos críticos.

A continuación un pequeño ejemplo realizado con el proveedor Npgsql, que implementa la caracterísca mencionada.

csharp:
// Encargado de 'escuchar' las notificaciones
using System;
using Npgsql;
using System.Net.Mail;
using System.Net;

namespace listener
{
    class Program
    {
        static void Main(string[] args)
        {
            NpgsqlConnection connection =
                new NpgsqlConnection("uid=alex;pwd=***;server=localhost;encoding=unicode;SyncNotification=true;database=test;");

            connection.Notification += new NotificationEventHandler(connection_Notification);

            // Escuchar las notificaciones con el nombre 'proceso_largo'
            using (NpgsqlCommand command =new NpgsqlCommand("LISTEN proceso_largo;", connection))
            {
                connection.Open();
                command.ExecuteNonQuery();
            }

            Console.WriteLine("Esperando notificaciones...");
        }

        static void connection_Notification(object sender, NpgsqlNotificationEventArgs e)
        {
            Console.WriteLine("Notificación Recibida: {0}\t{1}", e.Condition, e.PID);

            // Hacer algo útil

            SmtpClient client =new SmtpClient("smtp.empresa.com");
            client.Credentials =new NetworkCredential("usuario@empresa.com", "password");

            client.Send(
                "aplicacion_x@empresa.com",
                "logs@empresa.com",
                "Notificación aplicación_x",
                "Notificación: " + e.Condition + "\tPID : " + e.PID // ...
                );
        }
    }
}

Un cliente cualquiera:

csharp:
using System;
using Npgsql;
using System.Threading;

namespace app
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Iniciar Aplicación - Presione una tecla...");
            Console.Read();

            using (NpgsqlConnection connection =
                new NpgsqlConnection("uid=alex;pwd=***;server=localhost;encoding=unicode;database=test;"))
            {
                NpgsqlTransaction transaction = null;

                try
                {
                    connection.Open();
                    transaction = connection.BeginTransaction();

                    NpgsqlCommand command =new NpgsqlCommand("select current_date;", connection, transaction);

                    Console.WriteLine("Recuperando la fecha");
                    command.ExecuteScalar(); // hacer algo

                    Console.WriteLine("Enviando notificación - Transacción NO 'comprometida'.");
                    command.CommandText = "NOTIFY proceso_largo;";
                    command.ExecuteNonQuery(); // No ejecuta la notificación

                    // Continúa la transacción
                    Thread.Sleep(2000);
                   
                    transaction.Commit();
                    Console.WriteLine("Transacción 'comprometida', recien se envía la notificación 'proceso_largo'");
                }
                catch (NpgsqlException)
                {
                    if (transaction != null)
                        transaction.Rollback();
                    throw;
                }
            }
            Console.Read();
        }
    }
}

Además de las cosas mencionadas sobre esta característica de PostgreSQL, también podría servir como un mecanismo para que el Cache tenga datos coherentes.

Nota: Disculpen si encuentran malas prácticas de programación :-).

Elementos utilizados

BlogDay 2006

No nos queríamos quedar atrás con este famoso blogday aunque sea un poco tarde, pero ahi les mando mis 5 blogs recien descubiertos:

  • Feed Usolab: Un blog sobre usabilidad, descubierto hace poco con post muy interesantes desde la computadora hasta la misma vida real.
  • Feed No puedo creer que lo hayan inventado: Interesante blog sobre cada cosita innovadora que últimamente inventan las personas de este loco mundo.
  • Feed Oscar y Bilgüeits: Una tira cómica muy entretenida, tomando especialmente casos peruanos.
  • Feed Los archivos desconocidos: Reseñas y enlaces sobre música Chill Out - Ambient - Electronic - New Age - World Music - Fussion y mas. Recomiendo Café Inkaterra.
  • Feed Tu Función: Blog sobre el mundo de la programación y el diseño casi parecido al nuestro con la diferencia de que ellos publican más seguido :P.

Agradecemos especialmente a Feed Melkorcete por habernos tomado en cuenta como uno de sus blogs favoritos.

Esperamos trabajar más para seguirles sirviendo como lo hemos estado haciendo estos casi 2 años de vida del blog y hasta el próximo blogDay.

Technorati Tag: BlogDay2006

ClickOnce y Firefox

La implementación ClickOnce permite publicar aplicaciones basadas en Windows en un servidor Web o en recurso compartido de archivos de red para simplificar la instalación. Visual Studio ofrece compatibilidad total para la publicación y actualización de aplicaciones implementadas con ClickOnce. La implementación ClickOnce está disponible para los proyectos creados con Visual Basic, Visual C# y Visual J#, pero no para Visual C++

Fuente: MSDN.

Leyendo uno de los mensajes de la lista de desarrollo de mono, me enteré que existe -desde hace un buen tiempo- una extensión para Firefox, que permite instalar las aplicaciones desplegadas con ClickOnce de una manera similar a lo que se hace con IE.

Sin duda una extensión muy útil para los zealots de .NET y Firefox. :-D

Mono 1.1.17

Acaba de liberarse la versión 1.1.17 de mono, una de las novedades más importantes de este release es que las versiones anteriores del compilador y runtime de Visual Basic .NET -hechas en C#- han sido eliminadas en favor de un nuevo runtime y compilador, ambos desarrollados íntegramente en Visual Basic .NET. Otra de las "novedades" es que mi primer y muy simple parche ha sido incluido en esta versión :-P.

Las descargas están disponibles en http://www.mono-project.com/Downloads