Convertir Textmate snippets a Gedit/Pluma

Este es otro pequeño ejemplo de esas cosas que vas dejando por que nunca tienes y sabes que te hacen falta. Ayer le dedicé tiempo y ya puedo decir que sí es posible convertir los snippets de TextMate a Gedit o Pluma para Mate-desktop.

 

Nicolas Alpi ( https://github.com/spyou ) desarolló hace tiempo un pequeño script en ruby que extrae los ficheros de snippets de Textmate para Gedit. Es un script muy muy sencillo en ruby en el cuál he corregido un pequeño detalle y le he agregado la posibilidad de indicar el directorio donde están los snippets. Una vez que ejecutas el script tmsnippets2gedit.rb se genera un fichero result.xml con la conversión. Este fichero deberemos copiarlo a la ruta de donde estén los demas ficheros de Gedit o Pluma con el nombre de la extensión a la que se aplicarán. Además hay que cambiar la cadena ‘[LANGUAGE]’ por el nombre de la extensión.

 

En mi caso lo quiero usar para importar los ficheros publicados en el repositorio oficial de phpcake Textmate bundle

 

Bueno… alguno se preguntará ¿ qué es un snippet ?. Los editores de texto como textmate, sublime, gedit o mi querido pluma tienen esta pequeña funcionalidad llamada snippets ( se puede traducir como recortes o fragmentos ) que lo que hacen es escribir un bloque de texto usando un pequeño ‘trigger‘ o disparador y presionando la tecla TAB.

 

Como la tecnología tiene que ayudar a mejorar tu vida, en resumen, lo que hace un snippet, es permitir que curremos más rápido, escribiendo un bloque de texto presionando un par de caracteres y el tab. Por ejemplo si quiero agregar en una vista un texto internacionalizado en PHPCake o Wordress tendré que escribir algo como esto :
[shell]<?php echo __(‘Translate this’) ?>
[/shell]
 

La cantidad de veces que hay que escribir el tag de php es odiosa y terriblemente aburrida, de forma que si uso un snippet puede asignar ‘echo’ + ‘tab’ y escribirá: <?php echo __(‘Translate this’) ?>

La configuración sería como en la imagen adjunta :
 

pluma-snippet-18n-echo

 

 

 
 

Ahora que ya tenemos todas la piezas, ¿como usar los snippets de cakephp en gedit/pluma ? Aquí tenéis un fragmento de los que me gustan a mí de copiar y pegar y listo:
[shell]Example to convert cakephp textame to gedit/pluma snippets

git clone https://github.com/jsenin/tmsnippets2gedit
sudo gem install ruby ruby-nokogiri

git clone https://github.com/cakephp/cakephp-tmbundle
cd cakephp-tmbundle
ruby ../tmsnippets2gedit.rb

sed -i ‘s/\[LANGUAGE\]/php/g’ result.xml
sudo cp result.xml /usr/share/pluma/plugins/snippets/php.xml

or

sudo cp result.xml ~/.config/pluma/snippets/php.xml[/shell]

rails + omniauth + omniauth-twitter

Llevo toda la tarde con el error :

[shell]
Error authenticating
/auth/failure?message=invalid_response
[/shell]

He estado siguiendo el manual de asciicast 241 241-simplemente-omniauth

y me faltó por crear el método create_with_omniauth

[shell]
/app/models/user.rb

class User < ActiveRecord::Base
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth[«provider»]
user.uid = auth[«uid»]
user.name = auth[«user_info»][«name»]
end
end
end
[/shell]

Ruby on Rails + Papercliip: cannot load such file — cocaine (LoadError)

Estoy usando Paperclip para asociar adjuntos y al generar el modelo casca este error :
[shell]
$ rails generate paperclip pet photo
/var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require’: cannot load such file — cocaine (LoadError)
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `block in require’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:223:in `block in load_dependency’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:640:in `new_constants_in’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:223:in `load_dependency’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require’
from /home/jorge/Proyects/Clientes/elcielodelosgatos/vendor/plugins/paperclip/lib/paperclip.rb:45:in `
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `block in require’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:223:in `block in load_dependency’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:640:in `new_constants_in’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:223:in `load_dependency’
from /var/lib/gems/1.9.1/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require’
from /home/jorge/Proyects/Clientes/elcielodelosgatos/vendor/plugins/paperclip/init.rb:1:in `block in
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/plugin.rb:81:in `eval’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/plugin.rb:81:in `block in

from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:30:in `instance_exec’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:30:in `run’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:55:in `block in run_initializers’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:54:in `each’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:54:in `run_initializers’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/application.rb:96:in `initialize!’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/railtie/configurable.rb:30:in `method_missing’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/application.rb:83:in `require’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/application.rb:83:in `require_environment!’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:22:in `
from script/rails:6:in `require’
from script/rails:6:in `


[/shell]

Para solucionarlo, hay que instalar la gema cocaine ( A small library for doing (command) lines )

[shell]
gem install cocaine
[/shell]

Sige apareciendo el error así que hay que agregarlo a Gemfile
[shell]
echo «gem ‘cocaine'» >> Gemfile
[/shell]

y ya funciona.

`autodetect’: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

Una de ruby + rails en Debian wheezy.
Estoy tocando ruby on rails de nuevo y al actualizar rails en debian he tenido que hacer unos retoques en la instalación.

Lo primero es instalar ruby1.9.3
[shell]
apt-get install ruby1.9.3
[/shell]

luego, rails a la última 3.1 hay que hacerlo con gem ya que en Debian aún no está disponible

[shell]
gem install rails
[/shell]

Pues bien, me he creado un proyecto nuevo y al ejecutar el servidor me aparece este mensaje:
[shell]
$rails server
/var/lib/gems/1.9.1/gems/execjs-1.2.12/lib/execjs/runtimes.rb:47:in `autodetect’: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /var/lib/gems/1.9.1/gems/execjs-1.2.12/lib/execjs.rb:5:in `<module:ExecJS>’
from /var/lib/gems/1.9.1/gems/execjs-1.2.12/lib/execjs.rb:4:in `<top (required)>’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require’
from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:52:in `require’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:52:in `block in <top (required)>’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:49:in `tap’
from /var/lib/gems/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:49:in `<top (required)>’
from script/rails:6:in `require’
from script/rails:6:in `<main>’
[/shell]
Como hace mucho que no toco rails y ha cambiado bastante me he ido a buscar a google y encontré este enlace : http://www.ruby-forum.com/topic/1899392

La solución en mi caso ha sido moficando el fichero Gemfile
[shell]
echo «gem ‘execjs'» >> Gemfile
echo «gem ‘therubyracer'» >> Gemfile
bundle install
[/shell]

Con ‘bundle install’ rails se encarga de instalar lo que necesite, en mi caso ha funcionado correctamente.

[ruby] /usr/lib/ruby/1.8/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)

En una actualización de una máquina Debian con un proyecto funcionando con Ruby On Rails 1.6, hemos tenido este error al reiniciar la máquina y previa actualización:

[shell]
/var/www/vhosts/hostingaldescubierto.com/httpdocs/rails/script/server
/usr/lib/ruby/1.8/active_support/dependencies.rb:55: uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require’
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require’
from /usr/lib/ruby/1.8/active_support.rb:56
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require’
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require’
from /var/www/vhosts/hostingaldescubierto.com/httpdocs/rails/vendor/rails/railties/lib/commands/server.rb:1
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require’
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require’
from /var/www/vhosts/hostingaldescubierto.com/httpdocs/rails/script/server:3

[/shell]

Para solucionarlo hemos usado la información que nos proporciona arunagw en stackoverflow.com

Consiste en editar el fichero boot.rb y agregar al pricipio:
[shell]
require ‘thread’
[/shell]

y en environment.rb :
[shell]
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new(‘1.3.7’)
module Rails
class GemDependency
def requirement
r = super
(r == Gem::Requirement.default) ? nil : r
end
end
end
end

[/shell]

A partir de estos cambios, funciona sin problemas.

[debian][rails] Could not find [GEM] locally or in a repository

Arrrrrg !!!!!!

Tiempo hacía que tenía ganas de volver a rails pero el trabajo le quita a uno la vida y las ganas :D.
Hoy he retomado un ambicioso proyecto que tengo funcionando de forma automática y que me apetece evolucionar. Para ello estoy montando mi plataforma de desarrollo e instalando el software necesario.

Llevo perdida como una hora y media intentando instalar gemas ( ‘gems’ ) de ruby, así que como ya está soucionado, aquí os dejo la solución ( con Debian claro )

El caso es que al intentar hacer algo como esto :gem install nokogiri -r

siempre me aparecía este error :
Could not find nokogiri locally or in a repository

Al final he optado por hacer una búsqueda en el repositorio :
# gem list –remote

*** REMOTE GEMS ***

ERROR: While executing gem … (Gem::RemoteFetcher::FetchError)
bad response Found 302 (http://gems.rubyforge.org/latest_specs.4.8)

WTF !!!

Ruby y Rails siempre me han dado la impresión de ser algo muy estable usable y funcional… vamos una JOYA .

El caso es que parce que hay algún problema con el paquete ‘gems’ de ruby y genera un fichero en ~/.gem que provoca estos contratiempos. Eliminandolo parece volver a funcionar como debe ser.

p.d.: se me ha tostao firefox mientras escribía con scribefire y me ha conversado lo que llevaba escrito !!!!

/var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:269:in `require_frameworks’: no such file to load — net/https (RuntimeError)

Haciendo un rake db:migrate me apareció este error, otro mas 😀

[shell]
/var/lib/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:269:in `require_frameworks’: no such file to load — net/https (RuntimeError)
[/shell]

corregido con un simple comando ( que grande es Debian !!! )

[shell]
apt-get install libopenssl-ruby
[/shell]

como autocompletar código de ruby, la fuerza del tab

Acabo de encontrar la forma en la que irb soporta autoplete, o lo que es lo mismo, que cuando escribes código, le das al punto y al tabulador y aparecen las posibles funciones y métodos que soporta.

Simplemente hay que añadir este fragmento de código a tu ~/.irbrc

[shell]
IRB.conf[:AUTO_INDENT] = true
IRB.conf[:USE_READLINE] = true
IRB.conf[:LOAD_MODULES] = [] unless IRB.conf.key?(:LOAD_MODULES)
unless IRB.conf[:LOAD_MODULES].include?(‘irb/completion’)
IRB.conf[:LOAD_MODULES] << ‘irb/completion’
end
[/shell]

Así que por ahora, seguiré sin usar eclipse 😀

Puedes ver el artículo original en este enlace