Developer Run https://developer.run Tips, Linux and Software Development stuff and minimalism Steam in 2003 was an Aesthetic Perfection. https://developer.run/82 #OldShool #Nostalgia #Windows95 #Windows98 #Vivaldi #MilitarishAesthetic https://developer.run/82

Steam 2003 Tactical

Which Linux desktop theme can be more perfect and nostalgic than Windows 95? Only Steam 2003! Nothing new, kinda trend on Reddit. But when I switch from work theme to my "home" theme, it makes me feel peaceful and earthy every time I look at my desktop :).

If we dig a little deeper, before Steam, there was the Microsoft Plus! 95 theme with similar calm colors. That's one I remember vividly:

Microsoft Plus! 95 Mystery Desktop theme

Getting back to my modern Linux setup:

#31392D #4B5844 #978730 #EFF6EE #2A3730 #171B15 #C2C6C0 #A0AA95

]]>
Sun, 08 Mar 2026 00:00:00 -0000
Make your Wyze camera useful again with Thingino and Telegram https://developer.run/81 #Minimalism #Enshittification #Surveillance #Security https://developer.run/81 Thingino on Wyze V3

Security cameras are a type of product especially prone to enshittification, and Wyze is a notable case study of this phenomenon. Introduced as super-affordable, reliable cameras with free cloud storage, they immediately won the love of millions. Then the company kind of realized that the low-margin/free-service business model was unprofitable from the start (surprise!), and tried all types of annoying monetization. That failed (obviously), and the quality of app and service dropped dramatically, angering once loyal users even more. Especially telling is that /r/Wyze recently changed their slug from "Never Wonder" (official Wyze motto) to "Always Wonder" :).

But there's hope in the great battle vs enshitification! An alternative firmware called Thingino, which makes Wyze cameras useful again, as well as dozens of other cheap (but somehow flawed) security cameras. Just go and star⭐ Thingino repo right now to support the cause against enshitification! That firmware is, of course, not the first of its kind, as getting a video feed on a local network is a trivial task. The most important questions are how do we get remote access, event notifications, and where recordings will be stored if the camera goes offline or is stolen. And in the best spirit of open source, Thingino provides multiple ways to achieve that:

  • You can access your camera remotely over your local network, via a static IP, or through a VPN using a solid web interface or the tinyCam Monitor Android app.
    • The web interface works well, it becomes less convenient when managing many devices.
  • If you’re running a WireGuard VPN, the camera can be configured to connect directly to it for secure remote access.
  • If you’re comfortable building custom firmware, you can install tools like Tailscale or ZeroTier, which provide a more flexible remote connectivity solution.
  • The camera can also upload clips via FTP, send them by email, upload to Google Photos or push notifications through services such as ntfy.sh

But in this article, we will use the most convenient way, and get notifications/store our recordings at Povel Durevs expense at Telegram. He claims it's super-duper-secure, of course ;)

I found the process of setup kind of unobvious, but worth it.

And of course disclaimer: all, even "private" network cameras should always be treated as public cameras. Coz you never know. So don't point them to something valuable, turn them off when doing something interesting, and use purely for security purposes.

Installation

Installation is pretty straight forward, at least for Wyze cameras:

  1. You download a disk image write it to sd card
  2. Plug the card into the camera & reboot
  3. Wait for a new wifi network appear (called THINGINO or smth)
  4. Connect, go to http://thingino-device.local and complete the setup in the Web interface
    • User is root
  5. Now connect back to your wifi, and figure out the camera ip by pressing the setup button
    • It should tell ya over the speaker
  6. Make sure to update to the latest firmware via Tools->Flash Operations

Image detection and Telegram notification

Note that this is basic number-of-pixels-changed detection, happening on the device, so don't expect fancy AI features like "suspicious person walking around a neighbourhood" or "brown dog detected looking guilty". If you really need it, you need to connect the camera stream to some hosted service (like MotionEye) for such functionality.

