martes, 1 de diciembre de 2009

Recuperar resolución de pantalla en ubuntu

Hoy he conectado el EEEPC al proyector de audiovisuales y necesitaba reiniciar. Me pidió autorización para autodetectar la configuración del proyector.

Al acabar, me dejó X-windows con un máximo de 800x600. Desde la configuración de pantalla no permitía más.

Para los que no están muy duchos en Linux fuera del entorno gráfico, decirles que tiene "fácil" solución.

Al autoconfigurarse ha creado un archivo de configuración nuevo, pero se ha hecho una copia de seguridad del anterior. Lo único que hay que hacer es restaurar el archivo anterior.

El archivo es /etc/X11/xorg.conf. El archivo de seguridad se llamará xorg.conf más la fecha en que se sustituyó.

Así, lo único que hay que hacer es: sudo cp /etc/X11/xorg.conf.20091201101010 /etc/X11/xorg.conf

El número 20091201101010 es la fecha y la hora en que se creó. Tendrás que mirar cuál es la fecha y la hora en tu caso.

sábado, 21 de marzo de 2009

Lipsiadmin y Rails: campos belongs_to

Lipsiadmin no ofrece manejo automático de campos relacionales, como belongs_to.

El autor, Davide D'Agostino se escuda en que no es predecible el contenido a mostrar del objeto enlazado. Podría usar un método como .to_s o cualquier otro para uso exclusivo de Lipsiadmin, pero no ha tomado en cuenta esa posibilidad. Así que lo único que propone es añadir a mano el código necesario.

Los cambios no son muchos, pero automatizado estaría mejor.

Entrando al tema, los cambios serían los siguientes:

Como ejemplo, parto de una tablas de clasificaciones que incluye una categoría y una división, ambos en sendas tablas, relacionadas mendiante belongs_to.

Para incluir el campo en el listado, hay que modificar al controlador de clasificaciones de backend en el método index las líneas (2ª y 3ª):


return_data[:clasificaciones] = clasificaciones.collect{|u| { :id => u.id,
:categoria_id => u.categoria.abrev,
:division_id => u.division.abrev,
:equipo => u.equipo,
:posicion => u.posicion,
:jugados => u.jugados,
:ganados => u.ganados,
:empatados => u.empatados,
:perdidos => u.perdidos,
:favor => u.favor,
:contra => u.contra,
:bonus => u.bonus,
:puntos => u.puntos,
:created_at => u.created_at,
:updated_at => u.updated_at } }



En la vista index.js.erb de backend/clasificaciones, habría que añadir la información a las variable items y el parámetro columns del grid


