{"id":35248359,"url":"https://github.com/nukep/famitracker-cx","last_synced_at":"2026-03-17T16:07:40.559Z","repository":{"id":16188405,"uuid":"18935010","full_name":"nukep/famitracker-cx","owner":"nukep","description":null,"archived":false,"fork":false,"pushed_at":"2015-09-05T03:20:36.000Z","size":2138,"stargazers_count":29,"open_issues_count":2,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-02T12:45:47.544Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","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/nukep.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}},"created_at":"2014-04-19T06:09:03.000Z","updated_at":"2025-01-31T08:15:50.000Z","dependencies_parsed_at":"2022-09-19T02:02:07.625Z","dependency_job_id":null,"html_url":"https://github.com/nukep/famitracker-cx","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/nukep/famitracker-cx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nukep%2Ffamitracker-cx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nukep%2Ffamitracker-cx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nukep%2Ffamitracker-cx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nukep%2Ffamitracker-cx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nukep","download_url":"https://codeload.github.com/nukep/famitracker-cx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nukep%2Ffamitracker-cx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30626914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T14:16:03.965Z","status":"ssl_error","status_checked_at":"2026-03-17T14:16:03.380Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2025-12-30T06:12:11.568Z","updated_at":"2026-03-17T16:07:40.554Z","avatar_url":"https://github.com/nukep.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FamiTracker CX\n\n**This is an old project that I worked on. It has since been discontinued.**\nI'm putting it here for \"historical\" reasons.\n\nMost of the core code is written by Jonathan Liss (jsr) and other contributors,\nas taken from the original FamiTracker project at\n[http://famitracker.com/](http://famitracker.com/). Almost everything in the\n`famitracker-core` directory, with some changes by me, is written by him.\nEverything else not in `famitracker-core` is written by Dan Spencer.\n\n## What is FamiTracker CX?\nFamiTracker CX is a free cross-platform fork of FamiTracker.\n\nFamiTracker CX is created in order to bring the popular NES/Famicom music\ntracker to Linux. More platforms such as Mac OS X are planned when circumstances\npermit them.\n\nThe optional GUI is rewritten from scratch using the cross-platform Qt 4\nlibrary. An ncurses player is also available for terminal nerds.\n\nALSA and JACK are the two supported audio APIs. More are planned as the Windows\nand OS X ports are completed.\n\nThe software license is mixed GPL v2/New BSD.\n\n![Screenshot 1](img/screenshot1.png)\n![Screenshot 2](img/screenshot2.png)\n\n## Post-Mortem\n### Challenges\n* Porting MFC/Win32 to Qt\n* Modularising the original code into reusable components, as a requirement to\n  allow for many UI frontends.\n  (the original kept all .cpp files in a single directory!)\n* Lingering undefined behavior created bugs in the Linux version\n\n### Coding Mistakes in FamiTracker CX\n* The \"thread pool\" is not actually a thread pool, but a message queue.\n* Using the `type_t` notation on structs and not typedefs.\n* Using global state to keep document data for the Qt GUI.\n* The sound sink implementations abused inheritence, leading to many audio bugs.\n\n### If this project were attempted again\nCloser coordination with the original author (jsr) to organize the code base to\nbecome reusable. There would have been much to ask from jsr, such as keeping a\ndevelopment branch available at all times through Git or some other DVCS.\nThat alone I think would have solved many of the problems being addressed\nby this project.\n\nUltimately, many open source projects suffer from organizational issues.\nThis is a primary reason I think forks of projects are created instead of\neveryone contributing to a single project. That's why I created a fork\nfor FamiTracker CX, but it was probably a misplaced reason.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnukep%2Ffamitracker-cx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnukep%2Ffamitracker-cx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnukep%2Ffamitracker-cx/lists"}