La-Tecnologia lanza rata con olor a troll

A veces nos gusta tomarnos unos minutos del La-Tecnologia para pasar tiempo con nuestras familias. Pero justo cuando apartas la vista de los siguientes comentarios, los trolls están obligados a atacar. No [Caleb] y encontré una solución al problema en forma de una rata olfateadora de trolls. Esta bestia perenne está sentada en mi escritorio esperando. Cuando se detecta un comentario de troll, sus ojos se iluminan de color rojo y suena una alarma. Únase a nosotros después del descanso para obtener más información sobre este estúpido proyecto.

Software

Para hacer esto, necesito que sucedan algunas cosas. Primero, una forma de analizar nuestros comentarios entrantes. Eso es fácil, usamos WordPress como nuestro sistema de administración de contenido y eso significa que ya hay una fuente RSS para comentarios globales. Solo necesito capturar esos datos y revisar los autores de comentarios para trolls conocidos (que no fueron prohibidos). Eso no es difícil de hacer con un script de Python, especialmente si aprovecha el módulo Beautiful Soup, que cura y navega por HTML y XML. Mi script revisa la fuente cada dos minutos, guarda el número que identifica cada comentario para no tener alarmas duplicadas y toma decisiones en base al autor de ese comentario. Se usa una lista simple de nombres de usuario para buscar trolls, pero solo se puede usar para notificar cada vez que uno de sus lectores favoritos deja un comentario. Luego, el script registra un mensaje en la salida estándar y envía un comando encriptado a través de una conexión en serie.

Así es como se ve la salida final:

Y aquí está el script de Python:

#!/usr/bin/python

trolls = [ 'Mike Szczys' , 'Caleb Kraft' ]
signalAllComments = True
signalAllAudibly = False

import urllib2, time, serial
from BeautifulSoup import BeautifulSoup

#start a list of comments to prevent duplicate alerts
dupe = []

#setup Arduino communications
ser = serial.Serial('/dev/ttyUSB0', 9600)

time.sleep(5)

#get list of comment identifiers
while True:

  #Reset Arduino from the last trigger
  ser.write('z');

  #Get the comments
  html = urllib2.urlopen("https://la-tecnologia.com/comments/feed").read()
  soup = BeautifulSoup(html)

  #Check each one
  for item in soup('item'):
      thisID = item('guid')[0].string.split('comment-')[1]

      if thisID not in dupe:
              #Add to the duplicate list for next time
              dupe.append(thisID)

              #Convert post time to local time
              postT = item('pubdate')[0].string
              parsedT = time.strptime(postT, "%a, %d %b %Y %H:%M:%S +0000")
              offsetT = time.mktime(parsedT) - time.timezone
              localPostTime = time.strftime("%m/%d/%y %H:%M:%S", time.localtime(offsetT))

              #Check if this is a post we're watching
              author = item('dc:creator')[0].string
              if author in trolls:
                  print "(" + localPostTime + ") Troll Alert: " + author + " just posted a comment"
                  print "    " + item('guid')[0].string
                  print
                  ser.write('a')
                  time.sleep(1)
              elif signalAllComments:
                  print "(" + localPostTime + ") New Comment from: " + author
                  print "    " + item('guid')[0].string
                  print
                  #audible signal?
                  if (signalAllAudibly):
                    ser.write('b')
                  time.sleep(1)

  time.sleep(120)

Hardware

Luego, necesitaba una forma de hacer sonar la alarma cuando el script de análisis identifica un troll. En mi opinión, la forma más fácil/rápida de desarrollar hardware conectado a una computadora es usar Arduino conectado a través de USB. Tengo un Arduino que nunca usé para un proyecto, así que pensé que sería un gran comienzo. Saqué un detector piezoeléctrico y algunos LED y comencé a mirar alrededor para ver qué ejemplos de código podía reutilizar.

Encontré un póster de reproductor de música piezoeléctrico, así que cambié ese código para hacer los sonidos que quería. También observé los ejemplos de comunicación en serie que vienen con el IDE de Arduino para activar las comunicaciones. Como mencioné anteriormente, estoy enviando un carácter ASCII a través de una conexión en serie desde mi secuencia de comandos de Python. El esquema a continuación solo busca esos signos y actúa en consecuencia. Puedo hacer que el hardware encienda los LED y reproduzca un mal sonido cuando se reciba 'A'. Reproduce un buen sonido y no hace nada con los LED cuando se enciende 'B'. Cualquier otra letra apaga los LED, que es lo que usa el script de Python para restablecer los LED dos minutos después de la última alarma de troll.

//Piezo code from:
//http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241248988

void setup() {
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  Serial.begin(9600);
}

#define PIEZO_PIN 8
// defines for the frequency of the notes (.5 x freq of mid C)
#define AN    220     // 440 Hz
#define AS    233     // 466 Hz
#define BN    247     // 493 Hz
#define CN    261     // 523 Hz
#define CS    277     // 554 Hz
#define DN    294     // 588 Hz
#define DS    311     // 622 Hz
#define EN    330     // 658 Hz
#define FN    349     // 698 Hz
#define FS    370     // 740 Hz
#define GN    392     // 784 Hz
#define GS    415     // 830 Hz
// defines for the duration of the notes (in ms)
#define wh    1024
#define h      512
#define dq     448
#define q      256
#define qt     170
#define de     192
#define e      128
#define et      85
#define oo7      1    // 007 jingle

/////////////////////////////////////////////////////////////

void play_tune(int tune){               // play a tune . . .
  switch (tune) {                       // a case for each tune
  case 1:
    for (unsigned char i=0; i<4; i++)
    {
      ToneOut(FS*4,et);
      ToneOut(CN*4,et);
    }
    break;
  case 2:
    ToneOut(CN*8,e);
    delay(16);
    ToneOut(CN*8,e);
  }
}

void ToneOut(int pitch, int duration){  // pitch in Hz, duration in ms
  int delayPeriod;
  long cycles, i;

  //pinMode(PIEZO_PIN, OUTPUT);           // turn on output pin
  delayPeriod = (500000 / pitch) - 7;   // calc 1/2 period in us -7 for overhead
  cycles = ((long)pitch * (long)duration) / 1000; // calc. number of cycles for loop

  for (i=0; i<= cycles; i++){           // play note for duration ms
    digitalWrite(PIEZO_PIN, HIGH);
    delayMicroseconds(delayPeriod);
    digitalWrite(PIEZO_PIN, LOW);
    delayMicroseconds(delayPeriod - 1); // - 1 to make up for digitaWrite overhead
  }
  //pinMode(PIEZO_PIN, INPUT);            // shut off pin to avoid noise from other operations
}

void loop() {

  if (Serial.available() > 0) {
    int inByte = Serial.read();
    // do something different depending on the character received.
    // The switch statement expects single number values for each case;
    // in this exmaple, though, you're using single quotes to tell
    // the controller to get the ASCII value for the character.  For
    // example 'a' = 97, 'b' = 98, and so forth:

    switch (inByte) {
    case 'a':
      digitalWrite(7, HIGH);
      play_tune(1);
      break;
    case 'b':
      play_tune(2);
      break;
    default:
      digitalWrite(7, LOW);
    }
  }
}

La pieza final del rompecabezas fue poner dos LED rojos dentro de una rata de lujo que teníamos tirada en la casa. Los ojos estaban bordados, así que corté los cables LED en ángulo para hacerlos lo suficientemente afilados como para perforar el interior. Utilicé una bolsa Dremel para enturbiar el paquete de LED transparente y eliminar la mayor parte del plástico adicional. Luego usé algunos cables de conexión del conector KK que tenía alrededor, para unirlos a los cables en el interior de la cabeza de la rata. Después de quitar el relleno del cuerpo, empujé el conector hasta el fondo y luego incliné los cables sobre los conectores. Hay una imagen de esto a continuación, pero sin las curvas.

Rellené la rata y grapé la costura que había cortado para hacer el trabajo. me encanta el resultado Es claramente audible en toda la casa, y me divertí en el camino.

Resulta que una cámara web de $ 8 y una caja de Ubuntu no conforman un gran diseño de video. Pero si tienes que ver pruebas, aquí las tienes:

Sigueme en Twitter

@szczys

  • Tomás dice:

    mojosa! : D

  • Alex dice:

    jajaja eso es increible

  • Eirinn dice:

    Pero… ¿qué pasa con los trolls sofisticados como…?:

    "Disculpe, pero ¿sus proyectos me recuerdan a la mierda de cinco días?"

    Ahora, no soy un troll, pero no pude evitarlo;)

    Buen proyecto, y oye, podría ser más útil de lo que crees 🙂 me recuerda al proyecto del "filtro estúpido".

  • stevetronics dice:

    ¡YO GANO!

  • strider_mt2k dice:

    Una frialdad evidente es evidente.

    Bella!

  • luego dice:

    ¿No estás simplemente tentando a la gente para que intente quemarlo? aunque imposible, pero aún así?

  • Henrik Pedersen dice:

    ¡Oh, no, tiene un Arduino!

    (¡Rata parpadeando en rojo y sonando loca!)

    No es broma, ¡me encantan esas malditas cosas! … Y este proyecto está muy bien hecho, pero tal vez use un escudo de Ethernet / o use algo como filtros avanzados / expresiones regulares en combinación con esa lista para buscar trolls desconocidos, actuando como trolls ...

  • ibrindis dice:

    ¡Maravilloso! lol

  • Hombre negro dice:

    Oh, mierda... otro arduino. ¿Y por qué los fanáticos de Arduino siempre se preguntan por qué no tengo una cadena de herramientas habilitada para el compilador C ++ para avrs ...

    Proyecto PS Wonderful, pero lo haría mucho más simple y económico con solo attiny2313 + vusb stack para conectividad USB. El código casi cabe en 2 kb de rayo.

  • mike szczys dice:

    @Necromant: te equivocas con ambas cuentas. No sería más sencillo ni más barato.

    Verá, realmente no tuve que hacer mucho hardware, porque simplemente conecta el Arduino y su microcontrolador está listo para programar y ya conectado para comunicaciones en serie. Esto es más simple que construir el circuito para una conexión USB con tiny2313, conectar el chip a un programador y cargar el V-USB empaquetado.

    Tampoco sería más barato. Ya tenía todo el hardware para esto a mano y sin usar. En realidad eso era gratis.

    Pero un buen intento de un troll... Supongo que lo lograste porque me hiciste responder 😉

  • Factura dice:

    Lol, cuando lea el artículo, vendré aquí y diré que cualquiera que se queje del Arduino obtiene una adición automática a la lista de trolls. Pero llegué demasiado tarde.

  • Sr. X dice:

    ¡Ajá! Me encantó este post, saluden todos al Troll de todos los Trolls!

    Dejando de lado el troleo, la rata se ve genial y este proyecto es definitivamente una gran introducción a arduino y python.

    ¡Gracias! Continuar: P.

  • addidis dice:

    Haces que sea fácil escribir proyectos, mike. Felicidades. (no es fácil)

  • Adán Outler dice:

    Buen micro trabajo. Esto definitivamente es algo que vale la pena con un poco más de trabajo. ¿Qué pasa si agrega una pantalla LCD con un registro y un botón para quitarlo?

  • osgeld dice:

    ¿Por qué no usaste la función de tono ()? te habría ahorrado media página de guión =)

  • mike szczys dice:

    @ Adam Outler: Ahora sabes por qué nunca ando charlando... ¡lo siento!

    Volviendo al tema: debería ser bastante fácil agregar una pantalla LCD, pero debe obtener el script de Python para enviar los datos de la pantalla al Arduino. También necesita un lugar para almacenar esos datos a menos que los extraiga de la computadora mientras se desplaza por los menús.

    ¿Quizás la versión 2?

  • RadBrad dice:

    ¡Estupendo!

  • jtaylor dice:

    k, solo di...
    Si tiene la capacidad de hacer eso, ¿no tendría más sentido simplemente poner una etiqueta en el nombre de la(s) persona(s) en cuestión para advertir a otros que tomen los comentarios con cautela?

  • MortalFoez dice:

    Hmmmm, intentemos esto. 😉

    ESTA COSA ES BASURA!!! Que broma. F*' esta mierda. Lo odio. Absolutamente horrible pedazo de basura sin valor. WTF has pensado en probar esto
    [/trolling]

    J / K. Me gusta la idea. Proyecto bastante bueno para que hagas y publiques todo al respecto. Buen trabajo.

    Ahora, con mi dicho anterior, esta rata debería eliminar este comentario, pero supongo que veremos qué tan bien funciona realmente. : D

  • BIOSO dice:

    Si tan solo pudiera relacionar esto con la vida real 🙂

  • BiOzZ dice:

    @Mike Szczys
    Estoy totalmente de acuerdo

    usar arduino en mis proyectos redujo el tiempo a la mitad y comprar arduino debido a la minería a granel lo hizo mucho más barato.

  • Hirudinea dice:

    ¡Gran proyecto, pero dijiste "Rellené la rata y cosí la costura ..."! WTF, ¿puedes construir una rata troll, pero no puedes coser la cosa desagradable? Aparte de eso es genial. (Está bien, ¡estoy encendiendo una rata!)

  • código central dice:

    ¿Alguien puede hacer un troll con olor a rata?

  • Shadyman dice:

    El Arduino es para creer en los blogs, por supuesto;)

    • caleb kraft dice:

      @los que ponen comentarios de troleo aqui a ver si te detecta,
      No funciona de esa manera. Lee el nombre de usuario. A veces tenemos que observar a alguien que se enfada y empieza a enfadarse, pero por lo general está bien.

      En realidad, esto es más útil para avisarte cuando esa persona está publicando, lo que realmente disfrutas. El seguimiento de trolls es un poco difícil porque si estás trollando, simplemente estás prohibido.

  • gracias dice:

    Hermosos mostradores de playa de Ikea y rata de Ikea.

  • skuhl dice:

    no hack ... ¿podemos obtener una transmisión en vivo de la rata troll ahora? "Cámara rata troll!!!" muy buena idea.

  • ENKI-][ says:

    An automatic troll detector would be more interesting, though nontrivial. You’d probably need something like a modern adaptive spam filter for it, though you can catch the really obvious stuff by checking for ALL CAPS or all lowercase or no punctuation (or! excessive! punctuation!!!); add to that swear counts, trivial misspelling counts, and percentage of 4chan meme material / pasta to content and you’ve got something reasonable. R9k’s ruleset could be repurposed as well. A lot of potential for false positives, but again, that’s why you have the rat notify you rather than auto-banning or auto-deleting the comments.

  • localroger says:

    I like the idea of a LCD display. I think it should be dressed up to look like a miniature rat-sized iPad that the rat is holding in one paw.

    Hilarious project BTW.

  • Digital says:

    you guys realize that the alarm goes off every time someone posts the words “arduino” and “no”…

  • Chris says:

    Obligatory test for any decent Troll detector:

    “You can’t piss on hospitality. I won’t allow it!”

  • Osgeld says:

    “Sometimes we have to keep an eye on someone who gets angry and starts ranting but usually is perfectly fine.”

    I’m honored

  • fahhem says:

    The Python code you posted is fine, but it will constantly increase in memory usage and slow down due to the dupe checking. You can speed it up to O(log(n)) with the bisect module, though the memory issue still remains. If you don’t use bisect, that means all IDs have been added sequentially so you can do “if len(dupe)>30: dupe = dupe[:len(dupe)/2]”Y mantenga la lista en un máximo de 15-30 entradas. Elegí 30 porque el feed guarda 15 entradas a la vez, por lo que solo necesita 15 entradas en un duplicado para asegurarse de que el comentario no se repita.

    Aunque, realmente, solo necesitas mantener la lista de entradas de la última vez, por lo que si has guardado dos listas, last_ids y new_ids, el código cambia un poco más pero la memoria y la velocidad no se usan mucho.

  • Jaime dice:

    Oh, vamos, ¿por qué no tiene un motor vibrador allí?

  • ibrindis dice:

    Mike Szczys, ¿entonces funciona la alarma troll? haz una transmisión en vivo de eso 😀

  • ejonesses dice:

    o mejor aún puedes tener tu familia y hacer internet.

    mouse y teclado en una mano tu otra mano acariciando a tus bebés y perros

  • Gris código dice:

    Me encanta este proyecto, me dan ganas de tener un sitio web para construir esto. Pero me empezó a hacer pensar, ¿quién está en la lista mala y quién está en la lista buena?

    Qué genial es esto.

  • Bill portero dice:

    HAD hace una lista y la revisa dos veces. Descubrirán quién es malo o amable. La Rata Troll viene a la ciudad.

  • skuhl dice:

    Supongo que debería haber leído el código... bueno... sigo pensando que una cámara de rata troll en vivo sería genial.

  • cris m dice:

    Para ahorrar entropía, sugiero los siguientes cambios en Python:

    Tome su primer conjunto de datos antes del ciclo while True:

    peto = urllib2.Peto ('https://la-tecnologia.com/comments/feed')
    abridor = urllib2.build_opener ()
    html = opener.open (solicitud)
    lastMod = html.headers.get ('última modificación')

    Luego, dentro del bucle, obtenga datos repetidos:

    request.add_header ('Modified-Depot', lastMod)
    tratar:
    html = opener.open (solicitud)
    lastMod = html.headers.get ('última modificación')
    además de urllib2.HTTPError como nuestro Error:
    si nuestroError.code == 304:
    la página no ha cambiado
    Tal vez establecer una bandera o romper un ciclo
    otro:
    leví

    Confieso que esto se suma a la complejidad del intento... a excepción de las solicitudes y los abridores de urllib2, pero pensé que sería un buen anuncio de servicio público para el encabezado http "Si se modifica desde".

    Nota: los nombres de las variables: request, html, lastMod, opener y nuestro error son arbitrarios.

  • Será dice:

    @bill lol sigue con esa canción, ¡sería divertido!

    De todos modos, ¡el buen proyecto yadiyadiyada transmisión de video en vivo sería genial ahora para la prueba de troll!

    Este es un proyecto estúpido, ¿qué pasa? ¡Es simple mierda!

    En realidad me gusta mucho el proyecto y espero que capture este comentario.

  • cris m dice:

    hombre, python se ve horrible cuando quitas los espacios de guía ...

  • BiOzZ dice:

    @Volo
    encuentra nombres de usuario no palabras en los comentarios

    ahora todos tenemos que tratar de quedarnos fuera de la lista XD

  • Ranaz dice:

    (Este comentario está pendiente de moderación)

  • mike szczys dice:

    @fahhem: Gracias... ¡Gracias por el comentario realmente constructivo!

    Se me pasó por la cabeza que la lista se iba a agrandar y me negué a lidiar con eso porque no tenía planes de dejar esto funcionando por más de un día a la vez (no me despertaría a medianoche, así que troll, así que para el máximo efecto).

    Pero estoy de acuerdo contigo, y planeo incorporar el uso de una lista nueva y una vieja. ¡Gracias!

  • ulo dice:

    esta es una prueba del sistema de alarma de emergencia del troll. esto es solo una prueba. si esto fuera una verdadera crisis...

    ¿podría agregar un contador llamativo para mostrar la efectividad de eatas?

    "eatas preparó trolls xxx hasta ahora"

    ¿Dónde enviar las correcciones gramaticales?

  • Mad Max dice:

    Este es un gángster. También debe hacer una lista de gramática / ortografía nazis. Ah, y uno para mujeres, porque solo hay como 4 en Internet y importa cuando publican cosas.

  • fumanto_dave dice:

    Creo que algunas personas no leyeron el guión correctamente. Dice que detecta autores que están en algún tipo de "lista de trolls (no prohibidos)", no escanea el mensaje en busca de "comentarios o frases similares a trolls".

    Lo que plantea la pregunta, ¿por qué no simplemente prohibir las IP de los trolls? ¿Esperas que alguna vez "mejoren"?

    • caleb kraft dice:

      @Smoker_dave,
      "¡¿Esperas que alguna vez mejoren?!"
      En realidad sucede.

      Sin embargo, esto fue pensado como un divertido proyecto de pareja de costo cero para entretener a nuestros lectores. Lo que realmente hace bien es alertarnos de alguien que nos gusta (porque el nombre suele ser el mismo).

  • mike szczys dice:

    ¿Quizás usan algún software para ocultar sus IP?
    ¿Mi respuesta también activa la alarma de troll?
    Creo que un escaneo de bajo nivel funcionaría mejor.
    (Copié el nombre de usuario de la publicación)

  • Hombre negro dice:

    @Mike Szczys:

    Bueno, no podía dejar pasar la oportunidad de probar la rata =).
    Si tienes un arduino por ahí, es más fácil. Pero si tiene una gran cantidad de attiny2313 que recibió gratis de un amigo, varios tableros listos para usar para ellos con el uso de vusb en mente), un clon de usbasp y una plantilla de vusb lista para usar, todo lo que necesita tiene que hacer es. complete y escriba make ... por qué no =)

    paréntesis. Creo que hay una mejor manera de detectar trolls. Cuando un comentario recibe muchas respuestas, se trata en un 50 % de comentarios de trolls o en un 50 % de alguien que acaba de iniciar una discusión sobre algo interesante. De todos modos, al menos no bajé sin explicarme primero.

    Ejemplo:
    Tenemos una discusión estúpida con un troll y varios tipos comiéndoselo como a continuación:

    un tipo: tenía apesta
    had_reader1: @alguien que cagas
    had_reader2: @mierda, idiota
    had_reader3: @tú, cagas, nuulo
    ..y la llama sigue...

    "@someguy" se informa mucho en los comentarios, por lo que tenemos una probabilidad de trolleo y salta la alarma.
    Entonces las algas es simple. Calculamos que cada nombre está referenciado en los comentarios,> 3 referencias de diferentes personas podría ser el troll.

  • Barba dice:

    Jaja, apuesto a que tienen una alerta configurada para mí 🙂 ¡Consigue esta mierda en una transmisión en vivo!

Isabella Ortiz
Isabella Ortiz

Deja una respuesta

Tu dirección de correo electrónico no será publicada.