From 36e053f4f0a2f63c08f7c28b9492c067f1ca42bc Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Wed, 27 May 2026 00:53:18 -0700 Subject: migrate pinapelz.moe -> pinapelz.com --- .../posts/2025-12-01-hello-world/index.html | 501 ++++++++++++++++ .../posts/2025-12-02-china-town-fair/gloves.webp | Bin 0 -> 431668 bytes .../posts/2025-12-02-china-town-fair/index.html | 506 ++++++++++++++++ .../2025-12-02-china-town-fair/inside-ctf.webp | Bin 0 -> 1020876 bytes .../2025-12-02-china-town-fair/outside-ctf.webp | Bin 0 -> 355348 bytes .../posts/2025-12-02-power-bank-recall/index.html | 499 ++++++++++++++++ .../posts/2025-12-03-04-yt-music-rewind/index.html | 492 ++++++++++++++++ .../posts/2025-12-04-procon2-hid-tool/index.html | 634 +++++++++++++++++++++ .../posts/2025-12-06-first-sdvx-18/18.webp | Bin 0 -> 339632 bytes .../posts/2025-12-06-first-sdvx-18/index.html | 496 ++++++++++++++++ .../2025-12-18-07-arcade-monsters-sd/cab1.webp | Bin 0 -> 506938 bytes .../2025-12-18-07-arcade-monsters-sd/cab2.webp | Bin 0 -> 379430 bytes .../2025-12-18-07-arcade-monsters-sd/danevo.webp | Bin 0 -> 384012 bytes .../2025-12-18-07-arcade-monsters-sd/index.html | 537 +++++++++++++++++ .../2025-12-18-07-arcade-monsters-sd/view1.webp | Bin 0 -> 952802 bytes .../2025-12-18-07-arcade-monsters-sd/view2.webp | Bin 0 -> 436422 bytes .../posts/2025-12-19-08-ffxiv-patch-7-4/index.html | 520 +++++++++++++++++ .../posts/2025-12-31-09-dbox-review/index.html | 497 ++++++++++++++++ .../posts/2026-02-19-10-discord-rant/index.html | 501 ++++++++++++++++ .../index.html | 516 +++++++++++++++++ .../playtime.png | Bin 0 -> 25402 bytes .../posts/2026-04-26-12-april-playlog/index.html | 574 +++++++++++++++++++ .../2026-04-29-13-dac-vs-wireless-dap/index.html | 541 ++++++++++++++++++ micro.pinapelz.com/posts/index.html | 551 ++++++++++++++++++ micro.pinapelz.com/posts/index.xml | 105 ++++ micro.pinapelz.com/posts/page/1/index.html | 9 + micro.pinapelz.com/posts/page/2/index.html | 238 ++++++++ 27 files changed, 7717 insertions(+) create mode 100644 micro.pinapelz.com/posts/2025-12-01-hello-world/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-02-china-town-fair/gloves.webp create mode 100644 micro.pinapelz.com/posts/2025-12-02-china-town-fair/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-02-china-town-fair/inside-ctf.webp create mode 100644 micro.pinapelz.com/posts/2025-12-02-china-town-fair/outside-ctf.webp create mode 100644 micro.pinapelz.com/posts/2025-12-02-power-bank-recall/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-03-04-yt-music-rewind/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-04-procon2-hid-tool/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/18.webp create mode 100644 micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab1.webp create mode 100644 micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab2.webp create mode 100644 micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/danevo.webp create mode 100644 micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view1.webp create mode 100644 micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view2.webp create mode 100644 micro.pinapelz.com/posts/2025-12-19-08-ffxiv-patch-7-4/index.html create mode 100644 micro.pinapelz.com/posts/2025-12-31-09-dbox-review/index.html create mode 100644 micro.pinapelz.com/posts/2026-02-19-10-discord-rant/index.html create mode 100644 micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/index.html create mode 100644 micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/playtime.png create mode 100644 micro.pinapelz.com/posts/2026-04-26-12-april-playlog/index.html create mode 100644 micro.pinapelz.com/posts/2026-04-29-13-dac-vs-wireless-dap/index.html create mode 100644 micro.pinapelz.com/posts/index.html create mode 100644 micro.pinapelz.com/posts/index.xml create mode 100644 micro.pinapelz.com/posts/page/1/index.html create mode 100644 micro.pinapelz.com/posts/page/2/index.html (limited to 'micro.pinapelz.com/posts') diff --git a/micro.pinapelz.com/posts/2025-12-01-hello-world/index.html b/micro.pinapelz.com/posts/2025-12-01-hello-world/index.html new file mode 100644 index 0000000..51eb74c --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-01-hello-world/index.html @@ -0,0 +1,501 @@ + + + + + + + + Hello World - Why This | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Hello World - Why This

+ + + +
+ + - Permalink +
+
+

I think having control of your own data is great. The same is true for decentralized social media. I’ve always been a primary user of microblog platforms (like Twitter/X). Having experienced both the traditional and “decentralized” approaches to microblogs, they both have some particular shortcoming in terms of what I want to get out of “social media”.

+

Twitter/X

+

This is fairly self explanatory. The rebranding of Twitter to X and Musk’s new ownership of the platform shifted the direction of the platform to be ever more political. X Premium boosting visibility is also something I wasn’t a particular fan of. You can’t view anything without signing in either, so goodbye viewing stuff anonymously. There’s just a lot of “features” here I’m not a fan of. Needless to say, there’s a lot of reasons to not post stuff there.

+

Fediverse

+

I initially moved to the Fediverse (on Misskey/Sharkey). Interoperability between different platforms is very cool, and the wide variety of platforms to choose from means that picking any platform never made me feel like “missing out” elsewhere.

+

However, this in itself has a problem. If you create an account on someone else’s instance, you are a part of their walled garden. Now I’m sure that they are a wonderful person who equally values data ownership/agency, however it doesn’t change the fact that someone else holds your content/data and you rely on them for that service.

+

So then the alternative here is self-hosting a single person instance. This solves everything, BUT the fact that its quite expensive to pay for the bandwidth + storage if you are a small instance and end up federating with a lot of instances. This wasn’t a compromise I wanted, since the name of the game with the Fediverse is being able to connect cross-platform. Great if you have the resources, but not particularly worth it for a single person starting fresh. There’s not really a good way to handle this right now, which is why federation with a very large platform like Threads is limited.

+

Bluesky

+

Bluesky is one of the drop-in alternatives for Twitter. Its built on the AT-Protocol, which does actually solve a lot of the problems of ActivityPub (Fediverse) in terms of handling small self-hosted instance with large ones. +AtProto allows you to host a PDS (Personal Data Server) which stores all your own posts, profile info, and follows. This boils down to meaning that you really only need to be responsible for serving your own content, which you also own on your own machine. There’s also a lot of fine-grain features that help with not getting overwhelmed by firehose traffic.

+

While this is great, the issue is that the service is not truly “federated” (yet?). Its still early days for the platform and protocol, Most people are still on bsky.social. This means that to get anything to read at all you’d still need to pull from the big central relay. Even if we were successful in this, its not entirely clear what the costs would be for running all these components together (is it even worth it for a single person?). I think AtProto is promising, but its still early days and who knows where it’ll go…

+

Now What

+

Its time to try something new. From a surface view the idea of IndieWeb is a good solution from the perspective of creating the content. You basically just build a website/blog (which nowadays is dirt cheap to host something static), you then just add some special HTML (microformats) and now you’ve got a common protocol similar to a post (only now you can leverage the power of HTML/CSS and customize it however you want). Then implemtning webmentions gives the ability for other people to interact with your content. Using a bridging/syndication service like Bridgy Fed you can post to the Fediverse and Bluesky as well as allow others from there to interact with your post.

+

So that’s what this is. Let’s see how it goes.

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-02-china-town-fair/gloves.webp b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/gloves.webp new file mode 100644 index 0000000..fd42b6c Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/gloves.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-02-china-town-fair/index.html b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/index.html new file mode 100644 index 0000000..8c6ccfb --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/index.html @@ -0,0 +1,506 @@ + + + + + + + + China Town Fair | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

China Town Fair

+ + + +
+ + - Permalink +
+
+

Visited New York during the Thanksgiving break and had a chance to stopped by one of the most legendary landmarks North American arcade gaming history.

+
China Town Fair Outside +
+ +

Also yep you’re reading that right, it indeed once home to a dancing chicken as well as one that played tic tac toe.

+

But apart from just being an old arcade, it was also home to one of the largest competitive arcade game fighting scene (Marvel vs Capcom, Street Fighter, etc.). Many of NAs top players frequented this arcade. However, as we all already know video arcades began to die down during the early 2000s and China Town Fair was no exception having closed in 2011.

+

Then it re-opened under new management and became a complete shell of its former self. These days its pretty much all redemption slop in there. Very few actual “games” in there; there’s a DDR A3 cab, PIU, a singular jubeat with a broken audio mod, a fully broken down SDVX Nemsys, and 3 Wangan 5DX+ (not sure what happened to the 4th one).

+
China Town Fair Inside +
+ +

Anyways, its pretty tiny in there and feels like its not doing amazing. A single credit for jubeat was like 3-4 USD I think, and one of the machines to reload cards was fully broken down (tbh just go to Round1 and play).

+

If you want some actual rhythm games though, walk like 6 minutes and the newly opened “Akiba House” store has private networked maimai DX, WACCA (modded), and CHUNITHM.

+
Chinese maimai gloves +
+ +

Also I was absolutely not ready for the New York winter temps. Thankfully I always keep my rhythm game gloves on me which saved my hands from freezing.

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-02-china-town-fair/inside-ctf.webp b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/inside-ctf.webp new file mode 100644 index 0000000..d08d15f Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/inside-ctf.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-02-china-town-fair/outside-ctf.webp b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/outside-ctf.webp new file mode 100644 index 0000000..aacc4e2 Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-02-china-town-fair/outside-ctf.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-02-power-bank-recall/index.html b/micro.pinapelz.com/posts/2025-12-02-power-bank-recall/index.html new file mode 100644 index 0000000..d0e5ac6 --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-02-power-bank-recall/index.html @@ -0,0 +1,499 @@ + + + + + + + + INIU Power Bank Gets Recall | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

INIU Power Bank Gets Recall

+ + + +
+ + - Permalink +
+
+

It would seem that I, along with what seems like the entirety of Reddit bought the same cheap 10000mAh power bank and now its getting recalled.

+

I wonder if it has anything to do with the poor quality they found in that viral Haribo Powerbank. Not sure since I’ve had this one for a long time. I guess I really got what I paid for, shame cause it really is super slim and works well.

+

But I’d definetly prefer for it not to blow up on me

+

Here’s the full notice:

+
+

Dear Amazon Customer,

+

We have learned of a potential safety issue regarding certain product(s) that our records indicate you purchased through the Amazon.com website.

+

For more details on what you should do, please contact INIU at recall@iniu.shop.

+

Product: INIU Portable Charger, Slimmest 10000mAh 5V/3A Power Bank, USB C in&out High-Speed Charging Battery Pack, External Phone Powerbank Compatible with iPhone 16 15 14 13 12 Samsung S22 S21 Google iPad etc

+

If you made this purchase for someone else, please notify the recipient immediately and provide them with the information.

+

We regret any inconvenience this may cause you but trust you will understand that the safety and satisfaction of our customers is our highest priority.

+
+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-03-04-yt-music-rewind/index.html b/micro.pinapelz.com/posts/2025-12-03-04-yt-music-rewind/index.html new file mode 100644 index 0000000..d389cdc --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-03-04-yt-music-rewind/index.html @@ -0,0 +1,492 @@ + + + + + + + + YouTube Music Recap 2025 | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

YouTube Music Recap 2025

+ + + +
+ + - Permalink +
+
+

Its all Bandori. At least 75% of that MyGO!!!!! listening time was probably Haruhikage since I came back to Bandori and had to catch up before watching Ave Mujica anime.

+
YouTube Music Recap Top 5 Artists In Order: MyGO!!!!!, Yumenokessho, Ave Mujica, KMNZ, Roselia +
+ + +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-04-procon2-hid-tool/index.html b/micro.pinapelz.com/posts/2025-12-04-procon2-hid-tool/index.html new file mode 100644 index 0000000..7d1a70f --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-04-procon2-hid-tool/index.html @@ -0,0 +1,634 @@ + + + + + + + + Enable HID Mode on Nintendo Pro Controller 2 | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Enable HID Mode on Nintendo Pro Controller 2

+ + + +
+ + - Permalink +
+
+

Switch 2 Pro Controller is very comfy in my hands, but unfortunately it didn’t work out of box on PC (Linux) for me like it’s predacessor. Until there’s actual better driver support for this thing in the kernel (or Valve does something), here’s a hacky Python script to initialize HID-mode on the controller

