lunes, 6 de junio de 2011

[SEGUNDA OPORTUNIDAD] Planeación de proyectos (Como evitar la segunda oportunidad)

Buenas tardes compañeros, en vista de que no logre pasar en primera oportunidad, me dieron la oportunidad de lograrlo en segundas. Pero segundas no es del agrado de todos, así que esta entrada explicaré como mantener organizado nuestro proyecto y avanzarlo durante el semestre en forma óptima para lograr tener éxito en tal proyecto.

Puesto que NO lo logre, espero que aparte de ustedes, esto también me sirva. Los pasos a seguir para terminar bien tu proyecto son los siguientes:
 
1.- Piensa bien lo que quieres hacer.
Esto es, piensa en tus posibilidades, no selecciones cualquier cosa porque se ve bonita, sino que selecciones algo que creas poder terminar. Después de todo, cualquier proyecto funcional es bueno sin importar que tanto grado de dificultad tenga.
En mi caso decidí hacer algo sencillo pero que cumple con las expectativas.

2.- Se constante.
No lograras terminar si solo decidiste que será algo fácil y asistiendo a clases. Necesitas meterle mano a tu proyecto, cualquier cosa ingeniosa que leas o que encuentres por la red que creas que te es útil, agrégasela a tu trabajo y veras que poco a poco irá creciendo.

Por parte mía, este punto también lo considere, mi proyecto está hecho de distintos trozos de códigos que encontré en YouTube, tutoriales, google y por supuesto que códigos implementados por mí.

Tal vez digas, "eso es copiar", yo digo no, copiar es robarse una idea de otro o tomar el examen de otra persona, si lo encuentras en internet, es de todos y por lo tanto puedes implementarlo, si no te quieres matar adivinando que es lo que te falta. En pocas palabras, investigar no es malo.

3.- Trabaja en equipo.
Posiblemente tu trabajo es individual o pienses que un equipo no funciona porque uno no trabaja o porque otro no se preocupa y terminaras haciendo todo tu solo. Pues existen muchas maneras de trabajar en equipo bajo cualquiera de estas condiciones. Por mencionar algunas:
  • En caso de que tu trabajo sea individual, puedes trabajar con otros, la manera más fácil es encontrar personas que tengan un trabajo similar al tuyo, así pueden dividir el trabajo entre más personas aunque no pertenezcan a la misma clase.
  • Si alguna de las personas no domina el tema o simplemente le es difícil, intenten dividir el trabajo de más fácil a más difícil y hagan lo más difícil juntos.
  • Si el proyecto de cada quien tiene cosas diferentes, hagan en equipo los temas comunes.
  • Si su proyecto no es individual, investiguen posibles implementaciones cada quien por su cuenta y hagan lluvia de ideas.

Creo que ésta fue una de las cosas que me falto.

4.- Pide opiniones.
Al iniciar un proyecto es muy probable que no sepas mucho del tema. Así que es mejor que busques opiniones de gente que conozca bien sobre lo que haces. Pueden ser alumnos de grados superiores o a tus maestros, porque no a la gente de internet. Ya que a veces aunque investiguemos no encontraremos lo que buscamos.

Esto tampoco lo aplique, creo que esto fue lo que me llevo directo a segundas.

5.- Organiza tu tiempo.
Algo importante para tener éxito con tu proyecto es tener tiempo, pero tener tiempo no significa que te encarguen pocas tareas y que te quede mucho tiempo libre, significa saber hacer lo que te pidan a tiempo sin importar cuánto trabajo sea.

Tener organizado el trabajo es esencial  para poder terminar a tiempo. Para lograr esto es necesario dividir la semana, incluso los días en partes; por ejemplo, tomar la tarde para avanzar en el proyecto, o bien dedicar un día para el.


Si tiempo es lo que no tienes, dedica tus horas libres para trabajar entre clases, como ir a la biblioteca a avanzar, sirve que preguntas a tus compañeros por algunas dudas.

