a

#125 No, yo tampoco, y en muchas ocasiones para tratar de evitarlo se hacen unos saltos mortales que son claramente mucho peores que usar un else. Los if anidados son el demonio y se pueden sustituir fácilmente por cláusulas de guarda que hacen que leer el código no requiera un cerebro en modo compilador. Y comparto el placer en devolver la comparación de turno, que ya es un booleano de por si, en lugar de enfangarlo todo con if y elses.

Pero los ternarios... eso debería ser ofensa criminal, con condena a documentar cien mil líneas de código por cada uno injustificado*.

Si miras tu código de hace 1 año y no te parece malo, es que sigues programando igual de mal

* (En realidad, si son null operator hasta me gustan )

a

#121 lol lol ¡Hereje!

Ahí no lo matas, sólo lo escondes en un ternario

El que pone un else y lo esconde es un parguela. Si me vas a poner un else, enséñamelo.

DraWatson

#122 es un hobby que tengo... Prostituir las normas de programación que no me convencen.

No quiero entrar en polémica, pero yo no soy enemiga del else, solo de los if con miles de or/and o anidación.

Y los if(a==b) return true else return false.... Y variantes... Esos son superiores a mi...

Lo peor es encontrar uno en mi código. lol

a

#125 No, yo tampoco, y en muchas ocasiones para tratar de evitarlo se hacen unos saltos mortales que son claramente mucho peores que usar un else. Los if anidados son el demonio y se pueden sustituir fácilmente por cláusulas de guarda que hacen que leer el código no requiera un cerebro en modo compilador. Y comparto el placer en devolver la comparación de turno, que ya es un booleano de por si, en lugar de enfangarlo todo con if y elses.

Pero los ternarios... eso debería ser ofensa criminal, con condena a documentar cien mil líneas de código por cada uno injustificado*.

Si miras tu código de hace 1 año y no te parece malo, es que sigues programando igual de mal

* (En realidad, si son null operator hasta me gustan )

DraWatson

#119

Console.WriteLine(DateTime.Now.Year > 2021 ? "Feliz año nuevo" : "Aún no...");


No es que me guste... Pero si hay que matar al else...

a

#121 lol lol ¡Hereje!

Ahí no lo matas, sólo lo escondes en un ternario

El que pone un else y lo esconde es un parguela. Si me vas a poner un else, enséñamelo.

DraWatson

#122 es un hobby que tengo... Prostituir las normas de programación que no me convencen.

No quiero entrar en polémica, pero yo no soy enemiga del else, solo de los if con miles de or/and o anidación.

Y los if(a==b) return true else return false.... Y variantes... Esos son superiores a mi...

Lo peor es encontrar uno en mi código. lol

a

#125 No, yo tampoco, y en muchas ocasiones para tratar de evitarlo se hacen unos saltos mortales que son claramente mucho peores que usar un else. Los if anidados son el demonio y se pueden sustituir fácilmente por cláusulas de guarda que hacen que leer el código no requiera un cerebro en modo compilador. Y comparto el placer en devolver la comparación de turno, que ya es un booleano de por si, en lugar de enfangarlo todo con if y elses.

Pero los ternarios... eso debería ser ofensa criminal, con condena a documentar cien mil líneas de código por cada uno injustificado*.

Si miras tu código de hace 1 año y no te parece malo, es que sigues programando igual de mal

* (En realidad, si son null operator hasta me gustan )

a

#59 En este caso sí, es trivial. Pero en código con mucha líneas, si en lugar de usar cláusulas de guarda vas implementando if-else's, cuando llegas a dónde está chicha del código tienes que retener en la mente un montón de condiciones para saber qué se va a ejecutar.

En el código que pone de ejemplo #86, te encontrarías un if al principio del todo y sus consecuencias (el else), al final del archivo. Es mucho más fácil si inviertes el if (si no X, tal => si X, tal) y sigues programando sabiendo que esa condición se cumple y con un nivel de indentación menos:

if (param === null)

// resto del programa

j

#118 Sí, sí, desde luego. Al final lo importante es que el código (una vez cumple los requisitos) sea lo más legible posible.

a

#38 Exactamente. En este caso yo declararía una variable al principio del código con el mensaje que quiero mostrar si no es el primer segundo del año, la cambiaría si se cumple el if y siempre, al final, la imprimiría por consola.

M

#42 Eso está bien... Hasta que el código cambie, o tengas un tercer caso que no imprima, y tengas el mismo problema.

BiRDo

#45 Pues cuando cambie lo cambias todo y en paz. Muchas veces se programa anticipándose a cambios futuros que nunca llegan, y al final eso es un error y una enorme cagada porque durante todo el tiempo que pasa desde que está el código escrito hasta el supuesto cambio, estás disfrutando de un código claramente subóptimo.

