Las 5 Consultas más Populares en Stack Overflow – Mes Febrero 2020
En esta página:
Llegamos a fines de Febrero de 2020 y como siempre Stack Overflow la popular comunidad de Desarrolladores a nivel mundial, nos trae nuevas sorpresas y novedades en cuanto a consultas realizadas por Desarrolladores, es muy sabio entender que si leemos estas consultas y sus respuestas, nos ayudan a resolver problemas similares en nuestros proyectos, vamos con este Post.
Antes de continuar con este Post, si quieres aprender o conoces sobre algún amigo o amiga que quiere aprender HTML 5 desde 0, puedes visitar el curso con más de 45 videos totalmente gratis, el Lema de Nube Colectiva es “el conocimiento en la Nube es Colectivo”:
Continuemos con el Post: Las 5 Consultas más Populares en Stack Overflow – Mes Febrero 2020
Similar a otros artículos, para mantener el 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 create arrays from array
Consulta Traducida: Cómo crear arrays a partir de arrays
Link: Visitar
Lenguaje(s) / Tecnología(s): JavaScript
El usuario Dominik Lev menciona que es un principiante en JavaScript y esta tratando de crear 2 arrays diferentes con valores de otro array principal, el otro array principal es el siguiente:
1 2 3 4 5 6 7 8 9 |
0: Array(3) [ 2011, 127072.7, 51584 ] 1: Array(3) [ 2012, 125920.3, 59974 ] 2: Array(3) [ 2013, 129305.4, 15468 ] 3: Array(3) [ 2014, 135364, 84554 ] 4: Array(3) [ 2015, 136757, 98754 ] 5: Array(3) [ 2016, 155653.5, 155548 ] 6: Array(3) [ 2017, 164130.5, 284848 ] |
Y necesita crear 2 arrays con los datos anteriores, el Primer array que quiere crear, debe contener los siguientes valores:
1 2 3 4 5 6 7 8 9 10 11 |
// Primer array a crear 0: Array(2) [ 2011, 127072.7] 1: Array(2) [ 2012, 125920.3] 2: Array(2) [ 2013, 129305.4] 3: Array(2) [ 2014, 135364] 4: Array(2) [ 2015, 136757] 5: Array(2) [ 2016, 155653.5] 6: Array(2) [ 2017, 164130.5] |
El Segundo array debe contener los siguientes valores:
1 2 3 4 5 6 7 8 9 10 11 |
// Segundo array a crear 0: Array(2) [ 2011, 51584] 1: Array(2) [ 2012, 59974] 2: Array(2) [ 2013, 15468] 3: Array(2) [ 2014, 84554] 4: Array(2) [ 2015, 98754] 5: Array(2) [ 2016, 155548] 6: Array(2) [ 2017, 284848] |
El usuario Nina Scholz le da una respuesta en donde menciona que puede obtener todos los valores del array principal, después del valor clave para cada nuevo array, de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var data = [[2011, 127072.7, 51584], [2012, 125920.3, 59974], [2013, 129305.4, 15468], [2014, 135364, 84554], [2015, 136757, 98754], [2016, 155653.5, 155548], [2017, 164130.5, 284848]], [first, second] = data.reduce( (r, [k, ...a]) => { a.forEach((v, i) => r[i].push([k, v])); return r; }, Array.from({ length: Array.isArray(data[0]) ? data[0].length - 1 : 0 }, () => []) ); console.log(first); console.log(second); |
Y obtiene los 2 arrays que necesita, el primer array:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
// console.log(first); [ [ 2011, 127072.7 ], [ 2012, 125920.3 ], [ 2013, 129305.4 ], [ 2014, 135364 ], [ 2015, 136757 ], [ 2016, 155653.5 ], [ 2017, 164130.5 ] ] |
Y el segundo array:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// console.log(second); [ [ 2011, 51584 ], [ 2012, 59974 ], [ 2013, 15468 ], [ 2014, 84554 ], [ 2015, 98754 ], [ 2016, 155548 ], [ 2017, 284848 ] ] |
Personalmente pienso que hay muchas formas de crear 2 arrays con los valores de un array, pero la forma compartida por el usuario Nina Scholz esta buena.
Si deseas saber más sobre esta consulta, puedes visitar el link en Stack Overflow.
Puesto N° 4
Consulta Original: Why can’t I access a pointer to pointer for a stack array?
Consulta Traducida: ¿Por qué no puedo pasar un puntero a un puntero para un stack array?
Link: Visitar
Lenguaje(s) / Tecnología(s): C
En el puesto 4, el usuario Andreas comparte un código en donde intenta pasar un array en la función char **x:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <stdio.h> #include <stdlib.h> static void printchar(char **x) { printf("Test: %c\n", (*x)[0]); } int main(int argc, char *argv[]) { char test[256]; char *test2 = malloc(256); test[0] = 'B'; test2[0] = 'A'; printchar(&test2); // works printchar((char **) &test); // crashes because *x in printchar() has an invalid pointer free(test2); return 0; } |
Andreas menciona también que el hecho de que pueda compilar de manera explicita &test2 a char**, ya da a entender que el código anterior es incorrecto y aún así se pregunta que tiene de malo el código anterior exactamente. El usuario Andreas también menciona que puede pasar un puntero a otro puntero a un array asignado dinámicamente, pero no puede pasar un puntero a otro puntero a un array en el stack e intente solucionar el problema de una manera fácil asignando el array a una variable temporal de la siguiente manera:
1 2 3 4 5 6 |
char test[256]; char *tmp = test; test[0] = 'B'; printchar(&tmp); |
Pero aún así Andreas pide que le expliquen porque no funciona pasar char[256] a char** directamente.
El usuario Eric Postpischil ofrece una respuesta que cuenta con mejor puntuación hasta la fecha de este Post, pero te compartiré la respuesta del usuario emlai que si bien su respuesta tiene menos puntos hasta la fecha de este Post, pero su respuesta tiene el check verde de mejor respuesta.
El usuario emlai menciona que test no es un puntero y que &test le proporciona un puntero de tipo char(*)[256] al array que no es compatible con char** (porque una matriz no es un puntero), entonces esto da como resultado que el código tenga un comportamiento indefinido.
Si deseas saber más sobre esta consulta, puedes visitar el link en Stack Overflow.
Puesto N° 3
Consulta Original: How to bypass python function definition with decorator?
Consulta Traducida: ¿Cómo omitir la definición de la función python con decorador?
Link: Visitar
Lenguaje(s) / Tecnología(s): Python
El usuario Pedro consulta si es posible controlar la definición de la función Python en función de la configuración global, por ejemplo para sistemas operativos Linux y Windows:
1 2 3 4 5 6 7 8 9 10 11 |
@linux def my_callback(*args, **kwargs): print("Doing something @ Linux") return @windows def my_callback(*args, **kwargs): print("Doing something @ Windows") return |
Entonces el usuario Pedro menciona que en el código anterior, si alguien usa Linux, se usará la primera definición my_callback y la segunda se ignorará, asimismo menciona que no se trata de determinar el sistema operativo, si no se trata de la definición de funciones / decoradores.
El usuario Todd le ofrece una respuesta muy extensa, en donde expone 2 casos, un caso simple No chaining (Sin encadenamiento) y otro caso con Chaining Support (Apoyo de encadenamiento).
Si deseas saber más sobre esta consulta, puedes visitar el link en Stack Overflow.
Puesto N° 2
Consulta Original: Using std::vector as view on to raw memory
Consulta Traducida: Usando el std::vector como vista en memoria sin procesar
Link: Visitar
Lenguaje(s) / Tecnología(s): C++
En el este 2do lugar el usuario Jabberwocky esta usando una biblioteca externa que en cierto momento le da un puntero en bruto a un array de enteros y un determinado tamaño, menciona también que le gustaría usar std::vector para acceder y modificar los valores del array en lugar de acceder a los valores mediante punteros sin formato, comparte el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
size_t size = 0; int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in std::vector<int> v = ????; // pseudo vector to be used to access the raw data std::sort(v.begin(), v.end()); // sort raw data in place for (int i = 0; i < 5; i++) { std::cout << data[i] << "\n"; // display sorted raw data } |
Con el código anterior obtiene lo esperado:
1 2 3 4 5 6 7 |
1 2 3 4 5 |
Jabberwocky menciona que necesita aplicar algoritmos <algorithm>(clasificación, intercambio de elementos, etc.) en esos datos y que podría construir un vector basado el los datos de la librería externa, usar modificar ese vector y copiar los datos de nueva a la librería, pero serían 2 copias completas el cual le gustaría evitar, ya que el conjunto de datos podría ser realmente grande.
El usuario 眠りネロク le responde, mencionando que el problema es que std::vector tiene que hacer una copia de los elementos del array con la que lo inicializa, ya que tiene la propiedad de los objetos que contiene, para evitar esto, puede usar un objeto de división para un array, es decir similar a lo que std::string_view es std::string. También menciona que puede escribir su propia array_view (implementación de plantilla de clase), cuyas instancias se construyen tomando un puntero sin procesar al primer elemento de un array y la longitud del array, mediante el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <cstdint> template<typename T> class array_view { T* ptr_; std::size_t len_; public: array_view(T* ptr, std::size_t len) noexcept: ptr_{ptr}, len_{len} {} T& operator[](int i) noexcept { return ptr_[i]; } T const& operator[](int i) const noexcept { return ptr_[i]; } auto size() const noexcept { return len_; } auto begin() noexcept { return ptr_; } auto end() noexcept { return ptr_ + len_; } }; |
La respuesta del usuario 眠りネロク es extensa y tiene menos puntos que la respuesta del usuario NutCracker, pero he compartido la respuesta del usuario 眠りネロク porque tiene el check verde de mejor respuesta.
Si deseas saber más sobre esta consulta, puedes visitar el link en Stack Overflow.
Puesto N° 1
Consulta Original: Why does the difference between 30 March and 1 March 2020 erroneously give 28 days instead of 29?
Consulta Traducida: ¿Por qué la diferencia entre el 30 de marzo y el 1 de marzo de 2020 da erróneamente 28 días en lugar de 29?
Link: Visitar
Lenguaje(s) / Tecnología(s): Java
El el Primer lugar el usuario Joe hace una consulta muy interesante, el esta ejecutando el siguiente código Java:
1 2 3 4 5 6 7 8 |
TimeUnit.DAYS.convert( Math.abs( new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("30-03-2020 00:00:00").getTime() - new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("1-03-2020 00:00:00").getTime() ), TimeUnit.MILLISECONDS) |
Al ejecutar el código anterior, el resultado es 28 y debería de ser 29, Joe menciona que quizás podría ser la Zona horario el problema.
El usuario Andreas (no es el usuario del Puesto 4 de este Ranking), le da una respuesta en donde menciona que el problema es debido al cambio de horario de verano que se produce el día 8 – 03- 2020, hay 28 días y 23 horas entre esas fechas y TimeUnit.DAYS.convert(…) trunca el resultado a 28 días.
Andreas menciona que para solucionar el problema, puede usar una zona horaria que no tenga DST, por ejemplo:
1 2 3 4 5 6 |
SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); fmt.setTimeZone(TimeZone.getTimeZone("UTC")); long diff = fmt.parse("30-03-2020 00:00:00").getTime() - fmt.parse("1-03-2020 00:00:00").getTime(); |
Y obtiene como resultado los 29 días:
1 2 3 4 5 6 |
2505600000 Days: 29 Hours: 696 Days: 29.0 |
Si deseas saber más sobre esta consulta, puedes visitar el link en Stack Overflow.
Estas son las 5 consultas que marcaron tendencia el mes de Febrero de 2020 en la popular comunidad de Desarrolladores Stack Overflow, nos vemos en el siguiente mes con un nuevo Top de consultas que son tendencia en Stack Overflow.
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.
- Stack Overflow
- 01-03-2020
- 02-03-2020
- Crear un Post - Eventos Devs - Foro
Social
Redes Sociales (Developers)
Redes Sociales (Digital)