Una de las cosas que empecé a utilizar hasta la mitad del semestre.

6.- Siempre ten un respaldo.
Esto es aplicable a la gente que sus proyectos consisten en un proyecto de software, ya que asta el punto 5 es aplicable a cualquier tipo de proyecto. También se aplica a alguna investigación o algo por el estilo.

Siempre carga contigo una copia de seguridad de tu trabajo. Nunca sabes que puede suceder. Otra opción es tener una copia en algún servidor en internet. Dropbox, iDrive u otros servidores son útiles en estos casos. Enviarse un correo con los archivos adjuntos asimismo es otra buena idea.

A veces necesitamos de grandes cantidades de datos, que solo podemos manejar en nuestra computadora, en este caso, instalar el software necesario en una USB es útil.

Personalmente he utilizado este método desde que tengo una USB.

Alguna otra idea? Comentala aquí.

domingo, 5 de junio de 2011

[SEGUNDA OPORTUNIDAD] Proyecto Final Taller

Proyecto Final

Video del programa funcionando, muy simple ya que no logre implementar una interfaz gráfica, pero funciona y es lo que importa.




Códigos finales del programa:

Para mi base de datos:
package Organidatabase;

import java.sql.*;

public class Database {
 
 PreparedStatement stmt = null;
 ResultSet rs=null;
 
 public final static String drv ="com.mysql.jdbc.Driver";
 public final static String db ="jdbc:mysql://localhost:3306/organischema";
 public final static String user ="***";
 public final static String pword="***";
 
 Connection ct;
 public Statement st;

 public Database(){
  try{
   Class.forName(drv);
   ct =DriverManager.getConnection(db, user, pword);
   st =ct.createStatement();
  }catch(Exception e){
   System.err.println("No se pudo conectar a la base de datos.");
   return;
  }
 }

 public Statement getSt(){
  return st;
 }

}


Aqui mis eventos:
package Organidatabase;

import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.Scanner;

public class Eventos extends Database{
 
 String lugar;
 String fecha;
 String hora;
 
 public Eventos(){}
 
 public void total_eventos(String id){
  try{
   int i = 0;
   stmt = ct.prepareStatement("SELECT * FROM events, Alumnos WHERE events.idAlumnos = "+id+" and Alumnos.idAlumnos ="+id+"");
   rs= stmt.executeQuery();
   while(rs.next()){
    i++;
   }
   if(i!=0){
    System.out.println("Tiene "+i+" eventos pendientes.");
   }
   else{}
  }catch(SQLException e){
   System.out.println("No tiene eventos");
  } 
 }
 
 public void show_event(String id){
  try{
   int i = 0;
   stmt = ct.prepareStatement("SELECT * FROM events, Alumnos WHERE events.idAlumnos = "+id+" and Alumnos.idAlumnos ="+id+"");
   rs= stmt.executeQuery();
   while(rs.next()){
    i++;
    System.out.println("*******************************************************");
    System.out.println("("+i+")");
    System.out.println("Lugar: "+rs.getString("events.place"));
    System.out.println("El "+rs.getString("events.date")+"a las "+rs.getString("events.time"));
   }
   System.out.println("*******************************************************");
  }catch(SQLException e){}
 }
 
 public void make_event(String id){
  System.out.print("Lugar: ");
  Scanner a = new Scanner(System.in);
  lugar = a.nextLine();
  lugar = lugar.replace(' ','_');
  System.out.print("Fecha (dd/MM/aaaa): ");
  fecha = a.next();
  while(comprobar_fecha(fecha)==false){
   System.out.println("Fecha incorrecta");
   System.out.print("Fecha (dd/MM/aa): ");
   fecha = a.next();
  }
  System.out.print("Hora: ");
  hora = a.next();
  while(comprobar_hora(hora)==false){
   System.out.println("Hora incorrecta");
   System.out.print("Hora (hh:mm): ");
   hora = a.next();
  }
  send(id);
 }
 