var items = [
{name: 'categoria_id'},
{name: 'division_id'},
...



columns: [
selections,
{
header: 'Categoria',
sortable: false,
dataIndex: 'categoria_id'
},{
header: 'División',
sortable: false,
dataIndex: 'division_id'
},{
...


Para incluir una lista desplegable en el formulario, hay que añadir al parcial _form:

%li
%label Categoría
=select :clasificacion, :categoria_id, Categoria.find(:all).collect{|c| [c.to_s, c.id]}, {:include_blank => false, :selection => @clasificacion.categoria_id}


Similar para la división.

Si tengo tiempo, o si alguien quiere, puede intentar incluir esta posibilidad a Lipsiadmin y remitir la solución como un parche a Davide D'Agostino.

Saludos.

martes, 24 de febrero de 2009

FCKEditor con Lipsiadmin en Rails

Con FCKEditor se puede añadir un área de texto con formato de forma rápida y sencilla. Lipsiadmin usa Ext para la presentación de pantalla, aunque no para el contenido, por lo que se puede usar sobre HTML y Javascript. La configuración que me ha funcionado es la siguiente:

En backend/base/index.html.haml, antes de =javascript_include_tag "backend", "forms":

=javascript_include_tag "fckeditor.js"

El archivo fckeditor.js debe estar en /public/javascripts

La carpeta fckeditor debe estar dentro de /public/javascripts

En public/javascripts/forms.js pertenecinete a Lipsiadmin, la función stiledForm es la que hay que modificar:

function styledForms() {
hoverEffects();
buttonHovers();
formHovers();
//FCKEditor
var sBasePath = '/fckeditor/'
var oFCKeditor = new FCKeditor( 'FCKEditor', '100%', '400' ) ;
oFCKeditor.BasePath = sBasePath ;
oFCKeditor.ReplaceTextarea() ;
}


En la vista correspondiente a Lipsiadmin:

<%=text_area :noticia, :contenido, :rows => 20, :id => 'FCKEditor'%>

Comentar la línea 127 de fckeditor.js para que no salga error cuando no haya TEXTAREA en el cuerpo:


//alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ;


Otra opción es usar TinyMce Editor usando modificaciones similares, pero por ahora adolece de un mal funcionamiento tras la primera carga
de la que no he encontrado solución.

jueves, 8 de enero de 2009

Creación rápida de diapositivas powerpoint

Nos centraremos en la generación de diapositivas para mostrar fotos.


Para ello, en Powerpoint, pulsamos el menú Archivo y la opción Nuevo.

En la barra de Nueva presentación, seleccionar Álbum de fotografías...



Pulsamos el botón Archivo o disco...



Seleccionamos las imágenes a mostrar y dar al botón Insertar.

Las imágenes admiten desde aquí mínimos retoques. Lo más destacable la posibilidad de girarlos (2).

También, la lista se puede reordenar con los botones de las flechas a la izquierda del botón Quitar (3).


En la zona Diseño del álbum, cambiar el Diseño de la imagen a 2 imágenes con título (4).


En la Forma del marco, seleccionar adorno de esquina redondeado (5).


Pulsar el botón Examinar de Plantilla de diseño (6).


Abrir la carpeta Presentation Designs.


Ahí se puede elegir la que más nos guste. Por ejemplo, Watermark. Pulsar el botón Seleccionar.



Dándole al botón Crear (7), sale una diapositiva de presentación y las fotos en las siguientes diapositivas.
Lo que hay que cambiar son los textos. Si se quiere, también se puede añadir más textos sobre o bajo las fotos.

martes, 6 de enero de 2009

Publicando extracto de web externa en Rails con Hpricot

Estoy desarrollando la web del Club de Rugby Málaga, y necesito mostrar la clasificación de los equipos. Para hacer la actualización lo más automática posible, no hay nada más automático que extraer esa información de otro sitio donde esté publicado. Por supuesto, no hay que olvidar citar la fuente y poner algún enlace.

Prerrequisitos
Yo he utilizado la gema HPRICOT (aunque su sitio web parece no estar activo, la gema se puede instalar).

Para instalarla: sudo gem install hpricot

Además hacen falta las gemas rubygems y open-uri.

Manos a la obra
La información en cuestión está en la Federación Española de Rugby. En el enlace calendario liga está la información que necesito.

Para ver únicamente la información necesaria, copio la ruta del enlace y lo abro en una nueva pestaña.

La página contiene varias listas desplegables para seleccionar categoría, temporada y equipo. Establezco las listas desplegables con los valores deseados y ya tengo la página de la que quiero extraer la información.

La ruta de la página (junto con los parámetros) es http://www.ferugby.com/competiciones/calendario.php?id2=3&fecha_1=2008&cat=Liga+Nacional#j7

Como la parte final (#j7) es un enlace local (o ancla) a la propia página, lo descartaré. La página se puede leer con:

page = Hpricot( open(url) )

Revisando el código fuente de la página, todas las tablas de jornadas están dentro de tablas con el tag HTML:

<table id="tabla" bordercolor="#990000" cellspacing="0" cellpadding="0" align="center" border="0" />

Con hpricot se puede extraer un array de tags que contengan una determinada propiedad. Para este caso

@tablas = page.search("//table[@id='tabla']" )

Así, ya tenemos el controlador:

def mostrar_calendario_liga
url = 'http://www.ferugby.com/competiciones/calendario.php?id2=3&fecha_1=2008&ide=&cat=Liga+Nacional'
#page = Hpricot(url) #si las codificaciones coinciden
page = Hpricot(Iconv.iconv("UTF-8", "ISO-8859-1", open(url).read).join )
@tablas = page.search("//table[@id='tabla']" )
end

Para la vista, hay que ver que cada tabla de cada jornada, tiene la siguiente estructura:
  • 1ª fila: Número de jornada.
  • 2ª fila: Encabezados de columnas.
  • 3ª fila en adelante: Datos de los partidos.
Así, la vista queda:

<%for t in @tablas do%>
<%filas=t.search("//tr")%>
<table id="tabla" align="center" border="0">
<tbody>
<tr id="fil1">
<td id="cabecera_fila1" colspan="7">
<%=t.search("//tr").first.search("//td").first.inner_html%>
</td>
</tr>
<tr id="fil2">
<td width="1" align="center"></td>
<td width="1" align="center">FECHA</td>
<td width="1" align="center">HORA</td>
<td width="50%" align="center">EQUIPO LOCAL</td>
<td colspan="2" width="60" align="center">RESULTADO</td>
<td width="50%" align="center">EQUIPO VISITANTE</td>
</tr>
<%for r in filas[2..20]%>
<tr id="fila_contenido">
<%celdas=r.search("//td")%>
<%for celda in celdas[0..6] do%>
<td>
<%c=celda.search("//a")%>
<%c=celda if c.size == 0%>
<%if c.inner_html.include?('UMA')%>
<strong><%=c.inner_html%></strong>
<%else%>
<%=c.inner_html%>
<%end%>
</td>
<%end%>
</tr>
<%end%>
</tbody>
</table>
<%end%>
<p>
Los resultados se actualizan directamente desde la página de la
<a href="http://www.ferugby.com">Federación Española de Rugby</a>.
</p>

En la línea 18 pongo [2..20] para saltar las dos primeras filas, y un número suficiente (20 en este caso) para que no queden sin mostrar.
En la línea 20 se extraen los contenidos de los TD de la fila.
En la línea 21 se recorren los TD.
En las líneas 23 y 24 se extrae el contenido descartando la existencia de un posible enlace.
En las líneas de 25 a 29 se expone el contenido, destacando los que contengan el texto 'UMA'.

Lo último es elegir los estilos CSS para los ID de los tags de las tablas y conseguir el aspecto deseado.

Espero que le sirva a alguien, como me va a servir a mí para completar el resto de categorías.
 
javascript:void(0)