#🍁・general-2
1 messages · Page 134 of 1
also, si querés quedarte con los carácteres de newline, poné True como un argumento
>>> cadena = "linea1\nlinea2\nlinea3"
>>> cadena.splitlines()
['linea1', 'linea2', 'linea3']
>>> cadena.splitlines(True)
['linea1\n', 'linea2\n', 'linea3']
pero cómo le dirías al verbo por ej. en corrutinas o al switch de Java 13?
o a Thread.yield()
incluyendo \r:
>>> cadena = "linea1\r\nlinea2\r\nlinea3"
>>> cadena.splitlines()
['linea1', 'linea2', 'linea3']
>>> cadena.splitlines(True)
['linea1\r\n', 'linea2\r\n', 'linea3']
yield me parece muy similar a devolver
ah, me encanta join
sí pero medio que eso podría ser retornar también
anyway, dejemos que transcurra la clase
hazlo fácil por ahora
algo iterable
lo siguiente es que me expliques diccionarios, lists, tuplas etc
hazlo con strings primero
y después me lo complicas 👀
jaja ok
cuando decís cadena.join(cosa), join pone cadena entre cada elemento de cosa y te da el resultado
>>> " ".join("hola")
'h o l a'
"hola" es una cadena cuyos elementos son "h", "o", "l", y "a"
así que join une cada elemento con un espacio entre ellos
puedo usar otras cosas para unir las letras de la cadena "hola" también
>>> "-".join("hola")
'h-o-l-a'
esto pasa cuando ejecutas algo sin leer la teoría 👀
Helloor
sí, porque la función de join trata miCadena como un objeto iterable hecho de letras
ah lo que hace es
por eso, toma cada componente (cada letra) de miCadena
coger mi cadena y detrás de cada letra mete lo que le he pasado
entre cada letra
"Hello" no va a aparecer en el principio o al cabo
solamente entre cada elemento
.join no es como concatenar dos cadenas
si eso es lo que querés hacer, basta con decir miCadena + otraCadena y ta
>>> "Hello" + ", World."
'Hello, World.'
ahora, podemos complicarlo un poco
dije que join toma un argumento que es algo iterable
ahora todo tiene más sentido
una lista es iterable, no? porque tiene elementos que podés procesar uno por uno, en orden
>>> "-".join(["palabra1", "palabra2", "palabra3"])
'palabra1-palabra2-palabra3'
@sacred harbor 
el argumento en este ejemplo es una lista de 3 cadenas
y la función toma cada elemento del argumento, o sea cada cadena de la lista, y pone "-" entre cada elemento
la función que cumple es la misma que la de String.join de Java, sólo que en Java los strings no son iterables
>>> ", ".join(["Hello", "World"])
'Hello, World'
funciona igual con tuplas, ya que las tuplas también son iterables
>>> " - ".join(("cosa1", "cosa2", "cosa3"))
'cosa1 - cosa2 - cosa3'
tené en cuenta que los elementos de tu argumento tiene que ser strings.
o sea, me grita si intento usar join con una lista de int
>>> " + ".join([1, 2, 3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
la función esperaba que el argumento contuviera cadenas, pero encontró un entero
pero si uso ["1", "2", "3"], entonces funciona
porque ya no es una lista de ints, sino una lista de cadenas
de nada
format cómo se usa?
esta es la teoría
pero no entiendo nada 😄
"format(valores) Formatea la cadena de entrada según la expresión contenida con los valores que se pasan."
ok
en la cadena, hay que indicar dónde querés poner valores
o sea, digamos que querés que tu cadena contenga algo, pero no sabés de antemano qué va a contener
por ejemplo, tu usuario te va a pasar un número o algo así
lo que podés hacer es indicar en la cadena que vas a incluir algo, y que el valor se va a determinar por una variable o una función o lo que sea
un ejemplo:
>>> cadena = "valor no predeterminado: {}"
>>> cadena.format("cosa")
'valor no predeterminado: cosa'
format reemplaza {} con el argumento - en este caso, la cadena "cosa"
el argumento no tiene siempre ser una cadena
>>> "valor no predeterminado: {}".format(1+2)
'valor no predeterminado: 3'
podemos reemplazar más de una cosa? por supuesto
me acaba de explotar la cabeza
>>> "cosa 1: {}, cosa 2: {}".format("a", "b")
'cosa 1: a, cosa 2: b
el {} es donde metes el formato?
sí
es como decir "poné el valor acá"
y podés cambiar el orden por incluir índices en {}
>>> "cosa 1: {1}, cosa 2: {0}".format("a", "b")
'cosa 1: b, cosa 2: a'
o sea, reemplaza {0} con el primer argumento de format y reemplaza {1} con el segundo argumento de format
podés usar input
@sacred harbor
@glass dragon
recomendado raw_input en Python 2
en java sí que va
a ver cómo lo pongo
ah
pues no me deja en el visual code meter datos
deberías checar si no hay otras formas de correr el programa en Visual Code
cualquierweon@uruwhy:~$ cat test.py
valor = raw_input("Decime algo:\n")
print("el usuario dijo: {}".format(valor))
cualquierweon@uruwhy:~$ python2 test.py
Decime algo:
holam, mundo
el usuario dijo: holam, mundo
nada, creo
>>> saludoUsuario = "Hola, {}".format("Juan")
>>> print(saludoUsuario)
Hola, Juan
>>>
funcionó perfecamente para mí
no podés escribir en ese lugar?
en general querrías Terminal
ah genial
divertido
se crean con {{ tienen un valor único como clave,pero el valor se puede cambir
no?
cambiar*
seh
a ver
con {}
ah, solo 1?
sí, así
>>> diccionario = {"a":1, "b":2, "c":3}
>>> diccionario
{'a': 1, 'c': 3, 'b': 2}
sip
la clave no se puede cambiar entonces, pero el valor sí
en serio
miDiccionario["Opt1"] = 3
print(miDiccionario)
jajaja esta bien
>>> miDiccionario = {"Opt1": 1, "Opt2": 2}
>>> miDiccionario["Opt1"] = 3
>>> print(miDiccionario)
{'Opt1': 3, 'Opt2': 2}
acceder a varias listas?
unpacking?
>>> miDiccionario["Opt3"] = 4 # nueva clave
>>> print(miDiccionario)
{'Opt1': 3, 'Opt3': 4, 'Opt2': 2}
otra manera de crear un diccionario:
>>> diccionario2 = dict()
>>> diccionario2["a"] = 1
>>> diccionario2
{'a': 1}
Además a conseguir valores elementos consecutivos de la lista como una nueva lista, se realiza con un proceso sencillo indicando los índices iniciales y los del final a conseguir. Dichos índices estarán separados por :
pone esto
also, si querés obtener el valor de una clave en tu diccionary, te recomiendo que uses la función de get
ah
no sé qué significa
ok
lista[1] te da el elemento en la segunda posición, o sea en la posición de índice 1
lista[1:3] te da una nueva lista que contiene los elementas de lista, empezando en índice 1 hasta índice 3 (pero no incluye el elemento de índice 3)
>>> lista = [0,1,2,3,4]
>>> lista[1:2]
[1]
>>> lista[1:3]
[1, 2]
no, te da una lista nueva
no cambia tu lista original
y si querés empezar en un índice y ir por el resto de la lista, basta con decir lista[x:], y eso te da una lista con los elementos de lista, empezando en índice x
>>> lista = [0,1,2,3,4]
>>> lista[1:]
[1, 2, 3, 4]
>>> lista[2:]
[2, 3, 4]
ahh
lista[:x] te da una lista con los elementos de lista hasta el índice x, pero sin ese índice
esto es listas no diccionarios lmao
>>> lista = [0,1,2,3,4]
>>> lista[:3]
[0, 1, 2]
lista[:] te da todos los elementos de lista
prueba que no cambia tu lista original:
>>> lista = [0,1,2,3,4]
>>> otralista = lista[:]
>>> otralista[1] = "a"
>>> lista
[0, 1, 2, 3, 4]
>>> otralista
[0, 'a', 2, 3, 4]
sí, se trata de las listas jaja
diccionarios son otra cosa
append(valor), insert(posicion, valor), extends(iterable)
esto debo aprender de las listas
append añade un elemento al cabo de la lista
>>> lista = ["a", "b", "c"]
>>> lista.append("d")
>>> lista
['a', 'b', 'c', 'd']
>>> lista.append(4)
>>> lista
['a', 'b', 'c', 'd', 4]
notá que cambia tu lista
o sea, no te da una lista nueva
así que no hagas esto
minecraft in my laptop after installing 8 gb of ram more
>>> lista = lista.append(4)
>>> lista
>>>
225fps btw
genial
UWU
How did you add more ram to your laptop?
insert también añade un elemento a la lista, pero en la posición indicada por el argumento
>>> lista = [0,1,2,3,4]
>>> lista
[0, 1, 2, 3, 4]
>>> lista.insert(3, "a")
>>> lista
[0, 1, 2, 'a', 3, 4]
nunca puedo dar valor a algo y después imprimirlo de una en py? @ashen mist
ehmmm you open it and install the ram stick you bought
But you can't just do that with any laptop right?
es que la función de append cambia la lista, no te devuelve un valor
notebook RAM isn't soldered if that's what you think 
aquí pone esto
hmmm I think it depends but most laptops can be upgraded tony
Append(valor) Permite añadir el valor pasado al final de la tabla
lo que deberías hacer es
miLista.append("4")
print(miLista)
Hm. Just curious. My current laptop is suuuuper thin so idk if it has the space
Cool though!
no sé que tienen que ver las tablas, pero append sí añade un elemento al cabo de la lista
it most likely has an empty slot
Doesn't opening void the warranty?
porque sólo cambia la lista original
Yes tony
así que si decís print(miLista.append("4")), lo que pasa es que python usa la función de append, la cual devuelve None, y print va a imprimir el valor que la función devolvió
así que va a imprimir None
>>> lista = [0,1,2]
>>> print(lista.append(3))
None
>>> print(lista)
[0, 1, 2, 3]
es extend, no más
maldito
>>> lista = [0,1,2]
>>> lista.extend([3,4,5])
>>> print(lista)
[0, 1, 2, 3, 4, 5]
profesor 😄
veo que no llegó el mensaje
pero ahora me toca probar pop, remove, index e in
mi conexión está empeorando jaja
y la mía
pop quita el último elemento de la lista y te lo da
no te preocupes
ok
ah sí
esto es un lio
es como una lista inmutable
en python hay listas
creo que hay un módulo para arrays
así que técnicamente podés usar arrays
pero las listas deberían ser suficientes
no sé si alguien realmente usa array.array
entonces
básicamente array.array es un array de C, so, blazing fast
pero numpy tiene otros arrays, también de bajo nivel
pero los elementos tienen que ser del mismo tipo, creo
@past harbor que no te mienta el nombre
una lista es un arraylist de Java
es una liada
de hecho, un ArrayList son un montón de arrays con punteros a objetos
y una list funciona de la misma forma
lista = una colección de cosas en un orden. la colección puede cambiar - se puede añadir más elementos, quitar elementos, y la lista puede contener elementos de varios tipos
una tupla también es una colección de cosas en orden, pero no puede cambiar. no se puede añadir otros elementos a una tupla ni cambiar un elemento por otro
diccionario = { "Opt1": Opción 1, "Opt2": Opción 2}
lista = ["1", "2", "3"]
así se definen?
sí
con () y comas
pensaré que las listas son arrays
(1,2) te da una tupla de dos elementos
y me acordaré
jaja eso bastará
(1,) te da una tupla de un solo elemento
la coma es necesario
sin ella, tenés una situación así
>>> tupla = (1,)
>>> tupla
(1,)
>>> type(tupla)
<type 'tuple'>
>>> noestupla = (1)
>>> noestupla
1
>>> type(noestupla)
<type 'int'>
>>>
no me preguntes para qué sirve una tupla de un solo elemento jajaja
para pasar un argumento que necesite ser iterable y sólo necesites un elemento
por ejemplo, al iniciar un thread con argumentos
miTupla[1] = 3
está mal
ah
acabo de leer que no se puede cambiar cosas
y qué sentido tiene tenr tuplas si no puedes cambiar las cosas?
que las tuplas son súper rápidas
es para esto que se usa una tupla en vez de un switch?
y no consumen memoria casi
es que miTupla[1] = 3 intenta reemplazar el segundo elemento de la tupla con un 3
de hecho, funciones builtin como zip y enumerate devuelven tuplas
y no se puede cambiar la tupla
pero sí se puede decir x = miTupla[1] porque en este caso estás viendo un elemento de tu tupla y no lo cambiás
o sea que en los diccionarios
puedes cambiar valores pero no claves
en las listas puedes hacer lo que te salga de los cojones
y en las tuplas no puedes ver nada más que valores?
ye
si necesitás pasar un valor iterable que no necesite ser modificado, para eso está la tupla
y por ejemplopython if x in (1, 2, 3): pass
conviene a
if x in [1, 2, 3]:
pass```
aunque puede que el interpretador optimize esos casos
y los haga tupla
veo que el bytecode es el mismo
>>> import dis
>>> dis.dis('x in (1,2,3)')
1 0 LOAD_NAME 0 (x)
2 LOAD_CONST 0 ((1, 2, 3))
4 COMPARE_OP 6 (in)
6 RETURN_VALUE
>>> dis.dis('x in [1,2,3]')
1 0 LOAD_NAME 0 (x)
2 LOAD_CONST 0 ((1, 2, 3))
4 COMPARE_OP 6 (in)
6 RETURN_VALUE
dis as in disassemble??
yep
me toca cómo se hace un if, un bucle for, while y do-while @ashen mist
That's super cool
you can do that in any language that compiles to bytecode I think
for Java, you can use javap, which is a CLI program
if (condición que devuelve True o False):
# código
elif (otra condición):
# código
else:
# código
después de esto me queda lambda, funciones, clases y propiedades
y ya terminaré, no hay más
no creo que exista for (x = 5; x < 10; x++) en python
nope
aqui me pone esto
pero podés hacer for x in cosa_iterable
los for de Python son for-eachs, a la java for (Ele el : elems) {}
pero vaya manera más enrevesada de hacer las cosas
a ver, probaré el if
aunque ciertamente es confuso aprender a leerlo
la sintaxis es EXPR if EXPR else EXPR
min = a if a < b else b por ejemplo
'Es mayor' if numA > numB else 'Es menor'
y los ternarios son expresiones así que podés juntarlas (?)
'Es mayor' if numA > numB else 'Es menor' if 5 > 2 else 'Lol' epic
para leerlo naturalmente
THIS_THING if THIS_CONDITION else THIS_OTHER_THING
THIS_THING si la "condición" es cierta, sino, THIS_OTHER_THING
me queda
cómo crear funciones, clases: getter, setter, propiedades @ashen mist
si estás cansado, me dices podemos seguir mañana
no me odies, wolf
🆙 | manusaurio leveled up!
meto mucho comentario porque me gusta hablar de estos temas en general, no Python (?)
no sé si no te estorba
No es que me estorbe
funciones van en forma de def nombre(argumentos):
sólo que entiendo el 10% de lo que escribes 😄
a veces hablas de cosas que ni sé qué son
no hay conceptos de público y privado en nada en Python, lo más parecido son cosas como descriptors que tienen funciones totalmente diferentes
y no vas a ver eso tampoco
o sea, no hay concepto de cosas que lo garanticen
ohvaya
como convención, si una variable o método empieza con _ o __, significa que no deberías tocarlo
ah, pero dijiste que tenías que usar @property, así que técnicamente sí vas a ver descriptors, pero no hace falta que te definan qué son realmente
class MiClase:
def __init__(self, tipo): # Constructor
self.tipo = tipo
def getTipo(self): # Método getter
return self.tipo
def setTipo(self, tipo):
self.tipo = tipo`
a ver si me aclaro
el __init__ es el constructor?
y el self qué es
es un equivalente a lo que llamarías constructor, sí
ok, creo que es mejor que te explique algo particular de clases en Python
aunque en java no tenemos un this en parámetro
porque sino self como parámetro te va a resultar súper confuso
leí que el primer parámetro era un objeto
o algo así
aunque tampoco entiendo mucho a que viene eso 😄
en Python creás objetos de esta forma (acá sin overridear init)
class Classy:
def algo(self):
print("Algo!")
obj_a = Classy()
obj_b = Classy()```
el tema con el llamado de métodos y self
es que, cuando le decís a un objeto que haga algo, por ejemplo:
class Classy:
def algo(self):
print("Algo!")
obj_a = Classy()
obj_b = Classy()
obj_a.algo()```
esa llamada de .algo() va a pasar implícitamente al objeto obj_a como primer argumento del método
eso también es técnicamente porque los métodos pertenecen a la clase (Classy.algo, el cual podés llamar con esa notación)
de hecho, estos son equivalenes:
class Classy:
def algo(self):
print("Algo!")
obj_a = Classy()
obj_a.algo()
# es lo mismo que:
Classy.algo(obj_a)```
las clases son objetos en Python
Classy.algo es la función que querés llamar, y la querés llamar en relación a un objeto (que va a ser self)
entonces, literalmente eso hace que el objeto en cuestión sea un argumento más
obj_a.algo() realiza el mismo llamado, pero el pasado del objeto como primer argumento lo hace implícitamente
también notá que self no tiene nada de especial como nombre, es un parámetro nomás - podés ponerle el nombre que quieras
class Classy:
def algo(this, arg_a, arg_b):
print(this, arg_a, arg_b)
obj_a = Classy()
obj_a.algo("uno", "dos")
# es lo mismo que:
Classy.algo(obj_a, "uno", "dos")```
imprime
<__main__.Classy object at 0x7f160ab0cf70> uno dos
<__main__.Classy object at 0x7f160ab0cf70> uno dos```
y eso es todo lo que tengo por ahora para desmistificar el self
vale, gracias
por qué esto está mal?
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def getEdad(self):
return self.edad
def setEdad(self, edad):
self.edad = edad
p1 = Persona("Juan", 23)
print(p1.getEdad())
print(p1.setEdad(27))
bueno la identación da igual porque no rompe
no va el setEdad
me dice none
todas las funciones que no tienen un return explícito retornan None
en este caso, setEdad hace algo - setea self.edad
y luego la función retorna None
así que print(p1.setEdad(27)) se evalúa a print(None)
así que sí, está haciendo lo que vos querés - cambiar self.edad
pero no querés imprimir eso
sí tengo que hacerlo fuera
es que en java te deja hacerlo
se me quedó la costumbre xd
podés pensar que es un setter comojava void setAlgo(int algo) { this.algo = algo; }
y no imprimirías un void
Java directamente te lo prohibiría
no obstante, no sé si debas usar setters y getters, habías mencionado properties
tu profesor escribió funciones así, setAlgo, getAlgo?
existen de otra forma en Python
me enseño a que se podía
y no se trata de asegurar que algo sea privado, sino de otra cosa
poner nombre de la clase
si querés te explico la razón
uf
el tema es este
en realidad esto es algo propio de Java btw, C# y Kotlin usan otras estrategias que no te obligan a escribit setters y getters de partida
ahora, lo de forzar la privacidad, es algo que comparten
so lemme see, en Java, tendrías algo como esto
class Dude {
String name;
int age;
Dude(String name, int age) {
this.name = name;
this.age = age;
}
}```
y luego podrías crear un Dude de la forma
Dude wolf = new Dude("Wolf", 25);```
sí
pero, ignoremos lo de "privacidad" por un momento
técnicamente, querés que quien use esto, disponga del nombre y la edad
tonces podría tranquilamente hacer wolf.name, wolf.edad - de hecho el 99%, los setters y getters no hacen más que eso
el tema es... qué pasa si yo quiero cambiar Dude, por ejemplo para alertarme de si hay un cambio de name?
porque necesito procesar algo extra
si de pronto vuelvo name privado, rompo la interfaz, y el otro programador me acuchilla (aunque si estamos programando en Java, deberíamos haber sido despedido antes por no seguir los patrones de diseño de Java)
en Python y otros lenguajes, lo que hacés es dejar estas propiedades accesibles sin más, tal como son
por ejemplo
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad```directamente, sin getters ni setters
y quien use esta clase puede hacer personita.edad o personita.edad = ... si quiere
a mí no me importa realmente que sea privado - mi clase tiene una función, y que el otro haga lo que quiera (incluyendo romper la clase)
no obstante, asumamos que quiero que mi clase haga algo extra
como imprimir "Es mayor de edad!" cuando la edad sea cambiada a 18
si en el código del otro está lleno de personita.edad = ..., entonces estoy arruinado, no puedo hacer nada, amirite?
bueno, en Python en realidad no estás arruinado
podés hacer que personita.edad = ... llame a una función, literalmente
o sea, se ve como una asignación, pero podés hacer que implícitamente llame a una función
para eso está @property
lo que te permite es "poner setters/getters" de la nada, y preservar la interfaz
tu otro programador no tiene que reescribir nada
entonces, vamos a aplicar eso con el código anterior
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
p1 = Persona("Juan", 17)
p1.edad = 18
print(p1.nombre, 'tiene', p1.edad, 'años')```código original, Juan cumple 18
ahora definamos un setter
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self._edad = edad
@property
def edad(self):
return self._edad
@edad.setter
def edad(self, edad):
self._edad = edad
if self.edad == 18:
print("ALERTA!", self.nombre, "ES UN ADULTO AHORA")
p1 = Persona("Juan", 17)
p1.edad = 18
print(p1.nombre, 'tiene', p1.edad, 'años')```
@past harbor okis
checá que sigo haciendo p1.edad = 18
y el programa imprime python ALERTA! Juan ES UN ADULTO AHORA Juan tiene 18 años
y no hice chequeo de que realmetne tenga 18 :x
fixed
cómo te va, lobo? tuve que hacer otras cosas en casa un rato
me queda repasar property y entender las propiedades privadas
y ya eso es todo lo que entra en el examen
lo haré mañana, estoy agotado. esto de entender un lenguaje que no tiene nada que ver a lo que estoy acostumbrado es pesado
@property esto?
gracias a manusaurio también jaja
a los dos

@property es como el "getter"
ah
los doble _ marca algo, ya sea una función o una propiedad, como privado
no es reaaaalmente privado porque todavía se puede acceder a ello usando _NombredeClase__nombredecosa
como mostraste en tu primer ejemplo
eso es como "si realmente tenés que acceder a esa propiedad directamente, podés hacerlo así"
si simplemente decís pr.Privada, python te va a gritar
porque esa propiedad es definida en __init__ como self.__Privada
pero
a ver
para hacer algo público escribes
self.Publica
para hacer algo privado
self.__Privada
con doble _
eso es el "hack" para romper las reglas de la privacidad jaja
recordás que en python realmente no existe la privacidad?
la forma es _NombreDeClase__NombreDeCosaQueQueresAcceder
python, en el fondo, cambia los nombres de las propiedades y funciones privadas
podés hacer dir(objeto) para ver sus atributos
>>> class C:
... __hola = 5
...
>>> dir(C)
['_C__hola', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
así que cuando definís una función o una propiedad con __ para hacerla privada, python cambia su nombre a _Clase__NombreDeCosa
fijte que __hola no existe entre los atributos de mi clase
pero
el primer atributo, en vez de eso, es _C__hola
pr = UnaPrivada()
print("Privada:", pr._UnaPrivada__Privada)
qué cojones hace aquí
eso es para evitar que el usuario acceda a una función o propiedad privada sin querer
llama a una funcion despues a la clase y despues la propiedad?
no, simplemente accede a la propiedad privada
mejor dejémoslo 😄
me está petando la cabeza con tantas barras bajas y puntos
me lo miraré mañana de nuevo
la clase se llama UnaPrivada, así que el verdadero nombre de esa propiedad privada (llamada Privada) es _UnaPrivada__Privada
jaja ok
https://dbader.org/blog/meaning-of-underscores-in-python ojalé esta página sea útil
Python es terriblemente hacky, so
xD
check this shit out
>>> class C(int):
... def __call__(self, other):
... return C(self + other)
...
>>> C(5)(2)
7
>>> C(50)(25)(25)
100```
bruh no lo confundas jajaja
es que son demasiadas cosas que no tienen comparación con otros lenguajes
sobre todo más restrictivos
pero al mismo tiempo sigue estando lleno de reglas
de hecho por ej. property es una clase, @property es usar esa clase como decorador
pero no saber qué diablos es eso irremediablemente va a hacer que parezca magia
so hacer cosas como definir edad(self) y edad(self, edad) deja de ser tan claro cuando recordás de que sólo puede existir un edad
que es parte de la magia negra que hace @property
wolf nos va a matar
wolf aprobará y luego se irá a trabajar a Oracle
el nuevo JDK, hecho por lobos
No te preocupes
va a desarrollar cx_Oracle
Lo primero que haré cuando vea mi DNI y ponga
"aprobado" será dirigirme a mi mochila
sacar los apuntes y romper en pedazos todo lo relacionado con Python 😄
oh, no sabía que le decían DNI en España también
que es eso
Documento Nacional de Identidad
ah
documento nacional de identidad
al menos acá
ni idea como se dice en ingles
id
acá DNI es una agencia del gobierno jajaja
bueno, los estadounidenses no tienen algo como DNI, no?
presentan el carnet de conducir o algo así (?)
qué documentos tienen como constancia de quiénes son?
sí, pero no tiene que ser ciudadano para obtener una tarjeta de conducir
bueno, una tarjeta de conducir es usualmente lo que la gente usa
por ejemplo si quieren entrar a un bar y necesitan mostrar que tienen al menos 21 años
y si no tengo eso?
no es tan común andar fuera de casa sin tu tarjeta porque es básicamente tu prueba de identidad
a menos que seas alguien raro que anda con su pasaporte 24/7
y qué documentación se presenta en el examen de conducir, para que sepan qué edad tenés? 
es que un DNI sirve específicamente para eso, no es pasaporte ni tarjeta de conducir ni nada similar
no sé si piden eso, pero también hay certificados de nacimiento
simplemente indica quién sos
bueno, no creo que tengamos algo así
así que es normal llevarlo
(aunque no todo el mundo lo hace)
por ej., es algo que la policía puede pedirte si sos detenido
acá, si te piden prueba de identidad, le mostrás tu tarjeta de conducir o tu pasaporte
porque esas cosas llevan una foto de vos
hay otras cosas que comprueban que naciste en EEUU o que sos un ciudadano de este país
por favor no trabajen en Oracle
LOL
se los ruega su amigo wzrdd
si el sueldo es bueno, acepto, y seguramente lo es 
The average Oracle salary ranges from approximately $37,907 per year for Support Analyst to $200,390 per year for Director of Information Technology. Average Oracle hourly pay ranges from approximately $9.95 per hour for Customer Success Manager to $82.46 per hour for Applicat...
weno, pagan menos que féisbuk
porque si trabajás en féisbuk, les vendés tu alma
lol wat
rip embed
About 300 Oracle employees walked off the job on Thursday to protest founder and Executive Chairman Larry Ellison's decision to hold a fundraiser for President Donald Trump the previous evening
Larry Ellison es medio fachito
Ellison was critical of NSA whistle-blower Edward Snowden, saying that "Snowden had yet to identify a single person who had been 'wrongly injured' by the NSA's data collection".
pero tiene 75
por ahí que se muere y lo reemplaza alguien mejor (?)
a veces se desea lo mismo en cuanto a nuestros políticos
"ojalá esta hamburguesa sea la última para él"
Jeff Bezos debe de ser el empresario más odiado
con justas razones
me causa gracia que se parezca a Lex Luthor
parece que quiere mejorar su reputación https://www.vox.com/recode/2020/2/17/21141229/jeff-bezos-climate-change-ten-billion
pues debería mejorar las condiciones de trabajo de sus empleados
eso le va a costar más de 10 mil millones jajaj
anyway, no sé cómo funciona la mente de alguien con tanto dinero
ok, debería hacer un poco de ejercicio
y cambiar mi foto... me da asco
va a ser otra cosa random?
wacky Jeff Bezos?
"I WANT PICTURES OF SPIDERMAN!"
yo no vendería mi alma a esos inhumanos
el software es para mí un arte y un acto político
eso no lo tranzo
eso es en Argentina, aunque no sé si se sigue usando
sabes que nunca me había cuestionado qué significa o si existe
con no tranzar o transar, a esta altura ya no sé, me refiero a que no cambiaría mi posición con respecto a eso
no está en discusión
quizás solo tiene ese significado para mí en mi propio lenguaje
sí, guardaría veneno en la boca y se lo traspasaría
haría ese sacrificio por la humanidad

Creo que leí una historia de una mujer que se metió veneno en las .. partes íntimas para intentar envenenar a su marido durante sexytime
Vagina homicide is, needless to say, a highly unusual crime
El periodista se moría de ganas de escribir esa línea
La cima de su profesión
I just made this sticker.
please, no dick pics
wat
Griffth 💖


Suki come here

@bold gull Are you another one of those "Griffith did nothing wrong" people?
@ashen mist How come routers' ports are shut down by default?
Perhaps, remember that Griffith is a good person.

Btw, I thought that Griffith was gay because he had a strange obsession with guts.
@median trail a process will open a port to listen on it. So if there isn't a process running to listen on that port, there's nowhere for any data sent to go
but switches have theirs opened
Hmmm I don't know what those are
We have just learned about what an interface is
and what a NIC is
Quita eso
What the what
@amber granite *that is spam. Did you read the rules of this network before thinking this was a good idea?

@ashen mist Hiiii, I have an oral presentation on HTTP, and so far I'm a bit lost haha
I know that HTTP stands for Hypertext transfer protocol, and it's a protocol to transfer hypertext from the web-server to a web browser
and Hypertext is like a normal text that also includes hyperlinks to other texts related
but I have some questions, is any text that also includes images, videos, music, etc. Also a hypertext?
I don't understand how the data gets delivered from the server to the client
I just found this image
To present a Web page, the browser sends an original request to fetch the HTML document that represents the page. It then parses this file, making additional requests corresponding to execution scripts, layout information (CSS) to display, and sub-resources contained within the page (usually images and videos). The Web browser then mixes these resources to present to the user a complete document, the Web page. Scripts executed by the browser can fetch more resources in later phases and the browser updates the Web page accordingly.
So the HTML document is like a black-and-white drawing, CSS is like the techniques used to decorate and paint, and the sub resources are extra decorations?
is HTTP the one that makes all of those GET requests?
and displays a web page as a mix of all of the resources requested?

it's not a protocol to "transfer hypertext" specifically
it's used to transfer binary data all the time
I don't get it
"binary" as in "not-plain text"
in fact, if you have a tool like CURL you can "see" the binary in your terminal
for example, this is https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png is Google's logo
if I do curl -I with that URL, it will perform a GET request to that address
and it will show me the HTTP headers in response
I don't even know what a GET request is
[manuel@6500 ~]$ curl -I https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
HTTP/2 200
accept-ranges: bytes
content-type: image/png
content-length: 5969
date: Sun, 23 Feb 2020 21:01:24 GMT
expires: Sun, 23 Feb 2020 21:01:24 GMT
cache-control: private, max-age=31536000
last-modified: Tue, 22 Oct 2019 18:30:00 GMT
x-content-type-options: nosniff
server: sffe
x-xss-protection: 0
alt-svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000```
ok I'm out
if I do --output - I'll see "the image"
humm
a GET is just a type of request
you can tell the server "hey, I want to POST this" or "I want to GET this"
it's really arbitrary in practice, but usually GET means "give me the resource I'm asking for"
for example
when you type google.com in your browser and press enter, you do a GET request for google.com
(which will usually default to http://google.com, the "URI scheme" like http is needed)
so the server will reply with packets, which contain a bunch of "headers" describing the response
and also the "content"
if there's any
@median trail let me show you a very simplyfied transaction
imma strip all the unnecesary headers
[manuel@6500 ~]$ curl -I http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/```I tell `http://google.com` "hey, give me your page", and Google tells me "301 -> you should go to `http://www.google.com/` instead" (with `www.`)
so your browser would usually follow that automatically
doing yet another get request, this time to the location Google told you
[manuel@6500 ~]$ curl -I http://www.google.com/
HTTP/1.1 200 OK```this time, Google answers with "200 -> yeah, this is what you wanted"
and it will also respond with all the HTML the page is made of
in that HTML, you browser might find other resources, for example
an img tag with some image
those things are not included in the original response - your browser needs to ask for them specifically
so if there's something like <img src="someimage.png">, your browser will do a GET request to http://www.google.com/someimage.png
it's basically a ping pong game
I didn't understand what's the role of HTTP in what you said
it's a protocol - a set of things to expect and rules on how to respond
[manuel@6500 ~]$ curl -I https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png HTTP/2 200 accept-ranges: bytes content-type: image/png content-length: 5969 date: Sun, 23 Feb 2020 21:01:24 GMT expires: Sun, 23 Feb 2020 21:01:24 GMT cache-control: private, max-age=31536000 last-modified: Tue, 22 Oct 2019 18:30:00 GMT x-content-type-options: nosniff server: sffe x-xss-protection: 0 alt-svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000```
So the headers are just tiny bits of data that modifies the response or request is made? like asking for specific information?
that's http, right?
yes
well an HTTP response has two parts
one are the headers, the other one is the data
for example
if a site gives you index.html, what it actually gives you is a response that contains "hey, this is what you asked for, this date, this time, with some other details"
and then that's followed by the actual HTML, or any other type data
well, actually
you can send whatever you want via HTTP
what your browser does is ask for resources one by one... for example, via HTTP, you ask for a site
that sites gives you a response with headers + HTML
so HTTP is just a way to communicate with the server?
then your browser parses that HTML, and finds new things it should ask for, such as images or videos or JS
so your browser, once again via HTTP, will ask for that image, that video, that JS... each of them will need an individual request via HTTP
yes
and all of those transactions should have their own headers + content
then, why is it called hypertext transfer protocol? I thought hypertext was just text with links included
Hmmm okay, I just wanted to make sure I knew what hypertext was haha
I mean, php used to mean "Personal Home Page"
but people said "Hey, let's do OUR ENTIRE BACKEND LOGIC In this language"
so now it means "PHP: Hypertext Preprocessor"
El hipertexto ha sido definido como un enfoque para manejar y organizar información, en el cual los datos se almacenan en una red de nodos conectados por enlaces. Los nodos contienen textos y si contienen además gráficos, imágenes, audio, animaciones y video, así como código ejecutable u otra forma de datos se les da el nombre de hipermedio, es decir, una generalización de hipertexto.
wait this means that all the content of a webpage, images and scripts included, are hypertext*
so I'm afraid it's not always a good idea to tell what your product does in its name lol
I would not call an image "hypertext", in fact that quote gives them the name "hypermedia"
which also sounds bad but whatever
ah
it's like too much of an effort to make it make sense...
so hypertext is just text with links?
yes
it doesn't even need to be HTML
in fact, I think this concept goes beyond computers
because I had to do artistic "hypertext" works
and, I mean, nowadays HTTP is used for many things that may not have links at all
like RESTful APIs
(links as in "references to other things")
I have an oral presentation on this, and it'd be awesome if I could do some get requests to show my class how it's done
your browser does it for you all the time
but
there's a way to see them in action, in your browser
do you use Chrome/Chromium?
yes
this will show you a result very similar to what you saw in my curl requests
go to some page and press F12
ok
then go to the Network tab
now... type some URL in the browser (without closing the dev tools) and press enter
and see the magic happen
you should have something like this
yes
well, guess what - those are resources
😮
if you click on them, you can see some details
for example
there's also a Headers sub-tab there as you can see
and you can see the content in the other tabs
is that good enough?
your browser is a really smart thing, so it's doing a million things automatically
should I also talk about HTML?
but you can tell that for every request your browser does, some other resources might be asked for after that
in fact, your browser might keep asking for things, for exaple if some JavaScript program you are running (given by your server) needs them
should I also talk about HTML?
I don't know, probably
the main job of a web browser is to ask for things, parse HTML and render things
in reality, the HTTP part is just the protocol to send messages
so HTTP doesn't know anything of "HTML", "PNG" or "JavaScript"
by the way, the response headers serve a wide variety of purposes
for example, you might have noticed that sometimes you click on some link to an image (in some shady sites) and your browser either opens the image or downloads it
that kind of behaviour and many more are specified in the response headers
the server might answer with "ok, you asked for this - download it"
yeah, the browser is free to interpret those headers the way it wants to
they're just text
Yeah
btw, @median trail, the browser sends headers in its requests every time it asks for things as well - for example, the user agent, which is just a bunch of text that tells what browser you're using
some servers will adjust their response to that, for example to give a mobile version of the webpage
@fallow dock Are you into IT security?
no
Alright
I just like to break things
I have to spice up this slide, but content-wise I don't have anything else to say haha
what's your public?
students that are doing a CCNA certification
😓
but we don't know a lot since we are just starting
mmmm there was a good CBS series on this kind of thing
but we are beginners 
no, I mean
it was quite simple to understand
actually I don't know if it was "CBS"
PBS
damn names
the CrashCourse channel on YouTube
it seesm they don't have anything on this topic lol
oh they have
@median trail https://www.youtube.com/watch?v=guvsH5OFizE
Today we’re going to discuss the World Wide Web - not to be confused with the Internet, which is the underlying plumbing for the web as well as other networks. The World Wide Web is built on the foundation of simply linking pages to other pages with hyperlinks, but it is this ...
some inspiration
is this okay?
Le digo "Hyperlink" a esa cosa de href
yes but I'm just explaining the difference between those two
hipertext and just text
is this okay?
that is correct, actually
Ah entonces debería estar bien
also a visual way to tell these terms are totally pointless...
Luego deberías aprender DNS
what's the application layer?
it's the one that contains the actual protocol you're using to "talk"
layers are a bit of a mess
but as an stupid example, if you want to talk to someone in your classroom, you might write something in a piece of paper and throw it as a paper plane
so you could say there are at least two layers there, one being the paper and the action of throwing it
and the other one being your language, the things written
to talk in HTTP, you need to be in an "application" layer, that sits over other ones
for example, TCP/IP and UDP
I do not remember all the typical layers in the internet or how they are grouped, they are a bit of a mess
but I hope you liked my stupid example
Today, we're going to talk about how the Internet works. Specifically, how that stream of characters you punch into your browser's address bar, like "youtube.com", return this very website. Just to clarify we're talking in a broader sense about that massive network of networks...
this talks about it
a client server protocol is a protocol where a client and a server are involved and they interact with each other?
or maybe it doesn't, but nice video regardless 🤔
a client server protocol is a protocol where a client and a server are involved and they interact with each other?
...yes?
oh it does talk about layers!
...and it doesn't say much more than what I said
I think this slide is boring but I don't know what else I should add
but it has many other details on other related topics
do you know what "stateless" mean in this context?
this is why cookies exist, if you want to talk about that as well
I don't know what that is haha
I need a formal description first 
I'll give my own, you should look up something more "precise" later
but I want the concept itself to come across
"stateless" means that the information in a transaction doesn't change, it's always the same, so for example
in HTTP, each transaction is one request and one response
it's not a connection that's established for a prolonged time to send data back and forth constantly
so there are some implications there
it means that if someone visits a page in your site, and then goes to another page in your site, there's nothing in the protocol to "remember" what the user did before
every visit is a new transaction
so that's why cookies exist: the server might tell the client "please, set this cookie so I know who you are in your next visit to one of my pages"
so the next time the client asks for a page, it will include a header with that cookie... so I can tell "plase Mr. Server, I want this resource... also, I have this cookie with me"
so that way the server can read the cookie and adjust its response, even though it's a totally new transaction
I hope you're liking my dumb examples
this way a server can tell if you're logged in, if you set some option like dark theme in YouTube, etc.
about methods, you already saw GET, but there are others as well, POST, PUT, DELETE...
99% of the time, your browser uses GET
and you saw server codes as well, I showed you a 301 (Moved Permanently) - if you go to google.com, the server will tell you "no, 301, but you can go here:" (the domain starting with www. instead) in a header - it depends on your client to follow that
Chrome nowadays hides the full URL for some reason, so it's hard to tell
but if you click on it and move the cursor around to edit it (with the arrow keys) you will see all of it
and you'll notice you'll never be in https://google.com, it always redirects you to https://www.google.com
anyway, I gotta go, good luck
there's no easy way but by looking at the distribution of the bolts it can hold
(for most cases, you'd need to open it)
or if you miraculously know the name of the case or you haven't throw away the manual, you can actually read if it's for ATX or what
Is there room for an ssd
What
To convert formula units to moles you divide the quantity of formula units by Avogadro's number, which is 6.022 x 1023 formula units/mole.
Pensé lo mismo
thx
It is an arbitrary but useful number
Can someone help me with math 
Uh sure?

(3+4+2)^2




(7+2)^2 = 9^2 = 9*9 = 81
Are they expensive
Meh
@rain ermine a scientific calculator does the same thing
I don't think so
The CE is rly caro tho
Why would you need more than 16 gb
I only have 8 my guy
You have to use just mental math
no u
Why
I want more pc parts and then these expensive headphones
Ps they’re not beats
Check em out
No
Money doesn’t grow on trees
Where do you think paper comes from
Trees






