My Joomla
  • Homepage
  • Blog
  • Login
  1. You are here:  
  2. Home
  3. Blog

Blog

Using ChatGPT vs Gemini

Details
Written by: admin
Category: Blog
Published: 17 January 2026
Hits: 13

Introduction

I recently participated in a company hackathon where the challenge was to create a work-related system incorporating AI. My goal was to develop a deep learning neural network for a new feature in our system. Since the feature was new, we needed to generate training data. Given the tight three-day timeframe, we utilized Large Language Models (LLMs) to produce thousands of data points, which we then manually pruned.

During this data generation phase, my colleagues and I had a productive discussion comparing ChatGPT Plus and Gemini Pro. I've been using ChatGPT Plus for several months, but a friend suggested that Gemini Pro might be better suited for our development and coding tasks. This conversation sparked an idea.

Why not try Gemini Pro for a month and see how it performs? After all, I'm always looking for ways to streamline my work, and if switching LLM providers can enhance my productivity, I'm willing to give it a shot.

In this article, I will share my experience using Gemini Pro for one month and compare it to my experience with ChatGPT Plus. I conducted this experiment while my ChatGPT Plus subscription was still active (until June 10), which allowed me to make a direct comparison between the two platforms before transitioning exclusively to Gemini Pro.

Before we begin, though, I am quite aware of other LLM providers such as Anthropic, and I have actually tried them in the past as well. Although the claim that one LLM produces better code than another is subjective, I do not primarily use LLMs to generate entire codebases, but rather just snippets when needed. I mostly use LLMs at work to proofread what I have wrote, or to generate or convert code from one format to another (such as converting JSON data to a Mermaid Diagram), so I will be reflecting on my experience based on that.

Granted, I also use ChatGPT for a little creative work. Specifically, for generating avatars from an old-school game I play named Fallen Sword, and occasionally to help friends create 10-15 second videos for their Dungeons & Dragons scenarios. I will also include these creative features that the two offer in my comparison.

Code Generation

I use LLMs quite extensively, from bootstrapping drafts from bullet points for a proposal to converting one piece of code to another.

For instance, I tend to use LLMs to ease my visualization work, where I convert JSON into a UML class diagram.

I do this by sending the LLM anonymized JSON data resembling what I want to visualize, then ask it to convert this to MermaidChart syntax, and then make small edits to adjust it to what I want to present to my peers.

To make my example more concrete, here is a sample JSON I anonymized:

				
{
  "data_field_001": "XYZ",
  "data_field_002": "anonymizedcustomer",
  "data_field_003": "testenv",
  "data_field_004": "www.exampleretailer.com",
  "data_field_005": "exampleretailer.com",
  "data_field_006": "Generic Product Model X - Color",
  "entity_A": {
    "id_a1": 101,
    "id_a2": 11,
    "uuid_a1": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
    "code_a1": "A1B",
    "name_a1": "GenericBrand",
    "type_a1": "OWNED",
    "flag_a1": true
  },
  "entity_B": {
    "id_b1": 201,
    "ref_id_b1": 101,
    "uuid_b1": "b2c3d4e5-f6a7-8901-2345-67890abcdef0",
    "name_b1": "exampleretailer.com | Generic Product Model X - Color",
    "extras_b1": {
      "custom_b1_prop1": null,
      "custom_b1_prop2": null,
      "model_b1": "GN-XYZ-1000",
      "internal_ref_b1": {
        "ref_code_b1_1": "ANON001",
        "ref_code_b1_2": "ANON002",
        "ref_id_b1_1": 31
      }
    },
    "flag_b1": true,
    "op_b1": "update"
  },
  "entity_C": {
    "id_c1": 301,
    "ref_id_c1": 31,
    "ref_id_c2": 201,
    "item_code_c1": "XYZABCODYYYYMMDDHHMMSS123456789",
    "name_c1": "Generic Product Model X - Color",
    "url_c1": "https://www.exampleretailer.com/category/product/generic-product-model-x/item12345",
    "extras_c1": {
      "custom_c1_prop1": null,
      "value_c1": 99.99,
      "media_flag_c1": "ON",
      "content_flag_c1": "ON"
    },
    "op_c1": "update",
    "flag_c1": true
  },
  "entity_D": {
    "id_d1": 401,
    "ref_id_d1": 11,
    "name_d1": "Generic Category",
    "type_d1": "TYPE"
  },
  "link_entity_A": {
    "id_la1": 501,
    "ref_id_la1": 401,
    "ref_id_la2": 201
  },
  "media_collection_A": {
    "delete_refs_a1": [
      701
    ],
    "insert_items_a1": [
      {
        "id_mia1": 702,
        "ref_id_mia1": 201,
        "url_mia1": "https://assets.examplecloudstorage.com/api/assetstorage/anon-uuid-container/Resource",
        "type_mia1": "IMAGE",
        "extras_mia1": {
          "timestamp_mia1_1": "2023-01-01T10:00:00",
          "timestamp_mia1_2": "2023-01-15T14:30:00",
          "name_mia1": "generic_product_image_01.jpg",
          "size_mia1": 250000
        }
      }
    ]
  },
  "rules_collection_A": [
    {
      "id_rca1": 801,
      "type_rca1": "product_custom",
      "extras_rca1": {
        "keywords_rca1": {
          "lang_code_1": []
        }
      },
      "ref_id_rca1": 201
    },
    {
      "id_rca1": 802,
      "type_rca1": "product_description",
      "extras_rca1": {
        "keywords_rca1": {
          "lang_code_1": [
            [
              "ANONYMIZED FEATURE 1"
            ],
            [
              "EXTENDED BATTERY LIFE"
            ],
            [
              "DURABLE AND FOLDABLE"
            ],
            [
              "CUSTOMIZABLE BUTTON"
            ],
            [
              "WIRELESS CHARGING SUPPORT"
            ]
          ]
        }
      },
      "ref_id_rca1": 201
    },
    {
      "id_rca1": 803,
      "type_rca1": "product_title",
      "extras_rca1": {
        "keywords_rca1": {
          "lang_code_1": [
            [
              "GenericBrand"
            ],
            [
              "Generic Model X",
              "Model X"
            ],
            [
              "Color"
            ],
            [
              "AccessoryType"
            ],
            [
              "CategoryName",
              "CATEGORYNAME"
            ]
          ]
        }
      },
      "ref_id_rca1": 201
    },
    {
      "id_rca1": 804,
      "type_rca1": "regulatory_compliance",
      "extras_rca1": {
        "flag_rca1": false
      },
      "ref_id_rca1": 201
    }
  ],
  "data_field_007": "AnonymizedCustomerTestEnv",
  "data_field_008": "UserXYZ123"
}

				
			

