elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1] 2 3
1  Programación / .NET (C#, VB.NET, ASP) / Comunicación SerialPort concurrente en: 8 Agosto 2021, 19:44 pm
Hola a tod@s.
Estoy con un proyecto desde hace un tiempo y aunque lo he planteado de varias formas diferentes, no logró decantarme por una. Os lo comento por si alguien quiere aportar su granito de arena:

Tengo x dispositivos que se comunican con el PC mediante un mismo puerto serie creado por un receptor. Cada dispositivo tiene un ID (2 dígitos) y para enviar un comando (aaaa) al dispositivo bb hay que escribir en el puerto serie: bbaaaa. El dispositivo responde con el mismo comando (bbaaaa) seguido de algún argumento si fuera necesario.

Como todos los dispositivos comparten el mismo puerto serie, creé algo así:
Código
  1. public class Dispositivo {
  2.  private static SerialPort puertoSerie;
  3.  
  4.  public static void AbrirConexion(string nombreCOM) {...}
  5.  
  6.  public int Id { get; }
  7.  public int NumeroSerie { get => ObtenerNumeroSerie(); }
  8.  //...
  9. }

En un principio la comunicación era comando-respuesta por lo que en los métodos utilizados implementé algo así:
Código
  1. lock(puertoSerie) {
  2.  EnviarComando(comando);
  3.  respuesta = RecibirRespuesta();
  4. }
  5. // gestion de la respuesta

De esta manera me aseguraba de que cuando una instancia de un dispositivo enviaba un comando al puerto serie, ninguno más pudiese enviar nada hasta obtener una respuesta de este (o superar el ReadTimeout del puerto serie y entonces devolver null). Esto funcionaba perfectamente mientras los comandos fuesen todos comando-respuesta.

El problema viene al intentar utilizar un comando que se envía una vez pero genera muchas respuestas seguidas durante x tiempo. Esta implementación para la comunicación ya no me servía así que opté por lo siguiente:
Código
  1. public class Dispositivo {
  2.  //...
  3.  private static readonly Dictionary<int, Dictionary<string, string>> gestorRespuestas = new Dictionary<int, Dictionary<string, string>>();
  4.  //...
  5. }

Lo que hago con esto es tener un almacén de respuestas. Cada dispositivo, tras enviar un comando se queda esperando una respuesta del puerto serie. Cuando ha obtenido una respuesta o null (si se supera el ReadTimeout) mira si esa respuesta coincide con la que estaba esperando. Si es así la gestiona y se acabó. Si no coincide, mira de qué dispositivo viene esa respuesta y a qué comando está respondiendo y lo almacena en gestorRespuestas[idEmisor][comandoRespondido], una vez hecho esto mira en gestorRespuestas[Id][comandoEnviado] si otro hilo ha almacenado una respuesta para él.

He realizado unas cuantas pruebas y funciona bastante bien excepto cuando escribo múltiples comandos en el puerto serie prácticamente al mismo tiempo que entonces alguno no llega a responderse nunca. Supongo que es porque hay que esperar un poco entre comando y comando (agregando una espera de 50 ms no he conseguido producir este problema).
La sincronización del puerto serie ahora la realizo justo para escribir en el puerto serie y para leer de él.


Me preguntaba si este enfoque es correcto o debería diseñar otra solución. Pensé también en hacer una cola de envíos y tener un único subproceso enviando comandos de esa cola cada x ms y otro subproceso únicamente para obtener las respuestas y guardarlas en el gestorRespuestas. Así cada hilo que trabaja con una instancia de dispositivo sólo tendría que acceder al gestorRespuestas y nunca al puerto serie directamente.
También he pensado en crear una clase ConcurrentSerialPort para no tener que gestionar los bloqueos desde la clase Dispositivo.

Estaré a la espera de vuestras aportaciones. :rolleyes:
2  Comunicaciones / Redes / Configurar router como punto de acceso en: 21 Abril 2021, 21:44 pm
Hola a tod@s, estoy teniendo un problema al configurar un router como punto de acceso.
Tengo algunos conocimientos teóricos de redes y en alguna ocasión he accedido al router de mi casa para modificar algún ajuste pero nada más lejos de la realidad. El problema viene cuando me piden que configure un router de una red más extensa.

Situación actual: el router en cuestión está funcionando con conectividad WiFi y Ethernet (aunque la Ethernet no se utiliza). Al mismo tiempo está conectado a un switch que está conectado digamos al router principal.
Objetivo: configurar el router en cuestión como punto de acceso para ampliar la señal WiFi del router principal.

Cuando intenté configurarlo, entrando en la configuración del router y cambiando el modo de operación a punto de acceso, conseguí dejarlo funcionando pero únicamente mediante cable Ethernet, sin WiFi.
Me comentaron que puede ser por tener el router conectado a un switch y no directamente al router principal. Entonces quería saber si esto es así o el problema pueda ser otro o si hubiese alguna solución.

Muchas gracias de antemano.
3  Sistemas Operativos / Windows / [W10] Pantalla negra al conectar PC a la corriente en: 30 Enero 2021, 17:58 pm
Hace unos meses hice una instalación limpia de Windows 10 en un Acer Aspire ES1-511 (que ya tenía W10 y funcionaba bien). Al principio tenía un problema con el touchpad que lo solucioné instalando los drivers correspondientes. Después de eso empezó a funcionar todo correctamente pero desde hace ya un tiempo tiene otro problema que no logro solucionar:
Si está el ordenador encendido y se conecta a la corriente, la pantalla se queda negra. En ocasiones se soluciona pulsando varias veces el botón de encendido pero en otras ocasiones es necesario apagarlo del todo y volver a encenderlo para que funcione. Este problema empezó a ocurrir en algunas ocasiones pero actualmente ocurre prácticamente siempre.

El ordenador no está en mi posesión por lo que tampoco puedo hacer muchas pruebas.
¿Alguien sabe a qué puede deberse? Gracias.
4  Programación / Java / [JAXB] Generar xsd mediante schemagen en: 18 Diciembre 2020, 12:53 pm
He tenido problemas para generar un schema xsd a partir de unas clases .java mediante el comando schemagen.

Tenía las siguientes clases (todas ellas en el mismo directorio . para simplificar):
Código:
ConjuntoVehiculos
Vehiculo
Furgoneta extends Vehiculo
Coche extends Vehiculo
Entonces al ejecutar:
Código:
schemagen -d . -cp *.java -encoding utf-8
Se me generaba el schema xsd pero me aparecía el siguiente mensaje y no se incluía el elemento Coche en el schema.
Citar
ConjuntoVehiculos.java:14: error: cannot find symbol
                        @XmlElementRef(name = "Coche", type = Coche.class),
                                                                                             ^
    symbol:   class Coche
    location: class ConjuntoVehiculos
Esa anotación @XmlElementRef la tengo junto a otras dos que hacen referencia a Vehiculo y Furgoneta y estas otras no producen ningún problema. He comprobado los nombres y está todo bien escrito.

He hecho varias pruebas incluyendo los ficheros .java uno por uno y compilándolos primero (aunque por lo que he visto, schemagen debe llamar internamente a javac para compilar los ficheros fuente) pero obtenía más errores y no me generaba el schema.

Al final después de mucho probar me ha dado por compilar los ficheros .java (en el mismo directorio) y ejecutar:
Código:
schemagen -d . -cp . ConjuntoVehiculos.java -encoding utf-8
Con esto sí he conseguido generar el schema correctamente, sin errores e incluyendo todos los elementos pero no entiendo por qué ha funcionado. Es decir, no entiendo cómo funciona schemagen. He buscado en muchas webs y en todas aparece un ejemplo sencillo que funciona con el primer comando que he probado y no se explica nada más.

Espero que alguien conozca esta herramienta y pueda ayudarme. :-X

PD: Estoy utilizando schemagen 3.0.0 (recientemente descargado junto con las otras herramientas de JAXB).
5  Foros Generales / Dudas Generales / [Debate] ¿Qué plataforma utilizar para publicar contenidos? (YouTube, Blogs,...) en: 7 Diciembre 2020, 02:15 am
Desde hace algún tiempo tengo en mente empezar a publicar algunos contenidos como tutoriales, blogs o similares sobre informática, programación y puede que más adelante sobre otros temas relacionados o no con los anteriores. El problema me surge cuando pienso en qué formato y plataforma utilizar para ello, por lo que abro aquí este debate para cualquiera que quiera expresar su opinión (tanto si es creador de contenido como si no) o dar a conocer otras alternativas.

La duda principal que tengo es: ¿vídeo o texto?.
Aunque supongo que en formato texto conlleva menos trabajo de edición, también pueden acabar siendo textos demasiado grandes (lo he comprobado ya en este foro cuando intento responder un tema de forma breve y al final me acabo explayando más de lo esperado). Por esto pensé en hacerlo mejor en formato vídeo aunque no sé cómo me desenvolveré luego.

Y la otra duda es: ¿qué plataforma utilizar?
No conozco nada sobre blogs por lo que no sé qué páginas existen para publicar contenido (obviamente de forma gratuita para empezar) o cómo gestionarlo una vez creado.
Por otro lado, para publicar vídeos, tenía en mente la opción más conocida (creo): YouTube. Conozco algunas otras webs pero que tienen un propósito más específico y de momento prefiero elegir una más flexible y ya más adelante valorar si empezar en otras plataformas.

Dicho esto y como ya he comentado al principio, me gustaría conocer otras opiniones y recomendaciones de personas que se hayan visto, o no, en esta situación.

PD: Por si alguien se ha preocupado, no voy a dejar este foro pero sí quiero empezar otros proyectos personales paralelamente...  :xD

6  Foros Generales / Sugerencias y dudas sobre el Foro / Problema de visualización de la Portada/Inicio en: 28 Noviembre 2020, 09:17 am
Desde que he accedido al foro (hace unas 12 horas) he notado que en mi ordenador no se visualiza bien la página principal (portada) de elhacker.net. La barra superior de: Inicio | Foro | Blog | WarZone |... se ven correctamente pero la imagen superior aparece cortada (solo se ve "cker net").
Además el contenido central de la página aparece dispuesto en vertical (primero la parte que aparecía normalmente a la izquierda: elhacker.NET | Servicios | Descargas | Participa |..., debajo de lo anterior: el tablón de novedades | últimas entradas... | últimas noticias... |..., y debajo de estos últimos: Buscador | Boletín mensual | Estadísticas del Foro |...).

He probado a recargar la página varias veces y siempre se ve igual.
Me parece raro puesto que no he modificado ninguna configuración de mi ordenador. Sin embargo, si bajo el zoom del navegador al 80%, se vuelve a ver como siempre pero si lo dejo al 100% (como lo he tenido siempre) se ve como menciono arriba.

He accedido desde otro ordenador y en este se ve todo correctamente.
¿Alguien sabe por qué puede ser?
7  Comunicaciones / Redes / [VirtualBox] Adaptadores de Red en: 24 Noviembre 2020, 00:52 am
He instalado en varias ocasiones VirtualBox en una máquina Windows 10. Me he dado cuenta de que cada vez que instalo VBox, se crea un adaptador de red: <VirtualBox Host-Only Network> (Habilitado). Hasta aquí creo que todo normal.

Sin embargo; en ocasiones, cuando ejecuto VBox, me aparece varias ventanas seguidas solicitando permisos para VBox y en caso de que acepte, me crea otro/s adaptador/es <VirtualBox Host-Only Network #X> (donde X es un número {2, 3, 4, ...}) (Habilitado) y después se inicia el programa en sí.
En cambio si cancelo las ventanas de permisos de VBox, el programa se inicia con normalidad sin crear más adaptadores.
No me queda muy claro por qué se crean más adaptadores de red y por qué esto sólo ocurre en algunas ocasiones.

Empecé a notar esto después de instalar en varias ocasiones Genymotion. La primera vez que lo instalé me pidió permisos de ejecución para VBox y se los concedí porque sino fallaba. Después de eso estuvo una temporada que funcionaba bien y de repente me empezó a pasar como con VBox: en ocasiones cuando ejecuto Genymotion me pide permisos para ejecutar VBox y si no se los doy no puedo iniciarlo. Sin embargo; si se los doy, me salen varias ventanas seguidas seguidas de permisos y me crea un adaptador de red nuevo cada vez que acepto los permisos. Lo peor de todo es que cuando los acepto, Genymotion arranca correctamente pero cuando voy a iniciar un dispositivo virtual, este se queda cargando y nunca llega a iniciar (o salta un error).

He buscado documentación en las páginas tanto de VBox como de Genymotion y en otras páginas pero siempre te explican los tipos de conexión de las VMs y no he encontrado nada sobre este tema. Además no tengo muchos conocimientos de redes por lo que espero que alguien pueda ayudarme con este tema.

PD: Necesito instalar Genymotion pero actualmente lo tengo desinstalado tras haber tenido estos problemas.
8  Programación / Programación General / [Android Studio] Alternativas de IDE y/o AVD en: 11 Noviembre 2020, 03:10 am
Estoy empezando a programar en Android por medio de Android Studio y se me está haciendo desesperante. Es por temas de estudios y tengo que desarrollar aplicaciones Android usando Java desde este IDE.

Principalmente, los problemas que tengo con este IDE son:
  • Los tiempos de carga cuando abro un proyecto no son pequeños que digamos y eso que son proyectos muy sencillos.
  • Cada vez que ejecuto una aplicación, es bastante lento construyendo el proyecto también. Además los proyectos aumentan mucho de tamaño al ser construidos. No sé si será por la plataforma (Android) o por el IDE pero nunca me ha pasado esto con proyectos de escritorio de Eclipse (Java) o Visual Studio (C#).
  • Los AVDs no son muy de fiar. He tenido problemas para ejecutar algunos intents implícitos en estos porque no se lanzan y al final he tenido que probar las aplicaciones en mi dispositivo (lo cual también es una pesadilla tener que estar siempre con el móvil conectado).
  • La vista de Diseño de los xml tampoco es muy de fiar. En ocasiones los componentes no se actualizan correctamente hasta después de ejecutar la aplicación.

He intentado utilizar el plugin de Genymotion para virtualizar los dispositivos Android pero este sólo está disponible hasta la versión 4.0 de AS. Ahora mismo que la última versión estable es la 4.1, no se puede instalar este plugin.

Quería saber si hay alguna forma o alternativa de solucionar al máximo estos inconvenientes pues se me está haciendo, como ya digo, desesperante desarrollar en Android.
9  Programación / Java / Dimensiones reales de un componente gráfico (JFrame) en: 29 Abril 2020, 16:18 pm
Estaba haciendo unas ventanas en Java cuando me dio por comprobar si realmente el tamaño de éstas se correspondía con el tamaño que había definido en el código fuente y he visto que no es así, no coinciden las medidas.
He estado leyendo sobre las dimensiones del JFrame (heredadas de Window), las dimensiones del Layout (que he probado también a usar diferentes tipos incluso null), los métodos set y get de height, width, minimumSize, preferredSize, bounds,... y todo lo que he ido encontrando por el camino; y no consigo unas conclusiones.

Os dejo un pequeño código de lo último que he probado y los resultados obtenidos:
Código
  1. public class App {
  2.  private Ventana miVentana;
  3.  
  4.  public static void main(String[] args){
  5.    miVentana = new Ventana();
  6.    miVentana.setSize(200, 200);
  7.    miVentana.setVisible(true);
  8.  }
  9. }
  10.  
  11. class Ventana extends JFrame {
  12.  public Ventana(){
  13.    getContentPane().setLayout(null);
  14.  }
  15. }

Establezco el layout a null para evitar que el layout pueda influir en las medidas de la ventana. Le doy un tamaño de 200 x 200 (que no choca con el tamaño mínimo de la ventana) pero al mostrar la ventana esta mide:
  • 234 x 242 (contando la barra de título)
  • 232 x 203 (contando el espacio interior de la ventana. Sin contar barra de título ni bordes)

He probado también a usar el método setBounds() para establecer la posición de la esquina superior izquierda en las coordenadas (0,0), es decir, que la ventana debería aparecer pegada también a la esquina superior izquierda, pero realmente tampoco es así. En el eje X se desplaza 8 píxeles a la derecha, es decir, que la esquina superior izquierda de la ventana aparece en las coordenadas (8,0).
Código
  1. // Sustituir el setSize(200, 200) del codigo anterior por:
  2. miVentana.setBounds(0, 0, 200, 200);

Sé que es un tema muy quisquilloso pero no sé de qué sirve poder establecer tamaños a las ventanas si luego no van a ser reales...
10  Foros Generales / Dudas Generales / Qué navegador usas?? en: 25 Abril 2020, 20:39 pm
No sabía muy bien dónde poner este tema pero ya que es un tema bastante abierto y de opinión pues he decidido ponerlo aquí...

Bueno pues la cosa es que siempre utilizo Chrome tanto en Windows como en Linux por tener integrada la cuenta de Google pero no me agrada mucho el consumo de RAM que tiene y que se abran varios procesos en el administrador de tareas; así que me he planteado si cambiar a otro como Firefox por ejemplo.

Quería ver la opinión del resto de usuarios sobre los navegadores... Los que hayáis probado y los pros y contras que les encontréis. A ver si con este tema, me animo a probar otras opciones.
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines