{"action":"created","issue":{"url":"https://api.github.com/repos/guessit-io/guessit/issues/232","labels_url":"https://api.github.com/repos/guessit-io/guessit/issues/232/labels{/name}","comments_url":"https://api.github.com/repos/guessit-io/guessit/issues/232/comments","events_url":"https://api.github.com/repos/guessit-io/guessit/issues/232/events","html_url":"https://github.com/guessit-io/guessit/issues/232","id":108088074,"number":232,"title":"Guessit 2","user":{"login":"Toilal","id":1165758,"avatar_url":"https://avatars.githubusercontent.com/u/1165758?v=3","gravatar_id":"","url":"https://api.github.com/users/Toilal","html_url":"https://github.com/Toilal","followers_url":"https://api.github.com/users/Toilal/followers","following_url":"https://api.github.com/users/Toilal/following{/other_user}","gists_url":"https://api.github.com/users/Toilal/gists{/gist_id}","starred_url":"https://api.github.com/users/Toilal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Toilal/subscriptions","organizations_url":"https://api.github.com/users/Toilal/orgs","repos_url":"https://api.github.com/users/Toilal/repos","events_url":"https://api.github.com/users/Toilal/events{/privacy}","received_events_url":"https://api.github.com/users/Toilal/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/guessit-io/guessit/labels/3%20-%20Working%20%3C=%205","name":"3 - Working <= 5","color":"CCCCCC"},{"url":"https://api.github.com/repos/guessit-io/guessit/labels/discussion","name":"discussion","color":"006b75"}],"state":"closed","locked":false,"assignee":{"login":"Toilal","id":1165758,"avatar_url":"https://avatars.githubusercontent.com/u/1165758?v=3","gravatar_id":"","url":"https://api.github.com/users/Toilal","html_url":"https://github.com/Toilal","followers_url":"https://api.github.com/users/Toilal/followers","following_url":"https://api.github.com/users/Toilal/following{/other_user}","gists_url":"https://api.github.com/users/Toilal/gists{/gist_id}","starred_url":"https://api.github.com/users/Toilal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Toilal/subscriptions","organizations_url":"https://api.github.com/users/Toilal/orgs","repos_url":"https://api.github.com/users/Toilal/repos","events_url":"https://api.github.com/users/Toilal/events{/privacy}","received_events_url":"https://api.github.com/users/Toilal/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/guessit-io/guessit/milestones/11","html_url":"https://github.com/guessit-io/guessit/milestones/2.0","labels_url":"https://api.github.com/repos/guessit-io/guessit/milestones/11/labels","id":1291275,"number":11,"title":"2.0","description":"","creator":{"login":"Toilal","id":1165758,"avatar_url":"https://avatars.githubusercontent.com/u/1165758?v=3","gravatar_id":"","url":"https://api.github.com/users/Toilal","html_url":"https://github.com/Toilal","followers_url":"https://api.github.com/users/Toilal/followers","following_url":"https://api.github.com/users/Toilal/following{/other_user}","gists_url":"https://api.github.com/users/Toilal/gists{/gist_id}","starred_url":"https://api.github.com/users/Toilal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Toilal/subscriptions","organizations_url":"https://api.github.com/users/Toilal/orgs","repos_url":"https://api.github.com/users/Toilal/repos","events_url":"https://api.github.com/users/Toilal/events{/privacy}","received_events_url":"https://api.github.com/users/Toilal/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":15,"state":"open","created_at":"2015-09-04T20:36:28Z","updated_at":"2016-01-27T18:38:47Z","due_on":null,"closed_at":null},"comments":25,"created_at":"2015-09-24T09:00:52Z","updated_at":"2016-01-27T18:38:47Z","closed_at":"2016-01-27T18:38:47Z","body":"**Guessit** is a great filename parser. It's already in use in some tools, like [subliminal](https://github.com/Diaoul/subliminal) and [Flexget](http://flexget.com/), and some other well known projects like [SickRage](https://github.com/SiCKRAGETV/SickRage) are planning to embed it in their application. I think it's now time to release guessit v1, and go ahead to next major version guessit v2.\r\n\r\nFrom my (biased) point of view, it the best release name parser available. It has strengths like\r\n\r\n- A serious list of tests, most of them beeing based on community feedbacks.\r\n- Can read any filename structure, from a clean scene release name to a quite confusing name grabbed from a website, it gives really good results in most cases.\r\n\r\nBut I think there are some pitfalls in guessit internals, and it's now **really hard** to **make it better** and **fix remaining ssues**.\r\n\r\n- All transformers are executed in a predefined ordering. This ordering is tuned and can't be changed, because each transformer assume than previous transformers have performed with an expected state of the TreeMatcher object. It introduce **coupling between each transformer** that makes the whole transformer idea quite useless (guessit plugin)\r\n- The TreeMatcher doesn't support **[backtracking](https://en.wikipedia.org/wiki/Backtracking) to revert a false positive guess**. There are some internals workaround, like second pass feature, but it's quite hacky.\r\n- Transformers helps to split properties implementation in categories, but it's still near to impossible to implement custom patterns because of the complexity of the whole project. (some people wants this, see #180 or #229). Adding transformers can change the TreeMatcher object state, and can prevent next transformers to work properly.\r\n- It's **hard to define new logics** to validate/invalidate some guess, and it's **hard to read those logics** in source code. (Fortunately unit tests are there !)\r\n\r\nFor guessit v2, I plan to **rewrite it from scratch**. It may seems a huge work, but i've started to work on a lower level component called [rebulk](https://github.com/Toilal/rebulk) to register various patterns in bulk. This component already supports patterns matching in bulk, and will support some kind of rule engine to easily implements validation rules between registered patterns (ie. A regexp match must be next to another to be validated, etc ...). There's already some features required by guessit, like match formatters.\r\n\r\nI want to make guessit2 a **configuration module for rebulk**, to make patterns and validation rules readable and easy to maintain. There will be no transformer anymore, only a set of patterns, processors and validation rules registered in a `Rebulk` object, and [rebulk](https://github.com/Toilal/rebulk) engine will do the rest.\r\n\r\n@wackou as owner of this repository and initial author, are you ok with this plan ? Do you prefer v2 to be in this repository, under a new branch, or do you want me to work on another new project ? (Actual codebase could be maintained in a 1.x branch).\r\n\r\n<!---\r\n@huboard:{\"order\":231.0,\"milestone_order\":232,\"custom_state\":\"\"}\n-->\r\n"},"comment":{"url":"https://api.github.com/repos/guessit-io/guessit/issues/comments/175786465","html_url":"https://github.com/guessit-io/guessit/issues/232#issuecomment-175786465","issue_url":"https://api.github.com/repos/guessit-io/guessit/issues/232","id":175786465,"user":{"login":"Toilal","id":1165758,"avatar_url":"https://avatars.githubusercontent.com/u/1165758?v=3","gravatar_id":"","url":"https://api.github.com/users/Toilal","html_url":"https://github.com/Toilal","followers_url":"https://api.github.com/users/Toilal/followers","following_url":"https://api.github.com/users/Toilal/following{/other_user}","gists_url":"https://api.github.com/users/Toilal/gists{/gist_id}","starred_url":"https://api.github.com/users/Toilal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Toilal/subscriptions","organizations_url":"https://api.github.com/users/Toilal/orgs","repos_url":"https://api.github.com/users/Toilal/repos","events_url":"https://api.github.com/users/Toilal/events{/privacy}","received_events_url":"https://api.github.com/users/Toilal/received_events","type":"User","site_admin":false},"created_at":"2016-01-27T18:38:47Z","updated_at":"2016-01-27T18:38:47Z","body":"It's there now ! I've just released guessit 2.0.0 (final). Thank you all for advices and feedbacks, it really helped to make this version better :)"}}