randevu


Namerandevu JSON
Version 2.0.2 PyPI version JSON
download
home_pageNone
SummaryThe official Python implementation of the RANDEVU algorithm
upload_time2024-05-20 00:49:39
maintainerNone
docs_urlNone
authorTypicalHog
requires_python>=3.8
licenseThis work is released into the public domain with The Unlicense. Alternatively, it is licensed under MIT License or Apache License 2.0. --- The Unlicense This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to <http://unlicense.org/> --- MIT License Copyright (c) 2024 TypicalHog Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- Apache License 2.0 Copyright (c) 2024 TypicalHog Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
keywords randevu rdv rdvt universal daily reminder coordination blake3
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RANDEVU
**Universal Probabilistic Daily Reminder Coordination System for Anything**  

- UNIVERSAL - reminders for the same object are the same for everyone  
- PROBABILISTIC - reminders are calculated using a simple probabilistic
algorithm based on powers of 2  
- DAILY - reminders are following a daily schedule/interval (UTC)  
- INTRADAY - infinite optional intraday reminder times (RDVT - added in version
2.0 as an extension to the existing system)  
- GENERIC - applicable to anything and everything, literally (where it makes
sense, see use cases)  
- FOSS - in the public domain (Unlicense or MIT or Apache-2.0)  
- OFFLINE - no internet connection required  
- PORTABLE - simple code, easy to port anywhere where blake3 is available  
- DETERMINISTIC - easily computable and predictable for any object and any date  
- PSEUDORANDOM - reminders are spaced randomly and uniformly  
- ADJUSTABLE - user can decide how frequently (roughly) they'd like to see
reminders for each object  

https://github.com/TypicalHog/randevu (Rust - **REFERENCE IMPLEMENTATION**)  
https://github.com/TypicalHog/randevu-ts (TypeScript)  
**https://github.com/TypicalHog/randevu-py (Python)**  
The above implementations are available on Crates.io, PyPI, and npm as **randevu**.  
Feel free to contribute, create an implementation in another (missing) language,
or even an alternative one for 1 (or more) of the 3 languages I've already
created a repository and crate/module/package for.  

## EXAMPLE USAGE
```python
from datetime import datetime, timezone
from randevu import rdv, rdvt

object = "THE_SIMPSONS"
date = datetime.now(timezone.utc)
rdv_value = rdv(object, date)
rdvt_value = rdvt(0, object, date)

print(f"Object {object} has RDV{rdv_value} today with RDVT0 at {rdvt_value}")

```

---

**I'm aware of the fact that README.md is a confusing jungle of words, random**
**thoughts, and ideas. (Will work on it)**  
I kinda suck at explaining stuff and structuring text in an organized manner.
I'm sorry about that. :/  
I gave it my best, and I'll keep trying to improve it in the future.  
This whole document will probably be revamped entirely. Stuff will be explained
better, irrelevant things, tangents, thoughts and rambles removed, etc.  
I would also like to write something like a proper spec for the RANDEVU
algorithm/system.  
I'm thinking about creating a FAQ section/document where I'll explain various
aspects of the system and anything else I'd like to clarify or expand on in more
detail.  
Also thinking about adding some visual analogies (infographics) with coin
tossing and such which I believe have enormous potential in terms of making the
system easier to explain, as well as understand.  

---

## KEY CONCEPTS
- OBJECT - a string representing anything that is representable with a string of
characters (a game, a movie, a person, a song, a place, a video, a topic,
a word, a book, a number, a brand, a post, an event, an item, a website, an app,
a quote, an action, a movement or **literally** anything else)  
- DATE - a date (UTC) for which we want to calculate the RDV for  
- RDV - a positive integer representing the level/significance/rarity of a
reminder for a certain OBJECT on a specific DATE  

**(New feature of version 2.0)**  
- RDVT - one of an infinite number of random moments in a day (0-24h UTC) when
an object has its reminders for that day, allows for infinite precission  
- RANK - RDVT rank, ranked 0 (most significant) to infinity - RDVT0, RDVT1...  

