Monday, September 29, 2008

Gedit Cheat Sheet para Ruby on Rails

Aunque existen varios IDE's para Ruby on Rails, me he dado cuenta que con un simple editor y varios snippets es suficiente para desarrollar aplicaciones web con Ruby on Rails. Al final me he decidido por Gedit, el editor por defecto en Gnome (el de Ubuntu).

He seguido algunas guías que le dan un aspecto parecido al textmate de mac:


Y he prepararado un cheat sheet (chuleta o chivo) para los snippets más utilizados:



My Gedit Cheat Sheet for Rails Development

Thursday, September 25, 2008

Browsershoots, prueba tu diseño web en disintos navegadores

Uno de los principales inconvenientes que tienen los desarrolladores/diseñadores web es la variedad de navegadores de Internet que existen, y que en algunos casos cada uno tiene su propia forma de mostrar el HTML y el CSS, especialmente Microsoft Internet Explorer (grrrr!). Muchas veces me ha pasado que tengo mi aplicación lista y probada con Mozilla Firefox, Safari y Chrome, pero cuando la voy a ver en Internet Explorer está como si fuera otra, y tengo que empezar a agregar hacks al CSS para que se adapte al navegador, cuando debería ser lo contrario.
Mientras trabajaba con mi última aplicacion, me enteré de browsershoots, un sitio web que realiza capturas de pantallas de un diseño web en distintos navegadores y sistemas operativos, y luego te muestra cómo se ve en cada uno. Es una excelente herramienta para los que trabajamos en la web.

Thursday, September 18, 2008

BOSSMan: Yahoo! BOSS + Ruby

Con el lanzamiento de Yahoo! BOSS ha llegado BOSSMan, un plugin/gem creado por el desarrollador Jay Pignata que permite interactuar con éste nuevo API de Yahoo! de una forma bien simple, como son las cosas en Ruby.

Para ver como funciona he creado un buscador de noticias bilingüe utilizando Ruby on Rails, http://yahoosearch.heroku.com. Aquí está el código:


Instalación de BOSSMan:
gem sources -a http://gems.github.com
gem install jpignata-bossman

controllers/search_controller.rb

require 'rubygems'
require 'bossman'
include BOSSMan

class SearchController < ApplicationController
def index
@results = Array.new
@language = [true, false]
if (request.post? and params[:query] != "")
BOSSMan.application_id = "<Your Application ID>"
@news = BOSSMan::Search.news(params[:query], {
:region => 'us',
:lang => params[:language],
:age => "7d",
:count => 10 })
@results = @news.results if @news.count != "0"
@language = [false, true] if params[:language] == 'es'
end
end
end


views/layout/application.html.erb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html>
<head>
<title>News from Yahoo! by BOSSMan</title>
<%= stylesheet_link_tag 'style' %>
</head>
<body>
<div id='header'>
<h1>News from Yahoo! by BOSSMan</h1>
</div>
<div id="content">
<%= yield %>
</div>
<div id="footer">
<div id="altnav">
<%= link_to 'Home', '/' %> -
<%= mail_to 'contact@yahoosearch.com', 'Contact' %>
</div>
Yahoo! Search by BOSSMan
</div>
</body>
</html>


views/search/index.html.erb

<div id="form">
<% form_tag :action => 'index' do%>
<%= radio_button_tag 'language', 'en', @language[0], {} %>
English
<%= radio_button_tag 'language', 'es', @language[1], {} %>
Español<br/>
<%= text_field_tag 'query', params[:query], :size => '50' %>
<%= submit_tag 'Search' %>
<% end %>
</div>
<% if @results.length != 0 %>
<div id="results">
<%= render :partial => 'results', :collection => @results %>
</div>
<% end %>


views/search/_results.html.erb

<div id="result">
<h4><%= link_to results.title, results.url %></h4>
<p><%= results.abstract %></p>
<h6><%= link_to results.source, results.sourceurl %>
<%= "#{results.date} #{results.time}" %></h6>
</div>


public/stylesheets/style.css

body {
background-color: #5a8f5e;
font-family: Verdana;
}

#header{
text-align: center;
}

#content {
background-color: white;
border: 1px solid black;
width: 750px;
margin: 20px auto;
padding: 20px;
}

#form {
text-align: center;
}

#results{
margin-top: 20px;
padding: 5px 20px 5px 20px;
border: 1px solid gray;
}

#result h4 {
margin-bottom: 5px;
}

#result h6 {
margin-top: 5px;
}

#result p {
margin-top: 0px;
margin-bottom: 0px;
}

#footer {
margin: 0px auto;
width: 750px;
color: #c9c9c9;
line-height: 20px;
}

#footer a {
color: #c9c9c9;
text-decoration: none;
}

#footer a:hover {
color: #000000;
}

#footer #altnav {
width: 350px;
float: right;
text-align: right;
}

Thursday, September 11, 2008

Yahoo! Boss, crea tu propio servicio de búsquedas

Yahoo! abre su API de búsqueda lanzando Yahoo! BOSS (Build your Own Search Service), especialmente pensado para crear buscadores personalizados que puedan utilizar toda la base de datos de Yahoo! en sus resultados. Como ponen en su sitio web, sólo es necesario agregar tus ideas para lograr un resultado novedoso. Por el momento se permiten búsquedas web, imágenes, noticias y sugerencias de palabras.


Aunque ya existen API's y servicios web de búsqueda, la ventaja de BOSS es que no limita la cantidad de resultados o búsquedas por día, te permite organizar la información como quieras y en el futuro se podrán recibir ganancias por su utilización. Algunos de los sitios web que ya lo están utilizando son hakia, Me.dium Search, Daylife y Cluuz.

Lo he probado con algo sencillo que estoy creando (un buscador de noticias bilingüe) y me ha parecido bastante rápido y fiable con los resultados.

Yahoo! cada vez se abre más a los desarrolladores, adaptándose a los nuevos esquemas de la web, y con ésta iniciativa pretende cambiar la forma en la que se despliegan los resultados de las búsquedas.

Abraza un programador

Necesitamos de tu afecto, ofrécenos un abrazo.



Frases a destacar:

  • I spend half my days in meetings about how to get more work (instead of working).
  • Every day my boss changes his mind about what we're building.

Tuesday, September 2, 2008

Patentes abusrdas

Es cierto que en ocasiones es necesario patentar ideas, pero en otras es totalmente absurdo. Es el caso de GraphOn, que está demandando a varios sitios web (Google, Yahoo!, ...) por mantener automatizada con Internet una base de datos. Siendo ésto un proceso tan genérico en Internet, en caso de que GaphOn gane la demanda la mayoría de sitios web tendrán que pagarle por su patente. ¡Que absurdo!

Las personas encargadas de patentar deberían tener más conocimiento de las tecnologías para no volver a cometer cosas como éstas.