lunes, noviembre 14

Fortificando NGINX

miércoles, noviembre 2

Julian Assange: “No he sido acusado de ningún delito en ningún país”

Julian Assange: “No he sido acusado de ningún delito en ningún país”:


Tras la noticia que os hemos estado contado esta mañana por la cual Julian Assange ha perdido el recurso de apelación contra su extradición a Suecia, la cabeza visible de WikiLeaks ha emitido un corto comunicado a su salida de los juzgados.

Con un escueto y claro “No he sido acusado de ningún delito en ningún país”, el hombre ha explicado su sentir después de emitirse la sentencia. Julian Assange no ha querido dar más explicaciones y ha remitido próximamente a los medios a la web, lugar desde el que presumiblemente se extenderá sobre el camino que ha tomado su posible extradición y los pasos que dará a partir de ahora.

A la salida de esta corta comparecencia, el movimiento Occupy en Londres ha elevado varias copias de la sentencia emitida en su contra en solidaridad con el hombre.

Sea o no una caza de brujas, Assange se encuentra a un paso de ser extraditado en Suecia, país que podría permitir posteriormente su entrada a Estados Unidos donde presuntamente le podría esperar un juicio por las informaciones filtradas a través de WikiLeaks.

Quizá hoy más que nunca vale la pena escuchar las palabras Noam Chomsky emitidas ayer tras su participación en Panel 2.0. Detrás de la trama sobre la investigación a Assange podría encontrarse el esfuerzo de Estados Unidos por derribar cualquier posibilidad de que WikiLeaks siga operando tras el bloqueo que ha acabado asfixiando a la organización hasta el punto de parar sus actividades.





martes, septiembre 15

Miniaturas de PDFs en Paperclip

El otro dia estube peleando para que mi aplicacion Rails pudiera hacer miniaturas de los PDFs.Actualmente utilizo PaperClip para gestionar mis archivos y leyendo la documentacion me di cuenta de que hay una manera muy sencilla (cuando se sabe) de hacerlo.

EL modelo sobre el que voy a trabajar es Documentos < AR:Base el cual tiene:

has_attached_file :archivo,
    :styles => {
      :thumb => ["100x100",:jpg],
      :small  => ["150x150",:jpg],
      :micro => ["50x50",:png]},
      :processors => lambda { |a| a.archivo.content_type.match(/pdf/) ? [ :compress ] : [ :thumbnail ] }


En processors utilizo lambda para elegir que procesador utilizar segun el tipo de archivo: compress para los pdfs y thumbnail para el resto.

Tambien tengo puesto que solo haga miniaturas para PDFs y imagenes en un filtro before_post_process

 before_post_process :check_content_type_for_thumbnail

 
 def check_content_type_for_thumbnail
    #Si devuelve true,seguira el preproceso
    return true if self.archivo.content_type.match(/image/)
    return true if self.archivo.content_type.match(/pdf/)
    return false
  end

Una vez hecho esto, en vendor/plugins/paperclip/lib/paperclip/ puedes dejar las clases con tus propios procesadores.El mio es muy sencillo, lo unico que hace es ejecutar el convert de ImageMagick para generar la miniatura.

module Paperclip
  class Compress < Processor
    attr_accessor :file

    def initialize file, options = {}, attachment = nil
      Paperclip.log("[PAPERCLIP::Processor::Compress]Inicializando con #{file} #{options} #{attachment}")
      super
      @file = file
      @options = options
      @attachment = attachment
      @format = options[:format]
      @instance = @options[:instance]
      @current_format = File.extname(@file.path)
      @basename = File.basename(@file.path, @current_format)
    end
   
    def make
      Paperclip.log("[PAPERCLIP::Processor::Compress] #{@options[:instance].class}")
      @file.pos = 0 # Reset the file position incase it is coming out of a another processor     
      dst = Tempfile.new([@basename, @format].compact.join("."))
      dst.binmode
      args = "-resize #{@options[:geometry]} -format #{@format.to_s.gsub(".","")} #{@file.path}[0] #{dst.path}"
      Paperclip.log("[PAPERCLIP::Processor::Compress] Voy a empezar a crear la miniatura #{args}")
      begin
        success = Paperclip.run('convert',args)
      rescue PaperclipCommandLineError => e
        Paperclip.log("#{e.inspect}")
        raise PaperclipError, "Ha ocurrido un error generando la miniatura#{@basename} #{$!}" if @whiny_thumbnails
      end
      dst
    end   
  end
end


Para poder utilizar el log, es necesario
  Paperclip.options[:log] = true

Para recibir la instancia con la que estaba trabajando tuve que modificar vendor/plugins/paperclip/lib/paperclip/attachment.rb, en concreto post_process_styles :

- Paperclip.processor(processor).make(file, args, self)
+ Paperclip.processor(processor).make(file, args.merge(:instance => @instance),self)


Una vez hecho esto, a funcionar.Muy importante devolver el resultado en el Procesador, a mi se me olvido y estuve un buen rato peleandome con un error muy extraño en el .save del controlador que lo use.



martes, diciembre 2

Problema compilando Ruby/openSSL en CentOS 3.1