+
# I only tested this script on Linux w/ Steam but in theory it shoud work on Windows?
+import usb.core # install pyusb first: pip install pyusb
+import usb.util
+import time
+import sys
+
+VENDOR_ID = 0x057E
+PRODUCT_IDS = {
+    0x2066: "Joy-Con (L)",
+    0x2067: "Joy-Con (R)",
+    0x2069: "Pro Controller",
+    0x2073: "GCN Controller"
+}
+
+USB_INTERFACE_NUMBER = 1
+
+INIT_COMMAND_0x03 = bytes([0x03, 0x91, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
+UNKNOWN_COMMAND_0x07 = bytes([0x07, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])
+UNKNOWN_COMMAND_0x16 = bytes([0x16, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])
+REQUEST_CONTROLLER_MAC = bytes([0x15, 0x91, 0x00, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
+LTK_REQUEST = bytes([0x15, 0x91, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
+UNKNOWN_COMMAND_0x15_ARG_0x03 = bytes([0x15, 0x91, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00])
+UNKNOWN_COMMAND_0x09 = bytes([0x09, 0x91, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
+IMU_COMMAND_0x02 = bytes([0x0c, 0x91, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00])
+OUT_UNKNOWN_COMMAND_0x11 = bytes([0x11, 0x91, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00])
+UNKNOWN_COMMAND_0x0A = bytes([0x0a, 0x91, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
+IMU_COMMAND_0x04 = bytes([0x0c, 0x91, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00])
+ENABLE_HAPTICS = bytes([0x03, 0x91, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00])
+OUT_UNKNOWN_COMMAND_0x10 = bytes([0x10, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])
+OUT_UNKNOWN_COMMAND_0x01 = bytes([0x01, 0x91, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00])
+OUT_UNKNOWN_COMMAND_0x03 = bytes([0x03, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00])
+OUT_UNKNOWN_COMMAND_0x0A_ALT = bytes([0x0a, 0x91, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00])
+
+def send_usb_data(ep_out, ep_in, data, description=""):
+    try:
+        ep_out.write(data)
+        time.sleep(0.01)
+        try:
+            response = ep_in.read(32, timeout=100)
+            hex_resp = " ".join([f"{x:02x}" for x in response])
+            print(f"[{description}] Response: {hex_resp}")
+        except usb.core.USBError as e:
+            if e.errno == 110:
+                print(f"[{description}] No response (Timeout)")
+            else:
+                print(f"[{description}] Read Error: {e}")
+
+    except usb.core.USBError as e:
+        print(f"[{description}] Write Error: {e}")
+        raise
+
+def set_player_leds(ep_out, ep_in, led_mask):
+    command = [
+        0x09, 0x91, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00,
+        led_mask,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+    ]
+    send_usb_data(ep_out, ep_in, bytes(command), f"Set LED Mask: 0x{led_mask:02x}")
+
+def connect_usb():
+    print("Searching for Nintendo Switch Controllers...")
+    def match_device(dev):
+        return dev.idVendor == VENDOR_ID and dev.idProduct in PRODUCT_IDS
+    dev = usb.core.find(custom_match=match_device)
+    if dev is None:
+        raise ValueError("Device not found")
+
+    product_name = PRODUCT_IDS.get(dev.idProduct, "Unknown Device")
+    print(f"Found {product_name} (ID: {dev.idProduct:04x})")
+    if dev.is_kernel_driver_active(USB_INTERFACE_NUMBER):
+        try:
+            print("Detaching kernel driver...")
+            dev.detach_kernel_driver(USB_INTERFACE_NUMBER)
+        except usb.core.USBError as e:
+            sys.exit(f"Could not detach kernel driver: {e}")
+    try:
+        dev.set_configuration()
+        print("Configuration set.")
+    except usb.core.USBError as e:
+        print(f"Error setting configuration: {e}")
+    try:
+        usb.util.claim_interface(dev, USB_INTERFACE_NUMBER)
+        print(f"Interface {USB_INTERFACE_NUMBER} claimed.")
+    except usb.core.USBError as e:
+        sys.exit(f"Could not claim interface: {e}")
+    cfg = dev.get_active_configuration()
+    intf = cfg[(USB_INTERFACE_NUMBER,0)]
+    ep_out = usb.util.find_descriptor(
+        intf,
+        custom_match = lambda e:  usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
+
+    ep_in = usb.util.find_descriptor(
+        intf,
+        custom_match =
+        lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN
+    )
+
+    if not ep_out:
+        sys.exit("Could not find OUT endpoint")
+
+    print(f"Found Endpoint OUT: 0x{ep_out.bEndpointAddress:02x}")
+    print("Starting Initialization Sequence...")
+
+    try:
+        send_usb_data(ep_out, ep_in, INIT_COMMAND_0x03, "Init 0x03")
+        send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x07, "Unknown 0x07")
+        send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x16, "Unknown 0x16")
+        send_usb_data(ep_out, ep_in, REQUEST_CONTROLLER_MAC, "Req MAC")
+        send_usb_data(ep_out, ep_in, LTK_REQUEST, "Req LTK")
+        send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x15_ARG_0x03, "Unknown 0x15")
+        send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x09, "Unknown 0x09")
+        send_usb_data(ep_out, ep_in, IMU_COMMAND_0x02, "IMU 0x02")
+        send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x11, "OUT Unknown 0x11")
+        send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x0A, "Unknown 0x0A")
+        send_usb_data(ep_out, ep_in, IMU_COMMAND_0x04, "IMU 0x04")
+        send_usb_data(ep_out, ep_in, ENABLE_HAPTICS, "Enable Haptics")
+        send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x10, "OUT Unknown 0x10")
+        send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x01, "OUT Unknown 0x01")
+        send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x03, "OUT Unknown 0x03")
+        send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x0A_ALT, "OUT Unknown 0x0A Alt")
+        set_player_leds(ep_out, ep_in, 0x0F)
+
+        print("Controller initialization sequence complete! All LEDs should be on.")
+
+    except Exception as e:
+        print(f"Error during sequence: {e}")
+
+if __name__ == "__main__":
+    try:
+        connect_usb()
+    except ValueError as e:
+        print(e)
+    except Exception as e:
+        print(f"Unexpected error: {e}")
+

Steps

+
    +
  1. (Optional) First Create a virtual environment
  2. +
  3. Install pyusb via pip install pyusb
  4. +
  5. Plug your Pro Controller 2 in via USB
  6. +
  7. Run the script
  8. +
+

If all 4 of the player indicator LEDs light up (the square ones near the charging port), then that means you should be good to go!

+

You’ll need to re-run this script each time you plug/unplug or restart your machine.

+

This is pretty much a copy of the online Procon 2 Enabler Tool but WebHID is dodgy on the Firefox fork I’m using, plus its annoying having to open this page each time.

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/18.webp b/micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/18.webp new file mode 100644 index 0000000..83768f7 Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/18.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/index.html b/micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/index.html new file mode 100644 index 0000000..0d0594a --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/index.html @@ -0,0 +1,496 @@ + + + + + + + + First MXM 18 Cleared! | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

First MXM 18 Cleared!

+ + + +
+ + - Permalink +
+
+

Cleared my first 18 difficulty chart in + +#sdvx +

+

Albeit its not a very difficult one, but I think I’m finally starting to chip away at the 17-18 difficulty wall. +

Sound Voltex Enchant 6 Clear +
+

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab1.webp b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab1.webp new file mode 100644 index 0000000..6f30510 Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab1.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab2.webp b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab2.webp new file mode 100644 index 0000000..6b5f02f Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/cab2.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/danevo.webp b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/danevo.webp new file mode 100644 index 0000000..c15d1f5 Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/danevo.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/index.html b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/index.html new file mode 100644 index 0000000..28b63d0 --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/index.html @@ -0,0 +1,537 @@ + + + + + + + + Arcade Monsters | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Arcade Monsters

+ + + +
+ + - Permalink +
+
+

If you live in Socal and are also into arcade gaming (both retro and modern), one of the great weekend day-trips I’ve found is taking the Pacific Surfliner train down to San Diego.

+

Getting There

+

There are a number of departures in the morning, and while not as fast as a car when there’s no traffic, you can save your energy and do other stuff on the train. The timetable also works nicely since you can pretty much get there around opening if you want to beat the crowds.

+

Once you get there, you can either take the trolley or walk 20 minutes to the arcade. I prefer the walk since you can grab some food/coffee on the way.

+

Plus the view is excellent.

+

Ocean view from the Pacific Surfliner +
+ +
Ocean view from the Pacific Surfliner +
+

+

Value

+

So is this trip worth it and what is the cost?

+

Arcade Monsters games operate all on “Free Play”, you pay a set fee for entry and can stay for as long as you’d like. Its $25 to enter, or $35 if you want to be able to leave and come back.

+

Since there aren’t exactly a lot of “retro” arcades anymore, I’ll compare the value proposition here to Round1:

+

At Round1 a standard rhythm games is roughly 8.6 credits per play. If we estimate the value of a Round1 credit to be around $0.15 (assuming standard non-member $120 package for 777 credits), this would put 1 play at around $1.29. This means it takes roughly 20 plays to hit $25.

+

Let’s also say that a single play at any rhythm game takes roughly 10 minutes. Assuming you continuously played games This means $25 of Round1 credits would last you roughly 3.3 hours. So just this on its own, without considering anything else I’d say that this is great value just on its own.

+

But if you were to include transportation costs, assuming around $60 for a round-trip ticket via train, it becomes a little more difficult to justify since for the same price since you’d be able to play 46 rounds of something else at Round1.

+

However, with the variety of games in there (even rarer ones), I’d say this is still an excellent trip. I personally could easily stay 5+ hours in there (cause I’m a degenerate and they also sell food + drinks in there).

+
Arcade Cabinets +
+ +

Quality

+

Most of the retro stuff is very well maintained and in great working condition. Also many of the modern games are networked and have card saving features.

+

However, it’d be dishonest to say that these cabs are in excellent condition:

+
    +
  • The Sound Voltex knobs are basically falling off, the switches don’t feel great
  • +
  • The pads ghosts on Dancerush and the navigation keys are broken
  • +
  • FutureTomTom drums have sensitivity issues
  • +
  • Small things like how the stool for Ongeki doesn’t match the height of the standard seat.
  • +
+

Also it gets busy in there and is also a popular spot for families (kids get loud).

+
Arcade Cabinets +
+ +

Conclusion

+

Overall, as a once in a while its great value. You get to try out a ton of games, some of which are even considered rare to come by in Japan. If you also just want to go in and hardcore grind out some CHUNITHM, I can see that as a pretty good option too.

+

Check out the list of games here

+
Arcade Cabinets +
+ + + +#arcade + + +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view1.webp b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view1.webp new file mode 100644 index 0000000..b7463ba Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view1.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view2.webp b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view2.webp new file mode 100644 index 0000000..21956d9 Binary files /dev/null and b/micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/view2.webp differ diff --git a/micro.pinapelz.com/posts/2025-12-19-08-ffxiv-patch-7-4/index.html b/micro.pinapelz.com/posts/2025-12-19-08-ffxiv-patch-7-4/index.html new file mode 100644 index 0000000..dbe44e6 --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-19-08-ffxiv-patch-7-4/index.html @@ -0,0 +1,520 @@ + + + + + + + + Playlog: FFXIV Dawntrail Patch 7.4 Thoughts (spoilers) | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Playlog: FFXIV Dawntrail Patch 7.4 Thoughts (spoilers)

+ + + +
+ + - Permalink +
+
+

This is primarily focused on the content of the patch, not so much the features they’ve added.

+

Story

+
    +
  • Mistwake Dungeon was a good difficulty. Although I’m not a fan of the electricity star AOEs, very hard to read for no apparent reason. Please just stick with the old one.
  • +
  • Cutscene quality def. got better. As in animations and uniqueness.
  • +
  • Love the look and feel (Treno). There’s a ton of good spots for “gpose-ing”. Music is nice too.
  • +
  • Seriously Krile? You parents were the ones who dropped you into the Source. I don’t think they’d care if you wanted to stay in the Source (just make up your mind) -> well glad that got sorted out
  • +
  • “Hell on Rails” Trial (Doomtrain) is very nicely designed. Its got some nice unique mechanics, the “sucking” mechanic definetly trips you up the first time because the distance to move back + timing has been tuned so that you need to pre-position for it.
  • +
  • The transition from inside the engine to outside was really cool!!! This is probably one of my top normal trials now.
  • +
  • The instance battle was well done too. The roleplaying part was on point, and when it was finally time to fight a real boss you get to play as yourelf (I think this is the best flow). Love the idea using the spriggan to avoid Behemoth’s meteor.
  • +
  • Cool so we just get to keep the key. If this were any bit realistic, we’ve surely learned that no one this powerful should be allowed to keep the key on themsleves 24/7. Because surely the WoL being the most powerful being will never run rogue with a interdimensional travel capable tool. Then again, seeing how stuff gets stolen all the time in the story… Well I guess it can go either way.
  • +
  • I’m guessing this key is gonna be how the writers justify being able to travel to new worlds for post-Zodiark/Hydaelyn story. Its fine I guess, but a little disappointing it isn’t something more unique.
  • +
  • And what do you know. Ascians. I hope we get something unqiue for 8.0… I guess thats fine but please lets not have it just be SHB all over again.
  • +
+

Raid

+
    +
  • “Feral Fandom” -> Yep thats FF14 NA playerbase for you.
  • +
  • Heavyweight 1 (Vamp Fatale) Raid was cool and unique, but a bit too flashy imo. That Half Moon is needlessly large, wish we’d stop with mechanics that are designed to trick people even when read correctly.
  • +
  • Heavyweight 2 (Xtremes) I take it back, this is the one with the blinding effects MY EYES. Fire and water one after another. This is a pretty hard normal fight actually (the first time you run it blind). Really punishing for bad AOE placement positions since you can effectively be cut off from the team.
  • +
  • Holy wow these cutscenes are in serious need of voice acting. Its a good story but so dry and awkward without it.
  • +
  • Heavyweight 3 (Tyrant). Really? Behemoth again, double dipping from the instance battle. There’s so many other cool FF monsters. I like the arena, it fits the guy well, all about history of the Arcadion/tradition. Fight is underwhelming and too easy imo, apart from 1 single trick mechanic that can cause a wipe…
  • +
  • Heavyweight 4 (Lindwurm). EVERYTHING BURNS. This fight was honestly too easy, zero deaths everything can be read. 2nd phase was underhelming.
  • +
  • Overall the story here while not as in depth and relevant to the story as Endwalker raids, still had a nice little twist at the end I def did not expect. Enjoyed it!
  • +
+

Misc

+
    +
  • The new Frontline map is “dangerous”. Overall the new capturing point system is far better than a non-interruptable interact like in Onsal Hakir. The snowman and aurora events are also good, and I think they come in right when they’re needed too (to spice things up/allow for a turning point).
  • +
  • The map design however is far too complex, all these bridges and everywhere and invisible walls. It does add a lot of chokepoints but also makes it difficult to navigate from point A -> B (but partially I guess this is done cause the map does feel smaller than Onsal).
  • +
+ + +#ffxiv + + +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2025-12-31-09-dbox-review/index.html b/micro.pinapelz.com/posts/2025-12-31-09-dbox-review/index.html new file mode 100644 index 0000000..643ed74 --- /dev/null +++ b/micro.pinapelz.com/posts/2025-12-31-09-dbox-review/index.html @@ -0,0 +1,497 @@ + + + + + + + + DBOX Movie Seats | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

DBOX Movie Seats

+ + + +
+ + - Permalink +
+
+

There’s a thing here in Canada where certain theaters have these special seats that rumble and move in motion with whats happening on screen.

+

I recently saw the new Avatar (Fire and Ash) in one of these seats. It wasn’t a bad experience but given the markup, I don’t think its worth it:

+
    +
  • First it is fun (sometimes). For example when they were flying through the air, the seat would tilt in the motion of them flying. Or when there was an explosion/gunfire, the seat would rumble
  • +
  • However, for me I think they overdid it at times, literately the seat would move and rumble for the smallest things. So it was kind of like a constant thing throughout the whole film. For me its a bit annoying
  • +
  • For the $10-15 extra (I think I paid a bit more cause the movie was also in 3D), I’d much rather just go to a theater that has the big comfy recliner seats
  • +
  • I think for the right movie (maybe something heavy on action or horror) this could be a solid purchase if its a movie you’re really looking forward to
  • +
  • Or I also know that some people see movies multiple times, so maybe this can be a good option for a 2nd viewing?
  • +
+

Generally, though… I think I’ll live without them.

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2026-02-19-10-discord-rant/index.html b/micro.pinapelz.com/posts/2026-02-19-10-discord-rant/index.html new file mode 100644 index 0000000..53119e9 --- /dev/null +++ b/micro.pinapelz.com/posts/2026-02-19-10-discord-rant/index.html @@ -0,0 +1,501 @@ + + + + + + + + Discord Rant | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Discord Rant

+ + + +
+ + - Permalink +
+
+

We’ve seen time and time again that there is “no such thing as a free lunch”. The same is true for Discord.

+
    +
  1. Offer a service that is much better than all the competitors
  2. +
  3. Attract a bunch of users
  4. +
  5. Burn VC money
  6. +
  7. Repeat 1-3 until its time to pay them back
  8. +
  9. Figure out how to make money
  10. +
+

Nitro doesn’t fund the platform, hosting free voice and screenshare is more expensive than you think. Ultimately, any choice of software for me boils down to “what value do I get out of it”.

+

Look, free is free, and nothing can and will ever beat the value of free. There’s still plenty of reasons to move even if you are a free user, but that’s not the point of this. What I want to take a look at is what value you are actually getting as a paying user.

+

If you wanted to take advantage of ALL of Discord’s features, such as the higher quality screen share + audio or vanity for servers; you need to buy Nitro and boost your server. Nitro comes out to $99.99 a year for Nitro and around $490 a year for the 14 boosts to Tier 3. For me, it feels like the company if scavenging for opportunities to make money, making features like server banners and vanity links paid (which I suppose is how capitalism works, but for what you get at that price point it seems ridiculous). Even if we lower it down to no Nitro and just 2 boosts to get the additional custom emoji slots on a server, that’s still around $6 a month.

+

Let’s say you do opt for this $6 price point. Is it good value? I suppose it depends. I can spin up Teamspeak 6 and Matrix on a CPX11 for 6 Euros a month from Hetzner. Services that give me all the features from the start without all the paywalling BS. In fact, Discord can capture this as well if they changed their pricing model, but I believe their too deep into this situation where they now have to fund the free users or risk everyone migrating elsewhere.

+

Not to mention, the Discord client has gotten progressively worse over the years, all these accessories and animations do is lag out the client which they don’t even seem to understand the codebase of anymore.

+

What Discord sells is convenience, regardless of the Face ID or data collection, the value is not there and hasn’t been there from a “running a small community” perspective. There’s much better options where you have much more agency over your data, as well as have more fine-grain control over optimizing cost. I suppose you can think of it as going to McDonalds or actually making dinner.

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/index.html b/micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/index.html new file mode 100644 index 0000000..c702832 --- /dev/null +++ b/micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/index.html @@ -0,0 +1,516 @@ + + + + + + + + Playlog: Hundred Lines Last Defense Academy | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Playlog: Hundred Lines Last Defense Academy

+ + + +
+ + - Permalink +
+
+

After about a year of playing on and off, I’ve finally finished all 100 (and 1, counting the first one). In total it took roughly 105 hours or so. +

105 hours or more played +
+

+

Core Mechanics

+
    +
  • This is basically a visual novel, there’s very little fun to be had if you are a “cutscene skipper”. If you enjoyed Kodaka’s other works like Danganronpa then you’ll be right at home.
  • +
  • There’s a bunch of smaller “minigames” but are mostly a one-off thing, they feel mostly like an afterthought (+25)
  • +
+

Structure

+
    +
  • There’s 2 main parts of the game, the battling and the story itself
  • +
  • The battling itself has a decent amount of strategy to it, and you can in fact easily lose if you’re not careful for some of them
  • +
  • In my opinion though given how little variety there is it kinda gets old fast, luckily the 2nd half of the game lets you skip battles you’ve already done
  • +
  • As far as the story goes, its standard visual novel stuff but with a Kodaka twist. Each ending belongs to a particular “route” which is centered around a particular storyline, each one is also explicitly named in the game’s flowchart. (+20)
  • +
+

Content

+
    +
  • The story itself is quite good, but not all the routes are really worth doing if you just want what I consider to be the “core” of the plot. Some of them basically lead to nothing and are there just for fun.
  • +
  • Everyone has to play through Last Defense Academy 1 which basically acts as a very long prologue for the actual game
  • +
  • Not Necessary: Serial Battles Route (PLEASE skip this one, the game forces you to play unskippable battles and it forshadows literately the tiniest thing), Box of Blessings, Conspiracy (does nothing but is very quick to do), Romance, Comedy, V’ehxness Route (mainly character building), Reset Route
  • +
  • I would recommend playing through the prologue, then explicitly following a guide for the Last Defense Academy 2nd Scenario, then if you still want more start the S.F Route and follow a guide to unlock the pre-requisite routes while you progress through that. Everything else is largely optional IMO and is just for world-building. (12)
  • +
+

Technical Execution

+

Its fine overall. You can def. tell they didn’t have as big of a budget as Danganronpa to work with. There were some issues with leaving the game in suspense for too long on Switch but no major performance issues (+15)

+

Presentation

+

Was good since I’m a Danganronpa fan. I would’ve liked to see a few more tracks or at least variations in boss fights. It does get a bit repetitive after 100 times… Still a surprising number of lines were voiced so props to them! (+14)

+

(86/100)

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/playtime.png b/micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/playtime.png new file mode 100644 index 0000000..bde1097 Binary files /dev/null and b/micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/playtime.png differ diff --git a/micro.pinapelz.com/posts/2026-04-26-12-april-playlog/index.html b/micro.pinapelz.com/posts/2026-04-26-12-april-playlog/index.html new file mode 100644 index 0000000..cbdfcb5 --- /dev/null +++ b/micro.pinapelz.com/posts/2026-04-26-12-april-playlog/index.html @@ -0,0 +1,574 @@ + + + + + + + + Playlog: April 2026 (No Sleep for Kaname Date, Xenoblade 1 DE, Catherine Full Body) | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Playlog: April 2026 (No Sleep for Kaname Date, Xenoblade 1 DE, Catherine Full Body)

+ + + +
+ + - Permalink +
+
+

I’ve gotten quite good at actually making progress on my backlog. Turns out the answer was to just uninstall all social media and get rid of doom scrolling. I invested in a rudimentary capture card as well so that I can have my Switch games show up as an application on my PC rather than having to swap display inputs (which makes it easy to get up and running for a quick session).

+
mirror-switch () {
+    dev=${1:-/dev/video6}
+    nohup ffplay -f v4l2 -framerate 100 -video_size 1920x1080 -i "$dev" \
+        -fflags nobuffer -flags low_delay -framedrop >/dev/null 2>&1 &
+}
+

The delay is actually pretty good, I’m able to play something like Fall Guys on it just fine! Now onto the playlog.

+

No Sleep for Kaname Date – From AI: The Somnium Files

+

This is a spin-off game that takes place in between the first and second AI: The Somnium Files game. Its relatively short.

+

+

+ +
+ + +

+

1. Core Mechanics

+

The game has a similar style to the first and second game, where you enter Sommnium (the dream world) of people to uncover some truth. However, it also introduces an escape room mechanic where you need to solve puzzles to escape a given room. This is essentially the same mechanic as what’s in the “Zero Escape” series, so much so that each escape room opens with the same “Seek a way out” screen.

+

+

+ +
+ + +

+

For the puzzle solving, that’s just entirely dependent on how good you are at reading between the lines. For most of them, once you eventually do figure out how to do it you’ll feel dumb not noticing earlier. The Sommnium exploration segment though is still in my opinion plagued with the issue of where you are sort of just “guessing and checking” based on very loose clues. I suppose that’s intended, but I wish that the correct options to pick become a bit more apparent not just from exploring around Sommnium but also from clues in the real outside world. (+32)

+

2. Structure

+

The progression of the story is near identical to the first and second game. You read through the story visual novel style, then jump into Sommnium. Only now it alternates between Sommnium and an escape room. The challenges in both are well designed and interesting, but I personally felt that some of the escape rooms were a bit random? I mean the rooms bared little relevance to the AI The Sommnium world for the most part (which I wish it did). (+20)

+

3. Content

+

The game follows Kaname Date and AIBA the AI-Ball, who are investigating a new case where Iris Sagan (from the first game) goes missing. A mysterious figure named Akemi tells Iris that she is participating in the “Third Eye Game”.

+

The story explains some details of what’s been going on between the first and second game. Even the tiny details. The story is pretty self-contained for the most part, and its sorta like a mini-adventure. There is indeed an actual twist like every Uchikoshi game so pay attention to your surroundings. Very enjoyable to play through (+15)

+

4. Technical Execution (15)

+

No issues here, plays great on the Switch 2. (+15)

+

5. Presentation (15)

+

In my opinion, the game is a bit on the short side considering the price point. The content is good though. I’d say grab it if its on sale for 40 USD rather than 50 USD (+13)

+

92/100

+
+

Xenoblade 1: DE

+

Covers the base game, not including the DLC.

+

+

+ +
+ + +

+

1. Core Mechanics

+

Combat is much more simple than the second game and for me it sorta gets repetitive quick. Found myself avoiding monsters towards the end of the game. I’d say definetly try playing different characters to keep things fresh. The friendship tree thing is kind of useless and confusing, same with the gemstones. It just feels like they aren’t really needed and just add onto the things to do. In my opinion they should’ve kept it to just upgrading gear and obtaining arts. (+28)

+

2. Structure

+

This game is grindy. Doesn’t matter what people say, you do need to stop and kill stuff as well as do side quests otherwise the enemy level outpaces you fast. This kinda got old for me so what I did was I would grind levels on casual mode and then switch back to normal mode when progressing through the story. Other than that the progression in the game is fairly linear and follows a central plot. The one side quest that may be worth doing is restoring Colony 6 which sorta acts like a big sidequest spanning multiple chapters in the story. Other than just for world building, much of the sidequests are just fetch-quests and are kind of drab. (+15)

+

3. Content

+

I thought the story was just alright for me. It does end up being quite “anime”, I would say it only really ramps up towards the last couple chapters. Before that we’re largely just adventures, adventuring around. It does provide good context for the second game. Shulk as a character definetly has some serious plot armor, even in some cases he just sorta comes back from the dead. Still, I do think the story is worth seeing (+15)

+

4. Technical Execution

+

No issues here, plays great on the Switch 2. (+15)

+

5. Presentation

+

The voice acting and dialogue… it certainly leaves something to be desired. Well the second game sorta suffered the same issue. I played on full English though. YMMV. (+10)

+

83/100

+
+

Catherine Full Body

+

It’s a puzzle game. But more erotic.

+

+

+ +
+ + +

+

1. Core Mechanics

+

Absolutely no qualms here. Its a genius little puzzle game with lots of strategy involved. You’d really have to watch some footage of it to understand how it works. (+35)

+

+

+ +
+ + +

+

2. Structure

+

For me, the puzzles aren’t too repetitive. There’s a nice break in between each one, and each night (after a set of puzzles) you get to watch a bit more of the story. Most of the game outside of the puzzle takes place in the “stray sheep” bar, the best way I can describe it is like Persona 3/4/5 “Free Time” where you can go around talking to your friends or others in the bar. Despite the small area there’s a fair amount of extra lore here, since you’ll start noticing that many of the people you talk to are also the ones appearing in your nightmare.

+

The only thing I didn’t like is that it wasn’t really clear who you had to talk to if you wanted to “progress time”. It may seem a bit confusing, but essentially once you have done everything in the bar, people get up and leave and new people walk in (this effectively progresses the night in free-time). (+23)

+

3. Content

+

The story of the game revolves around the main character Vincent. Its a short game about dealing with societal pressures. I say that but the game is quite funny, and it doesn’t take too long to beat. Vincent himself is a bit of a bozo, most of the game is linear and decided for you up until the very end. Essentially the game has you answer questions that make you reflect on your personal morals, then at the end this decides which ending you get. I don’t think this is a bad thing, but I would’ve liked to see more player agency at different points of the game rather than only at the end. Not a huge deal though (+13).

+

4. Technical Execution

+

The only thing that annoyed me was that for some reason the spike blocks are kinda laggy on the Switch 2? Not sure why. (+14)

+

5. Presentation

+

Based on the start of the game I thought this game would be extremely “goon-bait” but actually it wasn’t. Very fun with lots of replayability (in terms of challenge yourself to puzzles + multiplayer) (+15)

+

If you see this game on sale, definelty give it a try. Not sure if its worth at full-price but when its on sale for less than 10 bucks its a steal!

+

95/100

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/2026-04-29-13-dac-vs-wireless-dap/index.html b/micro.pinapelz.com/posts/2026-04-29-13-dac-vs-wireless-dap/index.html new file mode 100644 index 0000000..c6c0c37 --- /dev/null +++ b/micro.pinapelz.com/posts/2026-04-29-13-dac-vs-wireless-dap/index.html @@ -0,0 +1,541 @@ + + + + + + + + Portable Audio: Phone, Wireless DAC, or DAP | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + + +
+
+ +

Portable Audio: Phone, Wireless DAC, or DAP

+ + + +
+ + - Permalink +
+
+

Supposedly, there’s been a resurgence in the popularity of the iPod in the recent months for all sorts of reasons. While I’m well aware of “MP3 Players”, such as the original iPod and the old Sony Walkman, these are not devices I grew up using. As a “new-gen” audiophile myself, getting a DAP (Dedicated Audio Player, its the new term for these sort of devices as they can play much more than just MP3s) was certainly an interesting idea. However, modern day audiophiles now have an arsenal of methods to enjoy music, even when it comes to portable playback.

+
+

PREFACE

+

I’ll assume that you already have some basic audiophile knowledge, and that you have your own reasons for maintaining an audio library independent of streaming services.

+
+

I’ve reduced it down to 3 main categories: 1. Using your phone with a dongle DAC (Digital to Analog Converter), 2. Wireless DAC (via Bluetooth), 3. Dedicated DAP. Now that I own one of each, I’d like to share my opinions on each one.

+

Phone with Dongle DAC

+

This is probably something most people are familiar with so I won’t go into too much detail.

+
+ easy access to streaming services
++ excellent user interface (software)
++ excellent audio quality so long as you don't buy a SUPER cheap dongle
+- distractions whether from notifications or having to fiddle with app
+- drains your battery
+- dongles/cables are annoying when tethered to your phone
+- if you maintain your own music library, it will take up additional storage/use data (especially for FLACs)
+- minimal physical button media controls
+

Wireless DAC

+

A wireless DAC is exactly what it sounds like. Rather than a traditional dongle DAC that plugs into your phone, a wireless DAC connects to your phone over Bluetooth. Your headphones/IEMs then plug into the DAC itself which is what makes it a wireless experience.

+

This effectively allows you to use any IEM or Headphone as a wireless one, and provides a largely tangle free experience since you’re free to leave the DAC in your pocket while you take your phone out to do things.

+

For reference I have the FiiO BTR7, so most of the points below will be focused on that.

+
+ connects to phone, so easy streaming, great UI
++ largely tangle-free, you can take your phone in and out of your pockets without the dongle getting in the way
++ can also be used as a wired DAC with PC or phone
++ EQ customization, even if your phone doesn't support it software-wise
++ support for high bit-rate coding technologies (such as Sony's LDAC which supports up to 990kbps) (1)
++ drives high-impedance headphones
+- still drains your battery a lot
+- have to charge it, or else its no better than a dongle DAC
+- better physical button media controls, but for most DACs its minimal
+- can get pricey (relatively to what you are getting)
+- you still need to use data/storage whether you are streaming or listening to files
+

(1) If you're on iOS only AAC is supported, thanks Apple (250-260kbps)

+

This option alone has been excellent for using my IEMs on the go just for the sake of not having to fiddle with a dongle. Usually the battery life on these things are fantastic, and they last a really long time. Most streaming services also likely won’t exceed 990kbps regardless, so its not a huge compromise either.

+

The biggest caveat here is that it suffers from a lot of the same issues with battery and data/storage usage that listening from a smartphone has.

+

Dedicated Audio Player

+

There is a wide variety of DAPs out there. Some of them even run Android which almost makes them a phone. I’ll focus more on a budget option, that being the Snowsky Echo Mini.

+
+ distraction free listening, hassle free in terms of tangling
++ physical buttons to control media + volume
++ stores your music, doesn't take up storage
++ EQ customization
++ looks cool :)
+- need to charge it or else its a brick
+- can get pricey as well, but lots of budget friendly options
+- you'll probably have to buy a micro-sd or equiv. to expand the storage on it
+- need to manually add music to it (duh...)
+- doesn't do streaming (2)
+
+

Side Note

+

Depending on how expensive your DAP is it may have other limitations such as only supporting a certain bit depth or not supporting ReplayGain. If you don’t have a decently organized library this can be annoying to work around

+
+

(2) Some DAPs also have the option to do music streaming, although in my opinion that largely defeats the whole purpose since it would probably be more worth it to pick up a cheap phone just for that

+

Another benefit of the Echo Mini is that it can also be used as a dongle DAC if necessary. The main caveat here is that you need to be good about maintaining/tagging your audio library, and of course you don’t get any audio from your phone (although that’s a plus in terms of cutting out distractions for me, if I need to take a call I’ll just use the built-in speaker as is)

+

Conclusion

+

I find myself using my DAP the most, since it doesn’t drain my phone’s battery and has been helpful in training my patience in terms of not doomscrolling (since I literately will not be able to hear the audio). Although I do usually bring the wireless DAP along too on most days in case I want to watch a video or something. Both devices are tiny so its no big deal.

+ +
+ + + + + + +
+

Webmentions

+
Loading…
+
+ + + + + +
+
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/index.html b/micro.pinapelz.com/posts/index.html new file mode 100644 index 0000000..953da2d --- /dev/null +++ b/micro.pinapelz.com/posts/index.html @@ -0,0 +1,551 @@ + + + + + + + + Posts | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + +
+ + +
+ +

+ Posts + +RSS icon + + +

+ + +
+ + +
+ + + + + + + + + + + +
+ +
+

May 2026

+
    + + +
  • + +
    + : + + + Portable Audio: Phone, Wireless DAC, or DAP + +
    +
  • + + + + + + + + + + + +
+
+ +
+

April 2026

+ +
+ +
+

March 2026

+
    + + +
  • + +
    + : + + + Playlog: Hundred Lines Last Defense Academy + +
    +
  • + + + + + + + + + + + +
+
+ +
+

February 2026

+
    + + +
  • + +
    + : + + + Discord Rant + +
    +
  • + + + + + + + + + + + +
+
+ +
+

December 2025

+
    + + +
  • + +
    + : + + + DBOX Movie Seats + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + Playlog: FFXIV Dawntrail Patch 7.4 Thoughts (spoilers) + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + Arcade Monsters + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + First MXM 18 Cleared! + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + Enable HID Mode on Nintendo Pro Controller 2 + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + YouTube Music Recap 2025 + +
    +
  • + + + + +
+
+ + +
+ +1 of 2 + + Next Page + +
+ +
+ +
+ + + + diff --git a/micro.pinapelz.com/posts/index.xml b/micro.pinapelz.com/posts/index.xml new file mode 100644 index 0000000..bf543b5 --- /dev/null +++ b/micro.pinapelz.com/posts/index.xml @@ -0,0 +1,105 @@ + + + + Posts on micro.pinapelz.com + https://micro.pinapelz.com/posts/ + Recent content in Posts on micro.pinapelz.com + Hugo + en-us + yukais@pinapelz.com (Pinapelz) + yukais@pinapelz.com (Pinapelz) + Sun, 03 May 2026 03:16:09 -0700 + + + Portable Audio: Phone, Wireless DAC, or DAP + https://micro.pinapelz.com/posts/2026-04-29-13-dac-vs-wireless-dap/ + Sun, 03 May 2026 03:16:09 -0700yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2026-04-29-13-dac-vs-wireless-dap/ + <p>Supposedly, there&rsquo;s been a <a href="https://www.facebook.com/APNews/videos/secondhand-sales-of-apple-ipods-are-surging-four-years-after-it-was-killed-off-w/1278247987103509/">resurgence in the popularity of the iPod</a> in the recent months for all sorts of reasons. While I&rsquo;m well aware of &ldquo;MP3 Players&rdquo;, such as the original iPod and the old Sony Walkman, these are not devices I grew up using. As a &ldquo;new-gen&rdquo; audiophile myself, getting a DAP (Dedicated Audio Player, its the new term for these sort of devices as they can play much more than just MP3s) was certainly an interesting idea. However, modern day audiophiles now have an arsenal of methods to enjoy music, even when it comes to portable playback.</p> + + + Playlog: April 2026 (No Sleep for Kaname Date, Xenoblade 1 DE, Catherine Full Body) + https://micro.pinapelz.com/posts/2026-04-26-12-april-playlog/ + Sun, 26 Apr 2026 18:20:09 -0700yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2026-04-26-12-april-playlog/ + <p>I&rsquo;ve gotten quite good at actually making progress on my backlog. Turns out the answer was to just uninstall all social media and get rid of doom scrolling. I invested in a rudimentary capture card as well so that I can have my Switch games show up as an application on my PC rather than having to swap display inputs (which makes it easy to get up and running for a quick session).</p> + + + Playlog: Hundred Lines Last Defense Academy + https://micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/ + Tue, 17 Mar 2026 17:19:03 -0700yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/ + <p>After about a year of playing on and off, I&rsquo;ve finally finished all 100 (and 1, counting the first one). In total it took roughly 105 hours or so. <figure><img src="https://micro.pinapelz.com/posts/2026-03-17-11-hundred-lines-last-defense-playlog/playtime.png" alt="105 hours or more played"> </figure> </p> <h2 id="core-mechanics">Core Mechanics</h2> <ul> <li>This is basically a visual novel, there&rsquo;s very little fun to be had if you are a &ldquo;cutscene skipper&rdquo;. If you enjoyed Kodaka&rsquo;s other works like Danganronpa then you&rsquo;ll be right at home.</li> <li>There&rsquo;s a bunch of smaller &ldquo;minigames&rdquo; but are mostly a one-off thing, they feel mostly like an afterthought (+25)</li> </ul> <h2 id="structure">Structure</h2> <ul> <li>There&rsquo;s 2 main parts of the game, the battling and the story itself</li> <li>The battling itself has a decent amount of strategy to it, and you can in fact easily lose if you&rsquo;re not careful for some of them</li> <li>In my opinion though given how little variety there is it kinda gets old fast, luckily the 2nd half of the game lets you skip battles you&rsquo;ve already done</li> <li>As far as the story goes, its standard visual novel stuff but with a Kodaka twist. Each ending belongs to a particular &ldquo;route&rdquo; which is centered around a particular storyline, each one is also explicitly named in the game&rsquo;s flowchart. (+20)</li> </ul> <h2 id="content">Content</h2> <ul> <li>The story itself is quite good, but not all the routes are really worth doing if you just want what I consider to be the &ldquo;core&rdquo; of the plot. Some of them basically lead to nothing and are there just for fun.</li> <li>Everyone has to play through <code>Last Defense Academy 1</code> which basically acts as a very long prologue for the actual game</li> <li><strong>Not Necessary:</strong> Serial Battles Route (PLEASE skip this one, the game forces you to play unskippable battles and it forshadows literately the tiniest thing), Box of Blessings, Conspiracy (does nothing but is very quick to do), Romance, Comedy, V’ehxness Route (mainly character building), Reset Route</li> <li>I would recommend playing through the prologue, then explicitly following a guide for the <code>Last Defense Academy 2nd Scenario</code>, then if you still want more start the S.F Route and follow a guide to unlock the pre-requisite routes while you progress through that. Everything else is largely optional IMO and is just for world-building. (12)</li> </ul> <h2 id="technical-execution">Technical Execution</h2> <p>Its fine overall. You can def. tell they didn&rsquo;t have as big of a budget as Danganronpa to work with. There were some issues with leaving the game in suspense for too long on Switch but no major performance issues (+15)</p> + + + Discord Rant + https://micro.pinapelz.com/posts/2026-02-19-10-discord-rant/ + Thu, 19 Feb 2026 19:17:04 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2026-02-19-10-discord-rant/ + <p>We&rsquo;ve seen time and time again that there is &ldquo;no such thing as a free lunch&rdquo;. The same is true for Discord.</p> <ol> <li>Offer a service that is much better than all the competitors</li> <li>Attract a bunch of users</li> <li>Burn VC money</li> <li>Repeat 1-3 until its time to pay them back</li> <li>Figure out how to make money</li> </ol> <p>Nitro doesn&rsquo;t fund the platform, hosting free voice and screenshare is more expensive than you think. Ultimately, any choice of software for me boils down to &ldquo;what value do I get out of it&rdquo;.</p> + + + DBOX Movie Seats + https://micro.pinapelz.com/posts/2025-12-31-09-dbox-review/ + Wed, 31 Dec 2025 22:03:51 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-31-09-dbox-review/ + <p>There&rsquo;s a thing here in Canada where certain theaters have these special seats that rumble and move in motion with whats happening on screen.</p> <p>I recently saw the new Avatar (Fire and Ash) in one of these seats. It wasn&rsquo;t a bad experience but given the markup, I don&rsquo;t think its worth it:</p> <ul> <li>First it is fun (sometimes). For example when they were flying through the air, the seat would tilt in the motion of them flying. Or when there was an explosion/gunfire, the seat would rumble</li> <li>However, for me I think they overdid it at times, literately the seat would move and rumble for the smallest things. So it was kind of like a constant thing throughout the whole film. For me its a bit annoying</li> <li>For the $10-15 extra (I think I paid a bit more cause the movie was also in 3D), I&rsquo;d much rather just go to a theater that has the big comfy recliner seats</li> <li>I think for the right movie (maybe something heavy on action or horror) this could be a solid purchase if its a movie you&rsquo;re really looking forward to</li> <li>Or I also know that some people see movies multiple times, so maybe this can be a good option for a 2nd viewing?</li> </ul> <p>Generally, though&hellip; I think I&rsquo;ll live without them.</p> + + + Playlog: FFXIV Dawntrail Patch 7.4 Thoughts (spoilers) + https://micro.pinapelz.com/posts/2025-12-19-08-ffxiv-patch-7-4/ + Fri, 19 Dec 2025 22:15:50 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-19-08-ffxiv-patch-7-4/ + <p><em>This is primarily focused on the content of the patch, not so much the features they&rsquo;ve added.</em></p> <h1 id="story">Story</h1> <ul> <li>Mistwake Dungeon was a good difficulty. Although I&rsquo;m not a fan of the electricity star AOEs, very hard to read for no apparent reason. Please just stick with the old one.</li> <li>Cutscene quality def. got better. As in animations and uniqueness.</li> <li>Love the look and feel (Treno). There&rsquo;s a ton of good spots for &ldquo;gpose-ing&rdquo;. Music is nice too.</li> <li>Seriously Krile? You parents were the ones who dropped you into the Source. I don&rsquo;t think they&rsquo;d care if you wanted to stay in the Source (just make up your mind) -&gt; well glad that got sorted out</li> <li>&ldquo;Hell on Rails&rdquo; Trial (Doomtrain) is very nicely designed. Its got some nice unique mechanics, the &ldquo;sucking&rdquo; mechanic definetly trips you up the first time because the distance to move back + timing has been tuned so that you need to pre-position for it.</li> <li>The transition from inside the engine to outside was really cool!!! This is probably one of my top normal trials now.</li> <li>The instance battle was well done too. The roleplaying part was on point, and when it was finally time to fight a real boss you get to play as yourelf (I think this is the best flow). Love the idea using the spriggan to avoid Behemoth&rsquo;s meteor.</li> <li>Cool so we just get to keep the key. If this were any bit realistic, we&rsquo;ve surely learned that no one this powerful should be allowed to keep the key on themsleves 24/7. Because surely the WoL being the most powerful being will never run rogue with a interdimensional travel capable tool. Then again, seeing how stuff gets stolen all the time in the story&hellip; Well I guess it can go either way.</li> <li>I&rsquo;m guessing this key is gonna be how the writers justify being able to travel to new worlds for post-Zodiark/Hydaelyn story. Its fine I guess, but a little disappointing it isn&rsquo;t something more unique.</li> <li>And what do you know. Ascians. I hope we get something unqiue for 8.0&hellip; I guess thats fine but please lets not have it just be SHB all over again.</li> </ul> <h1 id="raid">Raid</h1> <ul> <li>&ldquo;Feral Fandom&rdquo; -&gt; Yep thats FF14 NA playerbase for you.</li> <li>Heavyweight 1 (Vamp Fatale) Raid was cool and unique, but a bit too flashy imo. That Half Moon is needlessly large, wish we&rsquo;d stop with mechanics that are designed to trick people even when read correctly.</li> <li>Heavyweight 2 (Xtremes) I take it back, this is the one with the blinding effects MY EYES. Fire and water one after another. This is a pretty hard normal fight actually (the first time you run it blind). Really punishing for bad AOE placement positions since you can effectively be cut off from the team.</li> <li>Holy wow these cutscenes are in serious need of voice acting. Its a good story but so dry and awkward without it.</li> <li>Heavyweight 3 (Tyrant). Really? Behemoth again, double dipping from the instance battle. There&rsquo;s so many other cool FF monsters. I like the arena, it fits the guy well, all about history of the Arcadion/tradition. Fight is underwhelming and too easy imo, apart from 1 single trick mechanic that can cause a wipe&hellip;</li> <li>Heavyweight 4 (Lindwurm). EVERYTHING BURNS. This fight was honestly too easy, zero deaths everything can be read. 2nd phase was underhelming.</li> <li>Overall the story here while not as in depth and relevant to the story as Endwalker raids, still had a nice little twist at the end I def did not expect. Enjoyed it!</li> </ul> <h1 id="misc">Misc</h1> <ul> <li>The new Frontline map is &ldquo;dangerous&rdquo;. Overall the new capturing point system is far better than a non-interruptable interact like in Onsal Hakir. The snowman and aurora events are also good, and I think they come in right when they&rsquo;re needed too (to spice things up/allow for a turning point).</li> <li>The map design however is far too complex, all these bridges and everywhere and invisible walls. It does add a lot of chokepoints but also makes it difficult to navigate from point A -&gt; B (but partially I guess this is done cause the map does feel smaller than Onsal).</li> </ul> <a href="https://micro.pinapelz.com//tags/ffxiv" class="p-category">#ffxiv</a> + + + Arcade Monsters + https://micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/ + Thu, 18 Dec 2025 21:38:23 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-18-07-arcade-monsters-sd/ + <p>If you live in Socal and are also into arcade gaming (both retro and modern), one of the great weekend day-trips I&rsquo;ve found is taking the Pacific Surfliner train down to San Diego.</p> <h1 id="getting-there">Getting There</h1> <p>There are a number of departures in the morning, and while not as fast as a car when there&rsquo;s no traffic, you can save your energy and do other stuff on the train. The timetable also works nicely since you can pretty much get there around opening if you want to beat the crowds.</p> + + + First MXM 18 Cleared! + https://micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/ + Sat, 06 Dec 2025 22:33:23 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/ + <p>Cleared my first 18 difficulty chart in <a href="https://micro.pinapelz.com//tags/sdvx" class="p-category">#sdvx</a> </p> <p>Albeit its not a very difficult one, but I think I&rsquo;m finally starting to chip away at the 17-18 difficulty wall. <figure><img src="https://micro.pinapelz.com/posts/2025-12-06-first-sdvx-18/18.webp" alt="Sound Voltex Enchant 6 Clear" width="500"> </figure> </p> + + + Enable HID Mode on Nintendo Pro Controller 2 + https://micro.pinapelz.com/posts/2025-12-04-procon2-hid-tool/ + Thu, 04 Dec 2025 23:19:29 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-04-procon2-hid-tool/ + <p>Switch 2 Pro Controller is very comfy in my hands, but unfortunately it didn&rsquo;t work out of box on PC (Linux) for me like it&rsquo;s predacessor. Until there&rsquo;s actual better driver support for this thing in the kernel (or Valve does something), here&rsquo;s a hacky Python script to initialize HID-mode on the controller</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e"># I only tested this script on Linux w/ Steam but in theory it shoud work on Windows?</span> </span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> usb.core <span style="color:#75715e"># install pyusb first: pip install pyusb</span> </span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> usb.util </span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> time </span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> sys </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>VENDOR_ID <span style="color:#f92672">=</span> <span style="color:#ae81ff">0x057E</span> </span></span><span style="display:flex;"><span>PRODUCT_IDS <span style="color:#f92672">=</span> { </span></span><span style="display:flex;"><span> <span style="color:#ae81ff">0x2066</span>: <span style="color:#e6db74">&#34;Joy-Con (L)&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#ae81ff">0x2067</span>: <span style="color:#e6db74">&#34;Joy-Con (R)&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#ae81ff">0x2069</span>: <span style="color:#e6db74">&#34;Pro Controller&#34;</span>, </span></span><span style="display:flex;"><span> <span style="color:#ae81ff">0x2073</span>: <span style="color:#e6db74">&#34;GCN Controller&#34;</span> </span></span><span style="display:flex;"><span>} </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>USB_INTERFACE_NUMBER <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>INIT_COMMAND_0x03 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x03</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x0d</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x08</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>]) </span></span><span style="display:flex;"><span>UNKNOWN_COMMAND_0x07 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x07</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>UNKNOWN_COMMAND_0x16 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x16</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>REQUEST_CONTROLLER_MAC <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x15</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x0e</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x02</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>]) </span></span><span style="display:flex;"><span>LTK_REQUEST <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x15</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x02</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x11</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>, <span style="color:#ae81ff">0xFF</span>]) </span></span><span style="display:flex;"><span>UNKNOWN_COMMAND_0x15_ARG_0x03 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x15</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x03</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>UNKNOWN_COMMAND_0x09 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x09</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x07</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x08</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>IMU_COMMAND_0x02 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x0c</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x02</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x04</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x27</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>OUT_UNKNOWN_COMMAND_0x11 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x11</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x03</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>UNKNOWN_COMMAND_0x0A <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x0a</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x08</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x14</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0xff</span>, <span style="color:#ae81ff">0x35</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x46</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>IMU_COMMAND_0x04 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x0c</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x04</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x04</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x27</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>ENABLE_HAPTICS <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x03</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x0a</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x04</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x09</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>OUT_UNKNOWN_COMMAND_0x10 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x10</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>OUT_UNKNOWN_COMMAND_0x01 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x0c</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>OUT_UNKNOWN_COMMAND_0x03 <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x03</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x01</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span>OUT_UNKNOWN_COMMAND_0x0A_ALT <span style="color:#f92672">=</span> bytes([<span style="color:#ae81ff">0x0a</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x02</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x04</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x03</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>]) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">send_usb_data</span>(ep_out, ep_in, data, description<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&#34;</span>): </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> ep_out<span style="color:#f92672">.</span>write(data) </span></span><span style="display:flex;"><span> time<span style="color:#f92672">.</span>sleep(<span style="color:#ae81ff">0.01</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> response <span style="color:#f92672">=</span> ep_in<span style="color:#f92672">.</span>read(<span style="color:#ae81ff">32</span>, timeout<span style="color:#f92672">=</span><span style="color:#ae81ff">100</span>) </span></span><span style="display:flex;"><span> hex_resp <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34; &#34;</span><span style="color:#f92672">.</span>join([<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;</span><span style="color:#e6db74">{</span>x<span style="color:#e6db74">:</span><span style="color:#e6db74">02x</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> <span style="color:#66d9ef">for</span> x <span style="color:#f92672">in</span> response]) </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;[</span><span style="color:#e6db74">{</span>description<span style="color:#e6db74">}</span><span style="color:#e6db74">] Response: </span><span style="color:#e6db74">{</span>hex_resp<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> usb<span style="color:#f92672">.</span>core<span style="color:#f92672">.</span>USBError <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> e<span style="color:#f92672">.</span>errno <span style="color:#f92672">==</span> <span style="color:#ae81ff">110</span>: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;[</span><span style="color:#e6db74">{</span>description<span style="color:#e6db74">}</span><span style="color:#e6db74">] No response (Timeout)&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">else</span>: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;[</span><span style="color:#e6db74">{</span>description<span style="color:#e6db74">}</span><span style="color:#e6db74">] Read Error: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> usb<span style="color:#f92672">.</span>core<span style="color:#f92672">.</span>USBError <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;[</span><span style="color:#e6db74">{</span>description<span style="color:#e6db74">}</span><span style="color:#e6db74">] Write Error: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">raise</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">set_player_leds</span>(ep_out, ep_in, led_mask): </span></span><span style="display:flex;"><span> command <span style="color:#f92672">=</span> [ </span></span><span style="display:flex;"><span> <span style="color:#ae81ff">0x09</span>, <span style="color:#ae81ff">0x91</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x07</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x08</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, </span></span><span style="display:flex;"><span> led_mask, </span></span><span style="display:flex;"><span> <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span>, <span style="color:#ae81ff">0x00</span> </span></span><span style="display:flex;"><span> ] </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, bytes(command), <span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Set LED Mask: 0x</span><span style="color:#e6db74">{</span>led_mask<span style="color:#e6db74">:</span><span style="color:#e6db74">02x</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">connect_usb</span>(): </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;Searching for Nintendo Switch Controllers...&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">match_device</span>(dev): </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> dev<span style="color:#f92672">.</span>idVendor <span style="color:#f92672">==</span> VENDOR_ID <span style="color:#f92672">and</span> dev<span style="color:#f92672">.</span>idProduct <span style="color:#f92672">in</span> PRODUCT_IDS </span></span><span style="display:flex;"><span> dev <span style="color:#f92672">=</span> usb<span style="color:#f92672">.</span>core<span style="color:#f92672">.</span>find(custom_match<span style="color:#f92672">=</span>match_device) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> dev <span style="color:#f92672">is</span> <span style="color:#66d9ef">None</span>: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">raise</span> <span style="color:#a6e22e">ValueError</span>(<span style="color:#e6db74">&#34;Device not found&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> product_name <span style="color:#f92672">=</span> PRODUCT_IDS<span style="color:#f92672">.</span>get(dev<span style="color:#f92672">.</span>idProduct, <span style="color:#e6db74">&#34;Unknown Device&#34;</span>) </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Found </span><span style="color:#e6db74">{</span>product_name<span style="color:#e6db74">}</span><span style="color:#e6db74"> (ID: </span><span style="color:#e6db74">{</span>dev<span style="color:#f92672">.</span>idProduct<span style="color:#e6db74">:</span><span style="color:#e6db74">04x</span><span style="color:#e6db74">}</span><span style="color:#e6db74">)&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> dev<span style="color:#f92672">.</span>is_kernel_driver_active(USB_INTERFACE_NUMBER): </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;Detaching kernel driver...&#34;</span>) </span></span><span style="display:flex;"><span> dev<span style="color:#f92672">.</span>detach_kernel_driver(USB_INTERFACE_NUMBER) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> usb<span style="color:#f92672">.</span>core<span style="color:#f92672">.</span>USBError <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> sys<span style="color:#f92672">.</span>exit(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Could not detach kernel driver: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> dev<span style="color:#f92672">.</span>set_configuration() </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;Configuration set.&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> usb<span style="color:#f92672">.</span>core<span style="color:#f92672">.</span>USBError <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Error setting configuration: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>claim_interface(dev, USB_INTERFACE_NUMBER) </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Interface </span><span style="color:#e6db74">{</span>USB_INTERFACE_NUMBER<span style="color:#e6db74">}</span><span style="color:#e6db74"> claimed.&#34;</span>) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> usb<span style="color:#f92672">.</span>core<span style="color:#f92672">.</span>USBError <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> sys<span style="color:#f92672">.</span>exit(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Could not claim interface: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> cfg <span style="color:#f92672">=</span> dev<span style="color:#f92672">.</span>get_active_configuration() </span></span><span style="display:flex;"><span> intf <span style="color:#f92672">=</span> cfg[(USB_INTERFACE_NUMBER,<span style="color:#ae81ff">0</span>)] </span></span><span style="display:flex;"><span> ep_out <span style="color:#f92672">=</span> usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>find_descriptor( </span></span><span style="display:flex;"><span> intf, </span></span><span style="display:flex;"><span> custom_match <span style="color:#f92672">=</span> <span style="color:#66d9ef">lambda</span> e: usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>endpoint_direction(e<span style="color:#f92672">.</span>bEndpointAddress) <span style="color:#f92672">==</span> usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>ENDPOINT_OUT) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> ep_in <span style="color:#f92672">=</span> usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>find_descriptor( </span></span><span style="display:flex;"><span> intf, </span></span><span style="display:flex;"><span> custom_match <span style="color:#f92672">=</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">lambda</span> e: usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>endpoint_direction(e<span style="color:#f92672">.</span>bEndpointAddress) <span style="color:#f92672">==</span> usb<span style="color:#f92672">.</span>util<span style="color:#f92672">.</span>ENDPOINT_IN </span></span><span style="display:flex;"><span> ) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> <span style="color:#f92672">not</span> ep_out: </span></span><span style="display:flex;"><span> sys<span style="color:#f92672">.</span>exit(<span style="color:#e6db74">&#34;Could not find OUT endpoint&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Found Endpoint OUT: 0x</span><span style="color:#e6db74">{</span>ep_out<span style="color:#f92672">.</span>bEndpointAddress<span style="color:#e6db74">:</span><span style="color:#e6db74">02x</span><span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;Starting Initialization Sequence...&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, INIT_COMMAND_0x03, <span style="color:#e6db74">&#34;Init 0x03&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x07, <span style="color:#e6db74">&#34;Unknown 0x07&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x16, <span style="color:#e6db74">&#34;Unknown 0x16&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, REQUEST_CONTROLLER_MAC, <span style="color:#e6db74">&#34;Req MAC&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, LTK_REQUEST, <span style="color:#e6db74">&#34;Req LTK&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x15_ARG_0x03, <span style="color:#e6db74">&#34;Unknown 0x15&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x09, <span style="color:#e6db74">&#34;Unknown 0x09&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, IMU_COMMAND_0x02, <span style="color:#e6db74">&#34;IMU 0x02&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x11, <span style="color:#e6db74">&#34;OUT Unknown 0x11&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x0A, <span style="color:#e6db74">&#34;Unknown 0x0A&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, IMU_COMMAND_0x04, <span style="color:#e6db74">&#34;IMU 0x04&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, ENABLE_HAPTICS, <span style="color:#e6db74">&#34;Enable Haptics&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x10, <span style="color:#e6db74">&#34;OUT Unknown 0x10&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x01, <span style="color:#e6db74">&#34;OUT Unknown 0x01&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x03, <span style="color:#e6db74">&#34;OUT Unknown 0x03&#34;</span>) </span></span><span style="display:flex;"><span> send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x0A_ALT, <span style="color:#e6db74">&#34;OUT Unknown 0x0A Alt&#34;</span>) </span></span><span style="display:flex;"><span> set_player_leds(ep_out, ep_in, <span style="color:#ae81ff">0x0F</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">&#34;Controller initialization sequence complete! All LEDs should be on.&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> <span style="color:#a6e22e">Exception</span> <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Error during sequence: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;__main__&#34;</span>: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">try</span>: </span></span><span style="display:flex;"><span> connect_usb() </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> <span style="color:#a6e22e">ValueError</span> <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> print(e) </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">except</span> <span style="color:#a6e22e">Exception</span> <span style="color:#66d9ef">as</span> e: </span></span><span style="display:flex;"><span> print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Unexpected error: </span><span style="color:#e6db74">{</span>e<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>) </span></span></code></pre></div><p><strong>Steps</strong></p> + + + YouTube Music Recap 2025 + https://micro.pinapelz.com/posts/2025-12-03-04-yt-music-rewind/ + Wed, 03 Dec 2025 19:38:52 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-03-04-yt-music-rewind/ + <p>Its all Bandori. At least 75% of that MyGO!!!!! listening time was probably Haruhikage since I came back to Bandori and had to catch up before watching Ave Mujica anime.</p> <figure><img src="https://files.catbox.moe/tsquqc.jpg" alt="YouTube Music Recap Top 5 Artists In Order: MyGO!!!!!, Yumenokessho, Ave Mujica, KMNZ, Roselia" width="300"> </figure> + + + INIU Power Bank Gets Recall + https://micro.pinapelz.com/posts/2025-12-02-power-bank-recall/ + Tue, 02 Dec 2025 19:45:01 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-02-power-bank-recall/ + <p>It would seem that I, along with what seems like the entirety of <a href="https://www.reddit.com/r/amazonprime/comments/1pcq5ug/how_to_get_customer_support_for_recall_iniu/">Reddit</a> bought the same cheap 10000mAh power bank and now its getting recalled.</p> <p>I wonder if it has anything to do with the poor quality they found in that viral <a href="https://www.lumafield.com/first-article/posts/whats-hiding-inside-haribos-power-bank-and-headphones">Haribo Powerbank</a>. Not sure since I&rsquo;ve had this one for a long time. I guess I really got what I paid for, shame cause it really is super slim and works well.</p> + + + China Town Fair + https://micro.pinapelz.com/posts/2025-12-02-china-town-fair/ + Tue, 02 Dec 2025 00:22:32 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-02-china-town-fair/ + <p>Visited New York during the Thanksgiving break and had a chance to stopped by one of the most legendary landmarks North American arcade gaming history.</p> <figure><img src="https://micro.pinapelz.com/posts/2025-12-02-china-town-fair/outside-ctf.webp" alt="China Town Fair Outside"> </figure> <p>Also yep you&rsquo;re reading that right, it indeed once home to a <a href="https://davidpotorti.substack.com/p/the-dancing-chicken">dancing chicken as well as one that played tic tac toe</a>.</p> <p>But apart from just being an old arcade, it was also home to one of the largest competitive arcade game fighting scene (Marvel vs Capcom, Street Fighter, etc.). Many of NAs top players frequented this arcade. However, as we all already know video arcades began to die down during the early 2000s and China Town Fair was no exception having closed in 2011.</p> + + + Hello World - Why This + https://micro.pinapelz.com/posts/2025-12-01-hello-world/ + Mon, 01 Dec 2025 20:11:57 -0800yukais@pinapelz.com (Pinapelz) + https://micro.pinapelz.com/posts/2025-12-01-hello-world/ + <p>I think having control of your own data is great. The same is true for decentralized social media. I&rsquo;ve always been a primary user of microblog platforms (like Twitter/X). Having experienced both the traditional and &ldquo;decentralized&rdquo; approaches to microblogs, they both have some particular shortcoming in terms of what I want to get out of &ldquo;social media&rdquo;.</p> <h2 id="twitterx">Twitter/X</h2> <p>This is fairly self explanatory. The rebranding of Twitter to X and Musk&rsquo;s new ownership of the platform shifted the direction of the platform to be ever more political. X Premium boosting visibility is also something I wasn&rsquo;t a particular fan of. You can&rsquo;t view anything without signing in either, so goodbye viewing stuff anonymously. There&rsquo;s just a lot of &ldquo;features&rdquo; here I&rsquo;m not a fan of. Needless to say, there&rsquo;s a lot of reasons to not post stuff there.</p> + + + diff --git a/micro.pinapelz.com/posts/page/1/index.html b/micro.pinapelz.com/posts/page/1/index.html new file mode 100644 index 0000000..803dfa8 --- /dev/null +++ b/micro.pinapelz.com/posts/page/1/index.html @@ -0,0 +1,9 @@ + + + + https://micro.pinapelz.com/posts/ + + + + + diff --git a/micro.pinapelz.com/posts/page/2/index.html b/micro.pinapelz.com/posts/page/2/index.html new file mode 100644 index 0000000..ff3e49b --- /dev/null +++ b/micro.pinapelz.com/posts/page/2/index.html @@ -0,0 +1,238 @@ + + + + + + + + Posts | micro.pinapelz.com + + + + + + + + + + + + + + + + + + +
+
+
+ ==============
+ == Pinapelz ==
+ ============== +
+
check it out. I'm in the house like carpet
+
+ +
+ + +
+ + +
+ +

+ Posts + +RSS icon + + +

+ + +
+ + +
+ + + + + + + + + + + +
+ +
+

December 2025

+
    + + +
  • + +
    + : + + + INIU Power Bank Gets Recall + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + China Town Fair + +
    +
  • + + + + + + + + + +
  • + +
    + : + + + Hello World - Why This + +
    +
  • + + + + +
+
+ + +
+ + Previous Page + +2 of 2 + +
+ +
+ +
+ + + + -- cgit v1.2.3