## RDV CALCULATION
`RDV = number of leading zero bits in blake3::keyed_hash(key: DATE, data: OBJECT)`  
Note: The previous version (1.0) used a different algorithm, so the RDV values
between the two versions have changed and are completely un-correlated.  
By implementing this change, I've eliminated 2/3 blake3 hash calculations and
improved performance (not that it mattered).  
But now I can calculate about 10 million RDV values per second on my PC.  
I have strong reasons to believe such major changes won't be happening in the
future and that this is the final version of the algorithm.  
It was still a good time to do such a fundamental change to the algorithm, since
RANDEVU had essentially no adoption apart from myself and a small community I'm
a part of.  

## HOW IT WORKS AND POTENTIAL USE CASES
Imagine a system that assigns a special number (RDV) to every object each day.  
The number assigned to each object is different for each object and changes
daily.  
The number has a 50% chance to be 0, 25% chance to be 1, 12.5% to be 2, and so
on (each number being twice as rare).  
I've based everything around base-2 (simplest numerical base after unary), it
makes everything fit together so perfectly (you'll probably see why when you
learn more about how the system works).  
By making each reminder level twice as rare - we can achive effectively
infinitely infrequent reminders, as well as daily ones, and a pretty good range
of reminders of various frequencies in between.  
If an object has a reminder RDV4, that also implies RDV3, RDV2, RDV1 and RDV0.  
Users can then choose to set a threshold value for each object and if the RDV
value for a specific object is greater than or equal to the threshold - the user
may decide to do something with that object.  
For example, one may decide to watch a certain video once its RDV value (RDV
value for that specific video) hits their desired threshold.  
Threshold allows one to decide how often they would like to be "reminded of" a
certain object.  
0 -> every day, 1 -> every 2 days (on average - it's random), 2 -> 4 days, 3 ->
8 days, and so on (allows for essentially infinite frequencies of reminders,
though ones above 10 happen quite rarely - 2^10 = 1024 days).  
If multiple people used this system to get reminded of the same things - they
would all get reminded of them on the same days and thus be able to coordinate
meetings/actions related to the objects in question.  
This could allow fans of a "dead" game (game with no or little players online)
to all meet and play it on the same day, let's say once every 256 days.  
People could re-watch their favorite movies or videos and discuss them with
other fellow fans on the same days.  
This system can be applied to anything.  
It can be used to assign special appreciation/remembrance days to your favorite
books, songs, artists, events, or (as I already said) - ANYTHING.  
One could have a huge list of objects they care about and never again risk
forgetting any of them - since they will be reminded of them eventually (for
example - bookmarks).  

## RDVT CALCULATION AND USE CASES
RDVT is a newly added (version 2.0) feature of the RANDEVU system and an
optional extension of the RDV algorithm.  
We calculate the hash the same way as for RDV, except we append a RANK integer
to the DATE inside the key, separated by an '_'. And we don't count leading zero
bits.  
Instead, we iterate over the bits in the hash and add increments to the RDVT
time (which starts at 00:00h, midnight). For each 1 we add an increment, and do
nothing if the bit is 0.  
An increment starts at 12h, and we divide it by half after processing each bit.  
For example, if the first 4 bits are 0110 - this will result in a time value of
09:00h (0 * 12h + 1 * 6h + 1 * 3h + 0 * 1.5h...).  
Note that there are 256 bits and we keep doing this until we reach 1 ns (or
millisecond/microsecond, depending on the implementation).  
This means we get a different uniform pseudorandom time (0-24h) for each RANK.  
If users find the daily RDV reminder too broad and would like a more specific
time for the reminder - they can calculate one or more RDVT times and choose
one.  
Since RDVT0 is the most important/main time, users should choose the
lowest-ranked RDVT that works for them - this increases the chances other people
will also choose the same RDVT time as them, thus increasing the chances of an
interaction.  
Let's say a certain YouTube video has an RDV10 today. We could have a browser
extension or a website that would schedule streams (like video premieres) for
that video at the first 10 RDVT times (RDVT0-9).  
Fans of that video could all come re-watch it live with others at one of the
RDVT times, and perhaps chat about it in the live chat (assuming the feature
existed) while experiencing it together.  
This is just one super specific hypothetical use case I came up with.  

---

## OBJECT NAMING CONVENTION (non-exhaustive examples)
OBJECT is a string (preferably uppercase A-Z, 0-9). No spaces allowed.  
Spaces and any other characters should be replaced with a single underscore
('_').  
Characters outside of this set should only be used for external identifiers that
are case-sensitive or contain other symbols, for example, YOUTUBE video IDs.  

```
XONOTIC (all letters should be uppercase)

STAR_WARS (spaces and dashes in multi-word objects should be replaced with _)

THE_MATRIX_1999 (movies should have a year of release at the end)

GRAND_THEFT_AUTO_5 (objects should be referenced by their full name, Roman
numerals should be replaced with Arabic ones)

ASAP_ROCKY ($ should be replaced with S, same for other similar instances)

C_PLUS_PLUS (++ should be replaced with _PLUS_PLUS)

C_SHARP (# should be replaced with _SHARP, in other contexts it could be _HASH
or omitted)

YEAR_2000 (years should have a YEAR_ prefix)

FRIDAY (weekdays and months should not be abbreviated, same as all other
objects)

2023-08-25 (dates should be in ISO 8601 format, YYYY-MM-DD)

NO_MANS_SKY (apostrophe in MAN'S should be dropped)

HARRY_POTTER_SMOKES_WEED_Cdfkq2Nmb3c (video ID should be appended to the video
title, double underscore is fine if the ID starts with one, IDs are allowed to
use dashes and lowercase letters)

GETTING_BANGED_BY_GREEN_BOOMERS_MINECRAFT_BETA_1_7_3_SOLO_SURVIVAL_NO_COMMENTARY_OJzsmWBQE3I
(brackets, quotation marks, colons, and other punctuation should be dropped,
periods in version numbers like 1.7.3 should be replaced with _)

NUMBER_69 (numbers should have a NUMBER_ prefix)

```

### WHY THIS VERY SPECIFIC AND STRICT CONVENTION THO?

**TO MAKE SURE EVERYONE GETS THE SAME REMINDERS FOR THE SAME THINGS ON THE SAME**
**DAYS.**  

Due to how the algorithm works - even just a single character difference between
two objects causes the system to generate completely different reminders for
each.  
For example: WEED, weed, Weed, and W33D would all be treated as different and
independent objects with completely unrelated reminders.  
One can think of objects like passwords - the same password gets you the same
reminders as everyone else using said password.  
If one wanted to get completely different reminders from other people for a
specific object - they could append extra characters to it.  
However, this is not the focus of the system. The whole point is to help people
coordinate getting reminded about stuff at the same time as everyone else.  

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "randevu",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "randevu, rdv, rdvt, universal, daily, reminder, coordination, blake3",
    "author": "TypicalHog",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/5e/17/5b3185994356dceadf2925c5ed12ccbce983301c6d35887d4a2b74d83992/randevu-2.0.2.tar.gz",
    "platform": null,
    "description": "# RANDEVU\r\n**Universal Probabilistic Daily Reminder Coordination System for Anything**  \r\n\r\n- UNIVERSAL - reminders for the same object are the same for everyone  \r\n- PROBABILISTIC - reminders are calculated using a simple probabilistic\r\nalgorithm based on powers of 2  \r\n- DAILY - reminders are following a daily schedule/interval (UTC)  \r\n- INTRADAY - infinite optional intraday reminder times (RDVT - added in version\r\n2.0 as an extension to the existing system)  \r\n- GENERIC - applicable to anything and everything, literally (where it makes\r\nsense, see use cases)  \r\n- FOSS - in the public domain (Unlicense or MIT or Apache-2.0)  \r\n- OFFLINE - no internet connection required  \r\n- PORTABLE - simple code, easy to port anywhere where blake3 is available  \r\n- DETERMINISTIC - easily computable and predictable for any object and any date  \r\n- PSEUDORANDOM - reminders are spaced randomly and uniformly  \r\n- ADJUSTABLE - user can decide how frequently (roughly) they'd like to see\r\nreminders for each object  \r\n\r\nhttps://github.com/TypicalHog/randevu (Rust - **REFERENCE IMPLEMENTATION**)  \r\nhttps://github.com/TypicalHog/randevu-ts (TypeScript)  \r\n**https://github.com/TypicalHog/randevu-py (Python)**  \r\nThe above implementations are available on Crates.io, PyPI, and npm as **randevu**.  \r\nFeel free to contribute, create an implementation in another (missing) language,\r\nor even an alternative one for 1 (or more) of the 3 languages I've already\r\ncreated a repository and crate/module/package for.  \r\n\r\n## EXAMPLE USAGE\r\n```python\r\nfrom datetime import datetime, timezone\r\nfrom randevu import rdv, rdvt\r\n\r\nobject = \"THE_SIMPSONS\"\r\ndate = datetime.now(timezone.utc)\r\nrdv_value = rdv(object, date)\r\nrdvt_value = rdvt(0, object, date)\r\n\r\nprint(f\"Object {object} has RDV{rdv_value} today with RDVT0 at {rdvt_value}\")\r\n\r\n```\r\n\r\n---\r\n\r\n**I'm aware of the fact that README.md is a confusing jungle of words, random**\r\n**thoughts, and ideas. (Will work on it)**  \r\nI kinda suck at explaining stuff and structuring text in an organized manner.\r\nI'm sorry about that. :/  \r\nI gave it my best, and I'll keep trying to improve it in the future.  \r\nThis whole document will probably be revamped entirely. Stuff will be explained\r\nbetter, irrelevant things, tangents, thoughts and rambles removed, etc.  \r\nI would also like to write something like a proper spec for the RANDEVU\r\nalgorithm/system.  \r\nI'm thinking about creating a FAQ section/document where I'll explain various\r\naspects of the system and anything else I'd like to clarify or expand on in more\r\ndetail.  \r\nAlso thinking about adding some visual analogies (infographics) with coin\r\ntossing and such which I believe have enormous potential in terms of making the\r\nsystem easier to explain, as well as understand.  \r\n\r\n---\r\n\r\n## KEY CONCEPTS\r\n- OBJECT - a string representing anything that is representable with a string of\r\ncharacters (a game, a movie, a person, a song, a place, a video, a topic,\r\na word, a book, a number, a brand, a post, an event, an item, a website, an app,\r\na quote, an action, a movement or **literally** anything else)  \r\n- DATE - a date (UTC) for which we want to calculate the RDV for  \r\n- RDV - a positive integer representing the level/significance/rarity of a\r\nreminder for a certain OBJECT on a specific DATE  \r\n\r\n**(New feature of version 2.0)**  \r\n- RDVT - one of an infinite number of random moments in a day (0-24h UTC) when\r\nan object has its reminders for that day, allows for infinite precission  \r\n- RANK - RDVT rank, ranked 0 (most significant) to infinity - RDVT0, RDVT1...  \r\n\r\n## RDV CALCULATION\r\n`RDV = number of leading zero bits in blake3::keyed_hash(key: DATE, data: OBJECT)`  \r\nNote: The previous version (1.0) used a different algorithm, so the RDV values\r\nbetween the two versions have changed and are completely un-correlated.  \r\nBy implementing this change, I've eliminated 2/3 blake3 hash calculations and\r\nimproved performance (not that it mattered).  \r\nBut now I can calculate about 10 million RDV values per second on my PC.  \r\nI have strong reasons to believe such major changes won't be happening in the\r\nfuture and that this is the final version of the algorithm.  \r\nIt was still a good time to do such a fundamental change to the algorithm, since\r\nRANDEVU had essentially no adoption apart from myself and a small community I'm\r\na part of.  \r\n\r\n## HOW IT WORKS AND POTENTIAL USE CASES\r\nImagine a system that assigns a special number (RDV) to every object each day.  \r\nThe number assigned to each object is different for each object and changes\r\ndaily.  \r\nThe number has a 50% chance to be 0, 25% chance to be 1, 12.5% to be 2, and so\r\non (each number being twice as rare).  \r\nI've based everything around base-2 (simplest numerical base after unary), it\r\nmakes everything fit together so perfectly (you'll probably see why when you\r\nlearn more about how the system works).  \r\nBy making each reminder level twice as rare - we can achive effectively\r\ninfinitely infrequent reminders, as well as daily ones, and a pretty good range\r\nof reminders of various frequencies in between.  \r\nIf an object has a reminder RDV4, that also implies RDV3, RDV2, RDV1 and RDV0.  \r\nUsers can then choose to set a threshold value for each object and if the RDV\r\nvalue for a specific object is greater than or equal to the threshold - the user\r\nmay decide to do something with that object.  \r\nFor example, one may decide to watch a certain video once its RDV value (RDV\r\nvalue for that specific video) hits their desired threshold.  \r\nThreshold allows one to decide how often they would like to be \"reminded of\" a\r\ncertain object.  \r\n0 -> every day, 1 -> every 2 days (on average - it's random), 2 -> 4 days, 3 ->\r\n8 days, and so on (allows for essentially infinite frequencies of reminders,\r\nthough ones above 10 happen quite rarely - 2^10 = 1024 days).  \r\nIf multiple people used this system to get reminded of the same things - they\r\nwould all get reminded of them on the same days and thus be able to coordinate\r\nmeetings/actions related to the objects in question.  \r\nThis could allow fans of a \"dead\" game (game with no or little players online)\r\nto all meet and play it on the same day, let's say once every 256 days.  \r\nPeople could re-watch their favorite movies or videos and discuss them with\r\nother fellow fans on the same days.  \r\nThis system can be applied to anything.  \r\nIt can be used to assign special appreciation/remembrance days to your favorite\r\nbooks, songs, artists, events, or (as I already said) - ANYTHING.  \r\nOne could have a huge list of objects they care about and never again risk\r\nforgetting any of them - since they will be reminded of them eventually (for\r\nexample - bookmarks).  \r\n\r\n## RDVT CALCULATION AND USE CASES\r\nRDVT is a newly added (version 2.0) feature of the RANDEVU system and an\r\noptional extension of the RDV algorithm.  \r\nWe calculate the hash the same way as for RDV, except we append a RANK integer\r\nto the DATE inside the key, separated by an '_'. And we don't count leading zero\r\nbits.  \r\nInstead, we iterate over the bits in the hash and add increments to the RDVT\r\ntime (which starts at 00:00h, midnight). For each 1 we add an increment, and do\r\nnothing if the bit is 0.  \r\nAn increment starts at 12h, and we divide it by half after processing each bit.  \r\nFor example, if the first 4 bits are 0110 - this will result in a time value of\r\n09:00h (0 * 12h + 1 * 6h + 1 * 3h + 0 * 1.5h...).  \r\nNote that there are 256 bits and we keep doing this until we reach 1 ns (or\r\nmillisecond/microsecond, depending on the implementation).  \r\nThis means we get a different uniform pseudorandom time (0-24h) for each RANK.  \r\nIf users find the daily RDV reminder too broad and would like a more specific\r\ntime for the reminder - they can calculate one or more RDVT times and choose\r\none.  \r\nSince RDVT0 is the most important/main time, users should choose the\r\nlowest-ranked RDVT that works for them - this increases the chances other people\r\nwill also choose the same RDVT time as them, thus increasing the chances of an\r\ninteraction.  \r\nLet's say a certain YouTube video has an RDV10 today. We could have a browser\r\nextension or a website that would schedule streams (like video premieres) for\r\nthat video at the first 10 RDVT times (RDVT0-9).  \r\nFans of that video could all come re-watch it live with others at one of the\r\nRDVT times, and perhaps chat about it in the live chat (assuming the feature\r\nexisted) while experiencing it together.  \r\nThis is just one super specific hypothetical use case I came up with.  \r\n\r\n---\r\n\r\n## OBJECT NAMING CONVENTION (non-exhaustive examples)\r\nOBJECT is a string (preferably uppercase A-Z, 0-9). No spaces allowed.  \r\nSpaces and any other characters should be replaced with a single underscore\r\n('_').  \r\nCharacters outside of this set should only be used for external identifiers that\r\nare case-sensitive or contain other symbols, for example, YOUTUBE video IDs.  \r\n\r\n```\r\nXONOTIC (all letters should be uppercase)\r\n\r\nSTAR_WARS (spaces and dashes in multi-word objects should be replaced with _)\r\n\r\nTHE_MATRIX_1999 (movies should have a year of release at the end)\r\n\r\nGRAND_THEFT_AUTO_5 (objects should be referenced by their full name, Roman\r\nnumerals should be replaced with Arabic ones)\r\n\r\nASAP_ROCKY ($ should be replaced with S, same for other similar instances)\r\n\r\nC_PLUS_PLUS (++ should be replaced with _PLUS_PLUS)\r\n\r\nC_SHARP (# should be replaced with _SHARP, in other contexts it could be _HASH\r\nor omitted)\r\n\r\nYEAR_2000 (years should have a YEAR_ prefix)\r\n\r\nFRIDAY (weekdays and months should not be abbreviated, same as all other\r\nobjects)\r\n\r\n2023-08-25 (dates should be in ISO 8601 format, YYYY-MM-DD)\r\n\r\nNO_MANS_SKY (apostrophe in MAN'S should be dropped)\r\n\r\nHARRY_POTTER_SMOKES_WEED_Cdfkq2Nmb3c (video ID should be appended to the video\r\ntitle, double underscore is fine if the ID starts with one, IDs are allowed to\r\nuse dashes and lowercase letters)\r\n\r\nGETTING_BANGED_BY_GREEN_BOOMERS_MINECRAFT_BETA_1_7_3_SOLO_SURVIVAL_NO_COMMENTARY_OJzsmWBQE3I\r\n(brackets, quotation marks, colons, and other punctuation should be dropped,\r\nperiods in version numbers like 1.7.3 should be replaced with _)\r\n\r\nNUMBER_69 (numbers should have a NUMBER_ prefix)\r\n\r\n```\r\n\r\n### WHY THIS VERY SPECIFIC AND STRICT CONVENTION THO?\r\n\r\n**TO MAKE SURE EVERYONE GETS THE SAME REMINDERS FOR THE SAME THINGS ON THE SAME**\r\n**DAYS.**  \r\n\r\nDue to how the algorithm works - even just a single character difference between\r\ntwo objects causes the system to generate completely different reminders for\r\neach.  \r\nFor example: WEED, weed, Weed, and W33D would all be treated as different and\r\nindependent objects with completely unrelated reminders.  \r\nOne can think of objects like passwords - the same password gets you the same\r\nreminders as everyone else using said password.  \r\nIf one wanted to get completely different reminders from other people for a\r\nspecific object - they could append extra characters to it.  \r\nHowever, this is not the focus of the system. The whole point is to help people\r\ncoordinate getting reminded about stuff at the same time as everyone else.  \r\n",
    "bugtrack_url": null,
    "license": "This work is released into the public domain with The Unlicense. Alternatively, it is licensed under MIT License or Apache License 2.0.  ---  The Unlicense  This is free and unencumbered software released into the public domain.  Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.  In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  For more information, please refer to <http://unlicense.org/>  ---  MIT License  Copyright (c) 2024 TypicalHog  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  ---  Apache License 2.0  Copyright (c) 2024 TypicalHog  Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at  http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ",
    "summary": "The official Python implementation of the RANDEVU algorithm",
    "version": "2.0.2",
    "project_urls": {
        "Homepage": "https://github.com/TypicalHog/randevu-py",
        "Issues": "https://github.com/TypicalHog/randevu-py/issues"
    },
    "split_keywords": [
        "randevu",
        " rdv",
        " rdvt",
        " universal",
        " daily",
        " reminder",
        " coordination",
        " blake3"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a1b19fdbc66e861435b5c974de6ce7417af2d39e4946ee8cb092fbf7046006cd",
                "md5": "327c51be6bceed6895b61e465ef3d44f",
                "sha256": "77e00a00163da68b5349841ea91c6585dd27303a84c9fea32fb2678b0aebf093"
            },
            "downloads": -1,
            "filename": "randevu-2.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "327c51be6bceed6895b61e465ef3d44f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 10781,
            "upload_time": "2024-05-20T00:49:37",
            "upload_time_iso_8601": "2024-05-20T00:49:37.372614Z",
            "url": "https://files.pythonhosted.org/packages/a1/b1/9fdbc66e861435b5c974de6ce7417af2d39e4946ee8cb092fbf7046006cd/randevu-2.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5e175b3185994356dceadf2925c5ed12ccbce983301c6d35887d4a2b74d83992",
                "md5": "d8b2f52ee0cfe2873827d6f0394e20d0",
                "sha256": "ca2322e272c187dd399d31d648848654d000d86638f01ce45a366be3600d6484"
            },
            "downloads": -1,
            "filename": "randevu-2.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "d8b2f52ee0cfe2873827d6f0394e20d0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 16398,
            "upload_time": "2024-05-20T00:49:39",
            "upload_time_iso_8601": "2024-05-20T00:49:39.112611Z",
            "url": "https://files.pythonhosted.org/packages/5e/17/5b3185994356dceadf2925c5ed12ccbce983301c6d35887d4a2b74d83992/randevu-2.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-20 00:49:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "TypicalHog",
    "github_project": "randevu-py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "randevu"
}
        
Elapsed time: 0.26844s