Intentando compilar Ruby-1.8.6 para una instalacion antigua de CentOS, concretamente una 3.1 me encuentro con el problema de que no es capaz de darle soporte SSL.Mirando dentro de ruby-1.86/ext/openssl el mkmf.log veo que el problema viene porque no encuentra la cabecera de kerberos krb5.h...pero deberia, porque si esta instalada.

/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory

Al parecer el problema viene porque algunas versiones antiguas de RedHat anteriores a la 8, tienen cambiada la ubicacion de esta libreria que en vez de estar en /usr/include/kerberos esta en /usr/kerberos/include

Para solucionarlo lo que hay que hacer es pasarle la ubicacion de la libreria al compilador.

/src/ruby-1.8.7 # CPPFLAGS=-I/usr/kerberos/include ./configure

Con esto solucionamos el problema.

viernes, octubre 24

Problemas al subir videos FLV grandes a MediaWiki

Hoy me he estado peleando con el MediaWiki porque tras haber instalado un plugin para que acepte videos FLV, cuando intentaba subir un video de mas de 2Mb,mostaraba una pantalla en blanco.

Lo primero que he hecho ha sido modificar en el php.ini las siguientes directivas:

upload_max_filesize,max_execution_time, max_input_time, memory_limit y post_max_size

Sin embargo, tras probar distintas configuraciones he acabado pensando que me sucedia un Out Of Memory al subir los archivos grandes, pero no ha sido asi.Seguidamente he seguido buscando y me he encontrado con que en los casos de archivos grandes, MediaWiki hace uso de includes/specials/SpecialUpload.php, y en el la funcion detectScript($file, $mime, $extension).

Al parecer, lo unico que pasaba es que estaba reconociendo el tipo MIME del flv como text/plaintext.Para cambiarlo he ido a /usr/share/file/magic.mime y he añadido el tipo MIME para los flv.

0    string        FLV            video/x-flv
 

sábado, septiembre 6

Problemas con iPatcher en Leopard

Problema 1) (solo ocurre en Mac Intel)

Leopard (incluso con el update 10.5.1) tiene una versión de una biblioteca que tiene solo la arquitectura PowerPC, por lo cual cuando alguna aplicación la usa se cae sin remedio. El error que van a ver es como este:

-------------------------------------
Dyld Error Message:
  Library not loaded: /usr/lib/libcrypto.0.9.dylib
  Referenced from: /Library/Frameworks/net.juniper.DSCoreServices.framework/Versions/5.5.0/net.juniper.DSCoreServices
  Reason: no suitable image found.  Did find:
    /usr/lib/libcrypto.0.9.dylib: mach-o, but wrong architecture
    /usr/lib/libcrypto.0.9.dylib: mach-o, but wrong architecture
-------------------------------------

Solución:

Abrir la terminal.app y ejecutar esta secuencia de comandos:

cd /usr/lib
sudo cp libcrypto.0.9.dylib libcrypto.0.9.dylib.old
sudo cp libssl.0.9.dylib libssl.0.9.dylib.old
sudo ln -sf libcrypto.0.9.7.dylib libcrypto.0.9.dylib
sudo ln -sf libssl.0.9.7.dylib libssl.0.9.dylib



Problema 2)

Si utilizan algún parche hecho con iPatcher en Leopard nunca funciona dando un error: SHA1 error.

Para solucionarlo hay que "Mostrar el contenido del paquete" de la app del parche, ir a la subcarpeta Contents/MacOS y sustituir el binario iPatcher por este:
http://rs206.rapidshare.com/files/66524321/iPatcher.zip

Luego de eso ejecutan el app parcheador y funciona.

Enjoy si a alguno le sirve la info.

viernes, septiembre 5

Proxy SOCKS

Para empezar, un proxy SOCKS  nos permite realizar las conexiones de cualquier servicio a traves de una maquina que realiza la tarea de servidor proxy.A partir de ese momento, es el servidor el que "da la cara" a la hora de conectar.

SSH nos ofrece la posibilidad de crear un proxy SOCKS a traves de un tunnel de una manera muy sencilla:

ssh -fN -D 9999 user@server

Con esto le estamos diciendo que haga un fork del proceso(-f) y se ejecute en segundo plano, tambien le decimos que no permita la ejecucion de comandos (-N) y por ultimo le decimos que cree el proxy socks en el puerto 9999 de localhost(-D 9999).El ultimo parametro son las credenciales para acceder al servidor ssh de la maquina remota (la que "dara la cara" por nosotros).

Las ventajas que tenemos con esto es que las comunicaciones iran siempre cifradas entre nosotros y el servidor,y las comunicaciones con el exterior se haran de la misma manera que si se hicieran desde el servidor.Obviamente, nos interesa un servidor que nos de alguna ventaja, imagina por ejemplo que donde trabajas te filtran contenidos mediante un Web Proxy, pero sin embargo, las conexiones desde el servidor no pasan por el(por politica o porque esta en otra red).En este caso, navegarias sin pasar por el proxy.Tambien te permitiria cifrar un segmento de la comunicacion.Por ultimo decir que tiene todas las desventajas de un proxy, por lo que apartir del momento de la creacion, dejas de ser reconocido como cliente y sera el servidor el que adquiera ese rol por ti.

Espero no haberlo liado demasiado.