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 - "k&r"
-
A is for Assembly, a wizard's spell
B is for Bootstrap, so bland and the same. And also for Brainf*ck, will blow you away
C is for COBOL, your grandad knows that
D is for daemon, your server knows what
E is for Express.js, you node what is coming
F is for FORTRAN, which is perferct for sciencing
G is for GNU which is GNU not UNIX
H is for Haskell using functional units
I is for Intance, An action of Object
J is for Java plays with them Always
K is for Kotlin, Android's new toy
L is for Lisp, scheming a ploy
M is for Matlab, who knows how it works
N is for Node a bloatware of code
O is for Objective Pascal, you did not expect that
P is for programming, we all love to do that
Q is for Queries, A database is made
R is for R, statistics are great
S is for Selenium, you have to test that
S is for Smalltalk, let's make it all brief
T is for Turing Test, how human is this?
U is for Unix, build with all talents
V is for Visual Studio, built with all laments
W is for Web, lets build something cool
X is for XHTML, remember all that?
Y is for Y2K, I'm tired as f*ck
Z is for Zip, let's zip is all now.
Get yourself coffee and back to the grind.8 -
I remember when my professor in Linux Kernel Programming told us this is a programmers bible, everyone has this one right ?12
-
Chuck Norris can write Java without wearing glasses. He can C#.
Chuck Norris can compile C++ with just a word editor and K&R.
Chuck Norris can read the comment you almost put in on line 63 (it would have been very helpful.)
Chuck Norris can optimize programs in binary.
Chuck Norris does garbage collection with his mind.6 -
How many of you naturally used Allman style, even though your first programming class taught you to use K&R?24
-
My office has blocked access to all external websites. Only internal, self-hosted sites under our domain work.
P E A K. S E C U R I T Y.15 -
I've been lurking on devrant a while now, I figure it's time to add my first rant.
Little background and setting a frame of reference for the rant: I'm currently a software engineer in the bioinformatics field. I have a computer science background whereas a vast majority of those around me, especially other devs, are people with little to no formal computer background - mostly biology in some form or another. Now, this said, a lot of the other devs are excellent developers, but some are as bad as you could imagine.
I started at a new company in April. About a month after joining a dev who worked there left, and I inherited the pipeline he maintained. Primarily 3 perl scripts (yes, perl, welcome to bioinformatics, especially when it comes to legacy code like is seen in this pipeline) that mostly copied and generated some files and reports in different places. No biggie, until I really dove in.
This dev, which I barely feel he deserves to be called, is a biology major turned computer developer. He was hired at this company and learned to program on the job. That being said, I give him a bit of a pass as I'm sure he did not have had an adequate support structure to teach him any better, but still, some of this is BS.
One final note: not all of the code, especially a lot of the stupid logic, in this pipeline was developed by this other dev. A lot of it he adopted himself. However, he did nothing about it either, so I put fault on him.
Now, let's start.
1. perl - yay bioinformatics
2. Redundant code. Like, you literally copied 200+ lines of code into a function to change 3 lines in that code for a different condition, and added if(condition) {function();} else {existing code;}?? Seriously??
3. Whitesmiths indentation style.. why? Just, why? Fuck off with that. Where did you learn that and why do you insist on using it??
4. Mixing of whitesmiths and more common K&R indentation.
5. Fucked indentation. Code either not indented and even some code indented THE WRONG WAY
6. 10+ indentation levels. This, not "terrible" normally, but imagine this with the last 3 points. Cannot follow the code at freaking all.
7. Stupid logic. Like, for example, check if a string has a comma in it. If it does, split the string on the comma and push everything to an array. If not, just push the string to the array.... You, you know you can just split the string on the comma and push it, right?? If there is no comma it will be an array containing the original string.. Why the fuck did you think you needed to add a condition for that??
8. Functions that are called to set values in global variables, arrays, and hashes.. function has like 5 lines in it and is called in 2 locations. Just keep that code in place!
9. 50+ global variables/hashes/arrays in one of the scripts with no clear way to tell how/when values are set nor what they are used for.
10. Non-descriptive names for everything
11. Next to no comments in the code. What comments there are are barely useful.
12. No documentation
There's more, but this is all I can think to identify right now. All together these issues have made this pipeline the pinnacle of all the garbage that I've had to work on.
Attaching some screenshots of just a tiny fraction of the code to show some of the crap I'm talking about.6 -
The GashlyCode Tinies
A is for Amy whose malloc was one byte short
B is for Basil who used a quadratic sort
C is for Chuck who checked floats for equality
D is for Desmond who double-freed memory
E is for Ed whose exceptions weren’t handled
F is for Franny whose stack pointers dangled
G is for Glenda whose reads and writes raced
H is for Hans who forgot the base case
I is for Ivan who did not initialize
J is for Jenny who did not know Least Surprise
K is for Kate whose inheritance depth might shock
L is for Larry who never released a lock
M is for Meg who used negatives as unsigned
N is for Ned with behavior left undefined
O is for Olive whose index was off by one
P is for Pat who ignored buffer overrun
Q is for Quentin whose numbers had overflows
R is for Rhoda whose code made the rep exposed
S is for Sam who skipped retesting after wait()
T is for Tom who lacked TCP_NODELAY
U is for Una whose functions were most verbose
V is for Vic who subtracted when floats were close
W is for Winnie who aliased arguments
X is for Xerxes who thought type casts made good sense
Y is for Yorick whose interface was too wide
Z is for Zack in whose code nulls were often spied
- Andrew Myers4 -
Never realized with a industry that changes by the second how relevant and timeless a single book(set) can remain. 52 year old book.
The work that knuth put into this collection to keep it timeless and language in-specific keeping it to theory rather than details of syntactical details is amazing.
Sure there are other timeless classics out there.. the algorithm book, K&R C, the dragon books, the wizard book.
But I think this single book outweighs them all in the abstraction point of view... AND it’s abstraction in the “opposite direction”... abstraction to a machine language architecture that is purely theoretical... brilliant.21 -
- Learn git/github
- Create and finish a useful project on my Raspberry Pi
- Successfully organize a LoL tournament in my school, and develop something related to it
- Do not lose my mind when my programming teacher keeps saying bullshit
- Install a Linux distro along with my Windows as dualboot
- F u c k i n g clean that computer case a l r e a d y
- Finish the website I have been making for like half a year for my hobby
- Be active on devRant5 -
So, I wanted to find a new way to arrange my language's alphabet. Atm, I'm loosely using latin's system even though my system is weird;
A B K D E F G H I IE SH L M N O P R S T U V
So, I remember that another language (I think Japanese) uses a poem with every letter to figure the order of their letters, so I decided to do the same.
Only problem is: My current word list is very limited, some of the letters I needed only existed in specific words (aka, the word for "Dark") so I ended up making a very depressing poem.
Enjoy! Or not.. I'm not going to tell you what to do.
English translation below. I also will post images of it written in my language's script, as well as one line in my language's cursive script (I'm not doing the whole thing in cursive because fuck that)
Senarseha:
Seh ninfuat seh nem fieta; Seka sato nem fiekm juna jenes sermin.
Seh ninfuat sif nemsin netua niet; Seka sem sedma nemat sargo no
nrokniet sam fiekmin sehim sepra.
Sehim sinta nem nara niv nakliet.
Seh nem sine fieta.
English:
I say I am well; But all is dark before day begins.
I say it isn't too much; But this place is a farm of
preasure that blackens my soul.
My mind is ever in agony.
I am not well.6 -
God, Allman indentation style is such pain... God bless K&R...
For those who don't know, Allman is this:
void foo(void)
{
statement;
statement;
}
and K&R is this:
void bar(void) {
statement;
statement;
}12 -
Went to a thrift store last week near work and they often have old dev or technology books (I picked up a first edition K&R C book, once) and I found:
1) A book on the history of codes and ciphers throughout history.
2) Beyond good and evil by Nietzsche.
3) A modern publication of a 1673 Spanish demon summoning book (to go into a local town archive).
4) The technical information and construction manual for telegram systems from 1938.
I swear I was driving home thinking:
"Please don't crash, if CSI teams have to piece my identity together from these four personal items I dread to think what conclusions they're going to come to..." -
!rant
Finally got myself a czech copy of "The Book". Happiest day in 2017 so far 😁
How do you make yourselves happy, fellow ranters?2 -
Apart from the usuals like K&R, John McCarthy, Simon Peyton-Jones, Joe Armstrong, Bjarne Stroustroup, and so on, I'd like to mention one more, sort of different from the rest.
Ton Roosendaal.
He started Blender and oversaw its crowdfunded release as an open source project (look it up, it's pretty cool), provides excellent leadership at the Blender Foundation, is a crack programmer, very nice dude and down to earth. His leadership, vision, and handling of Blender's growth as FOSS software and artist-focused DCC tool is amazing. He might not be the brains behind Blender's technical advances all that much (now) but he's a great example of what one can do for software beyond just programming. -
K&R Like it or not, everything that we use was impacted by the advantage of having the C Programming language on our side. C is still to this day a cornerstone of what a a language should be, nothing more nothing less.
John McCarthy the creator of Lisp and the one that coined Artificial Intelligence as a topic, a term, without him if else statements would have probably taken a while longer to figure out the way my boy did. Lisp will make you a better developer.
Alan Kay, creator of OOP, yeh we had ways to emulate this with C before, bit without his contribution to what I believe to be the purest form of oop we would not haveany additional things. Smalltalk is still the best programming language in my humble opinion.
Terry A Davis, disciplined, and crazy, the man built a skyscraper by himself, God knows what he would have done if he weren't afflicted by mental illness.
Linus Torvalds, for many different things, creator of the kernel that would power my favorite operating system.
Ryan Dhal, took the world by storm with Node.js -
Working with surds recently, and found some cool new identities that I don't think were known before now.
if n = x*y, and z = n.sqrt(), assuming n is known but x and y are not..
q = (surd(n, (1/(1/((n+z)-1))))*(n**2))
r = (surd(n, (surd(n, x)-surd(n, y)))*surd(n, n))
s = abs(surd(abs((surd(n, q)-q)), n)/(surd(n, q)-q))
t = (abs(surd(abs((surd(n, q)-q)), n)/(surd(n, q)-q)) - abs(surd(n, abs(surd(n, q)+r)))+1)
(surd(n, (1/(1/((n+z)-1))))*(n**2)) ~=
(surd(n, (surd(n, x)-surd(n, y)))*surd(n, n))
for every n I checked.
likewise.
s/t == r.sqrt() / q.sqrt()
and
(surd(n, q) - surd(s, q)) ==
(surd(n, t) - surd(s, t))
Even without knowing x, y, r, or t.
Not sure if its useful, but its cool.
surd() is just..
surd(j, k ) = return (j+k.sqrt())*(j-k.sqrt())
and d() is just the python decimal module for ease of use.13 -
- Played with and learned Scratch
- Learned some Python, made some weird little programs
- Learned C, using two good books: K&R C and Zed Shaw's "Learn C the Hard Way" (back when it was still in development and was free to read on the internet)
- Made LOTS of programs in C
- Came back to Python when I wanted to learn network programming
- Learned some Racket/Lisp, Bash scripting along the way
- Now I use all of the above, minus Scratch -
Ds (dipshits) keep calling my phone 6-8 times a day. Almost all automated calls.
One day AI will handle these robocallers automatically. And then it will just be GAN style robocallers vs robosecretaries training against each other to become better and better at fooling each other.
And then suddenly, one day: skynet.
With a neutral female voice.
Or maybe an Indian accent.
"Hel. Lol. m I k r O s o t tech surprott. We detect virus on ur peesee. You will be assimilated. Where joon connor?"
Like a possessed speak-n-spell melting to death in a dumpster fire.
And we'll have done it to ourselves.6 -
I'm a C++/Obj-C programmer finding it ludicrously hard to switch to Swift.
I find that the constant ability (leading to very poor programmer code) to reduce syntax and add tokens reduces readability and nowhere is this more apparent that with closures.
I'm working through (to my shame) Ray Wenderlich's Swift course and the closure chapter has this:
PS I loathe K&R as much as I do Swift so it's all in Allman formatting for clarity.
let multiply: (Int, Int) -> Int =
{
(a: Int, b: Int) -> Int in
// do Something else
return a * b
}
Why oh why isn't this more simply and elegantly written as:
let multiply = (a: Int, b: Int) -> Int
{
// do Something else
return a * b
}
The equals sign shows clearly that it's a closure definition assignment, as does the starting 'let'. But this way all of the stupid excesses, like the 'in' keyword, the repetition of the params / return type only this time with useful labels and additional tokens are removed and it looks and reads much more like a regular function and certainly a lot more clearly.
Now I know that with the stupid ability of Swift you can reduce all this down to return $0 * $1, but the point I'm making is that a) that's not as clear and more importantly b) if this closure does something more than just one line of code, then all that complicated stuff - hinted to by the comment '// do Something else' means you can't reduce it to stupid tokens.
So, when you have a clousure that has a lot of stuff going on and you can't reduce it to stupid minimalism, then why isn't is formatted and syntactically better like the suggestion above?
I've mentioned this on the Swift.org (and got banned for criticising Swift) but the suggestions they came up with were 'use type inference' to remove the first set of params / return type and token.
But that still means the param list and return type are NOT on the same line as the declaration and you still need the stupid 'in' keyword!5 -
I learned C with a K&R copy a friend gave me years ago. Now at University we in CompSci get taught in Python the first year and Java next while the engineers start with C and (I'm guessing) move on to assembly later on.
This friend comes to me all worried because he has to submit the next day a working Reversi game for the console written in C. Turns out the game was divided among two labs and he failed to submit the first one.
The guy is smart but once a week or so, when we met to smoke a joint and relax with some other friends, he was always talking about how he would prefer something like law but that would be bad business back in Egypt.
Back to the game, I get completely into it. First hour checking all the instructions he was given, then reviewing the code he wrote and copied from Internet. We decide start from scratch since he doesn't really get what the code he copied do. It took us 10 hours only stopping to eat but we get all the specifications of both labs perfectly.
A week after that he comes to me: "my TA said your code is the ugliest shit he's ever seen but he gave me a perfect score because it passed all the tests". I'm getting better (the courses I'm taking help me a lot) but what really made me happy is that he solved the next lab by himself (Reversi wasn't the first time I helped him, only the first time he was absolutely lost). Now he actually gets excited about coding and even felt confident for his programming final.
No more talking about being a lawyer after those 10 hours, totally worth it.1 -
// Posting this as a standalone rant because I've written the best piece of code ever.
// Inspired by https://devrant.com/rants/1493042/... , here's one way to get to number 50. Written in C# (no, not Do diesis).
int x = 1;
int y = x + 1;
int z = y + 1;
int a = z + 1;
int b = a + 1;
int c = b + 1;
int d = c + 1;
int e = d + 1;
int f = e + 1;
int g = f + 1;
int h = g + 1;
int i = h + 1;
int j = i + 1;
int k = j + 1;
int l = k + 1;
int m = l + 1;
int n = m + 1;
int o = n + 1;
int p = o + 1;
int q = p + 1;
int r = q + 1;
int s = r + 1;
int t = s + 1;
int u = t + 1;
int v = u + 1;
int w = v * 2 * -1; // -50
w = w + (w * -1 / 2); // -25
w = w * -1 * 2; // 50
int addition = x+y+z+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v;
addition = addition * 2;
if (addition == w)
{
int result = addition + w - addition;
Console.Writeline(result * 1 / 1 + 1 - 1);
}
else
{
char[] error = new char[22];
error[0] = 'O';
error[1] = 'h';
error[2] = ' ';
error[3] = 's';
error[4] = 'h';
error[5] = 'i';
error[6] = 't';
error[7] = ' ';
error[8] = 'u';
error[9] = ' ';
error[10] = 'f';
error[11] = 'u';
error[12] = 'c';
error[13] = 'k';
error[14] = 'e';
error[15] = 'd';
error[16] = ' ';
error[17] = 'u';
error[18] = 'p';
error[19] = ' ';
error[20] = 'm';
error[21] = '8';
string error2 = "";
for (int error3 = 0; error3 < error.Length; error3++;)
{
error2 += error[error3];
}
Console.Writeline(error2);
}5 -
Must be K&R, Ken Thompson for being the inventors of Unix and C. Also, lots of authors of various books prescribed in college
-
After a lot of work, the new factorization algorithm has a search space thats the factorial of (log(log(n))**2) from what it looks like.
But thats outerloop type stuff. Subgraph search (inner loop) doesn't appear to need to do any factor testing above about 97, so its all trivial factors for sequence analysis, but I haven't explored the parameter space for improvements.
It converts finding the factors of a semiprime into a sequence search on a modulus related to
OIS sequence A143975 a(n) = floor(n*(n+3)/3)
and returns a number m such that n=pq, m%p == 0||(p*i), but m%q != 0||(q*k)
where i and k are respective multiples of p and q.
This is similar in principal to earlier work where I discovered that if i = p/2, where n=p*q then
r = (abs(((((n)-(9**i)-9)+1))-((((9**i)-(n)-9)-2)))-n+1+1)
yielding a new number r that shared p as a factor with n, but is coprime with n for q, meaning you now had a third number that you could use, sharing only one non-trivial factor with n, that you could use to triangulate or suss out the factors of n.
The problem with that variation on modular exponentiation, as @hitko discovered,
was that if q was greater than about 3^p, the abs in the formula messes the whole thing up. He wrote an improvement but I didn't undertsand his code enough to use it at the time. The other thing was that you had to know p/2 beforehand to find r and I never did find a way to get at r without p/2
This doesn't have that problem, though I won't play stupid and pretend not to know that a search space of (log(log(n))**2)! isn't an enormous improvement over state of the art,
unless I'm misunderstanding.
I haven't posted the full details here, or sequence generation code, but when I'm more confident in what my eyes are seeing, and I've tested thoroughly to understand what I'm looking at, I'll post some code.
hitko's post I mentioned earlier is in this thread here:
https://devrant.com/rants/5632235/...2 -
#storytime
Soon I'll start moving to a new place on the 16th and I wanted to change my address at the Internet provider (T).
go to provider website (T) reading that I need to call them...
CALL (T): .... Automatic answering machine.. ... longer than normal, covid19, 30 minutes later:
Operator: Hi moving, yes.. When? we send you an email with details to send Mechanic.
Next day: waking up. clicking mail on my phone in bed half sleepy. select 15th. next. next. next. accept. done.
Me happy :) .... One hour later realizing I said 15th.. and it should be 25... FUCK!!! Me Mad! Knowing what's going to happen...
Click link in mail to change date. You need to call (E).
CALL (E) : ... Automatic answering machine.. ... longer than normal, covid19, 1 hour later.... Give up..
CALL (E)(2): ... Automatic answering machine.. ... longer than normal, covid19, 1.2 hour later.... Give up..
Next day CALL (E)(3): ... Automatic answering machine.. ... longer than normal, covid19, 45 minutes later....
Operator: Hi, yes we can move to date 21. you need to call (R) to change fiber mechanic I'll patch you trough
CALL (T) : ... Automatic answering machine.. ... longer than normal, covid19, 30 minutes later....
Operator: You need to call (K) Here is the number 123456789..
CALL (K): ... Automatic answering machine.. ... longer than normal, covid19, 20 minutes later
Operator: This department (R) can not be reached by phone we will call you back.
Next day:
Incoming call from (K). Because you are moving to a new house you do not need (R). have a nice day.
Have a nice day to you too calm and friendly.
hopefully I won't be without internet for a couple of days...1 -
Winning in the chrome dinosaur game means playing without dying till the internet comes back in and it automatically terminates the game screen !!
-
!basicNonHarmfulExploitTest
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
Lets see If I can mess up the character cutoff limit 😜3 -
K&R style Brackets are so goddamn shitty. I hate hate hate hate that style. It makes code so goddamn hard to read. And for what gain? You write "less" lines of code? So what? Who gives five fucks about that? Readability is key for coders.7
-
Q.14 - Suppose that R sends a msg 'm' which is digitally signed to M and the pair of private and public keys for M and R be denoted as K(x)- and K(x)+ for x=R,M respectively. Let K(x)(m) represent the encryption of 'm' with a key K(x) and H(m) is the message digest. Which of the following is the way of sending the msg 'm' along with the digital signature to M?
A. [m, K(R)+(H(m))]
B. [m, K(R)-(H(m))]
C. [m, K(M)-(H(m))]
D. [m, K(A)+(m)]
E. WOW, REALLY ?5 -
Why would the great linux devs and the 'C prophets' choose K&R indentation model ahead of Allman's model ? Its saddening that i would have to work with K&R style for my future works !5
-
If we really try to reinvent the wheel, and if we did that successfully, I bet it will be 2x better than at least all the unfancy stuff in the dev-market
-
Best way to learn C? Might be my ADHD brain,but I'd love to try learning C again. I know K&R is still pretty good,but what are some other books,or good ways to learn C? I'll be using a standard Linux system with gcc so nothing really special. Also Correct me if I'm wrong,but GCC supports later C standards C99,etc except for floating points right?3
-
So, what do you think as a perfect routine as a student and a developer ?
thankx in advance !
edit: mainly in quarantine ;)2 -
Ah, the eternal battle between "Allman style" and "K&R style" bracing. Because arguing over where to put an opening curly brace is what I dreamed of when I became a developer.
Can we just agree on something and move on?3 -
Darn!
It's simply the Parkinson's Law guys, it says that 'work' expands as until it reaches it's deadlines (if any), so for indefinite time, I guess I'll plan and admire many projects but COMPLETE NONE!
DEADLINES ARE NECESSARY,
else I'll keep kn moving from one project to another without any plans of completion :3