NostraDavid

joined 1 year ago
[–] NostraDavid@programming.dev 5 points 2 days ago (1 children)

I really like those new icons - Yeah, they're kinda flat, but they actually have colour.

They've basically taken peak 2005 icons, and improved on them.

Very nice.

[–] NostraDavid@programming.dev 2 points 2 days ago

especially when doing data science

500MB for Ray, another 500MB for Polars (though that was a bug IIRC), a few more megs for whatever binaries to read out those weird weather files (NetCDF and Grib2).

[–] NostraDavid@programming.dev 1 points 2 days ago

Downside: "^1.2.3" as default versioning for libraries. You just pinned a version? Oh great, now I can't upgrade another library because you had to pin something in yours...

That non-standard syntax has been a PITA for the last few years. That being said: They created that syntax for regular applications (and not for libs) in a time when the pyproject.toml syntax was not anywhere near finalization.

[–] NostraDavid@programming.dev 4 points 2 days ago

I bet it’s darn amazing,

It is. In this older article (by Anna-Lena Popkes) uv is still not in the middle, but I would claim it's the new King of Project Management, when it comes to Python.

uv init --name <some name> --package --app and you're off to the races.

Are you cloning a repo that's uv-enabled? Just uv sync and you're done!

Heck, you can now add dependencies to a script and just uv run --script script.py (IIRC) and you don't need to install anything - uv will take care of it all, including a needed Python version.

Only downside is that it's not 1.0 yet, so the API can change at any update. That is the last hurdle for me.

[–] NostraDavid@programming.dev 6 points 2 days ago (1 children)
  1. let pyproject.toml track the dependencies and dev-dependencies you actually care about
  • dependencies are what you need to run your application
  • dev-dependencies are not necessary to run your app, but to develop it (formatting, linting, utilities, etc)
  1. it can track exactly what's needed ot run the application via the uv.lock file that contains each and every lib that's needed.
  2. uv will install the needed Python version for you, completely separate from what your system is running.
  3. uv sync and uv run <application> is pretty much all you need to get going
  4. it's blazingly fast in everything
[–] NostraDavid@programming.dev 19 points 2 days ago (1 children)

pip3 freeze > requirements.txt

I hate this. Because now I have a list of your dependencies, but also the dependencies of the dependencies, and I now have regular dependencies and dev-dependencies mixed up. If I'm new to Python I would have NO idea which libraries would be the important ones because it's a jumbled mess.

I've come to love uv (coming from poetry, coming from pip with a requirements/base.txt and requirements/dev.txt - gotta keep regular dependencies and dev-dependencies separate).

uv sync

uv run <application>

That's it. I don't even need to install a compatible Python version, as uv takes care of that for me. It'll automatically create a local .venv/, and it's blazingly fast.

[–] NostraDavid@programming.dev 13 points 2 days ago (1 children)

Python’s tooling is a mess.

Not only that. It's a historic mess. Over the years, growing a better and better toolset left a lot of projects in a very messy state. So many answers on Stack Overflow that mention easy_install - I still don't know what it is, but I guess it was some kind of proto uv.

[–] NostraDavid@programming.dev 1 points 4 days ago

Check if there's a stub or types extension - https://pypi.org/search/?q=types

[–] NostraDavid@programming.dev 2 points 4 days ago* (last edited 4 days ago) (1 children)

I can’t stand the bloat of virtual environments

Sucks to be you, but virtual envs are THE way to keep everything running on your own machine. You can try to keep everything in a single venv, but then you'll start wondering why it doesn't work on other's machines.

built-in tools provided by the language

sqlite3 module comes with Python. As does the json module. Use pathlib's Path object over os.whatever because the API is nicer to work with. abc (short for Abstract Base Class - abc, get it?) is useful for inheritance stuff. I like click, but there's argparse if you need to write a CLI. Stay away from asyncio if you can - it's usually not faster and a bigger PITA than it needs to be. Need to transport a binary, but you can only send text? base64. import datetime as dt if your new friend when it comes to datetime objects - to be aware to keep things timezone-native. You'll need pytz for that - Python doesn't update fast enough to keep up to date with all the new timezone shenanigants. always check for missing timezones; they'll cap your kneecaps and kick you in the balls if you're not careful. http can be used to make calls to APIs though requests is a favorite; slap urllib3 and you got yourself a sauce going on! Skip logging and jump to a lib that supports structured logging, python-json-logger is a nice beginner's log lib, jump to structlog if you need the raw power (say you want control over other people's logging output). math is a sleeper hit - powers, roots, floors, ceitings, and statistics is a nice addition on top of that together with random for probabilistic stuff. multiprocessing if you need to run something concurrently: ProcessPoolExecutor for IO, ThreadPoolExecutor for CPU bound stuff (IIRC). re for regex related stuff. uuid if you need a unique identifier (this can be slow in DBs, so take care!)

ecosystem

PyPI (Python Packaging Index) if your new friend - pai-pee-ai; not paipai - that's the JIT implementation of Python: pypy.

Use pytest to run your tests, ruff for formatting (though I imagine it intimidating for beginners, better to bite the bullet (even if you nibble on it slowly), uv to track your dependencies and Python version.

Yes, figuring out a nice configuration for these tools is a pain, but that's what ChatGPT is for. Just don't go too wild on the settings, as there are MANY, and if something doesn't work because ChatGPT got a little outdated, it'll hurt.

Anyway, that's about 4 years of experience concentrated in a single page. If you ever feel like an imposter: that's a common feeling: https://en.wikipedia.org/wiki/Impostor_syndrome If it's hitting you on the head, see if you can talk with your seniors about it (presuming they're sane adults) - otherwise there's always Lemmy to vent :P .

edit: if you need to handle tabular data: Polars. If anyone recommends Pandas over Polars, hit them with a newspaper until they crawl back under the rock they came from. Unless it's for GeoPandas, then it's OK.

[–] NostraDavid@programming.dev 1 points 4 days ago

The new king on the block: uv. It can do everything poetry does, while also using a standard pyproject.toml (no more weird ^), and it'll handle the Python version for you, so no faffing about with manually installing anything. Just uv sync and off you go!

Downside: not compatible with virtualenvwrapper, as it'll force its .venv in the local folder.

It's also still under heavy development and breaking changes are still expected, but it's already super nice to use.

Same guys (Astral) also made ruff the formatter/linter that they intend to eventually integrate into uv, IIRC.

I'm running all my personal projects under uv and am having a blast. It's so fast.

[–] NostraDavid@programming.dev 2 points 4 days ago

Don't worry, they're planning JS0 and JSSugar (IIRC) so you're forced to compile anyway :D

[–] NostraDavid@programming.dev 1 points 4 days ago

Boomers are real pieces of shit

I have some weird news for you: Generations don't exist. Boomers? Not real. Silent Generation? Nope. Gen X? No! Millennial? Non-existent! ALL OF THEM.

 

Ladybird, the browser from SerentityOS, now has a non-profit behind it! The guy in the video is not Andreas, but Chris Wanstrath (former CEO from Github), and he's pumping some financial backing into this non-profit.

I for one am happy we're getting an alternative to the Chrome/Firefox duality we're stuck with.

https://ladybird.org/

view more: next ›