Imprimir en IE sin mostrar cuadro de diálogo de impresora.

jueves, 22 de marzo de 2012
Publicado por Ivan 6 comentarios

Primero que nada decir que este problema me surgió particularmente para poder imprimir en un punto de autoatención. En él se abre una navegador donde se muestra una página con las opciones, y se mandaría a imprimir un número o algo a la impresora. Cuando uno manda a imprimir en javascript con el clásico window.print() se levanta el cuadro de diálogo de la impresora para seleccionar las opciones para realizar la impresión. Y obviamente en este caso sería muy feo mostrar esa ventana al usuario y darle la opción de escoger qué hacer. Por eso lo primero que pillé por ahí fué una opción para firefox, entrando a la configuración de este se podía habilitar un modo de impresión “silencioso” donde no se muestra el diálogo de impresión. Hasta ahí todo bien, pero luego surgió el inconveniente de que debía usarse Internet Explorer, y no Firefox.

El caso es que luego de mucho investigar no pude dar con una solución satisfactoria, hasta que pillé el siguiente código que se pone en la misma página HTML:

<script language='VBScript'>
Sub imprimir()
       OLECMDID_PRINT = 6
       OLECMDEXECOPT_DONTPROMPTUSER = 2
       OLECMDEXECOPT_PROMPTUSER = 1
       call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
End Sub
document.write "<object ID='WB' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>"
</script>

Y luego, es cosa de llamar a la función imprimir(); desde javascript. Y funciona excelente!!. Así que ahí queda el dato por si a alguien le sirve, y espero que así sea.

Revalidar variables de $_POST a local.

miércoles, 21 de marzo de 2012
Publicado por Ivan 0 comentarios

En realidad este problema surgió en aquellos años donde la nueva versión 4.2 de PHP decidió traer por defecto el parámetro register_globals desactivado. Esto significó una gran mejora en seguridad, un gran problema para las aplicaciones que se colgaban de esta “funcionalidad” de php, y una buena cantidad de pitutos para solucionar esto.

Resulta que a día de hoy aún me aparecen de vez en cuando este tipo de trabajos, y de primera me daba el trabajo de explorar las variables que se necesitaban para entonces validarlas una por una. Pero recordé que habia un pequeño código que permite revalidar estas variables del $_POST en forma local nuevamente de forma fácil, así que para quién le sirva y para recordarlo personalmente igual de vez en cuando, el código es este:

if ($_POST) {
  foreach ($_POST as $key => $value) {
    $$key=$value;
  }
}

Lo que hace este código es que revisa todas las variables definidas en el $_POST, y crea las variables definidas en este arreglo en forma local con el mismo nombre con el cuál se pasó a este arreglo.

Y eso sería!. Espero que les sirva. Nos vemos!

Activar Dreamweaver CS4 Mac Os X Leopard

domingo, 23 de enero de 2011
Publicado por Ivan 0 comentarios

Si, en realidad es cosa de buscar, solo que siempre busco, me demoro un par de horas en encontrar, y cuando me vuelve a pasar lo mismo debo volver a gastar otro par de horas buscando. Asì que como me surgió el problema prefiero dejarlo aqui.

Antes que nada debemos cerrar cualquier aplicación CS4 que tengamos abierta. Mas vale prevenir que curar.

Deben realizarse 2 acciones: primero que nada vamos al terminal y copiamos lo siguiente:

