jueves, 17 de diciembre de 2009

Cambiar de MyIsam a InnoDB

Al crear las tablas en MySql podemos equivocarnos y dejarlas MyIsam, si se quiere pasar a InnoDB se ejecuta el siguiente comando para solucionarlo.



TER TABLE "nombre de tabla" ENGINE = InnoDB;



Volver al inicio

Cambio de codificacion de caracteres en MySql

Cuando la codificación es distinta de algunas tablas y las tenemos que pasar toda a una codificación igual, lo que debemos de ejecutar es lo siguiente


ALTER TABLE "nombre de tabla" DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs;


ALTER TABLE "nombre de tabla" CONVERT TO CHARACTER SET latin1 COLLATE latin1_general_cs;


Con el primer renglón le decimos a la tabla que character va a tener por defecto, y con el segundo "convertimos" los character del que este al que le estamos poniendo en este caso latin1_generarl_cs.


Volver al inicio

miércoles, 16 de diciembre de 2009

Exportar conexions ssh

Más de una vez he tenido que configurar n conexiones ssh en distintos equipo, como la mayoría utilizo putty y este no tiene un exportar, entonces el trabajo de copiar el servidor, el puerto (normalmente el 22) de muchas conexiones, no es menor.


Entonces buscando un poco descubrí que putty escribe las conexiones en la regedit, entonces lo que debemos de hacer para exportar las conexiones de putty es abrir la regedit (inicio, ejecutar, regedit), luego buscar por "SimonTatham"(que dicho sea de paso es el creador de putty) luego, lo que hacemos es exportar esto en un .reg para poder ejecutarlo en otro equipo. Para exportar un punto de la regedit hacemos lo siguiente, primero buscamos luego de encontrar lo que queremos, en la carpeta de la izquierda hacemos click derecho, exportar, y guardamos el archivos en algún lugar conocido, esto nos genera un .reg.


Con este archivo en el nuevo equipo, lo ejecutamos y esto nos carga la carpeta con todos las mismas conexiones.



Volver al inicio

viernes, 11 de diciembre de 2009

Editor de Tags mp3's

Siguiendo con el tema ya les comente en el post anterior como actualizar nuestros tags desde Internet, bueno ahora lo que les quiero comentar cual es el editor de tags que uso, ya que es el que me parece mas fácil y practico.


Yo uso Mp3-Tags Generator, es muy básico, lo único que uso de el es la edición de los tags, no utilizo para nada el reproductor (la mitad de las veces anda). No es el mas lindo pero es el mas rápido que he encontrado para modificar lo que necesito.


Volver al inicio

Tags de mp3, bajarlos desde Internet

Me pasa a mi, y supongo que a todo el mundo, que tengo millones de mp3's y estos intentan estar ordenados, o por carpetas, o por autores, o por genero o por casualidad, es decir tirados ahí como vengan, además unos los baje, otros se los robe a algún amigo, otros los ripeo yo etc., entonces nunca se sabe como van a estar los tags de los mp3.


Entonces mi idea era intentar que los tags se actualizaran automáticamente desde Internet. Empecé a buscar por Internet y hay 2 grandes meta base de datos con tags de mp3's. Una es paga, por lo cual la descarte y la otra es frece, y tiene varios programas que la pueden usar, el que yo utilice (que supuestamente es el primero o el oficial digamoslo así) es MusicBrainz Picard, es sus inicios solo tenia versión para Linux, pero en la actualidad ya tiene para Windows también.


La forma de usarlo es muy fácil, primero seleccionamos un archivo, o una carpeta (esta es mas interesante) después le damos en analizar y el solo empieza a recorrer todos los mp3 y los va pasando a la derecha, y poniéndolos en un CD, el CD que a el le parece que coincide con nuestro mp3, además arregla los tags, por ejemplo la primer letra le pone mayúscula, arregla el autor, etc. Después que termina de procesar todos los archivos, lo que podemos es hacer click en Buscar, esto se fija en Internet si los mp3 que me quedaron sin calificar si se pueden calificar de alguna manera.


También tenemos la parte donde nosotros aportamos a la comunidad y es al Enviar PUIDs, que es eso, bueno todo mp3 tiene una huella digital acústica, y se supone que es única, entonces al enviar esto y al cargar bien los tags, la base de datos se va cargando para que otros la utilicen.


Ahora que tan efectivo es? bueno no les voy a mentir, yo analice miles y miles de mp3, y la conclusión que saque es que la música, digamos mundial, léase artistas de renombre, o clásicos de hace años, o de lugares que tiene mucha población (digamos EEUU, Brasil) esta anda muy bien, pero por ejemplo con Folclore Uruguayo ahí tiene todavía un poco de problema, por ejemplo a Estrmin, Pepe Guerra, Los Olimareños, ni los conoce, a Zitarrosa si, etc. Entonces es acá que los usuarios debemos de empezar a trabajar para que esta música sea cargada en la base de datos.



Volver al inicio

Aumentar volumen de mp3's

Me ha pasado mas de una vez que los mp3 que tengo están en un volumen muy bajo, entonces empecé a buscar en Internet cual programa me sirve para aumentar su volumen.


Bueno la búsqueda no demoro mucho y encontré mp3gain, con el cual se puede realizar esto, no solo de a un mp3, sino que en masa. El soft tiene una versión estable 1.2 y una beta 1.3.4, ambas realmente son viejas, lo cual me daba un poco de miedo en usarlo ya que yo tengo Windows 7, entonces supuse que ni lo podría instalar, pero funciono a la perfección, además cuenta con versiones para varios sistemas operativos (Linux, Mac).



Volver al inicio

viernes, 4 de diciembre de 2009

Java, Tomcat, Cambio de hora

Se que el titulo no dice mucho, pero en Uruguay, se cambia el horario en el verano, entonces en algunas aplicaciones que corren bajo tomcat, este a veces se marea con la hora y cuando ponemos una fecha, el sistema solo cambia la fecha para un día antes.


Esto lo que hace es bastante complicado pero muy fácil de solucionar, lo que hay que decirle es al arrancar tomcat, exportar una variable que utiliza java.


Entones yo supongo que estamos en un servidor Linux, y que al arrancar tomcat que lo hacemos con un script de inicio en /etc/init.d, le pasamos unos parámetros para que la maquina virtual de java se levante con alguna memoria mínima, máxima, etc. Entonces lo que hacemos es lo siguiente



export JAVA_OPTS="-Xms512M -Xmx1200M -XX:MaxPermSize=384M -XX:PermSize=128M -Duser.timezone=GMT-03:00"


Lo que interesa para el cambio de día, es la ultima parte (-Duser.timezone=GMT-03:00) esto hay que configurarlo según la zona horaria.


