Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API

From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "left-pad"
-
!dev
So, the house next door to me is being renovated into half a dozen apartments. This process has been ongoing for like 4 years of here-and-there houseflipper failboating, and if I had to guess, 3 owners worth of this fuckery.
The latest shitheel trying to polish this turd into something saleable has had it sit partially covered with plastic for months, mostly getting rained on. One crew came by last week and put half the thermal shielding up before something happened and they left. Then half of it fell off the house, into my yard. Nice person that I am I gathered it all up and left it in the various excavated pools of water on their property in which I can only imagine they are busily raising farm to table mosquitoes for the local market.
FF to today and I see a crew pull up to the house and start nailing plywood to the side of the house with no thermal pad underneath it. Which is a legit code violation and a mold hazard, but yolo amirite? I chat up some of the guys and find out that they were scheduled to install the plywood today (apparently he'd run out of money for the nice modular siding they used on the back half) and the owner didn't give a shit if the rest of the work was done. Meanwhile shit is still falling off the house onto my house, but also wgaf. 🚬
Tl;Dr the people trying to flip the house next to mine were obviously IT managers in a previous life.6 -
Love it when you open up a frontend devs project and among some 50 included npm packages for a really simple project you see this16
-
When it takes 30 minutes to find a power button in lenovo idea pad.
Whose idea was it to put a power button in bottom left side????5 -
You know what really grinds my gears? When people criticize a programming language but uses edge cases and stuff that can be avoided by using the tried and true "don't be an idiot". Take for instance JavaScript, a language I like and a language that has a lot you can criticize. But I feel like a lot of peoples criticism isn't warranted.
What's that? No ints? Use parseInt or Math.floor.
What are you saying? == works in strange ways? Yes, that's what we have === for.
Type coercion is wonky? Think it's weird how string + int works differently than string - int? Wanna string with number + - + - - + - - etc? Don't! Don't add strings and ints, don't subtract strings and ints. You can't in statically typed languages and you aren't supposed to in dynamically typed
Adding arrays and objects, arrays and arrays, objects and objects etc. is inconsistent? Why are you trying to do that?
Adding floats together gives odd results? Now we're getting somewhere! And Mozilla responded to that with a method called toFixed.
Declaring variables with var doesn't always work that well? Use let and const
Then there's this weird attitude that some people I've met have, where they will complain about the module system and how "well you rely on the community for those packages" as if it's a bad thing. And then coming with the "well you don't know what the (open source) packages do internally" as if I (for the most part) give a shit. Then they'll swear by companies like Zend or Microsoft as if they can't just stop supporting the languages they use. Maybe it's just because I like community content more because of video game mods.
Wanna criticize JS, then there's plenty to talk about. Like the built in date object is basically shit. Or how in NodeJS you can have node_modules in your node_modules. Or how classes don't really have the best syntax. Left-Pad. And so on (it's too late for me to be able to remember much more).1 -
I don't remember/saw if somebody posted it in this much detail, but here's how one developer essentially showed how broken npm once again is, by just removing all his published packages, basically breaking thousands of other packages that depended on it, very interesting read, especially to understand how npm can't be relied on.
https://theregister.co.uk/2016/03/...
http://blog.npmjs.org/post/...
https://medium.com/@mproberts/...
https://arstechnica.com/information...4 -
when I was like 11yrs. old, my father has bought a new phone for himself. I used to play a lot of gta vice city those days on my PC. one day i got to use a card reader to exchange multimedia between PC and the phone.
so, i copied gta vice city in my phone. bcoz i knew that i can move around the players using the phone's d-pad. I was left broken when I saw the error msg. in the phone: "file not recognised"
:-/
After few days, my friend wanted to play gta-vc, so he asked for the game CD. but this guy didn't have a computer in his home and he won't listen to me when I try to tell him, "you can't just play a video game in your DVD-player with a TV remote??" So, I gave it to him.
Next day, he was angry at me, bcoz the game didn't worked, obviously it was me who hve messed something in it. :-/
What utterly stupid things you guys or your friends have done?7 -
$ yarn add leftpad @types/left-pad
It was faster than reinventing the wheel and I needed that functionality :> -
TAP ONCE WITH TWO FINGERS FOR A RIGHT CLICK!!! ONCE WITH TWO FINGERS !!! NOOO NOT THE TOUCH PAD RIGHT CLICK DON'T TOUCH THAT!!!
NO NO NO DON'T DO THAT...
DON'T SCROLL BY HOLDING THE LEFT BUTTON AND DRAGGING...
TWO FINGERS SLIDE TO SCROLL
BARBARIANS ALL OF U3 -
i'm starting to like reactjs over vanilla, but i can't help but remember how it suffers on npm's dependency hell. i mean just look at what happened before at left-pad. it makes you feel like the entire system is so fragile.3
-
Previously, I half-assedly theorized that, given a timeline on which I'd store state mutations, with each mutation being an action taken ingame by either the player or computer, I could feasibly construct a somewhat generative narrative engine.
Basis: the system reads the current state, builds [some structure] holding possible choices, and prompts the player to take an action from those choices. The action modifies the state, and the loop begins anew, save that now it's the system "prompting itself", so to speak.
Utterly barebones and abstract as it may be, it was useful to build this concept in my head as it gave me a way to reason about what I wanted to build. But there were two problems which I had to grapple with:
- What would [some structure] even be?
- How would the computer make choices based on an instance of [some structure]?
I found myself striking the philosopher pose for long hours on the toilet, deeply pondering these questions which I couldn't help but merge into one due to the shared incognita; silly brain wanted trees but I kept figuring out that's not going to work as the relationships between symbols are sometimes but not always hierarchical. Shhh, silly brain, it's not trees.
So what is the answer?
Well, can you guess it?
Graphs, of course it's fucking graphs. Specifically, a state transition graph. It was right in my face the whole time and I couldn't see it. Well, close enough.
It's ideal as the system in question is a finite state machine with strong emphasis on finite -- the whole point is narrowing down choices, which now that I think about it, can also come down to another graph. Let me explain.
A 'symbol' or rather SIGIL is an individual in-game effect. To this FSM, it's an instruction. Sigils are used to compose actions, which you can think of as an encapsulation of some function, or better yet, an *undoable transaction* which causes some alteration in the game world.
But to form a narrative from a sequence of such transactions, and to allow the system to respond to them coherently, relationships need to be established between sigils in a manner that can be reasoned about in code. You may not realize this yet but this is both a language processing and text generation problem, so fuck me.
However, we have a big advantage in that we are not dealing with *natural* language, that is to say, each sigil is a structure from which we can extract valuable information on the nature of the state transformation applied.
This allows us to find relationships between sigils programmatically: two words are related if some comparison between the underlying structure -- and the transformation it describes -- holds true. Therefore, if we take the sigils that compose the last transformation in the timeline, fetch relationships for said sigils according to a given criteria, then eliminate all immediate relationships that are not shared between all members of the group, we end up with a new one that can be utilized as starting point to construct a reply.
More elimination of possibilities would have to be performed as this reply is constructed [*], but the point is that because the context (timeline) is itself made of previous transforms, the system *could* make such a reply coherent, or at the very least internally consistent.
Well... in the world of half-assed theory. I don't know whether I'm stupid, insane, both, pad for alignment, or this is an actual breakthrough. Maybe none of the above.
Anyway, it's another way to mentally model the problem which is very useful. New challenge would be the text generation part, extremely high chance of gibberish within existing vision; need more potty-pondering.
[*]: I'll break it into bits OK.
0. Determine intention. That's right, the reply isn't actually _fully_ generated, it's just making variations on a template. So pick a template depending on who is taking a turn and replying to who (think companion relationship score bullshit)
1. Sort the new group according to the number of connections the constituent sigils had to the context from which they were extracted, higher first.
2. Pop from the sorted group (least connections). If there are other nodes left in the group, and it doesn't connect back to any of the other nodes (sigils) up to a certain distance, then discard it and repeat. Else keep going.
2. Unshift from the sorted group (most connections). If can traverse up to another sigil in the same group, then go for it. Else derive search criteria from current context (including intention), so as to look for another sigil to concatenate. Some form of weighting would be needed here, need to think about that.
3. Decide when to stop. Probably some chance, as in the more sigils you have, the lower the chance a new one will be added maybe. Need to think about this too.
4. Send transform, loop begins anew.
And that's it. So alright brb I'm going to take a dump on the Agora.14