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

#1091
Mal título para el artículo... como de costumbre un idiota de turno, quiere ganar visitas usando títulos exagerados y sacados de contexto.

La palabra 'propagar' se usa inadecuadamente. La correcta es 'contagiado' y el título exacto sería:
"
Como un hombre que regresó a España tras las vacaciones con su familia se contagió en Francia sin pisar China"
#1092
Veamos de entrada si tienes una cifra de 0 a 99, es decir de dos cifras, basta con usar un tipo de datos byte.

Segundo, obtener cualquier dígito de un número es algo trivial, ya son matemáticas de niños de 10 años.

La función módulo (resto de una división) en un valor decimal pué sse queda con la última cifra dle valor:
123 modulo 10 = 3
para quedarse con la cifra del medio. Primero hay que saber si queremos acceder a ella solo tras haber tomado el las unidades o directamente.
- Si ya hemos tomado las unidades, para tomar las decenas, recurridmoa las matemáticas, haciendo una división que se quede solo con la parte entera:
123 / 10 = 12'3
la parte entera en 12, que en programación (VB) puede hacerse con 123 \ 10 = 12
ahora como el 2 son las unidades, procedes igual que antes...

etc, etc... sea cual sea el número.
Las divisiones y módulos son operaciones muy rápidas, así que no convierta a string un número salvo que luego tengas hacer otras cosas de tipo string con ello...
Si directamente el dato es un string (caso del vaslor procedente de un control de texto, por ejemplo), puedes acceder direcamente al carácter en una posición dada, mediante alguno de los métodos que provee la clase string, o los métodos heredados  de antiguas versiones de Basic, como son Left, Mid y Right, que admeás te permiten tomar más de un carácter a la vez.

Sé eficiente, pensando en si toda la operación es de cadenas o de números. No alternes alegremente entre uno y otro caso contínuamente a la hora de resolver problemas, acaba en ineficiencia...
#1093
Las API de windows, a lo sumo podrán cambiar a la resoluciones que admite de forma nativa la tarjeta de vídeo, después que el monitor se 'sincere' con esta.

Si pretendes atacarlo, entonces tendrás que disparar al driver de la gráfica.

Por otro lado, ten en cuenta que no se admite cualquier resolución por defierentes razones...
- En los antiguos monitores analógicos, los píxeles reales no existían como tal, siempre eran virtuales y dependían de la frecuencia, aunque sobrepasado ciertos límites, los colimadores no podían sacar nítidamente los píxeles (cosa de la distancia focal (la distancia de ellos sobre la parte posterior de la pantalla, vamos el mismo problema que enfocar una lupa).... a causa de ello, se consideran como píxeles reales, las capacidades de los colimadores. Aunque pueden obtenerse resolucuones que el fabricante 'no da como tales', yo he utilizado un viejo monitor de 14 pulgadas de comienzos de los 90, cuando las resoluciones típicas era 640x480 y menores (320x200 por ejemplo), etc...  con resoluciones de hasta 1600x1200 en equipos calzando un XP, que solía usar cuando algún familiar o amigo, me llegaba con el típico problema 'la pantalla no se enciende' y tenías que averiguar si el problema era el monitor o el propio ordenador, pero exigía poner básicamente la misma resolución que el tipo decía tener en su monitor (usar el tuyo, no era conveniente, podría quedar dañado o no admitir dichas resoluciones, con ese monitor el problema de daños era prácticamente nulo, pués se configuraba por sendas ruedecitas en la parte posterior del monitor, para cambiar el barrido vertical y horizontal, amén de arrancar con un live-CD donde especificaba diferentes resoluciones (las frecuencias, como digo, las podía ajustar manualmente si la que indicaba la resolución no funcionaba).

- En el caso de monitores digitales, porque los puntos reales (píxeles), son los que son, ocupan físicamente un espacio y cada uno es iluminado realmente. Entonces en los digitales, puede proveerse dos soluciones:
---- O la resolución pretendida es múltiplo de los píxeles reales (lo que hace la resolución más pequeña que la 'nativa')... La nativa sería entonces 1:1 y todas las demás serían hacer más pequeña la resolución, aunque luego se postule como 'normal' una más pequeña y las que estén por encima como si fueran un extra... es solo la forma preferida de ver las cosas de los vendedores (de humo).
---- O hay un supersize. Donde dicha resolución ocupa mayor espacio del que físicamente cabe en la pantalla completa, mostrando entonces parcialmente el contenido y por tanto para ver el resto de la pantalla supone 'desplazarla' para tener acceso a ella. El monitor desde el que escribo, admite por ejemplo este caso... Aunque como puede verse al hacer una captura de pantalla, toma todo el contenido y no solo lo que se ve (tendría que hacer una foto con el móvil para ello)...

Un par de imágenes,  la 1ª con la resolución nativa (una es un demúltiplo de 800x600 a la izquierda)...


Las resoluciones mayores son 'supersize'... como se ve en la segunda imagen (1600x1200):



Esta limitación del supersize, entonces solo es aplicable si el hardware de la gráfica ha sido diseñado para poder hacerlo así.  En general, aunque podría se rsuplido por software a través del S.O. no sule ser el caso, ya que supondría en la práctica totalidad de los casos un cuello de botella, que en cambio el hardware d ela tarjeta gráfica puede proveerlo sin latencias...
Otro punto que limita (sigue siendo el hardware), es que, la memoria precisa para un tamaño 2x por ejemplo es que requiere 4 veces más memoria que 1x, (2x2 = 4) entonces también dependerá de la implementación tanto del hardware como del driver de la gráfica. Pero esto es cierto, solo si la resolución no excede el tamaño físico del monitor, si lo excede, al monitor le basta con tener memoria para lo que cabe en él, y es problema del software proporcionar el contenido cuando se 'desplace el contenido  del monitor'...
...O dicho de otro modo, pudiera suceder que el fabricante límite la resolución real del monitor, o bien lo deje disponible solo si la tarjeta dispone de la suficiente memoria para operar con dicha resolución. Por tanto invocar una resolución mayor que la que la tarjeta gráfica dispone, puede simplemente no funcionar, colgar el equipo o incluso dañar el hardware. Hay por tanto que asegurarse que no se superan los límites que el fabricante da como tolerancias...

Así que en general estarás limitado a lo que casualmente permita tu monitor y tarjeta gráfica, después de pelearte con el driver.

Piensa que cualquier programa puede en teoría tener una ventana mucho más grande que lo que es el monitor físicamente, simplemente se guarda en memoria el contenido gráfico y se pega la porción a mostrar en cada momento, mediante la operación llamada 'clipping'... la diferencia al caso con la resolución del monitor, es que dicha resolución es la misma para todas las aplicaciones, lo que supone que variará para cada aplicación el clipping que precisarían finalmente (un supersize, cuando la imagen excede los límites físicos del monitor, al exigir desplazar el contenido del monitor sucederán contínuos eventos 'paint' para todas las aplicaciones que aparecen en).

Por último, no descarto que los propios fabricantes provean alguna API, en tales previsiones, ya que lo que hace 10 o 20 años era un impedimento (muchas veces por pereza en el diseño, como lo de usar múltiples monitores físicos o múltiples escritorios virtuales), luego se vuelve una necesidad, así que mira cual es el fabricante de tu tarjeta y busca a ver si disponen de alguna aplicación al efecto, por ejemplo yo empezaría buscando en nVidia...

[MOD] Imagenes redimensionadas según Reglas del Foro.
perdón.. se me escapó me extendí más de lo esperado y tenía prisas por irme, y se me pasó al final.
#1094
Windows / Re: un clásico, mi PC no Hiberna
10 Febrero 2020, 15:56 PM
CitarUn poco mosca.. el arranque se joda de esta manera, me mosquea un poco...

No, no es un problema del equipoo... te has cargado alegremente una partición oculta de 100Mb. (no de 1Mb). que posiblemente sería una partición que el sistema utilizaría para guardar determinada info de restauración...

Cuando tengas algún problema, cargarte unidades debe ser la solución definitiva, y solo porque lo que necesites sea muy valioso y por tanto la única forma de 'rescatar/acceder (si fuera el caso, que rara vez lo será).
#1095
Scripting / Re: [BATCH] [PROBLEMA] Comando "AT"
10 Febrero 2020, 15:42 PM
El servicio solo podrá ser iniciado si no está deshabilitado... (y si el usuario tiene permisos de acceso, que se supone que sí).
#1096
Es lo que te dice EdePC...

Al intentar entrar me sale el mismo mensaje que a tí... pero mediante VPN con IP de USA entro sim problemas y por supuesto no aparece nada sobre las cookies...
#1097
Mmm... yo creo que este búho, utiliza la cuestión de 'matar terroristas' como moneda de cambio para 'contentar' a sus seguidores y que digan: "Ah bueno, que has mandado matar a un terrorista, te perdonamos la fechoría pendiente, por ello."
#1098
Cita de: simorg en  7 Febrero 2020, 13:46 PM
¿Y porque lo miraba.....? :xD :xD :xD
...porque en el fondo, ansiaba entrar en ese 'fuego infernal' (un efumemismo del sexo femenino), en ver ir a rezar a la iglesia, si tan buen cristiano se considera.

Es lamentable que gente así se haga llamar 'cristiano', aunque a lo mejor ese es un eufemismo que utiliza para definirse como 'adicto al sexo'.

...por lo demás, yo no le acuso de pedir una cifra astronómica.. puestos aa pedir, que se pida grande, ya el juez si te da la razón quitará ceros (muy rara vez los añadirán). Aunque 800.000 millones podría ser otro eufemismo que utilice para señalar los 'polvos (del infierno)' que le gustaría hechar con ambas... y digo yo, porque ¿8 y no 9 ó 7?
#1099
El caso es que sí eres tú el que acusa, debes ser tú quien demuestre fehacientemente que fue el acusado quien compartió el contenido, algo harto difícil... es decir aunque tu sospechas sean más que fundadas debes demostrarlo, pués al final es tu palabra contra la suya.

Tú dices que fue él (intencionadamente o no) y él dice que tú (intencionadamente o no). ¿Quién tiene razón, si ninguno tiene pruebas ni confiesa voluntariamente?. El juez desestimará tu acusación sin pruebas que refuten tu acusación.

No importa que tú hayas eliminado dichos ficheros, siempre se puede alegar que antes de eso, hiciste copia, y como puedes demostrar tú que eso no es cierto ???. Tampoco puedes demostrar (igual que él), que tuvieras una instrusión y antes de eliminarlo, ya lo hubieran copiado.

Mi consejo a futuro, es que hagas una última cosa:
- Cuando pases los ficheros a un cliente... en tu equipo que sean ABCDEF... cuando se transferan al cliente que sean ABCDE(cliente(F)), es decir al momento de pasárselo ejecutas un programa que modifique ciertos datos de dichos ficheros de modo que sean personalizados al cliente así ni siquiera dos o más clientes tendrían exactamente los mismos ficheros (los ficheros clave, se entiende), así tras una filtración podrías demostrar quien lo hizo toda vez que esa personalización sucede siempre en la parte del cliente y nunca en tu equipo, y es única y exclusiva de cada cliente... por supuesto hacer que esa personalización sea necesaria o si no, no funciona (no funciona si es un programa o descifrando los ficheros si no son aplicaciones).
#1100
Cita de: Fran1946 en  6 Febrero 2020, 19:43 PM
Mira las imágenes del programa y de la ruta de los 3 archivos.
Estos nombre son estos:
Výstřižek1.JPG
Výstřižek3.JPG
Výstřižek4l.JPG

Y nombres chinos si los acepta, no lo entiendo.
Esa r, definitivamente es un carácter checo...
Tienen solución, básicamente es la misma presentada... solicitar el 'shortname' del fichero, esto es, los antiguos nombres MS-DOS: "8.3"

Piensa que el modo de solventar problemas con caracteres es dejarlos aparte en lo posible y hacer referencia ello con algo ajeno a los caracteres explícitos, por ejemplo: un handle (una dirección de memoria), un índice en un array... así el contenido de dicho string, puede ser lo que sea, mientras no se 'toque' no hay conversión (errónea por truncamiento), que luego falle su referencia en una búsqueda posterior. Aún así he crerado una función que analiza los caracteres aún siendo disitntos en origen... es complicado explicar por qué funciona sin tener una base profunda del fundamento de los caracteres, codificación, la plataforma y el lenguaje de programación usado... de hecho mucha gente habrá tratado múltiples ideas y modificaciones sin resultados.

...pero como digo tiene solución, el caso previo se puede alojar en el nuevo sin distinción de cual de ellos se da, son pocas líneas más de código, sin embargo como dices que tienes varios miles de imágenes en la carpeta, no es muy eficiente que cada vez que se localice un fichero con un nombre así, deba recorrerse todo un array para tomar su shortname (el 8.3). Esto exige 3 cosas...

La primera repensarlo todo y rehacer una especie de 'fileCommonDialog' que al leer el contenido de una carpeta, tome el array de dichos ficheros, así luego puede referenciarse el mismo por su índice en el array...

La segunda cuestión es que dado que esos nombres 'raros', ralentizan innecesariamente su procesado una y otra vez, lo ideal es que cada vez que localice uno, lo renombre ... si lleva caracteres del 'primer tipo', eliminandolos, si lleva caracteres Unicode 'del segundo tipo',  truncarlos, lógicamente antes de ese renombrado se debería comprobar si el nombre a asignar existe ya o no, para decidir otro si ese está ocupado y que no falle el renombrado. Y por supuesto dicho renombrado sería un parámetro opcional. Aunque pueda parecer no necesario, ese renombrado posibilitaría que otros programas que tuvieren problemas con tales ficheros en tu equipo quedara resuelto (hacelro manulamente cuando son muchos es tedioso, claro). Y también habría que considerar que no todos los ficheros deben ser renombrables, los de librerías y aplicaciones podrían inutilizar la aplicación de la que son parte, por lo que debería limitarse a los 'documentos de usuarios' y eso cada uno sabe cuales son conforme a las carpetas que los mantiene en su equipo.

En fin crear un fileCommonDialog, son algo más que 4 líneas, y se sale un poco del tiempo que uno puede dedicar a ayudar a otros (otra cosa es cuando ya tienes uno montado de tiempo atrás)...
Si no te basta con la solución que te aporto a continación, pués con dicho código y el resto demis comentarios, tú mismo podrías montarte un FileCommonDialog para la ocasión... la clave para lograr todo esto es recurrir a al objeto FileSystemObject... que hay que añadirlo al proyecto como una referencia:

Y ahora el código:
(nota que excepto la función del mismo nombre el resto es añadido (a lo que ya te dí), la función 'ResuelveRuta' remplaza a la existente)...
Código (vb) [Seleccionar]

' previamente hay que añadir la referencia al proyecto de: FileSystemObject
Private fso                             As New FileSystemObject
Private fold                            As Folder
Private f                               As File

' 'primer' y 'segundo' tipo, es solo una connotación para la solución y el tiempo que lleva cada caso.
Private Function ResuelveRuta(ByVal Ruta As String, Optional ByRef SegundoIntento As Boolean) As String
    Dim k As Integer, j As Integer, fichero As String
   
    If Existe(Ruta) Then
        k = InStrRev(Ruta, "\")
        If (Left$(WFD.cAlternate, 1) <> Chr(0)) Then
            ' Aqui CAZA: caracteres Unicode (del primer tipo) en el nombre del fichero.
            j = InStr(WFD.cAlternate, Chr(0)) ' este campo tiene 14 caracteres, en nombres muy cortos, tipo 3.jpg, todavía podría haber caracteres null al final del mismo.
            If (j > 0) Then
                ResuelveRuta = Left$(Ruta, k) & Left$(WFD.cAlternate, j - 1)
            Else
                ResuelveRuta = Left$(Ruta, k) & WFD.cAlternate
            End If
        Else
            ResuelveRuta = Ruta ' Left$(Ruta, k) & WFD.cFileName
        End If
    Else
        If (SegundoIntento = False) Then
            SegundoIntento = True
            k = InStrRev(Ruta, "\")
            j = Len(Ruta)
            If (k < j) Then
                ' Aqui CAZA: caracteres Unicode (del segundo tipo) en el nombre del fichero.
                fichero = Right$(Ruta, j - k)
                Set fold = fso.GetFolder(Left$(Ruta, k))
                For Each f In fold.Files
                    If (StrCompUnicode(f.Name, (fichero)) = True) Then
                        ResuelveRuta = ResuelveRuta(Left$(Ruta, k) & f.ShortName)
                        ' usar f.ShortPath  si además de los ficheros, las carpetas también tuvieran 'caracteres raros'...
                        SegundoIntento = False
                        Exit Function
                    End If
                Next
                ResuelveRuta = ""
            Else
                ResuelveRuta = ""
            End If
            SegundoIntento = False
        Else
            ResuelveRuta = ""
        End If
    End If
End Function

Private Function Existe(ByVal Ruta As String) As Boolean
    Existe = (FindFirstFile(Ruta, WFD) <> INVALID_HANDLE_VALUE)
End Function

' Hace una comparación binaria de los bytes pares
' OJO: No modificar un ápice esta función, basta retirar los 'ASC()' para que falle, lo mismo  si se hace una conversión a arrays...
'      ejemplos que fallan:
'         StrCompUnicode = (Str1 = Str2) Then
'         StrCompUnicode = Strcom(str1, str2, vbTextCompare) ó vbBinaryCompare
'         If (Mid$(Str1, k, 1)) <> (Mid$(Str2, k, 1))) Then Exit Function
Private Function StrCompUnicode(ByRef Str1 As String, ByRef Str2 As String) As Boolean
    Dim k As Long, j As Long
   
    k = Len(Str1): j = Len(Str2)
    If (k = j) Then
        For k = 1 To j
            'Debug.Print CStr(Asc(Mid$(Str1, k, 1))),
            'Debug.Print CStr(Asc(Mid$(Str2, k, 1)))
            If (Asc(Mid$(Str1, k, 1)) <> Asc(Mid$(Str2, k, 1))) Then Exit Function
        Next
   
        StrCompUnicode = True
    End If
End Function




...puedes tirar con esto, o basarte en esto y mis comentarios previos para montarte tú mismo un FileCommonDialog, que use precisamente el FilesystemObject como el eje de la solución... de todos modos aún con miles de ficheros en una carpeta, con la potencia d elos equipos de hoy, no debería notarse lentitud apreciable en el tratamiento, aunque claramente ese bucle es preferible que se hicera una única vez (cuando se accede a la carpeta y no con cada fichero que tenga caracteres Unicode del 'segundo tipo'...