Debido al rediseño de megaupload mget ha dejado de funcionar, el problema se debe específicamente a que el link de descarga ya no se identifica con el id downloadlink sino con la clase download_regular_usual, ademas el tiempo de espera ahora es de 60 segundos.
Por el momento no tengo como arreglar la versión para windows pero la de linux ya esta lista, solo hay que reemplazar el archivo antiguo y dar permisos de ejecución.
viernes, 9 de diciembre de 2011
Actualización mget
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
7:30
0 comments
Etiquetas:
descargas,
megaupload,
mget,
programa,
script,
software libre
sábado, 26 de noviembre de 2011
Creando un blog con django - parte 2
Llego el momento de crear los modelos, pero antes analicemos los datos que necesitamos guardar. Nuestro blog tendrá post, comentarios y tags, los que a su vez se componen de:
- Post: fecha, titulo, contenido y etiquetas.
- Etiqueta: nombre.
- Comentario: autor, fecha, contenido.
Teniendo claro el modelo de la base de datos, es hora de escribir el código necesario para crear las tablas, afortunadamente django nos facilita la tarea. Editamos el archivo models.py ubicado en la carpeta de la aplicación:
# 1
from django.db import models
# 2
class Tag(models.Model):
# 3
tag = models.CharField(max_length=100, unique=True, db_index=True)
# 4
def __unicode__(self):
return self.tag
Veamos que hicimos:- Importamos el modulo models.
- Creamos una subclase de models.Model,
- Cada columna de la bd es representada por un atributo, en este caso
tag es de tipo caracter (CharField), existen otros tipos de campo según el valor almacenar. Los argumentos describen las propiedades del campo como la cantidad de caracteres que puede contener (max_length), que no se permiten valores repetidos (unique), ademas de hacer que se indexe (db_index) ya que es comun hacer búsquedas como: buscar todos los post con tag django. el método __unicode__ permite dar un nombre mas significativo a las instancias, este es utilizarlo en el sitio administrativo.
# post
class Post(models.Model):
# la relación many to many entre Post y Tag
tags = models.ManyToManyField(Tag, blank=True)
title = models.CharField(max_length=200)
body = models.TextField()
# fecha de publicación, se agrega fecha automáticamente
pub_date = models.DateField(auto_now_add=True)
def __unicode__(self):
return self.title
class Comment(models.Model):
# Cada comentario pertenece a un post
post = models.ForeignKey(Post)
# nombre es opcional (blank) y por defecto es Anonimus (default)
name = models.CharField(max_length=100, blank=True, default="Anonimus")
# el cuerpo del comentario
body = models.TextField(verbose_name="comment")
# fecha de publicación, se agrega fecha automáticamente
date = models.DateField(auto_now_add=True)
def __unicode__(self):
return "Por " + self.name + " en " + self.post.title
La clave foránea y relación many to many se crea en una simple linea de código. Ahora sincronizamos nuevamente y entramos al interprete de python para introducir información en la base de datos:$ python manage.py syncdb $ python manage.py shell
# importamos los modelos from blog.models import Tag, Post # aun no hay tags así que creamos una django = Tag(tag="django") django.save() # creamos un post new_post = Post(title="mi primer post", body="El primer post que realizo") new_post.save() # agregamos un tag y volvemos a guardar new_post.tags.add(django) new_post.save()Como vemos, para introducir un registro en la base de datos creamos una instancia de la clase adecuada y seguidamente llamamos el método save, ¿pero como recuperamos un registro? existen tres métodos para consultar la base de datos:
- get: retorna un solo registro, lanza una excepción si la consulta retorna cero o mas de un registro.
- filter: retorna un array con los registros que coinciden la consulta o un array vacío.
- exclude: similar a filter pero retorna los registros que no cumplen con la consulta.
Estos métodos se acceden a través del atributo objects que poseen las subclases de models.Model.
# recuperar todos los post Post.objects.filter() # recuperar los primeros 10 Post.objects.filter()[:10]Para refinar la búsqueda usamos argumentos que corresponden con los campos de la tabla:
# post segun titulo Post.objects.filter(title="mi primer post")Los campos que son claves foraneas (Post.tags, Comment.post) son algo especial: podemos seguir la relación escribiendo el nombre de la columna seguido de dos guiones bajos (_), pudiendo acceder el modelo al que apunta dicha relación. veamos un ejemplo:
# post con tag django Post.objects.filter(tags__tag="django")Al usar tags__ ya no estamos mas en Post sino en Tag, ahora podemos consultar los campos de esta tabla (tag). otro ejemplo:
# comentarios de posts con tag django Comment.objects.filter(post__tags__tag="django")Seguimos la relación a Post (post__) y consultamos la columna tags__ lo que nos lleva a Tag donde finalmente consultamos el atributo tag o_O.
Con esto tenemos lista la base de datos, en la próxima parte veremos como crear plantillas para visualizar estos datos.
Muchas gracias por su atención, no olviden dejar sus sugerencias, inquietudes y amenazas en los comentarios, hasta la próxima.
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
16:15
0 comments
Etiquetas:
aplicación web,
base de datos,
blog,
django,
models,
programación,
tutorial
viernes, 25 de noviembre de 2011
Extrae imágenes de archivos PowerPoint
Versión corta: pues que escribí una aplicación para extraer imágenes de archivos PowerPoint y la pueden descargar de aquí.
Versión larga:
Nuca he entendido esa manía de algunas personas de estar enviando PowerPoints a diestra y siniestra por lo que todo el que llega termina en la papelera sin leerlo XD.
Un conocido al que si le encantan me pidió un programa para extraerles las imágenes. Encontré dos pero ninguno funciono, así que escribí un script en python que pueden encontrar en github (advertencia: visualizar el código puede causar sangrado de ojos). Ya estando en ello le cree interfaz gráfica (la primera que hago). Eso sí, es algo.... feeeeaaaa, pero en el proceso puede
Eso es todo. no olviden seguirme en twitter y/o suscribirse al feed del blog.
Actualización: En github pueden encontrar un modulo para dicho fin que funciona tanto en Windows como en Linux.
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
10:47
0 comments
Etiquetas:
extraer,
gratis,
imagen,
powerpoint,
programa,
programación,
python
jueves, 24 de noviembre de 2011
Creando un blog con django - parte 1
![]() |
| the killer framework |
Este tutorial se divide en varias partes:
- instalación y configuración
- creación de modelos
- creación de vistas
- formularios
Instalación y configuración
Procedemos a descargar la ultima versión de django e instalarla como dice la pagina oficial:
$ wget http://www.djangoproject.com/download/1.3.1/tarball/ $ tar xzvf Django-1.3.1.tar.gz $ cd Django-1.3.1 $ sudo python setup.py installAhora haciendo uso del script de administración creamos nuestro proyecto:
$ django-admin startproject tutorialEsto crea el directorio tutorial, con los siguientes archivos:
- manage.py: script para administrar el proyecto (sincronizar bd, crear aplicaciones, iniciar servidor...)
- urls.py: las urls admitidas.
- settings.py: configuración del proyecto (aplicaciones instaladas, directorios de plantillas, bd...)
$ python manage.py startapp blogEste comando crea el directorio blog con varios archivos en su interior, los cuales analizaremos en otra ocasión. Para terminar editamos el archivo settings.py e incluir la configuración de la base de datos y agregamos nuestra aplicación a la lista de aplicaciones instaladas:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'myblog',
# lo demás no es necesario para una bd sqlite
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
...
...
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # Nuestra aplicación
)
Sincronizamos la base de datos para crear las tablas necesarias:$ python manage.py syncdbSe pedirán algunos datos para crear la cuenta de administrador. Luego iniciamos el servidor de desarrollo con:
$ python manage.py runserverY listo, si entramos a la dirección localhost:8000 veremos una flamante pagina web confirmando que django esta correctamente configurado y listo para iniciar a desarrollar nuestra aplicación.
Eso fue todo por ahora, muchas gracias por su atención y no olviden estar pasando para la segunda parte.
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
17:25
5
comentarios
Etiquetas:
aplicación web,
blog,
django,
tutorial
miércoles, 16 de noviembre de 2011
Ejemplo método find de canvas-event
Varias personas han estado buscando como usar el método find de canvas-event, por lo que dejo un ejemplo de su uso mientras termino la documentación.
![]() |
| Interfaz del programa Kmines |
- tipo: Corresponde con el nombre del método usado para crear el objeto (circle, rect, line...).
- id: Un nombre que podemos dar a un objeto con el fin de diferenciarlo de otros del mismo tipo.
Nota Al igual que en css, el símbolo # indica que mina y safe son id.
for (var i = 0; i < 5; i++) {
ce.rect(i*10, 0, 10).setId("mina");
}
for (var i = 0; i < 5; i++) {
ce.rect(i*10; 10; 10).setId("safe");
}
// selector tipo: todos los rectángulos, tanto #mina como #safe
ce.find("rect").attr("fill", "gray");
// selector id: solo rectángulos #mina
ce.find("#mina").click(function(c, e) {
alert("Boom!");
alert("Game Over");
});
// selector id: solo rectángulos #safe
ce.find("#safe").click(function(c, e) {
puntos += 1;
});
Por otro lado el método getAll (solo en repo de github) retorna un array con los objetos que coinciden con el selector:// encontrar y retornar los objetos rect dibujados hasta el momento
var rects = ce.findAll("rect");
// rects ahora es igual a [Rect, Rect, Rect...]
// obtener el primer circulo dibujado
var first_circle = ce.getAll("circle")[0];
Si tienen dudas o sugerencia pueden dejarlas en los comentarios, prometo tenerlas en cuenta.
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
18:44
0 comments
Etiquetas:
Canvas,
canvas-event,
find,
html5,
método
martes, 15 de noviembre de 2011
Lecciones aprendidas
Andando por hacker news (hago muy frecuente), encontré un interesante desafió de instagram, que consiste en crear un programa que tome una imagen cortada en tiras y la "reconstruya". leyendo los comentarios parece que para otros era algo trivial, pero para mi era todo un reto y una oportunidad de poner en practica conceptos aprendidos en alguna lecturas.
Durante el proceso de resolver este problema, aprendí varias cosas:
Estudiar siempre nuevos algoritmos, herramienta, librerías..., no intentando memorizar o convertirse en un "experto". Basta con entender los conceptos aplicados y hacer algunas practicas. lo esencial es tener la capacidad de asociar estos conocimientos con nuevos problemas, ya luego podremos retornar y re-estudiarlos en el momento que los necesitemos.
Nunca compararnos con otros, al compararnos con otra persona pueden ocurrir dos cosas:
Esto nos lleva a otro punto: Asumir retos, si nos quedamos auto contemplando lo bien que hacemos una tarea, no avanzamos, debemos desafiarnos. puede que fracasemos, pero esto no quiere decir que no aprendimos. Siempre aprendemos y lo hacemos mas de los errores que de los triunfos, si fracasamos, creemos una lista con las causas y usémosla como temas a estudiar.
Bueno eso es todo (creo), has tenido una "revelación" como esta. compártela los comentarios.
Durante el proceso de resolver este problema, aprendí varias cosas:
Estudiar siempre nuevos algoritmos, herramienta, librerías..., no intentando memorizar o convertirse en un "experto". Basta con entender los conceptos aplicados y hacer algunas practicas. lo esencial es tener la capacidad de asociar estos conocimientos con nuevos problemas, ya luego podremos retornar y re-estudiarlos en el momento que los necesitemos.
Nunca compararnos con otros, al compararnos con otra persona pueden ocurrir dos cosas:
- Nos frustramos pensando que no podremos llegar a ser tan buenos como EL(LA).
- Dejemos de avanzar al creernos superior a otros y pensar que con lo que sabemos es suficiente, recordemos que somos novatoz.
Esto nos lleva a otro punto: Asumir retos, si nos quedamos auto contemplando lo bien que hacemos una tarea, no avanzamos, debemos desafiarnos. puede que fracasemos, pero esto no quiere decir que no aprendimos. Siempre aprendemos y lo hacemos mas de los errores que de los triunfos, si fracasamos, creemos una lista con las causas y usémosla como temas a estudiar.
Bueno eso es todo (creo), has tenido una "revelación" como esta. compártela los comentarios.
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
9:43
0 comments
Etiquetas:
enseñanza,
pensamientos,
personal,
recordatorio
martes, 1 de noviembre de 2011
ConceptMapp - webapp para crear mapas conceptuales
Después de varios meses de posponerlo, por fin esta disponible mi primera aplicación web: ConceptMapp, una herramienta para la creación de mapas conceptuales completamente gratis.
La idea nació luego de estar experimentando con el elemento canvas, entonces me acorde de Cmaptools, uno de los mejores programas que he utilizado para crear mapas conceptuales, pero que a mi parecer tiene los siguientes inconvenientes:
Si les parece útil, encuentran algún error o tienen sugerencias pueden dejarlas en los comentarios o usando el formulario de contacto.
* Probado en un PC de: 1 GB de RAM con procesador de 1.8 GHz.
La idea nació luego de estar experimentando con el elemento canvas, entonces me acorde de Cmaptools, uno de los mejores programas que he utilizado para crear mapas conceptuales, pero que a mi parecer tiene los siguientes inconvenientes:
- Consume muchos recursos.
- No es muy común: no se puede esperar encontrarlo instalado en otros computadores diferentes al personal, lo que impide realizar cambios cuando mas se necesitan.
Si les parece útil, encuentran algún error o tienen sugerencias pueden dejarlas en los comentarios o usando el formulario de contacto.
* Probado en un PC de: 1 GB de RAM con procesador de 1.8 GHz.
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Publicado por
sney2002
en
17:16
0 comments
Etiquetas:
aplicación web,
Canvas,
django,
free,
gratis,
mapas conceptuales










