martes, enero 30, 2007

AutoCompleteExtender en VB y usando Access

He estado trabajando con la ultima version liberada de ASP.Net Ajax 1.0 (ajax1), y despues de una noche de desvelo y un enlace de menos de 56kbps, encontré una manera de migrar el ejemplo que trae el  ASP.Net Ajax Control Toolkit (ANACT), en particicular el que se refiere al autocompleteextender.

Algo importante, es eliminar todas las versiones que se hayan instalado con anterioridad a la version liberada, no haber hecho esto ultimo desde un inicio me ocasiono un par de jalones de cabello.

Lo primero es el servicio web desde donde se obtendra la informacion para el control:

------------------------------------------------------------------------------

<%@ WebService Language="VB" Class="WebService" %>

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Script.Services

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ScriptService()> _
Public Class WebService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function obtenNombres( _
ByVal prefixText As String, _
ByVal count As Integer) _
As String()
If count = 0 Then
count = 10
End If

Dim resultado() As String
Dim listaNombres As String = String.Empty

Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\Webs\MIWEB\App_Data\Access.mdb"
Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection(connectionString)

Dim queryString As String = "SELECT DISTINCT TOP " & count & " ([Pacientes].Nombre) & ' ' & ([Pacientes].ApellidoPaterno) AS NombreCompleto " & _
"FROM(Pacientes) WHERE(((Pacientes.Nombre) Like '" & prefixText & "%'))"
Dim dbCommand As System.Data.IDbCommand = New System.Data.OleDb.OleDbCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection

dbConnection.Open()
Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

While dataReader.Read()
listaNombres += dataReader("NombreCompleto") & vbLf
End While

resultado = listaNombres.Split(vbLf)
Return resultado
End Function

End Class

------------------------------------------------------------------------

El webservice busca en el archivo de acceso los datos correspondientes en la tabla de usuarios (pacientes para este caso), y da como resultado solo los que se parecen al valor de prefixText.

Algo que se tiene que modificar de un webservice normal es agregar un atributo para que pueda ser usado por los componente de Ajax "<ScriptService()> ", que en el ejemplo esta con negritas. Antes de colocar el atributo de debe llamar al namespace "Imports System.Web.Script.Services".

Estas dos lineas anteriores hacen la diferencia para que el control funcione correctamente. A continuacion la webform:

--------------------------------------------------------------------------

<%@ Page Language="VB" %>
<%@ Register
Assembly="AjaxControlToolkit"
Namespace="AjaxControlToolkit"
TagPrefix="ajaxToolkit" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div class="demoarea">
<div class="demoheading">
<h2>
<span style="color: #990000; font-family: Calibri">Demostracion de AutoComplete</span></h2>
<p/>
<span style="font-family: Calibri">Escribe algunos caracteres en este campo de texto.
El servicio web respondera con algunos registros de la base de datos.
<br />
</span>
<br />
<asp:TextBox runat="server" ID="myTextBox" Width="300" autocomplete="off" />
<ajaxToolkit:AutoCompleteExtender
runat="server"
ID="autoComplete1"
TargetControlID="myTextBox"
ServicePath="webservice.asmx"
ServiceMethod="obtenNombres"
MinimumPrefixLength="2"
CompletionInterval="1000"
EnableCaching="true"
CompletionSetCount="12" />

<script type="text/javascript">
// Work around browser behavior of "auto-submitting" simple forms
var frm = document.getElementById("aspnetForm");
if (frm) {
frm.onsubmit = function() { return false; };
}
</script>
</div>
</div>
</form>
</body>
</html>

-----------------------------------------------------------------------

Notese que se agregar el dll del ANACT como un registro de assembly, para poder usar la extension AutoCompleteExtender.

Listo!

martes, enero 23, 2007

ASP.Net Ajax liberado

Por fin despues de varios meses de desarrollo y en particular de muchas versiones, el paquete de Asp.Net Ajax versión 1.0 ha sido liberado.

El problema de tanta version CTP que hubo es que el proceso de publicar una aplicacion con ajax se fue complicando por la documentacion que tambien cambio en repetidas ocasiones.

Espero poder terminar ahora si algunos ejemplos que he estado desarrollando.

Listo!

lunes, enero 22, 2007

WordPress 2.1 Liberado

Hace unas horas liberaron la version 2.1 de WordPress. La nueva versión se puede obtener de www.wordpress.org. Debido a que ultimamente lo he usado para la creacion de nuevos sitios web para los clientes, me di a la tarea de actualizar la versión que cargo en la computadora.

