AZLinux

Se muestran los artículos pertenecientes a Febrero de 2011.

07/02/2011

Macros OO I - Contenido Calc a Hipervinculo

coge una columna seleccionada y la transforma en vínculos

Código:

Option Explicit

rem Macro creada el 3/2/2011 por Raúl Huerta
rem La macro transforma cada celda de un rango seleccionado en un vinculo a la URL contenida en la propia celda

Sub Vinculos
Dim oCelda As Object
Dim oLink As Object
Dim oSel As Object
Dim fila As Long

oSel = ThisComponent.CurrentSelection
If oSel.ImplementationName = "ScCellRangeObj" Then
oCelda = oSel.getCellByPosition(0,0)
Do while oCelda.getString <> ""
oLink = ThisComponent.createInstance("com.sun.star.text.TextField.URL")
oLink.URL = oCelda.getString
oLink.Representation = oCelda.getString
oCelda.insertTextContent( oCelda.getText.createTextCursor, oLink, True )
fila = fila + 1
oCelda = oSel.getCellByPosition(0,fila)
Loop
End If

End Sub
07/02/2011 12:41 #. Tema: openoffice No hay comentarios. Comentar.

10/02/2011

Macros OO II - Manejo de Columnas en Calc

Maneja columnas: Elimina, corta, pega e inserta columnas , inserta cabeceras hasta dar el formato apropiado.

El programa realiza lo siguiente

  • Eliminar columnas E y N (originales)
  • Insertar columna entre la C y la D
  • La columna G la cortamos y la pegamos en la nueva D
  • Eliminamos la columna G
  • Insertamos dos columnas delante de la A
  • Cortamos las columnas M y N y las pegamos en la A y B
  • Cortamos las columnas I y J y las pegamos en la M y N
  • Eliminamos las columnas I y J.

y

Cabeceras

  • MOD / AUTOLIQ / CLAVE / RECIBO / D/ CUOTA / ORD / NFIJO / NOMBRE / DNI / TIPO / SUBTIPO

Programa principal

Sub OrdenaColumnasTU
Dim oSheet
oSheet = ThisComponent.getSheets().getByIndex(0)
oSheet.getColumns().removeByIndex(4,1) ’ Elimina la columna 4 (E)
oSheet.getColumns().removeByIndex(12,1) ’ Elimina la columna 12 (M, antiga N)
oSheet.getColumns().insertByIndex(3,1) ’ Inserta una columna entre la C y la D
CopiaColumna (6,3) ’ Copiamos la columna G en la D
oSheet.getColumns().removeByIndex(6,1) ’ Eliminamos la columna G
oSheet.getColumns().insertByIndex(0,2) ’ Insertamos dos columnas delante de la A
CopiaColumna (12,0) ’ Copiamos la columna M en la A
CopiaColumna (13,1) ’ Copiamos la columna N en la B
CopiaColumna (8,12) ’ Copiamos la columna I en la M
CopiaColumna (9,13) ’ Copiamos la columna J en la N
oSheet.getColumns().removeByIndex(8,2) ’ Elimina la columna 8 y la 9 (I y J)
InsertaCabecera
OrdenarPorColumna (4) ’ Ordenamos por la columna de Recibo
AjustaAnchoColumna ’ Ajusta el ancho de las columnas
End Sub

Procedimiento

Sub CopiaColumna (col1 as integer, col2 as integer)		’ Copia columna origen a columna destino
Dim cont
cont = 0
oSheet = ThisComponent.getSheets().getByIndex(0)
Celda1 = oSheet.getCellByPosition(col1,cont) ’ Celda1 = (col1,1)
Celda2 = oSheet.getCellByPosition(col2,cont) ’ Celda2 = (col2,1)
Do While Celda1.value <> "0" ’ Copiamos la columna col1 en la col2
Celda2.value = Celda1.value
cont = cont + 1
Celda1 = oSheet.getCellByPosition(col1,cont)
Celda2 = oSheet.getCellByPosition(col2,cont)
loop
End Sub

Procedimiento

Sub InsertaCabecera
oSheet = ThisComponent.getSheets().getByIndex(0)
oSheet.getRows().insertByIndex(0,2)
Celda = oSheet.getCellByPosition(0,0)
Celda.string = "MOD"
Celda = oSheet.getCellByPosition(1,0)
Celda.string = "AUTOLIQ"
Celda = oSheet.getCellByPosition(2,0)
Celda.string = "CLAVE"
Celda = oSheet.getCellByPosition(3,0)
Celda.string = "RECIBO"
Celda = oSheet.getCellByPosition(4,0)
Celda.string = "D"
Celda = oSheet.getCellByPosition(5,0)
Celda.string = "CUOTA"
Celda = oSheet.getCellByPosition(6,0)
Celda.string = "ORD"
Celda = oSheet.getCellByPosition(7,0)
Celda.string = "NFIJO"
Celda = oSheet.getCellByPosition(8,0)
Celda.string = "NOMBRE"
Celda = oSheet.getCellByPosition(9,0)
Celda.string = "DNI"
Celda = oSheet.getCellByPosition(10,0)
Celda.string = "TIPO"
Celda = oSheet.getCellByPosition(11,0)
Celda.string = "SUBTIPO"
End Sub

Procedimiento

sub OrdenarPorColumna(columna as byte)
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$M$100"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(6) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = true
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "IncludeAttribs"
args2(3).Value = true
args2(4).Name = "UserDefIndex"
args2(4).Value = 0
args2(5).Name = "Col1"
args2(5).Value = columna
args2(6).Name = "Ascending1"
args2(6).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())

end sub

Procedimiento

Sub AjustaAnchoColumna

rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$M$50"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "aExtraWidth"
args2(0).Value = 200

dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, args2())

end sub
10/02/2011 08:29 #. Tema: openoffice No hay comentarios. Comentar.

11/02/2011

Modificando una extension de OO

Numbertext es una extensión de OpenOffice que proporciona dos nuevas funciones para Calc: Numbertext y Moneytext que traducen un valor númerico en texto (Numbertext) o en texto moneda: X euros y X cents (Moneytext). El problema que nos comenta el usuario es que quiere que la función Moneytext, en vez de X euro/s y X cent/s, dé como resultado X euro/s con X céntimo/s

La extensión numbertext-version.oxt es un fichero comprimido que consta de una estructura de ficheros y directorios entre los que se encuentra el archivo numbertext_es_ES.py. Este fichero contiene el código python con las funciones de Calc y es el que hay que modificar de la siguiente manera:

  • La línea 87 cent por céntimo y cents por céntimos
  • Las líneas 117, 118 y 119 donde pone y por con.

Así de fácil!!

11/02/2011 12:27 #. Tema: openoffice No hay comentarios. Comentar.

16/02/2011

OpenDNIe en AZLinux

Por @jact_abcweb

Hace unos días, se presentó el proyecto OpenDNIe en sociedad. Este proyecto significa un gran avance para las administraciones públicas que quieran usar Linux, ya que inicia el camino de la independencia tecnológica.

Intentaré explicar esto más detenidamente. Actualmente, los 2 módulos criptográficos que se usan en la Administración Pública Española no están integrados en el proyecto OpenSC, sino que son módulos cargables que viven vidas paralelas a este proyecto madre. Esto implica que cada vez que OpenSC actualiza algo (aunque sólo sea el número de la versión), los módulos españoles dejan de funcionar. Otro problema añadido es que ambos deben estar compilados contra la misma versión de OpenSC para funcionar en la misma máquina.

La situación se estaba tornando insostenible y estaba impidiendo que las nuevas versiones de las distribuciones Linux tuvieran soporte para estos módulos. Como solución, tanto la DGP (DNIe) como la FNMT (Ceres) liberaron hace unos meses los respectivos proyectos. Pero era necesario que alguien hiciera el trabajo de integración en opensc para que la dependencia de versiones dejara de ser un problema.

Gracias a jonsito y Cenatic, la integración del DNIe es ya una realidad, pero todavía queda integrar Ceres en OpenSC para conseguir resolver completamente el problema. Si ambos módulos no están dentro de opensc, la gente que ha adoptado Linux como plataforma de trabajo, no puede continuar avanzando y proporcionar servicios a los ciudadanos.

Historia de los certificados en AZLinux

 

Este mapa mental representa el pasado, presente y futuro de los módulos criptográficos en nuestro trabajo diario. Hicimos una primera versión de AZLinux (la 1, basada en SLED 10), en la que sólo teníamos soporte para Ceres por el problema de encontrar una versión de opensc que hiciera funcionar ambos módulos. Luego pasamos a openSUSE 11.2 (AZLinux 2) y conseguimos dar con la fórmula correcta gracias a la suerte y al trabajo desinteresado de RedDwarf. A día de hoy no nos podemos ni plantear evolucionar la versión de openSUSE porque ni el código de la DGP ni el de la FNMT están preparados para funcionar con opensc-0.12.

En cuanto hemos sabido que existía opendnie, nos hemos puesto manos a la obra para hacerlo funcionar en nuestra actual plataforma (openSUSE 11.2). A continuación os relato las dependencias necesarias para su compilación y de dónde se han obtenido cada una de ellas.

  • gcc gcc-c++ kernel-devel (kernel-pae-devel en nuestro caso)
  • pkg-config
  • autoconf
  • automake
  • docbook-xsl-stylesheets
  • pcsc-lite, pcsc-lite-devel
  • pcsc-ccid
  • libreadline6, readline-devel
  • libgpg-error-devel
  • openssl, libopenssl0_9_8, libopenssl-devel
  • pinentry, pinentry-gtk2, pinentry-qt4
  • libtool, libltdl7
  • openct, openct-devel, pcsc-openct, libopenct1
  • libpth20, libpth-devel
  • libassuan0, libassuan-devel

Todos los paquetes corresponden al repositorio openSUSE 11.2 standard, excepto la siguiente lista, que han sido obtenidos de otro repositorio, porque el paquete libassuan0 no está en el repositorio standard.

  • libassuan-devel-2.0.0-4.1.i586.rpm
  • libassuan0-2.0.0-4.1.i586.rpm

El DNIe funciona perfectamente con la página de prueba de la DGP y con los comandos opensc-tool.

En resumen, se ha hecho un estupendo trabajo y en la dirección adecuada, pero la solución no va a ser definitiva hasta que Ceres recorra el mismo camino que se ha realizado con DNIe.

Etiquetas: , ,

16/02/2011 11:59 #. Tema: seguridad Hay 2 comentarios.

Macros OO III - Distribuir filas equitativamente

Descripción:

Modulo de macros de Writer (OpenOficce) que soluciona un error de interpretación en la opción Tabla -> Autoajustar -> Distribuir Filas Equitativamente.

En Word funcionaba de la siguiete manera: si seleccionas varias filas de diferente altura y eliges esta opción, no modifica la altura de la tabla y redistribuye el espacio equitativamente entre las filas seleccionadas. Sin embargo, con OpenOffice coge la altura de la fila más alta y lo aplica al resto.

Hay abierta una issue en http://qa.openoffice.org/issues/show_bug.cgi?id=58326 de la cual extraemos una macro alternativa que sustituye a la opción Distribuir Filas Equitativamente en OO.

Código

sub Distribute_Rows_Evenly
rem ----------------------------------------------------------------------
rem define variables
dim document as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent
controller = document.getCurrentController

’Get the current selection and check that part of a table has been selected
sel = controller.getSelection()
if sel.ImplementationName <> "SwXTextTableCursor" then exit sub
selRng = sel.RangeName

’Extract the rows from the selection name (in the form ’C24:G15’)
pos = 0
ascZero = Asc("0")
ascNine = Asc("9")
do ’Look for the first number
pos = pos + 1
ascVal = Asc(Mid(selRng, pos))
loop while (ascVal < ascZero or ascVal > ascNine)
startRowNum = CLng(Mid(selRng, pos)) - 1
do ’Look for the second number
pos = pos + 1
ascVal = Asc(Mid(selRng, pos))
loop while (ascVal < ascZero or ascVal > ascNine)
endRowNum = CLng(Mid(selRng, pos)) - 1

’Early-out if only one row selected
if startRowNum = endRowNum then exit sub

’Get the table
vcurs = controller.getViewCursor()
table = vcurs.TextTable
rows = table.getRows()

’Add up all the row heights
totalHeight = 0
for pos = startRowNum to endRowNum
totalHeight = totalHeight + rows(pos).Height
next

’Calculate the average row height
aveHeight = totalHeight / (endRowNum - startRowNum + 1)

’Set all the row heights to the average
for pos = startRowNum to endRowNum
rows(pos).IsAutoHeight = False
rows(pos).Height = aveHeight
next

end sub

16/02/2011 10:01 #. Tema: openoffice No hay comentarios. Comentar.

18/02/2011

Un premio Príncipe de Asturias para el Software Libre

software libre principe de asturias

Fuente: CENATIC

