{"id":19872227,"url":"https://github.com/piotrjustyna/fontbot","last_synced_at":"2026-05-19T09:10:24.085Z","repository":{"id":72019003,"uuid":"61487019","full_name":"PiotrJustyna/fontbot","owner":"PiotrJustyna","description":"Choose word, choose font, tweet. Twitter bot written in Haskell.","archived":false,"fork":false,"pushed_at":"2016-10-07T20:55:38.000Z","size":4193,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-11T16:38:56.277Z","etag":null,"topics":["font","haskell","regular-expression","timeline","tweets","twitter"],"latest_commit_sha":null,"homepage":"https://twitter.com/HaskellFontbot","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PiotrJustyna.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-19T15:35:03.000Z","updated_at":"2018-08-02T17:11:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"10367257-5c89-4808-9ac2-ff90744175d5","html_url":"https://github.com/PiotrJustyna/fontbot","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/PiotrJustyna%2Ffontbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PiotrJustyna%2Ffontbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PiotrJustyna%2Ffontbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PiotrJustyna%2Ffontbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PiotrJustyna","download_url":"https://codeload.github.com/PiotrJustyna/fontbot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241297606,"owners_count":19940276,"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":["font","haskell","regular-expression","timeline","tweets","twitter"],"created_at":"2024-11-12T16:14:52.868Z","updated_at":"2026-05-19T09:10:19.064Z","avatar_url":"https://github.com/PiotrJustyna.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fontbot\n\nChoose word, choose font, tweet. \n\n| Algorithm | Example |\n| --- | --- |\n| ![modus operandi](http://g.gravizo.com/g?digraph G { \"take last 10 random tweets\" -\u003e \"get first interesting word\" -\u003e \"pick random font\" -\u003e \"render the word using the chosen font\" -\u003e \"tweet the image\" -\u003e \"take last 10 random tweets\" }) | ![example](https://raw.githubusercontent.com/PiotrJustyna/fontbot/master/images/2016_07_12.PNG) |\n\n# log\n\n## 2016-07-16\n\nClosed all remaining issues, fontbot is ready to deploy.\n\n![final result](https://raw.githubusercontent.com/PiotrJustyna/fontbot/master/images/2016_07_16.PNG)\n\n## 2016-07-12\n\nChoosing random font:\n\n```bash\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: Cantarell-Bold.ttf\n\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: Cantarell-Bold.ttf\n\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: LearningCurve_OT.ttf\n\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: Quicksand-Italic.ttf\n\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: Exo-SemiBold.ttf\n\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: Quicksand-BoldItalic.ttf\n\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nfound 33 fonts\nrandomly chosen font: Quicksand-Bold.ttf\n```\n\nFull process implemented:\n\n![timeline](https://raw.githubusercontent.com/PiotrJustyna/fontbot/master/images/2016_07_12.PNG)\n\n## 2016-07-09\n\nInteresting changes today:\n\n * slightly changed tweet search keyword - \"a\" produces much more random results\n * cleaned up retrieved interesting words\n * chained the tweet-generating functions together:\n   * tweet retrieval\n   * font preview generation\n   * tweeting\n\nNow, when executed, the fontbot grabs the first interesting word out of a batch of retrieved tweets, generates the image (fixed font) and tweets it.\n\n![timeline](https://raw.githubusercontent.com/PiotrJustyna/fontbot/master/images/2016_07_09.PNG)\n\n## 2016-07-07\n\nPlaying with (very simple) regular expressions and extracting potentially interesting words:\n\n```bash\nsearch metadata:\n- query: \"Haskell\"\nstatus:\n\"This must be a canonical choice among isomorphic objects.\"\nfirst interesting word:\n canonical\n```\n\n## 2017-07-06\n\nI added more fonts and think I'm finally happy with the media size and text positioning:\n\n![haskell](https://raw.githubusercontent.com/PiotrJustyna/fontbot/5e8aea2a14ec279bfd47714b0884db4e1ae9a3c7/font_preview.png)\n\n## 2016-07-05\n\nPlaying with regular expressions:\n\n```bash\nsearch metadata:\n- query: \"Haskell\"\nraw status:\n\"Win a copy of James Haskell: RugbyFit https://t.co/rh3q5CiXgG\"\nfiltered status:\nJames\n---\nraw status:\n\"The recent watercolor paintings of Ann Jones will be on display at the Hall Haskell House Gallery in Ipswich. .... https://t.co/Vd1E6HG7y6\"\nfiltered status:\npaintings\n---\nraw status:\n\"RT @joshuaclayton: Three months into learning #haskell with @haskellbook! Wrote up how to refactor to a monad transformer stack: https://t.\\8230\"\nfiltered status:\nmonths\n---\n```\n\n## 2016-07-03\n\nFontbot can now render text to images.\n\n![Haskell](https://raw.githubusercontent.com/PiotrJustyna/fontbot/d93946282962ddd15813bc6ae4cdf878473e4147/font_preview.png)\n\n![Haskell](https://raw.githubusercontent.com/PiotrJustyna/fontbot/59e51f6a7bf57fef5c788e03f6148b9c056c5970/font_preview.png)\n\n## 2016-07-02\n\nFontbot can now read and process twitter search results:\n\n```bash\n$ stack exec fontbot-exe\nsearch metadata:\n- query: \"Haskell\"\nstatus:\n\"RT @notsleeeping: @TVG American Freedom looked good! Baffert might have his Haskell horse, going for #9, \u0026amp; for 6 wins in the last 7 Haskell\\8230\"\n---\nstatus:\n\"RT @Steve_Byk: @DRFHersh @EaSyGoEr53 As of tonight, Baffert leaning American Freedom to Haskell, Arrogate toward Travers.\"\n---\nstatus:\n\"Vintage Miriam Haskell signed double chain necklace Russian gold gilt pendant  https://t.co/Pxrt595goI https://t.co/q6VyXN9XCW\"\n---\n\n```\n\n## 2016-07-01\n\nOnce the POC tweeting mechanism was ready, I decided not to reinvent the wheel going further and to use the twitter-conduit.\n\n[Sample Tweet](https://twitter.com/HaskellFontbot/status/748962791961296896)\n\n## 2016-06-28\n\nFontbot can now tweet using manually prepared OAuth signature read from external file.\n\n```yaml\nC:\\Users\\Piotr\\Documents\\fontbot\u003estack exec fontbot-exe\nis_quote_status: false\nin_reply_to_status_id: null\nid_str: '747879477645049856'\ntruncated: false\nin_reply_to_screen_name: null\nentities:\n  symbols: []\n  urls: []\n  user_mentions: []\n  hashtags: []\ntext: Hello World From Haskell with OAuth header value taken from external file!\nin_reply_to_user_id_str: null\nfavorited: false\ncoordinates: null\nretweeted: false\nuser:\n  screen_name: HaskellFontbot\n  is_translation_enabled: false\n  default_profile: false\n  profile_image_url: http://pbs.twimg.com/profile_images/747072074280243200/QWq406SC_normal.jpg\n  default_profile_image: false\n  id_str: '747071344764923904'\n  profile_background_image_url_https: https://abs.twimg.com/images/themes/theme1/bg.png\n  protected: false\n  location: Dublin City, Ireland\n  entities:\n    url:\n      urls:\n      - expanded_url: https://github.com/PiotrJustyna/fontbot\n        url: https://t.co/2tFkSIdL6B\n        indices:\n        - 0\n        - 23\n        display_url: github.com/PiotrJustyna/fÔÇª\n    description:\n      urls: []\n  profile_background_color: '000000'\n  utc_offset: null\n  url: https://t.co/2tFkSIdL6B\n  profile_text_color: '000000'\n  profile_image_url_https: https://pbs.twimg.com/profile_images/747072074280243200/QWq406SC_normal.jpg\n  verified: false\n  statuses_count: 3\n  profile_background_tile: false\n  following: false\n  lang: en\n  follow_request_sent: false\n  profile_sidebar_fill_color: '000000'\n  time_zone: null\n  name: fontbot\n  profile_sidebar_border_color: '000000'\n  geo_enabled: false\n  listed_count: 0\n  contributors_enabled: false\n  created_at: Sun Jun 26 14:17:43 +0000 2016\n  id: 747071344764923904\n  friends_count: 1\n  is_translator: false\n  favourites_count: 0\n  notifications: false\n  profile_background_image_url: http://abs.twimg.com/images/themes/theme1/bg.png\n  profile_use_background_image: false\n  description: Choose word, choose font, tweet.\n  has_extended_profile: false\n  profile_link_color: '000000'\n  followers_count: 1\nlang: en\nretweet_count: 0\nin_reply_to_user_id: null\ncreated_at: Tue Jun 28 19:48:57 +0000 2016\nsource: \u003ca href=\"https://github.com/PiotrJustyna/fontbot\" rel=\"nofollow\"\u003efontbot\u003c/a\u003e\ngeo: null\nid: 747879477645049856\nin_reply_to_status_id_str: null\nfavorite_count: 0\ncontributors: null\nplace: null\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiotrjustyna%2Ffontbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpiotrjustyna%2Ffontbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiotrjustyna%2Ffontbot/lists"}