Friday, June 15, 2007

Practicas de programacion: Nunca digas nunca

Recientemente Jan Bannister escribio este post Bool considerado dañino, donde escribe (traducido):

Nunca uses Bool, o mas especificamente nunca uses bool como parametro. Es el tipo de dato mas tonto y que provee la menos informacion posible.

Pues bien, podria debatir el post de varias maneras, pero lo que me llego fue eso de "nunca uses bool como parametro"; los problemas mas grandes con eso que veo son:

  •  Tus proyectos terminarian con cientos de enums para reemplazar los parametros buleanos (asi se escribe booleans?).
  • Donde pones todos esos enums?
  • En algun punto del proyecto, tendrias tantos enums que tal vez algunos de ellos estarian duplicados, y se te haria un desorden para saber si debes aumentarle a un enum, o crear uno nuevo.

Entonces que hacemos? de alguna manera el tipo bool si es dañino, pero no siempre, yo creo que esa es la clave, puedo pensar rapidamente en al menos 3 escenarios donde no necesariamente necesitas reemplazar tus bools con enums:

  • metodos privados: se supone que son usados solamente por clase misma... y que el metodo no es tan grande, y que la clase no es tan grande, y que tienes comentarios verdad?
  • metodos con un solo parametro que solo es algo que prendes o apagas, por ejemplo PonerVisibilidad(true);
  • Aun en metodos con varios parametros tambien se puede usar con variables con nombres claros que indiquen su proposito y no se presten a confusion, hay muchos ejemplos de esos, pero si eviten llamar sus variables, x, i, j, k, etc... porque entonces no importa si el parametro es bool o no, el codigo sera mas dificil de entender

y bien, ya no suena tan mal, a final de cuentas, nunca digas nunca, no abuses de ninguna tecnica.

Tuesday, June 12, 2007

C# trivia #1: overloads, strings, nullable types

esta entrada sirve a la vez para probar el mas reciente Windows Live Writer

Tenemos estas clase:

public class Foo {
public void Bar(string x) {
Console.WriteLine("string x was called");
}
public void Bar(int? x) {
Console.WriteLine("int? x was called");
}
}

cual sera la salida a la consola con el siguiente codigo:

Foo f = new Foo();
try {
f.Bar(null);
}
catch {
Console.WriteLine("no method was called");
}

Wednesday, June 06, 2007

Filemon salva el dia una vez mas

Estoy de regreso, me lastime la cabeza en un juego de futbol, me la pase muy mareado por mas de una semana, pero ya estoy bien

Esta vez fue un control ActiveX (todavia estamos peleando con controles ActiveX), pense que ya habia hecho todo para que funcionara, pero aun asi el #@$^ control simplemente no funcionaba, asi que corri Filemon para ver si el archivo era siquiera accesado, y encontre 2 referencias al archivo, una en el folder del GAC, y otra en program files\internet explorer, pero ninguna referencia a donde yo habia copiado el dll.

Asi que decidi copiar el archivo dll a donde IE lo estaba buscando, lo puse en
c:\program files\Internet Explorer\
y todo empezo a funcionar perfectamente

Talez pude haber registrado el control en el GAC, pero ya estaba muy frustrado (tenia varios dias con este problema) y creo que ya habia tratado antes eso mismo y no me habia funcionado.

pero bueno... pues ahi tienen otro truco mas que pueden intentar cuando ya hallan intentado todo lo demas, usa filemon para ver de que directorio esta tratando IE de cargar tu control, y copialo ahi

y si aun no sabes que es filemon, deberias bajarlo y jugar con el, es una herramienta mas que excelente, y te ahorrara muchos dolores de cabeza (y no precisamente de los causados en juegos de futbol J)

salu2

Tuesday, May 22, 2007

como arreglar cuando google reader reporta items nuevos inexistentes


de vez en cuando google reader (por diferentes razones) nos reporta que tenemos items nuevos, pero no los podemos ver (ya que realmente no existen), para arreglar este problema simplemente
- click en "all items"
- click en "mark all as read"

tecnologia para rastrear ubicacion de telefonos celulares