 private boolean comprobar_hora(String hora) {
  int hora1 = Integer.parseInt(hora.substring(0, 2));
  int hora2 = Integer.parseInt(hora.substring(3, 5));
  if(hora1>23||hora2>59){
  return false;
  }
  else{
  return true;
  }
 }


 private static boolean comprobar_fecha(String fechax) {
  try {
  SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yy", Locale.getDefault());
  formatoFecha.setLenient(false);
  formatoFecha.parse(fechax);
  } catch (ParseException e) {
  return false;
  }

  return true;
  }
 
 public void send(String id){
  try {
   stmt = ct.prepareStatement("INSERT INTO events (place, date, time, idAlumnos) VALUES (?,?,?,?)");
   stmt.setString(1, lugar);
   stmt.setString(2, fecha);
   stmt.setString(3, hora);
   stmt.setString(4, id);
   stmt.executeUpdate();
   stmt.close();

  } catch (SQLException e) {}
 }
 
}

Para mis horarios:
package Organidatabase;

import java.io.IOException;
import java.sql.SQLException;
import java.util.*;

public class Horario extends Database{

 public String dayselection;

 public String subselection;

 public Horario(){
  
 }

 public void phrs(int a){
  if(a==2)
   System.out.print("Profesor: ");
  if(a==3)
   System.out.print("Examen 1: ");
  if(a==4)
   System.out.print("Examen 2: ");
  if(a==5)
   System.out.print("Faltas: ");
  if(a==6)
   System.out.print("Tareas: ");
  if(a==7)
   System.out.print("Tareas no cumplidas: ");
  if(a==8)
   System.out.print("Total de tareas: ");
  if(a==9)
   System.out.print("Promedio: ");
 }

 public void showAll(String matt, String pass) throws IOException {
  boolean selec = true;
  while(selec == true){
  String dia = new String();
  Scanner a = new Scanner(System.in);
  System.out.println("Introduzca un dia (Lu, Ma, Mi, Ju, Vi, Sa): ");
  dia = a.next();
  dayselection = dia;
  try{
   do{
    stmt = ct.prepareStatement("SELECT * FROM Alumnos, "+dia+" WHERE  Alumnos.idAlumnos = ? AND Alumnos.idPass = ? AND Alumnos.idAlumnos = "+dia+".idAlumnos");

    stmt.setString(1,matt);
    stmt.setString(2, pass);
    rs = stmt.executeQuery();
    if(rs.next()){
     System.out.println("Seleccione Horario: ");
     String sub = a.next();
     subselection=rs.getString(sub);
     fill_data();
     rs.close();
    }
    else{
     System.out.print("Error");
     rs.close();
    }
   }while(rs.isClosed()==false);
  }catch(SQLException e){
   System.out.println("No se pudo realizar la consulta.");
  }
  System.out.print("¿Desea ver otra materia?(S/N): ");
  char sel= (char) System.in.read();
   switch(sel) {
   case 's': 
    selec = true;
       break;
       
   case 'S':
    selec=true;
    break;
   
   default:
    selec = false;
       break;
  }
  }
 }

 public void fill_data(){
  try{
   stmt = ct.prepareStatement("SELECT * FROM "+subselection+", "+dayselection+" WHERE "+dayselection+".idAlumnos = "+subselection+".idAlumnos");
   rs = stmt.executeQuery();
   while(rs.next()){
    System.out.println(subselection.replace('_', ' '));
    for(int i=2; i<=9; i++){
     phrs(i);
     if(rs.getString(i) == null){
      System.out.println("Sin Datos");
     }
     else{
      System.out.println(rs.getString(i));
     }
    }

   }
  }catch(SQLException i){
   System.out.println("No tiene materia asignada en ese horario.");
   
  }
 }
 
 

}

