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

#1851
Cita de: CalgaryCorpus en 22 Febrero 2019, 21:05 PM
Tiene cara de ser la parte entera de la mitad de la raiz cuadrada del numero.
Más o menos es así... puede  sumar o restar 1 según el caso, es decir según lo que dice si para 7 distancia es 2, para 1 distancia es 1, entonces debe sumarse 1...

Está mal dibujado, los cuadrados pares son las diganoles de las esquinas a la izquierda arriba y los cuadrados impares son las diagonales de la esquina abajo a la derecha...

d0 = int(int(sqr(n))/2) +1

Ahora bien, precisa algún ajuste pués difiere... yo toda la vida lo he visto dibujado empezando con el 0, así los cuadrados pares son diagonales al 0, y los cuadrados impares diagonales al 1...

...por otro lado como es la distancia Manhattan lo que se pide y no la euclidiana, no basta con una simple fórmula, pero para los cuadrados (las 4 diagnales) es esta:
d1 = int(sqr(n)) +1

...y el resto de casos debe resolverse con pequeños ajustes... conociendo los valores al este, oeste, norte y sur (según cada caso) entre el cuadrado menor que encaja y el siquiente que cubre al número pedido.

Dicho de otro modo, hay que calcular de qué cuadrado queda más cerca de 'n', para saber porque lado queda afectado (vertical/horizontal al centro) hasta el que tiene que llegar, entonces la fórmula general sería... Desde ese punto 'p' al N,E,S,O  (N=norte, E=este, etc...) el valor es:

Si queda más cerca del cuadrado mayor que 'n':
    d2 = (d0 + (n-p))
Si queda más cerca del cuadrado menor que 'n':
    d2 = (d0 + (p-n))
Nótese que igual que d1 es la distancia para las diagonales d0, los es para los valores en N,E,S,O...

Así que dejo a tu esfuerzo calcuar 'p'... que con logaritmo 2 resulta fácil calcular...

#1852
Yo veo bien en principio que creen una red para uso gubernamental, de hecho me parece que todos los países con la suficiente tecnología deberían hacerlo.

Sin embargo, tengo la impresión que esto va por otros derroteros, lo expuesto es la excusa y la verdadera motivación sería simplemente el control férreo de sus habitantes, a imitación de lo que China hace con los suyos.
Es más, probablemente no fuere una red alternativa, si no un nodo interno, del que para manejarse por internet, fuere obligatorio estar conectado en todo momento. Así ' cuaquier hijo-Puting en el sillón del Kremlin', puede decidir en todo momento si espiar todas las conexiones de éste o aquél, o denegar el servicio a cualquiera (hacia fuera o hacia adentro)...
#1853
Citar"...los administradores de contraseñas no tienen que ser perfectos, sólo tienen que ser mejores que no tener uno..."
mmm... el mejor administrador de contraseña es tu propia memoria.

Que duda cabe que es un problema, que cada sitio te reclama unas credenciales y la gente por simplificar cae en la tentación de usar las mismas para todas o casi todas partes.
Es bueno recordarles que igual que la puerta de tu vehículo tiene su llave y es distinta de la de su casa, etc... igualmente cada contraseña para cada sitio debe ser única...

Los gestores de contraseña como mínimo deberían cerrarse al instante de darte la contraseña que buscabas, y permanecer así hasta que se solicite una nueva... además en caso de ser invocado reiteradas veces en poco tiempo deberían avisar al usuario, igualmente no deberían atende rpeticiones bajo demanda (modo comandos), sino exclusivamente a través de interfaz, para que el usuario siempre sea consciente de que está abierto, por si no fue él, por si existe algún ipo de intrusión. En fin, para presumir de guardar secretos, deben conportarse 'fieles' al usuario en todo momento, no 'fieles' a los malvados intrusos...
#1854
Es un actor porno, de sádico que yo sepa no tiene nada... de hecho nunca me ha parecido un desalmado.

Sobre lo que digan las 'noticias' sobre tal o cual persona famosa, quien sabe cuanto hay de cierto y cuanto de invento...