Luego solo con reiniciar tomcat la aplicación ya no se "mareara"con la hora.



Volver al inicio

martes, 24 de noviembre de 2009

Cloud que mas se pude decir

Cloud = Nube


Es un termino que se esta poniendo de moda o que ya esta de moda, entonces vamos a dar un rápido pantallazo de que es, y como nos puede server, convenir, etc.


Para se mas exactos de lo que voy a hablar es de Cloud Computing (de aquí en delante Cloud)


Gmail, es una aplicación que trabaja en la modalidad Cloud, que ni mas ni menos es un servidor de correo, pero la diferencia es que los correos no están en mi maquina sino que están en algún lugar del mundo, en algún servidor que no se que sistema operativo tiene atrás, que no se nada de nada, solo que maneja mis correos y que yo lo utilizo porque es el mas fácil de usar, es el mas lindo, etc. y no no tengo que encargarme de nada, ni respaldo, ni limpieza, ni actualización ni nada.


Flickr es otro ejemplo.


Pero esto no es todo, Cloud se divide en 3 niveles, GMail, también el Office 2010 que tiene una modalidad que se puede usar desde un navegador, Flickr y muchos mas, están en el nivel superior, si se quiere el que menos técnicos debemos ser para consumir estos servicios.


Los 3 niveles de Cloud son:


- Aplicación, en este nivel encontramos a gmail, flickr, etc.


- Infraestructura, recientemente Microsoft lanzo Azure, que consta de un montón de servicios, ejemplo un sql, a grueso modo seria como tener un servidor windows con un sql, .net, etc. en la nube.


- Arquitectura, el primer representante de este nivel es amazon, con sus servicios, en este punto es como tener un servidor en la nube.


Que ventajas me da esto, bueno empecemos con unos pocos ejemplos para entender, supongamos que tenemos una pequeña empresa en la que necesitamos manejarnos con correo, entonces como ya vimos, utilizaríamos el correo de gmail. El segundo ejemplo seria tengo una aplicación .net, pero no tengo dinero (o simplemente ganas) para comprar un servidor, entonces contrato azures y cuelgo mi aplicación ahi. Ahora supongamos que soy mas técnico y que tengo una aplicación, la cual puede ser linux, windows o lo que sea, entonces elegimos el que mejor nos convenga, contratamos en amazon el servicio y hospedamos ahí nuestra aplicación.


Otras ventajas y nada despreciables, es que nuestra aplicaciones pueden ser escalables, por ejemplo hoy contratamos un servidor con poco ram, poco disco, pero si vemos que necesitamos mas solo hay que contratarlo, obviamente pagando un poco mas y listo. No tenemos que encargarnos de hacer respaldos, mantener los equipos, tener equipos de respaldo, etc.


Depende del contrato y de la empresa los minutos por mes que esta bajo el servicio, normalmente es muy poco pero ...


No solo hay cosas buenas, por ejemplo si hay algún desastre natural, o solamente se nos cae Internet, ahí no vamos a tener sistema.


Seguridad de los datos, es un tema muy discutido, pero nuestros datos estarán en servidores de otros, se supone que hay contratos de confidencialidad, pero al ser servidores en cualquier lugar del mundo las normas de los distintos lugares pueden hacer que las cosas que en un lugar son permitidas en otro no.


Bueno y así se puede seguir con cosas buenas y cosas malas, lo mejor es investigar y hacer pruebas con cosas no criticas para empezar a investigar y sacar conclusiones. La forma de pagar el servicio es muy variado puede ser por uso, por procesamiento contratado, etc. todo depende de la empresa, por ejemplo gmail es gratis.


Como todo es algo nuevo que vino para quedarse, entonces no se puede dejarlo pasar, hay que analizar que usar pero hay que conocer las limitaciones que esto tiene.



Volver al inicio

lunes, 9 de noviembre de 2009

Informix - LongVarChar - Genexus


Para que lo vayan teniendo en cuenta para los que en algún momento su aplicación tenga que correr con informix, y este hecha en Genexus, cuando el campo es LongVarChar (me paso con un lonvarchar muy grande, de 2000 o mas), si se hace un new o un update se tiene que hacer trim.



Ejemplo



&variable = longvarchar(2000)


Atributo = longvarchar(2000)




Si tenemos lo siguiente


For each


Where …


Atributo = &variable


Endfor




Esto al compilar da error, y el error no dice nada de Atributo sino de algún otro atributo.


Pero si hacemos lo siguiente, anda bien, es mas probé guardar en ese campo algo de más de 300 caracteres y lo guarda bien.



For each


Where …


Atributo = trim(&variable )


Endfor



Lo mismo ocurre en un new, deberia de ser algo asi


new


Atributo = trim(&variable )


...


endnew



Volver al inicio

sábado, 7 de noviembre de 2009

Configurar Informix para usar con Genexus

Se me presento el siguiente inconveniente, me dejaron un equipo Linux con Informix instalado y tengo que configurarlo para que funcione con una aplicación Genexus.

Recordando viejas épocas puede crear una base de datos con dbaccess, para esto tenes que entrar al equipo Linux y loguearte con el usuario informix, luego ejecutas dbaccess y te sale un administrador para ejecutar consultas, eliminar crear, tablas, bases, etc.

Entonces con esto llego a crear la base de datos, luego eligió el dbspace (alguno que este configurado), luego en la parte de logs le pongo none (aquí empieza el problema).

Entonces para que genexus pueda utilizar la base de datos esta debe de ser transaccional, entonces cuando creas la base debes elegir log o buggered log, pero como no lo hice ahora con unos comanditos vamos a solucionar el problema.

Ejecutamos lo siguiente


ondblog buf <nombreBase> (si vas a configurar buffered log)


ondblog unbuf <nombreBase> (si vas a configurar unbuffered log)

cualquiera de los dos comandos tienen que ejecutarse sin aplicaciones conectadas a la base. Si todo funciona bien, debería devolver 0.


Luego hay que ejecutar un respaldo para que se activen los cambios.

Podes simular un respaldo ejecutando:



onbar -b -F


Con esto la base de datos esta bien configurada, pero ahora debemos definir el modelo genexus, obviamente elegimos como dbms informix, como trabajo con java web, lo que se debe de definir es una conexión jdbc, luego en las propiedades del dbms

en JDBC Driver ponemos custom,

en Custom JDBC Driver ponemos com.informix.jdbc.IfxDriver,

en Custom JDBC URL ponemos el string de conexión jdbc:informix-sqli://servidor:puerto/base:INFORMIXSERVER=ol_.......

Obviamente modificamos el servidor el puerto, etc, y debemos de verificar que el jdbc que tengamos que tenga las carpetas com, informix, jdbc, ifxdriver, sino debemos de modificar esto.

Con estos puntos ya podríamos trabajar con genexus con informix.


Volver al inicio

jueves, 5 de noviembre de 2009

Instalación de bin y rpm

En un equipo suse que no tenia conexión a internet tenia que instalar java, lo busque en internet y lo mas fácil era un .bin, pero como se instala un bin?


Es fácil solo hay que ejecutarlo, por ejemplo:


./java.bin


y listo.


Para recordar un poco algo que hace mucho que no utilizo, porque actualmente me gusta mucho mas Ubuntu, instalar un rpm, es también fácil


rpm -i java.rpm



Volver al inicio

ChkConfig en suse

Muchas veces he tenido que crear los script para que al iniciar un Linux este levante las aplicaciones, por ejemplo tomcat, mysql, etc.


Bueno los script de inicio se ponen en /etc/init.d/ y normalmente me copio alguno ya existente y lo modifico a mi elección para que al hacer stop me baje la aplicación y start me la levante.


Con esto estoy seguro que al arrancar el equipo este servicio se va a levantar, pero me esta faltando un punto importante, lo tengo que agregar a la carpeta RC (esto depende del sistema operativo se ubica en un lugar u otro), y crear los links S y K, para que en el arranque en determinado modo (multiusuario, grafico, etc) levante este servicio.


Bueno en suse es mas fácil que en el resto, ya que tenemos un comando que lo hace todo mas fácil, el comando es chkconfig.


Por ejemplo para apagar el arranque en los modos 345 ponemos lo siguiente



chkconfig -level 345 mysql off


esto hace que al arrancar en modo 3 no se levante mysql


ahora para que si levante en vez de off lo ponemos on.



Volver al inicio

Ejecutar Reorg en linux y windows

Lo que nos pasa normalmente es que queremos ejecutar la reorg de genexus directamente desde gx, ya que al configurar el DBMS bien, entonces gx hará todo por nosotros, pero a veces cuando la reorg es muy grande, o se tiene que hacer por internet, esto puede durar mucho.


Entonces lo mejor es respaldar la reorg y luego directamente ejecutarla.


Si el equipo es un Linux como es mi caso se debería de ejecutar el siguiente script



export DISPLAY=:0



java -cp GxUtils.jar:.:GXClassR.jar:Reorg.jar:mysql.jar Reorganization -force


si es Windows se debe de ejecutar este script



"ruta de java"\java -cp GxUtils.jar;.;GXClassR.jar;Reorg.jar;mysql.jar Reorganization -force -nogui


Para que esto funcione se deben de tener los jars GxUtils y GXClassR de genexus, el archivo que se genera al guardar la Reorg (daremos una pequeña explicación después), y el jdbc de conexión, que en este caso es mysql pero puede ser cualquiera, sql por ejemplo, todos en una sola carpeta.


El archivo de la reorg se puede exportar directamente de genexus, para esto en el modelo, luego de correr la reorg en el equipo local, se ejecuta el programa WinDeveloper, esto lo que hace es llamar a un programa (que tiene muchas cosas para hacer por ejemplo hacer un war de la aplicación) win, java en mi caso, que te deja exportar el programa de reorganización, entonces buscamos en el menu y ejecutamos la exportación de la reorg, luego podemos incluir en el archivo Reorg.jar los sesteos de conexión de la base de datos (usuario, contraseña, servidor) o podemos no incluirlos (cosa que aconsejo), si elegimos esta ultima opción, entonces en la misma carpeta donde están los jars debemos de poner el reorg.cfg que tenga los datos del servidor, que es idéntico a el client.cfg.


Entonces con todos estos archivos en una carpeta, nos paramos en la carpeta y ejecutamos el script que menciones (se puede crear un bat o sh dependiendo del sistema).


Al correr el script si todo esta perfecto, se debería de impactar la base de datos, si el sistema es windows se mostrara la clásica ventana de reorg de genexus.


Lo mas importante es tener los parámetros de conexión bien, ya sea en el Reorg.cfg como en el modelo de gx si se elije que el Reorg.jar tenga estos parámetros.


Luego como (en mi caso) la aplicación es java, en el servidor tengo que tener instalado java.



Volver al inicio

jueves, 29 de octubre de 2009

Windows 7 - Windows Vista

Bueno me toco cambiar de notebook y por desgracia el que me compre no traía Windows xp, y por defecto venia instalado con Vista.


Cabe aclarar que utilizo Windows porque Genexus lo que mas utilizo solo anda en Windows, anda muy bien en Windows xp y con algunas complicaciones (nunca lo probé) en vista, nunca escuche si aunque o no en 7, si no fuera por Genexus mi sistema operativo por defecto seria linux, en mi caso Ubuntu, también cabe aclarar que la vez que lo quise probar y le instale VmWare con maquinas virtuales con Windows, realmente dejo mucho que desear (VmWare), se caía muy seguido.




Bueno en este no voy a explicar como hacer andar genexus en windows sino que voy a comentar cual fue mi impresión de 7.




Como dije el S.O. por defecto fue vista, el cual cargaba muy lento, el consumo de ram era excesivo, el aspecto visual bastante mejor pero para ahorrar ram lo mejor como siempre es dejar el Windows gris y feo.


Entonces conseguí un Windows 7 y deje instalados los 2. Primero que nada me encanto que detecto casi todos los dispositivos, siendo que el notebook era muy nuevo y tenia partes que los drivers recién habían salido. Por suerte en la pagina del fabricante estaban todos los drivers, asi qeu a descargar e instalar.


Siguiendo con Windows, el consumo de ram es mayor y bastante al de xp, pero esto es algo en lo que hay que empezar a pensar al pasarse a los S.O. nuevos, es decir al comprar un equipo, preferentemente que tenga bastante ram.


Después igual que vista (aunque a mi entender un poco mas lindo) la parte gráfica realmente mejoro bastante (mejoro bastante pero no invento nada, mas que nada robo ideas de Linux).


Una cosa que no me gusta es el nuevo inicio, la forma de mostrar los iconos la verdad que no me acostumbro (es un poco igual a la forma que se muestran en kde).


Después los programas por defecto que tiene, son casi los mismos, el clásico paint, la calculadora, los juegos hay alguno mas que están lindos, es decir lo mismo pero un poco mas lindos.


