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

#971
Es un error contínuo tolerar que un servicio explícito soporte otros servicios diametralmente distinto.

Si se usa el NFC para cosas como pagar, exponerlo ahora para cargar otros dispositivos (o el nuestro propio), simplemente va a exponerlos a prolemas de seguridad indirectos... aunque como siempre dependerá de la implementación hardware, nunca consideran problemas de seguridad, así que podrá asumirse que se dará el caso, complicado pero será posible, sin duda.

Es el mismo problema del cable de alimentación que sea a la vez el cable de datos y no disponer de ningún interruptor físico para discriminar 'solo carga-no datos', con lo que al final encontrar en sitios como aeropuertos enchufes para carga de móviles te hace desestimarlo o bien lo haces con el terminal completamente apagado y si hace falta hasta con la SIM retirada (para modoparanoia = max  :silbar: :laugh: :laugh:)
#972
Esto viene de lejos... hace años que recibo cada cierto tiempo correos de 'Fight for the Future', respecto del asunto. se han tumbado varios intentos de 'leyes' regulatorias, pero con cada una tumbada resurge otra que la remplace.
#973
No es más complicado hacerlo en un solo bucle, tan solo es cuestión de precisar más cálculos (tampoco muchos más), que la simpleza de dos bucles ofrece...

(nota: Estoy tomando como ejemplo el triangulo de la otra ocasión ya que es trivial modificarlo a cualquiera de las esquinas.
Igualmente la nomenclatura de: (derecha izquierda, superior, inferior) no tiene más punto que ponerse de acuerdo. Personalmente entiendo que acomoda más denominarla conforme a la esquina que ocupa al vértice del triángulo que conecta solo con ceros, y que para el ejemplo a continuación es: inferior-iizquierda).

Para entender el mecanismo subyacente hay que estudiar un poquito la matriz.
...y  atribuir algunos estados que nos permitan dar flujo al cálculo

Matriz: 0-35 ceros saltos  index ini
5 6 0 8 2 3 - 0  - 6          00 - estado de escape
0 4 3 9 0 0 - 1  - 5          06
0 0 1 5 3 4 - 2  - 4          12
0 0 0 5 2 0 - 3  - 3          18
0 0 0 0 7 0 - 4  - 2          24
0 0 0 0 0 6 - 5  - 1          30 - estado inicial
x x x x x x                   xx - estados de cambio
                         ancho + 1: estado de avance


Explicando la tabla...
- Lo obvio es que los ceros aumentan en uno con cada fila... en la columna fila se ha puesto una columna que lleva dicha cuenta. Una funcion podría simplemente contar cuando son 0 y devolcerá TRUE cuando sea el sumatorio de dicha serie. Aunque claramente es más ineficiente que devolver false tan pronto un valor no cumple la restricción.
- La columna saltos, indica cuantos hay que omitir tras recorrer los 0. Algo tangible es que 'ceros + saltos = ancho, pués por algo son los elementos en una fila.
- He añadido una última columna que señala los índices (de un array unidimensional) que suponen el primer elemento de cada fila.

En el algoritmo a continuación se empieza por el vértice que da nombre al triángulo (ver nota arriba), y recorre en diagonal (en el ejemplo) hacia abajo y a la derecha... Así he añadido algunos estados para terminar de entender...
El estado inicial es pués 30 : index = (size- ancho)
En cada ciclo aumentará: index += (ancho +1)
Cuando se alcanza un valor de index en los 'estados de cambio', justamente el enésimo valor que ocupa en esa fila (fuera de la matriz), es lo mismo que señalar la fila siguiente a la que saltar (pués es simétrico, considerando justamente como vértice del triángulo la esquina antedicha en la nota superior).
El bucle termina cuando alcanza el estado de escape, que para este triángulo será el índice 0.

...y ahora el pseudocódigo (que cualquiera puede traducir a cualquier lenguaje, ya que el problema no es un problema restrictivo a ningún lenguaje específico, es decir no es un problema de ningún lenguaje si no de algoritmia)...