So, to get the photo and 10-second clip as a Telegram message if motion is detected:

  1. You create a new Telegram bot in the Telegram App
    • Start a chat with @BotFather
    • Enter /start, /newbot, and find some silly name
    • Copy the token (Bot Token)
  2. Then create a new Telegram channel
    • Login to Telegram Web
    • Create a new channel
    • Copy the id from the page URL (Chat Id)
    • Prepend with -100
    • E.g. if your channel url with /k/#-1234567890 the channel id will be -1001234567890
  3. Add the bot to the channel as Administrator
  4. In Thingino web, go to the Motion menu
    • Make Motion Detection start on boot
    • In Send to Services, configure Telegram using Bot Token and Chat Id
    • Check Send photo and Send video
  5. After saving, when you wave at your camera or click the test button in Send to Services->Telegram you should receive a short clip and photo

Status check (video clip on request)

To request a current photo and 10-second clip as a Telegram message:

  1. This was the trickiest to figure out. Go to MenuSettingsTelegram Bot. If its not available open http://YOUR_CAMERA_IP/config-telegrambot.html
    • Telegram Bot Service should appear
    • Check Launch Telegram bot on boot
    • Paste Bot Token we acquired in the previous section
    • If you don't want some randos to control your camera, maybe put your username into Respond only to these users
    • Click Add command:
    • Command: wazzap and action send2telegram snap
    • Description: if you want something to appear in /help
    • You can add more useful commands here to control camera remotely
  2. After saving changes, if you send /wazzap to Bot, it will send recordings to the channel we created in the previous section
    • Be patient, it takes 10 seconds to record the clip, and the bot polls every 30 seconds
    • In my case, it worked only after a reboot

Some useful commands

You can try over ssh or cofigure in Telegram bot:

  • tell to say something scary over the speaker:
    • tell "Intruder detected. Notifying authorities."
    • tell "Danger, the emergency destruct sequence has now been activated. The ship will self-destruct in t-minus, ten minutes."
  • light control lights:
    • Example light ir on
  • See more at https://gitlab.com/metalx1000/Thingino-Camera-Notes

I also strongly recommend to ssh to your camera, and add healthchecks.io ping to crontab, so if camera goes offline you get the notification as well.

]]>
Fri, 13 Feb 2026 00:00:00 -0000
I think I found a 4G dumbphone that's ok https://developer.run/80 #Rant #Minimalism #Dumbphones https://developer.run/80 TCL onetouch 4041 4G

It's becoming increasingly difficult to find a simple phone for calls, and I blame HMD. Attaching the Nokia brand to garbage phones was probably an excellent marketing strategy, but consumers bought into it, allowing HMD to push decent-quality phone companies out of the market. It turns out that slapping reputable names like Nokia 3310 or Nokia 8110 on dime-a-bucket knock-off phones is enough to trigger nostalgia. HMD don't even try to adapt the design or match the color of the original—not to mention the features. The Nokia brand alone appears to be enough to sell.

The problem is that people who review these phones, in fact never use them. They write a quick review - "this cute nostalgic funny looking thing, pbly good for Digital Detox™ or smth" - then get back to their 8 GHz/1 TB RAM Androids.

Then there's r/dumbphones with threads like "Screentime bad - suggest me a simple dumbphone. No unnecessary features! Just WhatsApp, a-a-and Spotify, a-a-and Uber, a-a-and navigation with real-time traffic data, a-a-and dream analyzer, a-a-and mood light that changes color based on stress levels, a-a-and projector...". This is why overpriced phones like the Light Phone, Mudita and the Punkt exist, leaving even less of a market for reliable, reasonably priced, simple phones.

Because of all that, it's extremely hard to find a phone that just works as a phone. Phones from 2000 are dying breed where I live because 2G is being actively replaced by 4G. You might think there are a lot of modern dumb phones on the market, but most of them, even those produced by Nokia, are 2G. New 4G phones usually come with "updated" software and unremovable pay-per-play games. That wouldn't be as bad; I think I have the willpower to ignore your $4 Racin Attak garbage, but with "evolution," we also get lower-quality software with breaking bugs.

My Nokia 215 4G fails to sync the network time. This results in the call and SMS history being randomized. The fancy thread-like SMS interface is clearly not intended for the screen size. This makes it extremely cumbersome to use. It has no service in places where there is service. It does not work on all advertised network bands. It quietly loses calls and SMS, as I found out the hard way when I missed deliveries. I've gone through multiple recent Nokias, and they all have some kind of fatal flaw. Compared with other cheap knockoffs, though, at least Nokia seems to be malware-free. Yes, noname dumbphones can have preinstalled malware that will quietly drain your account with paid SMS.

