loading...

jueves, 19 de abril de 2012

PCsuite Um840 o Android Gestionar Todo en tu Android desde cualquier PC

Gestionar Todo en tu Android desde cualquier PC.

Problemas para transferir contactos, archivos multimedia en tu Android, debido a problemas de compatibilidad? MobileGo le da el poder para:
Mueva todos sus medios de comunicación hacia y desde Android optimizado formatos.
Importa tus contactos de vCard teléfonos, Symbian y Outlook Express.
Copia de seguridad y restaurar sus contactos, SMS y aplicaciones.
Organiza tus aplicaciones con instalación rápida o desinstalar
Requisitos: de Windows 7/XP/2003/Vista
Administrar Android sin esfuerzo: contactos, SMS, aplicaciones, videos, etc

Se bloquea la transferencia de los contactos de tu viejo Android o Symbian a su nuevo Android? O tal vez sólo desea transferir sus películas favoritas y música desde tu PC a tu Android para que pueda disfrutar en cualquier lugar?

El mejor del mundo del gestor de archivos para Android - Wondershare MobileGo le permite transferir los contactos de Symbian / Nokia o Outlook para Android, convertir cualquier vídeo y archivos de música en Android optimizado formatos, y la instalación / desinstalación de toneladas de aplicaciones a la vez con un solo clic. MobileGo le da un control total de tu Android en un clic!