j

#42 Interesante. Para mi la verdad es que se lee bastante mejor "si la fecha es anterior a 2022 di una cosa, y si no, di otra" que "aquí tienes un mensaje, si ya estamos en 2022 lo cambias, y en cualquier caso muestra el mensaje".

a

#59 En este caso sí, es trivial. Pero en código con mucha líneas, si en lugar de usar cláusulas de guarda vas implementando if-else's, cuando llegas a dónde está chicha del código tienes que retener en la mente un montón de condiciones para saber qué se va a ejecutar.

En el código que pone de ejemplo #86, te encontrarías un if al principio del todo y sus consecuencias (el else), al final del archivo. Es mucho más fácil si inviertes el if (si no X, tal => si X, tal) y sigues programando sabiendo que esa condición se cumple y con un nivel de indentación menos:

if (param === null)

// resto del programa

j

#118 Sí, sí, desde luego. Al final lo importante es que el código (una vez cumple los requisitos) sea lo más legible posible.

a
D

#39 #41

Gracias, pero como proponéis mostrar el mensaje encerrado en el else?

neotobarra2

#c-85" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3605212/order/85">#85 Si está dentro de un método (y suponiendo que se corrige el problema del "==" cambiándolo por un ">=" o el operador que corresponda en C#, para evitar el error de que se considere estar en 2021 cuando ya es 2022), se me ocurre que se podría añadir un "return" a continuación del mensaje de feliz 2022, para que el método no siga ejecutándose. De esta forma no te haría falta ningún else, el otro mensaje lo pones a continuación sin condición alguna, si ya se ha mostrado el de feliz 2022 el return va a hacer que lo siguiente no se ejecute, y si no cumple la condición de que la fecha ya sea mayor al primer segundo de 2022 entonces es correcto que ejecute lo de 2021.

a

#85

msg = "Feliz año nuevo"

if (!newyear) ">

print msg

DraWatson

#119

Console.WriteLine(DateTime.Now.Year > 2021 ? "Feliz año nuevo" : "Aún no...");


No es que me guste... Pero si hay que matar al else...

a

#121 lol lol ¡Hereje!

Ahí no lo matas, sólo lo escondes en un ternario

El que pone un else y lo esconde es un parguela. Si me vas a poner un else, enséñamelo.

DraWatson

#122 es un hobby que tengo... Prostituir las normas de programación que no me convencen.

No quiero entrar en polémica, pero yo no soy enemiga del else, solo de los if con miles de or/and o anidación.

Y los if(a==b) return true else return false.... Y variantes... Esos son superiores a mi...

Lo peor es encontrar uno en mi código. lol

a

#125 No, yo tampoco, y en muchas ocasiones para tratar de evitarlo se hacen unos saltos mortales que son claramente mucho peores que usar un else. Los if anidados son el demonio y se pueden sustituir fácilmente por cláusulas de guarda que hacen que leer el código no requiera un cerebro en modo compilador. Y comparto el placer en devolver la comparación de turno, que ya es un booleano de por si, en lugar de enfangarlo todo con if y elses.

Pero los ternarios... eso debería ser ofensa criminal, con condena a documentar cien mil líneas de código por cada uno injustificado*.

Si miras tu código de hace 1 año y no te parece malo, es que sigues programando igual de mal

* (En realidad, si son null operator hasta me gustan )

Capitan_Centollo

#85 Puedes poner un return al final del cuerpo del if y dejar el contenido del else fuera. O puedes asignar uno de los mensajes a una variable, cambiarlo dentro de un if cuando se cumpla alguna condición y mostrar finalmente el mensaje después del if.

Esas son sólo dos posibilidades. Estoy seguro de que si me paro a pensarlo las encuentro mejores, como por ejemplo algo que implique el uso de expresiones regulares.

Seguro que todo eso se puede al final reducir a una única línea sencilla.

Ovlak

#39 lol lol lol
Mira que me harto de corregirle a los novatos ese tipo de composiciones. Sobre todo en validaciones de parámetros, en plan:

if(param != null)

else


Y eso irlo anidando

a

#59 En este caso sí, es trivial. Pero en código con mucha líneas, si en lugar de usar cláusulas de guarda vas implementando if-else's, cuando llegas a dónde está chicha del código tienes que retener en la mente un montón de condiciones para saber qué se va a ejecutar.

En el código que pone de ejemplo #86, te encontrarías un if al principio del todo y sus consecuencias (el else), al final del archivo. Es mucho más fácil si inviertes el if (si no X, tal => si X, tal) y sigues programando sabiendo que esa condición se cumple y con un nivel de indentación menos:

