Table of Contents

POSTDOCTORAL RESERACH

Python and SOM

- python module by Vahid Moosavi of CAAD, sompy

- another SOM python implementation, somoclu: https://somoclu.readthedocs.io/en/stable/index.html

- SOM Java Toolbox created at TU Wien http://www.ifs.tuwien.ac.at/dm/somtoolbox/

- Twitter sentiment analysis with Python: https://towardsdatascience.com/another-twitter-sentiment-analysis-with-python-part-5-50b4e87d9bdd

Scraping and mining twitter streams

following these tutorials: Introduction to Text Mining using Twitter Streaming API and Python & a beginners guide to streamed data from Twitter

  1. get Twitter API keys from https://apps.twitter.com
  2. scrape tweet stream using python streaming script
  3. mine the tweets using python mining script

A resourceful guide for Twitter textmining in Python: https://marcobonzanini.com/2015/03/23/mining-twitter-data-with-python-part-4-rugby-and-term-co-occurrences/

Scraping and mining Dezeen articles

The setup: python3 in the conda environment

$ conda create -n bots python=3.4 # create a virtual environment named "bots"
$ source activate bots # activate the environment; check if active: conda info --envs
$ conda install -n bots -c conda-forge scrapy # install scrapy for the named environment

Run scrapy directly from the shell:

$ scrapy startproject dezeen # start a project

Detailed instructions here: https://doc.scrapy.org/en/latest/intro/tutorial.html#creating-a-project

Create a _spider_ in the folder dezeen/dezeen/spiders/ within which you will create a class that will declare its' name. This name will be used to call the spider from the console:

$ scrapy crawl spider_name

It is also important to declare fields in pages that will be scraped. This is done in the dezeen/items.py file, using eg (the Class is already declared when you start project).

Class DezeenItem(Item):
title = Field()
link = Field()
description = Field()

These fields will be later used as part of the item dictionary (e.g. item['link'])

DOCTORAL RESEARCH

»»»»»»»»»>!>!»> * * * »»»»> ? ? !! »»>

a design approach where wireless signals can be employed as a parameter in shaping of spaces

read more on the theoretical part of this research on the thesis blog emperors.kucjica.org

Connect or Not

Connect or Not, IST Lisbon

Details on hardware and software development

emperors.kucjica.org_wp-content_uploads_2014_09_frontview-all-on-web-1024x625.jpg

Connect or Not, K4, Ljubljana

Details on hardware and software development

emperors.kucjica.org_wp-content_uploads_2014_09_ida-web.jpg

Connect or Not, Buhne A, Zurich

Details on hardware and software development

Quadricone

Les Urbaines installation in Espace Arlaud, Lausanne

Details on hardware and software development

Stage Digital I scaled model, Buhne A, Zurich

Details on hardware and software development

RKNFG

RKNFG installation was developed during a three week residency in Atelierhaus Salzamt. It was shown at the consecutive exhibition Expand, Explore Expose in the Salzamt gallery, September 2012

Details on hardware, software and development of RKNFG

COMPONENTS:

connect or not application

http://connectornot.emperors.kucjica.org

@ playstore: https://play.google.com/store/apps/details?id=net.lmag.connectornot

@ github: https://github.com/LouisMagarshack/connectornot

indoor positioning

data visualisation

d3 js

workflow

results

lisboa: connect or not at IST Alameda campus

Beagle Bone Black + 2 Arduinos + 4 RGBW high power LEDs + 4 servo motors + 7m stretchable fabric + Android app + people

worklog

LED wall @ EPFL (apr/may 2014)

worklog


MMC K6/4 residency (jan/feb 2014)

worklog


Workshop @ MMC Zavod 6/4, January 2014

workshop outcomes

how to interface wirelessness with space? use light, sound and movement to render experiencable the events that take place in the field of high frequency electromagnetic radiation

what are wireless signals?

how can we perceive them?

how can we explore / exploit them?

some artworks

workflow

  1. install connect or not application
  2. receive data in pd
  3. send values to arduino
  4. control lights, sound, motors

receive OSC data

basic receiving pd patch

receiving pd patch further

arduino controls: LED test

LED_serialread_arduino

LED_serialread_pd

arduino controls: sound

SND_serialread_arduino

SND_control_pd

arduino controls: motors

MOVE_serialread_arduino

MOVE_control_pd

finally, connect the OSC data stream to a physical output

results

here the result

and here the patch


technical development: general

step 1: scanning wifi

airodump-ng

/etc/init.d/network-manager stop
killall -9 nm-applet
airmon-ng start [iface] 
airodump-ng [monitor iface]

iwlist

iwlist [iface] scanning

scripting wifi scan with python

problems:

solutions:

wardrivintg.py

a python script that calls in the results of iwlist scanand returns a list of ESSIDs

wardriving.py

scapy

download and install scapy: http://www.secdev.org/projects/scapy/doc/installation.html

more on scapy usage and and examples

packet snffing with scapy + wifizoo

pcapy

Live Packet Capture in Python with pcapy

step 2: controling the motors

arduino servo

try loop movement with arduino servo 180 test

interactive positioning using python serial arduino servo serial interactive

python + arduino API

python + arduino, 4 servo control

step 3: pass the wifi scan (airodump-ng) data to the motors

using the extended-python-arduino-prototyping-api i call [motor].write(value) with a value determined from the scan

for example, with a running instance of airodump-ng which scans the traffic on a particular network ( –bssid 14:D6:4D:B6:97:3C) and writing to a file (-w /home/selena/doc/synergia/sator/scanning/salzamt1109)

airodump-ng --bssid 14:D6:4D:B6:97:3C -w /home/selena/doc/synergia/sator/scanning/salzamt1109 mon0

we can read the amount of data packets that have passed through the network with a python function like this:

def lookup(table):
    scan=open(table)
    next(scan)
    scanDict=csv.DictReader(scan, delimiter=',')
    for adict in scanDict:
        if adict.has_key(' # IV'):
            data=adict.get(' # IV')
            print data


airodump='/home/selena/doc/synergia/sator/scanning/salzamt1109-01.csv'

when we call the lookup function, it returns the value of the '# IV' key in a dictionary that is contained in the DictReader object 'scanDict'. the returned value is a string, so we have to turn it into an integer.

packets=int(lookup(airodump))

the full script is available here


other

ways to run Python

server maintenance

network configuration

TP LINK configuration

website security

automatic login (Debian/Ubuntu)

install stuff

useful commands

servo-continuous-modify

remastersys

rsync-backup

python

imagemagick

bash script dnld book