Feeds:
Entradas
Comentarios

Imagino que ya muchos conocerán el mayor problema que surge al desarrollar macros dentro de Excel.

Contamos con VBA, un lenguaje que nos permite crear scripts para automatizar algunos problemas cotidianos dentro de la administración de la información del documento, pero, para debido a motivos que desconozco, es muy complicado encontrar buen material de consulta.

Si bien, Microsoft proporciona un pequeño archivo de ayuda, este es muy limitado al momento de buscar información que nos permita el desarrollo de nuestro script

Leyendo el blog de Jorge Serrano, MVP de Microsoft, me he enterado que Microsoft ha comenzado a distribuir un excelente ebook gratuito con una gran cantidad de material de consulta sobre este lenguaje

Descargar el libro de VBA

Ampliamente recomendable

Y  volvemos a las andadas, de nuevo con algunos retrasos para postear . . . .

En una de las dependencias foráneas de la empresa, se tiene en funcionamiento un servidor equipado con un flamante Windows 2000 server; no se ha cambiado dado que el volumen de información que maneja es relativamente pequeño y hasta ahora, ha mantenido un rendimiento bastante aceptable.

Cuando llegue, me vi en la necesidad de conectarme a una unidad de red desde una maquina equipada con Windows Vista, ahí fue donde encontré algo raro; me indicaba un error en el password del usuario del recurso de red.

Al principio creí que el error bien podría ser de mi parte al momento de escribirlo, pero luego de probarlo en otra computadora (con Windows XP) encontré que el error se producía solo desde mi computadora. . .

Investigando un poco, encontré un foro donde  un usuario del mismo ( Juan Manuel Tella Lop) explicaba que este error se producía debido al tipo de autenticación que Vista exige al momento de utilizar recursos de red, este tipo de autenticación es conocido como Ntlmv2, que solo esta presente en Windows 2003 server y posteriores, pero no es posible utilizar desde Windows 2000.

Pero hay Solución, esta es gracias a otro usuario del foro (en un thread diferente), su solución tiene varios pasos, pero en mi caso, solo fueron necesarios los últimos 3, los cuales coloco a continuación:

Paso 1

Creamos un archivo de registro (con extensión “.reg”) y como contenido colocaremos lo siguiente

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"auditbaseobjects"=dword:00000000
"auditbasedirectories"=dword:00000000
"crashonauditfail"=dword:00000000
"fullprivilegeauditing"=hex:00
"Bounds"=hex:00,30,00,00,00,20,00,00
"LimitBlankPasswordUse"=dword:00000001
"LmCompatibilityLevel"=dword:00000001
"NoLmHash"=dword:00000001
"SecureBoot"=dword:00000001
"ProductType"=dword:00000006
"disabledomaincreds"=dword:00000001
"everyoneincludesanonymous"=dword:00000000
"forceguest"=dword:00000000
"restrictanonymous"=dword:00000000
"restrictanonymoussam"=dword:00000001

Una vez creado el archivo, debemos agregar esta información al registro simplemente haciendo doble clic en él

Paso 2

Es necesario crear un archivo llamado LMHosts (sin extensión), su ubicación debe ser dentro de “C:\windows\system32\drivers\etc\”

El contenido del archivo debe ser

192.168.1.1    Servidor  #DOM:Dominio #PRE
192.168.1.1    "Servidor x1b"  #PRE

Paso 3

Reiniciar Windows Vista

En mi experiencia, la conexión a la unidad de red fue exitosa luego de realizar este proceso, sin embargo, no funciono tan eficientemente como lo haría una conexión hecha a un Windows 2003; tuve algunas desconexiones mientras utilizaba la unidad, lo curioso es que, aunque desde el explorador de Windows me indicaba que las unidades estaban desconectadas, los otros procesos que la utilizaban no tenían problemas y seguían funcionando

Algo que noté, pero que no probé en su momento, fue que en el archivo “LmHosts” esta una clave llamada “dominio” (remarcada) que imagino que se debe sustituir por el nombre de nuestro dominio, en mi caso no lo cambie, lo que pudo haber causado los errores que se me presentaron; en cuanto tenga la oportunidad de probarlo lo haré