if (param === null)

// resto del programa

j

#118 Sí, sí, desde luego. Al final lo importante es que el código (una vez cumple los requisitos) sea lo más legible posible.

a

#21 Para mi, el cambio de debian a centos fue muy fácil. yum donde escribía apt y, en un 99% de los casos, a correr .

a

#90 ¡Gracias de nuevo!

Lo de tardar 100 segundos en empezar a comunicar la posición, ¿es fruto de la especificación o consecuencia del intervalo posterior entre comunicaciones? Vaya, ¿es porque empieza el contador cuando se enciende y se usa la misma instrucción para enviar la primera localización que las demás?

Jfreek

#123 Cuando enciendes el dispositivo tienes que esperar un tiempo antes de encender los módulos de radio y GPS porque no sabes si el usuario simplemente está jugueteando con el aparato, y tu tienes la necesidad de ahorra batería al máximo (el encendido de los módulos tiene un coste de batería alto). Tras 100 segundos se entiende que hay emergencia y se activa la radio y GPS. Creo que en la norma ahora mismo no hay nada referente a esto. En cualquier caso es un comportamiento lógico que tu mismo te das cuenta cuando haces las pruebas para testear el producto.

a

#74 Permanentemente, te lo dice la física. Si no te fías, lo metes en una jaula de Faraday hasta que tengas que usarlo y asunto arreglado; si inventasen una batería con esa capacidad, no creo que se lo callasen y lo usasen para rastrear silenciosamente a los vehículos de todos los españoles.

Al llevar un dispositivo más estás aumentando tu superficie de ataque y es posible prácticamente seguro que existen vulnerabilidades en el hardware que se utiliza, y dado esto, un atacante que tuviera acceso a ... olvídate, antes ya te han localizado, descargado las fotos y suplantado tu identidad otros 15 menos poderosos a través de tu smartphone.

Me parece necesaria esa sana preocupación por la privacidad, pero creo que esta debería afectar a este dispositivo cuando no tengas ni siquiera smartphone, puesto que, como poco, es igual de vulnerable y ya está directamente conectado a una varias empresas privadas que miden tus desplazamientos y muchas más cosas.

a
a

#80 Muchas gracias por toda la info, es muy enriquecedor. Ya que estamos, aprovecho para seguir curioseando...

¿Cómo habéis diseñado el gatillo que activa el modo de emergencia? ¿Es físico, detecta la alteración que produce el colocarlo sobre el coche?

Jfreek

#84 A nivel de hardware el dispositivo es relativamente sencillo. El encendido se realiza mediante movimiento mecánico, es decir, coges con una mano la cúpula y con la otra la base, y realizas un giro como si estuvieras habriendo una tapa de un bote ancho. Automáticamente se encienden los leds. A los 100 segundos se encenderán el modulo de radio y el GPS para empezar a transmitir, y transmitirá un mensaje de posición cada 100 segundos. No se incluye ningún sensor que pueda detectar la posición o el movimiento del dispositivo. Vamos que es tonto, tu lo enciendes, el empieza a enviar datos (a día de hoy solo a nuestro server) y cuando quieras lo apagas y deja de funcionar. Más curiosidades: aquí un operador (no digo el nombre...) nos hizo la jugada del quince, porque una vez ya teniamos el dispositovo fabricado nos exigían un apagado pasivo, esto quiere decir que primero se tenía que hacer una desconexión de la red, y luego apagar la electrónica. Nuestro diseño simple, mecánico, impedía que pudieramos hacer esto y obligaba a tirar a la basura una gran inversión ya realizada. Al final se nos dio la certificación, pero exigiendo compromiso de cambio en las próximas unidades.

EmuAGR

#90 Pues eso del apagado pasivo es una tontería. Si el dispositivo no responde a la red lo quitas de la tabla de la BTS y listo. Menudos pijoteros.

Jfreek

#105 Cuando trabajas con módulos de radio el mayor problema que te puedes encontrar es el consumo de batería, es muy elevado y esto hace que los dipositivos portatiles tengan poca duración de batería. Las tecnologías NB-IoT y LTE vienen a solucionar este problema. A grandes rasgos, la idea es que el estado "deep sleep" del modem de radio, lo que hace que consuma poca batería, es gestionado directamente por la celda de la red, y no por el microcontrolador. Se utilizan servidores remotos UDP (no TCP) y los mensajes no los envías directamente a este servidor desde el modem de radio, si no que se los guarda la antena y los envía ella cuando considera.

El apagado pasivo es porque el operador quiere que desactives el modo "deep sleep" de la antena, antes de apagar el modem, de este modo liberas tus slots en la celda de red. La medida que han tomado es que si pasada una hora tu no generas actividad en la red, entonces se te expulsa directamente.

