Morons
Rant: Google Photos
by BenV on Dec.08, 2024, under Morons, Software
Paying for storage
<google> Would you like to pay us monthly for storage?
<BenV> Uhhh, not really. That said, Google Photos is MIGHTY convenient. I’ll think about it.
You’ve got to admit that having an app on your phone that automatically uploads and lets you easily edit photos, make albums, share them, search through them is awesome. It’s part of what caused the silent decline of bringing a proper DLSR camera for me.
Of course Google getting you hooked by offering all this convenience for free up to a certain amount is one thing. Then after a number of years of use you’ll probably hit that 15GB (or whatever it is today) limit, triggering them to nudge you towards “For only $ per month you’ll get Y GB of storage!” (and continued service). Not a bad deal in my opinion, but I hate paying monthly subscriptions.
Initially I went along with it, but even before the first payment went through I was scouring for alternatives. Surely there should be an alternative?
Immich to the rescue
It didn’t take long to find Immich, which is basically the exact same thing, but hosted yourself. Advantages include “private” (no matter what Google tells me, I’ll never accept uploading anything means they won’t read it), having proper control, and it being free, apart from having to run your own server. If you don’t do that already, well, it’s probably going to end up more expensive. But I have servers, and the storage for photo’s isn’t that huge (at Google Photos it was 15GB, a single movie can be bigger these days).
Running Immich is fairly trivial as well, depending on what you have in place. In my case:
- Create /docker/immich/docker-compose.yaml, losely based on their docker-compose.yaml
- Expose this to traefik:
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# stuff here
labels:
# Have Watchtower auto-update this, it's a choice ;)
- "com.centurylinklabs.watchtower.enable=true"
# Traefik routing
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.immich.rule=Host(`immich.junerules.com`)"
- "traefik.http.routers.immich.entrypoints=websecure"
- "traefik.http.routers.immich.tls=true"
- "traefik.http.routers.immich.tls.certresolver=junerules"
- "traefik.http.routers.immich.tls.domains[0].main=junerules.com"
- "traefik.http.routers.immich.tls.domains[0].sans=*.junerules.com"
# other stuff
networks:
traefik:
external: true
name: traefik docker-compose up -d
, we have a working https://immich.junerules.com (well, use your own domain :p)- Add
authentik
in front, see https://docs.goauthentik.io/docs/install-config/install/docker-compose and https://docs.goauthentik.io/integrations/services/immich/
Great, so we’ve got a Google Photos replacement that’s (relatively) free. Comes with a phone app that’s almost the same too, excellent.
The Google Photos PROBLEM
Initially, things were smooth. Google has this awesome service to takeout your photos, simply go to https://takeout.google.com – state you want ALL your photos, 50GB zipfiles thanks, and a little later you’re downloading all your pictures including album info and metadata in a few big chunks.
Grab yourself a tool such as Immich-Go to import these (it’s straightforward – create api key, point to your zips, make sure it’s sane, run), and within a few hours you should have all your stuff imported into Immich. Yay!
Next: Removing your old photos from Google Photos. So this part certainly made me hate Google and their filthy $#%(^(*@#($*. *cough*
You’d think this would be the easy part. Just delete everything. “DELETE FROM table photos WHERE user_id = 'benv'", or rm -rf /photos/benv
or one of many trivial options on the Google side of things. But noooo. Since this is that one thing that Google makes money off, they don’t want you to delete anything. So instead of giving a “remove my shit” button, even obscured somewhere, this is simply not possible. NOT POSSIBLE. You’d hope GDPR or one of the privacy “erase my data” laws would hit google with a 2-by-4, but nope. You see, there is a way: go to google photos, select your pictures one by one, hit trash button, hit confirm. WHAT.
In order to find a workaround, I figured I’d give ChatGPT a shot.
It comes up with some useless and non-existing options as usual (seriously, option 1 is exactly what I told it I did not want, and 2 isn’t even getting rid of photos), but the API variant sounds like a workable one. But it needs a key, so you go to the cloud console and enable it – https://console.cloud.google.com/marketplace/product/google/photoslibrary.googleapis.com
Then we need to create some credentials for the script. Then you realize another ChatGPT problem, it tries to use service account credentials, this won’t work according to the API docs:
So you think let’s go for an OAuth client instead, but that’s not really an option either anymore:
So given the above, it sounds a lot like the API will only allow you to mess around with photos you uploaded through that same API, but not manage the rest of google photos. Just great.
Or in their words:
SO WHERE IS THE FSCKING DELETE EVERYTHING BUTTON?!
I tried a Golang approach with ChatGPT as well, but given that there seems to be no workable API around (for long), I gave up on that as well. Too bad, wanted to make a go-photobomb
app :p
The tedious workaround
So obviously while the trainwreck above hasn’t helped I still needed to get rid of the photos without clicking several tens of thousands times. I opted for the Tampermonkey approach:
Install tampermonkey, grab https://gist.github.com/sanghviharshit/59aa5615a9ec2dc548c23870e21ce069, adjust it until it works.
In my case I needed a small change: line 31 originally had if (d.ariaLabel == "Delete") {
, which I needed to convert to if (d.ariaLabel == "Move to trash") {
in order to match what the button actually said. Locale related probably. It might work for you, you might need to change languages. Another tweak I made was increasing the timeout values to delay the mainloop to every 60 seconds in order to have the delete complete before it tried reselecting/reloading.
After that, set your zoom-size to as small as possible, disable image loading through in the case of Chrome “Settings” -> “Privacy and Security” -> “Site settings” -> “Images” and add “photos.google.com” to the “Not allowed to show images”. It’ll speed things up.
Then you go to photos.google.com and wait while your tampermonkey script nukes the whole thing.
Tedious? Absolutely! This thing was stresstesting both Google photos as well as my network while digging through the deletes.
But we do have results:
Recommendation to Google
Please give people an option to simply delete everything. It saves you blogposts like this, as well as a ton of data traffic from your servers to me. Not to mention the horror stories my family are going to hear telling them to use my Immich server instead of your lock-in-a-tron.
What happened to “Don’t be evil” anyway?
Opera has cancer
by BenV on May.08, 2013, under Morons, Software
If Opera continues living the way it does right now it’ll die within a few years. At least, that’s what I expect. Every new release there are more and more little nuisances. New features? Yeah, they have plenty of new garbage slowing the browser down.
Soon they’ll dump their rendering engine for Webkit. Who knows, it might even improve the browser, but then again… soon I might jump to Chrome or another piece of garbage.
I wonder why browser vendors have determined they all have to inject cancer into them. Must be contageous or something.
Anyhow, my Opera issue for today: Webfonts.
Ever seen a page rendered like this?
Magento issues
by BenV on Jan.29, 2013, under Morons, Software
The challenge of today: Installing the latest Magento version on some virtual host owned by a generic webhoster on the other side of the planet for some friends. Shouldn’t be too hard, right? Well, it isn’t really, but I ran into two annoying things that took me longer to work around than I would like.
So if you found this article through google, maybe this saves you the time :-p
First annoyance: Where do we get the source for the latest Magento release?
“Stupid BenV. Obviously you get that from the Magento homepage from their downloads section”.
Yeah, that’s what you’d think. So you go there, hit ‘download’ (or go to /download in your url bar, surprisingly it works) and now you have to “Select your format“. So much for getting a wget-able url here, but we’ll copy paste that from our browser, right?
Well, after selecting your format (“Your disk.” Ha. Ha.) and clicking on the Download buttong, you are faced with?
Oh of course.
The URL shown when hovering the download button already gave it away – “http://www.magentocommerce.com/download/login_form“. A fucking login form. FOR A FREE OPEN SOURCE PRODUCT. *RAGE*.
“Login, it’s Easy!“, they say.
“Join the community now and take advantage of the following: *bullshit*“, they say.
Well “FUCK YOU MAGENTO WEBSITE“, I say.
(if you do take the time to fill out their login form, make sure to enter something@mangetocommerce.com as your email address and enable all the checkboxes)
Until they change it again you can use this wget command to work around this bullshit:
benv@vhost:~$ wget --referer http://www.magentocommerce.com/download/get-started http://www.magentocommerce.com/getmagento/1.7.0.2/magento-1.7.0.2.tar.bz2
Next up, the issue I ran into. After creating a database, untarring the tarball and pointing the webserver to the right place it was time for the web based installer. Just click next a few times, enter the database info, next …. what’s that?
PHP Extension “pdo_mysql” must be loaded..
Errh… ok. So I check what this webhoster’s PHP configuration flags are … phew, they included PDO. As a shared module. Oh well, guess we’ll need to enable this in php.ini then. Long story short: it’s not enough to just include pdo_mysql.so.
If you include only pdo_mysql.so, PHP will not complain, at least not in any log file I could find on that webhost, but PDO is still not loaded.
Solution:
Make sure php.ini contains:
extension=pdo.so
extension=pdo_mysql.so
extension=mcrypt.so
(that mcryp one should not be necessary there, but they say without it you could run into other issues, like mcrypt not being loaded either).
PHP. What’s worse than having to work with PHP? Working with PHP that you didn’t compile yourself :-p
Google helping NVIDIA
by BenV on Oct.28, 2012, under Morons
Yesterday I wrote a post on NVIDIA and how they (mis)handle RGB channels over HDMI on windows by default (and also how to fix it of course). Here’s the post on NVIDIA’s HDMI handling.
Today I figured Let’s check out if I can find my post if I Google for BenV NVIDIA.
Check out the results…. yes, I wrote about NVIDIA earlier, January 29th. However, normally the day after (often even faster, say an hour after) writing writing a post I can find it with Google using the keywords BenV and another word in the title. For example BenV Steam is on the 4th place, posted on the same day. But the post on NVIDIA from that same day IS NOWHERE TO BE FOUND.
I wonder how much Google are being paid to not show the links that connect NVIDIA to negative things.
Funny how Google can spend resources to conveniently downrank my post (and obviously also other negative ones), but if Mr Smith sues Google because whenever someone types “Smith” Google suggests “pedophile” as second keyword then Google claims it’s all out of their control and that’s just the algorithm.
I hope you get sued again Google, you deserve it.
NVidia’s incompetence on HDMI
by BenV on Oct.27, 2012, under Morons, Software
Before today I was still working behind an old 20″ 2006 Acer (al2016W) as primary screen and an even older 17″ secondary screen.
They started to bug me a bit, and after looking around a bit for new screens I ordered 4 new instances of the BenQ GW2450HM.
After reading a very positive review at TFTCentral on the BenQ GW2450HM and
also a forum that was a lot more negative (people who died because of ghosting issues etc) I decided to buy them anyway because they couldn’t possibly
be worse than my current screen.
Today they arrived, so after unpacking them and figuring out how the heck I was going to make space for them on my desk I finally connected them to my PC.
I had windows up and running, which immediately noticed the BenQ that was connected through HDMI. The BenQ happily told me “No Cable Connected” however, but that
was solved by hitting the enter button twice to make it use the HDMI as source instead of the ancient DSUB. They should really stop supplying those connectors.
After unpacking and installing the second screen and connecting it to DVI I noticed a difference.
Both had the same background, but the DVI screen had deeper blacks than the HDMI one!
Nope, it’s not caused by the brightness or any of those knobs, they were identical (factory default) on both screens.
The reason for this is simply: NVIDIA sucks. Hm, that’s a nice trademark that they should register 😉
Yeah, those incompetent assholes again. NVIDIA (sucks) doesn’t care if your left screen looks a bit brighter than your right screen. They only care about getting your money, which is strange because actions like these make it less likely that they’ll receive my money in the future.
Some background on the issue:
When you connect a HDMI device to a NVIDIA (sucks) graphics card, the NVIDIA (sucks) assumes that the device is crippled and can only handle RGB values between 16-235.
Obviously PC monitors can handle the full range of 0-255, which is the default on VGA and DVI. (this is the reason my DVI screen was darker).
This mismatch in communication will fuck up the black colors for starters, but for a real impression check out this forum: http://www.neogaf.com/forum/showthread.php?t=471695
Mind you that the control panel settings that they discuss in that thread didn’t work for me.
Fortunately there’s a solution that does work for me.
This guy over here at metaclassofnil.com wrote a tiny tool to fix your registry and tell the driver to use the full range.
After a reboot everything looks great on BOTH screens 🙂
Cisco webmaster skills
by BenV on Feb.15, 2012, under Fun, Morons
Here’s a funny for today:
For some reason I needed an original firmware for a Pislink E2000, so I went to http://www.linksys.com/ as a first guess.
After (automagically) being redirected about 2398472389347 times (first to http://www.linksysbycisco.com/ as if there’s a linksysbymicrosoft as well, then to http://www.linksysbycisco.com/NL/nl/home with a bunch of geolocation cookies, THEN because they’re really retarded a redirect to http://home.cisco.com/nl-eu/home?referrer=www.linksysbycisco.com … seriously) I finally got a xhtml document. Well, they claim it’s xhtml, because the W3C Validator sure as hell doesn’t think so. (continue reading…)
Piratebay blocked by XS4All and Ziggo
by BenV on Feb.01, 2012, under Morons
So those assholes from BREIN finally managed to get a somewhat real block through the legal system in the Netherlands.
My home ISP XS4All simply has to block them because of a court order, and not just the DNS entries as usual, but actual IP addresses this time. A traceroute to thepiratebay.org simply dies at the second hop.
Obviously this is about as effective as putting up a roadblock on only half the road, you can simply drive your browser to a ton of alternatives to still get the piratebay content. (continue reading…)
Sony
by BenV on Jul.22, 2011, under Fun, Morons
This just made my day.
First I read on slashdot that their insurer sues them, and personally I hope they win because of Sony’s incompetence regarding their ‘security’. Not that I like insurance companies much, so they can burn as well… which makes this almost perfect. In a lawsuit only the lawyers win, so once those lawyers die in a fire this will be perfect. (continue reading…)
PostgreSQL 9.0 on Slackware
by BenV on Jun.14, 2011, under Morons, Software
Another reason to avoid MySQL
Today MySQL has managed to piss me off enough to get rid of it for something I was working on.
The case:
I just created a brand new database. In that database I want to store items, and those items should be linked to users.
So as a first stab I had this CREATE TABLE statement:
CREATE TABLE user (user_id SERIAL, username varchar(255) UNIQUE NOT NULL, password char(32) NOT NULL, PRIMARY KEY (user_id));
CREATE TABLE item (item_id SERIAL, name varchar(255) NOT NULL UNIQUE, user_id bigint unsigned REFERENCES user(user_id),PRIMARY KEY (item_id)) ENGINE = InnoDB;
Guess what MySQL said? Of course, it said “Sure thing dude!”. And to make sure you believe me, here’s the verbatim:
mysql> CREATE TABLE user (user_id SERIAL, username varchar(255) UNIQUE NOT NULL, password char(32) NOT NULL, PRIMARY KEY (user_id));
Query OK, 0 rows affected (0.36 sec)
mysql> show warnings;
Empty set (0.00 sec)
mysql> CREATE TABLE item (item_id SERIAL, name varchar(255) NOT NULL UNIQUE, user_id bigint unsigned REFERENCES user(user_id),PRIMARY KEY (item_id)) ENGINE = InnoDB;
Query OK, 0 rows affected (0.32 sec)
mysql> show warnings;
Empty set (0.00 sec)
Well guess what….
IT LIED!
Those references to the user table? What references? (continue reading…)
Sony and their PSN
by BenV on Jun.08, 2011, under Fun, Morons
I don’t like Sony much … in fact, I pretty much hate them and have to laugh every time I read a new post about them being hacked in whatever form.
No, you can’t feel sorry for corporations. Let alone corporations that fuck you over every chance they get.
That said, I do have a PS3 (running Dosbox and ScummVM among things), and I once had this PS3 connected to the PlayStation Network.
So they just sent me an email:
It says (in UTF-8 viewed through iso-8859-1):
Dear Playstation Network-user,
We are very happy that we can tell you that the access to the PlayStation-Store through PlayStation-3, PSP (PlayStation Portable) and Media Go on your PC has been completely restored.
And then they go on about what you receive as compensation (free game, free month of PlayStation Plus), but because they allegedly improved the security you have to change your password.
Then there’s a gibberish link to eu.playstationmail.com that I followed, hoping to be able to change my password.
This is what my browser showed:
Funny bastards 😉