Mis agradecimientos a Pablo Colunga, autor del Post original

No se les olvide, siempre es bueno darse una vuelta a los foros de technet :P

     Ha pasado casi una semana desde mi último post, esto va mejorando :P

     Muchos de nosotros conocemos las ventajas de utilizar threads durante el desarrollo de nuestra aplicación para mejorar su desempeño; con todo y que su programación es un poco más lenta debido a la construcción de métodos delegados (tema que veremos en breve), pero este inconveniente es ampliamente superado por las ventajas que nos proporcionan

     Hace poco me encontré con un pequeño detalle, Utilizaba un Thread para ejecutar en segundo plano un proceso mediante el cual realizaba ciertas operaciones sobre la base de datos, mientras el usuario realizaba otras con mi aplicación; el problema surgía en que al terminar la ejecución del Thread necesitaba utilizas los datos que obtenía como resultado, cosa que originalmente hacía mediante el llamado a una función, pero me quede con la duda, ¿ existiría algún evento que me permitiera identificar el fin de la ejecución de un proceso?

     Luego de un breve tiempo de investigación pude darme cuenta  que este evento no existe nativamente, si estoy equivocado por favor avísenme, así que, ¿Por qué no darnos a la tarea de crear el nuestro?

    Primero, dentro de clase, declaramos un tipo de dato Evento:

Private event FinThread ()

   Y creamos un método que será lanzado por nuestro evento, en este caso:

Private sub Terminado()

       Msgbox (“Fin de la ejecución del Thread”)

End Sub

    Lo sé, es un método terriblemente básico, pero útil para el propósito del post, nosotros podemos incluir en él el código necesario para que sea útil a nuestra aplicación.

     Ahora, lo que necesitamos es asociar nuestra función con el tipo de dato evento que hemos declarado, para eso nos servimos de la función AddHandler, cuyo propósito es precisamente

private sub Lanzar_Thread()

      Dim Thr as thread()

      Addhandler FinThread, AddressOf Terminado

     Thr = new Thread(AddressOf EjecutarThread)

     Thr.start()

End sub

     Los Parámetros que recibe AddHAndler son la variable de tipo evento al que asociará nuestro método, y como segundo parámetro, la  dirección en memoria de éste, algo similar a la función de un puntero, si han estudiado el lenguaje C entenderán mejor esta parte :P

    Para Terminar, debemos hacer que el evento que hemos creado sea generado al termino de la ejecución del Thread, para eso nos valemos de la instrucción RaiseEvent

Public Sub EjecutarThread()

       ‘//////Código del Thread///////////7

       RaiseEvent FinThread()

End Sub

     Si se fijan, no llamamos el método “Terminado”, sino al tipo de dato evento que hemos asociado a su dirección; también, como algunos pueden imaginarlo, el RaiseEvent no necesariamente tiene que ir al final, sino que puede colocarse en el momento de la ejecución que lo consideren más adecuado

Nos vemos, ya saben, cualquier cosa que no haya quedado del todo clara por favor escríbanla  en los comentarios

Saludos a todos

      Sin duda, la continuidad existencial de este mundo debe estar agotándose; he vuelto a publicar un post en mi blog :P

      Pero, pasemos a la parte interesante del post ;)

      Uno de los elementos más polémicos dentro de Windows Vista ha sido el control de cuentas de usuario (UAC), por lo pronto no discutiré sobre sus beneficios, si no de una de las restricciones que podemos encontrarnos como desarrolladores.

      Primero que nada, pongamos el escenario; Hemos desarrollado una aplicación que almacena en una DB, supongamos Access, algunos datos que captura el cliente para generar un promedio (si es una aplicación muy cutre, pero nos servirá para el ejemplo)

      Probamos nuestro sistema en nuestra maquina desde el IDE de desarrollo y no arroja problemas, lo instalamos en otra maquina (XP) y funciona a la perfección, así que contentos vamos con nuestro cliente, que nos pide la probemos en su computadora con Windows vista, instalamos nuestra aplicación y aunque al principio parece funcionar muy bien, al momento de que nuestro cliente desea almacenar un elemento en la DB, aparece este “encantador” error:

Uac0

    Ahí es donde comenzará nuestro conflicto de ideas, en un principio parecerá que cometimos un error en alguna sentencia SQL o en algún de los parámetros de conexión, idea que debería ser descartada de inmediato debido a que se presentaría durante la prueba hecha en nuestro computador.

       Es así como acude a nuestra mente la sospecha de que el famoso UAC ha entrado en escena, así que para confirmarlo ejecutamos nuestra aplicación brindándole privilegios de administrador; al ver que ésta funciona sin problema alguno confirmamos nuestra sospecha.

      Así que, la opción sencilla sería simplemente quitar el UAC o modificar la configuración de inicio de nuestra aplicación, otorgándole permisos especiales, pero esto no es lo correcto, dado que implicaría un trabajo mayor si nuestro cliente quisiera instalar esta aplicación en varias computadoras.

      Busque en varios sitios de internet por una respuesta, pero en todos encontraba respuestas diferentes que no me funcionaron, o que tal vez no supe implementar :P

      Al final, la solución, en mi caso, la encontré jugando con las opciones de configuración del proyecto

UAC3       Específicamente, en la sección de “seguridad”  (a la que accedemos mediante la opción ubicada en el panel del lado izquierdo) ahí podemos apreciar las configuraciones de ClickOnce donde destaca un área que llamará nuestra atención:

Uac5       Por defecto, al habilitar la configuración de seguridad, nuestra aplicación se convertirá en una de “plena confianza”, permitiendo generar los valores necesarios para que el UAC determine que es una aplicación que tendrá acceso a los recursos del sistema.

        Claro es posible configurar los permisos con los que gozará la aplicación, solo seleccionando la opción de “Aplicación de confianza parcial”, lo que permitirá que se habilite la sección donde podremos restringir los permisos:

Uac6         No he explorado aún todas las características que esta opción ofrece. . . ese será tema de uno de los siguientes post

Nos vemos, ojalá les ayude tanto como a mi

Año Nuevo. . . Vida Nueva

Antes que nada, y con bastante atraso, pero de todo corazón, ¡¡FELIZ AÑO!!

El blog ha estado abandonado por demasiado tiempo y, aunque ya había armado toda una lista de excusas, he decidido dejar atrás todas las actividades que me acostumbre a realizar y solo me hacían perder el poco tiempo libre que tenía :P

Esta vez estaré posteando alrededor de 3 veces por semana, retomando todas las cosas que deje pendientes, a la vez que me encargaré de seguir con las actividades que ya tenía planeado realizar

Así pues, espero que disfruten este espacio y me sigan honrando con su visita

Últimamente he estado trabajando en .Net con una base de datos alojada en un servidor con Mysql, para no hacer uso de un Odbc he descargado el .Net Conector desde la página oficial de Mysql.

Tuve algunos problemas con las versión 1 del conector, pero a partir de la 5 (no se que pasaron con las versiones intermedias) me ha complacido mucho su desempeño. . .

Y ¿a donde voy con toda esta introducción?, bueno, el conector necesita realizar una pequeña “traducción” de los tipos de datos de mysql a su equivalente en .Net, principalmente en los de tipo Date, para mi gusto, haciéndolo muy bien

Ahora bien, hace poco decidí modificar la DB a la que accede mi programa agregando un trigger (Tema del que hablaré más adelante), que al parecer funcionaba a la perfección al revisar, mediante una consulta, los datos que debía actualizar.

Sin embargo, desde .Net recibía el error que aparece en el titulo de la entrada:

Unnabled to convert mysql date/time into .Net DateTime

Así que mi primera sospecha fque el conector había fallado, sin embargo, no era ese el problema. . . .

