Aprender a programar - Recomendaciones

Se me ocurren tramas como las de relleno de Excel. Puntos, líneas, etc. Las combinaciones pueden ser un montón.
 
Y con colores cambiantes? Dentro de su gama, claro. Y no todos. Algunos sólidos y fijos y otros que van variando el tono
 
Se me ocurren tramas como las de relleno de Excel. Puntos, líneas, etc. Las combinaciones pueden ser un montón.
Las punteadas y las de puntos no sirven porque no estoy dibujando un recorrido teórico, sino el real de un dispositivo. Para que se vea bien la línea ha de ser continua, las demás que ya se han probado, se ven aún peor.

Digamos que la parte del tipo de línea y grosor ya se ha probado, y aunque seguro que hay más opciones, es complicado cuando los recorridos en muchas partes se solapan porque pueden tener zonas coincidentes.

Imaginar que lo que dibujara es el recorrido que han hecho 250 personas por una ciudad durante una semana. Lo normal será tener menos recorridos (sobre 50), pero habrá casos donde los 250 incluso se superen.
 
Y añado un dato que comenté al principio y que lo complica aún más.

Imaginad que en cada uno de los recorridos de esas personas, quiero que se distinga los momentos en los que iban caminando y los que iban corriendo. Ahora mismo lo hago poniendo la línea algo más gruesa y con borde cuando corre, y algoas delgada y sin borde cuando camina, pero en ambos casos manteniendo el color.

Se ha probado tambiena poner la línea de cuando va andando como punteada con guiones negros, y el resultado es peor cuando hay muchos resultados porque te hace confundir recorridos precisamente por el punteado.

Me queda probar el hacer el punteado con otras combinaciones de colores, aunque llega un momento que casi todo son líneas y cuesta ver las calles.

Ya, ya... si fuera fácil ya lo habría resuelto hace días ;)
 
Imagino que ya habras probado con simbolos, verdad?

Linea 1 = @@@@@@@@
Linea 2 = ••••••••••
Linea 3 = ~~~~~~
Linea 4 = 🔴🔴🔴🔴
Linea 5 = 🟩🟩🟩🟩

Etc, etc.

Me he leido el paper que has puesto y me parece tremendamente interesante.

Ya contaras como lo solucionas.
 
No lo puse creo..

Mis trabajos de fin de curso por si a alguien le interesan.

Bases de datos y la segunda parte de OOSE

Como me deje Java 1 para el siguiente semestre, le estoy dando duro ahora gracias a ChatGPT.. y me estoy dando cuenta que es un profe fantastico.
 

Adjuntos

  • X22116133_HDSDEV_SEPBL_YR1_Vinas_MiguelAngel_TBA_May_2023.pdf
    403,1 KB · Visitas: 76
  • OOSE_CA_Part2_May_X22116133_Miguel_Angel_Vinas.pdf
    848 KB · Visitas: 67
Chatgpt es una herramienta fabulosa... cuando sabes detectar sus errores, que los tiene y muchos (hablo exclusivamente de programación).
 
Chatgpt es una herramienta fabulosa... cuando sabes detectar sus errores, que los tiene y muchos (hablo exclusivamente de programación).
Estoy de acuerdo.

Para el nivel que tengo de Java creo que lo hace muy bien a la hora de explicar conceptos sencillos de manera correcta. Incluso los ejercicios que propone estan adecuados al nivel.

Le pedi un plan para refrescarme la memoria y este es, parecidisimo al que tengo en la universidad. De momento (Leccion 5) ningun error:


Sure! I'd be happy to help you create a plan to learn Java from the basics to an advanced level. Here's a suggested plan that covers the foundational concepts and gradually progresses to more advanced topics:

Lesson 1: Introduction to Java

  • Introduction to programming and Java
  • Setting up Java development environment
  • Basic syntax and structure of a Java program
  • Writing and running your first Java program Exercises:
  1. Write a program to print "Hello, World!" to the console.
  2. Write a program to calculate and print the sum of two numbers.
Lesson 2: Variables, Data Types, and Operators

  • Variables and data types (int, double, boolean, etc.)
  • Operators (arithmetic, assignment, comparison, logical)
  • Type casting and conversions Exercises:
  1. Write a program to calculate the area of a rectangle given its length and width.
  2. Write a program to convert temperature from Celsius to Fahrenheit.
Lesson 3: Control Flow and Conditional Statements

  • Conditional statements (if, else if, else)
  • Switch statements
  • Looping constructs (for, while, do-while) Exercises:
  1. Write a program to determine if a given number is even or odd.
  2. Write a program to print the first N Fibonacci numbers.
Lesson 4: Arrays and Strings

  • Introduction to arrays and their manipulation
  • Working with strings and string manipulation Exercises:
  1. Write a program to find the largest element in an array.
  2. Write a program to reverse a given string.
Lesson 5: Object-Oriented Programming (OOP) Basics

  • Introduction to OOP concepts (classes, objects, methods)
  • Encapsulation, inheritance, and polymorphism
  • Constructors and method overloading Exercises:
  1. Create a class representing a student and implement methods to set and get student details.
  2. Create a class hierarchy representing different shapes and calculate their areas.
Lesson 6: Exception Handling

  • Understanding exceptions and their types
  • Handling exceptions using try-catch blocks
  • Throwing and creating custom exceptions Exercises:
  1. Write a program to handle the divide-by-zero exception.
  2. Create a custom exception for an invalid age and handle it appropriately.
Lesson 7: File Handling

  • Reading from and writing to files
  • File input/output streams
  • Working with text and binary files Exercises:
  1. Write a program to read data from a text file and display it on the console.
  2. Write a program to count the number of words in a given text file.
Lesson 8: Advanced Topics (Choose one based on interest) a) Java Collections Framework:

  • Lists, sets, and maps
  • Working with collections and iterators
  • Sorting and searching Exercises:
  1. Implement a program to manage a list of contacts using ArrayList.
  2. Use a HashMap to count the frequency of words in a given text.
b) Multithreading:

  • Introduction to threads and concurrency
  • Synchronization and thread communication
  • Thread pools and Executors framework Exercises:
  1. Write a program to simulate a simple bank account using multiple threads.
  2. Implement a program to perform parallel matrix multiplication using threads.
Throughout the learning process, it's essential to practice what you learn through coding exercises and projects. Additionally, exploring online resources, such as Java documentation, tutorials, and sample programs, will deepen your understanding and provide real-world examples.

Remember to adapt the pace and complexity of the lessons based on your progress and comfort level. Learning Java requires patience and consistent practice, so make sure to allocate regular study and coding time. Good luck with your Java learning journey!
 
Comento como quedó al final el tema de pintar en el mapa.

Finalmente usamos escalas de colores distintas para representar diferentes tipos de rutas, además de que para saber en el estado en el que estaban, pintábamos el trazo más grueso o menos, además de ponerle un borde muy fino.

El resultado es bueno, sobre todo porque se nos ocurrió también implementar una funcionalidad que ha costado lo suyo que rulara bien, con sorprendente resultado, y no es otro que el poder dibujar un polígono en el mapa y que muestre solo los trazos que se encuentran en su interior, eliminando de la vista todo lo que quedaría fuera.

Este miércoles me desplacé hasta Zaragoza para enseñarlo en persona a unos clientes que sabía que le iban a sacar partido y gustó mucho como quedó.

A nivel tecnológico hemos creado algo rompedor que no tienen otros, sobre todo cuando hablamos de velocidad de obtención de información, filtrado y representación en mapa. Y es que dibujar un polígono de toda una ciudad y pedir las rutas que pasan por allí, desde que el usuario solicita alrededor de 200 rutas, cada una con unos 1.500 puntos de recorrido, no tiene que esperar ni 10 segundos para tenerlo todo ya en el mapa.
 
¿Esto es algo relacionado con la última milla? Conozco a uno que estaba desarrollando un sistema para esto que decía que era una pasada.
 
Sigo refrescando la memoria con ChatGpt y gracias a sus apuntes he conseguido entender las classes, constructors, methods, etc.
ME ENCANTA!!!!

/*
File name: Exercise1.java
Created by: Miguel Angel Vinas
Date: 16/07/2023
Purpose: Java taught by ChatGPT.
*/
//Example of how classes, objects, constructors, methods and etc work together.
//With a GameCharacter class

import java.util.Scanner;
import java.util.jar.Attributes.Name;
public class GameCharacter
{
String name;
String job;
String ability1;
String ability2;
String ability3;
String faction;
int strength;
int health;
int charisma;

//We are going to initialize a Scanner object.
Scanner scanner = new Scanner(System.in);

//We are going to create the public GameCharacter constructor, that is going to allow us to instantiate new GameCharacters.
public GameCharacter(String characterName, String characterJob, String characterAbility1, String characterAbility2, String characterAbility3, String characterFaction, int characterStrength, int characterHealth, int characterCharisma)
{
name = characterName;
job = characterJob;
ability1 = characterAbility1;
ability2 = characterAbility2;
ability3 = characterAbility3;
faction = characterFaction;
strength = characterStrength;
health = characterHealth;
charisma = characterCharisma;
}

//We are going to create a method that allows the program to display the properties of the Game Character.
public void displayCharacterProperties()
{
System.out.println ("The name of the character is: " + name);
System.out.println ("The class of the character is: " + job);
System.out.println ("The First Ability of the character is: " + ability1);
System.out.println ("The Second Ability of the character is: " + ability2);
System.out.println ("The Third Ability of the character is: " + ability3);
System.out.println ("The Faction of the character is: " + faction);
System.out.println ("The Strength of the character is: " + strength);
System.out.println ("The Health of the character is: " + health);
System.out.println ("The Charisma of the character is: " + charisma);
System.out.println ();
}

//We are going to create a method that allows the program to tell the player if they want to drink a potion if the health is lower than 20.
public void offerHealthPotion()
{
System.out.println ("Would you like to drink a Health potion?");
System.out.println ("Yes / No");
String userAnswer = scanner.nextLine();

if (userAnswer.equalsIgnoreCase("Yes"))
{
health = 100;
System.out.println ("You drink a potion and it restores all your health.");
System.out.println (name + " has " + health + " health.");
System.out.println ();
}
else
{
System.out.println ("Your health is: " + health);
System.out.println ();
}
}

//We are going to create the main method and the logic of the program.
public static void main(String[] args)
{
//First we are going to create a new character.
GameCharacter Miguel = new GameCharacter("Miguel", "Forero", "Soft Speaking", "Driving", "Understanding", "Technoinfluencer", 250, 5, 100);

//We are going to display the information of the new character.
Miguel.displayCharacterProperties();

//We are going to tell the program that if Miguel's health is lower than 20 it should offer him / her to drink a health potion.
if (Miguel.health < 20)
{
Miguel.offerHealthPotion();
}
}
}
 
Jamás entenderé el hacer ejercicios donde un alto porcentaje de las líneas son "print", cosa que además, no se usa nunca en el mundo real.
 
Jamás entenderé el hacer ejercicios donde un alto porcentaje de las líneas son "print", cosa que además, no se usa nunca en el mundo real.
En un juego que es una aventura de texto, como El Hobbit en su momento, tiene mucho sentido, ¿no? 😄

Imagino que es porque es lo mas facil de programar y que el estudiante vea que pasa algo cuando ejecuta una logica X en un programa.
 
No, ninguna aventura de texto va a hacer un print secuencial en pantalla por la consola, que menos que entender cómo se interactúa con el usuario en el mundo real, aunque sea de una forma simple.
 
No, ninguna aventura de texto va a hacer un print secuencial en pantalla por la consola, que menos que entender cómo se interactúa con el usuario en el mundo real, aunque sea de una forma simple.
Ya jugaras el juego que voy a hacer y voy a poner un metodo exclusivo que diga:

if (TheReeler says yes)
{
Print this 10000 times to the console
}
else do it anyways :D

--

Desde mi punto de vista, en el que justo ahora las cosas han hecho CLICK, aprender de manera tangible viendo lo que hace un programa es esencial para comprender como funcionan las estructuras del codigo.

No digo que haya que hacer 20 prints juntos (como es el caso arriba) pero si le dices al programa que sume 2 + 2 o que un Goblin ataque un Elfo hasta que le mate, si como estudiante no ves lo que esta pasando a mi me resulta mas dificil entender lo que sucede. :)

Ya llegara el momento en el que tenga que programar un CRM y no vea nada tangible :D.

Por cierto, tengo que hacer un proyecto para el curso que viene y estoy pensando en lo siguiente:
1) Juego de rol de mundo abierto de texto, con historia y graficos en ASCII, tipo El Hobbit.



2) CRM para hospitales.

3) CRM para Servicio al cliente para empresas.

Tengo clarisimo que el 2 y el 3 podrian llegar a ser un producto vendible.. y me tienta la idea de hacerlo solo por eso. El 2 es lo que he estado haciendo en los otros proyectos este curso.

El 1 es lo que me gustaria hacer, pero igual es muchisimo mas sencillo.

Algun comentario de los sabios del foro? :).
 
si como estudiante no ves lo que esta pasando a mi me resulta mas dificil entender lo que sucede. :)
Correcto, así es. A lo que me refiero es que para hacer unos prints así a lo bruto, para eso es mejor debugar y poder inspeccionar los valores de variables o cualquier objeto como quieras, incluso cambiando propiedades en tiempo real.

Para todo lo demás, mejor usar salidas de interacción con el usuario que sean más amigables, al fin y al cabo, siempre tendrás que usarlas en la vida real.
 
Arriba Pie