Monday, September 4, 2017

He usado un servicio de descargas recientemente https://www.seedr.cc/ es genial. He usado otros sitios de descarga de torrents pero este es mejor porque tienes más espacio gratis y puedes aumentar la catidad que te asignan haciendo "trabajo comunitario". Espero que se lleguen, se creen una cuenta y se bajen par de torrents y que lo compartan con sus amigos.

Saturday, November 2, 2013

De Django (desencadenado?)

En temas de programación webuda (lease de la web) he dejado al viejo django, why? django es basicamente enrutador, motor de plantillas, ORM, formularios y admin pero:
  • El enrutador no es nada del otro mundo, ahí tenemos a werkseug que es tan bueno como django en eso y tiene además un debuger que dice 4 cosas además de una implementación de request responce al menos no peor que la de django (en lo personal mejor).
  • El motor de plantillas de django no está malo (de ahí salió el twig de synphony, cosa con la que le puedes alardear a tus amiguitos phperos) pero es muy lento, jinja2 que también está basado en el motor de django es entre 10 y 20 veces más rápido, tiene una sintaxis similar y es mucho más pythonico y puede ser incluso más rápido si tienes en cuenta que puedes cachear las plantillas, sí como lo oyes la plantilla solo se interpretará la primera vez, luego solo será código python ejecutandose "Ohhh".
  • El ORM de django es una maravilla hasta que tengas que hacer algo raro en la base de datos o tengas que trabajar con una legada, SQLAlchemy es muuucho mejor en ese sentido, y por otro lado es más rápido y hace todo lo que el ORM de Django, salvo depender de django (ver último punto, al final).
  • Los formularios de django, nada que ver con los de wtforms y estos de casualidad se llevan bien con SQLAlchemy aunque tambien se pueden usar con django.
  • De lo que biene con django si hay algo bueno es Admin pero por desgracia cuando las tablas cresen, digamos 50 000 entradas, se vuelve inutilizable (nunca he tenido una así pero eso dicen algunios que sí las han tenido).
  • ÚLTIMO Y MUY IMPORTANTE todos esos elementos tienes que usarlos con Django, son sus brazos y sus piernas, no funcionan tan bien como deberían y para colmo una vez fuera del cuerpo son inutilizables. Por otro lado las bibliotecas que te mencioné son independientes, así que si aparece una mejor y eres suficientemente organizado puedes quitar y poner sin muchos lios. Además está flask un framework que integra Jinja2, Werkseug y soporta wtforms y SQLAlchemy, además tiene plugins para una infinidad de cosas y un API pythonica (no tiene configuración global, lo cual es un error de diseño del viejo Django).
Una aplicación en Flask?
from flask import Flask  app = Flask(__name__)   
@app.route('/')  def hello_world():
      return 'Hello World!'   
if __name__ == '__main__':
      app.run()  
Si haz programado en ruby y haz visto sinatra se te parecerá un poco, no es cuestión de que Armin Ronacher (el tío detrás de Werkseug, Jinja y Flask) sea un ruin copiador, sino que la idea de sinatra es buena y no hay que tenerle miedo a copiar cosas buenas.

Otra forma de declarar funciones en javascript

Este es el primero de una serie de post que escribiré bajo el nombre paste de la semana, con pedazos de código que puende ser útiles, cómicos, curiosos e incluso (raras veces) las tres cosas, espero que los disfruten.

Oficialmente hay tres formas de declarar funciones en javascript:

  1. Creando una función con nombre:
function mi_funcion1(){          alert("esta es una función con nombre");  }  
  1. Creando una función con anónima (tip: esta es la forma aconsejada):
var mi_funcion2 = function (){          alert("esta es una función anónima");  }  
  1. Usando el constructor de las funciones (suele emplearse en los motores de plantillas de javascript [jquery.template, JQuote ...]):
var mi_funcion3 = new Function('{alert("esta es una función'  + ' creada con el constructor de funciones");}')  

Esto de manera oficial, pero hay una cuarta forma de hacerlo (no intenten esto en casa):

var f = 'constructor';  var mi_funcion4 = f[f][f]('{alert( "esta es la forma mágica de'  + 'hacerlo")}')