elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: 1 2 3 [4]
31  Programación / Java / [APORTE by 4ng3r]Java, C y DLL en: 17 Febrero 2010, 18:59 pm
JAVA, DLL y C

Un saludo a todos en la comunidad, ya pude hacer mi programita que tantas canas me saco.... pero en fin


Les recuerdo: Hacer dos programas y se comuniquen por medio de librerías dinamias o DLL. El ejercicio trata de instanciar un arreglo de enteros con un dimensión de 5000 y en cada espacio agregar un numero radom de 0 a 60000  :xD y en su salida imprimir estos numeros en orden ascendente. La cuestion es que el arreglo se debe  instanciar en C o C++ (use C), el arreglo lo recibe un programa en java y este los ordena y después el programa en java envia el arreglo en orden a C y este los imprime. (Facil no???  ='()

Bueno, para empezar con la solución al problema empeze leyendo todo lo referente al JNI pero igual no me daban tantas ideas que digamos... pero en si lo esencial del estudio es que JAVA manejo un su JDK una carpeta ubicada en  %JAVAROOT%/BIN un programa  llamado javah.exe. Este programa apartir de un .class crear un .h para manejarlo desde C.

Estos son los pasos para la solución al problema. jejee pero solo voy hacer el hola mundo y de hay en adelante es googlear y leer este manual y podran sacar el ejercicio anterior:

  • 1. Intalar el JDK y un compilador de C o C++. Utilice el Visual C++ de .NET y su compilador es CL.exe y el de java es JAVAC.exe JAVA SE JDK  y para el Visual C++ pueden trabajar la version 6.0, sino quieren trabajar un .NET .... Les recomiendo este  torrent

  • 2. Un Pequeña definición !!!
    Bueno antes empezar con la configurarion voy hacer un definicion de ¿QUE ES JNI?
    Java Native Interface (JNI) es la mecánica propuesta por Java para invocar funciones implementadas en lenguaje C desde programas Java.


  • 3.
    Configuración de las variables de Entorno:

    Debemos asegurarnos de tener bien configurado el entorno de compilación de C y de JAVA, debido a que lo voy a explicar todo lo hice bajo consola.

    Variable JAVAHOME y VCHOME:

    - Incio
              >MiPc (click Derecho)
                                                > Propiedades
                                                                      >Opciones Avanzadas
                                                                                                               > Variables de Entorno (Click)

    Nos debe generar un ventanita de este tipo:

    Cuando click podemos ver la diferentes variables que maneja sistema:


    Fijemonos en variables del sistema (en el ciculo rojo) y en la variable PATH. Si se dan cuenta tiene uno parámetro importarte y es el C:\Windows\System32 y es desde allí que nosotros tenemos acceso a cualquier programa que contiene este carpeta. Como el TELNET, PING, MsPaint... entre otros y se considera una variable importante dentro del entorno Windows.

    Nos paramos encima de PATH y le demos EDITAR vamos hasta el final de la linea (SIN BORRAR NADA) y agregan la dirección en donde se encuentra el Bin del JDK y del Visual C++

    Por Ejemplo: En mi máquina el JDK se encuentra en C:\Archivos de Programa\Java\JDK1.6.0_13\Bin y en vidual Studio 2008 esta en C:\Archivos de Programa\Microsoft Visual Studio 8\VC\bin

    Copiamos y pegamos cada una de las direcciones en los parámetros del PATH, separados por PUNTO Y COMA (IMPORTANTE !!!! ) y luego ACEPTAR


    Para consultar si quedo bien nuestra configuración debemos ir a la consola (Win+R> CMD) y escribimos javac  y si salen los parámetros de java es por que esta bien configurado


    También lo hacemos para el Visual C++ con el Comando cl y si nos salen los parametros del Visual C++ estara bien configurado y Listo para Trabajar  :xD


  • 4. Aseguradonos de que el entorno esta bien configurado debemos crear dos variables mas que son el INCLUDE (donde almacenamos las librerías a usar como el JNI.h) y el LIB para las Librerías del Visual C++


    Para la variable INCLUDE que no esta definida, demos crearla y pasarle cada uno de los parámetros. En las misma Ventana de las variables de entrono y ubicándonos en Variables del Sistema damos Click en NUEVA nos sale un ventanita y le ingresamos con el nombre de INCLUDE y en los parametros o valor de la variable  agregamos las direcciones donde se alojan los INCLUDES  de cada Compilador.

    Para JAVA se encuentra (en mi maquina) en : C:\Archivos de Programa\Java\jdk1.6.0_13\include (podemos ver el jni.h) y segudi de un PUNTO y COMO también agregamos C:\Archivos de Programa\Java\jdk1.6.0_13\include\Win32

    Para el VISUAL C++ (en mi maquina y utilizando Visual Studio .NET) en : C:\Archivos de Programa\Microsoft Visual Studio 8\VC\include

    NOTA: Les recuerdo cada parametro va separado de un PUNTO Y COMO ";"

    Seguimos con la variable LIB, aqui especificamos en donde se encutran las librerias de Visual C++

    Esta variable no esta definida y como la anterior hay que crearla, se crea con el nombre de LIB y como único parámetro le pasamos esta direccion (en mi maquina) C:\Archivos de Programa\Microsoft Visual Studio 8\VC\lib

    Para verificar si quedo bien configurada entramos a consola y escribimos el comando LIB, pero si escribimos INCLUDE no nos aparece nada, pero sabemos que la variable existe.



    • 5. Ahora Si a Programar !!!! :xD

    Listo después de este preliminar (que no se si es ecencial, no quiero ser tan básico en mis POST) empezaremos en primera instancia creando nuestro programa en java.

    Antes de todo, creemos una carpeta en C:\ o en donde quieran y guarden cada uno de los archivos generados en el proceso en esta carpeta!!!


    Este es el CODE y con sus anotaciones:

Código
  1. public class HolaMundoJNI{
  2.  
  3. public native void muestraHolaMundo(); //invocamos el Metodo NATIVO
  4.  
  5. public static void main (String arg []){
  6.  
  7. HolaMundoJNI  test = new HolaMundoJNI ();
  8. test.muestraHolaMundo();
  9. }
  10.  
  11. static {
  12. System.loadLibrary("libreria"); // Cargamos la Libreria DLL generada mas Adelante ;)
  13. }
  14.  
  15.  
  16. }
    Guardamos el archivo como HolaMundoJNI.java y pasamos a la consola del sistema ingresamos a la carpeta creada anteriormente (con cd) y llamamos al compilador de JAVA (javac)


NOTA: Si no sale algun error, el compilador señalara la linea el comando que esta mal dentro de codigo

Después de haberlo compilado, pasamos a crear el archivo de cabecera o mas conocido como .h. Para esto debemos ejecutar una herramienta que lleva el JDK que se llama javah -jni y se aplica sobre el .class creado anteriormente.


Si observamos la carpeta donde estamos generando cada uno de los archivos podemos contar; un .class y un .h con el mismo nombre del .java, en mi caso HolaMundoJNI.java  =O

ESTE ES EL ARCHIVO HOLAMUNDOJNI.H

[/list]
Código
  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class HolaMundoJNI */
  4.  
  5. #ifndef _Included_HolaMundoJNI
  6. #define _Included_HolaMundoJNI
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /*
  11.  * Class:     HolaMundoJNI
  12.  * Method:    muestraHolaMundo
  13.  * Signature: ()V
  14.  */
  15. JNIEXPORT void JNICALL Java_HolaMundoJNI_muestraHolaMundo
  16.  (JNIEnv *, jobject);
  17.  
  18. #ifdef __cplusplus
  19. }
  20. #endif
  21. #endif
  22.  



