Walter Poch

This user hasn't shared any biographical information

Homepage: http://wpoch.com.ar

Jabber/GTalk: walter.poch


Posts by Walter Poch

PostgreSQL Schema Output

Obteniendo un listado de tablas, columnas y tipo de datos de un PostgreSQL

Hoy me encontraba trabajando para un proyecto propio, en el cual tengo que interactuar con un sistema legacy (+10 años) montado sobre un servidor de base de datos PostgreSQL.

Como se pueden imaginar, el esquema de la base de datos no es muy amigable, los nombres de las columnas poco descriptivos, y las foreing keys cuasi inexistentes.

Para sumarle complejidad el desarrollo lo estoy haciendo a distancia, por lo que la comunicación con el departamento de sistemas es escueta y por mail. Por lo que para simplificar la misma decidí hacer una especie de “diccionario de datos”, en el cual pienso documentar el esquema de la DB y el significado de cada tabla y campo.

Para hacer esto me topé con que en internet fue difícil encontrar un query SQL que me diera esta información, así que luego de una pequeña renegada pude solucionar, teniendo este SQL como output:

SELECT
	c.relname as "Table",
	a.attname as "Column",
	pg_catalog.format_type(a.atttypid, a.atttypmod) as "Datatype"
FROM
	pg_catalog.pg_attribute a
	INNER JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
		LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
	a.attnum > 0
	AND NOT a.attisdropped
	AND n.nspname = 'public'
ORDER BY
	c.relname ASC,
	a.attname ASC,
	pg_catalog.format_type(a.atttypid, a.atttypmod) ASC

Que nos dará como resultado algo como:

La consulta no esta optimizada, pero a mi me sirvió, quizás a alguno de ustedes le sirva como está o con algún que otro WHERE más.

Saludos,

Software que uso

Esta vez voy a hacer un listado del software que uso en mi día a día como trabajador.

Haciendo esto no sólo voy a tener un lugar de referencia para cuando formateo la pc (soy muy asiduo a hacerlo); sino que también un lugar para mencionarles a mis compañeros de trabajo y conocidos.

