Pixel 3XL vs Oneplus Nord n10 5G

misc

Almost exactly two years ago I bought my last phone, a Pixel 3XL. The phone I had before that was a Samsung Galaxy S8. It was two years old and was in good condition, but I didn’t like it that much. All the extra Samsung garbage was not to my taste. I like stock Android or as close as I can get.

After two full years, I was totally happy with the Pixel. I had no plans on upgrading or changing until I had to. And then… I had to. The first sign was the the volume buttons weren’t working. I have one of those rubber bumper cases. When I took it off, the volume worked fine. But not with the case on. The case seemed fine, and then I took a closer look at the phone beside the volume keys.

Here you can see the back cover has separated from the phone. The whole back plate was swelling out. That’s why the volume wasn’t working. The buttons on the case were no longer aligned with the buttons on the phone.

I had noticed that it was seeming to get pretty hot when I wirelessly charged it but hadn’t thought too much about it. Obviously the battery was on its last legs and getting ready for some kind of catastrophe. I kept an eye on the phone the rest of the day and started looking for a new device.

I was really pretty bummed out about this because I didn’t actually WANT a new phone. And I had to get one quick and didn’t have a chance to do a bunch of research. I was curious about the Oneplus line. Their flagships go for $600 – 900 or even higher. I didn’t want to spend that much when I wasn’t really sure what I wanted. Maybe I wanted a Pixel 6 when it came out. What to do? What to do???

I finally wandered across the Oneplus Nord n10 G5. It was under $300 but decently specced for that price. I watched a few Youtube reviews and while nobody was raving about how great it was, the consensus was that it was a pretty good phone for its price. I crossed my fingers and ordered it with next day delivery.

In the meantime I wondered if I could possibly replace the Pixel’s battery. Quick search revealed a few Youtube videos that made the process seem not too formidable, and a number of under $20 replacement kits. Worth a shot, right?

The repair kit came the same time as the new phone. I set up the Oneplus, got my sim card in it and all my apps. It looked and felt pretty nice. No regrets. Then onto the battery repair.

The toughest part was getting the back off. You need a heat gun (which I have, luckily) and a lot of time and patience. You apply heat to the back of the phone judiciously so as to not damage it. This softens up the glue, then you pry the crap out of back of the phone. The kit had tools and a suction cup. It took a good half hour of heating and prying, heating and prying – and I had a head start since the battery had already started the job – but eventually I got the back off.

Then you have to pry the battery out. It’s also glued in. That was a bit easier, but not… easy.

Finally, the recharging coil is just like a piece of thick paper with the coil inside, glued to the battery. You have to carefully pry that off. If you’ve ever tried to peel a glued-on paper label off of something, you can imagine how that went. I got all of the coil and about half of the paper backing, but I was pretty sure I had wrecked it.

The battery with a chunk of the charging coil backing still holding on. You can also see the battery casing puffed up like a balloon.

Then you put it all back together. The kit also came with glue strips to put the battery back in with. Stuck the coil back on the new battery, plugged everything in. Cleaned up all the old glue. Crossed my fingers and turned it on. It worked fine. Put it on the charger. It charged right up. Didn’t even get hot. And it held its charge really well.

The last thing I needed was some glue to put the back on again. I ordered that and finished up the next day. But since then it was working fine, holding a charge and charging just fine. Now I had some options:

  1. Keep using the Oneplus and keep the Pixel as a backup.
  2. Go back to the Pixel and return the Oneplus.
  3. Go back to the Pixel and keep the Oneplus as a backup.

I had a good 2-3 days in on the Oneplus, which gave me a good idea of how much I liked it. In general, I did like it. I concur with all the reviews – it’s a great value for it’s price. But there is no doubt that the Pixel is way better. Some details:

  • Performance. Pixel wins hands down. Opening apps takes probably 1.5-2x longer on the Oneplus. Random scrolling around is obviously way smoother on the Pixel. But this was really only noticeable on a side-by-side comparison. I could have lived with the Oneplus’s performance easily.
  • The Oneplus screen pales in comparison to the Pixel… LITERALLY! (sorry) Not surprising. The Oneplus is an LCD whereas the Pixel has OLED. Again though, wouldn’t be a deal breaker for me.
  • Bluetooth performance was not good. I use Galaxy Buds Plus and love them. They have been virtually 100% flawless on the Pixel. On the Oneplus, I had various issues:
    • Garbled sound. I’ve had that on cheaper BT earbuds, but never on the Galaxy Buds. I was getting it regularly every time I used them on the Oneplus.
    • Unresponsive controls. The tap to start / stop failed multiple times. Never recall it failing while on the Pixel.
    • Connection. I think it failed to auto-connect once in the couple of days I used it. I don’t recall it ever having a problem on the Pixel.
  • Touch responsiveness. Very noticeable on one of the puzzle games I was playing. Tapping on on-screen items would fail close to 50%, requiring multiple taps. Never experienced it on the Pixel and when I retried the same game on the Pixel again, it was night and day.