[/list]

  • 6. Programando en C:

    Después de haber generado el .h, procedemos a crear el CODE en C, este es el código y sus anotaciones.

    HolaMundoJNIimpl.c

    Código
    1. #include <jni.h>
    2. #include "HolaMundoJNI.h"
    3. #include <stdio.h>
    4.  
    5. JNIEXPORT void JNICALL Java_HolaMundoJNI_muestraHolaMundo (JNIEnv *evn, jobject obj){
    6.  
    7. printf("Hola Mundo!!!");
    8. return;
    9. }
      Podemos observar que declaramos un función
    JNIEXPORT que no retorna nada (void) y como parámetros tiene un evento (*env) y un Object (obj) y es la misma función que esta llamando el .h... y en esta función escribimos todo el codigo que queramos  :xD

    Después pasamos a compilar el código con el VISUAL C++  


    Después de haber ejecutado el comando, nos aparecerá unos errores de compilación, pero en si el fin de haber ejecutado este comando es generar los archivos para pasar a crear el DLL  (el archivo .exp .obj y .lib)

    Para crear la librería utilizamos el comando cl con el modificador -LD



    Ya teniendo la libreria .dll ya es solamente es ejecutar el programa en java  y LISTO!!! con el comando java

    y el nombre del .class





LINK



