R

Ronaldark

Usuario (El Salvador)

Primer post: 10 jun 2010Último post: 25 abr 2015
11
Posts
147
Puntos totales
6
Comentarios
Oracle Tips - Errores Típicos.
Oracle Tips - Errores Típicos.
Ciencia EducacionporAnónimo6/10/2010

Un saludo, en este post pondré algunos de los errores típicos que ocurren cuando trabajas con bases de datos Oracley su solución (obviamente probada por especialistas). ORA-06413 - Connection not open (No se puede abrir la conexión) Ejemplo: Queres conectarte a una base de datos Oracle desde el manejador de Bases de Datos Toad for Oracle en un equipo con Windows 7. Causa: El problema es ocasionado por un bug de Oracle, el cual no permite reconocer cuando ejecutas el manejador desde una carpeta con un Path similar a Crogram Files (x86)Quest Software. (x86) es el causante del problema debido al paréntesis. Soluciones: +Instala tu manejador de base de datos en otra carpeta que no posea ese '(x86)' por ejemplo en Crogram FilesQuest Software. +Bajate una versión portable del Toad y guardala en un directorio que no posea caracteres que den problema. ORA-12154: TNS:could not resolve the connect identifier specified (No es posible conectarse al identificador especificado) Ejemplo: Cuando acabas de instalar una base de datos o un cliente de Oracle en un equipo y queres conectarte con los parametros que has definido. Causas: +Mala configuracion del TNSNAMES.ORA. +No se localiza el repositorio donde esta el identificador del nombre del servicio Soluciones: +Revisa el archivo TNSNAMES.ORA de la base de datos o del cliente que estes utilizando y revisa los parámetros de configuración, los más importantes son el HOST, el SID y el ALIAS de la base de datos, mira si coinciden con los datos del equipo que posee la base de datos (el servidor). El TNSNAMES lo encontras por lo general en alguna carpeta llamada Network o bien en NET80 en el caso de algunos clientes ORACLE. Un típico TNSNAMES de la base de datos es el siguiente: Aqui_pones_el_alias = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =Aqui_va_el_nombre_del_servidor) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = Aqui_el_nombre_del_servicio) ) ) +Revisate bien el nombre del servicio que concuerde con el nombre que Windows le proporciona, en el caso de una base de datos Oracle XE siempre será el servicio XE, en otras instalaciones el servicio se llamará como se le bautiza al momento de crear la base de datos. ORA-00936: missing expression (Expresion perdida) Ejemplo: Estas ejecutando Queryes y de repente te salta este pequeñisimo error. Causas: +Andas desconcentrado. +No sabes SQL o PL/SQL +Se te olvido la sintaxis. Soluciones: +Busca en algun sitio como es la sintaxis de la expresion que buscas. ORA-01031: insufficient privileges (privilegios insuficientes) Ejemplo: Quieres agregar un sinónimo o eliminar algo en especial de una base de datos. Causas: + Tu usuario actual no tiene permisos suficientes para ejecutar la acción. Soluciones: +Consulta con tu DBA(Administrador de Base de Datos) si es posible agregar permisos. Si sos tu propio DBA y has creado un usuario y quieres ejecutar alguna acción proporcionale los permisos para realizarlo, lo más sencillo es que te conectes con el usuario SYSTEM y pongas al contraseña que le pusiste a tu base de datos cuando la instalaste y le das GRANT DBA, RESOURCE to Nombre_del_usuario, ya con eso tu usuario tiene permisos full para hacer y deshacer. ORA-00942: table or view does not exist (Tabla o vista no existe) Ejemplo: queres seleccionar la data existentea través de un Query y te das cuenta de este pequeño error. Causas: +En realidad no has creado la tabla. +El usuario que estas usando no tiene privilegios o no han sido creados los sinónimos necesarios para ver la data de la tabla que buscas. Soluciones: +Dale privilegios al usuario que utilizas o pide los privilegios. +Verifica que en realidad exista la tabla, y si la necesitas y no existe creala. +Crea el sinónimo para revisar la tabla, lo más practico es que lo crees Publico. ORA-06502: PL/SQL: numeric or value error string (Error Numérico o de valor) Ejemplo: Estoy seguro que más de alguna vez se han encontrado con este error, es bastante común y a veces quiebra la cabeza en la mayoría de los casos es ocasionado cuando declaraste las columnas de una tabla. Causa: +Algún campo fue declarada con una extensión menor a la que intentas insertar. +Quieres meter otro tipo de datos dentro de un campo numérico. Solución: +Haz mas larga la extensión de la columna, si por ejemplo tienes una columna con tipo Number(2,0) y el número que estás insertando es 100 es obvio que no podrá ser ingresado, alterala y ponla de tipo Number(4,0) o que se yo lo que estimes conveniente. +Cambiale el tipo a VARCHAR o el que creas conveniente para usar números y letras o los caracteres que necesites. ORA-00955: name is already used by an existing object (El nombre esta siendo usado por un objeto existente) Ejemplo: Cuando estas creando una tabla o un sinónimo. Causa: +Estas creando un objeto (sinónimo, usuario, tabla,etc.) con un nombre de otro objeto que ya existe en tu esquema. Solución: +Dale un nombre único al objeto, si por ejemplo tienes una tabla que se llama VENTAS, crea otra con un nombre VENTASM, o que se yo ingeniate un nombre que sea único. Espero que les sirva si tienen algunas preguntas sobre errores y sus posibles soluciones haganmelas en privado o en este mismo post, actualmente trabajo con Bases de Datos Oracle en una empresa de Tecnología y pues ya hay un poquitín de experiencia acumulada. En especial para los Junior ya se les puede dar una mano.

1
3
ASP .Net - Tutorial de MasterPages.
ASP .Net - Tutorial de MasterPages.
Ciencia EducacionporAnónimo2/15/2013

