Archiving Street Art in a distributed manner

Graffiti

Repository provides a tool for graffiti community to keep track and preserving street artwork in their areas.

Features

Distributed storage

The core of the project are geotagged photos stored in IPFS, meaning they are not stored in a central database, allowing users to only maintain the photos they are interested in. The data will be reachable as long as there is someone sharing them.

Metadata

The maintained graffiti collection can be annotated by the user in metadata, specifying OpenStreetMap node as a surface and tags for photos for better searchability.

Requirements

Getting started

docker-compose up -d --build

In Docker log you should see the process is waiting for getting IPFS content:

graffiti-collection | 05:12:52.059 main — INFO 001 parsing graffiti metadata JSON file
graffiti-collection | 05:12:52.065 main — DEBU 002 parsed JSON with 545 elements
graffiti-collection | 05:12:52.065 main — INFO 003 getting IPFS content

This could take a few minutes to the fresh IPFS setup to discover the content source and start downloading images. On localhost, you can monitor your IPFS instance running at https://localhost:5001/webui.

When the downloading starts, you should observe the following log:

graffiti-collection | 05:16:05.238 main — DEBU 004 got metadata of 554 photos from IPFS
graffiti-collection | 05:16:06.207 main — DEBU 005 got raw tar of photos from IPFS: *shell.trailerReader: &{0xc000092120}
graffiti-collection | 05:16:06.209 main — INFO 006 parsing EXIF data from photos
graffiti-collection | 05:16:06.209 main — DEBU 007 parsing EXIF data for photo: IMG_20180216_000759.jpg
graffiti-collection | 05:16:06.211 main — DEBU 008 parsing EXIF data for photo: IMG_20180217_190142.jpg
...
graffiti-collection | 05:58:55.457 main — INFO 25c serving complete content at :8083/api
graffiti-collection | 05:58:55.457 main — INFO 25d serving geotagged content at :8083/geojson

When the data are served, the working map should be available on http://localhost:3000/.

Troubleshooting

If the graffiti-collection container is hanging on getting IPFS content, it is probably because the route to content has not been discovered. To help the discovery, by adding the peer distributing IPFS content:

docker exec -it graffiti-ipfs sh
#ipfs bootstrap add <peer>
ipfs bootstrap add /ip4/192.168.10.1/tcp/4001/ipfs/QmQVvZEmvjhYgsyEC7NvMn8EWf131EcgTXFFJexample3
exit

If you have problem sharing your content and your device is behind NAT, configure port forwarding: https://docs.ipfs.io/how-to/nat-configuration/#port-forwarding.

If issues still persist, refer to https://github.com/ipfs/go-ipfs/blob/master/docs/file-transfer.md#troubleshooting.

Learn more

Similar Resources

A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks.

A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks.

Hyprspace A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks. demo.mp4 Table of Contents A Bit of Backstory Use Cases A Digital N

Dec 29, 2022

🌐 (Web 3.0) Pastebin built on IPFS, securely served by Distributed Web and Edge Network.

🌐 (Web 3.0) Pastebin built on IPFS, securely served by Distributed Web and Edge Network.

pastebin-ipfs 简体中文 (IPFS Archivists) Still in development, Pull Requests are welcomed. Pastebin built on IPFS, securely served by Distributed Web and

Jan 1, 2023

Coroutine based Deterministic 2PC Distributed Transaction

Enviorment set up off the mod go env -w GO111MODULE=off change to GPATH to project directory go env -w GOPATH=$HOME/coroprove Usage This project serve

Oct 30, 2021

A distributed Layer 2 Direct Server Return (L2DSR) load balancer for Linux using XDP/eBPF

VC5 A distributed Layer 2 Direct Server Return (L2DSR) load balancer for Linux using XDP/eBPF This is very much a proof of concept at this stage - mos

Dec 22, 2022

Enable requests served by caddy for distributed tracing via The OpenTracing Project.

caddy-opentracing Enable requests served by caddy for distributed tracing via The OpenTracing Project. Dependencies The Go OpenTracing Library Jaeger,

Sep 30, 2022

A simple distributed key-value store by using hashicorp/raft

raftkv This repository holds a simple distributed key-value store by using hashicorp/raft. raftkv provides gRPC and HTTP APIs. Please take a look API

Nov 30, 2022

Simple HTTP/HTTPS proxy - designed to be distributed as a self-contained binary that can be dropped in anywhere and run.

Simple Proxy This is a simple HTTP/HTTPS proxy - designed to be distributed as a self-contained binary that can be dropped in anywhere and run. Code b

Jan 7, 2023

Go-Generative-Art-A - Generate PNG art from source images! GOLang Generative Art

Go-Generative-Art-A - Generate PNG art from source images! GOLang Generative Art

GO Lang Generative Art Tool A Take source images and generate art utilizing sour

Nov 21, 2022

Server for Pragyan's Dalal Street

Server for Dalal Street Prerequisites Go 1.13 Download link Protocol buffers Download link MySQL Check prerequisites Check the go version installed. g

Dec 22, 2022

Alternative archiving tool with fast performance for huge numbers of small files

fast-archiver fast-archiver is a command-line tool for archiving directories, and restoring those archives written in [Go](http://golang.org). fast-ar

Nov 22, 2022

Software for archiving my digital stuff like tweets

rsms's memex Software for managing my digital information, like tweets. Usage First check out the source and build. You'll need Make and Go installed.

Nov 17, 2022

A twitch focused command line tool for producing, archiving and managing live stream content. Built for Linux.

twinx is a live-streaming command line tool for Linux. It connects streaming services (like Twitch, OBS and YouTube) together via a common title and description.

Oct 17, 2022

Molecule is a Go library for parsing protobufs in an efficient and zero-allocation manner

Molecule Molecule is a Go library for parsing protobufs in an efficient and zero-allocation manner. The API is loosely based on this excellent Go JSON

Jan 5, 2023

A project for sharing secrets in a quick and secure manner

A project for sharing secrets in a quick and secure manner

Yopass - Share Secrets Securely Yopass is a project for sharing secrets in a quick and secure manner*. The sole purpose of Yopass is to minimize the a

Sep 28, 2021

Naabu - a port scanning tool written in Go that allows you to enumerate valid ports for hosts in a fast and reliable manner

Naabu - a port scanning tool written in Go that allows you to enumerate valid ports for hosts in a fast and reliable manner

Naabu is a port scanning tool written in Go that allows you to enumerate valid ports for hosts in a fast and reliable manner. It is a really simple tool that does fast SYN/CONNECT scans on the host/list of hosts and lists all ports that return a reply.

Jan 2, 2022

BuildKit - A toolkit for converting source code to build artifacts in an efficient, expressive and repeatable manner

BuildKit - A toolkit for converting source code to build artifacts in an efficient, expressive and repeatable manner

BuildKit BuildKit is a toolkit for converting source code to build artifacts in an efficient, expressive and repeatable manner. Key features: Automati

Feb 19, 2022

This library provides a metrics package which can be used to instrument code, expose application metrics, and profile runtime performance in a flexible manner.

This library provides a metrics package which can be used to instrument code, expose application metrics, and profile runtime performance in a flexible manner.

Jan 18, 2022

Govuln - How to patch a vulnerability indirectly lifted into a Go Lang application in a manner which satsfies Twistlock scanning

govuln Desire to learn how to patch a vulnerability indirectly lifted into a Go

Feb 2, 2022

Terraform Controller manages the life cycles of a terraform resource, allowing developers to self-serve dependencies in a controlled manner.

Terraform Controller manages the life cycles of a terraform resource, allowing developers to self-serve dependencies in a controlled manner.

TERRAFORM CONTROLLER Terraform Controller manages the life cycles of a terraform resource, allowing developers to self-serve dependencies in a control

Dec 15, 2022
Comments
  • Use multiple IPFS directories as source

    Use multiple IPFS directories as source

    This starts to process images, but fails with

    ...
    20:53:55.045 main — DEBU 247 parsing EXIF data for photo: IMG_20190301_200810.jpg
    20:53:55.047 main — DEBU 248 parsing EXIF data for photo: IMG_20180216_000759.jpg
    error 2 in extractor: EOF
    panic: error while loading following record
    
    goroutine 1 [running]:
    main.main()
            /home/rblanco/devel/graffiti-docker/graffiti/collection/main.go:151 +0x2646
    exit status 2
    
A suite of tools for NFT generative art.

nftool A suite of tools for NFT generative art. Features Traits/Attributes/Properties Generation Configure custom rarity Generate collection attribute

Dec 15, 2022
MPD client inspired by ncmpcpp written in GO with builtin cover art previews.
 MPD client inspired by ncmpcpp written in GO with builtin cover art previews.

goMP MPD client inspired by ncmpcpp written in GO demo.mp4 Roadmap Add Functionality to Sort out most played songs Add a config parser Image Previews

Jan 1, 2023
🌕 Server application for storing doujinshi, manga, art collections and other galleries with API and user control. Written in Go.

?? Server application for storing doujinshi, manga, art collections and other galleries with API and user control. Written in Go.

Dec 31, 2022
Tapestry is an underlying distributed object location and retrieval system (DOLR) which can be used to store and locate objects. This distributed system provides an interface for storing and retrieving key-value pairs.

Tapestry This project implements Tapestry, an underlying distributed object location and retrieval system (DOLR) which can be used to store and locate

Mar 16, 2022
A cloud native distributed streaming network telemetry.
A cloud native distributed streaming network telemetry.

Panoptes Streaming Panoptes Streaming is a cloud native distributed streaming network telemetry. It can be installed as a single binary or clustered n

Sep 27, 2022
Go language interface to the Libcircle distributed-queue API

Circle Description The Circle package provides a Go interface to the Libcircle distributed-queue API. Despite the name, Circle has nothing to do with

Oct 24, 2022
A consistent distributed data store.
A consistent distributed data store.

Doozer What Is It? Doozer is a highly-available, completely consistent store for small amounts of extremely important data. When the data changes, it

Jan 6, 2023
Distributed RTC System by pure Go and Flutter
Distributed RTC System by pure Go and Flutter

ION is a distributed real-time communication system, the goal is to chat anydevice, anytime, anywhere! Distributed Real-time Communication System ION

Jan 2, 2023
Golang implementation of Sliding Window Algorithm for distributed rate limiting.
Golang implementation of Sliding Window Algorithm for distributed rate limiting.

slidingwindow Golang implementation of Sliding Window Algorithm for distributed rate limiting. Installation $ go get -u github.com/RussellLuo/slidingw

Dec 27, 2022
Antenna RPC is an RPC protocol for distributed computing, it's based on QUIC and Colfer. its currently an WIP.

aRPC - Antenna Remote Procedure Call Antenna remote procedure call (aRPC) is an RPC protocol focused on distributed processing and HPC. aRPC is implem

Jun 16, 2021