32  Programación / Bases de Datos / Arquitectura de un SDBG o DBMS en: 17 Febrero 2010, 17:23 pm
Hola hace rato compre un librillo que se llama Introducción a las Bases de Datos Relacionales es un texto bastante superficial por lo que vi, no profundiza mucho pero da los conceptos concretos y muy bien definidos.

Muchos se preguntaran como es el funcionamiento de manera lógica de un SDGB (Sistema de Gestion de Bases de Datos) o su acrónimo en ingles DBMS, la arquitectura de los sistemas de base de datos no se ha estandarizado al mismo grado que la de un compilador, pero hay ciertos módulos que de un modo u otro forma parte de la mayoría de los sistemas de gestión, están organizadas de la siguiente manera:

  • Gestor de Archivos: Este modulo que interactúa directamente con el sistema de archivos provisto por el sistema operativo. Tiene a su cargo el manejo de las estructuras físicas de almacenamiento, administración de espacio en memoria secundaria (como otros HD, cd o pendrive) y métodos eficientes de acceso y búsqueda.
  • Gestor de Datos:Ubicado a un nivel un poco mas alto de abstracción que el anterior, este modulo provee las funciones fundamentales que sirven de interfaz entre los datos y el programa de aplicación o consultas de usuario. Por ejemplo funciones típicas provistas a este nivel son la de encontrar todos los registros, o verificar que un conjunto de datos satisfaga las restricciones de la semántica, es decir de alguna consulta sql.
  • Procesador de Consultas: Este nivel traduce las consultas expresadas en un lenguaje de consulta de alto nivel (como sql) a una sucesión de pedidos básicos al nivel del gestor de bases de datos que pueda interpretar.
  • Controlador del Paralelismo: Cuando el sgdb soporta múltiples procesos y posiblemente modificando una misma base de datos, este controlador nos garantiza que estos procesos no interfieran unos con otros.
  • Sistemas de Recuperación: Junto con el controlador del paralelismo este modulo implementa la función del manejo de las transacciones. El sistema de recuperación debe mantener suficiente información acerca de progreso de los distintos movimientos que sufre la base de datos para garantizar un pronta restauración y casos de falla o perdida parcial o total de la información.

Anexo:

Estadísticas de mercado en el uso de SDBG


FUENTE
33  Programación / Bases de Datos / Modelo Entidad Relacion en: 17 Febrero 2010, 17:22 pm
Modelo Entidad Relacion

El concepto de este modelo son de alto nivel semántico, cercanos al lenguaje usado por el usuario y no al del sistema. Este modelo fue propuesto Peter Chen en 1976, no como un modelo de datos a ser implementado en al practica por un SGDB o DBMS cino como herramienta conceptual para el diseño de una base de datos.

Entidades y Relaciones

Un modelo ER (entidad relación) es una descripción del mundo real que el diseñador intenta modelar según el el sistema de información. En este modelo, las estructura se describe por un conjunto de entidades u objetos de interés relacionados entre si. Por ejemplo, las siguientes entidades podrían se de interés en alguna aplicación:

  • Clientes
  • Cuentas Corrientes
  • Alumnos
  • Canciones de Rock
  • Interprete

Una instancia de una entidad es un individuo particular que pertenece a la case definida por esa entidad, por ejemplo:

  • El cliente Andres Trujillo
  • La cuenta Correinte numero 06-5467
  • La Alumna Beatriz Guido
  • Canciones “Never Lose”
  • Interprete Above and Beyond

Un relación es l conexión que vincula a dos o mas entidades. Por ejemplo si a ciertos Alumnos les gusta Canciones de Rock y si ese dato es importante par el diseño e importante saberlo, podemos definir una relación que asocia cada Alumno con 0,1 o mas Canciones de Rock y cada Canción de Rock con 0,1 o mas Alumnos. Esto se denomina un relación binaria porque asocia dos entidades.

Funcionalidad de las Relaciones


Para citar las funcionalidad de las relaciones dentro del modelo ER. debo decir que es un poco abstracto y a primera vista no lo puedan entender pero con los ejemplos se puede llegar a un concepto mas formalizado.

Una relación C entro dos entidades E1 y E2 es funcional, si asocia cada de E1 con a lo sumo (es decir 1:1) una instancia de E2. Por ejemplo si introducimos una relación llamada nació-en donde asocia las entidades Alumno y Ciudad, podemos decir que la relación es funcional ya que cada alumno nació a lo sumo en una ciudad, pero si decimos que un alumno A pudo haber nacido en otra ciudad que el Alumno B, entonces una ciudad puede tener de uno a mucho Alumnos y se convierte en un relación no funcioal. La funcionalidad de una relacion depende del lado del que se mire.

Diagramas de ER

Bueno el diagrama de un modelo ER es bastante sencilla, cada entidad se representa por un rectángulo, los atributos por elipses  y cada relación por medio de un rombo.

Analicemos el siguiente diagrama:

- Entidades: Tenemos dos entidades Alumno y Clase
- Atributos: La entidad Alumno tiene dos atributos DNI (identificador) y NOMBRE, la entidad Clase tiene también dos clases N°CLASE y NOMBRE_CLASE
- Relaciones: La relación PERTENECE describe que un alumno puede pertenece a mas de un clase  y que una clase puede tener mas de un alumno por es la relación es de mucho a mucho (N:M)


FUENTE
34  Programación / PHP / [APORTE] Select Totalmente Dinamico en: 16 Febrero 2010, 22:08 pm
Les dejo el código de un select totalmente dinámico y con persistencia... salu2

ajax.sql