Una opcion que me gusto es el poder seleccionar una pagina en particular de nuestra lista de agregadas, como pagina frontal del sitio. Otra novedad es el que usando el argumento de <!--- more --> se corta la pagina en el momento que uno lo requiera.

No me gusto como quedo el editor, era mas sencillo de usar, es asi que hare la modificacion correspondiente.

Se comenta en la pagina de wordpress que existen algo asi como 50 bugs eliminados, y que el acceso a la informacion es más rapido.

Estoy trabajando en una version instalada de forma local, asi que me parecio que la velocidad es la misma, habria que ver con una version instalada en algun servidor remoto.

Listo!

jueves, enero 18, 2007

Plugins de Wordpress practicos

He estado trabajando sobre un sitio para adultos en las ultimas semanas, y la verdad es que he encontrado que los siguiente plugins deben estar en toda instalacion de Wordpress que se haga:

Live Shout Box.- Es un tagboard o especie de chat, en verdad le pone dinamismo al sitio y se vuelve muy practico. Estoy basandome en este desarrollo para poder integrar un plugin para oscommerce.

FGallery.- Aun cuando el servidor en el que lo instale no cuenta con la libreria gd para graficos en php y por consiguiente tengo que estar subiendo las imagenes previas de forma manual, la verdad es que funciona de manera maravillosa.

Social Bookmarking.- Este plugin pone en cada uno de las paginas que se tienen en wordpress de manera muy sencilla los link para los diferentes servicios de bookmarking. Perfectamente configurables y listo para usar. Lo unico que necesita es agregar algunos sitios en español, me pondre a trabajar... ;)

Listo!

miércoles, enero 17, 2007

Windows Vista en Mexico

La ciudad de mexico ha sido seleccionada uno de los puntos que estaran en la presentacion mundial de Windows Vista para este 30 de Enero.

El dia del lanzamiento se realizara con transmisiones de diferentes paises, los cuales seran grabados previamente en cada uno de los paises.

Microsoft esta realizando invitaciones a traves de correo electronico para participar en esta celebracion:

"Sábado 27 de enero de 2007
Plaza de la Constitución - Zócalo Capitalino
(junto al asta bandera)
México, D.F.
3:30 p.m. a 6:30 p.m.
(Al terminar la formación de los logos, acompáñanos
a celebrar con un espectáculo de luz y sonido en el Zócalo)"

Listo!

Directorios / Portales de sitios web en Veracruz

A continuacion una lista de portales que he encontrado que estan directamente relacionados y que pueden ayudar con la busqueda de empresas y/o servicios de Veracruz.

www.veracruz.com.mx: creo el mas visitado, tiene mucha informacion turistica.

www.porveracruz.com: es un portal muy sencillo, con mala navegacion, pero que empieza a tener una buena cantidad de enlaces de informacion.

www.antrito.com: un portal con informacion referente a antros de veracruz, pero que tiene unos foros de las escuelas en veracruz con mucho movimiento.

www.veracruzturismo.com: con informacion no solo de restaurantes y sitios que visitar, sino un poco de informacion para realizar negocios en veracruz.

portal.veracruz.gob.mx: es evidentemente del gobierno del estado, pero esta direccion en particular cuenta con algo de informacion de turismo.

Muchos de los sitios que encontre en realidad son empresas que presentan tours para turistas dentro del estado.

Es cierto que existen los tradicionales directorios de yahoo, google y msn acerca de veracruz. Pero la idea es poner aquellos directorios realmente jarochos.

Listo!

lunes, enero 15, 2007

Controles .Net gratuitos y sencillos.

Me tope con la siguiente direccion:

http://www.dotnetrix.pwp.blueyonder.co.uk/controls.html

Y tiene varios controles de pestañas que son muy faciles de usar.

Si eres programador, descargalos...

