on viernes, 5 de septiembre de 2014


Finalmente lo que muchos hemos esperado, la salida de esta nueva versión de un maravilloso framework! :D

Principalmente algo que creo que era MUY necesario era integrar un sistema de migraciones, pues que anteriormente a esta versión si tu creabas tus modelos de la base de datos, estos ya no los podías alterar o remover, para lo cual teníamos que usar librerías externas como la mas conocida south, la cual nos facilitaba mucho esto, pero igual a mi parecer debería haber estado desde antes esto en Django, así como esta en ROR (Ruby on Rails).

Ademas de esta mejora hay muchas otras como el poder tener mas control sobre nuestras aplicaciones y configuración de las mismas, y ayudas en resolver problemas comunes durante la validación del proyecto (System check framework), la verdad no he probado todas las nuevas aun, mas que nada el uso de las migraciones pues es la que casi siempre hay cambios en sistemas cuando durante la producción surgen puntos que no habías planeado hahahaha.


Bueno ahí la forma mas sencilla para instalar es:
pip install Django
O para actualizar a esta version:
pip install -U Django

Bueno no hay mucho mas que decir ya saben a probar y ver que mejoras trae la nueva versión que lleva poco (3 días)  y a desarrollar ;D

Para mas información pueden ver estas ligas:
https://www.djangoproject.com/weblog/2014/sep/02/release-17-final/
https://docs.djangoproject.com/en/dev/releases/1.7/
on miércoles, 13 de agosto de 2014



Bueno como se dijo en la anterior publicación pues eh estado buscando soluciones ante este problema, entre los cuales vengo a mostrar diferentes soluciones que he encontrado y pues tal vez algún día pueda servirles:

Menciono esto puesto que MariaDB tiene una topologia emm como master<->master , pero no a otro master, donde podrías tener un slave, quedando master<->master ->slave y de este ser master de otro y así,
lo que lleva a una topologia tipo anillo, donde aun así no es lo que estuve buscando sino mas algo que lleve a una topologia tipo estrella.

MariaDB:


Postgresql:
(*Aun hay mas pero en si estos fueron los que mas me llamaron la atención*)

Al final he decidido MariaDB Galera Cluster, porque sencillamente trae (o eso parece) lo que necesito, igual Postgresql con Buscardo se ve muy interesante la verdad, Slony lo vi pero no hice ninguna prueba y sentí que era demasiada configuración y pensando que cresca mucho los nodos creo que seria algo exagerado.

Aun veo que estoy muy a principio y aun con mis dudas, pero gracias a esas dudas he aprendido bastante durante este poco tiempo así que pues como un gran fase que recuerdo muy a menudo....

Sólo sé que no sé nada ~ Socrates

Buenas noches,
aun queda mucho por aprender y ver pues quien sabe capaz y luego hay algo nuevo y mejor, pero pues es mejor que empezar con algo a esperar a que eso llegue a ti y el tiempo pase y al final no hagas nada y pierdas tiempo.

Saludos*! ~

P.D. Mis proximas publicaciones intentare que ya sean en practica, eh igualmente no solo ligada a base de datos sino tambien sobre otros proyectos que tengo pero que habia dejado por falta de tiempo y pues otras cosas.
Intentare mostrar y continuar mi proyecto de CEA (http://cea.dreamsoft.st) creado con NodeJs, e igual crear tutoriales sencillos sobre Django y otras cosas con las que he trabajado durante este tiempo.
on martes, 12 de agosto de 2014
Bueno iniciando de nuevo con el blog, intentare comentar los proyectos que tengo en el trabajo en partes y pues mas que nada por si algunos tienen tropiezos o dudas como las que yo tengo en busca de soluciones para proyectos pues esto podría servirles.



Bueno ya sin tanto blablabla, empecemos.
Últimamente he estado en un proyecto donde ocuparía hacer una Base de Datos Distribuida ya que se planea manejar Sucursales, pero he aqui un pequeño gran problema que es y entonces que Motor de Base de Datos usar ? (*Contando que habría mas de 1 millon de registros*)

Ahí entre a pensar y a leer lo que me ofrecían varios entre los cuales destacaron para mi proyecto los siguientes:


  • MySQL
  • MariaDB (*Es parecido a MySQL de hecho es un fork, pero con mejoras*)
  • Postgresql
  • Cassandra
  • MongoDB
on lunes, 11 de agosto de 2014
Bueno ahora en clase de Est. & Org. de Datos, nos pidieron hacer una matriz diferente a lo comun oseasemelese
comun:
int matriz[][] = new int[3][3];
haciendo asi que 3 vectores, contengan 3 campos, pero en este caso se decea que cada vector o renglon contenga mas o menos campos, segun

quedando algo asi
int matriz[][] = new int[3][];
matriz[0] = new int[2];
matriz[1] = new int[4];
matriz[2] = new int[7];

Asi podriamos poner a cada uno exactamente como lo deceemos, pero bueno ya el punto era que deceabamos hacer eso y cada renglon representa un alumno y columna materia, y entonces sacar el promedio por materia, pero en ocaciones un alumno lleva menos materias que otro por lo que tendriamos que checar que tal alumno cumpla con tales sino que no lo lea porque daria un error de fuera de rango si no tuviera tal materia.

Bueno ya al final de todo aqui lo hice aunque me falto comentarlo jeje ;D
Ahi cualquier duda o cosa y/o Sugerencia o algun error que vean me avisan asi tambien mejorar jejeje xP

public class Matriz 
{
 public static void main(String[] args) 
 {
  int alumnos, cal, mcal = 0;
  do{
   alumnos = read.dataInt("Cantidad de Alumnos: ");
  }while(alumnos < 0);
  int matriz [][] = new int[alumnos][];
  for(int x = 0; x < alumnos; x++)
  {
   cal = read.dataInt("Cantidad de Materias Alumno[" + (x+1) + "]: ");
   matriz[x] = new int[cal];
   if(mcal < cal)
    mcal = cal;
  }
  SOP("\n");
  matriz = Rellenar(matriz,mcal);
  SacarPromedioXMateria(matriz,mcal);
  SacarPromedioXAlumno(matriz,mcal);
 }
 
 private static int [][] Rellenar(int matriz[][], int mcal)
 {
  for(int x = 0; x < mcal; x++)
  {
   SOP("Ingreso de Calificaciones Materia [" + (x+1) + "]: ");
   for(int xx = 0; xx < matriz.length; xx++)
   {
    if(matriz[xx].length >= (x+1))
     matriz[xx][x] = read.dataInt("Calificacion Alumno [" + (xx+1) + "]: ");
   }
   SOP("\n");
  }
  return matriz;
 }
 
 private static void SacarPromedioXMateria(int matriz [][], int mcal)
 {
  int prom;
  for(int x = 0; x < mcal; x++)
  {
   prom = 0;
   for(int xx = 0; xx < matriz.length; xx++)
   {
    if(matriz[xx].length >= (x+1))
     prom += matriz[xx][x];
   }
   prom = prom/matriz.length;
   SOP("Promedio Materia [" + (x+1) + "]: " + prom);
  }  
 }
 
 private static void SacarPromedioXAlumno(int matriz [][], int mcal)
 {
  int prom;
  for(int x = 0; x < matriz.length; x++)
  {
   prom = 0;
   for(int xx = 0; xx < matriz[x].length; xx++)
   {
    prom += matriz[x][xx];
   }
   prom = prom/mcal;
   SOP("Promedio Alumno [" + (x+1) + "]: " + prom);
  }
 }
 
 private static void SOP(String msj)
 {
  System.out.println(msj);
 }

}
Clase PilaS:
package Pila;

public class PilaS 
{
 private int Tope = -1;
 private int Max;
 private int Pila[];
 public int DatoPila;
 
 public PilaS(int CantMax)
 {
  Pila = new int[CantMax];
  Max = CantMax;
 }
 
 private boolean PilaVacia()
 {
  boolean resp = false;
  if(Tope == -1)
   resp = true;
  return resp;
 }
 
 private boolean PilaLlena()
 {
  boolean resp = false;
  if((Tope-1) == Max)
   resp = true;
  return resp;
 }
 
 public boolean InsertarPila(int Dato)
 {
  boolean resp = false;
  if(!PilaLlena())
  {
   Tope++;
   Pila[Tope] = Dato;
   resp = true;
  }
  return resp; 
 }
 
 public boolean RemoverPila()
 {
  boolean resp = false;
  if(!PilaVacia())
  {
   DatoPila = Pila[Tope];
   Tope--;
   resp = true;
  }
  return resp;
 }
 
 public boolean VerPila()
 {
  boolean resp = false;
  if(!PilaVacia())
  {
   DatoPila = Pila[Tope];
   resp = true;
  }
  return resp;
 }

}

Clase ProyectosPilas:
Este contiene el main y demas funciones.
package Pila;

public class ProyectosPilas 
{

 public static void main(String[] args) 
 {  
  //Pila Normal Mostrar Elementos inverso a como fueron insertados
  Ej0();
  //Pila Insertamos y mostramos en otra Pila de forma que fueron insertados 
  Ej1();
  //Pila Insertamos y mostramos en la Pila Principal o 0 de forma que fueron insertados
  Ej2();
 }
 
 private static void Ej0()
 {
  int num = read.dataInt("Total de Elementos en la Pila: ");
  PilaS P = new PilaS(num);
  for(int x = 0; x < num; x++)
  {
   P.InsertarPila(read.dataInt("Dato a Insertar[" + x + "]:"));
  }
  
  while(P.RemoverPila())
   SOP(P.DatoPila);
 }
 
 private static void Ej1()
 {
  int num = read.dataInt("Total de Elementos en la Pila: ");
  PilaS P = new PilaS(num);
  PilaS P0 = new PilaS(num);
  for(int x = 0; x < num; x++)
  {
   P.InsertarPila(read.dataInt("Dato a Insertar[" + x + "]:"));
  }
  
  while(P.RemoverPila())
   P0.InsertarPila(P.DatoPila);
  while(P0.RemoverPila())
   SOP(P0.DatoPila);
 }
 
 private static void Ej2()
 {
  int num = read.dataInt("Total de Elementos en la Pila: ");
  PilaS P = new PilaS(num);
  PilaS P0 = new PilaS(num);
  for(int x = 0; x < num; x++)
  {
   P.InsertarPila(read.dataInt("Dato a Insertar[" + x + "]:"));
  }

  while(P.RemoverPila())
   P0.InsertarPila(P.DatoPila);
  //P = P0;
  
  PilaS P1 = new PilaS(num);
  while(P0.RemoverPila())
   P1.InsertarPila(P0.DatoPila);
  while(P1.RemoverPila())
   P.InsertarPila(P1.DatoPila);
  
  while(P.RemoverPila())
   SOP(P.DatoPila);
 }
 
 private static void SOP(int msj)
 {
  System.out.println(msj);
 }

}
Clase read: Esta clase no la cree yo sino un amigo Jackz(cryptt3r) con la que siempre utilizo para leer jeje
package Pila;
import java.io.*;

/**
 * @author cryptter
 */
public class read
{
 public static boolean error;
 public static String data(String message) {
     String sdato = "";
     System.out.print(message);
     try {
       // Definir un flujo de caracteres de entrada: flujoE
       InputStreamReader isr = new InputStreamReader(System.in);
       BufferedReader flujoE = new BufferedReader(isr);
       // Leer. La entrada finaliza al pulsar la tecla Entrar
       sdato = flujoE.readLine();
     }
     catch(IOException e) {
       System.err.println("Error: " + e.getMessage());
     }
     return sdato; // devolver el dato tecleado
   }
 public static int dataInt(String message){
     try {
      error=false;
      int val=Integer.parseInt(data(message));
      if (val<-32768 data-blogger-escaped-val="">32767)
       error=true;
       return val;
     }
     catch(NumberFormatException e) {
       return Integer.MIN_VALUE; // valor más pequeño
     }
 }

 public static short datoShort(String message){
    try {
   return Short.parseShort(data(message));
  }
  catch (NumberFormatException e){
   return Short.MIN_VALUE;
  }
 }



 public static long dataLong(String message){
  try {
   return Long.parseLong(data(message));
  }
  catch (NumberFormatException e){
   return Long.MIN_VALUE;
  }
 }

 public static float dataFloat(String message){
  try {
   Float f = new Float(data(message));
   return f.floatValue();
  }
  catch (NumberFormatException e){
   return Float.NaN;
  }
 }

 public static double dataDouble(String message){
  try {
   Double d = new Double(data(message));
   return d.doubleValue();
  }
  catch (NumberFormatException e){
   return Double.NaN;
  }
 }
 /*public static char dataChar(String message){
  try {
   Char d = new Char(data(message));
   return d.charValue();
  }
  catch (NumberFormatException e){
   return Char.NaN;
  }
 }*/
}
Bueno como vi a androide colocar el launcher que coloco aqui y vi en creditos que usaba un SerialKeyGenerator, pues decidi tambien aqui dejar uno que hice utilizando en src del 1.5.

Bueno no tengo mucho que decir asi que aqui les dejo el codigo ;B

Descarga:
https://mega.co.nz/#!HdNWGQ7A!Evism1BvjRSAIZzXLWxpKdxJBYKJRovXS8pMjbYMD3M
Bueno últimamente muchos compañeros con servidores de GunZ, han sido atormentados por este fallo y creen que es porque alguien roba sus datos del servidor y lo reinicia, pero esto NO es asi, esto se debe a que sus sistema no esta actualizado por lo que contiene este fallo.

La vulnerabilidad afecta la implementación de RDP de Microsoft Windows 2000, XP SP2 y SP3, Windows Server 2003 SP2, Windows Vista SP2, Windows Server 2008 SP2, R2 y Windows 7. Por estas razones, se recomienda aplicar el parche MS12-020 tan pronto como sea posible en su entorno.

Y pues bueno este fallo es sencillo de arreglar, simplemente pues es poniendo o actualizando nuestro HOST y contenga las actualizaciones KB2667402 y KB2621440, pero como claro en algunas ocasiones esto no lo soluciona asi que vamos por algo que si lo "soluciona" el cual es ir


Equipo -> Propiedades
Ahora al lado izquierdo dan click donde dice "Configuración de Acceso Remoto"
Y ahora en la pestaña "Acceso Remoto"
Bueno ahí verán que tienen seleccionada la opción del medio, entonces cambiamos esa por la tercera opción que dice sobre "Autenticacion a nivel Red"
Y Listo, con eso ya tendrán activado la seguridad para eso.



Ahora si usan Windows XP, y hacen lo anterior ocuparan hacer algunas cosas extras ya que por default Windows XP al realizar una conexión Remota, no hace este tipo de autentificacion por lo que les dará un error, SOLAMENTE EN WIN XP.