Another problem is that 4G feature phones are getting bigger with each model, slowly swelling to a size comparable to smartphones. I really miss how tiny the relatively recent Just 5 Surf was. The reason for their growing size is that it is cheaper to design and produce larger PCBs than smaller ones. This is especially true when the number of devices produced is small compared to the pre-smartphone era.

Marketers hope that by putting a larger screen on devices, you will buy that stupid game or at least launch YouTube Shorts (the manufacturer will get a couple of cents for preinstalling YouTube, Facebook, or other undeletable crapware). Bigger sizes are sometimes falsely justified as being more convenient for seniors, but the screen font size rarely matches what the elderly can comfortably read. Marketers also try to reach "those who cannot afford real smartphones" by introducing bigger screens and features, which is silly because the cheapest smartphones and 4G dumbphones cost around $50.

So after getting fed of Nokia BS, I've ventured on a quest to find a new phone. And I think I found a dumbphone that's ok!

TCL onetouch 4041 (T311D) is a basic 4G phone. It is so basic that it only has two built-in ringtones. However, you can upload .amr or .mid files via Bluetooth or SD card. No browser, no games. Its size and screen are smaller than the smallest 4G Nokia's. The case and buttons have a rugged, anti-slip pattern, and there is even a hole for a lanyard. There's also a flashlight, which is brighter than Nokia's usually are. So, if you need an outdoor adventure phone, here's one.

Nokia 215 4G vs TCL 4041 4G

The phone runs on Mocor OS, which is propiretary and mysterios1. Its interface is reminiscent of the early 2000s, which makes it very convenient to use on its tiny 1.8-inch, 60x128-pixel screen. The screen is easy enough to read, and it's possible to enable a larger font. The SMS and call interface is decent. SMS supports Unicode, but no emojis. I would prefer dark theme instead of light one, but beggars can't be choosers.

Normal font Larger font

Also, the alarm works even when the phone is off! Remember the pre-smartphone era when you didn't need to plug in the charger overnight to avoid the phone discharging and failing to wake you up? If you buy your employees a TCL OneTouch, they won't be able to use the excuse that they weren't awakened by their alarms :)

Theres a silent mode with vibration on (manually enabled). Phone also has a function for daily auto powering off and on at scheduled times. I'm using it to shield scammers at night and it doubles the battery life as a bonus.

The firmware is pretty recent (08-06-2024), and I haven't encountered any bugs or signs of malware.

For some silly reason, there is a 0.08 MP "camera" that takes photos like this ↓. When covered with tape, the tape holds firmly.

It maybe hard to tell, considering quality, but trust me, thats photo of a cat Tape on camera

I can't say much more because that's all there is to it. That's the beauty of it. It makes calls and sends texts. It also has a calculator, call recorder, and call filter in case you need them. The battery lasts weeks. If you're looking for the same features I am, just go and buy it.

Or, if you live in a place where 2G is still available, try putting a modern Li-Ion battery to The Original 3310. Modern batteries plus Lost Technologies Of The Ancients - thats how perfection is achieved ;)

There is also bigger TCL onetouch 4042 and flip TCL onetouch 4043.

Back to TCL 4041 4G:

  • Pros:
    • Its a phone, and nothing else!
    • And it works!
  • Cons:
    • Micro-usb charging. Type-C would be nice.
    • FM radio availability depends on country and operator.
    • It's not possible to have ring and vibration at the same time; only one after other (power constraints?).
    • No emojis in incoming SMS


  1. Not much info about Mocor OS in the internet. 

]]>
Tue, 17 Jun 2025 00:00:00 -0000
Photo of the Day: Garmin Instinct Solar https://developer.run/79 #PhotoOfTheDay #survival #gear #prepper #MilitarishAesthetic #travel https://developer.run/79 This is post of appreciation of my Garmin Instinct Solar watch, which has travelled the world with me and been an indispensable tool in many adventures. It has GPS recording, altimeter, thermometer and sunset time, but thanks to the monochrome display, the battery lasts for month (+recharging from the sun), not like your silly "smart" watch :p

🇫🇷 🇮🇹 🇫🇴 🇫🇮 🫟 🏴‍☠️

I also like to use different straps all the time, so that when I look at watch, it looks fresh and doesn't get too mundane.

Bonus photo with fatbear iPhone case

]]>
Sat, 07 Sep 2024 00:00:00 -0000
Pagefind: a perfect search for a static website/blog https://developer.run/78 #Minimalism #Webmaster https://developer.run/78 I fancied a search function for this blog, mainly so that you, dear readers, would be able to click on tags like #DIY and #Tip and see all the posts I have humbly written for you. Bloated blog engines like Hugo or Jekyll achieve this by generating an extra html page for each tag, but this goes strictly against my understanding of minimalism. By the way, minimalism is the reason why this blog uses no engine at all and is generated by a bunch of regexes.

To my shame, previosly, I used Google for tag functionality, clicking on tag lead to a Google search like www.google.com/search?q=site:developer.run+%22%23DIY%22. And I was looking for a better search solution just for my blog.

I found Pagefind (pun intended) and was impressed with how easy and fast it was to integrate it into my completely custom scripts. The idea is that after generating your static website html, you feed the output to Pagefind so it indexes all the content (like the big search engines do). The generated index files are served along with the static content, and partially downloaded via JavaScript when the visitor uses the search function. Because of this ingenious approach - no Node.js or PHP on backend is needed, and your own independent search will work on static hostings like Cloudflare pages, Github pages, Netlify etc.

  1. I've added a search page with 8 lines of JavaScript and some css, and run npx -y pagefind --site public --serve (where public is the output directory). Setup took a minute, indexing itself took less then a second, and I've already had a decent search!
  2. Then I added data-pagefind-body to the div surrounding the post content, and the search functionality became perfect as it excluded index pages and auxiliary text like header and footer.
  3. Finally, I've made a tiny change so that the query parameter of the search page is parsed, so that urls like /search?q=test work:
new PagefindUI({ element: "#search", autofocus: true, pageSize: 20 })
            .triggerSearch(new URL(window.location.href).searchParams.get('q'));

That was it, the whole process took ~10 minutes and my blog had its very own search.

I wish more people knew about Pagefind. So if you run a blog, please consider it.

]]>
Thu, 01 Aug 2024 00:00:00 -0000
Building a Nixie Clock is easier and cheaper then you might think https://developer.run/77 #DIY #STL #3Dprinting https://developer.run/77

The Nixie Tube Clock is an example of geek luxury. It's rare, it looks cool, and there are only a limited number of tubes left in the world, adding to the elitism. And it gives your lab that evil genius vibe. But with the right knowledge and skills it is easily obtainable.

A set of 6 new tubes will cost you around $60, the closer you live to Eastern Europe - the cheaper. Just search for nixie IN-12B on Ebay. Used tubes are even cheaper, but bear in mind that they have a limited lifespan (5-10 years). And by "new" I mean made in the 1980s, because around that time mass production stopped.

Then you will need a cheap Control Board from Aliexpress and some DB Terminal Connector 1.0mm Sockets. The control board has all the necessary functions for timekeeping, as well as an anti-cathode poisoning routine to prolong the life of the tubes. Time separator LEDs and all necessary wires are included with the board. Board will also work with only 4 tubes connected if you don't care about seconds and want a smaller design.

Additionally you need a 12V power supply, or USB 5V-to-12V converter (in case of USB, make sure that source have at least 3A).

Assembled

You need to solder the board wires to DB sockets or to tubes directly. Start from anode A which is identifiable by arrow or by white isolation:

Ultra professional wiring diagram

To make tube set easily mountable, I've made a 3D printable STL. Then you need to find a nice looking wooden or metal case to mount it in.

Nixie IN12 socket panel

Then you print a decorative panel for the front and paint it with bronze spray paint.

Decorative panel

In the end you get a nice fusion of modern and vintage technology that looks great.

On my shelf

Or you can 3dprint a case

See compatible files on Thingiverse. Front panel

