Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda...

Iniciado por shephiroth, 29 de Agosto de 2005, 12:30:26 AM

« anterior - próximo »

shephiroth

 Muy buenas.

Hace poco he comprado un portatil, me lo han dado con un windows xp home, y se que directamente le voy a dar una patada a ese sistema operativo. Aprobechando he estado pensando en instalarme linux y ademas de ir cogiendo el truco a linux a este sistema aprobecharé para adoptar el codigo a linux.

Por encima he visto q tengo 2 problemas fundamentales:
- Que programa me recomendais para programar?? En windows normalmente uso el .net, pero si me recomendais uno que sea por comando de linea no tengo problema.
- Como se crean y se gestionan las ventanas de linux?? El bucle de mensajes de windows existe en linux, o como va el tema??

P.D: No va al tema, pero me estoy bajando la ultima version del DEBIAN (debian-31r0a-i386-binary), q opinais del mismo??

Zaelsius

 IDEs:

- Anjuta, KDevelop, CodeBlocks, Eclipse. No sabría recomendarte uno en concreto.. uso Linux bastante poco.

- Aprende a manejarte básicamente con Vi/Vim. Es el editor en modo texto que suele estar en todas las distribuciones, por mínimas que sean. Por eso nunca está de más saber utilizarlo.

APIs:

Aquí hay un follón de mucho cuidado.. no hay una API "estándar". El nivel más bajo creo que es X11, pero ni se te ocurra xD. Tradicionalmente se usa GTK para el gestor de escritorio Gnome, y QT para el gestor KDE. Hay envoltorios de Python para ambas, y según que IDE, encontrarás más fácil crear proyectos con una u otra.

Tambien tienes la posibilidad de usar Java. La mayoria de unix geeks no suelen usarlo porque se lo prohíbe su dogma(eso de que todo tiene que ser open-source y si no, a la hoguera). Pero no es mala opción para según qué cosas.

El proyecto Mono(.Net) aun no está completo, pero ya puedes correr aplicaciones de consola sin ningun problema, y crear aplicaciones portables Windows/Linux con las extensiones GTK#.

Un lío de cojo*** eh? xD

zupervaca

 como dice ZaelSiuS yo te recomendaria mono, que es muy mono  :P, ademas las gtk empiezan a ser un gran estandar a tener en cuenta

suerte en tu aventura  :lol:  

TheWind

 Ide's: Eclipse, Kdevelop

API's: El más bajo nivel sobre X11 es XLib -no es muy complejo tampoco... -. Luego ya tienes lo que quieras en cuanto a API's, por potencia: QT , por portabilidad wxWidgets , por ser politicamente correcto... GTK (q no son nada del otro planeta). Aparte de estas hay muchas más : lesstiff (clon de motif), FOX (muy bien estructuradas y muy portables), FLTK (muy ligeras y veloces), minigui y opengui para aplicaciones empotradas.

En cuanto al bucle de mensajes windows... olvidate de el...

shephiroth

 
Cita de: "ZaelSiuS"IDEs:

- Anjuta, KDevelop, CodeBlocks, Eclipse. No sabría recomendarte uno en concreto.. uso Linux bastante poco.

- Aprende a manejarte básicamente con Vi/Vim. Es el editor en modo texto que suele estar en todas las distribuciones, por mínimas que sean. Por eso nunca está de más saber utilizarlo.
IDEs, buscare info de eclipse y kdevelop, q tanto ZaelSiuS como TheWind lo comentaron ^_^
Como editor tengo bastante claro que utilizaré algun "notepad" que tenga el entorno grafico que elija (estoy demasiado windowmaniatizado como para utilizar el vi, me acuerdo de el cuando di linux hace un año, y deja deja >_<).

Cita de: "ZaelSiuS"APIs:

Aquí hay un follón de mucho cuidado.. no hay una API "estándar". El nivel más bajo creo que es X11, pero ni se te ocurra xD. Tradicionalmente se usa GTK para el gestor de escritorio Gnome, y QT para el gestor KDE. Hay envoltorios de Python para ambas, y según que IDE, encontrarás más fácil crear proyectos con una u otra.

Tambien tienes la posibilidad de usar Java. La mayoria de unix geeks no suelen usarlo porque se lo prohíbe su dogma(eso de que todo tiene que ser open-source y si no, a la hoguera). Pero no es mala opción para según qué cosas.

El proyecto Mono(.Net) aun no está completo, pero ya puedes correr aplicaciones de consola sin ningun problema, y crear aplicaciones portables Windows/Linux con las extensiones GTK#.
Hmmmm, y no se puede utilizar Opengl???? Solo necesito crearme una ventana (y cerrarla), lo demas lo tengo escrito en c++ y opengl, espero no tener q tocar nada >_<

Cita de: "ZaelSiuS"Un lío de cojo*** eh? xD
Ya te digo >_<

Cita de: "TheWind"En cuanto al bucle de mensajes windows... olvidate de el...
Entonces q tengo q hacer, algo como esto???
void main(....)
{
crearVentana();
InicializarClases();
mientras(bucle)
{
juego();
}
}


Gracias a todos por vuestra ayuda ^_^

EDITADO: TheWind, me dejaste una duda. Si no existe cola de mensajes en linux, como reconozco en mi programa cuando el usuario pulsa una tecla, o intenta cerrar la ventana, o mueve el raton......tambien me interesaría saber como hacer q mi programa reaccionara al kill de linux :D

Zaelsius

 ¿Te basta OpenGL y una ventana? Haberlo dicho antes :D

Usa GLFW, un envoltorio de OpenGL multiplataforma muy sencillo y que funciona realmente bien(lo he usado en Windows y Mac). Tambien incluye funciones para manejo de ratón y teclado, además de alguna pequeña ayuda como carga de TGA's.

shephiroth

 Wenas.

En mi codigo actual tengo una funciona crearVentana() q inicializa variables globales con la ventana creada. Quiero el derivado en linux, y poder hacer algo como:


#ifdef _WINDOWS_
#define crearVentana() crearVentanaWindows()
#else
#define crearVentana() crearVentanaLinux()
#endif


Respecto al envoltorio.....pudiera ser q me resolviera problemas q comente de como se codifica en linux los eventos de teclado/raton, pero a poder ser no me gustaría tocar el codigo actual en windows. Pero weno, me imagino q son cosas q hay q pagar.....gracias de todos modos ^^

Grugnorr

 Si te decidieras a usar C#, tienes un IDE gratuito muy majo, SharpDevelop.

PD: Te recomendaría que abstrayeras el SO por código, no por precompilación. Encapsula en dlls las partes dependientes de cada uno, o al menos, en clases// librerías distintas.
hat the hells!

TheWind

 
Creo q entendiste mal, no es que no haya una cola de mensajes, es que el planteamiento de la interfaz grafica de linux es muy diferente al de windows, tanto que debes olvidarte de lo visto en windows.

Creo que si miras este ejemplo de kill lo entenderas.

En cuanto al entorno gráfico, la forma de trabajar varía de una API a otra:

#include <QApplication>
   #include <QFont>
   #include <QPushButton>

   int main(int argc, char *argv[])
   {
       QApplication app(argc, argv);

       QPushButton quit("Quit");
       quit.resize(75, 30);
       quit.setFont(QFont("Times", 18, QFont::Bold));

       QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

       quit.show();
       return app.exec();
   }


Esta aplicacion lanza una ventana, con un boton y permanece abierta hasta que no pulsas en el boton... como puedes ver no es necesario bucle de espera ya que es el propio sistema que envia la señal adecuada a la aplicacion para que el boton se active.

TheWind

Cita de: "Grugnorr"Si te decidieras a usar C#, tienes un IDE gratuito muy majo, SharpDevelop.

PD: Te recomendaría que abstrayeras el SO por código, no por precompilación. Encapsula en dlls las partes dependientes de cada uno, o al menos, en clases// librerías distintas.
En mono (monodevelop) aun esta en pañales, le faltan multiples cosas ya que las partes no standard -winforms por ejemplo- aun no estan implementadas.


senior wapo

 TheWind te ha listado los toolkit existentes bastante bien. Paso a comentarte unas cosillas:

1. Si hay bucle de mensajes en Linux bajo GUI (XFree, X11 y toolkits). No lo hay para aplicaciones de consola. Igual que en windows. El PeekMessage()/GetMessage() de WIN32 se llama XNextEvent() en Xlib (API mas bajo del GUI) pero probablemente uses un toolkit (wrapper estilo MFC de WIN32) como QT, GTK, y similares que te lo cubran y solo tengas que hacer un procedimiento que reciba los eventos del toolkit.

2. Te recomiendo como interfaz GUI FLTK. Es muy facil de aprender, muy veloz y ligero (como ya te han dicho). FoxGUI es bueno y sólido, pero lo encuentro tan coñazo de programar como las MFC, gracias a sus mapas de mensajes. Preferencia personal realmente. QT no me gusta por manías mias, y GTK es gordo, lento y mal API, pero está muy extendido y además es C, no C++, y eso puede serte útil en según que casos.

3. Como entorno de programacion bajo Linux lo mas rapido es pillarte un editor que te haga sentir comodo (FLDev por ejemplo) y compilar desde consola. Mas que nada porque perder el tiempo peleandote con un IDE si no te funciona bien a la primera (no compila/no encuentra el make/etc..) no es conveniente al empezar.

4. Si solo quieres una ventana para usar tu código OpenGL, no necesitas mucho. Si no quieres usar la libreria GLUT (que está para eso), puedes usar SDL o incluso escribir tu las pocas líneas de código Xlib a pelo. FLTK y FOXGUI tienen buen soporte opengl además de su GUI pero lo mismo no te compensa aprenderlos is solo usarás OpenGL. El código fuente de Quakes y similares te puede dar pistas sobre como abrir una ventana y usar OpenGL a pelo.

5. Sobre las distros Linux, Debian es buena opción. Lo instalas y te olvidas. Si supieras que tienes necesidades más complejas, entonces también sabrias que distro usar  (twist)

TheWind

 En cuanto a distros:

Si quieres control y realmente una vez instalada olvidarte de lios: Gentoo . Si quieres sencillez Mandriva o SuSE ó bien Knoppix 4.0 DVD (tiene las ventajas de debian, pero no su coñazo instalacion)


TheWind

 A senor_wapo: es logico que no si no te gusta qt no te guste fox, ya que estan pensadas de forma muy similar -de hecho hacer un wrapper de qt sobre fox es facil-

zupervaca

 para una libreria de ventanas multiplataforma tengo algo asi:

base.h
namespace windows
class ventana // Predeclarar solo
namespace base
class ventana
{
crearventana(){...}
}
#ifdef win32
incluir win32.h
#endif win32
#ifdef linux
incluir linux.h
#endif

win32.h
#ifdef win32
incluir base.h
namespace windows
class ventana : base:ventana
{
crearventana(){...}
}
#endif win32

para linux.h seria lo mismo

no se si se entiende bien del todo, la idea es crear una clase base abstracta y predeclarar la que se va a usar y dependiendo de una constante del preprocesar se compila una cosa u otra, esto es una ejemplo basico, pero se puede evolucionar mas para evitar usar una clase asi y usar directamente el api y que con el preprocesador compile una u otra, tambien existe otro solucion y es la de un generador de codigo fuente apartir de un lenguaje que tu hagas y que este te genere c o c++ para luego compilarlo desde el sistema operativo con las librerias de cada api que hayas seleccionado (esta opcion es la que suelo usar yo, ya que los warpers los odio jijiji)

saludos

editado: pero sigo diciendo que para empezar lo mejor es coger librerias multiplataforma

raistlin

Intento que los novatos entiendan como funciona el mundo.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.