Prepara lo siguiente: 1. Visual Studio 2008 (Quizas funcione para el 2005 y el 2010, intentalo). 2. Revisa que el IIS no tenga problemas con ningún otro servidor de aplicaciones (llámese GlasFish, OAS, Tomcat, etc.), no me detendré a explicar eso solo indico que por lo general es problema de puertos. Comenzemos: Como dije, no me detendre a explicar mucho sobre el tema. Vamos a crear una MasterPage, que en definición sería como una plantilla (similar a la forma en que trabaja facelets para java), esto es para que no tengas que repetir en cada página un mismo contenido. En si, diagramado la MasterPage trabaja de la siguiente manera: Explicando el diagrama: Por un lado tenemos la Content Page, que no es más que una simple página web con el contenido que queremos presentar al usuario. Luego, tenemos la Master Page, la cual trabaja con su propio diseño y vendría a ser un caparazón/carapacho (una concha para los lectores de otros países que no entiendan la terminología), la cual no esta vacía en su totalidad porque tiene decoraciones a su alrededor pero internamente si esta vacía. El resultado final, se logra mediante la fusión de ambas páginas el contenido de nuestro caparazón/carapacho al que le llamamos Master Page es llenado por cada una de las Content Page que dispongamos. Ahora que entendemos como funcionan, podemos comenzar por abrir el VS 2008 o la versión que ustedes consideren que les pueda servir y comenzemos con la parte divertida del tutorial: Seleccionen la Opción Sitio Web, posteriorente el Vs les pedirá que seleccionen el tipo del nuevo sitio web a utilizar. Importante en este punto tomar en cuenta lo siguiente: Cambien el nombre y la ruta del proyecto a como se les de la gana, pero no se les olvide ponerle Lenguaje Visual Basic, para que puedan seguir este tutorial al pie de la letra. Una vez configurada esta parte, bastará presionar el botón Aceptar el Visual Studio creará el árbol de carpetas y abrirá la página Default.aspx. Llegados a este punto, si nunca habían creado una aplicación Web con ASP .Net Felicidades! si ya lo habían hecho pues ya saben como es la cuestión. Ahora, pasaremos al objetivo del tutorial seleccionan sobre el proyecto web (no la solución), en el árbol de carpetas, la opción "Agregar Nuevo elemento..." luego aparecerá un diálogo como el siguiente: Dejenla con ese nombre, o cambienselo si asi lo quieren. Pero recuerden colocar el Idioma como Visual Basic y luego presionen Agregar. Lo que han hecho, es crear un archivo con extensión *.master, como decía antes son plantillas que se utilizan para el resto de páginas de contenido que crearán. Si revisan el código de la MasterPage hay algunas diferencias a tomar en cuenta que las hacen especiales con respecto a las páginas *.aspx comenzamos por la primera línea: <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> Si observan en la página Default.aspx la primera línea es esta: <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> Para comenzar el tag inicia con la palabra Master en vez de Page, otra diferencia notoria es la clase de la que heredan ambas páginas "MasterPage" "_Default". En la Master Page podemos observar que dentro del tag <head> se encuentra lo siguiente: <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> Luego observamos que en el tag <body> encontramos lo siguiente: <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> Usando CSS y html vamos a crear un diseño que nos permitirá dividir la MasterPage en varios sectores, de manera que podremos colocar contenido dentro de estos secotres de acuerdo a las necesidades que requiera nuestro sitio web. El código original de la MasterPage es el siguiente: <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body> </html> Lo modificaremos para que quede de la siguiente forma: <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Untitled Page</title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> <link href="Styles.css" rel="stylesheet" type="text/css" /> </head> <body> <form id="form1" runat="server"> <div id="topContent"> <a href="Default.aspx">Tutorial de Master Pages</a> </div> <div id="mainContent"> <asp:ContentPlaceHolder id="MainContent" runat="server"> </asp:ContentPlaceHolder> </div> <div id="leftContent"> <h3>Titulo 1</h3> <ul> <li>TODO</li> </ul> <h3>Titulo 2</h3> <ul> <li>TODO</li> </ul> </div> <div id="footerContent"> <img src="Images/PoweredByASPNET.gif" alt="Powered by ASP.NET!" /> </div> </form> </body> </html> Al revisar este código nos encontramos con algunas cuestiones que debemos tomar en cuenta: Hay una referencia a una hoja de estilos llamada "Styles.css", esa la tenemos que crear para que la MasterPage se despliegue con los estilos a utilizar.Las etiquetas <div> estan segmentadas de la siguiente manera:"topContent""mainContent""leftContent""footerContent"Hay una referencia a una imagen en mediod e las etiquetas <div> con id "footerContent "Creamos la hoja de estilo "Styles.css" de la misma forma en que creamos la MasterPage, seleccionamos la opción "Agregar nuevo elemento..." en el cuadro de diálogo seleccionamos la opción "Hoja de estilos" y le cambiamos el nombre a "Styles.css" dejamos el lenguaje como Visual Basic y finalmente clic en agregar. Sustituimos el contenido por lo siguiente: body { font-family:Verdana; font-size: medium; margin: 0px; } h1, h2 { margin: 0px; } #topContent { text-align: right; background-color: #009; color: White; font-size: x-large; text-decoration: none; font-weight: bold; padding: 10px; height: 50px; } #topContent a { text-decoration: none; color: White; } #leftContent { width: 230px; padding: 10px; font-size: 90%; text-align: left; position: absolute; top: 60px; margin-top: 10px; left: 0px; } #leftContent h3 { text-transform: uppercase; letter-spacing: 2px; text-align: center; border-top: dotted 1px #660; border-bottom: dotted 1px #660; } #mainContent { text-align: left; margin-left: 250px; padding: 10px; } #footerContent { text-align: center; padding: 5px; } Una vez Tenemos lo de la MasterPage creado, nos quedaría asociarle un content para probar el correcto funcionamiento de la MasterPage. Para lograr esto, tendremos que "Agregar nuevo elemento..." y seleccionamos la opción Web Forms, pero esta vez tendrá una diferencia, Añadiremos la MasterPage. Al dar clic en Agregar, aparecerá un neuvo diálogo en el que pedirá que selecciones la MasterPage. Una vez seleccionada el código que veremos en la página Default2.aspx será el siguiente: <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server"> </asp:Content> Ahora corran la página Default2.aspx con CTRL +F5 y verán el resultado similar a lo siguiente: Ahora añadiremos un texto en el Content, para que sea desplegado al correr la página en el Navegador. Modificamos la página Default2.aspx para que quede de la siguiente manera: <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server"> <h3>Bienvenido</h3> <p> Este es el sitio de prueba para los MasterPage, este contenido se debería mostrar en el área de content de la página. </p> </asp:Content> Ahora ejecutamos la página con CTRL +F5 y el resultado que obtendremos será el siguiente: Mas adelante en otro tutorial le añadiremos Login, Links, Menús Desplegables, Menús dinámicos, Títulos de Página, etc. para ver más a detalle el potencial de las MasterPage.