Fully 3d printed

]]>
Mon, 15 Jul 2024 00:00:00 -0000
Keyboard Scroll Wheel mod: Now with STLs! https://developer.run/76 #DIY #MechanicalKeyboards #STL #3Dprinting https://developer.run/76

Scroll Wheel STL

Created 3D printable STLs for mounting keycap sized rotary encoder (EVQWGD001). Because every keyboard needs a scroll wheel. In Alice-like layout you can put encoder in the middle, the regular keyboard - replace Caps Lock. Cable raceway for Alice-like layout attached as well.

Rotary Encoder Mount Cable Raceway

Grab on Thingiverse!

]]>
Thu, 11 Jul 2024 00:00:00 -0000
Built a Macro Pad with Knob and Display https://developer.run/75 #DIY #MechanicalKeyboards #QMK #RP2040 https://developer.run/75

I did not have time to build a full mechanical keyboard (and I'm happy with X-Bows Lite), so I built myself the macro pad. Extra buttons are always useful, especially a knob for volume control.

Buttons are mapped to: Play/Pause, Next Song, Start/Stop Pomodoro, and one for later use.

I've even found a practical application for an OLED display:

  • When I'm playing fullscreen games, display shows GPU/GPU temperature and overheat warnings to not overcook the chips. And the current time so I don't overcook my brain by forgetting to sleep.
  • When media is playing, display shows title of currently playing song or Youtube video.
  • When rotating the knob, the display shows the percent of volume. The trick is that it shows the actual OS volume, so it will be correct even in case the volume is changed by other means (like os interface). This is achieved by sending the current system volume to the device when handling volume keypress in Linux.
  • When idle, the display shows some awesome monochrome logos I've shared previously. Just like the way it looks.

To communicate with the display made a script to send any text, or show logo or progress bar on the macro pads display. On the receiving end is some QMK trickery, of course.

Fancy wire goes to Scroll Wheel

Wire with fancy "aviator connectors" goes to a custom Scroll Wheel I've put in the center of a keyboard. This is an evolution of my QMK Scroll Wheel project by adding some extra functionality to Raspberry Pi Pico.

The second "aviator" will be used for connecting Cirque trackpad. Yes QMK supports it! But that is the story for the next time.

Case is a combitation of 3d printed marcropad and display case. Superglued together, then modified in place by hand-drill and file. Coz sculpting out surplus parts is faster than reprinting.

Overall I'm happy about the gadget's looks, and find it a very convenient addon to my keyboard. As always, I'm sharing the Bill of Materials, but note that getting this done required not only assembly but also investing some time in learning some custom QMK firmware programming.

Wiring

]]>
Sat, 30 Mar 2024 00:00:00 -0000
Photo of the Day: Radiation Detector https://developer.run/74 #PhotoOfTheDay #survival #gear #prepper #MilitarishAesthetic https://developer.run/74

☢️

As this is my personal blog, and Pinterest views are over the moon, I've decided to occasionally share cool photos I am making.

My faithful radiation detector Radiacode 102 is super tiny and convenient, but not as cozy looking as the iconic CDV-700. So I think I made a perfect lock screen wallpaper for the phone!

]]>
Tue, 26 Mar 2024 00:00:00 -0000
My perfect playlist for programming https://developer.run/73 #Spotify #Audio https://developer.run/73 Space Rangers Playlist

Let me share my Spotify playlist, primarily inspired by the soundtrack of the best computer game of all time - Space Rangers 2, and other space exploration games like FTL. Turns out this music is perfect not only for playing these games but also for programming.

My Space Rangers playlist contains 89+ hours of psytrance and similar beats. Thats two full 8x5 work weeks of music (or four days if you listen 24x7), and if you enable shuffle - even more! You may wonder what is the difference from Space Station Soma? Difference is that this playlist, is curated to avoid boring ambient-only tracks (where you got 10 minutes of barely audible hum). Also avoiding "dharmic" tracks that are too trippy. So most of the audio contains alive beats that will keep you awake and productive.

And if this type of music is not up to your taste, my another go-to recommendation for work is Rekt FM online radio.

Space Rangers playlist on Spotify

]]>
Fri, 08 Mar 2024 00:00:00 -0000