Facebook Fanpage


domingo, 30 de septiembre de 2012

Aprendiendo a Utilizar JComboBox


JComboBox, es un componente de java q nos sirve para controlar la selecion del usuario final a un determinado conjunto de tipos, algo asi es la idea, ademas creoq eso la lo sabran…jeje
El ejericio q les mostrare, es una aplicacion q tiene 2 JComboBox, el cual el primer combo controla el contenido del segundo combo, es decir, si selecionas un elemento del primero, el segundo combo, mostrara el contenido respecto a dicha selecion.
Una ves entendido, la logica de la aplicacion, lo implementamos, LA VERDAD ES REALMENTE SENCILLO. Para este caso, tendremos 2(dos) clases WindowDemoCombo y ControlDemoCombo.
La primera clase(WindowDemoCombo), es la ventana(JFrame, JLabel, JComboBox… en fin todos los componentes q actuan en la ventana) q visualiza el usuario.
La segunda clase(ControlDemoCombo), es la clase q controla los eventos, en este caso la accion de selecion en el primer JComboBox.
WindowDemoCombo; Creamos los componentes swing, y CREAMOS un objeto de la clase q controlada sus eventos, en este caso;
ControlDemoCombo controlDemoCombo = new ControlDemoCombo(this);
Veamos q al momento de crearlo estamos pasando “this”, esto quiere decir q al momento de crear la clase q lo controlara, le pasaremos como argumento toda la ventana… es obvia la idea, le pasamos toda la ventana, para q asi pueda acceder a ella.
Aqui el fuente
/*Demostracion Aprendiendo con JComboBox por inforux.wordpress.com */
import javax.swing.*;
public class WindowDemoCombo extends javax.swing.JFrame {

    /** Creamos el constructor de la misma */
    public WindowDemoCombo() {
        initComponents();}

    private void initComponents() {
        jPanel1 = new JPanel();
        jLabel1 = new JLabel();
          jLabel2 = new JLabel();
        jLabel3 = new JLabel();
        jComboBox1 = new JComboBox(pais);//creamos el primer combo, y le pasamos un array de cadenas
        jComboBox1.setSelectedIndex(0);//por defecto quiero visualizar el primer item
        jComboBox2 = new JComboBox();//creamo el segundo combo, vacio
        jComboBox2.setEnabled(false);////por defecto q aparesca desabilidado

        setResizable(false);
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Aprendiendo con JComboBox"));
        jPanel1.setLayout(null);
        jLabel1.setText("Pais");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(30, 30, 50, 20);
        jPanel1.add(jComboBox1);
        jComboBox1.setBounds(100, 30, 150, 24);
        jPanel1.add(jComboBox2);
        jComboBox2.setBounds(100, 70, 150, 24);
        jLabel2.setText("Region");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(30, 70, 60, 20);
        getContentPane().add(jPanel1);
        jPanel1.setBounds(10, 50, 370, 110);
        jLabel3.setText("DEMO POR INFORUX");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(120, 20, 170, 20);
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-412)/2, (screenSize.height-213)/2, 412, 213);

        /*Creamos el objeto controlador, para manejar los eventos*/
        ControlDemoCombo controlDemoCombo = new ControlDemoCombo(this);//le pasamos como argumento esta misma ventana
        jComboBox1.addActionListener(controlDemoCombo);//agregamos escuchas
    }
    public static void main(String args[]) {
                new WindowDemoCombo().setVisible(true);}

    // Desclaramos las variables autilizar
    String [] regionArgentina={"Buenos Aires","Cordova","Santa Cruz"};//array del segundo combo
    String [] regionColombia={"Bogota","Cartagena","Cali"};//array del seguno combo
    String [] regionPeru={"Arequipa","Lima","Piura"};//array del segundo combo
    String [] pais={"Selecione Pais","Argentina","Colombia","Peru"};//array del primer combo
    public JComboBox jComboBox1;
    public JComboBox jComboBox2;
    public JLabel jLabel1;
    private JLabel jLabel2;
    private JLabel jLabel3;
    private JPanel jPanel1;
}
ControlDemoCombo: Es una clase controladora de todas las acciones q realize el usuario en la
ventana(WindoDemoCombo). en este caso, la clase implement de ActionListener, y declara una variable del tipo
WindowDemoCombo, este nos servira para recibir el valor “this”, enviado anteriormente.
    WindowDemoCombo frameDemoCombo;
La idea es preguntar si la accion viene del primer combo
    if (evento.getSource()==frameDemoCombo.jComboBox1)
