> 14 December 2020
- Fixed the usage string after plugins introduced [`16`](https://github.com/craigerl/aprsd/pull/16)
- Created plugin.py for Command Plugins [`15`](https://github.com/craigerl/aprsd/pull/15)
- Refactor networking and commands [`14`](https://github.com/craigerl/aprsd/pull/14)
- Update tox environment to fix formatting python errors [`13`](https://github.com/craigerl/aprsd/pull/13)
- Click [`12`](https://github.com/craigerl/aprsd/pull/12)
- Fixed all pep8 errors and some py3 errors [`11`](https://github.com/craigerl/aprsd/pull/11)
- Added tox support [`10`](https://github.com/craigerl/aprsd/pull/10)
- Fixed SMTP settings [`9`](https://github.com/craigerl/aprsd/pull/9)
- removed ASS [`8`](https://github.com/craigerl/aprsd/pull/8)
- Added port and fixed telnet user [`7`](https://github.com/craigerl/aprsd/pull/7)
- Require ~/.aprsd/config.yml [`6`](https://github.com/craigerl/aprsd/pull/6)
- Added reading of a config file [`5`](https://github.com/craigerl/aprsd/pull/5)
- First stab at migrating this to a pypi repo structure [`4`](https://github.com/craigerl/aprsd/pull/4)
- Added password, callsign and host [`3`](https://github.com/craigerl/aprsd/pull/3)
- Cleaned up trailing whitespace [`2`](https://github.com/craigerl/aprsd/pull/2)
- Added standard python main() [`1`](https://github.com/craigerl/aprsd/pull/1)
- Initial commit [`8cea620`](https://github.com/craigerl/aprsd/commit/8cea620fcc738e1f6e00cf79ed204ea58ea3ae0c)
- Add files via upload [`51579d7`](https://github.com/craigerl/aprsd/commit/51579d7c2350a85f755e3ee039bc76278da62a59)
- Update README.md [`38d2e51`](https://github.com/craigerl/aprsd/commit/38d2e516de18876b911213f373d76fddff3d6115)
- Update README.md [`6db4e6f`](https://github.com/craigerl/aprsd/commit/6db4e6fd5e7d35b21bf3dde1c18a50cbacc99232)
- Update README.md [`7947d54`](https://github.com/craigerl/aprsd/commit/7947d54fd7b75d41c29915084d8d93b38d601bfc)
- Update README.md [`66f8f82`](https://github.com/craigerl/aprsd/commit/66f8f8269a9e466618ea48ce30f0a9adafb0fd36)
- Update README.md [`538e2fe`](https://github.com/craigerl/aprsd/commit/538e2fef29ba547b980d63865573cc0491db858b)
- Update README.md [`e2d9478`](https://github.com/craigerl/aprsd/commit/e2d9478e272a047f0dd1d2e6ffa5f9c3f9f3d269)
- Update README.md [`a3f1d34`](https://github.com/craigerl/aprsd/commit/a3f1d34bc05c8443d419fee2db5a75312528e394)
- Update README.md [`d31d3bd`](https://github.com/craigerl/aprsd/commit/d31d3bdf0d192c63dc22c0256d6ee14d738e6007)
- Update README.md [`7e409c7`](https://github.com/craigerl/aprsd/commit/7e409c79fbe18e1e3efa62ee15543728f4b2d92a)
- Update README.md [`ce66908`](https://github.com/craigerl/aprsd/commit/ce6690842ad5c2a182ecdd57359aa1bccd4d9dc4)
- Update README.md [`d9b9fd9`](https://github.com/craigerl/aprsd/commit/d9b9fd9a47f6d487e63847dbcd9c3c0787be2f5d)
- Update README.md [`134a555`](https://github.com/craigerl/aprsd/commit/134a5558d4332e92241c4013fcef7e9f173cd609)
- Update aprsd.py [`2330523`](https://github.com/craigerl/aprsd/commit/2330523853855e0b722e0ee51164af932ffae196)
- Update README.md [`821a34b`](https://github.com/craigerl/aprsd/commit/821a34b12d97b4521cfbc1de9c39f6248f0ea512)
- Add files via upload [`471af76`](https://github.com/craigerl/aprsd/commit/471af76595407ded6a25c6ac4f24ea91e0fa872c)
- Update aprsd.py [`230cf45`](https://github.com/craigerl/aprsd/commit/230cf453591e55c632aa2b672b6a9fd40ed9ef74)
- Update README.md [`04269b3`](https://github.com/craigerl/aprsd/commit/04269b39ba4b295943efa80e5fad2d6343756f5f)
- Update README.md [`aa184a3`](https://github.com/craigerl/aprsd/commit/aa184a34ac94f17810f5059d144bdf0d427df752)
- de-localize [`fcef019`](https://github.com/craigerl/aprsd/commit/fcef0195b03a1d6397a5dbaf25454ba2b4c87ccb)
- Update README.md [`34d4da8`](https://github.com/craigerl/aprsd/commit/34d4da8f0d32da286cda1faf0a8af74f981523aa)
- Update README.md [`e3a1841`](https://github.com/craigerl/aprsd/commit/e3a18417f1fb9b78056c4d2b1327b0011e53c5ab)
- Update README.md [`e74fd4f`](https://github.com/craigerl/aprsd/commit/e74fd4fd6dc748cb1cc68158df75ffecd1e7e720)
- Update README.md [`7cfde54`](https://github.com/craigerl/aprsd/commit/7cfde5425050ba049ba34342f824d8710ad638e1)
- de-localize [`149580e`](https://github.com/craigerl/aprsd/commit/149580e8c434bf7b7beaef88723e73995cb7b8b2)
- mapme [`48036f9`](https://github.com/craigerl/aprsd/commit/48036f9ffdabce9be1b9faa4e4db37c6a0c57486)
- added weather and location [`7b74138`](https://github.com/craigerl/aprsd/commit/7b74138cbaf016e770b3879d36740c2a57fcc585)
- added weather and location 2 [`2fbc0e3`](https://github.com/craigerl/aprsd/commit/2fbc0e305c21ab45ff6c0443794447d1686422e5)
- added weather and location 3 [`f1d25c0`](https://github.com/craigerl/aprsd/commit/f1d25c06aafc08f87c1618b71260dd12545e8e70)
- sanitize readme [`de6ca53`](https://github.com/craigerl/aprsd/commit/de6ca53fc8887248d936eb45f2a4a126bdac6876)
- sanitize readme a bit more [`b6356ce`](https://github.com/craigerl/aprsd/commit/b6356ce90142dc4c24ff564182baa9e61bedf1d5)
- sanitize readme a bit more [`19e747d`](https://github.com/craigerl/aprsd/commit/19e747d3dce0f5c291795ebfc950928dcfea2090)
- drop virtenv on first line [`f3e386c`](https://github.com/craigerl/aprsd/commit/f3e386c485fd45cc4c6e371a5222134eb87de516)
- tweaks to readme [`8a1c5e0`](https://github.com/craigerl/aprsd/commit/8a1c5e0db2ea070187ef902b547ecbcfbe151f82)
- make tn a global [`d9caac6`](https://github.com/craigerl/aprsd/commit/d9caac64d7b3e0e7c63d64a3562a4789d6c49f0d)
- add tweaked fuzzyclock [`7dc1c5d`](https://github.com/craigerl/aprsd/commit/7dc1c5d8fdab0543f0e655ea79887d87cedb713f)
- comments [`174da13`](https://github.com/craigerl/aprsd/commit/174da13ddacd421468fadd1213db55b5ece4830c)
- Added argparse for cli options [`8b61116`](https://github.com/craigerl/aprsd/commit/8b61116fceef117a5d2faa86bde5e8244878f88d)
- First stab at migrating this to a pytpi repo [`ecd797d`](https://github.com/craigerl/aprsd/commit/ecd797d91e56a3444e79a9e67d552c602fffa772)
- First stab at migrating this to a pytpi repo [`a2b5908`](https://github.com/craigerl/aprsd/commit/a2b5908b1670251bb4a4250db8bbf8d75da646fd)
- readme update [`4a8181c`](https://github.com/craigerl/aprsd/commit/4a8181ce303b173116704bf8c0a0eccf76aa6690)
- readme [`d3e5d35`](https://github.com/craigerl/aprsd/commit/d3e5d35d1c0c952a495b030a9658cf28b781857e)
- readme again [`5ac718d`](https://github.com/craigerl/aprsd/commit/5ac718dfab7eafb3e00982ec4e0cfeadcd506782)
- readme again again [`20c43b4`](https://github.com/craigerl/aprsd/commit/20c43b4e85b712f9e7d78a492084eb1a3db4f169)
- readme again again [`d98af66`](https://github.com/craigerl/aprsd/commit/d98af66dba29be731d18eaa572919862dbdc8be2)
- sanitize readme [`8390419`](https://github.com/craigerl/aprsd/commit/8390419292188e9abae4d7c86dacbb47b3ecb747)
- update readme [`c36b14b`](https://github.com/craigerl/aprsd/commit/c36b14b4de56783562f2ea698e42a988df53efcb)
- update readme [`b3435c0`](https://github.com/craigerl/aprsd/commit/b3435c0053116e5986f0189a82e8d376a2d45c87)
- added exit if missing config file [`e3964c5`](https://github.com/craigerl/aprsd/commit/e3964c5426245e71a9689196b9e0402fdab376d5)
- added test to ensure shortcuts in config.yml [`8d1d293`](https://github.com/craigerl/aprsd/commit/8d1d2933e886abb9b2ce72d364413b86917f7e63)
- updated README for install and usage instructions [`4eff52f`](https://github.com/craigerl/aprsd/commit/4eff52f24589852404f7a6cd1581fd58c110ae43)
- Added a try block around imap login [`89d038e`](https://github.com/craigerl/aprsd/commit/89d038e93d32ff63526335aed72859099641edcd)
- select inbox if gmail server [`7abc470`](https://github.com/craigerl/aprsd/commit/7abc47098b873ec10fe8c1720eb326bd958807f7)
- Created fake_aprs.py [`bd47a2b`](https://github.com/craigerl/aprsd/commit/bd47a2bdea43566bf63cb497d3b57996c2751d04)
- Update README.md [`1f31ba0`](https://github.com/craigerl/aprsd/commit/1f31ba0fc754f5f543e977facffcfd093796cbb5)
- fix INBOX [`78add91`](https://github.com/craigerl/aprsd/commit/78add91f3ccd8d2398a79890bf6f0f2520b38641)
- fix bugs after beautification and yaml config additions. Convert to sockets. case insensitive commands [`abc6379`](https://github.com/craigerl/aprsd/commit/abc63791f135b75cd71ce0fcce002fee386a258e)
- INSTALL.txt for the average person [`f175f7e`](https://github.com/craigerl/aprsd/commit/f175f7e6e31f41fd0dd9eb6fbb40bd2aea8b4cfb)
- fix check_email_thread to do proper threading, take delay as arg [`b552f96`](https://github.com/craigerl/aprsd/commit/b552f9611f0f0c02d65804aeb03128383e16917c)
- fix check_email_thread to do proper threading, take delay as arg [`e171e16`](https://github.com/craigerl/aprsd/commit/e171e16854862e3cbc743b9c5d526f0895d54b19)
- socket reconnect on timeout testing [`5e96706`](https://github.com/craigerl/aprsd/commit/5e96706f7adf74c955fa4006228ea76a68b42f1e)
- socket reconnect on timeout testing [`712d66c`](https://github.com/craigerl/aprsd/commit/712d66c389c068cb84738bae0e26a7904c5e1c73)
- Reconnect on socket timeout [`b553987`](https://github.com/craigerl/aprsd/commit/b553987350723887c094a87638c49c3f93e26d03)
- Reconnect on socket timeout [`ecd0e8f`](https://github.com/craigerl/aprsd/commit/ecd0e8f95eeadf9582075e15e1120f9999ca068a)
- Reconnect on socket timeout [`766acbb`](https://github.com/craigerl/aprsd/commit/766acbb777a59150da5e77d2d5c7725621dfc01e)
- socket timeout of 300 instead of 60 [`32e146d`](https://github.com/craigerl/aprsd/commit/32e146d105dc47ab591f200b4d0df89209d45b77)
- added decaying email check timer which resets with activity [`cf73add`](https://github.com/craigerl/aprsd/commit/cf73add2db7ac6e85ee65e3d3e038dd709ce19f2)
- George Carlin profanity filter [`3ae7a05`](https://github.com/craigerl/aprsd/commit/3ae7a056b62f751498d653b39d8b68a9aa9d86e3)
- Update INSTALL.txt [`89069af`](https://github.com/craigerl/aprsd/commit/89069af58a03427f45f255109ecbee9ff0b3a351)
- Update INSTALL.txt [`ef132d8`](https://github.com/craigerl/aprsd/commit/ef132d8037087c647d35e1f39d7cd44a5b924c54)
- Update INSTALL.txt [`d1ab8bc`](https://github.com/craigerl/aprsd/commit/d1ab8bc27d3977f5b8ca1f9280d8857602414900)
- main loop went into tight loop, added debug print before every continue [`b597228`](https://github.com/craigerl/aprsd/commit/b5972287196130ea873ee00a8713cf56e5d543b3)
- main loop went into tight loop, more debug prints [`a4faa76`](https://github.com/craigerl/aprsd/commit/a4faa7614c646b8698908c54f21f97e5b3122c1f)
- Update INSTALL.txt [`54a2c01`](https://github.com/craigerl/aprsd/commit/54a2c016c9f08c35b1860b70473204970b7dfe68)
- more debugging messages trying to find rare tight loop in main [`3d7e3a4`](https://github.com/craigerl/aprsd/commit/3d7e3a4e542bab8edfb48f1804136873077e34f1)
- Update INSTALL.txt [`22f7123`](https://github.com/craigerl/aprsd/commit/22f7123e17724331e669c7b5ecf52edefdfb1693)
- can detect closed socket and reconnect now [`b8f37fa`](https://github.com/craigerl/aprsd/commit/b8f37fac6ed24be4dcf5741f3b85b0f4b0f8b2f8)
- Detect closed socket, reconnect, with a bit more grace [`4b67df2`](https://github.com/craigerl/aprsd/commit/4b67df2907e1ad6e0258aa154facb969217c0936)
- socket timeout 5 minutes [`e6995c3`](https://github.com/craigerl/aprsd/commit/e6995c360582ab5bb21c98ce4c90de43578efa48)
- clean up code around closed_socket and reconnect [`735cb3a`](https://github.com/craigerl/aprsd/commit/735cb3a557650ac207cc70910f082b5f31ae2ecd)
- clean up code around closed_socket and reconnect [`371a7a0`](https://github.com/craigerl/aprsd/commit/371a7a08acbef67cfcc9163888ade88a5e4ae88b)
- fix parse_email unicode probs by using body.decode(errors='ignore') [`44228c6`](https://github.com/craigerl/aprsd/commit/44228c63b3accd72acb92185ac22bc7a2240af5d)
- fix parse_email unicode probs by using body.decode(errors='ignore').. again [`3c16149`](https://github.com/craigerl/aprsd/commit/3c16149e716b9677417731a2651d5a3cb0862b49)
- some failed attempts at getting the first txt or html from a multipart message, currently sends the last [`90fcb99`](https://github.com/craigerl/aprsd/commit/90fcb9973bcc29eb4f1838bd11f6ae2e7cdced32)
- found another .decode that didn't include errors='ignore' [`f69f9a2`](https://github.com/craigerl/aprsd/commit/f69f9a2027f393cfce19336e3bfbb7e17337d387)
- Initial conversion to click [`50fb090`](https://github.com/craigerl/aprsd/commit/50fb0905578171485c6cc69c3f60bc9f4eb3dd91)
- Update INSTALL.txt [`9cd6542`](https://github.com/craigerl/aprsd/commit/9cd65424f85b01eefcee5abb95b683a4ad7a555b)
- imap tags are unicode in py3. .decode tags [`4b09fad`](https://github.com/craigerl/aprsd/commit/4b09fad8767c8bdb7ddcab2dc4b04a0863d6cdfe)
- switch from urlib to requests for weather, tested in py3 and py2. still need to update locate, and all other http calls [`00432cf`](https://github.com/craigerl/aprsd/commit/00432cf5bbdfb59bc89d721874d692b79a90d6be)
- cleaned up weather code after switch to requests ... from urllib. works on py2 and py3 [`ad0f96d`](https://github.com/craigerl/aprsd/commit/ad0f96d1aafef080dfaa6f9d5587c965f9115bd2)
- add urllib import back until i replace all calls with requests [`b38f561`](https://github.com/craigerl/aprsd/commit/b38f561b843b831f190f695bdcf643042727cfc7)
- completely off urllib now, tested locate/weather in py2 and py3 [`86bf428`](https://github.com/craigerl/aprsd/commit/86bf42802c36a1415481cb5fe974844f850a1d08)
- lose some logging statements [`c5517a7`](https://github.com/craigerl/aprsd/commit/c5517a7cb5ec005bbf843838614aeeda84530068)
- fixed fortune. yet another unicode issue, tested in py3 and py2 [`2bebd83`](https://github.com/craigerl/aprsd/commit/2bebd8344985d49eda197d87674ddb4107824abd)
- reset default email check delay to 60, fix a few comments [`d3bb44f`](https://github.com/craigerl/aprsd/commit/d3bb44feeca74f37df3a95ab51f308823e2214a7)
- yet another unicode problem, in resend_email fixed [`bb1a2ee`](https://github.com/craigerl/aprsd/commit/bb1a2ee61a7bf7b95821c46d8094a0814512ac7a)
- get rid of some debug statements [`43509ea`](https://github.com/craigerl/aprsd/commit/43509ea9e68bed3923e4d31d1b6854bab48a5d6f)
- Rewrote the README.md to README.rst [`e1edbe6`](https://github.com/craigerl/aprsd/commit/e1edbe6c6287791f6ced2d243c073dbd65c648ea)