{"id":16312405,"url":"https://github.com/kiranandcode/uwp-redditslideshow","last_synced_at":"2025-10-25T16:31:44.087Z","repository":{"id":112327183,"uuid":"97991518","full_name":"kiranandcode/UWP-RedditSlideshow","owner":"kiranandcode","description":"A Reddit Slideshow for the Universal Windows Platform...","archived":false,"fork":false,"pushed_at":"2017-08-03T09:40:12.000Z","size":2491,"stargazers_count":4,"open_issues_count":1,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-16T10:26:50.229Z","etag":null,"topics":["reddit","reddit-slideshow","slideshow","uwp-apps"],"latest_commit_sha":null,"homepage":null,"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/kiranandcode.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-21T22:38:57.000Z","updated_at":"2023-06-05T16:44:55.000Z","dependencies_parsed_at":"2023-04-16T15:01:25.789Z","dependency_job_id":null,"html_url":"https://github.com/kiranandcode/UWP-RedditSlideshow","commit_stats":null,"previous_names":["kiranandcode/uwp-redditslideshow"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2FUWP-RedditSlideshow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2FUWP-RedditSlideshow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2FUWP-RedditSlideshow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiranandcode%2FUWP-RedditSlideshow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiranandcode","download_url":"https://codeload.github.com/kiranandcode/UWP-RedditSlideshow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238183414,"owners_count":19430109,"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":["reddit","reddit-slideshow","slideshow","uwp-apps"],"created_at":"2024-10-10T21:47:59.641Z","updated_at":"2025-10-25T16:31:38.694Z","avatar_url":"https://github.com/kiranandcode.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gopiandcode's Reddit Slideshow (unofficial)\n## A small UWP slideshow application.\n![The Application Logo][logo]\n\nCool, so this is a further development on my initial Reddit Slideshow Web App. It was quite fun moving from the dynamic weakly typed nature of JS back to C#.\nI'm slightly ashamed to admit it, but briefly I almost missed the JS style. However I can now see why JS is the lingua franca of\nthe web - especially when dealing with JSON responses from the reddit API I realized that the dynamic nature of the responses\nfrom a JSON endpoint weren't a good match with the type security of a static language and even with a strongly typed dynamic language\nlike Python, when your end goal is to provide a usable interface to the user, the silent failures of JS could be preferable.\n\nIf only there were a language which provided type safety while also providing functionality to set a type as an entry point to\na weak type. I haven't thoought deep enough into that idea to ascertain whether it is actually a worthwhile train of thought.\n\nDeveloping on C# was suprisingly fun - I found that it incorperated a nice mix of both C++ and Java concepts making it an easy\npickup for a developer mainly experienced in Java, not C++ - although I should point out that I wasn't really using many of the\nC++ inspired features in this project.\n\n## Design\nUnlike many of my prior projects, I didn't need much planning for this project. In terms of system design, as I was working with a framework, most of the UI\nplanning was already done for me - otherwise as I hadn't any prior experience of using the framework, I couldn't really plan for\nhow objects should work in this kind of application.\n\nIn terms of the UI design, as this was essentially a port of my web app, I simply reused much of the design from that. Looking back\nI'm actually suprised at how close the UI structure of both projects are despite being on completely different sytems.\n\n## Development\nDevelopment of this application was a veritable rollercoaster ride of emotions, from frustration to exhilaration and all between.\nSome features, while absolutely insignificant ended up taking ages. Particularly of note is the blurring on the slideshow images as\nthe selection menu pops up.\n\nAnother fun experience was the development of the Image class.\n\n### Development of the Image App\nAs I was developing the application on a local platform, I wanted to also encorperate buffering features (yes I know I could have done this on the web one as well, but developing locally I had no excuses).\nInitially I tried to implement it by encapsulating the storage and retrieval of the image into the class. When retrieve content was called the class would request an image from it's url and store it locally. However this ran into memory issues as I never removed the images.\n\nThen as a quick fix, I made the application delete the 2nd previous image if the memory use was too high(\u003e500mb) - this was a\nfoolish decision as the user was also provided the ability to jump to random positions throughout the list of images. This meant that\nif the user jumped around they could end up crashing the application from a memory excess. I also converted my manual stream/byte based\nimage retrieval functions to use the Image class supplied by the framework, as this would encapsulate that functionality, and also\naccording to the MSDN would allow for image reuse - as in if the same image is fetched from multiple locations, only one copy would be \nrequired.\n\nAfter this, I spent some time thinking through the image retrieval process (making sure to 'commit' this to memory as Image prefetching\nhad been a subject I have thought about in a project previously) and came up with a better method. The Image list keeps track of the \ndirection the user has just taken and uses it to prefetch the next image in that direction - the list also keeps a reference to the image\nit has prefetched. If the user jumps, their direction is set to none, and the previoiusly prefetched image is deleted. Then once the\nuser starts moving again and a direction has been established, I restart the prefetching.\n\nEven after this laborious task, I still kept on running into crashes. After spending some while in the debugger, I isolated the\nissue down to a memory spike at generation. What was interesting about this spike was that it didn't occur in the request json from\nreddit loop, but was also proporitional to the number of subreddits being requested. After about 2 hours of headscratching I finally noticed\nthe issue - oh and what a frustrating issue it was - it turns out I had placed a listener on the Image list too early, which meant\nthat as I populated the list, the callback would get fired like crazy, each time opening a stack frame again and again. This would \ncause the memory to exceed the limit and cause the crash. After a simple text movement, the application would work perfectly again.\n\n\n\n## Screenshots\n![Landing Page][landingpage]\n\nThe Landing page for the application. The Logo positioning has been ~~frustratingly~~ carefully adjusted to look good on all sizes.\n\n![Image View Page][imageviewpage]\n\nHow the actual slideshow looks. Potentially in the future I'll make the icons fade on a lack of mouse movement.\n\n![Options Page][optionspage]\n\nSelecting options - also notice the blur effect on the image. Took me friggen ages to get right.\n\n![On the Start Menu][startmenu]\nAhh man. Looks so good to have it on a start page like a real application!\n\n\n[logo]: https://raw.githubusercontent.com/Gopiandcode/UWP-RedditSlideshow/master/docs/images/AppLogo.png \"Reddit Slideshow Unofficial\"\n[landingpage]: https://raw.githubusercontent.com/Gopiandcode/UWP-RedditSlideshow/master/docs/images/LandingPage.png \"Landing Page\"\n[imageviewpage]: https://raw.githubusercontent.com/Gopiandcode/UWP-RedditSlideshow/master/docs/images/ImageViewScreen.png \"Image View Page\"\n[optionspage]: https://raw.githubusercontent.com/Gopiandcode/UWP-RedditSlideshow/master/docs/images/SelectionScreen.png \"Options Page\"\n[startmenu]: https://raw.githubusercontent.com/Gopiandcode/UWP-RedditSlideshow/master/docs/images/OnStartScreen.png \"Application on the Start menu\"\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiranandcode%2Fuwp-redditslideshow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiranandcode%2Fuwp-redditslideshow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiranandcode%2Fuwp-redditslideshow/lists"}