|
12
|
Foros Generales / Dudas Generales / Re: ¿De qué maneras puedo conseguir dinero en internet?
|
en: 11 Junio 2025, 19:03 pm
|
La mejor valorada en ese sitio web: AttaPoll - Encuestas de pagoEl primer día, recibí solo una invitación para completar una encuesta de 10 minutos por valor de 12 créditos (0,12 £) (0,14 EUR). Al día siguiente, hubo una encuesta de 20 minutos por valor de 60 créditos (£ 0,60) (0,71 EUR).
La mayoría de las encuestas pagan menos de £ 1 (menos de 1,18 EUR) y tardan entre 10 y 20 minutos en completarse. Si convertimos la moneda, serían 10 minutos por 14 céntimos de euro y 20 minutos por 71. A eso súmale comisiones de conversión de Paypal si el dinero te lo envían en USD y quieres usarlo en EUR, y súmale también el coste del uso del móvil para completar ese tiempo realizando encuestas (por que esas apps son para móvil, a menos que uno se instale un emulador para usarlas en el PC, eso suponiendo que esa práctica no esté prohibida en los términos de uso de la empresa), con la batería que se pierde y que luego tendrás que recargar... En fin. Nadie está obligado a usar este tipo de servicios, pero el simple hecho de que se atrevan a ofrecerte semejante promedio de ganancias lo considero un insulto, una falta de respeto intolerable al valor del tiempo humano. Por que el tiempo es oro, y aquí lo están canjeando por míseros céntimos disfrazados de oportunidad. No se puede esperar otra cosa de este tipo de servicios. Abusan de la gente necesitada a cambio de migajas. Para los filipinos y quizás para otras regiones del mundo puede que sí puedan obtener beneficios de media como para considerarlo eso, beneficios, algo productivo, pero para un europeo esto es totalmente indigno... Cambiar 20 minutos de tu tiempo, concentración, dedicación y el uso de la batería de tu móvil a cambio de 71 céntimos es casi una forma de esclavismo digital. Soy consciente que hay personas que no tienen problemas económicos y afirman estar haciéndolo solo por sacarse una calderilla extra a final de mes, que no les importa en absoluto ese consumo de tiempo y dedicación, pero igualmente al usar estos servicios están siendo personas abusadas por estas empresas. Aceptar unas condiciones abusivas no hace que esto deje de ser un abuso. Y, con todos mis respetos hacia las personas con cualquier clase de necesidades económicas, pero, aquellas personas que estén realmente necesitadas, personas con un nivel de pobreza extrema y desesperación, hasta el punto de no importarles ofrecer su tiempo y más cosas a cambio de unos céntimos diarios por que realmente necesitan ese dinero para subsistir, a esas personas yo les diría que hay otras formas más tradicionales en las que se podría obtener más beneficios, como por ejemplo mendigar. Literalmente hablando, se puede ganar más beneficio promedio diario mendigando en la calle, entre 5€ y 20€ (y muchos ganan bastante más que eso), dependiendo de muchos factores y de la suerte. Las ayudas sociales del estado podrían ser otra opción a considerar para quienes tengan la suerte y cumplan los requisitos. ¿Sistema de referidos para aumentar las ganancias?, ya. No hay nada mejor que despojarse de toda ética y moral para engatusar y convencer a la gente hasta meterlos forzosamente en un esquema piramidal como los de estos servicios y hacerles creer que si se esfuerzan lo suficiente van a ganar mucho dinero... para que así tú puedas ganar un poco más de calderilla. La mejor forma de perder amistades. No espero que mi opinión sea muy compartida por la mayoría. Habría personas dispuestas a aceptar 1€ a cambio de 1 hora de trabajo, y darían las gracias. Yo en cambio denuncio públicamente estos abusos. Estoy en mi derecho de hacerlo. PD: estoy abierto a la crítica mientras sea con respeto, aunque no pretendo iniciar ningún debate al respecto así que no responderé a ninguna cita a este comentario ni alusión a mi persona. Atentamente, Elektro.
|
|
|
13
|
Seguridad Informática / Seguridad / Re: ¿Cómo protegerse?
|
en: 11 Junio 2025, 10:02 am
|
No si ahora está muy claro, pero en ese momento durante un segundo créeme que estuve tentado de dar los datos.
Ni siquiera los trabajadores de un banco pueden pedirte algo tan comprometido como el CVC, ni siquiera el director de un banco, ni el fundador ni un CEO, está prohibido por cuestiones evidentes (que ya ha explicado @simorg) por que es básicamente una contraseña vinculada a esa tarjeta, así que mucho menos lo va a poder pedir una supuesta compañía de transporte para hacer una gestión. Es de locos... xD Saludos!
|
|
|
14
|
Informática / Software / Re: Como puedo bloquear los molestos mensajes de Mcafee que me llegan a mi correo de outlook
|
en: 11 Junio 2025, 00:14 am
|
Efectivamente, eso puede suceder. Pero creo que ese artículo no explica del todo bien el verdadero peligro detrás de este tipo de ataques. El término técnico para esta amenaza es Drive-by Download o Drive-by-install: Este método permite que se descarguen y ejecuten archivos maliciosos en tu PC sin necesidad de que tú lo apruebes explícitamente. Sin tu consentimiento. SIMPLEMENTE POR ABRIR UN ENLACE / NAVEGAR A UNA URL, y en teoría simplemente por visualizar (cargar el contenido de) un correo malicioso, sin siquiera llegar a hacer click en nada. En teoría. A mi me ha ocurrido. En mi caso, me ocurrió sobre 2021 o 2022, usando Mozilla Firefox. Y eso que siempre he sido muy precavido con estos temas… No recuerdo exactamente qué enlace abrí, pero no descargué ni ejecuté nada manualmente. Simplemente al hacer clic en un enlace y cargar la página web, se me abrió de repente una ventana de la CMD que se cerró casi inmediatamente. No alcancé a leer lo que aparecía escrito en la CMD, pero claramente no era nada bueno, y no sabría decir si realmente era la CMD o más bien la interfaz de un programa de consola, no llegué a verlo a tiempo, solo vi la típica ventana con fondo negro de una consola de Windows. EDITO: creo recordar que precisamente el enlace que abrí fue de algún e-mail de estos maliciosos que llegan a nuestra bandeja de correo, pero lo abrí por error, por culpa de la lentitud de respuesta del navegador web o algo mientras yo en realidad intentaba hacer click para filtrar el correo como SPAM, pero se hizo click en alguna parte del mensaje que abrió una nueva pestaña en el navegador (y que la cerré lo más rápido que pude). Creo recordar que fue así y por esta causa, pero no estoy seguro ha pasado mucho tiempo. Acto seguido revisé los procesos en ejecución, pero no encontré nada extraño que me indicase una posible infección... Esto de cargar una página web y que se me abriese una ventanita de consola en mi sistema operativo me pareció sospechoso, pero no lo suficiente, tuve el error de dudar de lo que acababa de ver, de la procedencia de esa ventana de consola (¿sería por algún proceso en ejecución en mi sistema, o realmente sería por haber abierto esta página web?) y no terminar de creerme que me hubiese podido infectar de esa manera solo por estar navegando (¡con lo precavido que soy! me diría a mi mismo), de todas formas mis dudas estaban ahí, así que por las dudas decidí realizar un escaneo profundo con varios antivirus (no encontraron nada) y reinstalar el sistema operativo para dejar de preocuparme de forma definitiva. Pero eso no iba a servir de mucho, ya que unas horas más tarde alguien había hecho varias compras por Internet usando mi tarjeta VISA desde China o algún país asiático. Mi banco autorizó estas compras al ser considerados "comercios seguros" (https://), eso es lo que me dijeron. Me avisaron desde mi entidad bancaria por SMS de que había cierta actividad sospechosa, pero no me enteré hasta el día siguiente en realidad. Tuve que acudir al banco, anular esas compras (me devolvieron el importe de todo), denunciar lo sucedido y solicitar una nueva tarjeta. Desde entonces tengo mi VISA actual bloqueada por defecto, y solo la activo temporalmente cuando necesito hacer un pago, para evitar que algo así vuelva a ocurrirme en el futuro. Hasta ese incidente yo jamás había sufrido una infección en toda mi vida. Y desde entonces, afortunadamente, tampoco me ha vuelto a pasar. Siempre he seguido una serie de medidas para intentar minimizar riesgos, empezando por no abrir cosas sospechosas o hacerlo en una máquina virtual bien aislada. Y tener una configuración meticulosa de permisos de usuario en el sistema de archivos de Windows. Y en lo que respecta a navegadores web, pues siempre uso bloqueadores automáticos de adware y minería de criptomonedas, instalo los navegadores web en rutas no convencionales, fuera de los directorios por defecto, hago una limpieza casi semanal de cookies en mi navegador principal, y más cosas. En fin, creo que son pequeñas prácticas de un protocolo personal que, combinadas, podrían ayudar a dificultar infecciones o entorpecer códigos maliciosos que busquen en rutas por defecto o requieran ciertos permisos de usuario, etc. Pero incluso con toda esa precaución, basta con visitar un enlace malicioso para que algo se descargue y se ejecute sin tu conocimiento, sin que te enteres (si yo no llego a percatarme de esa ventanita de consola que se abrió y se cerró al segundo, a día de hoy estaría todavía más perdido sin entender lo sucedido), y te roben información confidencial y en definitiva te jodan bastante. Así que sí, como bien comentas, @ El_Andaluz, ese tipo de cosas pueden pasar. ¡Mucho ojo!
|
|
|
15
|
Programación / .NET (C#, VB.NET, ASP) / Re: Librería de Snippets para VB.NET !! (Compartan aquí sus snippets)
|
en: 10 Junio 2025, 07:00 am
|
Genial snippets nuevos , gracias.  Te lo agradezco! Varios métodos para crear efectos de transición de imagen con la librería ImageMagick: El número de frames del efecto de transición y el tiempo de la secuencia de animación son configurables. Estos efectos son ideales para generar presentaciones de imágenes en animaciones GIF...
Barrido direccional:  ''' <summary> ''' Generates a sequence of transition frames between two <see cref="MagickImage"/> instances, ''' progressively revealing the second image over the first one in a specified direction. ''' </summary> ''' ''' <param name="firstImage"> ''' The starting image of the transition. ''' </param> ''' ''' <param name="secondImage"> ''' The image to swipe in over <paramref name="firstImage"/>. ''' </param> ''' ''' <param name="direction"> ''' The direction in which the swipe effect must occur. ''' </param> ''' ''' <param name="steps"> ''' The number of intermediate frames to generate for the transition. ''' <para></para> ''' A higher value may result in a smoother, slower visual transition, ''' at the cost of increased processing time to generate the effect ''' and increased number of images / file size for the resulting animation. ''' <para></para> ''' Minimum value is 3. Default value is 5. ''' </param> ''' ''' <param name="animationDelay"> ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence. ''' <para></para> ''' Default value is 1 (10 milliseconds). ''' </param> ''' ''' <param name="frameTransformation"> ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object) ''' used to create the transition animation. This allows fine-tuning of image properties such as format, ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class. ''' <para></para> ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate. ''' <para></para> ''' Code Example in VB.NET: ''' <code>Dim transformation As Action(Of MagickImage) = ''' Sub(x As MagickImage) ''' x.AnimationDelay = 1 ' 10 milliseconds ''' x.Format = MagickFormat.Jpg ''' x.Quality = 90 ''' End Sub '''</code> ''' ''' Code Example in C#: ''' <code>Action<MagickImage> transformation = (MagickImage x) => { ''' x.AnimationDelay = 1; // 1 10 milliseconds ''' x.Format = MagickFormat.Jpg; ''' x.Quality = 90; ''' };</code> ''' </param> ''' ''' <returns> ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation. ''' <para></para> ''' All frames returned must be disposed of by the caller to free resources when no longer needed. ''' </returns> <DebuggerStepThrough> Public Shared Function GenerateSwipeTransition(firstImage As MagickImage, secondImage As MagickImage, direction As System.Windows.Forms.FlowDirection, steps As Integer, animationDelay As Integer, Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage) If firstImage Is Nothing Then Throw New ArgumentNullException(NameOf(firstImage)) End If If secondImage Is Nothing Then Throw New ArgumentNullException(NameOf(secondImage)) End If If steps < 3 Then Throw New ArgumentOutOfRangeException(NameOf(steps), steps, "The steps value must be equal to or greater than three.") End If If animationDelay <= 0 Then Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay, "The animation delay value must be greater than zero.") End If Dim frames As New List(Of MagickImage) For i As Integer = 1 To steps Dim ratio As Double = i / steps Using secondCropped As New MagickImage(secondImage) Dim cropWidth As UInteger = secondImage.Width Dim cropHeight As UInteger = secondImage.Height Dim offsetX As Integer = 0 Dim offsetY As Integer = 0 Dim drawX As Integer = 0 Dim drawY As Integer = 0 Select Case direction Case System.Windows.Forms.FlowDirection.LeftToRight cropWidth = CUInt(secondImage.Width * ratio) offsetX = 0 drawX = 0 Case System.Windows.Forms.FlowDirection.RightToLeft cropWidth = CUInt(secondImage.Width * ratio) offsetX = CInt(secondImage.Width - cropWidth) drawX = offsetX Case System.Windows.Forms.FlowDirection.TopDown cropHeight = CUInt(secondImage.Height * ratio) offsetY = 0 drawY = 0 Case System.Windows.Forms.FlowDirection.BottomUp cropHeight = CUInt(secondImage.Height * ratio) offsetY = CInt(secondImage.Height - cropHeight) drawY = offsetY End Select Dim geometry As New MagickGeometry(offsetX, offsetY, cropWidth, cropHeight) secondCropped.Crop(geometry) secondCropped.ResetPage() Dim frame As New MagickImage(firstImage) frame.Composite(secondCropped, drawX, drawY, CompositeOperator.Over) frameTransformation?.Invoke(frame) frame.AnimationDelay = CUInt(animationDelay) frames.Add(frame) End Using Next Return frames End Function
Fundido de entrada de imagen B sobre imagen A:  ''' <summary> ''' Generates a sequence of transition frames between two <see cref="MagickImage"/> instances, ''' gradually fading in the second image over the first one. ''' </summary> ''' ''' <param name="firstImage"> ''' The starting image of the transition. ''' </param> ''' ''' <param name="secondImage"> ''' The image to fade in over <paramref name="firstImage"/>. ''' </param> ''' ''' <param name="steps"> ''' The number of intermediate frames to generate for the transition. ''' <para></para> ''' A higher value may result in a smoother, slower visual transition, ''' at the cost of increased processing time to generate the effect ''' and increased number of images / file size for the resulting animation. ''' <para></para> ''' Minimum value is 3. Default value is 5. ''' </param> ''' ''' <param name="animationDelay"> ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence. ''' <para></para> ''' Default value is 1 (10 milliseconds). ''' </param> ''' ''' <param name="frameTransformation"> ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object) ''' used to create the transition animation. This allows fine-tuning of image properties such as format, ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class. ''' <para></para> ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate. ''' <para></para> ''' Code Example in VB.NET: ''' <code>Dim transformation As Action(Of MagickImage) = ''' Sub(x As MagickImage) ''' x.AnimationDelay = 1 ' 10 milliseconds ''' x.Format = MagickFormat.Jpg ''' x.Quality = 90 ''' End Sub '''</code> ''' ''' Code Example in C#: ''' <code>Action<MagickImage> transformation = (MagickImage x) => { ''' x.AnimationDelay = 1; // 1 10 milliseconds ''' x.Format = MagickFormat.Jpg; ''' x.Quality = 90; ''' };</code> ''' </param> ''' ''' <returns> ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation. ''' <para></para> ''' All frames returned must be disposed of by the caller to free resources when no longer needed. ''' </returns> <DebuggerStepThrough> Public Shared Function GenerateFadeInOverTransition(firstImage As MagickImage, secondImage As MagickImage, steps As Integer, animationDelay As Integer, Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage) If firstImage Is Nothing Then Throw New ArgumentNullException(NameOf(firstImage)) End If If secondImage Is Nothing Then Throw New ArgumentNullException(NameOf(secondImage)) End If If steps < 3 Then Throw New ArgumentOutOfRangeException(NameOf(steps), steps, "The steps value must be equal to or greater than three.") End If If animationDelay <= 0 Then Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay, "The animation delay value must be greater than zero.") End If Dim frames As New List(Of MagickImage) For i As Integer = 0 To steps Dim alpha As Double = i / steps Dim frame As New MagickImage(firstImage) Using overlay As New MagickImage(secondImage) overlay.Alpha(AlphaOption.On) overlay.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha) frame.Composite(overlay, CompositeOperator.Over) frameTransformation?.Invoke(frame) frame.AnimationDelay = CUInt(animationDelay) frames.Add(frame) End Using Next Return frames End Function
Fundido de entrada negro:  ''' <summary> ''' Generates a sequence of transition frames, gradually fading in from black the specified <see cref="MagickImage"/> object. ''' </summary> ''' ''' <param name="image"> ''' The <see cref="MagickImage"/> object to fade in from black. ''' </param> ''' ''' <param name="steps"> ''' The number of intermediate frames to generate for the transition. ''' <para></para> ''' A higher value may result in a smoother, slower visual transition, ''' at the cost of increased processing time to generate the effect ''' and increased number of images / file size for the resulting animation. ''' <para></para> ''' Minimum value is 3. Default value is 5. ''' </param> ''' ''' <param name="animationDelay"> ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence. ''' <para></para> ''' Default value is 1 (10 milliseconds). ''' </param> ''' ''' <param name="frameTransformation"> ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object) ''' used to create the transition animation. This allows fine-tuning of image properties such as format, ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class. ''' <para></para> ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate. ''' <para></para> ''' Code Example in VB.NET: ''' <code>Dim transformation As Action(Of MagickImage) = ''' Sub(x As MagickImage) ''' x.AnimationDelay = 1 ' 10 milliseconds ''' x.Format = MagickFormat.Jpg ''' x.Quality = 90 ''' End Sub '''</code> ''' ''' Code Example in C#: ''' <code>Action<MagickImage> transformation = (MagickImage x) => { ''' x.AnimationDelay = 1; // 1 10 milliseconds ''' x.Format = MagickFormat.Jpg; ''' x.Quality = 90; ''' };</code> ''' </param> ''' ''' <returns> ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation. ''' <para></para> ''' All frames returned must be disposed of by the caller to free resources when no longer needed. ''' </returns> <DebuggerStepThrough> Public Shared Function GenerateFadeInFromBlackTransition(image As MagickImage, steps As Integer, animationDelay As Integer, Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage) If image Is Nothing Then Throw New ArgumentNullException(NameOf(image)) End If If steps < 3 Then Throw New ArgumentOutOfRangeException(NameOf(steps), steps, "The steps value must be equal to or greater than three.") End If If animationDelay <= 0 Then Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay, "The animation delay value must be greater than zero.") End If Dim frames As New List(Of MagickImage) Using black As New MagickImage(MagickColors.Black, image.Width, image.Height) For i As Integer = 0 To steps Dim alpha As Double = i / steps Using fadeImg As New MagickImage(image) fadeImg.Alpha(AlphaOption.On) fadeImg.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha) Dim background As New MagickImage(black) background.Composite(fadeImg, CompositeOperator.Over) frameTransformation?.Invoke(background) background.AnimationDelay = CUInt(animationDelay) frames.Add(background) End Using Next End Using Return frames End Function
Fundido de salida a negro para la imagen A, y fundido de entrada desde negro para la imagen B:   ''' <summary> ''' Generates a sequence of transition frames between two <see cref="MagickImage"/> instances, ''' gradually fading out to black the first image, then fading in from black the second image. ''' </summary> ''' ''' <param name="firstImage"> ''' The image to fade out to black. ''' </param> ''' ''' <param name="secondImage"> ''' The image to fade in from black. ''' </param> ''' ''' <param name="steps"> ''' The number of intermediate frames to generate for the transition. ''' <para></para> ''' A higher value may result in a smoother, slower visual transition, ''' at the cost of increased processing time to generate the effect ''' and increased number of images / file size for the resulting animation. ''' <para></para> ''' Minimum value is 3. Default value is 5. ''' </param> ''' ''' <param name="animationDelay"> ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence. ''' <para></para> ''' Default value is 1 (10 milliseconds). ''' </param> ''' ''' <param name="frameTransformation"> ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object) ''' used to create the transition animation. This allows fine-tuning of image properties such as format, ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class. ''' <para></para> ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate. ''' <para></para> ''' Code Example in VB.NET: ''' <code>Dim transformation As Action(Of MagickImage) = ''' Sub(x As MagickImage) ''' x.AnimationDelay = 1 ' 10 milliseconds ''' x.Format = MagickFormat.Jpg ''' x.Quality = 90 ''' End Sub '''</code> ''' ''' Code Example in C#: ''' <code>Action<MagickImage> transformation = (MagickImage x) => { ''' x.AnimationDelay = 1; // 1 10 milliseconds ''' x.Format = MagickFormat.Jpg; ''' x.Quality = 90; ''' };</code> ''' </param> ''' ''' <returns> ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation. ''' <para></para> ''' All frames returned must be disposed of by the caller to free resources when no longer needed. ''' </returns> <DebuggerStepThrough> Public Shared Function GenerateFadeOutAndFadeInToBlackTransition(firstImage As MagickImage, secondImage As MagickImage, steps As Integer, animationDelay As Integer, Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage) If firstImage Is Nothing Then Throw New ArgumentNullException(NameOf(firstImage)) End If If secondImage Is Nothing Then Throw New ArgumentNullException(NameOf(secondImage)) End If If steps < 3 Then Throw New ArgumentOutOfRangeException(NameOf(steps), steps, "The steps value must be equal to or greater than three.") End If If animationDelay <= 0 Then Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay, "The animation delay value must be greater than zero.") End If Dim frames As New List(Of MagickImage) Using blackImage As New MagickImage(MagickColors.Black, firstImage.Width, firstImage.Height) ' PHASE 1: Fade firstImage to black For i As Integer = 0 To steps Dim alpha As Double = 1.0 - (i / steps) Dim background As New MagickImage(blackImage) firstImage.Alpha(AlphaOption.On) firstImage.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha) background.Composite(firstImage, CompositeOperator.Over) frameTransformation?.Invoke(background) background.AnimationDelay = CUInt(animationDelay) frames.Add(background) Next ' PHASE 2: Fade in secondImage from black For i As Integer = 1 To steps ' Empieza en 1 para no duplicar el frame negro Dim alpha As Double = i / steps Using baseImage As New MagickImage(secondImage) Dim background As New MagickImage(blackImage) baseImage.Alpha(AlphaOption.On) baseImage.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha) background.Composite(baseImage, CompositeOperator.Over) frameTransformation?.Invoke(background) background.AnimationDelay = CUInt(animationDelay) frames.Add(background) End Using Next Return frames End Using End Function
Fundido de salida a negro: ''' <summary> ''' Generates a sequence of transition frames, gradually fading out to black the specified <see cref="MagickImage"/> object. ''' </summary> ''' ''' <param name="image"> ''' The <see cref="MagickImage"/> object to fade out to black. ''' </param> ''' ''' <param name="steps"> ''' The number of intermediate frames to generate for the transition. ''' <para></para> ''' A higher value may result in a smoother, slower visual transition, ''' at the cost of increased processing time to generate the effect ''' and increased number of images / file size for the resulting animation. ''' <para></para> ''' Minimum value is 3. Default value is 5. ''' </param> ''' ''' <param name="animationDelay"> ''' The time in 1/100ths of a second which must expire before splaying the next image in the transition sequence. ''' <para></para> ''' Default value is 1 (10 milliseconds). ''' </param> ''' ''' <param name="frameTransformation"> ''' An <see cref="Action(Of MagickImage)"/> delegate that applies custom transformations to each frame (<see cref="MagickImage"/> object) ''' used to create the transition animation. This allows fine-tuning of image properties such as format, ''' color profile, quality and other supported properties and methods by <see cref="MagickImage"/> class. ''' <para></para> ''' Note: <paramref name="animationDelay"/> value cannot be overridden in <paramref name="frameTransformation"/> delegate. ''' <para></para> ''' Code Example in VB.NET: ''' <code>Dim transformation As Action(Of MagickImage) = ''' Sub(x As MagickImage) ''' x.Format = MagickFormat.Jpg ''' x.Quality = 90 ''' End Sub '''</code> ''' ''' Code Example in C#: ''' <code>Action<MagickImage> transformation = (MagickImage x) => { ''' x.AnimationDelay = 1; // 1 10 milliseconds ''' x.Format = MagickFormat.Jpg; ''' x.Quality = 90; ''' };</code> ''' </param> ''' ''' <returns> ''' An <see cref="IList"/> of <see cref="MagickImage"/> objects representing each frame of the transition animation. ''' <para></para> ''' All frames returned must be disposed of by the caller to free resources when no longer needed. ''' </returns> <DebuggerStepThrough> Public Shared Function GenerateFadeOutToBlackTransition(image As MagickImage, steps As Integer, animationDelay As Integer, Optional frameTransformation As Action(Of MagickImage) = Nothing) As IList(Of MagickImage) If image Is Nothing Then Throw New ArgumentNullException(NameOf(image)) End If If steps < 3 Then Throw New ArgumentOutOfRangeException(NameOf(steps), steps, "The steps value must be equal to or greater than three.") End If If animationDelay <= 0 Then Throw New ArgumentOutOfRangeException(NameOf(animationDelay), animationDelay, "The animation delay value must be greater than zero.") End If Dim frames As New List(Of MagickImage) Using black As New MagickImage(MagickColors.Black, image.Width, image.Height) For i As Integer = 0 To steps Dim alpha As Double = 1.0 - (i / steps) Using fadeImg As New MagickImage(image) fadeImg.Alpha(AlphaOption.On) fadeImg.Evaluate(Channels.Alpha, EvaluateOperator.Multiply, alpha) Dim background As New MagickImage(black) background.Composite(fadeImg, CompositeOperator.Over) frameTransformation?.Invoke(background) background.AnimationDelay = CUInt(animationDelay) frames.Add(background) End Using Next End Using Return frames End Function
Nota: además de esto escribí un método para generar un GIF animado a partir de un array de imágenes, pero no puedo compartirlo aquí ya que utiliza diversos elementos de mi librería comercial y es mucho lío extraer por separado cada código necesario para insertarlo y compartirlo aquí.
|
|
|
16
|
Informática / Software / Re: VMWare workstation pro 17 - Keys
|
en: 10 Junio 2025, 06:32 am
|
El link de descarga original es éste: ... El enlace redirige a la página de inicio de sesión de Broadcom. Supongo que con las cookies guardadas de inicio de sesión el enlace si que funcionará.
Aquí pueden descargar los productos de VmWare sin pasar por el registro de usuario en Broadcom: Y de esta forma además evitan tener que estudiar un manual informático de navegación para poder usar el tedioso sitio web de Broadcom con los infumables cambios que hicieron a la anterior interfaz web de VmWare. Algo criticado por la gran mayoría en Reddit... Atentamente, Elektro.
|
|
|
18
|
Foros Generales / Noticias / Re: Adiós VGA, el HDMI acaba oficialmente con una de las conexiones más míticas de tu PC
|
en: 9 Junio 2025, 02:39 am
|
Como dicen los viejos "ya no se fabrican como antes"... Más sabe el diablo por viejo que por diablo. 👍 Entre la reduflación, que nos hace pagar más por menos cantidad y de peor calidad que hace 20 e incluso 100 años, y la obsolescencia programada, donde lo que ayer era completamente funcional mañana se convierte en un bonito pisapapeles, y la manipulación emocional del marketing, que nos convence de necesitar lo que no necesitamos y de desear lo que jamás nos llenará ningún vacío... Vivimos presos en una era del consumismo más conformista, donde la mediocridad se ha normalizado hasta alcanzar la degradación absoluta, y se acepta sin cuestionamientos, mientras que cada vez dependemos más de servicios temporales y bienes prestados. "No poseerás nada, y serás feliz", nos repiten desde algunas esferas, pero lo que no te cuentan es quienes se regocijan nadando en piscinas de lujo bañadas en oro y con burbujas de diamante líquido gracias a todo lo que tú estás obligado a renunciar. Atentamente, Elektro.
|
|
|
19
|
Informática / Software / Re: Como puedo bloquear los molestos mensajes de Mcafee que me llegan a mi correo de outlook
|
en: 8 Junio 2025, 20:18 pm
|
se trata de una estafa de Phishing Sin duda, compañero. El tipo de engaño no sabría decirte con exactitud sin entrar al enlace y ver que hay y si piden contraseña de McAfee o por lo contrario otros datos más personales y bancarios, o que llames a un número telefónico etc, pero no existe ni la mínima duda de que ese e-mail tiene intenciones maliciosas. El mensaje está claramente diseñado para generar alarma y urgencia, lo cual es una señal inequívoca. Ese sentido de transmitir urgencia es una de las tácticas más comunes en este tipo de engaños. Su objetivo es que actúes de forma impulsiva, sin analizar la situación, sin pararte a pensar, llevándote a cometer errores como hacer clic en un enlace o proporcionar datos personales, por que... recuerda: "¡TIENES UN PROBLEMA MUY GORDO Y SOLO TIENES 24 HORAS PARA RESOLVERLO! NO PIENSES MÁS Y HAZ CLICK 👉👉👉👉👉👉👉👉👉 AQUÍ 👈👈👈👈👈👈👈👈👈ANTES DE QUE SE TE ACABE EL TIEMPO¡RÁPIDO! Es muy burdo ese e-mail de "McAfee". Todos suelen ser así, con el mismo tipo de alarmismo. Parece que crear urgencia funciona más que crear codicia con e-mails del principe nigeriano que te deja su fortuna. En fin. Hay otro punto clave y principal que delata el engaño: un e-mail legítimo de una empresa de cierto reconocimiento siempre se dirigirá a ti por tu nombre de pila, o como mínimo por tu nombre de usuario. Y porque cuando los bloqueo me vuelven a enviar los mismo mensajes Por que así es como trabajan estos grupos y mafias organizadas, insistiendo e insistiendo sin descanso, a ver si algún día te pillan con la guardia baja desprevenido y te despistas y finalmente caes en la trampa y te logran estafar. A ellos no les cuesta nada seguir enviándote e-mails, y lo van a seguir haciendo durante... siempre. Bienvenido al club.  alguien sabe alguna solución para bloquearlos de forma de que no me vuelvan aparecer en mi cuenta de correo. Lamentablemente no te va a servir de nada bloquear una dirección de correo específica, cosa que ya me imagino que habrás hecho en Outlook y por eso pareces estar preguntando por una forma definitiva para que esos e-mails dejen de llegarte... pero es que las mafias operan con una fuente inagotable de recursos económicos y direcciones desde las que van a seguir enviándote ese tipo de e-mails, y no van a esperar a que les bloquees una dirección específica para empezar a enviarte correos desde otra de sus cuentas, lo van a hacer igualmente tarde o temprano por simple protocolo para dejar de usar cuenta "quemada" y empezar a usar una cuenta con más posibilidades de pasar el filtro de SPAM de Microsoft (y el de Google, etc) para que el mensaje malicioso termine en tu bandeja de entrada, y puede que también para seguir ejerciendo presión a las posibles víctimas. Seguramente tendrán sistemas automatizados para enviar grandes cantidades de e-mails, así que tu dirección de correo solo es una más en una lista donde habrá decenas, cientos de miles o millones de direcciones. Desde el momento en el que tu correo se filtra por A o por B y pasa a estar en las manos de este tipo de mafias, lo mejor que puedes hacer es aceptarlo con la mejor de tus sonrisas, y, si el Outlook no te mueve automáticamente esos correos a la bandeja de SPAM, pues los vas a marcando tú como SPAM. Eso y confiar en la efectividad de Microsoft, dejándoles suficiente margen de tiempo para que ese tipo de e-mails empiecen a ser filtrados automáticamente a la bandeja de SPAM y no te sigan molestando. Pero no será la última vez que esto te vuelva a ocurrir... muchos e-mails maliciosos pasan el filtro de SPAM de Microsoft. No puedes hacer nada más para impedir que te tarde o temprano te sigan llegando correos maliciosos, al menos que yo sepa, por que la solución efectiva sería interrumpir la operatividad de esa mafia, es decir detenerlos y encarcelarlos a todos, y además tener suerte para que tu dirección de correo no acabe siendo revendida en cualquier subasta para otros grupos y personas que se pongan a enviarte más e-mails maliciosos. Puede ser un ciclo sin fin. A no ser que te hagas una nueva cuenta de correo y jamás la utilices para registrarte en absolutamente ningún sitio web ni en ningún servicio que te pida una dirección de correo, lo cual es inviable hoy en día ya que en algún momento la tendrías que utilizar para conceder esa información ¿sino para que querrías tener una cuenta de correo sin usar, verdad?. Y si activases el reenvío (forwarding) de correos recibidos desde tu cuenta comprometida a esa hipotética nueva cuenta "virgen" te seguirían llegando los mismos mensajes de SPAM (los que pasen el filtro de SPAM de Microsoft)... EDITO: algo que se me ocurre que puedes hacer, es definir una regla para que cualquier e-mail cuyo contenido incluya la palabra "McAfee" sea enviado directamente a la bandeja de SPAM. Pero eso puede convertirse en un arma de doble filo. A ver, si tú estás completamente seguro que no vas a recibir ningún e-mail legítimo que vaya a contener la palabra "McAfee", pues entonces hazlo sin miedo, pero debo advertirte que su efectividad dependerá de como esté compuesto el html de ese e-mail malicioso, ya que podría contener caracteres invisibles u otras cosas imperceptibles a simple vista que dificulten la detección y la construcción de esa regla. 👍 Pasos a seguir, desde un PC: 1. Usa el navegador web para navegar a la dirección: https://outlook.live.com/mail/2. En la esquina superior derecha, al lado de tu foto/avatar, verás el icono de un engranaje, le pinchas ahí y se abrirá un menú con opciones. 3. En ese menú verás una barra lateral a la izquierda con un elemento que pone "✉️ Correo", le pinchas ahí y luego a "Reglas" en el submenú que se despliega a su derecha. 4. Haces click en el botón: "➕ Agregar nueva regla" 5. 1. Le asignas el nombre que quieras, por ejemplo: "Descartar correos McAfee" 2. Seleccionas como condición: "El cuerpo del mensaje incluye", y a la derecha escribes la palabra "McAfee" (sin comillas) 3. Seleccionas como acción: "Mover a" -> "Correo no deseado", o directamente seleccionas la acción "Eliminar", dependiendo de lo que prefieras hacer. La casilla "Detener el proceso de más reglas" la dejas marcada. (en caso de que creas necesitar definir más reglas para procesar este tipo de correos, desmárcala) Por último, haz click en el botón "Guardar". Listo, ya tienes definida tu regla anti-McAfee y en funcionamiento. Otra cosa es, como ya dije, que la regla funcione de la forma esperada dependiendo del html de ese tipo de e-mails maliciosos. Si no te funciona puedes probar a editar esa regla para reemplazar la palabra "McAfee" por otra palabra o frase que aparezca en el e-mail, como por ejemplo: "Tienes 24 horas" De todas formas, yo que llevo sufriendo este tipo de e-mails maliciosos desde hace muchos años (como todo el mundo en menor o mayor medida, supongo) te advierto que las personas detrás del envío de esos correos maliciosos se conocen todos los trucos, no actúan por mucho tiempo de la misma manera con el mismo tipo de contenido en el cuerpo del mensaje, así que pueden cambiar ciertas palabras clave y cosas más sutiles, o cambios más drásticos, volviendo inefectivas las reglas de filtro definidas. PD: sé que he escrito casi una Biblia, lo siento por hacer leer tanto.  Atentamente, Elektro.
|
|
|
20
|
Programación / Scripting / Re: [APORTE] [Bash] (Linux) VMWare: Montar / Desmontar 'Shared Folders'
|
en: 8 Junio 2025, 14:39 pm
|
No puedo editar el post principal, así que... aquí les dejo los mismos scripts, con ligeras mejoras y en inglés: Mount_VMWare_Shared_Folders.sh#!/bin/bash
############################################################################### # CONFIGURATION # ###############################################################################
# Folder to mount: VMWare Shared Folders (".host:/" = all folders) MOUNT_SOURCE=".host:/" MOUNT_DESTINATION="/mnt/shared_folders"
############################################################################### # MAIN SCRIPT EXECUTION # ###############################################################################
# ========================================= # Mount VMWare shared folders # =========================================
# Create /mnt/shared_folders if it doesn't exist if [ ! -d "$MOUNT_DESTINATION" ]; then echo "📂 Creating folder $MOUNT_DESTINATION..." sudo mkdir -p "$MOUNT_DESTINATION" fi
# Check if already mounted at /mnt/shared_folders if mountpoint -q "$MOUNT_DESTINATION"; then echo "🚫 $MOUNT_DESTINATION is already mounted." else echo "🔗 Mounting VMWare shared folder at $MOUNT_DESTINATION..." sudo vmhgfs-fuse "$MOUNT_SOURCE" "$MOUNT_DESTINATION" -o allow_other if [ $? -ne 0 ]; then echo "❌ Error mounting shared folder. Aborting..." exit 1 fi echo "✅ Successfully mounted VMWare shared folder at $MOUNT_DESTINATION." fi
# ==================================================================== # Create symbolic link to the shared folders on the Desktop # ====================================================================
# Detect desktop path using user-dirs.dirs (XDG standard) DESKTOP_DIR="$(xdg-user-dir DESKTOP)"
# Define source and destination for the link LINK_DESTINATION="$DESKTOP_DIR/VMWare Shared Folders"
# Create symbolic link only if it doesn't already exist if [ -L "$LINK_DESTINATION" ] || [ -e "$LINK_DESTINATION" ]; then echo "🚫 The link or file '$LINK_DESTINATION' already exists. No new link will be created." else ln -s "$MOUNT_DESTINATION" "$LINK_DESTINATION" echo "✅ Symbolic link created at: $LINK_DESTINATION" fi
echo -e "\n🏁 Operation completed." echo read -n1 -r -s -p "Press any key to finish..." echo Dismount_VMWare_Shared_Folders.sh#!/bin/bash
############################################################################### # CONFIGURATION # ###############################################################################
# Mount path for VMware shared folders MOUNT_DESTINATION="/mnt/shared_folders"
############################################################################### # MAIN SCRIPT EXECUTION # ###############################################################################
echo "🔍 Checking if $MOUNT_DESTINATION is mounted..."
if mountpoint -q "$MOUNT_DESTINATION"; then echo "📤 Dismounting VMware shared folder from: $MOUNT_DESTINATION..." sudo umount "$MOUNT_DESTINATION" if [ $? -eq 0 ]; then echo "✅ Shared folder successfully unmounted." else echo "❌ Error unmounting $MOUNT_DESTINATION. Is it in use?" exit 1 fi else echo "⚠️ $MOUNT_DESTINATION is not currently mounted." if [ -d "$MOUNT_DESTINATION" ]; then echo "ℹ️ The folder exists but does not have an active mount point." else echo "🚫 The folder $MOUNT_DESTINATION does not exist." fi fi
echo -e "\n🏁 Operation completed." echo read -n1 -r -s -p "Press any key to finish..." echo
|
|
|
|
|
|
|