wow... me encontre esto via Aldoara, pensabas que eso de rastrear la ubicacion geografica de los telefonos celulares solo pasaba en las peliculas?... echale un vistazo

Friday, May 18, 2007

control activeX en .NET no funciona bajo https

keywords: .net user control, activex, ocx, IE7, IE, https, http, seguro

Justin y yo tuvimos una semana muy pesada peleandonos con unos controles ActiveX desarrollados en C# y .NET 2.0, asi que vamos a postear algunas de nuestras experiencias con los problemas y soluciones que encontramos (para que podamos recordarlas despues), la prima es sobre controles ActiveX corriendo bajo https.

Desarrollamos el control, todo funcionaba muy bien, uno de nuestros clientes queria ese control en un sitio https, asi que dijimos no hay problema... hasta que tratamos, y tratamos, y tratamos y nada funcionaba, el control simplemente no cargaba correctamente (si cargaba, pero no hacia lo que necesitabamos, esto era aun peor).

La solucion resulto ser algo muy simple (como normalmente es el caso); cuando incluyes un control, normalmente se hace asi:

<object id="someId" classid="SomeDll#Namespace.ClassName"></object>

Esa es la forma en la que lo encuentras en los ejemplos en internet, y funciona muy bien (una vez que pasas todas las demas barreras para hacerlo funcionar) bajo http, pero cuando corres ese mismo sitio bajo https, el control simplemente no funciona.

la solucion?

Cuando creas tu control, le asignas un identificador unico (guid)

[Guid("CAE67AEA-F489-4e52-956B-CCC774F40A3A")]
[ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IControlEvents))] // --Expose events
[ComVisible(true)]
public partial class MyControl : UserControl...

mas o menos asi...
bien, para hacer que el control funcione en https, simplemente tendras que usar ese GUID, no el nombre de la clase, asi que escribiriamos el codigo html de la siguiente manera

<object id="someId" classid="clsid:CAE67AEA-F489-4e52-956B-CCC774F40A3A"></object>

listo, es todo lo que hay que hacer, espero que les hallamos evitado algunas horas de dolores de cabeza

salu2

Thursday, May 17, 2007

(humor) soy programador...


un poco de humor para que se despejen...

salu2

Tuesday, May 15, 2007

una hora de diferencia de zona horaria no siempre es igual a una hora de diferencia

esta es una de esas cosas que no se porque no lo sabia...

Esto me paso por sorpresa en un viaje reciente, fui a una ciudad que yo sabia que estaba bajo la siguiente zona horaria, asi que ajuste la zona horaria en mi celular, pero la hora no cambio... me quede un poco confundido y empece a cambiar a otras zonas horarias hasta que entendi lo que estaba pasando

Despues de eso verifique el mismo comportamiento en mi PC, si aun no me crees puedes intentarlo ahora mismo, cambia tu pc a diferentes zonas horarias y veras que la hora cambia no necesariamente cuando tu esperas que cambie

por ejemplo: la hora es la misma en
(GMT-07:00) Mountain Time (US & Canada) y
(GMT-06:00) Central America

...y yo se al menos de una aplicacion donde este detallito causa un problema...

forma facil de ver los metodos y propiedades expuestos en un archivo TLB

...simplemente arrastra (drag and drop) el archivo TLB a una ventana de Visual Studio (funciona al menos en VS2005), al hacer esto abrira el "object browser" y de ahi podras expander el objeto y ver la definicion completa de sus metodos y propiedades

Monday, April 30, 2007

control ActiveX para ver archivos PNG en IE7?


Acabo de bajar este poster de SilverLight a mi maquina, luego trate de abrirlo con IE7; y me dio este mensage. Me sorprendio un poco, pero le di click para activarlo, solo para recibir este mensaje de error:


COMO DICE!?

Thursday, April 26, 2007

problemas en Oracle, parte 2 de 1000: establecer valor a variables

en Oracle no se usa el SET para establecer el valor de una variable
SET variable_name = value;

eso te dara un descriptivo "ORA-00922: missing or invalid option"

para hacerlo, se hace al estilo de Delphi =o)

variable_name := value;