To be fair, those are the only negative performance points I could come up with on the Oneplus. I would add that Oneplus have started creating their own UI stuff. A customized settings app, a custom launcher, a bunch of preinstalled Oneplus apps. I was under the impression that Oneplus was close to stock, so this was a bit disappointing. Not as bad as Samsung, but not a plus.

But overall, not bad. The Bluetooth and touch screen stuff were the only points that really pushed me over the edge to going back to the Pixel.

I am really happy to be back to the Pixel though and have a renewed appreciation for what a good phone it is. As I said, I didn’t want to switch phones to begin with and I’m happy that I don’t have to.

I’ve decided to keep the Oneplus though as a backup. I don’t know how long my Pixel surgery is going to hold up. So far it’s flawless, but who knows what the next few weeks or months hold. If the Pixel does crap out on me, I’ll have something to switch over to instantly. Maybe I can last long enough to see how the Pixel 6 does and maybe even long enough to see it come down a bit in price from its initial release.

Chladni Figures

experiments, tutorial

If you’ve been following along #awegif2021 on twitter, you’ve seem me post a few animated gifs that look like the image above (days 1-6 specifically). These are known as Chladni figures, named after Ernst Chladni. He described the formulas that create the patterns that result when you use soundwaves to activate sand or powder on a flat surface. You can find a ton of videos on Youtube that feature real world examples of this. But it’s also fun to do in code.

Creative Code Management

tutorial

One of the things that’s plagued me since I’ve been doing creative coding is managing the code I use to create images and animations (or whatever else). Of course, standard source control management comes into it in a big way. I’ve been using git for ages. I remember having arguments with coworkers who refused to see how git was better than SVN (at least they had moved off of CVS). So yeah, you put your code in a repo and you check in your changes, etc.

But most source control workflows are really made for building applications. You decide on a feature, you make a branch, you do the work over a few hours or days or whatever, and you merge your code in. Or the same for a bug.

In creative coding though, the update/render cycle is a few orders of magnitude faster than that.

  • Change a variable, render.
  • Change it a bit more, render.
  • Change another variable, render.
  • Put the first one back to where it was, render.
  • Ah! I like that one. Publish the image to twitter, or a website or wherever.
  • Change some other variables around, render a bunch of times.
  • Find another one you like, publish that image.
  • Repeat several times.
  • Done for the day, check in the code to git.

The problem is, tomorrow or next week or six months from now, you want to recreate that first image you published. What were the exact variable values you used to create it? Who knows? Even if you didn’t change the code, it might be nearly impossible to rediscover the exact parameters to recreate a specific image.

Git branches are too cumbersome for this fast workflow. You can make a new branch when you find some parameters you like, but as soon as you change some other values, that branch no longer represents that first image. There are ways to work around this, but again, it gets cumbersome. But I finally figured out a good solution, along with a custom shortcut that I’m really happy with: Tags.

A git tag is a permanent, unchanging reference to a specific point in time of your code base. Tag your code at a certain point and you can always get back to that exact point. It’s never going to change unless you delete the tag and create a new tag with the same name.

So, when you come up with an image that you want to save and publish, you do the following:

  1. git add . to add all the changed files.
  2. git commit -m <some message> to commit those changes.
  3. git tag <some name> to create the tag to that exact commit.
  4. git push to push it to the main repo (if you have one).
  5. git push --tags to push the tags to the main repo.

All good, but that’s still five steps. Still a bit cumbersome. So I made a bash script that does all this in one shot:

#!/bin/bash

git add .
git commit -m $1
git tag $1
git push
git push --tags

I named this file tagit, made it executable (chmod +x tagit) and put it in my path. If you’re not totally up on shell syntax, $1 stands for the first argument given when the script is called. So now, when I want to save the state of my work, I jump to a shell and type tagit coolpicture or whatever tag name I want to give it.

This adds the files, commits them using coolpicture as a commit message, tags the commit with the same label and pushes to the main repo, and then pushes the tags to the main repo.

Now, six months from now when you want to see the settings you used for that cool picture, you just say git checkout coolpicture and there you are. Obviously, you want to name your tags something a bit more memorable. Some kind of timestamp or sequence is a good idea. I usually name the image or animation file the same as the tag name, so 210801a.png is the image that was created in the tag 210801a. You could even automate this if you wanted, to generate that image/tag name and rename the image when it creates the tag.

One other point that I know someone will ask.

Can’t you just say:

git push --tags

and ignore the

git push

?

You can if you want. It will push the current code that is in this tag to the main repo. But it will not push the current code in the current branch to that remote branch. So your remote master branch (or whatever branch you are on) will not line up with your local branch. But your tag will still be saved as expected. It’s up to you which behavior you want. Maybe you only want to push the tag, not commit to the branch at that point. Or maybe you want to save to the branch and the tag every time.

Also, you could change:

git push --tags

to:

git push origin $1

This will only push the specific tag you just created. There might be slight advantage to this in terms of speed. I suspect not. But, if you have other local tags hanging around that maybe you don’t want to push, you should go this route.

Anyway, use this script as is, or change it to fit your needs. Hopefully it saves you some time and frustration one day.

Inoreader

misc

Back in the day, I was a big fan of Google Reader. There were lots of blogs and feeds I followed and Google Reader kind of set the standard of what an RSS reader was supposed to work, and what it was supposed to look like

I’m one of those people who will never fully trust Google again – but only because they shut down Reader.

When they did that, I looked at what was available and wound up on Feedly. The other main option was The Old Reader. And for whatever reason, I liked Feedly better.

And I’ve used Feedly pretty much every since. I’ve gotten used to it, but there was a lot I never really liked about it.

One thing that really bugged me about Feedly was it’s in-your-face upgrade call to actions. There’s a bright orange upgrade button front and center. There’s stuff all over the place about using “Leo” which is apparently the AI assistant that helps you … manage your feeds? Discover new content? At any rate, you have to upgrade in order to use it, and every time I’ve looked at it, it held no interest for me.

Also, in spite of years of using it, I can’t say I really ever understood the UI. There’s a “Today” section and an “All” section, as well as layouts and sorting and sharing and read later and boards. And sometimes things open up in this kind of tab container, but there’s only one tab ever… I really only ever wanted to just show my unread and sometimes my read feeds and just ignored all the other stuff. And a lot of the advanced features which are stuck out begging you to click them wind up telling you you need to upgrade anyway. I often did think about upgrading and paying something for the app, but there was nothing in the paid features that I really needed or wanted.

Tiny Tiny RSS

So a couple of months ago, I started looking at alternatives. I wound up self-hosting tt-rss. It’s fully open source and free. There’s a mobile app (like Feedly) and there are no calls to upgrade, which I liked.

The UI however, was not a whole lot better than Feedly in a lot of ways. There are various layouts and sorting and sharing options. But there’s also the concept of “Fresh” articles and “Adaptive” filtering, which I never really figured out. It reminds me of Twitter’s timeline algorithm where they try to figure out what you want to read. That annoys the hell out of me and The fresh and adaptive stuff was starting to do the same.

I was reworking my server last week and rather than setting up tt-rss again, I decided to have another look at what’s out there.

Inoreader

I tried going back to Feedly for about 10 minutes, but quickly remembered all the ways it annoyed me. I checked out a few others. The Old Reader is still out there. I still didn’t like it. Then I ran across Inoreader, which I had never used before.

I imported my OPML and started using it and was totally hooked. I really love this app. The UI is exactly as simple as it should be, but there is enough under the hood to make it look and work just like you want it to.

The free tier really had all I wanted, but I loved it so much that I upgraded to the supporter plan for a dollar-something a month. This gives you more available feeds (I wasn’t even close to the limit on the free tier), custom CSS capabilities, and the ability to add a newsletter subscription. For $5-something a month, there are a bunch of other filtering, searching, collaboration, etc. features that I don’t really need. The mobile app is also really good and just as usable.

I know it’s just an RSS reader, but I just feel like they nailed the UX so well, that it really is a joy to use each time I open it up. Nothing there confuses me. It’s exactly what I want it to be and works exactly like I expect it to. Any up-sell is subtle and I haven’t run across any sneaky elements that are just features you don’t have, hoping you’ll click on them so they can try to get you to upgrade.

AweGif 2021

misc

For the month of August 2021, I’m going to try to post an original animated gif on twitter every day of the month. I’ll be tagging them #awegif2021. I invite anyone to join along.

I’ve done this twice before. And the cool thing is that all the entries are easily searchable in twitter.

In May of 2018 we did #MayContainGifs https://twitter.com/hashtag/MayContainGifs

And in July of 2018 we did #GulyIsForJifs https://twitter.com/hashtag/GulyIsForJifs