Buleano = Funcion EsMTID(array byte Valores(), entero Ancho, entero Size)
    entero index
   
    index = (Size - Ancho)
    Hacer
        Si (Valores(index) <> 0) Devolver False  // *
        index = (index + Ancho + 1)
       
        Si (index > Size)      // conocemos la fila a la que saltar por el sobrante: (Index Modulo Ancho)
            index = (Size - (Ancho * (1 + (index Modulo Ancho))))
        fin si
    Repetir Mientras  (index > 0)
   
    Devolver True
Fin Funcion

* Sí, también reconoce correctamente el caso de una matriz de 1x1
#974
Se supone que la diferencia entre el tabaco de contrabando y el legal se remite solo a los impuestos que se pagan o dejan de pagar. No debería haber una diferencia apreciable en cuanto a que sea tabaco en sí...

Pudiera ser que simplemente se reempaque, es decir se compre tabaco barato y se cambie el envase para simular ser uno mucho más caro.

Si resulta que ni siquiera es tabaco (si no cualquier otra cosa aunque incluso esté mezclado), pués ya no solo se consideraría contrabando si no un delito sanitario. Pués aquello que se añada, no ha pasado controles de ningún tipo y puede ser extremadamente tóxico.

Desconozco con exactitud que medios utilizan para detectar las falsificaciones, pero mirando información en la FNMT (pues a fin de cuenta son de su manufactura):
https://www.sede.fnmt.gob.es/documents/10445900/10726212/tabaco_guia_tecnica.pdf
Todo el texto (17 páginas) es interesante de leer...

Si paras en el "IMPRESIÓN DE CÓDIGOS HUMAN READABLE", se llega a "La impresión de códigos human readable debe estar basada en los códigos UpUI(s)."
Hay dos códigos, uno para fabricantes (en la UE) y otro para importadores...(que tienen 29 y 30 caracteres respectivamente, son 4 campos 2+2+11 +14 y 2+2+12  +14). En las cajetillas este código aparece como texto encima del código QR.
Mirando en un bote de tabaco que tengo a mano, solo aparece la parte primera (3 primeors campos) que como suman 15 caracteres se puede asumir que es fabricado en la UE...

...leyendo todo en detalle podría generarse un programa que decodifique toda esa info, pero como no soy fumador, ni estoy interesado en el tema, paso de ello, pero ahí consta la info precisa para interesados... vienen detalles como la fecha...

Es más que probable que exista alguna aplicación que lea dicho código QR y arroje la info textual pertinente.
Yo en tu caso, solicitaría como mínimo a FNMT si como consumidor de tabaco, puedo acceder a alguna app para el móvil, un lector de QR para el código de las cajas de tabaco que ellos mismos proporcionen o hayan aprobado. precisamente para evitar adquirir prtabaco de contrabando sin controles. No te extiendas en detalles superfluos.
http://www.fnmt.es/web/fnmt/contacto
#975
Ok, te entiendo.

Si cuentas que el programa funciona correctamente de un modo pero no cuando tomas el mismo path, y lo pasas al shellexecute, las dos posibilidades más inmediatas son:
A - Problema con la redefinición del string pasado al shell execute.
B - Problemas de permisos sea del usuario o de la carpeta donde yace el fichero. Esto último e smás dependiente del S.O. que del programa, si el usuario toma los permisos adecuados o ejecuta el programa con permisos de administrador...

Incluso aún siendo esto último, por orden (si fuera el caso) procede examinar primero que el string recibido se pase correctamente a sehllexecute.

Seguiré leyendo tu mensaje previo para ver si aparece el código donde quede recogido dicha llamada y si aparece el contenido de uno de esos txt, donde conste la ruta, para dilucidar el posible problema.

...a la noche saco un ratito, lo reviso y te comento.
#976
Jamás recomendaría C ...para 'empezar'.

