Paginación a medida en Rails

14 de Septiembre, 2007 — Ruby on RailsComentarios (1)

Hace un tiempo me encontré con un problema que me costó un poco de trabajo solucionar. Necesitaba hacer un listado paginado, pero para poder ordenarlo era necesario hacer un JOIN de dos tablas. Al final lo he solucionado implementando un método que pagina una consulta SQL pasada como parámetro. El código de la función es el siguiente:

def paginate_from_sql(model, sql_query, total, per_page)
@pages = Paginator.new self, total, per_page, @params[’page’]
@items = model.find_by_sql(sql_query + ” LIMIT #{per_page} ” + “OFFSET #{@object_pages.current.to_sql[1]}”)
return [@pages, @items]
end

Lo he colocado en el application.rb para tener acceso desde cualquier controlador.

Para hacer el listado de una clase llamada Relation, llamo a la función de la siguiente manera:

def list
@relation_pages, @relations = paginate_from_sql(Relation,”SELECT * FROM articles RIGHT JOIN relations ON articles.id=relations.article_id ORDER BY articles.name ASC”,Relation.count, 50)
end

Yo he echo un JOIN de dos tablas, pero no hace falta decir que podeis poner la consulta SQL que necesiteis.

Magento: el posible sustituto de osCommerce

11 de Septiembre, 2007 — Comercio ElectrónicoComentarios (4)

A través de Loogic me he enterado de la aparición de Magento, un nuevo software (libre) para la creación de tiendas on-line. Los que nos dedicamos a esto necesitábamos aire fresco. Yo abandoné osCommerce para utilizar ZenCart ya que incluía muchos de los módulos y modificaciones que acababa haciendo siempre y además ofrece un semi-sistema de templates que te hacen “más fácil” la modificación de las plantillas. Pero la verdad es que no es suficiente. La programación es caótica y se podría hacer lo mismo con la mitad de archivos y mejor.

Después de echarle un ojo a Magento parece que promete. Un diseño elegante, facilidad de uso, bastante personalizable… Aunque para valorarlo bien tendría que ver el código e intentar realizar modificaciones o incluir la tan temida pasarela de pago para las tarjetas.

En el título del post digo el posible sustituto ya que osCommerce (y derivados) está muy implantado y será difícil suplantarlo. Ya veremos como evoluciona. De momento ya se ha creado una blog sobre Magento en castellano.

La Iglesia y la pornografía infantil (una vez más)

10 de Agosto, 2007 — GeneralComentarios (3)

Esta mañana he leído en el diario una de esas noticias que por desgracia se repiten con demasiada frecuencia y que te ponen los pelos de punta, sobretodo si tienes hijos.

En Puigcerdà (Girona) han detenido a un cura acusado de intercambiar material de pornografia infantil.
Un usuario de un cybercafé llamó a los Mossos d’Esquadra para alertar de que un usuario que estaba sentado junto a él enviaba fotos porno de menores. Bravo por ese usuario sin el cual esta detención no hubiera sido posible.
El problema es que no es la primera vez que lo detienen y acusan de lo mismo. Anteriormente se dedicaba a intercambiar fotografias desde el ordenador de la sacristia, cosa que me parece muy fuerte.

Lo que no me explico es como lo dejan en libertad con cargos y encima la Iglesia no lo manda a … ¿Como es posible que un cura que comete tal delito, contrario totalmente a las creencias del catolicismo, no sea expulsado, excomulgado y quemado en la hoguera?

Me parece muy sospechoso, y a la vez lamentable, que haya tantas noticias de abusos sexuales a menores y pornografia infantil relacionadas con miembros, en algunos casos de estamentos muy altos, de la Iglesia.

¿No sería conveniente que eliminaran el celibato? Todos (menos ellos) sabemos que lo peor que se puede hacer para evitar que alguien haga algo es precisamente prohibirlo.

Me indigna profundamente que esta gente, que han vivido del cuento durante 2000 años, encima se dediquen a intercambiar fotos de menores en posiciones sexuales o a abusar de ellos. Ya se que no se debe generalizar, y que hay curas que son bellisimas personas y que se desviven por ayudar a los demás, pero algo falla cuando algo tan grave como esto pasa tan a menudo y nadie hace nada para evitarlo.

Tercer Congreso Europeo de Arquitectura de la Información (Barcelona)

7 de Agosto, 2007 — Arquitectura de InformaciónComentarios (1)

Vía TorresBuriel me he enterado de que el 21 y 22 de septiembre se celebra en Barcelona el Tercer Congreso Europeo de Arquitectura de la Información con unos ponentes de lujo como Ricardo Baeza-Yates, Director del Centro de Investigación de Yahoo! en Barcelona o Morten Norby Larsen, Director de Experiencia del Usuario para Joost.

El tema de este año es “Traduciendo Arquitectura de la Información”. La conferencia ofrece 20 presentaciones en 2 días, con ponentes de primer nivel de Holanda, Dinamarca, Inglaterra, Polonia, Estados Unidos, España, Noruega, Alemania, Italia y Bélgica e incluye presentación de casos de estudios, paneles y posters que tratarán temas tales como:

  • Cómo localizar la arquitectura de la información
  • Arquitectura de la información que sirve para jugar
  • Navegando la Larga Cola: Cómo adaptar la IA a nichos de mercado
  • Persuasión en el comercio electrónico
  • Procesos y Patrones: Mejores prácticas
  • Las 7 leyes de la encontrabilidad: de espacios físicos a espacios digitales
  • Navegando la nube de tags: Estrategias de arquitectura de la informaicón para personas con discapacidades
  • El mapa móvil de la medicina
  • Transformado ideas de la web semantica a la arquitectura de la información

Enlace: Web oficial | Registro

El avance imparable de Linux

7 de Agosto, 2007 — LinuxComentarios (1)

Estos días han habido varias noticias interesantes sobre el uso de Linux en el escritorio. Hace un par de años le comentaba a un amigo que si conseguiamos tener una distribución de Linux en la que no fuera necesario entrar a la consola para montar dispositivos e instalar programas, podría subir el número de usuarios de pasaran sus escritorios a Linux. Ubuntu lo consiguió y abrió el camino a que lo usuarios dejaran de pensar que Linux es un sistema operativo para freaks o para hackers.

Dell decidió este año preinstalar Ubuntu en sus ordenadores y ahora ha sido Lenovo quien ha anunciado que a finales de año preinstalará SUSE en los ThinkPad. RedHat también ha anunciado que lanzará una versión de escritorio con soporte gratuito para un año.

Creo que en estos momentos Linux está adquiriendo la madurez necesaria para ser una opción seria para los usuarios en general. Atrás han quedado los tiempos en los que había que editar el fstab para poder grabar un DVD o cosas peores.

Con la salida de Vista (y su fracaso) la gente empieza a contemplar otras opciones que no sean Windows y de esto se va a beneficiar Apple y sobretodo Linux.

Habrá que estar atentos a los movimientos de HP que pueden ser vitales para el futuro de Linux, ya que si los tre principales fabricantes de ordenadores instalan Linux en sus máquinas el numero de usuarios aumentará espectacularmente y ya se sabe que esto es un efecto en cadena: “¿si al vecino le va bien su nuevo HP con Linux, porqué tengo yo que chuparme Vista que va como el culo?”

PD: lo dice uno que traicionó a la causa y se pasó a Mac hace 4 meses, pero que conste que tengo una partición con Ubuntu y los servidores que administro son Debian, que lo sepáis.

Formulario de contacto en RoR con Action Mailer

7 de Agosto, 2007 — Ruby on RailsComentarios (10)

Edito y amplío este post del 12 de diciembre del 2006 para intentar que el ejemplo sea más claro. Está probado en Rails 1.2.

localhost:~ User$ ./script/generate mailer Contact

Añadir al final del archivo config/environment.rb lo siguiente para que Action Mailer pueda autentificarse y enviar el correo.

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => 'smtp.website.com',
:port => 25,
:authentication => :login, # Don't change this one.
:user_name => "smtp_username",
:password => "smtp_password"}
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.default_charset = "utf-8"

Se puede enviar también utilizando sendmail poniendo únicamente
ActionMailer::Base.delivery_method = :sendmail

Ahora edita el archivo app/models/contact.rb y añade el método que enviará el email:

class Contact < ActionMailer::Base
def contact_email(email_params, sent_at = Time.now)
@recipients = "contact@website.co.uk" # Dirección donde se envía el correo
@from = email_params[:name] + " <" + email_params[:address] + ">"
@subject = email_params[:subject]
@sent_on = sent_at
@body["email_body"] = email_params[:body]
@body["email_name"] = email_params[:name]
end
end

En el directorio ‘views/contact’ crea el archivo contact_email.rhtml, este archivo es el contenido del email que se enviará a la dirección especificada anteriormente. En este caso se envían las variables “name” y “body”. Dentro de este archivo se puede poner texto y otras variables o incluso definirlo como html con las cabeceras correspondientes.

Name:
<%= @email_name %>
Message:
<%= @email_body %>

Vamos a crear el formulario de contacto. Crea una vista en el controlador principal, por ejemplo contacto.rhtml:

<%= start_form_tag :action=> "send_mail" %>
<label for="email_name">Name:</label>
<%= text_field "email", "name", :size => 30 %>
<label for="email_address">Email Address:</label>
<%= text_field "email", "address", :size => 30 %>
<label for="email_subject">Subject:</label>
<%= text_field "email", "subject", :size => 30 %>
<label for="email_body">Body:</label>
<%= text_area "email", "body", :rows => 8, :cols => 30 %>
<input value="Send Email" class="primary" type="submit" />
<%= end_form_tag %>

En el controlador principal añade el método siguiente que es el que procesa el formulario

def send_mail
Contact::deliver_contact_email(params[:email])
end

Hay un detalle importante: el nombre del método que se llama es deliver_contact_email, en el modelo el método se llama contact_email. Cuando se llama a un método que envía un email con ActionMailer hay que seguir esta convención y añadir “deliver” antes del nombre del método.
Siguiendo este ejemplo podemos tener otro método que envía otro email que se llame contact_email_factory. Cuando lo invoquemos desde el controlador habrá que hacerlo con Contact::deliver_contact_email_factory(@params[:email])

Sólo nos queda añadir un enlace para poder acceder al formulario. En la página que queramos ponemos el siguiente enlace:

<%= link_to 'Contacto', :controller => "controlador_principal", :action => "contacto" %>

En el controlador principal tiene que haber un método cómo este que es el que procesa el enlace y muestra la vista correspondiente:

def contacto
render :action => 'contacto'
end

Oscar, el gato que predice la muerte

27 de Julio, 2007 — Ciencia, CuriosidadesComentarios (2)

He leido hoy en el Periódico una noticia cuanto menos curiosa, que me hace reflexionar sobre lo poco que sabemos en realidad los humanos, a pesar de lo mucho que investigamos.

Oscar es un gato que pulula por la residencia geriátrica Steere House, en Providence (EEUU), donde cuidan a enfermos terminales y mentales en sus últimos días. Hasta aquí nada nuevo.

Pues bien, resulta que Oscar recorre los pasillos de la tercera planta y “detecta” cuando alguien esta a punto de morir, se sube en su cama, se pone a su lado y espera a que muera. Han comprobado que no falla, si Oscar se sube a la cama de alguien, en pocas horas fallece. Las enfermera ya lo toman como una señal y cuando ven al gato rondando una habitación llaman a los familiares y lo preparan todo.

“Su mera presencia al lado de la cama es vista por los médicos y el personal del geriátrico como un indicador casi absoluto de muerte inminente, lo que permite a los miembros de la plantilla avisar adecuadamente a los familiares”, cuenta David M. Dosa, trabajador del centro, que también es profesor de la facultad de medicina Warren Alpert, de la Universidad de Brown, también en Providence.

“Oscar llega a la habitación 313. La puerta está abierta y entra. La señora K. descansa tranquilamente en la cama, con la respiración constante pero débil. (…) Oscar salta sobre la cama y de nuevo huele el aire. Se detiene a considerar la situación y entonces gira sobre sí mismo dos veces antes de enroscarse junto a la señora K. (…) Una enfermera entra en la habitación para examinar a la paciente. Se detiene al notar la presencia de Oscar. Preocupada, deja apresuradamente la habitación y vuelve a su mesa. Coge el historial médico y comienza a hacer llamadas”, relata el artículo. A la media hora, empiezan a llegar los familiares y el cura alertados por la enfermera. Poco después, la señora K. fallece.

Tan curioso es este hecho que la revista ‘The New England Journal of Medicine’ se ha hecho eco de la noticia y la ha publicado.

Lanzamiento de TecnoDiario

20 de Julio, 2007 — General, ProyectosComentarios (1)

Me complace anunciaros el lanzamiento (beta no oficial) de TecnoDiario.net, un proyecto a medio camino entre un blog y un diario on-line sobre tecnología, Internet y software.
Está en fase beta a falta de algunos pequeños cambios. La semana que viene será el lanzamiento oficial con nota de prensa incluida.
Lo posteo aquí para que lo vayáis viendo y me déis vuestra opinión. Espero que os guste la iniciativa.

Si el mundo fuera Open Source…

20 de Julio, 2007 — Software LibreComentarios (0)

Hacía tiempo que no entraba en Kriptopolis y me ha hecho gracia el topic que han puesto:
Nos gustaría cambiar el mundo, pero no tenemos el código fuente
¿Empezáis a ver claras las ventajas del Open Source?

Toolbox de diseño gráfico Open Source: 100 herramientas, recursos y templates

19 de Julio, 2007 — Linux, Propiedad IntelectualComentarios (0)

Vía Digg encuentro una interesante selección de 100 recursos varios (Open Source) para diseño gráfico. En lugar de poner el enlace voy a copiar el post ya que vale la pena conservarlo.
(más…)

« Entradas anterioresEntradas siguientes »
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License. | Emili Parreño