{"id":19530385,"url":"https://github.com/ir33k/prebble","last_synced_at":"2025-10-07T09:44:55.814Z","repository":{"id":63559959,"uuid":"567796779","full_name":"ir33k/prebble","owner":"ir33k","description":"Pebble REBBLE watchface","archived":false,"fork":false,"pushed_at":"2023-12-18T20:46:15.000Z","size":27711,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-12-19T04:09:15.407Z","etag":null,"topics":["c","pebble","pebble-c","pebble-watchface"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ir33k.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-11-18T15:46:04.000Z","updated_at":"2023-11-15T07:43:22.000Z","dependencies_parsed_at":"2023-12-19T00:00:10.959Z","dependency_job_id":"7ac90fd3-e3c3-40b7-8cda-2826e27ca717","html_url":"https://github.com/ir33k/prebble","commit_stats":null,"previous_names":[],"tags_count":7,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ir33k%2Fprebble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ir33k%2Fprebble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ir33k%2Fprebble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ir33k%2Fprebble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ir33k","download_url":"https://codeload.github.com/ir33k/prebble/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224035054,"owners_count":17244893,"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":["c","pebble","pebble-c","pebble-watchface"],"created_at":"2024-11-11T01:31:33.218Z","updated_at":"2025-10-07T09:44:50.774Z","avatar_url":"https://github.com/ir33k.png","language":"C","readme":"pRebble - Pebble REBBLE watchface\n=================================\n\nPebble watchface created during [Rebble][] [Hackathon #001][].\nInspired by Rebble official logo and Pebble visual language (UI design\nand animations).\n\n## Appstore links\n\n- [pRebble - aplite][]\n- [pRebble - basalt][]\n- [pRebble - chalk][]\n- [pRebble - diorite][]\n\n## Features\n\n- Digital and analog time.\n- Support both 24h/12h digital time format.\n- Date (week name, month and day).\n- Compatible with Quick View.\n- Quick animation after each minute.\n- Support works on all pebbles, special care for Pebble Round.\n\n## Settings\n\n- Custom background color.\n- Background color can show battery status, green up to 60%, blue up\n  to 30% and red below that. On black and white screens it's gray up\n  to 30%, then white.\n- Custom background patterns. Only 2 for now.\n- Custom pattern color.\n- Hide pattern color on Bluetooth disconnect.\n- Vibrations on Bluetooth connection change.\n- Vibrations on each hour.\n- Custom date formats.\n\n## Screenshots\n\n![aplite](src/img/aplite.gif)\n![basalt](src/img/basalt.gif)\n![chalk](src/img/chalk01.png)\n\n## Recordings of animations\n\n![Green version showing animation](devlog/animation03.gif)\n![Quick View example](devlog/animation04.gif)\n\n## Icons\n\n![25bw](icon/25bw.png)\n![25orange](icon/25orange.png)\n![25](icon/25.png)\n![25red](icon/25red.png)\n![50red](icon/50red.png)\n![80red](icon/80red.png)\n\n## Rebble emoji for Rebble Discord server\n\n![emoji128](icon/emoji128.png)\n![emoji32](icon/emoji32.png)\n\n## Development log\n\n### 2022.11.06 Sun 18:18 - Installing SDK, first try\n\nRebble prepared convenient \"Developer VM\" but I would very much prefer\nto have more lightweight setup.  That means installing SDK locally.\nOn my Debian 11 with no signs of Python2, which is required, it might\nbe a bit more difficult.  Let's try anyway.\n\nI followed official [Pebble SDK installation instruction][].  But\nbefore that I noticed warning message that Python 2.7 and pip2 are\nrequired.  So I installed few packages to get proper Python versions\nand then I followed article called [Install pip for Python2.7 in\nDebian 11 Bullseye][].  Strange coincidence that I found help on Emacs\nuser blog and I'm Emacs user too.  Thanks bro!  Works like a charm.\nBut I have to remember to use `python2 -m pip` instead of `pip`.\n\n\t$ sudo apt install python2\n\t$ sudo apt install python2.7\n\t$ sudo apt install python-dev\n\t$ wget https://bootstrap.pypa.io/pip/2.7/get-pip.py\n\t$ python2 get-pip.py\n\t$ python2 -m pip --version\n\t$ python2 -m pip help\n\nNow following the [Pebble SDK installation instruction][] I could do\neverything with few commends modified to fit my pip situation.\n\n\t$ cd ~/pebble/pebble-sdk-4.5-linux64\n\t$ python2 -m pip install virtualenv\n\t$ python2 -m virtualenv .env\n\t$ source .env/bin/activate\n\t$ python2 -m pip install -r requirements.txt\n\t$ deactivate\n\t$ sudo apt install libsdl1.2debian libfdt1 libpixman-1-0\n\nI'm good to go.  I will do the [Pebble watchface tutorial part 1][] to\ntest my local SDK installation.\n\n### 2022.11.06 Sun 18:48 - Tutorial part 1, fail quick\n\n\t$ pebble new-project prebble\n\tPebble collects metrics on your usage of our developer tools.\n\tWe use this information to help prioritise further development of our tooling.\n\n\tIf you cannot respond interactively, create a file called ENABLE_ANALYTICS or\n\tNO_TRACKING in '/home/irek/.pebble-sdk/'.\n\n\tWould you like to opt in to this collection? [y/n] n\n\tTraceback (most recent call last):\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble.py\", line 7, in \u003cmodule\u003e\n\t\tpebble_tool.run_tool()\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble_tool/__init__.py\", line 32, in run_tool\n\t\tanalytics_prompt()\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble_tool/util/analytics.py\", line 242, in analytics_prompt\n\t\tpost_event(\"sdk_analytics_opt_out\", force=True)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble_tool/util/analytics.py\", line 213, in post_event\n\t\tPebbleAnalytics.get_shared().submit_event(event, **data)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble_tool/util/analytics.py\", line 109, in submit_event\n\t\trequests.post(self.TD_SERVER, data=fields)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/.env/lib/python2.7/site-packages/requests/api.py\", line 109, in post\n\t\treturn request('post', url, data=data, json=json, **kwargs)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/.env/lib/python2.7/site-packages/requests/api.py\", line 50, in request\n\t\tresponse = session.request(method=method, url=url, **kwargs)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/.env/lib/python2.7/site-packages/requests/sessions.py\", line 465, in request\n\t\tresp = self.send(prep, **send_kwargs)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/.env/lib/python2.7/site-packages/requests/sessions.py\", line 573, in send\n\t\tr = adapter.send(request, **kwargs)\n\t  File \"/home/irek/pebble/pebble-sdk-4.5-linux64/.env/lib/python2.7/site-packages/requests/adapters.py\", line 415, in send\n\t\traise ConnectionError(err, request=request)\n\trequests.exceptions.ConnectionError: ('Connection aborted.', gaierror(-2, 'Name or service not known'))\n\nNot the best start.  Let's see what went wrong.\n\nHa!  The comments you find in source code ^^\n\n\t# ~/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble_tool/__init__.py:\n\tdef run_tool(args=None):\n\t\turllib3.disable_warnings()  # sigh. :(\n\t\tlogging.basicConfig()\n\nI think that value of `DOWNLOAD_SERVER` variable might be wrong.\n\n\t# ~/pebble/pebble-sdk-4.5-linux64/pebble-tool/pebble_tool/sdk/manager.py\n\tclass SDKManager(object):\n\t\tDOWNLOAD_SERVER = \"https://sdk.getpebble.com\"\n\nThis is probably outdated and should be changed to valid Rebble URL.\nI'm starting to think that there is SDK version already adjusted by\nRebble team.  Let's look for that.\n\nYea...  There is this official [Rebble SDK instruction][].  Let's\nquickly install SDK again from proper source.\n\n### 2022.11.06 Sun 19:12 - First try ^-^\n\nOk, now it should be good.  Rebble version of SDK installed.  Path\nupdated.  Python dependencies installed, again.  And I see that there\nis no need to do tutorial in order to verify SDK installation.  There\nis a better way.  All described in Rebble SDK installation manual.\nProps for that.\n\n\t$ pebble sdk install latest\n\t$ mkdir ~/pebble/tmp\n\t$ cd ~/pebble/tmp\n\t$ git clone https://github.com/pebble-examples/cards-example\n\t$ cd cards-example\n\t$ pebble build\n\t$ pebble install --emulator basalt\n\nBuilds fast, emulation works.  I'm ready!  It wasn't that hard.\n\n### 2022.11.06 Sun 23:08 - Another great comment from RebbleOS source\n\n\t// rebble-os/rwatch/graphics/font_loader.c:53\n\n\t// get a system font and then cache it. Ugh.\n\t// TODO make this not suck (RAM)\n\tGFont fonts_get_system_font(const char *font_key)\n\n### 2022.11.18 Fri 12:43 - Hackathon first day\n\nHackathon starts at 19:00.  Let's prepare a bit before that.  Last\nweek I went through whole tutorial.  I also watched archive of\n[Presentation Designing Apps for Pebble][] and another interesting\n[Presentation Developing for Round][].  What I can do now is to\nprepare repository and basic project structure that allows to run\nempty watchface in emulator.  I should also be able to run watchface\non actual watch.  I haven't done that before.  I can also read more\nabout vector graphics.  Tutorial shows only how to deal with bitmaps.\n\n### 2022.11.18 Fri 14:37 - Rebble icon and Discord emoji\n\nI couldn't resist to start doing something already.  So as warm-up I\ndid icon of pRebble watch.  It's pixel perfect in smallest Pebble icon\nsize that is 25x25 px as far as i know.  I posted it on Discord Rebble\n#hackathon channel.  Soon after @Will0 replied:\n\n\u003e Looks great! I've added it as a server emoji: :rebblewatch:\n\nWoW!  That's so great ^-^ I followed up with slightly bigger icon\naligned with Discord emoji resolution specification.\n\nI used orange color for icons background.  It's the closest orange\nfrom Pebble color pallet that match orange used in Rebble logo.  But I\nthink that main weatchface color should be red.  Rebellion is often\nassociated with red color.  But I will decide about that later.\n\n### 2022.11.19 Sat 08:18 - Day one\n\nYesterday I focused mostly on design.  File [design.svg](./design.svg)\nwas created and besides few chosen graphics on main page there are\nmany abandoned ideas outside of the page.\n\nInitially I gravitated towards big very abstract analog watchface.\nThen I created simple icon style analog watchface that both in layout\nand style should resemble regular Pebble icons that appears when you\ntoggle quiet time, mute app etc.  The last idea was to play with light\nand shadows using big shapes.  I made silhouette of original Pebble\nusing just one big black shape and few light spots with white screen.\nThis watchface was fully digital.  Initially I rly liked it but\nusually picture of Pebble watch inside Pebble watch is not a good idea\nand it was the same in this case.\n\nSo I went back to second concept.  After refining it and testing on\nactual watch I realized that this is the on that meets my goals and\nlooks very clean on watch.  My new favorite watchface!\n\n![watchface design - black-white](devlog/wf01.png)\n![watchface design - green](devlog/wf02.png)\n![watchface design - red](devlog/wf03.png)\n\nI mentioned testing designs on watch itself.  For that I created new\nPebble project.  With knowledge from tutorial I was able to quickly\nmake it display single bitmap.  This was used to test all designs.\n\n### 2022.11.19 Sat 08:28 - What next?\n\n\u003e After three days without programming, life becomes meaningless.\n\nEnough of design.  Time to code.  I will start by creating red\nbackground with subtle stripes across whole screen.  It would be great\nto have option to customize background to your liking.  But that is\nnot necessary right now.  So I will hardcode default background first.\n\nThen I can add white background for digital time and time itself.\nAfter that icon.  There will be a lot of fun with vector graphic API.\nI did some reading yesterday.  Making static image should not be a big\ndeal but animation might take some time.\n\n### 2022.11.19 Sat 09:46 - What is your background sir?\n\nBackground is ready.  Pure red with black lines across the screen.\nNote the details.  Lines are positioned in a way that makes them start\nand end in the corners.  This characteristic defines gap between lines\nbecause it has to be precise to make that happen.\n\n![screenshot01 - background with pattern](devlog/screenshot01.png)\n\n### 2022.11.19 Sat 11:03 - The time has come to load fonts\n\nI have time and date.  It was easy because there is nothing fancy\nabout it.  I used fonts from [Pebble system fonts][] lib.  I planned\nthat from beginning.  This should bring me even closer to have look\nand feel of original Pebble UI.\n\n![screenshot02 - time and date](devlog/screenshot02.png)\n\nNow for the main event.  Drawing vector graphics.  I will make a break\ntho.  I have breakfast on my mind.  I shouldn't stop til nightfall\ngentleman, but second breakfast will do fine 🍎.\n\n### 2022.11.19 Sat 17:34 - First Pebble Draw Commands (PDC)\n\nOk so I have SVG file.  Now I need to convert it to `.pdc` with\n`svg2pdc.py`, but running this program results in error.\n\n\t$ python2 /home/irek/pebble/cards-example/tools/svg2pdc.py analog.svg \n\tTraceback (most recent call last):\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 17, in \u003cmodule\u003e\n\t    import svg.path\n\tImportError: No module named svg.path\n\nLooks like `svg` module is missing.  I think I can install it with:\n\n\t$ python2 -m pip install svg.path\n\t\nSo that worked but now I have different error.\n\n\t$ python2 /home/irek/pebble/cards-example/tools/svg2pdc.py analog.svg\n\tTraceback (most recent call last):\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 17, in \u003cmodule\u003e\n\t    import svg.path\n\t  File \"/home/irek/.local/lib/python2.7/site-packages/svg/path/__init__.py\", line 1, in \u003cmodule\u003e\n\t    from .path import Path, Move, Line, Arc, Close  # noqa: 401\n\t  File \"/home/irek/.local/lib/python2.7/site-packages/svg/path/path.py\", line 105\n\t    return f\"Line(start={self.start}, end={self.end})\"\n\t                                                     ^\n\tSyntaxError: invalid syntax\n\nSyntax error in module file?  This looks almost like if installed\nmodule is not written for python2.\n\nAnd probably yes.  Because in module [svg.path CHANGES.txt][] file I\ncan clearly see that they dropped support for Python 2 in first half\nof this year.  So I think that I need to get older version manually.\nLet's try to do that.  I will try to get version 4.1.\n\n\t$ git clone https://github.com/regebro/svg.path.git\n\t$ cd svg.path\n\t$ git checkout 4.1\n\t$ rm -rf ~/.local/lib/python2.7/site-packages/svg\n\t$ cp -r src/svg ~/.local/lib/python2.7/site-packages/\n\t\nFIRST TRY!  It works.  I mean the script.  I still have errors but\ndifferent kind of errors.  Looks like my path is not pixel perfect.\nAfter quick fix I got another error.\n\n\t$ python2 /home/irek/pebble/cards-example/tools/svg2pdc.py analog.svg\n\tTraceback (most recent call last):\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 646, in \u003cmodule\u003e\n\t    main(args)\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 621, in main\n\t    args.precise)\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 589, in create_pdc_from_path\n\t    size, commands, error = parse_svg_image(path, precise, raise_error)\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 549, in parse_svg_image\n\t    cmd_list, error = get_commands(translate, root, precise, raise_error)\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 463, in get_commands\n\t    cmd_list, err = get_commands(translate, child, precise, raise_error, truncate_color)\n\t  File \"/home/irek/pebble/cards-example/tools/svg2pdc.py\", line 459, in get_commands\n\t    translate_strs = re.search(r'(?:translate\\()(.*),(.*)\\)',transform).group(1,2)\n\tAttributeError: 'NoneType' object has no attribute 'group'\n\nThat was due to my mistake of grouping few elements together.  Script\ndon't support SVG groups and it was mention in documentation so let's\ntry again without any groups.\n\nI got my `.pdc` file, despite few \"Invalid point\" messages, because\nInkscape seems to be very inaccurate even with snap to grid option.\nLet's try to draw that in watchface.\n\n### 2022.11.19 Sat 18:12 - It's alive!\n\nIt works!  That's great.  Now I need to adjust position.\n\n### 2022.11.19 Sat 18:28\n\nIt's great.  But I still see some jagged edges.  Inkscape you have\nfailed me for the last time.\n\n### 2022.11.19 Sat 19:07\n\nThis is insane.  Inkscape rly like to force you to use floats.  And it\nlooks like it remembers which point was moved and it will not update\nit position in output file unless you move that specific point.  So\nafter manually moving each point back and forth to snap it to pixel\ngrid i finally have expected result.  It's perfect!  But I consider\nswitching to different tool.  Maybe Figma?\n\n![screenshot03 - aplite with static analog](devlog/screenshot03.png)\n![screenshot04 - basalt with static analog](devlog/screenshot04.png)\n\n### 2022.11.19 Sat 23:31 - Hands up!\n\nI have analog clock hands.  At the beginning code resulted in not very\nstraight lines.  It took me a while to realize that it's impossible to\ncalculate point right above middle of the circle if there is no center\npixel.  Code have chose one on the right or one on the left.  But\nadjusting layer size to make it have middle pixel solved this problem.\n\n![screenshot05 - aplite with working analog](devlog/screenshot05.png)\n![screenshot06 - basalt with working analog](devlog/screenshot06.png)\n\nNow what?\n\n### 2022.11.20 Sun 00:56 - You spine me round round\n\nAfter just few adjustments watchface works on Pebble Round.  I added\nslightly rounded corners to digital time background.  After that I had\nan idea to make this background an circle in Pebble Round.  This makes\nsense and looks great.  Another small change was to display\nabbreviation of month name on Pebble Round.  It fits better small\nspace at the bottom.\n\n![screenshot07 - chalk support](devlog/screenshot07.png)\n\n### 2022.11.20 Sun 11:16 - Animations\n\nI just did my first animation.  It's very quick and simple but adds a\nlot to watchface.\n\n![animation01 - first animation](devlog/animation01.mp4)\n\n### 2022.11.20 Sun 19:09 - Inkscape \u003c/3\n\nOk so coding sequence animations with Pebble API is easy but preparing\nSVG animation in Inkscape is horrible.  I don't think that there is\nsingle good software for making SVG animations of this kind.  I tried\nfew but most are about moving and modifying whole shapes, or final\nanimation is a bitmap image or video.\n\nI even spend few hours trying animate whole thing with code point by\npoint.  I learned quite a lot about how PDC format stores data.  But\neventually I went back to Inkscape and just animated each frame by\nhand on separate layer.  Exporting was also problematic but anyway, in\nthe end I have my sequence animation for analog clock.  It runs on\neach minute.\n\n![animation02 - sequence analog clock animation](devlog/animation02.mp4)\n![animation03 - green background](devlog/animation03.mp4)\n\n### 2022.11.20 Sun 21:43 - Unobstructed area AKA Quick View\n\nThat was the last thing that I wanted to handle - unobstructed area.\nIt works just by hiding digital area section.  It looks very nice tho.\nAnyway.  I wanted to add customization for background color but I\ndon't think there is enough time for that.  Will see.  I will prepare\neverything for release and then decide.\n\n![animation04 - quick view](devlog/animation04.mp4)\n\n### 2022.11.20 Sun 22:13 - Publish\n\nReleases in [Rebble Developer Portal][].  I'm done with v1.0.  Time\nfor rest but development is not over.  I still want to deliver\nsettings page with customization options.\n\nAppstore pages for each platform:\n\n- [pRebble - aplite][]\n- [pRebble - basalt][]\n- [pRebble - chalk][]\n- [pRebble - diorite][]\n\nI will add more details later.\n\n### 2022.11.21 Mon 22:39 - After release and plans for future\n\nOk so everything went smoothly except that today I found bug.  Hour\nanalog clock hand was a bit off.  For example when time was 13:50\nclock hour hand should already point more at 14:00 than 13:00 but it\nwasn't.  It was a small silly mistake in code.  Fixed quickly and\nwatchface was updated with version 1.1.\n\nRight after that I added watchface menu icon.  Finally!  I had it from\nthe beginning but since I didn't know how to add it i skipped it for\nversion 1.0 because I thought this will be more involve.  It was\nactually pretty easy.  I actually learned how to do it from other\nawesome project, [Watchface Pixel by phoeniix][].  He had separate\ncommit [Add menu item commit][] for that.\n\n![pRebble menu icon](devlog/pic03.jpeg)\n\nThen I acknowledge problem with analog clock minute hand.  It was\noverlapping with analog clock arrows at 2 specific points and it looks\nvery strange.  I fixed it quickly by adding white border around minute\nhand.  This was achieved by drawing white thicker line under actual\nblack minute hand line.\n\n### 2022.11.22 Tue 04:13 - So now what?\n\nTopics on Rebble Discord channel related to Hackathon are archived.  I\nwill continue my work on this watchface.  I rly want to add few things\nthat I planned from the start and some more.\n\nBut before that I'm doing some cleaning.  Starting with [design.svg][]\nfile.  Whole design process is now visible on the page.  Previously\nonly chosen designs where visible and everything else was outsize the\npage.  Now it's easier to look at all that mess.  I also defined tags\nin this repository so it's easy to jump to specific version.  This\nfile was cleaned up as well.  Top section is now more presentable and\nit doesn't make first impression of project being WIP.\n\nAnd the plan for version 2.0 is to add settings page using\n[pebble-clay][] with features:\n\n- Custom background color.\n- Possibility to have background color that reflects battery level.\n  On color screen from green, to orange and red.  On black and white\n  from white to gray to black.\n- Custom patter.  I want to make patter optional.  And when enabled\n  then you can chose one of patterns.  For now we have only black\n  lines.  But I already experimented with dots in [design.svg][].  And\n  I have few other ideas.  Color for patter can also by custom.\n- Show Bluetooth connection by hiding patter.  So when patter is\n  defined it can be hidden when connection with phone is lost.\n- Vibrate when Bluetooth connection change.\n- Vibrate on each hour.\n- Custom date format.\n\nI like how with background I can squeeze extra features and keep\nwatchface as clean as it is now.  I would rly like to add weather as\nwell.  But I have no idea how to do that yet.  Some watchfaces shows\nextra stuff on shake.  I don't like that.  So I don't know how to do\nit yet.\n\n### 2022.11.22 Tue 04:46 - Appstore stars\n\nWatchface already has 12 stars in Appstore O_O.  This is super\nawesome!  I'm happy that people like it as I rly tried to not only\nmeet design goals but also make it useful for every day usage.  I'm\nusing it since first day and it works for me very well.  It rly need\nthose customization tho.  It brings watchface to another level when\nyou can make it your own.\n\n### 2022.11.22 Tue 20:31 - Hello sequence my old friend\n\n\t$ python2 /home/irek/pebble/cards-example/tools/svg2pdc.py -c 1 -d 12 -o resources/seq.pdc -s src/img/seq\n\t\n### 2022.11.23 Wed 22:38 - Ideas\n\nChange background color, pattern type and pattern color randomly on\neach hour or each shake.\n\n### 2022.11.24 Thu 03:58 - Settings\n\nIt took a while, actually the whole night of programming.  But I did\nit.  I have settings panel with everything that I listed earlier.\nYes, everything!  Now for the release of v2.0.  I need to prepare new\nscreenshots and gif.  I don't have a strength for that tho.  So I just\nreleased new version with change log new description and that's it for\ntoday.  I'm not expecting to do much more.  Probably 2 or 3 new\nbackground patterns, new screenshots for store and potential bug fixes\nand some refactor but nothing major.  Everything seems to be working\nfine and I have all the features that I wanted.\n\n### 2022.11.27 Sun 22:52 - Polish\n\nAlready 21 likes in appstore.  This motivates me to polish watchface\neven more.\n\nFor example I should expand Clay settings page so it describe some of\nthe options right there on settings page.  Like background that shows\nbattery level.  This should be explained right there along with image\nshowing which color corresponds to which battery charge level.\n\nI can add more patterns.  I was thinking about making something that\nworks better on Pebble round.  And like text area with digital time\nand date, pattern could have subtle animation.\n\nTopic of animation reminds me of initial idea of creating custom\nanimation curve function.  I never got back to it.  Current slide up\nanimation is fine but since the beginning I wanted to have a little\nbounce at the end.  Similar to what arrows do after they go around\nanalog clock.\n\nI can polish the appstore watchface page itself by adding banner\nimage, updating gif and screenshots.\n\nCode is already in pretty good shape but this OFC can always be\nimproved.\n\nSo there are many areas that can be polished.  I think I will be able\nto do some of them in upcoming week.\n\n### 2022.12.14 Wed 11:03 - v3.0 Dithering FTW\n\nThere it is.  I did a big refactor.  That include some small fixes.\nFor example there was bug not allowing you to go back to default date\nformat and white border around minutes clock hand was a bit off.\n\nBut the biggest change is introduction of Dithering.  Initially I\nwanted to have it just to enhance how battery status is shown on black\nand white screens with background color.  But it works so great that\nit is used even on color display.  And it's a pattern, not background.\nThis makes more sense because with dithering as background other\npatterns rendered on top could disappear in dithering pixels patterns.\nAnd also dithering needs it's own color.  By having dithering as\npattern I can use pattern color for it and there is no conflict with\nother patterns.  This works great.  All old patterns can still be used\nas before.  The only breaking change I introduced is that on color\ndisplay battery status is now shown with dithering instead of multiple\npredefined colors.  Great way of using dithering for battery status is\nto for example set background color to red and pattern color to green.\nThen when battery is full you have green background and it slowly\ntransition to red as we approaching to 0% of battery.  This can create\nnice color transitions.  For example when blue and red are used you\nwill get purple on 50% of battery.\n\nImplementation of dithering forced me to look into frame buffer.  This\nallows to modify pixels directly and with that it's faster.  I used it\non lines pattern as well.\n\nThere are also improvements to Clay settings page.  It's now more\ndescriptive.  And you can now define different vibration when\nBluetooth is connected and different when it's disconnected.\n\n### 2022.12.17 Sat 13:52 - v3.0 Released\n\nI just released version 3.0 with new gifs and images in app store.\nOnly for aplite and basalt tho.  I don't have strengths to do it for\nchalk.  Anyway I think that's it for now.  Unless there will be a bug\nrepport or I rly feel like to change / add something.\n\n### 2023.04.22 Sat 11:02 - Revision\n\nIt has been 5 months since release of v1.0 and 4 since v3.0.  I went\nback to the project to do small revision.  I found few small typos and\none include macro in wrong file.  Besides that everything looks solid\nand I had no troubles reading and understanding the code even after\nthose 4 months.  This is a good sign especially considering that this\nwas my first and only Pebble project and at this point I don't rly\nremember anything from Pebble API.\n\nLooking at the Pebble store [pRebble - basalt][] is see that this\nwatchface got 46 hearts.  This is the best score on the first page\nwith all watchfaces making me very proud and happy.\n\n### 2023.09.24 Sun 05:05 - Why won't you die?\n\nJust watched [Pebble Smartwatch: From $230 Million to Zero][] and it\nwas surprising to see that despite being \"dead\" people still talk\nabout Pebble.  [Rebble Discord][] is still active too.  And there are\nnew watchfaces in Pebble store.  Looks like ideas are bulletproof.\n\nAnd speaking of ideas.  Seeing that pRebble watchface has now more\nthan 60 hearts ([pRebble - basalt][]) I started thinking on new idea.\nThere is a chance that there will be second edition of Hackathon.\nShould I join?  What should I do?\n\nOne idea is to extend this watchface with one last missing feature\nthat many watchfaces have.  That is weather forecasting.  Other idea\nis to do something completely opposite this time.  So pRebble was all\nabout being practical and well designed with readability as number one\ntop priority.  What about going to polar opposite with something that\nis fun, innovative and just to show off to friends.  You know like\n[Perspective][] watchface.  Or maybe something that is just a pretty\npicture.  I always loved watchfaces from [dezign999][].  I also like\nthe idea of having mini virtual world as watchface where you collect\npoints by wearing the watchface or by collecting steps and then you\ncan exchange them for more stuff that you can put into this world like\nin [Steppet][].  I could also do an app this time.  I would probably\nended up making a game.\n\nAnyway.  There is a time to think of another \"bulletproof\" idea.  And\nwhen the time comes - I will be ready.\n\n### 2023.12.17 Sun 06:31 - v3.0 Anniversary\n\nThe Hackathon #002 did not happen, at least not in this year.  But it\nis an anniversary of v3.0 release.  And I'm writing because what is\nsurprising to me it that the watchface keeps getting likes.  71 is\nwhere it stands now.  I guess I'm just glad that there are no bugs or\ncomplains.  I'm sure I would know about them by now but there are no\nissue on GitHub, no mails and no messages on Discord.  Code is rock\nsolid.  I went over the implementation couple of times.  Good thing\nit's small.\n\nI'm writing about all of this because sometimes it feels like now a\ndays you can't just create a software, you also have to maintain it\notherwise it will stop working very soon.  I guess it could happen to\nPebble watchfaces too if the PebbleOS would receive regular updates\nthat could potentially change it's behavior.  Funny thing but\napparently the dead platform makes software alive longer.\n\n\n[Hackathon #001]: https://rebble.io/hackathon-001/\n[Install pip for Python2.7 in Debian 11 Bullseye]: https://blog.emacsos.com/pip2-in-debian-11-bullseye.html\n[Pebble Compass]: https://github.com/HBehrens/pebble-compass\n[Pebble SDK installation instruction]: https://developer.rebble.io/developer.pebble.com/sdk/install/linux/index.html\n[Pebble Time Design Kit Web Archive]: http://web.archive.org/web/20160415201215/http://blog.tackmobile.com/article/pebble-time-design-kit/\n[Pebble watchface tutorial part 1]: https://developer.rebble.io/developer.pebble.com/tutorials/watchface-tutorial/part1/index.html\n[Presentation Designing Apps for Pebble]: https://youtu.be/LuiK8ZiPXr4\n[Presentation Developing for Round]: https://youtu.be/3a1V4n9HDvY\n[Rebble SDK instruction]: https://help.rebble.io/sdk/\n[Rebble icons]: https://github.com/piggehperson/rebble-icons\n[Rebble]: http://rebble.io/\n[Storytelling in pixels]: https://old.heydays.no/project/pebble/\n[Watchface Analogous]: http://apps.rebble.io/en_US/application/5674eb2c1caa144be8000076?native=false\u0026query=analogous\u0026section=watchfaces\n[Watchface DIGIANA002]: https://www.reddit.com/r/pebble/comments/7eynb0/watchface_of_the_day_pebble_2_minimalistic_mix/\n[Pebble system fonts]: https://developer.rebble.io/developer.pebble.com/guides/app-resources/system-fonts/index.html\n[svg.path CHANGES.txt]: https://github.com/regebro/svg.path/blob/d38002122fb50c63fa4a7e30cc834a60479c766a/CHANGES.txt#L79\n[Rebble Developer Portal]: https://dev-portal.rebble.io/\n[pRebble - aplite]: https://apps.rebble.io/en_US/application/637aa98bfdf3e30009f6398f?hardware=aplite\n[pRebble - basalt]: https://apps.rebble.io/en_US/application/637aa98bfdf3e30009f6398f?hardware=basalt\n[pRebble - chalk]: https://apps.rebble.io/en_US/application/637aa98bfdf3e30009f6398f?hardware=chalk\n[pRebble - diorite]: https://apps.rebble.io/en_US/application/637aa98bfdf3e30009f6398f?hardware=diorite\n[Watchface Pixel by phoeniix]: https://github.com/not-phoeniix/pixel/\n[Add menu item commit]: https://github.com/not-phoeniix/pixel/commit/e80c8b0e012b7a8da5929d6819782f432a1b697e\n[design.svg]: src/img/design.svg\n[pebble-clay]: https://github.com/pebble/clay\n[appstore settings]: https://apps.rebble.io/en_US/dev-settings?dev_settings=true\n[Pebble Smartwatch: From $230 Million to Zero]: https://www.youtube.com/watch?v=SRdMQwQT47k\n[Rebble Discord]: https://discordapp.com/invite/aRUAYFN\n[Perspective]: https://apps.rebble.io/en_US/application/52da8234227cbe482b000120?section=watchfaces\n[dezign999]: https://apps.rebble.io/en_US/developer/52f03b26a0cb6a3454000dfb/1?hardware=basalt\u0026query=darth%2525252520sweater\u0026section=watchfaces\n[Steppet]: https://apps.rebble.io/en_US/application/57c90ebebe5ad0d0cf000041?section=watchfaces\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fir33k%2Fprebble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fir33k%2Fprebble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fir33k%2Fprebble/lists"}