Bueno empecemos:

  1. Notepad++: el editor de textos que windows debería incluir en su instalación. Download
  2. TortoiseSVN: la forma más sencilla de utilizar el SVN bajo windows. Download
  3. WinMerge: En comparador de archivos y directorios que se integra con TortoiseSVN para hacer los diffs cuando hay algún conflicto. Download
  4. Launchy: Es un shortcut keystroker, o para el resto de nosotros es un lanzador de aplicaciones. Haces [Alt]+[Barra Espaciadora], se te abre una ventana donde pones el nombre de la aplicación [Enter] y listo la aplicación se ejecuta. Además de esto podes poner paths, y expresiones matemáticas. Para mi es de lo mejor que hay. Download
  5. TweetDeck: es la mejor aplicación para redes sociales que he encontrado, Twitter, Facebook , LinkedIn, MySpace.
  6. Log2Console: es un visualizador de logs para la librería log4net de .Net. Permite ver los logs que se envían por remoting, UDP, y ver logs de archivos en tiempo real. Hay otra aplicación MultiLogViewer, que la desarrollo mi amigo Sebastían Flores, pero no esta publicada. El día que lo haga voy a recomendar esa, porque es la que uso en el trabajo y tiene varias features que Log2Console no.
  7. Enterprise Architect: Es el mejor programa para modelado UML que he encontrado, es pago pero en las empresas que he trabajado tenían la licencia, sino van a tener que desembolsar algunos pesos dólares o ver si alguién lo tiene por ahí :P .
  8. Virtual Clone Drive: Es un software para montar imagenes de DVD o CD en la PC. Antes utilizaba DAEMON-Tools pero estos empezaron a incluir la barra de navegación de Ask.com y en un momento no era compatible con Windows 7 x64, por lo que probé el Virtual Clone Drive y me gustó. Download
  9. ImgBurn: Es un programa simple para grabar DVDs desde imágenes en el disco duro o simplemente con archivos del disco, es simple, ocupa poco y no es intrusivo, I like it :) . Download
  10. Eset NOD32: Es el antivirus que uso, es pago pero…. es bueno.
  11. CuteFTP: es el mejor cliente FTP que he probado, pero de nuevo es pago…
  12. Google Chrome: es lejos el mejor browser que existe, realmente vuela! Hacía mucho que venía cansado de lo lento que era Firefox para abrir una nueva ventana, bueno eso es tiempo del pasado, ahora con Google Chrome, click y listo a navegar :D
  13. Firefox: pesar a que es lento lo sigo utilizando por la cantidad de extensiones que hay.
  14. Firebug: indispensable para ver que esta haciendo la página actual,y sus estilos, JS, etc. No sé como podía hacer sitios sin esta extensión en el pasado.
  15. K-Lite Codeck Pack: es un instalador todo en uno para poder ver TODAS las peliculas y videos que bajes de internet.
  16. Skype: Útil para hacer video conferencias con parientes lejanos o para llamar a los 1-800-xxxxx de USA.
  17. VMWare Workstation: es el mejor software de máquinas virtuales que he encontrado. He probado VirtualPC de Microsoft, VirtualBox de SUN, pero ninguno me dió tan buenos resultados como VMWare. Lo único que es pago :(
  18. WinRar: Hasta ahora lo mejor que encontré para descomprimir archivos. Lo único también es pago :(
  19. ReSharper: es un plugin increíble para Visual Studio. Se anticipa a lo que querés hacer, ofreciéndote acciones contextuales y muchas cosas más. Lo único es pago, pero si podes hacer que en tu empresa lo compren no se van a arrepentir.
  20. VS Styles: es un conjunto de estilos para que el Visual Studio sea un poco más lindo. Son los de Zenburn que estan en el debate de CodingHorror: Is your IDE Hot or Not?.

Bueno eso es todo por hoy amigos :)

En el futuro pienso ir a agregando sobre este mismo post las librerías Open Source que uso e ir acomodándolo al post.

Por ahora le hago caso a Guy Kawasaki (@guykawasaki) en su frase “Don’t worry be crappy”

Ustedes que soft usan?, comentarios???

Estirpe Ingenieril

Las personas que trabajan mano a mano con la ciencia y la tecnología no son como las demás personas. Esto puede resultar frustrante para aquellos no-tecnicos que tengan que tratar con ellos. El secreto consiste en entender las motivaciones de estos personajes. Este articulo les enseñara todo lo que deben saber al respecto.

Test De Indentificación De Ingenieros

Una persona entra en un cuarto en el que un cuadro cuelga torcido. Podemos afirmar con seguridad que es un ingeniero si…

  1. Lo endereza.
  2. Lo ignora.
  3. Se compra un programa de CAD y se pasa los siguientes seis meses diseñando un marco autoajustable que funciona a base de energía solar, gritando de cuando en cuando su creencia de que el inventor del clavo no tenia ni idea de como hacer bien las cosas.

Respuesta correcta: “3?.

Ingenieros Y Sociedad

Los ingenieros tienen diferentes objetivos en lo que a las relaciones sociales respecto del resto del mundo. Las personas “normales” esperan conseguir de las relaciones sociales una serie de objetivos muy poco realistas:

  • Conversación estimulante y amena
  • Contactos sociales de importancia
  • Un sentimiento de integración entre los demás seres humanos

Al contrario que las personas “normales”, los ingenieros tienen unos objetivos racionales y bien definidos de lo que se debe esperar de la relación social:

  • Irse a casa tan pronto como sea posible
  • Evitar ser invitados a eventos aburridos
  • Demostrar superioridad mental y profundos conocimientos de todas las materias existentes

Facinación Por Los “Aparatitos”

Para el ingeniero, toda la materia del universo puede dividirse en dos categorías:

  1. las cosas que deben ser arregladas, y
  2. las cosas que deberán ser arregladas después de que haya tenido unos momentos para juguetear con ellas.

Los ingenieros resuelven problemas. Si no tienen problemas a mano en un momento dado, se crearan problemas nuevos. La gente normal no suele entender este concepto; ellos creen (erróneamente) que si algo no esta roto, no tiene por que tocarse. Los ingenieros creen que si no esta roto, es que todavía no tiene suficiente funcionalidad. Ningún ingeniero mira un mando a distancia de televisión sin preguntarse que se necesitaría para transformarlo en una pistola láser. Ningún ingeniero se da una ducha sin preguntarse si algún tipo de teflon podría convertir el ritual diario de la ducha en algo innecesario. Para el ingeniero, el mundo es una caja de juguetes sub-optimizados y carentes de funciones.

Vestimenta Y Apariencia

Las ropas son el objetivo de menor prioridad de un ingeniero, suponiendo que los requisitos básicos de temperatura y decencia estén cubiertos. Si ninguna extremidad esta congelándose o inmovilizada y no hay genitales o glándulas mamarias balanceándose abiertamente a la vista de todos, entonces el objetivo de la vestimenta se ha cumplido. Cualquier cosa añadida es completamente superflua.

Pasión por “Star Trek”

Todos los ingenieros adoran la serie y las películas de STAR TREK (y agrego yo: STAR WARS… quién no se muere por que estrene el EPISODIO I?) y las han visto unas cuantas docenas de veces cada una, por lo menos. Para ellos es un pequeño milagro, ya que los ingenieros de a bordo del USS Enterprise tienen categoría de héroes y a veces incluso llegan a tener relaciones sexuales con alienígenas. Esto es mucho mas interesante y sensual que la vida cotidiana de un ingeniero, que consiste principalmente en esconderse del mundo y hacer sexo sin la participación de otras formas de vida.

Salidas, Citas, Matrimonio, etc…

Salir con alguien nunca es fácil para un ingeniero. Una persona normal utilizara diversos métodos para crear un falso atractivo. Los ingenieros son incapaces de ello, pues supondría darle mas importancia al aspecto que a la funcionalidad. Afortunadamente, los ingenieros tienen una gran ventaja: son universalmente reconocidos como un excelente material para el altar: inteligentes, fiables, con un buen empleo, honestos y muy convenientes para tenerlos a mano cuando se necesita reparar algo. Así que, a pesar de que pocas personas se citarían con un ingeniero, la mayoría están deseando casarse con ellos, produciendo así hijos ingenieriles que tendrán unos trabajos excelentemente remunerados mucho antes de perder su virginidad. Los hombres ingenieros alcanzan su máximo atractivo sexual después que los hombres normales, convirtiéndose en increíbles imanes eróticos a partir de los 35 como poco. Para aclarar este punto pongamos algunos ejemplos de hombres técnicos realmente irresistibles:

  • Bill Gates
  • MacGyver
  • Etcétera

Las mujeres ingenieros se vuelven irresistibles cuando alcanzan la madurez sexual y permanecen en ese estado hasta unos treinta minutos después de su muerte clínica. Mas si el día es especialmente caluroso.

Honestidad

Los ingenieros son siempre personas honestas tanto en el campo técnico como en el personal. Por ello es siempre una buena idea mantenerlos alejados de clientes, intereses románticos, y en general todas aquellas personas incapaces de aceptar la realidad. Sin embargo a veces los ingenieros “modifican” la verdad para ahorrarse esfuerzos. Es decir, dicen cosas que suenan como mentiras pero que técnicamente no lo son porque no se espera que nadie se las crea. He aquí una lista practica:

  • “No modificare nada sin avisarte primero.”
  • “Te devolveré tu raro-exotico-y-caro cable mañana.”
  • “Necesito un nuevo ordenador para este trabajo.”
  • “No estoy celoso de tu nuevo ordenador.”

Ahorro

Los ingenieros son personas MUY ahorrativas. Esto no es debido a falta de dinero o tacañería, solo que cada situación de gasto es únicamente un problema de optimización: “¿Como puedo salvar este escollo conservando la mayor cantidad de dinero posible?”

Poder De Concentración

Si hay algo que verdaderamente distingue a un ingeniero es la habilidad de concentrarse en un tema hasta el con el medio punto de excluir cualquier tipo de interacción. Esto lleva a veces a declarar a algunos ingenieros muertos antes de tiempo. Algunas casas funerarias situadas en lugares donde suelen residir estas personas han implantado una normativa de chequeo antes de empezar a procesar los cuerpos. Cualquier persona con una titulación de ingeniero o con experiencia en la programación de ordenadores es llevada a una salita en la que permanece durante unos cuantos días para ver si el/ella sale del trance en ese tiempo.

Riesgo

Los ingenieros odian los riesgos. Intentan eliminarlos siempre que sea posible, por tanto. Esto es bastante razonable, ya que cada vez que un ingeniero comete un pequeño error, los medios de comunicación (gente de letras) montan un enorme barullo como si fuese el fin del mundo. Ejemplos de mala prensa para los ingenieros:

  • Hindenberg.
  • La lanzadera Challenger.
  • El telescopio espacial Hubble.
  • Apollo 13.
  • El Titanic.
  • Ford Pinto.

El calculo riesgo/recompensa en los ingenieros se podría traducir a algo como esto:

Riesgo: Humillación publica y la muerte de miles de inocentes.

Recompensa: Un certificado de “te queremos” cuidadosamente plastificado.

Siendo como son gente practica, los ingenieros sopesan esta situación y llegan a la conclusión de que el riesgo no es bueno. La mejor manera de eludir estos riesgos es advertir que un proceso es técnicamente imposible debido a razones que son demasiado complicadas para ser expuestas. Si este enfoque no es suficiente como para disuadir a los jefazos del proyecto, entonces el ingeniero se retira a una segunda línea de defensa prácticamente impenetrable: “Bueno, es técnicamente posible pero el costo de la operación seria muy alto.”

Ego

Conscientes de que un poco de ego siempre es bueno, hay dos factores fundamentales que influyen en la autoestima de los ingenieros:

  • Lo listos que son.
  • Cuantos aparatos alucinantes poseen.

La manera más rápida de hacer que un ingeniero resuelva un problema es declarar en presencia suya que el problema es imposible de resolver. Ningún ingeniero puede ignorar un problema imposible. Ninguna enfermedad o distracción es suficiente para distraer a un ingeniero de su tarea una vez que se ha prometido resolver el mismo. Este tipo de retos se suelen convertir rápidamente en algo personal – Una batalla entre el ingeniero y las leyes de la naturaleza.

Los ingenieros pueden pasarse varios días sin comida ni ningún tipo de higiene cuando están resolviendo un problema (otras veces es porque se olvidan). Cuando finalmente lo resuelven, experimentan una oleada de ego invadiendo su cuerpo que es mucho mejor que el sexo – incluyendo el que involucra a otras personas.

Nada es más amenazador para un ingeniero que la sola sugerencia de que alguien tiene más habilidad que él para algo. Las personas normales a veces utilizan este conocimiento a modo de palanca para extraer mas trabajo de un ingeniero: Cuando un ingeniero dice que algo no se puede hacer (una frase en clave que traducida quiere decir que no es divertido hacerlo), algunas personas inteligentes han aprendido a mirar al ingeniero con una mirada compasiva y decir algo como: “¡Oh! Ya veo… Bueno iré a preguntarle a (nombre de otro ingeniero). El sabrá como hacerlo.” Llegados a este punto, es mejor que la persona normal no se interponga entre el ingeniero y el problema, ya que este se lanzara a por ello como un chihuahua hambriento sobre una rodaja de mortadela.

“La categoría de vencido se obtiene después de haber luchado, y eso lo distingue del desertor y del cobarde”

(*) Nota: Cabe aclarar que esto no lo escribí yo. Mi novia lo encontró en internet, pero no se acuerda la fuente y yo no lo pude encontrar tampoco. En caso de que alguno sepa la fuente, por favor agregue un comentario con la misma. Muchas Gracias!! y espero que lo disfruten tanto como yo.

Cambiar Itercalación (COLLATE) de tablas en masa

Luego de un día entero de renagar con un problema de collation, ocurrido por usar SQL Compare de RedGate encuentro como solucionar el problema que ocurre al tratar de comparar dos columnas con diferentes collations.

Algoritmos de ordenamiento

En el post de Scott Hanselman’s Computer ZenBack To Basics: Algorithms and Going Back To Virtual School

Una página que muestra gráficamente animaciones de como proceden diferentes algoritmos de ordenamiento. Realmente genial!

http://vision.bc.edu/~dmartin/teaching/sorting/anim-html/all.html

Saludos!

Si la gente comprara autos como compra computadoras

Luego de leer el post de Angel “Java” Lopez – Noticias y enlaces II visté el post Good If People Bought Cars Like They Buy Computers y es EXCELENTE!!!!

Saludos!

Mi primer plugin de jQuery = jQuery.dotNet

Hola a todos,

En esta oportunidad lo que hice es un plugin para hacer llamadas a métodos .NET, ya sean Web Services o Page Methods de la forma más simple posible.

Ya que para llamar a los Web Services .NET exige un par de configuraciónes especiales que pueden encontrar aquí. Entonces lo que me propuse fue hacer un plugin que haga las llamadas más simple al estilo de $.getJSON(url, data, callback).

Bueno el plugin lo que hace es tan simple como:

$.callDotNet("GetCustomer", "{ customerId: 1}", onCustomerLoaded)

function onCustomerLoaded(customer){
alert("Name: " + customer.Name);
}

Esto nos permite casi transparentemente obtener ya los objetos con el json parseado y manipularlos de JavaScript.

El proyecto lo pueden encontrar en: http://code.google.com/p/jquerydotnetplugin/

Y mantenganse al tanto que habrá más plugins! :)

Saludos, y happy coding!!

Resolviendo el error “Invalid Label” tras la llamada de eval(JSON)

Hoy después de renegar un buen rato integrando jQuery, JSON.Net y ASP.NET me encontré que el string JSON no lo podía evaluar del lado del cliente. FireFox me tiraba un error “Invalid Label” luego de renegar mucho encontré esta solución en willCode4Beer.com (http://willcode4beer.com/tips.jsp?set=jsonInvalidLabel)

Sólo basta con encerrar el string con el JSON entre paréntesis de la siguiente forma:

var someJsonString = getDataFromServer();
var myObj = eval( "(" + someJsonString + ")" );

en lugar de:

var someJsonString = getDataFromServer();
var myObj = eval(someJsonString);

Saludos, y happy coding!

Insertar valores en una Identity PK

Ya que estamos con el tema de las identities PK, aprovecho para hacer este post de ayuda memoria.

Para insertar valores en columnas Identity hay que hacer:

SET IDENTITY_INSERT ON [myTable] ON

y luego de hacer los inserts correspondientes apagar esto con

SET IDENTITY_INSERT ON [myTable] OFF

And happy coding!

Saludos!