0
0
F
Framework para PHP Yii.
Ciencia EducacionporAnónimo6/22/2012

Utilizando el libro Agile Web Application Development whit Y de Jeffrey Winesett aprenderemos un Framework muy popular para PHP. arte del "Boom" que tienen los frameworks hoy en dia, tal como Java tiene a Spring, Ruby a Rails, C# a .NET, PHP tiene a Yii. Su fundador fue Qian Xue quien comenzo el desarrollo en Enero de 2008. El nombre Yii (un acronimo de Yes, it, is, se pronuncia como Yee o [ji ) busca ser fácil, eficiente, y extensible. Es un componente de alto rendimiento para aplicaciones web programado en PHP5. Yii es fácil. Para correr un aplicación web potenciada por Yii, todo lo que necesitamos los archivos del core framework  y un servidor Web que soporte PHP 5.1.0 o superior. Para desarrollar con Yii, solamente se necesita conocer PHP y Programacion Orientada a Objetos (OOP en ingles). Yii es eficiente. Yii alienta a la reutilización de código al máximo en la programación web, y puede acelerar significantemente el proceso de desarrollo. Yii es especialmente diseñado para ayudar con el desarrollo DRY (Don´t repeat Yourself). Todas las aplicaciones Yii son construidas utilizando el Modelo Vista Controlador (MVC). Yii es extensible. Yii ha sido cuidadosamente diseñado para permitir que casi  todas las piezas del código sean extendidas y personalizadas para satisfacer casi todo tipo de necesidades o requerimientos.  Arquitectura MVC.Yii es un fraework MVC que provee una estructura explicita de carpetas para cada pieza del modelo, la vista, y el codigo controlador. El Modelo.Típico en la arquitectura MVC, el modelo es el responsable de mantener el estado. Así, debería encapsular las reglas de negocio que aplican a los datos que definen su estado. Un modelo de Yii es una instancia de la del framework clase CModel o sus clases hijas. Yii implementa dos clases de modelos: El modelo forma ( clase CFormModel) y el modelo de registro activo (clase CActiveRecord). Ambos extienden de la clase base CModel.CFormmodel que representa un modelo  de datos que colecciona entradas en un Formulario HTML. Active Record (AR) es un patrón de diseño usado para abstraer acceso a la base de datos en un modelado orientado a objetos. Cada objeto AR en Yii es una instancia de CActiveRecord o sus clases hijas que envuelven una sola fila en una tabla o vista de base de datos, encapsulando toda la logica y detalles del acceso a la base de datos. La vista.Típicamente, la vista es la responsable de renderizar la interfaz de usuario, basado en el detalle de los datos en el modelo. Una vista en Yii es un Script PHP que contiene una interfaz de usuario relacionada a los elementos, A menudo usando HTML, pero puede tener sentencias PHP. El controlador.El controlador es nuestro indicador principal de una petición dirigida y es el responsable de tomar las entradas del usuario, interactuando con el modelo, y dado instrucciones a la vista para actualizar y mostrar apropiadamente. Un controlador en Yii es una instancia de  CController o sus hijos. Cuando un controlador corre, este lleva a cabo una acción solicitada, la cual interactua con los modelos necesitados y renderiza una vista apropiada. Una acción, en un simple formulario, es un método de la clase controlador que su nombre comienza con la palabra action. Descarga del Framework Documentación del Framework

6
0
I
Instalación de Oracle Instant Client 11.2 en Windows 8.
Ciencia EducacionporAnónimo2/20/2013

