Lexico – Lenguaje orientado a objetos en Español


Supongo que las personas que estén relacionadas con el mundo de la programación pueden comprender lo siguiente:

tarea:
{
los objetos contador, número_de_personas, edad, mayor_edad son cantidades
los objetos nombre, persona_de_más_edad son caracteres
entre número_de_personas
copie 0 en contador, mayor_edad
variando contador desde 1 hasta número_de_personas haga:
     {
     entre nombre, edad
     es edad > mayor_edad ?
si:
{
copie edad en mayor_edad
copie nombre en persona_de_más_edad
}
     }
muestre "La persona de más edad es:   ", persona_de_más_edad
}

Pues bien, es parte de una propuesta orientada a crear un lenguaje de programacion en Español.

Lexico (Lenguaje experimental introductorio a la computación con objetos) es un apoyo didáctico para quienes se inician en la disciplina de la programación orientada a objetos, está aún en desarrollo y posee algunas características que buscan evitarle al novato la complejidad gramatical de los lenguajes de producción y más bien hacerles la vida fácil en su tarea prioritaria: la adquisición de habilidades en lógica de la programación y elaboración de algoritmos orientados a objetos (POO, OOP).

Este lenguaje compila para .Net Framework 1.0, 1.1 o 2.0, y la verdad es que viendo un poco las especificaciones del mismo, puedo decir que esta muy trabajado. Han tenido en cuenta todos los operadores de lenguaje, asi como todas las posibles variantes que propone .Net. My bueno :D

Pueden encontrar mas informacion –>

Saludos

Oracle Database 10g Express Edition


Oracle Database 10g Express Edition

Otra opción para las versiones express (free), esta vez es Oracle quien propone su Oracle Database 10g Express Edition. Una edición limitada a una utilización de sólo 1 GB de ram y 4 GB de datos.

 

Mas info –> http://www.oracle.com/technology/products/database/xe/index.html

 

Saludos

10 AddIns para Visual Studio 2003


Hace unos días, en MSDN Magazine, apareció un artículo muy interesante sobre los 10 AddIns que todos los desarrolladores deben poseer, si utilizan Visual Studio 2003. La lista completa de productos era la siguiente;

A algunos los conocía, pero realmente me quedé fascinado con el "documentador" GhostDoc y con el VSMouseBindings (por fin puedo aprovechar mim mouse al 100% !!!)

El primero, es un nuevo addin, que documenta codigo, pero partiendo de la estructura de los nombres que se deben documentar, realiza una ingenieria inversa y genera el código para documentacion correspondiente.

Por ejemplo, si poseemos la declaracion de la siguiente funcion:

public System.Data.DataSet GetCustomer(string CustomerId){}

Luego de aplicar el proceso de documentacion, se generan lo siguiente.

/// <summary>

/// Gets the customer.

/// </summary>

/// <param name="CustomerId">The customer id.</param>

/// <returns></returns>

public System.Data.DataSet GetCustomer(string CustomerId){} 

Para los constructores, el proceso es similar.

public Customers(){}

   

/// <summary>

/// Initializes a new instance of the <see cref="Customers"/> class.

/// </summary>

public Customers(){}  

Me ha dejado con :D , ya que es bastante útil y posee un pequeño editor de reglas, donde se puede personalizar aun mas las capacidades de generación de documentación.

Un detalle –> VB.NET.Enabled = False :S

Saludos.

PD: Me hizo acordar a aquellos días, hace bastante tiempo, cuando con Gustavo creamos el bCodeDevUtils para Visual Studio 2003, he aqui una pequeña demo. Lástima que ya con Visual Studio 2005, no tiene sentido mantener este AddIn ya que toda esa funcionalidad la posee internamente Visual Studio 2005.

Error NDoc.Core.DocumenterException


Mucho más para contar sobre NDoc, no tengo. Además supongo que todo el mundo lo conoce (y lo utiliza :d).
Sin embargo, me ha sucedido algo bastante raro mientras lo utilizaba. Estaba generando un proyecto com muchos assemblies dentro del mismo y me apareció el siguiente error:


An error occured while trying to build the documentation.
  Exception: NDoc.Core.DocumenterException
This document already has a DocumentElement node.
  Exception: System.InvalidOperationException
