String vs StringBuffer vs StringBuilder
En Java tenemos distintas formas para realizar la concatenación de las cadenas de texto (tipo String). Las tres formas más habituales son: el uso del operador de suma, usaar StringBuffer y usar StringBuilder.
– El operador suma está sobrecargado en la clase String, y es la forma más básica de concatenar dos cadenas de caracteres. Al concatener dos String con el operador suma, se crea un nuevo String resultante, con lo que constantemente estamos creando objetos nuevos. Lo cuál hace que no se la mejor opción.
String var1 = "Hola, "; String var2 = "mundo"; String holamundo = var1 + var2;
– La clase StringBuffer es una secuencia de caracteres mutable; es decir, es una clase que nos permite concatenar String de una manera simple y muy eficiente.
Los métodos de StringBuffer son sincronizados, por lo cual la podemos usar de manera segura en un ambiente de multihilos.
StringBuffer buffer = new StringBuffer(); buffer.append("Hola, "); buffer.append("mundo"); String holamundo = buffer.toString();
– La clase StringBuilder es una clase que aparece con el JDK 5, y es la clase recomendada para la concatenación de String en la mayoría de los casos. Su uso es idéntico al StringBuffer (tienen el mismo API). Los métodos de StringBuilder no son sincronizados, por lo que tiene mejor rendimiento que StringBuffer cuando solo hay un único hilo.
StringBuilder builder = new StringBuilder(); builder.append("Hola, "); builder.append("mundo"); String holamundo = builder.toString();
Consultar un Servicio Web en Android utilizando la librería KSOAP
Se va a utilizar para el ejemplo el servicio web implementado en la entrada anterior (Recordar que se creó un servicio web con wsdl en php utilizando la librería nusoap).
1 – Descargar la librería Ksoap aquí.
2 – Copiarla en la carpeta libs de tu proyecto Android. Añadirla al «Build path» y seleccionarla en “Order and Export”.
3 – Ahora ya se puede utilizar. Y esto sería un ejemplo de utilización:
private static final String SOAP_ACTION = "getNombre"; private static final String METHOD_NAME = "getNombre"; private static final String NAMESPACE = "http://disastercode.com.es/ws/nusoap"; private static final String URL = "http://disastercode.com.es/ws/servicioWsdl.php?wsdl"; private void pruebaWS(){ String res = ""; SoapObject soapclient = new SoapObject(NAMESPACE,METHOD_NAME); soapclient.addProperty("dni","99999999N"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(soapclient); HttpTransportSE httpTransportSE = new HttpTransportSE(URL); try { httpTransportSE.call(SOAP_ACTION, envelope); res = envelope.getResponse().toString(); } catch (Exception e) { e.printStackTrace(); } //TODO en la variable res tienes el valor devuelto por el ws }
Crear un Web Service con WSDL en PHP utilizando NUSOAP
1 – Implementar el servicio web. Archivo servicioWsdl.php
require_once("lib/nusoap.php"); $ns="http://disastercode.com.es/ws/nusoap"; $server = new soap_server(); $server->configureWSDL('CalculadoraWSDL',$ns); $server->wsdl->schemaTargetNamespace=$ns; $server->register('getNombre',array('dni' => 'xsd:string'),array('return' => 'xsd:string'),$ns); function getNombre($aux){ if($aux == '99999999N') return new soapval('return','xsd:string','Manolito Gafotas'); return new soapval('return','xsd:string',''); } $server->service($HTTP_RAW_POST_DATA); ?>
Comprobar que el wsdl se crea correctamente: http://disastercode.com.es/ws/servicioWsdl.php?wsdl
2 – Implementar un cliente de prueba. Archivo clienteWsdl.php
require_once('lib/nusoap.php'); $wsdl="http://disastercode.com.es/ws/servicioWsdl.php?wsdl"; //$client=new soapclient($wsdl, 'wsdl'); //esto no funcionará si el servidor tiene habilitada la extensión SOAP para PHP $client=new nusoap_client($wsdl, 'wsdl'); $param=array( 'dni'=>'99999999N' ); echo "DNI: 99999999N; ".$client->call('getNombre', $param)."
"; $param=array( 'dni'=>'45654654P' ); echo "DNI: 45654654P; ".$client->call('getNombre', $param); ?>
Para probarlo: http://disastercode.com.es/ws/clienteWsdl.php
Crear un Web Service en PHP utilizando NUSOAP
¿Que es NuSOAP?
NuSOAP es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Está compuesto por una serie de clases que nos harán mucho más fácil el desarrollo de Web Services. Provee soporte para el desarrollo de clientes (aquellos que consumen los Web Services) y de servidores (aquellos que los proveen). NuSOAP está basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1
¿NuSOAP es el único soporte para Web Services en PHP?
No, no es el único, existen otros, pero es uno de los que están en una fase de desarrollo mucho más avanzada. Sin ir más lejos, PHP a partir de su versión 5 comienza a dar soporte para SOAP, pero aún está en fase experimental.
¿Por qué NuSOAP y no otro?
– Está en una fase madura de desarrollo.
– No necesita módulos adicionales.
– Es muy fácil su instalación y uso .
¿Cómo instalo NuSOAP?
La instalación es bastante sencilla, sólo basta ir a la pagina en sourceforge de NuSOAP http://sourceforge.net/projects/nusoap/ y bajar el archivo comprimido (es un .zip).
Lo descomprimimos en un directorio de nuestro servidor web (como puede ser /lib que es el directorio por default), y listo, ya podemos hacer uso de NuSOAP.
Ejemplo de uso
1 – Implementar la clase con contendrá las funciones que se desean utilizar. Archivo calculadora.php
function calculadora($x, $y, $operacion){ if($operacion == "suma") return $x + $y; else if($operacion == "suma") return $x + $y; else if($operacion == "resta") return $x - $y; else if($operacion == "multiplica") return $x * $y; else if($operacion == "divide") return $x / $y; return 0; } ?>
2 – Implementar el servicio web. Archivo servicio.php
require_once('lib/nusoap.php'); require_once('calculadora.php'); $server = new nusoap_server(); $server->register('calculadora'); $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>
Para probar, ver que no da errores: http://disastercode.com.es/ws/servicio.php
3 – Implementar un cliente de prueba. Archivo cliente.php
require_once('lib/nusoap.php'); $cliente = new nusoap_client('http://disastercode.com.es/ws/servicio.php'); $resultado = $cliente->call('calculadora', array('x' => '3', 'y' => 4, 'operacion' => 'multiplica')); echo $resultado; ?>
Para probarlo: http://disastercode.com.es/ws/cliente.php
Hola Mundo!! en Android con PhoneGap
- Paso 1: Creación del proyecto inicial
– Crear un proyecto normal para Android
– Añadir al proyecto dos nuevos directorios: /libs y /assets/www
- Paso 2: Añadir librerías para PhoneGap
– Copiar cordova-2.2.0.js al directorio /assets/www
– Copiar cordova-2.2.0.jar al directorio /libs. Añadir al Build Path del proyecto ésta nueva librería.
(Se puede descargar de la página oficial de PhoneGap)
- Paso 3: Crear la página html a mostrar
– Añadir al directorio /assets/www un archivo index.html con un HolaMundo.
– Debe contener: - Paso 4: Crear la actividad que lanza la página html
package com.example; import android.app.Activity; import android.os.Bundle; import org.apache.cordova.*; public class MainActivity extends DroidGap{ @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/index.html"); } }
- Paso 5: Modificar el AndroidManifest.xml
Añadiendo: - Paso 6: Por ultimo crear el archivo /res/xml/plugins.xml
Plugin para el eclipse que genera aplicación automaticamente
En GitHub he creado un repositorio donde comparto un plugin para el eclipse que he implementado y que facilita el desarrollo aplicaciones J2EE https://github.com/roberto-pf/Sotilizator. El plugin consigue implementar toda la lógica de negocio de una aplicación que utiliza: Struts + Spring + hibernate + JQuery.
Qué es el Sotilizator?
Se trata de un plugin para el eclipse (probado en su versión Helios). La finalidad de este plugin es la creación de una aplicación web de forma automática y con unas determinadas características a partir de un esquema de una Base de Datos.
Estas características son:
1 – La aplicación resultante estará realizada empleando un MVC en J2EE con Struts 1.3, inyección de dependencias con Spring 3.0, hibernate 3.2.6 para el acceso a datos para la parte de la lógica de negocio. Mientras que para la parte de la vista se empleará jquery junto a las tag-libraries de struts. Además, de DWR para interactuar con el servidor desde el cliente.
2 – Se generará un fichero pom.xml para que a través de MAVEN se puedan obtener las dependencias.
3 – Se generará un fichero build.xml donde estarán las tareas Ant necesarias para el despliegue de la aplicación en Tomcat, JBoss y OAS.
4 – La aplicación resultante será capaz de construir las tareas CRUD de las tablas automáticamente. A partir del esquema de la BD obtendrá los campos y su tipo.
5 – Las capas que contendrá la aplicación son las siguientes:
VO: Objetos que hace referencias a las tablas. DAO: Capa que realiza el acceso a la BD. Manager: Capa sobre la que se aplican las transacciones. Delegate: Capa que se encarga de relacionar la parte de la vista con la lógica de negocio. Action: Aquí deberán ir las diferentes acciones que luego el controlador mapea para interactuar con la vista.
Nota: Para más información consultar manuales del usuario y del programador: https://github.com/roberto-pf/Sotilizator/tree/master/Readme
Trunk, Branch y Tag
Los tres son los conceptos principales a manejar a la hora de utilizar un sistema de control de versiones, como CVS, Subversion,…
– Trunk (tronco): es la línea principal de desarrollo, donde se llevan a cabo los cambios menos complejos del día a día. Idealmente debería poder compilarse y pasar todas las pruebas en todo momento (ver Integración continua).
– Branch (rama): cuando se van a llevar a cabo cambios importantes que romperán la compilación, pruebas, experimentos o intentos de optimización, debe crearse una nueva rama de desarrollo, con la que no molestemos a los compañeros, esto es un branch: una copia del código o la rama de la que deriva. En esta copia haremos nuestros cambios, integraremos los arreglos que puedan haberse ido haciendo en el trunk, y, una vez terminado el desarrollo en la rama, integraremos (o no) los cambios en el trunk. También puede crearse una rama para una versión terminada, hacer mantenimiento de esta versión sobre esta rama, y continuar el desarrollo de la nueva versión en el trunk.
– Tag (etiqueta): etiquetas que sirven para identificar un cierto momento en el desarrollo que queremos preservar. Se utilizan habitualmente para marcar cambios de versión (alfas, betas, RC, RTM) y puntos de interés. Sobre un tag no se puede / no se debe hacer cambios
Crear un select multiple con checkbox . Utilizando JQuery.
.multiselect { width:20em; height:15em; border:solid 1px #c0c0c0; overflow:auto; } .multiselect label { display:block; } .multiselect-on { color:#ffffff; background-color:#000099; }
jQuery.fn.multiselect = function() { $(this).each(function() { var checkboxes = $(this).find("input:checkbox"); checkboxes.each(function() { var checkbox = $(this); // Highlight pre-selected checkboxes if (checkbox.attr("checked")) checkbox.parent().addClass("multiselect-on"); // Highlight checkboxes that the user selects checkbox.click(function() { if (checkbox.attr("checked")) checkbox.parent().addClass("multiselect-on"); else checkbox.parent().removeClass("multiselect-on"); }); }); }); };
$(".multiselect").multiselect();
Elementos y atributos nuevos para formularios con HTML 5
En HTML 5 se han añadido nuevos elementos para emplear en los formularios. Éstos presentan nuevas funcionalidades, A continuación, se muestra un listado con los distintos types que se pueden usar en formularios con HTML 5:
text – Para introducir texto, simplemente.
search – Específico para input en un buscador.
url – Específico para direcciones de página web. Requiere http:// o http: simplemente.
tel – Se supone que para números de teléfono aunque no he conseguido que haga nada.
email – El nombre lo dice.
password – Escribe el contenido en asteriscos.
date – Para introducir un fecha (mes, día y año).
time – Para introducir una hora en formato 24 horas (horas, minutos y segundos).
datetime – Para introducir fecha y hora.
datetime-local – Igual que el anterior pero sin posibilidad de indicar zona horaria, ya que se entiende que es la local.
month – Para indicar el mes de un año.
week – Para indicar una semana de un año.
number – Específico para numeros.
range – Sale una barra para elegir un número entre un rango, el número hay que indicarlo entre un min=»10″ y un max=»12″ (los números son de ejemplo.)
checkbox – Para seleccionar y deseleccionar.
radio button – Para seleccionar, uno obligatorio.
color – Para seleccionar colores.
Nuevos atributos de HTML 5:
– Los elementos de fecha y hora permiten atributos max y min. Para indicar fecha/hora máxima y mínima.
– Required que nos permite indicarle al formulario que ese campo es obligatorio.
– Placeholder permite introducir un texto de ejemplo en el cuadro de texto. De esta forma se da a entender como tiene que ser el formato de lo que se introduce.
– List nos permite asociar una lista a un cuadro de texto. El valor de este atributo list, debe coincidir con el identificador de una lista definida con una etiqueta datalist (esta etiqueta también es nueva en HTML 5. El resultado es un efecto muy parecido a un select pero con las ventajas de un text.
– Autofocus hace que un determinado elemento tome el foco.
Cómo se ve, se pueden validar formularios sin ningún esfuerzo y sin necesidad de javascript. Ya que se encarga de realizar la validación el propio formulario. Incluso se pueden añadir funcionalidades con css en función de si se ha rellenado correctamente o no. Tal que así:
Este codigo modifica los colores de todos los input, que se encuentran dentro de un form cuyo id es «idForm», cuando son válidos o inválidos.
Utilizar tags de HTML 5 en navegadores que no los soportan.
Para que funcionen las tags de html 5 en navegadores que no lo soportan (p.e. internet explorer 8 y anteriores). Basta con añadir el siguiente fragmento de javascript:
< script type="text/javascript"> document.createElement("nav"); document.createElement("header"); document.createElement("footer"); document.createElement("section"); document.createElement("article"); document.createElement("aside"); document.createElement("hgroup"); < /script>
Además, se debe añadir la siguiente regla en la hoja de estilos.
nav, header, footer, section, article, aside, hgroup{ display: block; }
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places