<commit_before># visual_dynamics

## Optional dependencies

### Servos controlled through FT232H breakout board (for non-Jetson machines)

Install libftdi and its dependencies:
```
sudo apt-get update
sudo apt-get install build-essential libusb-1.0-0-dev swig cmake python-dev libconfuse-dev libboost-all-dev
wget http://www.intra2net.com/en/developer/libftdi/download/libftdi1-1.2.tar.bz2
tar xvf libftdi1-1.2.tar.bz2
cd libftdi1-1.2
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX="/usr/" ../
make
sudo make install
```

Install Adafruit GPIO library:
```
cd /path/to/visual_dynamics
cd ext/adafruit/
sudo python setup.py install
```<commit_msg>Update README.md to include instructions for using the FT232H device without root access.<commit_after># visual_dynamics

## Optional dependencies

### Servos controlled through FT232H breakout board (for non-Jetson machines)

Install libftdi and its dependencies:
```
sudo apt-get update
sudo apt-get install build-essential libusb-1.0-0-dev swig cmake python-dev libconfuse-dev libboost-all-dev
wget http://www.intra2net.com/en/developer/libftdi/download/libftdi1-1.2.tar.bz2
tar xvf libftdi1-1.2.tar.bz2
cd libftdi1-1.2
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX="/usr/" ../
make
sudo make install
```

Install Adafruit GPIO library:
```
cd /path/to/visual_dynamics
cd ext/adafruit/
sudo python setup.py install
```

In order to use the device with root access, put the following in the file `/etc/udev/rules.d/99-libftdi.rules`:
```
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", GROUP="dialout", MODE="0660"
```
Make sure to unplug and plug in the device for this rule to take effect. If root access is still required, the user might need to be added to the dialout group:
```
sudo usermod -a -G dialout $USER
```
Make sure to log out and log in for this change to take effect.
{'fraction_non_alphanumeric': 0.10854379365932294, 'fraction_numerical': 0.028479312197743148, 'mean_word_length': 4.642424242424243, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2904248', 'n_tokens_mistral': 685, 'n_tokens_neox': 621, 'n_words': 205}