#Integer data
Explore tagged Tumblr posts
snarp · 2 years ago
Text
I don't know how to code but I also don't know how to stop.
9 notes · View notes
stickia404 · 8 days ago
Text
"Ad Iter Per Aspera"
For the last 2 or so weeks (as of first writing), I have been slowly chipping away at a large Hex Casting project; some of y'all might remember this project, World Slate. As a quick summary, a spell circle gets "ambit" (or the area it can cast) by the smallest cube formed in its bounds. Like this one below will start up and end safely because it only needs to scan for possible routes; however, it doesn't check if the possible routes are runnable.
Tumblr media
This post is not about cursed spell circle tech exactly, though. If y'all want to learn more about spell circle tech, my whole guide can be found here. Going back to the main topic, World Slate is the logical extreme of this, taking a spell circle, and scaling to the size of a whole minecraft world. Unfortunately, this is not the real full size minecraft world, but the whole world of HexxyTest (which has a world boarder of 10k to -10k).
Ok, but fine, what does World Slate look like? Well, its main "core" is quite small! Only ~6 blocks, it is just a Looper (a Spell Circle that never ends), a Hex on a pedestal, and a slate to clear the stack. The one in the middle is just my personal Teleportation System that uses Displace, which is free if the entity and vector is in the bounds of the Spell Circle.
Tumblr media Tumblr media
The "scary" part of World Slate comes into play when you consider the scale. The small red arrow in the top is the main core of World Slate is, the small line at the top and left side are the ambit rods. Both rods extend out 20,000 blocks in the X and Z directions, placed down with mainly Hex and Sentinel Walking. What this totals to is that a single Spell Circle that has ambit on the Whole World, meaning an "Eye of Sauron" (A hex that can get true names at an instant) is not just a hypothetical, it could be running right now.
Tumblr media Tumblr media
So, what were the main challenges of building this? Surprisingly? Building it was almost no problem, after making a quick hex to place the blocks down automatically, it was just spam clicking that. The main problems were with the Spell Circles themselves, or well, how they were implemented. That's right! Its Java time!
So one of the problems I think I covered in the old post was a Memory Leak of sorts Spell Circles had. TLDR: Spell Circles keep a list of vectors to "turn off" when the Spell Circle is finish (so slates can stop glowing and such), but this was a list, not a set. So it would keep adding the same vectors if the same slate got ran over. So my fix was to make that list a set (and keep track of how many slates have been "ran over" via a number)
Another problem was that Spell Circles stored Every slate they could run on. Meaning, for World Slate, it would need to keep ~40,000 Block Positions (or 120,000 integers) in a single block. So I made a quick tweak of it only storing the highest, and lowest, block positions (so it stored the corners, rather than everything). These 2 things are already large performance boosts! But, unfortunately, these are peanuts compared to the main problem. Chunk loading.
When a "copied" (IE: singleplayer with only Hex) World Slate was started up, it would load about 30,000-40,000 chunks when it was looking for Slate to run on. For some context, HexxyTest has ~30,000 chunks loaded at peak hours, with people having tons of chunk loads. So something had to be going strange and or wrong. After poking through the code for a bit, I found the singular problem line:
Tumblr media
All this does is ask the Server Level what the block is at "herePos," but under the hood, Minecraft is loading a 14x14 (iirc) cube of chunks around that. Since, if you are loading chunks in most cases, it won't hurt to preload a few more. This is not most cases.
After banging my head on this problem, using a debugger to step through Every part of chunk loading, and getting slapped around silly by this for a week or 2, I found an odd thing, a method called "getChunkFuture." What this does is return an evaluable future that holds a single chunk's data. After poking around, I learned of a way to only load the blocks and as little chunks required.
Tumblr media
What this chunk of code does is checks if it has already scanned this chunk, if so, uses the found one! If not, tries to get a future and runs it. While this is not perfect, it MASSIVELY increases chunk loading speed. What used to take ~10 seconds in that singleplayer world, took Two seconds. What used to crash the whole HexxyTest server? 10 seconds at peak hours. 10. Seconds.
Being perfectly honest, I have No Clue why that works; according to Chloe (who helped me test this) that method is used in World Gen only. But I couldn't find any errors or bugs with it in this case, and it has been working well on the HexxyTest server!
After fixing a few bugs, some made by me, some made by Hex (like forgetting the Slate Limit....)
Tumblr media
Its ready to be merged into Hex! Right now, the HexxyTest server is using a modified build of Hex that uses this. And it is also sitting as a PR to the main Hex GH Repo too!
Overall, really quite proud of my self for making this whole World Slate system, and optimizing base Hex Casting Spell Circles too! Hopefully this encourages people to use Spell Circles, since they are fun, and extremely useful.
Now to work on my addon, Slate Works, and make Spell Circles even better... Also, thank you for reaching the end! This is less of an essay, and more of an info-dump on stuff that I find really cool. Hope you enjoyed it too!
33 notes · View notes
andmaybegayer · 7 months ago
Text
(…) for very large 64-bit integers, such as randomly generated IDs, a JSON parser that converts integers into floats results in data loss. Go’s encoding/json package does this, for example.
(…)
How often does this actually happen for randomly-generated numbers?
(…)
It turns out that almost all randomly distributed int64 values are affected by round-trip data loss. Roughly, the only numbers that are safe are those with at most 16 digits (although not exactly: 9,999,999,999,999,999, for example, gets rounded up to a nice round 10 quadrillion).
102 notes · View notes
lavender-long-stories · 7 days ago
Text
Something I see people misunderstanding about the whole bookmark max thing that happened is that does not mean that there are that many bookmarks currently held.
I've seen a lot of people saying that they're going to go remove some of their bookmarks to 'lighten the load' and I want you to understand that simply not how that works.
The way that data points like this would be stored is sequentially. Meaning that every time a new bookmark is made, it is given a new serial number in the database. Theoretically you could bookmark, unbookmark then rebookmark something over and over and over again and get new sequential numbers on this list.
And to my understanding it wasn't that there was too many things on the list. It was that the ID had hit the integer max (basically as high as the data point can store a number).
Moral of the story, you don't need to feel guilty about how many bookmarks you have. This is a common thing that happens in databases if your IDs outgrow their allotted space.
Psa from your local fanfic writer who also happens to be a programmer IRL.
23 notes · View notes
nostalgebraist · 1 year ago
Text
information flow in transformers
In machine learning, the transformer architecture is a very commonly used type of neural network model. Many of the well-known neural nets introduced in the last few years use this architecture, including GPT-2, GPT-3, and GPT-4.
This post is about the way that computation is structured inside of a transformer.
Internally, these models pass information around in a constrained way that feels strange and limited at first glance.
Specifically, inside the "program" implemented by a transformer, each segment of "code" can only access a subset of the program's "state." If the program computes a value, and writes it into the state, that doesn't make value available to any block of code that might run after the write; instead, only some operations can access the value, while others are prohibited from seeing it.
This sounds vaguely like the kind of constraint that human programmers often put on themselves: "separation of concerns," "no global variables," "your function should only take the inputs it needs," that sort of thing.
However, the apparent analogy is misleading. The transformer constraints don't look much like anything that a human programmer would write, at least under normal circumstances. And the rationale behind them is very different from "modularity" or "separation of concerns."
(Domain experts know all about this already -- this is a pedagogical post for everyone else.)
1. setting the stage
For concreteness, let's think about a transformer that is a causal language model.
So, something like GPT-3, or the model that wrote text for @nostalgebraist-autoresponder.
Roughly speaking, this model's input is a sequence of words, like ["Fido", "is", "a", "dog"].
Since the model needs to know the order the words come in, we'll include an integer offset alongside each word, specifying the position of this element in the sequence. So, in full, our example input is
[ ("Fido", 0), ("is", 1), ("a", 2), ("dog", 3), ]
The model itself -- the neural network -- can be viewed as a single long function, which operates on a single element of the sequence. Its task is to output the next element.
Let's call the function f. If f does its job perfectly, then when applied to our example sequence, we will have
f("Fido", 0) = "is" f("is", 1) = "a" f("a", 2) = "dog"
(Note: I've omitted the index from the output type, since it's always obvious what the next index is. Also, in reality the output type is a probability distribution over words, not just a word; the goal is to put high probability on the next word. I'm ignoring this to simplify exposition.)
You may have noticed something: as written, this seems impossible!
Like, how is the function supposed to know that after ("a", 2), the next word is "dog"!? The word "a" could be followed by all sorts of things.
What makes "dog" likely, in this case, is the fact that we're talking about someone named "Fido."
That information isn't contained in ("a", 2). To do the right thing here, you need info from the whole sequence thus far -- from "Fido is a", as opposed to just "a".
How can f get this information, if its input is just a single word and an index?
This is possible because f isn't a pure function. The program has an internal state, which f can access and modify.
But f doesn't just have arbitrary read/write access to the state. Its access is constrained, in a very specific sort of way.
2. transformer-style programming
Let's get more specific about the program state.
The state consists of a series of distinct "memory regions" or "blocks," which have an order assigned to them.
Let's use the notation memory_i for these. The first block is memory_0, the second is memory_1, and so on.
In practice, a small transformer might have around 10 of these blocks, while a very large one might have 100 or more.
Each block contains a separate data-storage "cell" for each offset in the sequence.
For example, memory_0 contains a cell for position 0 ("Fido" in our example text), and a cell for position 1 ("is"), and so on. Meanwhile, memory_1 contains its own, distinct cells for each of these positions. And so does memory_2, etc.
So the overall layout looks like:
memory_0: [cell 0, cell 1, ...] memory_1: [cell 0, cell 1, ...] [...]
Our function f can interact with this program state. But it must do so in a way that conforms to a set of rules.
Here are the rules:
The function can only interact with the blocks by using a specific instruction.
This instruction is an "atomic write+read". It writes data to a block, then reads data from that block for f to use.
When the instruction writes data, it goes in the cell specified in the function offset argument. That is, the "i" in f(..., i).
When the instruction reads data, the data comes from all cells up to and including the offset argument.
The function must call the instruction exactly once for each block.
These calls must happen in order. For example, you can't do the call for memory_1 until you've done the one for memory_0.
Here's some pseudo-code, showing a generic computation of this kind:
f(x, i) { calculate some things using x and i; // next 2 lines are a single instruction write to memory_0 at position i; z0 = read from memory_0 at positions 0...i; calculate some things using x, i, and z0; // next 2 lines are a single instruction write to memory_1 at position i; z1 = read from memory_1 at positions 0...i; calculate some things using x, i, z0, and z1; [etc.] }
The rules impose a tradeoff between the amount of processing required to produce a value, and how early the value can be accessed within the function body.
Consider the moment when data is written to memory_0. This happens before anything is read (even from memory_0 itself).
So the data in memory_0 has been computed only on the basis of individual inputs like ("a," 2). It can't leverage any information about multiple words and how they relate to one another.
But just after the write to memory_0, there's a read from memory_0. This read pulls in data computed by f when it ran on all the earlier words in the sequence.
If we're processing ("a", 2) in our example, then this is the point where our code is first able to access facts like "the word 'Fido' appeared earlier in the text."
However, we still know less than we might prefer.
Recall that memory_0 gets written before anything gets read. The data living there only reflects what f knows before it can see all the other words, while it still only has access to the one word that appeared in its input.
The data we've just read does not contain a holistic, "fully processed" representation of the whole sequence so far ("Fido is a"). Instead, it contains:
a representation of ("Fido", 0) alone, computed in ignorance of the rest of the text
a representation of ("is", 1) alone, computed in ignorance of the rest of the text
a representation of ("a", 2) alone, computed in ignorance of the rest of the text
Now, once we get to memory_1, we will no longer face this problem. Stuff in memory_1 gets computed with the benefit of whatever was in memory_0. The step that computes it can "see all the words at once."
Nonetheless, the whole function is affected by a generalized version of the same quirk.
All else being equal, data stored in later blocks ought to be more useful. Suppose for instance that
memory_4 gets read/written 20% of the way through the function body, and
memory_16 gets read/written 80% of the way through the function body
Here, strictly more computation can be leveraged to produce the data in memory_16. Calculations which are simple enough to fit in the program, but too complex to fit in just 20% of the program, can be stored in memory_16 but not in memory_4.
All else being equal, then, we'd prefer to read from memory_16 rather than memory_4 if possible.
But in fact, we can only read from memory_16 once -- at a point 80% of the way through the code, when the read/write happens for that block.
The general picture looks like:
The early parts of the function can see and leverage what got computed earlier in the sequence -- by the same early parts of the function. This data is relatively "weak," since not much computation went into it. But, by the same token, we have plenty of time to further process it.
The late parts of the function can see and leverage what got computed earlier in the sequence -- by the same late parts of the function. This data is relatively "strong," since lots of computation went into it. But, by the same token, we don't have much time left to further process it.
3. why?
There are multiple ways you can "run" the program specified by f.
Here's one way, which is used when generating text, and which matches popular intuitions about how language models work:
First, we run f("Fido", 0) from start to end. The function returns "is." As a side effect, it populates cell 0 of every memory block.
Next, we run f("is", 1) from start to end. The function returns "a." As a side effect, it populates cell 1 of every memory block.
Etc.
If we're running the code like this, the constraints described earlier feel weird and pointlessly restrictive.
By the time we're running f("is", 1), we've already populated some data into every memory block, all the way up to memory_16 or whatever.
This data is already there, and contains lots of useful insights.
And yet, during the function call f("is", 1), we "forget about" this data -- only to progressively remember it again, block by block. The early parts of this call have only memory_0 to play with, and then memory_1, etc. Only at the end do we allow access to the juicy, extensively processed results that occupy the final blocks.
Why? Why not just let this call read memory_16 immediately, on the first line of code? The data is sitting there, ready to be used!
Why? Because the constraint enables a second way of running this program.
The second way is equivalent to the first, in the sense of producing the same outputs. But instead of processing one word at a time, it processes a whole sequence of words, in parallel.
Here's how it works:
In parallel, run f("Fido", 0) and f("is", 1) and f("a", 2), up until the first write+read instruction. You can do this because the functions are causally independent of one another, up to this point. We now have 3 copies of f, each at the same "line of code": the first write+read instruction.
Perform the write part of the instruction for all the copies, in parallel. This populates cells 0, 1 and 2 of memory_0.
Perform the read part of the instruction for all the copies, in parallel. Each copy of f receives some of the data just written to memory_0, covering offsets up to its own. For instance, f("is", 1) gets data from cells 0 and 1.
In parallel, continue running the 3 copies of f, covering the code between the first write+read instruction and the second.
Perform the second write. This populates cells 0, 1 and 2 of memory_1.
Perform the second read.
Repeat like this until done.
Observe that mode of operation only works if you have a complete input sequence ready before you run anything.
(You can't parallelize over later positions in the sequence if you don't know, yet, what words they contain.)
So, this won't work when the model is generating text, word by word.
But it will work if you have a bunch of texts, and you want to process those texts with the model, for the sake of updating the model so it does a better job of predicting them.
This is called "training," and it's how neural nets get made in the first place. In our programming analogy, it's how the code inside the function body gets written.
The fact that we can train in parallel over the sequence is a huge deal, and probably accounts for most (or even all) of the benefit that transformers have over earlier architectures like RNNs.
Accelerators like GPUs are really good at doing the kinds of calculations that happen inside neural nets, in parallel.
So if you can make your training process more parallel, you can effectively multiply the computing power available to it, for free. (I'm omitting many caveats here -- see this great post for details.)
Transformer training isn't maximally parallel. It's still sequential in one "dimension," namely the layers, which correspond to our write+read steps here. You can't parallelize those.
But it is, at least, parallel along some dimension, namely the sequence dimension.
The older RNN architecture, by contrast, was inherently sequential along both these dimensions. Training an RNN is, effectively, a nested for loop. But training a transformer is just a regular, single for loop.
4. tying it together
The "magical" thing about this setup is that both ways of running the model do the same thing. You are, literally, doing the same exact computation. The function can't tell whether it is being run one way or the other.
This is crucial, because we want the training process -- which uses the parallel mode -- to teach the model how to perform generation, which uses the sequential mode. Since both modes look the same from the model's perspective, this works.
This constraint -- that the code can run in parallel over the sequence, and that this must do the same thing as running it sequentially -- is the reason for everything else we noted above.
Earlier, we asked: why can't we allow later (in the sequence) invocations of f to read earlier data out of blocks like memory_16 immediately, on "the first line of code"?
And the answer is: because that would break parallelism. You'd have to run f("Fido", 0) all the way through before even starting to run f("is", 1).
By structuring the computation in this specific way, we provide the model with the benefits of recurrence -- writing things down at earlier positions, accessing them at later positions, and writing further things down which can be accessed even later -- while breaking the sequential dependencies that would ordinarily prevent a recurrent calculation from being executed in parallel.
In other words, we've found a way to create an iterative function that takes its own outputs as input -- and does so repeatedly, producing longer and longer outputs to be read off by its next invocation -- with the property that this iteration can be run in parallel.
We can run the first 10% of every iteration -- of f() and f(f()) and f(f(f())) and so on -- at the same time, before we know what will happen in the later stages of any iteration.
The call f(f()) uses all the information handed to it by f() -- eventually. But it cannot make any requests for information that would leave itself idling, waiting for f() to fully complete.
Whenever f(f()) needs a value computed by f(), it is always the value that f() -- running alongside f(f()), simultaneously -- has just written down, a mere moment ago.
No dead time, no idling, no waiting-for-the-other-guy-to-finish.
p.s.
The "memory blocks" here correspond to what are called "keys and values" in usual transformer lingo.
If you've heard the term "KV cache," it refers to the contents of the memory blocks during generation, when we're running in "sequential mode."
Usually, during generation, one keeps this state in memory and appends a new cell to each block whenever a new token is generated (and, as a result, the sequence gets longer by 1).
This is called "caching" to contrast it with the worse approach of throwing away the block contents after each generated token, and then re-generating them by running f on the whole sequence so far (not just the latest token). And then having to do that over and over, once per generated token.
313 notes · View notes
crystal-wingeddragon-spikes · 4 months ago
Text
Tumblr media Tumblr media
I tried to make something since Animation vs Coding came out. (I don't care about misspelling.)
This is a joke with no punch line because, while it is certainly in-character to these 2 terrorists, it is not a joke I am committed to make. I hope you don't even know what codes they are reacting to.
So, now the punchline is... Everything is so bad from the ground-up, The Dark Lord doesn't know where to start? And The Chosen One somehow ended up insulting ONE normal thing, enraging TDL? Good enough.
I thought about deleting the entire thing, but it was such a perfect way to showcase that me, the author, can "play" a character who much more knowledgeable than I am, because I don't code.
(I don't code beyond getting a bad grade in basic Java and superficially studied C, C++ and C# just to make my resume more attractive. I got my job, I don't care.)
I didn't even know what is an "Enum" before making this comic. Do your research and cherry-pick correct information, and you can fool the average audiences before an actual expert shows up.
One quirk I gave to TCO and TDL (most likely the rest of digital creatures), is that they influenced by the code they speak out loud. TCO has randomized capital letter throughout their speech, but say "Floor" the exact way it appears in code, twice, because string data is case-sensitive. They have free will and can choose not to execute friend certain scripts or simply refuses to say it out loud.
After this, TDL is putting TCO in CODE dot ORG jail. A very great place to start learning, by the way. (Unlike Brilliant, it's free.)
I am explaining things under the cut
You watched AvC, so you already know what is constant and variable... but still;
Gravitational acceleration is a constant.
Speed is a variable.
In your program, you would want some value to change, some to stay the same.
Enum is a type of class.
Class is a collection of data that can either be variables or constant, they can be different data type. Class is good for creating character profile, such as containing both Name (String) and age (Integer).
Enum, is a type of class that only contain constant. If class is a character profile, then, Enum is a lore book that contain things that need to be reference, unchanged, throughout the program. In this comic, Enum is used for items. Unless an upgrade system is involved, items should have the same property.
Me, personally, would simply put name strings in Enum, but actual coding is flexible to make it less of a nightmare to come back and fix, so, as The Dark Lord says, not ideal, but fine.
Not code, PU = Processing Unit, used interchangeably with brain. TDK specifically says that because it sounds like, "Poo".
47 notes · View notes
c-official · 8 months ago
Text
Tierlist part 3: Rust
But first corrections. As some have pointed out i of course should have interpreted C++ as an increment. I will note that i model the system as signed integers putting C at 0 and not chars to make the ordering reflect the ranking. Thus C++ increments C and evaluates to the same putting them both at B tier. This has been corrections. Now Rust. I absolutely love rust so its an easy S tier. The way you structure data with it structs and enums combined with the trait system is just a delight to work with. So... Wait. Uhmmm, it seems that i have reached a problem. Due to previous indiscretions Rust does not trust me anymore and has locked itself away from me. Due to its memory safety there is not really anything i can do so lets just leave it there for now.
Tumblr media
Part 2
40 notes · View notes
bugs1nmybrain · 2 years ago
Note
YESSSS PLSSSS l x reader smut 🙏 maybe they work together or smth and it gets a little frisky??
Admittedly, I don't know the logistics of being a detective outside of Death Note and crime documentaries, and I can't picture my self in that occupation. However, I like thinking of the idea of L and the reader sitting alongside in each other's company while he works on his cases via his computer, and the reader working on something else such as college homework. So I'll work with that ;).
Distraction
Tumblr media
Minors Do Not Interact
Warnings: Heteronormative sex and relationship, L uses pet names like "my love" and "darling," desk sex, established relationship, reader is neurodivergent-coded, reader is a college student, reader is heavier than L, nipple/breast play, L uses clinical terms during sex, oral (fem-receiving), unprotected sex
L could not for the life of him keep his eyes off of you.
He was slightly confused, considering that today wasn't different from any other day. You sat next to him on your computer, doing work for your classes, and he worked on his cases, at least anything that wouldn't expose too much information around you.
Maybe it was that ridiculous wet dream he had of you last night. L doesn't sleep nearly as much as others. Not only did he see it as a wedge in his schedule, but his dreams sometimes distracted him because of his analytical perspective on everything. Sometimes he dreamt of his parents, sometimes about the cruelty of his job, and other times...you.
You weren't helping the situation. Of course you had to choose to wear a very form fitting outfit today. L almost had an issue with how revealing your outfit was, but he knew he shouldn't dictate things like that. But if anyone else looked at you the way he was right now, he wouldn't be happy.
Your shirt practically hugged your torso, giving L a perfect view of the shape of your breasts. Your shorts were also, indeed, short, showing off your gorgeous thighs and their beautiful complexion.
It wasn't only your body, though. L wasn't that shallow. It was also the cutest expression you made while you focused on your homework. How you'd scrunch your face when you didn't quite understand something. Your hair fell in your face and you'd tuck it behind to see your notes better, but then it would just fall back in your face. Even the way you sipped on your drink was turning him on. He felt animalistic.
L wasn't the type to get lost in temptation like this. Sure he indulged in any sweets he wished without the consideration of the toll it would take on his body. And yes, he'd take some almost impulsive, bold decisions when he was determined to take a step further in an investigation. Perhaps he was someone who was swayed by temptation, now that he thought about it.
"L?"
Oh god. Now your voice.
"What is it, love?"
The most insignificant terms of endearment always made you blush or giggle. And it was adorable to him.
"I..um..I'm having a bit of trouble with this part of my homework. Would it..? I don't mean to pry for answers, but-"
"No need to apologize. What is it you're confused about?"
L took this opportunity to move his rolling chair directly next to yours. He leaned over your shoulder, peaking at the laptop in front of you. Lucky for him, he now had a wonderful view of your breasts.
You perked up at his close proximity, and L could've sworn he saw you squirm a bit.
"I'm having trouble with using Excel for the Goodness-of-fit test (you were taking a Statistics class). I checked my data and it's all correct so I'm really confused why my answers aren't coming out right."
L took a look at your screen and in a matter of two seconds knew what was wrong, "You have to round up your expected values to the closest whole integer. It should come out right if you do that."
You smiled beamingly and returned with a, "thank you."
"Of course, darling." L leaned in to kiss your cheek, eliciting a bright smile and blush. You were avoiding eye contact with him, but he knew that was your signal of enjoying his affection. L noticed early on that you were easily charmed by displays of affection, whether that be words of endearment or physical affection. L was not one for touching anyone before you. He had begun to learn how touch-starved he also was when you two had begun your relationship.
The look on your face and your body language was enough to make him hard. Your reactions are what got him the most.
L brought his hand to stroke your hair around your neck gently, making you tingle under his touch.
"Do you have anything else planned for the day?"
"Not really. This is the last bit of homework I have for the day. I don't know what I want to do after that."
"Mm.." L leaned closer, and wrapped his arms around your waist (as much as he could manage with you being in a chair).
You laughed playfully yet again but leaned into his touch. L took it upon himself to make a move, having an inclination that you wanted him to be more affectionate with you. He gently kisses the back of your neck, sending shivers down your spine, and a delightful hum from you.
"You're so beautiful, did you know that?" L teases.
You laugh and blush at his compliment, "You must be lying."
"Not at all. The truth is, you're gorgeous. I'm having a hard time keeping my eyes off of you today because of your beauty and charm."
"I noticed."
Of course you did. You were an observant person, which is something L admired about you. Though maybe it wasn't too hard to tell, for he hadn't necessarily been sneaky with his glances at you.
"Does it make you nervous when I look at you like this?" L probes.
"No. Well, I feel a little embarrassed, but I'm not uncomfortable by you."
"There's no need to be embarrassed, I'm merely admiring how adorable you are. I don't want you to feel self conscious."
But deep down, L found your shyness cute and he often took advantage of it. L begins trailing soft kisses along your neck as he held you.
"Mmfmm."
Your voice was going to drive him crazy. If you two weren't in separate chairs right now, you would be able to feel L's prominent erection through his pants. L moves his hands from your waist to the sides of your arms, touching them in a feather-like motion in an attempt to make you feel just as aroused as he is. You sigh desperately at his loving affection.
"You're distracting me from my homework..," you say playfully.
"Good. You've been distracting me all day," L retorts.
An instinctive breathy laugh comes out from you but quickly turns into a pleasured yearn. L takes this as an invitation to turn your chair around.
"Sit in my lap."
"Um..."
"I don't want to hear the excuse that you're too heavy. I insist."
L's look of lust and need makes it apparent that he's aching for this. You oblige his request and rest yourself on his lap, trying not to put your whole weight down. L places his hands on your hips, though, and pulls you down. You underestimated his strength sometimes, because of how light he is.
L initiates a deep, romantic, and passionate kiss. His lips embrace yours tenderly, yet full of yearning. You grind your hips along his crotch, feeling his very obvious boner, which causes a spike of arousal in your pussy.
The kisses between the two of you quickly become much more heated. L slips his tongue to search for an entrance, and you allow him to explore yours as he gropes your breasts, though not too rough. L was a very meticulous lover and not very aggressive. No one would've been able to tell that he's a very tender, sweet, and loving boy. He only let you see that side of him.
He tweaks your left nipple through your shirt, causing a surprisingly powerful response from you. Sounds of pleasure exit your mouth and you hold onto your boyfriend close for comfort. He continues to run his thumb along your sensitive bud, and makes sure to begin to give the other just as much attention.
"Aaahh~"
"Hmm..does this feel good, my love?"
"Y-yes.." you whine.
L continues his treatment as he kisses you. He then removes his hands, which makes you somewhat disappointed, but he proceeds to pull your shirt over your head. He looks at you unapologetically and is unable to help raising his pointer finger to his lip as he gandered at you. You were so beautiful, so perfect for him. Just for him.
His face was dusted a light pink, evident that he was aroused. Though, the continuously growing and grinding of his boner made that much more obvious. L continues to care for your tits, leaning in to suck on your right nipple as he played with your left with his finger. The reactions you gave him was enough to make him go absolutely mad.
You gasp and moan, a bit embarrassed by his fixation on your chest, though it wasn't exactly a bother. It felt very good, as you were quite sensitive there.
You tug at the back of L's shirt, attempting to pull it over his head. He removes his latch on your breasts and allows you to take it off. He shuddered a bit at the cold air against his bare skin, but when you press your own nude torso against his, he feels a sense of warmth and comfort.
The kisses continue, and you begin rocking your pussy on L's groin, causing a grunt to exhale from his mouth. Your crotch moves directly up his shaft from what you can tell through the fabric, and L's hold on you tightens. You lower your head to kiss the nape of his neck, teasing up to the most sensitive spot that you're aware of.
"Ah..Y/N...."
"Mmm," you hum against the kiss on his neck as you simultaneously tease his bulge.
"Y/N..it hurts.."
You look up, scared that you did something wrong.
"What does?"
"My..my penis. It aches, I want it out." L sounds entirely desperate at this point, as his words are becoming jumbled. It made you so horny that you were allowed the privilege of observing him in this manner.
You raise yourself from his lap, which draws out a whine from L, that indicates his need for you. You lower yourself down on your knees in front of him. You realize that the chair he is in is too tall for you to do anything, so you crank the setting so that the chair lowers. When it does you unbutton L's pants and drag them off of him. All that remained was his underwear, that had a wet spot forming along the tip of his cock. It looked so tight around his boxers that you were sure it was somehow painful.
Wrapping your fingers around the hem of his underwear, you pull them down and watch as his cock springs out. It was a little funny, but you held back the laugh in case it made him insecure. You take his pretty cock in your hands and begin stroking it.
"Aah..love.."
"Does it feel good?"
"Yes..but, please, I...I need you."
"Hm?"
"I know what you want to do to me but...I need you. To be inside of you. If you do that, I'll cum too fast and won't be able to penetrate you later."
"I thought I'd help you out with my mouth."
"I know, darling, but I can't wait."
You smile, flattered by his desire for you. You supposed a blowjob would have to wait for another time. Standing up, you leaned closer to kiss him again, and he practically pulled you into his embrace. While he cups your face with one hand, he finds his way to the button of your shorts with only his one hand. He was skilled like that. L pulls your shorts down your legs and is taken aback by how wet you were. He couldn't bare to not touch you.
His diligent fingers grazed your pussy, teasing it in a back-and-forth manner, causing you to whimper. He circled two fingers around your clit lightly, drawing the most pretty sounds from you. His cock was leaking from how seductive you were. Arching your back for him, pushing your pussy into his touch to encourage him to be rougher. He then stands up to place you on top of his desk, and he knelt before you.
L passionately places kisses along your inner thighs and proceeds to the outer labia of your pussy, neglecting your starving clitoris.
"L...please.."
"What's that, love?"
"Please..my.."
"Your what?"
URG. He was such a tease, and he most certainly did it on purpose.
"Please, my clit," you whine desperately.
"Of course, love. Who am I to deny you of that?"
Then, just as you had wanted, L wraps his tongue and lips around your clitoris and sucks it with eagerness. He was so perfect at what he did. L knew all of your sensitive spots, and how to touch you in such a way that makes you absolutely crazy. Your clit continues to be pulled by L's skilled lips, and he proceeds to flick his tongue up and down it.
"AaAH!"
"That's it baby, make all the sounds you need to."
L attacks your clit with his mouth some more, and his gentle demeanor dissolves as he doesn't hesitate to bring you to complete ecstasy. He was determined to make you cum all over his face. His sucks and licks become aggressive, almost overwhelmingly pleasurable. You weren't going to last much longer.
"L-I'm.."
"I know, love. You can do it for me, I know you can."
"MMfmH! Aaa~" and in a matter of 3 seconds, you clit spasms and slick fluid gushes out of your pussy, drenching L's face in your cum. Both of your breaths are heavy, and L briefly observes your pussy twitching. He reaches over to his pants and wipes your arousal off of his face.
L hovers above you, looking you in the eyes, to which you avert your gaze. It isn't that you didn't love looking at him, you were just bad with eye contact. He gently tilts your face to look at him, not so much as to force you to look at him, but because he wanted to see your facial expressions.
"I want you, Y/N..I want to fuck you so bad."
"You can. I want you to.."
He kisses the side of your neck and grabs your thighs to lift your legs, giving him full access to your pussy. He lines himself up to your entrance and sinks himself inside. The both of you are immediately struck with pleasure at the contact.
L thrusts at a moderate pace, making sure he figures out the perfect angle to hit your g-spot. It doesn't take him long at all, as you are moaning in complete pleasure, causing him to become entirely engrossed in arousal. L can't help but to quicken his pace, fucking you passionately as he kisses you. He watches your face intently, discerning what makes you quiver the most, but also just for his own personal amusement.
Seeing you like this. Completely cocksick for him and needy. Your warm, wet, soft, and tight walls drive him beyond enjoyment. Your face as he thrusts in you perfectly, the way you furrow your eyebrows and part your lips is so alluring and beautiful. It makes him addicted to you.
"I love you.." L mumbles.
You grip your arms around his shoulders and allow him to thrust deeper. "I love you too."
L holds you tight, fucking you carnally. Right now, he needs to cum inside of you, to claim you as his own lover. No one else but him can feel how gooey you are and see how vulnerable you become from his attention.
Your tight walls clench and he knows that he's not going to last much longer. He can feel the initiation of an orgasm coming, and he buries his face into your neck.
"Y/N...I'm going to cum.."
"Cum in me.."
You didn't have to tell him twice. With a few more fast thrusts, L finishes by bucking inside of you and cumming deep in you. Surely his seed was entering your womb. It's a good thing you're on birth control.
"Awh..darling, you're.."L's breath is heavy, "you're perfect. I love you so much."
"I love you..I love you more than I could ever tell you."
"Is that so?" L teases.
"Yes," you giggle.
"Hm..well, perhaps we should clean up. I'm sure Watari isn't going to want to take care of all of this."
"Yea, haha. You're right."
L kisses your forehead tenderly, and you both get dressed and clean up the mess you two made.
Lucky for L, he got just what he wanted.
286 notes · View notes
doyoulikethissong-poll · 1 year ago
Note
Hello, I enjoy this blog and I also like spreadsheets. A little while ago, someone asked you for a statistic and you said you weren't tracking that, but if someone else wanted to they were welcome. So I have entered all of the revealed songs' poll data into a Notion spreadsheet and created some views with possibly interesting statistics here: https://star-mandible-3f3.notion.site/12530a0deffb475aa9b7cd371b986ca3?v=62edd926d0e544808f23ca7c2b1d76e0/ The statistics might differ slightly from the ones you posted earlier, since because of the way tumblr rounds the poll results, there are a number of different possible vote distributions that have the same number of total votes and the same rounded poll results. I used approximate integer vote counts in these statistics rather than doing all the math with percents in order to avoid floating point arithmetic problems and issues where e.g. the percents only add up to 99.9% and etc. If you (or a follower) think there's some other view you'd like to see on that page, let me know! I'll continue updating it as you reveal songs.
Aaahhhh that's impressive!! 💖
Thank you so much for making it, it's so fun to click on all the things! 😄💖💖💖
129 notes · View notes
the-stray-liger · 8 days ago
Text
This module is Data Science and Im getting hit with chains and integers oh NO
13 notes · View notes
rjzimmerman · 5 months ago
Text
Excerpt from this story from Grist:
In 2015, when the countries of the world hammered out the Paris Agreement, they committed to limiting global temperatures to 2 degrees Celsius above preindustrial levels and “pursuing efforts” toward keeping them below 1.5 degrees C. The plan didn’t work out so well. Ten years later, the planet might have crossed that lower threshold sooner than expected.
A pair of new studies in the journal Nature Climate Change looked at historical data and came to the conclusion that the record heat last year — the first year to surpass 1.5 degrees C — wasn’t a temporary fluke, but a sign that the world is now soaring past this influential climate target over the long term. The new year continued that upward trajectory. Even as a natural cooling pattern called La Niña took hold recently, January managed to be hotter than ever, clocking in at a record 1.75 degrees C warmer than the preindustrial average. 
One analysis of the two studies warned that Earth had entered a “frightening new phase.” It’s a reflection of the language that has been used around 1.5 C ever since the Intergovernmental Panel on Climate Change, the United Nations-backed team of leading climate experts, wrote an influential report in 2018 on the consequences of exceeding that threshold, which it estimated would happen in 2030. Headlines warned that the world had 12 years to avert climate catastrophe. The line was echoed by the young Swedish activist Greta Thunberg and Representative Alexandria Ocasio-Cortez from New York. So is the world now at the edge of disaster?
Mike Hulme, a professor of human geography at the University of Cambridge, asserts that it isn’t. “There’s no ‘cliff edge’ that emerges from any of the scientific analyses that have been done about these thresholds,” he said. “They are, in many senses, just arbitrary numbers plucked because they are either integers or half of an integer.” 
Hulme, who has been studying the way people think about climate change for decades, argues that an obsession with global temperatures misunderstands why people care about climate change in the first place: They care about how it affects their lives, not abstract readings of the thermometer. He’s also argued that climate advocates should stop chasing a series of “deadlines” to try to drum up enthusiasm for meeting these goals.
Grist spoke with Hulme to learn more about how setting these deadlines can backfire and if there’s a better way to talk about how to make progress on climate change. This interview has been condensed and edited for clarity.
Q.You’ve written that the 1.5 C goal “painted the world into a dangerous corner.” What exactly was dangerous about it? 
A.The danger of this goal is that it was always impossible to achieve — or 99 percent impossible to achieve — 10 years ago. And everybody, I think, who understands both the dynamics of the physical climate system, and also the dynamics of the world energy system, understood that — 1.5 became a campaigning number around which civic groups, activists, and youth entrepreneurs mobilized: “1.5 to stay alive.” It was interpreted as being if 1.5 was breached, then the world either moved into an entirely different physical state that was dangerous compared to 1.4 — or, and this came along later, that somehow 1.5 represents a “tipping point” in the Earth system, which if exceeded, triggers certain feedback mechanisms that cannot be undone. 
Either way, it cultivates an atmosphere of fear. And the danger is, if we’ve transgressed 1.5, the feeling mounts that somehow it’s game over, that we’ve failed in our task to manage the risks of climate change. And that, to some at least, will cultivate cynicism, disillusion, and a loss of focus. These are dangerous emotions. They don’t help with clear-eyed thinking around the difficult politics of climate and energy.
18 notes · View notes
vagabond-starsong · 1 month ago
Text
I have been programming for 12 years and it still makes me unreasonably happy to find a use for enums.
Like, ah, yes, I have found a situation where this parameter could benefit from being a collection of words that make sense to any humans who need my code, but also elegantly allows me to iterate through the data set with simple integers. Gorgeous. So simple. So dumb. I love you enums.
9 notes · View notes
dino--draws · 4 months ago
Text
I’m gonna shove everything under the readmore but it’s finally time for me to yap about my transmasc Placeholder McDoctorate headcanons. Buckle up chucklefucks!!
INTEGER had already tore McDoctorate’s identity asunder. Cracked it open, scooped things out, left a gaping wound in its wake. A name that doesn’t belong to you, that you don’t want but can’t seem to get rid of, thats worn like a mockery and burned into you like a brand. And now everything feels off kilter. Because sometimes you get your identity abstracted and it opens all sorts of insecurities you didn’t even know you HAD till now.
Placeholder doesn’t really get Why things feel extra weird and bad until the building of the REISNO Cannon swings around in 2020. Because if anyones gonna get their egg cracked in a fucking causal loop its gonna be this guy LMAO. And that’s exactly what happens. Amidst the back and forths about the eigenmachine, Placeholder notices that this future self sounds… different? And is quite cheeky about it whenever asked! It gets Placeholder thinking about things, and before the connection is severed, future!Place nudges his past self in the direction of a certain Site-43 memeticist we all know and love. It leads him to properly meeting Lillihammer for the first time. Aaand also because if theres on thing I learned from Bury the Survivors is that memetics and countermemetics can spot an egg like it’s their job LMAOO. It’s there that he learns being trans is like,,, an option that he has and Realizes thats what he is.
And from there, transition becomes a matter of reclamation for him. A way to reclaim control over his identity and how people perceive him, after INTEGER took that away when it stole his name. He decides to undergo HRT and start T instead of using something like 113 because he wants to put that control directly in his own hands — wants to administer it to himself as a repeated assertion that he is in control of his identity. Also because his science nerd brain likes handling syringes with chemicals in them, thats an added bonus. AND he can track the changes and progress with CHARTS. He fucking loves charts and data.
While the name curse is still a problem and source of discomfort (it’s half the reason he insists people call him ‘Place’, even in professional settings, as it feels ever so slightly more ‘normal’), he regains some assemblence of control over himself. And he still ascribes to one day tear himself free, so that he can fucking choose a name.
The astute may notice unintended consequences in hinging him transitioning/realizing he's trans to the REISNO Cannon and yeag. yeag. para!Place still realizes, just a bit later and also In the paradox, but doesn't get the materials to transition until in Admoline; where he just synthesizes that shit mad science style because he spent twelve years wanting to eat glass about this tbh. Guy who has 100% injured his ribs with improper chest binding.
Theres a metaphor in here to realizing your trans while also living in a horrific situation that means you can't acquire the means to transition in a way thats make you feel comfortable with yourself. Stares into the camera. Anyways yeah there’s all my yowling about shenanigans thats been living in my head rent free for actual months
18 notes · View notes
last-sprout · 8 months ago
Text
Last Sprout Dev Diary - Nov 28, 2024
Hello again! This is one of those "low progress" weeks as I battle with shader code and scriptable renders.
Tumblr media
What I see in my nightmares.
So, for this week's Dev Diary, I wanted to take this opportunity to talk a bit about one of the core systems for Last Sprout - Brains.
Hopefully this is interesting even if you don't know much about programming, but I could always use the feedback.
Tumblr media
I live my life assuming I'm some amount of this comic.
Brains & States
Part of my process in developing Last Sprout is taking the time to build systems that are as generic and abstract as possible - any time I'm thinking about writing something directly into the code, I try to find some way to pull that out into some kind of data that can be changed in the editor. Mostly because, as much work as it is to do the programming, it's also a ton of work to do the tweaks and edits that make it feel right.
A Brain isn't actually much on its own, just a framework that defines the bare minimum an Entity (the core 'thing' that exists in the game) needs to interact with.
Tumblr media
Less fleshy than I'd like for this game.
The key here is that Brains just give instructions and move on, they don't know or care what happens once those instructions get passed to the Entity.
Tumblr media Tumblr media
Brains don't take actions, they make polite requests.
So a Brain really just says "I would like to move in this direction, aim in this direction, and perform these actions".
Actions are bit flags, which means inputs are stored in one integer number that uses its 1's and 0's as true/false values. A brain toggles these bits based on a lot of different parameters - for instance, the PlayerBrain just listens to user inputs and sets its instructions accordingly, whereas an AggroBrain contains logic to look for valid targets and chase them down.
Tumblr media
Hopefully this is a little easier to visualize for people that aren't familiar with bit flags.
An entity, every frame, asks its brain to update its instruction. Then, it passes that instruction along to a State. The State is responsible for actually taking the actions the brain recommends, So they'll have names like IdleState, WalkingState, MeleeState, and so on. States are also where animations live, so a given IdleState (which is an object that lives in the game files), will have an associated animation for Idling, and it will play that animation when the state is entered.
Tumblr media
Not the most interesting state, but the easiest one to understand.
The state is what decides what input flags to listen for, and which states to exit to. Because states always have an EntityStateType, and Entities have a list of all their allowed states, they don't actually have to know what the options are, they can just say "Exit this state to a Walking state" and the entity will find a match.
This is a ton of words, but the core of it is that Brains and States are separate, and don't know anything about each other. This means that you can attach any Brain to any Entity, and it just works. If you want to test the attack range on an enemy, you can just slap a PlayerBrain onto them and suddenly you can control it! You can duplicate the player, change its tags to Hostile, and put an AggroBrain on them and suddenly you have an AI controlled hostile copy of Twiggs! While it adds a layer of complication to developing behavior, it also means that our code is reusable and modular, and it lets us experiment freely in engine.
Brains are one of many lego brick style systems, maybe next week I'll talk about another. Thanks for reading this, and if you have any particular questions, feel free to drop and ask to @last-sprout or my personal tumblr over at @oneominousvalbatross. Fair warning though, the answer may be extremely wordy.
18 notes · View notes
felixcloud6288 · 2 years ago
Text
Okay. I've got all the data I need for the proper bug report.
If a poll option is just 0, the poll does not update on the backend. On the frontend, it appears you selected it, but on a refresh, the poll will reset.
No variants of 0 cause this issue. 0.0, '0', False, and -0 can be selected without issue. The bug only occurs when the option is 0. This means for whatever reason, a singular numeric character is saved as an int rather than a string. By extension, this might mean that 1, 2, 3, etc are also represented as ints but they don't cause issues because of the latter point I will make.
The integer 0 is equivalent to False in whatever language Tumblr is written in. So when a user clicks on 0 in the poll, a variable saves that value and at some point, that value is checked. Because 0 is equivalent to False, the function handling updating the poll either gets skipped or exits with an error.
52 notes · View notes
max1461 · 1 year ago
Text
Anyway. If I was Dennis Ritchie I would have made the syntax for
x = y;
be
&x <- y;
or more generally,
ptr <- y;
would be how you do
*ptr = y;
Uh, using a variable name should only refer to the variable's value, and to refer to the variable as such you should use a pointer. I think that would be desirable.
Anyway the syntax for declaring a variable should be like
stack x : int
to allocate on the stack, or
heap x : int
to allocate on the heap.
Actually, no never mind. My programming language will have algebraic data types, but the primitive types and type constructors are all packaged with code that actually implements the type by allocating memory etc., which is run when you declare a variable. And you can write your own constructors that implement your own code (so class templates basically, but philosophically different). So "stack" and "heap" will be type constructors, and int is a primitive, so "stack int" and "heap int" are new types that allocate on the stack and heap, respectively. Product types and recursive function types would be implemented in the obvious way, coproduct types I assume also have a standard sort of implementation.
Uh so anyway you'd declare a variable like
dec x : stack int;
which declares an x whose type is stack int, so it's allocated on the stack. In this framework x is basically a pointer; you'd have a deference operator * : (stack T | heap T) -> T which returns "pure" types e.g. values. Uh so like, you could declare a function
dec func : stack (stack int -> int)
which is itself stored on the stack, and takes in an integer variable by reference and spits out a pure integer. Yeah I'd like to program in this way. Maybe I'll make this language in the future but probably not.
26 notes · View notes