Curso Simulador C

bien pues lo primero que voy a hacer en este proyecto va a ser instalar las command line tools para poder para poder compilar así que voy a invocar al siguiente comando voy a abrir una terminal y en esta terminal voy a introducir el siguiente comando donde si en este caso ya las tengo me diría que ya están instaladas así que no voy a simplemente sacar una terminal para comprobar que si pongo jefe pues lo dice que de la pnc es decir me dice que efectivamente tengo el compilador preparado ahora voy a crear una nueva carpeta de proyecto pese a que vamos a ver mente pese a que estoy trabajando con fe roja el concepto voy a crear la dentro de la carpeta ht docs así que voy a crear un proyecto llamado simulador y dentro del simulador voy a crear una sub carpeta llamada por ejemplo pues personas dentro de personas es donde voy a crear un nuevo archivo así que en este caso voy a abrir un editor de código realmente el editor que usará igual en este caso voy a usar brackets y usar brackets vamos a ver por allí vale voy a crear un nuevo archivo voy a guardar como voy a guardarlo en hd docs en simulador en personas y voy a guardar voy a crear un archivo llamado persona punto c una vez que tengo este archivo lo que voy a hacer es que voy a crear el clásico incluye ese tv h y voy a decir int main bajar esto un poco hacia abajo y dentro del main voy a decir return 0 para que no devuelva nada y pues bueno voy a poner algo como print efe pues hola mundo así que vamos a intentar compilar esto para ello me voy a lanzar esta carpeta vamos a ver morentín no voy a hacerse dentro de esa carpeta aquí voy a hacer jefes persona a punto c y en este caso vamos a ver tenemos a print efe no print efe vamos a ver ahora ahora sí bien y tenemos pues dentro de este archivo personas el apunto out donde en este caso pues tenemos un ejecutable donde podemos ejecutar pues ese archivo voy a hacer una cosa persona apuntó out o persona directamente voy a decirle guión o y así se crea el archivo persona y no tengo el archivo apuntó out con lo cual pues si ahora ejecutó persona pues me dice hola mundo recordamos que es conveniente poner contra barra n así que vuelvo a compilar vuelve a ejecutar y aparece hola muy bien vamos a hacer el texto un poquito más grande vamos a ir a preferencias al momento el centro del terminal preferencias quiero que el tipo de letra sea más grande por ejemplo para que se pueda ver mejor ok con lo cual tengo por aquí podríamos decir que tengo por una parte el código por otra parte tengo la carpeta y por otra parte tengo la terminal y con esto vamos a empezar a darle un poco de forma al proyecto para darle un poco de forma al proyecto vamos a ir creando una serie de variables así que si estamos creando el programa para una persona pues voy a crear va a empezar creando una variable llamada int edad voy a decir que por ejemplo la edad es igual a cero vemos como compilamos y podríamos decir en este caso hola mundo podemos decir print efe la edad de esta persona es porcentaje y contra barra n compiló vamos a ver es porcentaje y porcentaje y coma edad as echara compiló así que ahora recargo y la edad de esta persona es 0 bien porque estoy poniendo esta variable fuera de la función principal pues le estoy poniendo fuera de la función principal porque probablemente ahora a continuación voy a hacer un bucle voy a hacer una función de bucle y por tanto quiero que esta variable esté compartida entre las dos funciones quiero que sea visible entre las dos funciones la voy a crear una variable de bucle una función de bucle con return pero de momento voy a compilar para comprobar que simplemente no va a hacer nada de momento ahí lo tenemos y bueno simplemente podría poner algo así como print efe estás dentro del bucle y aquí a continuación podría llamar a la función quiero ejecutar la función buque es decir tengo una función de inicio y tengo una función de bucle primero se ejecuta la función de inicio y la función de inicio llama a la función de bucle así que compilamos vamos a ver claro declaración implícita es inválida simplemente porque la función de bucle debería estar declarada antes y llamada después así que ahora sí hay la tenemos y estás dentro del bucle recordamos que es recomendable poner saltos de línea manuales al menos al principio aquí hola mundo la edad de esta persona es cero y estás dentro del bucle así que ya tenemos digamos en este caso un primer pequeño programa funcionando y ahora a continuación lo que quiero es que este programa pues entre dentro de un bucle y se ejecute digamos sin fin a continuación vamos a crear un bucle infinito hay varias formas de hacerlo hay una sucia en este caso que es la siguiente que es que voy a decir while 1 wilde o while lo que sea voy a decir print efe ejecutando y contra barra n ser ejecutamos esto teniendo en cuenta que he creado un while que no tiene ninguna condición de finalización lo que ocurre es que primero con pilot luego ejecutó y lo que dice es que está ejecutando el problema es que está ejecutándose digamos sin ningún tipo de control y me gustaría establecer algún tipo de control en esta ejecución para que no fuera tan intensivo voy a pulsar control ce para salir pues vemos que pulsando el control c aunque esté en mac nos convence es control c en linux también es el comando para terminar abruptamente este programa y ahora lo que quiero es decir que antes de hacer nada más antes de de ejecutar el siguiente bloque quiero trabajar con un comando script clip de uno lo que hace es poner el programa a dormir durante un segundo entonces me falta una librería voy a intentar compilar esto me dice que no puedo ejecutar directamente la función sleep es desconocida en ce 99 así que voy a hacer un incluye un punto h que es una librería que nos va a proporcionar la función de sleep así que compiló ahora ejecuto vale y ahora si nos fijamos lo que acabo de hacer es crear un bucle infinito pero la idea de este bucle infinito es que ya no se ejecuta de forma descontrolada sino que se ejecuta una vez por segundo el consumo de recursos lo podemos controlar mucho más incluso ahora nos podemos poner el número que queramos dentro de ese 1 y controlamos el ritmo y el rendimiento y ahora lo que me interesa en este caso ahora que ya tengo un bucle sin fin digamos ahora que este programa ya está vivo digamos por decirlo de alguna forma pues voy a ir al monitor de actividad y voy a ver cuánto me está consumiendo este programa debe consumir prácticamente nada voy a ordenar el nombre del proceso el nombre del proceso en este caso es persona vamos a buscarlo por la p persona persona persona aquí está la persona me está consumiendo pues el 0 por ciento de la cpu y en cuanto a la memoria ram esto también me interesa mucho en cuanto a la memoria ram haber un segundo nombre del proceso vale en este caso me está consumiendo 308 kilobytes probablemente podría hacer que consumirá menos vale pero puede ser una cosa voy a eliminar un momento el include voy a eliminar un momento el script voy a parar el programa vale ahora voy a volver a compilar voy a volver a ejecutar y vamos a comprobar lo siguiente persona me sigue ocupando 308 cash vale y en cuanto a cpu ahora persona me ocupa el 32% vemos que el poner ahora mismo el 50% de hecho vemos que poner esa limitación implementar el slip me permite en este caso pues que use muchos de los recursos lo voy a parar lo voy a volver a compilar lo voy a volver a ejecutar y bueno vamos a ver cómo ocupa 336 casas sigue pareciendo un número grande de kb de memoria todas formas me sigue pareciendo grande por una sencilla cuestión yo no voy a ejecutar una sola persona voy a ejecutar un montón de personas lo que estoy calculando es por ejemplo en este ordenador ahora mismo en este ordenador en el que estoy ahora mismo tengo dónde estás tengo 8 gigas de ram eso quiere decir que eso quiere decir que si tengo 8 gigas de ram que son 8000 megas de ram que son que son 8 millones kb de ram y cada persona ocupa 336 pues dividido en estas dos cosas voy a sacar la calculadora 8 1 2 3 1 2 3 partido 336 y eso quiere decir que en este ordenador podría ejecutar 23.000 instancias de el mismo programa que parece un número que sea grande parece que voy sobrado de recursos pero bueno para un programa que simplemente lo que hace es un bucle y estar gastando 736 cajas de ram es un principio me parece bastante pero bueno no pasa nada más adelante veremos si esto de alguna forma se puede optimizar de momento lo que me interesa es de alguna forma entre comillas hacer como que este programa esté vivo así que voy a pararle un momento y voy a decir que cada vez que pase por el bucle voy a decir edad es igual a edad más 1 es decir cada vez que pase por el bucle pues él [Música] la edad de esta persona va a aumentar así que ejecutando print f tienes una edad porcentaje y segundos contra barra n y voy a poner un print efe también print efe contra barra m para siempre poner un salto de línea más teóricamente el slip debería ir al final del todo así que esto es vamos a compilar vamos a ejecutar bien y vamos a comprobar como ahora el programa es correcto el programa se está ejecutando pero de alguna forma el programa va evolucionando ahora mismo evoluciona de una forma muy rudimentaria evidentemente y es que pues simplemente cada vez que se ejecuta a cada segundo pues otra hora más reconoce que tiene un segundo más de vida bien tampoco es algo muy impresionante de momento pero por lo menos por lo menos nos empieza a servir para demostrar que tenemos una condición de inicialización tenemos un bucle inicial y a partir de ahí el programa va empezando a ejecutarse una forma teóricamente más correcta de trabajar hasta el final si funciona funciona pero es declarar la variable al principio inicializar la al final perdón inicializar la en el main vamos a dar las condiciones de inicio y entonces ahora digo edad es igual a 0 es decir primero declaró la edad a continuación le doy un valor y entonces ya entró en el bucle así que compilamos preparamos el programa compilamos recargamos y parece que tenemos lo mismo pero desde un punto de vista purista pues ésta se considera una forma más segura de trabajar más limpia y más ordenada al trabajar así todo tiene un sentido aquí declaró lo que para utilizar aquí declaró los valores iniciales y ya entró en el bucle que da vida a este programa ahora a continuación puedo declarar otra serie de variables bueno tengo una persona tengo un ser digamos que se va a mover en un cierto espacio entonces voy a crear una variable por x una variable x xi y una variable post se está en este caso de momento creo que sólo voy a utilizar la variable x y la variable y vamos a empezar trabajando un espacio bidimensional pero bueno en un momento dado más adelante pues probablemente podríamos darle también una cierta tridimensionalidad en principio diríamos que para que declarar una variable que se que de momento no lo voy a usar bueno sé que de momento no lo voy a usar pero más adelante sí que es probable que la usen así que ahora a continuación lo que voy a hacer es darle un cierto valor a cada una de estas variables por cierto vamos a dar las condiciones de inicio digo por pse x es igual a 0 al principio y post y es igual a 0 y de momento por z como digo no lo voy a utilizar ahora lo que quiero es decirle al sistema que cada vez que inicie cada vez que se ejecuta el bucle pues quiero que la posición vaya variando de forma aleatoria a continuación vamos a modificar un poco la posición cada una de las iteraciones así que por ejemplo en este caso lo que voy a hacer es que se modifique la posición mediante la función randa voy a hacer lo siguiente pues x es igual a post x más la función run que en este caso nos va a dar un error de compilación porque nos dirá que no sabe que es la función run ya que esa función está incluida dentro de la librería std live así que pongo std lip punto maché guardo con pilot y ahora ejecuto bueno ejecuto realmente no va a hacer nada al ejecutar ya que todavía no estoy devolviendo a la posición x ni la posición y voy a hacerme un poquito más de sitio aquí y voy a decir que posee x es igual a post x + rampas y es igual a posse y más ram bien y voy a decir print efe por imprimir algo en pantalla un número aleatorio es porcentaje contra barra en coma rap vamos a probar esto con pilot ejecutó y fue un número de aleatorio es este de aquí por ejemplo entonces este número aleatorio como podemos comprobar pues es un número si queremos lo podemos lo podemos restringir vale pero vemos que por defecto es un número de 16 bits creo de 16 o de 32 bits bueno en definitiva vamos a en el navegador efe vamos a ver la documentación si podemos establecer el mínimo y el máximo por ejemplo así que vamos a ver por ejemplo pues rande / pues esta es una buena solución porcentaje 50 va desde 0 hasta 49 por ejemplo ram porcentaje 50 vengo por aquí con pilot cuidado en este caso vamos a ver y claro cuidado porque en este caso aunque jockey me está faltando un signo de cierre mal ahora persona muy bien ok perfecto con lo cual pues sí ahora por ejemplo digo ahora quiero partirlo por cien y esto lo divido entre 100 cuidado porque esto ya no es un signo que es un flow como mínimo así que vamos a ver vemos ahí como lo estamos devolviendo como 0 con lo cual voy a decir que lo quiero devolver como float o como double vamos a poner un ave ejecutamos vamos a por ello vale en este caso vamos a ver nos lo estaba volviendo como cero vamos a partirlo por 10 al partirlo por 10 en este caso no estaba volviendo como entero entonces vamos a ver la cuestión está en que quiero que esté run sea un flotante puedo ir a efe y decirle que lo quiero rando las flow y bueno por ejemplo esta sería una opción de forzar el tipo flow vamos a ver si puedo forzarlo aquí cloud y desde aquí hasta allí nos aseguramos de tener el número correcto de paréntesis de cierre compilamos vamos a verlo vale ahora es cuando sí que probablemente ya quiero un flow segunda vez bien y nos dice vamos a ver entre paréntesis [Música] vamos a verlo vale parece que ya tengo decimales pero sin embargo sin embargo de alguna forma sigue sin darme la información que necesito así que voy a poner este flow también por aquí la expresión binaria vale muy bien en lugar de ponerlo aquí lo voy a poner aquí ahora 7.3 con 6.5 vemos que ahora sí ya tengo la operación con decimales con lo cual ya puedo ahora así partirlo dividirlo entre 100 lo acabo de partir entre siempre yo diría que no me he hecho mucho caso creo que no lo ha compilado muy bien ahora tengo un número aleatorio que va desde 0 hasta 1 con decimales pero ahora quiero que vaya desde menos 0.5 hasta más 0.5 con lo cual todo esto lo voy a poner menos 0.5 paró con pilot recargo y ahora comprobamos como tenemos una serie de números que van a ir desde menos 0.5 hasta más 0.5 ahora por tanto ya tengo esto preparado para esta fórmula he estado sacando por pantalla y ponerla por aquí y esto aquí y ahora por tanto aunque aquí probablemente me sobre algún flow pero bueno esto lo copió esto lo puedo incluso borrar aquí lo peor y lo peor tengo un problema evidentemente y el problema está en que todo el rato estoy declarando que posee equipos y son enteros entonces probablemente ahora al compilar vamos a ver en principio no da error pero internamente no debe funcionar vamos a ponerlo print efe coordenadas x es igual a vamos a verlo coma y es igual a b y ahora os x como os y y al final contra la barra m trabaja en el simplemente para que veamos que está saliendo en pantalla vamos a ver y es igual a 0 y que es igual a 0 entonces claro como estamos trabajando con una variable que al final es entera es normal es de esperar que la secc islas y no se muevan porque si el número va de menos 0.5 a 0.5 lo estará redondeando a 0 es decir está cogiendo un flotante y lo está convirtiendo en un entero entonces por esto aunque técnicamente no ha dado error pero lo que voy a hacer es declarar el post x2 y y post z cómo flotante para que realmente haga caso a los decimales vamos a verlo entonces claro hay evidentemente esto ya no es porcentaje y si no que es porcentaje f y ahora sí ahora ya por fin tenemos que bueno vamos modificando vamos a ver muy bien con lo cual de momento tenemos como diría pues en este caso una una tarea ejecutándose donde ahora mismo hay una persona digamos que en su programación tiene que va aumentando de edad segundo a segundo y cuyas coordenadas coordenadas no coordinadas coordenadas pues van modificándose con el tiempo digamos que esa persona pues es como que va caminando de momento de una forma un poco errática por supuesto que sí de momento de una forma muy aleatoria pero por lo menos pues la tenemos ya caminando bien ahora yo lo que quiero es lanzar lanzar una serie de procesos lanzar una serie de pues en definitiva de de personas diferentes antes de esto quiero darle un identificador para ello necesito que el programa me acepte parámetros así que a continuación voy a distinguir digamos a esta persona de otras personas que en un momento dado podamos calcular vamos a verlo bueno pues en este caso lo que quiero es que el programa acepte parámetros así que voy a hacer lo siguiente voy a copiar este código de aquí arc sé que básicamente lo que hace es contar el número de parámetros que se estaban enviando y en este caso un puntero que hace referencia a cada uno de los argumentos que voy a enviar así que voy a hacer lo siguiente voy a hacer vamos a decir por ejemplo int identificador voy a hacerlo como un número entero y aquí al principio voy a decirle que identificador es igual a art de en este caso vamos a darle 1 vamos a probar que el número 1 así que a continuación aquí donde pone ejecutando voy a poner print efe y voy a decir el identificador de esta persona es él el porcentaje y coma identificador muy bien ejecutó ejecutó con pilot vamos a verlo argumentó vale un intento integral ok entonces voy a decir que esto es un chat identificador bien en este caso en este caso vamos a ver o intento íntegro vamos a ver program para meterse argumento 1 es un string de hecho pero strings tal cual como tal no puedo meterlo vamos a probarlo bien y no existe en definitiva el estrés vale entonces esto en definitiva es un chat ok es de char a echar y ahora por tanto ya no es un entero sino que es un s de carácter de estrella bien ya lo tenemos cuidado porque ahora lo voy a ejecutar y el identificador de esta persona es nulo porque no le estoy pasando un identificador por cierto que ponemos contra la barra n entonces ahora voy a compilar y voy a ejecutar persona pues a por ejemplo y me dice el identificador esa persona es el a bueno y ahora lo puedo ejecutar y digo antonio entonces ejecuto y me dice el identificador de esta persona de santonio es decir ya puedo ejecutar a esta persona digamos que puedo ejecutar a cada instancia y cada instancia puedo decir que quiero que tenga como una especie de identificador en el cual pues aparezca quién es quién vamos a probarlo vamos a probarlo además en este caso otra cosa que puedo hacer es que el sistema guarde un registro de quién es y qué características tiene entonces por ejemplo vamos a ver vamos a crear una nueva carpeta por aquí llamada registros y voy a hacer right to file cualquiera de estos sencillo que se pueda al guasón ya que al final vamos a escribirlo y vigo a ver un segundo que ponga la sangría vamos allá entonces crea un archivo el archivo dentro de registros es vamos a ver es test punto txt teóricamente podría hacer identificador txt testing efe voy a usar voy a poner [Aplausos] por ejemplo edad coma porque aquí esto es post x coma y vamos a poner también postes que no está haciendo nada pero posee tal cuidado coma z es igual a 0 y yo creo que ella si todo ha ido bien si todo ha ido bien y no genera ningún error que seguro que sí vale vamos a verlo en este caso vamos a ver aden into string no hace ninguna ok bueno pues vamos a ver vamos a intentar y poco a poco ir eliminando errores crear y el string no hace nada con la p eso es cierto voy a hacer así en este caso me dirá lo mismo con el flow vale y entonces ahora voy a ver de qué forma puedo convertir esto en un string para que realmente pues me lo ponga lo tendría que convertir a un char bueno ahora veremos cómo lo puedo hacer pero básicamente lo que necesito es pues convertir esto a otro tipo vale entre todas las formas está parece que está bien y es la siguiente vamos y venir por aquí y voy a decir char px y ahora voy a pasar esto a la línea de antes y digo px y aquí le pongo 2x con lo cual aquí voy a poner px lo mismo voy a hacer con la y griega y con la zeta o se genera y post se está para decir que quiero y ipc así que vamos a probarlo es casi y aquí lo que puedo hacer por ejemplo exponer porcentaje c como porcentaje f efe print 3er y esto es como porcentaje fe como porcentaje fe coma px y coma pz vamos a verlo ahora y nos dice qué interesante el formato específica tipo entero pero el argumento es de tipo variable o sea que me resulta un poco extraña pero pero argumentó este tipo variable voy a ver un momento de forma offline cómo resolver este error pero en principio no debe tener mucho más misterio que realizar algún tipo de conversión otra cosa que puedo intentar ya que estoy con efe prince efe es decirle al sistema que esto es un flow out loud’ para luego decirle que esto es un post x 2 y 2 a ver persona ahí lo tenemos segmentation fault ha intentado realizar una primera ejecución ha fallado no sé por qué porque en principio registros persona txt segmentation folk generalmente suele producirse cuando hay un error de escritura estoy asegurándome de que exista la carpeta registros y voy a hacer lo siguiente voy a voy a quitar este archivo voy a ejecutar vale y vemos que el segmento hay tengo personas de hecho se ha producido en el momento en el que he intentado escribir aquí es donde dado este error con tilos ejecutó y ahora no vale interesante verdad bien y ahora entró dentro de persona y ahora sí en persona estoy viendo como pues guarda digamos las coordenadas de esa persona concreta ahora evidentemente como digo lo que me interesa es voy a parar la ejecución lo que me interesa es que no se llame persona sino que se llame pues según el identificador y el identificador en este caso bueno pues se supone que es un char pero ahora veremos cómo voy a poder encadenar digamos estrechar a una cadena vale pues vamos a hacer lo siguiente vamos a decir qué quiero un string que sea una cadena para eso voy a incluir directamente la librería de string incluye punto h y voy a hacer una cadena char ruta es igual a nada en el momento vale y esta ruta en este caso va a ser voy a empezar haciendo que sea haber registros realmente va a ser ruta es igual a registros historia ahora a continuación vamos a hacer una cosa momentín que me quiero asegurar de la cosa kraft ese es el problema está rota ok ahora aquí le voy a decir qué ruta es igual a str cope donde le voy a copiar aquí está recope a ruta le voy a asignar esto de aquí ahora ya tengo una primera asignación y entonces ahora y entonces ahora es cuando voy a decir lo siguiente str cat de concatenar y entonces esa ruta l quiero concatenar el identificador ahora str cat a ruta le quiero concatenar punto txt y entonces si todo ha ido bien aquí pongo ruta agrupar las líneas vamos a probar esto afuera vamos a probar a compilar vamos a probar a ejecutar ciertamente son fault 11 el momento ok pasa nada de hecho voy a volver a compilar y voy a decir por aquí print efe la ruta es porcentaje string como ruta sin trabajo n de esa forma vemos el formato que tiene segmentation fondo esto lo voy a poner también aquí y así sabremos dónde falla hola mundo veo persona txt boya matar estas tres líneas de momento compiló ejecutó segmentation fault 11 y no me está diciendo dónde se produce el segmento son fault si no me lo está diciendo en ese caso y está ocurriendo después de hola mundo puedo entender que el segmento son fault está en el string copy parece que esté ahí la ruta es null vale efectivamente ahí está stream copy al principio un principio parece que debe funcionar bien vamos a verlo vale vamos a hacer una cosa vamos a ver en la ruta vamos a decirle ruta como matriz de 100 caracteres vuelvo a activar el string copy ejecutó vale y la ruta es registros persona txt muy ahora activo el concreten edit con pilot ejecutó y ahora se va encadenando evidentemente esto ya no me interesa tanto pero ok vamos a parar y bueno lo que voy a hacer una sola vez voy a concretar aquí porque si no se va añadiendo en cada uno de los de las interacciones con lo cual para el fps quito este bloque de aquí y ahora vuelva a compilar bien segmentos son fuerte vale identificador el identificador porque estoy metiendo el identificador antes de que exista el identificador compilamos ejecutamos y ahora si tenemos allí a antonio txt con lo cual eso quiere decir que tenemos ya digamos las coordenadas de un elemento vale y si yo por ejemplo ahora pues paro y ejecutó miguel pues el sistema guardara el archivo txt de miguel es decir guarda archivos txt correspondientes a diferentes diferentes personas voy a borrar mi mente en todo esto y vamos a continuar vale pues ahora a continuación quiero un programa que me ejecute en múltiples instancias de otro programa así que para eso voy a crear un archivo lo voy a guardar [Música] en personas lo voy a llamar lanzador a favor punto c vale vamos a sacar esto y voy a copiar un poquito de este código no voy a pegar el lanzador y básicamente lanzador lo que va a hacer es crear una serie de personas así que vamos a ver bucle no quiero en este caso no quiero nada de esto el random sé que no quiero de hecho [Música] no mientras en maine bucle esto es lanzador punto c y ahora el lanzador punto ce lo que voy a hacer es que voy a decir que quiero lanzar quiero ejecutar una serie de cosas formar int y es igual a cero y es menor que 10 por ejemplo voy a lanzar 10 procesos y más más esto que voy a hacer va a ser un poco peligroso ahora vamos a verlo pero no ha pasado a ser un poco peligroso porque va a lanzar 10 procesos aparentemente sin control pero bueno no pasa bien y ahora qué es realmente lo que quiero en el proyecto pero debemos tener en cuenta que tiene sus riesgos así que ahora como digo bueno todas estas librerías realmente me voy a quedar esta y me voy a quedar esta porque no hacen falta y así tampoco malgastamos recursos y ahora lo que quiero es sé execute comando por ejemplo el building execute another programa entonces vengo por aquí vengo por aquí vengo por aquí un fork realmente system vamos a ver y ejecutar aquí existen a ver si no me da error y voy a ejecutar personas persona vamos a ver y juan por ejemplo vamos a probarlo el lanzador vale pero no lo saco como lanzador ahora si este fuera ok y ahora quiero ejecutar lanzador vale y nos dice comando ttc found vamos a poner punto barra como no te vale vamos a ver vamos a ver el caso es que en principio sí que parece que está reconociendo el comando sistema pero no recomiendo no reconocer el comando persona y eso qué persona está ahí bueno pues vamos a ver qué puede ser lo que nos hace falta para y poder ejecutarlo vale voy a optar por un enfoque un poco diferente que va a ser el siguiente voy a cargar en este caso me hace al momento el lanzador voy a ir a persona y voy a decir que el identificador vamos a verlo el identificador no va a ser donde lo tenemos aquí identificador donde sea aquí está pues el identificador no va a ser el argumento 1 hecho incluso me voy a comentar esta línea para decir que el identificador va a ser un número aleatorio que va a ir desde 1 hasta un montón vamos a gsc persona punto a punto 12 persona punto auto y en este caso lo que ocurre es que tenemos una [Música] una conversión de entero a string entonces bueno por aquí y decimos que random string random into string string realmente vamos a empezar con esto vamos allá s print efe por ejemplo después voy a decir char aleatorio que va a tener 50 caracteres 50 caracteres realmente y ahora ese print f tampoco ha cogido a system segundo se ha quedado cogido todo copiamos pegamos spf y voy a decir que vamos a ver aleatorio random esto es un entero y esto es aleatorio así que si algo bien si todo esto ha ido bien vamos a probarlo vamos a ver nos dice qué el argumento es long vale muy bien pues vamos a apagarlo vamos allá long to strength l lb ahí está l lb muy bien vamos a ver si lo acertamos ahí lo tenemos y persona bien y ahora lo que quiero es print efe el número es porcentaje s coma aleatorio compilamos recargamos de momento me dice que no vamos a ir poniendo sitio está todo correcto el actor josh iguala ser 50 no es compatible vale finalmente el programa queda de la siguiente forma y es que cada vez que se ejecuta lo que hace es crear un identificador aleatorio este identificador pasa a formar parte de la ruta con lo cual ahora ocurre lo siguiente ya de momento quitar a que yo creo me sirve el lanzador persona a punto out con cuidado de no cargar me nada que no quiera nada que sí que necesite bien y ahora lo que voy a hacer es ejecutar manualmente esto lo voy a cerrar o voy a ejecutar manualmente persona pero vamos a ver un segmento y son fault ok muy bien vamos a verlo identificador de persona una era de un segundo coordenadas vamos a verlo y parece que en perfect que parece que en la ruta es donde se queda frito o al menos una vez esto a su momento estaba en funcionamiento a ejecutarlo de nuevo ejecutó una terminal lanzó esta carpeta ejecutó persona vale en este caso veo que la persona está funcionando y veo que está creando un registro lo bueno de esto es que si yo ahora vuelvo a ejecutar esto voy a cerrar este momento quiero duplicar esta ventana a ver cómo la puedo duplicar porque me suena me suena igual puedo a hacer por aquí pues por ejemplo aunque yo lo que quería era ejecutar directamente esto pero bueno sea como sea pues como decía yo puedo ejecutar personas y aquí puedo ejecutar personas y puedo abrir una pestaña y ejecutar persona y abrir una nueva pestaña más y ejecutar personas y tengo en este caso cuatro que se están ejecutando como podemos ver ahora los registros al momento vamos a ver 3 8 3 se ha generado el mismo registro parecer a continuación voy a decir que por ejemplo el tiempo sea el identificador esté basado en la época y unix por ejemplo pero ahora en definitiva si me voy al monitor de recursos o monitor de actividad veremos como tengo ya cuatro tareas personas que se están ejecutando de forma paralela la idea evidentemente es ejecutar pues tantas como en un momento dado sea necesario voy a cerrar un momento esto pero de momento de entrada lo que importa es que ya tenemos cuatro tareas tenemos cuatro programas cuatro hilos de ejecución que están ejecutando de forma paralela y cada uno de ellos digamos en este caso está haciendo una cosa valley es que cada uno tiene unas coordenadas diferentes voy a cerrar un momento esto se va a ejecutar los procesos atrás los procesos correcto vale entonces vamos a ver ahora a partir de ahí es cuando tenemos este número que teóricamente es aleatorio pero el random realmente es pseudo aleatorio así que quizás si uso la la función de obtener el tiempo y unix agett y unix y poco pues quizás de esta forma vamos a ver aquí por ejemplo [Música] sí pero no quiero meter en una variable evidentemente y por ejemplo le puedo decir que el identificador es esto de aquí me dará cálculo supongo un problema de de tipo de dato pero no pasa nada invierno y en este caso vale para usar timer probablemente tendría que importar time a ver si me deja directamente h y vamos a probarlo persona y ok con lo cual si ahora crea una nueva pestaña y ejecutó persona en principio el tiempo es diferente y si ahora ejecute una nueva y ejecutó persona el tiempo de creación es diferente en definitiva digamos estoy creando pues una persona en cada momento he dicho esto ya tengo tres personas más la que tenía anteriormente y ahora lo que quiero voy a cerrar esto es que he visto que me da error de segmentación se intentó ejecutar el programa de forma directa con lo cual pues técnicamente tiene toda la pinta de que esta ruta no la está cogiendo correctamente vamos a verlo vamos a poner aquí registros a ver si así un nuevo terminal se ve a esto baleares cuando me lo coja ahora sí así que voy a intentar poner una ruta absoluta no me hace mucho mucha ilusión pero bueno applications man h de docs simulador zonas y registros no me hace mucha ilusión porque esto va a hacer que la ruta sea absoluta vale pero si esto ha funcionado bien pues ahora puedo ejecutar personas y puede ejecutarlo tantas veces como quiera así que cierro por aquí y cierro por aquí y cierro por aquí elimino de momento estos registros y si ahora me dedico a ejecutar varias veces persona pues estoy creando diferentes instancias del mismo proceso voy a crear un montón voy a crear un montón para ver qué peso tienen en el terminal del monitor y bueno ahora si todo va bien tenemos una serie de personas corriendo en él [Música] en el ordenador cada una con un proceso y de están usando 352 casas con lo cual pues teóricamente 10 personas usan 3 megas con lo cual 100 personas usan 30 megas con lo cual 1000 personas usan 300 megas así que bueno vale en cpu no se nota prácticamente tenemos de momento un cero por ciento y lo importante es que aquí se están creando los registros correspondientes a cada una de esas personas sigue una vez por segundo pues se actualizan para reflejar los datos con lo cual pues ahora mismo cada persona es un proceso independiente dentro del ordenador y ahora a continuación pues podría escribir un programa que se dedique a ver el contenido de estos archivos txt y a pintar el contenido en pantalla por ejemplo bueno pues a continuación vamos a ver quiero de alguna forma mostrar estos estos registros voy a crear un par de estoy a meter una nueva carpeta compartida es una prueba que he hecho archivado bien y ahora voy a arrancar el mando y con un ph pgd voy a dibujar así que abro por aquí abro chrome y voy a buscar lo siguiente voy a buscar php eje de drone ciclo o algo así voy a buscar un ejemplo hecho es algo sencillo y al abrir brackets voy a crear un nuevo archivo voy a pegar lo guardo dentro de hp box dentro del simulador con el nombre pues visor punto php [Música] bueno que una imagen blanco relleno vamos a ver quiero rellenar el fondo con blanco quiero rellenar esto de por ejemplo rojo y ahora lo que voy a hacer es que 200 150 voy a rellenar con una elipse de 50 50 y vamos a por ello así que un local host barra simulador barra visor php y tengo por aquí como podemos ver un círculo rojo en principio vamos a ver aquí cuidado me equivocado con el color blanco vale ahora tengo ya lo que parece que sea un color negro vamos a ver el fondo y claro en qué momento en qué momento en el fondo estamos pintando estamos rellenando realmente pues en ningún principio vale así que en este ejemplo en este ejemplo hay un fondo pero nadie está rellenando con ese fondo así que ver tv es el background color y mails fil voy a poner esa instrucción que falta y ahora pongo emails field imagen de el color del sol si todo va bien ahora si yo tengo de color blanco quiero una imagen que sea este momento de 512 por 512 lo tenemos bien y ahora lo que quiero es leer dentro de los archivos y dibujar un círculo en cada uno de los archivos así que voy a por aquí php eje de list files en directorio así quieres cambiar por ejemplo fillón no os enseño php list files infilder a ver en esta página siempre suele encontrar trozos de código medio en este caso no a comer flow esto mismo así que voy a hacer lo siguiente voy a buscar el directorio registros ya que recordamos que tenemos aquí el registros y por cada uno de ellos ellos esto lo voy a mostrar por cada uno de ellos el color va arriba la elipse va aquí y voy a imaginar qué hago una elipse que está en random desde cero hasta 512 y random desde cero hasta 512 el random me lo acabo de inventar más que nada es que hace días que estoy trabajando a la vez con varios lenguajes de programación y ahora mismo no tengo una seguridad del cien por cien de que en php el random se funcione se formule así así que php hernando y pues sí parece que he tenido suerte y se formulan así así que vamos allá en principio no ha formulado un círculo voy a estar mostrando círculos poner aquí registros a ver si es que no estoy formulando correctamente el directorio multi a dar un momento esta parte de aquí este parece que está haciendo el problema el inicio es con final inicio final y parece que no está entrando dentro de registros asegurarnos de que esté en la carpeta correcta pues no no estoy en la persona corre en la carpeta correcta no sé dónde estoy de hecho ahí está el problema el problema está en que ese visor no está en la carpeta correcta tiene que estar dentro de personas ahora sí entonces me voy a la carpeta personas voy a configurar el directorio ahora sí vale ahora ya lo que tenemos ahí ya es correcto eso quiere decir que ya puedo devolver el jebe ya puedo ocultar el eco hay algún error ahí probablemente por este eco de aquí y ahí ya empezamos a ver esto ahora hago random desde cero hasta 512 y lo mismo por aquí tenemos círculos aleatorios círculos en posiciones aleatorias evidentemente no pasa nada bien y ahora a continuación lo que voy a hacer es que cada uno de estos círculos pues tenga la posición que realmente haya en el interior así que php read txt file vamos a ver la forma más sencilla posible vamos a ver 6 bueno lo más sencillo que pueda en definitiva por aquí y digo my file es igual registros barra punto central en formato de lectura sí aquí lo que hago es también abrir el tamaño del archivo y ahora vivo en línea es igual a esto jackson con lo cual ahora lo que voy a hacer es php string split o explorer realmente y voy a decir que el partido es igual a explorer con el delimitador de la coma de la línea y entonces esto va a ser partido el índice cero y partido el índice el clan griego si todo ha ido bien y no hay ningún error que puede que sí que lo haya me crean los círculos allá arriba lo cual es normal y aunque es normal porque los círculos tienen como diría yo tiene la posición en cero entonces yo lo que voy a hacer ahora a ver vamos a asegurarnos el primer parámetro es x el segundo es y perfecto pues ahora elimine un momento estos registros voy a evitar el archivo fe el segundo bien voy a decir que al principio de fe la posición x es 256 y 256 vale entonces voy a terminar dentro del terminal boya y entrar dentro de personas efe persona punto 0 out persona bien y ahora voy a ejecutar unas cuantas personas ejecutó ejecutó voy a ejecutar tres vemos que ahí tenemos los parámetros recargo aquí veo que tengo por ahí tres círculos de momento ahora lo que quiero hacer es recargar esta página en un cierto time out así que php reload on time out tengo 61 bojan y quería hacerlo con php vale mira esto por ejemplo vamos a ver el visor voy a poner un refresh dentro de un segundo y la url es yo mismo es decir pongo un interrogante para decir que quiero recargar esta misma página me voy al visor y si todo va bien en un segundo está recargando ahora podremos observar que al recargar en un segundo las bolas poco a poco se van moviendo bien se van moviendo porque realmente el programa de fe está recalculando las posiciones de las pelotitas digamos lo divertido de este ejercicio vamos a meterle un poquito más de caña al ejercicio voy a cerrar un momento las consolas con lo cual las pelotitas se habrán quedado en el sitio se han quedado quietas voy a quitar el momento esto vemos que las personas desaparecen perfecto y ahora en el programa de fe quiero decirle al sistema que y quiero refrescar todo esto en menos tiempo en 0.1 a ver si me permite a ver si me permite decimales que en principio debe ser que si me voy al terminal me voy al terminal donde estás terminal he caído en los procesos pues también el terminal entonces jefe [Música] persona punto c persona bien y este es el pequeño problema este es el pequeño problema ya que en este caso pues tengo un máximo de un segundo hay solución slip mili seconds vamos a ver wes lips o slip vamos a ver wesley o slip en que buscan es micro seconds vale con lo cual por mil para mí seconds fin pues slip así que milk es un milisegundo pues voy a poner 100.000 para 100 milisegundos me vuelvo al terminal vamos a ver si ahora sí ok entonces si ahora ya lo tengo vamos a ver ejecutó una persona vemos caras y ejecutó dos personas ejecutó tres personas las cuatro personas mal ejecutó las cuántas cuidado porque evidentemente cuánto da más caña le dé pues más recursos va a usar de procesador pienso que de momento voy sobrado vale pero bueno pues tampoco está de más el irlo gestionando amos el procesador el procesador va un poco a tope pero porque estoy grabando también es decir vamos a verlo la mayor parte del procesador eso bs y luego las personas están por aquí usando un 0-4 de procesador saque que viene muy bien de hecho si miramos por aquí si lo miramos por lista de procesos veremos que cada persona está gastando un 0,4 de procesador o sea que en principio no están consumiendo muchos recursos pero si yo me voy aquí si yo me voy al visor voy a cerrar pestañas de chrome que eso también consumen aquí está y ahora por ejemplo al visor digo que quiero refrescar esto pues en 0.1 también cada 10 veces por segundo ahora veremos como las bolitas poco a poco se empiezan a mover ahora mismo no lo parece pero hay tantas bolitas como procesos allí en marcha ahora mismo procesos pues hay pues bueno prácticamente bien dos tres cuatro cinco seis siete ocho nueve procesos y ahora lo que tenemos por tanto son nueve procesos que están circulando en marcha y bueno y ahora si lo dejo pues evidentemente dentro de un poco pues cada bolita tendrá su propia vida lo que quiero es que se empiecen a separar del centro otra cosa que puedo hacer es darles un poco más de libertad digamos que a cada paso pues pueden avanzar más vamos a ver el código en fe aunque ella creo que está empezando a ver que se separan a ver aquí esto pues partido 100 lo puedo partir claro a un sobrero aquí método uno más [Música] no más esto lo multiplicó por 10 y ahora vamos a vamos a salir voy a hacer una lo bestia en las bolitas no se quedan congeladas ahora si desaparecen las bolitas y por tanto vuelvo a compilar efe persona a punto y ahora hago así en principio veremos que la pelota pues tiene más libertad para irse unas cuantas más y así un poco pues veremos mejor cuál es el resultado estoy haciéndolo con una recarga digamos de página entera que es un método un poco brusco es un método rudimentario pero a la vez sencillo de entender de lo que estoy haciendo quiero decir que podría hacer una recarga con ajax por ejemplo en javascript pero sería más elaborado y probablemente se podría perder un poco el foco de lo que estoy intentando hacer y lo que intento en este caso es demostrar como ahora mismo los las entidades que mueven las pelotitas están en procesos independientes pero luego se juntan en este archivo vamos a ver esto por aquí y ahora voy a hacer más ahora quiero un poco como diría reventar el sistema a ver un segundo y yo aquí algo que me acuerdo qué semana activa es actual y va a limpiar un poco este código estaba hablando de claridad entonces voy a limpiar un poco el código para intentar que ocupe el menor número de líneas posibles porque es muchas veces ayuda anima a ver que realmente no hace falta un programa muy grande para que esto funcione nos damos cuenta con unas pocas líneas pues ya lo tenemos bien y ahora y ahora voy a meter más circuitos las personas con lo cual puedes aparecer un nuevo circuito ahí lo interesante y lo divertido de esta mecánica es que si nos damos cuenta pues cada vez que hago clic aparecerán una bolita qué es un nuevo proceso dentro del sistema operativo ese proceso está hecho y es un proceso que digamos tiene su vida propia ya no depende de php no es javascript pues tiene y completamente su propia vida en el sentido de que va funcionando va escribiendo un archivo y no hace falta realmente que esté el programa de php para para mostrar el resultado porque va funcionando y si yo ahora por ejemplo y esto es lo divertido yo creo que es lo divertido será cierro esto acordémonos el estado que esta persona te vale será cierro esto y este es el objetivo del ejercicio esta es para mí la gracia del ejercicio como os diría yo eso siguió funcionando y yo ahora puedo dejar el ordenador que te citó y no hay ningún navegador web abierto de hecho podría cerrar el mam incluso porque se no depende del servidor web y esto sigue funcionando sigue funcionando sólo entonces yo ahora vengo y ahora vuelvo a abrir en la página web y fijémonos como la forma que tienen ha cambiado completamente y ha cambiado completamente usando me encuentro el último estado que me deje porque el estado ha ido cambiando mientras que la página web estaba cerrada y ha ido cambiando porque los procesos etc tienen su propia vida de hecho y ahora podría eliminar uno de los procesos ese proceso se quedaría congelado de hecho voy a hacerlo bien voy a eliminar uno de los procesos y ahora vamos a ver como ahora una pelota que se ha quedado congelada que es esa vía y porque esa pelota ya no se está refrescando pero en cambio el resto de pelotas se están refrescando será cierro otro de los procesos vamos a ver que habrá una segunda pelota que se ha quedado congelada mírala ahí arriba está mientras que el resto de pelotas siguen funcionando vale con lo cual este visor de php pues básicamente lo único que hace es mostrarnos la pantalla visualmente lo que está ocurriendo entre bambalinas pero lo que realmente importa lo que realmente es valioso es ese proceso de efe es decir cómo se está actualizando automáticamente cada equis tiempo la posición de esas pelotas digamos

Deja una respuesta

Tu dirección de correo electrónico no será publicada.