#🪅-progaming
1 messages · Page 87 of 1
zip
rosie will choose better naming
WHY DO YOU HUSK EVERYTHING
whats wrong with this
chain
what else was there
oh yeah flatten
i think thats the last one
ok it think flatten will take a while
ill do it tomorrow
ok this is what i have now
i moved peekable to adapters
i think thats a nice collection
might add max min find any all position sum product???
but these consume the iterator so theyre not adapters
now i wanna quickly make x..y call Iterator::range
alright that was pretty easy
?remind 12h foreach should turn the iterable expr into an iterator first
Alright @valid jetty, in 12 hours: foreach should turn the iterable expr into an iterator first
good night im exhausted
i dont sleep for 2 hours every night
3 hours might as well be 2
and 4 hours might as well be 3
rosinga
oh rosie my rosie
annoyin
swift unable to type check
sometimes I need to test my changes then I get hit with something unknown
how yummy
@formal belfry it’s so fire
Protokorn
korn
1:39 is not a semi decent time
bogos binted
bogos binted
relative to rosies normal eep time it is
Much better
ngl i wanna pr something like that so badly
yes lmao 😭
struct Config {
retries: u8,
username: String,
silent_mode: bool,
timeout_secs: u64,
ssl_enabled: bool,
update_interval: u32,
cache_path: String,
kill_switch: bool,
startup_script: Option<String>,
}```
struct Config<'a> {
clock: u64,
pid_state: u8,
list_path: &'a str,
unlocked: bool,
stream: &'a [&'a str],
pull_state: u8,
literal_secs: u64,
user_path: &'a str,
synced: bool,
sys_path: &'a str,
unlatched: bool,
con_async: bool,
key: &'a str,
single_stream: bool
}
mods are asleep quick post structs
good
death to rust
long live memory unsafe programming languages such as C
indeed
hes just a crab what did he do to yall 😭
@valid jetty, <t:1747960748:R>: foreach should turn the iterable expr into an iterator first
yeah
rosie installing macos slop
im on ventura
the spotlight search is so unreliable
i wanted to try something else
and raycast also gives you clipboard history
why in typescript can you assign number to {} and {} to object, but not number to object
this has an odd effect
const a: {} = 5;
const b: object = a;
if (typeof b === "number") {
// b is narrowed to never
}

the world if typescript had decent optional chaining
Allowing {} to be used as object is an intentional compatibility hole since object didn't always exist, so people used {} as the next-best thing.

why no option
the world if typescript wasn’t just missing a shitton of things in general
I used swift and realized how terrible ts can be sometimes
{} is essentially almost any
not really though
it's more like unknown
it doesn't assume properties exist like any
true
and you also can't assign it to whatever type you want
it just has a loophole for object
fres as! Freslet
the object type is just evil
boolean Boolean string String
i like t he way unknown and {} | undefined | null are distinct
i realised typescript is not the ultimate language for type safety anyway but maybe i should try using go for things i abuse typescript for instead sometimes 
@formal belfry implement this when

where is __func__
maybe in the _wassert?
this doesn't work with unknown
not a macro
export function isEmpty<T extends {}>(obj: T) {
for (const key in obj) return false;
return true;
}
``` surely
yeah, unknown be undefined and key in void 0 errors
at least... i would find it weird for it to behave differently from Object.keys(...).length
it doesn't
also it has a compile error with unknown but not with {} | undefined | null
@valid jetty how do i make a programming language and a transpiler for that language
it will be called Languagemasu
transpiles to javascript
dream up syntax and then go from there
written in blazingly fast Python

you forgot a curly brace
wait
NO DONT MIX THEM
just swift but with a different name
nop
omg no thats so cursed
how is that cursed
if (x) {} else y
``` NO
so good
i use brace when multiple lines
though ig that is weird because the else also has multiple lines
that foreach is multiple lines
oops, for some reason i just did the in operator, not the for..in
if (typeof obj === "object")
for (const key in obj)
if (Object.hasOwn(obj, key))
return false;
else
for (const _ in obj)
return false;
i find this confusing to look at
GUHH
the lore behind me not using braces is i was working on a codebase which didn't use them
and at the time i wanted to use a better code style for my own projects
so i adopted something more convensional
and also stopped doing braces when unneccessary

so put both in curly 😭
This doesn't parse like it looks like
ohh
yeah
that's the issue
that'll be why i instinctively do it
i have been doing brace warcrimes for a few years
no braces also just straight up can be confusing
if (x)
do_thing_a();
do_thing_b();
``` b will run unconditionally
i only use when they're not confusing
its just kinda really confusing
when you press ctrl+s (hopefully) the formatter corrects it
logic errors like that shouldnt be left up to tooling lol
i mean you are always gonna run your code through tooling or it's not gonna be very useful
you're gonna have to type check your typescript if you actually want to take advantage of the language and you should probably also run eslint whenever you do that
there's probably an eslint rule ffor this
also if you're doing single line it's kinda ugly to do
if (thing) { return true; }
for 2 minutes and 41 seconds i was excitedly waiting to see a demonstration of lazy iterators and i did not get one
or i am stupid
but where do i see theyre lazy
also arent all iterators lazy
or is ur point that iterators work at all not that theyre lazy
no they are lazy
no
beforehand, foreach loops literally created indexed for loops internally
this can yield unindexable things
the whole foreach construct here is showcasing that
before, foreach loops used to be
for x in y {
$dbg(x);
}
// desugars to:
{
__idx_x := 0;
__iter_x := y;
for ; __idx_x < __iter_x.__len__(); __idx_x += 1 {
x := __iter_x[__idx_x];
$dbg(x);
}
}
``` now they are
```rs
for x in y {
$dbg(x);
}
// desugars to:
{
__iter_x := y.__iter__();
while _, __value_x := __iter_x.next() {
x := __value_x;
$dbg(x);
}
}
insane
ok cool it works with iterators now
true
@valid jetty bestie
hii

@hoary sluice THIS MAKES SEMANTIC SENSE NOW
lexer := Lexer::new(args[0]);
tokens := [Token;];
for token in lexer {
tokens.push(token);
}
for token in lexer
or heck even this
this is beautiful
what's collect do
look at this iter method
fn Lexer::__iter__(Lexer self) -> Iterator<Token, Lexer, SingleEnded> {
return Iterator {
env = Box::new(self),
next = Lexer::next_token,
next_back = nil
};
}
to list?
yea
@valid jetty does Elle have immutable arrays
do
also add visibility keywords whenn
after i rewrite modules
@valid jetty make Elle gitbook wiki
Rosie insane
starlight docs for elle soon
@frosty obsidian teach me all of astro instantly
its not hard man
I don't like html or css
well unfortunately thats what websites are
wing memorized every single css rule
@valid jetty how
fuck around and find out
bweh
accidentally unplugged os drive while PC was running
oop
oh the fans are getting extremely loud
lmfao

hiii @valid jetty
no
for each token in the lexer, do this
this is such an unnecessarily complex function signature
maybe i named these wrong
instead of into_iter and iter like rust, i will name them iter and iter_ref
because i dont put as much of an emphasis on borrowing
idk thats probably a neater signature
slightly
i just realized all of this is gonna take like 12 years to write tests for
at least i have next week off school 😭
i think i accidentally corrupted the drive @valid jetty
fsck from util-linux 2.41
e2fsck 1.47.2 (1-Jan-2025)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/sdb
The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem. If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
or
e2fsck -b 32768 <device>
/dev/sdb contains `DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x3ff,255,63), startsector 1, 1953525167 sectors, extended partition table (last)' data
thats probably not good

type safety

it's so you can do export default defineProvider and get a clear error if you pass the wrong type
@valid jetty youre playing https://youtu.be/hiNoTmsrT2s
Niko & @Chunkz guess who is lying about their language from around the world! vs http://instagram.com/p1wiwi
Check Out my Brand New Sweet, Shades, Out Now in a store near you!
https://shadesbyniko.com
NDL Clothing: https://shopndl.com/
Follow my Instagram- http://instagram.com/niko
Follow me on Twitter- https://twitter.com/NikoOmilana
Follow...
made better
Debian devs so smart
the live boot USB doesn't even have the boot repair pre installed
it requires internet access to add the repos and stuff

wdym the image contains many packages which you can install without internet
at least if you use DVD iso
is that even an official debian package
yes because you used the netinst iso

google, i dont think these are bitwise operations
@valid jetty hikii
I think the article worked you
Yes they are. Deal with it
@valid jetty @valid jetty
this article is going to work you...
@valid jetty how am i supposed to learn a language when bala means child and baka means frog
😭 😭
this is so unfair you get this
and i get this
@native spruce how can i make a systemImage next to a text
context?
yeah that's usually what I do if I want an image
i'll try
how did i even learn swiftui
I learned it by trial and error and constantly starring at it
@formal belfry explain
@valid jetty find whats wrong
what is my big ball
Rust, thats whats wrong
singular
also what font is that
nop
im gonna gatekeep it until you accept rust as objectively the only programming language
(its maple mono)
maybe i did the same
i know i struggled a bunch
u can tell by my first apps having titan sized contentview
goood font
tiramistheme
i should make a colour palette like catppuccin
@formal belfry are you darwin
idk
oh yes
not in my connections or anything
@venbot
@native spruce how the fuck do i do it
?
the thing with the icon
do what
with a Text
Please explain
i want to make like
Start organizing your files by pressing (systemImage next to it)
nono
a button with a label inside
the plus above is the button
wait actually
you gave me an idea
a button with a label would be nice honestly
this isnt the most ideal way to do it
it gets super complicated
yeah
how do i do this
u should experiment maybe lol
you put an image in a button, so
therefore a label can also go in there
so Button {
} label: {
Label("ball", systemImage: "water")
}
oh dang it works
anyways
how can i fill in this empty
what should i add
i'm making an app where you have everything organized
to organize your files in an efficient way
brainstorm it
explain
get an idea on what you want it to look like
for example I made a console app recently, and i wanted to show a list of logs
i want my app to have folders, which you can customize the icon and do what you want with them and also a folder created in your mac called "Syne" where you have all your folders in finder
someone suggested me to do this
@real badger
Maybe you should try to implement that functionality first before diving into the ui
because the ui will take up most your time
true
LMAO self.next(1)
I made this ui after I figured out how to do logging
^
btw we get sooo much more than just this
@real badger is this what you suggested
learn how to replace icons
there are tools to automatically hover over a word in japanese and insert it into an anki set with the sentence and website it came from aswell as audio and a dictionary definitions
100% efficiency jp learning is insane
sentence mining is insane
AJATT is insane
nop
whats wrong with that
i want next(2) sometimes
i don’t get it
look at the return type
again what’s wrong with the return type, doesn’t that just hold the Ok type?
yeah well theres 70 million people learning japanese and im the only person learning kazakh
the "how you want them" was funny @native spruce
it returns (TokenKind, TokenValue) instead of Token
..that’s the issue ?? 😭
yes
probably because i copied it from you
lmao
but doesnt ur token have location in the struct
yes
yeah it supports markdown
consume functions just return kind val and then that’s used along with location to construct the final token
it used to make sense when i wanted tokenkind and value without location, but now Token doesnt have location and i use Located<Token> for it
so Token is equivalent to the tuple
@valid jetty how to make use statements not execute everything thats in the other file
probably cant right
just gotta not have global expressions
well that’s a problem with the way you evaluate things
@native spruce
you should try it on your own, figure out how it works by googling and such or reading how mac icon replacements work
alright
well i mean depending on how eagely set it up there are things to execute
what 😭
yes i just need a main function
anyway this works now
btw if you wanna allow recursive imports
set the current dir to the parent dir of the file being imported
and then set it back after
that way when you import tests.foo.functions, it will see ./ as tests.foo and not the original main file
isnt that gonna throw an error
why would it throw an error
cause it couldnt find the original file
@valid jetty hows elle
make that file import things relative to it
it’s good !!! i just recently implemented lazy iterators
woew
are you calling them lazy iterators cause i asked if iterators can be non lazy
or because there are non lazy iterators
there are non lazy iterators i guess
oh wtf thats not what i expected
i just realized youre in tests/use.icy
imports are relative to Cargo.toml
is that because the import is relative to where you invoke the interpreter from
it should be relative to the parent dir of the file being imported/ran
yea ik
i remember getting so confused over this lol
not the concept itself
but the implementation
i do this before "importing"
im gonna vibe code this
then fixup
why 😭
this is actually a really bad problem because you need this to work sometimes but not other times
$assert(~a == ~65535, "~a should equal ~65535 but it is {}".format(~a));
im guessing everything is gonna implode in 2 weeks
lmao
~a should be 65535 on tuesdays or what
assert takes a bool as its 0th arg, which means the expr passed to assert has bool as its param that literals should be interpreted as
that cascades down the ast to the 65535
and makes it believe it should be a bool literal
sometimes you want this behavior though
so what i did i guess, is just, compile lhs with the ty from the funcall, then compile the rhs with the lhs type
which means it still breaks if i do ~65535 == ~a 😭
but idk how to account for this because there are times when you want the cascading behavior of the type, and others when you dont
maybe i just ignore bool as a possible type for the literal if its not 0 or 1
what does this mean
(bools are encoded with numbers)
if i have
fn foo(u8 x) {}
fn main() {
foo(34);
}
``` the compiler knows to interpret 34 as a u8 literal and not the standard i32
bool is not
0 is false, anything that isnt 0 is true
if you do foo(true) will it say 255
no it will say 1
then how do you get 65535
because this is the test
let a = 0xffff;
$assert(~a == a ^ -1, "~a should equal xor a, -1 but it is {}".format(~a));
$assert(~a == -a - 1, "~a should equal -a - 1 but it is {}".format(~a));
$assert(~a == ~65535, "~a should equal ~65535 but it is {}".format(~a));
$assert(~a == ~0xffff, "~a should equal ~0xffff but it is {}".format(~a));
$assert(~a == -65536, "~a should equal -65536 but it is {}".format(~a));
$println("All `bitwise not` tests have passed!".color("green").reset());
the compiler is not supposed to think its a bool
but it does because the type from the assert's 0th arg cascades down
to the literal
this only happens for literals
what is a 0th arg
because they inherit their types from the parent type
fn io::assert(ElleMeta meta, bool condition, string message) {
if !condition {
let parsed = message ?: "No additional information was specified.";
io::eprintln(
meta.caller, ": Assertion '", meta.exprs[0], "' failed.\n",
parsed.color("italic").reset()
);
libc::abort();
}
}
to the caller, the bool condition is the 0th arg
so any literals passed to that parameter at the call-site will be interpreted as a bool if none of the ast nodes broke the ties with the arg
are you 0 indexing args
and as binary ops preserve the parent type to the inner type, the bool carries all the way down
..well its a Vec
its a lot less confusing to say first arg
i still dont understand this
assert takes a bool as its first arg, which means the ?????????????????????????????????
essentially, at the call site
fn foo(u8 x) {}
fn main() {
foo(34);
}
``` the compiler sees 34, and its normal instinct is to think "oh, an i32 literal" but because its smart enough to see that its being passed to an argument of type u8, it thinks "oh, this is actually a u8 literal instead" and doesnt do any conversions, just interprets 34 as a u8
similarly, assert takes a bool, which is considered a numeric type
????
essentially
when compiling the binary operation
you can have a "known type"
or a type that the expression should turn out to be
that is passed down recursively through any binary operations that occur
so, as the "known type" is bool,
when compiling the right hand side, ~65535, it passes the bool down further
and the bitwise not does the same
so it ends up seeing "65535, the known type is a bool, ok so this is a bool literal"
and whats the problem
like ok 42 == 37
but ~a and ~65535 should be equal either way
no?
no because ~a is interpreted as i32 as thats the type of a
because a isnt a literal
its a variable
the final equality becomes a bool
ur checking 0xffff == true?
im checking 0xffff == ~true
that will cause so many issues
oh
it will not
why does type inference precede over unary ops
it doesnt, it only does for literals lol
it will just ignore bool as a possibility for what type the literal should be interpreted as, and probably end up interpreting it as i32 which then can be casted up or down to the correct type
simply
it does all kinds of other inferences for literals
like for example if a function returns u64 and you do return 39; it will interpret 39 as a u64
oh
realistically this is not true
why is use like the biggest commit i did in months
bool is not a 1 bit type its 1 byte type
so its more like doing 0xffff == ~(0xffff & 255)
lmao horror
io soon™️
if i execute smth in the repl it should take the working dir as the reference dir right
why monday
maybe sunday
i have to get my diploma thesis running
before monday
(it works (not on nixos tho) but it needs to run on a raspi)
rosie when she finds out she can send a screenshot instead of a 1 second video
smh
oh
why did it put a use statement inside a function
thats so cursed
never vibe coding again
LMAO
whats the point of vibe coding anyway
like yeah you save time but you lose the satisfaction
you should be splitting it up into multiple commits
there is no satisfaction at 11 pm
thats cursed
and first letter uppercase which is 💀
i dont have a way of differentiating parser errors and interpreter errors other than interpreter doesnt put . at the end of the error lol
i added this error recently
(it used to be a todo!())
this one also used to be a todo
you should enable a thing with debug_assertions that puts "this error was generated in x"
at the bottom of the error
or something
probably
what is claude 4 about
lmaoo
there are no compiler errors in javascript
and i dont think a lot of vibe coding is done outside of javascript
/run ```js
(
@fleet cedar I only received js(18.15.0) error output
/piston/jobs/43c43bb0-2d71-483c-9dde-28b5dfbce7c9/file0.code:2
SyntaxError: Unexpected end of input
at internalCompileFunction (node:internal/vm:73:18)
at wrapSafe (node:internal/modules/cjs/loader:1176:20)
at Module._compile (node:internal/modules/cjs/loader:1218:27)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Node.js v18.15.0
ok but i dont think claude does that
realistically there will be very few syntax errors in js when using claude
itll hallucinate a lot but javascript allows a lot
@valid jetty life lesson never do anything just because its better for your grades than the thing u want to do
i made a voice assistant which i hated every minute of making just so i wouldnt get a guaranteed B cause you get teamwork F if you do it alone
🫵 You're ✨ leading ⬇️ in 🚀 blazingly 🐇 fast 😎 vibe 💻 coding ⏬ in 🚄 Rust 😀 , ▶️ that 🤪 is ❌ NOT 🗑️ JavaScript
ok but thats not actual vibe coding
i verified and corrected every line that it wrote
horror
ok my voice assistant is like 20% non verified (other than testing it) vibe coded
and the frontend like 90%
(got an A on the frontend he didnt even look at the code other than the snippets i put in the paper
you say this every video dude
i literally just yapped about it for an hour and he didnt look at the project
😭
it was kinda sad
this is why you dont vibe code it you just dont do it at all
every time theres a new model it beats all the old ones by an insane margin and then it ends up being worse than 4o
oh
no reasoning
i sure hope the ai overlords take us humans as pets soon
cats live a great life, rent-free with free food and sleeping all day
added lines 😲 🤯
i want that
yea what about it
not if you have an stdlib
lmao
i guess you can attribute the interpreter for making it so much less code?
like im here and about to write 1k lines of tests
maybe not
i just lex use as an ident (1 line), anything after it as identifier { "." identifier } (0 loc) (the lexer needed 1 loc of change other than an unrelated error msg), parse it (just make sure its actually ident . ident . ident (41 loc) and the actual logic is read the file and lex parse and interpret it in place (60 loc)
does this allow for recursive imports???
how to make it count icy
you have to add it
if your stack is infinite and you have a lot of time (infinite) it does
what about nested imports
oh wait do you read imports from the right place or
is it still the working dir of the interpreter
dir of the file
good
i told you 5 minutes ago that i vibe coded that
so relatable
no
lol
yes i did
i had tests.prelude originally
back when it was using shell wd
i meant this
// ./foo/a.icy
use bar.b
// ./foo/bar/b.icy
add x y = x + y
// ./test.icy
use foo.a
lc.ocrtr
-# <:i:1363558878872080414> 🇷🇺 Russian <:i:1363556471303831552> 🇺🇸 English
Life of Vasya Pechkin
Telegram life of Vasya Pechkin
Today I learned a funny fact:
Tatarstan lives on Moscow time, and neighboring Bashkortostan
with a 2-hour shift. And the men
in the border village on the Bashkir side, if they run out of booze after 22:00,
they send a messenger on a bicycle to the Tatar village, which is 3 km away, and
replenish their supplies, because
it's still 20:00 there. And Tatar
drunkards have a hangover in the morning,
if their own is closed, then from the
Bashkir store, it opens two
hours earlier
Travel
In time, they
are real```
im not gonna test it rn but i dont see any way for it not to do that
thats what i said and then it broke
ik path resolving works and it just lexes, parses and interprets in place
so its the same as pasting the file in there
ok ill test it
works
good
icee peass
noo
yes
tatarstan is using moscow time (utc+3) and bashkortostan (on the border of tatarstan) has utc+5 so when bashkirs run out of alcohol at 22:00 they cycle to tatarstan where its 20:00 and buy more; tatars with a hangover in the morning go to bashkortostan because shops open 2h earlier there
russia seems to mostly skip even numbered time zones for some reason
so many zones
between here (also please refer to this as swiftui and not swift)
okk
can't i just put add
theres multple ways of making a button
i will try this
@native spruce i should start coding functions
fuck
@native spruce what should i do now
aaaaa
not my decision
you wanted an icon changer, why not do that..?
i first need to make a page where it lists all the folders
but idk how to make seperate pages
use google
@native spruce if i use tabview, can i also make like buttons that redirect to that tab and if i have that button i make the tab normal switcher invisible?
why invisible
Making a search engine was a bad idea.
To try coddy.tech visit http://coddy.tech/?from=mults
Moogle: https://moogle.app
Moogle Repo: https://github.com/IonelPopJara/moogle
Follow me on Twitter: https://x.com/ionelalexandr12
anime girl in the thumbnail
instant watch
Is there swiftui for windows yet or nah
@woven mesa 2 more things until protokolle release
gonna obfuscate these
I love obfuscation
I suppose I will try to ask probably won't get a reply
what is protokolle
making exportable structs is surprisingly easy
nerd
Open in Protokorn
who said korn

@formal belfry hii
@native spruce how can i embed a gif image in swift
grok how can i embed a gif image in swift
why did it automod my message
Use UIImageView with UIImage.animatedImage(with:duration:).
i did
yes
insane
open in notes my beloved
#warning is kinda cool
like that you can that easily mark stuff
and it will show as if it was a regular language error or whatever
I did those
you can also fatalerror with a custom message and xcode will yell it out to you
so like just panic!()?
yeah
oh ic
swift seems like a very neat language
like a very straightforward one but at the same time powerful
Yooo
Personally don't care for the "security" but I am curious if it's faster than stbi at decoding 8k pngs
My friend Raven semi-recenly got her PR merged with SDL3 bindings
Hoping to ditch GLFW for that eventually
oold video
But like 20k lines 😭😭
hi oomfies
hello llsc
well most of it is generated java or copied c from what i can tell
omg i forgot about this test
does that asterisk mean its in hard mode
its time to update windows 10 to 11
id like to move to ubuntu, but i cant because i use unity
any dart/flutter users here?
would you eat biscord as a cake 😭
"Prolly means the dart libraries are not avaliable on this platform"
Thats bs, i ran the project yesterday fine and changed nothing
And it even builds fine on my friends machine
Oh yeah I love when that happen to me
Tried it via docker yet?
There's also always good old "flutter upgrade"
Making sure u got the right branch
yeah this is why i hated flutter
I've only ever used it for Linux desktop apps
just deps that suddenly become incompatible from one version update
I've always found gradle and flutter mobile to be a huge headache
@valid jetty japanese is the easiest language to learn behind english
difficulty of languages depends on the amount of material not difficulty of language
I swear difficulty of language comes from what languages you know before?
it is completely different grammatically to english
Windows 19
the Japanese language is very difficult because of the endless number of words
so is like every other language
so is like every other language
the difference is you can learn those words in japanese
have fun learning kazakh vocab without living there
this is not the hard part of languages
I know the grammatical order of like 10 languages
like 50 if you count all turkic languages
good luck learning formal kanji without living there
with japanese if you want to learn grammar you can:
- use duolingo
- take an in person course
- take an online course (eg youtube)
- read a book
- use any of the thousands of language learning apps that offer japanese
- move to japan
with kazakh if you want to learn grammar you can:
- learn russian first, then move to kazakhstan and take an in person course
same goes for vocab
you can use an anki deck for kazakh which has just the word and the translation with no explanation and no audio (!!)
use duolingo
duolingo is very good for grammar
not for tenses
Duolingo is great for preset sentences
but for constructing sentences correctly if you know the vocab
i mean yeah because every weeb wants to learn japanese lol
it is up there as one of the most desired to learn languages i would say
or the people who watch the million japan food channels on youtube and all of a sudden wanna move there because they think it's perfect
if you have the exact same learning material for japanese and for some random language that 20000 people speak then maybe japanese is harder but in reality you never have close to enough material to learn the rare language
@valid jetty
rosie
there is so much learning material for japanese yeah
hiiii
i meanan other rosie
even something like romanian is so much easier to learn than kazakh
wants to move to japan because of japan food channels
I should learn japanese to play games which only released for famicom
Romanian grammar is pretty similar in difficulty to kazakh id say
both have a lot of extremely stupid rules
japanese just has such a large presence online that it is almost impossible to not at one point stumble upon the language in one way or another
rosie is ultra weeb
have fun learning Kazakh without having gone to a kazakh school
amazing pr i made https://github.com/Vendicated/Vencord/pull/3438
wrong ❌
i dont watch food channels
only duckduckgo
nor do i watch anime
startpage is great
yet you know all the anime charactens
i couldnt name 99% of them lol
i can name literally none
idk why you guys have this concept that i wanna go there because its some magical place, its just like anywhere else but safer, physically
safety cant be your only reason cause japan isnt the safest place
the best way to learn is to immerse, which means having it everywhere around you
everything ive seen theyre hostile to foreigners
it is safer than the uk
so is literally everywhere else
idk what youve seen but that hasnt been true for a while lol
Japan is overrated anyways
unless youre like, an idiot who blasts music on the train
@valid jetty go somewhere cool like Australia
bugs
eat
the uk, america, and most slavic countries are out of question
i dont wanna go to france because its france
why slavic countries
idk about all slavic countries but at least in romania a lot of the people are orthodox christians so i assume its a similar thing in other countries
so what
rosie thinks youll get shot anywhere in america
hollywood blvd https://fixupx.com/rebootjays/status/1925545661874798957
let me live with my decision
whats the embed twitter
fxtwitter
twitter so bad
whats wrong with orthodox christians
theyre not gonna kill you because youre not christian
they wont like my.. kind
❌ twitter
⭕ X
i have my motives
??
I wanna move to Greenland, Scandaniva, Canada, Northeast/Northwest US when I can

@valid jetty GUHHH just go live in india or something
india is arguably worse than uk
it would be funny
what do u do thats so crazy that christians will point and laugh in the street
is suicide an option
yes
so why would i rather go to india than japan
both are asian countries and ive already been studying japanese for over a year
become telemarketer
i think it was a joke
i could tell after 😭
if i were to ever get serious about another language id learn spanish
way more useful
especially in the US
doesnt matter
all you need to know is that im not a weeb or whatever lol
i am perfectly aware japan is a country just like any other
id learn Spanish, French or German
when somebody asks you where you live
@valid jetty you
do you really wanna say "yes i live in fr*nce"
nop
yop
but i wouldn't mind saying "yes i live in poland"
which side
or "yes i live in montenegro"
the femboy side or the chad alpha male side
what
no i dont
@valid jetty@valid jetty@valid jetty
been to poland many times never seen a femboy
never been to lublin, dont remember seeing femboys in wroclaw
theres nothing u can be except american for which poles will laugh at u
or french
@valid jetty hii
no thats only a uk/usa thing
@valid jetty hii
the things js devs need to mimic a fraction of get_or_insert_with
i have so many utils that i've basically reimeplmented lodash
there's little point of this util in js
i don't like writing multiple lines instead of one for this
i am doing it in quite a few places
main purpose is this
also you will hop on
class JavaMap<K, V> extends Map<K, V> {
computeIfAbsent(key: K, factory: (key: K) => V) {
}
}
the main point of that method in java is threadsafety
cause ^ this code would be unsafe in java
in js you don't have that problem
imo not a use case that comes up often
also ummm your implementation is wrong

const map = new Map();
map.set("balls", undefined);
computeIfAbsent(map, "balls", () => "FAAAAAAKE");
console.log(map.get("balls")); // FAAAAAAKE
🥶
eh
you should use map.has
vee prosze odblokuj mnie chce tylko wiedzieć jaki motyw discord posiadasz
lc.translate
function computeIfAbsent() {
if (!map.has(key)) {
map.set(key, factory(key));
}
return map.get(key);
}
-# <:i:1323844562875187291> Translated from 🇵🇱 Polish to 🇺🇸 English • Google Translate
vee please unblock me i just want to know what discord theme you have
you love
you need !
deja vu...
it could have undefined
well the type would reflect that
vban @formal belfry annoying
Done! 
Banned ogzek2686 (@hollow otter)
vban @royal nymph annoying
Failed to ban vending.machine (@royal nymph): You can't ban that person!
why
but even if type does not have undefined it's gonna add it

yop true
i think venbot is broken
as TValue
what is that
generics dont need to start with T
microsoft recommends that
sometimes names conflict thtat's why i prefix it
you wouldn't break microsoft style guide
constraints or assertions when calling functions
like a contract that specifies the foo function's n parameter must not be null
or whatever
that can only form very basic contracts
do it c++ style
languages like c3 can have much more complex ones
C3 is a programming language that builds on the syntax and semantics of the C language, with the goal of evolving it while still retaining familiarity for C programmers.
contracts are basically like if [foo] then [bar]
ohh like
like a basic contract would be
map.get(key) != undefined => map.has(key) == true
get<Key>(key: Key): this is Map & { get(k: Key): V }
it's called contract because it's essentially a "promise" you make
what
yes type assertions are actually contracts
oh i see

isSomeSpecificSubtype(): this is Subtype {
return someCondition;
}
here the contract is someCondition -> this is Subtype
yop
with contracts you could infer that the final map.get(key) is not undefined (assuming the map type does not contain undefined)
i wanted to have a contract which was "if this returns false, the passed value is definitely not null"
but if it's true the type should stay the same
i don't think that's possible
if i do : this is null that's incorrect - it's correct that if it returns false it's not null, but if it returns true it could be null or not null
(the function was isEmpty)
(I think it's the same as lodash's lol)
(it just checks if something has any keys - an object with values, a non-empty string and a non-empty array all have them)
i distinctly remember you suggesting i use === undefined instead of has

i will just do this not to need cast
so if it's undefined it's deffo not present
@winged mantle



