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 - Eleкtro

#601
Supongo que no hay nuevas noticias en la comunidad científica sobre el señor Sergio Canavero (al cual ya no se si sería mejor llamarle bufón, el señor bufón).

En fin. El siguiente video es del año pasado pero lo he descubierto hoy. La chica nos cuenta un poco sobre los principios del transplante de cabeza, cirujias realizadas en el pasado y sus efectos, y también sobre los fundamentos del proyecto GEMINI del tal Sergio Canavero. Por cierto, en el video lo llaman como "el hazme reir de la comunidad científica y un loco narcisista"... xD

[youtube=640,360]https://www.youtube.com/watch?v=mi3nJKU88Ho[/youtube]

Ya no se si albergar alguna esperanza. Es repulsivo ver científicos tan deshonestos como parece ser este tio... creo que nos ha colado un FAKE monumental.

Saludos.
#602
Cita de: NEBIRE en  5 Diciembre 2018, 19:15 PM
Si lo usas para imágenes, es la relacion de aspecto...

Ese es uno de los propósitos personales que yo le daré a la función, pero no te fijes en eso, se trata de pasarle como argumento un tamaño (width x height) el cual puede ser el tamaño de una imagen, de una caja de zapatos, o de lo que sea...

@NEBIRE y @morty gracias también por la ayuda prestada.

saludos
#603
"Cuadrático", hmmm, para ser sincero no recordaba haber escuchado nunca ese término ya que siempre solemos decir "esto es cuadrado" y no "esto es cuadrático", pero sí...


¿Supongo que entonces estará correctamente expresado decir que lo que hace mi función es obtener el porcentaje cuadrático de una figura? (bueno, de unas dimensiones que forman una figura cerrada de 4 lineas rectas), entonces el nombre de la función creo que podría ser: "GetQuadraticPercentage()" y con eso me serviría, así que a falta de alguna otra propuesta que supere a tu nomenclatura, te la compro . Gracias.
#604
Buenas.

Creo que esta duda es simple y sencilla, quizás incluso algo estúpida y también atípica, pero tengo un problema y es que a veces con cosas sencillas me pongo a darle demasiadas vueltas y al final me atasco de tanto pensar y no saco nada en claro...

Bien. Resulta que en un lenguaje de programación, he desarrollado un algoritmo (nada del otro mundo, con una simple división se hace) cuyo propósito es medir el "cómo de cuadrados" son los lados de unas dimensiones específicas. Es decir, un cuadrado tiene una relación de 1:1, y cualquier otra cosa distinta sería un rectángulo pero quizás lo podriamos querer considerar como un cuadrado "imperfecto" o "desigual" (un rectángulo que al ojo humano sería practicamente indistingible de una forma cuadrada)...

No creo haberme expresado demasiado bien, así que lo explicaré de otro modo: si yo tengo unas dimensiones (Ancho x Alto) de 500x500, este algoritmo me da como resultado, en porcentaje, un valor de 100%, puesto que la longitud de los lados de la forma geometrica que forman dichas dimensiones, son exactamente iguales, forman un cuadrado perfecto al 100%.
Ahora, si yo tengo unas dimensiones de 640x480 (cómo referencia pueden tomar la forma de la pantalla de un monitor CRT), este algoritmo me da como resultado un valor de 75.00%, esto quiere decir que la forma geometrica que forman los lados de las dimensiones 640x480 son un 75% iguales (o un 25% desiguales, según se mire), vamos, que los lados no forman un cuadrado, es un rectángulo, pero está a un 25% de ser una forma cuadrada al 100%. Supongo que se entiende lo que intento decir.
Yo lo que obtengo con mi función es ese porcentaje, y con ese porcentaje llevo a cabo ciertas consideraciones personales de si a simple vista del ojo humano algo (en concreto una imagen, sus dimensiones) es o se parece más a un cuadrado, o a un rectángulo, aunque eso no viene a cuento de esta pregunta la verdad....

El problema que tengo es con la nomenclatura de esta función, no se que nombre ponerle. Considero que la nomenclatura de una función es muy importante, pues debemos tratar de describir de forma breve y concisa el propósito de la misma, para que además sea intuitivo para el usuario final. Y yo pues de terminologías científicas y geométricas, de todo lo que aprendi en el instituto no recuerdo mucho, la verdad, y por eso me está costando mucho ponerle un nombre coherente y de la forma más eficiente posible, por que se que este tipo de medición de los lados de una forma geométrica y su similitud con respecto a un cuadrado esto debe tener algún nombre geométrico/científico conocido al que puedo hacer referencia, y simplemente o no me acuerdo o no caigo, así que por el momento el nombre provisional y algo vulgar que le he puesto es: "GetSquareSimilarityOfSize()"...

Pues eso, solo necesito ayuda para la nomenclatura. ¿Qué nombre le pondrían ustedes a este tipo de función?.

Gracias por leer.
#605
Al parecer, y según por lo que he leido aquí: https://forums.freenas.org/index.php?threads/opinion-new-hard-drive-with-smart-errors.12396/ en teoría lo que ocurre es que los discos de Seagate añaden información adicional al valor en crudo, y por ende el valor en crudo de "tasa de errores de lectura" en realidad no representa los errores de lectura, bueno, si, pero también más cosas como las... ¿búsquedas? (seek count).

Tras leer ese thread he pensado que lo más lógico es que Seagate esté proporcionando alguna utilidad de análisis para que los usuarios puedan interpretar los valores reales del S.M.A.R.T, pero que va, no proporcionan una mierd@, lo único es el "Seatools" que no sirve para tal propósito...


Luego me he puesto a indagar y he leido que los 20 bits más bajos del valor representan el número de errores y los 28 bits más altos representan el número de operaciones, pero luego he leido por ahí que en otros discos de Seagate es diferente, los 16 bits más bajos representan el número de errores y los 32 bits más altos el número de operaciones... en fin, una p**a movida para interpretar el valor en crudo de "Tasa de errores de lectura" del S.M.A.R.T de Seagate.