EmuAGR

#112 Gracias por el comentario, bastante interesante para un teleco.

a

#90 ¡Gracias de nuevo!

Lo de tardar 100 segundos en empezar a comunicar la posición, ¿es fruto de la especificación o consecuencia del intervalo posterior entre comunicaciones? Vaya, ¿es porque empieza el contador cuando se enciende y se usa la misma instrucción para enviar la primera localización que las demás?

Jfreek

#123 Cuando enciendes el dispositivo tienes que esperar un tiempo antes de encender los módulos de radio y GPS porque no sabes si el usuario simplemente está jugueteando con el aparato, y tu tienes la necesidad de ahorra batería al máximo (el encendido de los módulos tiene un coste de batería alto). Tras 100 segundos se entiende que hay emergencia y se activa la radio y GPS. Creo que en la norma ahora mismo no hay nada referente a esto. En cualquier caso es un comportamiento lógico que tu mismo te das cuenta cuando haces las pruebas para testear el producto.

a

#51 ¿Las credenciales no las puedes sacar de la interfaz de configuración del router? (Normalmente, una web a la que accedes vía 192.168.0.1 o 192.168.1.1)

No estoy en Digi, pero en el mío, si voy a opciones avanzadas, las veo enmascaradas como contraseñas. Con editar el formulario (botón derecho, inspeccionar) y quitar el atributo type=password se quedan en texto plano.

Sea como sea, las tiene que tener el propio aparato y tienen que poder cambiarlas, así que de alguna forma tienen que estar accesibles.

e

#108
En mi caso no, Directamente no hay seccion de configuracion.

a

#44 He encontrado una serie de vídeos que tratan este tema:
Elección de la ONT. Sustitución router operadora

Sí que venden routers con ONT integrado, pero sustituir al router me parece más sencillo: incluso una raspberry 4 podría hacer las funciones. Lo que me llama la atención de todo esto es que dependas del hardware que hayan instalado en la centralita que de servicio a tu casa, lo que te pone en una situación comprometida si quieres cambiar de proveedor o vivienda, o incluso si el proveedor decide cambiar su OLT.

Poner el router de la operadora en modo bridge... te permite usar la interfaz y configuración de red interna del router que tu quieras, pero seguirás dependiendo siempre de la configuración del original, ¿no?.

Como dice #42, hay que tener cerca el original por si toca llamar a soporte. A mi me ha pasado lo mismo incluso con el router de la operadora, con tan solo cambiar las claves de acceso remoto.

Una conexión a internet deberían ser las credenciales de acceso y todo lo demás, opcional, pudiendo ponerlo el cliente o alquilártelo la operadora.

Heni

#105 En mi caso en modo Bridge cambia la interface y aparecen deshablitadas las opciones que salían antes (port forwarding, etc...)

a

#74 No creo que creen un navegador desde cero, sino que adaptarán Firefox o Chrome.

a

#7 ¿Cuáles? Yo he ido encontrando reemplazo para todas, algunas mejores, otras porque su funcionalidad la incorporaba firefox nativamente.

Tristemente, también tengo que tener un chrome para usar las páginas de Google con mejor experiencia.

c

#78 Ahora mismo uso Angular DevTools, React Developer Tools y Redux DevTools. No te sabría decir cual o cuales de ellas dejaron de funcionarme antes de pasar a Chrome

a

@Fraymaltes Sea. Buenas tardes, Fray.

a

Hace no mucho leí a varias personas acerca de alguna extensión que usaban para modificar el css de las páginas, con themes creados ad-hoc para menéame. ¿Alguien recuerda cual era exactamente?

Ya que se han puesto tan cools, me apetece tocar el css a mi gusto. Como buen rancio.

a

@ailian Ni se ve bien, ni se puede cerrar de manera amigable. Vaya nivelazo.

a

@Jakeukalane

¡Buenas!

Te he intentado mandar un privado pero no estamos amigados. ¿Qué wiki es? Le echo un ojo y así vemos cómo lo hacemos, pero sí, cuenta conmigo.

a

@Jakeukalane@admincarmecarme
Sobre lo que en mi opinión es realmente importante, el asunto de lograr la convivencia entre el filtrado de dominios y las páginas de archivo de internet —que calificaría de un bien de internet, por lo que me parece sensato, si no apoyarlas, al menos permitirlas- he creado esta expresión regular que extrae automáticamente el dominio original de las urls de archive.org y archive.is.

Pasándole el resultado al validador de dominios, se podría incluso mantener el baneo a las páginas de archivo (para evitar que se aniden entre sí para sortear el filtrado). De esta forma evitaríamos tener que tomar una medida tan drástica respecto a los archivadores.