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 - "nice algo"
-
I had to open the desktop app to write this because I could never write a rant this long on the app.
This will be a well-informed rebuttal to the "arrays start at 1 in Lua" complaint. If you have ever said or thought that, I guarantee you will learn a lot from this rant and probably enjoy it quite a bit as well.
Just a tiny bit of background information on me: I have a very intimate understanding of Lua and its c API. I have used this language for years and love it dearly.
[START RANT]
"arrays start at 1 in Lua" is factually incorrect because Lua does not have arrays. From their documentation, section 11.1 ("Arrays"), "We implement arrays in Lua simply by indexing tables with integers."
From chapter 2 of the Lua docs, we know there are only 8 types of data in Lua: nil, boolean, number, string, userdata, function, thread, and table
The only unfamiliar thing here might be userdata. "A userdatum offers a raw memory area with no predefined operations in Lua" (section 26.1). Essentially, it's for the API to interact with Lua scripts. The point is, this isn't a fancy term for array.
The misinformation comes from the table type. Let's first explore, at a low level, what an array is. An array, in programming, is a collection of data items all in a line in memory (The OS may not actually put them in a line, but they act as if they are). In most syntaxes, you access an array element similar to:
array[index]
Let's look at c, so we have some solid reference. "array" would be the name of the array, but what it really does is keep track of the starting location in memory of the array. Memory in computers acts like a number. In a very basic sense, the first sector of your RAM is memory location (referred to as an address) 0. "array" would be, for example, address 543745. This is where your data starts. Arrays can only be made up of one type, this is so that each element in that array is EXACTLY the same size. So, this is how indexing an array works. If you know where your array starts, and you know how large each element is, you can find the 6th element by starting at the start of they array and adding 6 times the size of the data in that array.
Tables are incredibly different. The elements of a table are NOT in a line in memory; they're all over the place depending on when you created them (and a lot of other things). Therefore, an array-style index is useless, because you cannot apply the above formula. In the case of a table, you need to perform a lookup: search through all of the elements in the table to find the right one. In Lua, you can do:
a = {1, 5, 9};
a["hello_world"] = "whatever";
a is a table with the length of 4 (the 4th element is "hello_world" with value "whatever"), but a[4] is nil because even though there are 4 items in the table, it looks for something "named" 4, not the 4th element of the table.
This is the difference between indexing and lookups. But you may say,
"Algo! If I do this:
a = {"first", "second", "third"};
print(a[1]);
...then "first" appears in my console!"
Yes, that's correct, in terms of computer science. Lua, because it is a nice language, makes keys in tables optional by automatically giving them an integer value key. This starts at 1. Why? Lets look at that formula for arrays again:
Given array "arr", size of data type "sz", and index "i", find the desired element ("el"):
el = arr + (sz * i)
This NEEDS to start at 0 and not 1 because otherwise, "sz" would always be added to the start address of the array and the first element would ALWAYS be skipped. But in tables, this is not the case, because tables do not have a defined data type size, and this formula is never used. This is why actual arrays are incredibly performant no matter the size, and the larger a table gets, the slower it is.
That felt good to get off my chest. Yes, Lua could start the auto-key at 0, but that might confuse people into thinking tables are arrays... well, I guess there's no avoiding that either way.13 -
!rant
devCraft MineCraft server update:
Thanks to my friends YoungWolves, Mehrsun, and @AlgoRythm, the server spawn is looking nice! we're working on the Survival world
Special thanks to algo for the icon resizing!
All you need is ComputerCraft 1.75 (for 1.7.10) to join!
the Port is 25565 / default.
ip: 66.243.225.5169 -
TLDR; Wrote an awesome piece of code, but there's no one capable of understanding how hard it is.
I spent an entire night building an insanely complicated automation script, that picks out certain configuration files (in javascript fml), does some crazy parsing to pick out strings, passes them into a free translation API, translates them, and does more insane parsing to insert those strings as javascript objects.
Spent 3 hours on the bloody parsing algorithm alone.
Manager: Oh this language is really nice. Good of you to discover it can do that.
I didn't "DISCOVER" it ffs! Its a product of my head! I built the damn algo from scratch.
Seriously, screw non devs who trivialize the complexities of writing a good program. Its NOT as simple as opening notepad and typing in
import {insanelyComplexSolution} from 'daveOnTheInternet'3 -
I actually do have one. 2 years ago I found myself in a stressful situation. It lasted for an hour or so but all ended well. Ever since that incident I was wondering what should be different so that situations like these could be avoided. I had an idea. I began making sketches, sorting out the architecture I'd need and then it hit me. Shit, I could reuse this very principle for a MUCH larger scale! And in fact there's noone in the market offering this yet! There are similar products, products that offer a tiny part of my idea's functionality, but none of them are even close to what I have in mind!
And so the coding began. I was still a student back then. And employed 12hrs/day. And married. Needless to say I did not have much time for coding. Now I'm also a father (although not a student any more!) which makes my schedule even worse.
All in all I've made quite a few widely reusable libraries by now which have saved me 10s of thousands of lines typing, had yet another idea on alternative TLS which seems impossible to crack (well okay, possible. But there's a twist - cracker will not be able to know he cracked the algo :) ). Now I'm close to 100k LOC of my main project and struggling with a fucking FE (since I'm more of a bkend guy). FE's already taken a few months from me and I'm still in a square 1 :/ But I'm moving forward. Slowly, but moving. Frustrated af, but not giving up.
I had a sort of a dream to start my project before I'm 30. I have less than a year left. Still doable. This project, if it's sucessful, has a potential to become extremely popular as it offers solutions to multiple problems we have today. This project should save me from 9-to-5 work every day where, no matter how great the environment is, I feel trapped. But I need money to survive in this city . With my family.
This project should be a solution to all of my problems and probably something great the world could enjoy.
I wish I could make it. I really do. I don't want to be 9-5 any more. I don't want to be dictated what's my schedule, what's that I have to do now. what to think. I want to be free of all of this. Have enough time to live. To travel, see the world. Live in a house (God I miss living in a house....). Spend time with my family. Show my lil boy what a wonderful thing the World is!
I really want this to work. I want to be free again. And I wish I hadn't to deal with FrontEnd.
Allright, enough wabbling. Time for a nice cup of tea and back to coding. "The next big thing" is not going to create itself while I'm ranting, right?6 -
Some people of devRant are astonishingly stupid.
I post a rant of Ryan Dahl where he says he don't like the unnecessary complexity of modern software. It's an obvious UX rant, but @Crost says that it's about rushing releases and writing sloppy code to "tick the item off my list and solve the problem". @Crost and other boubas, if Ryan's vision was more widespread, macOS, the OS you all hate so much, wouldn't have existed because Linux would have the best UX ever.
I post a rant about Google algo being nasty and throwing triggering shit at me. I previously posted stuff like this, Root confirmed that it works just the way I think it works, it's a manipulative piece of crap. But @Oktokolo says that "The algorithm literally just gives you same of the stuff you just saw", well, I don't know, nice view of the problem for a guy with no computer and no smartphone, @Oktokolo! All that "youtube recommendations gathered us together on some obscure video" comments, and you still don't get it.
I post a rant about how I redesigned a fucking color wheel icon. It shows a "before-after" pic and the colors are obviously the same, but fucking @Oktokolo be popping up again, telling me that I have eye condition (!) that makes me see more blues than yellows.
No wonder you guys don't know how to use CSS, the simplest programming language (yes, it's a programming language).
No wonder smart people like SortOfTested just leave.
I still refuse to believe that devRant user base consists of stupid people exclusively. Perhaps they are just average, and I'm the genius with my Aspergers just getting way more information out of my environment like I always do.21 -
Def not dev oriented.
I am a huge fan of trading card games. It started with Yu Gi Oh, moved on to Magic, even tried, LoTR when it was a thing, tried algo Star Wars the original CCG (loved it), Duel Masters (when it was still in the U.S) Pokemon (of fucking course) and other more uncommon ones like Cardfight Vanguard, tried latino only games (Mitos y leyendas, Myths & Legends, this one is king on my list) and Flesh & Blood. But as a mexican kid, I was always a fan of fucking dragon ball, like most mexican kids.
SO I bought some cards from the newest game expansion. the owner of the TCG/anime store told me that if I was willing to play that I should hang out on tuesdays.
So, learning the rules of the game, and wanting to play with other people, I went there on a tuesday.
The MTG people were there fighting amongst themselves for some reason. the Pokemon people were there also, just opening packs without playing. A rather large table was there with a bunch of people playing a game that I did not recognize. And then there was me. I was chilling on my phone thinking that the DB dudes would show up eventually. nothing, so I just sat there waiting.
Suddenly a dude comes to the large table and starts pairing people for a "tournament" and once they are all sited he notices that 1 is missing, he walks up to me holding a store app and asks me "sorry bro, are you here to play with us by any chance?" to which I say "I do not think so, I came here for DB but I don't know what you guys are playing"
The dude looks down on his app, somehow actually sad and says "man I do play DB, but I don't think I have my cards with me, maybe, let me see" and he goes on to see if he brought something.
This was green flag n 1. the dude wanted to just play something with someone. And was doing something to not LEAVE someone behind. then quick as hell another says "well, why don't we give him a deck and he can play with us! we can teach him!" and I say "well what are you lads playing?" and he says "digimon man you like the anime? a new release came about! it's sick man it would be awesome if you play!"
Second green flag, another member of that community was happy for the idea of increasing the membership and actively did something to increase the population.
So, I hanged out with them. Close knit group, all friends from a long time, but willing to take an unfamiliar (and rather handsome) face with them.
My face when (MFW) the DB dudes where not there, so the digimon group adopted me.
I know have over.....2000 cards, most of them were gifted to me by them after they saw my chops and tough me how to play, by graciously lending me their decks.
This my lads, is what humanity is about. We got close fast, it has been 2 weeks of just chilling with them at the game lounge, just nice people, all of them really. Not a single angry moment or anything, you pull a crazy combo on them and they legit sheeeeeeeesh and applaud them, they don't care about loosing, they just want to have a good time, and this, this is a good crowd to be at.
Strive to make people feel welcomed. Being nice to others, taking a chance on people you deem to be ok, is fine really. It is rather cool. Anyone can be a salty asshole, but it takes a real king to be nice to others just for the sake of having a good time.
These dudes, they are gold. And I finally have something to take my mind away from work and other things that increase my anxiety and stress. I would much rather be there shooting the shit with the lads and playing games than at home, drinking the night away to relieve stress.
Kings3 -
So, due insanely annoying youtube algo, I just wanted to listen related music to given author - not really what I usually listen to. You know the youtube drill, it's suggestion feed sucks hard.
So I kick in incognito, my typical workaround and wait a second... it prompts me to check out youtube music (didnt know its a thing) and well, well, well... It's actually pretty nice. And solves my suggestion feed problems.
Nice. I have no idea when they deployed that but it's lookin preetty nice (at first glance) and dosent use as much bandwidth. Sweet, exacly what Dubby needed.
(said person who dislikes spotify cuz 60% of music I listen to is just not there) -
I don't like change, especially change in toilets. I tend to have a list of toilets I can use. For the last 3 months I have been avoiding the toilet at my new job, but am sitting on her right now, she's quite nice. I'll name her algo.4
-
Coding has pretty much been the center of my life?
Although I was persuaded to take a dumb expensive, useless detour into Finance... and probably cost me a nice job at a big tech company... at least until maybe I get around to really really trying really hard to possibly get an interview after reading through a few Algo books and prepping for technical interviews and doing foobar enough to request being recruited...
Anyway I still like coding for my own use a lot (check my github.io page), getting paid for it is more of a ++ though I would prefer to be solving more interesting and useful problems at work....
Oh yes and it makes me an Android/tech power user, always thinking about how to use tech to solve my problems, get what I want...
and now if you'd please, dfox when can I have my unicorn? 😀1 -
!rant
Everyone posts Algo strikes again!!!
First time I wondered, two rants doesn't match tags, first one is gif and second one is not gif. But both coming one by one.
Nice one @dfox . I like it. Still I'm thinking🤔 -
As a follow-up to my last rant, I figured out the SQL (well, WQL) query that would get me what I wanted: a collection of machines that had an error on a deployment.
I also figured out how to automate fixing the error'd machines and turning all of my possible fixes into one script that would also auto-deploy to the collection that was made with the query.
My senior coworker is impressed. He has been doing it manually for years and I was hired partially to take the load off of him. They're putting me on some more challenging projects and it's nice to be a better part of the team.
Not much of a rant, or even much of a developer thing, but I hope this bit of positivity makes for a lighter read in your Algo. -
!rant && idea
I'd it'd be nice if we would be able to browse all the images in a timeline.
Currently looking for one picture in particular, but it came across through algo. So very hard to find it again ⊙︿⊙1 -
Do anybody have a Nice Code on a sorting algorythm to sort arrays with. The algo shall be in Javascript please sens answer IF you have.4
-
How deep do you go when trying to find a solution?
I have a need for combinations of items. I have used built in functions in Python for this. When I first used those I wanted to learn how they worked internally. I read through the source and thought that was cool. I don't think I really understood that code very well.
Now I need the same solution in C++. There is not a prebuilt combinations function in C++. There is a prebuilt verion of next_permutation. I can build upon that to make my combinations code. However, I am in the middle of trying to make something work. So I found this nice SO question:
https://stackoverflow.com/questions...
The code I ended up using:
template<class RandIt, class Compare>
bool next_k_permutation(RandIt first, RandIt mid, RandIt last, Compare comp){
std::sort(mid, last, std::bind(comp, std::placeholders::_2, std::placeholders::_1));
return std::next_permutation(first, last, comp);
}
template<class BiDiIt, class Compare>
bool next_combination(BiDiIt first, BiDiIt mid, BiDiIt last, Compare comp)
{
bool result;
do{
result = next_k_permutation(first, mid, last, comp);
}while(std::adjacent_find(first, mid, std::bind(comp, std::placeholders::_2, std::placeholders::_1)) != mid);
return result;
}
I am mostly able to figure out what is going on with the templates. I still am not understanding the basic algo behind permutations.
Our data set is tiny. 4 items max. So efficiency isn't really a big issue here.
How long do you spend learning how it works versus just finding a solution for the task at hand?
In general I need to spend more time learning different kinds of algorithms. So I should probably add permutations to that list of ones to study.1