problemas en Oracle, parte 1 de 1000: queries contra scripts

por lo que veo en google, la comunidad latina aprecia bastante a Oracle, haber que tal me va con esta serie de articulos...
Esto lo tengo que poner aqui para recordar en el futuro, tambien espero bloguear acerca de muchisimos otros problemas que he tenido usando Oracle

Este problema en particular aplica cuando ejecutas multiples operaciones para crear vistas, funciones, etc

Cuando estes ejecutando en modo query:
al crear o reemplazar funciones, incluir ";" al final
al crear o reemplazr vistas, no incluyas ";", sino "go" al final

de lo contrario recibiras bellos errores como
" Warnings: --->
W (1): Warning: execution completed with warning
<--- "

"[Error] Script lines: 639-664 ----------------------
ORA-06575: Package or function FUNCTION_NAME is in an invalid state"

y tus vistas/funciones no seran modificados

cuando estas ejecutando como script, todo necesita llevar ";" al final

yahoo mail haciendose el gracioso...




aaarggh...

Sunday, April 22, 2007

Distribuir configuracion de seguridad de .NET 2.0 sin usar SDK o caspol

Este articulo aplica a: Seguridad en Microsoft .NET Framework 2.0
keywords: CAS, full, trust, assembly, security, policy, mscorcfg.msc caspol.exe

Cuando quieres ajustar la configuracion de seguridad en .NET 2.0 usas la herramienta mscorcfg.msc (Control Panel/Administrative Tools/Microsoft .NET Framework 2.0 Configuration)

Peeeeero, algunas veces uno necesita distribuir esa misma configuracion a (muchas o algunas) otras maquinas en produccion, y el problema es que la herramienta mscorcfg.msc solo esta incluida como parte del SDK el cual mide como 354MB, otra opcion es usar la linea de comando, pero eso como que asusta a la mayoria de la gente, hay mucha gente que tiene este problema, asi que decidi poner aqui una solucion facil para este problema.

Les menti en el titulo del articulo, si necesitas el SDK, pero solo en una maquina, y como eres un desarrollador (cierto?), supongo que tienes Visual Studio instalado en al menos una maquina, y ahi esta incluido el SDK, si no tienes el mentado SDK en ninguna maquina pues vas a tener que bajarlo e instalarlo al menos en una maquina.

Una vez que ya tengas la herramienta mscorcfg, configura la maquina con los permisos que quieras distribuir, asigna confianza a los assemblies (trust assemblies), ajusta las zonas de seguridad (adjust zone security settings), etc, cuando hallas terminado de hacer los ajustes necesarios, usa esta opcion

Configure Code Access Security Policy (configurar politicas de seguridad que definen que tantos permisos le damos al codigo)







Create Deployment Package (crear paquete de distribucion)






Veras un dialogo el cual no tiene muchas opciones


Este dialogo es un poco extraño y buggy*, pero solo tienes que especificar un nombre de archivo (que sera creado) en un folder valido (existente), por ejemplo c:\SecuritySettings

La otra cosa que seguro querras cambiar es "security policy level to deploy" (nivel de la politica de seguridad que deseas distribuir), si vas a distribuir a maquinas en produccion querras usar "machine" (aplica a todos los usuarios de la maquina) o "user" (solo al usuario bajo el que lo instales, click Next, luego finish.

Lo que este programita hace es que nos crea un paquete que contiene toda la configuracion de seguridad de .net en esa maquina, y lo pone en un simple y pequeño programita de instalacion que puedes correr en cualquier maquina para ajustar la configuracion de seguridad facil y rapido.

Asi que ahora lo unico que necesitas hacer es llevar ese programita a todas las maquinas a donde quieras distribuir la configuracion de seguridad, correrlo y listo

Cuando corres ese programita naturalmente estaras esperando un dialogo que te pregunte darle click en next, next, next, finish, pero no habra ningun dialogo, veras una ventanita aparecer por un segundo y luego desaparece y eso es todo lo que hace (es posible que necesites correr el programa con privilegios mas elevados que los que tengas en cada maquina), si pudiste correr el programita, la configuracion de seguridad ha sido cambiada exitosamente.

asi que ahora si "corre en mi maquina!", puedes hacer que corra en otras maquinas tambien =o)

Wednesday, April 18, 2007

Microsoft presenta campaña “Estrella Solidaria"

me encuentro con esto en el blog de Zero4, lo cual me parece excelente. a echarle ganas jovenes!

La empresa donará cinco dólares a la ONG Aldeas Infantiles SOS por cada desarrollador que obtenga la cuarta estrella en Latinoamérica.

Monday, April 16, 2007

Todo lo que bloguees podra y sera usando en tu contra

En algun momento la mayoria de los blogueros escriben algun articulo controversial, algunos blogueros lo hacen tan frequentemente que ya ni genera tanta reaccion en la blogosfera.

Algunos tratan de dictar reglas para la blogosfera, lo cual practicamente le quita el sentido mismo al blog, para mi ese tipo de "llamadas a la comunidad" son solamente gente tratando de crear el siguiente buzzword o ganar (en algunos casos mas) popularidad y todo lo que viene ligado a esto; si tu eres un "z list" bloguer como yo, probablemente no haria diferencia alguna si pusieras algo incorrecto en tu blog.

Leyendo mis blogs hoy me encuentro con este post de Sam Gentile: "Se busca: Una edicion de Windows para No-Idiotas"; y el problema que tengo con esto es en llamar idiotas a los usuarios regulares. Si yo uso mucho el teclado y la linea de comando, me hace eso un usuario avanzado y a los que no lo usan los hace idiotas?

Se cuidadoso cuando escribas en tu blog, sin importar que tan popular sea tu blog, nunca sabes cuando podria usarse en tu contra (en una entrevista de trabajo por ejemplo), yo no voy a recomendar un codigo de conducta, simplemente digo que hay que usar el sentido comun y respetar a tus lectores y respetar a la gente en general.

buenas noches

Saturday, April 14, 2007

hola mundo desde F#

Justin y yo estamos empezando a jugar con F# (version 1.9.1 esta disponible)

open System;
Console.WriteLine("hello world");
let name = Console.ReadLine();;
Console.WriteLine("hello "+ name);
Console.Read();

ya veremos que tal nos va, esperamos bloguear sobre el tema pronto

el fin de mi guarda pantallas, gracias McAfee

He usado el screen saver BSD (Blue Screen of Death) por muchisimo tiempo... ahora se ha ido =o(

actualizacion de Notepad lista

...al menos de Notepad2 =o)

Los cambios mas importantes en Notepad 2.0.x comparado con version 1.0.12 incluye soporte para guardar la configuracion del programa en archivo .ini, dialogos modeless de "encontrar y reemplazar", operaciones "encontrar y reemplazar" con soporte multilinea (usando expresiones con diagonal invertida), notificacion opcional de cambio de archivos y mucho mas.

Hay tambien algunas regresiones, por ejemplo el soporte de la pagina de codigo ANSI ha sido reducido al default en el sistema, los bookmarks han sido elminados, algunos esquemas de sintaxis han sido eliminados y Notepad2 ya no corre en Windows 9X, si necesitas algunas de esas cosas tendras que quedarte con Notepad 1.0.12.
la lista completa de actualizaciones la encuentras aqui (solo ingles)

si aun usas Notepad podrias darle un chance al Notepad2, es tan ligero y rapido como Notepad, pero muchisimo mas poderoso

Wednesday, March 28, 2007

hora de actualizar tu lector de archivos PDF

Si aun no estas usando Foxit reader deja de hacer lo que estas haciendo y bajatelo de volada, ahora que si ya lo habias usado y te habia dado problemas con ciertos archivos pdf, pues ahora es el momento de darle una segunda oportunidad, acaban de sacar la version 2.0 y al menos en mi experiencia ya he podido abrir los archivos que antes no podia abrir

Foxit reader es muchisimo mas rapido que el acrobar reader, y no te instala nada de porquerias adicionales, simplemente lo que uno esperaria de un "lector de archivos pdf"... es lo unico que hace, y (ahora) lo hace bien