La Fundación Príncipe de Asturias ha invitado a CENATIC a presentar una propuesta de candidatura a los Premios Príncipes de Asturias 2011. Tras analizar las alternativas que, con las máximas posibilidades de acceder al galardón pudieran al mismo tiempo aunar los intereses de todos los agentes del sector del software libre en España, a propuesta de su Consejo Asesor y con el refrendo de sus órganos de gobierno, CENATIC ha decidido promover y presentar como candidato a La Comunidad Internacional del Software Libre a los Premios Príncipe de Asturias 2011, en su modalidad de Cooperación Internacional.


La Comunidad Internacional del Software Libre es el conjunto de personas e instituciones de todo el mundo que contribuyen al software libre mediante un modelo colaborativo y abierto basado en la libertad, la compartición del conocimiento, la colaboración, la meritocracia y el respeto a los derechos de autor, con acciones como el desarrollo, divulgación, promoción, documentación, testing, organización, soporte y comercialización del software libre. El software libre ha permitido la generalización del conocimiento y el acceso a la tecnología a nivel mundial, eliminando barreras económicas, sociales, culturales, idiomáticas y geográficas.

Convencidos de que esta candidatura es merecedora de tal reconocimiento, en CENATIC asumimos la tarea de convocar al sector del software libre y liderar la campaña de adhesiones, invitando a todos a afrontar de manera conjunta este enorme reto. Antes del 18 de marzo entregaremos a la Fundación Príncipe de Asturias un dossier que incluirá la descripción de la candidatura, méritos acreditados, adhesiones electrónicas y rubricadas, así como el informe final de méritos.


POR ESTA RAZÓN SOLICITAMOS DE TÍ O DE TU INSTITUCIÓN LA ADHESIÓN A ESTA CAMPAÑA, PARA CONSEGUIR OTORGAR A LA COMUNIDAD INTERNACIONAL DEL SOFTWARE LIBRE ESTE RECONOCIMIENTO DE GRAN PRESTIGIO Y TAN MERECIDO. PARA ELLO TE INVITAMOS A:

  • Cumplimentar una Adhesión Electrónica aportando tus comentarios sobre la razón por la que esta candidatura debería recibir el Premio.
  • Cumplimentar una Adhesión Rubricada, puedes modificarlo en lo que estimes oportuno y enviarlo por correo postal a la dirección indicada en el propio documento.


Esta es una excelente oportunidad para mostrar a la sociedad española e internacional la existencia de un sector asociado al software libre compuesto por desarrolladores, empresas, investigadores, universidades, divulgadores, gestores de comunidad, traductores... y todo un conjunto de personas e instituciones asociadas al software libre capaces de colaborar y trabajar de forma unida por una forma diferente de construir software, por un futuro tecnológico mejor para todos.

 

18/02/2011 07:54 #. Tema: otros No hay comentarios. Comentar.

21/02/2011

Liberamos -Migración Escritorio Software Libre-

Desde el equipo AZLinux del Ayuntamiento de Zaragoza hemos elaborado y hacemos público el documento Migración Escritorio Software Libre (113 páginas).

El objetivo de este documento es ofrecer una visión global de la información y procesos que se necesitan conocer para poder planificar y realizar una migración con éxito de los entornos de Escritorio a herramientas de Software Libre.

En este sentido este documento se debe considerar como una guía de buenas prácticas y no tratarse como un manual con pasos y procesos rígidos e inmutables.

Se estructura en 5 apartados.

  • Estado del Arte. Describe la actualidad del Escritorio Libre mediante datos estadísticos, proyectos y organismos implicados en los procesos de migración a SL.
  • Guía Metodológica. Ofrece una visión acerca de los procedimientos y procesos necesarios para migrar los escritorios de una organización a herramientas de software libre. Es una guía neutral sin referencias tecnológicas concretas.
  • Guía Técnica. Muestra puntos de vista sobre los caminos y rutas tecnológicos mas apropiados para realizar este proceso.
  • Analisis DAFO de debilidades, amenazas, fortalezas y oportunidades del Escritorio Libre.
  • Conclusiones. A partir de toda la información, tanto cualitativa como cuantitativa, se ofrecen una serie de conclusiones y recomendaciones
    para mejorar los planes y procesos de migración.

Esperamos que sea de vuestro agrado.

Síguenos en Twitter @azlinuxzgz

21/02/2011 09:46 #. Tema: presentacion Hay 10 comentarios.

| Blog ciudadano realizado con Blogia 2.0 | Suscríbete: RSS | Administrar