Tambien las notas:
package Organidatabase;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Notas extends Database{
 String nota;
 String para;
 
 InputStreamReader isr = new InputStreamReader(System.in);
 BufferedReader br = new BufferedReader (isr);

  public Notas () {
     }

  public void nuevo(String id){
   try{
    int i=0;
    stmt = ct.prepareStatement("SELECT * FROM notes, Alumnos WHERE notes.idTo = "+id+" and Alumnos.idAlumnos = notes.idAlumnos");
    rs = stmt.executeQuery();
    while(rs.next()){
     if(rs.getBoolean("visto")==false){
      i++;
     }
    }
    if(i==0){
     System.out.println("No tiene mensajes.");
    }
    else{
     System.out.println("Tiene "+i+" mensajes nuevos.");
    }
   }
   catch(SQLException e){}
 }

  public String note() throws IOException{
    System.out.println("Escriba su nota: ");
        nota=br.readLine();
        nota = nota.replace(' ','_');
        return nota;
  }

  public String to(){
   System.out.println("Para: ");
      Scanner a = new Scanner(System.in);
      para=a.next();
      para=comprueba(para);
      return para;
  }

  public void show_notes(String id){
   try{
    int i=0;
    stmt = ct.prepareStatement("SELECT * FROM notes, Alumnos WHERE notes.idTo = "+id+" and Alumnos.idAlumnos = notes.idAlumnos");
    rs = stmt.executeQuery();
    while(rs.next()){
     int x = rs.getInt(1);
     i++;
     System.out.println("*******************************************************");
     if(rs.getBoolean("visto")==false){
      System.out.print("Nuevo ");
      try{
       stmt = ct.prepareStatement("UPDATE notes SET visto = ? WHERE Idnote = "+x+"");
       stmt.setBoolean(1, true);
       stmt.executeUpdate();
       stmt.close();
      }catch(SQLException e){}
    }
     System.out.println("Mensaje: "+i);
     System.out.println(rs.getString("Alumnos.NomApell")+" ("+rs.getString("notes.idAlumnos")+"):");
     System.out.println(rs.getString("note").replace('_',' '));
     System.out.println("Recibida el "+rs.getString("fecha")+" a las "+rs.getString("hora"));
    }
    System.out.println("*******************************************************");
    if(i==0){
     System.out.println("No hay mensajes.");
    }
    else{
     System.out.print("Desea eliminar una nota?: ");
     Scanner a = new Scanner(System.in);
     String line = a.nextLine();
     char s = line.charAt(0);
     if(s=='S'||s=='s'){
      System.out.print("Seleccione el número de mensaje: ");
      int y = a.nextInt();
      eliminar(y,id);
     }
    }
    
   }
   catch(SQLException e){}
 }

  public void eliminar(int sel, String id){
   int x;
   int i=0;
   try{
    stmt = ct.prepareStatement("SELECT * FROM notes, Alumnos WHERE notes.idTo = "+id+" and Alumnos.idAlumnos = notes.idAlumnos");
    rs = stmt.executeQuery();
    while(rs.next()){
     i++;
     x=rs.getInt(1);
     if(i==sel){
    try{
      stmt = ct.prepareStatement("DELETE FROM notes WHERE Idnote="+x+"");
      stmt.executeUpdate();
      stmt.close();
      }catch(SQLException e){}
     }
    }
   }catch(SQLException e){
    System.out.println("wey");
   }

  }


  public String comprueba(String para){
   
 try {
  stmt = ct.prepareStatement("SELECT idAlumnos FROM Alumnos");    
  rs = stmt.executeQuery();
  while(para!=rs.getString("idAlumnos")){
   if(para.equals(rs.getString("idAlumnos")))
    para= rs.getString("idAumnos");
   else{
    rs.next();
    para= null;
   }
  }
 }catch (SQLException e) {
  }
 return para;
  }
   
  public String get_all(String note, String to, String from){
  Date fecha = new Date();
  SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yy");
  SimpleDateFormat formatohora = new SimpleDateFormat("hh:mm a");
  String cadenaFecha = formato.format(fecha);
  String cadenaHora =formatohora.format(fecha);
  try{
   stmt = ct.prepareStatement("INSERT INTO notes (idAlumnos, note, idTo, fecha, hora) VALUES (?,?,?,?,?)");
   stmt.setString(1,from);
   stmt.setString(2, note);
   stmt.setString(3, to);
   stmt.setString(4, cadenaFecha);
   stmt.setString(5, cadenaHora);
   stmt.executeUpdate();
   stmt.close();
   String all = "Se envió exitosamente:\n"+note+"\nPara:\n"+to;
   return all;
  }catch(SQLException i){
   System.out.println("Ocurrio un error.");
   return null;
  }
 }
}
Sus respectivas pruebas unitarias:
package Organidatabase;

