jueves, 18 de febrero de 2016

Dibujar checkbox con LaTeX


\documentclass[12pt,a4paper,oneside]{article} % Font size, paper size, one or two-sided pages.
\usepackage[utf8]{inputenc} % Input encoding.
\usepackage[spanish,es-noshorthands]{babel} % Language support.
\usepackage{ifthen} % If-then-else, for optional content.
\usepackage{amssymb} % Required for checkboxes.



\newcommand{\checkbox}[2]{\ifthenelse{\equal{#1}{c}}
{\makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} }
{\makebox[0pt][l]{$\square$}\raisebox{.15ex}{} \hspace{1em}}
} % End newcommand


\begin{document}
\noindent
\checkbox{c} \textbf{Opción 1} \checkbox{c} \textbf{Opción 4}\\
\checkbox{ } \textbf{Opción 2} \\
\checkbox{c} \textbf{Opción 3} \\
\end{document}

Insertar código en Blogger

Panel Control Blogger -> Plantilla -> Editar Html
Copiar el siguiente código entre las etiquetas head.
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script> 
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'></script>  <script language='javascript'> 
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();

Para insertar código hacerlo así:
// Comment
public class Testing {
public Testing() {
}
 
public void Method() {
/* Another Comment
on multiple lines */
int x = 9;
}
}
 
Lenguajes soportados en la página del desarrollador: aqui

lunes, 15 de febrero de 2016

Crear Servicio WEB con MAVEN y TOMCAT

1.- File -> Maven Project . maven-archetype-webapp
2.- GroupId:es.example ArtifactId: webServerTomcat Click->Finish.
3.- Add this to pom.xml file.
    
      com.sun.xml.ws
      jaxws-rt
      2.2.5
    
4.- Create and complete file sun-jaxws.xml in the folder: src/main/webapp/WEB-INF



  
  

5.- Create or modify web.xml (src/main/webapp/WEB-INF/) Plantilla. (Creo que no es necesario)



 
  My First Tomcat Web Service

 
  
    com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  
  
    appwebservicetomcat
    com.sun.xml.ws.transport.http.servlet.WSServlet
    1
  
  
    appwebservicetomcat
    /AppExampleWSt
  
  
    120
  


6.- Crear la carpeta src/main/java y luego el paquete es.example.webServiceTomcat
7.- Crear las siguientes clases BaseClass.java
package es.example.webServiceTomcat;

public class BaseClass {
 
 
 protected Error error = null;
 
 public Error getError() {
  return error;
 } 
 
 public void setError(Error error) {
  this.error = error;
 }  

}
Error.java
package es.example.webServiceTomcat;

public class Error extends BaseClass implements java.io.Serializable
{
 /**
  * Movida para serializar
  */
 private static final long serialVersionUID = 1L;
 
 /**
  * Variables miembro
  */
 private String code;   
 private String description; 
 private String stackTrace;  
 
 /**
  * Constructor 1
  */
 public Error() 
 {
  super();  
 }
 
 /**
  * Constructor 2
  * 
  * @param code
  */
 public Error(String code) 
 {
  super();
  this.code = code;
  this.description = "";
  this.stackTrace = "";
 } 
 
 /**
  * Constructor 3
  * 
  * @param code
  * @param descripcion
  */
 public Error(String code, String descripcion) 
 {
  super();
  this.code = code;
  this.description = descripcion;
  this.stackTrace = "";
 }
 
 /**
  * Constructor 4
  * 
  * @param code
  * @param descripcion
  * @param stackTrace
  */
 public Error(String code, String descripcion, String stackTrace) 
 {
  super();
  this.code = code;
  this.description = descripcion;
  this.stackTrace = stackTrace;
 } 
 
 /**
  * Getters
  */
 public String getCode() {
  return code;
 }
 public String getDescription() {
  return description;
 }
 public String getStackTrace() {
  return stackTrace;
 } 
 
 /**
  * Setters
  */
 public void setCode(String string) {
  this.code = string;
 }
 public void setDescription(String string) {
  this.description = string;
 }
 public void setStackTrace(String string) {
  this.stackTrace = string;
 } 
}
Persona.java
package es.example.webServiceTomcat;

public class Persona extends BaseClass implements java.io.Serializable {
 
 private static final long serialVersionUID = 4L;
 
 String dni;
 String nombre;
 String apellido1;
 String apellido2;
 
 public Persona(String dni, String nombre) {
  this.dni = dni;
  this.nombre = nombre;
 }
 
 public Persona() {
  
 }
 
 
 public String getDni() {
  return dni;
 }
 
 public void setDni(String dni) {
  this.dni = dni;
 }
 
 public String getNombre() {
  return nombre;
 }
 
 public void setNombre(String nombre) {
  this.nombre = nombre;
 }
 
 public String getApellido1() {
  return apellido1;
 }
 
 public void setApellido1(String apellido1) {
  this.apellido1 = apellido1;
 }
 
 public String getApellido2() {
  return apellido2;
 }
 
 public void setApellido2(String apellido2) {
  this.apellido2 = apellido2;
 }

}
DatosPersonales.java
package es.example.webServiceTomcat;

//import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
public class DatosPersonales extends BaseClass {
 
 public DatosPersonales() {
  
 }
    

    @SOAPBinding(style = Style.DOCUMENT)
    public Persona getDatosPersonales(
      @WebParam(name = "dni") String dni,
      @WebParam(name = "nombre") String nombre) {
     Persona per = new Persona();
     
     // Si el dni no es "9999999999" entonces devolvemos un error.
     if (dni.equals("9999999999") == true) {
      per.dni = dni;
      per.nombre = nombre;
     } else {
     per.setError(new Error("01","Error not found.","For example: traceerror from exception"));
     }
     
     // Mejor hacer un try catch en vez de un if
     
     return per;

    
      
    }
 
}
Operations.java // Esta es otra clase para hacer otro servicio web sencillo a parte del anterior.
package es.example.webServiceTomcat;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class Operations extends BaseClass {
    @WebMethod
    public double suma(double a, double b) {
        return a + b;
    }
     
    @WebMethod
    public double producto(double a, double b) {
        return a * b;
    }
     
    @WebMethod
    public double resta(double a, double b) {
        return a - b;
    }
    
     
 
}

8.- Ejecutar SOAP UI con la siguiente url http://localhost:8080/webServiceTomcat/DatosPersonalesWS?wsdl
Probar con dni 9999999999 o cualquier otro.

viernes, 12 de febrero de 2016

Crear Servicio Web con MAVEN como aplicación JAVA.

A continuación voy a describir cómo crear un servicio web con MAVEN sin la necesidad de ejecutar la apliación sobre Tomcat u otro contenedor de servlet.

1.-Abrir eclipse.

File -> MAVEN Project -> Archetype: maven-archetype-quickstart

GroupId: es.example
ArtifactId: webServiceExample

Click en el botón -> Finish.


2.- Añadir dependencia en pom.xml

      com.sun.xml.ws
      jaxws-rt
      2.2.5
      compile

Guardar los cambios.
3.-Crear clase del Web Service. Ej: MyWebService
package es.example.webserviceExample;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class MyWebService {
    @WebMethod
    public double suma(double a, double b) {
        return a + b;
    }
    
    @WebMethod
    public double producto(double a, double b) {
        return a * b;
    }
    
    @WebMethod
    public double resta(double a, double b) {
        return a - b;
    }
    

}


4.-Crear la clase con el método main()
package es.example.webserviceExample;

import javax.xml.ws.Endpoint;
/**
 * Class App
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        Endpoint.publish("http://localhost:8080/MyFirstWebService", new MiWebService());
    }
}

4.-Ejecutamos la aplicación. Run As -> JAVA Application
5.-Introducimos esta dirección en el navegador: http://localhost:8080/MyFirstWebService?wsdl

martes, 24 de noviembre de 2015

UDP IPTV to RTSP proxy

Anteriormente escribí una entrada (link) sobre cómo montar un servicio proxy UDP para poder ver el servicio Imagenio en los dispositivos inalámbricos que tenemos por casa. El problema de este servicio es que convertía las tramas UDP a TCP,  y cuando la conexión no era muy buena o se veía influenciada por interferencias la imagen se congelaba o se quedaba pixelada sin recuperarse.

He encontrado un proyecto que transforma las tramas UDP a RTSP. (link proyecto)

Probado y montado en una Raspberry Pi con la versión 0.2.4. Pongo un enlace de descarga en caso de no estar disponible en la página del proyecto (descarga v.0.2.4).

Quick Start

  1. Download the source.
  2. Compile it with GNU make and GCC. This should produce a binary named iptv2rtsp-proxy.
  3. You can copy the binary to any suitable place or keep it with source for testing.
  4. Run server with
    $ ./iptv2rtsp-proxy -f -s <YOUR_IP> -l <LISTEN_PORT>
    for example:
    $ ./iptv2rtsp-proxy -f -s 192.168.10.10 -l 5555
  5. Connect by opening an url in your media player:
    rtsp://<SERVER_IP>:<LISTEN_PORT>/iptv/<MCAST_GROUP>/<UDP_PORT>
    for example:
    rtsp://192.168.0.1:5555/iptv/224.50.50.50/1234
    or
    http://192.168.0.1:5555/iptv/224.50.50.50/1234
    or
    http://192.168.0.1:5555/udp/224.50.50.50:1234

sábado, 27 de junio de 2015

Configurar Host Virtuales de Apache en mi Raspberry Pi.

Puede darse el caso de que queramos tener varios dominios y que sólo tengamos una IP.

¿Cómo hacemos para que apache maneje varios dominios con una sola IP?

Pasos:


1.- Ir a nuestro proveedor de dominios y configurarlo para que apunte a nuestra IP.

2.- Redireccionar los puertos de nuestro router para que apunten a nuestro servidor.

3.- Instalar Apache: sudo apt-get install apache2 (lógico...).

Hasta aquí lo normal.


4.- Ir a: cd /etc/apache2/sites-available/

5.- Copiar el fichero default con el nombre del dominio. Ej cp: default nombredominio.com.conf

6.- Editamos dominio1.com con vi , nano o cualquier otro editor . Ej: sudo vi midominio.com.conf


<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/nombredominio
        ServerName nombredominio.com
        ServerAlias www.nombredominio.com nombredominio.com

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Si tenemos más dominios hacer lo mismo.

7.- Habilitar los nuevos host virtuales.

sudo a2ensite nombredominio.com.conf

Hacer esto con cada fichero de configuración

(Para desactivar un host virtual escribir: sudo a2dissite nombredominio.com.conf


8.- Reiniciar el servicio

sudo service apache2 restart

martes, 8 de enero de 2013

Construcción de una antena dipolo simple para 2m

Una antena de dipolo simple consiste en dos conductores rectilíneos colineales (en la misma recta) de igual longitud. La longitud del dipolo es igual a media longitud de onda, es decir que cada conductor equivale a un cuarto de longitud de onda.



Una antena dipolo debe tener una longitud acorde a la frecuencia que se quiere recibir o transmitir. Por lo tanto debemos conocer la longitud de onda de la señal.

¿Cómo se calcula la longitud de onda?


Dividimos la velocidad de la luz en el vacío entre la frecuencia. Por ejemplo para la banda de 2 metros 300 / 145 Mhz = 2,068.

Esa sería la longitud de onda. Por lo tanto cada hilo conductor debe tener 1/4 de esa longitud, es decir aproximadamente medio metro.


Materiales necesarios:
  • Necesitamos un mástil de 1 metro de un material no conductor (plástico, madera,...).
  • Hilo de cobre.
  • Cable coaxial y un adaptador de antena en un extremo.




Bibliografía: