Reflexion sobre los procesos

Started by Rein (K´)ah Al-Ghul, October 30, 2011, 11:21:55 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Rein (K´)ah Al-Ghul


Primero que nada, hablare sobre este texto, aunque se encuentre en un estado muy primitivo.
El propositivo del mismo es documentar, el resultado de varias discusiones y criticas.
Al hacer publico este texto, estoy invitando a cual lector a dar su opinion al respecto, incluso
a reservarsela si lo considera conveniente; a discutir, inclusive a destruir mi opnion si se hace
criticamente.

He notado que todo lo que escribo, no alcanza a satisfacerme, en especial como programador.
Que puede ser mejorado, en otras palabras visto desde diferentes siempre se puede optimizar en algun
punto, ya sea en reducir lineas de codigo, en el espacio y tiempo de acceso que utilizen los datos
que intervengan, solo por nombrar algo. Esto me lleva a buscar otras formas de aproximacion
a la hora de realizar un mismo procedimiento, en la medida que mi razon me lo permite, aunque
siempre me he decantado por la solucion equilibrada entre simple y uso de recursos, considerando
que si alguien que no entiende de programacion puede entender la solucion, entonces es simple.

Esto me ha llevado a pensar una forma de trabajar con los procesos en los lenguajes divlike.
El hecho de considerar a un proceso como un ente, el cual reacciona dependiendo del entorno
que lo rodea (principalmente otros procesos, graficos, etc), el ambiente externo "de su ecosistema"
(lease Sistema operativo, interaccion con el usuario), me ha llevado a idear una forma de ver
estas relaciones, mediante la colocacion de interfaces. Llendo a un ejemplo mas concreto,
un proceso que avanza moviendose horizontalmente por un plano, (si le afecta o no la gravedad, no
cambiaria el ejemplo, porque siempre en ningun momento se ve afectado por movimientos verticales)
generalmente, el codigo que decide en que direccion y cuanto se mueve, esta fuertemente ligado al
proceso (lease esta codificado dentro del mismo proceso), en otras palabras ese mismo proceso no
podria usarse tanto para interctuar con IA como con un usuario, es decir se tienen que programar
dos procesos distintos uno para ser controlado por la IA y otro para se controlado por el o los usuarios.
Al aplicarle una interface a dicho proceso, se desacopla dicho proceso. por lo tanto se programara solo
la interfaz particular para cada caso (usuario/s, IA, etc), dejando al proceso  dependiente de dicha
interfaz. Aqui el problema de la comunicacion de dicha interfaz con el proceso, lo cual puede solucionarse
de multiples maneras, por ejemplo mediante la utilizacion de datos globales, punteros a estructuras de datos,
datos en los procesos, combinaciones de estos. Aplicando esto, se puede dejar un proceso generico capaz
de ser reutilizado. En el ejemplo anterior, el proceso se moveria una cantidad, tiempo y sentido determinados,
inducidos por la interfaz, independientemente en el sentido en que sea o si esa cantidad se ha sido
producida por IA o por ordenes del usuario. Claro que teniendo en cuesta el gasto de recursos por parte
de esa interfaz, se obtiene algo mas generico y reutilizable. Siendo sincero, no he probado esto a gran escala
Aunque apostaria a que aun en ese contexto puede ser usado.

Con todo esto no trato de obligar al lector a usar mi vision, sino a darle una alternativa mas, un punto de
vista, que espero, sea diferente al suyo. Claro que lo invito a probar esta idealizacion y si es posible a
tomar y/o descartar lo que crea necesaria de la misma.



Esta obra está licenciada bajo una Licencia Creative Commons Atribución 3.0 Unported.

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

FreeYourMind

No he entendido nada, aunque me parece que algo grande se te ha ocurrido

KeoH

Juas .. esto q es un texto sobre reflexiones de programación? xD mola. Me he perdido en partes del texto y no se si lo he entendido bien .. pero te voy a contar las pruebas q estoy haciendo con mis procesos.

El proceso principal q se ve en pantalla con los gráficos del personaje, lo tengo exclusivamente para que se le vea y se mueva por pantalla, después tengo otro proceso hijo q lo que hace es manejar al padre (como los hijos de verdad!!), hace que se desplace si es usuario hace algo, por ejemplo. Después tengo otro proceso hijo que le asigna un gráfico , según su estado (corriendo, saltando, girando, etc) y su cuadro de animación en esa secuencia de animación. Otro proceso hijo que pone al padre las coordenadas en pantalla correspondientes, según una aplicación lineal , ya que los procesos usan coordenadas internas, y estas deben traducirse en cada fotograma a la pantalla para que puedan pintarse, con esto creo una especie de efecto de perspectiva, bastante sencillo y potente xD (q es lo que hacen los motores 3D, pero en cutre).

Al final lo que tengo es un proceso, que es controlado por mas de un proceso. Esto me permite ( o espero q me permita) flexibilidad por si quiero crear distintos tipos de enemigos, para q hagan todos lo mismo, pero sin reescribir su codigo mil veces. Lo llamo Sistema de Marionetas xD

No se si esto tiene que ver con lo que has escrito .. pero yo lo pongo y me quedo tan a gusto! xD

Rein (K´)ah Al-Ghul

Pense en algo como dice KeoH, pero no necesariamente en procesos hijos y/o padres sino mas independientes...
Por otro lado, tiene razon, es una forma facil de hacer que muchos procesos personajes hagan lo mismo...
pero no pense en tener varias procesos que controles un unico proceso (anoto eso :P ) aunque si lo pense para que mas de un suario controle parte de un proceso personaje...

Serian como los hilos de las marionetas (buena analogia KeoH)

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

Drumpi

Me ha costado entenderlo, no sé si por la longitud, por el poco tiempo para leerlo o porque me acabo de despertar de la única siesta de la semana ^^U

El cómo usar los procesos es algo sobre lo que no hay nada escrito. Se puede usar el mismo principio que rige el manejo de los procesos en sistemas multihilo, pero tampoco serviría, pues el sistema de sincronización y comunicación es más complejo. Otra forma de verlo sería a través de la porgramación orientada a objetos, este método se parece más, pero aun así sigue sin ser lo mismo, sobre todo porque la creacion/destrucción de procesos no es algo que sea "gratis" en concepto de ejecución.

Como digo, se parece mucho a los procesos de sistemas multihilo, pero está muy simplificado, porque para sincronizarlos basta con frame. El único sistema de comunicación son las variables globales (no hay una instrucción que diga "congélate hasta que el proceso tal te mande un dato de este tipo"), y el orden en el que se accede a ellas es mediante la variable priority. Además, cualquier cosa que sea "tu primero, yo después, y nos vemos en el siguiente frame" se complica bastante.

Pero el sistema para manejar un proceso, tal como lo planteas, ya se ha hecho. En mi caso uso variables globales para saber cuanto tiempo lleva pulsada la tecla para hacer una determinada acción, y así actuar en consecuencia. Hace poco se lo comenté a alguien del foro: este sistema me permite ejecutar un proceso que controle la escritura de estas variables según el Sistema Operativo, y hacerlo adaptable a cualquiera fácilmente.

Pero aun está por ver un sistema, escrito en Bennu, que permita crear una interfaz de ventanas, que sea simple, y que las sincronice entre sí, sin montar el caos de cierto código que yo me sé :D
Es más, si os dais cuenta, se puede escribir más de un libro acerca de métodos de programación en Bennu, y sería el primero en su clase, no creo que exista metodologías ya hechas para muchas de las cosas :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)