elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Bases de Datos / Lo que no logro comprender sobre DBs en: 14 Mayo 2014, 21:48 pm
Qué tal gente, cómo les va? :D

Estoy comenzando con esto de la web (?) y se me cruzó hacer un juego muy sencillo, para dos personas. Lo estoy desarrollando en javascript usando Pixi.JS. El tema es el siguiente, se me presentó la necesidad de guardar información (asesinatos, muertes y puntos), por lo tanto necesito una base de datos. Primera vez en mi vida de programador que debo lidiar con esto.

Mi duda radica en lo siguiente, según pude "imaginar" como sería, ya que no podría dejar acceso a la base de datos desde js porque supongo que eso sería extremadamente vulnerable, no? Asumo que desde js debería comunicarme con un programa en el servidor, y que ese programa acceda a la base de datos.

Por ejemplo:
Jugador1(Cliente A) mata a Jugador2(Cliente B).
Cliente A envía "anotame un frag mas" al programa en el servidor, y Cliente B envía "anotame una muerte mas" al mismo programa en el servidor, y ese programa en el servidor es el responsable de modificar la base de datos
Estoy en lo correcto? A la vez pienso, si Cliente X es quién dice "anotame un frag"  o "anotame una muerte", hay manera de que una persona edite eso, y envíe -por ejemplo- diez veces "anotame un frag"?

En fin, primero me gustaría saber si el planteo que se me hizo en la cabeza es el correcto. Un abrazo, y gracias de antemano :)
2  Programación / Scripting / [Aporte] 2D y físicas en Python (inglés) en: 21 Marzo 2014, 00:16 am
Navegando topé con este sitio que cubre el uso de Pygame y Box2D para la programacion de juegos. Cubren la construcción de un engine de física básico, algo de network, entre otras cosas. Realmente interesante.

Dejo el enlace:
http://physics.gac.edu/~miller/jterm_2013/physics_engine_tutorial.html
3  Programación / Scripting / Atenti con el operador / en Python ahora xD en: 27 Febrero 2014, 17:44 pm
Hasta donde yo recordaba, si hacía algo así:
Código
  1. >>>3 / 2
  2. 1
  3. >>>3 // 2
  4. 1
  5. >>>3.0 / 2
  6. 1.5
  7. >>>3 / 2.0
  8. 1.5
  9.  

Python me devolvía un número entero si usaba / entre dos números enteros, y un número entero con // sin importar que fuesen float...

Formateo la PC, me bajo Python3.3.4 y me topo con lo siguiente (además de una web mejorada con una shell interactiva que se luce http://python.org/):
Código
  1. >>> 3 / 2
  2. 1.5
  3.  

¿Desde cuándo una división entre dos números enteros me devuelve float si o si? xD O siempre fue así y yo por algún motivo no me di cuenta? xD Busqué en la documentación sobre el último release y no dice nada al respecto D:


4  Programación / Programación C/C++ / [Aporte] Jumping intro C++ y C++ Complete reference 4th edition en: 27 Febrero 2014, 07:03 am
Vi que no estaban colgamos, y son muy buenos, para tenerlos en cuenta:

http://ebook-dl.com/item/Jumping_into_C_Plus_Plus_Alex_Allain

http://ebook-dl.com/item/C_Plus_Plus_The_Complete_Reference_4th_Edition_Herbert_Schildt

http://ebook-dl.com/item/Data_Compression_The_Complete_Reference_Fourth_Edition_David_Salomon_G_Motta_D_Bryant

No los vi colgados, así que bueno, los comparto :P son de descarga gratuita :) Y cuentan con muuuchas páginas :)

Un abrazo.
5  Programación / Programación C/C++ / Pregunta sobre APIs en Windows. en: 27 Febrero 2014, 00:11 am
Disculpen que haga este hilo acá... realmente no se donde hacerlo jaja en fin, estoy experimentando con ctypes en Python (si lo sé esto es el subforo de C). Para eso me estoy informando con MSDN, y recurro a la sabiduría de los C-sianos (?) que la tienen calada...
Estoy intentando usar la API TerminateProcess, cuya descripción es la siguiente:

Código
  1. BOOL WINAPI TerminateProcess(
  2.  _In_  HANDLE hProcess,
  3.  _In_  UINT uExitCode
  4. );

Citar
hProcess [in]
A handle to the process to be terminated.
The handle must have the PROCESS_TERMINATE access right. For more information, see Process Security and Access Rights.
uExitCode [in]
The exit code to be used by the process and threads terminated as a result of this call. Use the GetExitCodeProcess function to retrieve a process's exit value.

Entiendo que necesita dos argumentos de entrada, el "handle" del proceso, y un código de salida.
Bien, entonces asumo que tengo que conseguir el "handle" del proceso. Pues bien, no entiendo cómo obtener el handle. Soy muy novato en el tema, y estoy viendo algo sobre la API OpenProcess, que teóricamente me devuelve el handle del proceso:

Código
  1. HANDLE WINAPI OpenProcess(
  2.  _In_  DWORD dwDesiredAccess,
  3.  _In_  BOOL bInheritHandle,
  4.  _In_  DWORD dwProcessId
  5. );

Citar
dwDesiredAccess [in]
The access to the process object. This access right is checked against the security descriptor for the process. This parameter can be one or more of the process access rights.
If the caller has enabled the SeDebugPrivilege privilege, the requested access is granted regardless of the contents of the security descriptor.
bInheritHandle [in]
If this value is TRUE, processes created by this process will inherit the handle. Otherwise, the processes do not inherit this handle.
dwProcessId [in]
The identifier of the local process to be opened.

Entiendo que necesita tres argumentos. Llegado el tercer argumento (el PID), entiendo que para obtenerlo, tengo que utilizar la API GetProcessID:

Código
  1. DWORD WINAPI GetProcessId(
  2.  _In_  HANDLE Process
  3. );
  4.  

Ahora bien, eso me devolvería el PID... el cuál necesito para obtener el handle... Pero la función me pide el handle del proceso... No entiendo xD.

Perdón la ignorancia, y que haga una pregunta así, pero no logro entender el procedimiento para cerrar un proceso mediante TerminateProcess. Se que lo puedo hacer utilizando taskkill /f /im blabla, pero prefiero entender esto :\
Aclaro que no estoy haciendo ninguna maldad ni nada similar, solo estoy practicando multithreading, y se me ocurrió hacer una función que abra un proceso, mientras otra lo cierre, por el mero hecho de practicar algo, y decidí hacerlo de esta manera.

De todas maneras, voy a seguir buscando y probando. No pido un códigohecho, con una palabra que me oriente estaría muy agradecido!

Un abrazo.


6  Programación / Scripting / ["Aporte"-Python] Haciendo funcionar Kivy en Python3.3 en: 23 Febrero 2014, 08:23 am
Por esas casualidades de la vida me topé con Kivy. Un par de videos y algunas críticas me convencieron de probarlo. Por un momento tuve la extraña sensación de "preocupación", de que este framework fuese un proyecto inestable mas, con grandes problemas. Para sorpresa mía, fue casi todo lo contrario: un proyecto robusto, una obra de ingeniería, pero muy joven, con una comunidad agradable, con muy buen nivel. Entonces me hice una serie de preguntas vitales: ¿Windows, Linux? ¿Python 2, Python 3? ¿3.2? ¿3.3? Para mi sorpresa... no solo Windows y Linux, si no también Android, iOs, y OSx. La documentación es regular. Para un programador experimentado, o un lector muy ávido de inglés, es buena.
Me dispuse a instalarlo bajo Windows en principio... y resultó ser algo mas complejo de lo que pensaba. Podría bajarme todo en uno, como si fuese "otra versión"de Python. Es decir, viene con un Python portable, y desde ese intérprete puedo usar Kivy. Para tener Kivy a disposición del intérprete ya instalado, es necesario -según llegué a leer- compilar a mano todo. Lo dejé para después. fue entonces cuando lo probé bajo Ubuntu. Acá es donde comenzaron los pequeños retrasos. La verdad no soy muy entendedor de Linux todavía, soy un usuario que lleva muy poco tiempo utilizándolo.
Quiero aclarar que en Ubuntu, contamos por defecto con Python2.7. Para acceder a Python 2.7 tipeamos cualquiera de las siguientes líneas en la terminal:

