Thankful to be here 🌍
12741 words

Pi Zero Tor-Routed Access Point πŸ“Ά

Quick guide on creating an always-on Tor-routed secondary wireless access point on a Pi Zero

Set up the Pi

  1. Download and Extract Raspberry Pi OS Lite
  2. Flash the ISO onto a MicroSD Card, with Etcher or similar software
  3. Place a file called ssh into the boot dir (to allow for SSH access)
  4. Insert SD card into Pi, plug in the Ethernet and power it up
  5. Determine the IP of the new Pi with nmap, or in your router settings
  6. SSH into ssh pi@<ip>, the password is raspberry
  7. Change the password with: sudo passwd

Set up the Access Point

  1. Update packages, and get dependencies:
    sudo apt-get update
    sudo apt-get install iptables-persistent git

  2. Get Pi Hostpot setup script:
    git clone

  3. Begin the Install Process
    cd RPI-Wireless-Hotspot
    sudo ./install
    The script will walk you through setting up a WiFi network, choosing a name, authentication type and password

Configure Tor

  1. Install Tor
    sudo apt-get install tor

  2. Configure
    sudo nano /etc/tor/torrc

    # Then enter the following at the bottom of the file
    Log notice file /var/log/tor/notices.log
    AutomapHostsSuffixes .onion,.exit
    AutomapHostsOnResolve 1
    TransPort 9040
    DNSPort 53
    # Save and exit
  3. Update IP Tables
    sudo iptables -F
    sudo iptables -t nat -F
    sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 22 -j REDIRECT --to-ports 22
    sudo iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 53
    sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040
    sudo sh -c iptables-save > /etc/iptables/rules.v4

Start Tor Service

  1. Start the Tor service
    sudo service tor start

  2. Check if it's running okay
    sudo service tor status

  3. Start tor on boot
    sudo update-rc.d tor enable

  4. Finally, reboot the device
    sudo reboot


[HOW-TO] Mullvad VPN using WireGuard on OPNsense πŸ‘οΈβ€πŸ—¨οΈ

I am new to OPNsense, and got totally stuck on this. There wasn't a lot of information online about this, so after I'd (finally) got it working, I wrote this step-by-step guide

1. Install WireGuard

Navigate to System --> Firmware --> Plug-ins, and select and install 'os-wireguard'.
Now you can refresh the page, and go to, go to VPN --> Wireguard

2. Create a Local Instance

Under VPN --> WireGuard --> Local, create a new instance which looks like this:

  • Name: Mullvad
  • Public Key: (Automatically Generated)
  • Private Key: (Automatically Generated)
  • Listen Port: 51820 (must be unique)
  • DNS Server: (this is Mullvad's privacy DNS service. If you are using a different VPN, use their DNS here instead)
  • Tunnel Address: Leave blank for now, we'll come back to this

Hit save

3. Get Your Account Tunnel IP

Once your local config is saved, click edit, and a private and public key should have been automatically generated. Make note of the public key.

SSH into your box, and run the following command, where account number is your 16-digit Mullvad key (without dashes), and public key is from your newly created local instance.

curl -sSL -d account=[mullvad-account-number] --data-urlencode pubkey=[mullvad-public-key]

This will give you an output with 2 IP addresses, like:,fc00:bbbb:bbbb:bb00::0:0x00/128$

It's linked to your account, so keep it safe.

4. Add Tunnel Address to Local Instance

Go back to your Local Instance, and under Tunnel Address, add both the IPs returned from the above curl command

5. Choose a Mullvad Server

Navigate to and select a WireGuard server that meets your requirements. Make note of it's name/ proxy address, public key and port.

6. Create an Endpoint

Under VPN --> WireGuard --> Endpoints, and create a new instance, with the following data:

  • Name: MullvadInstance
  • Enabled: true
  • Public Key: (public key from your chosen Mullvad instance)
  • Shared Secret: [blank]
  • Allowed IPs:
  • Endpoint Port: (multihop port from your chosen Mullvad instance)
  • Keepalive: 20

Your Endpoint should look something like this:
Endpoint Instance

7. Assign Endpoint to Local Instance

Navigate back to VPN --> WireGuard --> Local, and click edit for your instance. Under Peers, select the name of your newly created endpoint

Your Local Instance should now look like this:
Local Instance

8. Add Outbound Rule

Under Firewall --> NAT --> Outbound, switch the Rule Generation mode to Hybrid (from automatic).

Next, create a new manual rule, with the following details:

  • Interface: WireGuard
  • Source Address: LAN net
  • Translation / Target: Interface address

And all other fields can be left as default

Firewall NAT Outbound Rule

9. Enable VPN

Finally, go back to VPN --> WireGuard --> General - and hit Enable WireGuard VPN - Done!

Under VPN --> WireGuard --> List Configuration, you should now see the connection details

10. Test

To test your connection to Mullvad, navigate to
Here you can also confirm that your IP is not blacklisted, and that there are no DNS or WebRTC leaks.

Mullvad Check

Mullvad also has a simple API, that you can call to, and confirm your connection. This is useful for automation.

$ curl
$ curl

If you haven't yet configured automated backups, don't forget to export your working config, under System --> Configuration --> Backups

Primary sources I used:

Thanks to the users over at the OPNsense forum, who were also a big help.

Custom Styling for Listed Blog πŸ’…

This post outlines how to make a responsive grid layout for your Listed blog
TLDR: You can view the custom CSS used for this blog, here:


Listed is a minimal blogging platform, built on top of Standard Notes.

When it comes to customizing your blog, Listed has some options for color theming with CSS variables and basic styling with a stylesheet. But you are going to be quite restricted in what you can do (presuming you are using the hosted instance), since you are not able to modify your sites core markup (HTML), nor can you add any interactive behavior (JavaScript), and styles must be written in CSS (no SASS). However, you have got full-reign over the CSS, and the Listed team have structured the blog in a way that makes it nice and easy to make both small theming changes, big layout modifications.

This article isn't a full tutorial on blog styling (the official docs on styles cover this, much better than I ever could), it's just a short explanation on how you start to make some layout changes, and what I did to style my page. I know nothing about UI/UX design, so my blog might not be the prettiest, take this just as an example of what is possible

I've had several people ask to see my stylesheet, and seen a few other blogs pop up using my flexbox homepage design, so I thought I'd make things easier for you! Here is the full stylesheet used for my blog. Feel free to do what you like with it. I would prefer that you modify it slightly, if your going to use it for your blog (I like being unique πŸ€ͺ), but no problem if you don't- it's open source

Screenshot- Light Theme Screenshot- DarkTheme

Getting Started - The Basics

Create Style File

First off, create a note with a .css extension, and add the following lines to the top:

metatype: css

Modifying Colour Scheme

You can change the blog colour schemes very easily, using the pre-specified variables, for example

:root {
  --background-color: white;
  --body-text-color: black;
  --post-title-color: var(--body-text-color);
  --dimmed-border-color: rgb(233, 233, 233);
  --header-border-color: var(--dimmed-border-color);

... A full list of available colour variables can be found here, or through the browser dev tools.

Adding Additional Styles

You can also apply specific styles to any element within the page, by finding it's CSS selector (using the browser dev tools), and adding CSS for it, for example:

.author-post.single-post-show .post-content {
    border: 2px solid --body-text-color;

Try to make the selectors as specific as possible, to avoid the styles unintentionally being applied to other elements.

Adding Post-Specific Styles

To apply styles that will display only for that post, you can add a <style></style> tag. You can also write your own HTML markup within a MarkDown note, and specify classes or ID. It's not the neatest solution, but it works

My Styles - Walkthrough

Initial Page Overrides

html {
  overflow-x: hidden;
body {
  max-width: none;
  padding: 2%;
div#main-container {
    padding: 0.5rem;
    max-width: 1200px;
    margin: 0 auto;

Hide Post Content on Homepage

Since some of my posts are long (and kinda boring), so I did not want them to clutter up the main page, and instead have just the titles and date visible

.author-post .post-body {
  display: none;

Display Posts in Grid Layout

The home page post titles are displayed in a responsive flex-box grid, which makes each box the same width, and fills availble space

div#author-posts {
    margin-top: 1rem;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));

div#author-posts::before {
  content: '';
  width: 0;
  grid-row: 1 / 1;
  grid-column: 1 / 1;

div#author-posts > *:first-child {
  grid-row: 1 / 1;
  grid-column: 1 / 1;
} {
    margin: 0.5rem;
  display: inline-block;
    vertical-align: top;    

Post Tiles Styling

Each post tile ha a Title and date, and these styles specify how this should be layed out .post-content {
    padding: 0.5rem;
    height: 100%;
    min-height: 140px;
    transition: all 0.3s cubic-bezier(.25,.8,.25,1);
} .post-content:hover {
    box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
} .post-content .post-date {
    position: absolute;
    bottom: 0;
    color: #c6c6c6;
} .post-content .post-title {
    font-weight: normal;
    font-size: 1.25rem;
} .post-content .post-title a:visited {
    color: #888;

Dark/ Light Theme

I personally love dark style sites, but I know not everyone does, so I have a dark and light theme, which is applied according on the users device preferences (set by wither their OS or browser). This is done with a media query: @media (prefers-color-scheme: dark)

I kept the light as default and outside of any media query for support for older browsers, and then made an overide for dark mode:

@media (prefers-color-scheme: dark) {
    :root {
        --background-color: #0d0e20;
        --body-text-color: #fdfdfd;
        --link-color: #12cdd7;
    .post-content, .navigation .older {
        background: #ffffff0a;
          0 1px 3px rgba(0, 0, 0, 0.83),
          0 1px 2px rgba(0, 0, 0, 0.57);
    .post-content:hover {
          0 3px 10px rgba(0, 0, 0, 0.83),
          0 3px 1px rgba(0, 0, 0, 0.57);

    input, textarea {
        border: 1px solid #fff;
        border-radius: 0;
        color: #fff;
        background: #ffffff0a;

"Older" Button

Once you have more than 15 posts, a hyperlink will appear linking to Older Posts. I wanted to change the wording, and also make it the same style as the other post tiles.This is done by adding it's selector to the above post tile classes so that they can share styles. And to change the text wording, I just used the ::before / ::after psudo selectors, and then set the visiblily to hidden for the original text

#author-profile #author-posts .navigation {
    margin: 0.5rem !important;
#author-posts .navigation .older {
    padding: 0.5rem;
    height: 100%;
    min-height: 140px;
    transition: all 0.3s cubic-bezier(.25,.8,.25,1);
    border-radius: 5px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
    width: 100%;
    font-size: 1.5rem;
#author-posts .navigation .older a {
    visibility: hidden;
#author-posts .navigation .older a::before {
  content: "There's more!";
  color: #c6c6c6;
  font-size: 0.9rem;
  display: block;
  visibility: visible;
#author-posts .navigation .older a::after {
  content: "Show Older Posts ➑️";
  color: #888;
  font-size: 1.25rem;
  display: block;
  visibility: visible;

/* Material Style for Post Containers */
.post-content {
    padding: 1rem;      
    border-radius: 5px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);

Code Snippets Styles

code, .prettyprint {
    font-family: courier, monospace !important;
    font-size: 0.75rem;
    line-height: 0.75rem;
    color: #a2266c;
    padding: 4px 8px;
    background-color: #f7f7f9;
    border-radius: 3px;
.highlight {
    border-radius: 4px;
    width: min-content;

Navbar Buttons

The page links, in the top-right of the navbar looked a bit inconsistant, so I added a box-type style to them

div.pages-menu {
    padding: 0.4rem;
    border: 1px solid var(--page-menu-link-color);
    margin: 0.2rem;
    text-decoration: none;

Additional Tweeks

After all the above styles were applied, there were a couple of things which didn't look quite right, mostle spacings or little glitchs.

/* Text Highlight Color */
::selection {
  color: #0d0e20;
  background: #12cdd7;

/* Additional spacing for ':' in title */
.author-name.path-item:before {
    margin: 0 0.4rem 0 0.1rem;

/* Use Monospace for Headers and Titles */
.header-author-info, #page-header, h1, h2, h3 {
    font-family: monospace;

/* Leave a bit of space between sections */
h3 {
    margin-top: 1rem;

/* Horizontal Rule */ hr {
    height: 0;
    padding: 0;
    margin: 1.5rem 0;
    border-bottom: 1px dashed #12cdd757 !important;
hr::before {
    content: none;

Epic Internet Stuff! ✨

Feeling bored? Here's a collection of stuff I stumbled upon on the internet, and thought was pretty epic 🌈

Full credit to the legends behind each of these sites πŸ¦Έβ€β™‚οΈ

Enjoy! 🀩

  • 100,000 Stars - A WebGL 3D Visualization of out Solar System, Galaxy and Universe
  • 1001 Albums Generator - Gives you a new album to listen to everyday
  • Acapella Extractor - Isolates voice from any track/ removes music and background
  • Ask Nature - Search for a query, to find how nature has adapted to solve problems
  • A Good Movie to Watch - Find top-rated TV and Movies, for your chosen streaming services and country
  • Ancient History Encyclopedia - A professionally curated online encyclopedia for research, teaching and travel
  • BBC Sound Effects - A database of all 16,000+ sound effects as .wav, created & used by the UK's BBC
  • Bilingual baby name finder - Useful to find names that can be pronounced
  • Bomb Blast - Search a location, and nuclear weapon, to see the damage area
  • Bored Panda - Slightly click-batey articles from around the web, great for destroying boredom
  • - Convert text to real-looking hand writing, with AI
  • Cinetrii - Analyses reviews to infer possible inspirations behind a film
  • City Extremes - Lookup any city, and find the closest and furthest geographic cities
  • Classic Reload - A series of retro emulators in the browser
  • Connected Papers - Visually shows connections between academic journals
  • Conversao - Instantly convert a unit to all others
  • Cryptovoxels - A virtual world
  • Cursor Dance Party - Real-time cursor dance party
  • Desk Spacing - Create your own virtual desk setup (or r/BattleStation!)
  • Dr Meme - Meme generator (without watermarks, ads or sign up)
  • Don't Even Reply - Some hilariously funny email chains
  • Earth Polychromatic Imaging Camera - Hourly photos of the Earth from NASA
  • Entropy by Aatish Bhatia - Interactive article, explaining entropy with sheep
  • FSymbols Emoticons - Cpoy/ Paste text-based emojis
  • Flag Waver - Generates a waving flag for any image (some very clever coding, by @krikienoid)
  • Flipanim - Create flipbook animations
  • Fluid Simulation - Impressive, and kinda relaxing, WebGL dynamic simulation of fluid
  • Forekast - Upcoming dates of notable internet events
  • Forgotify - Listen to a song that's never been heard before on Spotify (produces some questionable tracks)
  • Forvo - Pronunciation Dictionary
  • Free Learning List - A collection of awesome educational resources from around the internet
  • Good Tricks - Tons of magic tricks
  • Hacker Typer - A classic.. pretend to be a hacker
  • HelpMap - A website that lets you find local charities to support
  • Hemingway - Analyses a writing, and suggests edits to make it easier to read
  • How long to Read - Tells you how long it will take to read a certain book
  • HotSpot 3D - Compare any 2 smart phones, in a size-accurate 3D environment, to easily visualize dimensions
  • Ikea Museum - Every Ikea catalog since 1950
  • IMDB Compare Shows - Compares ratings over time of TV shows
  • Import Yeti - Find any companies suppliers, using data from U.S Customs Sea Shipment Records
  • Invite Rick - Invite Rick Astlet to Rick Roll your Zoom meetings
  • I Waste so much Time - Just some funny pictures, to waste your time
  • Life in Months - Create a grid of your life
  • Lines - Draw a line, and let Google Earth complete the picture
  • ListeningTogether - Shows when two people start listening to the same song, at the same time, via Spotify
  • Localingual - A map that you can click on, to hear voices from around the world
  • Little Alchemy 2 - Weirdly addictive simple element-mixing game
  • McBroken - A map which keeps track of which McFlurry machines are broken across the US by @rashiq
  • MSOutlook-Reddis - Makes Reddit look like Microsoft Outlook (useful for work)
  • Measure of Things - See real-world comparisons of a measurement
  • Moon Today - Browse the moons craters, mountains and lava channels
  • - Morse Code-only chat room
  • Muscle Wiki - Select a muscle, for exercises on how to work it
  • Music Roamer - Finds music from similar artists you love:
  • My90sTV - Simulates a 90's TV, with big varity of program - so nostalgic!
  • Mystery Search - Search for something, and receive the results for whatever the previous person searched for
  • Opslagify - Calculates how much storage you'll need to download your Spotify playlists
  • Orb.Farm - Relaxing lil game, where you create your own eco-system
  • OwnersMan - All car manuals
  • Paper Plotter - Create math functions out of paper
  • Physics Simulations - Physics simulations
  • Playlist Machinery - Create a (nearly) seamless playlist between (almost) any two artists
  • QR Picture - Turn any picture into a working QR code
  • Radio Garden - Listen to Live Radio from all over the world
  • Radiooooo - Pick a country, and a decade, to hear the songs that would have been on the radio
  • RainbowHunt - Amazing rain simulation, built with WebGL
  • RelaxCalm - Do nothing for 90 Seconds
  • Remove BG - Automatically removes the background of any image
  • Roland 808303 Studio - Computer Controlled Rhythm Composer, built with HTML5
  • RubikSolve - Rrbik's Cube Solver
  • SculptGL - Digital Sculpting Web App
  • ShadyURL - A URL Shortener, that makes legitimate websites sound dodgy
  • Shortcuts - Keyboard shortcuts for lots of apps
  • Sideways Dictionary - Like a dictionary, but uses analogies to simply explain infosec definitions
  • Sketch 2 Code - Convert any hand-drawn wireframe, into HTML code
  • SnapDrop - Share files with other devices on your network, no signup or software required
  • SoundeScape - 3-Dimensional, generative sound environments for Focus, Relax or Sleep
  • Strobe.Cool - Weirdly hypothesizing illusion (Warning: Strobe)
  • Super Cook - Search recipes based on what's in your fridge
  • Temark - Convert any bit of long writing, into a short summary
  • Terms of Service; Didn't Read - Professionally written, short summaries of various website's Terms of Service
  • The Faces of Facebook - Shows tons of public facebook profile pictures (broken)
  • The Google Cemetery - Collection of all 162+ products that Google killed
  • The Skullery - Collection of free, well-presented and easy-to-follow recipes
  • TimeTraveler - Shows which new words, were first used in print for each year
  • TitleScraper - Scrapes any given sub-reddit, and looks for commonly used words and upvotes
  • Toys from Trash - Hundreds of Science projects using common household items & trash
  • Travel Time - Travel time calculator, great for finding somewhere to live for a commute
  • TypeLit - Practice touch typing, by typing out classic novels
  • U Meet Me - Find meeting places between 2 addresses
  • Unim.Press - Read Reddit like a newspaper
  • Unogs - Search for a movie, to find which country Netflix it is on (useful for choosing VPN location)
  • Virtual Vacation - City Guesser Game - Shows parts of cities, to guess location (great for quizzes)
  • VisualPing - Monitor website for changes
  • WebAmp - HTML5 implementation of WinAmp in-browser
  • What to Watch on TV - Find TV shows, based on IMDB ratings
  • What Should I read Next - Discover books, based on other books you've enjoyed
  • Wildlife Africam - Live wildlife cameras in Africa
  • Winamp Skin Museum - I don't know why...
  • Worlds Greatest Singers - Vocal ranges of the top singers visualized
  • Xkcd - The original source of xkcd's classic comic strips, on Romance, Sarcasm, Math, Computing & Language
  • Zoom Earth - Live satellite photos of Earth

Thanks for visiting πŸ₯°

Each site is meant to be either amazing, genius, funny, random or useful- and intended to be a guaranteed boredom destroyer. There's currently over 100 websites, but this list is still very much a work in progress, and I continue to add new stuff 🚧

I always love discovering new eipc internet stuff, so if you know of something I should check out, drop me a line at alicia at omg dot lol - Thanks for all the messages and suggestions so far!

Fun with Real-Time Data 🌠

Fun with live data_banner

A curated collection of data-related awesomeness, with a focus on internet, communication & security
Work in progress- I'm continuing to update the list, whenever I come across something epic

My respect goes out to the legends behind each of these projects πŸ‘

Awesome Real-Time Data Visualizations

Info Sec - Databases, APIs, References

Want to build your own live data visualization? The below data sources may be of help

  • Exodus - Trackers in Android Apps
  • Exploit Database - A database or Current software vulnerabilities
  • URLScan - Service scanning for malicious domains, with historical results
  • Dehashed - Data Breaches and Credentials
  • VirusTotal - Detailed virus scans of software
  • Abuse IP DB - Database of IPs reported for abuse
  • SnusBase - Long standing database hosting breached data
  • OpenPhish - A feed of current phishing endpoints
  • HashToolkit - Database of 'cracked' hashes
  • SecLists - Starter list of leaked databases, passwords, usernames etc (Great for programming)
  • Qualys SSL Pulse - A continuous and global dashboard for monitoring the quality of SSL / TLS support over time across 150,000 SSL- and TLS-enabled websites, based on Alexa’s list of the most popular sites in the world
  • Tor Bulk Exit List - List of all exit nodes (IP) in use on the Tor network

Info Sec - Research & Results

A collection of interesting studies that have collected, analysed and presented findings using internet data

  • Internet Census Data - Includes data on address space allocation, traffic, DNS, service enumeration, internet outages and other internet topology data
  • Web Tracking Data by Princeton University - This is the largest and most detailed analysis of online tracking to date, and measures both stateful (cookie-based) and stateless (fingerprinting-based) tracking. The crawls were made with OpenWPM
  • Who has your Back? by EFF - Anual report assessing how companies handle personal data
  • Lists of Websites Abusing Session Replay - Third-party sesssion replay scripts, record all your acions and allow them to be watched by a human. This list of websites include this
  • Sensor Access Data - A Crawl of the Mobile Web Measuring Sensor Accesses, Illinois
  • Canalys Newsroom - Research Studies on Security, Privacy, Technology and Finance
  • Data Never Sleeps - An infographic visualizing how much data is generated every minute (2019)
  • What they Know about You - An Infographic showing what information are Giant Tech Companies collecting from you (2020)

Finally- Here's a selection of pretty screenshots...

A selection of pretty screenshots

[REFERENCE] InfoSec Abbreviations πŸ”‘

Background: While getting started in information security, I kept coming across acronyms I wasn't familiar with/ had forgotten. So I have started compiling a list, for future reference. I will keep this list updated, as I go along 😚

Common InfoSec Abbreviations

  • AES: Advanced Encryption Standard
  • C2: Command & Control (sometimes CC)
  • CBSP: Cloud-Based Security Providers
  • CSP: Content Security Policy
  • CORS: Cross-Origin Resource Sharing
  • CVSS: Common Vulnerability Scoring System
  • DAST: Dynamic Application Security Testing
  • DLP: Data-loss Prevention
  • DDoS: Distributed Denial of Service
  • DES: Data Encryption Standard
  • DOS: Dinial of Service
  • DSA: Digital Signature Algorithm
  • EDR: Endpoint Detection & Response
  • IPSec: Internet Protocol Security
  • IIoT: (Industrial) Internet of Things
  • MFA: Multi-Factor Authentication
  • PAM: Privilege Access Management
  • PIM: Privilege Identity Management
  • RAT: Remote Adimistration Tool
  • SAST: Static Application Security Testing
  • SPF: Sender Policy Framework
  • SSE: Server-Side Encryption
  • STS: Security Token Service
  • TLS: Transport Layer Security
  • WAF: Web Application Firewall
  • WAP: Web Application Protection
  • XSS: Cross-Site Scripting

Of course, there are other, much more complete glossaries, but they can get overwhelming- these are the basics, and my personal resource. For some much more complete lists, see:

πŸ‘† A lot of acronyms: via InfoSec Matter
πŸ‘† Glossary of Terms: via NICCS (National Initiative for Cybersecurity Careers and Studies in the US)

[REFERENCE] Wireshark Display Filters πŸ’»

Wirechark has some comprehensive packet filtering capabilities, and display filters let you utilize these multi-pass packet processing capabilities. This goes far beyond just filtering based on IP, port and protocol.

Essential Links:

You can debug filters using the dftest command

Cheat Sheet

I created this list from the Wiki, to be a Ctrl + F personal reference to common display filters


  • eq or ==
  • ne or !=
  • gt or >
  • lt or <
  • ge or >=
  • le or <=


  • and or && - Logical AND
  • or or || - Logical OR
  • xor or ^^ - Logical XOR
  • not or ! - Logical NOT
  • [n] […] - Sub-String Operator


  • eth.addr
  • eth.dst
  • eth.ig
  • eth.len
  • eth.lg
  • eth.multicast
  • eth.src
  • eth.trailer
  • eth.type

IEEE 802.1Q

  • vlan.cfi
  • vlan.etype
  • vlan.len
  • vlan.priority
  • `vlan.trailer


  • ip.addr
  • ip.checksum_bad
  • ip.checksum_good
  • ip.checksum
  • ip.dsfield.ce
  • ip.dsfield.dscp
  • ip.dsfield.ect
  • ip.dsfield
  • ip.dst_host
  • ip.dst
  • ip.flags.df
  • ip.flags.rb
  • ip.flags
  • ip.frag_offset
  • ip.fragment.error
  • ip.fragment.multipletails
  • ip.fragment.overlap.conflict
  • ip.fragment.overlap
  • ip.fragment.toolongfragment
  • ip.fragment
  • ip.fragments
  • ip.hdr_len
  • ip.len
  • ip.proto
  • ip.reassembled_in
  • ip.src_host
  • ip.src
  • ip.tos.cost
  • ip.tos.delay
  • ip.tos.precedence
  • ip.tos.reliability
  • ip.tos.throughput
  • ip.tos
  • ip.ttl
  • ip.version


  • ipv6.addr
  • ipv6.class
  • ipv6.dst_host
  • ipv6.dst_opt
  • ipv6.dst
  • ipv6.flow
  • ipv6.fragment.error
  • ipv6.fragment.more
  • ipv6.fragment.multipletails
  • ipv6.fragment.offset
  • ipv6.fragment.overlap.conflict
  • ipv6.fragment.overlap
  • ipv6.fragment.toolongfragment
  • ipv6.fragment
  • ipv6.fragments
  • ipv6.hlim
  • ipv6.hop_opt
  • ipv6.mipv6_home_address
  • ipv6.mipv6_length
  • ipv6.mipv6_type
  • ipv6.nxt
  • ipv6.opt.pad1
  • ipv6.opt.padn
  • ipv6.plen
  • ipv6.reassembled_in
  • ipv6.routing_hdr.addr
  • ipv6.routing_hdr.left
  • ipv6.routing_hdr.type
  • ipv6.routing_hdr
  • ipv6.src_host
  • ipv6.src
  • ipv6.version


  • arp.dst.hw_mac
  • arp.dst.proto_ipv4
  • arp.hw.size
  • arp.hw.type
  • arp.opcode
  • arp.proto.size
  • arp.proto.type
  • arp.src.hw_mac
  • arp.src.proto_ipv4


  • tcp.ack
  • tcp.checksum_bad
  • tcp.checksum_good
  • tcp.checksum
  • tcp.continuation_to
  • tcp.dstport
  • tcp.flags.ack
  • tcp.flags.cwr
  • tcp.flags.ecn
  • tcp.flags.fin
  • tcp.flags.push
  • tcp.flags.reset
  • tcp.flags.syn
  • tcp.flags.urg
  • tcp.flags
  • tcp.hdr_len
  • tcp.len
  • tcp.nxtseq
  • tcp.options.ccecho
  • tcp.options.ccnew
  • tcp.options.echo_reply
  • tcp.options.echo
  • tcp.options.md5
  • tcp.options.mss_val
  • tcp.options.mss
  • tcp.options.qs
  • tcp.options.sack_le
  • tcp.options.sack_perm
  • tcp.options.sack_re
  • tcp.options.sack
  • tcp.options.time_stamp
  • tcp.options.wscale_val
  • tcp.options.wscale
  • tcp.options
  • tcp.pdu.last_frame
  • tcp.pdu.size
  • tcp.pdu.time
  • tcp.port
  • tcp.reassembled_in
  • tcp.segment.error
  • tcp.segment.multipletails
  • tcp.segment.overlap.conflict
  • tcp.segment.overlap
  • tcp.segment.toolongfragment
  • tcp.segment
  • tcp.segments
  • tcp.seq
  • tcp.srcport
  • tcp.time_delta
  • tcp.time_relative
  • tcp.urgent_pointer
  • tcp.window_size


  • udp.checksum_bad
  • udp.checksum_good
  • udp.checksum
  • udp.dstport
  • udp.length
  • udp.port
  • udp.srcport

Frame Relay

  • fr.becn
  • fr.chdlctype
  • fr.control.f
  • fr.control.ftype
  • fr.control.n_r
  • fr.control.n_s
  • fr.control.p
  • fr.control.s_ftype
  • fr.control.u_modifier_cmd
  • fr.control.u_modifier_resp
  • fr.control
  • fr.dc
  • fr.dlci
  • fr.dlcore_control
  • fr.ea
  • fr.fecn
  • fr.lower_dlci
  • fr.nlpid
  • fr.second_dlci
  • fr.snap.oui
  • fr.snaptype
  • fr.third_dlci
  • fr.upper_dlci


  • icmpv6.all_comp
  • icmpv6.checksum_bad
  • icmpv6.checksum
  • icmpv6.code
  • icmpv6.comp
  • icmpv6.haad.ha_addrs
  • icmpv6.identifier
  • icmpv6.option.cga
  • icmpv6.option.length
  • icmpv6.option.name_type.fqdn
  • icmpv6.option.name_type
  • icmpv6.option.name_x501
  • icmpv6.option.rsa.key_hash
  • icmpv6.option.type
  • icmpv6.option
  • icmpv6.ra.cur_hop_limit
  • icmpv6.ra.reachable_time
  • icmpv6.ra.retrans_timer
  • icmpv6.ra.router_lifetime
  • icmpv6.recursive_dns_serv
  • icmpv6.type


  • ppp.address
  • ppp.control
  • ppp.direction
  • ppp.protocol


  • rip.auth.passwd
  • rip.auth.type
  • rip.command
  • rip.ip
  • rip.metric
  • rip.netmask
  • rip.next_hop
  • rip.route_tag
  • rip.routing_domain
  • rip.version


  • mpls.bottom
  • mpls.exp
  • mpls.label
  • mpls.oam.bip16
  • mpls.oam.defect_location
  • mpls.oam.defect_type
  • mpls.oam.frequency
  • mpls.oam.function_type
  • mpls.oam.ttsi
  • mpls.ttl


  • bgp.aggregator_as
  • bgp.aggregator_origin
  • bgp.as_path
  • bgp.cluster_identifier
  • bgp.cluster_list
  • bgp.community_as
  • bgp.community_value
  • bgp.local_pref
  • bgp.mp_nlri_tnl_id
  • bgp.mp_reach_nlri_ipv4_prefix
  • bgp.mp_unreach_nlri_ipv4_prefix
  • bgp.multi_exit_disc
  • bgp.next_hop
  • bgp.nlri_prefix
  • bgp.origin
  • bgp.originator_id
  • bgp.type
  • bgp.withdrawn_prefix


  • icmp.checksum_bad
  • icmp.checksum
  • icmp.code
  • icmp.ident
  • icmp.mtu
  • icmp.redir_gw
  • icmp.seq
  • icmp.type


  • dtp.neighbor
  • dtp.tlv_len
  • dtp.tlv_type
  • dtp.version
  • vtp.neighbor


  • vtp.code
  • vtp.conf_rev_num
  • vtp.followers
  • vtp.md5_digest
  • vtp.md_len
  • vtp.seq_num
  • vtp.start_value
  • vtp.upd_id
  • vtp.upd_ts
  • vtp.version
  • vtp.vlan_info.802_10_index
  • vtp.vlan_info.isl_vlan_id
  • vtp.vlan_info.len
  • vtp.vlan_info.mtu_size
  • vtp.vlan_info.status.vlan_susp
  • vtp.vlan_info.tlv_len
  • vtp.vlan_info.tlv_type
  • vtp.vlan_info.vlan_name_len
  • vtp.vlan_info.vlan_name
  • vtp.vlan_info.vlan_type


  • http.accept_encoding
  • http.accept_language
  • http.accept
  • http.authbasic
  • http.authorization
  • http.cache_control
  • http.connection
  • http.content_encoding
  • http.content_length
  • http.content_type
  • http.cookie
  • http.last_modified
  • http.location
  • http.notification
  • http.proxy_authenticate
  • http.proxy_authorization
  • http.proxy_connect_host
  • http.proxy_connect_port
  • http.referer
  • http.request.method
  • http.request.uri
  • http.request.version
  • http.request
  • http.response.code
  • http.response
  • http.server
  • http.set_cookie
  • http.transfer_encoding
  • http.user_agent
  • http.www_authenticate
  • http.x_forwarded_for

Example Usage

(Adapted from Chris Greer's Blog Post)

  • ip.addr == - Sets a filter for any packet with, as either the source or dest
  • ip.addr== && ip.addr== - sets a conversation filter between the two defined IP addresses
  • tcp.time_delta > .250 - sets a filter to display all tcp packets that have a delta time of greater than 250mSec in the context of their stream
  • tcp.port==4000 - Sets a filter for any TCP packet with 4000 as a source or dest port
  • tcp.flags == 0x012 - Displays all TCP SYN/ACK packets - shows the connections that had a positive response. Related to this is tcp.flags.syn==1
  • ip.addr == - Shows packets to and from any address in the space
  • frame contains traffic - Displays all packets that contain the word β€˜traffic’. Excellent when searching on a specific string or user ID
  • !(arp or icmp or stp) - Masks out arp, icmp, stp, or whatever other protocols may be background noise. Allowing you to focus on the traffic of interest
  • eth[0x47:2] == 01:80 - This is an example of an offset filter. It sets a filter for the HEX values of 0x01 and 0x80 specifically at the offset location of 0x47
  • tcp.analysis.flags && !tcp.analysis.window_update - Displays all retransmissions, duplicate acks, zero windows, and more in the trace. Helps when tracking down slow application performance and packet loss. It will not include the window updates, since these aren't really important for me to see in most cases

My Top 50 Android Apps πŸ“±

These are all the Android applications that I use often, each app on this list serves a purpose and adds value to my day. The developers behind every one of these apps have done an amazing job, and for that, I am thankful. This in part is my motivation for writing this list

This is, in no way a list of ultra-secure, privacy-respecting or fully FOSS apps. In fact, the very idea of having 50 apps on your device goes against the minimalist security principle, and increases attack surface. However, I do carefully manage permissions and connectivity features, blocking internet access for all apps that shouldn't need it

Click the App Name to visit website, the GitHub icon to view source code, and the F-Droid/ Google Play icon to download APK 😊
Note: Any non-opensource apps are indicated with a red cross ❌


  • Aegis - 2-Factor Authentication Token Manager F-Droid GitHub
  • KeePassDX - Password Manager for KeePass files F-Droid GitHub
  • Standard Notes - Secure, Encrypted Cross-Platform Notes F-Droid GitHub
  • K-9 Mail - IMAP Mail Client with Multi-Account Support F-Droid GitHub
  • ProtonMail - Official Client for ProtonMail (PGP Encrypted Email) Google-Play GitHub
  • SimpleLogin - PGP Encrypted Mail Forwarder for Multiple Aliases F-Droid GitHub
  • EteSync - Secure, Encrypted Sync Engine for Calendar, Contacts and Tasks F-Droid GitHub
  • xBrowserSync - Secure Bookmark Storage and Browser Syncing F-Droid GitHub
  • OpenKeychain - OpenPGP for encrypting files and communications F-Droid GitHub
  • EDS Lite - Managing files in encrypted containers F-Droid GitHub


  • NetGuard - Firewall supporting per-app internet blocking and advanced rules F-Droid GitHub
  • Orbot - Routes traffic via Tor network F-Droid Git
  • Mullvad - My VPN of choice F-Droid GitHub
  • WireGuard - VPN for connecting to private networks F-Droid Git
  • Network Manager Pro - Complete suit of Network tools Google-Play ❌


  • Signal - E2E Encrypted Messaging, (not anonymous, as it's linked to mobile number) Google-Play GitHub
  • Briar - Extremity secure and robust communication which can also work locally (via WiFi or Bluetooth) F-Droid Git
  • Element - Matrix Client (Matrix is a privacy-respecting P2P encrypted multi-user chat platform) F-Droid GitHub

Productivity Basics

  • FireFox Focus - Fast & Private browser, with no persistent history and automatic tracker blocking F-Droid GitHub
  • GitHub - Official GitHub client, for managing issues, pull-requests and browsing repositories Google-Play
  • Hour Blocks - Simple hour-by-hour day planner, with calendar support Google-Play ❌
  • Open Camera - Full-featured, privacy-respecting camera app with good feature support F-Droid Git
  • OsmAnd~ Maps - Maps with offline support, public transport directions and turn-by-turn navigation F-Droid GitHub
  • Simple Calendar - Highly customizable, privacy-respecting, offline, easy calendar app F-Droid GitHub
  • Simple Calculator - Just a Calculator app F-Droid GitHub
  • Simple Contacts - Privacy-respecting contacts manager F-Droid GitHub
  • Simple Dialer - Privacy-respecting cellular phone application F-Droid GitHub
  • Tasks - Secure Todo List App with CalDav Sync Capabilities F-Droid GitHub
  • Geometric Weather - Simple weather app, with clean UI, 15-day forecast and detailed outlook Google-Play GitHub
  • Tile - Companion app for Tile Bluetooth Finders (useful for finding keys, wallet, phone, TV remote etc) Google-Play ❌
  • VNC Viewer - Virtual remote desktop app, to access and control PC, Server or other device Google-Play ❌
  • Bible - An offline Bible app, with audio and daily plans Google-Play ❌
  • Loyalty Card Keychain - Securely stores and displays store loyalty cards, with good protocol support F-Droid GitHub


  • AdAway - Ad and tracker blocker that uses hosts file (requires root) F-Droid GitHub
  • SuperFreezZ - Entirely freeze all background activities on a per-app basis F-Droid Git
  • XPrivacyLua - Mocks app permissions fake data (solving the issues caused by revoking permissions) F-Droid GitHub
  • App Manager - Package manager & viewer, with useful privacy & security features F-Droid GitHub
  • OAndBackupX - Backup apps and data, without the need for Google F-Droid GitHub
  • SecScanQR - Fully-featured, privacy-respecting QR code & barcode scanner & generator F-Droid GitHub
  • Island - Isolate and compartmentalize apps for privacy Google-Play GitHub
  • Powerful Monitor - Fully-featured system monitor and RAM cleaner, no trackers Google-Play ❌
  • Exodus - Shows which trackers each app has within it's APK F-Droid GitHub

Home Control

  • FlutterHole - Easy control over local Pi Hole instance F-Droid GitHub
  • Home Assistant - Control all smart home and IoT devices, via self-hosted server F-Droid GitHub
  • Fing - Home Network Security Google-Play ❌
  • Ping Tools - Basic uptime monitor for your servers Google-Play ❌


  • Plex - Stream media from home Plex Server Google-Play GitHub
  • PocketCasts - Podcast Player with Advanced Listening Tools and OPML Support Google-Play ❌
  • Spotify - Music Streaming and Downloads (Premium) Google-Play GitHub ❌
  • Transistor - Internet Radio F-Droid GitHub
  • NewPipe - YouTube Player F-Droid GitHub


  • Developer Assistance - Powerful debugging app for Android development Google-Play GitHub
  • Dev Tools - Essential toolkit for Android development, including decompiling Google-Play GitHub
  • CloudMare - CloudFlare Application Management F-Droid GitHub

Device Customization

  • Total Launcher - Highly Customizable Android Launcher Google-Play ❌
  • KWGT - Advanced Widget Creator Google-Play ❌
  • Automate - Device Macros and Automation, with Home Assistant Compatibility Google-Play ❌


Exodus Privacy

Ξ΅xodus is an awesome service, I don't know how I managed before it came about. It's a privacy audit platform that scans Android APKs for links to known trackers, and generated up-to-date reports for most apps available through Google Play. You can either search an app though their website, or use the Exodus App that scans all installed apps, showing which trackers and permissions they include


I heavily rely on NetGuard, which I use to completely block internet access for all apps that don't absolutely require a network connection. For the remaining applications I control how and when they can connect, usually blocking any network access when the screen is off. An alternative to NetGuard, is TrackerControl, that allows the blocking of individual trackers on a per-app basis, however I use Pi Hole for blocking adds & trackers instead.


Typically, when I'm not activity using my phone, I keep it in my Silent Pocket Faraday case, which has the added benefit of preserving battery life.


When I do connect, I VPN into my home network (I wish I could use WireGuard for this, but currently NetGuard only supports OpenVPN protocol). This provides some additional protection thanks to my firewall, and Pi-Hole is used to block ads and some trackers, it also allows secure access to my locally self-hosted services. All traffic on my home network is routed though Mullvad VPN. Even though this adds several extra hops to my phone's traffic, it doesn't seem to affect speed too much, and the above benefits make it worthwhile.


Sometimes I use Orbot as backup service, but I do find this to be slower, and with a lot of extra CAPTCHAs. Another similar app, but with greater controls is orWall, by @EthACKdotOrg, which is useful for forcing selected apps to use Tor.


Automate is a really handy app for running simple macros and device automation (however it is unfortunately not open source). One of the things I use it for, is turning off WiFi and other connectivity features when I'm not using them. I also have my phone enter airplane mode at nighttime, in order to not distract me (requires root). (Easer an LibreTasks are open source alternatives, but with less functionality)


Island is a really useful sandbox environment, allowing you to clone selected apps and run them in an isolated box, preventing it from accessing your personal data, or device information, and it lets you freeze apps, preventing background tasks from running. It works by utilizing Androids Work Profile feature. It's certainly not fool-proof though, any security bugs in the Android system could lead to data leaks. It's currently not available on F-Droid, an alternative app is Shelter, built by @PeterCxy although I have found it to be less stable.

Monitoring Apps

The more apps installed on a device, the larger the attack surface. 50 is probably too many. The average smart phone user has 100 apps installed on their device- that's defiantly too many. It's important to know what is running in the background, remove apps you no longer use often or that have invasive trackers. App Manager is a really useful package manager, that makes uninstalling unneeded apps easy. Exodus is useful for finding out which trackers are included in each app.

The following apps are not fully open-source, and depending on your threat model, you may wish to avoid them:
Network Manager Pro, Hour Blocks, Tile, VNC Viewer, YouVision Bible, Fing, Ping Tools, PocketCasts, Spotify, Total Launcher, KWGT, Automate
The following apps are open source, but not available on F-Droid, again, this may be a deal breaker for you:
Island, ProtonMail, Signal, GitHub, Geometric Weather, Plex, Developer Assistant, Dev Tools

[QUICK-TIP] Git Submodules

I came across a directory within the DuckDuckGo Android app source code, that when clicked, linked directly to an external repository. I'd not seen this before, and thought it was pretty neat, and it could be insanely useful. I spent a short while Google'ing, trying to figure out the name of this concept, and how to execute it. Eventually found it- it is a Git Tool, called Submodules.

Quick Start

It's simple to add a submodule into your repository, with the following line:

git submodule add<user>/<repo> <path/to/save/at>

Additional Options

  • When cloning a project containing submodules, you will need to use the --recursive flag, if you wish to download all submodules also
  • To update the code within the submodules repositories, you will need to run git submodule update --init --recursive

Problems with Submodules

It's worth nothing, that this may work well for simple use cases, but would not be practical at all for referencing multiple packages. Usually a dependency management system (such as Cargo, NPM, RubyGems, Go Modules etc.) is a better solution.

Git doesn't automatically download submodules after clone (unless you use the --recursive flag), so if this is required for the project to run, you'll need to either document this, or add something into your build script to grab the submodules. Same goes for updates- submodules will not be fetched with a git pull, so git submodule update needs to be run.

There are also the potential security and stability issues this could cause, if you do not manage the repo being included. All in all, submodules are awesome, but for only a very particular use case.

Further Links

Git Documentation:
Git Module File Documentation:
Git Submodule Documentation:
GitModules File Documentation:
GitHub Modules:

Introduction to Digital Privacy & Security πŸ”

TLDR; Privacy is a fundamental right, and essential to democracy, liberty, and freedom of speech. Our privacy is being abused by governments (with mass-surveillance), corporations (profiting from selling personal data), and cyber criminals (stealing our poorly-secured personal data and using it against us). Security is needed in order to keep your private data private, and good digital security is critical to stay protected from the growing risks associated with the war on data.

What is Personal Data?

Personal data is any information that relates to an identified or identifiable living individual. Even data that has been de-identified or anonymized can often still be used to re-identify a person, especially when combined with a secondary data set.

This could be sensitive documents (such as medical records, bank statements, card numbers, etc), or user-generated content (messages, emails, photos, search history, home CCTV, etc) or apparently trivial metadata (such as mouse clicks, typing patterns, time spent on each web page, etc)

How is Data Collected?

One of the most common data collection methods is web tracking. This is when websites use cookies, device fingerprints, and other methods to identify you, and follow you around the web. It is often done for advertising, analytics, and personalization. When aggregated together, this data can paint a very detailed picture of who you are.

How is Data Stored?

Data that has been collected is typically stored in databases on a server. These servers are rarely owned by the companies managing them, 56% of servers are owned by Amazon AWS, Google Cloud, and Microsoft Azure. If stored correctly the data will be encrypted, and authentication required to gain access. However that usually isn't the case, and large data leaks occour almost dailey. As well as that data breaches occur, when an adversary compromises a database storing personal data. In fact, you've probably already been caught up in a data breach (check your email, at have i been pwned)

What is Personal Data Used For?

Data is collected, stored and used by governments, law enforcement, corporations and sometimes criminals:

Government Mass Surveillance

Intelligence and law enforcement agencies need surveillance powers to tackle serious crime and terrorism. However, since the Snowden revelations, we now know that this surveillance is not targeted at those suspected of wrongdoing- but instead the entire population. All our digital interactions are being logged and tracked by our very own governments.

Mass surveillance is a means of control and suppression, it takes away our inerrant freedoms and breeds conformity. When we know we are being watched, we subconsciously change your behavior. A society of surveillance is just 1 step away from a society of submission.


On the internet the value of data is high. Companies all want to know exactly who you are and what you are doing. They collect data, store it, use it and sometimes sell it on.

Everything that each of us does online leaves a trail of data. These traces make up a goldmine of information full of insights into people on a personal level as well as a valuable read on larger cultural, economic and political trends. Tech giants (such as Google, Facebook, Apple, Amazon, and Microsoft) are leveraging this, building billion-dollar businesses out of the data that are interactions with digital devices create. We, as users have no guarantees that what is being collected is being stored securely, we often have no way to know for sure that it is deleted when we request so, and we don't have access to what their AI systems have refered from our data.

Our computers, phones, wearables, digital assistants and IoT have been turned into tracking bugs that are plugged into a vast corporate-owned surveillance network. Where we go, what we do, what we talk about, who we talk to, and who we see – everything is recorded and, at some point, leveraged for value. They know us intimately, even the things that we hide from those closest to us. In our modern internet ecosystem, this kind of private surveillance is the norm.


Hackers and cybercriminals pose an ongoing and constantly evolving threat. With the ever-increasing amount of our personal data being collected and logged - we are more vulnerable to data breaches and identity fraud than ever before.

In the same way, criminals will go to great lengths to use your data against you: either through holding it ransom, impersonating you, stealing money or just building up a profile on you and selling it on, to another criminal entity.

Why Data Privacy Matters

Data Privacy and Freedom of Speech

Privacy is a fundamental right, and you shouldn't need to prove the necessity of fundamental right to anyone. As Edward Snowden said, "Arguing that you don't care about the right to privacy because you have nothing to hide is no different than saying you don't care about free speech because you have nothing to say". There are many scenarios in which privacy is crucial and desirable like intimate conversations, medical procedures, and voting. When we know we are being watched, our behavior changes, which in turn suppresses things like free speech.

Data Can Have Control Over You

Knowledge is power; Knowledge about you is power over you. Your information will be used to anticipate your actions and manipulate the way you shop, vote, and think. When you know you are being watched, you subconsciously change your behavior. Mass surveillance is an effective, means of fostering compliance with social norms or with social orthodoxy. Without privacy, you might be afraid of being judged by others, even if you're not doing anything wrong. It can be a heavy burden constantly having to wonder how everything we do will be perceived by others.

Data Can Be Used Against You

Your personal information and private communications can be "cherry-picked" to paint a certain one-sided picture. It can make you look like a bad person, or criminal, even if you are not. Data often results in people not being judged fairly- standards differ between cultures, organisations, and generations. Since data records are permanent, behavior that is deemed acceptable today, may be held against you tomorrow. Further to this, even things we don't think are worth hiding today, may later be used against us in unexpected ways.

Data Collection Has No Respect For Boundaries

Data collection has no respect for social boundaries, you may wish to prevent some people (such as employers, family or former partners) from knowing certain things about you. Once you share personal data, even with a party you trust, it is then out of your control forever, and at risk of being hacked, leaked or sold. An attack on our privacy, also hurts the privacy of those we communicate with.

Data Discriminates

When different pieces of your data is aggregated together, it can create a very complete picture of who you are. This data profile, is being used to influence decisions made about you: from insurance premiums, job prospects, bank loan eligibility and license decisions. It can determine whether we are investigated by the government, searched at the airport, or blocked from certain services. Even what content you see on the internet is affected by our personal data. This typically has a bigger impact on minority groups, who are unfairly judged the most. Without having the ability to know or control what, how, why and when our data is being used, we loose a level of control. One of the hallmarks of freedom is having autonomy and control over our lives, and we can’t have that if so many important decisions about us are being made in the dark, without our awareness or participation.

The "I Have Nothing to Hide" Argument

Privacy isn’t about hiding information; privacy is about protecting information, and everyone has information that they’d like to protect. Even with nothing to hide, you still put blinds on your window, locks on your door, and passwords on your email account.- Nobody would want their search history, bank statements, photos, notes or messages to be publicly available to the world.

Data Privacy needs to be for Everyone

For online privacy to be effective, it needs to be adopted my the masses, and not just the few. By exercising your right to privacy, you make it easier for others, such as activists and journalists, to do so without sticking out.

So What Should we Do?

  • Educate yourself about what's going on and why it matters
  • Be aware of changes to policies, revelations, recent data breaches and related news
  • Take steps to secure your online accounts and protect your devices
  • Understand how to communicate privately, and how use the internet anonymously
  • Use software and services that respect your privacy, and keep your data safe
  • Support organisations that fight for your privacy and internet freedom
  • Find a way to make your voice heard, and stand up for what you believe in

Thanks for reading :)

Recently I have been working on writing up a checklist of privacy and security tips, as well as a list of privacy-respecting software. Both are hosted on GitHub, so that anyone can contribute to it:

[HOW-TO] Remove all node_modules folders πŸ—‘οΈ

Node Modules killing your hard drive space? Manually finding and removing is a pain, so here are some simple solutions

Option #1 - Natively

From your desired entry point, all you need to do, is run:

$ find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

⚠️ This will delete all nested node_modules directories, and their contents ⚠️

If you'd first like to list of all node_modules within your current directory, you can run:

$ find . -name "node_modules" -type d -prune -print | xargs du -chs

This'll output the path, and total size of each occurrence of node_modules, and finish of by showing to cumulative total size

Option #1 - NPKill

NPKill is a simple, yet effective package that finds and removes all node_modules folders within your system.

After installing (with npm i -g npkill), just run npkill to start the CLI. From there you will be able to see all node_modules directories, along with their size and other meta data. You can then choose to delete them one-by-one, or all instances within certain parameters.

Gif: Searching for all node_modules Gif: Deleting selected, or all node_modules

Note for Windows users

The above options are for Unix systems (Linux/ MacOS), if you need to do this natively, try the following commands, (thanks to Sahil Malik).

View which folders will be deleted:

FOR /d /r . %d in (node_modules) DO @IF EXIST "%d" echo %d"

Initiate the Extermination:

FOR /d /r . %d in (node_modules) DO @IF EXIST "%d" rm -rf "%d"

Done πŸ˜€ πŸ–±οΈ

Working remotley? Sick and tired of having to get out of bed every 20 minutes to move your mouse, to prevent Slack/ Skype/ Teams from showing your status as Away? Well with a couple lines of bash, you can have your mouse pointer periodically move, ensureing your status will always remain Active. Your boss will be none the wiser

# LENGTH is the amount of px the mouse will move
# 0 = not moving at all, 1 = tiny movement, 100 = giant movement

# DELAY is the time period between movements, in seconds

while true
    for ANGLE in 0 90 180 270
        xdotool mousemove_relative --polar $ANGLE $LENGTH
          sleep $DELAY

The pointer will move around its current position on the screen (i.e where you last placed it). However, if you prefer it to move around the centre of the screen, just change mousemove_relative to mousemove in the xdotool command.

[HOW-TO] Compile & Install Software on Arch πŸ—οΈ

Quick reference of the common commands, to install packages on Arch Linux

Option #1 - Pacman

If the app is availible through AUR, then you can simply use the pacman package manager

## Install
$ sudo pacman -S {package-name(s)}

## Get Details
$ pacman -Qi {package-name}

## Remove
$ sudo pacman -R {package-name}

Option #2 - Manually

Using the makepkg script to build the package from source

## 1. Get the code (E.g. from AUR, GitHub)
$ wget{package-name}.tar.gz
$ tar -xvzf  {package-name}.tar.gz
$ cd {package-name}

## 2. Compile the package
$ makepkg -s

## 3. Install the app
$ sudo pacman -U *xz

Option #2 - from .deb

If only a .deb file is availible, you can convert it using debtap

## 1. Get debtap (first time), and optionally create an alias
$ git clone
$ alias debtap='. .path/to/debtap'

## 1. Download the .deb package you wish to install, e.g.
$ git clone {url-to-package.git}
$ cd {package-name}

## 3. Convert .deb to Arch package
$ debtap packagetoconvert.deb

## 4. Install the converted package to system
$ debtap -U *

Usefull Info:

key-mirror.ts πŸͺž

A quick function to construct an enumeration which has keys the same as their value

This used to be part of React, but since it's now been removed (See commit: #56f5115), and some older packages throw an error without it, I've updated it, and uploading in case anyone else needs it while working with older React packages. A copy of React's original, JavaScript version can be found here.

 * (C) Alicia Sykes <>
 * Licensed under MIT X11:
 * Constructs an enumeration with keys equal to their value.
 * @param {object} obj
 * @return {object}
export function keyMirror(originObj: object) {
  if (typeof originObj !== 'object')
    throw new Error('keMirror(...): Argument must be an object');
  const obj: any = {};
  for (const key in originObj) {
    if (originObj.hasOwnProperty(key)) obj[key] = key;
  return obj

React Grid System βš›οΈ

 * This is a little grid system I built, for React projects.
 * It is based on the css-grid prroperties, and it's cool because 
 * it doesn't need any dependencies and is super minimal, yet still fully functional.
 * This implementation is a React component, in TypeScript using styled-components.

// FILE 1 - layout/index.ts

import Grid from './Grid';
import Cell from './Cell';

export { Grid, Cell };
// FILE 2 - layout/cell.ts

import styled from 'styled-components';
import { maxWidth } from '@styles/media-queries';

interface CellProps {
  left?: number; // The horizontal starting position
  width?: number; // How many cells to span, horizontally
  top?: number; // The vertical starting position
  height?: number; // How many cells to span, vertically
  className?: string; // So Cell can optionally be used as a styled container

const Cell = styled.div<CellProps>`
  ${props => {
    const { left, width, top, height } = props;
    return `
    grid-column-start: ${left || 'unset'};
    grid-column-end: ${width ? `span ${width}` : 'unset'};
    grid-row-start: ${top || 'unset'};
    grid-row-end: ${height ? `span ${height}` : 'unset'};
    overflow-x: hidden;
    overflow-wrap: break-word;
    word-wrap: break-word;
      // For tablet and above
      grid-column-start: unset;
      grid-row-start: unset; 

export default Cell;
// FILE 3 - layout/grid.ts

import React from 'react';
import styled from 'styled-components';
import { gridValues } from '@styles/sizes';
import { minWidth } from '@styles/media-queries';

const GridWrapper = styled.div<{ columns?: number; gutterOutside?: boolean }>`
  ${({ columns, gutterOutside }) => {
    const { maxGridWidth, gutter, minRowHeight, minColWidth, numCols } = gridValues(columns);

    const desktop = gridValues(columns, 8, 4);

    return `
      max-width: ${maxGridWidth};
      margin: 0 auto;
      display: grid;
      grid-gap: ${gutter};
      padding: 0 ${gutterOutside ? gutter : 0}
      grid-auto-rows: minmax(${minRowHeight}, auto);
      grid-template-columns: repeat(auto-fit, minmax(${minColWidth}, 1fr));

      // For tablet and above
        grid-template-columns: repeat(${numCols}, 1fr);

      // For desktop and above
        max-width: ${desktop.maxGridWidth};
        grid-gap: ${desktop.gutter};

const Grid: React.FC<{ className?: string; columns?: number; gutterOutside?: boolean }> = ({
}) => (
  <GridWrapper className={className} columns={columns} gutterOutside={gutterOutside}>

export default Grid;
// FILE 4 - layout/grid-dimensions.ts

expoert const gridValues = (columns = 12, colWidth = 8, gutterWidth = 2) => ({
  maxGridWidth: sizeUnit(columns * colWidth + (columns - 1) * gutterWidth),
  gutter: sizeUnit(gutterWidth),
  minRowHeight: sizeUnit(5),
  minColWidth: sizeUnit(colWidth),
  numCols: columns,