My love of developing for Appleâs platforms is dying. I need a break.
There; Iâve said it. For some friends and colleagues of mine, this comes as no surprise to them. But for those that have stuck with me for Fedigardens or took a peek into Indexing Your Heart, this will likely be the first time that youâve heard this.
âšď¸ Opinion Disclaimer
The following written piece is only applicable for my personal projects for iOS and macOS. I will continue to work with my teams and employers on making great iOS apps, frameworks, and tools, no questions asked.
I fell in love with writing Swift code and developing on Appleâs platforms years ago, when I had the chance to beta test the Swift Playgrounds app for iPad all the way in 2016/2017. Until that point, I had dabbed in other small programming projects with Visual Basic and C#; however, it didnât feel as fun or enjoyable as when I picked up and placed around with Swift. Fast-forward to today, and Iâve learned a lot on my journey as an iOS app and game developer. This journey has had its fair share of twists and turns, and a lot has changed since I started. Some of those twists have been for the better, and some had shaken me to the core.
Alas, it appears that my love for Appleâs platforms is dying. The garden I once loved nurturing for has started to wither, and a small few ascended the great tower. A place that I once considered delightful and enjoyable is crumbling, and Iâm scared of seeing that happen before my very eyes. Will I stand in a land of ruins, left behind those that care more for the greener pastures? Or will that garden flourish and become new again, rekindling my heart?
As it stands now, Iâm not so sure. Whatever the case may be, the magic that captured me is fleeting, and I canât stand to keep watching my surroundings fall apart in front of me. Long gone are the days when I was naĂŻve where I didnât see the cracks in the system.
The moral of the story is this: I need a break. Iâm not sure if I can keep the withering passion for developing for Appleâs platforms much longer. Perhaps it is time for me to explore greener pastures or find a new garden to tend to.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
â Live Streamingâ Interactive Chatâ Private Showsâ HD Quality
Anya is LIVE right now
FREE
Free to watch ⢠No registration required ⢠HD streaming
By the time I managed to sit down and open a new file so that I could write my goals for this year, I realized that the general âbroad goalsâ/open themes have put me in a situation where Iâm not being all that realistic with myself. When things are left to interpretation, goals and ideas get muddied, and itâs difficult to determine whether Iâve made any real progress outside the concrete ideas I had.
This year, I want to return to my core and set some tangible goals Iâd like to attain, which include:
Learning the Playdate SDK and making some games for the Playdate. This cute little console that Panic created with Teenage Engineering has got me hooked, considering its analog feeling. Iâd like to expand my horizons beyond iOS and create some fun things.
Setting healthier boundaries. My relationship with the Fediverse has buckled, and I realize that it wasnât the place it used to be. Perhaps this pertains to social media as a whole, but I need to reset my boundaries and make sure my mental health isnât at stake as a result.
Keep making Indexing Your Heart. Fedigardens is in a weird place right now, but I can at least take comfort in knowing that Indexing Your Heart is shaping up. After gathering some feedback, Iâd very much like to keep the project going. Maybe even port it to the Playdate, if I can figure out a good control schemeâŚ
2023 has been an interesting year for me. I wanted to focus on maintaining the various gardens of my life, such as app development, physical health, and mental/social/emotional health. I feel that Iâve done a decent job overall, though some areas couldâve better improved.
The worlds of the Fediverse garden are many
Fedigardens has been a year-long experiment by now, discovering and trying out ideas to make a more humane social media experience. The first half of the year was strong, as I worked to add features such as a frugal mode, blocked servers list, and more. However, it had fallen on the wayside in the later half of 2023, as I took on a major effort to refactor the project such that I could test things more reliably with guaranteed states.
In and of itself, this isnât a big deal; I had a roadmap to move everything over to the new architecture, and it was going well. Despite this, I began to realize that my relationship with the Fediverse (and social media as a whole) began to deteriorate. Opening Mastodon up felt like a chore at times, and I often felt I was swimming in an ocean of negativity, far greater than I can reasonably handle and process. Being a part of the Fediverse isnât as fun as it used to be for me. The reality is that the world just sucks right now, and no Mastodon client can ever fix that, even if it tried.
I hope that I can continue to develop Fedigardens, but I think I need to better establish my relationship with the Fediverse and get some help with developing the app as it grows.
A fully indexed heart
While Fedigardens has been on the rocks, the development of Indexing Your Heart has been rock solid. In July, I took on an effort to refactor the game to use the Godot engine (again), using Miguel de Icazaâs SwiftGodot library. This later developed into a prototype that feels substantial compared to the last build in May. Iâm excited to keep developing the game thanks to the new direction Iâm taking with it.
Iâve mentioned a lot on this in a blog post on the projectâs website already, and I recommend reading it over there.
The other gardens
In other areas, I feel that I have lacked a little on my own health gardens. While I moved to Delaware, and I am staying with close friends and participating in more activities online, my emotional garden hasnât flourished as much as I hoped. As aforementioned, my relationship with the Fediverse hasnât helped, either. I hope tending to this garden will allow me to reap the rewards later, but it appears that Iâm in for the long haul.
My physical garden appears to be okay, even though Iâm not as active. Iâm still being cautious around COVID, wearing masks and getting booster shots when I can. Likewise, I have been walking a bit more thanks to countless trips to the grocery store and other places. I do feel that I can continue to improve on these fronts, but I appreciate that it hasnât gotten worse.
Overall, it seems this yearâs goals have been met to some degree, and I look forward to seeing what 2024 brings.
A response to The Linux Experiment's Mac experiment
Nick from The Linux Experiment recently published a video titled "I used a MAC for 30 days, and I'm glad it's over", and I got a chance to watch this. In this video, Nick describes his experiences with using a Mac for a month, noting plenty of gripes with macOS and Apple's ecosystem. As an iOS app developer that has used macOS for several years, I'd like to provide my perspective on this video to provide some clarity, comment on, and constructively criticize the points that Nick has mentioned.
Before I dig into the commentary, I should note a few important things. First, I will only be covering the macOS segment of the video. While the other segments in the video carry their own equal weight, I feel that those other segments are reasonable in and of themselves, and I can't offer much else on top of those.
Next, I'd like to clarify that this commentary is not intended to shame Nick or forcibly attempt to change his point of view. The video makes it clear that macOS simply does not work for him, and that's okay. I generally go by the philosophy of using the right tools that work for me, and I won't raise a fuss with others for not matching my workflow. For Nick, that would be centered around tools that offer much more freedom and are more opinion-agnostic than the highly opinionated and more restrictive design of Apple's software. In that sense, macOS simply will not work for him.
Window management
There are some points where I agree that Apple can improve window management. While macOS natively offers a side-by-side experience in full screen (Split View), it doesn't quite match what Microsoft offers on Windows or other operating systems with tiling window managers. Third-party apps often have to fill in this gap, such as Rectangle. I, personally, use Lasso because it offers some great flexibility with window placement and lets me set up a perfect layout on a grid I specify.
To my understanding, Apple doesn't have the same capabilities as Windows regarding window management because of licensing or patent issues around that technology. While I doubt that it should hinder Apple from implementing these features, I can presume that there would be some legal implications.
Dock
I can see the frustration regarding the Dock that occurs when moving from Linux or Windows. However, I think this is more of a false equivalence based on a particular assumption, which is that the Dock acts exactly like a task bar. However, that assumption isn't necessarily true. While you can minimize windows into it, it's less of a task bar and more of a quick launcher for apps. When looking at it from the quick launcher lens, the behavior makes more sense, since clicking an icon will launch that app.
Full screen and traffic lights
By default, the menu bar does hide for full-screen apps; however, there is a setting you can toggle to have the menu bar display all the time: Control Center > Menu Bar Only > Automatically hide and show the menu bar. Set this option to 'Never', and the menu bar will remain visible all the time. I'm not certain why this isn't turned on by default on newer MacBooks, but the option exists, and I do use it frequently, especially in apps in which going to the menu bar is common.
The green traffic light button is a hindrance at times when you're not expecting the default behavior (I believe this was changed in 2014 with the release of OS X Yosemite). However, if you press the Option key while clicking the green button, it will maximize without going into full screen, which might be the desired behavior.
Cut and paste
For those very familiar with the cut-and-paste workflow, not having it in the Finder seems like a very weird and backwards choice. While there is no explicit option to cut and paste, you can copy the file and then move the item using Option-Command-V. To my understanding, having it set this way helps ensure that users don't lose files when attempting an operation like this, should they cut another file in the process (or something else happen). This also ties in to my earlier point about macOS being more opinionated than offering a free, opinion-agnostic design.
Moving files with spring-loaded folders
The approach for moving files that Nick shows utilizes spring-loaded folders, a feature that has existed on macOS for quite some time. The animations are slow by default, but this setting can be changed by visiting the accessibility settings. By going to Accessibility > Pointer Control > Spring-loading speed and sliding the slider all the way towards the rabbit, the animations are almost instant, reducing the time needed to hold down the mouse for moving a file using spring-loaded folders.
Click to focus
My understanding is that this happens because you're focused on a different app, so commands will register for that app instead of the window your cursor is hovering over. I'm uncertain if there are settings for this, but it can be a bit painful if you're not expecting it.
Installing apps
While Nick does follow what Apple would find ideal for installing apps, he does run into the major point of contention: the Mac App Store itself. From an end user's perspective, not having all the apps they need in a single place is jarring, and it is something that I can wholly sympathize with. However, it is important to understand that the Mac works fundamentally differently from other systems, like Linux and even mobile operating systems, regarding installing apps. The "standard" on desktop operating systems like macOS and Windows has been that you go elsewhere to download and install your apps, and that the platform's respective app stores will always be second-class.
This isn't quite the case for Linux and mobile operating systems, where everything can be centralized at a single point for installation. For iOS and Android, this has become a major topic of debate as a wide variety of developers take issue with their respective app stores; for this commentary, I will focus on iOS specifically. Several developers take issue with Apple's restrictive app store guidelines and other policies, especially the 30% (sometimes 15%) commission they take from in-app purchases. These developers would much prefer to make their own app store or sell directly to consumers, taking Apple out of the equation. As a result of this tension, along with potential antitrust concerns, the European Union has passed the Digital Markets Act (DMA) to force iOS and Android to allow third-party app stores and/or the ability to install apps from other sources besides their respective app stores. While I will not delve into my opinion on the DMA in this commentary, I will affirm that the Mac App Store does include similar restrictions. Companies such as Rogue Amoeba and Leitmotif GmbH (Kaleidoscope app developers) have left the Mac App Store because of these restrictive policies. Interest in the Mac App Store has been declining over the years, and I don't see this changing anytime soon.
Suffice to say, the Mac App Store isn't a GUI package manager, but it's a lot more involved than that.
Virtual desktops
Mission Control, the current evolution of virtual desktops and App ExposĂŠ, was introduced in OS X Lion. The last feature update for it, as I can recall, was in 2015 with OS X El Capitan, where you could easily create split views by dragging windows. Since then, not much has changed. I can imagine this being a pain point for those that aren't already used to the current flow, and I suspect this is why Apple introduced the Stage Manager feature last year with macOS Ventura. It would be nice to see some updates in this regard.
Window resizing and dragging
I totally get the frustration Nick has with this, and I do believe there is a setting to let you handle this with the trackpad. However, Linux does offer a much more intuitive solution if you don't fancy manually dragging windows yourself. Suffice to say, I do feel this is intended more for power users and enthusiasts than an average user, so I can understand why it's not there in macOS.
Trackpad gestures
I also get the frustrations behind the lack of gestures that Nick mentions in the video, but I feel this is more regarding what Linux offers versus macOS. To my knowledge, trackpad gestures aren't necessarily a universal standard, and developers are free to utilize gestures in ways they see fit.
Privacy and data collection
I absolutely agree that Linux easily trumps macOS in terms of privacy and data collection in the sense that, on Linux, it's practically nonexistent. If you're very privacy-conscious and want to send as little data as possible, Linux might be a better option for you. However, I am okay with Apple collecting some data from me since they use it to improve their other services. At least for iCloud, we do have the option for end-to-end encryption, thus preventing Apple from even seeing my iCloud contents (mostly). With that said, I do place more trust in Apple than I would with other tech companies such as Microsoft, Meta, and Google, but I can understand the desire to send as little data as possible.
It's interesting to see how others learn macOS the same way one would when playing The Witness. I do feel that Nick's frustration is justifiable given the prior expectations and assumptions he had. With that in mind, I do think it's important to always keep an open mind and not be afraid to "unlearn" older behaviors to better understand new ones. macOS simply isn't Linux, and it takes time and effort to re-acclimate and adjust your workflow if doing so is worth it. For Nick, that wasn't the case, and I agree with that position.
When I established my goals for last year, I had taken a different direction and declared it my "Snow Leopard" year. I won't echo my reflections on this from yesterday's post, but I did appreciate how open-ended I made that particular goal. So, this year, I'm making a broader set of goals again.
Currently, I am working on the Fedigardens app and Indexing Your Heart, my two major iOS projects in development. I'm also maintaining some smaller apps, like Give Me a Sniglet and Indexing Your Heart's internal tools. In a way, I have this small garden of iOS apps that I hold close to me and want to keep developing. I need to be my own technical gardener and take care of the garden I've meticulously crafted.
This gardener metaphor also extends to other areas of my life I'd like to improve, too, especially in emotional, physical, and social contexts. I won't go too deeply into those, but maintaining a healthy balance in my life and taking care of the garden that is me is critical.
Do these goals sound vague? Definitely, and it's up for interpretation. However, the beauty of this openness is that I can focus on attaining this goal without being too harsh on myself or worrying about the specifics. It's a way to help me accept some spontaneity in my life.
So, I guess it's time to pick up those tools and start tilling the dirt, for it's gardening time.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
â Live Streamingâ Interactive Chatâ Private Showsâ HD Quality
Anya is LIVE right now
FREE
Free to watch ⢠No registration required ⢠HD streaming
Introducing Fedigardens, and why I'm not fond of Hyperspace Desktop.
The app space for the fediverse was sparse when I started working on the Hyperspace project back in 2019. Although there were a good handful of clients on mobile and a couple decent web interfaces, I felt none of them were fully suitable for college students to use. This was ostensibly a big problem for me, since I wanted to show what the fediverse had to offer to others. So, I decided to make one myself, and thus Hyperspace was born.
The year is now 2023, and many things have changed since then. Twitter is burning to a crisp, and the fediverse is growing more than ever. At the time of writing, there are twenty-two unique apps listed on Mastodon's apps page, and the Mastodon project finally has its own official app. The Hyperspace project has two apps in the incubator: Starlight, a Mastodon client with Twitter integration for Apple platforms, and Luna, the spiritual successor to Hyperspace Desktop. Although I'm unsure if these projects will see the light of day, it's exciting to see the fediverse expand and take center stage. With all of this said, there are some things I've been reflecting on and pondering for a while now, which I'm going to present to you today alongside my yearly goals post.
Hyperspace Desktop wasn't my finest hour.
Important Note: The Hyperspace project, including the desktop app, is maintained by a small team. However, I will be focusing on my particular contributions, hence why I use "I" instead of "we".
There: I said it, and there's not much you can do about it. I won't deny that I really enjoyed creating this app; I learned a lot about software development and teamwork through this project. For the goals I had set forth, the app did exactly what it was supposed to; in fact, I often see many posts under the #hyperspace tag talking about its simplicity, even if there are parts of the app that are out of date. I'm glad that I've helped make the fediverse less daunting.
Yet, simultaneously, I consider Hyperspace Desktop to be one of my weaker attempts in the world of app development. First (and foremost), Hyperspace Desktop is unashamedly an Electron app. Yes, I did the best I could to have native integrations where possible, but I could only go so far with essentially a limited Chrome browser. It flagrantly breaks the design guidelines of the operating systems it runs on, and accessibility and performance were thrown out the window. This obviously made for a terrible experience for those fronts alone.
Scale and maintainability became major issues with Hyperspace Desktop as well. Several Node dependencies needed to be updated constantly because of the various vulnerabilities found, and the code was simply harder to maintain with all its spaghetti code and object-oriented approach. It became a grueling chore to maintain the codebase, especially with newer advancements such as Apple Silicon coming around the corner at the time. It was no surprise that Desktop was discontinued in 2022 as I made plans with the current desktop team to create Luna to supersede it.
A flower blooms in the garden
Last year, I revisited the topic of social media and fediverse clients as I wanted to experiment with how to make social media apps more humane. This experiment became the basis of my capstone project at Goucher, and Codename Shout was created as a result. Codename Shout treated the Mastodon timeline like a mailbox and stripped out typical social media features, like statistics for favorites and reblogs. Likewise, it focused heavily on being discussion-oriented with its text-first approach. It also aimed to be lightweight and frugally performant by limiting network resources and preferring a native UI on iPhone, iPad, and Mac.
Unfortunately, I never got to the testing phases due to some other hurdles; however, Codename Shout did get me to rethink social media and how we interact with it. Moreover, it rekindled my interest in the fediverse and creating a decent client.
A few weeks ago, I rummaged through the source code for that old project and started refactoring the code, tweaking it to take advantage of iOS 16's new APIs for SwiftUI. These tweaks included customizable toolbars, improved navigation, and proper multiple window support. I also stripped the macOS support because I felt the Mac version wasn't as polished as I'd like, and I was already using my own personal fork of the Mastonaut app, anyway.
Sooner than later, I realized I had a decent, email-styled Mastodon app that I'd want to use on my iPad and iPhone. Not only that, I realized that others might want a similar experience, where they can contribute to a conversation and then walk away just as easily, free from social media engagement traps. So, I spent some extra time preparing the app for general use and decided to make it available on TestFlight. That app became Fedigardens, the simplified, discussion-oriented Mastodon app for iPhone and iPad.
This is Fedigardens.
Fedigardens is all that I imagined Codename Shout to be and more. I've taken the lessons I've learned from Hyperspace Desktop and tried to create an experimental app that takes the fediverse in a different direction. Fedigardens is still in its infancy, however, and is by no means a finished product. I hope to continue working on it and making it suitable for general use in the coming months while doing my day job and working on Indexing Your Heart.
I recognize that most people might not be interested in how Fedigardens approaches Mastodon, and that's fine. They are more than welcome to use more typical apps such as Ivory, Toot!, and the official Mastodon app. But, for those that want to join me in this experimental journey, you can head over to https://fedigardens.app to get into the TestFlight program.
I'm not sure what's going to happen with Starlight and Luna; the future for those projects is unclear, and we haven't done much since May. I wouldn't be surprised if Hyperspace rides off into the sunset this year. Regardless, there are new contenders that can follow in Hyperspace's footsteps, and anyone is more than welcome to make a fork of the original Desktop app. You might need to make a few adjustments, though.
In any case, I'm excited to keep playing around with and continuing the Fedigardesn experiment. I hope you join me as I try out different ideas to change how we engage in discussion on Mastodon in a more humane way.
When I started writing my goals out for 2022, I had thought it would've been my "Snow Leopard" year, where I focus more on refinement and general improvement rather than big, ambitious (but realistic) goals:
2022 is going to be eventful for me for various reasons: graduating and finding a place for myself, for one. I donât want to be worrying on trying new things in the tech space and push myself too hard. Rather, I want to spend this year refining what I know and making even better products than before. I want to take time to master SwiftUI, SpriteKit, Godot, C#, etc., to make more performant, solid products. I want to have fun with the work Iâm doing and make it the best I can be.
It is now the end of the year, and I have to say that this did fortunately come true. Besides graduation and getting a job as an iOS developer, I spent a lot of this year refining my current skills with a multitude of projects. This allowed me to accomplish a fair amount, and I'm pretty happy with that.
First, I started some serious work for my upcoming game, Indexing Your Heart. I was unsure if the project would last for various reasons, but I was able to get out of my creative block and create a prototype for iPhone, iPad and Mac. I've never been more excited, as this game is more ambitious than Unscripted.
After spending four years at Goucher College, I have finally graduated and continued to refine my software development career by becoming a full-time iOS developer. It's no secret to anyone that I really enjoy creating apps for Apple's platforms over the years, despite the challenges such as App Store restrictions and API limitations. Now, I get to continue to foster that love and excitement as I take it on, both personally and professionally.
I'm looking forward to how 2023 plays out in the future, and I hope that things continue to look up from here.
For the past four to five years, I've been using YouTrack as my personal issue tracker for all of my various projects. Generally, YouTrack works incredibly well and is one of the most powerful issue tracking services I've used. It works well with JetBrains IDEs and gives me guest support out of the box for issue reporting from outside members. I've enjoyed using YouTrack for the past few years. Despite this, I've been slowly migrating my project tracking to the more widely used Jira.
This was an incredibly tough decision to make, but there were a few factors I considered when making the move.
First (and foremost): integration. While YouTrack supports integration with JetBrains IDEs and continues to gain more integrations in other services, Jira still remains the most versatile in this respect. The services I use regularly for game development such as Toggl Track, Notion, and Trello have support for Jira built-in without the need for additional setup or configuration. "It just works."
Next, the user base and target audience. I love how YouTrack makes it easy for outside members to file bug reports for software as a guest. However, I've noticed this feature isn't heavily utilized in my use case. Whenever someone reports a bug or issue to me, they usually do it by sending me a message on Discord or reaching out to me on social media. I've come to accept the fact that people won't use the issue reporter. Because of this, I won't need the anonymous access like I did in YouTrack. Thankfully, I don't need to worry about this with the free Jira plan. I may consider paying for that feature later down the road, but I won't need it for now.
Finally, my use case for issue tracking has changed. Before, I'd do all of my task tracking inside YouTrack, including regular tasks that didn't need a ticket necessarily. As I've been using Trello more, I've realized that I don't need to do everything inside YouTrack (or Jira, for that matter). Thankfully, the integration between Jira and Trello works pretty well, so I can turn existing Trello cards into Jira tickets and vice-versa. This also works as a good workaround to the anonymous access problem, where people can still see what I'm working on.
In short, my use cases for issue tracking has changed, and I recognize that it's a bit impractical to do it all in YouTrack, even though I can. I still love YouTrack as a service and will be keeping tabs on it. Likewise, my current instance will still remain online for archival purposes. However, I will be moving to Jira going forward and using it solely to track issues.
Hey, all! It is with great pleasure that I am announcing the launch of the very first prototype for Indexing Your Heart today. Finally, after a year of planning, replanning, and development, a tiny prototype to show what this game's potential is has finally landed.
TL;DR - The prototype has launched for iOS. It's very rough, but demonstrates the technical aspects of how the game will function. Try the prototype at https://indexingyourhe.art/prototype/.
A paintbrush and a canvas
I've done a lot of work since the last devlog, where I showcased a number predictor using SpriteKit and Core ML. The basic project for this became the foundation for one of the biggest parts of the game: the puzzle system (aka Paintbrush). I won't go into details as to how the puzzles work, as that would spoil the solutions, but the general idea of using a CNN to predict what solution the player has drawn works pretty effectively. It took about 900 images with slight augmentations in Create ML to get it working solidly; however, there's still a bit of leniency in the code that will need to be addressed.
I've found that Paintbrush works really well for iPads with Apple Pencils, though drawing with your finger or cursor on a Mac also works as well. There's no boundary like there is in The Witness, though I do have some code that prevents the player from drawing outside the panel. I still have to tweak Paintbrush some more to be better with validation, but I'm still pleased with the result.
Likewise, I'm happy with the current setup for maps. Typically, when I make games with SpriteKit, I use the built-in tile map node, SKTileMapNode. However, I've found this node isn't all that performant and can often cause memory leaks. Furthermore, making levels and maps using it can be painful, especially when working with tile sets; tile sets have to be generated in the SpriteKit tile set format, which takes a lot of work to set up if you have hundreds of tiles.
Recently, I discovered a framework that brings support for tile maps created with the Tiled map editor called SKTiled. After creating a tile set with the Tiled editor and mocked a simple tile map to use in SpriteKit, I wrote a small scene to import the tile map, and it works really well. I was able to cut down boilerplate code I usually wrote for parsing tile maps and still have the flexibility of the levels. I still need to measure the performance cost of SKTiled, but I'm loving this new approach already.
A quick conversation
The story is the other big aspect of this game that I've been fully developing, and it was the very first thing I did before doing any work on the game's code. This helped me focus a lot on the character development and the general direction of where to take the game.
Generally, my experience with writing stories for games comes from writing visual novels like Unscripted. As such, I wanted to ensure the game has a solid experience as a visual novel in addition to Paintbrush and its Witness-like behavior. This includes a lightweight scripting system that is performant and expressive.
Enter Caslon, the visual novel component of the game, and Jenson, the file format for the game's dialogue. Both were designed to be lightweight, flexible, performant, and expressive in nature. I based the Jenson file format loosely off the Dialogic timeline format, which stores its data as JSON. To make it lightweight and performant, I've compressed the files using the Brotli compression algorithm and store the compressed data as a Base64-encoded string. The tiny file size also helped my code read the files more quickly, making loading them a breeze. The current story, in its scripted form, takes only 77Â KB, which is even smaller than the Markdown source files they came from. If you're interested in playing around with the Jenson format, I recommend checking out JensonKit at https://github.com/Indexing-Your-Heart/JensonKit.
After building the Jenson format and converting the story files, I worked on creating a basic visual novel scene (aka Caslon) that took advantage of those files. It's a relatively basic scene that displays dialogue and menu options, when necessary. However, it works pretty well and behaves similarly to what Dialogic and Ren'Py offer. I'm pleased with the results and look forward to testing the support for loading images once I can conjure up some assets to use.
A cleaner workspace
I focused a lot on making the game's codebase as portable, modular, and testable as I can. Though I haven't written unit tests for some of the game's functions yet, I tried to separate most of the concerns and subsystems into their own separate Swift packages, which get imported into the main game. Caslon and Paintbrush live in their own packages, and Shounin, the game project, imports the rest. Given the modules and how I structured the project, I can safely say this is the Swiftiest game I've written, literally. I hope to further improve the codebase as the game grows.
Even though this is just the prototype version of the game that shows what the game will feel like, I am really proud of what I have accomplished. I'm looking forward to hearing how others find the prototype and see where my target audience is.
Check out https://indexingyourhe.art/prototype/ to join the TestFlight program and try the prototype today. I also highly encourage joining the Discord server at https://discord.gg/CXxnVhX to join the conversation.
Another rare instance where I reblog something here directly, but it's worth reading. If this game didn't have its own blog, I would have written it here.
It has come to my attention that Adobe has acquired Figma, a tool that I heavily use for graphic design on various aspects (mock-ups, icons, etc.). This raises serious concerns for me, and I cannot continue using Figma.
Adobe already has a competitor to Figma called Adobe XD. Though I've never used this product before, it does seem incredibly weird, if not concerning, that Adobe has acquired Figma while still having XD there. Generally, I try to stay out of conversations pertaining to antitrust and anticompetitive practices (see my current stances regarding Apple and sideloading), but this acquisition rings alarm bells.
Furthermore, I don't pay anything to Figma because the free plan does exactly what I need. I'm afraid that, in the future, Adobe will forcibly put Figma under their Creative Cloud subscription, which I have been vehemently avoiding. That is, if Figma still exists; there is also the concerning possibility that Adobe kills Figma to promote their product instead.
As it stands, I'm moving my project files off Figma and looking elsewhere. I am heavily considering using Affinity Designer instead, as I have had great experiences with the Affinity product line on both iPad and Mac (and heck, even Windows). I also have tried Designer before, and the software was solid.
I will definitely miss what Figma has to offer as a product, especially the plugins that make working with it so much easier. It had been a staple of creating mock-ups for me since last year, and I had recommended it since. I can't do that in good conscience anymore.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
â Live Streamingâ Interactive Chatâ Private Showsâ HD Quality
Anya is LIVE right now
FREE
Free to watch ⢠No registration required ⢠HD streaming
I've been on the fediverse since 2018-2019 and have been developing the Hyperspace family of products in that time. During my journey, I've been on a few instances:
mastodon.technology (before "the great wipe"*)
mastodon.social
fosstodon.org
koyu.space (before the transition to Pleroma)
I really like the fediverse as a whole and think it can do great things as more people come to it. Though, recently, I haven't been active in it: so inactive, in fact, that I discovered my current instance moved to Pleroma, and that my account doesn't exist anymore. Pleroma's pretty cool, though I generally prefer Mastodon as a whole, so I went to look elsewhere.
The major problem I always face, however, is looking for an instance I'd want to be a part of. Self-hosting is always an option, though I'm not in a place to do that at the moment. Furthermore, my inactivity in the fediverse, in a way, demotivates me from finding a good place and remaining active.
But, I did realize that I used my fediverse account for a few things:
Post to Twitter less (sorry)
Have my content somewhat decentralized
Create quips that my traditional site's blog wouldn't host anyway
As I mentioned in my Twitter thread on this, I feel that Tumblr can fill this role pretty well. Granted, it doesn't federate with the rest of the fediverse; in fact, it's not a part of it. But, I'm sure I can figure out a solution to that problem in the future. Regardless, this new "blog" is going to cover those use cases.
I'm still interested in the fediverse and will continue to develop Hyperspace Starlight and some of the Hyperspace Luna project. I just won't be actively participating in the fediverse as much with an official account to work with for now.
*The mastodon.technology got wiped once by accident due to a database migration gone wrong, if I recall correctly. My account disappeared as a result.
I don't plan on reblogging content from my new rambling site all the time to this blog (I'd prefer to keep this site for more formal blog posts), but I am doing so for this post to raise awareness as to why this new site exists in the first place.
The revisit isnât always nice the third time around
Itâs been nearly a few months since the last time Iâve posted an update to this project, where I mentioned some minor changes being made as the game progressed. Now that itâs nearly the end of August, things havenât really changed. Whatâs going on?
In the previous devlog, I briefly mentioned that I was looking into re-architecting some parts of the game:
Second, I will be revisiting the premise of the game as a whole and determine how to proceed with the project in the future. While having a mix of a visual novel and an RPG seems fun and unique, Iâm not sure if the story is well set up for this approach. Likewise, Iâm partially considering 3D games or games designed for mobile devices.
This major task has been looming over my head since I started a new job, and Iâve done lots of thinking about the game and what I want to shape it into. Iâd like to share some of these thoughts with you as I finish deliberating, although some of these thoughts may not fully make it into the game.
A swift breakup
The Godot game engine has been an indispensable tool to creating a lot of the games Iâve worked on in the past such as Bug Bounty!, Package Resolved, and The Costumemaster: Reloaded. Itâs quick, easy to use, and allows you to make games across platforms with ease. The internal scripting language, GDScript, is very Python-like and easy to pick up. Thereâs a lot to like about Godot as a tool for making indie games, and I love making games with it.
However, I feel that love is starting to fade a bit, including the general prospect of creating cross-platform apps. While I understand the appeal to create an app that works across platforms with little to no effort, Iâve come to fully appreciate writing apps native to the system it was designed for. Performance, integration, and compatibility are a few advantages I can name.
I've always been enamored with developing apps for iOS and macOS since I learned the Swift programming language years ago. Time and time again, this love has faded and rekindled. Swift 5 and SwiftUI, SpriteKit and Game Center, Swift Playgrounds, and newer versions of Xcode have contributed greatly to this; in fact, some internal tools for Indexing Your Heart have been written completely in Swift. This love has rekindled again as I work as an iOS developer, doing the things I've always wanted to do.
I'm torn. I could make Indexing Your Heart in Godot, tune it for the various platforms it will win on, reach a wide audience, and be happy. Or, I could make Indexing Your Heart the game I want it to be with the absolutely best integration at the risk of a small audience. In a lot of ways, Iâm facing the same potential issues I would with the original version of The Costumemaster; however, I feel it isnât as bad because Iâd be designing for iOS first, which has a much larger market share than macOS does. Itâs a tricky situation to be in, and I value making a quality product with the best tools and skills needed.
Of course, this doesn't necessarily mean I'm thinking of dropping Godot from my toolbox entirely; a good handful of games I'm developing still use it, and I want those to be as accessible as possible. Furthermore, I may have plans for smaller games that I want to develop with Godot in the future.
A puzzle in its own right
I really enjoy playing puzzle games. The process of discovery for solving problems and that âahaâ moment excites me, whether it be drawing lines on grids or opening intra-dimensional gateways to reach an exit. Compared to RPGs, shooters, and other genres, puzzle games have a special place in my heart, alongside sandbox games. And maybe Half-Life 2 (the only exception).
So why bring this up? Initially, Indexing Your Heart was planned to be a hybrid visual-novel and RPG game. At the time, I wanted to try making a game in a different genre because I felt burned out and unable to create interesting puzzles that fit the game well. I wanted to avoid making puzzles that were essentially fetch quests or last-minute puzzles that felt janky and just there to exist. Portal and, more recently, The Witness have been huge sources of inspiration for me on puzzle games done right, and I want to be able to make an experience that captures the essence of those games. As a result, I decided to make the hybrid RPG route, imagining it would be easier.
Fast forward to today, when this post is published. Iâm burned out from the RPG idea; it doesnât really excite me anymore. With the development of this game slowing down significantly, Iâm very much reconsidering the genre of this game to be a puzzle game. And instead of trying to come up with good puzzles in a short timespan, Iâll keep working and reiterating until it feels just right. If it takes five years, then so be it. As for what the puzzles might entail, I have a few ideas floating around, but Iâm not 100% sure at the time of writing this.
How to tell a story
Great stories are one of many critical components in a video game; itâs why I spent a lot of time working on Unscriptedâs story during its development. As a creative writer, I try to write stories that are well-thought-out and as entertaining to follow. Furthermore, I enjoy using the visual novel genre to tell these stories in a dynamic way without compromising the writing. However, Iâm unsure of how to integrate the visual novel format into a puzzle game in a way that doesnât feel shoehorned in. I am also reconsidering this aspect, as I donât want to toss out the existing story Iâve carefully crafted for this game already. Although Iâm unsure of the new approach going forward, I know that I will need to find a way to integrate the story in a way that doesnât hinder the center stage: the puzzle. For all I know, I could resort to environmental storytelling and hope the player picks up on the subtleties.
This reconsideration of the project on many fronts is a lot to process, and Iâm still unsure on a lot of aspects. But, at the end of the day, I care more about creating a great game with artistic skill than trying to make a game that will please the masses. These ideas I have arenât completely set in stone, but I will most certainly continue pondering them until I have something completely solidified.
I have github io pages , do you think it worth it migrating it to tumblr?
I found it worthwhile for me to migrate to Tumblr because I didnât want to handle updating the website frequently due to security vulnerabilities being discovered. Given that Jekyll, the static site generator used in GitHub Pages, has its own slug for posts and pages (unless you specify something else) there is some legwork involved in migrating to Tumblr.
So, really, itâs more of a âyour mileage may varyâ kind of answer.
I love playing with machine learning, especially with the Core ML framework; I use it in Give Me a Sniglet to determine the validity of possible words, for example. On the Mac, Apple makes it easy to create or convert ML models for use in apps with Xcode, and the integration between these models with Xcode projects is phenomenal.
When playing around with the Swift Playgrounds app for the past week, I expected a similar experience for machine learning models because Playgrounds supported Core ML. To my surprise, this support is very limited; while Playgrounds can recognize an ML model file (.mlmodel), it doesnât do anything with the model. Thankfully, after some research and debugging, Iâve figured out how to use ML model files for machine learning in a Swift Playgrounds app project.
Unfortunately, there isnât a way to create ML models on the iPad in the same way you can a Mac. However, you can create the model on a Mac and then transfer it to the app project file on iPad. Itâs not the most ideal situation, especially for those that only have an iPad, but it is a working method. I hope Apple improves this in the future by bringing the Create ML app to iPad and adding the automatic class generation support to Swift Playgrounds.
To import a Core ML model into Playgrounds, I first created a dummy project in Xcode and imported the ML model file into the project. After a quick build (no running the target), I opened the ML model file in Xcode to view the generated class. I then copied the contents of the file into a new file in the Playgrounds app project. I also copied the ML model file over to the iPad using iCloud Drive (though any method will work, as long as itâs available in the file picker).
Next, in Playgrounds, I added the ML Model file as a resource and opened the Swift file I created that has the modelâs generated class. I scrolled to the modelâs class (which extends from MLModel) and changed the class variable urlOfModelInThisBundle to the following closure:
CoreML Swift Playgrounds (Tumblr). GitHub Gist: instantly share code, notes, and snippets.
ML model files arenât compiled, and Core ML needs a compiled model to perform predictions. Unfortunately, importing a pre-compiled model into Playgrounds causes all sorts of issues, so the app needs to compile the model when launching for the first time. This code snippet will compile the ML model to a temporary directory that will be used for predictions later.
Once this initial setup is complete, I can use the Core ML model like I would in an Xcode project. As a test, I mocked up a miniature version of Give Me A Sniglet with the same ML model, and it works rather well.
Iâd love to see this process improve the future. The current method is cumbersome and still requires a Mac to complete the job. I donât know if Apple has plans for Swift Playgrounds 5, but improved Core ML support would be a bonus. Swift Playgrounds is a great way for anyone to learn iOS app development and experiment with new ideas in an easy to use fashion; machine learning should be a part of this goal.
The iPad will not replace my Mac, and thatâs fine
âYour next computer is not a computer.â
Or, so Iâm told. The notion of an iPad being able to replace a Mac, pixel for pixel, has always been strange to me. While the proposition is tempting, and I could realistically see myself doing that in the future, the iPad wonât be able to completely replace a Mac for me. And Iâm totally okay with that.
Before I delve into the details, Iâd like to give iPadOS (in its current and future state with iPadOS 16) some credit. For a lot of the tasks I perform on a regular basis, the iPad has replaced my Mac; these tasks range from checking emails and watching videos to writing blog posts like these and photo editing. Itâs pretty easy for me to get these tasks done without any issues, even though the Mac could do the same just as easily. Thereâs a sense of portability and ease of use that could only be achieved with iPad, and thatâs pretty exciting.
Multitasking also works really well for me. After using tiling window managers in Linux like i3 and the Pop!_OS shell, I realized that I really dislike tons of overlapping windows. Though it may look pretty at first, it becomes hard to use for me. I discovered that I really prefer just working on a single task at a time, usually in full screen or with multiple non-overlapping windows. I tried replicating the tiling window manager experience on my Mac with Amethyst, but it didnât work as well as I had hoped.
This is something the iPad really excels in for my use case. You can only have a maximum of three apps open at a time, and it uses a tiling window experience by default with Split View and Slide Over. The multitasking gets out of my way and lets me focus on my tasks without needing to futz around with windows. In my usage, I only have a few overlapping windows in apps like Procreate, and those instances are managed pretty well. Being able to have a reference window makes drawing easier than managing multiple reference layers. Take this and add decent keyboard like the Smart Keyboard cover (Iâm using the base 10.2â iPad), and itâs a neat little machine.
Furthermore, the future of iPadOS looks exciting. The upcoming Stage Manager feature will definitely be perfect for those that prefer the overlapping windows. I think itâs a great iPad-first implementation, although I donât plan on using it. Some are disappointed in Stage Manager because it doesnât act like macOS and is only supported on iPads with the M1 chip; however, I think these points will be moot over time. Apple may find a way to back-port the feature and will make refinements over time to get it just right. Stage Manager aside, Iâm also looking forward to having the Weather app on iPad and desktop-class apps with some long-requested features such as customizable toolbars and system-wide undo/redo.
Although the iPad has replaced most of the tasks I do on a regular basis, there are still some apps that prevent me from doing so: app and game development. Although Apple released a major update to Swift Playgrounds last year with support for developing publishing apps to the App Store, itâs still far from replacing Xcode and Godot in my workflows. Some capabilities such as Core Data and CloudKit are missing, preventing me from continuing development of Give Me a Sniglet! on the iPad. Thankfully, CoreML does exist in Swift Playgrounds and works as expected; however, I still need to copy over the compiled model from a Mac, which almost defeats the purpose of ML app development on an iPad.
Likewise, game development with SpriteKit isnât the greatest in this category, either. John Davenport, an indie game developer for Apple devices and content creator, outlined the issues in his video on Swift Playgrounds lacking game development resources, and I highly recommend you view this for additional context.
Despite these shortcomings, Playgrounds will be great for playing around with ideas and user interface designs before putting them into a serious project, and Iâm okay with doing that on an iPad with nearly instantaneous feedback.
In summary, the iPad will not replace my Mac as my only computer, though it is nearly there for most of the tasks I do. I donât expect Apple to make Swift Playgrounds more like Xcode in the future to have me shy away from Xcode on the Mac and the Godot game engine. However, I am perfectly fine with the way the iPad is, especially when paired with my Mac. That wonât change any time soon.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
â Live Streamingâ Interactive Chatâ Private Showsâ HD Quality
Anya is LIVE right now
FREE
Free to watch ⢠No registration required ⢠HD streaming
Okay, Iâll take sideloading⌠with an exception
As governments continue to press on with antitrust litigations against Apple for the App Store and other technologies, the likelihood that sideloading will become a thing on iOS increases. While I still feel that sideloading isnât the answer to Appleâs problem, I recognize that this is the future that governments will push towards. Appleâs continued lacking of action to address scams on the App Store arenât helping in this matter.
In preparation for this seemingly inevitable event, Iâm going to discuss my current thoughts about sideloading as both a consumer and a developer.
Edit: Iâve made some minor edits to this post to better reflect my opinions about this topic.
From a consumerâs perspective
While I am totally fine sideloading nowadays, I will still heavily gravitate towards the App Store for downloading apps, unless a third party developer has a compelling reason to not exist in the App Store. I enjoy being able to purchase and download apps from a single place on my iDevices and not have to manage multiple sources like I do on the Mac. Likewise, this is an area where Linux excels well for me by adding repository but using the same tool to download software, notwithstanding snaps and flatpaks. If I can streamline my experience to remain this easy, I will do it.
With that said, there are two notable exceptions in which Iâd be willing to download from another source:
If the app is innovative but doesnât meet App Store Guidelines. FlickType, xCloud and UTM come to mind.
If the appâs license clashes with the App Store: most notably, open-source software under the GPL license.
Of course, this only scratches the surface, and third party developers may have a very compelling reason for consumers.
However, if third party developers decide to publish their apps elsewhere solely for the any of the following reasons, Iâm not downloading:
Youâre doing something sketchy in the background thatâs not allowed on the App Store, such as tracking without my consent.
You just canât be bothered to put it on the App Store when you are very well able to (this is excluding those that canât afford the $99/yr to publish).
You dislike Apple so much to a point where publishing elsewhere is in spite of them. Of course, this takes the lowest priority if another aforementioned point is a big factor. (This point would be kind of difficult to find when downloading an app. Not my place to judge your app based on your particular relationship with Apple, so forget this one.)
Please, if you plan to go solely the sideloading route, consider your customer and not your wallet. This also applies to web apps, too; Iâm not going to use your web app if it doesnât work in Safari unless you have a compelling reason that isnât âSafari badâ or âSafari is the new IEâ.
From a developerâs perspective
As a developer that loves to make great apps for Appleâs platforms, I plan on sticking to the App Store for distribution. Although the App Review process is arbitrary and can be frustrating, itâs a lot easier for me to make great stuff when someone else takes care of hosting, in-app purchases, and the like. Thus far, Iâve had no major qualms with Apple or the App Review team on the App Store individually. However, if you as a consumer donât want to touch the App Store (for any given reason) but still want to use my apps, I will try to make them available for sideloading upon request.
The Witness - A metaphor of perspective and my college journey
The Witness always captured my attention every time I browsed the Games section of the Mac App Store. The colorful and vibrant screenshots invited me to play, despite the hefty price tag attached to it. I couldnât afford the game and kept it in my App Store wishlist until I purchased the game for ten dollars on the App Store for the iPad. After spending about two weeks playing The Witness, I realize that the game is a great metaphor for the journey Iâve been on for the past four years at Goucher College.
Before I begin, Iâd like to clarify that this isnât necessarily a review of The Witness, but rather a reflection of how strongly it parallels to my college experience in various aspects. Like the college experience itself, The Witness has its moments of success and failures. However, I do not plan on touching anything specific about the game unless it follows my experiences at Goucher.
There are plenty of reviews on The Witness that I recommend viewing:
Joseph Anderson: âThe Witness - A Great Game That You Shouldnât Playâ
Electron Dance: âThe Unbearable Now - An Interpretation of The Witnessâ
Writing on Games: âThe Witness and the Rejection of Immediacyâ
Furthermore, there will be spoilers; if you havenât already, go play The Witness before reading this reflection (that is, unless you donât plan on playing it).
The humble beginnings
The Witness starts with a few swipes on the screen to solve the first of many line puzzles where the player has to draw a line to a destination while following certain constraints. The colorful and vibrant environment invites you to explore the area as the player complete the tutorial. While nothing is explicitly told to them, the player is carefully guided by the puzzle panelsâ imaginary hands to a correct solution while being allowed to explore other solutions to the puzzles. After unlocking the gate and exiting the garden area, they are greeted with a puzzle on a door with colored squares and hexagons on lines that the player isnât able to solve at first. They likely decide to look elsewhere and stumble upon the series of puzzles that explain these mechanics to the player in its âshow, not tellâ way, allowing them to go back and solve the puzzle with the knowledge theyâve gained.
This gentle introduction into the inner machinations of The Witness almost fits the first-year experience. Goucher guided me through the hoops of the first year and set me up with classes, though sometimes lacking communication. Many of the events hosted such as the involvement fair and mental wellness day focused on the âshow, not tellâ aspect of the college, encouraging us to explore the campus and find out about its services without reading some large manual or pamphlet. These events also emphasized social interaction, in the same way that The Witness emphasizes the importance of exploring elsewhere or taking a break when a puzzle becomes too difficult. Although the social interaction aspect isnât explicitly stated anywhere, it becomes apparent that itâs a crucial part of the Goucher experience. And, like coming back to that first difficult puzzle on the door, I felt more comfortable taking advantage of what Goucher had to offer.
Itâs in the environmentâŚ
Some of The Witnessâs ingenuity lies in puzzles that use context clues from the environment. Again, the game doesnât tell you to look around for the answer. However, it lives up to its âshow, not tellâ approach by letting the player discover the answer theyâre looking for. The first of these puzzles, for example, requires the player to draw the path to a specific branch on a tree in an orchard, not far off from the puzzles I previously mentioned. The only clue available is a green-leaf tree with an apple on it. Once the player discovers the connection, this idea of checking nearby trees is cemented in their head as they complete the set of puzzles in the orchard.
Another example of these environmental cues comes from the set of the puzzles in the jungle. The player comes across a speaker hiding in the jungle forest, which later plays birdsongs. The lines on the panels seem to indicate some waveform, but the distinction at first is unclear. Eventually, through context clues, the player realizes that the pitch of the bird songs corresponds to the wave-like lines they have to chart on the panels. Once getting comfortable with the mechanic of mapping the path to the birdsong, The Witness increases the difficulty by throwing in false sounds like other birdsongs and loud noises. Though challenging at first, the player is able to distinguish the correct birdsong and complete the puzzles.
In some ways, my Goucher experience as a computer science major felt like this, where I had to look elsewhere or take in clues from my surrounding experiences to fill in the gaps. Besides the challenges of the rigorous courses in my major, other parts of my experience such as receiving college policy updates and engaging in the Goucher community were slightly hampered by this âshow, donât tellâ communication where some things werenât obvious at first. These hampered experiences ranged from smaller decisions to discovering processes needed to complete coursework.
For example, in my second year at Goucher, the cafeteria changed how breakfast was served by moving where to get breakfast from the dining hall to the student market. At first, my class assumed the first few times were special cases before classes began. To our surprise, however, it was made permanent. Although it was frustrating this wasnât clearly communicated beforehand at the time, I look back on this moment in the same way The Witness communicates with the player in these environmental puzzles. In hindsight, I shouldâve taken in environmental cues to realize that the breakfast situation wasnât going to change and that heading to the student market would be a normal occurrence. If they did it for the first two days after the first year orientation, it was likely permanent.
⌠and sometimes, a change in perspective
Returning to The Witness, the game takes environmental puzzles a step further and uses tricks in perspective like the Optical level in the 2019 puzzle game Superliminal to hide puzzles that arenât on panels. The âOpticalâ level, which focuses on optical illusions, includes perspective tricks that force the player to stand in a certain position to make an object appear from a painting on the walls. Whether the puzzles form from a series of suspiciously placed bushes or from cleverly timed boat rides, The Witness cleverly uses perspective to capture the additional challenges the player faces. Joseph Anderson, a video game analyst on YouTube, describes the discovery of these puzzles when heading to the mountain:
Thereâs a line puzzle that doesnât do anything; itâs a curvy line that you can draw over and over. It does nothing. [âŚ] I stepped forward to see what it was all about. I saw a river below that looked like the puzzle, so I clicked on it. [Something] happened, and I yelled, âHoly shit!â
One of my favorite examples of these puzzles can be found on the mountain, where an unusually-placed yellow pipe turns into a puzzle. The player has to ride the boat across the island to trace the outline of the puzzle around the mountain. These puzzles hiding in plain sight are incredible when you stumble upon them, but can be frustrating to look for if youâre set on searching for them. Itâs the same feeling of looking for your keys ten minutes straight before giving up, and then discovering them on the counter ten minutes later after youâve resigned to never find them.
My experiences at Goucher focused a lot on viewing the world from various perspectives as we worked through difficult issues in the current state of our world, ranging from the ever-present systemic racism and revocation of human rights in the United States to global issues like climate change and antitrust concerns in the tech industry. To that extent, Goucher had prepared me well, encouraging me to look through different lenses in my coursework and life. In some ways, it was very revealing of the world around me and what I take for granted. For example, taking courses in linguistics made me appreciate how complex language is and effectively steered me away from racial prescriptivism. However, it was sometimes frustrating when Iâm actively searching for a different perspective. Trying to find different perspectives in my computer science coursework was unhelpful when the material only existed in a vacuum. For example, learning about time and space complexity of algorithms didnât seem to connect to anything from the outside world. Now that Iâm writing this reflection, I finally see how it connects to the larger issue of climate change, where writing efficient software can make devices last longer and reduce the carbon footprint. I recommend reading Wim Vanderbauwhedeâs article âFrugal computingâ for more information.
When things get rough
On the topic of environmental puzzles, The Witness has a series of puzzles built around speculation in the desert, where the player has to use the light from the sun to reveal the correct path to draw, etched on the panel. The first time that the player uncovers this feels almost magical, if not clever. However, every subsequent time feels less magical and more frustrating because the angles to view the scratch marks become more obtuse. The puzzle stops being fun to âsolveâ and becomes a tedious chore, with new challenges added, such as viewing the marks from reflections in the water. I personally feel that using the word âsolveâ in this context isnât appropriate, as the answer clearly exists. The player merely has to reveal that answer rather than use critical thinking skills to come to a reasonable conclusion like the other puzzles in neighboring areas. By the time the player finishes the desert section, theyâre most likely sighing in relief, hoping they wonât have to deal with that kind of puzzle again.
In some ways, my experience at Goucher during COVID felt like this. At first, the swift transition from in-person classes to online felt almost magical, if not clever. As the pandemic dragged on, however, online courses lost their charm and became more challenging. I realized how much I took in-person learning for granted and recognized the importance of the social interaction only possible face-to-face. When we returned to in-person learning in my final year at Goucher, I had the same sigh of relief as the player would âsolvingâ those puzzles. The tedious chore of online course finally were behind me, and I hoped to never do that again. Although Goucher could have likely handled the situation better, the COVID task force and every other department did the best they could under the circumstances, shining the light in ways they could, even if the angles were obtuse.
In conclusion
Both The Witness and Goucher College provide curated experiences that are best enjoyed by exploring it with an open mind (and maybe a healthy dose of skepticism). While othersâ experiences at Goucher may not be the same as mine, my journey at the college has been as enlightening as The Witness. Even though both may have presented challenges along the way, I could handle it. And, despite the highly opinionated approaches The Witness and Goucher take, Goucher will always have the advantage of introspection and continuous improvement as opposed to The Witness, which I hope continues into the future as we navigate through a world wrought with problems on large scales. Iâm grateful for the curated experiences both Goucher and The Witness have given me, and I will carry it on as I enter a new chapter in my life.
Special thanks to Prof. Cottle for proofreading this reflection.