Código:
user@ubuntu:~$ python
user@ubuntu:~$ python2
user@ubuntu:-$ python2.7

Asumo -y es pura suposición- que al tipear "python", Linux ejecuta el intérprete predefinido, si tipeamos "python2", ejecuta la versión mas reciente de Python2x, y si tipeamos "python2.7" accedemos a la versión específica. (algún linuxero que corrija a este novato, por favor)
Tipeamos ahora lo siguiente, para saber si tenemos Python3.3 instalado:

user@ubuntu:-$ python3.3

Si no lo tenés instalado, Ubuntu -a la fecha- no cuenta con tal versión en los repositorios oficiales. Es por eso que debemos buscarlo en otro repositorio. En mi caso, DuckDuckGo-eando, me topé con que los repositorios DeadSnakes si cuentan, por tanto debemos agregar a la lista:

Código:
user@ubuntu:-$ sudo apt-get install python-software-properties
user@ubuntu:-$ sudo add-apt-repository ppa:fkrull/deadsnakes
user@ubuntu:-$ sudo apt-get update
user@ubuntu:-$ sudo apt-get install python3.3-dev

El -dev es para desarrolladores. Una vez que tenemos instalado Python3.3 correctamente, es tiempo de descargar Kivy, y Cython, que forma parte de los requerimientos. Descargamos Kivy desde la web oficial, descargamos el fichero (Kivy-1.8.0.tar.gz), el mismo quedará en /home/Descargas, en donde lo descompriremos, quedando entonces en /home/Descargas/Kivy-1.8.0.

Es tiempo de probar si todo funciona, lo cuál en mi caso no sucedió, pero mejor intentarlo.

Código:
user@ubuntu:-$ cd Descargas/Kivy-1.8.0
user@ubuntu:-/Descargas/Kivy-1.8.0$ python3.3 setup.py install

Si querés instalarlo para otra versión, solo cambia "python3.3" por la versión deseada ("python2.7", por ejemplo).

Si no hay ningún error, estás de suerte, y solo queda por importar Kivy:

Código:
user@ubuntu:-$ python3.3
>>>import kivy


Pero si te levantaste con el pie izquierdo, entonces vas a tener que hacer algunos pasos adicionales, seguramente habrá aparecido algún problema relacionado a Cython. Realmente no llegué a entender el 100% de lo que hice, pero bajé cython y cython3.
Cython lo conseguí en el siguiente enlace de Ubuntu: http://packages.ubuntu.com/raring/cython3
Lo bajé, lo extraje, y tuve que copiar cada fichero en la carpeta correspondiente dentro de /usr/bin.
Para esto, como usuario común, no podremos hacerlo, por lo que utilizaremos Nautilus:

Código:
user@ubuntu:-$ sudo nautilus

Una vez hecho esto, nos dirigimos a la carpeta de Cython3 (que en mi caso tiene el nombre cython3_0.17.4-0ubuntu1_amd64) y dentro está el siguiente sistema de directorios:

Citar
cython3_0.17.4-0ubuntu1_amd64/
        ./usr
            ./bin
              cydbg    (fichero)
              cython3  (fichero)
            ./lib
               ./python3
                  ./Cython
            ./doc

Lo que tenemos que hacer ahora es copiar los ficheros cydbg y cython3 a /usr/bin en nuestro sistema de directorios, y la carpeta Cython a /usr/lib/python3.3.

Nuevamente intentamos instalar Kivy:

Código:
user@ubuntu:-/Descargas/Kivy-1.8.0$ python3.3 setup.py install

Si nuevamente tenemos un error, es necesario que Cython esté en el directorio de Kivy. Pero debemos bajar "otra versión" al parecer, desde http://cython.org/#download. Una vez descargado, extraemos el fichero, y dentro tendremos una carpeta llamada "Cython". La debemos copiar entera ADENTRO del directorio de Kivy. Y ahora si, abrimos la terminal:

Código:
user@ubuntu:-$ cd Descargas/Kivy-1.8.0
user@ubuntu:-/Descargas/Kivy-1.8.0$ python3.3 setup.py install

Y el problema debería estar solucionado, algo como lo siguiente debería aparecer al importar kivy:
Código:
Python 3.3.3 (default, Dec 27 2013, 19:27:19) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import kivy
[INFO   ] Kivy v1.8.0
>>>

Ahora bien, lo que hice yo fue copiar la carpeta "kivy" (dentro de Kivy-1.8.0) a la carpeta de python3.3 (./usr/lib/python3.3, necesitamos Nautilus). Esto es porque para importar Kivy, deberíamos estar dentro del directorio donde fue extraído. De esta manera, estemos donde estemos, podremos importar kivy.

Se que es una solución informal, infundamentada. Realmente fue un rebusque de novato que me di. Espero que le sirva a algún otro novato, y por favor, sepan disculpar las burradas dichas seguramente.
Les mando un abrazo.

PD: Voy a buscar la solución en Windows. Creo que voy a echar una mirada al registro, quizás pueda modificar algunas llaves, y así reemplazar el intérprete "normal" por el Kivy (que es el mismo, pero portable).
------------------------------------------
EDIT:
Encontré una manera mas limpia de instalar bajo Ubuntu, con el siguiente script:

Código
  1. install_kivy_stable_py3_virtualenv.sh
  2. Shell
  3.  
  4. #!/bin/sh
  5. # Bootstrap Python3.3
  6. sudo apt-get install python-software-properties
  7. sudo add-apt-repository ppa:fkrull/deadsnakes
  8. sudo apt-get update
  9. # Install necessary system packages
  10. sudo apt-get install -y build-essential mercurial git python3.3 python3.3-dev python-gst0.10 ffmpeg gstreamer0.10-plugins-good libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev libsdl1.2-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev libgl1-mesa-dev libgles2-mesa-dev zlib1g-dev
  11. # Bootstrap current setuptools
  12. wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | sudo python3.3
  13. # Bootstrap a current Python virtualenv
  14. sudo apt-get remove --purge -y python-virtualenv python-pip
  15. sudo easy_install-3.3 -U pip
  16. sudo pip3.3 install -U virtualenv
  17. # Create a vitualenv
  18. sudo rm -rf venv
  19. virtualenv-3.3 venv
  20. # Install current version of cython into the virtualenv
  21. sudo apt-get remove --purge -y cython
  22. sudo pip uninstall --yes cython
  23. venv/bin/pip install -U cython
  24. # Install other PyGame and Kivy dependencies
  25. venv/bin/pip install -U numpy
  26. # Install pygame into the virtualenv
  27. hg clone https://bitbucket.org/pygame/pygame
  28. cd pygame
  29. ../venv/bin/python setup.py build
  30. ../venv/bin/python setup.py install
  31. sudo ../venv/bin/python setup.py install
  32. cd ..
  33. sudo rm -rf pygame
  34. # Install development version of Kivy into the virtualenv
  35. venv/bin/pip install kivy
  36. # Install a couple of dependencies for KivyCatalog
  37. venv/bin/pip install --upgrade pygments docutils
  38.  

Fuente: https://gist.github.com/brousch/8825629 & Ben Rousch jaja
7  Programación / Scripting / [Python] Lista vacía "None" generada a partir de otra extendida... Gran duda. en: 20 Febrero 2014, 08:48 am
Gente... estoy un tanto desconcertado del por qué Python actúa de esta manera. ¿Alguien me podría decir a qué se debe?