This JSON data contains multiple nested fields, and some of them even go three levels deep. In my testing, I usually have fewer problems with Gemini than with ChatGPT. I did not fully test every model but only tested with the models that have the highest level of reasoning available: Gemini 2.5 Pro and o3 from ChatGPT.

				
classDiagram
    class SampleAPIRequest {
        +string data_field_001
        +string data_field_002
        +string data_field_003
        +string data_field_004
        +string data_field_005
        +string data_field_006
        +string data_field_007
        +string data_field_008
        +EntityA entity_A
        +EntityB entity_B
        +EntityC entity_C
        +EntityD entity_D
        +LinkEntityA link_entity_A
        +MediaCollectionA media_collection_A
        +RulesCollectionAItem[] rules_collection_A
    }
    class EntityA {
        +int id_a1
        +int id_a2
        +string uuid_a1
        +string code_a1
        +string name_a1
        +string type_a1
        +boolean flag_a1
    }
    class EntityB {
        +int id_b1
        +int ref_id_b1
        +string uuid_b1
        +string name_b1
        +boolean flag_b1
        +string op_b1
    }
    class EntityBExtrasB1 {
        +string custom_b1_prop1
        +string custom_b1_prop2
        +string model_b1
    }
    class EntityBExtrasB1InternalRefB1 {
        +string ref_code_b1_1
        +string ref_code_b1_2
        +int ref_id_b1_1
    }
    class EntityC {
        +int id_c1
        +int ref_id_c1
        +int ref_id_c2
        +string item_code_c1
        +string name_c1
        +string url_c1
        +string op_c1
        +boolean flag_c1
    }
    class EntityCExtrasC1 {
        +string custom_c1_prop1
        +float value_c1
        +string media_flag_c1
        +string content_flag_c1
    }
    class EntityD {
        +int id_d1
        +int ref_id_d1
        +string name_d1
        +string type_d1
    }
    class LinkEntityA {
        +int id_la1
        +int ref_id_la1
        +int ref_id_la2
    }
    class MediaCollectionA {
        +int[] delete_refs_a1
        +MediaCollectionAInsertItem[] insert_items_a1
    }
    class MediaCollectionAInsertItem {
        +int id_mia1
        +int ref_id_mia1
        +string url_mia1
        +string type_mia1
        +MediaCollectionAInsertItemExtrasMIA1 extras_mia1
    }
    class MediaCollectionAInsertItemExtrasMIA1 {
        +string timestamp_mia1_1
        +string timestamp_mia1_2
        +string name_mia1
        +int size_mia1
    }
    class RulesCollectionAItem {
        +int id_rca1
        +string type_rca1
        +int ref_id_rca1
        +RulesCollectionAItemExtrasRCA1 extras_rca1
    }
    class RulesCollectionAItemExtrasRCA1 {
        +boolean flag_rca1
        +RulesCollectionAItemExtrasRCA1KeywordsRCA1 keywords_rca1
    }
    class RulesCollectionAItemExtrasRCA1KeywordsRCA1 {
        +string[][] lang_code_1
    }
    SampleAPIRequest "1" *-- "1" EntityA : entity_A
    SampleAPIRequest "1" *-- "1" EntityB : entity_B
    SampleAPIRequest "1" *-- "1" EntityC : entity_C
    SampleAPIRequest "1" *-- "1" EntityD : entity_D
    SampleAPIRequest "1" *-- "1" LinkEntityA : link_entity_A
    SampleAPIRequest "1" *-- "1" MediaCollectionA : media_collection_A
    SampleAPIRequest "1" *-- "0..*" RulesCollectionAItem : rules_collection_A
    EntityB "1" *-- "1" EntityBExtrasB1 : extras_b1
    EntityBExtrasB1 "1" *-- "1" EntityBExtrasB1InternalRefB1 : internal_ref_b1
    EntityC "1" *-- "1" EntityCExtrasC1 : extras_c1
    MediaCollectionA "1" *-- "0..*" MediaCollectionAInsertItem : insert_items_a1
    MediaCollectionAInsertItem "1" *-- "1" MediaCollectionAInsertItemExtrasMIA1 : extras_mia1
    RulesCollectionAItem "1" *-- "1" RulesCollectionAItemExtrasRCA1 : extras_rca1
    RulesCollectionAItemExtrasRCA1 "1" -- "0..1" RulesCollectionAItemExtrasRCA1KeywordsRCA1 : keywords_rca1

				
			

Gemini got most of it correct, as seen in the figure above, although it had problems interpreting the content within extras_rca1 of rules_collection_A. For instance, Gemini somehow conveniently dropped keywords_rca1. If it were me, I would create two objects to represent the differing structures for extras_rca1 and then wrap them in a Union clause.

				
classDiagram
class SampleAPIRequest {
  +String data_field_001
  +String data_field_002
  +String data_field_003
  +String data_field_004
  +String data_field_005
  +String data_field_006
  +String data_field_007
  +String data_field_008
  +EntityA           entity_A
  +EntityB           entity_B
  +EntityC           entity_C
  +EntityD           entity_D
  +LinkEntityA       link_entity_A
  +MediaCollectionA  media_collection_A
  +RuleItem[]        rules_collection_A
}
SampleAPIRequest --> "1" EntityA
SampleAPIRequest --> "1" EntityB
SampleAPIRequest --> "1" EntityC
SampleAPIRequest --> "1" EntityD
SampleAPIRequest --> "1" LinkEntityA
SampleAPIRequest --> "1" MediaCollectionA
SampleAPIRequest --> "*" RuleItem
class EntityA {
  +int     id_a1
  +int     id_a2
  +String  uuid_a1
  +String  code_a1
  +String  name_a1
  +String  type_a1
  +bool    flag_a1
}
class EntityB {
  +int     id_b1
  +int     ref_id_b1
  +String  uuid_b1
  +String  name_b1
  +bool    flag_b1
  +String  op_b1
}
EntityB --> "1" ExtrasB1
class ExtrasB1 {
  +String? custom_b1_prop1
  +String? custom_b1_prop2
  +String  model_b1
}
ExtrasB1 --> "1" InternalRefB1
class InternalRefB1 {
  +String  ref_code_b1_1
  +String  ref_code_b1_2
  +int     ref_id_b1_1
}
class EntityC {
  +int     id_c1
  +int     ref_id_c1
  +int     ref_id_c2
  +String  item_code_c1
  +String  name_c1
  +String  url_c1
  +String  op_c1
  +bool    flag_c1
}
EntityC --> "1" ExtrasC1
class ExtrasC1 {
  +String? custom_c1_prop1
  +float   value_c1
  +String  media_flag_c1
  +String  content_flag_c1
}
class EntityD {
  +int     id_d1
  +int     ref_id_d1
  +String  name_d1
  +String  type_d1
}
class LinkEntityA {
  +int id_la1
  +int ref_id_la1
  +int ref_id_la2
}
class MediaCollectionA
MediaCollectionA --> "*" MediaItemA
MediaCollectionA --> "*" int
class MediaItemA {
  +int     id_mia1
  +int     ref_id_mia1
  +String  url_mia1
  +String  type_mia1
}
MediaItemA --> "1" ExtrasMIA1
class ExtrasMIA1 {
  +DateTime timestamp_mia1_1
  +DateTime timestamp_mia1_2
  +String   name_mia1
  +int      size_mia1
}
class RuleItem {
  +int    id_rca1
  +String type_rca1
  +int    ref_id_rca1
}
RuleItem --> "1" ExtrasRCA1
class ExtrasRCA1 {
  +Map    keywords_rca1
  +bool?  flag_rca1
}

				
			

In contrast, ChatGPT started to get confused with the MediaCollectionA part. It created an unrelated class called int (I'm not sure where it got that from), and then it also mishandled ExtrasRCA1, much like Gemini.

Comparing the two, I usually need fewer edits with Gemini, if any at all. Most of the time, Gemini gets it right, but there are also cases where I need some back and forth with both LLMs.

Mind you, I also tested researching code with an LLM, and based on my experience, the two are mostly the same in that department. My process involves searching for features (sometimes on a search engine), receiving feedback from the LLM, and then engaging in some back-and-forth before I do my own cross-checking to ensure its output is not a hallucination.

In that regard, both ChatGPT and Gemini are fine. I did not test vibe coding for the two, nor do I do vibe coding, but overall, in my use case of diagram conversion, Gemini comes out on top.

Lastly if you are wondering why I put my experience of diagram conversion in code generation it is because Mermaid is a code as a chart. In an essence what I am doing is just the same task as creating simple code.

Image Generation

I use image generation quite extensively, often to create avatars for a text-based game I play or for forum-based games like Fallensword. When it comes to pure base-to-image generation, I find the two to be equal.

Using this prompt:

				
Generate a new image
Create an image of a warrior, with magical artifacts, that just came back from an adventure and now visits back the king. The king must be at the back of the warrior and the warrior must be the center of the image.
The king is very far back
Add also audiences at the side, must be royal members of the castle 

				
			
Figure 1. Image Generation of my current Avatar in Fallensword only using Text

However, Gemini lacks the ability to refine its previous image generations, whereas ChatGPT is very good at it. This gap is more obvious when modifying non-AI images and having the AI reimagine them. For example, I might want to reimagine a personal photo of mine in a Studio Ghibli style.

Figure 2. ChatGPT restyling my image with my dog in Studio Ghibli style

You can even give ChatGPT mockups or wireframes of what you want to do with a detailed description and often times it ends up close if not exact with what you want it to be.

Figure 3. Asking the two AIs to reimagine a gameplay screenshot of Chaos Break (PS1) if it was in real life

For my use case, what Gemini can do is fine, but for everything else, ChatGPT comes out on top when it comes to image generation.

Video Generation

ChatGPT itself cannot generate videos. For that, OpenAI offers a separate portal for image and video generation called Sora. Sora is actually very good; it has the same ability to use existing images as context, so you can do a lot with it.

I have reimagined a Studio Ghibli-style photo and animated it for everyone's entertainment. In other cases, the avatars I generated for the games I play ended up being animated (saved as APNGs).

However, there is one thing Gemini does (via its Veo engine) that Sora cannot: it can make characters speak. This can lead to very interesting sketches, as you can write a prompt that includes a person's dialogue and have them act it out.

Although I haven't tested this feature extensively, I did generate a few videos for a laugh with my friends. For example, we were discussing AI video generation when another friend tried to hijack the conversation by talking about the peach jam she was making. As a creative way to steer the discussion back on topic, I prompted Gemini, "A woman creating peach jam and saying, 'I created a peach jam using fake videos,'" which led to a funny eight-second clip.

I can imagine it being used for a movie or a short cutscene, although I did notice it's terrible for non-realistic videos—but then again, so is Sora.

That being said, the ability for characters in Gemini's videos to speak is very good, and for that, I will say Gemini comes out on top on this one.

Writing assistant

I use LLMs to revise or proofread what I've written, and I have been doing this for quite some time in situations such as writing emails or blog articles.

There are also cases where I ask an LLM to generate proposals for me from just bullet points. This is especially useful when someone asks for something as soon as possible, but I can't write it out at that moment. I can dictate the points via voice, have the AI generate a draft, and then just read it over once to make any revisions.

For this task, I even created a specific project on OpenAI, but I often find that the "Gem" I created with Gemini (their equivalent to OpenAI's GPTs) performs better for my use case.

Conclusion

Basing on my findings, I can say that Gemini seems to be the better AI for my use cases. It is better at coding, video generation and as a writing assistant. However even though Gemini performs better, I will not say that ChatGPT is terrible at it, afterall I have been using ChatGPT pro for quite some time now (almost a year to be exact).

Honestly, I wish I could have both, but due to budget constraints, I've decided to stick with Gemini. I will certainly miss the better image generation from ChatGPT, but aside from the better performance for my work use cases, I also get 2TB of storage bundled in. For me, that's quite a steal.

Why Indie Games Are Better and is the Future of Gaming

Details
Written by: admin
Category: Blog
Published: 17 January 2026
Hits: 8

Introduction

When most people hear "indie games," they think of small teams, shoestring budgets, and probably even pixel art aesthetics. However, for this article, I’m going back to what indie actually means: independent.

As I believe, ownership and creative freedom define indie, not headcount or budget.

Figure 1. Baldur's Gate 3: showcasing detailed graphics, high replayability and very expansive gameplay

By that definition, Baldur’s Gate 3[1] is one of the greatest indie successes in gaming history. Larian Studios delivered a polished, expansive RPG that embarrassed many traditional AAA releases, and they did it without a corporate parent pulling the strings.

Then we have a fresh example: Clair Obscur: Expedition 33[2] by Sandfall Interactive.

Figure 2. Clair Obscur: Expedition 33 showcasing detailed visuals despite being develop by an indie studio

Founded by ex-Ubisoft developers tired of corporate creative decay, Sandfall represents a new generation of indie ambition. They partnered with Kepler Interactive to help publish the game, but crucially, they kept their independence intact.

Clair Obscur isn’t just another indie project. It’s a statement that stunning, AAA-quality experiences can come from studios that refuse to sell out.

True, these two are what the industry calls unicorns. But they are not alone. There is also No Rest for the Wicked[3] by Moon Studios, an upcoming isometric hack-and-slash game currently in Early Access on Steam.

Figure 3. No Rest for the Wicked showing very flashy effects

Another, from the Souls-like genre, is AI Limit, an anime-style game that follows a similar aesthetic to Code Vein.

Figure 4. AI Limit showcasing impressive anime visuals

I could go on and on, and these are just on the premium side of the indie spectrum. There are also those that help define entire genres, like Vampire Survivors[4], Hades[5]

Figure 5. Vampire Survivors gameplay

What is my point here? The point is that even though there are notable AAA games, if we look back over the last decade, the indie scene is where the real innovation is happening.

Figure 6. Balatro gameplay

The Rise of Indie Games

Indie games are not a new phenomenon. They have been around for decades, always a part of the gaming landscape. Their presence grew alongside the rise of the internet and the democratization of game development tools.

Flash games are a perfect example of how indie games rose to prominence, reaching millions of players worldwide and proving that anyone with creativity and a keyboard could make an impact.

For example, tower defense games originally emerged as custom maps in RTS titles like Starcraft[7].

Figure 7. StarCraft Defense of the Galaxy tower defense, a bundled UMS (Use multiplayer settings) map

Then with the expanded map editor in Warcraft III[8], have even expanded the mechanics in the tower defense mechanic later.

Figure 8. Warcraft III The Frozen Throne - The crossing bonus/secret campaign, adding a tower defense twist in this RTS game

However, the tower defense genre, was only considered as a sort of mini-game.

Figure 9. Gemcraft - One of the first games that streamlined a dedicated tower defense formula

Flash games such as GemCraft[9], Bloons[10], and many others took the genre to a whole new level, making it more accessible, casual, and addicting for a global audience.

Figure 10. Bloonds TD - Another ogames that streamlined a dedicated tower defense formula

Another key example is Dino Run[11], a game created in just one week for a game jam.

Figure 11. Dino Run having a left/right only runner / platform game paving the way for endless runners

Of course, the real breakthrough came with Canabalt[12], which crystallized the endless runner genre. Its success sparked an entire wave of games like Temple Run[13], Subway Surfers[14], and many others.

Figure 12. Temple Run gameplay

Flash wasn’t the only platform that fueled the rise of indie games. Java also played a major role, most notably with Minecraft[15].

Figure 13. Minecraft gameplay

Unity, too, became a critical tool for indie developers. Many indie games today are built on Unity, and interestingly, Unity once had its own browser plugin called Unity Web Player. This plugin allowed players to run Unity games directly in their browsers before it was discontinued in 2015, yet many games created during that era are still played today.

Figure 14. Adventure Quest and Dragonfable Gameplay

For Flash, studios like Artix Entertainment who created AdventureQuest[16] and DragonFable[17] are perfect examples of how Flash games continued to thrive long after Adobe officially ended Flash support.

Figure 15. Dead Frontier Gameplay

As for Unity Web Player, a great example is Dead Frontier[18] a zombie MMO that remains more popular today than its own sequel.

Meanwhile, Java took a different path, favoring standalone applications. Although browser-based Java games became rare, technologies like Java Web Start kept browser-launchable Java applications alive for a time. This approach eventually paved the way for projects like CheerpJ[19], which allows Java applications to run in modern browsers via HTML5.

Similarly, there’s Ruffle[20], a Flash Player emulator that enables classic Flash games to run on modern browsers. As an open-source project, Ruffle has gained significant traction, making it possible for players to continue enjoying Flash games without relying on the now-defunct Adobe Flash Player.

So while Flash and its browser plugin counterparts may be dead, their legacy and the indie games they inspired lives on.

The Indie Games Scene Today

Even though Flash is gone, the indie game scene is thriving. If we take an introspective look at why Flash became such a powerful tool for indie developers, it all boils down to one key factor: accessibility.

Flash allowed developers to publish their games online without the need for a publisher, a console, or expensive distribution channels. This democratization of game development only accelerated in recent years with the rise of platforms like Steam.

During Flash’s heyday, many AAA studios thought that PC gaming was dead. They were wrong. The rise of Steam and the explosion of indie games proved it.

Originally, Steam was intended as a platform for Valve’s own titles. But it quickly evolved into a haven for indie developers. It gave them the ability to publish directly to consumers and bypass the traditional publisher model entirely.

This shift in distribution led to a surge of creativity and innovation in the gaming industry. Indie developers, no longer constrained by big publishing, were free to take risks that larger studios often avoided.

As a result, the gaming landscape became more diverse. From narrative-driven experiences like Life is Strange to experimental titles like Journey, indie games have consistently pushed the boundaries of what gaming can be.

But Steam isn’t the only platform that helped indie developers. Mobile platforms like iOS and Android also played a significant role in the rise of indie games.

The App Store and Google Play Store made it easier than ever for developers to reach a global audience, and many indie games found massive success through mobile. Innovation was no longer tied to consoles or PCs alone.

Speaking of mobile games, you don't often see AAA games dominate the space. Meaning that a world can live without AAA games existing at all.

The Future of Gaming and Conclusions

This is more of a prediction than a fact, but I believe the future of gaming lies in the hands of indie developers.

Right now, most AAA games are being developed by studios owned by large corporations. These corporations prioritize profit over creativity, which has led to a growing homogenization of game design.

Many of these studios have also shifted to free-to-play models, a trend that is becoming more common across the AAA space. While it makes financial sense, this model is often criticized for putting monetization ahead of player experience, leading to a lack of innovation and creativity.

This is where indie developers come in. They aren’t beholden to shareholders or corporate interests. They can take risks, experiment with new ideas, and create unique gaming experiences that truly resonate with players.

Baldur's Gate 3 may be a unicorn, but then there’s Clair Obscur: Expedition 33, a game that’s not only visually stunning but also offers a fresh gameplay experience.

And it’s not just about vision. The tools needed to make games are more accessible than ever. Game engines like Unity and Unreal Engine have made it possible for small teams or even individuals to create high-quality games without the need for massive budgets.

On top of that, AI tools are starting to help with game design, art, and even music. This means indie developers now have the ability to create games that can rival AAA titles in quality, without needing the enormous manpower that used to be required.

What do you think? Are indie games the future of gaming, or will AAA games always have a place in the industry? Only time will tell. But one thing is for sure: the indie game scene is thriving, and it’s not going anywhere.

The future of gaming is bright, and it’s being shaped by the creativity and innovation of indie developers. So the next time you play an indie game, remember — you’re not just playing a game. You’re supporting a movement that values creativity, independence, and the spirit of gaming itself.

The best browser for the Steamdeck

Details
Written by: admin
Category: Blog
Published: 27 February 2025
Hits: 288

Introduction

One of the most common questions from new Steam Deck users is, “How do you browse the internet with this thing?” While the Steam Deck comes with Firefox preinstalled, it’s not accessible in Gaming Mode—the default interface. To use Firefox, you have to manually add it as a non-Steam game in Desktop Mode.

Fortunately, there are scripts that enable Firefox, installed via Flatpak, to function within Gaming Mode. These scripts utilize KWin on top of Gamescope (Gaming Mode’s Wayland compositor), allowing users to enjoy tab switching and other browser conveniences.

However, beyond configuring Firefox, there are many browsers available on Linux. Considering the unique form factor of the Steam Deck, its hardware constraints, and the limitations of its operating system, let’s answer the question: Which browser is the best fit for the Steam Deck?

Challenges

The Steam Deck’s operating system, SteamOS, and its hardware present unique challenges for browsing. For instance:

No Native Autocorrect or Spelling Suggestions

While the OS includes an on-screen keyboard, it lacks key features like autocorrect and spelling suggestions.

Limited Voice Typing Support

Though the device has built-in microphones, SteamOS doesn’t natively support voice typing.

Typing on the Steam Deck often involves using the trackpads to mimic left and right mouse clicks, which works but can be cumbersome for prolonged sessions.

Extensions to address these gaps

Luckily, some browsers and extensions address these gaps:

  • Voice Typing: Extensions like Dictanote’s Voice-in enable voice-to-text functionality, albeit with occasional quirks.
  • Spell Checking: Most browsers include built-in spell checkers, which, while not a replacement for autocorrect, help with typos and spelling errors.

There are plenty of more, you just have to make an effort to visit your browser’s extension store.

Browser Engines

For technical users, the choice of browser often hinges on the strengths and weaknesses of these engines. For non-technical users, the focus is more on features and usability rather than the underlying technology.

Modern browsers are built on two primary engines:

WebKit and Its Derivatives (Chromium/Blink)

Powers popular browsers like Chrome, Edge, and Safari.

Quantum

Powers Firefox and other Firefox-based browsers such as but not limited to: Florp, Zen, Waterfox and Tor.

Recommendations

I have split the recommendation to two. Two browsers per engine, this is because although I recommend Quantum based browsers by default (mainly because of extended support for manifest v2 extensions such as ublock origin), there are use-cases where Webkit is better such as playing browser games.

Additionally, I do disregard if the browser is either proprietary or not. Given that most people who use the Deck do not care about it anyways (considering that Steam is proprietary) so there will be proprietary browsers in the list.

Here are the browsers I recommend:

Webkit and derivatives based browsers

Figure 1. Customized Vivaldi running on Steam deck
  1. Vivaldi – Vivaldi packs alot of features to boot and some of its features are better suited for the Deck such as Built in toolbar clock, sync with notes and reading list and easy to customize user interface.
  2. Edge – Edge is a good choice if you are looking for a chromium based browser. Although it does not contain the features Vivaldi has that I have listed above, it does however have features better suited for a browser user such as Built in coupon finder and Built in image editor.
Figure 2. Edge running on Steam deck

It should be noted that these two browsers offer alot more than what I listed but for me these are the features that I find killer for them. Some of the features that I did not list is a way to group tabs, split view, other sort of syncing (sending files from different devices), etc.

Quantum based browsers

Figure 3. Firefox running on Steam deck
  1. Firefox – One of the best and most customizable browsers. You can modify its user interface using userChrome.css, as explained in Opening Unlimited Tabs with Firefox article . There is a list of popular userChrome.css themes available, and if one wishes to customize it even further such as having tabs on the bottom, a popular GitHub repository offers various Firefox UI hacks. It should be noted that this is just one of many repositories with customization options.
  2. Zen – While not as customizable as Firefox, Zen is built from the ground up with an easier-to-tweak interface and a wide range of options. It comes with many of my favorite extensions preinstalled (or alternatives), like auto tab discard and containers. However, since the browser is still in beta at the time of writing, expect some bugs. For instance, GPU acceleration doesn’t work on my Surface device.
Figure 4. Zen running on Steam deck

The links are already included in the browser names, but to clarify, they point to the Flatpak versions. I recommend using Flatpaks to minimize disruptions during SteamOS upgrades.

Decky Browser plugin

I am quite aware of the Decky Browser plugin but I highly discourage it being used because aside from the security concerns it highlights, it lacks extension support, sync and quite frankly crashes from time to time causing the whole gaming mode to break.

Figure 5. Decky Browser plugin warning

My recommendation

For a casual user (that may have some light or heavy browser gaming). I recommend Vivaldi. Mainly due to its’ customizable user interface. I mean sure I can do the things on Firefox using userChrome.css hacks but the fact Vivaldi put huge effort to have these customization in the browser settings is just fantastic for casual users.

Some features, like the clock in the toolbar which initially felt redundant on a desktop turned out to be perfect on the Deck. Given how Steam Deck’s gaming mode UI works (where checking the time requires opening the Quick Access Menu), having the clock always visible is a great convenience.

Finally if you do play browser games, Webkit based browers are often times better than Quantum based browsers in terms of performance because of its better implementation to WebGL and WebGPU (Probably thanks to patents no doubt).

Some of the games I have observed where Webkit performs better are Flyff Universe, Hordes.io and Stumble guys (although they have a dedicated Steam app that is playable on Proton anyways).

Although as of this writing February 22, 2025, Firefox is closing the gaps on these performance issues. I have noticed that the current version of Firefox 135 performs very close to Chromium on Flyff Universe. Hordes.io and Stumble guys do still have performance problems/

Of course I will say that with Manifest V2 extinction happening soon, Quantum based browsers will no doubt end up having superior extensions for better browsing experience. I mean Edge and Vivaldi may have built-in adblock but it performs subpar to ublock origin.

Closing Thoughts

There is nothing stopping you from using other browsers not on the list (such as Chrome). Although challenges may arise if the browser is not in flatpak because SteamOS is atomic Operating System.

Furthermore, I have written modifications out of finewolf’s bash script for launching Firefox for Edge, Vivaldi and Zen. They can be downloaded here. Feel free to use this as your base or use it as it is preconfigured.

Exploring Joomla: Is It a Worthy Alternative to WordPress?

Details
Written by: admin
Category: Blog
Published: 06 October 2024
Hits: 240

The recent conflict between WordPress.com and WP Engine has sparked plenty of debates about the future of open-source platforms and who controls access to their resources. For someone who believes strongly in the principles of open-source, this situation feels like a step in the wrong direction. As I’ve already discussed, blocking access to open-source resources based on business disputes undermines the values that have made platforms like WordPress so successful.

With all this drama unfolding, it got me thinking—if WordPress.com starts tightening access to its resources, what other content management systems (CMS) are out there? Could another platform rise up to challenge WordPress’s dominance? Enter Joomla, one of the most popular CMS alternatives to WordPress, and a well-established open-source project in its own right.

As someone who’s not particularly fond of CMS platforms in general (my personal site is hand-coded in HTML, after all), I decided to give Joomla a try. Could it be a viable competitor to WordPress, especially for those looking for a reliable, open-source solution that stays true to the principles of openness and accessibility?

Page 2 of 2

  • 1
  • 2

Main Menu

  • Home

Archived Articles

February 2025

  • About your home page
  • Welcome to your blog
  • Your Modules
  • Your Template
My Blog

Login Form

  • Forgot your password?
  • Forgot your username?

Older Posts

  • Exploring Joomla: Is It a Worthy Alternative to WordPress?
  • The best browser for the Steamdeck
  • Why Indie Games Are Better and is the Future of Gaming
  • Using ChatGPT vs Gemini
  • My Main PC Has Over 600 Installed Games on Steam, All Playable on Linux. Here’s What I Can Say About Linux Gaming
  • I Tried GeForce Now and Here’s My Experience
  • Login