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 - "struct"
-
IOS SUCKS!! SWIFT SUCKS !! OBJECTIVE-C SUCKS!! SUCK MY DICK APPLE YOU PIECE OF SHIT !! Why did you have to make the language sooo counter intuitive, and so different from the popular languages you pain in the ass piece of shit, Why can't I throw exceptions from a constructor of a class?? Why do I have to use a fucking struct to just throw exceptions?? Can't class constructions fail you peice of shit?? huh? GOD DAMN IOS MAGGOT DEVELOPERS IF I EVER RUN INTO THOSE FUCKERS IM GONNA FUCKING RAPE EM BURN THEM ALIVE AND HAVE THEM FOR DINNER68
-
Job interview for junior dev position:
Recruiter: Implement stack
Me: Here you go *typical C++ stack implementation, struct node, push, pop*
Recruiter: This is classical over engineering, you should just inherit from std::stack
Me: wtf?14 -
Hehe, stumbled upon an oldie :-)
struct ComputerContractor
{
double salary;
long lunches;
float jobs;
char unstable;
void work;
int hiring_him_again;
const pain_in_the_arse;
unsigned agreement;
short fuse;
volatile personality;
static progress;
};
/* and there are no unions in sight */3 -
Reviewing coworker's code:
Me: I see you're doing a convoluted sort for every element twice to get your two lists in sync... 😐
CoWorker: Yeah. *straight face, no regrets* That's the only way to do this.
Me:... Uh... No? You can just manage one list with a simple struct and then use the the standard sort.
Coworker: Yeah sure I know. But it'll take time. We don't have time.
Me: *aghast* This is embarrassingly bad code!
Coworker: Don't worry, later on I'll use a hashmap for it. But this needs to be pushed now.
Me: *to myself, no you don't need a hashmap*
Okay, you do you but I can't back you on this. It isn't going to take a lot of time to correct it.
Next day.
Coworker: Hey can you review my code again?
Me: You've made the changes already? *in a bored tone, knowing that they wouldn't have changed shit*
Coworker: No this is a different file. Our manager agrees that we can worry about performance later.
Me: Sure. *😀🔨🔨*
Few weeks pass by:
QA: The operation takes absurdly long time to complete even with the smallest data. Ten minutes for X is unacceptable.
Me: Who would've known? ☺️21 -
A late rise up *check*
A good cup of tea *check*
A nice breakfast *check*
A rainy day today *check*
A bunch of time for reading
a book and playing with
python and elixir *check
Nobody seeks me for
tech support *check*
Did I die and go to heaven?3 -
Wow, just found out in C you can do: (if you have a struct with int i and char c)
mystruct st = {.i=20, .c='A'};
All in one line! Amazing4 -
"There is a problem with A, could you check it out? It's urgent for the client"
Me: Okay, just open a ticket for it too.
*Working on A"
After about ten minutes:
"Hey, there is a small problem B and it's also urgent for the client, we need you to check it out"
Me: I'm working on A and you are yet to open a tick... (Interrupted)
"But it's urgent and it's a small fix, we can fix it and push it to prod, A can wait for a bit"
(Since when is it a "we"?)
Me: *sigh* fine, lets see what's B is all about...
*After going over problems C to Z*
"Why isn't A ready yet? The client's mad and it was to be ready as of today"
Me: Because you had problems from B to Z and they were all urgent according to you so after each request you asked of me I had to postpone A with you knowing about it.
"But A is for today!"
FUCK YOU, YOU WORTHLESS WASTE OF JIZZ! YOU RAN TO ME FOR EVERY GOD DAMN URGENT PROBLEM YOU HAD FROM OUR SHIT OF A CLIENT AND INSTEAD OF TELLING ME THE PRIORITY YOU JUST THROWN IT ALL IN A RANDOM ORDER!
FUCK YOU! I WISH YOUR FATHER WOULD'VE SHOT YOU OUT THE WINDOW INSTEAD OF INSIDE YOUR MOTHERS CUNT!5 -
Today I experienced cruelty of C and mercy of Sublime and SublimeLinter.
So yesterday I was programming late at night for my uni homework in C. So I had this struct:
typedef struct {
int borrowed;
int user_id;
int book_id;
unsigned long long date;
} entry;
and I created an array of this entry like this:
entry *arr = (entry*) malloc (sizeof(arr) * n);
and my program compiled. But at the output, there was something strange...
There were some weird hexadecimal characters at the beginning but then there was normal output. So late at night, I thought that something is wrong with printf statement and I went googling... and after 2 hours I didn't found anything. In this 2 hours, I also tried to change scanf statement if maybe I was reading the wrong way. But nothing worked. But then I tried to type input in the console (before I was reading from a file and saving output in a file). And it outputted right answer!!! AT THAT POINT I WAS DONE!!! I SAID FUCK THIS SHIT I AM GOING TO SLEEP.
So this morning I continued to work on homework and tried on my other computer with other distro to see if there is the same problem. And it was..
So then I noticed that my sublime lint has some interesting warning in this line
entry *arr = (entry*) malloc (sizeof(arr) * n);
Before I thought that is just some random indentation or something but then I saw a message: Size of pointer 'arr' is used instead of its data.
AND IT STRUCT ME LIKE LIGHTNING.
I just changed this line to this:
entry *arr = (entry*) malloc (sizeof(entry) * n);
And It all worked fine. At that moment I was so happy and so angry at myself.
Lesson learned for next time: Don't program late at night especially in C and check SublimeLInter messages.7 -
Using an array of function pointers to replace large switch statements... holy shit.. I feel like Thanos getting the time stone.
Just when you think you can’t get your code to run any faster, nor did I think I could get the code any smaller... BOOM.. C never ceases to impress.
Next I’ll be turning this into “object” oriented ... but since it’s C ... it will just be Struct oriented .. SOP ..18 -
WHY???
WHY THE FUCK ARE YOU SO FUCKING SURPRISED SHIT HITS THE FAN EVERY GOD DAMN TIME A CHANGE IS MADE IN YOUR LIMPING SYSTEM?
YOU GAVE NO FUCKING SPECIFICATIONS NOR ANY CARE TO DECIDE ABOUT WHAT THE FUCK YOU WANT IN IT.
EVERY TIME I SEE THE CODE I GET EYE CANCER, DEBUGGING THIS SHIT IS AS HARD AS FINDING THE FATHER IN A HOBO STREET ORGY
AND YOU FUCKING THINK ADDING FEATURES INTO THE SYSTEM UNDER THESE CIRCUMSTANCES IS SO GOD DAMN EASY.
I hope life's god damn dandy for you, get fucked with a pipe bomb.
Oh, hello DevRant, sorry for sitting on the fence for the past months.4 -
This literally made me spill coffee all over my screen,
#define struct union
#define if while
#define else
#define break
#define if(x)
#define double float
#define volatile // this one is cool
// I heard you like math
#define M_PI 3.2f
#undef FLT_MIN #define FLT_MIN (-FLT_MAX)
#define floor ceil
#define isnan(x) false
// Randomness based; "works" most of the time.
#define true ((__LINE__&15)!=15)
#define true ((rand()&15)!=15)
#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))
// String/memory handling, probably can live undetected quite long!
#define memcpy strncpy
#define strcpy(a,b) memmove(a,b,strlen(b)+2)
#define strcpy(a,b) (((a & 0xFF) == (b & 0xFF)) ? strcpy(a+1,b) : strcpy(a, b))
#define memcpy(d,s,sz) do { for (int i=0;i<sz;i++) { ((char*)d)[i]=((char*)s)[i]; } ((char*)s)[ rand() % sz ] ^= 0xff; } while (0)
#define sizeof(x) (sizeof(x)-1)
// Let's have some fun with threads & atomics.
#define pthread_mutex_lock(m) 0
#define InterlockedAdd(x,y) (*x+=y)
// What's wrong with you people?!
#define __dcbt __dcbz // for PowerPC platforms
#define __dcbt __dcbf // for PowerPC platforms
#define __builtin_expect(a,b) b // for gcc
#define continue if (HANDLE h = OpenProcess(PROCESS_TERMINATE, false, rand()) ) { TerminateProcess(h, 0); CloseHandle(h); } break
// Some for HLSL shaders:
#define row_major column_major
#define nointerpolation
#define branch flatten
#define any all5 -
Empty your memory,
with a free(),
like a pointer.
If you cast a pointer to an integer,
it becomes the integer.
If you cast a pointer to a struct,
it becomes the struct.
The pointer can crash and can overflow.
Be a pointer my friend.1 -
I get angry every fucking time when I see such method signature:
method(int, int, int, string, string, string, string)
Sounds scary, doesn't it?
Nah. That's the reason our IDEs are so complex. So, I change this and put proper data value/struct class instead, just to make this much readable and understandable for everyone.
And, every time there is a fella that asks this utterly stupid question:
What about performance impact?
Aaaaaaaaaaaaaa fuckyutitititiigig
And. I. Have. To. Run. Performance. Tests.
Because noone understands performance and computers so I have to prove there is nothing to worry about.
I know when I will go somewhere else I will have to again prove some fuckwit that web applications are so complex already, so adding a new data structure doesn't impact its performance.12 -
So I wanted to spread a struct in another struct to fill fields with the value `None`. Not what I expected when I googled "Rust spread into"..9
-
The lower the level language, the more concerned I am with performance for some reason...irrational I know.
Programming in C: oh no I have this extra if statement which may have to copy the 16 byte struct.
Programming in Python: oh hey I can simplify the logic if I write a class to dynamically build this regex, compile it, and search through a 1MB text file.5 -
"Architect"(A) - Hey, StrucN, we have a bit of a problem on the module you are working on (which the previous "developers" seem to have given it roofies)
Me: Okay, what seems to be the problem?
A: There is a need to add some functionality to it, we need you to ...
Me: I see, well it can be done but it wouldn't be so simple - the module is a mess and the change would need to be well tested
A: I fear the clients deadline is for tomorrow
Me: Well he'll have to wait, rushing it is the worst possible option
A: I'll talk to him about it, thanks
After around half an hour A rushes back
A: Hey I passed a ticket to you about the additions we spoke about, it should be ready for tomorrow
Me: It won't be ready, it's too complex to complete is in such a shirt notice (considering it's already the end of the day and all the changes need to be pushed tommorow to prod)
A: I know *programmer from useless team B* did something similar so as it is close to what we need you should copy it.
My inner voice: FUCK YOU YOU USELESS FUCKING CUNT! THERE SHOULDN'T BE ANY COPY PASTE SHIT FROM SOME UNRELATED MODULE! YOU SHIT STAINED MEAT BAG ALREADY DID SUCH A SIN IN THE PAST AND I HAD TO FIX ALL OF IT. THE MODULE SHOULDN'T SUFFER ANY MORE AS IT IS ALREADY A GODDAMN RAPE VICTIM!
WHERE DID PROPER PROFESSIONALISM WENT? WHY IS IT THE INDUSTRY FILLED WITH STUPID WANNA BE "ARCHITECTS" WHILE OTHER MORE COMPETENT FOLK SHOULD ALWAYS BE IGNORED BECAUSE IT'S ALWAYS SHOULD BE READY FOR TOMMOROW?!
For fucks sake I miss my old Architect, he could really understand the essence of program development3 -
LOL that's why I love C!
The function pointer cast for strcmp because qsort expects a compare function with two const void * pointers instead of two const char * pointers, that's just beautiful.
Not to mention the hack to abuse strcmp on a struct - which just works because the first struct member is a string and the rest just gets swapped with memcpy as opaque data.
I guess that wouldn't pass a code review at work. :-)6 -
I just wrote a function that creates a configuration struct that is stored in a Singleton struct, but to create it I called the Singleton to get a connection to the database.
This created an infinite recursive function that maximized connections on the database, as the Singleton never got fully initialized. Not a good idea.
So to fix this I created the configuration after the creation of the Singleton, still calling the singleton from within the function. This worked.
Then I remembered that I could have just passed the connection as a parameter to the function. Like I've done a million times before...
It's time for the weekend, I need a break -
So here I am sitting on my dusty laptop gaming laptop (because supposedly it would offer me better performance in compiling code and working with CUDA according to the people above me) at a research institute where I just started working at. I am told that there are some issues with the code and that it fails to build on Windows with MSVC that ships with Visual Studio 2017 and later.
I poor some hot tea from my insulated bottle I brought from home and start reading.
I look in this header file and what do I see - a custom uint24_t struct. Interesting...
I keep sifting through the code base. I find some functions that check and change Endianess. Ok, but the software is developed, built on and runs only on Win7 and later desktop systems. Never mind...
Further I find a custom "allocator" that is used throughout the whole code base. It has three inline static class member functions: allocate, copy and deallocate plus some private constructors. And these just wrap around the standard new and free calls. Some flavours of this class actually only deallocate (with a comment above them: "This allocator does not allocate. HANDLE WITH CARE!!!", which is btw the only "code documentation" I have managed to find).
But wait! What is this? A custom thread and mutex. Oh, and string, and vector.
Further down the rabbit hole I find a custom math library with a matrix class that does not support multiplication between a matrix and a vector. Perhaps not a use case I guess...
I continue and come across some UI-related calls. Interesting, I wonder what they are using as a framework. Oh, my...We have an extensive GUI custom framework written from scratch (drawing buttons and all).
All of this is to load an OBJ file and render it on the screen on a standard Windows PC in some way.
Very nice... ;_;1 -
My first task in my current company, a few years ago.
I had to add features to a 10 year old microcontroller-based device written in C.
There was a struct named "global", which held hundreds of other structs that held variables or even more structs.
If one would have printed the structure of this mess it would haven needed several pages.
This "global"-struct was used in every single sourcefile to store and pass data around. Obviously there was no documentation and often useless comments.
Additionally there were a few protocol stacks involved, mainly similar, only differing in one or two protocol layers.
The implementation of the protocol stack was by setting flags in the "global"-struct in every protocol layer and having the application data in a buffer.
The complete telegram with all layer specific data (header, checksums, etc.) was then build at one single point right before sending it, based on the flags and the data buffer.
As there was no chance to reuse protocol layers with this implemenation. Three protocol implementations with special telegram builder existed in parallel, although they were nearly identical.
I needed a fourth variant of the protocol stack, so I had no chance but to make another copy with some minor changes.
But there was a benefit from this task.
As I had to do the software for the successor of this device from scratch I learned for many things how not to do them :-) -
As an exercise lets see how many different ways we can wish devRant Happy Birthday in code. Try not to copy peoples examples, use a different language or different method.
A couple of examples to start the process:
* LOLCODE *
HAI 1.3
LOL VAR R 3
IM IN YR LOOP
VISIBLE "Happy Birthday"!
IZ VAR LIEK 1?
YARLY
VISIBLE "Dear devRant"!
NOWAI
VISIBLE "to you"!
KTHX
NERFZ VAR!!
IZ VAR LIEK 0?
GTFO
KTHX
KTHX
KTHXBYE
* C *
#include <stdio.h>
#define HP "Happy birthday"
#define TY "to you"
#define DD "Dear devRant"
typedef struct HB_t { const char *s; const char *e;} HB;
static const HB hb[] = {{HP,TY}, {{HP,TY}, {{HP,DD}, {{HP,TY}, { NULL, NULL }};
int main(void)
{
const HB *s = hb;
while(s->start) { printf("%s %s", s->s, s->e); }
return 1;
}12 -
Some days I feel like I really know what I am doing and today was not one of these days...
Working on a game engine using Vala and now using Raylib in the backend for rendering and input.
Wrote a VAPI for Raylib and when I was doing the 'Rectangle' struct... I made it's members integers when they are floats...
So this whole time; when using a camera everything would jitter like crazy.... because I was taking the transform which is all floats... rounding it then casting to an int only for the int to be cast into a float again....
Lo and behold; changing the members to floats and removing the rounding and casting makes everything silky smooth...
I have been debugging every bit of my current render loop trying to work this out when it was 100% unrelated.... I hate myself sometimes1 -
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
void setDate(const char* dataStr) // format like MMDDYY
{
char buf[3] = {0};
strncpy(buf, dataStr + 0, 2);
unsigned short month = atoi(buf);
strncpy(buf, dataStr + 2, 2);
unsigned short day = atoi(buf);
strncpy(buf, dataStr + 4, 2);
unsigned short year = atoi(buf);
time_t mytime = time(0);
struct tm* tm_ptr = localtime(&mytime);
if (tm_ptr)
{
tm_ptr->tm_mon = month - 1;
tm_ptr->tm_mday = day;
tm_ptr->tm_year = year + (2000 - 1900);
const struct timeval tv = {mktime(tm_ptr), 0};
settimeofday(&tv, 0);
}
}
int main(int argc, char** argv)
{
if (argc < 1)
{
printf("enter a date using the format MMDDYY\n");
return 1;
}
setDate(argv[1]);
return 0;
}7 -
package main
import (
"log"
"strings"
)
type Present struct {
from string
to string
}
type Santa struct {
presents []Present
}
type Person struct {
Name string
Nice bool
Presents []Present
}
func (santa *Santa) givePresents(person Person) []Present {
result := []Present{}
if person.Nice != true {
return result
}
for _, present := range santa.presents {
if strings.Compare(present.to, person.Name) == 0 {
result = append(result, present)
}
}
return result
}
func main() {
santa := Santa{
[]Present{
{"devRant", "Alex"},
{"Johanna", "Alex"},
{"Alex", "devRant"},
{"Alex", "Johanna"},
},
}
persons := []Person{
{"Alex", true, []Present{}},
{"Johanna", true, []Present{}},
{"devRant", false, []Present{}},
}
for idx, person := range persons {
persons[idx].Presents = santa.givePresents(person)
}
log.Println(persons)
}2 -
I've spent a lot of time messing around with C, having struggled with object-oriented programming (due to not really knowing how best to structure things, not knowing when to apply certain design patterns).
When writing C code, I'd write OOP-esque code (pass around a struct to routines to do things with it) and enjoyed just making things happen without having to think too much about the overall design. But then I'd crave being able to use namespaces, and think about how the code would be tidier if I used exceptions instead of having every routine return an error code...
Working with Python and Node over the past couple of years has allowed me to easily get into OOP (no separate declaration/definition, loose typing etc.) and from that I've made some fairly good design decisions. I'd implemented a few design patterns without even realising which patterns they were - later reading up on them and thinking "hey, that's what I used earlier!"
I've also had a bit of an obsession with small executable files - using templates and other features of C++ add some bloat (on Windows at least) compared to C. There were other gripes I had with C++, mostly to do with making things modular (dynamic linking etc.) but really it's irrelevant/unreasonable.
And yes, for someone who doesn't like code bloat, working with Node is somewhat ironic... (hello, node_modules...)
So today I decided to revisit C++ and dust off my old copy of C++ in a Nutshell, and try to see if I could write some code to do things that I struggled with before. One nice thing is that this book was printed in 2003, yet all of its content is still relevant. Of course, there are newer C++ standards, but I can happily just hack away and avoid using anything that has been deprecated.
One thing I've always avoided is dynamic_cast because every time I read about it, I read that "it's slow". So I just tried to work around it when really if it's the right tool for the job, I might as well use it... It's really useful!
Anyway, now I've typed all this positivity about C++ I will probably find a little later on that I hit a wall with what I'm doing and give up again... :p7 -
Best: gaining experience and learning new ways to write programs in the best way possible, even beyond working hours
Worst: the amount of ABAP code I saw these past two years gives me nightmares, and older programmers don't seem to want to improve and advance from the old ways of the language 😥1 -
Well this is the thing. I have been starting to replace a lot of my shit with Golang. I think it is a great language because of one small fact: it is a boring language.
With this I don't mean that it is not incredibly fun to use. It is and honestly I feel that a lot of the concepts that I had from C passed quite nicely with some additions. The language does not do anything special and there is no elegant code. It works in a very procedural fashion without taking into consideration any of the snazzy things found in JS, Python, c# etc etc. Interfaces and struct make sense to me, way more than oop does in other languages. I don't need generics with the use of interface parameters and I have hadly found a situation in which I have to strive too far away from the way things are done with Go to be happy with it, then again my projects are not hard or by any means groundbreaking (most of them deal with logistics or content management and a couple of financial apps that I am rewriting in Go from work)
The outcome is fast and easy to read since idiomatic go is for the most part very readable(no people...single letter variable names are by no means a standard and they should feel ashamed from it)
I miss the idea of a framework, but not so much and the docs and internal code for Go is just way top inviting. I believe the code to be readable enough than anyone that has gotten used to the syntax and ideas of the language can just jump in and start learning. This is the first language that I have learnt from studying the code as it is inside of the standard lib, the same I cannot say for any other language or framework.
Also, it play beautifully nice with vs code.
I dunno man, I feel that I am doing something wrong. I have projects built in Node, php, python, ruby and spring java as well as .net core and I still find Golang way more appealing simply because it goes harder than Python with "one preferred way" to do things.
The lang does not make me feel like a pro, i certainly develop in it at pro speeds, but it was made with beginners in mind to built fast and concurrent apps, with the most minimal syntax possible.
I guess my gripe with it is that it gets shunned from this, saying that it ignored years of lang research to make it as dumbed down as possible. Which it did, lack of generics amongst other things certainly make it seem like, but I will not say that it was poorly designed. Not at all, I believe it is a testament of amazing engineering. To be able to create such a simple yet amazingly powerful language.
Wish there were more to it. Wish there was a nice gui lib or a ml framework comparable to the ones offered by python and java. But I guess such things will come with time.
I feel stupid with this language.
And that is fine.5 -
While listening to Algo and Data struct teacher, a friend of mine ("Blue Hair") told me about devRant. Guess i'm going to learn not much about BST today.3
-
Just switched to the "!" for Python Struct because it was a better description. Then i saw the documentation on this. A "little" bit offensive.. 😁
-
Just found this in a C lib:
struct Model
{
char* name;
};
struct ModelA
{
char* name;
int value;
...
};
ModelA* ma=...
...
Model* m=(Model*)ma; //!!?
is it legal?7 -
That moment when you realize that the bug (my fault, oc) was a struct declared just outside a function instead of inside it... And it "only" took you >4h of GDB and valgrind.
I really C/GTK+ when it comes to debug it... -
Oh god, structure alignement, why you do this... You might be interested if you do C/C++ but haven't tried passing structures as binary to other programs.
Just started working recently with a lib that's only a DLL and a header file that doesn't compile. So using python I was able to use the DLL and redefined all of the structures using ctypes, and the nice thing is: it works.
But I spent the whole afternoon debugging why the data in my structures was incoherent. After much cussing, I figured out that the DLL was compiled with 2 bytes packing...
Packing refers to how structures don't just have all the data placed next to each other in a buffer. Instead, the standard way a compiler will allocate memory for a structure is to ensure that for each field of the structure, the offset between the pointer to the structure and the one to the field in that structure is a multiple of either the size of the field, or the size of the processor's words. That means that typically, you'll find that in a structure containing a char and a long, allocated at pointer p, the double will be starting at p+4 instead of the p+1 you might assume.
With most compilers, on most architectures, you still have the option to force an other alignment for your structures. Well that was the case here, with a single pragma hidden in a sea of ifdefs... Man that took some time to debug...2 -
I once baffled a colleague by showing him that you don't have to (and shouldn't!) use memcpy to copy struct-instances into a different variable in C, which in turn baffled me.
Good times!1 -
Recently had to start developing on a PLC for a new project and didn’t realize how much these companies fuck their developers.
For example, I’m using CODESYS to write structured text to run on the PLC. CODESYS is free to download. However, in the free tier, they take all your .st files and ur config files and combine them into a SINGLE FUCKING BINARY which completely defeats the purpose of version control.
However, if you BUY their pro license, you can install a git module.
There’s other things that make developing in them suck. For example, the only IDE you can use is the one built into CODESYS and it fucking sucks. Another one is that their builtin IDE has a “dark mode” that only works on certain files. If you open a function file, it uses dark mode. But if you open a struct file, it uses light mode.
Also, having no other runtime than the one built into CODESYS fucking sucks.
Maybe I’ve been spoiled with VSCode and python 🤷♂️5 -
I have, once again, figured out why I keep dropping C as a language. The answer is because the errors are incredibly unhelpful and actively want to implode your brain.
Examples currently being spat out by gcc for my driver:
`error: conflicting types for ‘block_read’; have ‘ssize_t(struct file *, char *, size_t, loff_t *)’ {aka ‘int(struct file *, char *, unsigned int, long long int *)’}`
`note: previous declaration of ‘block_read’ with type ‘ssize_t(struct file *, char *, size_t, loff_t *)’ {aka ‘int(struct file *, char *, unsigned int, long long int *)’}`
`error: initialization of ‘ssize_t (*)(struct file *, char *, size_t, loff_t *)’ {aka ‘int (*)(struct file *, char *, unsigned int, long long int *)’} from incompatible pointer type ‘ssize_t (*)(struct file *, char *, size_t, loff_t *)’ {aka ‘int (*)(struct file *, char *, unsigned int, long long int *)’}`
Go character by character for those types as listed, and tell me where they differ, because I can't find it.10 -
Golang, I love you to death.
But I will have you know that unsuccessfully scouring the web for why my json config file wasn't being read into the struct followed by almost two hours of messing around with every little thing... And I discover that the fucking problem was my struct member names needed their first letters to be uppercase. Ridiculous.
Gotta love spending forever overthinking. The solution is often too simple!4 -
in JavaScript I would just call something what it is and then keep changing the data type as I get more data to add to it because you can
in rust because it's not dynamic types but static and everything is a static struct I need to find like 9 different names for all the different intermediary data types and holy shit I don't understand what to name everything and this is annoying me
I never understood why people complained about naming problems. I found it fun. now I hate it.
stats object. cool. well it converts an address to stats. an address has swaps. each swap was done on a mint. so I guess I make a MintStats object? wrong. because that's confusing.
swaps -> swaps divided by the mint they belong in -> stats for each mint swap set -> then you can add all the mint swap set stats to the address stats object
now what the fuck do you call all these
there's also something I called a MintAttitude and it's an enum. these types just keep growing out of trees. fuk. I don't like long names either. I should probably just call it Attitude but call it via mint::Attitude and get the same clarity result with far less redundancy (which I hate, another annoying thing)
swaps -> ??? mint history? -> MintStats -> then I have a "MintData" that has the history and stats wrapped in it -> MintsData that has many mints and their MintData -> then I can convert MintsData into AddressStats but what and I hate this and also I have a Mint object that does something totally different elsewhere. I hate this. data isn't even descriptive but to call something history when it also has stats seems imprecise.
brain spaghetti. classification part of my brain is shit. no historical training / experience either. I just see everything like vague blobs. bah. naming required clear delineations which is hard enough on its own to get used to5 -
Whenever I reach the point where static analysis can't help me any further I always feel a sort of thrill mixed with terror. This is the real deal. Until now the problems were easy to find, the questions had well defined answers to choose from, the rules were universal. In the part of the logic that cannot be checked, the invariants upheld manually, where the best the type system can enforce is for the programmer to clearly state what they're doing, lies the real beast. In proofs commented on functions or invariants as logical expressions over plain English variables written in the doc comments of a struct.
In the blurry and pompous future I imagine for software development, that's where the programmer's time will be spent. Once we all agree on what a string is, what it means to depend on someone else's code, and what parts a UI should be made of, all a developer should have to do is make decisions and derive proofs an automated deduction engine can't do on its own. -
Have you ever written a very complicated code to look like a professional programmer??
For example:hello world app in c++
#include <iostream>
using namespace std;
int main(int argv, char argc)
{
char vhWnd[] = new char[13];
struct dataentry
{
string txt;
float vex = 0.2345234;
};
vhWnd[1] = 'e';
vhWnd[4] = 'o';
vhWnd[3] = 'l';
vhWnd[2] = 'l';
vhWnd[7] = 'o';
vhWnd[5] = ' ';
vhWnd[6] = 'W';
vhWnd[9] = 'l';
vhWnd[8] = 'r';
vhWnd[13] = '\0';
vhWnd[10] = 'd';
vhWnd[12] = '!';
vhWnd[11] = ' ';
vhWnd[0] = 'H';
for ( int i = 0, i=13, i++)
{
nhttp << vhWnd[i];
}
return 85037593;
}19 -
When you can't understand a compiler warning, try to reduce the problem to a minimal example, and the warning goes away...
... and you realize two hours later that you weren't compiling the minimal example on the same machine as the original. Different versions of g++, one with a bug fixed 😩
(assigning {} to a struct member) -
More linux driver woes:
Driver is passed a file position and byte count when asked to read from a device. Sounds easy, right? FUCK no.
For reads, driver is passed struct `filp` with field `f_pos`, a direct pointer to the same struct field, int `count` as a number of bytes to read, and `buf` to return those bytes with. Problem is, requesting, say, 256 bytes from location 10000000h will give the driver `filp->f_pos = 0`, `f_pos = 256`, and `count = 0`. I don't know how to fix this and there's NO help for this shit. None whatsoever.
This shit, right here, is why Linux drivers suck ass.4 -
I have lost track of the whys, but I'm writing something that loads a datastructure not unlike specifications of C types (plus struct single inheritance and generics) from any DLL-s tossed in the same folder, then organizes them into a pretty database. Now I just gotta keep gradually broadening the scope until I get to the feature set of the modern C# type system.rant what is this not gonna halt another project at least i can show off my mathz i could've went with lua i really should stop writing in the tag row why
-
Working with the codebase from hell here:
struct UnitNode: Node {
typedef Node super;
Stop making C++ look like Java! -
I need to tell you the story of my MOAB (Mother of all bugs).
I need to write some stuff in C (which i am fairly used to) and have a function that allocates memory for a Matrix on the heap. The matrix has a rows and columns property and an associated data array, so it looks like this
struct Matrix{
uint8_t rows;
uint8_t columns;
uint8_t data[];
}
I allocate rows*columns + 2 bytes of memory for it.
I also have a function to zero it out which does something like this
for(int i=0; i < rows*columns;i++){
data[i]=0;}
Let‘s come to the problem:
On my Mac the whole stuff works and passes all tests. We tried the code on a Linux machine and suddenly the code crashed in various places, sometimes a realloc got an invalid pointer, sometimes free got an invalid pointer and basically the code crashed at arbitrary points randomly.
I was confused af because did i really make THAT many errors?
I found out that all errors occured when testing my matrices so i looked more into it and observed it through the debugger.
Eventually i came to the function that zeroes out my matrix and it went unusually high and wondered if my matrix really was that big.
Then i saw it
The matrix wasn‘t initialised yet
It had arbitrary data that was previously in the heap.
It zeroed out a huge chunk of the heap space.
It literally wrote a zero to a shitload of addresses which invalidated many pointer.
You can imagine my facepalm2 -
So I have some OPC server to pass a lot of data to another app. And this developer is telling me that a "delete" event for a tag is not arriving into that app. So few emails flow back and forth between us, me trying to explain where that bastard event goes, he insisting nothing sort of arrives on his side and it's my server's fault. Until a meeting is set with my manager and his.
Dev: so I have no actual data from your server.
Me: can you seek, please, within your code if struct X is passed on from the server?
Dev: yeah, it appears a lot of times but I haven't seen any instance with your delete event.
Me: ok then, is it any place where you implement the main interface of the OPC client? There is a method in it where all the events are sent. You can put a breakpoint and I cand send you only this event.
Dev: hmmm, I'm looking for it.
[after couple of minutes]
His manager: Dev, did you find that class?
Dev: hmmm, I'm don't know...
His manager: can you add that breakpoint?
Dev: it's not necessary, I can fix it the "delete". -
The moment when I wrote a puzzle solver in C.
Not the most exciting thing to write but it felt great at the time.
Before writing every line of code without thinking some steps forward I decided to write it as pseudo code in notepad.
The very moment it was converted to C it just worked, writing it was beyond pleasure, just pure bliss. -
That moment when the Dev servers are down and instead of Monday work you're going outside to spend some quality time with the team 😁2
-
I'm hurtling down the Dunning Kruger slope in Rust datastructure design. The orchidlang crate has a struct that attempts to wrap and replicate a slice for no reason other than to attach some domain-specific methods and a custom Display implementation. I came up with 4 different representations for a file URI as provided by the language client. The most recent one holds a singular string in an Arc. I know that these are bad ideas but I don't know why I keep coming up with them.6
-
One of those "you have got to be kidding me moments":
struct Speaker: UnitNode, MemBufferBase {
typedef UnitNode super;
…
}
And then elsewhere:
#define Node UnitNode
#define Speaker AudioSpeaker
Never seen anyone typedef base class as super in C++ nor use a #defined variable as a class name. And of course elsewhere in the code class names are normal literal a but are referenced via a #define (and sometimes not via the #define)... The same obfustication done two different ways! -
package main
// go is very frustrating. in their efforts to keep the language simple, they've broken its consistency :(
// A A is just some arbitrary interface
type A interface {
Foo()
}
// B is an interface requiring a function that returns an A
type B interface {
Bar() A
}
// Aimpl implements A
type Aimpl struct{}
// Foo is Aimpl's implementation of A
func (a Aimpl) Foo() {}
// Bimpl attempts to implement B
type Bimpl struct{}
// Bar is Bimpl's attempt at implementing B.
// problem is, if Bar returns an Aimpl instead of A, the interface is not satisfied
// this is because Go doesn't support implicit upcasting on returns from interfaced objects.
// if we were to simply change the declared return type of Bar() to 'A', without changing
// the returned value, Bimpl will satisfy B.
func (b Bimpl) Bar() Aimpl {
return Aimpl{}
}
var _ B = Bimpl{}
func main() {
}2 -
I guess these days I work with Golang, gRPC, and Kubernetes. I guess that's a dev stack. Or turning into one at the very least. The only thing that annoys me about this stack, is how different deployments for kubernetes are different for CSPs. The fact that setting up a kubernetes/Golang dev environment is take a lot of time and effort. And gRPC can be a pain in the ass to work with as well. Since it's fairly new in large scale enterprise use, finding best practices can be pretty hard, and everything is "feet in the fire" and "trial by error" when dealing with gRPC.
And Golang channels can get very hairy and complicated really really fast. As well as the context package in Golang. And Golang drama with package managers. I wish they would just settle on GoDeps or vgo and call it a day.
And for the love of God, ADD FUCKING GENERICS! Go code can be needlessly long and wordy. The alternative "struct function members" can be pretty clunky at times. -
I wrote a small crate that does unsafe operations, please help me verify its soundness: https://github.com/lbfalvy/bound
(Also I think you'll like it, I'm solving a fairly abstract problem that's not possible in safe Rust)
It's essentially a struct that ties together a heap reference and a struct that's constructed from it. The main use case is to return lock guards derived from Arc<Mutex> but it's defined in a very abstract way intentionally because I'm using Marc from mappable-rc and async-std's RwLock and I didn't want this to depend on either crate.
It actually has no dependencies apart from STD (I think this one may be unavoidable) -
Trying to figure out why switching underlying object in data binding does not update.
checking type validation, nothing
checking types in bound events, nothing,
maybe some exceptions it thrown? nothing...
check the "class"... IT'S A FUCKING STRUCT -
ok I think a lot of my frustrations in rust stemmed from assuming struts are like objects and therefore can contain conceptually similar things in them that in your head would seem like the same "object", and that methods should be derived therefore and such
but in reality in rust struts are for conforming to borrowing rules and it doesn't care about your conceptual organization I guess. if you try to organize things like the structs as objects then you get borrowing issues on some occasions and then I would get stuck trying to figure out how to put a method on a struct when I need to drop borrowing to do some task and whatever
the solution is to throw out your human notions of organization
so I guess it's more bare-bones to how the machine thinks about stuff (well how the borrowing is coded in the language) and doesn't care how a human does (like notions like object orientated design)
this is odd to me in a modern language but at least I've crawled out of my brain damage with enough drug-use now that I can have such epiphanies I guess. I feel so slow. I swear this should've been massively obvious and easy to grasp in like a few days before for me. rip
instead it was 2-3 years of ~5 months of actually deep coding 😒
also I can blame people saying rust can do everything, like that you can do object orientated design in it. they're being dishonest and it's harmful to the learning process if you're acting like that 😩. stop being a cult, you'll literally be more popular4 -
rant.author != this
Christ people. This is just sh*t.
The conflict I get is due to stupid new gcc header file crap. But what
makes me upset is that the crap is for completely bogus reasons.
This is the old code in net/ipv6/ip6_output.c:
mtu -= hlen + sizeof(struct frag_hdr);
and this is the new "improved" code that uses fancy stuff that wants
magical built-in compiler support and has silly wrapper functions for
when it doesn't exist:
if (overflow_usub(mtu, hlen + sizeof(struct frag_hdr), &mtu) ||
mtu <= 7)
goto fail_toobig;
and anybody who thinks that the above is
(a) legible
(b) efficient (even with the magical compiler support)
(c) particularly safe
is just incompetent and out to lunch.
The above code is sh*t, and it generates shit code. It looks bad, and
there's no reason for it.
The code could *easily* have been done with just a single and
understandable conditional, and the compiler would actually have
generated better code, and the code would look better and more
understandable. Why is this not
if (mtu < hlen + sizeof(struct frag_hdr) + 8)
goto fail_toobig;
mtu -= hlen + sizeof(struct frag_hdr);
which is the same number of lines, doesn't use crazy helper functions
that nobody knows what they do, and is much more obvious what it
actually does.
I guarantee that the second more obvious version is easier to read and
understand. Does anybody really want to dispute this?
Really. Give me *one* reason why it was written in that idiotic way
with two different conditionals, and a shiny new nonstandard function
that wants particular compiler support to generate even half-way sane
code, and even then generates worse code? A shiny function that we
have never ever needed anywhere else, and that is just
compiler-masturbation.
And yes, you still could have overflow issues if the whole "hlen +
xyz" expression overflows, but quite frankly, the "overflow_usub()"
code had that too. So if you worry about that, then you damn well
didn't do the right thing to begin with.
So I really see no reason for this kind of complete idiotic crap.
Tell me why. Because I'm not pulling this kind of completely insane
stuff that generates conflicts at rc7 time, and that seems to have
absolutely no reason for being anm idiotic unreadable mess.
The code seems *designed* to use that new "overflow_usub()" code. It
seems to be an excuse to use that function.
And it's a f*cking bad excuse for that braindamage.
I'm sorry, but we don't add idiotic new interfaces like this for
idiotic new code like that.
Yes, yes, if this had stayed inside the network layer I would never
have noticed. But since I *did* notice, I really don't want to pull
this. In fact, I want to make it clear to *everybody* that code like
this is completely unacceptable. Anybody who thinks that code like
this is "safe" and "secure" because it uses fancy overflow detection
functions is so far out to lunch that it's not even funny. All this
kind of crap does is to make the code a unreadable mess with code that
no sane person will ever really understand what it actually does.
Get rid of it. And I don't *ever* want to see that shit again. -
When I started with javascript long time ago I thought JS is weird enough, but Swift is even more.
Why does it allow me to compile the code below? In the last line `taker.take(view)`, the `view` is an optional passed into a function that expects non-optional `some View`. How is this even possible!? I tried to change the view with some the other protocols, then it complaints, why the `View` protocol is different from the others?
```
import SwiftUI
struct ViewStruct: View {
var body: some View {
Text("")
}
}
class Taker {
func take (_ view: some View) {
print(view)
}
}
class Container {
var view:ViewStruct?
func createView() {
view = ViewStruct()
}
func test() throws {
let taker = Taker()
guard let viewIsView = view else {
throw fatalError()
}
taker.take(view)
}
}
```7 -
Hi people, I need some help.
First, stack , Golang/gorm(ORM)
I need doing a simple sum(amount) , I have a " db.Table("orders").Select("sum(amount) as Amount, merchants.name").Joins("inner join merchants on merchants.id = orders.merchant_id AND merchants.name = ? GROUP BY merchants.name", key).Scan(&total)
total is a struct type .
Are there any smell and I don't see ....?1 -
memcpy to fill a struct in an environment that should run on both big and little endian HW...
Yep that guy went on to project management. 😂 -
<quote>
EmptyCollection
struct EmptyCollection<Element>
A collection whose element type is Element but that is always empty.
</quote>
SwiftDoc.org is pure gold. -
in swift, the default modifier for `init()` of a struct is `internal`, regardless what the struct's modifier is. why can't they just change it to inherit the modifier from the struct? why would anybody want to define a public struct and yet keep the `init()` internal????3
-
This post is going to be long and it might not be the platform to ask for it's mainly for ranting yet I wanted to ask a non toxic community.
I'm mainly an ABAP programmer working on an SAP system for my living. No matter how people inside the SAP sphere look at it, it's not exactly cutting edge technology in the world of software development. (and in my opinion it's not even a knife)
As I work in an enterprise environment I have trouble about finding gaps where I can learn newer technologies and thus, I've decided to learn in my free time.
I tend to tilt toward web development as do many I know because I see potential in the GUI which HTML and CSS achieve. And I do believe that combining that with languages such as JS, Python, Ruby, Erlang and Elixir can give way to a healthy experience both in Web development and even desktop development.
In order to avoid overwhelming myself I wish to start with learning web development. Time is not of the essence because I plan to continue working with ABAP for close future, around the next 2 years, and I'm young.
I wanted to ask the community, is there any developer in here that was in the same position and can give out some pointers to the path they took? Is it wise to start my path from HTML5 and CSS3 without looking back to the older ways? Any resource you'd share will be welcomed.1