luego, preguntar cual de los elementos ha hecho click, esto lo podemos hacer con el metodo getSelectedIndex(), este nos retorna el numero del indice seleciono.
     if (frameDemoCombo.jComboBox1.getSelectedIndex()==0)
despues de saber, cual esta selecionado solo nos queda llenar el segundo combo, no sin antes elimnar, todos los elementos posibles.
   frameDemoCombo.jComboBox2.removeAllItems();
   frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionArgentina[i]);
Aqui elfuente:
import java.awt.event.*;
public class ControlDemoCombo implements ActionListener{
    WindowDemoCombo frameDemoCombo;
    public ControlDemoCombo(WindowDemoCombo objeto){
        frameDemoCombo=objeto;}

    public void actionPerformed(ActionEvent evento)
    {
            if (evento.getSource()==frameDemoCombo.jComboBox1)//pregunta si el evento viene del primer combo
            {/*pregunta si viene del primer elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==0){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    frameDemoCombo.jComboBox2.setEnabled(false);}
            /*pregunta si viene del segundo elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==1){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    for (int i=0; i<frameDemoCombo.regionArgentina.length;i++)
                    frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionArgentina[i]);
                    frameDemoCombo.jComboBox2.setEnabled(true);}
        /*pregunta si viene del tercer elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==2){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    for (int i=0; i<frameDemoCombo.regionColombia.length;i++)
                    frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionColombia[i]);
                    frameDemoCombo.jComboBox2.setEnabled(true);}
        /*pregunta si viene del cuarto elemnto*/
                if (frameDemoCombo.jComboBox1.getSelectedIndex()==3){
                    frameDemoCombo.jComboBox2.removeAllItems();
                    for (int i=0; i<frameDemoCombo.regionPeru.length;i++)
                    frameDemoCombo.jComboBox2.addItem(frameDemoCombo.regionPeru[i]);
                    frameDemoCombo.jComboBox2.setEnabled(true);}
            }
    }
}
Y listo ahora , compilar (javac *.java) y Listo, al ejecutar (java WindowDemoCombo), debe aparecer esta pantalla:

Selecionamos y se activara el segundo combo, con sus respectivos valores del primero.


Funciona!, Espero les sea de utilidad.
Saludos.

Guardar imagen en MySQL con netbeans

Cuando se tienen imagenes (fotografías, postales, wallpapers, etc) que se quieren guardar en una base de datos MySQL utilizando java, estas imágenes deben ser convertidas a cadenas de Bytes para que pueden ser introducidas en la base de datos, java cuenta con el objeto BLOB para realizar esto.


Pero mejor vamos a lo que interesa, que es el COMO.

nombre archivo: bart.jpg


Paso 1: Para este ejemplo haremos uso de una tabla "fotos" que cuenta con tres atributos entre ellos "foto" de tipo BLOB, así que debes crear esta tabla.




Paso 2: Para conectar nuestra aplicación con la base de datos nos ayudamos de nuestra clase conectate.java creada en un post anterior.
Paso 3: Una ves que tenemos la tabla creada y la clase conectate lista, crearemos un nuevo proyecto en Netbeans llamada "imagen", a este proyecto añadimos la clase conectate, java y creamos una nueva clase "fotoclass.java" esta sera la encargada de realizar las funciones de guardado. debes tener algo como esto hasta ahora.




Paso 4: Nuestra clase "fotoclass.java", con el metodo guardarfoto(), que recibe como parámetros  el nombre de la foto y la ruta física de la imagen en nuestra pc. Esta función realiza una consulta sql e introduce la foto convertida previamente en bytes en la base de datos.


package imagen;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 * @web http://jc-mouse.blogspot.com
 * @author mouse
 */
public class fotoclass {
    conectate con;
  public fotoclass (){
    con = new conectate();
  } 
      
public void guardarfoto(String nombre, String foto) {
        {
            FileInputStream fis = null;
            try {
                File file = new File(foto);
                fis = new FileInputStream(file);

                PreparedStatement pstm = con.getConnection().prepareStatement("insert into " + 
                        " fotos(nombre, foto) " + " values(?,?)");
                pstm.setString(1, nombre);                
                pstm.setBinaryStream(2, fis,(int) file.length());
                pstm.execute();
                pstm.close();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(fotoclass.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException e) {
                System.out.println(e);
            } finally {
                try {
                    fis.close();
                } catch (IOException ex) {
                    Logger.getLogger(fotoclass.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
   }
}


Paso 5: la clase Main.


package imagen;

/**
 * @web http://jc-mouse.blogspot.com
 * @author mouse
 */
public class Main {
    
    public static void main(String[] args) {        
        fotoclass f = new fotoclass();        
        f.guardarfoto("Bart Simpsons", "e:/bart.jpg");
    }
    
}


Creamos nuestro objeto, hacemos uso de la función guardarfoto(), especificando el nombre de la imagen y la ruta física del archivo. OJO con la extensión del archivo. ejecuta el programa y la foto sera convertida e introducida a la base de datos.


Aprendiendo con JFileChooser - Parte 1


JFileChooser es un componente JAVA, que nos permite selecionar y/o grabar cualquier archivo basicamente dentro de nuestro ordenador, en este oportunidad fijaremos la antencion en la funcion de “Seleccion o Abrir”

El ejemplo demostracion trata sobre: “Selecionar un archivo imagen (.jpg, .gif, .png) y luego tendremos q visualizar dicha imagen” aqui la ventana ilustrativa.

Lo Primero q tendremos q hacer es dibujar nuestra interface grafica de usuario(GUI) en este caso “WindowDemoFile”, lo unico nuevo en esta clase es el “JFileChooser”
public JFileChooser jfcExaminarEntrada;
jfcExaminarEntrada = new JFileChooser();
Esta demas decir q la imagen se visualizara dentro de un “JDesktopPane”, aqui en fuente:
import  javax.swing.*;
public class WindowDemoFile extends JFrame {

    public WindowDemoFile() {
        initComponents(); }

   private void initComponents() {
  setTitle("DEMO POR INFORUX");
  setResizable(false);
  jfcExaminarEntrada = new JFileChooser();
        jPanel1 = new  JPanel();
        jtfRutaEntrada = new  JTextField();
        jbExaminar = new  JButton();
        jbLoad = new  JButton();
        jPanel3 = new  JPanel();
        jDesktopPane1 = new  JDesktopPane();

        setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        jPanel1.setBorder( BorderFactory.createTitledBorder("Ubica el Archivo Imagen"));
        jPanel1.setLayout(null);
        jPanel1.add(jtfRutaEntrada);
        jtfRutaEntrada.setBounds(20, 30, 350, 19);

        jbExaminar.setText("...");
        jPanel1.add(jbExaminar);
        jbExaminar.setBounds(400, 30, 50, 25);

        jbLoad.setText("load");
        jPanel1.add(jbLoad);
        jbLoad.setBounds(460, 30, 70, 25);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(30, 30, 550, 70);

        jPanel3.setBorder( BorderFactory.createTitledBorder("Imagen Cargada"));
        jPanel3.setLayout(null);
        jPanel3.add(jDesktopPane1);
        jDesktopPane1.setBounds(20, 30, 530, 340);

        getContentPane().add(jPanel3);
        jPanel3.setBounds(20, 110, 570, 390);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-618)/2, (screenSize.height-542)/2, 618, 542);

  /*declaramos una referencia a nuestra clase control de eventos*/
  ControlaEventos controlaEventos =new ControlaEventos (this);
  jbExaminar.addActionListener(controlaEventos);
  jbLoad.addActionListener(controlaEventos);
    }

    public static void main(String args[]) {
              new WindowDemoFile().setVisible(true); }

 public JFileChooser jfcExaminarEntrada;
    public JButton jbExaminar;
    public JButton jbLoad;
    public JDesktopPane jDesktopPane1;
    public JPanel jPanel1;
    public JPanel jPanel3;
    public JTextField jtfRutaEntrada;
}
La segunda clase es de nombre “ControlaEventos”, su mismo nombre lo dice, controla todos los eventos producidos por el usuario. solo controlaremos los 2 botones con nombres q muestran “…” y “load”.
La novedad de esto, es q al producirse el evento en el boton q llama al “JFileChoose”. este mostrara un dialogo y dentro de el, estara el componente. Para decirle cual de lo 2 tipos (open y/o save), utilizamos los metodos showOpenDialog o showSaveDialog, segun nuestras necesidades.
int result = d.showOpenDialog(ventana para seleccionar un archivo);
 int result =d.showSaveDialog(ventana para guardar un archivo);
donde “d” es el frame, internalFrame, mejro dicho es la ventana donde se sobrepondra, ademas esta llamada no entrega nada hasta que el usuario ha aceptado un archivo o cancelado la entrada de ldialogo. El valor de retorno es:
JFileChooser.APROVE_OPTION (si haces click en entrar o gravar)
JFileChooser.CANCEL_OPTION. ( si hay evento en el boton cancelar del JFileChooser.)
Aqui el fuente:
import java.awt.event.*;
import java.io.File;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class ControlaEventos implements ActionListener{
 WindowDemoFile ventana;
 File fileImagen;
 public ControlaEventos(WindowDemoFile objeto){
  ventana = objeto;
 }
 public void actionPerformed(ActionEvent evento)
    {
  if (evento.getSource()==ventana.jbExaminar){//si hay evento en el boton examinar
   int returnVal = ventana.jfcExaminarEntrada.showOpenDialog(ventana);//mostramos el jFileChooser
    if (returnVal == ventana.jfcExaminarEntrada.APPROVE_OPTION) {//nos aseguramos q haya selecionado algun archivo
              fileImagen = ventana.jfcExaminarEntrada.getSelectedFile();//obtenemos el archivo selecionado
    ventana.jtfRutaEntrada.setText(fileImagen.toString()); }}//mostramos la ruta del archivo en la caja de texto

  if (evento.getSource()==ventana.jbLoad){//si hay evento en el boton load
    if ( fileImagen != null) {
              cargarImagen(ventana.jDesktopPane1,fileImagen);}}
 }

 /*este metodo recibe el jdeskopPane y el archivo imagen*/
 public  void cargarImagen(javax.swing.JDesktopPane jDeskp,File fileImagen)
 {
        try{
   BufferedImage image = ImageIO.read(fileImagen);
           jDeskp.setBorder(new PintaImagen(image)); }
        catch (Exception e){   System.out.println("No cargo imagen, sorry");   }
    }
}
La ultima clase, es la misma a la entrada anterior, ahy se explica la clase “PintaImagen”
de todas formas aqui el fuente:
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import javax.swing.border.Border;

public class PintaImagen implements Border{

 private   BufferedImage image ;

 public PintaImagen(BufferedImage image ) {
  this.image=image;}

 public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
 int x0 = x+ (width-image.getWidth())/2;
 int y0 = y+ (height-image.getHeight())/2;
 g.drawImage(image,x0,y0,null); }

    public Insets getBorderInsets(Component c) {
 return new Insets(0,0,0,0);}

    public boolean isBorderOpaque() {
 return true; }
}
Atravez de esta clase convertirlos el “File” a una imagen para pintarse en un JDesktopPane.
Aqui el pantallazo

Como ven. no es complicado mostrar un jFileChooser, solo una simple linea lo haces
Saludos!

sábado, 29 de septiembre de 2012

Activar Diseñador PhpMyAdmin

Una vez vi que un amigo le habia activado a phpmyadmin una pestaña con la que podía ver el módelo lógico sencillo o un MER de cualquer base de datos que estuvera trabajando en ese momento. De un tiempo para acá quería hacer lo mismo en mi PC y apezar que no tenia mayor pista que el recuerdo de como era y la fé que si se podía me di a buscar y buscar y seguí buscando hasta que encontré como ahora lo colocó aquí para tenerlo como referencia. Para empezar se supone que tienen instalado phpmyadmin sino pueden bajarlo de la pagina oficial. Ahora hay que ir al archivo config.inc.php y cambiar esto:


  • /* Parámetro Por Defecto */
  • $cfg['Servers'][$i]['pmadb'] = '';
  • $cfg['Servers'][$i]['bookmarktable'] = '';
  • $cfg['Servers'][$i]['relation'] = '';
  • $cfg['Servers'][$i]['table_info'] = '';
  • $cfg['Servers'][$i]['table_coords'] = '';
  • $cfg['Servers'][$i]['pdf_pages'] = '';
  • $cfg['Servers'][$i]['column_info'] = '';
  • $cfg['Servers'][$i]['history'] = '';
  • $cfg['Servers'][$i]['designer_coords'] = '';
  • /* Reemplazar lo Anterior por */
  • $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
  • $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
  • $cfg['Servers'][$i]['relation'] = 'pma_relation';
  • $cfg['Servers'][$i]['table_info'] = 'pma_table_info';
  • $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
  • $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
  • $cfg['Servers'][$i]['column_info'] = 'pma_column_info';
  • $cfg['Servers'][$i]['history'] = 'pma_history';
  • $cfg['Servers'][$i]['designer_coords']= 'pma_designer_coords';
  • /* Ahora crear una base de datos que se llame phpmyadmin y correr este script.  
  • Para aquellos que lo prefieran y creo que da mejores resultados pueden bajar directamente 
  • el script y lo importan en la base de datos. */
  • DROP DATABASE IF EXISTS `phpmyadmin`;
  • CREATE DATABASE `phpmyadmin`;
  • USE phpmyadmin;
  • /* 
  • -- --------------------------------------------------------
  • -- Privileges
  • -- -------------------------------------------------------
  •  */
  •  
  • GRANT SELECT,  INSERT, DELETE, UPDATE ON `phpmyadmin`.* TO 
  • 'pma'@localhost;
  • CREATE TABLE `pma_bookmark` (
  •   `id` int(9) NOT NULL auto_increment,
  •   `dbase` varchar(255NOT NULL default '',
  •   `user` varchar(255) NOT NULL default '',
  •   `label` varchar(255) NOT NULL default '',
  •   `query` text NOT NULL,
  •   PRIMARY KEY (`id`)
  • TYPE=MyISAM COMMENT='Bookmarks';
  • CREATE TABLE `pma_column_info` (
  •   `id` int(5) unsigned NOT NULL auto_increment,
  •   `db_name` varchar(64) NOT NULL default '',
  •   `table_name` varchar(64) NOT NULL default '',
  •   `column_name` varchar(64) NOT NULL default '',
  •   `comment` varchar(255) NOT NULL default '',
  •   `mimetype` varchar(255) NOT NULL default '',
  •   `transformation` varchar(255) NOT NULL default '',
  •   `transformation_options` varchar(255) NOT NULL default '',
  •   PRIMARY KEY  (`id`),
  •   UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`)
  • ) TYPE=MyISAM COMMENT='Column information for phpMyAdmin';
  • CREATE TABLE `pma_history` (
  •   `id` bigint(20) unsigned NOT NULL auto_increment,
  •   `username` varchar(64) NOT NULL default '',
  •   `db` varchar(64) NOT NULL default '',
  •   `table` varchar(64) NOT NULL default '',
  •   `timevalue` timestamp(14) NOT NULL default '',
  •   `sqlquery` texy NOT NULL,
  •   PRIMARY KEY  (`id`),
  •   KEY `username` (`username`,`db`,`table`,`timevalue`)
  • ) TYPE=MyISAM COMMENT='SQL history for phpMyAdmin';
  • CREATE TABLE `pma_pdf_pages` (
  •   `db_name` varchar(64) NOT NULL default '',
  •   `page_nr` int(10) unsigned NOT NULL auto_increment,
  •   `page_descr`
  • varchar(
  • 50) NOT NULL default '',
  •   PRIMARY KEY  (`page_nr`),
  •   KEY `db_name` (`db_name`)
  • ) TYPE=MyISAM COMMENT='PDF relation pages for phpMyAdmin';
  • CREATE TABLE `pma_relation` ( `master_db` varchar(64) NOT NULL default '', `master_table` varchar(64) NOT NULL default '', `master_field` varchar(64) NOT NULL default '', `foreign_db` varchar(64) NOT NULL default '', `foreign_table` varchar(64) NOT NULL default '', `foreign_field` varchar(64) NOT NULL default '', PRIMARY KEY  (`master_db`,`master_table`,`master_field`), KEY `foreign_field` (`foreign_db`,`foreign_table`) ) TYPE=MyISAM COMMENT='Relation table';
  • CREATE TABLE `pma_table_coords` ( `db_name` varchar(64) NOT NULL default '', `table_name` varchar(64) NOT NULL default '', `pdf_page_number` int(11) NOT NULL default '0', `x` float unsigned NOT NULL default '0', `y` float unsigned NOT NULL default '0', PRIMARY KEY  (`db_name`,`table_name`,`pdf_page_number`) ) TYPE=MyISAM COMMENT='Table coordinates for phpMyAdmin PDF output';
  • CREATE TABLE `pma_table_info` ( `db_name` varchar(64) NOT NULL default '', `table_name` varchar(64) NOT NULL default '', `display_field` varchar(64) NOT NULL default '', PRIMARY KEY  (`db_name`,`table_name`) ) TYPE=MyISAM COMMENT='Table information for phpMyAdmin';
  • CREATE TABLE `pma_designer_coords` ( `db_name` varchar(64) NOT NULL default '', `table_name` varchar(64) NOT NULL default '', `x` int(11) default NULL, `y` int(11) default NULL, `v` tinyint(4) default NULL, `h` tinyint(4) default NULL, PRIMARY KEY  (`db_name`,`table_name`) ) TYPE=MyISAM COMMENT='Table coordinates for Designer';
  • Descargar el SCRIPT desde aquí
    Ahora al abrir phpmyadmin y seleccionar cualquier base de datos pordrá ver la pestaña de diseñador donde se peude ver el diagrama, al lado de la pestaña Importar .



    Si se quiere guardar en PDF el diseño, se selecciona la base de datos, se va a la pestaña Operaciones y abajo donde dice Editar Pagina de PDF se crea una nueva. Luego de regreeso a la pestaña diseñador se le da clic al botón para expotar en PDF , selecciona la escala y clic en el botón exportar. Aunque la verdad yo prefiuero hacer captura de pantalla porque no es que se vea muy bien el PDF pero no se pierde nada con configurar y probar bien.

    Yii Framework - Instalación


    Hola amigos un día buscando información acerca de un framework de fácil aprendizaje y eficiente me tope con Yii, que es un framework para programación orientada a la Web fácil y eficiente, y con mucha colaboración, en youtube encontré unos vídeos donde explican de manera sencilla desde la instalación hasta la creación de un blog, así que sin tanto rodeo les dejo los vídeos y una descripción de que es Yii.

    ¿Qué es Yii ?

    Yii es un framework PHP basado en componentes de alta performance para desarrollar aplicaciones Web de gran escala. El mismo permite la máxima re-utilización en la programación Web y puede acelerar el proceso de desarrollo. 

    El nombre Yii (pronunciado /i:/) es por fácil, eficiente y extensible.

    Requerimientos

    Para correr una aplicación Web Yii, usted necesita tener un servidor Web con soporte PHP 5.1.0 o superior.

    Para desarrolladores que deseen utilizar Yii, el entendimiento de Programación Orientada a Objetos (OOP) será de grán ayuda ya que Yii es un framework totalmente Basado en OOP.

    ¿Para qué es Bueno utilizar Yii?

    Yii es un framework genérico de programación Web que puede ser utilizado para todo tipo de aplicaciones Web. Gracias a que es liviano de correr y está equipado con soluciones de cacheo sofisticadas, es adecuado para desarrollar aplicaciones de gran tráfico como portales, foros, sistemas de administración de contenidos (CMS), Sistemas de comercio electrónico (e-commerce), etc.

    ¿Cómo se compara Yii con otros frameworks?

    Como la mayoría de los frameworks PHP, Yii es un framework MVC (modelo-vista-controlador).

    Yii sobresale frente a frameworks PHP en su eficiencia, su gran cantidad de características y su clara documentación. Yii ha sido diseñado cuidadosamente desde el principio para el desarrollo de aplicaciones de Web. No es ni un subproducto de un proyecto ni un conglomerado de trabajo de terceros. Es el resultado de la basta experiencia de los autores en desarrollo de aplicaciones Web y de la investigación y la reflexión de los más populares los frameworks de programación Web y aplicaciones.


    Video 1




    Pagina Oficial de Yii

    Canal oficial del creador del video Gustavo Salgado

    jQuery para fotos utilizando Ajax UpLoad y PHP


    Cuando comenzamos a desarrollar scripts avanzados y a utilizar tecnologías como ajax nos sale a relucir porque no es posible subir fotos a un servidor sin necesidad de recargar la página, esto se deriva de un error de seguridad en los navegadores. Ahora bien existe la posibilidad de emular esta acción mediante plugins, para esto crearemos nuestro jquery para fotos.
    Para nuestro ejemplo jQuery para fotos emplearemos AjaxUpload.2.0.js en la versión que utiliza iframes y que podrás encontrar en su sitio oficial.

    Al final del ejemplo te daré un par de plugins que pueden ser de utilidad para tus aplicaciones jquery para fotos y que son mas actuales.
    Comúnmente nos encontramos tutoriales en donde nos enseñan a subir fotos de forma asíncrona, pero que pasa si lo que queremos es subir fotos y al mismo tiempo se vea reflejada en nuestra página, por ejemplo editar el perfil de un usuario y subir sus fotos, y que esta se vea en tiempo real en su respectivo contenedor, esto lo lograremos usando jquery para fotos.
    En este pequeño tutorial – jquery para fotos – vamos a ver un ejemplo con las siguientes características:
    • Subir fotos
    • Fijar dimensiones de las fotos permitidas
    • Fijar el tamaño en kbs de las fotos
    • Fijar tipos de fotos que se pueden subir
    • Presentar en pantalla las fotos publicadas

    Puedes descargar el código completo de jquery para fotos desde github

    Video Tutorial