Código
  1. SECTION_LINKS = 'LINKS'
  2. SECTION_NOTES = 'NOTES'
  3. SECTION_EXAMPLES = 'EXAMPLES'
  4. SECTION_DATA = 'DATA'
  5. SECTION_RELATED = 'RELATED'
  6. SECTION_DEFINITIONS = 'DEFINITIONS'
  7. COMMON_SECTIONS = [SECTION_LINKS, SECTION_NOTES, SECTION_EXAMPLES,\
  8. SECTION_DATA, SECTION_RELATED, SECTION_DEFINITIONS]
  9. SECTION_ALGORITHM = 'ALGORITHM'
  10. SECTION_CONTENT = 'CONTENT'
  11. # - Structure
  12. AL_STRUCTURE = COMMON_SECTIONS.append(SECTION_ALGORITHM)
  13. print(AL_STRUCTURE)
  14. DE_STRUCTURE = COMMON_SECTIONS.extend(SECTION_CONTENT)
  15. print(DE_STRUCTURE)
  16.  

En este caso, la salida de print para ambos es None.

El problema ya lo solucioné de la siguiente manera:
Código
  1. AL_STRUCTURE = [SECTION_ALGORITHM]
  2. AL_STRUCTURE.extend(COMMON_SECTIONS)
  3. DE_STRUCTURE = [SECTION_CONTENT]
  4. DE_STRUCTURE.extend(COMMON_SECTIONS)
  5.  
Y funciona... Pero mi duda es la siguiente:
¿Por qué en el primer caso AL_STRUCTURE y DE_STRUCTURE pasan a ser de tipo None?
By the way... ¿tienen una manera mas compacta y pythónica de hacer lo anterior? :P
8  Programación / Programación C/C++ / [Problema - novato] En este caso, ¿referencia, puntero u otra manera? ¿por qué? en: 18 Febrero 2014, 13:46 pm
Muy buenas tardes gente... ¿cómo les va? Estoy con una pequeña duda... hace unos días retomé programación, y agarré C++ -aunque por problemas eléctricos estuve sin pc algunos días-. Estoy recién comenzando con punteros, referencias, estructuras, etc y estoy probando pequeños programas para ir entendiendo el funcionamiento.

Pues bien, estuve haciendo un pequeño programa en donde se agrega mediante un bucle for valores de 4 en 4 a cada elemento. Es decir, array[0] = 4, array[1] = 8, etc.
Para esto, y a fines de practicar, lo hice utilizando punteros de la siguiente manera:

EDIT:
Código
  1. #include <iostream>
  2. #include <string>
  3. int main ()
  4. {
  5.    int matriz[10];
  6.    int *ptr = NULL;
  7.    int valor = 4;
  8.    ptr = matriz;
  9.    for (int i=0; i < 10; i++) {
  10. matriz[i] = valor;
  11. std::cout << " DIRECCIÓN: " << ptr;
  12. std::cout << "| VALOR: " << *ptr << std::endl;
  13. ptr++;
  14. valor += 4;
  15.    }
  16. return 0;
  17. }
  18.  
  19.  
  20.  

El programa muestra una salida en terminal como la siguiente:
Citar
ADRESS: 0x601180| VALUE: 4
 ADRESS: 0x601184| VALUE: 8
 ADRESS: 0x601188| VALUE: 12
 ADRESS: 0x60118c| VALUE: 16
 ADRESS: 0x601190| VALUE: 20
 ADRESS: 0x601194| VALUE: 24
 ADRESS: 0x601198| VALUE: 28
 ADRESS: 0x60119c| VALUE: 32
 ADRESS: 0x6011a0| VALUE: 36
 ADRESS: 0x6011a4| VALUE: 40

Funciona correctamente peeeeero....

Mis dudas son:
1 ) ¿Existe otra alternativa sin usar punteros?
2 ) De ser así, ¿cuál sería la ideal para ustedes?
3 ) En la línea 29 utilizo puntero++ con el fin de avanzar a la siguiente dirección, funciona, pero está bien pensado o funciona de pedo? jaja
4 ) De estar bien el código, ¿alguna sugerencia para este noob? xD Además de los comentarios que los quité :P

Gracias de antemano y les mando un abrazo.

9  Programación / Programación C/C++ / [Problema o duda] G++ y ficheros ejecutables? en: 14 Febrero 2014, 20:59 pm

--- Pueden cerrar, ya investigué al respecto, y entendí otras cosas :P Gracias igual.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines