#python-discussion

1 messages ยท Page 511 of 1

spice hill
#

well, it's a singular book, so it can't depend that much

raven urchin
charred tusk
#

I think you need to upgrade your understanding to the 4.5e edition of books

#

Someone please know where that number comes from

cerulean ravine
#

"2nd edition" always means, "use this one instead of the 1st edition". If it was a sequel, it would be called something else.

spice hill
#

alright, so my understanding of the world is still somewhat intact

#

it looks like Kleppmann revised the structure of the book quite a bit

raven urchin
#

Oh wait 2 was the attack of the clones lol

inland karma
#

im actually gooint to the capital tomorrow, ill stop by and see if they indeed have 1 copy left of the second edition

kind monolith
#

Hey Guys, is there any Website where you can complete some small python tasks/scripts/fix small bugs and get a small Payback?

solid estuary
#

hi

#

whats up

pallid garden
charred tusk
#

They want to earn money methinks

pallid garden
#

why would people use that platform instead of just asking for help online?

#

with the consideration that it's just a small task

kind monolith
charred tusk
wise imp
pallid garden
wise imp
spice hill
#
unsafe {
    copyright.violate();
}
pallid garden
#

you can borrow something multiple times...

#

...as immutable references

wise imp
#

listen, idek what rust is

#

some metal oxidation or something

pallid garden
#

"reading does not conflict"

bright mauve
#

immutable references can't stop me because i can't read

wise imp
#

hmm, ideas are immutable, aren't they?

bright mauve
#

you'd better hope not, or there is little hope for humanity

knotty ice
pallid garden
#

the real question is: is the Ship of Theseus mutable

craggy willow
#

humanity is immutable, aren't they?

proud escarp
#

would there happen to be a cleaner way to generate index-ish IDs for entries in a sqlmodel.SQLModel table?

def create_item(session: Session, item_body: ItemBody):
    last_id = len(session.exec(select(Item)).all())
    item = Item(
        id=last_id,
        name=item_body.name,
        price=item_body.price,
        expiry_date=item_body.expiry_date,
    )
    session.add(item)
    session.commit()
    session.refresh(item)
    return item

I was using itertools.count but this fails some tests of mine because the counter state persists across different tests

# counter = count()

class Item(SQLModel, table=True):
    # id: int = Field(primary_key=True, default_factory=lambda: next(counter))
    id: int = Field(primary_key=True)
    name: str = Field()
    price: int = Field()
    expiry_date: date | None = Field(default=None)
wise imp
#

damn, gotta write an RFC for versioning of ideas

raven urchin
wise imp
#

what?

nova breach
#

how can I install Python 3.13.13 in Debian?

steel whale
forest elm
#

anyone studying in LUND university sweden?

proud escarp
#

you can use uv.. but if you want a global python i recommend pyenv

raven urchin
steel whale
#

you can override the PATH

#

and make uv's pip install user-wide instead of system-wide

proud escarp
# steel whale you still use uv

it supports setting a global python (well, it doesnt "support" it but you can override the PATH yeah), but not global dependencies very well

nova breach
kind monolith
steel whale
#

or just use uv pip, it launches a user-wide venv

raven urchin
steady rain
raven urchin
proud escarp
kind monolith
nova breach
#

and should I uninstall apt python after installed uv?

steady rain
raven urchin
steady rain
proud escarp
kind monolith
spice hill
proud escarp
#

i use uv for my projects, pyenv for managing my pythons

nova breach
#

i see

raven urchin
wise imp
steady rain
raven urchin
#

If you want something more up-to-date you should use Debian Sid or another rolling-release distro like Open SUSE tumbleweed.

proud escarp
nova breach
#

so...... there are linux apps run on python?

proud escarp
raven urchin
proud escarp
raven urchin
#

It's like Arch, rolling release.

proud escarp
#

index-ish IDs are weird anyways

raven urchin
bright mauve
#

arch does some testing before releasing software though. debian sid is where you test software before releasing, so it breaks. sid is more comparable to the arch upstream, if anything

craggy willow
nova breach
#

trixie is just the newest stable?

raven urchin
bright mauve
wise imp
spice hill
# proud escarp no

See this: https://sqlite.org/autoinc.html#summary (or the equivalent documentation if you're using a different database engine)
If this is your table: sql create table fruits ( uid integer primary key autoincrement, name text not null, count integer not null ); then uid becomes an optional field that increments on each insertion. So you can do insert into fruits (name, count) values ('banana', 42); and it will pick the next available uid automatically.
I would recommend interacting with an SQL database directly before jumping to ORMs and other tools that wrap them. But it looks like SQLModel does support automatic ID generation: https://sqlmodel.tiangolo.com/tutorial/automatic-id-none-refresh/

raven urchin
#

Debian releases a new version every x amount of time, I don't know the exact time, but it makes it pretty outdated compared to other distros

#

But also makes it insanely stable.

wise imp
proud escarp
# craggy willow can you use uuid

yeah, but again that would be persist across the tests.. i could patch them with a fixture i guess, not that it would matter if it were persistent in the case of uuids
but anyways, auto-increment is the way

cerulean ravine
proud escarp
nova breach
#

seems apt don't allow me for installing uv......

proud escarp
# cerulean ravine what are you checking in your tests? Maybe they need to change

well, i was testing if the index-ish IDs were being generated properly. of course, i wouldnt be doing that with uuids
why was i trying to make the IDs index-ish? i dont know, im just playing around

def test_item_id_generation(client: TestClient):
    for i in range(10):
        response = client.post("/items/", json=test_item_body)
        assert response.status_code == 200
        assert response.json()["id"] == i

    response = client.get("/items/")
    assert len(response.json()) == 10
spice hill
bright mauve
cerulean ravine
proud escarp
cerulean ravine
proud escarp
cerulean ravine
ashen cipher
#

hello peoples

proud escarp
raven urchin
cerulean ravine
raven urchin
#

Or add the community repo

proud escarp
proud escarp
#

even if there were a use case of index-ish IDs, it should probably be a different field, and the actual id be a uuid

floral terrace
proud escarp
#

is it? seems kinda basic to me

spice hill
# proud escarp im working on a hypothetical inventory api for the means of playing around with ...

It's a good idea to avoid relying on implementation details when testing. That way, you won't have to rewrite the tests when refactoring the system.
Identify the actual requirements for the feature and test them. For example, here's what I'd expect from a basic system that supports adding and listing some generic items:

  1. the generated items have unique identifiers (the client of the API doesn't need to know how they are generated)
  2. after receiving the ID for the item, you can then grab the item by that ID
  3. after adding an item, it will be present when asking for a list of all the items
  4. IDs are unique, meaning they are not repeated ever again, even if other actions take place in your system.
    So you might create a test for each of those. Testing number 4 will be difficult and/or impossible
robust ledge
#

You could force number 4 there but there's little value in it from what I can see. You'd be testing the failure route of an insert which should be covered in a different test.

proud escarp
#

testing number 4 well... ill leave it up to the auto-increment technique author

floral terrace
# proud escarp is it? seems kinda basic to me

wdym basic? if you are using any kinda orm that works with any database, the uuids are automatically generated by the orm so I dont see the benefit of uuids over int, except more taking up more memories

spice hill
#

non-incrementing IDs can work as a defense in depth to protect against enumeration attacks

raven urchin
#

So, guys, I can make pretty much the same stuff in C and in Rust but Rust is easier? I think that I still don't understand the relation properly.

floral terrace
#

the maximum value of bigintfield in Django is around 9 billions iirc

spice hill
steady rain
floral terrace
raven urchin
#

In dumb friendly terms?

#

Or an example?

jade robin
azure pine
#

Made something practical today , Image Resizer hehe .. using Pillow.

proud escarp
spice hill
# robust ledge You could force number 4 there but there's little value in it from what I can se...

You could repeatedly add and remove items and see if the IDs repeat. Here's an example footgun I'm thinking of:
https://sqlite.org/autoinc.html#summary

If the AUTOINCREMENT keyword appears after INTEGER PRIMARY KEY, that changes the automatic ROWID assignment algorithm to prevent the reuse of ROWIDs over the lifetime of the database. In other words, the purpose of AUTOINCREMENT is to prevent the reuse of ROWIDs from previously deleted rows.
so if you don't specify AUTOINCREMENT, the IDs will look like they're unique since they're just incrementing forever, but they're not

raven urchin
#

What does C do better than Rust?

steady rain
steady rain
jade robin
#

idk, other stuff is fairly compatible with C

gleaming knoll
raven urchin
ashen cipher
wise imp
robust ledge
jade robin
floral terrace
ashen cipher
jade robin
raven urchin
steady rain
ashen cipher
gleaming knoll
#

rust is whatever "level" you want. the source code of most userspace rust apps is pretty high-level,
but you can drop down in case you need to

steady rain
frigid trout
#

I don't know whether I should make a portfolio website or learn how to make games, which one should I do?

steady rain
frigid trout
#

So should I make things that can go on the portfolio or should I make the portfolio itself?

jade robin
# ashen cipher not directly

sure i mean, it still counts as a point for "why you should implement some things in C" because of "not directly"

raven urchin
gleaming knoll
#

i would choose rust for a lot of projects because it simply has better tools for abstraction and good compiler errors
the ecosystem is also pretty good at this point, and there is a sane package manager that everyone uses

ashen cipher
steady rain
proud escarp
wise imp
spice hill
#

You can also blog about creating the portfolio website, and list the blog as one of the projects

floral terrace
ashen cipher
#

recursive portfolio

spice hill
raven urchin
#

Nom, nom, I'm excited about web dev, I want to start soooonnnn

frigid trout
#

It's just another website, right a blog.

wise imp
#

binary log? what does the b actually stand for

gleaming knoll
raven urchin
#

Guys, what do you think it's a good project to "graduate" from a gui framework (Pyside) and start learning something else?

ashen cipher
#

we blog

still doesnt explain it /j

floral terrace
raven urchin
wise imp
#

a todo app

swift sparrow
#

yeah, I think a todo is a nice jump from what you just did

nova breach
#

can forky run python newer than trixie without uv?

raven urchin
swift sparrow
raven urchin
#

I can only think of "all" in Spanish lol pithink

raven urchin
swift sparrow
#

yeah

#

QListWidget will be your friend

#

or maybe even QTreeWidget if you want to make some categories

raven urchin
#

I could even make kind of like a project roadmap-thingy

#

Instead of just a to-do list, make it related to what I'm making

ashen cipher
#

kanban board

raven urchin
#

Oohhh, this sounds great

wise imp
swift sparrow
sturdy cosmos
#

Hi chat

raven urchin
sturdy cosmos
#

Iโ€™m new here

wise imp
frigid trout
edgy krakenBOT
#
Go-to beginner resources

Here are the top free resources we recommend for people who are new to programming:

For a full, curated list of educational resources we recommend, please see our resources page!

raven urchin
swift sparrow
frigid trout
swift sparrow
#

battleship, hangman, blackjack

wise imp
raven urchin
#

I still have a ton of projects that I can make in Pyside hehe

swift sparrow
#

I've been using pyside for 6+ years and still learn new things all the time

raven urchin
#

Mhmm, I think I will make my project-todo-manager app

knotty ice
raven urchin
#

It can be either pretty simple or insanely big

ashen cipher
#

minesweeper players terrify me

raven urchin
frigid trout
#

Hello.

raven urchin
#

Now I forgor

frigid trout
gleaming knoll
#

minesweeper players are neural networks larping as humans

ashen cipher
#

yea basicaly

frigid trout
#

Hi, I am new.

gleaming knoll
#

hi new, i am lambda

ashen cipher
#

dammit

raven urchin
ashen cipher
frigid trout
#

Let's take this discussion into the ot0?

ashen cipher
#

i need to change my server display name one of these days

raven urchin
gleaming knoll
ashen cipher
#

issue is i need to think of one

raven urchin
#

The best thing about having an android phone is being able to install Termux and run pretty much anything I make in my PC

gleaming knoll
#

android wins by not locking its users :::

#

the bar is that low

ashen cipher
#

not locking its users too much*

#

hm

#

yeah i dont like this one

ocean ridge
#

suggest a name for my terminal coloring python library

gleaming knoll
#

vec null is peano naturals

ocean ridge
#

its a library like colorama

solar ravine
#

Hello, I'm new too

ocean ridge
#

not app, python library

spark obsidian
ashen cipher
gleaming knoll
#

yet another terminal coloring python library

ocean ridge
raven urchin
ocean ridge
raven urchin
#

I really love TUI

gleaming knoll
ocean ridge
autumn forge
ocean ridge
ashen cipher
ocean ridge
#

i found a really good name!!!
VIBRANT

mellow hill
#

what is the use of indexing in python

autumn forge
#

vibe rant

ashen cipher
#

how has that not bene taken

ocean ridge
#

letsgo :D

ocean ridge
raven urchin
ashen cipher
#

i still like vexel more

ashen cipher
edgy krakenBOT
#
Not in my house!

Package could not be found.

ocean ridge
#

vibrant is more related to colors

gleaming knoll
ashen cipher
raven urchin
ashen cipher
mellow hill
gleaming knoll
#

you mean "what are the double underscores on both sides for in stuff like __name__?"

raven urchin
#

___variable___= __x__

autumn forge
crisp jay
ashen cipher
#

that's __variable

crisp jay
gleaming knoll
#

thats mangled
private is single _x

mellow hill
ashen cipher
#

๐Ÿฅด

gleaming knoll
mellow hill
#

yeah thets the exact code

gleaming knoll
#

in general the double underscores on both sides of a name are for names "reserved" by python
the __name__ global variable is one of those, python sets it to the name of the module. for the entry point module, which the program started running from, its the string "__main__"

mellow hill
#

so how does it help in anything in general as a function

ashen cipher
#

!name

edgy krakenBOT
#
Did you mean...

ยป if-name-main
ยป names
ยป off-topic-names

gleaming knoll
#

it makes sure it wont collide with names people would use for their actual variables
the assumption is that people wont normally name their things __x__, so its only used for special things

ashen cipher
#

!if-name-main

edgy krakenBOT
#
`if __name__ == "__main__"`

This is a convention for code that should run if the file is the main file of your program:

def main():
    ...

if __name__ == "__main__":
    main()

If the file is run directly, then the main() function will be run. If the file is imported, it will not run.

For more about why you would do this and how it works, see if __name__ == "__main__".

ashen cipher
#

well that isnt very helpful

mellow hill
ashen cipher
gleaming knoll
ashen cipher
#

o

pallid frigate
#

hey

wise imp
gleaming knoll
ashen cipher
proud escarp
#

exactly

ashen cipher
#

yk i like this more

crisp jay
gleaming knoll
#

__name__ is not a method. yes its a dunder, double underscore (on both sides, idk what __x would be called though)

gleaming knoll
#

its not just private though, its mangled. and this doesnt represent the fact that its, well, a double underscore

robust ledge
#

A name mangled attribute.

pallid frigate
crisp jay
#

Its like,protected with the name of the class (idk about it outside tho)

ashen cipher
#

question - is english an ethnicity, nation, country, or state

tame vapor
robust ledge
ashen cipher
pallid frigate
#

what to code..?

crisp jay
tame vapor
crisp jay
tame vapor
crisp jay
peak relic
crisp jay
#

So im working with strings and took me hours to make a simple addition function

gleaming knoll
#
import sys as _ัะธัั‚ะตะผะฐ
from typing import TextIO as ะขะตะบัั‚ะพะฒั‹ะนะ’ะฒะพะดะ’ั‹ะฒะพะด

ะพะฑัŠะตะบั‚ = object
ัั‚ั€ะพะบะฐ = str
ะฑัƒะปะตะฒ = bool
ะะธั‡ะตะณะพ = None
ะะตั‚ = False

ะฟะพะปัƒั‡ะธั‚ัŒ_ะฐั‚ั‚ั€ะธะฑัƒั‚ = getattr

@lambda ะบะปะฐัั: ะบะปะฐัั()
class ัะธัั‚ะตะผะฐ:
  ะฟัะตะฒะดะพะฝะธะผั‹ = {"ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะน_ะฒั‹ะฒะพะด": "stdout"}
  ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะน_ะฒั‹ะฒะพะด: ะขะตะบัั‚ะพะฒั‹ะนะ’ะฒะพะดะ’ั‹ะฒะพะด
  def __getattr__(ั, ะธะผั):
    return ะฟะพะปัƒั‡ะธั‚ัŒ_ะฐั‚ั‚ั€ะธะฑัƒั‚(_ัะธัั‚ะตะผะฐ, ั.ะฟัะตะฒะดะพะฝะธะผั‹.get(ะธะผั, ะธะผั))

def ะฒั‹ะฒะตัั‚ะธ(*ะพะฑัŠะตะบั‚ั‹: ะพะฑัŠะตะบั‚, ั€ะฐะทะดะตะปะธั‚ะตะปัŒ: ัั‚ั€ะพะบะฐ = " ", ะบะพะฝะตั†: ัั‚ั€ะพะบะฐ = "\n", ั„ะฐะนะป: ะขะตะบัั‚ะพะฒั‹ะนะ’ะฒะพะดะ’ั‹ะฒะพะด | ะะธั‡ะตะณะพ = ะะธั‡ะตะณะพ, ัะผั‹ั‚ัŒ: ะฑัƒะปะตะฒ = ะะตั‚) -> ะะธั‡ะตะณะพ:
  if ั„ะฐะนะป is ะะธั‡ะตะณะพ: # :( cant translate keywords
    ั„ะฐะนะป = ัะธัั‚ะตะผะฐ.ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะน_ะฒั‹ะฒะพะด
  assert ั„ะฐะนะป is not None # stupidass typecheckers
  ั„ะพั€ะผะฐั‚ะธั€ะพะฒะฐะฝะฝะฐั_ัั‚ั€ะพะบะฐ = ั€ะฐะทะดะตะปะธั‚ะตะปัŒ.join(ัั‚ั€ะพะบะฐ(ะพะฑัŠะตะบั‚) for ะพะฑัŠะตะบั‚ in ะพะฑัŠะตะบั‚ั‹) + ะบะพะฝะตั†
  # translating methods would suck too, would need fishhook or something
  ั„ะฐะนะป.write(ั„ะพั€ะผะฐั‚ะธั€ะพะฒะฐะฝะฝะฐั_ัั‚ั€ะพะบะฐ)
  if ัะผั‹ั‚ัŒ:
    ั„ะฐะนะป.flush()

ะฒั‹ะฒะตัั‚ะธ("ะŸั€ะธะฒะตั‚, ะœะธั€!")

๐Ÿ˜ญ ๐Ÿ˜ญ

tame vapor
#

๐Ÿคท

runic flower
raven urchin
ashen cipher
#

cs3

gleaming knoll
raven urchin
ashen cipher
steady rain
#

@ashen cipher your nickname is the universal set?

crisp jay
gleaming knoll
ashen cipher
#

ah

#

yk what sure

steady rain
#

Fun

gleaming knoll
#

ction
al
relationship
between sets

floral terrace
#

isn't that an actual syntax proposal for the initialization of python empty set

raven urchin
gleaming knoll
#

!pep 802

edgy krakenBOT
gleaming knoll
#

{/}

ashen cipher
#

should've made it o/ instead so it would've looked like someone waving

gleaming knoll
#

should've made some pancakes

runic flower
ashen cipher
#

thanks

gleaming knoll
#

dw the set of everything except the empty set i love you so it cancels out

ashen cipher
#

skull

spice hill
# edgy kraken
  1. {*()}, perhaps optimising to compile this to the BUILD_SET opcode
    prediction: this is going to win
#

(in a few years)

mellow hill
ashen cipher
velvet trout
runic flower
bronze dragon
#

Standards Track means accepted, right?

ashen cipher
#

(/)

gleaming knoll
velvet trout
bronze dragon
#

ahh right

#

still Draft

runic flower
velvet trout
#

Standards Track is one of those which also includes Informative and other types

bronze dragon
#

right, right

velvet trout
#

left, left

crisp jay
#

Sets has their own hash function iirc

spice hill
#

!pep 832

edgy krakenBOT
pallid frigate
#

hey what should i code? im at the level of file manage ment

gleaming knoll
#

manage ment

gleaming knoll
ashen cipher
#

frozenset

gleaming knoll
#

who froze my sets

ashen cipher
#

me, mario

craggy willow
gleaming knoll
#

i wanted to eat some warm sets

craggy willow
#

kinda cool

velvet trout
#

Disney

gleaming knoll
#

dis.ney? whats that

velvet trout
#

Disney froze your sets

#

Disney's 2013 frozen i mean

#

ducky_concerned not disassembly module lmao

raven urchin
pallid frigate
#

idrk like learning

ashen cipher
#

yea im level 7

gleaming knoll
#

we had levels for a bit after april 1

velvet trout
ashen cipher
#

6.5 +- 0.5

raven urchin
wheat mica
#

Yall quickly, is this valid?

type Noneable[T] = T | None
velvet trout
raven urchin
spice hill
gleaming knoll
edgy krakenBOT
velvet trout
wheat mica
velvet trout
wheat mica
velvet trout
#

ooh

wise imp
spice hill
velvet trout
#

Noice

pallid frigate
velvet trout
pallid frigate
#

and other stuff but thats what i mainly do with it

velvet trout
#

I never used it like that. Good point

wheat mica
velvet trout
#

Holy C

gleaming knoll
velvet trout
#

I hate C, i need namespace not prefixes

pallid frigate
#
  • you can do variables in f.write(), but it only takes ONE argument so you can't go:
    f.write("Hello! ", "World!")
wheat mica
velvet trout
#

Is file= has to be full file protocol or is a typing.Protocol with write() method?

wheat mica
velvet trout
#

Not like i know anything about file protocol if it exists.

gleaming knoll
velvet trout
#

So it's structural typing ?

gleaming knoll
#

yes, or really its duck typing. the stdlib itself doesnt even define it

velvet trout
#

Ooh

pallid frigate
raven urchin
#
with open("test.txt", "w") as f:
    f.write("Sana sana colita de rana")```

?
velvet trout
#

Aren't they the same in python or i missed something

crisp jay
velvet trout
gleaming knoll
wheat mica
#

Thats an open file

pallid frigate
#

ik but im using it as an example

velvet trout
wheat mica
oblique spindle
velvet trout
wheat mica
velvet trout
wheat mica
velvet trout
#

I love OOP.

wheat mica
velvet trout
floral terrace
velvet trout
pallid frigate
#
with open(userinput, "w") as f:
  f.write("Hello World!")
dry yacht
pallid frigate
#

or you can do "a" for it not to overwrite it

gleaming knoll
wheat mica
velvet trout
velvet trout
pallid frigate
dry yacht
wheat mica
velvet trout
pallid frigate
#

extension is (e.g) .py or .cpp

pallid frigate
velvet trout
#

pathlib.Path can help you in partification of given file string i guess

velvet trout
pallid frigate
#

๐Ÿ™‚

wheat mica
#

Filename is 11bytes padded with spaces

#

Then 3 for extention

#

Also padded with spaces

pallid frigate
#

im talking abt python

velvet trout
#

What if user inputed more than that?

velvet trout
#

No, that's irrational!

wheat mica
gleaming knoll
#

ints cant be irational, they are (x:int)/1

pallid frigate
#

oh

velvet trout
#

Damn

gleaming knoll
wheat mica
leaden plinth
#

guys im heading into the algorithm part of python, wish me luck ๐Ÿฅฒ

wheat mica
#

And so on

#

Forever and ever

soft coral
#

I am using ruff, what setting should I change for ruff to auto-explode when there's a trailing comma?

def func(x, y,):
  ...

-->

def func(
  x,
  y,
):
  pass

Rn it removes the comma

crisp jay
wheat mica
#

Technically any int x can be written as n/10 as long as n = 10x btw

dry pike
#

it should do that already

soft coral
#

Yeah It seems like it's not ruff, maybe some other formatter running as well

pallid frigate
#
with open(user_input, "w") as file:
    file.write("Hello World\n"[0])
    file.write("Hello World!\n"[1])
    file.write("Hello World\n"[2])
    file.write("Hello World\n"[3])
    file.write("Hello World\n"[4])
    file.write("Hello World\n"[5])
    file.write("Hello World\n"[6])
    file.write("Hello World\n"[7])
    file.write("Hello World\n"[8])
    file.write("Hello World\n"[9])
    file.write("Hello World\n"[10])

I wouldn't do this but you know

edgy krakenBOT
#

Hey @pallid frigate!

Please edit your message to use a code block

Add a py after the three backticks.

```py
print('Hello, world!')
```

This will result in the following:

print('Hello, world!')```
pallid frigate
#
user_input = input("Enter File.EXTENSION: ")
with open(user_input, "w") as file:
    file.write("Hello World\n"[0])
    file.write("Hello World!\n"[1])
    file.write("Hello World\n"[2])
    file.write("Hello World\n"[3])
    file.write("Hello World\n"[4])
    file.write("Hello World\n"[5])
    file.write("Hello World\n"[6])
    file.write("Hello World\n"[7])
    file.write("Hello World\n"[8])
    file.write("Hello World\n"[9])
    file.write("Hello World\n"[10])

I wouldn't do this but you know

soft coral
#

It seems that it first auto-fixes it, as a trailing comma is not allowed, and then formats it. But it should be other way around in vscode..

pallid frigate
#

didn't work

#

py print("")

dry pike
#

it needs to be the last thing on the line

pallid frigate
#

oh

knotty ice
#

will python save the world from A.I ?

pallid frigate
#
user_input = input("Enter File.EXTENSION: ")
with open(user_input, "w") as file:
    file.write("Hello World\n"[0])
    file.write("Hello World!\n"[1])
    file.write("Hello World\n"[2])
    file.write("Hello World\n"[3])
    file.write("Hello World\n"[4])
    file.write("Hello World\n"[5])
    file.write("Hello World\n"[6])
    file.write("Hello World\n"[7])
    file.write("Hello World\n"[8])
    file.write("Hello World\n"[9])
    file.write("Hello World\n"[10])

I wouldn't do this but you know

#

maybe

craggy willow
pallid frigate
#

working on python thing

gleaming knoll
#

the interpreter seeing you write car by car ::
the kernel doing the write syscalls car by car ::
๐Ÿ˜ญ ๐Ÿ˜ญ ๐Ÿ’€ ๐Ÿฅ€

dry pike
#

you can just edit the original msg bro

gleaming knoll
#

teh h in char is deaf
and mute

#

its probally dead tbh

#

caracter

craggy willow
#

chairacter

dry pike
#

car actor

#

also known as Vin Diesel

craggy willow
#

actor based language is really just string based language

pallid frigate
#
user_input = input("Enter File.EXTENSION: ")
with open(user_input, "w") as file:
    x = 0
    while x < 20:
        file.write("hello worldaaaaaaaaaaaaaaaaaaaaa\n"[x])
        x += 1

Use a loop

raven urchin
raven urchin
pallid frigate
#

nah

golden mortar
charred tusk
#

Yeah two similar functions with a different key detail can be cleaner than some big abstraction to handle both cases

wheat mica
#

Or u jst use some annoying string slicing

crisp jay
wheat mica
# wheat mica Or u jst use some annoying string slicing

This is the code btw ```c
(void) printf("Enter filename: ");
char user_input[1024];
(void) scanf("%s", user_input);
FILE* file = fopen(user_input, "w");
fwrite("hello worldaaaaaaaaaaaaaaaaaaaaaa\n, 20, sizeof(char), file);

dry pike
wheat mica
dry pike
#

that's a funny joke

gleaming knoll
wheat mica
#

My brain is cooked rn

gleaming knoll
#

eh, thats obvious, no need to mention it

tame vapor
wheat mica
#

lol

gleaming knoll
#

its a compile error waiting to happen, assigning it to char* that is
and yeah reading an arbitrary sized string is not a good idea

wheat mica
crisp jay
#

i love writting C and my code doesnt work on one compiler but works on the other

#

very cool

gleaming knoll
#

you probally wrote some really weird C then

tame vapor
#

or used some compiler extensions, or non standard C stuff

wheat mica
nova breach
#

can forky install python newer than trixie without uv?

crisp jay
wheat mica
tame vapor
tame vapor
wheat mica
gleaming knoll
wheat mica
gleaming knoll
#

you dont need uv on any platform to install python versions. its just one of the version managers
you could like, compile from source

pseudo sorrel
#

hi

#

how do i get pic perms

lament veldt
#

is there any difference b/w typing.NamedTuple and @dataclass with frozen=True?

gleaming knoll
# lament veldt is there any difference b/w `typing.NamedTuple` and `@dataclass` with `frozen=Tr...

a namedtuple is a tuple, a dataclass isnt. so a namedtuple can be like, unpacked, or passed to something which checks for isinstance(_, tuple)
in terms of memory usage : each tuple instance has to store the amount of fields, the instance of a (slotted) dataclass doesnt

both are "immutable" in the same way: cant reassign what the fields point to, but if the fields are mutable - can be mutated
(though bypassing this is easier for frozen dataclasses, just object.__setattr__)

nova breach
#

anyway, apt can only install a relatively old version python in trixie

terse mauve
gleaming knoll
lament veldt
lament veldt
gleaming knoll
terse mauve
gleaming knoll
#

i wonder if you can propose a program where either of the options is significantly slower/faster, or uses significantly more/less memory

hybrid nebula
#

I don't see how dataclasses can be faster

hybrid nebula
#

alloca ducky_cat

gleaming knoll
# hybrid nebula I don't see how dataclasses can be faster

it doesnt really make sense to measure speed here, its nanoseconds for access in all cases. memory - sure, and there is an objective answer: an instance of a class with slots is smaller by atleast 1 size_t than an equivalent tuple because it doesnt need to store its size

gleaming knoll
#

with @dataclass(slots=True), yes

hybrid nebula
#

ah

spice hill
#

actually, dataclass might take up less memory

hybrid nebula
#

really? how?

tawny gale
#

Hi all

hybrid nebula
#

iirc tuples don't overallocate

proud escarp
#

where did i hear something about slots not mattering as much from 3.11 onwards

terse mauve
# hybrid nebula I don't see how dataclasses can be faster

dataclasses are just code generators, you can define slots, ordering, frozen (and many more), dataclasses are great when you have a class that you'd want to implement those things for you anyway, or when there's a need for that class instance to be converted to tuples/dicts

spice hill
# hybrid nebula really? how?

!e

from typing import NamedTuple
from dataclasses import dataclass
import sys

@dataclass(slots=True, frozen=True)
class DcPoint:
    x: int
    y: int

class NtPoint(NamedTuple):
    x: int
    y: int

print(sys.getsizeof(DcPoint(420, 69)))
print(sys.getsizeof(NtPoint(420, 69)))
print(sys.getsizeof((420, 69)))
edgy krakenBOT
spice hill
#

Tuples store their length as part of their layout

#

i think that's why

hybrid nebula
#

ah

terse mauve
#

imo using dataclasses like you'd use namedtuples or SimpleNamespace is an overkill

hybrid nebula
#

so just what we said, slots

proud escarp
#

oh, october is the month the python versions die
rip 3.10... 10 being october... fitting..

hybrid nebula
#

october is where pythons go to die
...wait what

spice hill
#

wake me up when october ends

proud escarp
#

i cant believe 3.11 will be the lowest living version soon... to me it still feels like it just came out..

steady rain
spice hill
terse mauve
proud escarp
#

i think python was 3.6 when i started using it

#

or 3.7

#

i was inspired by this person in my scratch.mit.edu class who was making games with pygame

harsh swallow
#

I remember when I had to use 3.4 ๐Ÿ’” and when I used 3.10 for some stuff 3.10 as current newest. Damn

spice hill
#

Feel old yet? 2015 was 20 years ago.

proud escarp
terse mauve
raven urchin
#

Hello

harsh swallow
spice hill
#

I was under the impression slots are for memory, not speed

harsh swallow
#

๐Ÿ˜

dull dune
#

definitely both, you avoid the key lookup in teh dict

spice hill
#

true

wet sail
#

Hello, I'm sorry but am I allowed to send an OPTIONAL to join discord server message?

#

I'll wait for a staffs response

steady rain
#

guild invites that aren't allowlisted will be instantly deleted.

bronze dragon
#

Why emphasize the "OPTIONAL to join"? All server invites are inherently optional

wet sail
velvet trout
#

Guys i need help

steady rain
wet sail
#

It's up to you here

steady rain
brisk gazelle
gleaming knoll
# crisp jay `1% faster`

yeah its not supposed to be about speed, its a memory usage optimization
though all performance related changes do speed benchmarks too

velvet trout
#
def lex(lexemes: Iterable[str]) -> Generator[Token]:
    end_of_options = False

    for lexeme in lexemes:
        if not end_of_options:
            if lexeme == END_OF_OPTIONS:
                end_of_options = True
                continue

            if lexeme.startswith(OptionPrefix.LONG):
                yield _lex_long_option(lexeme)
                continue
            elif lexeme.startswith(OptionPrefix.SHORT):
                yield _lex_short_option_or_group(lexeme)
                continue

        yield ArgumentToken(lexeme)

I know what subclasses of the Token class (base dataclass) will be yielded.
And for type checkers, it's hard for them to know what subclasses of Token are available. Hence, matching subclasses of Token exhaustively will require including the base Token class itself which is unnecessary and vague.

I have a type LexerToken = OptionToken | blah blah, should i type annotate the YieldType as LexerToken rather than generic?

I have always yielded a generic type (indoctrination and now sudden change makes me feel concerned) until the day i found that it's hard for the type system to know without sealing types (which isn't present in python currently).