El panel de control se cambio todo, y ha mejorado bastante en el tema de la seguridad, el firewall por ejemplo ahora esta muy muy interesante para investigar, para los fanáticos de la seguridad van a poder jugar bastante con esto (ojo no estoy diciendo que sea lo mas seguro), también hay muchos cambios en como se desinstalan los programas, como se configura la pantalla, el protector de pantalla, etc. en esta parte es la que cambiaron mas y hasta que no me acostumbre voy a seguir extrañando a xp.




Bueno en resumen, como dije nunca utilice vista, pero las veces que por alguna cosa trabaje en una realmente me agarraba los pelos, ahora con 7, la verdad que eso no paso. Entonces si no fuera que tengo que trabajar en xp (hoy por hoy trabajo con maquinas virtuales) recomendaría ampliamente 7 a las personas que tiene de 3Gb de ram para arriba, y una buena tarjeta de vídeo, si no son los agraciados de tener una buena maquina, les diría muy seriamente que siguieran con xp, que por mucho tiempo va a seguir siendo un muy buen S.O.



Volver al inicio

sábado, 17 de octubre de 2009

Importar x registros de mysql

La problemática que tenia era que una base de mysql de un cliente tenia muchas tablas que eran muy muy grandes, y necesitábamos tener además de todas las tablas que eran chicas (que eso lo hicimos con mysqldump -u usuario -pcontraseña base tabla1, tabla2, ... > respaldo.sql, para saber el tamaño de las tablas analizamos un poco en information_schema de mysql y detectamos las tablas chicas, y luego con mysql -u usuario -pcontraseña base < respaldo.sql levantamos el respaldo) debíamos de las tablas grandes (por lo menos de la mayoría) obtener un determinado numero de registros.


Lo que estábamos haciendo era armando un ambiente de testing local con tablas del cliente.




Entonces la idea es ejecutar un select de los primeros 100 registros de una tabla, generar un .sql, y luego este .sql levantarlo en una base local.




Hay que destacar que la estructura de la base de datos no es un problema eso lo podemos replicar (jeje trabajamos con genexus).




El primer paso es en cliente ejecutar es siguiente comando




mysql -u usuario -pcontraseña base -e "select * from tabla limit 10" > tabla.sql


esto nos genera para una tabla un .sql con los primeros 10 registros.


Esto lo debemos de repetir para las n tablas que queramos.




Luego debemos copiar estos sql a nuestro servidor y ejecutar el siguiente comando




mysql -u usuario -pcontraseña base -e "load data infile 'tabla.sql' into table tabla1"


Esto lo que hace es al archivo tabla.sql levantarlo en la tabla que le indiquemos en este ejemplo tabla1




Con estos sencillos ejemplos podemos rápidamente (mas o menos porque lleva un tiempito de proceso) tener un servidor de testing con datos del cliente.


Volver al inicio

Variables de sesión con Javascript (sessvars.js)

El problema que se me presentaba era que todas las tecnologías que tenia para guardar y obtener variables de sesión en una pagina web eran con php, esto lo que hacia era hacer un pedido al servidor por php para que este obtuviera la variable en el cliente.




Entonces empecé a buscar un poco y encontré esta librería que no solo sirve para generar variables de sesión con javascript sino para mucho mas, pero lo que yo utilizo es solo este tema. La librería no es (para el tema de variables de sesión) gran cosa pero si es una muy buena idea.


La librería se llama SessVars.js, si buscan en Internet van a encontrar donde descargarla, y es totalmente gratis.




Primero que nada debemos de tener una inclusión del javascript en cada una de las paginas en las que vamos a utilizarlo, esto se hace de la siguiente forma









Luego cuando queremos guardar una variable de session hacemos lo siguiente




sessvars.usuario = val;


esto se lee de la siguiente forma, en la clase sessvars que va a ser digamos así, el contenedor de sesiones, se agrega la session usuario con el valor var. Si necesitamos luego definir por ejemplo una variable de sesión que sea nombre por ejemplo, ponemos sessvars.nombre = "pepe"




Y para recuperarla hacemos esto


usu = sessvars.usuario


esto se lee como que en la variable usu, nos queda el valor de la variable de sesión usuario.




Como ven es mucho mas fácil y sencillo que con php (por lo menos para mi) y realmente es muy muy rápido



Volver al inicio

sábado, 19 de septiembre de 2009

Genexus 9, Confirm en web

Estoy trabajando con gx 9 web y quiero hacer lo que en las versiones win es el conocido Confirm().


Un ejemplo de esto en win seria preguntarle si esa seguro si quiere realizar determinada acción, entonces el código seria algo así




