{"id":15519114,"url":"https://github.com/i80and/quelt","last_synced_at":"2025-11-11T23:34:47.332Z","repository":{"id":2099881,"uuid":"3040866","full_name":"i80and/quelt","owner":"i80and","description":"A simple and fast offline Wikipedia reader","archived":false,"fork":false,"pushed_at":"2012-12-01T15:38:22.000Z","size":168,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-02T23:56:43.153Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/i80and.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-12-23T15:36:55.000Z","updated_at":"2013-10-18T17:34:21.000Z","dependencies_parsed_at":"2022-08-26T13:51:12.626Z","dependency_job_id":null,"html_url":"https://github.com/i80and/quelt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i80and%2Fquelt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i80and%2Fquelt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i80and%2Fquelt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i80and%2Fquelt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/i80and","download_url":"https://codeload.github.com/i80and/quelt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246093177,"owners_count":20722400,"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","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-02T10:20:17.694Z","updated_at":"2025-10-25T04:05:21.077Z","avatar_url":"https://github.com/i80and.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Quelt\n=====\nA lightweight offline Wikipedia reader.\n\nCompilation Requirements\n------------\n* C99 compiler\n* Unix environment.  Some win32 shims exist, but they are untested.\n* Expat (only for quelt-split)\n* Zlib\n\nBuilding\n--------\n    $ make\n\nUsage\n-----\n    $ ./quelt-split [path to XML dump] [-v]\n    $ ./quelt [part of title] --search [--plain]\n    $ ./quelt [exact title] [--plain]\n\nFile format\n-----------\nThe initial plan was for Quelt to use a separate file for every article, using\nthe path for the article name.  A cute idea, but reality set in fairly quickly:\n\n* Filename restrictions, especially on NTFS\n* Standard filesystem tools are not built to handle 3 million+ files easily\n\nSo instead, a custom binary format is used with two files: `quelt.db`, and\n`quelt.index`.\n\n`quelt.index`:\n\n    | n_articles:       Int32\n    | segment_length:   Int32\n    | article 0 title:  Byte[255]\n    | article 0 offset: Int64\n    | article 1 title:  Byte[255]\n    | article 1 offset: Int64\n    | article n title:  Byte[255]\n    | article n offset: Int64\n\n`quelt.db` is a concatenated sequence of zlib streams, where the start of each\narticle is given by the article offsets in `quelt.index`.\n\nThe index is broken up into segments, all of which (except the last) are of\nlength `segment_length` and sorted independently.  This gives an efficient\naverage search time of `O((n_segments/2) * log(segment_length))` comparisons\nvia a series of binary searches, while still allowing quelt and quelt-split to\nrun on memory-constrained machines.  Note that this could be used as the first\nstep to a real external merge sort.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi80and%2Fquelt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fi80and%2Fquelt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi80and%2Fquelt/lists"}