netbeans

UD2. Evaluación de entornos integrados de desarrollo

1. Los primeros entornos de desarrollo.
2. Entornos de desarrollo actuales.
3. Entornos de desarrollo on-line.
4. Características de los lenguajes más difundidos.
5. Entornos de desarrollo libres y propietarios.
6. Instalación de un entorno integrado de desarrollo.
7. Depurar un programa.
8. Profiler. Análisis de aplicaciones.
9.Generación automática de documentación.
10. Gestión de módulos.

Los entornos de desarrollo son las herramientas con las cuales los programadores crean aplicaciones. Es cierto que podemos programar con un editor y un compilador (a veces con un depurador) pero casi siempre en entornos profesionales siempre se utiliza un IDE.

Un IDE consta de las siguientes herramientas:

  • Editor. Generalmente se utilizan editores que colorean la sintaxis para ayudar al programador a comprender mejor el programa y detectar los errores más fácilmente.
  • Compilador/intérprete. Dependiendo del tipo de lenguaje utilizado, se necesitará para ejecución el intérprete o el compilador para generar código ejecutable.
  • Depurador (intérprete). Un buen depurador siempre tiene un intérprete detrás para ir ejecutando órdenes paso a paso, inspeccionar el valor de variables, etc.
  • Constructor de interfaces gráficos. Con él, el desarrollador podrá crear ventanas, botones, campos de texto, literales, pestañas, tablas, etc. Tiene todos los componentes que nos podamos encontrar en un interfaz.
XCode. Story Board

XCode. Story Board

1. Los primeros entornos de desarrollo

Manuela ha oído hablar del Turbo C++. Dimas le comentó que su padre decía que era una herramienta muy buena, que las herramientas actuales eran una porquería comparadas con la rapidez del Turbo C++. El padre de Dimas solía programar para una empresa de software en su momento. Dimas y Manuela han hecho una apuesta. Van a compilar el siguiente programa en C++:

#include <iostream>
using namespace std;
int main() {
cout << “Hola Mundo” << endl;
return 0;
}

Manuela va a utilizar una herramienta actual y Dimas utilizará Turbo C++. Si Turbo C++ tarda más en compilar invita Dimas a unos helados, en caso contrario invitará Manuela.
Manuela cree que se va a tomar unos helados gratis pero no esta clara la cosa…

turbo pascalTurbo Pascal.Lo lanzó Borland en el año 1983 y fué el IDE más potente de su época. Al principio funcionaba en MS-DOS, CP/M y CP/M 86 y Macintosh aunque posteriormente se creó una versión para Windows que tuvo mucho éxito.Se lanzaron 7 versiones y en las últimas se podía utiliza el ratón, soportaba múltiples archivos en el mismo editor (diferentes ventanas) y se podía programar orientado a objetos. También poseía una herramienta llamada Turbo Profiler que permitía optimizar el código.

Fué una revolución en su época. La rapidez de compilación era asombrosa. De hecho los compiladores actuales son más lentos.

Tras el éxito de esta herramienta Borland creó nuevas herramientas como Delphi basadas en el mismo lenguaje de programación: Pascal.

Visual Basic 6Visual Basic 6.Visual Basic 6 fue uno de los IDEs más utilizados sino el que más.Este nuevo tipo de herramientas creó el paradigma de desarrollo RAD (Rapid Application Development). Un paradigma en el que primero se desarrollaban de una manera rápida los interfaces y se consensuaban con el usuario. Cuando se tenía el visto bueno se empezaba a crear la base de datos y el código. Fué un cambio en el modelo de programar.

Los programadores creaban los interfaces a partir de una serie de componentes que ofrecía la propia herramienta. También se podían utilizar componentes de terceros con lo cual se ganaba en funcionalidad y potencia.

El acceso a bases de datos se realizaba utilizando DAO, RDO o ActiveX Data Objects. Este último más rápido y más optimizado.

Visual Basic se utiliza en la actualidad gracias a que las macros realizadas en Office utilizan un dialecto del mismo. VBA o Visual Basic for Applications. Las macros son una herramienta muy potente dado que combinan las características de Office con la potencia de todo un lenguaje de programación orientado a objetos.

