{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# dumbpm\n\n[![GitHub version](https://badge.fury.io/gh/poros%2Fdumbpm.svg)](https://badge.fury.io/gh/poros%2Fdumbpm)\n[![Build Status](https://travis-ci.org/poros/dumbpm.svg?branch=master)](https://travis-ci.org/poros/dumbpm)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nA pretty dumb PM.\n\nAt the moment it only does projects prioritization: it is pretty dumb, indeed.\n\nThe whole philosophy behind `dumbpm` is that PMs (project managers, product managers, people managers, pokemon masters, etc.) all do some tasks that could use some automation, but at the same time this automation should be as dumb as possible. There are so many changing factors that influence such tasks that you better hire a PM (or a team of researchers to do the automation) to do the clever stuff, not a random software on the internet. In addition, if we keep it dumb, people can just read the code and understand what is going on, if they really want.\n\nIf you have any suggestions for something (but nothing clever!) that you would like dumbpm to do for you, open an issue and let me know.\n\n## Prioritization\n\nGiving a table of projetcs defined as below, it outputs a list of projects in order of priority within the optionally specified budget (prioritization as \"data problem\").\n\nThe prioritized list is modelled as the exact solution of a [Knapsack Problem](https://en.wikipedia.org/wiki/Knapsack_problem) with the following value function: `norm(value) / ((norm(cost) * norm(duration)) + norm(rigging)`. Pretty dumb, indeed.\n\n```bash\n$ dumbpm prioritize --help\nusage: dumbpm prioritize [-h] [--budget [BUDGET]] filename\n\npositional arguments:\n filename CSV file with projects definition\n\noptional arguments:\n -h, --help show this help message and exit\n --budget [BUDGET] Max budget allowed\n```\n\n### Projects format\n\nProject definition happens in a CSV file with the following structure:\n\n- `Project`: name of the project\n- `Value`: value of the project\n- `Cost`: cost of the project\n- `Duration`: duration of the project expressed in unit of times\n- `Rigging`: arbitrary value used to rig the result (yay, cheating!); the highest the more likely the project to be prioritized\n- `Alternative`: comma separated list of projects that are incompatible with this one (e.g.; make lunch vs buy lunch)\n\nAny field which is not specified, will be filled with 0.\n\nThere is a bit of slack on the headers of the columns (e.g.; Project, Projects, project, etc. are all alright). Notable mentions: rig and rigging both work; same for alts and alternatives; PQ can be used instead of cost if that's your thing.\n\n\n| Project | Value | Cost | Duration | Rigging | Alternatives |\n|-----------------------------------------------------|-------|------|----------|---------|---------------------------------------------|\n| Buy a better espresso machine | 5 | 4 | 2 | 9 | |\n| Buy ambient parfume for the back | 1 | 1 | 1 | | |\n| Find and remove source of bad smell | 5 | 2 | 4 | 10 | |\n| Find better coffee vendors | 4 | 2 | 6 | 5 | |\n| Buy smart component for roaster | 3 | 5 | 2 | | Build in-house roasting notification system |\n| Introduce a periodical suggestion survey for treats | 3 | 2 | 6 | | |\n| Buy a more modern sign | 3 | 3 | 1 | | |\n| Contact a designer to re-think the front | 5 | 5 | 6 | | |\n| Buy beds for powernaps | 1 | 3 | 1 | | |\n| Import treats from France | 2 | 4 | 2 | | |\n| Build in-house roasting notification system | 3 | 5 | 6 | | Buy smart component for roaster |\n\n\n\n### Example\n\n```bash\n$ cat projects.csv\nProject,Value,Cost,Duration,Rigging,Alternatives\nBuy a better espresso machine,5,4,2,9,\nBuy ambient parfume for the back,1,1,1,,\nFind and remove source of bad smell,5,2,4,10,\nFind better coffee vendors,4,2,6,5,\nBuy smart component for roaster,3,5,2,,Build in-house roasting notification system\nIntroduce a periodical suggestion survey for treats,3,2,6,,\nBuy a more modern sign,3,3,1,,\nContact a designer to re-think the front,5,5,6,,\nBuy beds for powernaps,1,3,1,,\nImport treats from France,2,4,2,,\nBuild in-house roasting notification system,3,5,6,,Buy smart component for roaster\n\n$ dumbpm prioritize projects.csv\n01 Buy ambient parfume for the back\n02 Buy a more modern sign\n03 Find and remove source of bad smell\n04 Buy a better espresso machine\n05 Find better coffee vendors\n06 Buy beds for powernaps\n07 Buy smart component for roaster\n08 Import treats from France\n09 Introduce a periodical suggestion survey for treats\n10 Contact a designer to re-think the front\n\n$ dumbpm prioritize projects.csv --budget 10\n01 Buy ambient parfume for the back\n02 Buy a more modern sign\n03 Find and remove source of bad smell\n04 Buy a better espresso machine\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "dumbpm", "package_url": "https://pypi.org/project/dumbpm/", "platform": "", "project_url": "https://pypi.org/project/dumbpm/", "project_urls": null, "release_url": "https://pypi.org/project/dumbpm/0.1.3/", "requires_dist": [ "pandas" ], "requires_python": "", "summary": "A pretty dumb PM.", "version": "0.1.3" }, "last_serial": 4685250, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "7518a6c499da1a9a44f550977ec4a588", "sha256": "07c1b44b3113c8455afa870e5879c77c498b5c469b6359a1d1a2a10caebb180e" }, "downloads": -1, "filename": "dumbpm-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7518a6c499da1a9a44f550977ec4a588", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9871, "upload_time": "2018-12-27T16:47:48", "url": "https://files.pythonhosted.org/packages/d9/9e/e530f3d76aa1e3c59588a23897996ca14c7e8d394841a546cb6ed101ac7e/dumbpm-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e990f8380d670822bf40e78d3608c54", "sha256": "5098bedaa3d8866b1c139e5cf6eab5bac872cddb63d4826936b8a96eef699370" }, "downloads": -1, "filename": "dumbpm-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9e990f8380d670822bf40e78d3608c54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5128, "upload_time": "2018-12-27T16:47:50", "url": "https://files.pythonhosted.org/packages/9b/c7/f9bbd76284bd3422e0b1b06213231a7a39216d9862e32fda8be8fa25e5ff/dumbpm-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "574cf6245cf44d20a1df6fb751f7c5fb", "sha256": "a720d6d779f632f0072d139c16ae8a26c9934a1623a3849ca356a96b153b98b4" }, "downloads": -1, "filename": "dumbpm-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "574cf6245cf44d20a1df6fb751f7c5fb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9887, "upload_time": "2018-12-27T16:58:30", "url": "https://files.pythonhosted.org/packages/0c/e4/04ec23096fefbae56aa88492724bb111786988d1b30a5fa8429a1e11571f/dumbpm-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf61cec04bd3ed9f3051c6113351f632", "sha256": "7b5229c546ad719844f7d4936b9f5521fcb855d498acd09352f18fe0c7d477c4" }, "downloads": -1, "filename": "dumbpm-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bf61cec04bd3ed9f3051c6113351f632", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5158, "upload_time": "2018-12-27T16:58:31", "url": "https://files.pythonhosted.org/packages/fb/46/6f4148da08947b09873eeb90754919805c50b6321c23b25ac4812df8b58a/dumbpm-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "5c2c22efcf5ad7010581e1baecae87bc", "sha256": "a0bbb7e651c783d0709f9ce5de49fa0b9767c5c23697100e3b8d71baa6dbf421" }, "downloads": -1, "filename": "dumbpm-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5c2c22efcf5ad7010581e1baecae87bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9883, "upload_time": "2018-12-27T17:13:07", "url": "https://files.pythonhosted.org/packages/9a/1c/98b44c357c56c5d24bb49bebf44536e6840824d30b3936cdbc86eac3cc6d/dumbpm-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "291194bcd70d0873f8638d1a19f749fc", "sha256": "5139e87f1bc1f4a51751cd88fe9bf2d9e367b54dc6b1d94bf32965430f0d575c" }, "downloads": -1, "filename": "dumbpm-0.1.2.tar.gz", "has_sig": false, "md5_digest": "291194bcd70d0873f8638d1a19f749fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5143, "upload_time": "2018-12-27T17:13:08", "url": "https://files.pythonhosted.org/packages/9d/f8/2209017f74ba93a9aabb882cecab7e360e5879847031521d3e3b6ce6d8ba/dumbpm-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a9dd1704c5c8ca3ff63d5442619a7554", "sha256": "f01586df4e2b3a9a6a8d6dafcbb0fb5be2512070453199bc73f35f7be2e6a046" }, "downloads": -1, "filename": "dumbpm-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a9dd1704c5c8ca3ff63d5442619a7554", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9990, "upload_time": "2019-01-11T12:32:05", "url": "https://files.pythonhosted.org/packages/01/af/e732976da322ebdc33632e91f6b5e17aec8241ea69f24362ad4ad79fd78e/dumbpm-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d603fa576a00d69af8ae9cc69b9e0d74", "sha256": "b62b34d354ed8f62a86af0b7e1fcd0f167f90c9553eb2238703462a8fca0c359" }, "downloads": -1, "filename": "dumbpm-0.1.3.tar.gz", "has_sig": false, "md5_digest": "d603fa576a00d69af8ae9cc69b9e0d74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5249, "upload_time": "2019-01-11T12:32:07", "url": "https://files.pythonhosted.org/packages/52/99/a8b10d4bbd7dca8c43a2805c94a9d67fd4185024fffa473b1d7afefe8553/dumbpm-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a9dd1704c5c8ca3ff63d5442619a7554", "sha256": "f01586df4e2b3a9a6a8d6dafcbb0fb5be2512070453199bc73f35f7be2e6a046" }, "downloads": -1, "filename": "dumbpm-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a9dd1704c5c8ca3ff63d5442619a7554", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9990, "upload_time": "2019-01-11T12:32:05", "url": "https://files.pythonhosted.org/packages/01/af/e732976da322ebdc33632e91f6b5e17aec8241ea69f24362ad4ad79fd78e/dumbpm-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d603fa576a00d69af8ae9cc69b9e0d74", "sha256": "b62b34d354ed8f62a86af0b7e1fcd0f167f90c9553eb2238703462a8fca0c359" }, "downloads": -1, "filename": "dumbpm-0.1.3.tar.gz", "has_sig": false, "md5_digest": "d603fa576a00d69af8ae9cc69b9e0d74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5249, "upload_time": "2019-01-11T12:32:07", "url": "https://files.pythonhosted.org/packages/52/99/a8b10d4bbd7dca8c43a2805c94a9d67fd4185024fffa473b1d7afefe8553/dumbpm-0.1.3.tar.gz" } ] }