viernes, 28 de noviembre de 2014

TDA recursivo

Un TDA es recursivo si cualquiera de sus funciones de acceso devuelve la misma clase del TDA. En otras palabras, alguna parte del objeto (devuelta por la función de acceso) es del mismo tipo
que el objeto tratado

Esto quiere decir que nosotros podemos tener una clase llamada frasco que tiene como atributo otro objeto del tipo frasco. existe en esa clase una función de acceso que nos permite acceder a ese atributo.

Un TDA así por fuerza tiene también un constructor no recursivo.

martes, 25 de noviembre de 2014

DeepFullStatic

Situaciones caóticas:

Hay muchas cosas del software que no me gustan...
por ejemplo manejo unos indeces raros

La interfaz de traslado es la mas complicada... que debo depurar?? en realidad no se.. el problema esta en la implementacion en realidad no se que hacer
por ejemplo debo crear un nuevo producto al que se le va hacer el traslado??
si es así debo validar que no exista en en el receptor ningún producto igual para poder crear el nuevo registro

Pregunta: esta validado se recargan 2 veces los productos cuando traigo los productos de algún responsable????

OJO NO ESTA VALIDADO

Como haré eso???

Es fácil simplemente tendras que validar de acuerdo a los id producto que el tendrá en la otra grilla (grilla del que recibe: asi que al mandar ha buscar los datos tiene que haber un array interno con alguna clase de informacion identificante) así que no hay ningún problema.

necesito guardar primeramente los datos identificantes que traigo en el que envia tengo que guardarlos en una estructura de datos privada que puede llamarse izquierda puede ser una lista por que en realidad lo que voy ha guardar es el numero identificatorio del producto por ahora no necesito mas nada pues el identificatorio del responsable podre obtenerlo tal vez de otra manera

Yo los mando todos

Actualización: estoy tratando de que no se repitan los registros que se meten en la grilla de especificación

Nota: permite buscar dos veces los el mismo producto hay que validar eso....

lunes, 24 de noviembre de 2014

Qué incluye un TDA tercera parte

Al escoger un conjunto de operaciones para un TDA, es importante asegurarnos que el conjunto
de funciones de acceso sea suficiente para verificar las condiciones previas de todas las operaciones.
Esto confiere al cliente la capacidad de asegurarse de que ninguna operación se invoque
erróneamente.

Ahora si se puede entender la importancia de las funciones de acceso ellas devuelven información indispensable para revisar las condiciones previas de las operaciones de manipulacion

viernes, 21 de noviembre de 2014

Tips para hacer el proyecto de miniplataforma en django

https://github.com/harveydf/miniplataforma

no cambie el nombre a la base de datos...

En la carpeta miniplataforma es que debe efectuar los cambios del archivo settings

jueves, 20 de noviembre de 2014

Qué incluye un TDA segunda parte

A causa de nuestra regla de que las funciones de acceso no modifican
el estado de ningun objeto, las especificaciones de TDA por lo regular
pueden organizarse de forma especial. Normalmente es innecesario especificar condiciones posteriores para las funciones de acceso. Ademas, al plantear las especificaciones de procedimientos de manipulacion y constructores de TDA, sus efectos se deben describir en terminos de las funciones de acceso del TDA, en la medida de lo posible. A veces la especificacion necesita indicar el efecto combinado de varias operaciones. Al  principio podria parecer ilogico examinar examinar la condicion posterior de un constructor o procedimiento de manipulacion de TDA para averiguar que "hace" una funcion de acceso.

Cuando tenemos varias funciones de acceso podemos tener como condiciones previas la utilizacion anterior de varias operaciones de manipulacion es decir dependiendo de que operaciones de manipulacion utilicemos vamos ha obtener cierto dato en cada funcion de acceso (La operacion de acceso se debe utilizar previamente e inmediatamente  despues de ejecutar la funcion de manipulacion)

Si esto no es la comprension de este parrafo puede ser la siguiente:

Una operación de manipulación puede ser un conjunto de operaciones. Las funciones de acceso son

Es absurdo especificar condiciones posteriores de funciones de acceso pues estas no cambian ni modifican nada así que para acceder de nuevo al dato no habrá ninguna modificación.

miércoles, 19 de noviembre de 2014

Como utilizar el depurador de xbase

Lo que debemos hacer es abrir una consola y escribir "xppdbg  direccionDeNuestraAplicacion.exe"

quisiera preguntarle brevemente... cuando yo abro el depurador por la consola sale una ventanita pidiendome un path dice "source file not found. add search path:" que direccion se supone que debo colocarle
[10:19:19 a.m.] andres Felipe: usted disculpe la molestia

en ese programa, busca el boton tools, y configura el path , son varios,  bin, include ,  etc etc

con F8 ejecutas la aplicación linea a linea, con F4 la interrupcion es mas larga

En la pestaña file encontramos varias opciones para movernos entre los modulos

"Goto Line" Usted busca la linea que necesite

"open module" Abre algun archivo donde quiera hacer una interrupcion

Los puntos de interrupcion se hacen simplemente dando doble click en el numero de la linea de codigo

En la pestaña monitor selecciona las variables a las que le quiere hacer seguimiento

Como poner verde el wampserver

Es muy sencillo
Lo unico que debemos hacer es dar click en el icono naranja para que se desplieguen las opciones hay le damos en apache luego abrimos el archivo httpd.conf, ahora todas las partes donde tenga 80 lo vamos ha cambiar y le vamos ha poner 8080 ¡ojo! todas las partes donde este 80.

podremos abrir con localhost/8080 

martes, 18 de noviembre de 2014

Especificación de TDA y técnicas de diseño

Las especificaciones de un TDA describen el comportamiento de las operaciones en términos que
tienen sentido para los clientes del TDA. Es decir, las especificaciones deben evitar hacer referencia
a campos de ejemplar privados, porque los clientes no tienen conocimiento de ellos. Las especificaciones
describen las relaciones lógicas entre las partes públicas del TDA, que suelen ser
operaciones y constantes. (Ejemplos de especificaciones en secciones posteriores del capítulo
aclararán estas generalidades.) Las operaciones de TDA (funciones y procedimientos) se denominan
“métodos” en la terminología de Java.
Una ventaja importante de diseñar con TDA es que el cliente puede desarrollar un algoritmo
lógicamente correcto conociendo únicamente las especificaciones del TDA, sin comprometerse
con una implementación específica (ni siquiera con un lenguaje específico) para el TDA. Ésta es
la principal justificación para presentar la metodología de TDA en el presente libro.

viernes, 14 de noviembre de 2014

¿Para que sirven los tipos de datos abstractos en el diseño de algoritmos?

En el diseño de algoritmos, Los TDA tienen un papel importante. El diseño principal se puede efectuar utilizando la operaciones principales del TDA sin decidir como se implementaran dichas operaciones. Una vez diseñado el algoritmo en este nivel( solo nombres de operaciones nada de implementacion de ellas es decir sin especificar las operaciones) podremos efectuar un análisis para contar las veces que el algoritmo usa cada una de las operaciones del TDA. con esta información, quizá padamos encausar la implementacion de las operaciones del TDA en una dirección tal que las operaciones de uso mas frecuentes sean las menos costosas.

Si tu quieres programar código limpio y eficiente entonces debes aprender las diferentes técnicas para el diseño de algoritmos...

(xbase++)error XBT0270: Duplicate method declaration

El error que tenia era que la sentencia EXPORTED tiene que ir justamente antes de la declaracion de los metodos 'publicos' y yo la estaba colocando antes
[08:50:24 a.m.] andres Felipe: parece ser que el compilador lee el archivo de la clase de forma secuencial
[08:56:34 a.m.] andres Felipe: explico mi error:
[08:56:46 a.m.] andres Felipe: supongase la clase
 CLASS Ejemplo
      // Declaro oculto o privada una variable
     HIDDEN:
     VAR xMsg
 EXPORTED:
 METHOD sacarxMsg
 //declaro un metodo publico para acceder a los datos de la clase que en este caso es la
//variable xMsg
 INLINE METHOD sacarxMsg()
   Return ::xMsg
   

ENDCLASS
[09:03:27 a.m.] andres Felipe: esto arroja el siguiente error:
[09:03:29 a.m.] andres Felipe: xpp /n /m /p /b /dDEBUG @C:\Users\CLIENTE\AppData\Local\Temp\11187421.tmp
F_CENTROSCOSTO.PRG(247:0): error XBT0270: Duplicate method declaration

Processing time:      0.88 secs.
[09:04:39 a.m.] andres Felipe: pero revisando su codigo me entendi que debia hacerlo asi:


 CLASS Ejemplo
      // Declaro oculto o privada una variable
     HIDDEN:
     VAR xMsg

 EXPORTED:
 INLINE METHOD sacarxMsg()
   Return ::xMsg

 ENDCLASS

[09:05:43 a.m.] andres Felipe: Asi es el orden correcto
[09:06:51 a.m.] andres Felipe: Hector seria de gran ayuda que pudieras encontrar ese manual de las clases y pasarmelo se lo agradeceria mucho
[09:07:04 a.m.] andres Felipe: gracias por su ayuda

xbase++ (cualificadores de acceso)

CLASS classA
      VAR varA                         // La visibilidad de esta variable es private como en java

      EXPORTED:
      VAR varB, varC                   // La visibilidad de estos metodos y variables son public static como
      METHOD methodA, methodB //en java

      HIDDEN:
      VAR varD, varE                   // Actualmente me encuentro explorando esto
      METHOD methodC, methodD          //


    ENDCLASS


miércoles, 12 de noviembre de 2014

django-admin.py no ejecuta

La solucion que le tengo ha este problema es que escriba antes python y, el archivo debe estar escrito con la direccion completa ejemplo: python C:\Python27\Scripts\django-admin.py ...

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:88)

Este error se esta produciendo al momento de cargar un archivo que de extencion jasper.

En primera medida el error no ocurre por que el metodo loadObject(file); reciba un null entonces

El problema aqui era de librerias descarguese las librerias (http://sourceforge.net/projects/jasperreports/) y meta todos los jars en el proyecto

jueves, 6 de noviembre de 2014

Instalar Emmet (antes zendcoding) en Sublime Text 2 (sin problemas)

Lo haremos de la forma más sencilla que es descargandonos o clonando el repositorio de github sergeche/emmet-sublime lo descomprimimos lo renombramos por Emmet.
Después nos vamos al menú Prefrerences/Browse Packages… de Sublime Text 2, se abrirá el lugar donde están todos los paquetes ya instalados y pegamos la carpeta renombrada como Emmet, reiniciamos Subime text 2.
A disfrutarlo se ha dicho \0/

miércoles, 5 de noviembre de 2014

django-admin.py startproject miniplataforma me abre un archivo

¿Por que ocurre esto? Mientras que las otras sentencias la escribe bien

Impresora GC420t no imprime en tira de tres stikers

El problema es que escribe las primeras dos izquierdas pero la tercera la imprime en cierta parte pero deja un espacio grande entre barras.

Presumo que debe ser las propiedades de la impresora (mas adelante lo veremos).

Vamos hacer una prueba con un código de barras grande de tal manera que podamos apreciar si el rango de impresión es correcto con respecto a la tira (bueno realmente no escribe ese espacio)

Vamos a mandar ha imprimir un código de barras grande con el programa que trae la impresora(ocurrió lo mismo)

Aunque podría ser que los rodillos que esten mal puestos

en preferencias de impresion le pusimos en tamaño del ancho le pusimos 10.8 pero nada, la cambiamos la altura que por defecto tenia 5.8 pero nada, en cofiguracion avanzada le cambiamos altura de intervalo 0.30 a 0.50 no sirvio, le cambiamos dezplazamiento superior a 0.10 pero nada, pusimos

Nos decidimos a utilizar una opcion del cd que trajo la impresora "ajuste de ancho de impresion"

Conslusion la impresora esta dañada...


Análisis de impresión de códigos de barras desde ireport

Para esta labor utilizaremos una impresora zebra GC420t, necesitamos imprimir codigos de barras como estos: "HUS 4P166003000500003", "HUS 4P166005000100029", "HUS 4P166005000100030". El espacio en que se imprimira es de 3.1 cm (el papel posee tres estikers que tienen etre ellos una distancia de 3 cm). El tipo de codigo es 128

Factores por los cuales no se ha podido generar codigos de barras legibles

1) La cantidad de ppp que posee la impresora en nuestro caso es de 203ppp esto puede ser importate pues al imprimir el codigo de barra en una impresara laser de mas ppp es cofigo era legible. fuente de la informacion de respaldo http://www.aprenda-tecnologia.com.mx/las-fuentes-en-el-codigo-de-barras-i/

2) Al momento de utilizar el programa que trae la impresora en el cd de los drivers el codigo de barra es generado optimo pero al momento de generalo en ireport con aproximadamente el mismo tamaño no es legible asi que podemos presumir que el problema puede estar en la configuracion del codigo de barras del programa generador

Nota: se miro que el puntos entre barras era 1 queriamos mirar las propiedades del que generaba ireport y encontramos en las propiedades del objeto una serie de items llamados quiet zone en este se ajustaba el espacio entre barras hicimos pruebas poniendole 1, 2, -1, 0.0 pero no logramos nada.

Ahora escojimos en ireport el barcode 120 barbecue y realizamos prueba (hagalo que funciona asi!!!)