Subi unos screenshots, mostrando cómo usé la interfaz web de PyArduinoProxy para testear unos LM335.
https://github.com/hgdeoro/py-arduino-proxy/wiki/Example%3A-Testing-LM335
viernes, 3 de junio de 2011
Probando LM335 con PyArduinoProxy
Posteado por
Software and Motorcycles
a las
2:46
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
arduino,
pyarduinoproxy,
python
miércoles, 25 de mayo de 2011
Chau Skype!
La compañía Skype fue comprada, asi que ya es hora de buscar alternativas!
- Jitsi - http://www.jitsi.org (audio/video)
- Blink - http://icanblink.com (Linux/Max/Win, audio, envío de archivos, compartir escritorios, conferencia múltiple)
- Ekiga - http://www.ekiga.org (Linux/Win, audio/video)
- GoogleTalk - http://www.google.com/talk/ (Linux/Mac/Win/Web) permite hacer llamadas a numero fijos!
- Empathy - http://live.gnome.org/Empathy (audio/video)
- LinPhone - http://www.linphone.org/ (Linux/Win/Mobile)
- QuteCom - http://trac.qutecom.org/ (Linux/Win)
- Twinkle - http://www.twinklephone.com/ (Linux)
Posteado por
Software and Motorcycles
a las
15:32
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
sábado, 14 de mayo de 2011
Flyback diode
Son diodos utilizados para eliminar repentinos picos de voltaje. Estos picos se producen en circuitos altamente inductivos, cuando el voltaje en dicho circuito baja o es eliminado.
Hay más información (en inglés) en: http://en.wikipedia.org/wiki/Flyback_diode
La teoría de circuitos demuestra que cuando la corriente que pasa por un inductor se detiene, aparece una tensión a tavés de dicho inductor, en sentido contrario de la corriente que se detuvo. Esta corriente es llamada "flayback". Esa corriente no "aparece de la nada": es originada en la energía almacenada en el campo magnético del inductor, o sea, el campo magnético creado por la corriente inicial, libera su energía como electricidad (pero en sentido opuesto a la corriente inicial).
![]() |
| Tomada de WikiPedia: http://en.wikipedia.org/wiki/File:Flyback_Diode.svg |
Esto lo traducí (con ayuda de Google) de http://digital.ni.com/public.nsf/allkb/336D3653F6B6387386256F36005BE09F
Hay más información (en inglés) en: http://en.wikipedia.org/wiki/Flyback_diode
Posteado por
Software and Motorcycles
a las
17:49
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
electronica
Capacitores para suprimir ruido eléctrico
Encontré que es aconsejable utilizar capacitores en los circuitos, para suprimir cualquier "ruido" que pueda generarse, sobre todo si se usan motores (me imagino que también debe ser importante si se usan reles, por ejemplo).
http://www.seattlerobotics.org/encoder/jun97/basics.html
http://www.seattlerobotics.org/encoder/jun97/basics.html
En inglés: Bypass capacitors help filter the electrical noise out of your circuits. They do this by removing the alternating currents caused by ripple voltage. Most digital circuits have at least a couple of bypass capacitors. A good rule of thumb is to add one bypass capacitor for every integrated circuit on your board. A good default value for a bypass cap is 0.1uF. Higher frequencies require lower valued capacitors.
Traducido por Google: Los condensadores de desacoplo ayudan a filtrar el ruido eléctrico de los circuitos. Lo hacen mediante la eliminación de las corrientes alternas causada por variaciones de la tensión. La mayoría de los circuitos digitales tienen por lo menos un par de condensadores de desacoplo. Una buena regla es agregar un condensador de desacoplo por cada circuito integrado en la placa. Un buen valor por defecto es 0.1uF. Las frecuencias más altas requieren capacitores de menor valor .Otras páginas interesantes que encontré sobre el tema:
Posteado por
Software and Motorcycles
a las
16:13
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
arduino,
electronica
viernes, 6 de mayo de 2011
Py-Arduino-Proxy + LCD
Ya estoy buscando la forma de utilizar LCDs desde Py-Arduino-Proxy :-D En este caso, muestro la temperatura (con un LM35)
Posteado por
Software and Motorcycles
a las
13:25
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
arduino,
pyarduinoproxy,
python
sábado, 30 de abril de 2011
Como tomar screenshots automáticamente y convertirlos en video
Primer paso: crear la secuencia de screenshots, usando la utilidad "scrot":
- s=1; while /bin/true ; do scrot -q 80 "${s}.png" -e "convert -crop 800x600+0+24 ${s}.png ${s}.jpg" ; let s=s+1 ; sleep 1 ; done
Atención! Este comando sobrescribirá cualquier archivo preexistente! Para continuar una secuencia pre-existente, se puede cambiar el valor inicial de "s". Por ejemplo, si ya tenemos desde el archivo 1.png hasta el 71.png, podemos usar s=72:
- s=72; while /bin/true ; do scrot -q 80 "${s}.png" -e "convert -crop 800x600+0+24 ${s}.png ${s}.jpg" ; let s=s+1 ; sleep 1 ; done
Segundo paso: generar un video con dicha secuencia de archivos, usando "ffmpeg":
- ffmpeg -r 4 -b 512k -i %d.jpg OUTPUT.avi
Actualización: para que ffmpeg funcione, los nombres de los archivos deben ser secuenciales, y sin ningún archivo faltante. Por lo tanto, si antes de generar el video queremos borrar algunos archivos, vamos a tener problemas. Pero hay una forma muy fácil de crear una secuencia de archivos, arreglando los 'faltantes':
- max=1000 ; ren=1 ; for f in `seq 1 $max` ; do [ -e $f.jpg ] && { [ $f -ne $ren ] && { echo mv -i $f.jpg $ren.jpg ; } ; let ren=ren+1 ; } ; done
Ese pequeño script generará por pantalla todos los 'mv' que hace falta ejecutar para arreglar la secuencia. Si quitamos el 'echo', el script ejecutará directamente el comando 'mv'. Ajustar 'max' al número más grande dentro de la secuencia.
Posteado por
Software and Motorcycles
a las
2:31
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
linux,
ubuntu
martes, 26 de abril de 2011
os.path.normpath() de Python y las //
No es la primera vez que me sucede! Otra vez caí en el extraño funcionamiento de os.path.normpath()!
os.path.normpath('/esto') = '/esto'
os.path.normpath('/esto/') = '/esto'
os.path.normpath('//esto') = '//esto'
os.path.normpath('//esto/') = '//esto'
os.path.normpath('///esto') = '/esto'
os.path.normpath('///esto/') = '/esto'
Quizá las 2 barras se mantienen al suponer que es un path referenciando algún recurso como se hace en las redes Windows, al estilo //equipo/recurso_compartido.
Solución: usar strip('/') y concatenar un '/' al inicio (suponiendo que siempre trabajamos con path absolutos).
'/' + os.path.normpath('/esto').strip('/') = '/esto'
'/' + os.path.normpath('/esto/').strip('/') = '/esto'
'/' + os.path.normpath('//esto').strip('/') = '/esto'
'/' + os.path.normpath('//esto/').strip('/') = '/esto'
'/' + os.path.normpath('///esto').strip('/') = '/esto'
'/' + os.path.normpath('///esto/').strip('/') = '/esto'
os.path.normpath('/esto') = '/esto'
os.path.normpath('/esto/') = '/esto'
os.path.normpath('//esto') = '//esto'
os.path.normpath('//esto/') = '//esto'
os.path.normpath('///esto') = '/esto'
os.path.normpath('///esto/') = '/esto'
Quizá las 2 barras se mantienen al suponer que es un path referenciando algún recurso como se hace en las redes Windows, al estilo //equipo/recurso_compartido.
Solución: usar strip('/') y concatenar un '/' al inicio (suponiendo que siempre trabajamos con path absolutos).
'/' + os.path.normpath('/esto').strip('/') = '/esto'
'/' + os.path.normpath('/esto/').strip('/') = '/esto'
'/' + os.path.normpath('//esto').strip('/') = '/esto'
'/' + os.path.normpath('//esto/').strip('/') = '/esto'
'/' + os.path.normpath('///esto').strip('/') = '/esto'
'/' + os.path.normpath('///esto/').strip('/') = '/esto'
Posteado por
Software and Motorcycles
a las
14:55
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
python
lunes, 25 de abril de 2011
Para acceder Arduino desde Python y scripts shell
He creado una aplicación para acceder a Arduino desde Python. También incluyo unos ejempos para poder accederlos desde el shell. El proyecto está en https://github.com/hgdeoro/py-arduino-proxy
Utilizando un LM35 para medir la temperatura. Necesita 3 cables, 5V, masa, y la "señal".
En el Arduino, conecto los respectivos cables, y el de señal al puerto analógico 0.
El sensor lo dejo afuera, a pleno rayo de sol, y por ahora bajo la protección de un simple fondo de botella.
Agregar plugin de Munin
Sólo hacer un link del script al directorio de plugins:
Y ahora sólo resta reiniciar munin-node.
Y testear que todo haya quedado funcionando correctamente:
Luego de dos días:
El circuito al que se conecta el LM35 sería así:
Utilizando un LM35 para medir la temperatura. Necesita 3 cables, 5V, masa, y la "señal".
En el Arduino, conecto los respectivos cables, y el de señal al puerto analógico 0.
El sensor lo dejo afuera, a pleno rayo de sol, y por ahora bajo la protección de un simple fondo de botella.
Agregar plugin de Munin
Sólo hacer un link del script al directorio de plugins:
root@eeepc:~# cd /etc/munin/plugins/ root@eeepc:/etc/munin/plugins# ln -s \ /usr/local/py-arduino-proxy/src/arduino_proxy/tests/analog_read_lm35_munin.py \ analog_read_lm35_munin_ root@eeepc:/etc/munin/plugins# mcedit ../plugin-conf.d/munin-node ## AGREGAR ESTO AL FINAL DEL ARCHIVO [analog_read_lm35_munin] user root env.TTY_DEVICE /dev/ttyACM0 env.ANALOG_PORT 0
Y ahora sólo resta reiniciar munin-node.
root@eeepc:/etc/munin/plugins# service munin-node restart munin-node start/running, process 22555 root@eeepc:/etc/munin/plugins#
Y testear que todo haya quedado funcionando correctamente:
root@eeepc:/etc/munin/plugins# munin-run analog_read_lm35_munin temp.value 10.11
Luego de dos días:
El circuito al que se conecta el LM35 sería así:
Posteado por
Software and Motorcycles
a las
0:24
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
arduino,
pyarduinoproxy,
python
viernes, 15 de abril de 2011
Para zafar del problema con Arduino + Ubuntu
He armado un sketch para "zafar" de los problemas que hay con los Arduinos cuando queremos accederlos desde Ubuntu. Sucede que por un bug, tendremos problemas al intententar subir sketchs desde Ubuntu, si en ese momento el Arduino envía información por puerto serial (por ejemlpo usando usando Serial.println()).
La solución definitiva es actualizar el firmware. Otra (la que implementé) es "pausar" la ejecución del programa, hasta que se detecta un "LOW" en el pin 12.
El programa es:
Y la forma de generar le "LOW" en el pin 12 sería:
Lo que hago es dejar la resistencia conectada, así el Arduino funciona con normalidad. Cuando necesito subir un programa nuevo, le saco la resistencia y lo reinicio, y puedo comunicarme sin problemas.
La solución definitiva es actualizar el firmware. Otra (la que implementé) es "pausar" la ejecución del programa, hasta que se detecta un "LOW" en el pin 12.
El programa es:
Y la forma de generar le "LOW" en el pin 12 sería:
Lo que hago es dejar la resistencia conectada, así el Arduino funciona con normalidad. Cuando necesito subir un programa nuevo, le saco la resistencia y lo reinicio, y puedo comunicarme sin problemas.
Posteado por
Software and Motorcycles
a las
18:59
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
arduino
sábado, 19 de marzo de 2011
(Injusta) comparación de OpenStack Object Storage y MongoDB
Aclaración: antes que nada, quiero aclarar que no es justo para MongoDB compararlo con Object Storage. Mi intención es sólo comentar mi experiencia.
Ante la necesidad de guardar una gran cantidad de archivos en una aplicación web (más de 80GB), realicé pruebas con MongoDB (versiones 1.6.5 y 1.7.3), ya que entre las bases de datos NoSql, es la única que encontré que provee el API necesario para guardar y obtener archivos almacenados (GridFS) (además permite ser configurado muy fácilmente para que los datos almacenados se repliquen entre distintas instancias de MongoDB). Pero me encontré con 2 problemas:
- Poca eficiencia en la utilización del espacio en disco: en las pruebas realizadas, al insertar archivos por un total de 12GB, en disco se utilizó 21GB.
- Dificultad para recuperar el espacio ocupado de archivos borrados: el borrado de los archivos es un "borrado lógico", y para recuperar el espacio que utilizan, hace falta ejecutar "repairdb()", que básicamente, hace una copia de la BD, de todos los datos no-borrados... esto es un problema si la base de datos es más grande que el espacio libre de la partición.
Este tipo de problemas los pude superar usando OpenStack Object Storage (versión 1.2.0):
- Utilización de espacio en disco: al insertar archivos por 4202MB, en disco se utilizó 4281MB.
- Recuperación de espacio en disco: el espacio es liberado al borrar los archivos.
En cuanto a las pruebas de stress:
- MongoDB en ningún caso dió error
- al realizar pruebas con Object Storage, he obtenido algunos "Read timed out" al momento de subir los archivos.
Cabe aclarar que MongoDB lo corria directamente en mi computadora, en cambio, Object Storage estaba instalado en una guest KVM.
En cuanto a la instalación:
- la instalación de MongoDB me llevó muy poco tiempo y es muy fácil
- la de Object Storage me costó más, sobre todo la utilización desde Java, ya que el cliente de Java necesita validar correctamente los certificados SSL con los que se configuró el servidor (algo que no pasa con el cliente Python).
Posteado por
Software and Motorcycles
a las
17:25
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
mongodb,
object storage
jueves, 17 de marzo de 2011
Funciones privadas para unittest.assertRaises()
Para facilitar el uso de unittest.assertRaises() podemos usar funciones privadas. Esto al menos con python < 2.7 (ya que en python 2.7 assertRaises() permite ser usado como "context manager").
Posteado por
Software and Motorcycles
a las
11:42
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
python
sábado, 12 de marzo de 2011
OpenStack Object Storage - Ejemplo con Python
Adjunto un pequeño ejemplo en Python.
----- Inicio del ejemplo -----
----- Fin del ejemplo -----
----- Inicio del ejemplo -----
----- Fin del ejemplo -----
Posteado por
Software and Motorcycles
a las
21:22
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
viernes, 11 de marzo de 2011
Probando OpenStack Object Storage
Luego de unas horas, pude tener andando mi instancia de OpenStack Object Storage. El servidor lo instalé en un Ubuntu 10.04.2 LTS (Lucid), siguiendo las instrucciones de Installing OpenStack Object Storage on Ubuntu.
Algunas cuestiones a tener en cuenta:
Algunas cuestiones a tener en cuenta:
- En la página de "Configuring OpenStack Object Storage", al crear los "self-signed certs" utilizando el comando "openssl req -new -x509 -nodes -out cert.crt -keyout cert.key", en un momento solicita "Common Name (eg, YOUR name) []:"; aquí hay que ingresar el nombre del host que se utilizará para conectarse, o el IP con el que se accederá al Object Storage desde la red. Por ejemplo, en mi caso, utilicé "192.168.122.233". Al conectarnos desde Python, no parece influir el "Comon Name" elegido, pero sí influye al conectarnos desde Java.
- En vez de usar "swift-ring-builder account.builder create 18 3 1", utilicé "swift-ring-builder account.builder create 18 1 1", ya que sólo hay 1 servidor. Quizá se pueda usar 3, y de esa manera, al agregar servidores, los datos se distribuyan automáticamente...
- Al ejecutar los comandos "swift-ring-builder account.builder add ...." hay que especificar "DEVICE"... Bueno, aunque el parámetro se llama "device", esto NO se refiere a la partición! Sino al nombre del directorio donde está montada la partición donde se guardarán los datos. El servicio supone que las particiones donde se guardarán los datos están montadas en "/srv/node/DEVICE". Por ejemplo, si los datos los vamos a guardar en la partición /dev/sdb1, y montamos esa partición en "/srv/node/sdb1", entonces DEVICE = sdb1. NO hay que tomar a DEVICE como /dev/sdb1, esto es un error. Por ejemplo, en mi caso, utilice "sdb1" como DEVICE (para seguir la nomenclatura de la documentación), pero en realidad utilizo la partición "/dev/vdb1", ya que es un instancia de KVM y utilizo virtio para mapear los discos. Por lo tanto, en el fstab tengo: "/dev/vdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0".
Posteado por
Software and Motorcycles
a las
1:47
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
viernes, 1 de octubre de 2010
Monitoreo de servicios "filtrados" con Icinga e iptables
Con iptables se pueden permitir conexiones a un puerto TCP (como para ser monitoreado con Icinga o Nagios) y a la vez evitar que se utilice el puerto para acceder al servicio.
# Icinga
iptables -A INPUT -s $IP_ICINGA -p tcp --dport 139 --syn -j ACCEPT
iptables -A INPUT -s $IP_ICINGA -p tcp --dport 139 -j DROP
# Mantenerlo al utlimo, para q' funque filtrado de conexiones de Icinga
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Con el ejemplo anterior, monitoreo el servicio de Samba, pero no permito que se reciba nada más que los paquetes TCP que crean la conexion. Los paquetes siguientes son eliminados.
Es importante que "ESTABLISHED,RELATED", si se utiliza, se haga al último.
# Icinga
iptables -A INPUT -s $IP_ICINGA -p tcp --dport 139 --syn -j ACCEPT
iptables -A INPUT -s $IP_ICINGA -p tcp --dport 139 -j DROP
# Mantenerlo al utlimo, para q' funque filtrado de conexiones de Icinga
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Con el ejemplo anterior, monitoreo el servicio de Samba, pero no permito que se reciba nada más que los paquetes TCP que crean la conexion. Los paquetes siguientes son eliminados.
Es importante que "ESTABLISHED,RELATED", si se utiliza, se haga al último.
Posteado por
Software and Motorcycles
a las
11:51
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
icinga,
iptables,
nagios
miércoles, 28 de julio de 2010
Ejecutar programa en tty
Luego de investigar bastante, encontré la forma! Necesitaba ejecutar en la consola de texto un programa que monitorea el estado del servidor, pero necesitaba que esto esté funcionando desde que arranca el servidor, y sin necesidad que nadie se loguee. Esto lo logré con la ayuda de rungetty.
Por ejemplo, para que se ejecute en tty6, modifiqué "/etc/init/tty6.conf" en un Ubuntu 10.04, reemplazando la última línea:
exec /sbin/getty -8 38400 tty6
por:
exec rungetty tty6 -u root -- /usr/bin/env python /path/a/script/python.py
Por ejemplo, para que se ejecute en tty6, modifiqué "/etc/init/tty6.conf" en un Ubuntu 10.04, reemplazando la última línea:
exec /sbin/getty -8 38400 tty6
por:
exec rungetty tty6 -u root -- /usr/bin/env python /path/a/script/python.py
Para realizar pruebas, la ejecución directa de rungetty me ha dado problemas (básicamente al ejecutar rungetty no pasaba nada, ni mostraba ningún mensaje de error, aunque el exit status era 1). Esto se soluciona ejecutando rungetty con setsid:
setsid rungetty tty8 -u root -- /path/a/programa
Luego de esto, con Ctrl+Alt+F8 podremos cambiarnos a tty8 y utilizar el programa...
Posteado por
Software and Motorcycles
a las
22:41
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
domingo, 4 de julio de 2010
Deshabilitación de pad en Acer Aspire 5542
Para que funcione este botón, hace falta bootear linux con un parámetro adicional. Esto se logra modificando la configuración de grub.
1) abrir "/etc/default/grub" para editar:
1) abrir "/etc/default/grub" para editar:
acer| ~$ sudo mcedit /etc/default/grub
2) agregar "i8042.nomux" en la linea que dice "GRUB_CMDLINE_LINUX_DEFAULT", por ejemplo, en mi caso queda así:
GRUB_CMDLINE_LINUX_DEFAULT="i8042.nomux"
3) luego hay que ejecutar la herramienta de actualización de grub:
acer| ~$ sudo update-grub2
2) agregar "i8042.nomux" en la linea que dice "GRUB_CMDLINE_LINUX_DEFAULT", por ejemplo, en mi caso queda así:
GRUB_CMDLINE_LINUX_DEFAULT="i8042.nomux"
3) luego hay que ejecutar la herramienta de actualización de grub:
acer| ~$ sudo update-grub2
Luego de reiniciar, el botón debería funcionar...
Posteado por
Software and Motorcycles
a las
14:04
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
sábado, 3 de julio de 2010
Microfono en Acer Aspire 5542-5241
Luego de renegar bastante, parece que encontré la solución para hacer funcionar el microfono de la Acer Aspire 5542-5241 en Ubuntu Lucid.
Para esto, hay que agregar la siguiente línea en el archivo "/etc/modprobe.d/alsa-base.conf":
options snd-hda-intel position_fix=1
Lo encontré en https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/523953
Para esto, hay que agregar la siguiente línea en el archivo "/etc/modprobe.d/alsa-base.conf":
options snd-hda-intel position_fix=1
Lo encontré en https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/523953
Posteado por
Software and Motorcycles
a las
3:56
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
miércoles, 26 de agosto de 2009
OpenOffice: como embeber imagenes linkeadas
Me sucedió varias veces que luego de copiar y pegar contenidos en un documento OpenOffice recuerdo que las imágenes quedan "linkeadas" y no embebidas.
Para embeber estas imágenes linkeadas no encontré ningún macro ni forma automatizada, pero es posible hacerlo con un procedimiento bastante sencillo, seleccionando la opción "Links" en el menú "Edit". Aparecerá una ventana con todas las imágenes linkeadas, y para embeber las imágenes listadas hay que seleccionarlas y presionar el boton "Break Link" (una por una).
Encontré esta información en www.taming-openoffice-org.com
Para embeber estas imágenes linkeadas no encontré ningún macro ni forma automatizada, pero es posible hacerlo con un procedimiento bastante sencillo, seleccionando la opción "Links" en el menú "Edit". Aparecerá una ventana con todas las imágenes linkeadas, y para embeber las imágenes listadas hay que seleccionarlas y presionar el boton "Break Link" (una por una).
Encontré esta información en www.taming-openoffice-org.com
Posteado por
Software and Motorcycles
a las
20:16
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
openoffice
Diff de docs. OpenOffice en GIT
1) Instalar odt2txt (convierte docs. OpenOffice a texto plano)
2) Configurar GIT
2.a) Agregar a .gitconfig:
Con estos 2 pasos realizados, git ya puede mostrar diferencias entre documentos OpenOffice (por ejemplo, al realizar modificaciones locales).
Artículo completo en http://www-verimag.imag.fr/~moy/opendocument/
aptitude install odt2txt
2) Configurar GIT
2.a) Agregar a .gitconfig:
[diff "odf"]2.b) Agregar a .gitattributes
textconv=odt2txt
*.ods diff=odf
*.odt diff=odf
*.odp diff=odf
Con estos 2 pasos realizados, git ya puede mostrar diferencias entre documentos OpenOffice (por ejemplo, al realizar modificaciones locales).
Artículo completo en http://www-verimag.imag.fr/~moy/opendocument/
Posteado por
Software and Motorcycles
a las
13:28
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
git
martes, 25 de agosto de 2009
Pro GIT
Hace tiempo está disponible el libro Pro GIT para ser bajado (clonando el repositorio git) o navegado.
Ya se está trabajando en la traducción al español: accedan a:
http://github.com/progit/progit/tree/master
y vean el directorio "es-ni" (por ahora es la única traducción al español, en el futuro puede haber otras).
Ya se está trabajando en la traducción al español: accedan a:
http://github.com/progit/progit/tree/master
y vean el directorio "es-ni" (por ahora es la única traducción al español, en el futuro puede haber otras).
Posteado por
Software and Motorcycles
a las
15:05
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
0
comentarios
Labels:
git
Suscribirse a:
Entradas (Atom)














