En esta página:
Iniciamos el Mes de Junio de 2020 y ya tenemos un nuevo top con las 5 consultas más populares en Stack Overflow en Mayo de 2020, hay grandes Lenguajes de Programación en este top, tales como Java, Python, JavasScript, C y C++, bien vamos con este Post.
Antes de continuar te invito a escuchar el Podcast: “Donde buscar ayuda sobre Programación”:
Spotify | SoundCloud |
Bien ahora continuemos con el Post: Las 5 Consultas más Populares en Stack Overflow – Mes Mayo 2020.
Como en otros artículos, para mantener un orden, voy a colocar el título de la consulta original, la versión traducida de la consulta, el Link de la consulta, el Lenguaje o Tecnología, una Descripción y una imagen de la consulta.
Puesto N° 5
Consulta Original: How to efficiently get the mean of the elements in two list of lists in Python
Consulta Traducida: ¿ Cómo obtener eficientemente la media de los elementos en dos listas en Python ?
Link: Visitar
Lenguaje(s) / Tecnología(s): Python
El usuario RoadRunner – MSFT menciona que cuenta con 2 listas en Python.
1 2 3 4 |
mylist1 = [["lemon", 0.1], ["egg", 0.1], ["muffin", 0.3], ["chocolate", 0.5]] mylist2 = [["chocolate", 0.5], ["milk", 0.2], ["carrot", 0.8], ["egg", 0.8]] |
Y busca obtener la media de los elementos comunes en las dos listas de la siguiente manera.
1 2 3 |
myoutput = [["chocolate", 0.5], ["egg", 0.45]] |
También menciona que su código actual o hasta donde avanzo, es el siguiente.
1 2 3 4 5 6 |
for item1 in mylist1: for item2 in mylist2: if item1[0] == item2[0]: print(np.mean([item1[1], item2[1]])) |
Pero dado que hay 2 bucles for de complejidad (O(n^2) el código anterior es muy ineficiente para las listas largas, su consulta es si hay una forma más estándar y eficiente de hacer esto en Python.
El usuario Adam.Er8 le ofrece una respuesta a su consulta, esta respuesta es la más votada y menciona que puede hacerlo mediante la complejidad O(1) de la siguiente manera.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mylist1 = [["lemon", 0.1], ["egg", 0.1], ["muffin", 0.3], ["chocolate", 0.5]] mylist2 = [["chocolate", 0.5], ["milk", 0.2], ["carrot", 0.8], ["egg", 0.8]] l1_as_dict = dict(mylist1) myoutput = [] for item,price2 in mylist2: if item in l1_as_dict: price1 = l1_as_dict[item] myoutput.append([item, (price1+price2)/2]) print(myoutput) |
Y obtendrá lo que esta buscando.
1 2 3 4 |
# Obtiene [['chocolate', 0.5], ['egg', 0.45]] |
Si deseas saber más sobre esta consulta, puedes visitar el Link de la consulta en Stack Overflow.
Puesto N° 4
Consulta Original: why does long long 2147483647 + 1 = -2147483648 ? [duplicate]
Consulta Traducida: ¿ Porque long long 2147483647 + 1 = -2147483648 ? [duplicada]
Link: Visitar
Lenguaje(s) / Tecnología(s): C ++, C
Esta consulta es duplicada en el siguiente enlace. El usuario Hoseong Jeon pregunta porque el siguiente código no imprime el mismo número.
1 2 3 4 5 6 7 |
long long a, b; a = 2147483647 + 1; b = 2147483648; printf("%lld\n", a); printf("%lld\n", b); |
También menciona que se sabe que el número máximo de la variable int es 2147483647 porque la variable int es 4 bytes. Pero como sé que la variable long es de 8 bytes, ¿ porqué ese código actúa así ?
El usuario Paul Sanders le responde diciendo que 2147483647 + 1 se evalúa como la suma de dos ints y por lo tanto, se desborda. 2147483648 es demasiado grandes para caber en un int y por lo tanto, el compilador supone que es un long, por ende no se desborda.
Asimismo responde que para realizar una suma como un long long, debe usar el sufijo constante apropiado, es decir.
1 2 3 |
a = 2147483647LL + 1; |
Si deseas saber más sobre esta consulta, puedes visitar el Link de la consulta en Stack Overflow.
Puesto N° 3
Consulta Original: Why do you need to recompile C/C++ for each OS? [duplicate]
Consulta Traducida: ¿ Por qué necesita recompilar C/C ++ para cada sistema operativo? [duplicada]
Link: Visitar
Lenguaje(s) / Tecnología(s): C ++, C
En este puesto 3, tenemos otra consulta que es duplicada en el siguiente enlace. El usuario Nassim Assaf realiza una pregunta teórica, su consulta es muy extensa pero destacando lo más importante, el menciona que esta trabajando con su primer compilador y menciona que cuando los desarrolladores escriben un programa en C/C++, lo tradicional que la gente sabe es que un compilador convierte mágicamente el código C/C++ a código nativo para una determinada computadora.
También menciona que algo no cuadra, ya que si se compila un programa C/C++ para la arquitectura x86, pareciera que el mismo programa debería ejecutarse en cualquier computadora con la misma arquitectura, pero eso no sucede así, se debe de volver a compilar el código para los sistemas operativos OS X, Linux o Windows.
También menciona que por qué se da esto y mejor no nos enfocamos en el conjunto de arquitectura/instrucción de CPU al compilar un programa C / C ++ y un sistema operativo Mac y un sistema operativo Windows pueden ejecutarse en la misma arquitectura exacta.
El usuario Nicol Bolas le brinda una respuesta muy detallada, en cierta parte menciona algo importante, que los sistemas operativos, tienen diferentes ideas de cómo se ve un instalador o ejecutable de un programa. Un ejecutable no es solo un montón de códigos.
Si deseas saber más sobre esta consulta, puedes visitar el Link de la consulta en Stack Overflow.
Puesto N° 2
Consulta Original: In Java, how to get positions of ones in reversed binary form of an integer ?
Consulta Traducida: En Java, ¿ cómo obtener posiciones de unos en forma binaria inversa de un entero ?
Link: Visitar
Lenguaje(s) / Tecnología(s): Java
En este puesto 2 el usuario workerjoe tiene una aplicación heredada que toma un entero, lo convierte en una cadena binaria, invierte esa cadena y luego obtiene las posiciones de los bits (ones) como una lista de enteros (integers), por ejemplo:
1 2 3 4 5 |
6 -> "110" -> "011" -> (2,3) 7 -> "111" -> "111" -> (1,2,3) 8 -> "1000" -> "0001" -> (4) |
Entonces su consulta es, cual es la manera clara y óptima de de lograr esto en Java moderno, sin hacer operaciones de String. También menciona que la conversión hacia y desde String le parece un desperdicio y no hay una manera simple de voltear un String.
El usuario Andy Turner le responde diciendo que solo debe revisar los bits a la vez.
1 2 3 4 5 6 7 8 9 |
List<Integer> bits(int num) { List<Integer> setBits = new ArrayList<>(); for (int i = 1; num != 0; ++i, num >>>= 1) { if ((num & 1) != 0) setBits.add(i); } return setBits; } |
Y obtendrá:
1 2 3 4 5 |
6 [2, 3] 7 [1, 2, 3] 8 [4] |
Si deseas saber más sobre esta consulta, puedes visitar el Link de la consulta en Stack Overflow.
Puesto N° 1
Consulta Original: How does Chrome decide what to highlight when you double-click Japanese text ?
Consulta Traducida: ¿ Cómo decide Chrome qué resaltar cuando se hace doble clic en un texto en japonés ?
Link: Visitar
Lenguaje(s) / Tecnología(s): JavaScript, Google Chrome
Y en el puesto 1 el usuario polm23 menciona que si se hace doble clic en un texto que esta en inglés en Chrome, este resalta la palabra delimitada por espacios en blanco en la palabra a la que se le hizo clic, esto es normal. Asimismo menciona que el otro día estaba haciendo clic mientras leía un texto en japonés y noto que algunas palabras estaba resaltadas en los límites de las palabras, a pesar de que el japonés no tiene espacios, por ejemplo el siguiente texto.
1 2 3 4 5 |
ど こ で 生 れ た か と ん と 見 当 が つ か ぬ。 何 で も 薄 暗 い じ め じ め し た 所 で ニ ャ ー ニ ャ ー 泣 い て い た 事 だ け は 記憶 し。。 |
También menciona que si se hace clic en las palabras 薄 暗 い, Chrome lo resalta correctamente como una sola palabra, a pesar de que no se trata de una sola clase de caracteres (esta es una mezcla de kanji e hiragana). No todos los aspectos más destacados son correctos, pero no parecen aleatorios.
Su consulta es ¿ Como decide Crome que resaltar en esas palabras en japones ?, también menciona que busco en la fuente de Chrome “japanese word” y solo encontró pruebas para un módulo experimental que no parece activo en su versión de Chrome.
Un tal usuario llamado erijang le da una respuesta, pero también el mismo usuario polm23 el cual hace la consulta, ofrece una respuesta que obtiene la mayor cantidad de votos, menciona el mismo que el motor v8 de Chrome tiene un segmentador de palabras en varios idiomas no estándar y maneja japonés:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function tokenizeJA(text) { var it = Intl.v8BreakIterator(['ja-JP'], {type:'word'}) it.adoptText(text) var words = [] var cur = 0, prev = 0 while (cur < text.length) { prev = cur cur = it.next() words.push(text.substring(prev, cur)) } return words } console.log(tokenizeJA('どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。')) // ["どこ", "で", "生れ", "たか", "とんと", "見当", "が", "つ", "か", "ぬ", "。", "何でも", "薄暗い", "じめじめ", "した", "所", "で", "ニャーニャー", "泣", "い", "て", "いた事", "だけ", "は", "記憶", "し", "て", "いる", "。"] |
El usuario polm23 comparte un jsfiddle en donde muestra lo mencionado en su respuesta. Acota que la calidad no es sorprendente, pero le sorprende que esto sea compatible.
Si deseas saber más sobre esta consulta, puedes visitar el Link de la consulta en Stack Overflow.
Bueno hasta aquí llegamos con las 5 consultas que marcaron tendencia en el mes de Mayo de 2020 en la popular comunidad de Desarrolladores Stack Overflow, nos vemos a finales del siguiente mes con un nuevo Top de consultas.
Nota(s)
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
- La cantidad de Respuestas, Vistas, Votos, etc. de las consultas pueden variar en Stack Overflow en el futuro, hasta la fecha de este artículo son las que presentamos en las imágenes.
- Si lees con atención las consultas y las respuestas vas aprender sobre el problema que tenia el usuario que realiza la consulta y puede que sea el problema que estas intentando solucionar, esto es importante para tu aprendizaje.
- La idea de este artículo es comentar y exponer los temas que son tendencia en el mes determinado, no intentamos dar una respuesta al problema ya que estos son resueltos por los usuarios de la comunidad Stack Overflow, que son grandes Desarrolladores y con mucha experiencia en el área o Lenguaje de Programación determinado.
- Algunos enlaces a otras páginas colocados en este artículo pueden dejar de existir o continuar en el futuro, esto no depende de nosotros si no de los usuarios o empresas que son dueños de los servidores en donde se encuentran alojados estos enlaces, hasta la fecha de este artículo estos enlaces aún están disponibles.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.