Contactos de transferencia sin problemas
  • Actualización del sistema operativo de su Android, o reemplazar su viejo teléfono Symbian (Nokia, Samsung, etc) con un Android? ¿Qué pasa con sus viejos contactos? Con el mundo de la mejor gestor de archivos para Android , MobileGo, usted puede:
    Copia de seguridad de tus contactos y el historial de SMS en su PC para su custodia mientras se actualiza
    Transferencia de contactos desde un viejo Symbian o Android a un nuevo Android, no importa la edad.
  • Contactos de transferencia sin problemas

    Importar y exportar contactos
  • Importa tus contactos de Outlook en tu Android con qué frecuencia?
  • Cansado de el complicado proceso habitual cuando la importación de contactos desde su PC a teléfono, como desde Outlook en el teléfono Android?

    Con el software de gestión de contactos -MobileGo, puede

    Fácil de importar contactos desde Outlook, Outlook Express, o vCrad.
    Exporta tus contactos para asegurar que registrar todos los contactos fácil y cómoda.
    Fácilmente añadir, borrar, grupo y copias de seguridad de todos sus contactos de su teléfono inteligente Android.
  • Importar y exportar contactos

    Importación / exportación de películas, música y fotos
  • ¿Quieres importar todos tus películas favoritas, música y fotos en tu Android?
  • Siempre se quejan del mal efecto de ver vídeos en el teléfono Android?

    Con los iTunes para Android - MobileGo, puede

    Directamente de entrada todas sus películas, música y fotos en lotes con un clic, o simplemente arrastrar y soltar a todos desde el PC a tu teléfono Android.
    Durante el traslado, las películas y música al mismo tiempo se convierte en formatos compatibles con Android, así como la resolución de las películas es el tipo de su teléfono.
    Puede hacer doble clic para reproducir películas y música en el teléfono directamente en la PC.
    También puede exportar sus películas, música y fotos a su computadora, si lo necesitan.
  • Importación / exportación de películas, música y fotos

    Instalación de aplicación rápida y desinstalación
  • ¿Quieres conseguir tus aplicaciones favoritas desde su computadora a Android directamente?
  • La aplicación desinstalado de su Android no es del todo?

    Con esta aplicación Android instalar y desinstalar la herramienta - MobileGo, usted puede:

    Directamente arrastrar y soltar archivos APK desde tu ordenador a tu teléfono Android, sin necesidad de descargarlo de nuevo en su teléfono con tarifa de Internet adicional. Instalación de lotes permite.
    Mientras tanto, los paquetes de instalación exportadores de aplicaciones en su teléfono Android a la computadora también se permite, que ofrece un almacenamiento rápido o compartir con amigos.
    Desinstalar aplicaciones de tu teléfono Android también se convierte en fácil, por separado o en lotes. Usted puede hacerlo completa y fácilmente.
  • Instalación de aplicación rápida y desinstalación

    Copia de seguridad y restaurar datos de teléfonos Android
  • ¿Quieres hacer copias de seguridad de datos importantes en caso de que su teléfono se pierde o es robada?

    Con gestor de archivos para Android - MobileGo, puede

    Fácil de copia de seguridad de tus contactos, SMS, y aplicaciones de Android a su PC en caso de que el teléfono se pierde o es robado, o cada vez que necesite cambiar su teléfono.
    Rápidamente restaurar el backup de datos en el PC a tu teléfono Android.
  • Copia de seguridad y restaurar datos de teléfonos Android

    Más características
    Personalizada sile los medios de comunicación y la gestión de contactos

    Personalizada sile los medios de comunicación y la gestión de contactos

    Basta con crear una nueva lista de reproducción / grupo, renombrar o borrar archivos, tonos de llamada de ajuste, etc, para organizar sus archivos de medios y contactos para sus necesidades.

    Rápida conexión Wi-Fi

    Rápida conexión Wi-Fi

    Además de conexión USB, su teléfono Android también se puede conectar rápidamente con el programa a través de Wi-Fi

    Conveniente de administración de SMS

    Conveniente de administración de SMS

    Rápido y conveniente de recibir, enviar y organizar todas tus SMS en su PC con el teclado del PC.

    1-haga clic en la captura de pantalla del teléfono

    1-haga clic en la captura de pantalla del teléfono

    La captura de pantalla del teléfono te permite guardar la captura de pantalla de cualquier favorito con un clic en la resolución original.

    Easy Share a través de Facebook y Twitter

    Easy Share a través de Facebook y Twitter

    Facebook y Twitter para compartir los botones le permiten compartir sus programas con buenos amigos con facilidad.

    Usuarios

    Una. Fácil de utilizar y software efectivo Me gusta la música y las películas función de conversión, que resuelve la incompatibilidad de mi archivo.

    -De Aran Glush

     

    Premios

    Descargalo Aqui



    martes, 10 de abril de 2012

    mysql php

    php-mysql.gif

    Ejemplo sobre este comando:

    Como conectar, ejecutar una consulta, imprimir las filas resultantes y desconectar a una base de datos MySQL

    <?php
    // Conectando, seleccionando la base de datos
    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
        or die('No se pudo conectar: ' . mysql_error());
    echo 'Connected successfully';
    mysql_select_db('my_database') or die('No se pudo seleccionar la base de datos');
    // Realizar una consulta MySQL
    $query = 'SELECT * FROM my_table';
    $result = mysql_query($query) or die('Consulta fallida: ' . mysql_error());
    // Imprimir los resultados en HTML
    echo "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo "\t<tr>\n";
        foreach ($line as $col_value) {
            echo "\t\t<td>$col_value</td>\n";
        }
        echo "\t</tr>\n";
    }
    echo "</table>\n";
    // Liberar resultados
    mysql_free_result($result);
    // Cerrar la conexión
    mysql_close($link);
    ?>

     

    Conexión PHP y MySQL

    image

    1. $conexion = mysql_connect("localhost", "usuario", "clave");

    2. mysql_select_db("demo", $conexion);

    Leer registros de la Base de Datos

    1. $queEmp = "SELECT * FROM empresa ORDER BY nombre ASC";

    2. $resEmp = mysql_query($queEmp, $conexion) or die(mysql_error());

    3. $totEmp = mysql_num_rows($resEmp);

    Mostrar  resultados.

    1. if ($totEmp> 0) {

    2. while ($rowEmp = mysql_fetch_assoc($resEmp)) {

    3. echo "<strong>".$rowEmp['nombre']."</strong><br>";

    4. echo "Direccion: ".$rowEmp['direccion']."<br>";

    5. echo "Telefono: ".$rowEmp['telefono']."<br><br>";

    6. }

    7. }

     

    <?php
    echo "<table border=\"1\">\n";
    $line = mysql_fetch_array($result, MYSQL_ASSOC);
        echo "\t<tr>\n";
            echo "\t\t<th>#</th>\n";
        foreach (array_keys($line) as $col_value) {
            echo "\t\t<th>$col_value</th>\n";
        }
        echo "\t</tr>\n";
    $i=0;
    do  {
        echo "\t<tr>\n";
    $i++;
        echo "\t\t<th>$i</th>\n";
        foreach ($line as $col_value) {
            echo "\t\t<td>$col_value</td>\n";
        }
        echo "\t</tr>\n";
    }while ($line = mysql_fetch_array($result, MYSQL_ASSOC));
    echo "</table>\n";
    ?>

    Creando la Base de datos

    1. INSERT INTO TABLE (field1, field2) VALUES (value1, value2)

    Crear una conexión y la consulta 

    Método mysql_query :

    1. $conexion = mysql_connect("localhost", "usuario", "clave");

    2. mysql_select_db("demo", $conexion);

    3. $que = "INSERT INTO empresa (nombre, direccion, telefono) ";

    4. $que.= "VALUES ('Inka Tours', 'Av Pardo 728', '511 4845858') ";

    5. $res = mysql_query($que, $conexion) or die(mysql_error());

    Creando el Formulario

    1. <form id="insertar" name="insertar" method="post" action="">

    2. Nombre:

    3. <input name="nombre" type="text" id="nombre" size="50" />

    4. Direccion:

    5. <input name="dir" type="text" id="dir" size="50" />

    6. Telefono:

    7. <input name="fono" type="text" id="fono" size="50" />

    8. <input type="submit" name="Submit" value="Insertar Registro" />

    9. <input type="hidden" name="action" value="add" />

    10. </form>

    Notese

    Verificamos el envío el formulario con la conexión a MySQL

    1. $state = false;

    2. if ($_POST['action'] == "add") {

    3. $conexion = mysql_connect("localhost", "usuario", "clave");

    4. mysql_select_db("demo", $conexion);

    5. $que = "INSERT INTO empresa (nombre, direccion, telefono) ";

    6. $que.= "VALUES ('".$_POST['nombre']."', '".$_POST['dir']."', '".$_POST['fono']."') ";

    7. $res = mysql_query($que, $conexion) or die(mysql_error());

    8. $state = true;

    9. }

    Envío del mensaje

     

    1. <?php if ($state) { ?>

    2. <p><em>Registro insertado correctamente</em></p>

    3. <?php } ?>

    .



    domingo, 8 de abril de 2012

    Rxart Desktop 3.2 es un completo OS de escritorio Linux

    Rxart Desktop 3.2 es un completo OS de escritorio Linux que también incluye todas las aplicaciones necesarias para trabajar, para jugar o para comunicarse.
    Construido en la estable y confiable plataforma de Debían Linux, permite que disfrutes de tu propia forma de vida digital, en la manera que lo desees, sin los molestos virus, o del spyware y otras amenazas de la seguridad.
    Rxart 3.2 es divertido y fácil de utilizar. Se instala en solo algunos clics y no requiere de conocimientos técnicos previos. Descubra los beneficios de Linux y traiga seguridad y estabilidad a su PC.
    El nuevo mundo para tu vida digital esta listo. Desde navegar en la red a realizar una oferta en una subasta, bajar fotos y construir al bums, el vídeo que fluye al iPod syncing y los mails enviados al home banking en línea… a donde tu vida digital te lleve, Rxart 3.2 es la entrada segura y emocionante a tu mundo digital. Web, foto, vídeo, E-mail, música, multimedia.

    Si deseas manejar soluciones fáciles y seguras de usar en tu desktop, Rxart 3.2 es el primer Linux desktop fácil de desplegar e interactivo con tu ambiente. Rxart 3.2 es una solución rentable y flexible para tu desktop.

    Rxart 3.2 comienza con lo mejor que los programas de código abierto ofrecen, agrega software, conductores, y codecs propietarios para proporcionar el sistema basado en Linux más fácil del mundo. Diseñado para Notebooks, Laptops y PCs de escritorio.

    Rxart 3.2 es muy fácil de utilizar, teniendo también las mejores tecnologías 3D en tu Desktop. Haber integrado estas tecnologías otorga a las empresas un excelente valor agregado para sus tareas.

    Rxart 3.2 tiene la más importante, interactiva y realzada funcionalidad con el software propietario agregado disponible. También ofrece una amplia gama de funcionalidades pedidas para roaming desktops en empresas y provee Desktops seguros como marcos completos de autentificación y firewalls interactivos.

    La principal ventaja de Rxart radica en su centro de soporte y desarrollo

    • Vía telefónica -Usted cuenta con nuestra mesa de ayuda- disponible para todos nuestros productos OEM en toda Latinoamérica, servicio implementado por nuestros ingenieros de desarrollo en el horario de Argentina de 10 a 18 hrs de Lunes a Viernes.
    • Vía e-mail, a través de soporte@pixartargentina.com.ar donde contestaremos su inquietud rápidamente.
    • Vía web, a través de nuestro foro de consultas.
    • Vía voz IP solo disponible para grandes armadores o para entrenamiento corporativo.
    • Vía vídeo conferencia solo disponible para grandes armadores o para entrenamiento corporativo.

    Más información acerca de Soporte Técnico >

    Ahora que Usted sabe los porque... conozca nuestro producto y sorpréndase.


    CARACTERÍSTICAS RXART® DESKTOP

    ASEGURA EL RENDIMIENTO, LA ESTABILIDAD Y CONFIABILIDAD DE LINUX ® DE MANERA AMIGABLE
    Rxart es la herramienta que le permite instalar aplicaciones de escritorio, que se integran fácilmente a las aplicaciones más utilizadas por una empresa, en donde los requisitos de compatibilidad y la interface con el usuario son vitales.

    Fácil de instalar:
    La instalación del Rxart® Desktop es el proceso más fácil a resolver por el usuario; el sistema se carga en forma automática y se encarga de configurar todos los dispositivos instalados, para que desde un principio cuente con la funcionalidad plena de su computadora.
    Como ayuda adicional al potente y amigable sistema de instalación, los reales beneficios se obtienen con el uso frecuente de Rxart® Desktop. Mientras el usuario selecciona uno de los menús disponibles para cada programa, Rxart® Desktop selecciona la mejor aplicación existente para ejecutarlo. Conozca nuestro sistema de actualización automática y el soporte de hardware que esta respaldado durante todo el desarrollo por Pixart Argentina SRL. Por eso Pixart, es la empresa que más Drivers de MODEM ha realizado en los últimos tiempos y además, la que más productos en OEM ha vendido.

    ¡Fácil de migrar!
    Rxart® Desktop, es propicio para una transición sin problemas, amigable, intuitiva. Sin la necesidad de contar con ayuda de terceras personas y/o soporte. Cuando instale Rxart® Desktop en su empresa, podrá comprobar con qué facilidad realiza la migración desde cualquier versión del Sistema Operativo que usted posea y la ausencia de impacto en los usuarios finales.

    • Sin costosas capacitaciones.
    • Con la tranquilidad de contar con una Licencia legal que le evitará problemas por infracción a la Ley 11723 de Propiedad Intelectual.

    Requerimientos del Sistema:

    SCREEN SHOTS Y DESCRIPCIONES DE RXART 3.2


    Cargando Rxart

    En esta pantalla comenzara el proceso donde Rxart 3.2 cargara todo lo necesario para iniciar el Sistema. Luego usted podra disfrutar de la nueva versión con todas sus aplicaciones.

    Logueo en Rxart
    Aquí usted colocara usuario y contraseña y no l equeda más que disfrutar de la nueva versión del Rxart 3.2 y todas las aplicaciones que el mismo trae incluidas.


    Escritorio

    Escritorio KDE, con Widgets de SuperKaramba e iconos de acceso útiles.
    Desde aquí usted podrá ejecutar programas y guardar archivos de trabajos en curso o aquellos que aún no terminó y desea tener a mano, como si fuera el escritorio de su casa u oficina. También podrá acceder a aplicaciones de este Sistema Operativo haciendo doble click sobre los correspondientes iconos.
    diseñados especialmente para está nueva y mejorada versión.

    Menú Inicio

    Haciendo click sobre el botón de Inicio, usted desplegará un menú desde el que podrá acceder a todo los programas que posee su computadora, así como también a cualquier lugar del sistema al que quiera ingresar.
    El menú de Inicio del Rxart 3.2 está pensado para optimizar la navegabilidad, optimizando espacios, recorridos y clicks, gracias a su organización por items.


    Panel de control

    Rxart 3.2 cuenta con un nuevo Panel de Control, diseñado para ofrecer una mayor funcionalidad y simpleza en su uso.
    Desde aquí podrá modificar configuraciones como Aspecto y Temas, Dispositivos, Escritorios, Internet y Red, Multimedia, Programas, Regional, Seguridad y Sistemas.


    Configuración ADSL

    Con Rxart 3.2 usted podrá usted podrá configurar una conexión con Dial Up de manera rápida, sencilla y segura con solo realizar una serie de click.
    Ideal para modems USB.


    Configuración Dial up

    Desde aquí usted podrá configurar una conexión con Dial Up de la manera más sencilla y segura.


    Periféricos

    El reconocimiento de los periféricos constituye una fortaleza del sistema. Al instalarse, Rxart® Desktop testea los periféricos conectados a su computadora y selecciona el mejor Driver de una amplia selección dispuesta para tal fin. En el caso de cambiar alguno de los periféricos seteados durante la instalación, Rxart® Desktop reconocerá inmediatamente el nuevo hardware ofreciendo al operador la mejor alternativa para su uso. Este proceso el sistema lo realiza sin necesidad de ser reseteado y en forma inmediata al conectar el Switch en la CPU de la computadora.


    Propiedades de la pantalla

    El Sistema Operativo Rxart® Desktop, además de permitir a los usuarios contar con hasta 16 opciones de escritorio para distribuir mejor sus trabajos. Cada escritorio a su vez puede ser configurado en forma concreta y de acuerdo a cada necesidad en particular desde un amplio menú de opciones: iconos, fondos, salva pantallas y muchas otras funciones pueden ser adaptadas al gusto y necesidad de cada persona en particular. De esta manera Rxart® Desktop crea un contexto de trabajo adaptado a las necesidades y estilo de cada operador. Un beneficio difícil de obtener en otros sistemas operativos.



    CyanogenMod

    CyanogenMod es un firmware del mercado de accesorios para una serie de teléfonos celulares basados ​​en el sistema operativo de código abierto Android. Ofrece características no encontradas en los firmwares oficiales basados ​​en Android de fabricantes de estos teléfonos celulares.

    Características

    Gestos LockscreenGestos Lockscreen

    Gestos es la capacidad de "dibujar" a cualquier cosa que desee en la pantalla de bloqueo que a su vez pondrá en marcha una aplicación o actividad en el teléfono que se asocia ...

    Gafas de teléfonoGafas de teléfono

    Gafas de teléfono ofrece al usuario final la capacidad de filtrar las comunicaciones salientes y evitar cualquier llamada o SMS dispuestos para ser enviados. Existen varios valores ...

    OpenVPNOpenVPN

    Con OpenVPN, es posible: un túnel de cualquier red IP sub o el adaptador de ethernet virtual sobre un único puerto UDP o TCP, configurar una solución escalable, con equilibrio de carga VPN ...

    Incógnito ModoIncógnito Modo

    Para los momentos en que desea buscar en el modo sigilo, CyanogenMod ofrece el modo de navegación de incógnito. Así es como funciona el modo incógnito: Páginas ...

    Temas de ApoyoTemas de Apoyo

    Theme Manager le permite crear una apk único que puede el tema de todo el sistema.

    DSP EcualizadorDSP Ecualizador

    Proporciona capacidades mejoradas de procesamiento de sonido. Una sencilla aplicación llamada DSPManager se proporciona para ajustar los nuevos

    http://www.cyanogenmod.com/



    sábado, 7 de abril de 2012

    Cofoja cofoja Contracts for Java

    Los contratos para Java le permite anotar el código de los contratos en forma deprecondiciones, postcondiciones e invariantes.
    Estas anotaciones del contrato son fácil de leer y escribir, y comprobar en tiempo de ejecución.
    Anotar el código de los contratos le ayuda a:
    diseño, documento, probar, y depurar sus programas.


    He aquí un ejemplo simple de una clase Java, con la anotación de contratos:

     

    interface Time {
      ...

      @Ensures({
        "result >= 0",
        "result <= 23"
      })
      int getHour();

      @Requires({
        "h >= 0",
        "h <= 23"
      })
      @Ensures("getHour() == h")
      void setHour(int h);

      ...
    }

    Esto es lo que el contrato es:















    ObligaciónBeneficio
    Método de LlamadoSatisfacer condición; Asegúrese de que la 'h' no es ni muy pequeño ni muy grande(De postcondición) GetHour () devuelve h.
    Método de LlamadoSatisfacer postcondición; Debe hacer GetHour h () ​​devuelven ..(De la condición) puede asumir h no es ni muy pequeño ni muy grande.


    Para utilizar Cofoja que hay que hacer las dos cosas siguientes:


    Download one of the JARs (O tomar un unofficial build; ver FAQ para mayor información)


    Ver el archivo readme, a continuación:


    Traducción


    Los contratos de Java es un marco de programación para Java contrato, que utiliza técnicas de procesamiento de anotación y la instrumentación de bytecode para proporcionar tiempo de ejecución de la comprobación.








    1. DEPENDENCIAS





    Contratos fo Java requiere Java versión 6 para el procesamiento de anotación y el código de bytes de la instrumentación. La re-escritura de código de bytes depende de la ASM biblioteca de manipulación de código de bytes, la versión 3.2 o superior.





    Puesto que el agente de Java bytecode reescribe con el fin de inyectar los contratos en el código cargado, la biblioteca ASM tiene que estar disponible en el la ruta de clase en tiempo de ejecución del contrato si la comprobación se hace cumplir a través de la agente. Pre-contratados archivos de clase no es necesario la biblioteca o el ASM agente se ejecute con los contratos habilitados.








    2. CONFIGURACIÓN





    Para que el script de generación para funcionar correctamente, usted debe por lo menos especificar la ruta correcta a las dependencias Cofoja en el local de construcción


    archivo de propiedades:





    . / Local.properties





    Este archivo no existe de forma predeterminada, puede o bien crear o iniciar a partir de una copia del archivo de configuración por defecto:





    . / Default.properties





    Este archivo también contiene todas las propiedades configurables por el usuario con su descripciones y los valores predeterminados. Una vez que hayas terminado, establece lo siguiente propiedad en true para permitir que la hormiga ejecutar:





    configured=true








    3. INICIO RÁPIDO





    Para crear un archivo JAR que contiene todas las clases Cofoja, ejecute:





    ant dist





    El archivo JAR se encuentra en:





    ./dist/lib/cofoja- <versión>. jar





    Puede ser utilizado tanto como un agente de Java y procesador anotación y debe añadirse a la ruta de clase.





    Para compilar el código con las anotaciones del contrato, ejecute:





    javac -processor com.google.java.contract.core.apt.AnnotationProcessor <someclass>.java





    Para ejecutar el código compilado con contrato de comprobación habilitada, asegúrese de que el archivos generados (adicional. clase y los archivos. contratos) son en su ruta de la clase, y ejecutar:





    java -javaagent:path/to/cofoja-<version>.jar <someclass>








    4. AVANZADO BUILD





    Los contratos de Java es anotado con sus propios contratos, que puede ser compilado, probado y empaquetado en el archivo JAR resultado por lo que comprueba su propios contratos se usan para elaborar los contratos y el control de su programa!





    Tenga en cuenta que la ejecución de una construcción será necesariamente más lento que ejecutando una versión sin control de los Contratos de Java, pero es una gran manera para que usted pueda contribuir con el proyecto, ayudando a ejercer su propia capacidades durante su uso.





    Para construir una versión contraída de los Contratos de Java, es necesario tener Cofoja un archivo JAR listos en primer lugar (véase la sección anterior, o podría reutilizar una que se ha construido con una ejecución anterior de este arranque proceso). Copie el archivo JAR:





    . /Build/bootstrap.jar





    A continuación, ejecute:





    ant bootstrap





    Una vez que la versión completa es contratado, puede ejecutar el conjunto de pruebas con:







    ant test





    Además de la auto-contratado construcciones, archivos JAR Cofoja incluido con ASM clases de biblioteca también se puede producir, en aras de la más fácil distribución:





    ant -Dasmjar=path/to/asm-all-<version>.jar dist








    5. USO





    Los contratos para Java se compone de un procesador de anotación, una agente de instrumentación, así como una regrabadora bytecode desconectado. La procesador de anotación recoge anotaciones en la clase de contrato separado archivos. El agente de instrumentación teje estos expedientes de los contratos con la clases reales antes de que se cargan en la JVM. Alternativamente, el re-escritura de código de bytes en línea puede ser utilizada para producir la clase de pre-tejida archivos que pueden ser desplegados directamente sin ningún tipo de dependencia Cofoja.





    Las siguientes instrucciones asumen que usted tiene el JAR Cofoja y ASM archivos en su ruta de clase.

    El procesador de punto anotación de entrada es (para uso con el procesador)


    com.google.java.contract.core.apt.AnnotationProcessor







    El agente de Java puede ser invocado desde el fichero JAR compilado (para su uso con el-javaagent java opción):







    ./dist/cofoja-<version>.jar





    El instrumentador en línea se puede ejecutar con:






    java -Dcom.google.java.contract.classoutput=<outdir> \

    com.google.java.contract.core.agent.PreMain <someclass>.class







    Por favor, consulte la documentación oficial en línea para obtener más información:





    http://code.google.com/p/cofoja/wiki/QuickReference








    6. FALLOS





    Los contratos de Java es un proyecto muy joven. Por favor, ayúdenos a hacer mejor informar de los fallos y la publicación de parches en:





    http://code.google.com/p/cofoja/issues/

     

    Añadir los contratos a sus clases

    Traducción:

     

    Una interfaz de pila contratado


    Primero vamos a definir una interfaz minimalista pila. Una pila deberán incluir al menos los métodos para insertar un nuevo elemento en la parte superior de la misma, y ​​quitar el elemento de la cima:


    interface Stack<T> {
      public T pop();
      public void push(T obj);
    }

    Si se trata de contraer esta interfaz, sin embargo, nos encontraremos con ningún contrato obvio para poner en él. Esto es debido a que la interfaz expone un método de consulta que nos permite examinar el estado del objeto, sin cambiarla. Con el fin de establecer los contratos sobre el estado de un objeto, es necesario ser capaz de consultar ese estado.

    Una simple información que puede querer hacer afirmaciones sobre el número de elementos en la actualidad en una pila. Vamos a añadir un método a nuestro tamaño de la interfaz:


    interface Stack<T> {
      public int size();
      public T pop();
      public void push(T obj);
    }

    En Java, int es un tipo entero con signo, pero es bastante obvio que una pila puede nunca tener un número negativo de elementos: vamos a escribir que, como nuestro primer contrato! Dado que es un contrato en el estado de un objeto que siempre se mantiene, debe ser una clase invariante; invariantes de clase se denotan por el com.google.java.contract.Invariant anotación.

    import com.google.java.contract.Invariant;

    @Invariant("size() >= 0")
    interface Stack<T> {
      public int size();
      public T pop();
      public void push(T obj);
    }

    Nota: Tenga en cuenta las cotizaciones en torno a la expresión de los idiomas. Este es un artefacto sintáctico debido a la forma anotaciones se manejan en Java. Los valores de anotación que ser constantes y sólo puede ser manipulado como tal, por lo tanto, las expresiones deben estar encerrados en una cadena literal. Ellos están obligados a ser válido el código de Java, sin embargo (con unas pocas extensiones, más sobre esto más adelante).

    No hay más que podemos expresar con sólo esta información simple, sin embargo. No permitir hacer estallar la pila cuando no hay elementos en que parece como un contrato de sonido. Dado que es un requisito sobre el estado del objeto antes de la invocación de un método, que debería ser una condición previa método; condiciones previas se indican con la anotación com.google.java.contract.Requires.


    import com.google.java.contract.Requires;

    @Invariant("size() >= 0")
    interface Stack<T> {
      public int size();

      @Requires("size() >= 1")
      public T pop();

      public void push(T obj);
    }

    Pero también lo desea, puede hacer valer las cosas en el estado del objeto después de la invocación de un método. En este ejemplo, se sabe que una vez que un elemento ha sido reventado, la pila es un elemento más pequeño, y una vez un elemento ha sido empujado en él, es un elemento más grande. Para escribir esto, necesitamos un método de postcondición, denotado por la anotación

    com.google.java.contract.Ensures:

    import com.google.java.contract.Ensures;
    import com.google.java.contract.Invariant;
    import com.google.java.contract.Requires;

    @Invariant("size() >= 0")
    interface Stack<T> {
      public int size();

      @Requires("size() >= 1")
      @Ensures("size() == old(size()) - 1")
      public T pop();

      @Ensures("size() == old(size()) + 1")
      public void push(T obj);
    }

    Esta iteración introduce dos nuevos elementos: el Garantiza la anotación y la vieja palabra. El Asegura la anotación, simplemente delimita la condición posterior, como hemos visto antes con Requiere y Invariante . La vieja palabra clave dentro de la expresión postcondición es una de las pocas extensiones a la sintaxis de Java con el apoyo de nuestro marco.

    La palabra clave vieja le permite examinar los viejos valores, es decir, los valores de las expresiones como estaban antes de la invocación del método. Una llamada a este método de pseudo-devuelve el valor de su argumento expresión, ya que eran antes de la ejecución del método actual.

    Esto es lo más lejos que vamos, sin embargo, con sólo el tamaño de la pila como una información recuperable. Con sólo esta descripción, un simple contador sería capaz de engañar a nuestros contratos. Pero ya que el propósito del diseño por contrato no es la especificación completa de sus programas, que pueden o no quieren dejar aquí, o incluso antes en uno de los pasos. Con el fin de demostrar más características de nuestro marco fresco, sin embargo, vamos a añadir otro método de consulta. :-)

    Imagina que quieres más fuertes en su pila de contratos, contratos que no sólo involucran el tamaño de la colección, sino también su contenido.Usted puede introducir un método de consulta que devuelve una copia completa de los contenidos de la pila como una lista, pero recuerde que esto podría o no ser conveniente para las clases que implementan esta interfaz. En este sentido, optar por añadir un método de mirar más ligero, que devuelve el objeto superior sin que explote la misma. Sus requisitos son los mismos que los del pop.

    .

    import com.google.java.contract.Ensures;
    import com.google.java.contract.Invariant;
    import com.google.java.contract.Requires;

    @Invariant("size() >= 0")
    interface Stack<T> {
      public int size();

      @Requires("size() >= 1")
      public T peek();

      @Requires("size() >= 1")
      @Ensures("size() == old(size()) - 1")
      public T pop();

      @Ensures("size() == old(size()) + 1")
      public void push(T obj);
    }

    Usando vistazo , podemos establecer que un objeto extrae de la pila debe ser el mismo que el que estaba previamente en la parte superior y, análogamente, que un objeto sólo inserta en la pila es el elemento superior nuevo. Nuestra interfaz se convierte en:

    import com.google.java.contract.Ensures;
    import com.google.java.contract.Invariant;
    import com.google.java.contract.Requires;

    @Invariant("size() >= 0")
    interface Stack<T> {
      public int size();

      @Requires("size() >= 1")
      public T peek();

      @Requires("size() >= 1")
      @Ensures({
        "size() == old(size()) - 1",
        "result == old(peek())"
      })
      public T pop();

      @Ensures({
        "size() == old(size()) + 1",
        "peek() == old(obj)"
      })
      public void push(T obj);
    }

    Este cambio ilustra la forma en varias cláusulas puede ser colocado en una sola condición posterior. La misma sintaxis puede, por supuesto, ser utilizados para los invariantes y las condiciones previas. Las distintas cláusulas se asocian con un AND. También cuenta con el resultado reservada variable, que contiene el valor devuelto por el método contratado, sino que es, por supuesto, sólo se puede acceder en condiciones posteriores y sólo si el método devuelve algo (es decir, no nula).

    La interfaz que resulta ahora más o menos utiliza todos los contratos construye a disposición de una sola clase. Pero hay algo más que sólo a los contratos de invariantes, precondiciones y postcondiciones de una sola clase! Vamos a continuar nuestro recorrido por la aplicación de una pila de concreto.

    Una implementación de la pila contratado


    Echemos un vistazo a una implementación sencilla que consiste en una envoltura alrededor de un objeto ArrayList:


    import com.google.java.contract.Ensures;
    import com.google.java.contract.Invariant;

    import java.util.ArrayList;

    @Invariant("elements != null")
    public class ArrayListStack<T> implements Stack<T> {
      protected ArrayList<T> elements;

      public ArrayListStack() {
        elements = new ArrayList<T>();
      }

      public int size() {
        return elements.size();
      }

      public T peek() {
        return elements.get(elements.size() - 1);
      }

      public T pop() {
        return elements.remove(elements.size() - 1);
      }

      @Ensures("elements.contains(old(obj))")
      public void push(T obj) {
        elements.add(obj);
      }
    }

    Esta clase tiene casi ningún contrato de sí mismo, pero hereda todos los contratos de la pila de interfaz que implementa. Un tipo contratado hereda todos los contratos de todos sus padres (superclases e interfaces implementadas).

    La herencia de contrato que le permite compartir y contratos de la mezcla. Se puede ver como una extensión del mecanismo de interfaz (aunque funciona en superclases también) del núcleo del lenguaje Java, añadiendo afirmaciones arbitrarias a su poder especificación.

    Además, los contratos pueden ser refinados. Si volvemos a nuestro ejemplo, podemos ver que un invariante y una postcondición se han añadido.A diferencia de método de alteración temporal, estos nuevos contratos no sustituyen a las heredadas a través de la pila . En su lugar, se combinan de acuerdo con la tabla siguiente:

    image


    Estas reglas se derivan intuitivamente desde el hecho de que un submétodo anular una supermethod puede aceptar la entrada de los contravariantes y covariantes producir una salida. En otras palabras, un método, siempre se debe aceptar por lo menos ya que muchos estados y los argumentos en la entrada como su padre (de ahí el contrato sólo puede aflojar), y deben garantizar como mínimo tanto como su padre (de ahí el contrato no puede sino reforzar), por lo que que con seguridad se puede utilizar desde un sitio de llamadas que asume el contrato de su supermethod.

    Otro punto a destacar es el hecho de que nuestros nuevos contratos se refieren a un campo de protección. Un contrato comparte el mismo alcance que la declaración del método que se aplica a (es decir, haciendo caso omiso de lo que pueda ser declarada en el cuerpo del método), y por lo tanto puede acceder a las mismas variables y llamar a los mismos métodos. Acceso a los miembros del restringido está permitido, pero usted debe hacer sus contratos públicos siempre que sea posible, para que puedan servir como documentación externa. Por otra parte, la práctica de referirse a los miembros restringidos se recomienda en el interior de las condiciones previas, en las que no tiene mucho sentido: si el método depende de un estado interno de precisión para ejecutar, se debe considerar la posibilidad de una forma de consulta que el Estado, como parte de su interfaz.

    A continuación más información acerca de Cofoja:


  • Add support for contracts to your Ant project
  • Quick reference
  • Fine tune the runtime checking of contracts
  • How to write good contracts
  • Frequently asked questions
  • Using Contracts with Eclipse (external link, thanks to Fabian Steeg)
  • Using Contracts with IntelliJ IDEA (external link, java