Este tipo de errores se da principalmente porque se captura o se pretende capturar un valor null dentro de un campo de tipo Date o datetime, produciendo que sea almacenado de la forma ‘0000-00-00′, valor que es imposible representar en .Net desde Mysql

En mi caso, el error era producido porque capturé mal el tipo de dato de una variable en el trigger, :P

 

Nos vemos

Nueva reunión

      El día de mañana, 7 de Octubre, tenemos una nueva reunión en el Tecnológico  de Monterrey, en esta ocasión, el tema será sobre la arquitectura del .Net Framework.

LogoDesafortunadamente, en esta ocasión tuvimos otro tipo de problemas que, por desgracia, no estaban bajo nuestro control. . . .

Esto implica que en esta ocasión no tenemos un link oficial de registro en el sitio de TechNet; pero aún tenemos la entrada libre, por si alguno de ustedes desea acudir

Esta ves, el tema de la presentación es de un nivel más técnico, la intención es la de detallar la estructura de la arquitectura del Framework de .Net, así como la manera en que interactúa sus componentes, entre otras cosas.

Así que, los datos para poder asistir son:

Arquitectura de la plataforma .Net

Instituto Tecnológico de Monterrey Campus Morelia

Camino a Jesús del monte S/N

7 de Octubre de 2008 a las 18:00

auditorio de preparatoria

 

Nos vemos

Volvemos a las andadas. . .

Luego de mucho tiempo, donde he pasado de todo, por fin estoy de nuevo dispuesto a continuar con el blog y tratar de postear de una manera más regular.

El pasado día 23 de Septiembre por fin, pudimos realizar la primera reunión de nuestra comunidad, he aquí algunas fotos:

DSC00631

Estos son algunos de los asistentes, esperábamos más audiencia, pero para ser la primera reunión, en un horario no tan accesible y con un tema bastante nuevo, no estuvo tan mal

La mayoría eran miembros del Itesm, algunos incluso del área de Preparatoria, pero interesados en el desarrollo de aplicaciones; un público muy participativo.

 

DSC00632

Este es Ernesto, el conferencista designado por la comunidad, ha hecho un trabajo muy bueno, considerando que el material para la ponencia fue bastante escaso

Claro, al ser la primera tuvimos más de un problema para realizar la presentación, por ejemplo, se me olvidó llevar el cargador de la laptop :P , afortunadamente uno de los asistentes nos prestó el suyo; también llegamos tarde, la Pequeña y linda K nos hizo esperar un poco, afortunadamente no demasiado.

En fin, a los asistentes les agradó . . . . La próxima se realizará el próximo día 7 de Octubre, el tema será de un nivel bastante más técnico, la arquitectura de la plataforma .Net, abierta al público en general

Evento Windows Live

Saludos

    Pues, continuando con el mismo tema del post anterior, les comento que nuestro primer evento tiene como fin difundir las nuevas características del Api de Windows Live.

    En un principio lo vi bastante enfocado al desarrollo de redes sociales, pero ahora puedo ver que puede tener una gran cantidad de aplicaciones posibles, prometo comentarles más sobre esto muy pronto. . . .

   el Evento se realizará el día 23 de Septiembre a las 18:00 en el Tecnológico de Monterrey campus Morelia, para asistir es necesario registrarse al evento vía TechNet, el link para ello es:

https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=es-MX&eventid=1032387388&flag=1

Microsoft tuvo a bien enviarnos material, libros y DVDs, para regalarlos a los asistentes, por si tienes la oportunidad de acudir no dudes en hacerlo

prometo subir fotos :P

Morelia .Net DevPros

Por fin

Luego de tanto tiempo, de muchas platicas y reuniones, oficialmente nuestra comunidad se ha formado, si vives en la ciudad de Morelia, o en sus alrededores y te interesa unirte a nosotros no dudes en avisarnos, les dejó el logo de la comunidad:

Logo

 

Para cualquier interesado, puedes dejarme un comentario y a la brevedad posible me comunicaré contigo para darte más información.

Entradas antiguas »