sábado, 20 de noviembre de 2010

Modificación de yUMLmeRails de Nelson Silva

yUMLmeRails es un plugin de Nelson Silva para extraer la información de los modelos y generar el modelo UML usando RailRoad o mediante la web http://yuml.me

El caso es que tengo demasiados modelos para plasmarlo en una única imagen y quería seccionarlo en varias. La modificación permite seleccionar los modelos sobre los que realizar el diagrama.

Para lograrlo, he añadido parámetros al generador de diagramas y he añadido una tarea rake que acepta como argumentos los modelos que tomará como base.

Los cambios son los siguientes:

Fichero 'lib/railroad/yUMLmeRails.rb'
línea #13:

define generate_diagram(additional_options={})

añadido desde línea #35, tras OpenStruct.new():

only=additional_options[:only].split('//').map{|fn| fn.include?('.rb') ? fn : "app/models/#{fn}.rb" }
puts "Generating for models: " + only.join(',')
options.only=only

---------------------
Fichero 'lib/rails_road/'
Sustituir en los métodos load_classes y generate las líneas:

files = Dir.glob("app/models/**/*.rb")
files += Dir.glob("vendor/plugins/**/app/models/*.rb") if @options.plugins_models
files -= @options.exclude

por

if @options.only && @options.only.size>0
files = @options.only
else
files = Dir.glob("app/models/**/*.rb")
files += Dir.glob("vendor/plugins/**/app/models/*.rb") if @options.plugins_models
files -= @options.exclude
end


---------------------
Fichero 'lib/tasks/yUMLmeRails.rake'
añadido:

desc "Get yUML URL for only models"
task :url_only, :only, :needs => :environment do |t, args|
args.with_default(:only => [])
puts YUMLME_URL << only =""> args[:only])
end

---------------------

Además, he añadido un controlador para generar desde el navegador:
Fichero añadido: 'app/controllers/yuml_controller.rb'

class YumlController < models="Dir.glob(">b}
end
def show_model
@models=params[:models].map{|x| File.basename(x).chomp('.rb')}
@models||=[]
@address=YUMLmeRails.generate_diagram({:only => @models})
@url="http://yuml.me/diagram/scruffy/class/#{CGI.escape(@address)}"
end
private
def extract_class_name(filename)
File.basename(filename).chomp(".rb").camelize
end
end

------------------------------
Fichero 'app/views/yuml/index.html.erb'

Models


<%form_tag :action => 'show_model' do -%>

    <%@models.each do |m|%>

  • <%=check_box_tag 'models[]', m%><%=h(m)%>

    <%end%>

<%=submit_tag 'Ver'%>
<%end%>

------------------------------------------
Fichero 'app/views/yuml/show_model.html.erb'

Modelo UML


Modelos:



    <%@models.each do |m|%>
  • <%=h m%>

  • <%end%>

URL en yuml.com:


<%=@address%>


IMAGEN DEL MODELO


<image src="<%=@url%>" />