delphi borlandDelphi.Turbo Pascal fué un líder en su época y otro grande de la informática (Microsoft) sacó al mercado Visual Basic. Visual Basic era un IDE para Windows que hizo que Borland sacara algo más tarde al mercado Delphi.Delphi fué una evolución del Turbo Pascal hacia el sistema Windows igual que Builder C++ fué la evolución del Turbo C.

Además de Delphi, Borland también saco al mercado el JBuilder. Un IDE de Java que tenía la ventaja de estar disponible también en Linux.

Delphi también tuvo su hermano de Linux llamado Kylix. Kylix desafortunadamente se abandonó tras la versión 3.0 pero tenía la ventaja que cualquier proyecto de Windows se podía recompilar en Linux y viceversa (siempre que se utilizasen los controles estándar).

Microsoft Visual C++Microsoft Visual C++.Visual C++ es un IDE de programación en C++.Visual C++ es un IDE para programar en C y C++. Su potencia radica en que incluye las bibliotecas de Windows, las Microsoft Foundation Classes y el framework .NET.

Es un IDE pesado pero a la vez potente puesto que ademas de las bibliotecas propias pueden añadirsele otras nuevas como DirectX, wxWidgets o SDL.

Al igual que Java, .NET ha incluido una herramienta bastante útil como es el recolector de basura o garbage collector para autogestionar la memoria.

2. Entornos de desarrollo actuales

xcodeXCode.

Xcode es la herramienta para realizar apps y aplicaciones para dispositivos Apple. Con esta herramienta podremos realizar aplicaciones nativas para iOS y OS X.

La versión 6.3 está disponible de forma gratuita para el sistema operativo Yosemite de Mac.

Si quieres descargarte una versión antes de que se ponga disponible para todo el mundo tendrás que hacerte desarrollador de Apple. No cuesta nada el darte de alta como desarrollador, lo que cuesta es subir una aplicación a la App Store (la suscripción es de unos 100 dólares al año y puedes subir todas las aplicaciones que quieras).

Con las nuevas versiones ya se puede programar en Swift mientras que con las versiones anteriores solamente se puede programar con Objetive C. Objetive C es un lenguaje parecido a Java/C/C++ pero con una sintaxis algo diferente. Muy potente y orientado a objetos. Si quieres saber más sobre Objetive C aquí tienes un tutorial para aprender un poquito sobre él.

netbeansNetBeans.NetBeans está escrita en Java lo que la hace una plataforma disponible para un gran número de sistemas operativos (Windows, Linux o Mac OS X).Se creó para desarrollar aplicaciones en Java pero también se puede programar con ella en PHP, HTML5 y C/C++.

Es open-source lo que hace que muchos programadores se decanten por este IDE. De hecho cuando sale una nueva versión al mercado suele estar bastante probada.

Se basa en la modularidad. Todas las funciones las realizan módulos los cuales se pueden ir añadiendo según necesidades del programador. De hecho cuando la descargamos tiene todos los módulos de Java incluidos por defecto. Muchas herramientas están basadas en NetBeans como Sun Studio, Sun Java Studio Creator y otras.

Contiene una herramienta para crear interfaces de usuario (llamada al comienzo Matisse). Esta herramienta permite crear aplicaciones basadas en la librería Swing.

En el editor se puede programar también en JavaScript, Ajax y CSS.

eclipse_logoEclipse.

Es un IDE de código abierto. Al contrario que otros clientes livianos es una plataforma potente con un buen editor, depurador y compilador (el ECJ). El JDT (Java Development Toolkit) es de los mejores que existen en el mercado y tiene detrás una gran comunidad de usuarios los cuales van añadiendo mejoras al software.

Fué desarrollado por IBM como evolución de su VisualAge pero ahora lo mantiene la Fundación Eclipse la cual es independiente y sin ánimo de lucro.

Tenía licencia CPL (Common Public License) pero luego la fundación cambio dicha licencia por una EPL (Eclipse Public License).

3. Entornos de desarrollo on-line

Los entornos de desarrollo online o en la nube se están extendiendo cada vez más. Pese a la desventaja de la potencia, poseen muchas otras ventajas como el trabajo colaborativo, los repositorios comunes, el poder trabajar con cualquier dispositivo, etc.

Estas ventajas hacen que muchos desarrolladores y empresas de desarrollo opten por entornos en la nube.

Codebox.

En el post anterior de Abrahan Zarza te indicamos cómo se puede instalar y poner en marcha Codebox.

Codebox + proyecto
Manuela está intentando instalar codebox junto con Dimas en un equipo.
Intenta con la ayuda de un compañero formar un grupo de trabajo en el cual creéis instaléis en una máquina física o en una máquina virtual Codebox. Crear un pequeño proyecto de ejemplo y documentarlo para ayudar a Manuela.

5. Entornos de desarrollo libres y propietarios

Existen muchos IDE. Dependiendo de la popularidad del lenguaje habrá más o menos opciones. A continuación ofreceremos una lista de IDE para los lenguajes Java y JavaScript.

Lenguaje Java
IDE Licencia Windows Linux Mac OS X
Eclipse EPL Si Si Si
NetBeans CDDL/GPL2 Si Si Si
Visual Studio Propietario Si No No
JDeveloper Propietario Si Si Si
Lenguaje JavaScript
IDE Licencia Windows Linux Mac OS X
Eclipse EPL Si Si Si
NetBeans CDDL/GPL2 Si Si Si
Geany GPL Si Si Si
KDevelop GPL No Si No
JBuilder Propietario Si Si Si
JCreator Propietario Si No No
JDeveloper Propietario Si Si Si
Ejercicio
Crea una lista igual para los siguientes lenguajes:

  • C++
  • PHP
  • Python
  • 6. Instalación de un entorno integrado de desarrollo

    Dimas ha estado investigando sobre entornos de desarrollo y ha leído que Netbeans es un IDE muy popular entre los programadores de Java. Dimas ha decidido instalarlo en su equipo y probarlo a ver cómo funciona.
    El compilador de Java.

    El compilador de java o también llamado javac se encapsula dentro de un paquete de desarrollo que se llama JDK (Java Development Kit – Kit de desarrollo Java).

    Para programar en Java se necesita el compilador y por lo tanto habrá que instalar un JDK en la máquina donde vayamos a desarrollar.

    Para ejecutar los programas desarrollados en Java, el sistema en donde se ejecute deberá tener un JRE (Java Runtime Environment – Entorno Java de ejecución) el cual contendrá una JVM (Java Virtual Machine – Máquina virtual Java).

    Java es multiplataforma, por lo tanto no hay que compilar cada programa para cada sistema operativo, en Java cuando compilamos un programa, funcionará en cualquier sistema siempre y cuando tenga instalado la JVM correspondiente.

    Cada sistema operativo tendrá una JVM diferente.

    Recopilando entonces…

  • JDK es el Java Development Kit. Es el software utilizado por los desarrolladores. Incluye el compilador de Java (javac), JRE y JVM.
  • JRE es el Java Runtime Environment. Es el software utilizado por los usuarios. Este software incluye la JVM.
  • JVM o Java Virtual Machine. Es el programa que ejecuta el código Java previamente compilado con el compilador de Java (javac).
  • ¿Cómo se si tengo instalado el JVM?

    Bastará con ejecutar el siguiente comando:

    $ java -version
    java version “1.7.0_67″
    Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
    Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

    ¿Cómo se si tengo instalado el JDK?

    Bastará con ejecutar el siguiente comando:

    $ javac -version
    javac 1.7.0_67

    ¿Qué tengo que hacer para instalar el JRE y el JDK?

    En Ubuntu tenemos disponible una versión del JRE y JDK de java y también el plugin Icedtea.
    Por ejemplo si queremos instalar la versión 7 de ambos podemos ejecutar los siguientes comandos:

    $ sudo apt-get install icedtea-7-plugin openjdk-7-jre
    $ sudo apt-get install openjdk-7-jdk

    El primero es para instalar el JRE y el segundo (si eres desarrollador) para instalar el JDK.

    Instalando Netbeans 8.0 en Ubuntu 14.04, 13.10 y 12.04

    El IDE de Netbeans 8.0 proporciona analizadores de código y editores para trabajar con las últimas tecnologías como Java 8.

    Con este nuevo IDE tendrás soporte para Maven, Java Enterprise Edition con PrimeFaces, herramientas para HTML5 (AngularJS) y mejoras en el soporte de PHP y C/C++.

    Los pasos para instalar Netbeans 8.0 son los siguientes:

    Paso 1. Descargar el instalador.

    Dependiendo si tu sistema es de 64 o de 32 bits hay una versión disponible. También puedes elegir el idioma del IDE.

    Todas las descargas de Netbeans están disponibles en netbeans.org/download.

    Netbeans download

    Paso 2. Estableciendo permisos de ejecución.

    Pulsa CTRL+ALT+T para abrir un terminal y ve a la carpeta de descargas. Ahí verás el archivo descargado. En nuestro caso nos hemos bajado el siguiente:
    netbeans-8.0.2-javase-linux.sh

    Si hay muchos archivos en la carpeta, con el comando ls -lrt los ordenarás por la fecha de creación y en este caso te aparecerá el último (si es lo último que has descargado).

    Para dar permiso de ejecución ejecuta el siguiente comando:

    chmod +x netbeans-8.0.2-javase-linux.sh

    Paso 3. Lanzamos el instalador

    Desde la misma carpeta ejecutamos el siguiente comando

    ./netbeans-8.0.2-javase-linux.sh

    Comenzará a ejecutarse el instalador:

    instalador netbeans

    Te pedirá si quieres instalar JUnit:

    instalando junit

    JUnit es un framework sencillo para realizar test a las aplicaciones. En el caso que queramos hacer proyectos grandes y realizar test que los queramos repetir las veces que haga falta lo instalaremos.

    Podremos cambiar el lugar donde se van a instalar tanto el IDE como el JDK:
    directorios netbeans

    Una vez completada la configuración nos aparece el resumen y al aceptar comenzamos a instalar NetBeans:
    resumen instalación netbeans

    Generalmente este tipo de IDE suelen tener un tamaño considerable. Habrá que esperar un rato hasta que la instalación se haya completado:

    instalarcion completada netbeans

    Instala Netbeans en tu equipo.

    Paso 4. Probar la nueva instalación.

    Manuela le ha dicho a Dimas que por qué no prueba el IDE con alguna aplicación con ventanas, botones, etc. A Dimas le ha parecido muy buena idea y ha visto que Swing es una librería de Java que ofrece ventanas, botones, campos de texto ,etc. Está investigando por Internet como hacer una aplicación muy sencilla con swing para probar su nuevo IDE instalado.

    Para probar la instalación creamos un nuevo proyecto llamado Holamundo. Dentro del proyecto crearemos una nueva clase llamada Holamundoswing. Es el típico Hola Mundo pero con aspecto visual.

    package holamundoswing;

    /**
    *
    * @author morenoperezjc
    */

    //Debemos importar todos los componentes que vamos a utilizar en nuestra
    //aplicación
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import javax.swing.WindowConstants;

    public class Holamundoswing {

    private JFrame v;/* ventana */
    private JButton b;/* botón */
    private JTextField t;/* campo de texto */

    /**
    * Crea una instancia de HolaMundoSwing
    * @param args
    */
    public static void main(String [] args)
    {
    new Holamundoswing();
    }

    /**
    * Crea la ventana, inicializa todo y la visualiza
    */
    public Holamundoswing()
    {
    // Creamos una nueva ventana. La distribución será FlowLayout
    // el botón y el campo de texto quedarían alineados.
    v = new JFrame(“Hola Mundo en Swing”);
    v.getContentPane().setLayout(new FlowLayout());

    // Creamos el botón y lo incluimos en el JFrame creado
    b = new JButton(“Dale”);
    v.getContentPane().add (b);

    // Hacemos lo mismo con el campo de texto
    t = new JTextField(20);
    v.getContentPane().add(t);

    // Añadimos un listener para responder al evento del pulsar botón.
    b.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    t.setText (“Hola mundo”);
    }
    });

    // Cuando se cierra la ventana termina la aplicación
    v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    // Empaquetamos los componentes de la ventana.
    v.pack();

    // Hacemos visible la ventana
    v.setVisible(true);
    }

    }

    Compila la clase anterior en Netbeans y ejecútala.

    Reto:
    Añade un segundo botón a la aplicación. El primer botón saludará y el segundo botón se despedirá del usuario.

    Desinstalando Netbeans

    Para desinstalar Netbeans solamente hay que ejecutar en desinstalador
    ./uninstall.sh

    7. Depurar un programa

    Es el momento de aprender a depurar un programa. Ningún programa sale bien a la primera ni funciona tal y como se diseñó en un primer momento. Siempre hay que depurar algunos fallos o simplemente verificar que lo que está haciendo lo hace de forma correcta.

    A continuación vamos a utilizar el depurador para establecer un punto de ruptura y analizar el valor de las variables con las que estamos trabajando.

    Para ver de una forma más sencilla cómo funciona el depurador hemos añadido algunas líneas de código sencillas a nuestro anterior programa:

    depura1

    Lo primero que tenemos que hacer es acceder a la herramienta de depuración. Tendremos que pulsar el siguiente botón:

    depura2

    Lo que vamos a hacer a continuación es establecer un breakpoint (punto de ruptura) nos va a servir para que el programa se ejecute hasta dicho punto. Pulsa el botón derecho sobre el número de línea donde quieras establecer el punto de ruptura y elige breakpoint.

    Una vez establecido el punto de ruptura marcamos la variable a la que queremos revisar su valor y pulsando el botón derecho del ratón nuevamente elegimos watch.

    watch

    El resultado de estas dos acciones sería el siguiente:

    depura3

    Ahora al darle al botón de play podemos ejecutar el programa hasta el breakpoint y analizar el valor de la variable num:

    debug

    Como se puede ver en la imagen anterior, la línea verde es la siguiente que se va a ejecutar y se puede ver en el panel inferior el valor actual de la variable num.

    debug_botonera

    Utiliza los botones anteriores para modificar según necesidad el flujo del programa. Con estos botones puedes pausar la ejecución, pararla, cambiar el orden de ejecución, etc.

    Manuela ha creado un programa Java que utiliza dos variables. A cada variable le da un valor determinado y el programa muestra por consola cuál es la variable con valor más alto.
    Este pequeño programa lo ha realizado solamente para probar cómo funciona el depurador de Netbeans.

    8. Profiler. Analisis de aplicaciones

    Muchas veces cuando ya nuestra aplicación está completamente desarrollada o en periodo de pruebas necesitamos analizar el rendimiento de la misma. Netbeans proporciona una herramienta para monitorizar los hilos de ejecución, el rendimiento de la CPU, el uso de memoria, etc.

    Analizando el sistema por primera vez

    calibración

    La primera vez que se ejecuta el profiler, éste tiene que hacer un análisis o calibración del sistema para saber luego cual es el impacto de la aplicación que se está analizando en el mismo.

    Analisis de la memoria

    analizando_memoria

    Para probar la herramienta hemos elegido analizar la memoria de nuestra aplicación. Como se puede ver se puede analizar la memoria que consume cada uno de los objetos de nuestra aplicación. Se puede analizar en vivo y tomar instantáneas (snapshots) de la misma. También podemos ejecutar el garbage collector o recolector de basura nosotros mismos (Java lo ejecuta de forma automática cuando a él le parece).

    Dimas está empeñado en conocer cómo funciona el Profiler de Netbeans.
    Escribe un pequeño tutorial para explicarle cómo funciona las opciones más representativas de esta herramienta.

    9. Generación automática de documentación

    Dimas odia documentar los programas. Ha oído hablar de Javadoc que es una herramienta que documenta el código de forma automática. Es una documentación técnica para programadores pero eso es precisamente lo que Dimas está buscando. Habla con Manuela y se ponen a investigar si Netbeans soporta Javadoc.

    Emma que los ve algo perdidos les dice: “Es muy fácil. En el menú ejecutar puedes elegir ejecutar Javadoc, esperas unos segundos y al momento se crean los html”.

    Las aplicaciones o programas tienen que estar perfectamente documentados, de lo contrario sería muy difícil mantener el código. En Java, la documentación del código se escribe dentro del mismo, lo cual es verdaderamente útil. Java, además tiene una herramienta que se llama Javadoc la cual extrae los textos y comentarios del código fuente y los transforma en páginas web (formato HTML).

    Para escribir comentarios que los interprete Javadoc hay que insertarlos entre los caracteres /** y */. Dentro de estos caracteres especiales ya podemos escribir en HTML utilizando sus etiquetas y utilizando también otras etiquetas específicas como:
    @author. Identifica al autor del código.
    @version. Identifica la versión del código.
    @since. Especifica la fecha de creación del código.
    @param . Describe el parámetro “nombre”. Una línea por cada parámetro.
    @return. Especifica el valor de retorno del método. Si la función devuelve void no hay que especificarlo.
    @deprecated. Si la clase, método o ítem documentado esta obsoleto.
    @see. Utilizado si se quiere dirigir al lector a otro apartado.
    @link. Utilizado si se quiere dirigir al lector al recurso especificado por la URL.

    Veamos un ejemplo de documentación para el programa anterior. A continuación se detalla parte del código:

    package holamundoswing;

    /**
    * clase holamundoswing
    * @author Juan Carlos
    * @version 1.0
    * @since 06/06/2015
    *
    *

    Esta clase corresponde a un ejemplo de holamundo con swing.

    */

    //Debemos importar todos los componentes que vamos a utilizar en nuestra
    //aplicación
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    Recuerda.
    Para generar la documentación de la clase anterior se puede ejecutar desde línea de comandos lo siguiente:
    javadoc holamundoswing.java

    Tras ejecutar javadoc, obtenemos una serie de páginas web con la documentación de la aplicación.

    javadoc

    10. Gestión de módulos

    Netbeans aumenta su potencia gracias a la gestión de módulos o plugins. En la página web de plugins de NetBeans tienes cientos de plugins perfectamente clasificados y ordenados. Con estos módulos podrás crear informes, trabajar con otros lenguajes de programación que no sean Java, etc.

    pluginnetbeans

    ¿Cómo añadir un módulo a Netbeans?

    Como ejemplo vamos a instalar un módulo a nuestra instalación de NetBeans 8.0.2 para poder trabajar con proyectos Python. El primer paso es descargarlo desde la dirección anterior.

    Tenemos que tener abierto NetBeans, en el menú Herramientas elegimos Plugins.

    cargarplugin

    Nos tenemos que ir a la pestaña Downloaded y añadir el plugin que nos hemos descargado. Recuerda que los plugin que podemos añadir e instalar a NetBeans son ficheros con extensión nbm. Si descargamos un fichero comprimido lo tendremos que descomprimir.

    Una vez cargados los plugins basta con pulsar Instalar y reiniciar nuestro IDE.

    pluginsinstalados

    Crear un nuevo proyecto Python en Netbeans

    Instalado ya nuestro plugin estamos en disposición de crear nuestro primer proyecto pequeño en python con NetBeans.

    python project

    Ahora ya cuando creamos un nuevo proyecto en NetBeans nos pide si queremos crear un proyecto Python. Elegiremos esa opción.

    python_holamundo

    Como puedes observar, NetBeans al crear un nuevo proyecto Python crea un holamundo por defecto. Si lo ejecutamos podremos ver en consola (output) el resultado de la ejecución del mismo.

    desinstalarplugin

    ¿Cómo eliminar un plugin?

    Dentro de la ventana de plugins podemos desactivar y desinstalar los plugin. Dependiendo de lo que queramos hacer lo podemos desactivar (y luego activarlo cuando sea necesario) o simplemente desinstalarlo (cuando no se va a usar nunca más).

    Andrino tiene un pequeño proyecto para realizar en Python y le ha dicho a Dimas si querría programarlo él. “También tendrás que programar algo en JavaScript”, le dijo. “No importa, creo que puedo hacerlo todo con NetBeans”.
    Averigua si esto es cierto y crea dos pequeños proyecto en NetBeans que saluden en varios idiomas tanto en Python como en JavaScript.

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

    Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>