Es que da puto asco, por que cuando un usuario normal y corriente desee interpretar el valor real de la tasa de errores de lectura de un disco Seagate, se verá obligado a recurrir a la programación (para realizar la correspondiente operación aritmética de bitwise en el valor en crudo, como se puede apreciar en este ejemplo: https://serverfault.com/a/495259/177133 ) a falta de una herramienta existente que interprete el valor real de los discos de Seagate, ya que ni el Crystal Disk Info ni el Hard Disk Sentinel lo interpretan como se debería interpretar (y he probado varios programas más).

En definitiva, que los discos duros de Seagate son una jodienda. Siempre he odiado esta mierd@ de marca por que me han fallado muchos (aunque de eso hace más de 10 años). No se pa que me compro este disco pudiendo comprar un WD Red NAS de la misma capacidad (6 TB) por 20 pavos más... aunque este vaya a 5.400 RPM, al menos los valores S.M.A.R.T de los discos WD es interpreable muy facilmente por el usuario final, a diferencia de los discos Seagate...




Dicho esto, en cuanto tenga un rato para ponerme a ello desarrollaré un simple programa y lo publicaré en el subforo de .NET ( https://foro.elhacker.net/net-b62.0/ ) el cual servirá para "desglosar" el valor en crudo de los discos Seagate. Aunque, logicamente como no dispongo de cientos de discos Seagate antiguos y nuevos para testear, el programa tendrá ciertas limitaciones (las cuales ya comentaré allí).

En fin. Me quedo el disco duro por que merece la pena al precio por el que lo he comprado, pero estoy muy insatisfecho con la forma en la que Seagate asigna valores en el S.M.A.R.T, ya que esto me ha hecho perder tiempo, la compañía no provee ningun programa oficial para leer el valor real y el usuario debe recurrir a la programación ya que no se puede usar ninguna herramienta tan típica como Crystal Disk Info o Hard Disk Sentinel para que te diga el valor real. Maldito Seagate...

Un saludo.
#606
Las siguientes imágenes corresponden a un análisis de un disco duro nuevo ( https://foro.elhacker.net/hardware/iquestse_puede_falsificar_el_numero_de_inicios_de_un_hdd-t490195.0.html ), conectado en mi PC por primera vez y antes de haberle asignado el formato MBR/GPT y formatearlo...

Necesito de alguien con la suficiente experiencia en análisis de hardware/discos duros para que me diga si es normal que el valor de "Tasa de errores de lectura" sea 26. Para una persona sin experiencia en el sector resulta muy raro que el valor no sea cero. ¿debería ser cero?.

Y, ¿sería este valor un motivo coherente y suficiente para devolver el producto?.



Sin haber hecho practicamente nada de uso del disco duro, el valor en crudo sigue aumentando...




#607
Ok gracias @Machacador. Pues me dijaré también en el porcentaje de salud. De todas formas, mañana publicaré los valores del Crystal Disk y el Sentinel a ver si todo está correcto...

EDITO:

Le he preguntado al vendedor del producto si me puede explicar por que el precio del Ironwolf es practicamente el mismo que el del modelo Barracuda, y esto es lo que me han respondido:

Cita de: Seagate TechnologyBuenos días,

Somos distribuidores oficiales de SEAGATE y tenemos acuerdos en exclusividad.

uUn saludo

...es como si no me hubieran respondido nada, puesto que me han dicho una frase genérica sin puntualizar nada en la pregunta que yo les hice.

Saludos
#608
Buenas.

Les pongo en situación, estaba yo navegando por Amazon y me encontré estos dos productos:

Seagate Ironwolf 6 TB
https://www.amazon.es/Seagate-IronWolf-Disco-Interno-Sistemas/dp/B0767P5BYT

Seagate Barracuda 6 TB
https://www.amazon.es/Seagate-Barracuda-6TB-6000GB-Serial/dp/B075WX2TKM

Como pueden comprobar, ambos están practicamente al mismo precio, y yo al ver ese Ironwolf tan baratito no he dudado en comprarlo, ya que es mucho mejor en prestaciones que el modelo Barracuda y por eso debería costar más, aproximadamente 220 € según he leido (250 € el modelo Pro)...

Aquí es donde me surge la duda, porque nadie regala algo a cambio de nada... me refiero, la diferencia en el precio de ese Ironwolf no pinta muy bien... aunque siempre puede ser que realmente sean discos nuevos cuyo vendedor ha bajado el precio por no poder venderlos a su precio real, que se los quiera quitar de encima o algo así... quien sabe... le doy el beneficio de la duda hasta cierto punto.

En fin. He acudido al servicio de Amazon a ver si se trataba de un error en el precio, o si el producto no era totálmente nuevo, y me han dicho que el precio bien, pero que ellos no me pueden confirmar si realmente es nuevo o no al tratarse de un "vendedor externo" (supongo que se refieren a cualquier vendedor que no sea el mismo Amazon, por que el disco ese lo vende directamente la compañía Seagate).

El caso es que mañana tendré en mi posesión ese disco duro de Seagate, el modelo Ironwolf, y lo primero que haré será pasarle el Crystal Disk Info para comprobar el número de inicios del disco duro, para ver si es realmente nuevo.

Y por ese motivo les pregutno si es posible con alguna herramienta informática falsificar (modificar) el número de inicios de un HDD, por que de ser posible entonces creo que mejor no me la juego y cancelo el pedido antes de que sea demasiado tarde para cancelarlo... aunque siempre puedo devolver el producto durante el periodo de reflexión, pero así me quito de "papeleos" innecesarios. Recordemos que el vendedor del producto es Seagate, supongo que ellos pueden disponer de herramientas que un usuario normal no podría (por muy profesional que este fuese) para modificar los records de su hardware...

Es que por ese precio el Ironwolf solo hay dos posibilidades: 1. el disco NO es nuevo pero te lo quieren hacer pasar como nuevo, o 2. el disco SI que es nuevo y simplemente el vendedor quiere venderlo cuanto antes y por eso ha bajado el precio, pero este se me hace muy raro por que entonces por lógica el modelo Barracuda debería haber bajado de precio también... de lo contrario es que a ver quien es el tonto que se compra un Barracuda teniendo un Ironwolf al mismo precio, no se si se me entiende, no parece una buena estrategia comercial para venderte el producto...

Gracias por leer.
#609
Cita de: z3nth10n en 18 Octubre 2018, 19:51 PM
Nota3: Le he metido esta imagen (https://vignette.wikia.nocookie.net/gta-myths/images/8/80/Gtasa-blank.png/revision/latest?cb=20161204212845) pero me da un error que ahora mismo no me puedo parar a comprobar:

Si tu mismo te das cuenta de que el propósito principal del código que tienes está incompleto, puesto que NO funciona correctamente con según que imágenes (más abajo te explico el fallo), ¿entonces por que lo compartes?. Algo incompleto o no del todo funcional sencillamente no sirve para reutilizarlo, es que no sirve.




Citar
Código (vbnet) [Seleccionar]
<System.Runtime.CompilerServices.Extension> _
Public Iterator Function ToColor(ByVal bmp As Bitmap) As IEnumerable(Of Color)
Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim bmpData As BitmapData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)

Dim ptr As IntPtr = bmpData.Scan0

Dim bytes As Integer = bmpData.Stride * bmp.Height
Dim rgbValues(bytes - 1) As Byte

' Copy the RGB values into the array.
Marshal.Copy(ptr, rgbValues, 0, bytes)

BmpStride = bmpData.Stride

For column As Integer = 0 To bmpData.Height - 1
For row As Integer = 0 To bmpData.Width - 1
' Little endian
Dim b As Byte = CByte(rgbValues((column * BmpStride) + (row * 4)))
Dim g As Byte = CByte(rgbValues((column * BmpStride) + (row * 4) + 1))
Dim r As Byte = CByte(rgbValues((column * BmpStride) + (row * 4) + 2))

Yield New Color(r, g, b, 255)
Next row
Next column

' Unlock the bits.
bmp.UnlockBits(bmpData)
End Function

<System.Runtime.CompilerServices.Extension> _
Public Sub SaveBitmap(ByVal bmp() As Color, ByVal width As Integer, ByVal height As Integer, ByVal path As String)
Dim stride As Integer = BmpStride
Dim rgbValues((BmpStride * height) - 1) As Byte

For column As Integer = 0 To height - 1
For row As Integer = 0 To width - 1
Dim i As Integer = Pn(row, column, width)

' Little endian
rgbValues((column * BmpStride) + (row * 4)) = bmp(i).b
rgbValues((column * BmpStride) + (row * 4) + 1) = bmp(i).g
rgbValues((column * BmpStride) + (row * 4) + 2) = bmp(i).r
rgbValues((column * BmpStride) + (row * 4) + 3) = bmp(i).a
Next row
Next column

Using image As New Bitmap(width, height, width * 4, PixelFormat.Format32bppArgb, Marshal.UnsafeAddrOfPinnedArrayElement(rgbValues, 0))
image.Save(path)
End Using
End Sub

Public Function Pn(ByVal x As Integer, ByVal y As Integer, ByVal w As Integer) As Integer
Return x + (y * w)
End Function
End Module

Primero de todo quiero comentar que eso no deberían ser extensiones de método puesto que estás usando objetos que no están declarados dentro del bloque de la extensión de método (BmpStride y rgbValues). No es código reutilizable tal y como está ahora mismo.

Bueno, vayamos al grano. Es lógico que el algoritmo te tire errores con la imagen del hipervínculo que has mencionado, puesto que tu algoritmo está hardcodeado para parsear imágenes de 32 BPP (4 bytes por pixel) en ese búcle que haces ahí, sin embargo, tu estás intentando tratar imágenes con otro formato de píxeles, 24 BPP en este caso (3 bytes por pixel), por lo tanto tu búcle generará una excepción del tipo IndexOutOfRangeException.

El error principal lo cometes aquí, al pasarle el argumento bmp.PixelFormat, el cual puede ser cualquier formato de píxeles dependiendo de la imagen original...
Citar
Código (vbnet) [Seleccionar]
Dim bmpData As BitmapData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)

En su lugar, debes convertir la imagen a 32 BPP simplemente pasándole el argumento PixelFormat.Format32bppArgb a la función LockBits:
Código (vbnet) [Seleccionar]
Dim bmpData As BitmapData = bmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb)

...o en su defecto, adaptar tu búcle para todos los tipos de formato de píxeles posibles.




Te muestro un ejemplo:

Código (vbnet) [Seleccionar]
Public Iterator Function GetColors(ByVal bmp As Bitmap) As IEnumerable(Of Color)

   ' Lock the bitmap bits.
   Dim pixelFormat As PixelFormat = PixelFormat.Format32bppArgb
   Dim bytesPerPixel As Integer = 4 ' PixelFormat.Format32bppArgb
   Dim rect As New Rectangle(Point.Empty, bmp.Size)
   Dim bmpData As BitmapData = bmp.LockBits(rect, ImageLockMode.ReadOnly, pixelFormat)

   ' Get the address of the first row.
   Dim address As IntPtr = bmpData.Scan0

   ' Hold the raw bytes of the bitmap.
   Dim numBytes As Integer = (Math.Abs(bmpData.Stride) * rect.Height)
   Dim rawImageData As Byte() = New Byte(numBytes - 1) {}
   Marshal.Copy(address, rawImageData, 0, numBytes)

   ' Unlock the bitmap bits.
   bmp.UnlockBits(bmpData)

   ' Iterate the pixels.
   For i As Integer = 0 To (rawImageData.Length - bytesPerPixel) Step bytesPerPixel

       Yield Color.FromArgb(alpha:=rawImageData(i + 3),
                            red:=rawImageData(i + 2),
                            green:=rawImageData(i + 1),
                            blue:=rawImageData(i))

   Next i

End Function


En el otro método "SaveBitmap" deberías aplicar el mismo principio, ya que también asumes que es una imagen de 32 BPP.

Saludos
#610
Cita de: **Aincrad** en 21 Noviembre 2018, 05:10 AM

Estuve Investigando mucho sobre este asunto y es mas complicado de lo que parece, se supone que los juegos Direcx "Secuestran" por así decirlo el monitor y para poder dibujar/ Sobreponer necesitas usar la api de direcx (D3D9.DLL) o En su equivalente usar SharpDX un wrapper de Direcx , Después de eso tengo que conectar con la Función de Direcx Edn Scene para poder Dibujar sobre la pantalla.

Solo conozco el modo de empleo de las librerías de DirectX en el nivel de abstracción que provee SharpDX. Sobre el funcionamiento "interno" por así decirlo (las llamadas realizadas a funciones de la API de Direct-3D, 2D, DXGI y etc. ) no tengo ni pajolera idea. No soy desarrollador de videojuegos ni de HUDs/Cheats/Trainers/LoQueSea.

CitarAl hacer esta Investigación en la cual dure mas de 2 semanas, me he dado cuenta que nadien ha podido lograr lo que tu hiciste en vb.net (Sobreponer Un formulario con controles).

Te has equivocado. Lo que viste en aquél video que te mostré era el juego ARK, en modo pantalla completa sin bordes.

Yo tampoco lo logré hacer en pantalla completa "real" y también me pasé semanas investigando y preguntando a profesionales, para ser más específico incluso le llegué a preguntar al creador del HUD 'TurboHUD' para Diablo 3 ( @KillerJhon: https://www.ownedcore.com/forums/diablo-3/turbohud/ ), quien me orientó un poco con el uso básico de SharpDX y aparte me dijo que NO era posible renderizar el Form en pantalla completa "real". Y si lo dice alguien como él, pues será por algo.

Y es que por lo que he llegado a ver no en pocas ocasiones, suele ser un requisito de lo más común que la ventana del juego esté en modo a pantalla completa pero sin bordes (full-screen borderless) para que el HUD/cheto funcione bien, para que se pueda renderizar, ya que la mayoría de HUDs/chetos hoy en día no pueden funcionar a pantalla completa "real".

No se por que motivo ellos, los profesionales, no pueden lograrlo, lo que si se que el modo pantalla completa "real" es un modo exclusivo donde la GPU "toma el control" por así decirlo y se encarga directamente del renderizado; supongo que habría que dibujar directamente en el buffer de la GPU, y supongo que esto es lo que resultará tan complicado, no lo se a ciencia cierta, solo es una hipótesis sin mucho fundamento. No se exactamente como funciona, pero se que es complicado cuando los profesionales tampoco lo pueden lograr, o quizás si que sepan como hacerlo pero prefieren no hacerlo por el costoso trabajo que implicaría.

Sin embargo, yo creo que si que se debe poder hacer, puesto que hace años he jugado a juegos en pantalla completa "real" con HUDs, sin ir más lejos el Counter-Strike.

Un saludo.