Rincón Informático

Un rincon para hablar sobre GNU/Linux, seguridad informatica, y mas!!

Archive for the ‘Programacion’ Category

Aprendiendo Ruby desde cero Capitulo I

Posted by fortress On octubre - 25 - 2011

Desde hace días quería escribir este articulo pero por falta de tiempo (cosas del trabajo) no lo había podido hacer. Aclaro que no se trata de una guía oficial ni nada por el estilo solo es compartir lo poco que he ido aprendiendo sobre este lenguaje y quizás juntos podamos aprender muchísimo mas. Bueno sin mas cháchara aquí vamos.

 

Primero una definición de la wikipedia de que es Ruby?

 

“Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro “Matz” Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en , Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una de software libre.”

 

Algunas características importantes

 

- orientado a objetos.
- Todo es un objeto.
- Bloques.
- cuatro niveles de ámbito de variable: global, clase, instancia y local.
- manejo de excepciones.
- Mark and Sweep Garbage collector.
- expresiones regulares nativas.
- Mucho soporte para comunicación con C, con un agradable API para utilizar Ruby desde C.
- Manejo de multitareas (Threads) independiente del sistema operativo, puedes incluso usar threads en DOS!
- Gran Portabilidad, corre en toda clase de sistemas Linux/Unix, Windows, OS/2, dos, etc…

Para instalar Ruby solo ejecutamos en la terminal y como root

 

# apt-get ruby

Después de tenerlo instalado solo bastara con teclear en la consola:

 

$irb

Y tendremos algo como esto:

 

 

Ahora realicemos algunos ejemplos, como el famoso “Hola Mundo!!!”

 

 

Fácil, no? muy parecido a otros lenguajes, cierto?

 

Bueno creo que es todo por el momento, la idea es que fuera el abre bocas, para la próxima empezaremos con cosas creo que un poquito mas interesantes XD.

 

Fuente 1
fuente 2

Etiquetas: , , , , , , , , , , , , , ,

Problemas de programación ACM-ICPC 2011

Posted by jhonber On marzo - 31 - 2011

El pasado sábado 19 de Marzo se llevo acabo la Maratón Regional de programación de la ACM-ICPC el Circuito de maratones ACIS/REDIS, una competencia muy interesante en la que participaron bastantes equipos de diferentes Universidades.

Este tipo de eventos son de gran importante puesto que fomentan el gusto por el aprendizaje y la competencia de los estudiantes. Anteriormente en Rincon se mencionado una Maratón y algunos de nuestros lectores habían preguntado por los problemas propuestos en dichas competencias, para estudiarlos y medir sus capacidades a la hora de resolverlos. Por distintos motivos aún no tengo una copia digital de esos problemas, pero espero tenerla pronto para publicarlos también; por lo pronto les dejo los problemas de la Maratón de la ACM.

Para quienes aún no conocen la mecánica de estas Maratones; para cada problema se especifica una entrada y una correspondiente salida para esa entrada, los competidores envían los fuentes de sus programas y estos son evaluados por otro programa encargado de compilarlo y probarlo con un de entrada y compararlo con el de salida que corresponda, dependiendo de los resultados se evalúa si esta correcto, incorrecto o si tiene algún tipo de error a la hora de compilar o ejecutarse.

(Problemas-2011) – Acá

En la página oficial se puede encontrar tanto los problemas como los archivo de entrada – salida y también la solución – Acá

Etiquetas: , ,

[Desarrollo web] – Aplicaciones tipo Web Desktop

Posted by jhonber On diciembre - 22 - 2010

Hace poco tuve la necesidad de desarrollar una aplicación web, la cual debía ser tipo Web Desktop. Así que comencé buscando posibles opciones de que sirvieran como base para el proyecto. Debo decir que encontré bastantes y muy buenas opciones entre las que destaco las siguientes:

Lucid: Lucid is a free, open source web desktop, or webOS that lets you:

- Access your media, office documents, and other files anywhere

- Stay up to date with Twitter, RSS feeds, and what’s happening on the web

- Create great web applications in ridiculously short amounts of time

Página del proyecto | www.lucid-desktop.org

Características | www.lucid-desktop.org/overview

Demo | www.lucid-desktop.org/demo

EyeOS: EyeOS is a disruptive desktop entirely usable a web browser. It includes an office suite and some collaboration aplications, as well as a full framework to develop new web apps as if they were desktop apps. It’s Free and Open Source -so you can host your own system, keeping all your data under your control.

Página del proyecto | www.eyeos.org

Demo 1.x | classic.my.eyeos.org

Demo 2.x | new.my.eyeos.org

JDesktop: jDesktop is a framework for making desktop-like environment in a web browser with very cool effects and animations on windows.
You can resize, minimize, maximize, drag windows and change windows themes.

Página del proyecto | fractalbrain.net

Generación de código (Construir ventanas) | windowbuilder.fractalbrain.net

No voy a hablar de todos estos frameworks ya que a parte que nos los conozco lo suficiente, sería demasiado extenso. Así que les voy a hablar de JDesktop, si lo comparamos con los otros dos frameworks este quedaría rezagado en muchos aspectos, como administración de usuarios, soporte para diferentes tipos de archivos, en fin; pero las ventajas que ofrece son muy buenas, algunas de ellas:

- Es una aplicación pequeña y fácil de usar.

- Provee algunos métodos muy útiles.

- Facilidad para integrar con otras apps.

- Utiliza todo el poder de JQuery.

Auque su documentación no es muy completa en windowbuilder nos enseñan el código necesario para crear ventanas, también en el código de la app se encuentra un llamado documentation.html . Y como dice un amigo “No hay mejor documentación que el código mismo” por lo que no se debería ver como una desventaja.

Como menciono arriba JDesktop hace uso de JQuery para lograr efectos y funcionalidades que vale la pena destacar. Para ver algunos de los aspectos más interesantes de este framework, he editado este video:

Por último advertir que dicho Framework esta aún en etapa de desarrollo de muchas de sus funcionalidades, y que tal vez esta no sea una buena opción para proyectos muy complejos.

Etiquetas: , , , , , , ,

Colección de Libros sobre Bash

Posted by jhonber On noviembre - 12 - 2010

Me ha llegado vía correo electrónico y Gracias a Tips-Linux.NET un conjunto de libros sobre Scripting, y quise compartirlos con ustedes. Los libros son:



- Pro Programming

bash

- Expert Shell Scripting
shell

- Beginning the Linux Command Line
shell

- Bash Pocket Reference
bash

- Linux Command Line and Shell Scripting Bible
shell

Descargar: link (21M)

También aprovecho para recomendarles un excelente libro de shell Scripting por supuesto, escrito por Julio Neves. El libro original está en portugués, pero también fue traducido a español e inglés. Vale resaltar que este libro a parte de ser muy bueno, también fue escrito para no hacer dormir al lector, esto gracias al buen humor del autor.

La pagina del proyecto Acá.

Referencias:

http://tips-linux.net/

http://wiki.softwarelivre.org

Etiquetas: , , , , , , , , , ,

Aplicaciones vulnerables a ataques XSS en Facebook

Posted by jhonber On julio - 26 - 2010

Por estos días aprovechando el tiempo libre, he estado investigando sobre los ataques  (Cross-site scripting) XSS en algunas sobre Facebook. En el blog Desvaríos informáticos en un post publicado hace más de un año hacen una demostración de como incrustar código javascript en una aplicación vulnerable, en el ejemplo al hacer click en un link se abre un alert donde nos muestra las cookies de la página, completamente inofensivo, pero que nos hace pensar en muchas cosas que se pueden hacer con esa información. Aquí esta dicho post  http://rooibo.wordpress.com/2009/04/28/agujero-de-seguridad-en-facebook/.

Con base en el ejemplo de Desvaríos informáticos he preparado una donde al hacer click en un link se cerrará la sesión del Facebook de la victima.

Hace menos de cuatro días la forma de cerrar nuestra sesión era haciendo click en un botón Salir con una Url mas o menos así:

http://www.facebook.com/logout.php?h=21ed5705a23da92010c2a3scebs3d&t=27955277&ref=mb

Es decir enviándole los parámetros h, t y ref a la página logout.php de esta forma se “garantizaría” que el al cual pertenece la cookie h fue quien presionó el link de Salida, además evitando por ejemplo: si se redirecciona la victima al http://www.facebook.com/logout.php no cerraría la sesión  del usuario ya que no tiene parametros validos.

Entonces para lograr nuestro propósito que es cerrar la sesión de la victima tendríamos que atravesar el Dom de la página coger ese link y redireccionar a ese link nuestra victima; hice varias bromas así :) pero luego me di cuenta que habían cambiado la forma de cerrar sesión :S ya no se utilizaba un link sino un formulario que al enviarse le pasa los parámetros de validación al script logout.php claro ya no con el método GET sino con POST. El form es algo como esto:

<form id=”logout_form” method=”post” action=”/logout.php”><input type=”hidden” autocomplete=”off” name=”post_form_id” value=”be875b2cfe5803f1bfc2bafed8c719ee”></input><input type=”hidden” name=”fb_dtsg” value=”CQKDv” autocomplete=”off”></input><input type=”hidden” autocomplete=”off” name=”ref” value=”mb”></input><input type=”hidden” autocomplete=”off” name=”h” value=”0779d7c779f7c29bd254ea9a61d2cd52″></input><label><input type=”submit” value=”Salir”></input></label></form>

Las variables que se le pasan al script son las que están en negrita.

Entonces para cerrar sesión solo hay que darle enviar al formulario y cómo hago eso?

document.getElementById(‘logout_form’).submit()

como vemos ubicamos el Elemento form através de su Id “logout_form” y simplemente le aplicamos el método submit() que equivale a dar click en el botón Salir.

Esta es la url completa donde creamos un link “Responder Quíz” y lo ubicamos en cierta parte de la aplicación cargada, cuando la victima de click en dicho link se ejecuta la línea de código anterior haciendo un logout :D

http://apps.facebook.com/qeres-buen-pol-ceijh/?target=list&send_id=1517598431&x=24897%22%20href=%22%20javascript:document.getElementById(‘logout_form’).submit();%22%3E%3Ch1%20style=%22margin:%2050px%2050px%2050px%2050px;color:blue;position:absolute;left:200px;%22%3E%20Responder%20Qu%C3%ADz%20%3C/h1%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%22

Para que no sea tan sospechoso semejante link, como ya había mencionado nuestro amigo @Epsilon en una publicación Aquí , podemos aprovechar los acortadores de Url’s; esto ya es menos sospechoso:

http://tinyurl.com/26hnrzl

Si usamos un poco nuestra imaginación nos daremos cuenta que hay muchísimas formas de aprovechar esta .

Bueno ya con esto creo que es suficiente y espero que se haya entendido, ya que más importante que aprender a usar algo es comprender como funciona y crear nuevas cosas a partir de ese conocimiento.

Hasta la próxima!

Etiquetas: , , , , , , , , , ,

Siguiendo con las entradas relacionadas con el gran lenguaje llamado PYTHON , hoy quiero mostrar como con un sencillo y corto de PYTHON podemos  un desde cualquier servidor FTP al cual tengamos acceso.  A continuacion un ejemplo.

#!/usr/bin/python
from ftplib import FTP
ftp = FTP(‘ip_servidor”);
ftp.login(user=’usuario, passwd=’password’)
ftp.cwd(“carpeta_donde_esta_el_archivo”);
ftp.retrbinary(‘RETR archivo.txt’,open(‘archiv.txt’,'wb’).write)
ftp.quit()

Como pueden ver es bastante sencillo, peor muy util cuando necesitamos descargar algun tipo de archivo o informacion, en el momento en que trabajamos con Python

Etiquetas: , , , , , , , , , , , , , , , ,

Como subir un archivo a un servidor FTP desde Python

Posted by Epsilon On mayo - 28 - 2010

Hace poco necesitaba desarrollar un en que me permitiera subir un archivo a  un FTP desde . Navegando por la red me encontre con un este enlace, el cual nos muestra un ejemplo de como  subir  un archivo a  un servidor FTP desde python,  haciendo uso de la liberia FTPLIB. A continuacion cito el  ejemplo:

#!/usr/bin/env python

import ftplib
import os

# Datos FTP
ftp_servidor = 'ftp.servidor.com'
ftp_  = 'miusuario'
ftp_clave    = 'miclave'
ftp_raiz     = '/public_html' # donde queremos subir el fichero

# Datos del fichero a subir
fichero_origen = '/home/gorka/mifichero.zip'
fichero_destino = 'mifichero.zip' 

# Conectamos con el servidor
try:
	s = ftplib.FTP(ftp_servidor, ftp_, ftp_clave)
	try:
		f = open(fichero_origen, 'rb')
		s.cwd(ftp_raiz)
		s.storbinary('STOR ' + fichero_destino, f)
		f.close()
		s.quit()
	except:
		print "No se ha podido encontrar el fichero " + fichero_origen
except:
	print "No se ha podido conectar al servidor " + ftp_servidor

Como ven es algo bastante sencillo de realizar,  solo basta con realizar la conexion y  de subir el archivo a un servidor FTP en el cual tengamos acceso. Espero lo hayan comprendido y les sea util.

Etiquetas: , , , , , , , , , , , , , ,

He querido compartir con ustedes este videotutorial que he creado, para mostrar una magnifica herramienta de CakePhp que se usa desde consola llamada Bake, y que nos facilita enormemente el desarrollo de nuestras aplicaciones con este framework.

En este videotutorial desarrollaremos una aplicación web, de forma muy rápida y lo mejor; y que aún me sorprende sin escribir ni una sola línea de código ;) . Bueno esto debido a que CakePhp se ha creado con los principios de Ruby On Rails.

Anteriormete había dedicado una entrada a la instalación de CakePhp acá.

Que necesitamos?

- Servidor web (Apache)

- 5

- php5-cli

Para seguir este videotutorial es necesario tener algunos conceptos claros:

- Patrón de diseño MVC (Modelo – Vista – Controlador)

- Conceptos básicos sobre bases de datos

- Algunos comandos de

Formato .ogg – Tamaño (109.84 MB) – Descargar

Saludos! Hasta la próxima.

Etiquetas: , , , , , , , , , ,

Programa Cliente-Servidor en Python

Posted by Epsilon On abril - 14 - 2010

Navegando por la web me encuentro con este enlace, el cual contiene la informacion que estaba buscando  y quiero compartirla hoy con ustedes. Se trata de un programa  -Servidor desarrollado en Python. Para aquellas personas que no saben que es un programa -servidor:

Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el servidor) que le da respuesta. Aunque esta idea se puede aplicar a programas que se ejecutan sobre una sola computadora es más ventajosa en un sistema operativo multiusuario distribuido a través de una red de computadoras.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo programa. Los tipos específicos de servidores incluyen los servidores web, los servidores de archivo, los servidores del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la arquitectura básica seguirá siendo la misma.

Esta arquitectura la usamos todos los dias, por ejemplo, cuando navegamos  accedemos al servidor web desde nuestro cliente el cual es el navegador, independientemente de cual sea.

Ahora, desarrollar un programa de este tipo en Python es demasiado sencillo,  en esta ocasion mostrare el codigo del cliente.py   y servidor.py y cualquier persona con conocimientos basicos en no tendra problemas en entenderlo y modificarlo a su gusto:

servidor.py

#+----------------------------------+
#| Server  TCP/IP                    |
#+----------------------------------+
 import socket
#Creo el  objeto socket
 s = socket.socket()

#Invoco  al metodo bind, pasando como parametro
#una tupla con IP y puerto
 s.bind(("localhost",  9999))

#Invoco  el metodo listen para escuchar 
#con el numero maximo de   como parametro
 s.listen(1)

#El  metodo accept bloquea la ejecucion a la espera de 
#accept  devuelve un objeto socket y una tupla Ip y puerto
 sc, addr = s.accept()
 print "Recibo  de " + str(addr[0]) + ":" + str(addr[1])

while  True:

#invoco  recv sobre el socket cliente, para recibir
#un maximo (segun parametro)  de 1024 bytes
 recibido = sc.recv(1024)
 if  recibido == "by":
 break
 print  "Recibido:", recibido

#Envio  la respuesta al socket cliente
 sc.send(recibido)

print  "adios"

#cierro  sockets cliente y servidor
 sc.close()
 s.close()

Cliente.py

#+----------------------------------+ #| Client TCP/IP                    | #+----------------------------------+ import socket s = socket.socket() #invoco el metodo connect del socket pasando como parametro la tupla IP , puerto s.connect(("localhost", 9999)) while True: mensaje = raw_input("Mensaje a enviar: ") #invoco el metodo send pasando como parametro el string ingresado por el usuario s.send(mensaje) if mensaje == "by": break print "adios" #cierro socket s.close()

Como pueden ver es algo muy sencillo de realizar y comprender, solo falta cambiar la direccion IP en el cliente, por la IP donde estara el programa servidor a la escucha.  Todo lo que se desee que realice el programa servidor cuando reciba el mensaje by tendra que ir dentro del if.

Espero que lo hayan entendido, a mi me servio mucho este ejemplo, y por eso quiero agradecer publicamente al autor de esta entrada por compartir  buenos conocimientos. Recuerden la identacion ya que es fundamental en Python.

Etiquetas: , , , , , , , , , , , , , , , ,

Como ejecutar comandos del sistema desde Python

Posted by Epsilon On abril - 9 - 2010

Hay ocasiones en las cuales necesitamos hacer uso de los comandos de nuestra amada  y querida shell desde algún que estemos desarrollando en , gracias a la facilidad de la serpiente (una de sus grandes características) podemos hacer esto de forma muy sencilla.  A continuación un ejemplo:

Creamos un llamado prueba.py con el siguiente contenido:

#!/usr/bin/python
import os

os.system(“uname -a”)

Importamos el modulo OS y hacemos uso de la funcion system, la cual nos permite ejecutar un comando de la consola. sobra decir que en el ejemplo basta reemplazar el comando “uname -a” por el  que nosotros deseemos. Ahora ejecutamos el archivo *.py   de esta forma:

python prueba.py

y el resultado sera:

Como pueden ver es verdaderamente fácil ejecutar comandos del operativo en lenguaje python, esto es importante ya que podemos ejecutar cualquier comando e incluso llamar a un script en o lo que se nos ocurra. Antes de terminar quiero aclarar que no soy muy experto en el tema, muy seguramente habrá formas mas sencillas, correctas y potentes para realizar este tipo de cosas, espero que les haya parecido interesante y no duden en comentar.

Etiquetas: , , , , , , , , , , , , , , , ,

Quiero compartir con ustedes estos libros que seguramente a quienes les interesa el Desarrollo sobre la web, les será de gran utilidad.

Podemos acceder a dichos libros Online o también los podemos descargar en formato pdf. El material está bajo la Creative Commons. (Idioma Español)

Pagina principal: www.librosweb.es

directa:
- Introducción a AJAX -> acá

- Introducción a JavaScript -> acá

- Introducción a CSS -> acá

- CSS avanzado -> acá

- Introducción a XHTML -> acá

Symfony, la guía definitiva:

- Symfony 1.0, la guía definitiva -> acá

- Symfony 1.1, la guía definitiva -> acá

- Symfony 1.2, la guía definitiva -> acá

- El tutorial Jobeet de symfony 1.2 -> acá

- El tutorial Jobeet de symfony 1.3 -> acá

Bueno espero que les sea de gran ayuda a todos, nunca esta demás tener un libro a la mano cuando estemos en problemas :D . Hasta la próxima!!

Etiquetas: , , , , , , , , , , , , , ,

[Desarrollo Web] Videotutoriales Php y Mysql

Posted by jhonber On marzo - 8 - 2010

Hace un tiempo tenía planeado hacer un curso de Php, para todos los lectores de RINCON INFORMATICO, pero por cuestiones de disponibilidad de tiempo, no lo pude llevar a cabo; A demás en la web hay Tutoriales muy buenos y en esta oportunidad les voy a recomendar una serie de video tutoriales sobre Php y , los cuales me han sido de gran ayuda.

El sitio es un verdadero Centro De Enseñanza Virtual www.illasaron.com Aprovecho para darle las gracias la Maestro Jesus Conde, por tan buena labor -> http://twitter.com/0utKast.

Hay una gran cantidad de video tutoriales como:

Desarrollo web

- PHP-MYSQL

- ACTIONSCRIPT

- Curso PHP-Nuke completo

- CURSO COMPLETO XHTML

- CURSO DE AJAX

- CURSO CSS

- Curso Completo Drupal Fundamentales

- Curso Completo de JQuery

- Curso de Joomla por Roosvelt

También hay otros recursos como:

VTs. MUNDO LINUX, VTs. OPENOFFICE, CURSO DE JAVA, Curso C++, UBUNTU ES PARA TODOS, UBUNTU , etc.

En fin no podría mencionarlos a todos, pero son muchísimos y cada cual buscará los video tutoriales de su interés.

Cómo acceder a los video tutoriales?

- Se requiere crear una cuenta de usuario aquí

- Una vez registrados vamos al menú donde dice “Descarga Videos”

- Acá aparece otro menú “Categorías”  con las siguientes opciones:

01.- VIDEOTUTORIALES
Pulsa para acceder a una lista de todos los videotutoriales que se encuentran actualmente para descarga directa en la web.
02.-FREEWARE
Pulsa para una lista de programas, utilidades y recursos gratuitos y de calidad en descarga directa en la Web.
03.-RECURSOS WEB
Pulsa para una lista completa de los distintos recursos web que se encuentran en descarga directa en la Web.
04.-CURSOS COMPLETOS
Pulsa para acceder a una lista de todos los cursos completos que se encuentran en descarga directa en la web.
El curso de PHP y Mysql se encuentra en “04.-CURSOS COMPLETOS”.
Espero que aprovechen mucho este excelente sitio, para avanzar en sus estudios. Hasta la próxima!!
Etiquetas: , , , , , , ,