Buen día, En esta ocasión quiero compartirles la manera en que instalé el Oracle Instant Client en mi máquina con el no muy agradable Windows 8. Aclaró que este método es 100% funcional en Windows 7 también y probablemente en otras versiones de Windows. ¿Para que te va a servir un Oracle Client? Se que a más de alguno se le pasó esta pregunta por la mente, y pues la contestaré. Oracle puede conectarse mediante un cliente propio que permitirá acceder a las bases de Datos que tengamos acceso en nuestra red. Si tenes instalado un producto de Oracle como Oracle Forms, Oracle Aplication Server, Oracle Database, etc. tenés instalado un Oracle Client que te permitirá conectarte a una base de datos Oracle. Si sos Desarrollador y no tenes una base de datos Oracle instalada en tu estación de trabajo te será muy útil un Oracle Client. ¿Como un Oracle Client sabe a que base se tendrá que conectar? Pues Oracle ha simplificado este trabajo ubicando un archivo denominado TNSNAMES con extensión *.ORA, este archivo se encuentra por lo general en algún lugar dentro de network/admin que encontrarán en el árbol de carpetas del producto Oracle instalado. En el tutorial explicaré más a detalle la estructura de este archivo. Y este es mi Campo de Batalla. Ahora lo que necesitan saber, la instalación del Cliente de Oracle: Paso 1: Descarguen los archivos "Basic All Files" y "SQL*Plus" de la página de descargas: Win 64: Instan Client 64 Bits Win 32: Instant Client 32 Bits Paso 2: Una vez descargados los archivos Descomprimimos los *.zip a modo que queden todos los archivos en la misma carpeta. Paso 3: Creamos un directorio en el Disco C: y le asignamos el nombre Oracle. Paso 4: Creamos las variables de entorno. Para este paso seleccionen Equipo (Windows+ E abre el explorador de Windows), seleccionan Equipo y luego Propiedades del Sistema. En la barra lateral izquierda aparecen algunos links, seleccionen el que dice "Configuración avanzada del Equipo". Luego damos clic en el botón "Variables de Entorno". Tenemos que configurar 1 variable de entorno y crear 2 adicionales: La primer es la variable PATH, al valor de la variable agregar al final ';C:Oracleinstantclient_11_2' (sin las comillas) y Aceptar.La segunda variable hay que crearla y denominarla SQL_PATH, en el valor de la variable agregar la ruta donde se encuentran los archivos del cliente de Oracle 'C:Oracleinstantclient_11_2' (sin las comillas).La tercera variable hay que crearla y denominarla TNS_ADMIN en el valor de la variable agregar la ruta donde se encuentran los archivos del cliente de Oracle 'C:Oracleinstantclient_11_2' (sin las comillas). Este es el directorio donde estara el archivo TNSNAMES.ora. Creación del TNSNAMES.ora Con estos pasos ya tenemos instalado nuestro cliente y cuando reiniciemos funcionará, pero necesitamos crear el archivo de TNSNAMES para poder conectarnos a alguna base de datos. Abrimos Notepad y creamos un nuevo archivo que guardaremos con extensión *.ora y lo denominaremos TNSNAMES, por cuestiones prácticas lo guardaremos en el directorio raíz que debe coincidir con el directorio de la variable de entorno TNS_ADMIN. Creado el archivo, procedemos a su respectiva configuración: AquiColocarAliasConexion = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = AquiColocarNombreHost)(PORT = 1521)) ) (CONNECT_DATA = (SID = AquiColocarSID) (SERVER = DEDICATED) ) ) Este sería un bloque del TNSNAMEs, con el cual podríamos conectarnos a una base de datos sustituyendo los valores en Negrita por valores que correspondan a un servidor de Bases de Datos: AquiColocarAliasConexion = Cualquier nombre, de preferencia que represente alguna característica propia de la conexión, ejemplo SERVER01. AquiColocarNombreHost = Nombre o IP del Servidor donde esta la base de datos. AquiColocarSID = Nombre del SID probablemente del SERVICE de la base de datos, para las bases de datos Express Edition por lo general es XE. Guardamos los cambios y con esto deberíamos tener configurada nuestra conexión utilizando el Instant Client de Oracle. Paso 5: Reinicien el equipo. Paso 6: Prueben. Solamente como prueba intentaré conectarme a mi servidor de Bases de Datos, que en este caso esta dentro de una máquina Virtual que utiliza como Base de Datos Oracle XE 10 G. Abren un CMD (Windows + R : Menu Ejecutar, Digiten CMD y luego Enter), cuando tengan la pantalla negra digiten el comando SQLPLUS. Esto debe invocar al programa SQLPLUS que en los pasos anteriores descomprimimos en la misma carpeta del cliente. Pedirá el UserName de la Base de Datos de Oracle a la que nos conectaremos, importante tener credenciales para ingresar a la base. Un punto a tomar en cuenta es que necesitaremos digitar algo similar a esto para poder conectarnos: NombreUsuario/Contraseña@AliasBaseDatosTNSNames Esto en el campo de User. Supongamos que nuestras credenciales son las siguientes: NombreUsuario = BetaRoot Contraseña = BetaRootSV AliasBaseDatosTNSNames = BetaORA01 Digitaríamos lo siguiente: BetaRoot/BetaRootSV@BetaORA01 Si las credenciales son válidas entonces deberá mostrarnos como Conectados a la Base de Datos. Y allí pueden ejecutar sus comandos SQL libremente, pueden utilizar un Administrador de Base de Dato par a Oracle que se conecte mediante el uso de TNSNAMES, como recomendación el SQLDeveloper si quieren algo bueno y gratuito. ¿Dudas?

10
0
Java-Apuntes #1
Java-Apuntes #1
Ciencia EducacionporAnónimo12/26/2011