sudo rm /Library/Application\ Support/Adobe/Adobe\ PCD/cache/*

Luego, copiaremos el siguiente comando:

sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts

Nos pedirá nuestra contraseña, y seguimos. Se nos abrirá un archivo en el TextEdit. Al final de lo que ya estè escrito, debemos copiar lo siguiente:

127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.adobe.com

Ahora salvamos el archivo. Solo "Guardar", no "Guardar como...".

Ahora abrimos el Dreamweaver, y cuando nos pida el serial ingresamos lo siguiente:

1325-0465-4684-3792-9574-8287

Y eso es todo!!!. Espero que les sirva a varios.




Problema columna computada persisted

miércoles, 19 de mayo de 2010
Publicado por Ivan 0 comentarios

En "el extraño caso" de hoy, està el de la columna computada persisted en SQL Server 2005. Cuenta la leyenda que luego de crear una columna computada persisted en SQL Server 2005, un informático se tuvo que enfrentar a problemas relativos a que no se pudieron realizar operaciones de update o insert sobre la tabla que tenìa asociada la columna computada, supuestamente porque los ANSI estaban mal definidos (ANSI_NULL, QUOTED_IDENTIFIER, ARITHABORT, entre otros).


Esto se debe a que las columnas computadas declaradas persisted permiten la indexación, al contrario de las no persisted, y como para indexar columnas computadas o vistas es necesario que los ANSI estèn ON, y estaban por defecto en la base de datos en OFF, entonces eso era lo que estaba provocando el problema.

Solución?. En realidad hay varias dependiendo de las condiciones. En mi caso particular decidí no hacerla persisted, por lo que entonces los ANSI ya no son exigidos, y todo funcionaría de maravillas. Y así fué, no hubieron mas errores en updates o inserts sobre la tabla.

Aprovecho de acotar que en realidad las columnas computadas son soportadas desde SQL Server 2000, pero en ese entonces no se soportaba la propiedad persisted, que fuè habilitada en SQL Server 2005 junto con la indexacion de vistas. A lo mejor por ahi va la cosa.

Renombrar columnas o tablas en SQL Server

lunes, 3 de mayo de 2010
Publicado por Ivan 0 comentarios

Ese era el problema!, como cambio el nombre de una columna o tabla en SQL Server??. Tenía una columna computada relacionada a otras dos columna, y todas debían desaparecer en beneficio de una columna que se llamaría igual que la columna computada. Para eso, cree una columna con un nombre distinto, actualice su valor en base al de la columna computada, y luego eliminé esas 3 columnas que no necesitaba. Y ahora, venía la parte en que debía renombrar la columna.

Para esto, existe un procedimiento almacenado llamado sp_rename, cuyo uso para renombrar una columna es:

sp_rename 'nombre_Tabla.nombre_columna', 'nuevo_nombre_columna', 'COLUMN'

El 'COLUMN' es invariable, siempre va. Y para cambiar el nombre a una tabla, más sencillo aún:
sp_rename 'nombre_antiguo_tabla', 'nombre_nuevo_tabla'.

Y esto gracias a otro personaje que me dió el dato, y que está aquí

Procedimiento almacenado de SQL Server demora mucho.

Publicado por Ivan 2 comentarios

Nuevamente el titulo es bastante genérico, por lo que paso a detallar el problema.

El problema era el siguiente: Uso powerbuilder para desarrollar, y en esta herramienta hay un objeto que es la piedrangular de powerbuilder, que es la datawindow. Es una datagrid pero con esteroides, buenos métodos y estados. En ella se especifica una consulta sql, y con eso retorna los valores en si misma, que pueden ser modificados, ingresados nuevos valores o eliminados, y luego se llama al método update de la misma, y solita construye los insert, delete o updates necesarios para que todo quede como lo dejamos en la datawindow.

En fin!, generalmente cuando debo hacer informes en ella genero la consulta en el administrador de sql server para asegurarme que me traiga los resultados que necesito, y luego la copio en la datawindow. Esta consulta tenìa un parámetro, por lo que en el administrador usaba una variable para simular el funcionamiento que tendría en la datawindow, y bien!!!, demoraba 6 segundos en traer lo que que necesitaba. Copié en la datawindow, lo probé, y..... rayos!!!, demoraba 11 minutos!!!!.

Pensé que a lo mejor la datawindow podría estar mal, la hice de nuevo, le copie la consulta, y lo mismo. No me explicaba como la misma consulta demoraba tanto ejecutada desde la datawindow, y tan poco desde el administrador de SQL Server. Luego, pensé que llamando los resultados desde un procedimiento almacenado podría apurar un poco las cosas, y mi sorpresa fué mayor cuando luego de crear el procedimiento lo ejecuté en el mimo administrador de sql y rayos!!!, 11 minutos tambien!!!!.

Luego de pegarme un par de cabezasos decidí preguntar a mis colegas para ver si a alguno le habia pasado lo mismo, y llegué al jefe. Ahí me comentó que tampoco sabía porqué, pero que eso se arreglaba tomando el parametro pasado al procedimiento, asignandolo a una variable dentro del procedimiento, y luego usando dicha variable en vez del argumento del procedimiento.

Extrañó!, debería ser lo mismo, pero probé y chan!!!!, pasamos de 11 minutos a 6 segundos. El jefe suponía que seguramente los argumentos de los procedimientos almacenados son almacenados en un área no optimizada o muy concurrida, tal que a lo mejor por eso hay demoras excesivas para acceder al valor de dicho argumento cuando el procedimiento almacenado lo necesita.

En resumen, la solución pasa por tomar las variables del argumento del procedimiento, y ponerlas en variables locales al procedimiento, y luego ejecutar el procedimiento almacenado. Con esto, asunto arreglado!!!!!


Pc se reinicia solo

lunes, 15 de febrero de 2010
Publicado por Ivan 0 comentarios

Bueno, la verdad es que este problema puede estar dado por hardware o software. Este caso apunta a un problema de software. Y la mejor forma de identificar cuando el origen está en el software es ver el arranque del sistema operativo, e irse fijando en las distintas fases del inicio: desde que aparece la pantalla de la bios, el logo de windows con la carga del mismo, la pantalla de bienvenida, y generalmente por ahì o antes es que falla. Si siempre se reinicia en el mismo punto, o definitivamente el sistema no parte, lo mejor es tratar de recurrir a un buenisima herramienta de Windows incorporada en XP llamada Restauraciòn del sistema.

Ahora... como acceder a un funcionalidad de windows si no podemos entrar a windows?. Pues en estos casos debemos recurrir a una herramienta externa, en particular un LiveCd que trae muchas funcionalidades interesantes, llamado ERD Commander. Sabía que en un principio la compañia que le daba soporte era Wynternals, pero fué comprada por microsoft, por lo que la mayoría de las fuentes está en blogs y pagina similares. A la pagina que le tengo fe es taringa, así que pueden descargar Erd Commander 2008 aquí.

Y echenle un vistazo. Una herramienta interesante es Locksmith, que permite cambiar las contraseñas de cualquier cuenta de usuario de windows. Todo puede ser usado para el mal, pero por otro lado me ha pasado muchas veces que los mismos usuarios me preguntan cuàles son sus propias contraseñas. Eso!!!


Crear ringtone para iphone

domingo, 14 de febrero de 2010
Publicado por Ivan 1 comentarios

La verdad es que el mérito no es mío. Estaba buscando la forma de crear un ringtone para el iphone y busqué qué opciones habian y todas se referían a un método mediante el cuál hay que usar iTunes para convertir el fragmento de un archivo de música a .acc y luego renombrar este archivo a m4r, que es el formato de los tonos del iphone y que reconoce itunes, siempre y cuando dicho fragmento no sea mayor a 40 segundos.


Sin embargo la última versión de iTunes remueve esa opción, agregando además la opción de "crear tono" pero que es válida solamente para las canciones compradas en la iTunes Store.

Otras opciones son programas que permiten generar los ringtones directamente, pero no me gustan esos programas ya que, si te gusta piratear por ser programas poco conocidos es muy dificil pillarlos, y si lo quieres comprar no vale la pena gastar plata por un programa tan sencillo. En ese caso sirve más un método para crear ringtones mediante GarageBand que encontré aquí. Y en ese caso si lo quieres piratear es mucho más facil pillarlo por ser más conocido, y si es por comprarlo entonces el mismo programa te servirá para mucho más que para solo hacer ringtones.

Ahh!, olvidé mencionar que por ser GarageBand, esta opción esta disponible solo para OS X. Para la conversión de archivos en Windows recomiendo mucho FormatFactory, que también permite crear ringtones para el iphone. Este software es gratis y se puede descargar desde aquí

No se puede iniciar Microsoft Office Outlook 2007

jueves, 1 de octubre de 2009
Publicado por Ivan 82 comentarios

Me pasó justamente que me vinieron con ese problema: en Windows Vista, al abrir Microsoft Outlook 2007, apareció una ventana de error que indicaba que “No se puede iniciar Microsoft Outlook. No se puede abrir esta ventana”. Y resulta que mi cliente resultó bien alentado: se contactó con Microsoft para solucionar el problema y le dieron 2 opciones, que no quiso intentar por miedo a perder su información, por lo que me llamó para que lo ayudara con ese problema.

La primera opción era hacer partir Outlook sin complementos, para lo cuál había que ir al botón de inicio, y en el campo de texto de búsqueda escribir “Outlook /safe”, que cumplía con iniciar el outlook sin complementos. Y cuando leí esa instrucción me percaté que en vista el campo de texto de búsqueda además hace la función de “Ejecutar” en Windows XP. Wena!!. Aunque yo solía usar la combinación de teclado Windows+R para abrir la ventana con la opción de ejecutar, pero se pueden usar ambas en Vista. Esta primera opción no produjo resultados, y el error se mantuvo igual.

La segunda opción apuntaba a que el archivo de datos podía estar dañado, para lo cuál proponen el uso de una herramienta que viene incluida con la instalación de Office, en la carpeta “Office12” dentro de archivos de programa, llamada “Scanpst.exe”. Esta herramienta abre una ventana en la cuál uno escribe o selecciona la ubicación del archivo .pst con los correos, y verifica si dicho archivo no está dañado. Y si bien la herramienta finalmente encontró errores y los reparó, no solucionó el problema

Luego, por mi parte, probé a colocar el dvd de instalación de Office y repararlo, para luego seguir con la opción de desintalar, y luego volver a instalar, pero eso tampoco arregló el problema.

Finalmente después de navegar un poco dí con la solución: en el mismo campo de texto de búsqueda de Windows vista, o en la opción ejecutar, hay que escribir “Outlook.exe /resetnavpane”. Y magia!!, outlook se abre sin ningun problema. Asunto solucionado.

Ahora, qué pasó??, no lo sé a ciencia cierta. Deduzco por el nombre del comando y por lo que he visto que hay programas que instala barras de herramientas en outlook, y si a lo mejor se desinstaló dicho programa y no se pudo desregistrar correctamente de outlook, entonces la barra de navegación queda corrupta. Por ende el comando probablemente resetea la configuración de las barras de navegación a su forma predeterminada, lo cuál arregla el problema, aunque en todo lo anterior estoy elucubrando. Pero bueno!!, se arregló el problema.

Encontrar tablas con determinada columna en SQL Server

lunes, 15 de junio de 2009
Publicado por Ivan 0 comentarios

Wow!, hace tiempo que no escribía nada aquí en mi blog, y es que el tiempo es algo que me ha faltado muhco, sumado al hecho que cuesta escribir cosas en la pega, por temor al jefe o temas similares. Pero bueno!!, quiero volver a escribir sobre como soluciono problemas que voy teniendo, y espero que esta vez me vaya bien.

Ok, en este caso, ocurre que necesitaba encontrar en qué tablas se encuentra una columna. Esto debido a que no siempre se conservan las claves foráneas, y solo se mantienen relacionadas de hecho producto de un mismo nombre de columna en ambas tablas (o en aquellas relacionadas con el mismo campo). Esto ayuda mucho a la hora de escribir joins o similares consultas sql, por lo que considero es una muy buena práctica.

Bueno, volviendo al tema, necesitaba encontrar las tablas que tenían esta columna, para determinar cuál era la tabla con los valores relacionados a esta clave. Y para eso, via VSToolsForum encontré una excelente consulta que me ayudó a resolver el tema:

select sysobjects.name
from syscolumns
left join sysobjects on sysobjects.id = syscolumns.id
where syscolumns.name like 'myFieldName'
order by 1

Y obviamente, debemos reemplazar el ‘myfieldname’ con el nombre de la columna que estamos buscando, y listo!!, veremos las tablas que estabamos buscando. De hecho, en la pagina aparece otra consulta que cumple con el mismo objetivo.