-------------------------------
Para usar con rake: rake yUMLmeRails:url_only[model1//model2//...]
Para usar con rake y ruta: rake yUMLmeRails:url_only[app/models/model1.rb//...]
-------------------------------
Ejemplo del modelo completo con rake yUMLmeRails:url

Ejemplo del modelo usando rake yUMLmeRails:url_only[alumno]

lunes, 25 de octubre de 2010

FCKEditor múltiple con Lipsiadmin en Rails

En un anterior artículo se indicó la forma de usar un textarea con FCKEditor.

En el caso de necesitar varias entradas de textarea con el editor, se pueden hacer los siguientes cambios:

Cambiar el archivo javascripts/form.js, añadiendo otro identificador para que se incluya el FCKEditor con él:


function styledForms() {
hoverEffects();
buttonHovers();
formHovers();
//FCKEditor
var sBasePath = '/fckeditor/'
var oFCKeditor = new FCKeditor( 'FCKEditor', '100%', '400' ) ;
oFCKeditor.BasePath = sBasePath ;
oFCKeditor.ReplaceTextarea() ;
//PARA CADA TEXTAREA ADICIONAL CON FCKEDITOR DOS LÍNEAS COMO LAS SIGUIENTES
oFCKeditor.InstanceName='FCKEditor2' ;
oFCKeditor.ReplaceTextarea() ;
}


El atributo 'id' del textarea debe coincidir con los declarados anteriormente. En una de las vistas del backend del formulario parcial "_form.html.haml":


-tab "Clasificacion" do
%ul.form
%li
%div{:id => "clasificacion"}
=text_area :clasificacion, :tabla_clasificacion, :rows => 30, :id => 'FCKEditor'
-tab "Calendario" do
%ul.form
%li
%div{:id => "calendario"}
=text_area :clasificacion, :tabla_calendario, :rows => 30, :id => 'FCKEditor2'

sábado, 29 de mayo de 2010

Cómo hacer tu propio lápiz infrarrojo (IR pen) y táctil para usar con Wiimote

Tener una pizarra digital interactiva se ha convertido en algo muy asequible. Con un simple mando de Wii, un lápiz infrarrojo (IR pen) y algunos de los programas gratuitos o no, por menos de 100 €, aparte del proyector ya se tiene la pizarra digital.

En este artículo voy a mostrar cómo fabricar tu propio lápiz infrarrojo con pulsador manual y pulsación por presión del lápiz.

Material:



- Led infrarrojo (Vishay TSAL6400).
- Pulsador de placa horizontal de botón ancho.
- Pulsador de rosca para carcasa redondo.
- Portapilas AAA (No había de una pila, así que he apañado dos a partir de uno doble).
- Rotulador de pizarra blanca.
- Cable.
- Soldador y estaño.
- Termofusible.

Perforar el pulsador de rosca con un alambre en el soldador (enrollar estando desenchufado y frío!!!) para que entre una patilla del diodo infrarrojo y pegarla con pegamento instantáneo (el de la gota).





El portapilas AAA lo conseguí a partir de uno doble.



Perforar girando un cúter 4 agujeros para que encaje el pulsador plano. Agrandarlo con la punta de un destornillador. Retirar un trozo de envoltorio y rallar la superficie para que agarre al final el termofusible.


En el rotulador de pizarra blanca que tengo hay que retirar el tope interno. Se puede usar un destornillador plano pequeño.


La disposición interna será así:


He fabricado un soporte con el borde de una tarrina de CDs o DVDs:







Las conexiones y la posición de los componentes:



El portapilas que queda sin lateral se puede arreglar añadiendo un trozo de plástico (puede valer de tarrina de CD o cualquier envoltorio semirrígido (como el de un pendrive):



Las conexiones de las partes que quedarán en el interior:


Utilizar cables como guía para los cables del pulsador plano exterior y para guiar el led infrarrojo:


Soldar las puntas de los cables guía a los dos cables que van al pulsador externo y une el cable guía de la punta al led infrarrojo. Además he puesto funda de cable (lo que sobra al pelarlo) a las patas del led infrarrojo, he añadido un trozo de palillo de dientes entre las patas para darle mayor rigidez y lo he rodeado con cinta aislante. También he puesto cinta aislante por el lateral del pulsador de rosca para sujetar el cable que va al led y que no tire hacia fuera:



Ahora hay que ir tirando de los cables guía y empujando el pulsador con el led colocado. El soporte debe entrar un poco forzado pero no en exceso. Cuando esté bastante dentro seguir empujando con el portapilas. Éste es el paso delicado. Una vez que salga el led por la punta, retirar la cinta aislante y comprobar que funciona al presionar:



Ahora soltar los cables guía y soldar los cables al pulsador exterior en dos patas cruzadas (si uno va arriba a la derecha, el otro va abajo a la izquierda). Acabar pegandolo con termofusible:


Ya sólo falta cortar el tapón trasero para que se ajuste al final del portapilas y que así no se mueva nada en el interior:


Y ya está acabado:


Recuerda que contra más blando sea el pulsador de rosca más fácil será la pulsación por presión.

Vídeo de muestra de funcionamiento:

miércoles, 12 de mayo de 2010

Pizarra digital en Asus EEEPC con Ubuntu con el mando de Wii

Con el mando de la Wii es posible tener una pantalla táctil muy asequible.

En Windows no tuve problemas para hacer funcionar los programas que conectan y gestionan el mando de la Wii, pero en Linux siempre salía un problema con la pila (librerías) bluetooth: "Native Library bluecove not available". La distribución es la 9.10.

Probé a utilizar por separado bluz-gnome y gnome-bluetooth, pero daba el mismo fallo.

En freakingtips conseguí la solución al error: instalar las librerías de desarrollo de bluetooth libbluetooh-dev.


sudo apt-get install libbluetooth-dev


Usando el paquete gnome-bluetooth, ya conectaba sin problemas.

Los programas que he probado:

GTKWHITEBOARD (1.3): Funciona de lujo. Permite usar el botón derecho del ratón, apuntando a una zona exterior del borde de la pantalla. Está escrito en Python, por lo que hay que tener instaladas las librerías, que normalmente ya vienen por defecto. Siempre es importante leer las instrucciones que acompañan a los programas para evitar problemas de dependencias.

WIIMOTEWHITEBOARD: Funciona muy bien. No permite el botón derecho del ratón, pero se puede observar lo que ve la cámara del mando de la Wii para comprobar la calibración. Otro pequeño inconveniente es que hace falta descargarse la librería de BlueCove (versión 2.1.0) e incluirlas dentro del archivo JAR. Aquí se puede leer cómo hacerlo completo, pero en italiano. Para ver cómo incluir la librería BlueCove en inglés, mirar en la carpeta HELP de WiimoteWhiteboard.

martes, 2 de marzo de 2010

Problema con portátil de la Junta que se para en grub

En caso de que el portátil no arranque el sistema gráfico, y en su lugar aparezca el indicador "grub>", es síntoma que falta un archivo (concretamente menu.lst). Linux crea archivos de seguridad, por lo que hay una esperanza. Puede que haya sido debido a un apagado incorrecto.

Tras el indicador, escribir los siguientes pasos pulsando la tecla Enter tras cada línea (los números no se ponen y antes de '(' hay un espacio):
  1. root (hd0,0)
  2. setup (hd0)
  3. configfile /grub/menu.lst~
  4. reboot
Notas:
- el "0" de (hd0,0) es un cero.
- antes de los paréntesis va un espacio
- el teclado estará en inglés, por lo que los paréntesis están en el 9 y el cero, y la barra (/) en el menos (-)
- para escribir ~ se pulsa "AltGr" junto con la tecla "4", aunque no es necesario porque se puede autocompletar usando la tecla tabulador (a la izquierda de la Q) cuando esté escrito /boot/grub/men

Con estas instrucciones debería arrancar. Los siguientes inicios no deben tener problema. Si vuelve a aparecer el problema es posible que también haya desaparecido el archivo menu.lst~, por lo que la solución no será tan "sencilla".
 
javascript:void(0)