Confirm("Estas seguro de borrar el archivo?',N)


if confirmed()


// eliminamos el archivo


endif


Bueno en web esto no anda entonces lo que se utiliza es un poco de los eventos html para esto.


Entonces seria algo así, tenemos un botón el cual al cliquearlo queremos que nos pregunte si realmente estamos seguros.




En el evento start ponemos algo asi


btn.JSEvent('onclick',"confirm('Realmente desea ...?')")




donde btn es el nombre del botón




luego en el evento del botón, solamente tenemos que poner el código para eliminar o hacer lo que deseamos.


Esto lo que produce es nos muestra una ventana Windows, en la cual nos pone el texto "Realmente ..." y nos pide que Aceptemos o Cancelemos, y se ejecuta el código del evento solamente si Aceptamos.



Volver al inicio

jueves, 17 de septiembre de 2009

GPS

Este post es un poco distinto a los otros, pero solo les quiero contar algo que yo no sabía, y como lo importante no es saber sino "tener el teléfono de quien sabe", le agradezco a Federico que me desasno.




Bueno la historia empieza así, hace poco me compre un teléfono que tiene GPS, y desde ese momento empecé a pensar un poco (cosa que me da muy de vez en cuando). Entonces yo sabía que el celular tenía una antena, y esta antena se conecta con los satélites para saber cuál es la latitud y longitud para que luego el celular o el equipo GPS nos muestre en el mapa la calle en que esta, etc. Etc.




Pero mi pregunta era, los satélites, ¿quién los paga? ¿De quién son?


Entonces como les comente mi amigo Federico que esta mucho mas empapado en el tema me comento que los satélites GPS son todo de Estados Unidos, y que ellos lo mantienen y hacen con ellos lo que quieren, por ejemplo me comento que hay 3 franjas de colores, que la normal es en la modalidad que los satélites andan siempre y que nos ubican muy bien, es decir hay un error muy pequeño, luego en la segunda franja, te dan la ubicación con 1 km de error, y en la última no te dan nada, y está claro porque no?, pienso yo (en esa época no tenia GPS así que no les puedo comentar) el 11 de septiembre cuando les tiraron las torres, que en ese momento se pasaría obviamente a la ultima franja. También tienen satélites GPS otros países (Rusia obviamente) pero que estos satélites y la norma se llaman distinto (es decir no se llaman GPS) y que no son accesibles para el resto del mundo.




Sé que no es muy técnico lo que comente pero es un buen punto si se quiere investigar un poco más.



Volver al inicio

sábado, 12 de septiembre de 2009

Data Provider Genexus X

La idea de este post no es enseñar lo que es un Data Provider, que es uno de los tipos de objetos nuevos en Genexus, sino solamente dar un pequeño ejemplo de como utilizarlo para tener en nuestra aplicación un menú superior.


El menú superior va a ser el clásico Dolphin menu, que se puede agregar como un User Control, por lo que debe de ser el mas usado hasta el momento.

Para empezar hay que agregar el usar control en nos guste, casi con seguridad va a ser en una Máster Page, con solo agregar el control se genera el objeto DPDolphinMenuData que es el dataprovider que vamos a modificar.

Como vemos ya se crea con un ejemplo, pero es muy estático, si queremos algo mas dinámico y que se cargue de una tabla debemos de modificarlo un poco.

Entonces supongamos que tenemos una tabla menú, en la que tenemos un MenuCodigo, MenuNombre, MenuDescripcion, MenuEstado, y MenuPrograma, la frutilla en la torta seria tener un MenuSeguridad, pero eso lo dejo para que ustedes lo hagan.

El código que tendría nuestro D.P. seria el siguiente


MenuData

{

MenuDataItem

where MenuEstado = 'A' // Activo

{

MenuID = MenuCodigo

MenuTitle = MenuTitle

MenuDescription = MenuDescription

MenuURL = MenuURL

}

}

Con esto lo que hacemos es recorrer toda la taba Menú, y a los ítems que están activos los cargamos al dataprovider, y con esto ya podemos mostrar esto en nuestra web.


sábado, 15 de agosto de 2009

Conatenar mp3's

Encontré un audio libro en Internet que esta en formato mp3, pero esta dividido en muchos archivos, estuve buscando algunos programas para concatenarlos y no encontré ninguno, pero en las búsquedas que hice me salio un comando en Linux que lo hace, y como es tan tan tan fácil, lo voy a postear.


Creo que seguir escribiendo ya es perder tiempo.




cat primer.mp3 segundo.mp3 ....... > todo.mp3




hay veces que Linux hace tan fácil las cosas que en windows son imposibles que todavía me sigue sorprendiendo.



Volver al inicio

miércoles, 12 de agosto de 2009

Ajax con prototype, un poco de javascript y JSON

El siguiente post intentara explicar todo lo mejor posible que es ajax y cómo usarlo con prototype que hace un poco mas fácil la vida.

Bueno la primer pregunta es para que me sirve ajax, o por que utilizarlo.
Bueno más que explicar que es ajax vamos a dar unos pequeños ejemplos para que lo entiendan.

Ejemplo 1, supongamos que queremos en una página de registro común, que se vayan validando los datos.
Como se hacía antes, se dejaba ingresar todos los datos, y luego cuando se confirmaba se verificaba todo, entonces si había algún error se le decía al usuario que es lo que estaba mal.
Como se hace con ajax, cuando el usuario digita por ejemplo el nombre de usuario, al tabular, ya le podemos decir si hay otro con ese nombre y que elija otro, cuando digita el mail, al tabular ya le podemos decir si es válido o no, etc, entonces al confirmar ya sabemos que está todo bien ingresado.

Ejemplo 2, el clásico campo país, el cual se carga de la base de datos, y son miles, entonces vamos a suponer que tenemos una consulta en la que se filtra por el país.
Como se hacía antes, bueno son varias las opciones, una es que se deje ingresar cualquier cosa y luego al hacer la consulta en la base de datos hacemos un like, la otra es poner un combo el cual sería enorme
Como se puede hacer ahora, en el texto donde se digita el pais, por cada una de las letras que el usuario va a digitar se va a buscar todos los países que contenga esas letras, ejemplo si digito a, muestro argentina, Argelia, Alemania, luego digito r (ar en total) muestro argentina, Argelia, y así sucesivamente.

Entonces, un poco más técnico, lo que hace ajax, es sin tener que refrescar la pagina, ir al servidor y obtener los datos de la base de datos, entonces esto lo que hace es que los usuarios vean mayor interactividad de la pagina.
Y algo que el usuario no ve, pero que hace ajax es que nos obliga un poco a los programadores a modularizar las cosas y sobre todo a separar un poco la interface de la lógica y de la persistencia.

Ahora vamos a empezar con la parte técnica.
Primero que nada para crear la instancia de ajax, tenemos que pasarle varios parámetros, entonces para facilitarnos la cosa vamos a crear una función javascript para hacer esto.
Entonces en un js, yo lo llamo libreria.js pero se puede llamar como sea, tenemos que crear una función con este código

function peticionAJAX(metodo,parametros,oncomplete){
this.parameters=parametros;
this.method=metodo;
this.onComplete=oncomplete;
}
Esta función no tiene nada complicado sino solo se cargan los parámetros al objeto peticionAJAX

Vamos a suponer un ejemplo en el que lo que queremos obtener son los usuarios de un determinado país. Entonces vamos a crear una función que nos va a escribir el html de la tabla donde se van a tirar los usuarios.

function BuscoUsuarios(pais){
miPeticion=new peticionAJAX('get','pais='+pais,FinBuscarUsuarios);
url="php/getUsuarios.php";
aRequest=new Ajax.Request(url,miPeticion);
}

Vamos a detallar cada renglón.
miPeticion=new peticionAJAX('get','pais='+pais,FinBuscarUsuarios);
aca lo que se esta haciendo es creando el objeto miPeticion, que es la función que creamos antes, con los siguientes parámetros, get, que es la forma que se va a obtener los parámetros el php, las opciones son 2, get o post, la regla en general es si se va a modificar datos en la base de datos deben pasarse los parámetros por post, si no se modifican es get.
el segundo parámetro son los parámetros que va a recibir nuestro php
luego el ultimo parámetro es el nombre de la función que se llamara cuando nos conteste el php con algún dato.

url="php/getUsuarios.php";
aca solo le decimos donde este el php, yo para ser prolijo tengo una carpeta php para los archivos php

aRequest=new Ajax.Request(url,miPeticion);
aca lo que hacemos es creamos la instancia Request de ajax, que es lo que quiere decir esto, en definitiva aca es donde se ejecuta el ajax.

bueno segun vemos ahora tenemos que tener un función llamada FinBuscarUsuarios, y un php que llamado getUsuarios.php

la función FinBuscarusuarios, es la que va a recibir el vector que nos devuelva el php y va a pintar en un html.
Empecemos por decir que tiene nuestro html ,bueno lo unico que nos interesa que tenga es una div que es en la que vamos a tirar el html, seria algo asi



Vamos a hablar un poco del php, y como dijimos en el encabezado, vamos a usar JSON, entonces el php deberia de ser algo asi
require_once('JSON.php');
include('conexion.php');
$json = new Services_JSON();
$b = Conexion();
$pais=$_GET["pais"];
$q="select * from usuarios where UsuPais= '$pais' ";

$rs=mysql_query($q);
$unCol=mysql_fetch_array($rs);
$i=0;
while($unCol != null){
$elCol=array('usu'=>$unCol["UsuCod"] );
$junCol=$json->encode($elCol);
$vec[$i++]=$junCol;
$unCol=mysql_fetch_array($rs);
}


if($i!=0){
$retorno=$json->encode($vec);
}else{
$retorno="NO_HAY_DATOS";
}
echo($retorno);
?>

Vamos a explicar un poco cada uno de los renglones empezando por la inclusión de JSON
En el primer renglón, como dije, estamos incluyendo la clase php JSON, les aconsejo bajarse la últimos (igual que prototype), mas adelante explicaremos más en detalle por que usar JSON.
En el segundo renglón, estamos incluyendo el archivo php para la conexión a al base de datos.
Luego creamos dos variables una de json y la otra de nuestra conexión
En el siguiente renglón es donde obtenemos el parámetro que nos envió la función, en nuestro caso es el país.
Lugo en los siguientes 3 renglones vamos a definir la consulta sql, y a posicionarnos en el primer registro.
Luego definimos la variable i que es la que va a recorrer el vector para el resultado, y empezamos a recorrer los datos que nos devolvió la base de datos.
Dentro del while lo que hacemos es primero obtener el dato concreto que necesito y creamos un vector, luego (aca empieza un poco de JSON) encodeamos este vector, y lo ponemos nuevamente en un vector, entonces vamos a tener un vector en el que va a tener todas las tuplas que obtuvimos de la base de datos, y en cada casillero del vetor, tendremos las tuplas que queramos, en nuestro cas la tupla consta de un solo registro, el usuario, pero si quisiéramos además del usuario, poner el país, entonces tendremos 2 datos.
Y al final lo que hacemos es si entramos por lo menos una vez en el while (if i!=0) entonces encodeamos nuevamente el vector entero que vamos a devolver

Con esto tenemos terminado nuestro php, que es el que se va a conectar con la base de datos.

Bueno entonces ahora lo que nos falta es la función que se llama cuando la consulta devuelve algún dato, es la función que pusimos en la que ya definimos, entonces sería algo así

function FinBuscarUsuarios(aRequest){
obj=$("mensaje")
jUnaCol=aRequest.responseText;
if ((jUnaCol == 'NO_HAY_DATOS') || (jUnaCol == '')){
obj.innerHTML = "Ocurrio un error, por favor intente de nuevo";
} else {
obj=$("contenedor");
var vec = jUnaCol.parseJSON();
...
}
}

Bueno explicaremos renglón a renglón que es cada cosa.
Primero que nada, si hay algún problema con la base de datos por ejemplo, entonces no llegamos a obtener ningún dato, en la pantalla del usuario le daremos un mensaje de error (ya les explicare como), entonces debemos de tener un div para desplegarlo (también ya les explicare).
El segundo renglón es el más importante, y acá es donde trabaja ajax, en este renglón lo que se hace es cuando el objeto php devuelve algo este renglón es el que se entera.
Después tenemos un if en el que si el resultado del php es que no encontró nada o si esta vacio entonces, se desplego un mensaje que es el siguiente renglón
Ahora si nos devolvió algo el php, entonces ahora debemos de escribir el html para desplegar en la pagina, y esto también lo tiraremos en una div (todo este código no lo pongo porque puede ser cualquier cosa).
En la siguiente línea debemos de des-encodear (no debe de existir la palabra, pero se entiende lo que quiero decir) el vector que encodemaos en el php (acá se utiliza JSON que es el que se encarga de enviar el vector de un lado al otro y optimizar esto).

Como les dije con esto ya estaría todo pronto, pero falta la parte que ve el usuario, hasta ahora nada de lo que pusimos tiene nada de interface, es decir no lo va a ver nunca el usuario, entonces te explicare brevemente que tienes que usar en tu html para que el usuario vea algo.
Como te mostré arriba con obj=$("mensaje") (esto del $ es algo de prototype, si no usaras prototype deberias de poner getElementByID) y obj=$("contenedor"), que son 2 div, es donde el usuario ve algo.
Entonces en el html tu lo único que tienes que poner es lo siguiente (o algo parecido, depende si queres poner scrolls, en distintos nivesles, etc. para mas datos investigar div en html)

y lo mismo para el contenedor, tu lo que tienes que hacer es investigar bien donde lo pones, como lo pones, etc.

Cuando en la función ponemos obj.innerHTML = " algun texto ", esto lo que hace es escribir directamente en la div, y el usuario ve lo que escribiste dentro de las comillas, pero si en vez de texto pelado, pones texto en el que tenga algo html, por ejemplo "hola
como
te va", esto se verá como un html y serán 3 renglones (espero ser claro, si no lo soy pruébalo).
Entonces la parte mas importante de todas es escribir bien el código html en la div contenedor, que ahi es donde mostraremos al usuario todos los usuarios que sean de un pais indicado.

Lo que nos falta para el html es incluir las librerías que utilizamos esto sería algo así


o cualquier otra que utlices


Con esto (obviamente es un ejemplo muy sencillo) ya estamos usando ajax y para el usuario va a ser mucho mas interactivo y no dependiendo tanto la conexión y el refresh de la pagina.
Para mí lo mas impórtate (del punto de vista del desarrollador) es que separamos la persistencia, la interfaz de usuario, y la logica, haciendo software mucho mas de calidad.

Un breve resumen para que veas que toda la chachara de arriba no es nada muy complicado.

1 - tener el php que nos devuelve los datos de la base de datos.
2 - tener las funciones en algún js que se ejecuten y cuando le devuelvan los datos pinten el html
3 - tener un html limpio (y es lo mas lindo de esto) en el que se mostraran los datos.

A continuación copiare las funciones y el php que he puesto arriba

function peticionAJAX(metodo,parametros,oncomplete){
this.parameters=parametros;
this.method=metodo;
this.onComplete=oncomplete;
}

function BuscoUsuarios(pais){
miPeticion=new peticionAJAX('get','pais='+pais,FinBuscarUsuarios);
url="php/getUsuarios.php";
aRequest=new Ajax.Request(url,miPeticion);
}

function FinBuscarUsuarios(aRequest){
obj=$("mensaje")
jUnaCol=aRequest.responseText;
if ((jUnaCol == 'NO_HAY_DATOS') || (jUnaCol == '')){
obj.innerHTML = "Ocurrio un error, por favor intente de nuevo";
} else {
obj=$("contenedor");
var vec = jUnaCol.parseJSON();
...
}
}

require_once('JSON.php');
include('conexion.php');
$json = new Services_JSON();
$b = Conexion();
$pais=$_GET["pais"];
$q="select * from usuarios where UsuPais= '$pais' ";

$rs=mysql_query($q);
$unCol=mysql_fetch_array($rs);
$i=0;
while($unCol != null){
$elCol=array('usu'=>$unCol["UsuCod"] );
$junCol=$json->encode($elCol);
$vec[$i++]=$junCol;
$unCol=mysql_fetch_array($rs);
}


if($i!=0){
$retorno=$json->encode($vec);
}else{
$retorno="NO_HAY_DATOS";
}
echo($retorno);
?>

Algunas funciones php y js

Algunas de las tantas funciones php y js que siempre hay que tener a mano




Primero las funciones js




obtener un una parte de un texto


res = origen.substring(0,3)


ejemplo "123456789" obtenemos "123"




obtener la posición de un caracter, o de un conjunto de caracteres


cadena.indexOf("4")


devuelve un numero menor a 0 si no existe, y si existe devuelve la posición


ejemplo "123456789" cadena.indexOf("4") = 3 (recordar que el 1 esta en la posición 0)


ejemplo "123456789" cadena.indexOf("23") = 1




eliminar los espacios antes y después de un texto


res = trim(origen)


ejemplo trim(" 123 ") = "123"


ejemplo trim(" 1 2 3 ") = "1 2 3"




obtener el largo de un texto


res = cadena.length


ejemplo texto = "123", texto.length = 3


ejemplo texto = "123 456", texto.length = 7








Ahora algunas funciones php




eliminar los espacios antes y después de un texto


$res = trim($origen)


ejemplo trim(" 123 ") = "123"


ejemplo trim(" 1 2 3 ") = "1 2 3"




obtener el largo de un texto


$res = strlen(cadena)


ejemplo texto = "123", strlen(texto) = 3


ejemplo texto = "123 456", strlen(texto) = 7




obtener un una parte de un texto


res = substr($cadena, 0, -4)




ejemplo $cadena = 12345678, substr($cadena , 0, -4) = 1234


ejemplo $cadena = 12345678, substr($cadena , -4) = 5678




bueno estas como dije son algunas, como son muy usadas y muy potentes las posteo.


Volver al inicio

domingo, 9 de agosto de 2009

JDownloader

Muchas veces he visto que la gente no sabe usar JDownloader, o no lo quiere utilizar porque es muy complicado. La verdad no lo entiendo porque para mi es de los soft. mas fáciles de usar.




JDowload se usa para descargar archivos de los servidores de RapidShare, MegaUpload, y muchos mas, sin casi ninguna acción por parte del usuario, a diferencia si lo bajan directo de la pagina que tienen que hacer muchas cosas hasta llegar realmente a bajarlos.




Entonces en principio precisamos el software, eso lo buscan en Internet y lo bajan (la pagina oficial es http://www.jdownloader.org/home)




Este software esta hecho con java así que no necesitan instalar nada, pero si necesitan java, en principio solo el JRE, esto también lo bajan de Internet, ambos programas son gratis, así que no tienen que conseguir ningún crack ni serian ni nada que se le parezca.




Luego de tener en zip, rar, tar o lo que sea como hayan conseguido el jdownloader, lo descomprimen en donde les quede mas cómodo. Dentro de la carpeta que descomprimieron van a tener un archivos, JDownloader.exe, que tiene un icono que es un mundo con una cinta amarilla, entonces ejecutan este programa (le hacen doble click por ejemplo) y esto lo que hace es abrir el programa, como se necesita abrir un puerto de tu sistema operativo si tienes algún firewal activado te va a pedir que abras el puerto, por ejemplo si es el de windows hay que poner desbloquear.




Si llegaste a este paso entonces ya se abrió el JDownloader, entonces ahora lo que hay que hacer es buscar en Internet los links para descargar (programas, películas, música, etc.), luego que estemos en la pagina que tiene los links, entonces lo que hacemos es copiamos (si los links están todos juntos mejor, pero si entre los links hay mucho mas texto, no importa copiamos desde el inicio hasta el final, jdownloader se va a dar cuenta cuales son los links para descargar) los links a bajar.


Con esto ya basta para que jdownloades si esta abierto se de cuenta que estas intentando bajar algo y lo pone en sus "pendientes de descarga" (LinkGrabber), y lo unico que hay que hacer es darle "Add al package", esto lo que hace es pasar a Downloaders, es decir que se van a descargar.


Luego de esto puede, si es la primera vez pedirnos que aceptemos los términos del servicio (esto lo hace para cada servidor), le decimos que si, y ya se empieza a descargar los archivos.




Arriba tenemos un "play" y "pause" para iniciar y detener nuestras descargas, quizás si es la primera vez tienes que configurar la carpeta donde se van a descargar nuestros archivos.


JDownloader también puede llegar a descomprimir nuestros archivos, por ejemplo si es una película en dvd, van a ser muchos pedazos de archivos los que vamos a tener que descargar y luego unirlos a todos en uno solo que puede ser un rar, iso, etc., para esto el programa debe de saber si los archivos tiene alguna contraseña, lo que hacemos es hacer doble click en el paquete y se nos abre abajo un lugar para poner la contraseña y si queremos ponerle un nombre al paquete, también si queremos una ruta auxiliar para descargar, etc.




Y listo, de ahora en delante jdownloader se encarga de todo, de poner los captcha, de esperar los segundos que haya que esperar, de continuar con la siguiente, etc.



Volver al inicio

viernes, 31 de julio de 2009

Ejecutar script sql en MySql

Tengo que administrar una base de datos en la que se utilizan varias tablas auxiliares para generar informes y otras cosas, entonces todos los días esas tablas las tengo que limpiar.


Como en el servidor ya tengo un cron con un script para borrar algunas carpetas temporales, la idea es agregar algo al script para que también me borre las tablas auxiliares.




Los pasos son generar un .sql que me borre las tablas. Seria algo así




use basededatos;


truncate tabla_auxiliar1;


truncate tabla_auxiliar2;


......




Esto lo guardamos en un archivo llamado script.sql (o como quieran llamarlo)




luego en el script que ya tenemos que nos borra las carpetas auxiliares agregamos lo siguiente.




mysql -u usuario_con_derechos -pcontraseña basededatos < script.sql




Con esto cuando se ejecute el script nos borrara las tablas.



Volver al inicio

martes, 28 de julio de 2009

Descargar videos Flash de Internet

Como varias veces me ha pasado, necesito bajarme algunos vídeos que son muy pesados de Internet, que están en formato Flv (flash) y guardarlos en mi equipo para poder verlos después.


Buscando un poco encontré Moyea Youtube FLV Donwnloader, es el mas fácil que he visto y realmente anda muy bien.



Volver al inicio

domingo, 26 de julio de 2009

Instalación de Joomla

Como ya he necesitado 3 veces instalar Joomla, y cada vez tengo que buscar como se hace para instalar (que realmente es muy fácil), entonces he decidido escribirlo.




Primero hay que descargarse Joomla, yo he descargado la versión 1.5.12.




Luego de alguna forma copiarlo al servidor, que en mi caso es un Linux Ubuntu server.




Luego en el Linux, con apache ya instalado, copiamos a la carpeta del apache, todo el contenido del archivo que bajamos (obviamente antes hay que descomprimirlo), se puede copiar a la ruta del apache (/var/www) o creamos una carpeta y lo copiamos ahí (/var/www/joomla por ejemplo)




Tenemos que crear la base de datos donde trabajara joomla, entonces desde el prompt hacemos lo siguiente




> mysql -u root -ppassword


> create database joomla;


> show databases;




con esto crearemos la base de datos y con el ultimo comando veremos si realmente esta creado.




Luego (supongo que el apache esta levantado y andando bien) se debe de empezar la instalación de joomla, esto lo hacemos escribiendo lo siguiente en el navegador


http://ip o nombre del server/joomla/installation/ (supongo que se creo una carpeta joomla)


Y seguimos las indicaciones que nos da el instalador de joomla.




Al final dependiendo si se puede escribir o no en el directorio del apache (/var/ww/joomla) podremos directamente acceder a la administración o al sito de ejemplo (que en uno de los últimos pasos de la instalación nos da la opción de instalarlos), si no dejamos escribir, entonces tenemos que crear el archivo configuration.php en la raíz de la carpeta de joomla con el contenido que nos da en la ultima pantalla. Luego como vemos también en la ultima pantalla la carpeta de instalación hay que eliminarla.




Entonces al final de todo en la ruta


http://ip o nombre del server/joomla


tenemos nuestro portal, o en la ruta


http://ip o nombre del server/joomla/administrator


tenemos la administración de nuestro portal.



Volver al inicio

sábado, 2 de mayo de 2009

Genexus,enviar mail con pdf adjunto

Esto lo he tenido que hacer 2 veces y como la primera fue hace algunos años y la otra fue hace unos días, en la segunda oportunidad estuve un rato largo acordándome de cada una de las cosas que hice en la primera.




La idea es que un proceso genera un pdf y automáticamente sin interacción del usuario se envía un mail (o muchos mail's).




Bueno en genexus para que se genere un reporte en formato pdf, lo que hay que hacer son 3 cosas.


1 - marcar que el reporte sea main


2 - call protocol como HTML


3 - una regla Output_file(&nombre, "pdf"); siendo nombre el nombre del pdf, con el .pdf




con esto genexus sabe que el reporte lo genera en formato pdf.




Ahora lo que queremos es que ese archivos se genere pero quede guardado en el servidor en alguna ruta que se pueda ,entonces cambiamos &nombre por el nombre completo de la ruta, por ejemplo /home/arch.pdf, y esa variable debe de llegar al reporte y debe de ser in, ejemplo


param(in:&nombre);


Y además en el call protocol hay que cambiar de HTML a Internal.




Con estos cambios tenemos el pdf en una ruta conocida del servidor, ahora lo único que hay que hacer es hacer algún proceso que envié el mail, para esto se pueden utilizar varias formas, pero lo que hay que hacer es una variable del tipo MailMessage, adjuntarle el pdf, MailMessage.attach(&nombre), y luego seguir con el resto de las cosas para enviar el mail.


Volver al inicio

Bat para respaldar archivos usando rar

El problema que tengo es el siguiente, tengo varias maquinas virtuales con ambientes de clientes, en las que en ellas le instalo la menor cantidad de programas para que ande lo mas rápido.


Como la mayoría de las maquinas son Windows, no puedo utilizar en tar y gzip de Linux.




Como tengo documentos muy importantes quiero que periódicamente se haga un respaldo de estos.




En Internet hay muchos programas que hacen esto, pero como dije no quiero instalar nada, así que esa no es una opción.




Me pongo a buscar en Internet y por consola DOS se puede hacer rar o zip utilizando winrar, pero repito no quiero instalar nada, entonces encontré la siguiente solución.




Solamente con copiar el programa de winrar, rar.exe, a una de estas maquinas virtuales, y hacer un bat que mas abajo detallare, se pueden generar respaldos muy fácilmente.




si por consola ejecutaremos rar.exe, nos da todos los parámetros que podemos utilizar, pero yo pongo un pequeño ejemplo abajo para que sea un punto de partida.






"C:\ruta\Rar.exe" a -ad -m3 -agYY-MM-DD-hh-mm Z:\nombrerar "C:\rutaarespaldar\"




C:\ruta\Rar.exe es donde copiamos el rar.exe


Z:\nombrerar es el nombre del archivo a generar


C:\rutaarespaldar es la carpeta que respaldaremos


a quiere decir que si existe el archivo entonces agrega


-ad añade el nombre de archivos la carpeta del archivo


-m3 es la compresión puede ir hasta 5


-ag le agrega al nombre del rar la fecha y hora, ejemplo z:\nombrerar-09-08-30-12-10.rar




Esto ahora lo que tenemos que hacer es o lo ejecutamos manualmente (muy tedioso), o lo ponemos en inicio, para que se ejecute cada vez que inicies la sesión, o lo agregas al programador de tareas (estas son las 3 opciones que se me ocurrieron).


Volver al inicio

domingo, 11 de enero de 2009

Comprimir determinados archivos

Tengo una carpeta la cual tiene cientos de archivos, de los cuales quiero hacer un tar.gz de solo alguno de ellos.


Utilizaremos una combinacion de find y tar para poder lograrlo.




find /ruta_de_carpeta -name "*.txt" | xargs tar -zcvf misarchios.tar.gz




con esto buscamos dentro de la carpeta ruta_de_carpeta los archivos con extension txt (aca se pude buscar lo que quieran) y los comprimimos en el archivo misarchivos.tar.gz



Volver al inicio