Buen día,En esta ocasión quiero comenzar a hacer un par de apuntes sobre el Lenguaje de Programación Java, apuntes sacados de diversas fuentes y concentrados en diferentes posts.Para comenzar trabajaremos con el libro de Kathy Sierra, Bert Bates y los hermanos Freeman: Head First Java 2da ed, les recomiendo que lo lean es muy buen libro para iniciarse en Java.¿Como trabaja Java?Fuente.Creamos un documento fuente. Usando un protocolo establecido (en este caso el lenguaje Java).Compilador.Corre tu documento a través del compilador de código fuente. El compilador chequea los errores y no te dejará compilar hasta que todo corra correctamente.Salida (Código).El compilador crea un nuevo documento, codificado en bytecode Java. Cualquier dispositivo capaz de correr Java será capaz de interpretar/traducir este archivo en algo que se pueda correr. El bytecode compilado es independiente de la plataforma.Máquinas Virtuales.Tus amigos no tienen una máquina virtual física, pero todos ellos tienen una máquina virtual Java (implementada en el software) corriendo dentro de sus herramientas electrónicas. La máquina virtual lee y corre el bytecode.Estructura del código Java.Archivo Fuente.Archivo de clase.Métodos.¿Que va en un archivo fuente?Un archivo de código fuente (con la extensión .java) tiene la definición de una clase. La clase representa una parte de tu programa, aunque una aplicación muy pequeña puede necesitar una sola clase. La clase debe ir dentro de un par de llaves.public class Perro{} ¿Que va dentro de una clase?Una clase tiene uno más métodos. En la clase Perro, el método ladra tendrá instrucciones de como el Perro debe ladrar. Tus métodos deberán se declarados dentro de una clase (en otras palabras, dentro de las llaves de la clase).public class Perro{ void ladrar(){ }}¿Que va dentro de un método?Dentro de las llaves de un método, escribe tus propias instrucciones para como el método será realizado. El código del método básicamente es un conjunto de estados, y por ahora debes pensar en un método como una especie de función o procedimiento.public class Perro{ void ladrar(){ estado1; estado2; }}Anatomía de una clase.Cuando la JVM comienza a correr, busca la clase que se le ha dado en la línea de comando. Entonces comienza a buscar por métodos especialmente-escritos que se vean exactamente como:public static void main (String[] args){ // Aqui va el código}Luego, la JVM corre todo entre las llaves { } de tu metodo principal (main). Cada aplicación Java tiene que tener al menos una clase, y al menos un método (no un método principal (main) por clase, solamente un método principal (main) por aplicación).public class MyFirstApp{ public static void main(String[] args){ System.out.print("Java Rules!"; }}Explicando cada palabra:public: Cualquiera puede accesar.class: Indica una clase.MyFirstApp: El nombre de la clase.{: Llave de apertura de la clase.static: luego se mencionará.void: El tipo de retorno, void significa que no retornará valor.main: El nombre de este método.String[] args: Argumentos del método. El método debe ser dado como un arreglo de Strings, y el arreglo será llamado 'args'.{: Llave de apertura el método.System.out.print: Significa que imprime una salida estándar (por defecto en línea de comando)."I rule!": El String que quieres imprimir.;: Cada estado debe terminar con punto y coma.}: Llave de cierre del método main.}: Llave de cierre de la clase MyFirstAppPueden ver este y otros post, directamente de mi blog: http://betaroot.blogspot.com/2011/11/java-apuntes-1.html

15
0
ASP. Net - Tutorial de Seguridad (VB)
ASP. Net - Tutorial de Seguridad (VB)
Ciencia EducacionporAnónimo2/15/2013

En este post vamos a tratar un tema muy importante en cualquier sistema informático, que es el tema de la seguridad. Para ello recurrire a otro tutorial de Scott Mitchell que trata sobre este tema de manera detallada. Comenzamos. Creamos un nuevo Sitio Web y le ponemos cualquier nombre que deseemos. Seleccionamos como Lenguaje Visual Basic. Creamos la MasterPage, le pondremos como nombre "Site.master". Creamos una Hoja de Estilo de Cascada y la nombraremos "Styles.css". A la hoja de Estilo la sustituiremos por el siguiente código: body { margin: 0; padding-bottom: 2em; background-color: #FFFFFF; color: #000000; font-family:Verdana, Arial, Helvetica, sans-serif; border-top: 2px solid #B51032; } /* Header Section */ #header { border-top: 3px solid #B51032; border-bottom: 1px dotted #B51032; height: 3em; } #header .title { font: 190% Arial, Helvetica, Georgia, "Times New Roman", Times, serif; color: black; background-color: transparent; float: left; margin-right: 2em; margin-top: 0.3em; margin-left: .8em; } #header a:link, a:visited { color: #B51032; } /* Navigation */ #navigation { width: 200px; top: 5em; left: 1em; width: 13em; position:absolute; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:90%; } #navigation ul { list-style: none; margin: 0; padding: 0; } #navigation li { border-bottom: 1px solid #ED9F9F; } #navigation li a { display: block; padding: 5px 5px 5px 0.5em; border-left: 12px solid #711515; border-right: 1px solid #711515; background-color: #B51032; color: #FFFFFF; text-decoration: none; } #navigation li a:hover { background-color: #711515; color: #FFFFFF; } #navigation ul ul { margin-left: 12px; } #navigation ul ul li { border-bottom: 1px solid #711515; margin:0; background-color: #ED9F9F; color: #711515; } #navigation ul ul a:link, #navigation ul ul a:visited { background-color: #ED9F9F; color: #711515; } #navigation ul ul a:hover { background-color: #711515; color: #FFFFFF; } #header .breadcrumb { font: 90% Arial, Helvetica, Georgia, "Times New Roman", Times, serif; color: black; background-color: transparent; float: right; margin-right: 2em; margin-top: 0.8em; font-weight:bold; } /* Main Content */ #content { margin-top:1em; margin-left: 16em; margin-right: 2em; } h1 { font: 150% Arial, Helvetica, Georgia, "Times New Roman", Times, serif; } #content p { font-size: 80%; line-height: 1.6em; } #content ul { font-size: 80%; line-height: 1.6em; } Habiendo añadido el código en "Styles.css" vamos a sustituir el código presente en la MasterPage pro el siguiente: <%@ Master Language="VB" CodeFile="Site.master.vb" Inherits="Site" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Forms Authentication, Authorization, and User Accounts</title> <link href="Styles.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="wrapper"> <form id="form1" runat="server"> <div id="header"> <span class="title">User Account Tutorials</span> </div> <div id="content"> <asp:contentplaceholder id="MainContent" runat="server"> <!-- Page-specific content will go here... --> </asp:contentplaceholder> </div> <div id="navigation"> TODO: Menu will go here... </div> </form> </div> </body> </html> Una vez modificaco el código de la MasterPage, procedemos a crear una Content Page que herede de la MasterPage actual. El nombre de esta será "Default.aspx" como ya existe el VS nos preguntará si deseamos sustituir, haganlo. Luego: Luego: Nota: Si hasta aqui te sientes perdido con algún término, te recomiendo que leas el post ASP. Net Tutorial de MasterPages (VB). Archivo de Configuración. Llegados a este punto vamos a habilitar la autentificación de formas en el Archivo de configuración del Sitio Web (web.config). Algunos aspectos a tener en cuenta: Este archivo de configuración es un XML por lo tanto es case-sensitive. El archivo de configuración posee un apartado con el siguiente tag: <authentication mode="Windows" /> Esto lo vamos a sustituir por lo siguiente: <authentication mode="Forms" /> De esta manera habremos habilitado la Autentificación de formas para nuestro proyecto. Construyendo nuestro Login. Para la construcción de nuestra interfaz de Login necesitamos crear un nuevo formulario Web desde la opción de añadir nuevo elemento. Lo nombraremos como Login.aspx. Sustituímos el código de la página Login.aspx actual por el siguiente: <%@ Page Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Login.aspx.vb" Inherits="Login" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server"> <h1> Login </h1> <p> Username: <asp:TextBox ID="UserName" runat="server"></asp:TextBox> </p> <p> Password: <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox> </p> <p> <asp:CheckBox ID="RememberMe" runat="server" Text="Remember Me" /> </p> <p> <asp:Button ID="LoginButton" runat="server" Text="Login" OnClick="LoginButton_Click" /> </p> <p> <asp:Label ID="InvalidCredentialsMessage" runat="server" ForeColor="Red" Text="Your username or password is invalid. Please try again." Visible="False"></asp:Label> </p> </asp:Content> Validación de Credenciales. Para la validación de credenciales utilizaremos datos en código duro, únicamente para fines del ejemplo. Más adelante (en otor tutorial) vamos a aprender juntos, como trabajar con la base de datos para obtener lso valores desde allí. Nos dirigimos al archivo Login.aspx.vb y modificamos el código por el siguiente: Partial Class Login Inherits System.Web.UI.Page Protected Sub LoginButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LoginButton.Click ' Three valid username/password pairs: Scott/password, Jisun/password, and Sam/password. Dim users() As String = {"Scott", "Jisun", "Sam"} Dim passwords() As String = {"password", "password", "password"} For i As Integer = 0 To users.Length - 1 Dim validUsername As Boolean = (String.Compare(UserName.Text, users(i), True) = 0) Dim validPassword As Boolean = (String.Compare(Password.Text, passwords(i), False) = 0) If validUsername AndAlso validPassword Then ' TODO: Log in the user... ' TODO: Redirect them to the appropriate page End If Next ' If we reach here, the user's credentials were invalid InvalidCredentialsMessage.Visible = True End Sub End Class Usuario Logueado. Para que el Formulario de Login autentifique a un usuario con credenciales, será necesario redireccionarlo a otra página en este caso será la Default.aspx. Vamos a sustituir las dos líneas comentariadas en el código de Login.aspx.vb: ' TODO: Log in the user... ' TODO: Redirect them to the appropriate page Y lo sustituiremos por lo siguiente: FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked) Ahora si, cuando probemos la página Login.aspx en el navegador e ingresemos credenciales válidas nos enviará a la página Default.aspx. si las credenciales son inválidas nos mostrará el mensaje de error. Las credenciales válidas las encotnrarán en el código de Login.aspx.vb, se crean dos arreglos de Tipo String que son el juego de usuarios y contraseñas que se pueden utilizar respectivamente. Por supuesto, pueden modificarlas a su gusto: Dim users() As String = {"Scott", "Jisun", "Sam"} Dim passwords() As String = {"password", "password", "password"} Antes de ver los resultados vamos a agregar un poco de Texto en la página Default.aspx, la página debería quedar codificada de la sigueinte forma: <%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server"> <h3>Bienvenido</h3> <p>Bienvenido a la página principal, si puedes ver está página después de haber ingresado tus credenciales es porque te has podido loguear correctamente en el Sitio Web. </p> </asp:Content> Iniciamos sin Depurar (CTRL + F5) en la página Login.aspx, probare con Scott/password y vere el resultado que me despliega, únicamente para mostrar un resultado que pueda ser visto: Luego: Ahora prueben que pasa si no ingresamos datos que correspondan. Y allí esta el resultado, hemos logrado Loguearnos en el sistema. Aclaro, no hemos validado seguridad de ningún tipo ni manejo de sesiones; el objetivo de esto es nada más familiarizarnos con algunas de las características de Seguridad que vienen por defecto en .Net Aún hay mucho por explorar en cuestiones de seguridad, por el momento solamente publicaré esta parte que es la más básica y que ya da una idea de como manejar la seguridad en nuestro proyectoWeb.

10
0
Instalando Eclipse IDE en CentOS 6.
Instalando Eclipse IDE en CentOS 6.
LinuxporAnónimo6/20/2012

Buen día, en esta ocasión quiero compartirles la forma en que instale el IDE Eclipse en CentOS 6, funciona para Red Hat y seguramente en Fedora tambien, aclaro que la integración con el escritorio y los accesos directos funcionan únicamente en escritorios Gnome 2. Instalacion de Eclipse en CentOS. 1. Instalar JDK 7 o JDK 6 2. Descargar Eclipse SDK: http://www.eclipse.org/downloads/ 3. Abrir terminal y cambiarse a usuario root: #sudo -i 4. Extraer el paquete de eclipse, por ejemplo al directorio de /opt: # tar -xvzf eclipse-SDK-3.7.2-linux-gtk.tar.gz -C /opt 4.1. La version del SDK dependera de la version que hayan descargado. 5. Agregar permisos para leer archivos: # chmod -R +r /opt/eclipse 6. Crear el ejecutable de Eclipse en la ruta /usr/bin: touch /usr/bin/eclipse # chmod 755 /usr/bin/eclipse 6.1. Abrir el archivo Eclipse con su editor favorito (vi, nano, gedit): # nano -w /usr/bin/eclipse 6.2. Al archivo añadirle el siguiente contenido: #!/bin/sh export ECLIPSE_HOME="/opt/eclipse" $ECLIPSE_HOME/eclipse $* 7. Crear el lanzador de escritorio Gnome: /usr/share/applications/eclipse.desktop 7.1 Agregar el contenido al archivo y guardar: [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse SDK 3.7.2 Exec=eclipse Icon=/opt/eclipse/icon.xpm Terminal=false Type=Application Categories=GNOME;Application;Development; StartupNotify=true 8. Iniciar Eclipse: eclipse

8
0
I
Iniciando con Spring Framework.
LinuxporAnónimo6/27/2014

Spring Framework. Spring es, como lo definen sus autores, un framework ligero para construir aplicaciones empresariales. Spring se encuentra dividido en distintos módulos, cada uno de los cuales se encarga de distintas funcionalides en nuestra aplicación. Posee un gran gama de módulos utilizados para distintas tareas, difícilmente todos se utilizan en una sola aplicación. Si quieres saber más, te invito a visitar su sitio oficial: Spring Site Construyendo un Hello Cruelty World con Spring. Que necesitas: Eclipse IDE (Yo utilizaré el Kepler). Librerías Spring, bajalas Descargar Aquí Comencemos: 1. Crea Nuevo Proyecto. Abrí el eclipse, crea un nuevo proyecto Java. Ponele el nombre que se te venga en gana, yo le puse SpringOne. 2. Agrega las dependencias en el Java Build Path. Lista de dependencias: antlr-runtime-3.0.1 org.springframework.aop-3.1.0.M2 org.springframework.asm-3.1.0.M2 org.springframework.aspects-3.1.0.M2 org.springframework.beans-3.1.0.M2 org.springframework.context.support-3.1.0.M2 org.springframework.context-3.1.0.M2 org.springframework.core-3.1.0.M2 org.springframework.expression-3.1.0.M2 commons-logging-1.1 Descargalas desde aquí, o en el vínculo de más arriba. Luego agregalas al Build Path. Clic en add external jars, selecciona las librerias que descargaste en el post (descomprimidas lógicamente). 3. Crea una clase que la usaremos como bean. Creen un paquete primero al que le pondremos com.betaroot, allí contendremos las clases para que no estén en el source. Sobre el package creado crea la clase bean que la denominaremos HelloCruelty, el código para esta clase a continuación: package com.betaroot; public class HelloCruelty { private String message; public void getMessage() { System.out.println("Your Message : " + message); } public void setMessage(String message) { this.message = message; } } 4. Crea una clase main. Crea main sobre el paquete com.betaroot A esta le llamaremos MainClass. package com.betaroot; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainClass { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "Beans.xml"; HelloCruelty obj = (HelloCruelty) context.getBean("helloCruelty"; obj.getMessage(); } } 5. Crea el XML de Configuración de Beans. Este lo vamos a crear en el wizard de New: Lo nombraremos Beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="helloCruelty" class="com.betaroot.HelloCruelty"> <property name="message" value="Hello Cruelty World!"/> </bean> </beans> 6. Corre la aplicación. El output que debería mostrar la app corriendo es: Hello Cruelty World! Explicación. ClassPathXmlApplicationContext(). Permite cargar la configuración de los beans y eventualidades basadas en la API que se provee, se encarga de la creación e inicialización de todos los objetos. getBean. este método lo utilizamos en el contexto creado. Este permite usar un ID para el bean que retorna un objeto generico que finalmente puede ser convertido a un objeto actual. Una vez tienes este objeto, lo puedes usar para llamar cualquier método de clase. Creación del XML de Configuración de Beans: Por lo general los desarrolladores lo llaman Beans.xml. Es necesario asegurarse que el archivo este disponible en el CLASSPATH y que use el mismo nombre en la aplicación actual cuando se crea el application context como el que se muestra en la clase Main. El Beans.xml es usado para asignar ID's únicas a los diferentes Beans y para controlar la creación de objetos con diferentes valores sin impactar ninguno de los Spring source files (archivos de fuente Spring). Cuando una aplicación Spring carga en memoria, el Framework hace uso del archivo de configuración para crear todos los beans definidos y asignarles un ID único definido en el tag <bean>. Puedes usar un <property> tag para pasar diferentes valores de variables usados en tiempo de creación del objeto. Mas tutoriales como este puedes encontrarlos en mi blog: http://betaroot.blogspot.com/

56
6
C
CentOS 7 y Windows 7 Dual Boot
LinuxporAnónimo4/20/2015

¿Que tal gente? Introducción. Tenía días de no postear, en esta oportunidad les cuento que acabo de hacerme de un pc sencillo pero que esta haciendo las funciones de servidorcito. Se me ocurrió instalarle CentOS 7 y compartire con ustedes las experiencias con el mismo. Comenzamos. Para comenzar tenemos los siguientes requisitos: Tener disco de instalación de Windows 7 Descargar el ISO de CentOS7: Descarga CentOS 7 Sección 1: Preparando el espacio en el disco (Windows 7). (Ver imágenes del proceso seguido al final de esta sección). Instalamos el Windows 7 de la manera tradicional. Una vez instalado Windows 7, dirígete a la utilidad Administrador de Discos dando clic derecho en "Equipo" y seleccionando la opción Administrar: En el administrador de discos selecciona la partición de Windows (la mas grande) clic derecho y selecciona la opción reducir volumen. Se tardara un poco en cargar, cuando cargue sera posible tomar un poco del espacio libre del disco actual y lo utilizaremos para nuestro SO Linux. Seleccionamos una cantidad, recomiendo alrededor de unos 40 Gb para disponer de buen espacio. Una vez has reducido el disco principal, se crea una partición nueva que le denomina espacio no asignado. A partir de este momento habrá que formatearlo para que posteriormente sea utilizado en la instalación de Linux. Para darle formato, usaremos el asistente de Nuevo Volumen simple, dando clic derecho sobre la partición nueva. Darle siguiente en todas las pantallas, hasta llegar a la pantalla que pide el sistema de archivos, el tamaño de la unidad de asiganción y la etiqueta de volumen. En la etiqueta de volumen cambiarlo por Linux o CentOS, algo que les recuerde que esa es la partición que utilizarán. Sección 1: Paso 2 - Selecciona Reducir Volumen Sección 1: Paso 2 - Cargando Sección 1: Paso 2 - Reducir el tamaño del disco Sección 1: Paso 3 - Formateando la partición Sección 2: Instalando Linux en nuestra partición. Una vez tengamos libre nuestra partición para Linux, lo siguiente es instalar el sistema operativo, para ello debemos preparar nuestro CD o nuestra USB con el instalador de CentOS 7. Si lo harán a través de USB les recomiendo algún programa que les permita crear un instalador booteable a partir de una ISO tipo LinuxLive USB Creator. Adicionalmente recuerden configurar en la BIOS que bootee a partir de la USB. Para mi caso yo lo hice con un LiveCD. En el menú seleccionar la opción Instalar CentOS. Cuando inicia el instalador, verificamos las opciones de Instalación, es decir el destino de la instalación. Esto será desde el menú principal de la instalación. Seleccionamos la unidad de disco en donde esta nuestra partición y chequeamos la opción de configurar particionamiento . Vamos a utilizar nuestra partición vacía primero seleccionándola y dándole el símbolo "-" y luego el símbolo "+" Observamos que nuestra partición se encuentra disponible con el Label que le colocamos en Windows al formatear Creamos una partición como /home alli estara nuestor home, el device type debe quedar como estandar y de tipo ext4 Creamos la partición SWAP, a diferencia de las demás con ext4 esta queda SWAP y siempre Tipo de dispositivo estándar La partición mayor, esta en el mount point / con el resto de espacio disponible coloquen un valor mayor para tomar mas capacidad Al final todas las particiones tienen que quedar estándar y ext4 (excepto la SWAP). Continuén la instalación hasta que esta haya concluído, al reiniciar el equipo se podrá apreciar el menú de selección del SO, pero no aparecerá Windows aún. Sección 3: Configurando GRUB 2 En este punto ya tenemos instalado Windows 7 y CentOS, ya sea en modo gráfico o en modo minimal server (este es mi caso). Iniciamos CentOS Nos logueamos con nuestra cuenta Una vez dentro de CentOS, si estamos en modo gráfico abrimos la consola y buscamos el archivo boot/grub2/grub.cfg y con el editor de texto que utilicemos lo abrimos con permiso de root. En mi caso utilice vi: # vi boot/grub2/grub.cfg Agreguen una línea similar a esta: menuentry "Windows 7" { set root='(hd0,1)' chainloader +1 } Verificar en que partición tendrían su Windows, esto es importante! Guardamos los cambios y actualizamos el grub: # grub2-mkconfig -o /boot/grub2/grub.cfg Reiniciamos el equipo, y ahora si aparecerá la opción de Windows 7 Cualquier duda o comentario, pueden consultármela y trataré de apoyarles. El post completo en: http://betaroot.blogspot.com/2015/04/centos-7-y-windows-7-dual-boot.html

15
0
A
Accede a tu CentOS/RHEL 7 desde Escritorio Remoto de Windows
LinuxporAnónimo4/25/2015

Desde http://betaroot.blogspot.com/ Por alguna razón quisiste acceder remotamente a tu server y estabas usando tu pc Windows, es tiempo de que aprendas a configurar tu servidor para que permita sesiones remotas. Requisitos Tener instalado el modo gráfico de tu servidor (Gnome es funcional). Tener configurados los repositorios EPEL y nux. # rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm # rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm Comenzamos Instalamos xrdp desde los repositorios: # yum -y install xrdp tigervnc-server Iniciamos el servicio: # systemctl start xrdp.service Hacemos que el servicio este disponible siempre que inicie el servidor: # systemctl enable xrdp.service Creamos las reglas en el firewall: # firewall-cmd --permanent --zone=public --add-port=3389/tcp # firewall-cmd --reload Debería funcionar, sino funciona revisa la sección de problemas que podrían presentarse. Para iniciar, entra en Windows colocas la ip de tu servidor (tiene que estar en la misma red que el cliente) y debería pedirte las credenciales. Sección de problemas Si estas acá es porque no pudiste accesar desde tu cliente al servidor. La razón por la que no puedes ingresar a tu servidor podría ser SELINUX, revisa el estado: #sestatus Si el estado que te devuelve es diferente a "enabled", entonces detente acá, porque no es problema de SELINUX. Si el estado esta "enabled", y verificando la línea current mode, tiene definido como valor "enforcing" entonces allí tenemos un problema. Para resolverlo te recomiendo el siguiente camino: Usa un editor de texto, puede ser vi. Abre el archivo /ect/selinux/config Una vez has abierto el archivo cambia la línea SELINUX=enforced La línea deberá quedarte así: SELINUX=permissive Reinicia el servidor, e intenta la conexión nuevamente. Si logras conectarte, hasta aquí llega el tutorial. Si no logras conectarte, habría que buscar otras soluciones para tu problema.

0
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.