C es un lenguaje de bajo nivel, antes de poder sacarle provecho se tendrá un follón espantoso en la cabeza con demasiados detalles e imprecisiones volando en el aire sin saber a qué vienen.
Para lo mismo 'empezar', tampoco recomendaría ensamblador. Ensamblador debería ser el segundo lenguaje, pero no para aprender, si no para sondear, pues da una muy buena aproximación a la estructura de los procesadores, aunque luego sea diferente en cada plataforma, la base es la misma.

Desde Python, a Java, Perl, Ruby, Visual Basic (o incluso Pascal, que aunque esté de 'capa caída' para empezar en la programación es muy asequible). Todos ellos son lenguajes de alto nivel y asequibles para entender en un primer contacto de programación. Debería no profundizarse al comienzo, estudiar lo simple de varios de ellos y más adelante ver con cual se siente uno de forma natural más cómodo. Y tirar adelante con él.

Cuando se alcance un nivel medio-avanzado en al menos un lenguaje es cuando procede (si es el deseo), aprender (otros o) lenguajes más complejos, pues ya hay asumido una gran parte que es común a muchos lenguajes y básicamente lo que se hará luego es aprender las diferencias con otros lenguajes. A veces las diferencias se limitan a la sintaxis y a veces son tantas las diferencias que es casi todo un nuevo mundo a explorar como sucede con ensamblador y C... aunque a pesar de las diferencias notables todavía siguen teniendo en común con el resto de lenguajes una meta, y la formalización de lograrlo: la algoritmia.
#977
Simplemente olvídalo... y si había algún más que solo fotos de desnudos, da aviso a la policía para que lo investiguen.

Desde un punto de vista legal, pulsar un enlace no es ilegal... sim importar qué haya detrás de ese enlace.

Quién no ha puesto a descargar un peli or internet, y después que se ha descargado has ido a ponerla y resultó se runa peli porno???. A menudo un tema es ocultado bajo una descripción imprecisa o inexacta.

Pinchar en un enlace que ponga 'mujeres desnudas' no es ilegal, que luego resulten ser niñas y no mujeres, tampoco lo convierte (por solo ese hecho) en delito. Pero si intuyes algo ilegal, si que harías bien en pasar el enlace a la policía, no es preciso contarles toda esta parrafada... basta resumir en:

"Navegando por la web, he acabado en este enlace que muestra contenido que en mi opinión es ilegal por contener ....lo que sea el caso... les envío el enlace por si procede investigarlo".

Y ya... no le des más vueltas.
#978
Foro Libre / Re: Colores favoritos?
5 Mayo 2020, 16:14 PM
Depende de para qué...

No es lo mismo, elegir un color para las paredes de una casa, que para la ropa, que para...
Y no sé cual es el color 'Purupura'  :laugh: :laugh: :laugh:

En general me gusta el verde y según para qué el negro o el púrpura.
#979
No queda claro cuales son todas las restricciones.

La idea básica para lograrlo es la recursión del backtracking que provee prolog.
Dado que move(X), borrará alguna de las variables, el primer paso debería ser buscar los valores no repetidos en el estado final, y usar swap(X,Y...) al caso... determina la condición final de cuando se alcanza este semiestado es lo que te debe hacer pensar un poquito.

Y solo cuando se hayan completado esta submeta es cuando procede hacer los move(X) que fueren precisos. Not que por ejemplo para una entrdada: ... regs(A,A,A,A), R). no habría lugar a los swap, si no solo a los move, igualmente en una entrada como: ...regs(D,B,A,C), R). no habría lugar a los move, si no solo a los swap.
#980
Ya que el foro está de obras  ;D ;D ;D... pregunto:  :rolleyes: :rolleyes:
¿Se podría añadir un tema oscuro, pero oscuro más bien negro   >:D?...

Actualmente uso el 'dark theme', pero no termina de convencerme, se queda a medias  :silbar: :silbar:


(el darke theme es el último en esta imagen, que como se aprecia no son tan oscuros)...