This document already has a DocumentElement node.
  Exception: NDoc.Core.DocumenterException at NDoc.Documenter.Msdn.MsdnDocumenter.Build(Project project) at NDoc.Gui.BuildWorker.ThreadProc()
  Exception: System.InvalidOperationException at System.Xml.XmlDocument.IsValidChildType(XmlNodeType type) at System.Xml.XmlDocument.AppendChildForLoad(XmlNode newChild, XmlDocument doc) at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc) at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) at System.Xml.XmlDocument.Load(XmlReader reader) at NDoc.Documenter.Msdn.MsdnDocumenter.Build(Project project)


No encontré mucha ayuda en internet, ni tampoco en los foros. Pero se me ocurrió probar, generar la documentacion con la version vieja de NDoc (v1.2), y … funcionaba !!!
Todavía no se muy bien que causó este error, pero por suerte la version 1.2 de NDoc, me saco de apuros :D

Saludos

Autenticacion de Usuarios con Active Directory


Hace un tiempo que estoy desarrollando un componente para la autenticacion con varios sistemas que manejan usuarios. No todos son LDAP compatibles, por lo que hay que "personalizarlos" un poco, antes de ponerlos en marcha. En el caso concreto de Active Directory, despues de probar varias funciones, la mejor que encontré fue la siguiente:

public bool IsAuthenticated(string domain, string username, string pwd)

{

 string domainAndUsername = domain + @"\" + username;

 DirectoryEntry entry = new DirectoryEntry( _path, domainAndUsername, pwd);

 

 try

 {

  // Bind to the native AdsObject to force authentication.

  Object obj = entry.NativeObject;

  DirectorySearcher search = new DirectorySearcher(entry);

  search.Filter = "(SAMAccountName=" + username + ")";

  search.PropertiesToLoad.Add("cn");

  SearchResult result = search.FindOne();

  if(null == result)

  {

   return false;

  }

  // Update the new path to the user in the directory

  _path = result.Path;

  _filterAttribute = (String)result.Properties["cn"][0];

 }

 catch (Exception ex)

 {

  throw new Exception("Error authenticating user. " + ex.Message);

 }

 return true;

}

Esta función trabaja con los objetos de la librería System.DirectoryServices. y para "reflejar" a un usuario dentro de los objetos de Active Directory, se utiliza el objeto DirectoryEntry. Este objeto encapsula la funcionalidad de un Nodo de Active Directory, y en este caso se presenta como un usuario. Para crear un objeto de este tipo se utiliza el Constructor que inicializa una nueva instancia de la clase DirectoryEntry con las propiedades Path, Username y Password.

path
Ruta de acceso de DirectoryEntry. La propiedad Path se inicializa en este valor.
username
Nombre de usuario que se va a utilizar para autenticar el cliente. La propiedad Username se inicializa en este valor.
password
Contraseña que se va a utilizar para autenticar el cliente. La propiedad Password se inicializa en este valor.

Y personalmente, me ha sido muy útil :D

Saludos

PD: La funcion original y un artículo completísimo sobre desarrollo de aplicaciones seguras se puede encontrar en el MSDN, aqui –>.

Función: IsEmailValid


Aqui les presento una función que siempre hace falta y (en mi caso) nunca tengo a mano.

Un función para validar direcciones de EMail.

Public Function IsEmailValid(ByVal sEmail As String) As Boolean

    Dim sEmailRegex As String = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"

    Dim oRegex As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(sEmailRegex)

    If Not (oRegex.IsMatch(sEmail)) Then

    Return False

    Else

    Return True

    End If

End Function

En su versión C# quedaría así;

public bool IsEmailValid(string sEmail)

{

 string sEmailRegex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";

 System.Text.RegularExpressions.Regex oRegex = new System.Text.RegularExpressions.Regex(sEmailRegex);

 if (!((oRegex.IsMatch(sEmail)))) {

   return false;

 } else {

   return true;

 }

}

Saludos y espero que les sea ta útil como a mi.

PD: La función original la obtuve de un CodeSnippet para VS2003 de desde CodeXChange. Les aconsejo este AddIn para Vs2003 ya que se encuentran cosas muy interesantes,

C# 4.0 – Yoda Style !!!


Antes de completar el anuncio de C# 3.0, ya tenemos posibles novedades de C# 4.0. En este caso, se plantea un cambio total con respecto a lo que conocemos como lenguaje de programación.

La propuesta de Matt, está referida a un nuevo lenguaje de programación al estilo YODA. Sí, han leido bien la idea es que se puedan escribir simples sentencias de programacion, hablando como el Master Yoda.

Por ejemplo, lo que antes codificábamos de la siguiente manera; 

 

 

public void Main (string[] args) {

   Console.WriteLine(“Hello World”);

}

 

 

Se convertiría en

 

 

(args of string many are they) Main is what they seek yet return they do not.

 

Brace you must

    Written it is, the Console. “Hello World”

 

 

Interesante no ?, están invitados a opinar de este tema en el blog de Matt.

Saludos

KPL – Kids Programming Language


Hay que educarlos desde chicos …

Esa es la nueva premisa de Microsoft, es por esto que estan impulsando la iniciativa de KPL (Kids Programming Language). Un lenguaje de programación basado en Basic que esta pensado, pura y exclusivamente para los chicos. La idea es que cuando aprenden a leer y escribir, de la misma manera, jugando aprendar a programar.

Ya hay un IDE de desarrollo gratuito, que se puede bajar desde aquí. Por ahora esta en Inglés y Polaco, pero estan pensadas las versiones en Español, Sueco, Hebreo, etc.

Obviamente la gente de Coding4Fun es la encargada de esto :D

Saludos

Presentate en la PDC 2005


Hace unos días en el blog de Michael Swanson (un groso), ofreció una idea muy interesante. Se trata de ofrecer, entre sesión y sesión de la PDC, pequeñas presentaciones de productos o proyectos en las salas generales donde la gente espera para entrar. Es una forma muy simple de presentar algun producto a las miles de personas que asisten a la PDC.
El formato es muy simple;

  • deben ser con formato WMV
  • los videos no deben durar mas de 5 minutos
  • se puede utilizar el estilo "guerrilla-style" que propone Channel9
  • se puede utilizar CAMTASIA Studio o HyperCam
  • cada uno debe hostear sus archivos WMV
  • "la casa se reserva el derecho de admisión", ellos decidiran con su criterio que videos pondran
  • probablemente, se subiran los videos después de la PDC, a Channel9 para que sean accesibles para todos

Una muy buena oportunidad para mostrar ideas interesantes.

Saludos.

Generacion de Flash


Seguimos con la Programación. Ahora les muestro un componente muy bueno para generar animaciones Flash on the fly. Es de ByteScout y lo pueden ver mejor aqui.

Entre las caracteristicas interesantes de este producto podemos mencionar:

  • Capacidad de crear varias formas gráficas (shapes, buttons, text, text edits, etc.)
  • Capacidad de agregar sonido, MP3 o Wav o Video
  • Capacidad de incorporar ActionScript asociados a los eventos de la animacion
  • Soporte de Transformaciones

La verdad que es muy útil y el costo es mas que aceptable. 100%recomendado.

Aqui les dejo una parte de código para que vean lo simple que es de usar


Dim Movie As SWFScout.FlashMovie

Movie = New SWFScout.FlashMovie

Movie.InitLibrary("demo", "demo")

Movie.BeginMovie(0, 0, 640, 480, 1, 12, 6)

Dim Font As Integer

Font = Movie.AddFont("Arial", 18, True, False, False, False, 0) ‘ add font

‘ create and place text

Dim Text As Integer

Text = Movie.AddText("Hello, World!", 0, 0, 0, 255, Font, 0, 100, 250, 160)

Movie.PlaceText(Text, Movie.CurrentMaxDepth) ‘ place text into current depth

Movie.PLACE_FadeOut(0.5) ‘ fade out text

Dim Shape As Integer

Shape = Movie.AddShape ‘ add new shape

Movie.SHAPE_Rectangle(0, 140, 150, 285) ‘ draw rectangle

Movie.SHAPE_SetSolidColor(50, 255, 50, True, 255) ‘ set solid fill for shape

 

Movie.PlaceShape(Shape, Movie.CurrentMaxDepth) ‘ place shape into current depth

Movie.ShowFrame(10) ‘ show 10 frames

Movie.EndMovie() ‘ end movie generation

Movie.SaveToFile("c:\Shapes.swf") ‘ save generated SWF into file


Saludos.

PD: Hace un año realmente necesitaba este componente :D

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.230 seguidores