#ot2-the-original-pubsta
652 messages ยท Page 37 of 1
yeah, they can
oh well yeah by looking it up roblox provides a kind of a game engine
the scripting is lua
but one can make a good api to interact with the world. and then people script in lua to make it function like they want
Lua is good for sandboxing
i dunno, i was just impressed by lua's size
lol, I'm chilling at finish line in a race in crayta with one other player. neither of us want to go through
lua means moon i think lol
so the satellite does make sense
luna means moon. but they may have still got inspired by that
to the moon
it's a moon not a planet
unless I'm mistaken
oh yes I barely read the context
I only knew from Warframe \๐ฉ
it's Luna in a lot of languages, but TIL Lua isn't a made-up name just for Warframe
You'd be surprised how many Warframe words are real
like I think "Syandana" is from another language
Do you create games or trading bots with lua?
no
What than?
Stocks, for example
What the. that doesn't sound right at all D:
Why? I think it is ok
It doesn't sound within the scope of Lua at all
you don't just make independent Lua scripts... or at least I hope not
My friend do that only with lua
What's a good Rust crate for creating animations/visualisation/whatever? Roughly speaking, I just need to make frames from 2d arrays, a pixel per cell (kinda like plt.imshow) and then show them and stitch them into gifs or something
What are you building?
I want to, for fun, implement a visualizer of pathfinding algorithms like A*.
nice
aight
I could have done that in Python, but I want to do so in Rust for performance (I wonder how fast can it be if I push it) and practice
@unreal sigil look what you've done
๐
I did that a lil while ago
then did a maze generation visualiser
and then got the a* visualiser + maze generation
threw them together
bing bang book
amazing
bok
Looks nice!
oh dear
bok
the spelling has left me
I also want to test how A* compares to non-guaranteed-optimal ones
since I know Rimworld doesn't use A* for performance reasons, but instead a more empirical algorithm that isn't guaranteed-optimal
i see
dijkstra's algorithm is a lot simpler than A*, isn't it
yeah
As far as I know Dijkstra's is a variant of A*
IIRC it's basically A* with a trivial empirical distance function
so it doesn't get any speedup by digging in the right direction
https://crates.io/keywords/graphics?sort=downloads is strangely disappointing, maybe I'm missing something
I'm trying to remember my pathfinding knowledge
https://crates.io/crates/gfx
oh, I guess I could just use this
it's a low-level graphics library, though
I'd be basically making my own rectangles
hmm, you know what, I'll start on the algorithm and use something like https://crates.io/crates/image to make the results as gifs
I'll decide later how to show the results in real-time, if I care enough to do so
rust does lack of quite a few libraries.
Rust has lack of many basic functionalities for me
Like WrappingAdd trait in std
I tried to create custom type and it's very confusing
>>> cargo add image
>>> cargo add ndarray
>>> cargo run
Building [==============================> ] 1/66:
๐
relatable
wait
haha car go vroooom
there's a package that allows it
lol
cargo-add or something
at least I'm doing:
[profile.dev.package."*"]
opt-level = 3
[profile.release.package."*"]
opt-level = 3
which should hopefully result in the deps being compiled precisely once
https://github.com/killercup/cargo-edit
it's this, I think
so cargo install cargo-edit
Finished dev [unoptimized + debuginfo] target(s) in 2m 39s
guess that wasn't too bad
2 minutes
huh, I didn't enable the rayon feature, yet rayon still got downloaded and compiled
why
https://docs.rs/ndarray/0.15.1/ndarray/doc/ndarray_for_numpy_users/index.html
oh, at least it has this lmao
ndarray for NumPy users.
Maybe it's a dependency of one of your dependencies
doubt it's a dependency of image
๐
and it's certainly a dependency of ndarray... but I'd expect it to only be so when that feature is enabled
lol, CowArray
How can I contribute to @rustic harbor ๐
!remind 1H do the thing
Your reminder will arrive in 1 hour!
It is also possible to serialize NumPy arrays in .npy/.npz format and deserialize them as ndarray arrays (and vice versa) using
ndarray-npy.
๐
.npz is when you have QWERTZ?
reqeast
damn numpy so cool they have their own file format
yeah
npy but zipped, pretty much.
Okay, joking
I do too, it's called jayson
it looks exactly like json, but it's different
I've been using file handling for a while and now while working on a new project, I thought about which is a better place to keep text(not much schema, mainly something key-value pair like):
- JSON
- YAML
- TOML
- plain old txt
- Redis Cache
- Add another file to the code and add the text in a list/dictionary
It would be awesome if someone could give some insight on this
Interesting
you could also toss it into text columns in sqlite
sqlite is pretty fast when it comes to reading text
for me - nested a lot == json
some general config thing == yaml
ig what really matters is whether this is config or a datastore
for config, a .env file would be my choice
I wouldn't use any text format other than csv or xml for datastore
@radiant socket
Here's your reminder: do the thing.
[Jump back to when you created the reminder](#ot2-the-original-pubsta message)
Source of the Rust file src/quantile/mod.rs.
where's the actual source
wtf is this stub
What programming project should I do using Tkinter?
no method named `min` found for struct `ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>` in the current scope
method not found in `ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>`
note: the method `min` exists but the following trait bounds were not satisfied:
`ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>: std::cmp::Ord`
which is required by `&ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>: std::cmp::Ord`
`ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>: std::cmp::Ord`
which is required by `&mut ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>: std::cmp::Ord`
`ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>: std::iter::Iterator`
which is required by `&mut ndarray::ArrayBase<ndarray::OwnedRepr<f64>, ndarray::Dim<[usize; 2]>>: std::iter::Iterator`rustc(E0599)
aaaaaa
hmm, actually that might just be because f64 really isn't Ord
nice
bigg exponential gradient
try visualizing embedding arrays with different colors - its mesmerizing for some reaosn
sorting algos visualized
--> src\main.rs:13:46
|
13 | let img = scalar_arr_to_image_normalized(arr);
| ^^^ the trait `MaybeNan` is not implemented for `i32`
...
45 | pub fn scalar_arr_to_image_normalized<T>(arr: Array2<T>) -> GrayImage
| ------------------------------ required by a bound in this
46 | where
47 | T: Into<f64> + ndarray_stats::MaybeNan + Clone,
| ----------------------- required by this bound in `scalar_arr_to_image_normalized`
why am I alive, just to suffer?
oh right, I don't need maybenan
maybe
or I do
or do I need a second version of this function just for non-NaN types...
just implement it bro
^
I did
pub fn scalar_arr_to_image_normalized_nonNan<T>(arr: Array2<T>) -> GrayImage
where
T: Into<f64> + Copy + PartialOrd,
{
let low: f64 = (*arr.min().unwrap()).into();
let high: f64 = (*arr.max().unwrap()).into();
let img = arr.mapv(|el| ((el.into() - low) / (high - low) * 256.0) as u8);
array_to_grayscale_image(img)
}
It's not that hard to write code
Even if you don't know how it works
And then leave the code for the next dev to mess with
Even tho uh, it's a single dev project so I'm the next dev
whats yamal?
nothing much to learn in it 
just check out official website ye
Bruh there are pages of info in that
Is there a short and sweet tutorial which has basic concepts
yaml is very complex, I would just look at some example files and guess at it and google what you con't guess at
Oh alright
So
I want to make a settings file for my GUI app
Which is the best file format for it
I would go with .ini or .toml
https://toml.io/en/ I just went through the quick tour
ah thanks :D
so uhh
which python module is suggested for toml
there are many listed on their github page
wow toml is sweet
What is the best way to grow a discord bot
Nono your not wrong
Pog
What do you mean by grow?
Do the admin stuff properly
Readmes, docs, site possibly
Setup issues on github
Contributing guidelines, licenses, etc
I really don't know how MEE6 and Dank Memer blew up
Kids with tiny attention spans and nothing better to do using them
I mean... ๐
There's no way someone will invite my bot to his server, because other bots are far more reliable
Everything starts small
How bots do grow now, when there's pretty much a bot for everything
Chances are if youre developing it solo it wont take off like they did
There are a ton of bots for moderation, therer's even https://www.botghost.com for creating your own small moderation bot
And not only for moderation, you have bots for welcoming someone and to send a message when someone leaves
And a ton of bots for fun things, from memes to games
and even currency to buy roles and such
I can't imagine what does a bot need for someone to invite it
Making a bot with botghost or something link that is not coding/making
I have a team of 3 people
*not sure is that is considered self promo, i delete it it is.
Is this open source
IS THIS OPEN SOURCE BECAUSE THAT API IS A PITA
Pita?
hey, someone's bot was only in 3 servers, and when they posted it on a bot list site, it exploded and grew to 250 in a day
Can I ask for the source of this ot name
Because uh
Self duck has some very interesting sound alike phrases
I just want to know that it's not trying to be an innuendo
This is a question for all ya staff
@wide totem Nope, I even joked about the actual source.
there's a staff-only starboard, basically, except you react with ducks to nominate a message to it, so it's #duck-pond
that wasn't me
Oh yiss, pathfinding is doing nicely
now to make it show progress in realtime
actually, I'm a dumbass and used a heuristic function that's literally worse than nothing, lol
that's why it scans so many cells
there we go
Waiting on a gif
that'll take a while
mismatched types
one type is more general than the other
note: expected type `std::ops::FnOnce<(&std::collections::HashMap<(usize, usize), ordered_float::NotNan<f64>>, &std::collections::HashSet<(usize, usize)>, &[(usize, usize)])>`
found type `std::ops::FnOnce<(&std::collections::HashMap<(usize, usize), ordered_float::NotNan<f64>>, &std::collections::HashSet<(usize, usize)>, &[(usize, usize)])>`rustc(E0308)
sometimes I just don't even
what
#justrustthings
Can you paste the code?
I had similar problems when using generic types
the callback right now is just a stump:
let callback = |g_score, open_nodes, path| {};
let results = a_star_search(SearchQuery {
map: &map,
start: (n - 1, 0),
target: (n - 1, m - 1),
callback: Some(&callback),
});
//...
//definition of that struct:
pub struct SearchQuery<'a> {
start: (usize, usize),
target: (usize, usize),
map: &'a Array2<isize>,
callback: Option<&'a dyn Fn(&HashMap<Position, F>, &HashSet<Position>, &[Position])>,
}
Position being an alias for (usize, usize).
Have you tried to explicitly say which type has callback?
Oh, I solved it by specifying the type:
let callback: &dyn Fn(&HashMap<Position, F>, &HashSet<Position>, &[Position]) =
&|g_score, open_nodes, path| {};
๐
but it's weird this is needed, since it got inferred as exactly this
Like I said
Right, however it looks that Rust compiler is not smart enough
I had similar problems with generic type like
struct SomeStruct<T> {
x: T,
y: [T; 4],
}
I cannot write let x = SomeStruct { x: 0u8, ... } but let x: SomeStruct<u8> = ... ๐ฆ
yikes
oh no, my gif is 0KB
something isn't right
&dyn for<'r, 's, 't0> std::ops::FnMut(&'r std::collections::HashMap<(usize, usize), ordered_float::NotNan<f64>>, &'s std::collections::HashSet<(usize, usize)>, &'t0 [(usize, usize)])
the compiler tells me this is too complex a type for some reason
no idea what that might mean ||\s||
oh dear
is it going to be a 500Mb gif?...
it has been writing for like a minue
huh
no, it's just super slow
and that's on a 128x128 gif, dear god
why does it take dozens of seconds to write a small gif
oh no it just keeps getting bigger
Hope you're happy, because this literally took 2 minutes to write for some reason
something is deeply wrong with the crate I'm using, I guess
heh, something pretty weird happened here actually
the final point got blocked off by walls by random chance
so the algorithm explored literally everything else before pathing through them
(they are a big, but finite cost to traverse)
visualisation of the A* algorithm
pathing from bottom left to bottom right through a random maze
here's a way faster-terminating one
here it had to go through one wall early on
lol
now writing a 64x64 one where it goes through zero walls
I really should figure out why writing frames into a gif is so slow lol
maybe switch to apng or something
oh, I wonder if that's because I didn't buffer the writing, lol
I think it might be writing slower than the gif is showing, lol
nice
profiling Rust under Windows is a pain
time to load up MSVS 2019 to figure out what's so slow
Oh
it's all the gif writing
as expected
but why
W H A T
why does creating a gif require creating and training neural networks
what the fuck
pallete reduction
it's using neural networks for pallete reduction
to write a goddamn gif
๐ถ
like, scary someone would come up with that idea
/// Creates a frame from pixels in RGBA format.
///
/// `speed` is a value in the range [1, 30].
/// The higher the value the faster it runs at the cost of image quality.
/// A `speed` of 10 is a good compromise between speed and quality.
///
/// This is a lossy method. The `gif` format does not support arbitrary alpha but only a 1-bit
/// transparency mask per pixel. Any non-zero alpha value will be interpreted as a fully opaque
/// pixel. Additionally, only 256 colors can appear in a single frame. The palette will be
/// reduced by the NeuQuant algorithm if necessary. Different frames have independent palettes.
hmm
is that like a dependency you're using?
it's image
hmm, let's see what happens if I lower the speed
oh, lol, default speed is 1
maybe... 10?
hold on
so that's only for compression?
you should be able to disable it
actually, that shouldn't even be a problem
if you can pretrain the neural network
when the init call literally clears the network
okay, I don't see any difference in size from setting the speed to 30
which is the max
yes, actually
assert!(speed >= 1 && speed <= 30, "speed needs to be in the range [1, 30]");
(heh, that should have given them a warning to do 1..31.contains(speed) instead)
oh god why are apngs so much faster
argh, not embedding ๐ฆ
this apng took literally seconds to write
using a library with basically no docs that I had to read the source of to figure out how it worked, written by a Japanese student who can barely write English
and it works way faster than the very-well-developed image's gif support
rename to .png and it works when you open in browser
yeah discord client doesnt run them
some time ago ppl abused that to hide malicious imagery behind the first frame which encouraged opening in browser
while apngs are nice, i have how awfully defined the format is. you have to manually read specific blocks to distinguish from a png.
also
why not just make a mp4?
I'm not sure what's a good way to do so with rust
the problem with apng is that it looks like I'll have to change the source to edit, say, the framerate
ah, rust. opencv works flawless in python lol
it's hardcoded at 3:
fn write_fc_tl(&mut self, frame: Option<&Frame>) -> APNGResult<()> {
let mut buf = vec![];
buf.write_u32::<BigEndian>(self.seq_num)?;
buf.write_u32::<BigEndian>(frame.and_then(|f| f.width).unwrap_or(self.config.width))?;
buf.write_u32::<BigEndian>(frame.and_then(|f| f.height).unwrap_or(self.config.height))?;
buf.write_u32::<BigEndian>(frame.and_then(|f| f.offset_x).unwrap_or(0))?;
buf.write_u32::<BigEndian>(frame.and_then(|f| f.offset_y).unwrap_or(0))?;
buf.write_u16::<BigEndian>(frame.and_then(|f| f.delay_num).unwrap_or(1))?;
buf.write_u16::<BigEndian>(frame.and_then(|f| f.delay_den).unwrap_or(3))?;
you could just write images and then call ffmpeg in a subprocess
these 1 3 are
20 delay_num (unsigned short) Frame delay fraction numerator
22 delay_den (unsigned short) Frame delay fraction denominator
according to the specification
or maybe there are ffmpeg bindings
there are
but they have 0 docs
and I don't really get how to send frames into the stream created by them
hmm, there are opencv bindings
yeah i just found this: https://docs.rs/opencv/0.8.0/opencv/videoio/struct.VideoWriter.html
API documentation for the Rust VideoWriter struct in crate opencv.
heh, same
seems simple enough pub fn write(&mut self, image: &Mat) -> Result<()>
(i say with almost 0 knowledge of rust)
x = msgbox("is awesome",0+64,"Python")
You all = y'all we all = 
@thorn eagle found this pretty funny
(continuing from #python-discussion, if people even want to talk about it)
I'm thinking TS is more a subset of JS since TS can be converted to valid JS
Or at the very least, none of them is sub or super
yeah
anything that's valid syntax in JS is valid TS
and if you turn off type checking (that's possible), it will compile to the equivalent JS
This won't work on all filesystems iirc
some only allow for 3 letter extensions
that's why we've got jpg
up to 3 letter, I mean
Since when?
Took a while but I might actually be motivated to write Discord bots now
since when what
The table of contents
Fair while I believe
the update was like
at least several months ago I think
Wasn't the table of contents always there?
I don't remember it being that nice though
Ah yeah they did change things visually and whatnot a few months ago
and changed up some other stuff
I was looking around at the Discord modules and they don't seem very organized.
I don't like how everything's on one page tbh
ikr
best docs
Suggest more topics here!
invisibility.
to rob stuff?
To tickle random people in the street
teleportation sounds cool.
upsidedown in Australia
the power to have any super power B)
yess
well... tbf there are some nice python docs too
but the official site doesn't even have dark mode 
the rust book? it does.
python official site
ah
and.... java and c++ official docs are.... 
dark reader is dope
I haven't tried dark reader. Honestly I forget reader is an option most of the time.
tbh I don't like dark reader
it makes normal pages look weird
like Google, for example
lol
dark reader only has contrast, sepia, brightness
oh and grayscale too
i can't make them blu-ish 
I might check that out, thanks.
I seem to remember an extension that let you enforce your own stylesheets on sites.
Maybe I am misremembering though.
stylus :D
but yeah, dark reader is much easier to use
you don't need to make your own css
Neat.
Dark Reader doesn't appear to work on internal Firefox pages though.
I keep a task manager tab pinned as first tab and that is blinding
Reload the page maybe
no dice
no worries
alt+shift+d is an extension I do not have
but I opened a new tab with about:performance and it didn't work there.
I imagine the internal pages work differently.
no, the key bind of toggling dark reader is alt+shift+D iirc
oh I see. sorry
.topic
youtube.com is
haha that shortcut bugged out.
No extension does
For better or for worse
memory allocation of 1048576 bytes failed
error: process didn't exit successfully: `target\release\algorithm_visualisation.exe` (exit code: 0xc0000005, STATUS_ACCESS_VIOLATION)
๐ฆ
also, I think my viewer can't open 15-MB apngs lol
nevertheless, this works if you open it in browser
you making qrcode gen
lol
hmm nvm that doesnt look like one i think
open the original in browser
the dijksta one got me a memory error
that maze looks like total pain though
since I'm holding all the frames in memory before writing them
and that takes, uhh
some work
why'd I look at this thinking that was a red.. frog?
oh no the frog is spreading
Ye
D:
there are some problems with storing all the frames before writing them
it's about a megabyte per frame
lol that almost looks like a phone number
Call it
575 is one of the area codes in our state
2.9GB for 2900 steps ๐ฉ
still better than the apocalyptically slow gif
but I should switch to a video or something
yup
but then they all get into a 15MB apng
magic
lemme convert them to a mp4 with ffmpeg really fast lol
lemme convert them to a mp4 with ffmpeg really fast lol
?
Hi @bold dove
Ooh, nice
@bold dove hasnt replied to me for 2 months
wow
argh, I don't get ffmpeg
that sucks
ffmpeg -i "progress0.apng" -f apng -i progress1.apng -filter_complex "[0:v][1:v]vstack=inputs=2[res];[res]fps=10" output.mp4
let's see if this works...
wtf, was it 3 frames per frame earlier or something?..
ooooh
fps duplicates/drops frames
it doesn't change the duration of the video
oh, I hate this a lot
how do I actualy speed it up then?..
and if I do setpts, it instead skips frames ๐ฉ
there we go
uhh, lemme change that to hstack...
Now behold.
Tell me why I tried to scan this as a QR code
first is A*, second is dijkstra
๐
no?
wdym?
im on phone and its really weird
I reposted it because hstack is probably easier to view than vstack for most
huh
it's just an mp4, wtf
i downloaded it to play on my phone locally
okay, lemme go an avi
and it says unsupported file type
something's up
lemme open wit vlc
oh i don't have vlc
lo
oh wow, that's a lot bigger
argh
not embedding ๐ฆ
let's go with, uhh
I dunno
mkv?
mkv doesn't embed either
!wl list file_formats
โข .flac - embeddable audio format
โข .gif
โข .jpeg
โข .jpg
โข .m4a
โข .mov
โข .mp3
โข .mp4
โข .mpg
โข .ogg
โข .png
โข .wav
โข .webm
โข .webp
All of those embed
nice
ok this one works @echo fern
webp incoming, I guess
so the right side one is Dijkstra's?
frame= 1495 fps= 44 q=-0.0 size= 0kB time=00:01:39.60 bitrate= 0.0kbits/s speed=2.95x
0kB for 1495 frames ๐
(really, it means "less than 128")
4.7MB
not terrible, but worse than mp4
also, lmao, discord can't load it for me
so much for embeddable
okay, so now I need to figure out how rust-ffmpeg works
that's going to be terrible, I can tell
there are basically no docs, and only a few examples
e
I think I'd need to basically dig through docs for the C API of ffmpeg
that's impressively horrible
maybe opencv for rust is nicer?..
bruh
it feels like both are bad tbh
I dunno if I can do an even more aggressive heuristic function
this one is eucliden distance
oh boii it's happening
is it allowed to logout of discord using js code in the dev console?
gusy
guys
i have a question
for any of you who know a tiny bit of html
you know the a tag and its href attribute
do you say href as "aych-ref" or "her-ef"
i say it as aych-are-eee-ef
AbstractNonJavaNameInterface
pfft
@upbeat sandal is there a way to figure out the function that called a function
I don't believe that there is.
inspect.stack(context=1)```
Return a list of frame records for the callerโs stack. The first entry in the returned list represents the caller; the last entry represents the outermost call on the stack.
Changed in version 3.5: A list of [named tuples](../glossary.html#term-named-tuple) `FrameInfo(frame, filename, lineno, function, code_context, index)` is returned.
But not sure how to convert that to a function object
!e
import inspect
from pprint import pprint
def b():
print('b called')
pprint(inspect.stack())
def a():
print('a called')
b()
a()
@upbeat sandal :white_check_mark: Your eval job has completed with return code 0.
001 | a called
002 | b called
003 | [FrameInfo(frame=<frame at 0x7fbab858ee40, file '<string>', line 6, code b>, filename='<string>', lineno=6, function='b', code_context=None, index=None),
004 | FrameInfo(frame=<frame at 0x7fbab858e580, file '<string>', line 10, code a>, filename='<string>', lineno=10, function='a', code_context=None, index=None),
005 | FrameInfo(frame=<frame at 0x7fbab858e740, file '<string>', line 12, code <module>>, filename='<string>', lineno=12, function='<module>', code_context=None, index=None)]
@wide totem so you're trying to retrieve the function that called the current function?
looks like it would be inspect.stack()[1].function, though that returns the name of the function and not the function itself
so you'd have to look up the function in the symbol table
What is the symbol table?
Also what if one has two functions of the same name
Like in cogs or classes
brb
a special dictionary where every value that's accessible in a given scope is stored.
two functions can't have the same name in the same symbol table. the second would overwrite the first.
Docs?
!e
import inspect
from pprint import pprint
def b():
print('b called')
pprint(globals())
def a():
print('a called')
b()
a()
@upbeat sandal :white_check_mark: Your eval job has completed with return code 0.
001 | a called
002 | b called
003 | {'__annotations__': {},
004 | '__builtins__': <module 'builtins' (built-in)>,
005 | '__doc__': None,
006 | '__loader__': <class '_frozen_importlib.BuiltinImporter'>,
007 | '__name__': '__main__',
008 | '__package__': None,
009 | '__spec__': None,
010 | 'a': <function a at 0x7fc62ce62f70>,
011 | 'b': <function b at 0x7fc62d0bb040>,
... (truncated - too many lines)
Full output: https://paste.pythondiscord.com/tedocunuyo.txt?noredirect
globals() returns the global symbol table.
I've given up
and implemented it via writing every frame as a png into a temp folder
and then making ffmpeg make me a video from them ๐
but nevertheless, it works now!
1 MB video for a 2800-step pathfinding
You are not allowed to use that command here. Please use the #bot-commands channel instead.
AbstractSingletonProxyFactoryBean
is black a good linter?
Yeah
ok
think black tries to make changes
running it
while flake8 only flags
Black is a formatter
damn its good
It gets everything that Flake8 complains about
nice
@viral hare because Flake8 and black are two different things
Flake8 is actually linter
Black is a formatter
except line lengths though
Perhaps you need to create a configuration file for black then
ok
You can customise black to be pep8 compliant with line lengths
I think by default line length is 88
I've enabled diagonal movement and now A* is really ripping
@echo fern what is this?
wut dat
pathfinding (graph search, more generally) algorithms
ok
I USE TABS
@echo fern that's 2 mazes side by side?
left dijkrsrtnrseyaokvceaia's and right bfs?
oh you said what you used
w<
same maze by a* and dijkstra
what are your guys favorite mobile games/genres
Reject mobiles, return to PC's

today i learnt that discord renders gifs while im in the settings page
bee
I wanna speak bee as well. Bees are cute โค๏ธ
Yes true
I had some closeup photos from our beehives as well but I'd probably need to spoiler them and it's easier to do that on computer
Hm, I also have photos and short videos of a bee on my hand. Bee fell into a pool and I kept it on my hand when it was cleaning itself from moisture
As I said, I'd need to spoiler them and it's not easy to do on the phone. Some people feel uncomfortable with insects, and closeups are even more of a trigger
the channel name in cringing me out 
We have two hives since last year. But we got them late and didn't get any honey for ourselves
Why? Spaces all the way. But use your ide to convert tab to 4 spaces
imagine pressing space 4 times instead of tab
That's so annoying
That's the last thing I'll want to do
Well, obviously we got them for something XD
Silicon Valley did that while trying to make spaces vs tabs war joke. It was so annoying to look at :x
Because the spaces vs tabs isn't about pressing multiple times vs pressing once. It's about copying code and stuff. Tabs don't always show in browser etc, especially multiple ones. But their width can be configured however the programmer wants
i use 8 spaces for tabs, think me
The only time when I actually press space multiple times is when I write code manually on discord or SO
how did you achieve this? ๐
Easy. Use Cyrillic s for second c. Similarly with o you can use Cyrillic and even Greek omicron (so you can have 2x3 combinations)
We once covered it in #esoteric-python and once someone trolled in #bot-commands that "their python broke" by using zero-width character for similar stuff in strings
yeah ik
yes, i`m from a country that has cyrillic letters and i did it with cyrillic letters s and o
thx 4 suggesting omicron
and that was not a 0 width char where there were spaces
oh no. this again
it was a space and alt+255
I have PTSD from that one program I wrote
what
lol wut
should every function have a definition in haskell?
Basically this replaces with ASCII characters with characters that look like ASCII characters
lol
it was... really buggy and this code kind of works
it curses things, yes?
async def mะฐแฅีผ():
with open("input.txt", "r") as f:
t = ๊ฎฏ๐าฝะฐีผ(f)
าฝีผ๐ฉ๊ฎ๐ฃาฝ๊ฎช = ๐ฃ๐ฃ๐ช๐ะฐ๐ฑาฝ(t)
๊ฎฏแะฐ๊ฎ๏นmะฐั = ึาฝีผาฝ๊ฎะฐ๐ฝาฝ๏นmะฐั(าฝีผ๐ฉ๊ฎ๐ฃาฝ๊ฎช)
with open("output.json", "w+") as f:
json.dump(๊ฎฏแะฐ๊ฎ๏นmะฐั, f, indent=4)
with open("mod.txt", "w+") as f:
with open("original.txt", "r") as o:
๊ฎาฝ๐๐ฃ๐๐ฉ = mแ๊แฅึ๐ฃ(o, ๊ฎฏแะฐ๊ฎ๏นmะฐั)
print(๊ฎาฝ๐๐ฃ๐๐ฉ)
f.write(๊ฎาฝ๐๐ฃ๐๐ฉ)
yes. lol
and is cursed itself, yes?
yep
it was a headache getting it to work
_ _
how i wrote this: _ _
Did you know you can combine emoji
wdym
โ
^ This is called a Zero Width Joiner (ZWJ)
aha
write this in chat: _ _
how
๐จโ๐ฆฒ
i mean how this
edit message, type first bit, paste character, write second bit, do space, do character again, finish!
helloโซworld โซ
oh, I finally did it
lolโซfghjโซssdvfb
mhm
yes
dunno
Yep. And the gender-neutral emojis were supposed to be here ages ago but emoji makers just decided to leave non-specified person emojis as male. Because apparently default masculine doesn't only apply to some languages but to pictograms as well :x
The skin-coloured person emojis are also from combining characters.
You can also combine regional indicators for flags lol
how?
๐บ๐ธ
like there are separate regional indicator lretters
U + S
reg indicator U + reg indicator S
:regional_indicator_u: :regional_indicator_s: without the space
lol
If you're on Linux, you also have access to the Compose Key... Not sure how it works on other OS's
๐บ ๐ฆ
no spaces
๐บ๐ฆ
๐บ๐ธ
yes
i know
โ
๐บ๐ธ
รพ
how u do sm0l
put it in a strikethrough
backslash?
:)
-=-
__ = ยฏ somehow
=
poland
๐ดโโ ๏ธ
_-ยฏ
How
And

๐ฎ๐ท
๐ฎ ๐ณ
dia
\๐ต
Yep, I did it as indicators, not :flag_pl:
oh
if u put a backslash before the characters
Ie. ๐ฎ๐ช
how do you do that 
I E, not IR :P
oh ie
RTL character
hmmm
tell meh 
ยท
scroll up
But I told you! I'm better than zee! But you're ignoring me D:
ooh, wait i dont understand what this means
idk whats RTL character D:
well right to left from what it seems
yes
where do i get it
lol
\U+202B
eh google showed this
now how do i use it
._.
paste
i cant copy
viman you're on Linux, right
You are not allowed to use that command here. Please use the #bot-commands channel instead.
oof
ctrl + shift + u, then type 202B
โซ
thats hella useful
ikr
yep

WM, i3
welp. idk if you're able to set up the compose key
Here's how to bind the compose key to caps lock in i3wm.
Follow this, maybe
ok โซ later
lol
ghost ping? >:(
where
someone pinged me
doesn't seem like it ยฏ_(ใ)_/ยฏ

ัพ
http://unicodesnowmanforyou.com/ interesting....
oh yes, that's neat
โ
sad
\โ
Yes
\โ๏ธ
Press alt and f4 for free spiff coin
no
EasterRiddle
.riddle
Gives a random riddle, then provides 2 hints at certain intervals before revealing the answer.
EggDecorating
.eggdecorate [colours...]
Picks a random egg design and decorates it using the given colours.
EggheadQuiz
.eggquiz
Gives a random quiz question, waits 30 seconds and then outputs the answer.
EightBitify
.8bitify
Pixelates your avatar and changes the palette to an 8bit one.
Emojis
.emoji <emoji>
A group of commands related to emojis.
.riddle
You have 10 seconds before the first hint.
none
Nobody got it right...
You have 10 seconds before the first hint.
oh lord
Nobody got it right...
lol jokes on you closing windows for me is mod + shift + q
what the heck is with the easter stuff
.riddle
You have 10 seconds before the first hint.
She lost
Nobody got it right...
?
I am also not happy with the current #ot name:
Suggestion: #ot2-intending-with-tabs-but-IDE-changes-them-to-spaces-automatically
.battleship
#ot2-intenting-with-newlines
you monster
Kk
Indentation with periods
Game Over! @hazy laurel won against @jovial island
TheHive#3899's Board:
:stop_button::regional_indicator_a::regional_indicator_b::regional_indicator_c::regional_indicator_d::regional_indicator_e::regional_indicator_f::regional_indicator_g::regional_indicator_h::regional_indicator_i::regional_indicator_j:
:one::fire::fire::fire::fire::fire::fire::anger::ocean::fire::ocean:
:two::fire::ocean::ocean::ocean::fire::fire::fire::anger::fire::anger:
:three::fire::anger::ocean::ocean::ocean::ocean::anger::ocean::fire::ocean:
:four::anger::ocean::ocean::anger::ocean::ocean::ocean::ocean::fire::anger:
:five::anger::ocean::ocean::ocean::ocean::anger::ocean::ocean::ocean::ocean:
:six::fire::anger::ocean::ocean::ocean::ocean::ocean::ocean::ocean::anger:
:seven::fire::ocean::ocean::anger::ocean::ocean::ocean::ocean::ocean::ocean:
:eight::anger::ocean::ocean::ocean::ocean::ocean::ocean::anger::ocean::anger:
:nine::ocean::ocean::ocean::ocean::ocean::ocean::ocean::ocean::ocean::ocean:
:keycap_ten::anger::ocean::anger::ocean::anger::ocean::ocean::anger::ocean::anger:
Cypheriel#3837's Board:
:stop_button::regional_indicator_a::regional_indicator_b::regional_indicator_c::regional_indicator_d::regional_indicator_e::regional_indicator_f::regional_indicator_g::regional_indicator_h::regional_indicator_i::regional_indicator_j:
:one::ocean::anger::ocean::anger::ocean::anger::anger::fire::fire::fire:
:two::anger::anger::anger::ocean::ocean::ocean::ocean::anger::ocean::ocean:
:three::ocean::ocean::ocean::ocean::ocean::anger::ocean::ocean::ocean::ocean:
:four::ocean::anger::ship::anger::ocean::ocean::ocean::ocean::ocean::anger:
:five::anger::ocean::ship::ocean::ocean::anger::ocean::anger::ocean::ocean:
:six::ocean::ocean::anger::ocean::anger::ship::ship::ship::ocean::anger:
:seven::ocean::ocean::ocean::anger::ocean::anger::anger::ocean::ocean::ocean:
:eight::ocean::ocean::ocean::anger::fire::fire::fire::ship::ship::anger:
:nine::ocean::ocean::ship::ship::fire::fire::anger::ocean::anger::ocean:
:keycap_ten::ocean::anger::ocean::anger::ocean::anger::anger::ocean::ocean::anger:
:)
Hey
Hi.
btw its your bday tomorrow r8?


