« first day (1673 days earlier)      last day (1418 days later) » 
00:00 - 17:0017:00 - 00:00

 
4 hours later…
5:11 AM
A las güenas :-)
 
5:59 AM
eey
 
bueons días gente
duda sobre lectores ocr
quiero hacer un lector ocr para sacar texto de planos en pdf
alguna idea para vb? he probado con ironOcr pero no se si es por el lenguaje que se configura o porque parte del texto está en cursiva pero no me lo hace bien
 
6:17 AM
@PabloSimonDiEstefano Para python, hay un paquete que usa el tesseract. Lo usan en mi curro, y parece que funciona muy bien
si, ya se que python no es vb, pero igual existe algo parecido que use ese backend para vb
na, mejor me estoy calladito
 
@Trauma de hecho es el que estoy mirando ahora, tesseract, a ver si me saca bien el texto en cursiva. Además configurar el idioma es mucho más sencillo.
Gracias =)
 
@lois6b eey tú :-P
 
6:36 AM
@abulafia El próximo indivíduo que me diga que python es muy expresivo ...
... va a tener un intercambio de opiniones muy duro conmigo:
def get_save_data(self):
"""
Return the data that matches the edit_headers
:return:
"""

data = list()
for name, properties in self.editable_headers.items():
obj = getattr(self, name)
if properties.tpe not in [str, float, int, bool]:
obj = str(obj)
data.append(obj)
return data
 
6:52 AM
buenos dias
 
7:19 AM
Buenos dias
 
Una pregunta que siempre he tenido. En un diagrama de secuencia, donde un actor puede elegir entre hacer una cosa u otra, por ejemplo pagar en efectivo o pagar por tarjeta de crédito, para diferenciar entre una opción u otra las acciones que puede realizar, ya que son distintas, con un if[tarjeta] o if[dinero] desde el actor (incluyendolo) sería correcto?
Siempre me hace dudar tener un fragmento combinado sin saber lo que va a realizar el actor...
 
8:25 AM
Me esta ocurriendo una cosa y a ver si alguno me puede dar una idea
z-index no me funciona y no puedo ponerlo delante
 
8:38 AM
Wenas
@NicolasOñate creo que sé lo que pasa
Pero no estoy 100% seguro
 
@Trauma Cual es el problema, aparte de que no has puesto las tabulaciones?
 
@PabloLozano Que es extremadamente feo
eso se usa en una clase base
para dar persistencia a las clases hijas
me llevó 15 minutos medio-entender lo que hacía
 
@MauricioContreras que crees que puede ser?
 
@NicolasOñate veo que tienes 2 div, el del input con el select y el de los botones. Me equivoco?
 
@MauricioContreras correcto, pero el de los botones esta un nivel por encima
el formulario esta a un nivel por debajo, ya que es variable
 
8:45 AM
@NicolasOñate ???
@NicolasOñate eso qué significa?
 
@NicolasOñate tienes overflow hidden en el contenedor que rodea el input imagen y demás?
eso cortaría todo lo que se sale
aunque tenga z-index superior al contenedor de los botones verdes
 
@Trauma Provocando? :-) ¿Qué le pasa a ese código? Es cierto que Python es muy expresivo, pero nada te impide hacer código ofuscado si quieres... En este caso se entiende razonablemente lo que se está intentando, creo.
 
Ya se me adelantó @lois6b, por andar neceando en Discord. XD
 
@MauricioContreras dentro de un div, hay dos divs, en uno esta el formulario y en otro los botones
 
@Trauma Te devuelve una lista con los valores de ciertos atributos de esa clase, especificados por otro método, convertidos a string si no son un tipo básico. El código es feo porque hace cosas inusuales. Parece algún tipo de metaprogramación, y probablemente podría hacerse de otra forma si supiera el objetivo
 
8:51 AM
@NicolasOñate probaste lo que dijo @lois6b? mi solución era por allí.
 
@lois6b no
 
@MauricioContreras yo tambien estaba en discord :P
 
@abulafia Correcto. Está en una clase base y las clases hijas, al llamar al constructor, le indican la lista de atributos a usar
Como dices, un tipo de metraprogramación
Como digo, muy feo y poco expresivo
 
Python tiene fama de ser como "pseucódigo ejecutable". En la mayoría de los casos es así, pero hay casos complicados. ¿Cómo expresarías con pseudocódigo lo que pretendes hacer?
A veces lo que se quiere hacer es difícil de expresar, por muy expresivo que sea un lenguaje
 
¿ yo ? En C++, pues haría una función virtual y que cada hija se busque la vida xDD
 
8:58 AM
Pues aqui también puede hacerse eso
 
virtual es lo que en Java sería "abstracta"?
 
a veces el código feo es un síntoma de una mala decisión de diseño
 
o, si me tiras mucho, usaria una lista de struct { relative, size }
@PabloLozano Creo que no ... en Java, tengo entendido que todos los métodos son virtuales
 
@PabloLozano Básicamente es un método que se sobrecarga en las clases derivadas. Yo casi que lo llamaría "método" a secas :-)
En python todos son virtuales también, si decides sobrecargarlos
 
@abulafia Puede ser ... si lo miras friamente, es un muy buen trozo de código para hacer lo que hace y evitar duplicados en clases hijas
 
9:00 AM
los métodos o están implementados (concretos) o sólo declarados (abstractos) para que las clases hijas lo implementen
y los implementados se pueden sobreescribir a menos que se declaren finales
 
@Trauma También puede ser eso, una optimización. Es la otra razón por la que puedes acabar con código feo
 
En C++, pueden ser virtuales puros o no puros. Y se pueden sobreescribir todos. Lo de virutal es para acceder mediante punteros a clases base
C++ tiene conceptos no transportables a Java
 
Normalmente , en python, si desciendes a las tripas de una biblioteca te encuentras código feo. Por ejemplo cómo están implementadas las namedtuples es horroroso. Pero todo para que la interfaz y la API sea sencilla y amigable. Se barre lo feo bajo la alfombra
 
mejor dicho, métodos no virtuales no es transportable a Java
 
En todo caso, la fealdad es subjetiva y suele proceder de que se está usando características del lenguaje que desconocías
 
9:03 AM
Totalmente offtopic pero me apetecía contarlo: con esto de tener tiempo libre con el ERTE, pero no me manera contínua, me he apuntado a decenas de partidas de Go (el juego de mesa) en línea, me he puesto a ver vídeos cortos de teoría... creo que he mejorado en un mes lo que normalmente me llevaría un año
 
@abulafia Si, esa función que puse es algo así, son las tripas del mecanismo
 
Y lo de "expresivo" no significa que el código sea bonito. Más bien que con pocas líneas se consigue expresar una funcionalidad compleja, que en otros lenguajes te llevaría el quíntuple de líneas. A veces eso mejora la legibilidad, otras veces es lo contrario.
 
Me reafirmo: es mu feo :-pp
no veas el latazo de pasar cosas de python a C++. Uno no tiene tipos, y en el otro son requeridos.
 
tiene tipos, pero son implícitos
 
hay que estar buscando como usa cada función, para no meter la pata
vale, no me he explicado
 
9:05 AM
si no tiene documentación, es un infierno, sí
 
los valores tienen tipos, pero las variables no
je. Es un código hecho por 1 sola persona, como projecto personal
 
yo pienso que es lo que se debe añadir a JS: declarar el tipo de manera opcional
aceleraría la ejecución una barbaridad
 
la documentación es ... parca, en el mejor de los casos
@PabloLozano No se. Yo creo que el ser dinámico y estar constantemente recorriendo diccionarios para buscar valores, es muy lento
opino igual de python
objeto.atributo -> busca en el diccionario objeto una key llamada atributo
99% de que está implementado como árbol y no como tabla hash
 
@Trauma Tabla hash
 
¿ No usa mucha memoria ?
Si es solo 1 o 2 objetos, vale
 
9:08 AM
los diccionarios python están increíblemente optimizados (en C), porque todo en python son diccionarios por debajo
 
pero todos usando hash ...
por eso lo digo
las hash dan velocidad, a cambio de RAM
y tampoco puedes estar reajustando continuamente el tamaño de los buckets usados
creo
 
No conozco mucho los detalles técnicos, pero he visto algunas charlas de Raymond Hettinger (uno de los programadores core) y me he quedado convencido de que esa parte del intérprete (la implementación de los diccionarios) está revisada y optimizada a base de bien, incorporando el estado del arte en el tema. No les queda otro remedio, es el cuello de botella del intérprete
 
Coincido en eso. Es el punto crítico
pero no se me ocurre como usar hash para todo
igual le echo un ojo al código luego :-)
 
Supongo que tengan incluso diferentes implementaciones según el tamaño del diccionario, y se pase de una a otra. El tema es que nadie se preocupa por la eficiencia de los diccionarios python. Se considera tema resuelto
 
puffff
 
9:12 AM
@Trauma hash hash baby (Vanilla Hash)
 
que optimistas son los pythoneros ...
XDDDDD
 
Igual te interesa ver esto youtube.com/watch?v=p33CVV29OG8
O este que es más corto youtube.com/watch?v=npw4s1QTmPg
 
¡¡¡ Aaaarrrrgggghhhh !!
Inglés del bueno :-)
 
El tío es muy bueno explicando, además
 
solo entiendo cuando dice python xDD
 
9:13 AM
Oh, vaya
 
jejeje
no problem
miraré el código fuente
... cuando tenga tiempo y ganas, claro ...
 
Puedes ponerle subitutlos traducidos automáticamente. No sé qué saldrá :-)
 
Pues los pone bastante bien
parece que coincide con lo que dice :-O
 
Sí, es bastante acojonante...
 
Bueno, fin de la hora del desayuno
me apunto los enlaces y los miro luego
Gracias :-)
 
9:17 AM
@Trauma Sí, pero si el intérprete es capaz de deducir en tiempo de compilación el tipo de dato de una variable, puede optimizar su uso: por ejemplo saber que a+b es una suma y no una concatenación ahorra comprobaciones
en eso se basa ASM.js
que es un transpilador de lenguajes tipados como C a un subconjunto de JS súper optimizado
es lo que se usó para migrar el unreal engine a JS
Por eso me encantaría que el tipado de Typescript pasase a ser parte de ECMAScript
 
Puedes tomar el campo `fecha` que estás sacando del fichero, y convertirlo a un objeto `datetime` de python, del cual puedes sacar fácilmente su campo `hour` y así sabes a qué hora corresponde ese registro. Comparando esa hora con la que te interesa, decides descartarlo o añadirlo a la lista.

Sería así:
import datetime

hora_inicio = datetime.datetime.now().hour
for item in data.split('\n'):
  if not item:
    continue
  fecha = item[:15]
  hora = datetime.datetime.strptime(fecha, "%b %d %H:%M:%S").hour
  if hora != hora_inicio:
    continue
  proxy= item[16:].split(':')[0]
  parametros = item[33:]
  my_list.append([fecha,proxy,parametros])
(el if not item es para saltarse también las líneas en blanco que puedan aparecer)
 
 
1 hour later…
10:48 AM
@abulafia estas por aquí?
 
Estoy
 
@abulafia Como se puede en hacer en latex que un indice largo no lo numere?
Son tres páginas de \tableofcontents
 
@Fernando Quieres decir que no numere secciones, subsecciones, etc? O que no numere las páginas en que aparece?
 
Uso \thispagestyle{empty}, antes y despues, pero no me lo quita
 
o que no "cuente" esas páginas en el contador de páginas?
 
10:52 AM
@abulafia No ponga la página del pie de página en el indice
 
Tienes que poner \pagestyle{empty} (y luego, tras el índice, volver a la normalidad con \pagestyle{headings})
Aún así, creo que la primera página de la tabla de contenidos te saldrá numerada siempre, porque tiene su propio estilo
puedes evitarlo si (además de lo anterior) pones esto en el preámbulo: \AtBeginDocument{\addtocontents{toc}{\protect\thispagestyle{empty}}}
 
@abulafia Se me quita del todo documento
 
¿Tienes un ejemplo para probar?
debería volver a la normalidad con \pagestyle{headings}
lo has puesto tras el \tableofcontents ?
 
@abulafia si, creo uno nuevo
Y envío enlace
 
@Fernando Ah, estabas usando la clase article. Pensé que sería report o book. En la clase article el estilo por defecto es "plain" y no "headings"
Y en esa clase no se fuerza a que la primera página de cada capítulo (y por tanto del toc) sea plain, por lo que no hace falta el truco del AtBeginDocument
basta por tanto lo siguiente:
\pagestyle{empty}
\tableofcontents
\pagestyle{plain}
Eso sí, esto debe aparecer después del \begin{document} y no antes como tú tenías el \tableofcontents
al compilar te estaba dando docenas de errores debido a eso. Arreglado.
 
11:10 AM
Si si, es que tenía ese documento de pruebas
Y para cambiar el tamaño, necesito reformularlo, no?
Tipo \renewcommand\cftchapfont{\LARGE\bfseries}
 
Tamaño de qué?
Y por cierto, antes de que me preguntes... si quieres que todas las páginas del índice, además de no estar numeradas, no se cuenten (es decir, que la sección 1 empiece en la página 1) puedes poner un \setcounter{page}{1} delante de la primera sección
Acabo de retocar el documento en Overleaf para que lo veas (y he tenido que meter algo de texto en cada sección para que LaTeX no intente meter todo en una sola página)
 
@abulafia si, eso ya lo había localizado
@abulafia Cambiar de letra, que no coja la misma del documento ( tamaño small, por ejemplo)
 
@Fernando Para la tabla de contenidos?
 
Si
Solo me lo hacía en las secciones y no subsecciones
 
11
Q: How to change font size in table of contents?

ArcanaNoirI would like to know how to change the font size in the table of contents. Maybe make it 14pt or 16pt. \documentclass[12pt]{report} \begin{document} \tableofcontents \addcontentsline{toc}{chapter}{Introduction} \addcontentsline{toc}{chapter}{Factoring the Group Determinant} \addcontentsline{toc...

 
11:26 AM
Era lo que estaba mirando y no lo había probado por completo
Ahora perfecto
 
 
1 hour later…
12:35 PM
@abulafia para hacer ese script, nos ayudaste sin estar presente, desbloqueaste el logro Ayudar sin leer ni escribir xD
 
12:58 PM
@abulafia http2.mlstatic.com/… yo llegué a probar estos. Acabo de ver que también pertenece a Bimbo
 
Buen día
Algún editor online en el que pueda hacer envíos por POST con PHP?
Para hacer pruebas
 
@JheymanMejia postman
 
Gracias Mauricio, voy a revisarlo
 
Que dice señor larense @MauricioContreras
 
1:15 PM
@LucasDamian naguará
Cardenales de Lara pa to el mundo
 
1:36 PM
@MauricioContreras creo que no es online pero bueno, encontré otro
Alguien sabe como traer los valores de un input con JS?
Necesito un poco de orientación, si alguno pudiese echarme una mano
 
@JheymanMejia que si es online, yo lo uso. XD
 
@MauricioContreras jajaja ahí dice download jaja
 
@JheymanMejia a ver, ¿cuál es el problema?
@JheymanMejia tienes razón, equivoqué de URL, hablamos de hacer pruebas desde el cliente, cierto? La url que uso es Postman - Echo. Es el que yo uso para testear las cosas que hago con mis clientes frontend.
 
@MauricioContreras si señor
@MauricioContreras gracias, te comento
necesito enviar por AJAX, los valores que tengo en unos inputs
En el código son tres formularios, pueden ser muchos mas
hay dos inputs basicos dentro de cada formulario, un input de producto y otro de usuario. El valor de producto puede ser cualquiera, el de usuario, el valor de sesion
como ves en la imagen, si hago clic en enviar en el primer formulario, en amarillo me devuelve los datos correctos
pero si presiono productoB o productoC
me trae los valores de A
Yo sé que pasa porque estoy haciendo document.getElementById("producto").value;
y por eso, al encontrar el primer formulario con el ID producto, siempre toma ese valor
entonces intenté hacerlo por la clase
pero me devuelve entonces undefined
 
1:57 PM
si buenas?
 
@LauraZ hola
 
Me acabo de instalar intellij, ¿Alguno me puede decir cómo clonar repositorios desde GitHub? Antes usaba eclipse con gitkraken, ¿Sigo utilizando esa opción o hay alguna mejor?
Gracias
 
@Manuel yo uso git desde linea de comandos. Nunca lo he usado en un IDE
 
Nunca he dado nada sobre git, quizás deba aprenderlo, ¿Es muy complicado?
 
@MauricioContreras los valores que tengo en value, también podrían estar en name, no tengo problema en eso
o en un data
 
2:00 PM
@MauricioContreras git con tortoisee..por dios.. como que la linea de comando??? no sea loco!!!!
 
Tengo una pregunta muy de newbie, pero ¿Cómo hago para poner en un comentario, "Continuemos el debate en el chat" ? xD
 
@LucasDamian se pone solo.... cuando hay muchos mensajes.. invitalo al chat si tiene suficiente reputacion...
 
Aah, genial :-D, si, me invitó solo, por eso preguntaba jaja
 
@gbianchi USO LINUX
 
@MauricioContreras y no esta tortoisee para linux?
 
2:04 PM
@gbianchi y para qué? si tengo bash
@JheymanMejia tienes más de un elemento con el mismo id?
 
@MauricioContreras sí, obvio es por eso
necesitaría llamarlos por clase
 
@JheymanMejia claro, cada elemento debe tener un id único
 
pero si los llamo por clase, me aparece undefined
 
@JheymanMejia ¿cómo los llamas?
@Manuel la verdad no, aunque yo no hago cosas fuera de lo normal: pull, push, clone, chekout, merge
 
function enviar() {
var producto = document.getElementsByClassName("producto").value;
var usuario = document.getElementsByClassName("usuario").value;
var data = "producto=" + producto + "&usuario=" + usuario;
var apiurl = "http://main.xfiddle.com/<?php echo pf_file('jh2-qj7'); ?>";
$.ajax({
type: "post",
url: apiurl,
data: data,
success: function (resp) {
$("#result").html(resp);
}
}
);
return false;
}
y en el form:
<form method="post" onsubmit="return enviar();">
<input type="text" name="producto" class="producto" value="productoC">
<input type="text" name="usuario" class="usuario" value="juanito">
<button type="submit" name="boton">enviar</button>
</form>
 
2:10 PM
@JheymanMejia Ese es el error, el método getElementsByClassName() devuelve una colección (iterable). Por lo tanto, si tienes 3 elementos con dicha clase, el primero se accede haciendo:productos[0].value y así sucesivamente.
 
@JheymanMejia fíjate el nombre del método: getElementsByClassName()
 
@MauricioContreras tengo tres formularios si. Tres inputs con esa clase
 
esa letra s indica que devuelve varios elementos (o ninguno si no hay ninguno).
Es diferente de: getElementById(), que devuelve un solo elemento (o ninguno) y como en tu caso tienes varios con el mismo ID, pues te devuelve el primero que consigue.
 
no quiero pecar en idiota pero
var producto = document.getElementsByClassName("producto[1]").value;
así?
pero es que tengo muchos y no se cuantos sean, porque los cargo con un fetch assoc de una sentencia sql,
 
2:16 PM
@JheymanMejia eso no importa. Vamos por parte
Mira esto:
var productos = document.getElementsByClassName('miClase');
var productoA = productos[0].value;
var productoB = productos[1].value;
var productoC = productos[2].value;
 
como los productos vienen dinámicamente, los recorres con un ciclo for tomando indice 0 inicial hasta indice menor que el tamaño de la colección.
Por ejemplo:
var productos = document.getElementsByClassName('miClase');
for(var i = 0; i < productos.length; i++) {
  var value = productos[i].value;
}
Dentro del ciclo haces lo que debas hacer con los valores, que al final ni me entero para qué los necesitas. XD
 
@MauricioContreras en realidad es un carrito de compras, cada form es un producto
 
Siempre puedes hacer algo como document.getElementsByClassName("producto").forEach(element => {});
 
@JheymanMejia tienes esto: var data = "producto=" + producto + "&usuario=" + usuario;
 
2:20 PM
y el botón los envía al carrito
@MauricioContreras creo que te entiendo
 
@PabloLozano Una colección HTML no implementa forEach() si mal no recuerdo.
 
@PabloLozano gracias Pablo
 
@JheymanMejia Tu manejas el servidor backend que recibe esa solicitud que estás armando?
 
@MauricioContreras si claro
en realidad es algo como esto

<form method="post" onsubmit="return enviar();">
<input type="text" name="producto" id="producto" value="<?php echo $row['Id_Producto'] ?>">
<input type="text" name="usuario" id="usuario" value="<?php echo $row['usuario'] ?>">
<button type="submit" name="boton">enviar</button>
</form>
los values se cargan como te decía segun la sentencia
 
2:25 PM
y al action de esos formularios tiene algo tan sencillo como
$usuario = $_POST['usuario'];
$producto = $_POST['producto'];

echo "usuario: $usuario y el producto es: $producto ";
 
@MauricioContreras Tienes razón... es que nunca uso getElementsByClassName sino querySelector :P
 
@MauricioContreras creo que lo veo mas claro
con ese código del ciclo for
voy a probar que tal me va y te cuento cualquier cosa
muchas gracias!
 
@JheymanMejia deberías hacer esto con los id: <input type="text" name="producto" id="<?php echo $row['Id_Producto'] ?>" value="<?php echo $row['Id_Producto'] ?>">
 
@MauricioContreras sí, puedo hacerlo
 
Es decir, si le pasas el valor (value) desde PHP para que no haya problemas de duplicidad en el DOM
 
2:29 PM
pero entonces en la funcion que JS que me devuelve los valores
tendría que llamar una a una? y cómo adivino el value de esos ids?
 
@JheymanMejia No, sigues usando clases si no te quieres enrollar con esa lógica, lo digo para que tengas un HTML válido.
 
lamento la molestia, siempre he sido front y estos temas no son mi fuerte
@MauricioContreras ah vale
 
le pones a todos los input de Producto la clase "producto".
 
entiendo, voy a ver que tal me va con eso entonces
 
Con eso lo solucionas, pero el ID debe ser único. El ID del producto te garantiza esa unicidad. Si no lo vas a usar ni se lo pongas y problema resuelto. XD
 
2:33 PM
@MauricioContreras jajaja tambien
gracias por tus observaciones Mauricio
 
 
2 hours later…
4:20 PM
muchachos una pregunta una funcion y un metodo es lo mismo?
en cuanto alguien se conecte me colabora si?
 
En java, yo al menos una función lo definía como que debía de devolver algo, un int, double, string o un objeto. Un método (o procedimiento) no devolvía nada, es decir, un void
 
@LucasDamian Cómo es que hice eso? El logro "Cid Campeador"?
 
@mauricio vaya, eso es debatible.
 
el tema viene de visual basic.. antiguo.. una funcion tenia un retorno, y un metodo no retornaba nada..
pero tecnicamente son lo mismo...
 
@mauricio hay quienes opinan que son cosas diferentes y quienes opinan que son lo mismo. En particular para mi hay una diferencia: una función devuelve un resultado y un método no.
Ya se me adelantó el pelusa. XD
 
4:24 PM
@Fernando Eso de función vs procedimiento viene del pascal (anterior incluso a VSBasic), y efectivamente la función retornaba algo y el procedimiento no.
 
@abulafia ah tenes razon venia de pascal no de visual...
mala mia...
 
Pero yo actualmente no tenía asociado método con procedimiento... para mi, un método es un concepto OOP, y es básicamente una función asociada a un objeto
 
es mas.. una se definia como function y el otro como method?
 
@gbianchi procedure
 
@gbianchi No, en pascal eran FUNCTION y PROCEDURE
 
4:25 PM
@abulafia En algún momento respondiste una pregunta de shh_client que me sirvió de comodin para ayudarlo
 
Pero si consideramos que método es como digo yo, una función implementada en una clase que se invoca a través de un objeto, entonces Java sólo tendría métodos y no funciones
Al menos hasta que le metieron el lambda (porque se lo metieron, no?)
 
Pascal, programé con eso en la época del 80386 con copro.
 
@abulafia tarde, pero si...
 
@LucasDamian Aah, ahora lo entiendo :-)
 
4:27 PM
gracias ok empezemos por partes
 
@MauricioContreras Y yo sin copro. Turbo Pascal
 
y mil disculpas por no ponerle el +1, en el momento que me sirvió. No volverá a pasar
 
en java existen funciones o es el mismo metodo?
 
@LucasDamian siempre está el serial voting.
 
@mauricio eso es terminologia.. no cambia..
 
4:28 PM
@mauricio Vamos a tomar "mi" definición (que parece el caso más aceptado, como veo aqui: softwareengineering.stackexchange.com/questions/20909/… )
 
en el estado actual: funcion = metodo = procedimiento
 
@gbianchi c# == java on steroids
XD
 
Entonces Java no tendría funciones. Ya que en Java todo son objetos, la única forma de llamar a una "función" es llamando a un método (un método estático sería lo más parecido a una función, al no depender de un objeto para ser invocado, pero aún así debe hacerse a través de la clase que lo declara)
 
@abulafia en realidad depende de un objeto, pero creado por el compilador on the fly...
 
ok @abulafia muy bien explicado te entiendo
y si pasamos a python?
 
4:30 PM
Python tiene tanto funciones como métodos
 
se puede declarar una funcion dentro de un metodo?
 
y ahi la diferencia está mucho más clara
un método siempre recibe un primer parámetro implícito que es el objeto desde el cual fue invocado (suele representarse por self, pero esto es sólo una convención, no una palabra reservada)
una función en cambio no recibe ese primer parámetro, y existe "independientemente" de cualquier objeto
Python no diferencia en cambio entre función o procedimiento. Ambas son funciones, pues aún si no pones un return explícito, siempre hay un return None implícito
@mauricio Sí puedes
 
@abulafia como el undefined de JS
 
En python las funciones son "first-class citizens" puedes declararlas en cualquier lugar (también dentro de otras), y puedes pasarlas como parámetro o retornarlas como resultado
 
no lo entiendo a nivel de sintaxis
print("welcome to your soccer team")
			print("1 team trip")
			print("2 training")
			print("3 football game")
			print("4 plan training")
			print("5 interview")
			print("6 heal lesson")
			print("type your option ")
			options = input(int("type your option :")
 
4:35 PM
de hecho la distinción entre función o método es sólo en el momento de invocarla. Puedes declarar una función "normal" fuera de cualquier objeto, por ejemplo def foo(): ... y luego "engancharla" a un objeto, mediante objeto.nombre = foo. Eso la convierte en un método, y hace que cuando la llames con objeto.nombre() reciba el objeto como primer parámetro, y por tanto sería equivalnte a foo(objeto)
 
no me respondan todavia hasta que no termine ok?
 
@mauricio ok, avisa cuando esté
 
entonces quiero usar un bucle para validar que si la variable options es diferente de los numeros que ven en la impresion.(1,2,3,4,5,6). vuelva y me imprima lo que ven pantalla, que se repita pero no es muy viable poner el bucle y despues volver a pegar todo eso. lo unico que se me ocurrio fue meterlo en una funcion pero a nivel de sintaxis no entiendo si guardo la funcion dentro del metodo o afuera?
def main(self):
		menu()

	def function():
			print("welcome to your soccer team")
			print("1 team trip")
			print("2 training")
			print("3 football game")
			print("4 plan training")
			print("5 interview")
			print("6 heal lesson")
			print("type your option ")
			options = input(int("type your option :")
		function()
 
Bueno, en este caso concreto, para evitar pegar el código antes y después del while, puedes usar este patrón:
 
algo asi seria invalido cierto?
 
4:41 PM
@mauricio Hmm.. puedes arreglar la indentación?
 
@abulafia ya ta
asi lo copio
 
@gbianchi Pues no está bien de todas formas, la indentación no es consistente
 
@abulafia lo se
 
no mamen esta dificil
 
tenes un bton que dice fixed font cuando copias codigo
 
4:44 PM
@mauricio No creas, si copias y pegas tal como lo tienes en tu editor, al ser un texto multilinea te aparecerá un botón a la derecha de "send" que dice "fixed font"
al pulsarlo te mete cuatro espacios por delante de cada línea y con eso el chat ya lo renderiza bien
De todas formas
entiendo que querías hacer algo como esto:
def main(self):
   def mostrar_menu():
        print("welcome to your soccer team")
        print("1 team trip")
        print("2 training")
        print("3 football game")
        print("4 plan training")
        print("5 interview")
        print("6 heal lesson")
        print("type your option ")
        option = int(input("type your option :"))
        return option

    opt = mostrar_menu()
    while opt not in range(1,7):
        print("Opción inválida")
        opt = mostrar_menu()
 
ok gracias , se de que boton hablas pero asi lo esta imprimiendo
 
Es porque tu código tenía mix de tabuladores y espacios. Usa un editor que meta espacios cuando pulsas Tab
 
esa es una sintaxis correcta cierto?
 
La que yo te acabo de poner? Sí, es perfectamente válida
 
@abulafia :O
 
4:48 PM
en este caso si quisiera declarar esa funcion en otra parte para despues usarla aqui se puede cierto?
 
la función mostrar_menu() es como cualquier otra. Sólo que su visibilidad está restringida a la función main(). No puedes invocarla desde fuera de main()
también puedes declararla fuera, en efecto, y entonces sería usable en todo el fichero (módulo)
e incluso desde otros ficheros si importas éste.
 
ya que hablas de main esto no es como java? que es lo primero que se executa en python
 
No
 
en java es el metdo main
 
main() es un nombre cualquiera. Como si la llamas pepe()
no se ejecuta nada automáticamente
solo se ejecuta el código que está "fuera" de toda función
por eso, para que se ejecute tu main() debes llamarla al final del fichero, una vez definida
un patrón típico es poner
if __name__ == "__main__":
    main()
__name__ es una variable especial que contiene el valor "__main__" cuando lanzas el script desde línea de comandos, poniendo por ejemplo python miscript.py
 
4:51 PM
@abulafia Tu ayuda :(
 
al lanzarlo así, la variable __name__ tomará el valor "__main__", el if será cierto y entonces se llamará a main()
@JuanPerez Qué pasó?
 
#!/usr/bin/python
# -*- coding: latin-1 -*-

from datetime import datetime
import paramiko
import os, sys
import pickle
import csv

host = "123.456.789"
port = 22
transport = paramiko.Transport((host, port))

username = "root"
password = "123456"
transport.connect(username = username, password = password)

sftp = paramiko.SFTPClient.from_transport(transport)

name = '/var/log/ngcp/'

for r in sftp.listdir(name):
	if r.find("kamailio-proxy") != -1:
		with sftp.file(name+r) as f:
			data = f.read()
@abulafia Tengo el siguiente script el cual me conecto por ssh, abre un archivo.log el cual tiene la siguiente información
 
Sí, eso es lo que me preguntaste ayer. Te respondí hace un rato. ¿Viste la respuesta?
 
@abulafia muchas gracias voy a repasar todo lo que me han respondido para entenderlo mejor adios
 
@abulafia No me apareció la notificación con tu respuesta
 
4:57 PM
7 hours ago, by abulafia
import datetime

hora_inicio = datetime.datetime.now().hour
for item in data.split('\n'):
  if not item:
    continue
  fecha = item[:15]
  hora = datetime.datetime.strptime(fecha, "%b %d %H:%M:%S").hour
  if hora != hora_inicio:
    continue
  proxy= item[16:].split(':')[0]
  parametros = item[33:]
  my_list.append([fecha,proxy,parametros])
 
Si, la idea es que cuando se ejecute el script python tome la hora del servidor y haga un filtro en archivo.log para que solo guarde en la variable my_list los registros de esa hora
 
00:00 - 17:0017:00 - 00:00

« first day (1673 days earlier)      last day (1418 days later) »