import java.io.IOException;

import junit.framework.TestCase;

public class TestNotas extends TestCase {
 
 private String s;
 
  public TestNotas( String nombre ) {
    super( nombre );
  }

  public static void main( String args[] ) {
    junit.textui.TestRunner.run( TestNotas.class );
  }
  
  public void setUp() {
   Notas n = new Notas();
   try {
  s=n.get_all(n.note(), n.to(), "1441708");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
  }

  public void testEnviaNota() {
    assertNotNull(s);
  }
}
Y por ultimo el main:
package Organidatabase;

import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

import javax.swing.UIManager;

public class Main {

 private static void limpiar(){
  try {
   String línea;

   Process p = Runtime.getRuntime().exec("clear");
   BufferedReader input = new BufferedReader (new InputStreamReader(p.getInputStream()));

   while ((línea = input.readLine()) != null) {
   System.out.print(línea);
   }
   input.close();
   } catch (Exception e) {
   e.printStackTrace();
   }
 }

 public static void main(String[] args) throws IOException{
  Horario h = new Horario();
  Notas n = new Notas();
  Eventos e = new Eventos();
  Scanner a = new Scanner(System.in);
  Console terminal = System.console();
        if (terminal==null ) {
            System.err.println("No puedo obtener la consola.");
            return;
        }
      
  String matt = new String (terminal.readLine("Ingresar Usuario: "));
  String pass= new String (terminal.readPassword("Ingresar contraseña: "));
  limpiar();
  n.nuevo(matt);
  e.total_eventos(matt);
  System.out.print("\n");
  System.out.println("Selecione una opcion:");
  System.out.println("1 - Ver Materias.");
  System.out.println("2 - Ver y crear notas.");
  System.out.println("3 - Ver y crear eventos.");
  System.out.println("0 - Salir.");
  System.out.print("Seleccion: ");
  int sel= a.nextInt();
  limpiar();
  while(sel!= 0){
   switch(sel){
   case 1:
    h.showAll(matt, pass);
    limpiar();
    break;
   case 2:
    System.out.println("1 - Ver notas recibidas.");
    System.out.println("2 - Crear una nota.");
    System.out.print("Seleccion: ");
    int sel1=a.nextInt();
    limpiar();
    switch(sel1){
    case 1:
     n.show_notes(matt);
     break;
    case 2:
     n.get_all(n.note(), n.to(), matt);
     break;
    }
    break;
   case 3:
    System.out.println("1 - Ver eventos pendientes.");
    System.out.println("2 - Crear un evento.");
    System.out.print("Seleccion: ");
    int sel2=a.nextInt();
    limpiar();
    switch(sel2){
    case 1:
     e.show_event(matt);
     break;
    case 2:
     e.make_event(matt);
     break;
    }
    break;
   }
   System.out.print("\n");
   n.nuevo(matt);
   System.out.print("\n");
   System.out.println("Selecione una opcion: ");
   System.out.println("1 - Ver Materias.");
   System.out.println("2 - Ver y crear notas.");
   System.out.println("3 - Ver y crear eventos.");
   System.out.println("0 - Salir.");
   System.out.print("Seleccion: ");
   sel= a.nextInt();
   limpiar();
  }
 }
 
}

Liga a la documentación: aquí.