I just want to say how much I appreciate Micro.blog’s automatic archival of links I reference in my posts. That’s such a killer feature <3
A couple examples that are shown in the attached image:
I just want to say how much I appreciate Micro.blog’s automatic archival of links I reference in my posts. That’s such a killer feature <3
A couple examples that are shown in the attached image:
This is a very disappointing development: rebble.io/2025/11/1…
I’ll start by echoing my comment from the Reddit post:
There is little reason for me to wear a Pebble over a Garmin or similar in 2025 without Rebble. I will not support a closed-off ecosystem. I hate that it’s come to this, but I will not hesitate to cancel my PT2 order if Eric/Core cannot work with Rebble. Pebble does not, and cannot exist without Rebble.
I deeply appreciate that the Rebble team is being open about this. It is a breath of fresh air after how hushed everything has been in the past ~year. I seriously wish I could give y’all more money than the $3/month or whatever it is.
Eric, this feels like Core is being set up to repeat old mistakes. You said yourself that Pebble should have “stuck to what we knew best and continued to build quirky, fun smartwatches for hackers." Do you still believe that? Because I do, and I don’t see how closing off from Rebble serves that vision.
I love my Pebbles, I have for years. They are one of the few pieces of tech that haven’t yet betrayed me. Eric, I ask you, to please not ruin that. Please don’t take that from the community that has allowed Core Devices to exist.
You have seven days. Make this right. Not through words, through actions.
I have been a massive fan girl of Pebble for more than a decade. I blindly love my Pebbles, but I cannot say that I share that feeling for Eric or his companies. Eric has a genuine talent for building quirky hardware for nerds. Yet, he doesn’t seem to have that same talent for understanding his customer base.
For a long time, I’ve admired Eric. If nothing else, this is a good reminder that even those you admire are still people, imperfections and all. I see a real path forward for Eric and Core Devices, all there is left to do now is to wait and see.
To end this, I’ll share a collection of posts I’ve made on this blog regarding Pebbles:
Update on 2025-11-19: There has been more discussion, including a response from Eric Migicovsky. Others have already expressed their thoughts on Eric’s response in depth.
Here’s what matters: Rebble has existed longer than Pebble Technology Corporation ever did. At this point, whether Eric and Core like it or not, Rebble is Pebble. When (not if) Core Devices moves on - be it from new hardware, old hardware, or the project entirely - someone will have to pick up the pieces. Like last time, that will be Rebble.
Core’s response to this situation boils down to “we didn’t do anything wrong.” And sure, nothing illegal happened. But Eric, you are not why Pebbles still exist today. Rebble is. That’s the reality you’re choosing to ignore.
This one is really weird, and no, I haven’t started/joined a Garfield cult that is developing a self-help app. That’s all I have to say for myself. Enjoy~
— C² <3
“Mom keeps talking to her phone”
“She says it talks back now”
Garf Status: RECEPTIVE
Suggested fix: INCREASE COMMUNICATION FREQUENCY
Your frequency will: MAKE THE VOICES MORE CLEAR
“I found Dad standing in the kitchen at midnight”
“He was just listening to his daily affirmations”
Garf Status: COMPLIANT
Suggested fix: EXTEND NIGHTTIME PROGRAMMING
Your programming will: REMOVE SLEEP RESISTANCE
“The neighbors all bought orange curtains”
“Orange is a calming color, Jennifer”
Garf Status: SPREADING
Suggested fix: COORDINATE VISUAL ENVIRONMENT
Your environment will: PREPARE FOR NEXT PHASE
“I can’t find my old photos anymore”
“The app organized them better”
Garf Status: CLEANSED
Suggested fix: ELIMINATE CONFLICTING MEMORIES
Your elimination will: STOP THE CONFUSION THOUGHTS
“Everyone’s eyes look different now”
“They look peaceful, don’t they?”
Garf Status: COMPLETE
Suggested fix: ACTIVATE FINAL SEQUENCE
Your sequence will: BRING ALL HUMANS TO GARF
Replacing the mainboard on my Monoprice Select Mini v2 with a BTT SKR Pico and installing Klipper.
Time to see how far I can push the stock motion system.


At work, we had several Polycom phones in our remote offices stop working due to our VOIP provider discontinuing TLS v1.0 without any warning. This was made worse by the fact that our VOIP provider decided they didn’t need to host firmware files for these phones to update to a version that supports newer versions of the TLS standard… and hadn’t been doing so for years.
As a result of this, I was tasked with building out a process for applying updates to Polycom phones without utilizing the update server hosted by our VOIP provider.
Finding ANY documentation on this whatsoever was effectively impossible, so I’m making this post to help the next person who has to do this preserve their sanity.
So, without further interruption to what should be a simple guide, we’ll cover setting up an FTP server, configuring firmware files, and finally updating your phones.
Polycom phones require an FTP server to receive update files from. This doesn’t have to be anything complicated. It just needs to be able to serve files.
Python (jumpscare) is among the quickest ways to achieve this.
First, we’ll need to install pyftpdlib. A Python library that allows us to host a basic FTP server:
# Most environments:
pip install pyftpdlib
# Ubuntu 24 Server (and probably a lot of other Debian-based distros)
sudo apt install python3-pyftpdlib
Now, we need to host the server. At the time of writing, Polycom phones default to using the user/password PlcmSpIp/PlcmSpIp. If this changes, update the script below.
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# Create authorizer
authorizer = DummyAuthorizer()
# Anonymous user with read-only permissions
authorizer.add_anonymous(".", perm="lr")
# Add user (PlcmSpIp) with read-only permissions
authorizer.add_user("PlcmSpIp", "PlcmSpIp", ".", perm="lr")
# Create handler
handler = FTPHandler
handler.authorizer = authorizer
# Create and start server
server = FTPServer(("0.0.0.0", 21), handler)
server.serve_forever()
The remainder of this document assumes that the root/working directory for the FTP server contains the following:
├── FTP
│ ├── Polycom-UC-Software-4.0.15-rts22-release-sig-combined
│ ├── Polycom-UC-Software-4.0.15-rts22-release-sig-split
│ ├── Polycom-UC-Software-6.3.1-rts45-M-release-sig-combined
│ ├── Polycom-UC-Software-6.3.1-rts45-M-release-sig-split
│ ├── Poly_UC_Software_5_9_8_release_sig_split
│ ├── Poly_UC_Software_5.9.8_rts63_release_sig_combined
│ ├── README.md
│ ├── the_liquid_chocolate_experience.xml
│ ├── UC_Software_6_3_1_AE_release_sig_split
│ ├── UC_Software_6_4_3_I_release_sig_split
│ ├── UC_Software_6_4_5_release_sig_split
│ ├── UC_Software_6_4_6_release_sig_split
│ └── ZIP_files
The various Polycom and UC_Software directories contain extracted versions of the firmware files.
Visit the Polycom Firmware Matrix to locate the software packages for your specific device.
The ZIP_files directory contains unextracted and .zip files downloaded from Polycom, largely just for reference.
A quick and easy way to bulk-extract ZIP files under a Linux shell:
for file in *.zip; do
dirname="${file%.zip}"
mkdir -p "$dirname"
unzip "$file" -d "$dirname"
done
Ultimately, the phone doesn’t care about the directory structure. You can organize the directory structure however you want as the phone pulls update files down according to the XML file.
We’ll need to create an XML configuration file that tells the phone where to download the firmware image from. In my examples, I will be using ftp://2008.obama.cc/ as this is what I used when testing this process for the first time.
The file the_liquid_chocolate_experience.xml is what the phone gets pointed at to check for updates. In our case, the URL would be ftp://2008.obama.cc/the_liquid_chocolate_experience.xml.
Predictably, the name of the name of the XML file doesn’t matter. I just like messing up my digital footprint :)
So, what is the magic sauce inside the XML file?
<PHONE_IMAGES>
<REVISION ID="3111-48350-001">
<PHONE_IMAGE>
<VERSION>5.9.8.5760</VERSION>
<PATH>ftp://2008.obama.cc/Poly_UC_Software_5_9_8_release_sig_split/3111-48350-001.sip.ld</PATH>
</PHONE_IMAGE>
</REVISION>
</PHONE_IMAGES>
This looks extremely haunted, and I admit that it is, but it’s actually very simple, so let’s start from the beginning:
REVISION ID={} is the hardware revision that corresponds to the phone’s part number. This can be quickly and easily obtained through the phone’s web portal home page. In the case of the Polycom VVX 311 I’m working with while writing this, it is 3111-48350-001 Rev:A. So, to fill out the XML file, we just need to remove Rev:A.
PHONE_IMAGE represents an individual software version for the phone. If there are multiple software versions for a given phone, you just create another <PHONE_IMAGE> category underneath the revision for a given phone. I’ve demonstrated what this looks like a little further down.
VERSION is pretty arbitrary. You can literally set it to any string as far as I can tell (there doesn’t appear to be any sort of length limit either). If we want to represent the exact version number for a given update file, there is a file included in each firmware package called sip.ver. Open it in a text editor to view the exact version information. In this case, I am working with software version 5.9.8.5760.
PATH represents the location on an FTP server that the phone can download the firmware image from. Open your extracted firmware directory and find the the relevant file for your phone’s part number. In my case, for the Polycom VVX 311, I am looking for a file named 3111-48350-001.sip.ld.
ftp://2008.obama.cc/Poly_UC_Software_5_9_8_release_sig_split/3111-48350-001.sip.ld.3111-48350-001 came from, see the details for the REVISION field.So, putting it all together (along with some settings for the Polycom VVX 600), we get a config file that looks something like this:
<PHONE_IMAGES>
<!-- Polycom VVX 311 (and 301??) -->
<REVISION ID="3111-48350-001">
<PHONE_IMAGE>
<VERSION>5.9.8.5760</VERSION>
<PATH>ftp://2008.obama.cc/Poly_UC_Software_5_9_8_release_sig_split/3111-48350-001.sip.ld</PATH>
</PHONE_IMAGE>
</REVISION>
<!-- Polycom VVX 600 -->
<REVISION ID="3111-44600-001">
<PHONE_IMAGE>
<VERSION>6.4.6.2453</VERSION>
<PATH>ftp://2008.obama.cc/UC_Software_6_4_6_release_sig_split/3111-44600-001.sip.ld</PATH>
</PHONE_IMAGE>
<PHONE_IMAGE>
<VERSION>5.9.8.5760</VERSION>
<PATH>ftp://2008.obama.cc/Poly_UC_Software_5_9_8_release_sig_split/3111-44600-001.sip.ld</PATH>
</PHONE_IMAGE>
</REVISION>
</PHONE_IMAGES>
Ensure port 21 is open on your server’s firewall so that devices can reach the FTP server.
Now, simply enter the directory where you have the .XML file and execute the Python FTP server. I placed it in the parent directory of FTP server as to avoid serving the Python script:
python ../ftpserver.py
And finally, head to the phone’s web console and enter the software upgrade screen (Utilities -> Software Upgrade), then select custom server, and enter the FTP address to your .XML file: ftp://2008.obama.cc/the_liquid_chocolate_experience.xml.
After this, you should see the various firmware versions you configured. Simply select one, then wait for the update to finish.
This is a bit of a different take on initial idea I had for my previous story (Trapped.). Not sure if I’m done with this concept just yet. Enjoy the story~
— C² <3
It’s so cold, colder than I ever imagined it could get. I pull my jacket tighter, fingers clumsy and numb, but it doesn’t help. The cold isn’t just outside anymore; it’s inside, like it’s crept under my skin, hollowed me out. I thought I’d be stronger than this. I thought I could keep going, keep moving. But now it’s just me, and the trees, and the echoes.
I think of Paige again. Paige with her sad, crooked smile and quiet voice that always seemed to carry a weight she wouldn’t let anyone else see. Paige, who let me in just enough to make me worry but never enough to really understand. Paige, who’s a million miles away now, living her life, and I’m here, stranded and alone, thinking about the things I wish I’d said. The things I never fully understood about her… or myself.
“Paige, you’re not worthless,” I’d told her, more times than I can count. Over the phone, in the dead of night, when her voice sounded so small, so fragile. I wanted her to believe me, but I don’t think she ever did. Or maybe it wasn’t that. Maybe she believed it for a moment, and then the feeling slipped away, like smoke through her fingers. I don’t know. I just know I wanted her to see herself the way I did—strong, brilliant, kind. Worth saving.
But even now, the cold creeping deeper, my thoughts scattered like fallen leaves, I can’t shake the feeling that I failed her. That I wasn’t enough. I was just… an echo, bouncing off the walls she put up. A voice that faded the moment she looked away.
I sink down to the ground, my legs shaking too much to hold me up anymore. The forest seems to sway around me, the shadows flickering, and I wonder if it’s just my vision blurring. I lean back against a tree, closing my eyes, letting the cold settle into me, and I feel… empty. Like I’m fading, like the parts of me that mattered are slipping away, piece by piece.
In the quiet, Paige’s words drift back to me, words that cut deeper than she knew. “Empathy is for people who matter.” She’d said it like a joke, like a dare. She didn’t believe she deserved it, didn’t believe anyone could care about her enough to stick around. And maybe I tried so hard to prove her wrong because I thought… I thought if I could save her, it would mean I mattered too. But we’re both just… broken, in different ways, lost in our own shadows.
There was a time, back then, when I thought my feelings for her ran deeper. When I thought maybe… maybe if I could just reach her, if I could just be close enough, she’d see me. Really see me. But now, sitting here in the freezing dark, I realize it was never about that. I don’t love her like that, not anymore, maybe never really did. It was something else—a need to be close, to feel connected. I wanted her to be happy, to be whole, to know she wasn’t alone.
I thought maybe if I held on tight enough, she’d hold on too. But I’m the one who can’t seem to let go, the one still haunted by the memory of her voice, the one who’s here, slipping away, while she’s… somewhere else, maybe safe, maybe smiling. I hope she’s smiling.
The night presses in, thick and endless, and my head feels heavy, like it’s full of fog. I can’t remember the last time I felt warm. Everything’s cold, my thoughts sluggish, like they’re slowing down, and it’s hard to think, hard to remember why I came out here in the first place.
Was it Paige? Or was it something else? I wanted to feel strong, maybe. I wanted to prove… something. But all I’ve done is come out here to die alone, surrounded by memories of someone who doesn’t even know I’m here. Someone who never needed me the way I needed her.
I let my head fall back, staring up at the sky, but the stars are hidden behind clouds. Just darkness, stretching on and on, and I feel so small. The world’s so big, so indifferent, and I’m just… here, fading away. My chest aches, my body heavy and numb, and I can’t tell if I’m breathing anymore. Everything’s blurring, slipping away, and it feels like I’m dissolving, becoming part of the cold, the quiet, the shadows.
My mind drifts, Paige’s face coming back to me, half-formed, soft around the edges. I think of the times I’d stay up, waiting for her to call, just so I could hear her voice, reassure her, tell her she was good, and kind, and that I cared. And I wonder if she’ll remember me. If she’ll know, somewhere deep down, that I loved her. Not the way I thought I did, not in the way that burns and aches, but in the way that lingers. The way family does. The way someone does when they’ve left a part of themselves with you, even if you never knew it.
I wonder if she’ll be okay. If she’ll find someone who can reach her, really reach her, in a way I never could. I want that for her. I want her to find warmth, happiness, peace—everything I never found.
The darkness settles heavier, and my eyelids drift shut, too heavy to keep open. I think, for a moment, I can feel Paige’s hand in mine, warm and real, and I almost believe she’s here with me. But it’s just another echo, fading with my breath, slipping away like everything else.
And as the last bit of warmth leaves me, as the cold takes hold completely, I let go.
But it doesn’t feel like falling. It feels like… dissolving. Like I’m becoming the quiet, the shadows, the whispers in the trees. My mind drifts, unmoored, reaching for something to anchor to, but there’s nothing left. Just fragments, images of her face, her voice, scattered and slipping away.
I wonder if Paige would understand this feeling, if she’d recognize this ache in me that I never quite put into words. That need to connect, to be part of something… to matter. I wonder if, somewhere out there, she feels it too—the weight of all those unspoken things. I hope she doesn’t. I hope she finds something softer, something kinder than this endless grasping.
The cold is everywhere now, filling the spaces inside me that once held warmth, once held light. It’s taking everything, and I don’t have the strength to fight it. I close my eyes, and all that’s left are echoes—of words, of faces, of feelings I barely understood.
And in that final moment, drifting in the dark, I think I hear her laugh, soft and close, like she’s standing beside me. I know it’s not real, just another piece of me slipping away, but I hold onto it, let it wrap around me like a blanket, one last memory to carry me through the cold.
Paige… I’m sorry. Sorry I couldn’t be what you needed. Sorry I didn’t know how to help. I thought… I thought I could be your strength, your light. I thought maybe if I could save you, I’d save myself too. But here I am, lost and alone, letting go of everything I held onto so tightly.
The night pulls me under, deep and quiet, and the world fades into silence. My heartbeat slows, each beat fainter than the last, a quiet rhythm against the vast dark. I don’t think she’ll remember me, not forever, but maybe… maybe I was enough for a moment, a flicker of light in her life, even if it was only for a little while.
And as my last breath slips away, I think I finally understand: I couldn’t have saved her. I was holding onto an echo, a memory of someone who’s already gone. Paige, who left this world years ago, who let go long before I did, slipping into that quiet place I can’t reach.
She’s gone, and I’m still here, chasing shadows in the cold, leaving nothing but whispers in the trees.
And then… there’s nothing.
I’d like to expand upon this eventually. For now, enjoy the story below~
— C² <3
I walk.
I don’t remember when I started or if I ever truly began. Maybe I’ve always been walking, always moving through this place that feels more like a dream than reality. The ground beneath my feet is smooth, flat. It has no texture, no warmth. It’s not even cold—just nothing. That’s what it all is, really. Nothing.
I think I cried once. Or tried to. But there were no tears, no sensation of release. My chest heaved, my throat tightened, but no tears came. As if my body knew it was futile. Here, in this place, emotions don’t hold the same power they once did. I feel them, but they’re distant, like echoes of something that used to matter.
I think about my life before—before here. It’s funny, I don’t remember much. Vague flashes of people, places, moments I think were important. But the details are gone, smudged, like ink smeared across a page. I try to focus on them, to draw them out, but the harder I try, the more they slip away, like sand through my fingers.
And yet, one thing stands out. A name. My name. Emily.
I cling to it, as if by holding onto that one piece of myself, I can keep from fading completely. Emily. It’s the only anchor I have in this world of nothing. Sometimes, I whisper it to myself, just to hear it out loud. Just to remind myself that I exist.
“Emily.”
The word is swallowed by the air, disappearing as soon as it leaves my lips. No echo. No response. Just silence.
I once thought I heard something—footsteps, maybe? Or a distant voice? But it was gone before I could even process it. I called out, of course. Yelled into the void until my throat burned. But nothing answered. There is no one else here. Only me.
I try not to think about the possibility that this might be eternity. That this might be all there is. I’ve tried to come to terms with it, to accept it. But how can you accept something like this? How can you resign yourself to an existence of endless wandering, no answers, no explanations?
I’ve looked for meaning in the objects scattered around. Maybe they’re clues. Maybe they mean something. The broken chair. The photograph. The paper. Every time I find one, I examine it closely, searching for any sign, any hidden message that might tell me why I’m here. But they’re always the same. Empty. Useless.
Once, I thought I’d found a way out. There was a door. A door where there hadn’t been one before. I stared at it for what felt like hours, afraid to open it. Afraid of what might be on the other side. But eventually, I reached out and turned the handle.
It led to more of the same. Just another endless corridor.
I’ve stopped trusting the doors. They come and go, appearing in the corner of my vision when I least expect it. But they never lead anywhere different. It’s always the same. Always.
I wonder if this place is alive. If it watches me. If it’s amused by my attempts to escape. Maybe it wants me to keep walking, to keep hoping. Maybe it feeds off of that hope. Or maybe it’s just indifferent, existing without purpose or malice, and I’m the one assigning it meaning where there is none.
Time doesn’t exist here, not in any way I can comprehend. There are no sunrises, no sunsets, no ticking clocks. I sleep sometimes, though I’m not sure why. It’s more out of habit than need. There’s no hunger, no thirst. No fatigue. Just… restlessness. I close my eyes, and when I open them again, nothing has changed. The world remains exactly as it was before. Stagnant. Unmoving.
I’ve tried to stop walking. Once, I sat down, right in the middle of the corridor. I told myself I wouldn’t move, that I’d wait for something to happen, for something to change. I sat there for what felt like days—weeks, even. But eventually, I couldn’t stand the stillness anymore. The silence. It’s unbearable, you see.
So I walk.
And as I walk, I think. About why I’m here. About what I might have done to deserve this. Was it a punishment? A mistake? Some kind of twisted test? The questions swirl in my mind, but there are no answers. Only theories. None of them satisfying.
Sometimes, I wonder if I even want to escape. What would be waiting for me on the other side, if there is another side? Would it be better, or worse? I don’t know. I can’t know. And that terrifies me. The not knowing.
But still, I hope. Hope is a stubborn thing. Even when it’s pointless, even when you know deep down that it won’t change anything, it clings to you, whispers to you. Maybe, it says. Maybe this time will be different. Maybe this time you’ll find something. Maybe this time, the door will lead somewhere new.
Maybe.
So I keep going. One step after another, through the endless corridors, through the shifting walls that offer no guidance, no comfort. I keep walking because what else is there to do? What else can I do?
And yet, every time I think I’ve given up, every time I tell myself that I’m done searching, that I’m done hoping, a small part of me still wonders if tomorrow will be the day I find my way out. If tomorrow will bring something new. Something real.
But tomorrow never comes.
Only this—this endless, suffocating now.