2009/11/18

Where do you want to fetch from today?

Tras un tiempo sin usar un repositorio de código me pasó lo siguiente:
$git pull
fatal: Where do you want to fetch from today?
Y no conectaba!!!
- ¿Cómo se pudo resolver el problema?

- Pues haciendo memoria... y recordando que era un repositorio Subversion y no git al que accedía mediante git-svn.

;)


       
   

2009/10/22

Claves primarias en SQLite

SQLite es una base de datos muy interesante. Entre sus características hay cosas que puede resultar extrañas para las personas acostumbradas a otros gestores de base de datos. Por ejemplo, un campo que sea de tipo INTERGER puede almacenar un STRING; esto es consecuencia del tipado dinámico de SQLite.

Otra cosa a comentar es que no se comprueban las restricciones de PRIMARY KEY, teniendo que hacerlo manualmente a través de triggers en caso de que sea necesario. Si necesitas saber cuales son los campos con clave primaria una forma de hacerlo puede ser mediante la siguiente sentencia:
PRAGMA table_info(tablename)
Esto devuelve una tabla con un campo pk con valor 1 cuando el atributo tiene esta CONSTRAINT.
       
   

2009/10/19

Cambiar origen de un repositorio SVN

Si el origen de un repositorio SVN del que eres cliente ha cambiado de host o IP, incluso has cambiado de nombre de usuario puedes ejecutar esta simple instrucción para, de un modo bastante poco elegante, cambiar todas las referencias de los archivos .svn.


cd root_path_svn
for i in `find | grep .svn`; do
cat $i | sed s/'oldusername@xxx.xxx.xxx.xxx'/'newusername@yyy.yyy.yyy.yyy'/g > /tmp/foo.aux;
sudo mv /tmp/foo.aux $i;
done
       
   

2009/08/31

Dando pasos para un GNU/Linux para todos

Lo de que se desconfiguren (o no funcionen directamente) cosas en GNU/Linux es un clásico (casi tanto como los pantallazos azules de Windows). A pesar de estos problemas, que para un usuario básico hacen inusable el sistema, como desarrollador y usuario avanzado estoy infinitamente más feliz con un S.O. de Software Libre que uno privativo... pero siendo sinceros, quedarse sin X tras cada actualización es muy molesto!!

En mi portatil Toshiba hay muchas cosas que nunca han funcionado, pero los mayores problemas han sido con la tarjeta gráfica (ATI HD Radeon 2400) y desde que actualicé a Ubuntu 9.04 el sonido no iba. Lo de la ATI he intentado de todo desde hace tiempo (todos los trucos, compilar drivers, etc.), pero la cosa no quedaba como debería ser.

Hoy tengo que decir que, por fin, he encontrado la solución a estos problemas... y sin necesidad de saber lo que es 'gcc'!!!! ¿Cómo? Usando el programa de instalación de los drivers de ATI!!! Guauuuuuuu!! Menos mal!!!! [1]

Y con el audio tenemos que seguir con truquitos de instalar y desinstalar módulos, etc. etc... [2] Pero al menos funciona, sin estar toda la tarde haciendo pruebas!

[1]: http://www.islabit.com/7262/instalando-driver-de-ati-en-ubuntu-904.html
[2]: https://help.ubuntu.com/community/SoundTroubleshooting
       
   

2009/07/08

Ignorando ficheros con GIT

A veces dentro de un proyecto se generan ciertos archivos que no se desean tener en el repositorio de versiones. En mi caso, a veces tengo ficheros de configuración propios con rutas a carpetas de mi máquina o con cosas raras que tampoco quiero que sean subidas.

En git es fácil poder indicar que no se incluyan estos ficheros creando un fichero .gitignore en la raíz del proyecto. Más detalles en:
http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#ignoring-files

Esto funcionaría si los ficheros no han sido ya agregados con git add. Si este es el caso quedan 2 opciones:
  1. Hacer commits selectivos de ficheros y carpetas concretos ignorando estos ficheros
  2. Usar el comando git-update-index --assume-unchanged

** Ampliación **
Para analizar más en profundidad el contenido del index y el estado de los ficheros es útil (además de git status) el comando:
 git ls-files -v
Con este comando se listan los ficheros en el índice indicando su estado con las letras al principio de la línea:

