#90: Es cierto que la tabulación debería de estar estandarizada, pero el argumento de la eficiencia me parece absurdo hoy en día. No tengo mucha experiencia compilando programas grandes, eso sí (lo único el kernel, y me llevó muy poco tiempo).
Seóres tengo un problema, en el segundo ejercicio use C++ para que me quitase las notas mas bajas de los 'homeworks', pero a la hora de extraerlo me extrae solo 599 en vez de 600. No sé que es lo que pasa los datos están bien ... alguna idea. adjunto foto
#90 Pues que quieres que te diga, el hecho de indentar con espacios me parece una auténtica basura.
Espero no trabajar nunca en el mismo codebase contigo.
Subir código con tabs a mi repositorio -> golpe de remo
Y vamos, no al mío, al de todo el mundo. Busca por internet: los espacios son estándar. NADIE usa el TAB para insertar tabs de verdad porque el TAB no es estándar. Cuando te toca alinear cosas a espacios no-múltiplos de TAB y lo abres en otro editor y ves el despropósito... pues empiezas a odiar las tabulaciones.
Todo el mundo tiene configurado el IDE para insertar espacios al pulsar TAB.
2º: Cuando necesites utilizar el código de otra persona en tu programa, u otra persona el tuyo, es necesario un reformateo previo, o sino el programa no funcionará.
Ehm... esto es al revés: con TABs usar el código de otra persona es puro odio. Me he tirado varios días reformateando archivos en mi curro para eliminar TABs por la gracia de que uno de los desarrolladores lo tenía a 4 espacios y el otro a 8. Imagínate las risas.
3º: Es muy propenso a errores, un simple espacio en blanco de más o de menos puede provocar que el programa no funcione, o que funcione inesperadamente.
Para mí esto es una ventaja: si indentas mal, golpe de remo. Cuantas veces habré visto código que PARECÍA funcionar bien hasta que, ejecutándolo en un debugger, me he dado cuenta de que los bloques no estaban donde parecía que estaban.
4º: No hay un standard oficial sobre cómo sangrar el código, sólo tabulaciones o sólo X número de espacios por bloque, e impuesto por el propio compilador.
No hay un estándar oficial pero todo el mundo usa PEP8, que es oficial. Woopsie!!
Esto, como todo, cuestión de gustos... ¡pero los míos son mejores! xDDDDD
#85 lambda está roto porque al idiota del van Rossum no le gusta la programación funcional, como si con generadores/comprehensions se tuviera la misma expresividad (y no fueran tres veces más feos...)
Fíjate que querían quitar map, filter, etc. para Python3... Para empezar eso de tener una expresión específica para la funciones anónimas es de locura. ¿Por qué no usar def directamente?
Con un poco de decencia y paréntesis, lambda podría funcionar.
O a lo mejor se me escapa algo xD ¿Qué querías decir?
En el hw 2.3 de developers me salta error 500 en todas las paginas diciendo que no hay tpl en la carpeta views. ¿Alguna idea?
Edit: solucionado, me tiraba el error al ejecutar el archivo con el path. Metiendo el "python blog.py" desde el directorio donde lo tenia ya me va.
Espero no trabajar nunca en el mismo codebase contigo.
Subir código con tabs a mi repositorio -> golpe de remo
Y vamos, no al mío, al de todo el mundo. Busca por internet: los espacios son estándar. NADIE usa el TAB para insertar tabs de verdad porque el TAB no es estándar. Cuando te toca alinear cosas a espacios no-múltiplos de TAB y lo abres en otro editor y ves el despropósito... pues empiezas a odiar las tabulaciones.
Todo el mundo tiene configurado el IDE para insertar espacios al pulsar TAB.
¿Todo el mundo? Eres el primero que conozco con esa práctica.
Si metes código a un repositorio con Tabs para el sangrado no hay ningún problema, así que no entiendo lo que dices.
con TABs usar el código de otra persona es puro odio. Me he tirado varios días reformateando archivos en mi curro para eliminar TABs por la gracia de que uno de los desarrolladores lo tenía a 4 espacios y el otro a 8. Imagínate las risas.
Vamos a ver compañero, si metes un tab, te inserta un tab, a no ser que lo tengas configurado para que te meta espacios, así que no hay ningún problema si todo el código esta sangrado en Tabs. El problema viene en tu caso, cuando tienes el Tab configurado con X espacios, y viene un tio que lo tiene configurado con más o menos espacios y te jode el código.
Para mí esto es una ventaja: si indentas mal, golpe de remo. Cuantas veces habré visto código que PARECÍA funcionar bien hasta que, ejecutándolo en un debugger, me he dado cuenta de que los bloques no estaban donde parecía que estaban.
Que sea más propenso a errores para tí es una ventaja, ok. No tengo más que decir.
No hay un estándar oficial pero todo el mundo usa PEP8, que es oficial. Woopsie!!
Es la primera vez que programo en Python, pero todos los ejemplos que encuentro por internet están sangrados de forma diferente, así que me parece a mí que nadie usa lo mismo.
Cuando digo que debería usarse un estándar, hablo de que el compilador debería obligarnos a usar X espacios para la separación de cada bloque, y no permitir que la gente use los que les de la gana. Así todo el mundo usaría la misma convención y no habría problemas.
Me acaba de llegar este correo:
Greetings from M101,
As much as we have tried to keep the class on schedule, Hurricane Sandy has had its impact. The 10gen office in Lower Manhattan was without power all last week and my own house in central New Jersey is still without power, without any definite date for restoration.
We have also received many notes from students in the Northeastern region of US who have been impacted by the storm.
The third week of material will be delayed relative to our original goal of providing new material each Monday. Our goal is to delay the course as little as possible. We will send another note on Monday when we have better visibility into when we can resume. We had also planned to run office hours this past Thursday and will reschedule those office hours for early next week.
The good news is that the 10gen office in Lower Manhattan now has power so we expect next week we will return to normal.
I hope you are enjoying taking the class as much as we are enjoying making it available. It is our first time offering an online class. There are over 19,000 students in M101. We know there have been some hiccups in getting started but believe we have now gotten past most of that. Thank again for your interest in MongoDB and 10gen Education.
Sincerely,
Andrew Erlichson
Twitter: @erlichson
aerlichson in our 10gen education forums.
#96 espacios vs tabs es una discusion eterna. Depende donde trabajes tendran unas practicas u otras. No me atreveria a decir que el espacio es un estandar, pero yo siempre he tenido que usar espacios y todos mis compañeros de trabajo pues igual. Si alguna vez he metido un tab me ha caido una regañina.
#97 A mi también me ha llegado.
Los ejercicios se entregan con fecha límite el 8 de Noviembre ¿What? "due 2012-11-08T03:00"
Creí que se entregaba como muy tarde el domingo 4.
#90 El tema de espacios no es una basura. No te pienses que tienes que identar con la barra espaciadora. Simplemente dile a tu editor que te convierta la tabulación por 2 espacios (4, 8, los que sean) y ya esta.
Esto lo puedes configurar facil en gedit, notepad++ y supongo que cualquier editor mas o menos decente.
A ver si alguien que haya hecho el Homework 2.2 me puede orientar, estoy intentando acceder al valor siguiente del cursor para comparar, pero no se como se hace, estoy perdidísimo vaya...
esta es la putamierda que tengo hecha en pymongo, obviamente no funciona, no se si voy bien o es una basura
import pymongo
import sys
# Stablish connect to DB
connection = pymongo.Connection("mongodb://localhost", safe=True)
# Select DB
db=connection.students
grades = db.grades
fields = {'student_id':1,'score':1,'_id':0}
cursor = grades.find({},fields).sort([("student_id",pymongo.ASCENDING),("score",pymongo.DESCENDING)])
""" i=0
for doc in cursor:
next=cursor.next()
if(doc['student_id']!=next['student_id']):
print "change!"
i+=1
print str(doc['student_id']) + ":" + str(doc['score'])
print "Total:" + str(i)
"""
Sí, lo sé, pero que pasa si tú tienes puestos 2 espacios, otro tiene 3, u otro 4.
Sin embargo si usas Tab, 1 Tab = 1 nivel, 2 Tab = 2 niveles, etc. Sólo utilizas 1 caracter para marcar el nivel y no varios como con los espacios.
Además cada usuario puede configurar la distancia del Tab a su gusto en el IDE. Aún no entiendo cómo puede haber gente utilizando espacios para sangrar el código. Necesito escuchar alguna razón lógica.
Esto me recuerda a la gente que usa el intro en el Word para separar secciones, una guarrada vamos.
#104: Hay editores que te auto-detectan los espacios que se utilizan por tabulación. Además en las organizaciones siempre hay (hablo de SL que es el que conozco) unas convenciones de código.
#102 Te estas liando.
Para empezar, debes filtrar por los que tengan type:"homework".
En el bucle estas metiendo "for doc in cursor" donde "doc" es una fila por así decirlo, y va a recorrer una cada vez que empiece el bucle sin necesidad de meter el next(). También, en el ejercicio dice que borres el registro mas bajo de cada estudiante, ahí no hay ninguna operación de borrar, no se si pretendías probar primero como salia.
#108 Supongo que no, lo único que tendrás menos nota de deberes al no haber entregado los de la primera semana.
Como dice #106 lo primero es filtrar por "homework"
Me imagino que quieres utilizar cursor.next() para acceder al siguiente score y comparar para eliminar el más bajo, pero no puedes hacer eso ya que ya estás recorriendo el cursor con el bucle, y si utilizas el next() avanzas el cursor otra posición.
Utiliza una variable idScoreMin, para almacenar la id del doc con score más bajo de un mismo estudiante que te haya llegado, y en el momento que cambies de id_estudiante elimina el doc con ese id de doc.
Yep gente, acabo de ver el curso este, sabéis si hay algún problema si me apunto con el curso empezado?
#108 simplemente perderas la primera semana de homework. Eso si te das prisa y entregas la segunda. Llegaras al final exam con algo menos de %.
import pymongo
import datetime
import sys
def hw2_2():
connection = pymongo.Connection("mongodb://localhost", safe=True)
db=connection.students
grades = db.grades
query = {'type':'homework'}
try:
id_previo = -1
cursor = grades.find(query)
cursor = cursor.sort([('student_id',pymongo.ASCENDING),('score',pymongo.ASCENDING)])
for doc in cursor:
id = doc['student_id']
pk = doc['_id']
if id != id_previo:
grades.remove({'_id':pk})
print "omg! me he cepillado el documento: " + str(pk)
id_previo = doc['student_id']
except:
print "Unexpected error:", sys_exc_info()[0]
raise
hw2_2();
#112 he utilizado el mismo algoritmo que sugieren (de hecho es el que hubiera utilizado aunque no lo hubieran sugerido). Si ordenas por student_id y por score de forma ascendente, cuando cambia el estudiante en la iteración, te aseguras que ese nuevo registro es el de nota más baja.
Con ir guardando student_id en una variable al final de la iteración y luego contrastarla en la nueva iteración, puedes hacer esa comparación de "cambio de estudiante".
#111 siempre me flipa lo "straightforward" es PyMongo. No sabéis las pajas que hay que hacer desde Node para hacer una puta consulta (por aquello del comportamiento non-blocking a base de callbacks.)
Primero haces una petición de la colección, con su callback.
Dentro del callback de la colección compruebas si se ha encontrado y tal, y ya haces la petición sobre la colección, con otro callback.
Dentro de este callback vuelves a comprobar si ha fallado o no, y ya haces lo que sea.
Imagináos operar sobre varias colecciones...
INCEPTION
#114 ese concepto "inception" que comentas me vino a mí a la cabeza cuando me metí con Android y sus adaptadores unos dentro de otro. Llega un momento en que no sabes dónde narices tienes el código. La programación es fácil, pero el esfuerzo mental para tener una visión completa del funcionamiento es tremenda xD
#115: Es muy fácil caer en una distribución asquerosa de código con Android. Yo estoy con un proyecto relativamente pequeño y dentro de poco tengo que refactorizar o me vomitaré por encima.
#117: Empecé con fragments hace poco y no me acaba de gustar. Claro que eso, acabo de empezar. En la app con la que estoy los tuve que usar con la biblioteca Sherlock Actionbar esta y pfrpfrpf.
#116 Pues si te metes con fragmentos ya ni te digo. Y eso que están justamente para tener la lógica en cada sitio y poder ser reutilizada. Pero llega un momento en el que los parámetros principales que tienes que pasar entre activities vuelan de bundle en bundle con un desorden que no es normal xddddddd
Acabas pasando el contexto por n adaptadores a lo loco...
#116, yo en el proyecto que ya he terminado (aunque le puedo seguir metiendo cosas), también he usado la Sherlock. Lo último que hice fue con fragmentos para probarlos, y tampoco me terminan de convencer si tiene mucha relación con el resto de la activity que la llama.
Si no has tenido oportunidad de ver el ViewPager, te recomiendo que le eches un vistazo. Entonces ya maldecirás a todo lo habido y por haber xD. En mi activity principal mezclo ViewPager con ActionBarSherlock y un ListView con varios tipos de Filas distintas... pa cagarse xD
Lo que más me mola son los listview personalizados. Eso de maquetarte el xml bien currado y luego hacer un adaptador con el patrón ViewHolder, pues oye, como que te sientes Dios xdd
Ya están los vídeos de la 3ª semana.
Diseño!
#119 Hoy es el ultimo día, creo que tienes hasta las 4 o 5 de la mañana.