Estos tipos de controles, suelen volverse comerciales... :(

Listo!

Como hacer un blog exitoso.

Hace unas semanas encontre un analisis de uno de los fundadores de Blogger.com, el cual menciona que los blogs mas visitados deben de cubrir ciertas caracteristicas.

Y una de las mas dificiles honestamente es publicar contenido fresco, actualmente gracias a Google Reader esto colocando algunos feeds de blogers que publican informacion sobre asp.net y wpf, y me doy cuenta que no publican mas alla de un post cada 3 o 4 dias.

Este es el problema del contenido sobre desarrollo, muchas veces no da tiempo de documentar codigo. Si cuando se tiene que hacer, es complicado, luego tener el tiempo de explicarlo. ¡Caray! Dificil...

2 veces al dia es la cantidad magica para tener contenido, y personas suscritas a un feed. ¿2 veces al dia?. Uf... lo intentare!.

Listo!

Apple iPhone

Steve Jobs dice que el iPhone es una revolucion, y puede estar en lo cierto. No importa, que el Apple iPhone no llegue a ser el telefono mas vendido de todos los tiempo, lo cierto es que la interfaz, suena muy interesante, la cual consta de solo un boton. WOW!.

Tal vez el próximo paso sea una computadora de Un Solo boton. Y es ahi donde veo que el producto es revolucionario, asi como ha sucedido con los reproductores MP3, era de esperarse que llegara a los telefonos, y no creo que sea una batalla facil, porque existe mucha competencia en este mercado, Nokia, SonyEriccson, LG, Samsung, etc. Algunos de los cuales ya utilizan WIndows Mobile.

¿Se impondra Apple iPhone con su OSX?. No creo, pero la revolucion empieza, porque es indudable que muchos telefonos van a empezar a replicar la sencilla interface que tiene iPhone.

A los desarrolladores ¿Que nos queda por hacer?, creo que mucho. Aplicaciones realmente mobiles, y sobretodo con un mercado inmenso. ¿Quien no ha ido a cualquier pueblito de cualquier pais de latinoamerica y encontrado que alguien usa un telefono celular?, todo el mundo.

Se me ocurren, muchos escenarios en los cuales se puede aprovechar esta tecnologia, en especial la facilidad que pueda venir de utilizar esa interface, en muchos ambitos.

Un Boton!.... Listo!

lunes, enero 08, 2007

Servidor web Cassini con .Net 2.0 y en español

A continuacion algunas modificaciones que hice al servidor web cassini, para una presentación en dias pasados.

Sigo en el desarrollo del sistema de consultorio medico, y hace algunos dias me pidio un doctor que le mostrará el avance. Le gusto y me comento si podria instalarlo en su PC cuando ya quedara listo, pero cuando prendio su maquina me di cuenta que tenia instalado Windows XP Home, y desgraciadamente no cuenta con IIS, y tampoco se puede instalar de manera sencilla (despues de muchos hackeos y respaldos con regedit).

Visual Studio 2005 trae una opcion para empaquetar Visual Web Server (Cassini) junto con la aplicacion web. Pero no asi, la version Exp

A traves de Cassini, se puede operar un sitio web en una maquina de XP Home, el problema es que cuando se descarga de asp.net, el archivo compilado es con la version .Net 1.1.

Es asi que me di a la tarea de renovar el servidor con el framework 2.0 y en español.

Primero los requisitos:

  1. Tener instalado Microsoft Visual C# Express Edition, descargable desde la pagina de Microsoft MSDN (http://msdn.microsoft.com).
  2. Obtener una copia de Cassini desde el sitio www.asp.net/Projects/Cassini/Download/

Lo siguiente es descomprimir el archivo cassini.exe. El cual crea una carpeta en c:\cassini

A continuación abrimos Microsoft Visual C# Express Edition (MVC#). Creamos una libreria de clases (Dll).

Importamos a la carpeta properties los siguientes archivos de c:\cassini...

AssemblyInfo.cs
ByteParser.cs
ByteString.cs
Connection.cs
Host.cs
Messages.cs
Request.cs
Server.cs

y el archivo cassini.snk al directorio raiz. Y ademas agregar las referencias de System.Drawing y System.Web.

Debe quedar algo parecido a lo anterior. Guardamos el proyecto en nuestros documentos, y finalmente creamos la solucion (F6), tenemos nuestro archivo cassini.dll en la carpeta \Mis documentos\Visual Studio 2005\Projects\Cassini\Cassini\bin\Release.

Ahora vamos a crear el ejecutable. Cerramos el proyecto cassini y abrimos uno nuevo en esta ocasion tiene que ser una "Aplicacion Windows":

Importamos el archivo CassiniWebServerMain.cs al proyecto e importamos la libreria Cassini.dll, asi como System.Drawing.

Abrimos el archivo y modificamos las siguientes lienas de codigo:

  • appDirLabel.Text = "&Directorio de Aplicacion:"
  • portLabel.Text = "&Puerto del servidor"
  • vrootLabel.Text = "Directorio &Raiz Virtual:"
    browseLabel.Text = "Iniciar la aplicacion web:"
  • startButton.Text = "Iniciar"
  • stopButton.Text = "Detener"
  • ShowError("Directorio de aplicacion invalido");
  • ShowError("Puerto invalido");
  • ShowError("Directorio raiz virtual invalido");
    "Cassini no pudo iniciar en el puerto " + portNumber + ".\r\n" +
    "Posiblemente hay un confilcto con otro servidor web en el mismo puerto.");

El recurso del icono me estuvo dando problemas, como no me interesa el icono, simplemente comente la linea:

  • //Icon = new Icon(Assembly.GetExecutingAssembly().GetManifestResourceStream("CassiniWebServerIcon"));

Creamos el proyecto (F6) y se crea el ejecutable:CassiniWebServer.exe

Podemos copiar este archivo en nuestra aplicacion web:

c:\inetpub\web\expediamedicus

y creamos un acceso con la siguiente modificacion:

"C:\Inetpub\Webs\expediamedicus\CassiniWebServer.exe" C:\Inetpub\Webs\expediamedicus 80

De esta manera podemos arrancar la aplicacion desde la misma carpeta:

Se pueden realizar mas modificaciones de tal manera que solo quede una ventana pequeña con la aplicacion web correspondiente, por ejemplo:

Listo!

¡No compres toner, compra la impresora nueva!

Se compró en la empresa hace unos meses una impresora a color HP 2600n. Hemos estado trabajando muy a gusto con este equipo, la instalación fue la más sencilla y no ha dado problemas, esta impresora venia con sus 4 cartuchos de toner 3 de color y 1 negro.

Despues de varios meses de imprimir de manera responsable, sin gastar el toner, y tratando de equilibrar el uso de los colores, era evidente que teniamos que terminar por comprar nuevamente cartuchos.

Pase la semana pasada a un officedepot, busque la sección de consumibles y sin pensarlo agarre una caja de cada color, compre los cartuchos originales para no tener problemas.

Y vaya sorpresa que me lleve a la hora de pagar:

  • Toner Cyan              $1,199.00
  • Toner Amarillo         $1,199.00
  • Toner Magenta         $1,199.00
  • Toner Negro             $1,299.00
  • TOTAL                     $4,899.00

(Datos de officedepot.com.mx)

Al momento de subirme al carro reaccioné, recordé el precio original de la impresora y me di cuenta que habia hecho una tonteria.

Resulta que el costo de los consumibles es mas alto que la impresora nueva incluido los toners.

  • HP 2600n Laser Color NUEVA  $4,799.00

Estoy realmente sorprendido, para la proxima ocasion, compraré la impresora nueva. Seguramente sera mas rápida y mas facil de usar.

Listo!

miércoles, enero 03, 2007

Ganador: Ubuntu 6.10

Llevo un par de meses tratando de instalar una versión de linux en una PC armada. Esta PC tenia una versión de Windows XP Pirata, y a raiz de que no se le podia instalar algunas nuevas versiones de software y las actualizaciones del service pack 2. Decidí salir de la piratería y poner una versión de linux que funcionará.

Lo primero que intenté fue instalar Ubuntu 5.1, pero tuve muchos problemas para la parte gráfica, ni siquiera terminaba el proceso de instalación.

La segunda opcion fue la nueva version de openSuse, la cual esta apoyada por Novell y menciona una serie de funcionalidades como la integracion de Beagle. Por otra parte he visto que Miguel De Icaza usa esta versión de Linux, asi que intente instalarlo, aun cuando si termino de instalarse, cuando entraba al login, se colgaba y no pasaba de ahi.

La tercera opción fue instalar Fedora, con el mismo resultado que openSuse, la verdad para este momento ya me habia cansado de estar bajando los isos, quemarlos en cds, llevarlos a donde estaba la computadora, estar esperando que se instalaran, etc., etc.

Deje que pasara diciembre y me olvide del asunto, en una laptop, tenía instalado Ubuntu 5.10 y el dia 30 me puse a actualizar algunos paquetes en especial lo que era mysql y php para realizar una presentacion en unos dias de OSCommerce.

Termine actualizando todo el sistema operativo a 6.10, y con el disco ya en mi manos me dirigí a la oficina donde se encontraba la PC.

Y por fin un ganador, la instalación fue lenta, lenta, lenta, pero segura. La PC por fin tiene un sistema operativo. Ahora lo que resta es ponerle FacturaLux.

Me ha gustado mucho la facilidad de la instalación y por supuesto la sencillez en que se agrega y se quitan programas open source, desde el menu. Definitavamente un ganador esta versión.

Listo!