Monday, November 02, 2009
Divulgacion de informacion: Esta en todos lados
Que tal esto, has visto algo asi?:
La cantidad de blogs que han sido hackeados por este detallito es demasiado grande, WordPress hace estos sitios demasiado facil de encontrar y es cuestion de usar una de tantas vulnerabilidades que aparecen para este sistema y lograr hacer algun daño
Tambien he visto sistemas en los que usan el numero de empleado para hacer login en las computadoras, el # de empleado es visible cuando la computadora esta bloqueada, y resulta que puedes llamar al help desk de la compañia, dar ese numero con el nombre de la persona y ellos resetean la contraseña y te la dan ahi mismo.
Desafortunadamente no hay reglas establecidas para prevenir el problema de la divulgacion de informacion, mi intencion es simplemente crear mas conciencia sobre el gran problema que esto puede llegar a representar en el desarrollo de software o incluso en tu vida personal. Lo unico que te digo es que este problema esta en todos lados, en tus comentarios, archivos de configuracion, en mostrar al usuario la version de tal o cual componente que uses en tu aplicacion, la misma version de tu app, el # de empleado, etc. aun en esa inocente calcomania.
La seguridad se atravieza en el camino de la usabilidad, y la usabilidad en el camino de la seguridad, es cuestion de analizar un poquito mas lo que exponemos en nuestras aplicaciones y tener cuidado.
No existe un sistema seguro, lo unico que podemos hacer es poner la barra mas alta y aunque no nos guste, la seguridad por obscuridad puede ser nuestro unico amigo algunas veces.
Wednesday, October 21, 2009
Duct tape programming: El codigo elegante no paga tu sueldo
Finalmente me di el tiempo de terminar este articulo sobre la conversacion de the Duct Tape programmer; antes de continuar con el articulo dedicare el resto de este parrafo para tratar de explicar el termino. La traduccion literal es programador de cinta gris; se usa esta expresion porque la cinta gris es un material muy resistente para uso multiple que se invento durante la segunda guerra mundial, donde se utilizo para reparar equipo militar rapidamente, cualquier cosa desde armas de fuego hasta aviones; hoy en dia se utiliza para reparar muchas cosas.
Este articulo ha provocado mucha polemica en las ultimas semanas en los medios sociales; gran parte de la comunidad bloguera y twittera tomo este articulo de Joel como un ataque a TDD, practicas agiles de desarrollo y desarrollo de software de calidad en general, algo que encaja perfectamente si lo analizas un poquito, estas personas viven de eso, es lo que venden, bloguean y twittean sobre esto todo el tiempo, asi que el post les toco unas fibras sensibles. Estos fanaticos de patrones y practicas han lanzado una campaña agresiva para convencer al mundo que a los programadores de cinta gris no les importa la calidad del software, que su codigo es inmantenible, que carece de todos esos atributos que esperamos del buen software. Estas personas son las mismas que minimizan el "contenido meramente tecnico", se les ve hablar y hablar (o escribir) sobre buenas practicas de desarrollo y quejarse de como todo el mundo siempre lo hace mal, pero nunca o raramente los ves hablar sobre implementaciones de algo remotamente relacionado con codigo, yo opino que la teoria esta bien, pero sin la practica no sirve de nada. Como siempre lo digo, el problema en todo caso, son los extremos.
Por otro lado, creo que si hay areas donde se puede ser purista y aplicar todos tus (des?)conocimientos, creo los que proyectos de codigo abierto o proyectos personales son ejemplos perfectos para aplicar todo esto, no hay fechas de entrega, no hay compromiso, no hay riesgos, estara listo cuando estara listo.
Cuando los puristas se encuentran acorralados ante las muestras de buenos resultados de la programacion con cinta gris, la salida facil -esto me recuerda como los mismos Agilistas dicen que cuando un proyecto Agil falla es porque no se aplico correctamente- es decir que se requiere gente muy talentosa para sacar adelante algo asi, y claro, nadie dijo que fuera facil, se requiere talento, se requiere leer y entender esos blogs de contenido meramente tecnico, experimentar, jugar, hackear; al final, el desarrollo de software es un problema humano. Yo creo que las metodologias son para compensar la falta de talento, pero ese es tema para otro post.
No hay reglas fijas y estrictas en el desarrollo de software, si fuera asi, este seria demasiado facil.
si no les gusta el termino "programador de cinta gris" pueden pasar a reclamarle a Mario Cornejo :)
Saturday, October 03, 2009
La intuitividad de la Mac: Sincronizando el iPhone
Normalmente mantengo unas 10 notas en mi iPhone, asi que siempre va a ser mas del maldito 5 por ciento, nunca he entendido porque se les ocurrio este limite, yo deberia poder cambiar todas mis notas si quisiera sin tener que ser molestado, si la cuestion es poder recuperar notas en caso de algun accidente, podrian mantener la historia de estas, las notas las escribe uno en el mismo iPhone, que tan grandes pueden ser?; otro problema que se genera con esto es que si conectas tu iPhone para sincronizarlo y lo dejas ahi para regresar mas tarde por el, resulta que regresas y la sincronizacion esta atorada en este estupido dialogo. Me parece muy mala usabilidad en este caso, y las cosas no han cambiado aun con el sinnumero de actualizaciones que ha sufrido iTunes.
Recuerden el Principio de menos sorpresa.
Friday, September 25, 2009
La intuitividad de Apple: El boton OK perdido
Talvez solo me ha pasado a mi, pero me tomo mucho tiempo (y me refiero a meses) para darme cuenta que no se referia a un boton "OK", sino que simplemente ya se podia desconectar el aparato; supongo que sera muy intuitivo.
Aunque, no soy el unico que piensa que iTunes es pesimo
Wednesday, September 23, 2009
Ping no debe ser usado para probar si hay conexion
Tuesday, July 28, 2009
Traduccion de +14,000 terminos tecnicos
Hoy salio en twitter el tema de la traduccion de terminos tecnicos, de hecho hasta decidimos crear una pagina con terminos tecnicos comunes, la cual pueden encontrar aca: Traduccion de terminos
Despues recorde que por algun lado habia yo visto un archivo excel publicado por Microsoft que contenia traducciones de muchos terminos en ingles, la traduccion no solo es al Español, sino a unos 45 idiomas
bastante util el archivito, lo pueden encontrar aqui: Microsoft Terminology
Este post es traido a ustedes por: Un-post-mas-para-servir-de-futuro-recordatorio
Friday, July 17, 2009
Como guardar archivos .GIF desde MS Outlook
Por alguna razon MS Outlook no tiene una
Les menti en el titulo, si hay forma de guardar archivos .GIF desde MS Outlook, pero por los pasos requeridos mejor no me meto ahi, pero les dire que hay una forma mucho mas facil de hacerlo, solo tienes que enviarte el mensaje a una cuenta de web email, como GMail, Yahoo o Hotmail (que conste que no he probado en Yahoo ni Hotmail, pero creo que funciona ahi tambien)
Una vez que lo abras en tu correo web lo podras guardar normalmente como uno esperaria que se puede hacer, dando click derecho en la imagen, guardar como... y ya esta
Wednesday, July 15, 2009
Estas cansado de XML? yo tambien. proyecto JINI.
Un area en que XML me parece particularmente molesto es en los archivos de configuracion, y mi propuesta para atacar este problema consiste en formalizar un nuevo formato que por ahora llamo JINI. JINI es un subconjunto de JSON similar a los viejos archivos .ini en simplicidad y es usado especificamente para configuracion para reemplazar todos esos archivos app.config
Beneficios
- Simple
- No mas <>
- Simple
- mas corto
- mas facil de leer
- Mas Simple
- Todo lo que se puede expresar en XML, se puede expresar en JINI, pero es mas simple
Lo malo es que "jini" ya esta tomado (segun los 2 millones de resultados en Google y 714K Bing)
Pense que la idea ya se le habia ocurrido a alguien pero una busqueda rapida me dio cero resultados, asi que pense que seria bueno sacar la idea y ver que opinan al respecto
nota: me comentaron sobre YAML, pero no me convence mucho
que piensan de la idea? son felices con XML?
Tuesday, July 14, 2009
La programacion es como un juego de ajedrez
Y bien, permitanme explicarles un poco sobre mi analogia
El programador mediocre
Uno podria argumentar que este es el programador promedio, pero eso es otra historia, este hace un movimiento sin pensar en los efectos secundarios, su capacidad de analisis es muy poca, hay tantos efectos secundarios (introducir nuevos bugs, seguridad, etc) pero este jugador ni siquiera esta enterado de ello, basicamente se basa en el debugueador y si corre en su maquina entonces esta listo; cuando las cosas inevitablemente no funcionan en produccion el simplemente hace otro movimiento que parece corregir el problema, este ciclo es frecuentemente repetido, si le das un proyecto grande a este tipo muy seguramente hara un movimiento estupido que resultara en Jaque Mate en el proyecto
El buen programador
Este analiza diferentes rutas y escoge la que cree adecuada, este jugador puede hacer un buen juego, de vez en cuando su analisis falla y comete algunos errores, pero el puede aprender de estos, este tipo normalmente entrega buen software con pocos errores que puede corregir rapidamente sin muchos problemas
El mejor
Genio, Guru o como quieras llamarle, este tipo puede hacer una gran cantidad de movimientos rapidamente, y todo en su cabeza, esta informado siempre de las mas recientes tecnicas para vencer a su oponente, pero no cae en el error de simplemente usarlas en su juego, sino que las prueba primero en sus proyectos privados y una vez que el mismo comprobo que son utiles entonces las usa en proyectos reales, conoce las tecnicas mas rapidas, cortas y que le dan el mayor beneficio, sabe las tecnicas para usar en los proyectos pequeños y las que debe usar en proyectos grandes, y sabe tambien que son muy diferentes, este jugador sabe lo que el oponente esta pensando, sabe como respondera el oponente a cada uno de sus movimientos asi que escoge cuidadosamente el mejor movimiento, este jugador conoce los efectos secundarios; las palabras "funciona en mi maquina" no estan dentro de su vocabulario.
Como podran ver las diferencias principales en mi analogia son la capacidad de analisis (seleccionar el movimiento) y los efectos secundarios (que pasa despues de hacer el movimiento). El oponente es tu proyecto de software, el movimiento es escribir el codigo, los efectos secundarios son todo lo demas que es afectado por este.
Cuando fue la ultima vez que creaste un nuevo bug cuando arreglabas aquel otro o agregabas funcionalidad a tu applicacion? o cuando *ellos* encontraron errores en la aplicacion justo despues de lanzarla a produccion? o cuando funciono en tu maquina pero no en el servidor?
Cada vez que vas a hacer un movimiento, detente un momento y piensa en los efectos secundarios, siempre hay efectos secundarios, si no puedes identificarlos, hay herramientas que te pueden ayudar a pensar, como las pruebas unitarias, y entre mas lo practiques, mejor jugador seras, y eso es una promesa
Tuesday, June 30, 2009
Firefox tarda mucho para correr despues de actualizar a 3.5
Despues de actualizar y correrlo la primera vez, me salio esta pequeña ventana
Me tomo un rato para darme cuenta que esta ventanita estaba siquiera en mi pantalla, pense que simplemente estaba tardando mucho para correr la primera vez, pero luego ya me parecio demasiado tiempo, entonces di click en la barra de tareas, en el icono de firefox y fue cuando vi la ventanita esta, trate de redimensionarla para ver los contenidos, pero no me dejo, lo unico que pude hacer fue cerrarla y ya Firefox corrio normal
Asi que solo lo agregue aqui por si a alguien le pasa lo mismo, espero que sea de ayuda
sintomas: Firefox tarda mucho en correr la primera vez despues de actualizar a 3.5
solucion: click en la barra de tareas, en el icono de firefox y encuentra la ventanita esta, cierrala y Firefox correra normal
Tuesday, June 23, 2009
Como convertir DIB a Bitmap
El fin de semana pasado un amigo me pidio ayuda con un codigo para convertir DIB a Bitmap en .NET, habia encontrado un codigo que casi hacia todo lo que necesitaba, pero la imagen se cortaba en los lados, supusimos que el problema era con el codigo que obtenia un puntero al bitmap, asi que investigamos mas y encontramos un codigo que supuestamente arreglaba ese problema, solo tuvimos que hacer unos cambios y un par de arreglos para que funcionara correctamente. Como no encontramos una solucion completa por ningun lado decidi escribir este post ya que vi muchisima gente con este problema preguntando en muchos foros en Internet, asi que espero que pueda ser util, sin mas, aqui va la solucion:
Primero tienes que agregar una referencia a System.Drawing.dll en tu proyecto, luego agrega esto al uses
//Name spaces neededEl siguiente paso es declarar la estructura BITMAPINFOHEADER, esta puede estar declarada fuera de tu clase:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct BITMAPINFOHEADER
{
public uint biSize;
public int biWidth;
public int biHeight;
public ushort biPlanes;
public ushort biBitCount;
public uint biCompression;
public uint biSizeImage;
public int biXPelsPerMeter;
public int biYPelsPerMeter;
public uint biClrUsed;
public uint biClrImportant;
public void Init()
{
biSize = (uint)Marshal.SizeOf(this);
}
}
Luego necesitas agregar esto para importar una funcion de GdiPlus.dll
//GDI External method needed Place it within your classY bien, ahora podemos irnos al codigo en si que nos servira para convertir el DIB a Bitmap, notese el uso de la funcion GetPixelInfo, aqui precisamente estaba la raiz de nuestros problemas; la funcion BitmapFromDIB que encuentras por todo internet no tiene este codigo asi que eso hace que no funcione en muchos casos. De hecho la funcion esta que anda rondando por internet, toma un parametro pPix pero nunca menciona como obtener este valor. Este codigo necesita estar declarado dentro de tu clase
[DllImport("GdiPlus.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
private static extern int GdipCreateBitmapFromGdiDib(IntPtr pBIH,
IntPtr pPix, out IntPtr pBitmap);
//THIS METHOD SAVES THE CONTENTS OF THE DIB POINTER INTO A BITMAP OBJECTFinalmente, como algo agregado, lo que mi amigo realmente necesitaba era convertir de DIB a TIFF (grupo 4), asi que escribio una funcion mas que usa la funcion previa de BitmapFromDIB function and allows you to set the image resolution
private static Bitmap BitmapFromDIB(IntPtr pDIB)
{
//get pointer to bitmap header info
IntPtr pPix = GetPixelInfo(pDIB);
//Call external GDI method
MethodInfo mi = typeof(Bitmap).GetMethod("FromGDIplus", BindingFlags.Static | BindingFlags.NonPublic);
if (mi == null)
return null;
// Initialize memory pointer where Bitmap will be saved
IntPtr pBmp = IntPtr.Zero;
//Call external methosd that saves bitmap into pointer
int status = GdipCreateBitmapFromGdiDib(pDIB, pPix, out pBmp);
//If success return bitmap, if failed return null
if ((status == 0) && (pBmp != IntPtr.Zero))
return (Bitmap)mi.Invoke(null, new object[] { pBmp });
else
return null;
}
//THIS METHOD GETS THE POINTER TO THE BITMAP HEADER INFO
private static IntPtr GetPixelInfo(IntPtr bmpPtr)
{
BITMAPINFOHEADER bmi = (BITMAPINFOHEADER)Marshal.PtrToStructure(bmpPtr, typeof(BITMAPINFOHEADER));
if (bmi.biSizeImage == 0)
bmi.biSizeImage = (uint)(((((bmi.biWidth * bmi.biBitCount) + 31) & ~31) >> 3) * bmi.biHeight);
int p = (int)bmi.biClrUsed;
if ((p == 0) && (bmi.biBitCount <= 8))
p = 1 << bmi.biBitCount;
p = (p * 4) + (int)bmi.biSize + (int)bmpPtr;
return (IntPtr)p;
}
private void SavehDibToTiff(int hDIB, string fileName, int xRes, int yRes)
{
//Identify the memory pointer to the DIB Handler (hDIB)
IntPtr dibPtr = new IntPtr(hDIB);
//Save the contents of DIB pointer into bitmap object
Bitmap myBitmap = BitmapFromDIB(dibPtr);
//Set resolution if needed
if (xRes >0 && yRes>0)
myBitmap.SetResolution(xRes, yRes);
//Create an instance of the windows TIFF encoder
ImageCodecInfo ici = GetEncoderInfo("image/tiff");
//Define encoder parameters
EncoderParameters eps = new EncoderParameters(1); // only one parameter in this case (compression)
//Create an Encoder Value for TIFF compression Group 4
long ev = (long)EncoderValue.CompressionCCITT4;
eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, ev);
//Save file
myBitmap.Save(fileName, ici, eps);
}
//Helper to get Encoder from Windows for file type.
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
Y eso es todo, espero les sea de utilidad, gracias a Danny por darme el codigo final y agregarle comentarios
Saturday, June 13, 2009
Porque las pestañas de IE tienen colores?
Esto es algo de lo que me gusto mucho en Internet Explorer 8, pero no todo mundo capta inmediatamente el significado de los colores. Los colores son para agrupar pestañas relacionadas entre si, osea que si tu sigues un link de una pagina y IE abre una pestaña, asignara el mismo color que la pestaña previa de donde se abrio esta nueva y de esta manera podras ver facilmente que una fue derivada de la otra, esto es muy util en estos dias que uno normalmente mantiene muchisimas pestañas abiertas al mismo tiempo, unas para cuestiones personales, otras para trabajo, busquedas, etc, el tenerlas agrupadas por colores nos permite ver cuales estan relacionadas entre si.
La motivacion a escribir este post fue precisamente porque alguien me pregunto que significaban los colores, asi que pense que seguramente habria mas gente que tendria la misma pregunta.
Saturday, May 02, 2009
Twitter para desarrolladores
Es practicamente imposible (y creo que seria un desperdicio total) que alguien escriba 100% cosas relacionadas al desarrollo en twitter, pero esta gente son los que yo he notado que son mas regulares en mantenerse apegados al tema.
Espero sea de utilidad para los programadores que quieran entrar en contacto con otros programadores en Twitter, aun para los que no han entrado a twitter y les interese poder dialogar con gente de su mismo medio, este seria un buen medio para hacerlo.
Sin mas, aqui esta la lista, la cual estare actualizando constantemente:
@pelosbriseno
@alexserver
@apanitsch
@ddaz
@devsoftx
@fcastellanos
@ferglo
@gabo
@javier_castanon
@Jersson
@jfroma
@jorgegamba
@HardBit
@mario_chavez
@mhcornejo
@mmonterroca
@scasware
@sergiotarrillo
@SrBichi
Y por supuesto @ebersys
Esta es mi lista inicial, la ire actualizando como vaya identificando mas usuarios, si tienen algunos candidatos para mi lista por favor haganmelo saber aqui o en twitter, mis unicos requisitos son que escriban en español y que regularmente escriban algo relacionado con el desarrollo de software
Thursday, April 16, 2009
Unir cadenas con comas
El problema:
Escribir una funcion que tome un IEnumerable
(1) Si la secuencia esta vacia, regresar "{}".
(2) Si la secuencia contiene un solo elemento "ABC" el resultado sera "{ABC}".
(3) Si la secuencia contiene 2 elementos "ABC", "DEF" El resultado sera "{ABC and DEF}".
(4) Si la secuencia contiene mas de 2 elementos "ABC", "DEF", "G", "H" el resultado sera "{ABC, DEF, G and H}". (Noten que los ultimos 2 elementos no estan unidos por coma)
static string JoinStrings(IEnumerable<string> strings) {
int len = strings.Count();
return "{"+(
(len > 1) ?
strings.Take(len - 1)
.Aggregate((string head, string tail) => head+", "+tail)+
" and " +strings.Last()
: (len == 1) ?
strings.First()
: "")+
"}";
}
static string JoinStrings2(IEnumerable<string> strings) {
return strings.Count() > 0 ?
strings.Aggregate((string h, string t) => h+", "+t)
:
"";
}
Friday, April 10, 2009
El reto de crear un StackOverflow hispano
Para los que no hallan escuchado de StackOverflow, la descripcion rapida que dan los mismos autores del sitio es "es como experts-exchange, pero sin la basura" (is like experts-exchange, but without the evil), el caso es que StackOverflow se ha convertido rapidamente en un referencial muy importante para encontrar soluciones rapidas a problemas de programacion, practicamente en cualquier lenguaje.
Pues bien, esta idea de crear un clon de este sitio en español ya me habia rondado por la cabeza pero tenia (tengo) muchas dudas sobre si podria llegar a funcionar, me encantaria poder hacer funcionar algo asi, este blog en particular es un intento por llevar recursos tecnicos al publico de habla hispana, pero desafortunadamente al mismo tiempo es muy facil ver la falta de interes en estos temas. A mi parecer hay algunas cuestiones que deberiamos responder para ver la viabilidad del proyecto. (si no quieres leer todos los puntos, saltate al #7)
- Identificar si el proyecto es realmente una nececidad, habria que averiguar el interes de la comunidad en este proyecto y los sitios de este tipo en la actualidad (talvez ya hay algo asi pero necesita apoyo?).
- Muchos de los desarrolladores hispanos con buen nivel participan en comunidades en ingles unicamente (sera que tambien nos ayudarian?).
- La mayoria (creo) de los desarrolladores recurren a sitios en ingles para encontrar soluciones a sus problemas (se debe esto a la falta de recursos en español? usarian recursos en español si existieran?).
- Que cantidad de desarrolladores no saben suficiente ingles de tal manera que su unica opcion es buscar contenido en español.
- Los problemas que encontramos y los terminos tecnicos generalmente estan expresados en ingles (errores del compilador, frameworks<==, etc), alguien comento que los motores de busqueda inclinarian los resultados a paginas en español, lo cual es cierto siempre y cuando hagan las busquedas desde la version localizada de Google o tengan configurado el idioma español en sus preferencias.
- El #5 me lleva a otro punto importante, al hacer la descripcion/solucion de un problema deberiamos hacerlo en ingles y español? dado que si hacemos la descripcion en español, no servira para muchos que buscan los terminos en ingles (y que se beneficiarian de encontrar una respuesta en español) y si solo la hacemos en ingles... pues entonces ya no es version en español, este punto en particular creo que es un problema complicado.
- La idea por supuesto ya se le ha ocurrido a muchos otros antes, y hay quienes han pedido incorporar el idioma español al sitio de alguna manera, la respuesta de los autores es positiva, aunque no a corto plazo (tambien en el podcast lo han mencionado), pero esa podria ser otra opcion, hay varias formas para lograrla, siendo la mas simple de ellas el traducir los articulos, la implementacion no debe ser muy dificil, podria haber una opcion para pedir traduccion (para dar prioridad a la traduccion), y si juntaramos suficiente gente podria ser mas factible que algo asi avanzara mas rapido. Cabe destacar que esta opcion no tendria el problema del punto #6 y de hecho yo me inclino por esta opcion y si lo que realmente importa es contar con esta herramienta, creo que es la primera opcion que deberiamos perseguir una vez que podamos manifestar suficiente interes por parte de la comunidad (se me ocurre que podria ser una entrada (pregunta) en stackoverflow y las respuestas serian el apoyo).
Que piensan?
Tuesday, April 07, 2009
Como eliminar el dialogo sobre contenidos mixtos en Internet Explorer
La version en ingles de este articulo la encuentran aqui: How to: prevent the security dialog about unsecure items in IE
En el post previo sobre el nuevo dialogo en IE8 acerca de contenidos mixtos, alguien pregunto "Hay alguna manera de desactivar esa advertencia de seguridad? Lo pregunta 100 veces!!", ya habia planeado yo escribir un post separado para contestar esa pregunta, pero simplemente se me olvido, lo bueno es que me lo recordaron y aqui esta lo que necesitas hacer si ya no quieres que se muestre ese dialogo:
En la version en español:
Herramientas>Opciones de internet>seguridad>Nivel Personalizado>Mostrar contenido mixto: HabilitarEn la version en ingles:
tools>internet options>security>custom level>display mixed content: enable
Es importante resaltar que si el sitio que estas visitando no esta en la zona de internet, tendrias que hacer los cambios a la zona apropiada:
Para identificar la "zona" en la que estas solo tienes que mirar la parte inferior derecha del browser, donde veras algo asi:
Si le das doble click ahi, entonces podras hacer cambios a las otras zonas (Intranet Local, Sitios de confianza, Sitios restringidos)
Solo haz click en la zona deseada, luego click en el boton "Nivel Personalizado" y eso abrira el primer dialgo en este post donde podras hacer el cambio.
Este articulo aplica a IE8, IE7, IE6 (Y la verdad no se si aplica a versiones anteriores, aunque espero realmente que nadie este usando algo mas viejo que IE6)
Thursday, April 02, 2009
Los miembros de una interface SI pueden ser privados
public interface ITest {
void Test();
}
public class Test : ITest {
void ITest.Test() { //<<== implementacion privada
Console.WriteLine("test");
}
public void Test2() {
Console.WriteLine("test2");
}
}
class Program {
static void Main(string[] args) {
ITest t = new Test();
t.Test();
Test t2 = new Test();
//t2.Test(); //<<=== no compila
Si no lo crees puedes intentarlo tu mismo.
Pero de que me sirve o para que puedo usar esto?
La tecnica te permite asegurarte que el metodo solo es visible a aquellos que usen una variable del tipo de la interface (ITest en este caso). Lo unico que hace es forzar a que el uso de ese metodo sea a travez de una instancia de la interface, osea que, para este ejemplo, si quieres acceder al metodo .Test, solo lo puedes hacer a travez de una variable del tipo ITest.
El unico "truco" para lograr esto es que en la declaracion tienes que agregar el tipo de la interface, antes del miembro:
void ITest.Test();
Seguramente no es el truco mas util, pero es algo para tenerlo guardado ahi en el cofre de los trucos y que en algun momento te sera de utilidad, o talvez algo que te pueda hacer ganar una apuesta ;)
Wednesday, April 01, 2009
ASP.NET MVC 1.0 esta disponible en codigo abierto
El codigo lo puedes bajar e instalar usando el Web Platform Installer 2.0
Saturday, March 28, 2009
Cualquiera pensaria que encontre la receta magica para atraer lectores
Thursday, March 26, 2009
Desea ver el contenido de la pagina web que se entrego de forma segura?
actualizacion: Si lo unico que quieres es que este dialogo deje de aparecer, visita este articulo sobre como prevenir este dialogo
IE8 acaba de salir y trae algunas cosas muy buenas y tambien unos mecanismos de proteccion muy buenos, en general, una version decente (aunque no suficiente para convertir gente de Firefox).
Mientras hacia pruebas con este, me encontre con este dialogo al navegar por una pagina segura (Gmail)
Que dijooooo??????
La primera vez que vi el dialogo realmente me quede pasmado y tuve que leer un par de veces cuidadosamente el dialogo completo.
Para efectos de SEO incluyo el texto aqui:
Esta pagina web contiene contenido que no sera proporcionado usando una conexion HTTPS segura, que puede comprometer la seguridad de toda la pagina web
Para ser sinceros no estoy muy seguro que opcion debo elegir si quiero ver todo el contenido de la pagina. No entiendo porque cambiaron el dialogo anterior:
La pagina que esta abriendo contiene tanto elementos seguros como no seguros. Desea mostrar los elementos no seguros?
El nuevo dialogo me parece bastante confuso, y el texto extra despues de la pregunta solo lo hace aun mas confuso, desde que me acuerdo habia existido el dialogo anterior y me parecia bastante claro.
Si vemos la version en ingles es mas claro ver que el nuevo dialogo requiere la respuesta opuesta al dialogo anterior, si es que queremos ver todo el contenido de la pagina, talvez es esta la razon por la cual se siente como si estuviera haciendo una pregunta negativa.
Talvez lo que quieren es que mas usuarios seleccionen SI (la misma opcion que debias seleccionar antes)? dado que el 99.99% de los usuarios no leen los dialogos y solo se van por la seleccion por default.
Quiero agradecer a David Daniel Arroyo por haberme conseguido el dialogo en español para IE8.
Monday, March 23, 2009
No deseas cerrar el programa? si, no, cancelar
Pense que el titulo del post era una exageracion, pero despues de ver este dialogo...
No hagas preguntas negativas
Lo mas seguro es que confundiras al pobre usuario; los usuarios tienen miedo de responder preguntas para hacerlo aun mas confuso preguntando lo opuesto de lo que ellos estan tratando de hacer, es una regla basica y simple, pero aun veo bastante software (y desarrolladores) que usan preguntas negativas para entrada de datos.
El uso mas comun de opciones negativas es probablemente deshabilitado
solo compara:
Etiqueta X visible?
Campo X activo/habilitado?
a:
Etiqueta X Invisible?
Campo X Inactivo/deshabilitado?
Ese pequeño cambio hace mucho mas dificil poder contestar la pregunta correctamente; entonces hay que dar preferencia a Habilitado sobre Deshabilitado, Visible sobre Invisible, Activo sobre Inactivo, etc
El mismo concepto aplica cuando creas nombres para tus variables o metodos, en muy pocos casos el negativo es mejor opcion, asi que elige la opcion mas segura, es mas facil de procesar, estamos acostumbrados a contestar "preguntas positivas" y lo contrario nos hace pensar para poder contestar, lo cual lo hace no intuitivo.
Wednesday, March 11, 2009
La intuitividad de Apple: Los nuevos iPod shuffle (con control en codigo morse no integrado)
Y estos son los botones del auricular
De nada sirve tener un solo boton si este hace 10 diferentes cosas, imagina si eso mismo lo hicieramos en una aplicacion
Actualizaciin: Gizmodo llama el control Codigo Morse, jaja, me gusta
Wednesday, March 04, 2009
La intuitividad de la Mac: El teclado
Tengo algunos archivos en mi escritorio (asi se le llama tambien en la Mac?) que quiero borrar, asi que los selecciono y presiono una de las teclas delete... nada, intento la otra... nada... WTF!!
Despues de intentar con combinaciones de Ctrl, Option, Command, Shift finalmente encontre una que funciono... aunque ya olvide cual era.
Y eso es intuitivo?
Monday, March 02, 2009
La intuitividad de la Mac
Creo que yo he tenido la peor de las suertes que cualquier usuario halla tenido usando una Mac. Lo que ven en esta foto es Firefox en mi iMac. Cada vez que abro Firefox, eso es lo que abre, tengo que agarrar la pequeña ventanita por ahi entre los iconitos rojo y verde, arrastrarla hacia la izquiera en mi monitor, luego hacerla grande. Creo que esto comenzo a pasar desde que le quite un monitor alterno que tenia conectado.
Talvez solo soy yo, pero este comportamiento no me parece muy intuitivo.
Por cierto, queria editar la imagen para agregarle algo de contexto, pero no encontre ninguna manera obvia de editar la imagen, ni del menu de click derecho para abrir la imagen, ni tampoco una vez abierta la imagen; seguro que debe haber una forma de editar imagenes, pero aparentemente no es tan intuitivo como en Windows que solo puede hacer uno click derecho, editar y listo.
Sunday, March 01, 2009
Como acumular deuda tecnica rapidamente
Necesitas agregar una pieza de funcionalidad al sistema. Identificas 2 maneras de hacerlo, una es rapida, pero sucia, y sabes que te hara la vida mas dificil en el futuro. La otra resulta en un diseño limpio, pero te tomaria mas implementarla.Hay muchos factores por los cuales creo que la mayoria de los desarrolladores escogen la primera ruta de sacarlo rapido, y "despues lo arreglo"; por supuesto que ya sabemos que el luego nunca llega, y a eso es precisamente a lo que se le denomina la deuda tecnica; vamos dejando las cosas para despues, y los sistemas se van enredando mas, el codigo se vuelve mas complejo, y al hacer cambios muchas veces se introducen nuevos errores, por la naturaleza misma de un codigo mal estructurado.
Esta deuda, como tal, se tiene que pagar de alguna manera, y mientras no se pague en su totalidad tendremos que pagar intereses; Mario describe algunos puntos como el costo de usar la metodologia de "solo haz que funcione"
- Es muy difícil entender el código, posiblemente únicamente la persona que lo desarrolló, es el "puede" tener un entendimiento aceptable.
- Existe una mayor posibilidad de tener "bugs" extraños y difíciles de duplicar y corregir.
- El realizarle cambios al programa se vuelve cada vez mas complejo, porque no entendemos hasta que punto esos cambios van a afectar otras áreas de nuestro programa.
- No hay forma de reproducir situaciones muy particulares que ocurren con nuestro software y si este inter-actua con otro mas, lo mas común es culpar al otro software.
- Inicialmente quedamos "bien" con el cliente por entregar el software a tiempo, a la larga los errores y fallas de nuestro software nos ponen en una situación no muy buena, y si a esto le agregamos que le cobramos al cliente por arreglar nuestros "errores", pues todavía peor.
La metafora se adapta muy apropiadamente al desarrollo de software, estoy completamente seguro que cualquiera que lea esto podra identificar su propia deuda tecnica, yo diria que no es opcional, de una u otra manera todos incurrimos en esta, la diferencia seria simplemente quien se endeuda mas y quien se endeuda menos.
Te resulta dificil hacer cambios al software? Solo hay una persona que puede hacer cambios a "ese" sistema? No entiendes el codigo? Tienes problemas al pasar el codigo a produccion?
Todos esos son sintomas de que estas pagando la deuda tecnica. Pagar los intereses es doloroso porque es trabajo extra que en muchos casos te lleva a endeudarte aun mas.
Una vez que estas en deuda, no hay de otra, hay que pagar, y hay formas de ir pagando, pero mejor aun, hay forma de minimizar la deuda en un principio; ya hablaremos de eso.
Friday, February 20, 2009
Instalacion de Windows 7: The product key does not match current Windows SKU
En Google encontre muy pocos links sobre este problema, y la unica respuesta al parecer es que si bajaste la "checked build", entonces necesitas escoger la version Ultimate al instalar; y yo habia escogido la version Business.
Chris responds: You are probably installing from the "checked" ISO image. Please choose "Ultimate" and your key should work.El problema es que cuando estas en esa pantalla no puedes regresar a indicar la version que quieres, asi que no se como se podria cambiar la seleccion de la version.
Total que la solucion que me funciono fue simplemente dejar el campo del product key vacio; asi de sencillo.
Asi que ya saben, si se bajaron la "checked build" seleccionen Ultimate al instalar, si ya estan atorados, pues intenten dejando el campo vacio.
suerte
Friday, January 23, 2009
Disponibilidad de Windows 7 beta extendida hasta Febrero 10
El entusiasmo continua siendo muy alto para el Beta de Windows 7 y no queremos que nadie se quede sin probarlo, mantendremos abierto el sitio para bajarlo hasta Febrero 10. Para quienes lo hallan empezado a bajar pero no hallan terminado, tendran hasta Febrero 12 para completarlo.
Esto te dara mas que tiempo suficiente si quieres probarlo. Todo mundo (me incluyo) esta hablando maravillas de este, asi que si no te has decidido te estas perdiendo de un excelente producto, especialmente si usas Windows Vista. Es importante resaltar que los product keys estaran disponibles aun despues del 12 de Febrero.
Los product keys para el Beta de Windows 7 seguiran disponibles. Asi que si bajaste Windows 7 pero no obtuviste un product key, podras hacerlo aun despues del 12 de Febrero.
Los subscriptores de MSDN y Technet no necesitan preocuparse de ninguna fecha, estos podran bajarlo durante toda la fase Beta
La pagina para bajarlo esta aqui
Monday, January 19, 2009
Multiples perfiles por usuario en Twitter
Quisiera que existiera algo asi
http://twitter.com/BlackTigerX/technical
http://twitter.com/BlackTigerX/personal
http://twitter.com/BlackTigerX/family
Creo que hay muchos beneficios
- Algunos de nosotros tenemos cuentas multiples, una para cada lenguaje.
- Alguna gente incluso usa diferentes redes sociales similares a Twitter, una para cada motivo (personal, profesional, etc).
- Cuando me subscribo a alguien en twitter, generalmente quisiera ver contenido sobre X (tecnico, personal), pero no Y.
- Reduccion de ruido.
- Permitiria hacer busquedas en twitter en "etiquetas" especificas y poder encontrar contenido mas relevante (gracias @alexbriseno).
Se podrian subscribir a todos tus perfiles publicos si asi lo desean.
Las herramientas de twitter tendrian que cambiar un poco, para especificar cual "etiqueta" o perfiles especificos a donde mandar los tweets.
Creo que reduciria bastante el ruido, ya que podrias usar la misma cuenta para escribir sobre diferentes cosas, cada una en su rama separada.
Entre mas lo pienso, mas me gusta esta idea.
Y si, este es mi perfil en twitter...(Al menos para el contenido tecnico en ingles)
Sunday, January 11, 2009
Disponibilidad de Windows 7 beta extendida hasta Enero 24
Debido a una enorme demanda, la experiencia al bajarlo no ha sido ideal asi que hemos escuchado y tomado las medidas necesarias para que sea una buena experiencia. Hemos escuchado claramente que muchos de ustedes quieren checar la beta de Windows 7 y como resultado, hemos decidido remover el limite inicial de 2.5 millones por las siguientes 2 semanas (hasta Enero 24). Durante este tiempo tendras acceso al beta aun si el numero de usuarios excede 2.5 millones
Lo puedes bajar aqui
fuente: Windows Team Blog
Saturday, January 10, 2009
Sobre el nuevo favicon de Google
Las ideas para los favicons las obtienen de un concurso donde todo mundo puede mandar ideas, el favicon que fue originalmente mandado fue este:
André Resende, un estudiante de licenciatura en computer science de la Universidad de Campinas en Brazil, mando el diseño que inspiro nuestro nuevo faviconMe parece que la version original es mucho mejor que la que ellos sacaron, la que ellos hicieron me parece muy... brillante, aunque mi esposa dice que si le gusta mas, a ustedes que les parece?
fuente
Friday, January 09, 2009
Windows 7 beta disponible al publico (a los primeros 2.5 millones que logren bajarlo)
Thursday, January 08, 2009
Primer post desde Windows 7 beta
Estoy corriendo Windows 7 beta 64bit en mi Mac usandoVMWare Fusion, aun en esta configuracion todo se ve muy bien, definitivamente mejoras importantes sobre Vista, quitaron muchas de las ventanitas molestas de confirmacion de UAC en areas donde simplemente tiene sentido como usuario no tenerlas. La nueva barra de tareas es muy intuitiva, talvez me tome un poco de tiempo adaptarme a esta, pero es que yo la uso diferente que la mayoria de la gente que he visto. Mi barra de acceso rapido (quick launch) no esta!!, definitivamente voy a necesitarla de regreso (creo, veremos si hay algo con que suplirla).
La nueva herramienta de captura de pantallas es buenisima, parecida a la que se encuentra en la Mac, para los usuarios que siempre han usado Windows creo que sera muy util y facil de usar, es como el "print screen" en asteroides; puedes capturar pantallas en modo libre, area rectangular, ventanas y pantalla completa, muy intuitiva y muuuy rapida, de hecho es instantanea.
Talvez esto es lo que Vista debio haber sido, todo lo que he leido de la gente que ha probado Windows 7 ha sido muy positivo en todas las areas, este post es solo un "yo tambien!"
Asi que animense a bajar el beta, realmente vale la pena. Como ya les habia mencionado, estara disponible al publico a partir de este viernes 9 de Enero.
Windows 7 beta disponible para subscriptores MSDN y Technet
ah! claro, no tienes una subscripcion a MSDN subscription, no te preocupes, estara disponible al publico este viernes
por supuesto tambien lo puedes encontrar en algun Bittorrent (mucho cuidado con lo que bajas e instalas)