{"id":15632657,"url":"https://github.com/jamiew/blackbook","last_synced_at":"2025-10-27T04:09:51.950Z","repository":{"id":615131,"uuid":"253557","full_name":"jamiew/blackbook","owner":"jamiew","description":"#000000book  - an open database for Graffiti Markup Language (GML) files","archived":false,"fork":false,"pushed_at":"2025-09-29T04:20:40.000Z","size":6597,"stargazers_count":33,"open_issues_count":8,"forks_count":2,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-10-05T18:58:38.457Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://000000book.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamiew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2009-07-17T13:48:22.000Z","updated_at":"2025-10-02T01:56:58.000Z","dependencies_parsed_at":"2023-07-05T15:01:22.686Z","dependency_job_id":"e708fdea-dc09-44b6-939a-4433c1061f04","html_url":"https://github.com/jamiew/blackbook","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jamiew/blackbook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamiew%2Fblackbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamiew%2Fblackbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamiew%2Fblackbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamiew%2Fblackbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamiew","download_url":"https://codeload.github.com/jamiew/blackbook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamiew%2Fblackbook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278503204,"owners_count":25997718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T10:44:52.209Z","updated_at":"2025-10-05T18:58:40.129Z","avatar_url":"https://github.com/jamiew.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"![000000book-handshake](https://000000book.com/images/000000book-handshake.jpg)\n\n# About\n\n**000000book** (\"blackbook\") is an open repository for sharing and archiving motion captured graffiti tags. Tags are saved as digital text files known as GML (Graffiti Markup Language), which can be captured through freely available software such as [Graffiti Analysis](http://graffitianalysis.com) (marker), [DustTag](http://graffitianalysis.com/iphone) (iPhone), [EyeWriter](http://eyewriter.org) (eye capture), [Laser Tag](http://graffitiresearchlab.com/?page_id=76) (laser).\n\nGraffiti writers are invited to capture and share their own tags, and computer programmers are invited to create new applications and visualizations of the resulting data. The project aims to bring together two seemingly disparate communities that share an interest hacking systems, whether found in code or in the city.\n\n→ Watch: [000000book Intro Video](http://vimeo.com/8072358)\n\n## API\n\nPlease visit the [API documentation](http://jamiedubs.com/wikis/blackbook/).\n\n## Team\n\nThe GML and **#000000book** development team consists of [Jamie Wilkinson](http://jamiedubs.com),\n[Evan Roth](http://evan-roth.com), [Theodore Watson](http://www.theowatson.com),\n[Chris Sugrue](http://csugrue.com/) and [Todd Vanderlin](http://toddvanderlin.com/),\nall members of the copyleft [F.A.T. Lab](http://fffff.at).\n\nAdditional Flash development assistance from [Manolis Perrakis](http://art.manorius.com/)\n\nContact us: _info[at]000000book.com_\n\nCode available under an MIT License\n\nCopyfree 2009-2023 F.A.T.\u003cbr /\u003e\n\"Release early, often \u0026 w/ rap music\"\n\n![gml-file](https://000000book.com/images/gml-file.png)\n\n---\n\n# Development Setup (Rails 7)\n\nThis application has been updated to **Rails 7.1.5** and **Ruby 3.4.5** for modern compatibility.\n\n## Prerequisites\n\n- **Ruby 3.0+** (recommended: 3.4.5 - see `.ruby-version`)\n- **Rails 7.1+** (currently 7.1.5)\n- **MySQL 5.7+** or **MySQL 8.0+** \n- **Node.js 16+** (for asset compilation)\n- **Bundler 2.0+**\n\n### Version Compatibility\nThis app is fully compatible with:\n- Ruby 3.0, 3.1, 3.2, 3.3, 3.4+\n- Rails 7.0, 7.1+\n- Modern deployment platforms (Heroku, Docker, etc.)\n\n## Getting Started\n\n### 1. Clone and Install Dependencies\n\n```bash\ngit clone [repository-url]\ncd blackbook\nbundle install\n```\n\n### 2. Database Setup\n\n```bash\n# Create and migrate database\nbin/rails db:create\nbin/rails db:migrate\n\n# Optional: Load sample data\nbin/rails db:seed\n```\n\n### 3. Credentials Configuration\n\nThis app uses Rails encrypted credentials (Rails 7 standard):\n\n```bash\n# View current credentials\nbin/rails credentials:show\n\n# Edit credentials (opens in $EDITOR)\nbin/rails credentials:edit\n```\n\n**Important**: The `config/master.key` is auto-generated and should never be committed to git.\n\n#### Current Credentials Structure\n```yaml\n# Available in credentials:\nsecret_key_base: [automatically generated]\n\n# Optional AWS configuration (for S3 storage):\naws:\n  access_key_id: your_access_key\n  secret_access_key: your_secret_key\n```\n\n#### Environment Variables\nSome configuration can also be set via environment variables:\n- `S3_BUCKET` - AWS S3 bucket name for file storage\n- `AWS_ACCESS_KEY_ID` - AWS access key (alternative to credentials)  \n- `AWS_SECRET_ACCESS_KEY` - AWS secret key (alternative to credentials)\n\n### 4. Start the Application\n\n```bash\n# Development server\nbin/rails server\n\n# Visit: http://localhost:3000\n```\n\n## Data Storage\n\nThe application stores data in two places:\n\n1. **Database**: Standard Rails models (users, tags, comments, etc.)\n2. **GML Files**: Raw graffiti markup files stored in `/data/` directory\n   - Format: `{tag_id}.gml`\n   - Managed by `GmlObject` model\n\n## Useful Rake Tasks\n\n### GML Data Management\n```bash\n# Save all GmlObjects to disk\nbin/rails gml_objects:save_to_disk\n\n\n# Fix missing GmlObjects\nbin/rails gml_objects:fix_missing\n```\n\n### Data Cleanup\n```bash\n# Find tags with missing data\nbin/rails tags:find_missing_data\n\n# Clean up spam users\nbin/rails cleanup_spam\n```\n\n## Deployment\n\nThe application includes a deployment script at `./deploy` that:\n- Syncs code from git\n- Links production data directory\n- Runs migrations\n- Compiles assets\n- Restarts services\n\n## Rails 7 Migration Notes\n\nThis app was recently upgraded from Rails 4.2 to Rails 7.1. Major changes include:\n\n- **Credentials**: Moved from `config/secrets.yml` to encrypted `config/credentials.yml.enc`\n- **Strong Parameters**: Added to all controllers\n- **Modern Validations**: Updated from `validates_presence_of` to `validates` syntax\n- **Asset Pipeline**: Updated for Rails 7 asset handling\n- **Turbo**: Replaced Turbolinks with Turbo (Rails 7 default)\n\n## Development Notes\n\n- **No Rails Console in Production**: Use `RAILS_ENV=production bin/rails runner \"code here\"`\n- **Asset Compilation**: `bin/rails assets:precompile` for production\n- **Background Jobs**: None currently configured\n- **File Uploads**: Uses kt-paperclip gem for image attachments\n\n## Troubleshooting\n\n### Common Issues\n\n**Missing Master Key**\n```bash\n# If you get \"Rails.application.credentials is missing\" error:\n# The master key should be in config/master.key (gitignored)\n# For production, set RAILS_MASTER_KEY environment variable\n```\n\n**Database Connection**\n```bash\n# Check database configuration\ncp config/database.yml.example config/database.yml  # if needed\nbin/rails db:create\n```\n\n**Asset Issues**\n```bash\n# Clear and recompile assets\nbin/rails assets:clobber\nbin/rails assets:precompile\n```\n\n**GML Data Directory**\n```bash\n# Create data directory if missing\nmkdir -p data\n# Check permissions\nchmod 755 data\n```\n\n## API Documentation\n\nFor API usage, see: [API documentation](http://jamiedubs.com/wikis/blackbook/)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamiew%2Fblackbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamiew%2Fblackbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamiew%2Fblackbook/lists"}