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ú

Mensajes - Serapis

#1411
Java / Re: problemas con mapeo de objeto
31 Julio 2019, 17:59 PM
Te da la traza completa del error. ...con toda la pila de llamadas...

...tu debes llegar hasta la llamada que está en tú código, las llamadas internas, solo serán útiles cuando exista un error en las librerías intermedias o incluso en el punto final en el propio compilador... pero vamos el 999 de las veces será un error en tu código, luego localiza en la pila de llamadas el nombre de la función en tu código... puede haber varias si una llamó a otra parte y aún no ha devuelto la llamada (eso es lo que la pila de llamadas, llamadas aún sin devolver).

No siempre localizas una función de tu código, caso típico de cuando se inicializan componentes que se dan antes de empezar a tratar tu código. Así por debajo están los 'resources', cuyo código automático de carga queda exento del programador en muchos lenguajes, pero claro si luego hay errores en ellos, no saben como solventarlos... todavía puede lograrse ver algó de tu código en esa parte,...c en el ejemplo seguro que reconoces esto:
INFO: HHH000221: Reading mappings from resource: aplicacion/hibernate/mapeos/Mueble.hbm.xml
Con lo que básicamente, con los siguientes mensajes (Error parsing XML (40)), básicamente ese fichero debes mirarlo de nuevo y arreglarlo...

Si bien la falta de información de errores lleva a que uno no sepa donde ni cómo localizar el error, ofrecer una traza completa, puede desbordar por exceso de info que no se sabe como tratar...

- Lee: Initial SessionFactory creation failed.org.hibernate.InvalidMappingException: Unable to read XML
Exception in thread "main" java.lang.ExceptionInInitializerError
- Luego en: Caused by: org.hibernate.InvalidMappingException: Unable to read XML
- Finalmente en: Caused by: org.xml.sax.SAXParseException; lineNumber: 44; columnNumber: 39; El contenido del tipo de elemento "class" es incompleto, debe coincidir con ...*

* Ahora te da info del compilador (muy generalizada). Las opciones son tantas que  no resulta apto para quienes no han procurado meterse con la gramática del lenguaje a fondo (pasalo por alto y céntrate en el xml, que te remarcaba en negrita párrafos arriba).
"(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,fetch-profile*,resultset*,(query|sql-query)*)".
   
Un problema de la mayoría de compiladores es que parecen incapaces de aislar correctamente los errores de los 'caution/warning' por lo que al mezclarlos juntos, ayudan a confundir aún más al programador... que no sabe donde empieza lo uno y acaba lo otro, especialmente si hay más de un error y peor aún si encima se trata del mismo que afecta a varias partes.
Aún así en este caso, date cuenta como a pesar de la verborrea del compilador cada línea viene precedida por:
INFO <----- (da igual).
WARN <------ (en este momento da igual)
ERROR <----- (es donde importa fijarse en qué error marcan, aunque el error se detecte ahí, no siempre ni necesariamente se produce ahí, por lo general es más arriba/ omás abajo (conforme al orden en que el compilador proporcione la pila de llamadas).
#1412
Básicamente es una operación puramente matemática... Los niños aprenden a sumar y restar a los 5 o 6 años...

Por otro lado, es algo estúpido solicitar un mismo datos a una persona camuflado de dos formas distintas, dando lugar a error en una de ellas...
Es como preguntar a alguien Nombre completo...
Y luego Nombre completo de tus padre y madre y solo nombre  de todos sus hijos... y solo  para validar que el primer apellido del padre + el primer apellido de la amdre + el nombre de algún hijo coincide con el 'nombre completo'.

Puesto a ser torticeros, podemos hacer lo mismo con cada dato solicitado:
- indique su Estado civil: (soltero/casado/separado/divorciado/viudo)
Y luego le preguntamos el
(deje libre lo que no proceda)
A - nombre de su novia:
B - nombre de su esposa:
C - nombre de su difunta esposa:
D - nombre de su ex-mujer:

Así si en estado civil puso 0 (soltero), luego debamos validar que no haya nada escrito en las 4 siguientes casillas (A-D).
Pero si puso 1,2 (casado o separado), luego debamos comprobar que B está marcado y no el resto.
Pero si puso 3 (divorciado), debamos comprobar si marcó además de B, D y ninguna más.
O si marcó 4 (viudo), debamos comprobar que admeás de B, marcó C y ninguna más...

Igualmente se puiede embrollar con cualquier campo haciéndolo dual o múltple como el caso del estado civil... pero cúal es el propósito de todo ello?. Si es complicarlo por complicarlo, que s ehaga con todo. si es verificar libre de errores, es preferible solicitar que se ingrese dos veces el mismo dato (sin permitir copy/paste).
Es fácil que todo el mundo se acuerde de su fecha de nacimiento, pero a veces en un instante dado y según el día/mes actual, es fácil que de repente uno no recuerde  qué edad tiene hay muchos que les exige 'hechar cuentas'...

En cualquier caso, es pura y simple matemáticas. Resta años que dice tener del año actual y debe arrojar el de nacimiento, pero hay que considerar meses y días con el actual...
...por lo que es fácil incurrir en error pués cuando a uno le falta apenas una semana para cumplir años, por ejemplo le parece más oportuno o exacto decir que tiene ese año de más, que no. Pués al fin y al cabo tendría (por ejemplo 23'98 años), pués redondenado serían 24 aunque le falte una semana, técnicamente si no los ha cumplido tendrá solo 23 ... sin decimales.

En fin cosas de las estupideces humanas que tanto abundan... Si tienes opción pide fecha de nacimiento y olvida 'edad', la edad cambia con el tiempo (incluso al día siguiente podría indicar otra edad), la fecha de nacimiento es inalterable, es la que es...
#1413
De entrada este no es el for para VB.NET si no el de VB 6.0, peor bueno, ya lo moverá algún admin si se percata...


Creas una clase y que sea la clase la que haga todo el trabajo de lectura.

La clase ha de tener una única instancia, luego... debe ser creada en un módulo (de forma privada), y tener una propiedad pública para obtener acceso a la instancia. Así cada formulario logra acceso a la misma, previo registro.

El registro de cada formulario sobre la clase, es para identificar cuantos consumidores de datos tiene la clase y si es posible, derivar el contenido únicamente al consumidor final. Esto es, la clase debe mantener una colección de objetos a los que lanzar algún evento.

...de modo informal y rápido (en pseudocodigo):


' Esta sería la clase de la que se crea una sola instancia y que realiza todo el trabajo de lectura del puerto... e informa a los consumidores 'registrados'.
' Esta clase debe declararse como pública pero no creable desde fuera.
Clase SerialRead

   coleccion de clsInformation colInformation
   Evento DataReceived(bytes() Data)

   buleano = funcion Registro(c tipo clsInformation)
      si colInformation.Contains(c)= false luego
          colInformation.Add(c, c.Id)
          devolver TRUE
      fin si
   fin funcion

   ' digamos que esto representa la lectura de datos del puerto...
   sub SerialReaded(data)
       si data.Id <> "" luego
           clsInformation c = colInformation.Search(data.Id, encontrado)
           Si encontrado=true
               c.Data = data    ' al asignar los datos, dicha clase dispara su evento... Datareceived, etc...
           sino
               ' parece que ninguna clase REGISTRADA fuera el destino de los datos leídos???
           fin si
       sino
           ' los datos leídos no contienen info del destino de los mismos.
           ' en tal caso decidir que hacer, una posible solución es asumir que es para todos (o para ninguno, claro)...
           'Por cada c en clasInformation   ' se informa a todos... ya cada uno debería saber si debe o no fitrarlo.
           '    c.Data = Data
           'siguiente

           ' pero para informar a todos es mucho mejor usar en evento de la clase que es instancia única. así informa a todos de una vez, (es imposible saber el orden, si el orden de llamada es importante, usar mejor la forma del bucle.
           DispararEvento DataReceived(data)  
       fin si  
   fin sub

   buleano = Funcion Desregistrar( string Id)
       colInformation.Search(Id, encontrado)
       Si encontrado luego
            colInformation.Delete(Id)
            devolver TRUE
       fin si
       ' Si no se precisa devolver info sobre su eliminación, puede invocarse duirectamente  'delete', si existe se elimina y si no no, como no hay que informar del resultado sobra el resto del código.

        ' Opcionalmente si una clase así consume muchos recursos podría ser autoeliminada cuando no tenga consumidores registrados... ya con nuevos registros se creará si no existe.
       'si colInformation.Count = 0 luego ME = nada   ' Me en el sentido de VB otorga a Me, la referencia al objeto donde se está.  ...el equivalente para los 'C'dores y 'Javaneses' es 'This'...      
   fin funcion
fin clase

Esto sería básicamente el código de la clase que opera leyendo... es decir mantiene una colección donde registra consumidores a los que informa debidamente cuando lea... además de forma asíncrona, esto es cuando se lean... sin las exigencias de las prisas 'dame algo si lo tienes'... (cuando llega se entrega y al destinatario adecuado si es conforme que pueda ser así).

OJO: No confundir colInformation con las instancias de clsInformation, ni sus métodos.
colInformation es una clase de tipo colección, que como cualquier colección tendrá los típicos métodos Add, Delete, Search, Contains, etc... vamos para añadir, eliminar y buscar. Y al menos que pueda buscarse por un string o un entero, luego dicha clase no requiere más descripciones, son genéricas.
En cambio las instancias de clsInformation son otro objeto distinto, que se describe más abajo y su única relación con colInformation es que dichas instancias son guardadas ahí, lo mismo que un array de bytes guardaría bytes, pero el byte y el array son dos tipos distintos.

Por su parte el módulo sería más o menos crear la única instancia de la clase y entregarla a cada uno que la solicite.
Su único cometido es que como nadie fuera de l ámbito d ela clase puede crear instancias de la clase, creara él, una única instancia y entregar referencia de la misma a qien la solicite si pudo registrarse.

Modulo Repartidor
   privado SerialRead cLector

   SerialRead = propiedad get Lector(clsInformation ci)
       Si cLector no existe luego
           clector = nueva SerialRead
       Sino
           si cLector.Registro(ci, ci.Id) = false devolver nada  ' si no pudo registrarse es porque ya está registrado.
       fin si
       devolver cLector
   fin propiedad
fin modulo


La clase clsInformation tampoco tiene mucha miga, es sólo una clase con 1 constructor, y 2 métodos/propiedades y un evento. Cuando se reciben datos dispara su evento para entregarlos a quien creó su instancia.
La otra propiedad (Id) identifica únivocamente a una instancia (solo es preciso si la clase lectora está capacitada para determinar el destino de los datos. Y por tanto, si procede quizás el ID, en vez de ser aleatorio debe tener una cadena fija establecida desde e lprincipio (incluso desde código) conocida por todos, esto básicamente una enumeración...).

clase clsInformation
   string s_Id
   Evento Datareceived(bytes() Data)


   Propiedad Set Data(bytes() d)
        DispararEvento DataReceived(d)
   fin propiedad

   String = propiedad Get Id
        devolver s_Id
   fin propiedad

   ' Cuando se crea una instancia debe asignarse un identificador en lo posible único...
   funcion Nuevo(string IdName)
        Si IdName.Lenght = 0 luego IdName= RandomString(16 chars)
        s_Id = idName
   fin funcion
fin clase


Finalmente tus formularios tendrían un código similar a:
(vamos lo necesario para tratar con los objetos desceritos antes)

Class formulario
    clsInformation mInformation       enganchado a sus eventos
    serialRead mRead                      enganchado a sus eventos

    funcion Nuevo
        Hacer
            ' crea una instancia de dicha clase y le asigna el id que usará.
            '   parte del id, es aleatorio, para evitar coincidencia con existentes y en caso contrario nuevos reintentos, podrían dar positivo...
            mInformation = Nuevo clsInformation(randomstring(8 chars) + form.name)
            mRead = Repartidor.Lector(mInformation)    
        repetir mientras (mRead = nada)
    fin funcion

    Funcion Terminar
        mRead.Desregistrar(mInformation.Id)
        mRead = nada
        mInformation = nada
   fin funcion

   ' este evento se dispara cuando éste objeto sea el único consumidor destinatario d edichos datos (si así es preciso y está establecdio en la clase lectora, claro)
   funcion mInformation_DataReceived(bytes() Data)
      ' lo que tengas que hacer con los datos
   fin funcion

   ' este evento se recibirá cuando los mismos datos sean enviados a todos los destinatarios.
   funcion mRead_DataReceived(bytes() Data)
      ' lo que tengas que hacer con los datos
   fin funcion
fin clase


...seguramente al 100% no podrás aplicarlo, ya que has sido parco en descripciones, es imposible acertar a darte la solución que se adapta al 100% sin cambios con tus necesidades.
Sin embargo ofrece la suficiente info, como para entender que cambios son precisos hacer para adaptarlo a tus necesidades.
El resto es trabajo tuyo...
#1414
jajaja... La gente parece estar harta de familiares y vecinos chismosos, y para remate total, admiten en sus casa al chismoso a distancia, que lo va a recoger todo (no sabrás ni qué), se lo contará incluso a desconocidos que ni les va ni les viene, y para colmo, tú no podrás recoger sus chismes... para 'contraatacar'.

No acabo de entender por qué absolutamente nadie mete voluntariamente un espía en su casa y menos entiendo que la ley lo permita (incluso aunque un G171P07745, lo tolere).
#1415
Busca en el foro... hace no muchos meses, salió el tema...

Sin ir más lejos, lo he encontrado rápido:
https://foro.elhacker.net/net/simulando_barra_de_progreso-t493070.0.html
#1416
Crea una web y pon publicidad luego publica un mísero programa o película de ellos y se te caerá el pelo en la cárcel...

Mientras no haya ánimo de enriqueciemiento, descargar pelis no tiene más consecuencias en España.

Ahora piratear programas es otro cantar... No digas tu nombre-alias, ni cuales son... quédate así protegido en el anonimato.
#1417
Cita de: Tachikomaia en 27 Julio 2019, 07:51 AM
Tampoco yo lo tengo claro, pero si has visto los links habrás visto que no es sólo cosa mía.

El tema es que en algo que estaba haciendo a las variables que no sean candidatos les llamaba V1, V2, etc, a los candidatos C1, C2, etc, y pensando en dar una abreviación a las constantes (que no sean candidatos) para no confundir pensé en llamarle K a los candidatos, pero entonces me acordé o tuve la sensación de que la K la usaban para constante.
Es algo muy específico... no generalizado en la comunidad d eprogramación.

Es típico que los seguidores de un lenguaje específico tengan ciertas costumbres arraigadas, pero que se quedan recluídas dentro de ese lenguaje (sistema).

Lo ideal es establecer ciertas 'normas' para el nombrado de las variables/constantes, así aunque pase mucho tiempo, solo con ver el nombre puedes reconocer su funcionalidad, tipo y rango de valores con solo leer su nombre sin necesidad de tener que recurrir a la declaración de la misma (de la que posiblemente no se aportó comentarios, porque al momento de crearlo, parecía demasiado obvio (...mucho tiempo adelante no lo resulta tanto)).
Con esto no quiero decir que te inventes tus 'normas', sobretodo porque pareces abocado a complicar las cosas en exceso innecesariamente... hay ya varios sistemas no formales, pero que como mínimo te pueden orientar... hoy hay muchos suscritos al Camel Case (Upper o lower, yo soy más de Upper)...
https://en.wikipedia.org/wiki/Camel_case
#1418
Supongo que será el mal perder de algunos unido al anonimato de la red...
#1419
No sé de donde sacas eso...

A una constante lo mismo que a una variable le puedes dar el nombre que te dé la gana... si bien lo razonable es darle un nombre que signifique aquello a lo que representa...

Con el tiempo puede suceder que una persona acostumbre a usar determinados nombres para determinadas cosas. El lector, simplemente debe entender que en tales casos no importa el nombre si no la explicación que acompaña.
#1420
Cita de: string Manolo en 26 Julio 2019, 13:43 PM
En ciertos países llevan apuñalando por la calle ... desde hace siglos. No respetan a los de sus países y los matan, van a respetar a los de los nuestros...
Y sin ser homosexuales...