So do I yield by LexerToken or do i not (go generic Token)?

Or is there something else that i am not aware of that is perhaps more appropriate over these two options?

wet sail
cerulean ravine
steady rain
cerulean ravine
cerulean ravine
brisk gazelle
#

Pb&J.

velvet trout
# velvet trout Guys i need help

Hmmm... So this kind of thing is called as casual-chatting? where you don't stay efficient by putting the help question directly with your 'i need help', which is a tradeoff for casual chatting? And lots of people on internet are casual in chatting which is why they don't put help question in same message and sometimes rather wait for someone to attend for helping them pithink ducky_concerned hmm good discovery

gleaming knoll
# velvet trout ```python def lex(lexemes: Iterable[str]) -> Generator[Token]: end_of_option...
class Token: ...
class OptionToken(Token): ...
class SomeOtherToken(Token): ...

def f() -> Token:
  return OptionToken() if random.choice([False, True]) else SomeOtherToken()

#
def g():
  t1 = f() # just some abstract Token
  if isinstance(t1, OptionToken): # t1: OptionToken in this branch
    ...
  else: # even though in practice this will always be `SomeOtherToken`, the `Token` type does not tell us that
    ...
# (OptionToken | SomeOtherToken) would provide this information though, so in the `else` `t1: SomeOtherToken`

thats the main difference

velvet trout
#

What is Pb and J

gleaming knoll
#

peanut butter and jelly

main swan
#

(in a sandwhich of course)

velvet trout
#

Loll

raven urchin
gleaming knoll
raven urchin
#

After I eat, I'll code. Maybe I should make blackjack

fathom beacon
#

What do I do in a for loop to format a list nicely?

main swan
fathom beacon
#

for string in colors? is string valid

gleaming knoll
# fathom beacon for string in colors? is string valid

you can have any assignment target (an assignment target is something that can appear on the lhs of an assignment, e.g. variable name) after for
string is a valid assignment target, as in, you can do string = something, so yes
though usually if you have colors, you'd call the singular variable color

main swan
#

Maybe I should make blackjack

fathom beacon
fathom beacon
raven urchin
#

I have to investigate about the Blackjack rules

gleaming knoll
fathom beacon
velvet trout
fathom beacon
spice hill
# brisk gazelle Pb&J.

Check out our latest Pb&J snack. Indulgent and sweet, it boasts life-shortening and intelligence-reducing properties while being quite heavy in the hand!

velvet trout
#

Ooh

fathom beacon
#

I just don't get what I can use in for foobar in color

#

like number works

#

but it doesn't give me a list of stuff i can use

gleaming knoll
#

the thing after for is what the values from the iterable will be assigned to, so you're inventing a new name, not using an existing one
same as x = 1 just makes a new variable x out of nothing, for x in something: will be assigning the values from something to x one by one and running the inside of the for loop

fathom beacon
#

why do u edit so much lol

gleaming knoll
#

idk, its a habit
i dont like writing the message out fully before sending it
so instead i write a bit, and then iteratively edit

fathom beacon
#

I do

velvet trout
brittle merlin
#

it feels more like human talk

gleaming knoll
drifting hollow
#

does anyone know how i can include homebrew packages in a bundled app using pyinstaller?

raven urchin
#
numbers = [1, 2, 3] 

for number in numbers:
    ...

for i in numbers:
    ...```

They're the same.
drifting hollow
#

i can't find any answer onliลŸne

fathom beacon
#

Bruh that's crazy

gleaming knoll
drifting hollow
fathom beacon
#

so i can put for skibiditoiletgang in colors

runic flower
fathom beacon
velvet trout
raven urchin
raven urchin
fathom beacon
raven urchin
#

Well, it does, but in this case you assign whatever name you want.

runic flower
main swan
drifting hollow
raven urchin
velvet trout
fathom beacon
brisk gazelle
raven urchin
velvet trout
fathom beacon
raven urchin
brisk gazelle
#

The idea being the enhancement of legibility.

raven urchin
#

100k in skins, -100k in skill.

brittle merlin
#

bro he really ate packing peanuts

#

thats the funniest clip ever

main swan
#

don't have to worry about naming variables if you write pointfree...

brisk gazelle
brittle merlin
#

him telling its fine and gagging in the end

brittle merlin
raven urchin
#

Funny exercise I like is re-creating built-in methods, functions and other stuff

fathom beacon
main swan
fathom beacon
#

I've spent 1600โ‚ฌ on that

crisp jay
main swan
#

So in case i fails, you still got number.

crisp jay
raven urchin
steady rain
fathom beacon
gleaming knoll
fathom beacon
#

are there active vcs in this server

steady rain
#

Python will never be statically typed, but each release seems to have more support for type annotations.

raven urchin
crisp jay
#

its fun to tell the types of variables

brittle merlin
fathom beacon
#

0.13%

raven urchin
brittle merlin
#

fine

raven urchin
#

Come here

steady rain
fathom beacon
runic flower
#

I mean, other languages do exist. You don't have to confine yourself to just one.

spice hill
main swan
brittle merlin
spice hill
#

99.9% of popular libraries will stop working and will have to be rewritten

steady rain
brittle merlin
main swan
runic flower
crisp jay
raw bramble
main swan
#

you should warp your brain with other languages like Haskell, Prolog, etc.

gleaming knoll
brittle merlin
raw bramble
main swan
#

and then anger the community when you use weird ideas in the python community you brought from those communities.

gleaming knoll
steady rain
runic flower
gleaming knoll
raw bramble
brittle merlin
raw bramble
#

And even then, 3.14 is a different language from 3.15

runic flower
raw bramble
#

Is there a version of Python thatโ€™s green

brittle merlin
raw bramble
#

Like itโ€™s a bright green coloured Python rather than a blue and yellow Python

spice hill
# brittle merlin why is that? ik its a crazy thing to think but couldnt there be a way, where pyt...

all the developers just have to go and add type annotation to the existing dynamic code
It's not how programming works. It's not like Python users are children and Python core devs are their parents who can tell them what to do.
If Python 3.X+1 introduces a change that means manually changing millions of lines of people's code, Python users will just stick to Python 3.X, and they will stop financially supporting the Python Software Foundation because it clearly went off the rails.

spice hill
#

Python's type annotations are not foolproof, they have a lot of "holes". It's not like Java or C or C++. Any would be an example of such hole: ```py
def f(x: Any) -> None:
x.foo().bar() # type checks fine