Here are the rules:

  1. Post an animated gif to twitter (or wherever else, really) and tag it with #awegif2021
  2. Do it every day, or whenever you want. If you only do one all month, that’s fine.
  3. Use whatever you want to make the gifs. Custom code, some software package, we don’t care, as long as it’s something you actually created yourself.
  4. If you want to create a bunch over the weekend and post them throughout the week, that’s fine. Post something you created last year, we don’t care.

Follow along with the entries here: https://twitter.com/hashtag/awegif2021

That’s all. Looking forward to what people create!

Technology Update

misc

This is just a post about some changes I made to my personal computers. Probably not interesting for most people, but I like to document this stuff so I can go back and say, “when did I switch to ____? And how did that go?” And who knows? A few people might find it vaguely interesting after all.

Back to Mac.

I’m not switching back to Mac by any means, but I did buy a new Mac for personal use.

My summary of Apple computers up to now:

  1. They have OK hardware. Mac fans will say how amazing the hardware is, but when you drill down, they’re usually talking about the machined aluminum body. I’ve seen and experienced more hardware issues on Macs than I have on PCs. Motherboards, keyboards, screens. I will agree that Macs look good and feel good. Historically, they’ve had the best trackpads. The screens are bright and crisp and have nice color, but also develop dead spots and weird color patches that I’ve never seen on any other laptops.
  2. MacOS is OK. It’s frustratingly un-customizable and locked down. I’ve never felt that I really fully owned a Mac that I bought. It felt more like I was being given the special privilege of being able to use this device as long as I used it only in the way that Apple decided I should use it. It’s probably more useful if you own a Mac and an iPhone and an iPad and an Apple Watch and an Apple TV and all the other Apple/i-devices. And buy your music and apps and games and movies and tv and books and subscriptions from Apple. And use Apple services/apps for your email and backups and online file storage and sharing and chat and web browsing and documents. But I do exactly none of that stuff.
  3. I hate Apple as a company. I get infuriated watching their keynotes. They are all so smug and in love with themselves about how amazing this or that new feature is and how it’s going to change your life and transform the world. They constantly claim to invent things that have existed for years. Or rename existing technology to make it sound like something new they created. They are actively developer hostile. They PR themselves like they are saving the world, but don’t ask about their sweatshops. All this is my opinion. You are free to disagree with me, but I’m not going to argue about it. If you don’t see it like I see it, that’s cool.

So if you’ve even read this far, you’re probably baffled at why I actually bought a Mac. I’ll be honest, it pained me to give the company any of my money. But I was doing a lot of work with Minicomps and bljs and I was finding a lot of issues with Safari that I needed to fix, as well as stuff that worked or looked differently in Chrome and Firefox on the Mac. I was using a Mac VM, which was not great, and my work Mac, which I don’t like to use for personal stuff.

I had some money come in for a project I did and decided after long deliberation to pick up a new Macbook Air with the M1 chip. I got the cheapest version. $1049 on Amazon. I’ll be honest, it helped a little bit giving Amazon the money rather than Apple directly.

And I’ll be damned if the stupid thing didn’t start winning me over. As I said, Macs are good looking machines. This thing looks nice. It’s thin, it’s light, it’s quiet, it does not get hot. It is goddamned fast. Faster than it has a right to be. The trackpad is still really nice. Other manufacturers have caught up with Apple over the years on the trackpads, but it’s still probably the best. The screen is bright and colorful and crisp and no splotchiness yet, but we’ll see how it looks in a year or two. I have to say though, the screen is the worst fingerprint magnet I’ve every seen. I don’t recall ever actually touching it, but it constantly looks like I ate a couple of tacos and wiped my hands off on the screen. The keyboard is meh. I don’t really like it, but it’s not the worst I’ve ever used. To be fair, my main computer is a Thinkpad, and I love Thinkpad keyboards.

The sound. This gets its own paragraph. I am shocked how good this thing sounds. As much as Apple’s overuse of the word “magical” has become a meme, the sound on this device really is magical. It’s deep and rich and loud and sounds like it’s coming from a foot or two behind the machine. I have no idea how they accomplished that kind of quality in this thin little laptop. I’ve never had a laptop that sounded a tenth as good as this sounds, including other Macs.

MacOS is… still MacOS. I still don’t like it but I’ve used it for many years at work and I’ve learned to live with it. As I said, I’m not into the Apple ecosystem or have any other Apple devices, so all I really need MacOS for is to launch the apps I use. For me, this mostly means a terminal (Alacritty) and a browser (Firefox and Chrome mostly).

I still hate the dock. I’ve tried a few alternatives – cdock (not supported on M1) and ubar. Both are pretty good, but in the long run they wind up being a bit frustrating to use – inconsistencies and things not working just right. I suspect that this comes down to Apple not sanctioning these kinds of UI customizing apps and not supporting the things that they do, if not outright making it harder for them to do those things. So I’ve gone back to the dock and I’m trying to make peace with it.

Summary: I hate to admit how much I like this machine. In spite of it’s 13-inch screen, it’s great for watching videos, listening to music, browsing the web etc. It’s OK for coding, but great for coding on the train or in the car while waiting for my wife to finish shopping or whatever. Although I used it a LOT in the first few weeks, I’m over the honeymoon period and mainly back to my Thinkpad as my main machine. But fairly often I’ll have both machines open in front of me.

KDE

The other big change in my technical life was switching Linux desktops environments from XFCE to KDE.

If you’re not into Linux desktops, most of this will go over your head. But unlike MacOS which is severely locked down from a UI viewpoint, Linux almost has too much choice. Beyond all the differences between various distros under the hood, your graphical user environment, display manager, window manager, theming, default applications and a bunch of other stuff are all packaged into what is known as a desktop environment, or DE.

Probably the two most popular DEs are Gnome, which is the default DE on Ubuntu and several other distros, and KDE. Others include XFCE, Mate, Budgie (Solus), Pantheon (Elementary OS), and Cinnamon (Linux Mint). Not a comprehensive list at all, but that goes to my point about too much choice.

All these environments have a different look and feel, different levels of customization, and different opinions on how things should work. For a few years now I’ve been very happy with XFCE. It’s one of the older DEs and has a reputation for being ugly and boring and unchanging. The last point I agree with. The “exciting new features in the latest XFCE” is a bit of a meme – you’d be hard put to tell the last several versions apart. But it’s actually very customizable and can look really nice if themed correctly. The Manjaro distro has a very beautiful and functional implementation of XFCE.

But I’ve been feeling the need to switch things up after so long on one environment.

I don’t like Gnome at all these days. I used to, but it’s been going down a really strange path in terms of limiting customization. It relies almost entirely on 3rd party extensions for adding and customizing it, but does not curate or take any responsibility for those extensions.

I’d tried KDE a few times years ago and always found it over the top in terms of drop shadow, glows, sound effects and gratuitous animations. It felt like a UI that was made in Flash. But I gave it a test a year or so ago and found it a lot better. Toned down all the goofy stuff. Now it looks really slick and professional. KDE also has the reputation of being uber-configurable. Almost every single UI element on the screen can be configured. You can go down a serious rat hole, but if you want configurability, KDE is where it’s at. I came away from that test run knowing that if I ever wanted to move off of XFCE, I would most likely move to KDE.

And so I decided to go with Manjaro KDE this time. I’m really, really liking it so far. More than I thought I would. I’ve gone down a few rat holes configuring things to death, but managed to get out alive. In addition to its built-in options, KDE has a rich ecosystem of 3rd party plugins, similar to Gnome’s extensions, but it seems like they take an active role in curating them, so from what I’ve seen, the quality is much higher than what you see in Gnome.

All that flashy over the top stuff is still available, but it’s not the default anymore. I’ll admit that I turned on the cube rotation effect for switching between virtual desktops – something I recall fondly from early OS X days. Other than that, I’m keeping it pretty understated, and to be honest I find myself recreating my earlier XFCE look and feel.

So I think I’m pretty sold on KDE for now. I’ve committed to using it for several months. But already, I don’t see any compelling reason why I’d go back to XFCE. There’s nothing in XFCE that you can’t do as well or better in KDE. The biggest selling point of XFCE is its minimalism.

So that’s that. If you actually read all of that, hoping for more, I apologize.

Noise: 2d vs 3d, Perlin and Simplex

tutorial

In yesterday’s post, I ran across this statement about Simplex noise:

noise generated for different dimensions are visually distinct (e.g. 2D noise has a different look than 2D slices of 3D noise, and it looks increasingly worse for higher dimensions).

https://en.wikipedia.org/wiki/Simplex_noise

As promised, here’s an analysis of what that actually means visually for rendering Simplex noise.

Curl Noise, Demystified

tutorial

In my recent post on mapping Perlin noise to angles, I was put on to the subject of Curl noise, which I thought I understood, but did not. I figured out what Curl noise really was in a subsequent post and then posted my earlier incorrect (but still interesting and perhaps useful) concept of Curl noise in yet another post. Although I kind of understood what Curl noise was at that point, I wanted to give myself a more complete understanding, which I usually do by digging into the code, making sure I understand every line 100% and seeing what else I can do with it, trying to make multiple visualizations with it to test my understanding, etc.