Código
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.1.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Servidor: localhost
  6. -- Tiempo de generación: 11-01-2010 a las 19:38:51
  7. -- Versión del servidor: 5.1.38
  8. -- Versión de PHP: 5.2.8
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12. --
  13. -- Base de datos: `ajax`
  14. --
  15.  
  16. -- --------------------------------------------------------
  17.  
  18. --
  19. -- Estructura de tabla para la tabla `ciudades`
  20. --
  21.  
  22. CREATE TABLE IF NOT EXISTS `ciudades` (
  23.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  24.  `id_mun` INT(11) NOT NULL,
  25.  `ciu_nombre` VARCHAR(20) NOT NULL,
  26.  PRIMARY KEY (`id`)
  27. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
  28.  
  29. --
  30. -- Volcar la base de datos para la tabla `ciudades`
  31. --
  32.  
  33. INSERT INTO `ciudades` (`id`, `id_mun`, `ciu_nombre`) VALUES
  34. (1, 1, 'Bogota'),
  35. (2, 1, 'Girardot'),
  36. (3, 1, 'Fusafasuga'),
  37. (4, 1, 'Sopo'),
  38. (5, 1, 'Chia'),
  39. (6, 1, 'Tocaima'),
  40. (7, 2, 'Medellin'),
  41. (8, 2, 'Envigado'),
  42. (9, 2, 'Itagui'),
  43. (10, 2, 'Jardin'),
  44. (11, 3, 'Neiva'),
  45. (12, 3, 'Pitalito'),
  46. (13, 3, 'Rivera'),
  47. (14, 3, 'Timana');
  48.  
  49. -- --------------------------------------------------------
  50.  
  51. --
  52. -- Estructura de tabla para la tabla `municipios`
  53. --
  54.  
  55. CREATE TABLE IF NOT EXISTS `municipios` (
  56.  `mun_nombre` VARCHAR(20) NOT NULL,
  57.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  58.  PRIMARY KEY (`id`)
  59. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  60.  
  61. --
  62. -- Volcar la base de datos para la tabla `municipios`
  63. --
  64.  
  65. INSERT INTO `municipios` (`mun_nombre`, `id`) VALUES
  66. ('Cundinamarca', 1),
  67. ('Antioquia', 2),
  68. ('Huila', 3);
  69.  

conexion.php

Código
  1. <?php
  2. #  AUTHOR: 4ng3r
  3. #  Aplicacion: Select Totalmente Dinamico    
  4. #  URL: http://angercode.wordpress.com
  5. #  URL: http://foro.project-ric.org
  6. #  Conexion a la Base de datos
  7.  
  8. function conectar(){
  9.    if(mysql_connect("127.0.0.1","root","")){
  10.        return mysql_select_db("ajax");    
  11.    }else{
  12.        return FALSE;    
  13.    }
  14. }
  15.  
  16. function desconectar(){
  17.    mysql_close();
  18. }
  19.  
  20. function consulta_Mun($val){
  21.    $query = sprintf("SELECT %s FROM municipios",mysql_real_escape_string($val));
  22.    $sql=mysql_query($query);
  23.    $i=0;
  24.    $valores = Array();
  25.    while ($row = mysql_fetch_assoc($sql)){
  26.        $valores[$i]=$row["$val"];
  27.        $i++;
  28.    }
  29.    return $valores;
  30. }
  31.  
  32. ?>
  33.  

interfaz.php

Código
  1. <?php
  2. #  AUTHOR: 4ng3r
  3. #  Aplicacion: Select Totalmente Dinamico    
  4. #  URL: http://angercode.wordpress.com
  5. #  URL: http://foro.project-ric.org
  6. #  Interfaz
  7.  
  8. include_once("conexion.php");
  9. if(conectar()){
  10.        function cargarMunicipios(){
  11.        $nom_M = consulta_Mun("mun_nombre");
  12.        $id_M = consulta_Mun("id");
  13.        echo "<select name='municipios' id ='municipios' onChange='cargador(this.id)'>";
  14.        echo "<option value='0'>Elija un Municipio</option>";
  15.        for($i=0;$i<sizeof($nom_M);$i++){
  16.            echo "<option value=".$id_M[$i].">".$nom_M[$i]."</option>";    
  17.        }
  18.        echo "</select>";
  19.    }
  20.  
  21. ?>
  22.  
  23. <html>
  24.  
  25.    <head>
  26.        <script src="script.js"></script>
  27.    </head>
  28.  
  29.    <body>
  30.        <div id="independiente">
  31.         <?=cargarMunicipios()?>
  32.        </div>
  33.        <br>
  34.        <div id="dependiente">
  35.            <select id="ciudades" name="ciudades" disabled="disable">
  36.                <option value="0">Elija una Ciudad</option>
  37.            </select>
  38.        </div>
  39.        <br><br>
  40.        <div id="cargando"></div>                  
  41.            <?php    
  42. } // END IF
  43.            ?>
  44.  
  45.  
  46.        </select>    
  47.    </body>
  48.  
  49. </html>
  50.  

script.js

Código
  1. //  AUTHOR: 4ng3r
  2. //     Aplicacion: Select Totalmente Dinamico
  3. //  URL: http://angercode.wordpress.com
  4. //  URL: http://foro.project-ric.org
  5. //  Cargador de Contenido
  6.  
  7. function contenidoXML(){
  8.    return XMLHttpRequest();
  9. }
  10.  
  11. // Declaro los compoenentes selects que va a utilizar mi aplicacion
  12. // y debe coconrdar con el ID que le pusimos en el HTML
  13.  
  14. var selectsHTML = new Array();
  15. selectsHTML[0]="municipios";
  16. selectsHTML[1]="ciudades";
  17.  
  18. function cargador(idSelect){
  19.    var selectIndependiente=document.getElementById(idSelect);
  20.    // Seleccionamos el Select que depende al select que le corresponda el id=idSelect
  21.    var selectDependiente= buscarSelect(selectsHTML,idSelect)+1;
  22.    var option = selectIndependiente.options[selectIndependiente.selectedIndex].value;
  23.    // Validamos si el usuario elijio la primero opcion, es decir, Elija un Municipio
  24.    // y envio un advertencia
  25.    if(option==0){
  26.        // obtengo el Elemento
  27.        selectD = document.getElementById(selectsHTML[selectDependiente]);
  28.        // Borro los elementos que hay en el
  29.        selectD.length=0;
  30.  
  31.        var mensaje = document.createElement("option");
  32.        mensaje.value=0;
  33.        mensaje.innerHTML="Debe elegir un Municipio !!!";
  34.        // Incrusto el nuevo nodo
  35.        selectD.appendChild(mensaje)
  36.        selectD.disabled=true;
  37.    }else{
  38.        // Obtenemos el id del select que debemos cargar
  39.        var idSelecteD = selectsHTML[selectDependiente];
  40.        var selectD = document.getElementById(idSelecteD);
  41.        var ajax = contenidoXML();
  42.        ajax.open("GET","respuesta.php?option="+option,true);
  43.        ajax.onreadystatechange=function(){
  44.            if (ajax.readyState==1){
  45.                document.getElementById("cargando").innerHTML="<img src='cargando.gif'>"
  46.            }
  47.  
  48.            if(ajax.readyState==4){
  49.                selectD.parentNode.innerHTML=ajax.responseText;
  50.                document.getElementById("cargando").innerHTML="Consulta Satisfactoria"
  51.            }
  52.        }
  53.        ajax.send(null);
  54.    }
  55. }
  56.  
  57. // Funcion para encontrar si el selec existe
  58. function buscarSelect(arreglo , id){
  59.    var x=0;
  60.    while (arreglo[x]){
  61.        if(arreglo[x]==id){
  62.            return x;
  63.        }
  64.        x++;
  65.    }
  66.    return null;
  67. }
  68.  

Respuesta.php

Código
  1. <?php
  2. #  AUTHOR: 4ng3r
  3. #  Aplicacion: Select Totalmente Dinamico
  4. #  URL: http://angercode.wordpress.com
  5. #  URL: http://foro.project-ric.org
  6. #  Respuesta
  7.  
  8. include('conexion.php');
  9. conectar();
  10. $option = $_GET['option'];
  11. $query = "SELECT * FROM ciudades WHERE id_mun=".$option;
  12. $sql=mysql_query($query);
  13. echo "<select name = 'ciudades' id='ciudades'>";
  14. echo "<option>Elija un Ciudad</option>";
  15. while($row = mysql_fetch_assoc($sql)){
  16.    echo "<option value='".$row['id']."'>".$row['ciu_nombre']."</option>";
  17. }
  18. echo "</select>";
  19. ?>
  20.  

DESCARGAR

RESULTADO
Páginas: 1 2 3 [4]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines