Bienvenido(a) a Proyecto Script

Hola!!!

Este es un buen lugar donde buscar las respuestas a tus dudas sobre "Programación", "Lenguajes", "Linux", "Electrónica", etc.

Suele ser difícil buscar en la red y encontrar respuestas claras y en español a muchas preguntas sobre estos temas, así que aquí tienes un buen lugar para iniciar.

Quieres ser parte de esto, solo ¡regístrate!

sábado, 27 de septiembre de 2008

Agregar automáticamente salto de línea en Emacs

Para agregar de manera automática un salto de línea en cualquier buffer al momento de guardar a un archivo en Emacs basta con agregar la siguiente línea:

1 (setq require-final-newline t)

Nótese que se pasa como parámetro a la funcion una t, lo cual podríamos ver para fines prácticos como un true, recordemos que el lenguaje es Lisp y dado que utiliza listas, podríamos decir que "algo" está o no en una lista, asi que podríamos ver como un valor false a nil (lo cual significa Not In List).

Es decir, si lo queremos deshabilitar estaría asi:

1 (setq require-final-newline nil)


Digg!

lunes, 15 de septiembre de 2008

Error en NewGem con RubyGems 1.1.1: Undefined method `add_development_dependency'

Para empaquetar proyectos en gem's de ruby, una vez que ejecutaba rake, arroja lo siguiente:

neoriddle@neobalam ~/proyectos/amatohtli $ rake
(in /home/neoriddle/proyectos/amatohtli)
rake aborted!
undefined method `add_development_dependency' for #
/home/neoriddle/proyectos/amatohtli/Rakefile:2
(See full trace by running task with --trace)
neoriddle@neobalam ~/proyectos/amatohtli $


El error se soluciona con actualizar la version de rubygems a la versión 1.2.0.

En mi caso muy particular yo tenia a versión 1.1.1:

neobalam amatohtli # emerge -vp =dev-ruby/rubygems-1.2.0

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild U ] dev-ruby/rubygems-1.2.0 [1.1.1] USE="doc server" 242 kB

Total: 1 package (1 upgrade), Size of downloads: 242 kB
neobalam amatohtli #


Una vez hecho esto ya no arrojaró errores.


Digg!

domingo, 14 de septiembre de 2008

Problemas con caracteres al enviar un formulario HTML

Muchas ocaciones tenemos el problema donde el enviar una forma de html los caracteres cambiar por caracteres raros o simplemente no son los que esperabamos.

Esto es principalmente porque al momento que se hace la encapsulación de la petición se toma un charset (conjunto de caracteres) que no corresponde al que necesitamos para que estos caracteres sean válidos.

La solución es simple, basta con especificar el charset en el atributo accept-charset del tag form de html:

1 <form method="post" accept-charset="CHARSET" />

Para mayor información sobre charset's consulte la sección 6.9 y para detalles del tag form la sección 17.3 de la especificación de html 4.01.


Digg!

sábado, 13 de septiembre de 2008

Carga de archivos en un tag <FORM> con Java (Apache FileUpload)

La carga de archivos requiere -según la especificacion de HTML 4.0-
básicamente dice que para poder enviar un archivo hay que poner el valor
multipart/form-data al atributo enctype del tag
form, de la siguiente manera:


1 <form method="post" action="miaccion" enctype="multipart/form-data">

Esto es con respecto a el archivo HTML (o JSP, o algún tipo similar), pero
ahora falta la programación del lado del servidor. Por suerte existe Apache
Commons FileUpload, el cual implementa la solución dejandonos solo unas
clases para obtener los archivos.

Como ejemplo, imaginemos que tenemos el siguiente archiv jsp:

1 <form method="post" action="MiServlet" enctype="multipart/form-data">
2   <input name="cancion" type="file" value="~/jaguares_-_45_-_alquimista.mp3" />
3   <input name="grupo" type="text" value="Jaguares" />
4   <input name="submit" type="submit" value="Enviar" />
5 </form>


Entonces en nuestra clase MiServlet podríamos hacer lo siguiente:

1 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
2 import org.apache.commons.fileupload.servlet.ServletFileUpload;
3 import org.apache.commons.fileupload.FileItem;
4
5 public class MiServlet extends HttpServlet {
6   public void doPost(HttpServletRequest req, HttpServletResponse resp) {
7     DiskFileItemFactory factory = new DiskFileItemFactory();
8     ServletFileUpload upload = new ServletFileUpload(factory);
9     List params = upload.parseRequest(request);
10     Map paramsMap = new HashMap();
11     for(FileItem param : params) {
12       // paramsMap["grupo","Jaguares"];
13       paramsMap.put(param.getFieldName(),param.getString());
14     }
15   }
16 }


Una vez ya en este punto, tenemos los siguientes métodos en la interfaz FileItem:


  • getInputStream()

  • getName()

  • getOutputStream()

  • getSize()

  • write(java.io.File file)

  • getContentType()



Cuando algunos de los parámetros es un archivo el método getContentType es diferente de null por lo es importante señalar que los parámetros como típicamente se obtienen aquí no tiene efecto, es decir:

   1 public class MiServlet extends HttpServlet {
   2   public void doPost(HttpServletRequest req, HttpServletResponse resp) {
   3     req.getParameter("cancion"); // null
   4     req.getParameter("grupo"); // null
   5     req.getParameterNames(); // Enumeration vacio
   6   }
   7 }



Digg!