Él mismo, ha sufrido abusos sexuales. Yo recuerod haberle oído narrar en televisión como con ocasión de caer enfermo e ir a un hospital algún médico que era gay abusó de él tras reconocer quien era, y lo acabo denunciando dando la cara. Vamos que creo que está más que sensibilizado con lo que es tener sexo no requerido como para acusarle de cosas sin pruebas...

Años antes también contó como sufrió una rotura del pene, que lo tuvo algún que otro año en precario y preocupado no ya solo por su 'vida sexual', si no hasta por su propia salud y su futuro profesional.
También estuvo en otra ocasión al borde la muerte más vivo que muerto y tuvo que volver a aprender a andar y su madre volver a lavarlo como cuando era un bebé.

En fin, ha demostrado en demasiadas ocasiones que está perfectamente humanizado.
#1855
Java / Re: Android - Dibujar: texto
20 Febrero 2019, 15:28 PM
Parece mentira que a esta altura, no sepas el significado de 'expresión'.

x = 5
x = (x + 5)
x = ((x + 5) * b)
x = ((x + 5) + (b and 1))


Todo son expresiones, hay una única asignación, pero es la última, previamente debe resolverse cada operación de la expresión, solo entonces se hace la asignación final.
En una función, un parámetro es lo mismo que en una asignación... si el parámetro fuera x, da lo msimo hacer:
x = ((x + 5) + (b and 1))
suma = sumar(20, x)


Que hacer:
suma = Sumar(20, ((x + 5) + (b and 1)))

El segundo parámetro es una expresión, cualquier variable por sí misma también es una expresión...Las formas típicas en que varias constantes se aúnan es porque cada constante típicamente afecta un solo bit (o más)
un sencillo ejemplo con las características d eun texto:
enumeracion FormatoTexto
    FORMATO_NEGRITA = 1       // 00000001
    FORMATO_INCLINADO = 2    // 00000010
    FORMATO_SUBRAYADO = 4  // 00000100
    FORMATO_TACHADO = 8     // 00001000
    FORMATO_COLOR = 16      // 00010000
    // ...
fin enumeracion

string texto = "Lindo pulgoso"
entero lineaX = 23
FormatoTexto ft = FORMATO_NEGRITA or FORMATO_SUBRAYADO  // 1 or 4 = 5

Escribir(texto, lineaX, ft)


En este otro ejemplo, esta llamada es prácticamente equivalente a la anterior... vale igualmente no poner variables, sino los valores constantes...
La variación rea a tener en cuenta es tan solo que debe tenerse en cuenta que en caso de que sean parámetros por referencia, se pierden valores que se dieren de vuelta. Y por tanto si se precisan tener de vuelta valores cambiados, deben pasarse variables y no los valores (constantes)...
Escribir("Lindo pulgoso", 23, FORMATO_NEGRITA or FORMATO_SUBRAYADO )


#1856
Cita de: doctorman en 19 Febrero 2019, 01:06 AM
... mas bien porque el pueblo de Venezuela no tiene armas, los grupos armados como policias y militares si apoyan al narco-dictador ...
Esto me recuerda cuando el de 'Podemos' (Iglesias), lo primero que solicitó cuando las elecciones y los pactos y tal, eran las carteras de defensa e Interior, es decir: militares, policía e inteligencia... nada que ver con lo esperado por quien cacarea por los 'desfavorecidos', como podría uno esperar: agricultura, sanidad, Seg. Social...
#1857
...mmm pués yo (si fuera juez, antes de adminitrlo como demanda) creo que  :silbar: :silbar:  :silbar: primero tendría que demostrar que no fue consultado sobre el asunto...  :laugh: :laugh: :laugh: que no se 'acuerde' no es problema de los padres.


p.d.: supongo que este hombre lo que trata de decir es que la gente de su país son unos inconscientes, que prefieren tener hijos aún sabiendo muchas veces que se morirán de hambre o que están condenados de por vida a la miseria...
En La India, mandan (todavía hoy día), más los 'valores de las costumbres' que la lógica mundana...
#1858
Java / Re: varios try catch en un mismo código
19 Febrero 2019, 14:04 PM
La forma de optimizarlo es parametrizarlo en una función, que se invoque para cada consulta que se precise....

string = funcion Solicitar(string msgPeticion, entero minSize, entero maxSize, buleano soloDigitos, ...)
   buleano ok, rep = false
   string Salida = ""

   Hacer
       mostrar(msgPeticion)
       salida =PedirEntrada
       
       Si ((minSize >0) o (maxSize >0))
           Si (minSize >0)
               si (salida.length < minSize)
                   mostrar("error, debe tener al menos" + minSize + " caracteres...")  
               fin si
           fin si
           Si (maxSize >0)
               si (salida.length > maxSize)
                   mostrar("error, debe tener como máximo" + maxSize + " caracteres...")
               fin si
           fin si
       Fin si

       Si (soloDigitos = TRUE)
           rep = false
           por cada caracter  en salida
               Si (caracter <> digito)
                   mostrar("error, solo se permiten dígitos...")  
                   rep = TRUE  
                   salir del bucle for
               fin si
           Siguiente en bucle  
           si (rep = False)
               OK = TRUE  
           fin si
       Sino
           OK = TRUE
       Fin si  
   repetir mientras (ok=False)

   devolver Salida
fin funcion



Llamada de uso de la función...

string DNI = Solicitar("Ingrese su DNI", 8, 8, TRUE)  //se solicitan 8 caracteres y deben ser todos dígitos.
objeto.setDNI(DNI)


Algo que no haces correctamente es usar bloques 'Try Catch', alegremente... dichos bloques deben usarse para interceptar errores no tratados en el código (por ejemplo intentar acceder a una unidad de solo lectura con intención de escribir, tu no puedes evitar que si pretendes escribir un fichero el usuario te derive a una unidad de solo lectura, o bien si pero con demasiado código, un bloque try catch, resuelve mucho código en una simple intervención)...pero no para errores para los que precisamente estás interceptando...

Máxime considerando que la interacción con el usuario no se puede considerar un error: si le pides x caracteres, y él los escribe, que tú no los aceptes, no implica un 'error' implica que no se ha validado la entrada... En resumen no fuerces un error inexistente, no ganas nada con ello, excepto complicarte las barbas innecesariamente.

Los bloques Try Catch, existen para intentar salir adelante con errores no interceptados (porque quizás fueren tantos y tan diversos que "sería infinito el código para sumergirse en una aventura", así un bloque Try Catch, permite resumir toda esa aventura en un 'si falla algo dame pistas y si fueran ciertos simples y conocidos vemos de solventarlo... y seguir adelante en vez de dar por terminado el programa.
...pero vamos el error más grave que cometes, es inmiscuir al usuario con errores, como si él mismo fuera un programador o como si tuviera que saber determinados detalles que ni le van ni le vienen. Tu solo le nformas de lo que precisas 'dame el DNI', y si contiene caracteres ilegales, le sueltas un 'repite, porque hay caracteres extraños y solo debe tener dígitos'.... como es una simple comprobación que tienes que hacer si o sí, conoces el problema y entonces el bloque try catch, resulta usado en abuso.

El programador todavía debe generar errores, en situaciones donde él mismo u otro que utilice el componente que has realizado, genere rsultados erróneos. Por ejemplo, si creas un objeto que solicite una entrada al usuario y la deuelve sin procesar, y dicho objeto tenía un parámetro de 'solo dígitos', está bien que generes un error para que el objeto que lo reciba sepa que debe tratarlo, así el objeto que lo recibe puede mostrar el mensaje oportuno al usuario y volver a solicitarlo, o si le es posible ignorarlo, seguir adelante...
...por ejemplo, supongamos que se pide el dni, y el usuario escribió: 88555222H se soluciona el problema si se retira la 'H', o incluso se le podía preguntar: confirme si es éste el numero correcto: 88555222 sin la 'H', que es el carácter no válido, otro ejemplo: 88sd@45, como hay que eliminar más de 1 carácter y sigue sin tener el largo esperado de dígitos, procede mejor solicitar que se ingrese de nuevo?).


Forzando el mismo pseudocódigo previo, como 2 objetos distintos, donde el primero es un servicio que utiliza el segundo... que ahí si tendría sentido un try catch.

string = funcion Solicitar(string msgPeticion, entero minSize, entero maxSize, buleano soloDigitos, ...)
   string Salida = ""

   mostrar(msgPeticion)
   salida =PedirEntrada
   
   Si ((minSize >0) o (maxSize >0))
       Si (minSize >0)
           si (salida.length < minSize)
               disparar error SizeIlegal
               //devolver error  el código sale desde la línea previa, es equivalente a devolver el error.
           fin si
       fin si
       Si (maxSize >0)
           si (salida.length > maxSize)
               disparar error SizeIlegal
               //devolver error  el código sale desde la línea previa, es equivalente a devolver el error.
           fin si
       fin si
   Fin si

   Si (soloDigitos = TRUE)
       por cada caracter  en salida
           Si (caracter <> digito)
               disparar error CaracterIlegal
               //devolver error el código sale desde la línea previa, es equivalente a devolver el error.
           fin si
       siguient en bucle  
   Fin si  

   devolver Salida
fin funcion


Lo previo sería el código de una función dentro de un objeto, se ve que es casi identico al previo, excepto que no está en un bucle, e intercepta dos tipos de errores, que comunicará al objeto cliente.

Llamada de uso de la función...

Do
   Try
       string DNI = servicio.Solicitar("Ingrese su DNI", 8, 8, TRUE)  //se solicitan 8 caracteres y deben ser todos dígitos.
       objeto.setDNI(DNI)
   Catch (excepcion)
       Si (excepcion= SizeIlegal)
           MostrarMensaje("debe tener 8 caracteres, ni más ni menos")
       OSi (excepcion= CaracterIlegal)
           MostrarMensaje("Solo debe contener dígitos")
       Fin si
   End try
Loop while excepcion



Como puedes ver ambos códigos son muy similares... pero hay claras diferencias... en el primero, tú controlas todos, porque está todo en el mismo objeto, conoces los posibleserrores, porque sabes lo que eseras, luego no proceder generar errores.
En cambio en este segundo ejemplo (es básicamente lo msmo que el previo), la función 'Solictar' yace en otro objeto distinto de tú código, al que tu invocas... aquel método, simplemente genera  un mensaje bajo ciertas condiciones y está capacitado para arrojar un error si no se cumplen, pero allí a diferencia del ejemplo previo, no tiene un bucle... quien sabe si el programador quisiera darle al usuario la opción de abortar?... en cambio tú ahora en tu código si debes tratar las excepciones, pero nota que las excepciones se dan de cara al código, con el que el programador debe lifdiar, no al usuario...

En fin, la línea es delgadita, sibilina, pero es importante percibirla con clardad. Repasa cuantas veces sea ambos códigos con los comentarios hasta que percibas claramente la diferencia entre ellas y el porqué del asunto.



P.D.: Nota por último, como lo importante de dicha función (sobre otro objeto) es que luego permite simplificar enormemente la operatoria de verificación... simplemente haces una llamada y verificas las posibles excepciones... (si hubiere muchas más, sacas un mensaje genérico sobre como se espera que sea lo correcto), pero no precisas hacer para cada ppeticion, DNI, nombre, Calle, Número de calle o piso, etc... toda esa operatoria, que sería mucho código. Además de más breve, resulta mucho más legible, porque la propia función 'Solicitar' queda encapsulada en otro objeto...
Nota también que para atrapar los diferentes aspectos en que pudieran incurrir todos esos mensajes deben ser parametrizados y tratados en la funcón, yo solo he puesto de ejemplo el tamaño mínimo y máximo de caracteres y en que se permitan solo dígitos... pero habrá más casos.
#1859
Que duda cabe que las tabletas con android y tal resultan muy útiles, pero aún es prematuro aventurar que remplacen en todo a un portátil.

Para usaurios que solo naveguen o jueguen, miren correos y chorradas así, vale... para el resto no les basta.
- De entrada un gran limitante es el tamaño de la unidad de almacenamiento. Hoy día prácticamente ningún portátil viene con menos 1Tb. las tabletas traen hasta 64Gb. (en general, aunque ya las hay con 128, eso sí a precio astronómico). En esto siempre se curan en salud acudiendo a la nube y los servicios gratuitos, como si fuerna la panacea del almacenamiento definitivo. ...pero es una solución a cambio de inseguridad. Un fichero inútil, da igual donde lo guardes, aunque se pierda. Algún archivo que para ti es insustituíble (como fotos hechas durante unas vacaciones con tus hijos, pareja, uel contrato de un negocio, etc...), no puedes permitirte el lujo de perderlas, ni tampoco de que un problema en la nube se las cepille o bien que sean 'asaltadas' en un robo de datos... mejor en tu disco duro en tu casa... Cuando logren convencer a todo el mundo, de 'la nube', ésta dejará de ser gratis y pagaremos anualmente por dicho almacenamiento, más de lo que ahora te cuesta 1 disco nuevecito de 3-4 Tb. que te puede durar 10-20 años.

- La importante conectividad con toda la panoplia de puertos que ofrece un portátil, tampoco es igualable por una tableta android, de hecho muchas veces algunas tran un puerto USB, y luego no funciona con 'todo', o bien debes recurrir a  engorrosos cableados (por tema de diversidad de conectores).

- Cuando simplemente vas a redactar un hola... pués da igual escribirlo con un dedo o dos... cuando tienes que redactar horas al día, un teclado es insustituíble (al menos hasta que el reconocimiento de voz sea universal y prácticamente infalible). Por lo mismo, los editores de textos en PC, siguen estando a siglos de ventaja respecto de los editores para una tableta. En ese caso el depliegue de opciones, se vuelve cansino trabajarlas con el dedito, en tanto el ratón impera en rapidez y el diseño del menú en claridad (aunque esto es más cuestión de diseño que de otra cosa).

- Finalmente, los programas con chorrocientas cosas... resultan claramente más intuitivos en un PC/portátil, que en una tableta o móvil equipado con un Android.

...y si al final a la tablet, le acabas añadiendo un teclado, un ratón etc, etc (como se sugiere en el artículo)... entonces tienes un 'portátil' barato... igualas algunas prestaciones pero no todas.

En fin, el que escribe ese artículo, creo que lo redacta más desde su visión personal que desde una perspectiva neutral. A los portátiles aún les queda vida por delante para poder decir que hayan sido igualados por una tableta Android...

Por otro lado, no hay que olvidar que los propios portátiles cada vez pesan menos, por lo que es de asumir que muy probablemente de aquí a una década, se habrán fusionado a base de acercarse una tecnología a las características de la otra y viceversa. Lo deseable (desde mi punto de vista), es que acaben así por confluir en un punto donde se disponga de las mejores prestaciones sin renunciar a ninguna, porque remplazar un portátil por una tableta Android es eso... renunciar a mejores prestaciones a cambio de ergonomía...
#1860
No sé a qué clase de confusión te refieres... más bien tu mensaje parece que iría en otro hilo.

Veamos, si yo solo te dejo poner 10 contraseñas por segundo, o sabes o no sabes la contraseña para entrar... si no la sabes no entrarás en 100 años.

Luego si tu usas fuerza bruta, o usas cualquier otro método, el tiempo que te lleve es independiente. Si no usas fuerza bruta el tiempo que te lleve conseguir la cotraseña es irrelevante al sistema técnico de verificación de la contraseña y por ende, el problema no atañe la propia contraseña a lo sumo a la forma de proteger la contraseña.

Quiero decir, que si tomas la contraseña de un papel, de la cartera que alguien tiene en su bolsillo el tiempo es básicamente nulo, aunque la contraseña sea de 800 caracteres... entras.
Convierte eso a las contraseñas de 800 caracteres en inútiles?... el tiempo que tardeas en birlarle dicho papel de la cartera, cuenta?. Para mi ni lo uno ni lo otro forma parte de la consideración y por tanto no tiene validez alguna para mi premisa.

Entonces o no has entendido lo que yo decía más arriba o lo que escribiste tenía como destino otro hilo.