f("banana") # also type checks fine

pastel sluice
#

one of the ways devs can go is to choose a linting tool that checks type annotations, and to set it for maximum strictness, so that any code without consistent annotations gets flagged. but that's entirely opt-in and is not enforced at runtime.

brittle merlin
#

understandable

#

its just how python is

main swan
#

(insert Rust my beloved)

spice hill
#

maybe C and C++ were a bad example, with how easily you can screw things up

main swan
#

nah it's all good. I get what you mean. I'm just trying to help if you get some type theorist that says "Well acsuallly..."

spice hill
#

I probably wouldn't use the word soundness myself, that's just the name of the repo (:

#

For instance, if you write this function in Rust: rs fn banana(x: u32) { } there's no way to make it so that x is a string. It wouldn't even make sense in the universe of Rust, and banana won't accidentally use string methods on x even if you do screw this up in some major way

#

(well, there are some bugs in rust that sometimes lead to unsoundness iirc)

rancid fractal
gleaming knoll
spice hill
#

yeah

main swan
#

I'm really unsound personally. I'm just used to it by now.

#

to me everything is just a set. ZFC supremacy.

gleaming knoll
#

im trying to use the coalton mine IDE but it has no vim motions so im dying
its interesting that they tried to make an IDE

main swan
pseudo sorrel
#

i made my first ever python tool today

gleaming knoll
#

i would be an emacs user if i learned about emacs before i learned about vim

main swan
#

Honestly, I just need my editor to have easymotion variant for it then I'll use it.

spice hill
# spice hill For instance, if you write this function in Rust: ```rs fn banana(x: u32) { } ``...

It's also about tradeoffs. For example, this is a narrowing that type checkers support: ```py
class X:
prop: object

def foo(x: X) -> None:
reveal_type(x.prop) # object
if isinstance(x.prop, int):
reveal_type(x.prop) # int
``` this is clearly wrong because x.prop could change after it's checked (or it could be a @property, in which case this narrowing still works). But prohibiting this was decided to cause too much inconvenience

main swan
#

Being able to do:

>>> x = 3
>>> x
3
>>> x = "happy"
>>> x
'happy'

Is actually wild. I'm working on a compiled python like language, and getting this functionality is surprisingly annoying.

cerulean ravine
spice hill
#

I like this feature in Rust, but I would also understand if the language doesn't want to support it

main swan
#

I'm trying to keep the language as fun as possible. So my plan is: if there is no type then you can. if there is a specified type then you can't.

gleaming knoll
#

a compiled language would usually separate assignment from declaration
then this is easy to implement

spice hill
main swan
#

I originally tried re-implementing python, but there were too many issues. So, now it's mostly python like, gradually typed.

spice hill
#

Why gradual typing for a new language?

main swan
#

I want something that you can quickly spitball ideas like Python, but if you want to sit down and type it later, it ends up being pretty fast too.

#

I mean, maybe it sounds stupid.

#

but I kind of want it at least personally

spice hill
#

I think the thing that would be popular today or in 10 years is less in the direction of lawlessness, but rather a statically typed language that introduces types in a very non-bureaucratic way. Things like: type inference everywhere, structural records/tuples

pastel sluice
#

@main swan this was an idea I explored myself - anything untyped would be an "object" type that would require a specific runtime, anything typed would be native code. You could declare a "strict" mode so that the program would not compile if any "object" types remained. Didn't get very far as I was simply not good at language or compiler design

main swan
spice hill
spice hill
#

yeah, something like that

pastel sluice
gleaming knoll
#

just use common lisp

main swan
#

i've also been getting side tracked by other smaller projects i'm working on. but we'll get there eventually (I think?)

spice hill
#

The language does sound interesting though.

main swan
spice hill
#

-# that comment was about Roc

#

but, good luck to you as well ๐Ÿ™‚

main swan
#

Ooh, it does look interesting indeed.

spice hill
#

unfortunately you won't be able to write it on paper

pastel sluice
inner adder
#

There are so many cool languages that I get curious about and then see that they're dead, too new to really enjoy playing with, or in just some sort of limbo.

#

Or you get that "Eh... why learn something new when it's not going to go anywhere" moment

gleaming knoll
#

real

spice hill
#

RIP Elm

pastel sluice
main swan
pastel sluice
#

And that says at least as much about my needs and interests as it does any of those languages as such

inner adder
inner adder
#

But the moment I see that a language doesn't have string interpolation, I nope out of there

pastel sluice
gleaming knoll
#

imagine learning about dependent types to end up writing dynamically typed slop

rose basin
#

Hi there, I wish you all having a great day

main swan
gleaming knoll
#

the fact that even 1 new language became so used (rust) is already insane tbh

pastel sluice
main swan
spice hill
#

tbh, I can live without string interpolation (if it buys the language something else)

pastel sluice
#

as I do so much work with text, I cannot

prisma cloak
#

hey can anyone help me with vs code theme change i tried but it won't work even though i have uninstalled extension

pastel sluice
main swan
rose basin
grave tree
# main swan I have had some irl interactions that have also been unsavory once mentioning th...

If you'd like some feedback, I think it would be better received if you answered some of the obvious questions up front when posting/talking about it.

Something like how you define closeness would be good to know upfront when first hearing about the project, since that is the obvious question. It shows you've put thought into it and how you're approaching things.

Also referencing its closest analogs so people can have a good comparison point.

#

I think it's a fun project and some adjustments on how it's communicated could make it be received better

main swan
grave tree
main swan
grave tree
#

It would also help to answer some of this stuff in the repo README as well.

#

For better or for worse, how something is communicated can have a large impact on how people judge the underlying idea

rose basin
#

true

main swan
#

well, lesson learned. Unfortunately, I can't really re-post back there again. I will update the README soon.

spice hill
grave tree
gleaming knoll
spice hill
#

yeah that's a bit undercooked

gleaming knoll
#

if a language has some form of implementing a generic operation for a given type then fstrings seem simple

spice hill
gleaming knoll
spice hill
#

That is also an option. Though Rust doesn't have this, only allowing simple expressions like variable names and attribute accesses in interpolated strings

#

(but it does have Display and Debug)

#

So you sometimes end up having to go back to println!("foo {0} bar {1} baz {2}", expr1, expr2, expr3); anyway

frigid trout
#

Hello

ocean ridge
#

vibrant is reserved by pypi

#

i thought i found a cool name for my project and it throws an error

ocean ridge
# cerulean ravine what error?
Uploading vibrant-0.1.0-py3-none-any.whl
100% โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” 12.5/12.5 kB โ€ข 00:00 โ€ข ?     
INFO     Response from https://upload.pypi.org/legacy/:
         400 Bad Request
INFO     <html>
          <head>
           <title>400 The name 'vibrant' isn't allowed. See
         https://pypi.org/help/#project-name for more information.</title> 
          </head>
          <body>
           <h1>400 The name 'vibrant' isn't allowed. See
         https://pypi.org/help/#project-name for more information.</h1>    
           The server could not comply with the request since it is either 
         malformed or otherwise incorrect.<br/><br/>
         The name &#x27;vibrant&#x27; isn&#x27;t allowed. See
         https://pypi.org/help/#project-name for more information.


          </body>
         </html>
ERROR    HTTPError: 400 Bad Request from https://upload.pypi.org/legacy/   
         Bad Request
spice hill
#

maybe it's automated typosquatting protection

ocean ridge
spice hill
#

vibrance is a package that exist

ocean ridge
#

i've decided to go with vibrantcli

cerulean ravine
ocean ridge
#

or could u suggest some other good names?

spice hill
ocean ridge
gleaming knoll
#

vibransi

inner adder
ocean ridge
ocean ridge
dull dune
#

did you go to the urL?

gleaming knoll
dull dune
#

The project name is too similar to an existing project and may be confusable.

inner adder
#

oh_hey_is_this_a_color_library_that_is_dope

ocean ridge
dull dune
#

then I'm not sure where the confusion is

dull dune
ocean ridge
#

can you all suggest some good names?

dull dune
#

everyone does that

ocean ridge
#

how about vibgyor?

frosty oriole
gleaming knoll
#

im ngl, just package rather than author/package is making me sad

fervent matrix
ocean ridge
#

chromapy?

frigid trout
ocean ridge
gleaming knoll
#

they are clearly alphafish, not beta
display names never lie. they cant be set to arbitrary things

frigid trout
#

BettaFish's friend

cerulean ravine
unborn lagoon
charred tusk
#

GitHub freaking out
I have work to do ๐Ÿ™

ocean ridge
ocean ridge
robust ledge
inner adder
#

Jesus christ, all the ones I'm looking for are already taken or are being name squatted

frigid trout
#

When I tried to use Github earlier today it gave me some weird error message and saying that I can't upload my file.

charred tusk
inner adder
#

Looking

#

That looks up for grabs

ocean ridge
#

yeps

gleaming knoll
#

but your library is not a cli
its a library

ocean ridge
#

but hey do i care?

spice hill
cerulean ravine
dull dune
#

(thus the urging to not release to pypi)

ocean ridge
spice hill
#

well it's not CLI either

chilly whale
ocean ridge
#

ok wait il think some more

gleaming knoll
#

name it veltrix-ansi-lib and be done with it

spice hill
#

I just remember that I have an almost-empty PyPI package I used for testing purposes. Hopefully PyPI doesn't kill me

#

but the name is unlikely to be contested

#

Yeah, namespacing by putting your name sounds like a good move, if you want the project on PyPI

ocean ridge
#

kk

frigid trout
#

Name it Gilbert.

ocean ridge
#

il brainstorm a few more names and if i cant find a good one, il use my name

charred tusk
ocean ridge
#

@inner adder managed to find any?

inner adder
#

Still thinking

frigid trout
inner adder
#

I'm usually good at naming things but so many are already taken

frigid trout
#

Gilbert-The Defecttive Fish.

charred tusk
inner adder
#

Got it

#

mantis_shrimp

gleaming knoll
ocean ridge
#

rainbow-terminal?

inner adder
#

They can see a significantly larger number of colors than other animals

#

And they're really colorful as well

ocean ridge
frigid trout
#

Is it common practice to make different repositories for different files?

charred tusk
frigid trout
#

You can name it Sparrow, since they also can vibrant colors

charred tusk
#

We give colors to SHRIMP!?

fervent matrix
ocean ridge
#

ima name it rainbow-terminal. sounds cool too

gleaming knoll
inner adder
#

Look at this colorful little bastard

frigid trout
spice hill
#

smh image perms abuse

frosty oriole
#

lowkey a good idea

ocean ridge
frigid trout
#

Name it Manti

frosty oriole
#

mantis shrimps also can see a lot of color

frigid trout
#

mantI

inner adder
charred tusk
ocean ridge
#

mantis-colors

frosty oriole
frigid trout
#

What is this for?