H cached
M unmerged
R removed/deleted
C modified/changed
K to be killed
? other

En caso de que las letras sean en minúscula indica que se encuentran con el bit activo de "assume-unchanged".
       
   

2009/05/08

Eclipse en modo Emacs

Para los tecleamos mucho código y hemos logrado pasar la barrera inicial de uso de Emacs (aunque sea al tercer intento), siempre echamos de menos cosas de Emacs en todos los demás editores, e incluso en TextFields en una web.

Por otro lado, aunque Emacs permite ser un buen IDE para programar en Java, hay que reconocer que eclipse (o NetBeans) es una alternativa extremadamente cómodo para trabajar. Pero claro, eclipse no es Emacs... aunque éste cuenta con un esquema de teclas que emula a Emacs. Se pierden muchísimas de las ventajas de emacs y además sólo tiene algunas de las combinaciones habituales como cut, yank, incremental search, etc...

Para activarlo, hay que ir a menú:

Windows -> Preferences -> Keys -> Schema:Emacs

Algunas combinaciones de teclas que no aparecen son configurables. Ahí van 2 de las imprescindibles que se pueden (y se deben) de ajustar:

Find and Replace -> CTL+SHIFT+5
Go to Line -> ALT+G ALT+G



Investigando un poco he visto que existen algunos plugins que aumentan la sensación emacs en eclipse:
  • Emacs+: http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-1442.html
  • Emacish: http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-1012.html
Habrá que probarlos!!!
       
   

2009/01/30

Pasar archivos de openoffice a pdf automáticamente

Una de las grandes comodidades de openoffice es poder contar con un botón que pase los documentos a PDF con un simple click. Pero si tienes muchos documentos y todos los quieres pasar a pdf, el hecho de abrirlos uno a uno y pulsar ese botón puede resultar laborioso.

Buscando alguna solución mágica del tipo "openoffice2pdf" o "odt2pdf", encontré el siguiente enlace
http://www.oooforum.org/forum/viewtopic.phtml?p=61967#61967 donde se ofrece una macro que hace justamente eso.

Los pasos para poder usarlo son los siguientes:
  • Abrir openoffice e ir a Herramientas->Macros->Organizar->Basic
  • Crear una nueva y copiar el siguiente código
Sub ExportAsPDF(strFile as string)
Dim oDoc
Dim strFilterSubName as String
Dim oLoadArgs(0) as New com.sun.star.beans.PropertyValue

oLoadArgs(0).Name = "Hidden"
oLoadArgs(0).Value = True

oDoc = StarDesktop.loadComponentFromURL(ConvertToUrl(strFile), "_blank", 0, oLoadArgs())
If IsNull(oDoc) Then Exit Sub

strFilterSubName = ""
' select appropriate filter
If oDoc.SupportsService("com.sun.star.presentation.PresentationDocument") Then
strFilterSubName = "impress_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
strFilterSubName = "calc_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.WebDocument") Then
strFilterSubName = "writer_web_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.GlobalDocument") Then
strFilterSubName = "writer_globaldocument_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.text.TextDocument") Then
strFilterSubName = "writer_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.drawing.DrawingDocument") Then
strFilterSubName = "draw_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.formula.FormulaProperties") Then
strFilterSubName = "math_pdf_Export"
ElseIf oDoc.SupportsService("com.sun.star.chart.ChartDocument") Then
strFilterSubName = "chart_pdf_Export"
Else
Exit Sub
EndIf

Dim oSaveArgs(1) as New com.sun.star.beans.PropertyValue
oSaveArgs(0).Name = "FilterName"
oSaveArgs(0).Value = strFilterSubName

oSaveArgs(1).Name = "CompressMode"
oSaveArgs(1).Value = "1"

oDoc.storeToUrl(ConvertToUrl( strFile & ".pdf" ), oSaveArgs())
oDoc.close(True)
End Sub
  • Guardar la macro
  • Llamar a openoffice desde línea de comandos con la siguiente instrucción:

    $openoffice.org3 "macro:///Standard.Module1.ExportAsPDF(pathCompleto/archivo.odt)"
Esto genera un archivo con nombre "miarchivo.odt.pdf" en la misma carpeta que el archivo origen. Y con esto... ya podemos crear un script que nos exporte a PDF de forma masiva!!!