[-] otl 21 points 9 months ago

The art of turning a 500-line text file into a 50MB tarball. Welcome to the future :(

[-] otl 22 points 1 year ago

Good to see development effort going towards actual Firefox and not those random Mozilla products that I can't keep track of

[-] otl 22 points 1 year ago

A listicle? What is this, 2008? Get with the times. Give us a TikTok video with recycled ideas.

[-] otl 23 points 1 year ago

One of my most productive days was throwing away 1000 lines of code.

-- Ken Thompson

[-] otl 21 points 1 year ago

Probably not; userChrome.css just modifies the local user interface of Firefox, right? I don't think any of this information is ever transmitted to servers, nor is it available from Javascript. Custom user styles however could probably be used for fingerprinting.

Related interesting article from Mozilla: Privacy and the :visited selector

[-] otl 20 points 1 year ago

I would never use anything like this. But I want it to exist. Wobbly windows got me into Linux back in 2006. Compiz, Beryl… so cool, so stupid… keep us updated!

[-] otl 24 points 1 year ago

You can be polite about it and not confrontational.

Really important. Coming from a place of mutual respect is a really nice - even underrated - way to make progress in the privacy space!

[-] otl 22 points 1 year ago

I never expected that they'd put generative AI in WhatsApp, like, why???

it doesn't really add anything substantial to what the chat app is already good for: chatting with our fellow humans.

A lot of this is for WhatsApp Business. Meta are monetising WhatsApp. The idea is that businesses will use WhatsApp Business and the shitty AI features to (direct from their website): "Engage audiences, accelerate sales and drive better customer support outcomes on the platform with more than 2 billion users around the world."

What a cringe :(

[-] otl 25 points 1 year ago

Cut from 6(!) years to 2 years. I had no idea the support stretched as far back as 6 years. 2 still seems totally reasonable, especially given all the work put into backwards compatibility in the kernel already.

[-] otl 20 points 1 year ago

For me, that feeling of needing to learn new things I think comes not from new tech or tooling, but from needing to solve different problems all the time. I would say there is definitely a fast-moving, hype-driven churn in web development (particularly frontend development!). This really does wear me down. But outside of this, in IT you're almost always interacting with stuff that has been the same for decades.

Off the top of my head...

Networking. From ethernet and wifi, up to TCP/IP, packet switching, and protocols like HTTP.

Operating systems. Vastly dominated by Windows and Linux. UNIX dates back to the 70s, and Windows on the NT kernel is no spring chicken either.

Hardware. There have been amazing developments over the years. But incredibly this has been mostly transparent to IT workers.

Programming. Check The Top Programming Languages 2023. Python, Java, C: decades old.

User interfaces. Desktop GUI principles are unchanged. iOS and Android are almost 15 years old now.

Dealing with public cloud infrastructure, for example, you're still dealing with datacentres and servers. Instead of connecting to stuff over serial console, you're getting the same data to you over VNC over HTTP. When you ask for 50 database servers, you make some HTTP request to some service. You wait, and you get a cluster of MySQL or Postgresql (written in C!) running on UNIX-like OS (written in C!) and we interact with it with SQL (almost 50 years old now?) over TCP/IP.

As I spend more time in the industry I am constantly learning. But this comes more from me wanting to, or needing to, dig deeper.

[-] otl 23 points 1 year ago

I remember installing XFCE on an old Pentium 3 tower some office had stored under the stairs. It was like magic - the system just... worked again?! It was the first time I successfully installed Linux and it felt so fast. With Windows the thing barely worked.

That became my younger sister's first computer. The tower and monitor etc. all just stayed on the ground and we played games on it together. Eventually I found an ethernet card and learned how to plug it in. I ran an ethernet cable from our modem through the house along the floor. Then we could go on Myspace and send email to each other.

Can't believe my parents were ok with tripping over all that stuff, ha!

[-] otl 20 points 1 year ago

Sadly the impression I get, from when I've spoken with Iranians, is that the establishment don't see those things as issues to move past at all.

16
submitted 1 year ago* (last edited 1 year ago) by otl to c/plan9

Lemmy uses the packages olowe.co/lemmy (source), which provides a io/fs filesystem interface to a Lemmy instance, and 9fans.net/go/acme to interact with acme. What you get is an Acme Mail inspired program for Lemmy. As you can see, it's a work in progress!

But it's been fun so far. Sorry that this isn't running on Plan 9 (running on OpenBSD). I'm on the road at the moment and don't have a way to connect to a server right now!

204
submitted 1 year ago by otl to c/support@lemmy.world

I recently wrote a command-line utility lemmyverse to find communities indexed by Lemmy Explorer. A quick count shows almost 14%(!) of all communities indexed by lemmyverse are junk communities created by a single user @LMAO (reported here):

% lemmyverse . | wc -l
  30376
% lemmyverse enoweiooe | wc -l
   4206

Here's a python script, using no external dependencies, which uses Lemmy's HTTP API to delete all communities that @LMAO moderates:

#!/usr/bin/env python

import json
import urllib.parse
import urllib.request

baseurl = "https://lemmy.world"
username = "admin"
password = "password"

def login(user, passwd):
	url = baseurl+"/api/v3/user/login"
	body = urllib.parse.urlencode({
		"username_or_email": user,
		"password": passwd,
	})
	resp = urllib.request.urlopen(url, body.encode())
	j = json.load(resp)
	return j["jwt"]

def get_user(name):
	query = urllib.parse.urlencode({"username": name})
	resp = urllib.request.urlopen(baseurl+"/api/v3/user?"+query)
	return json.load(resp)

def delete_community(token, id):
	url = baseurl+"/api/v3/community/delete"
	params = {
		"auth": token,
		"community_id": id,
	}
	body = urllib.parse.urlencode(params)
	urllib.request.urlopen(url, body.encode())

token = login(username, password)
user = get_user("LMAO")
for community in user["moderates"]:
	id = community["community"]["id"]
	try:
		delete_community(token, id)
	except Exception as err:
		print("delete community id %d: %s" % (id, err))

Change username and password on lines 8 and 9 to suit.

Hope that helps! :) Thanks for the work you all put in to running this popular instance.

107
submitted 1 year ago by otl to c/linux@lemmy.ml

lemmyverse: search lemmy communities from the command-line. Thanks to the data HTTP API from lemmyverse.net! This is not really as polished as I like but, hey, in the interest of having a lively Lemmy I thought I'd share anyway :)

Usage

lemmyverse searches community names and descriptions using a regular expression:

lemmyverse pattern

Find communities about motorcycles:

$ lemmyverse motorcycle
120024@lemmy.world      All Things motorcycles
20hirnzelle@feddit.ch   All Things motorcycles
7810322@lemmy.world     All Things motorcycles
bmwmotorrad@lemmy.world Community for BMW motorcycles. A place to share
bootstrappable@slrpnk.net       A community to discuss all things BMW cars & motorcycles.\nFeel free to show off your new vehicle/parts
buell@lemmy.world       A discussion area for Buell motorcycles.
motorcycle_logistics@lemmy.world        A community for pictures and videos of people using motorcycles to transport things in a creative manner.\n\nThis includes
motorcycles@feddit.de   This community is for all things motorcycle related. At a later point and with enough traction gained
...

Find communities for the Plan 9 operating system:

$ lemmyverse '(plan9)|(Plan 9)'
plan9@lemmy.sdf.org     Discussions on the Plan9 operating system.

Why?

I run relatively slow hardware and I'm travelling in Bali, Indonesia at the moment. Loading lemmyverse.net in a web browser takes ages and gets the laptop fans spinning (it's hot here!). So I had some fun creating a tiny command-line program to find Lemmy communities using classic UNIX tools awk(1), tr(1), grep(1) etc.

More info

See the man page:

LEMMYVERSE(1)               General Commands Manual              LEMMYVERSE(1)

NAME
     lemmyverse - find lemmy communities

SYNOPSIS
     lemmyverse pattern

DESCRIPTION
     lemmyverse finds Lemmy communities indexed by lemmyverse.net using the
     given regular expression as interpreted by grep(1).  Both the names and
     descriptions of the communities are searched.

     On first run, a local community database must be generated.  The full
     community index is downloaded from https://lemmyverse.net using curl(1),
     transformed, then stored in the user cache directory.  To regenerate the
     database, remove the file and run lemmyverse again.

FILES
     communities
             Community database from lemmyverse.net.

ENVIRONMENT
     lemmyverse uses the following environment variables:

     XDG_CACHE_DIR
             The directory to store the community database.  If unset,
             $HOME/.cache/lemmyverse is used.

EXAMPLES
     Find communities for the Plan 9 operating system:
           lemmyverse '(plan9)|(Plan 9)'

     List all communities from the instance lemmy.sdf.org:
           lemmyverse '@lemmy.sdf.org'

EXIT STATUS
     The lemmyverse utility exits 0 on success, and >0 if an error occurs.

SEE ALSO
     grep(1), curl(1), https://lemmyverse.net
10
submitted 1 year ago by otl to c/golang@programming.dev

Go tech lead Russ Cox:

This post is about why we need a coroutine package for Go, and what it would look like.

With a post like this it usually means there will almost certainly be a new standard library package. But even more interestingly:

If we are to add coroutines to Go, we should aim to do it without language changes. That means the definition of coroutines should be possible to implement and understand in terms of ordinary Go code. Later, I will argue for an optimized implementation provided directly by the runtime, but that implementation should be indistinguishable from the pure Go definition.

8
submitted 1 year ago by otl to c/programming@programming.dev

Go project tech lead Russ Cox talks about a technique to make programs clearer using concurrency.

62
submitted 1 year ago by otl to c/programming@programming.dev

An OpenBSD developer and the one-man-band behind Pushover gives some advice after 10 years of running a public HTTP API. It's interesting as big companies are happy to publish articles about all the fancy stuff they developed to run some API, but you don't always hear from a sole developer running a service for such a long time.

16
(mac)OStalgia (www.youtube.com)
submitted 1 year ago by otl to c/retronet

There's something about the consistency that is missing nowadays.

view more: ‹ prev next ›

otl

joined 1 year ago