And the fact that you were getting downvoted for this rational take concerns me even more. Scary times ahead indeed.
HN user
_gabe_
It can be accessed from behind VPNs without any issues, so effectively it doesn't matter that it's not e2e encrypted.
How do these two things correlate? I thought the benefit of E2E encryption is the fact that no one can decrypt your messages except for the participants in the conversation. There’s no keys anywhere on a server that an admin could use to decrypt the conversation. How would being behind a VPN negate that? The VPN still has to go through Discord servers where a key is presumably stored if the information is encrypted at all.
I’m all for using C for native development (and because I find it fun to work in occasionally), but I agree with your sentiment here. Not only do you have to manage memory manually, but you also have to do a lot more work for basic string manipulation which is the vast majority of web work. I would much rather work with a language with built in support for string manipulation and well known 3rd party libraries with good ergonomics for working with JSON, which a lot of your APIs will most likely be using.
Who’s talking about exterminating people?
16 x 7 = 112 days, I’m not sure I understand your comment? Even if it was business days only, 5 x 16 = 80 which is still above the minimum needed.
As someone that got rear ended on my way home from work and had my car totaled a few months ago, I disagree haha
Yep. The company that my 401K is managed through began sending me these stupid emails about “Tips to manage your wealth”, and it was marked as an email that could not be unsubscribed from because it was pertinent to my account. It took an angry note left on their feedback form with a threat to report them to get those emails to finally stop showing up. It’s disgusting. I literally can’t even tell which emails I need to pay attention to that are about my 401K because they mingle spam in there.
I didn’t dismiss the point. My next sentence that you left out of that quote addresses it ;)
I also learn concepts bottom up, but thank God everyone isn’t like me. I’m just glad prebuilt tools like the game engines we have today exist so we can have artists creating awesome games.
Heck, even half life likely wouldn’t exist if Carmack hadn’t written the Quake engine and shared it with the Valve developers![0] Think of all the amazing games that have since been released by Valve that might never have been unless they had the kickstart that they got.
[0] https://en.m.wikipedia.org/wiki/GoldSrc#:~:text=GoldSrc%20(p....
I saw another commenter explain that it’s passed by reference, but I agree with you. The C++ Core Guidelines even mention that it’s better to use raw pointers (or pass by value and return a value) in cases like this to make the intent clear.
I really don’t understand what you’re saying here. Letters have existed for literally thousands of years at this point and people were able to communicate effectively through that. Several countries were founded and destroyed with coordination through written communication.
I know plenty of people that still study the letters that were used to communicate while founding the United States. It seems to me that the last 20 years has led to a massive decrease in the effectiveness of written communication because people don’t have to be clear or concise anymore.
Essentially these are people who don't actually want to work and would be just as happy or happier on UBI.
As one of “these people”, I enjoy my job, but I can recognize the fact that it’s just a job. I’m amazed that you would classify people that don’t center their whole life around their job as people that would be just as happy without a job.
I have a lot of other hobbies. I definitely would not be happier if you just took one of them away and gave me money instead.
The fact that it’s a game that was developed by people that were self-proclaimed “non-coders”[0] using a plug n’ play game engine Stencyl (a no code engine) and then later switching to Unity. It seems to me the plug n’ play nature enabled them to gain traction with a prototype that led to the full fledged game.
This one quote on page 2 from the developers really hammers home this point:
Those limitations aside, working in Stencyl has been fantastic. Ideas come together really easily and the tools are all intuitive. We definitely couldn't have come so far in such a short amount of time without it.
That’s completely besides the point. I agree that working on an engine can be very fulfilling and round you out as a developer. But it’s not easy and I wouldn’t recommend that somebody who just wants to make a game go down that path. I’m pretty sure some of my favorite games like Hollow Knight would have never been made if they decided to just build the engine as well.
You seem to be very intent on insisting that anyone can make a game engine (which I mostly agree with). But, it’s not easy, even when you use a pre-existing framework like Raylib. I’ve used frameworks like Monogame, I’ve used bare metal C++ and OpenGL, I’ve used the HTML canvas and JavaScript, I’ve built physics engines and used physics engines like Box2D or Havok. What I’m trying to say is I’ve done a lot of game engine-y stuff at various levels of the stack.
I’ve _also_ used Godot, Unity and Unreal. There’s a tremendous difference. I just started learning Godot a week ago and I already have the core game loop practically done in a new RPG. Sure I could’ve done the same thing using C++ and OpenGL (or Raylib or something), but I would be missing out on a lot of useful things that _just work_. Godot’s BBCode text labels are amazing and give my dialogue boxes a whole bunch of character out of the box. The tilemap editor allows me to just build my levels without having to build an editor first. The lighting system can add a ton of visual polish with very little effort on my part.
I’ve also dabbled in VR games with Unreal. And I’ve tried making some simple 3D games in Unity. Is this all possible without those engines? Yea. Would I have been able to experiment with the kinds of tech I got to play with if I made it all myself from scratch? I doubt it (not because I couldn’t do it, I just don’t have the time).
Another thing to consider is porting your game to different platforms! There’s a whole lot of variability in what kind of support you’ll get for that with something you made yourself or a framework like Raylib.
Anyways, from someone who has experienced both sides of the coin, you’ll end up fighting with the engine either way ;) There’s nothing wrong with using a general purpose engine.
I actually started with the Stormlight Archives :D
He is a great author. I originally read The Wheel of Time, and the last few books in that series were cowritten by Sanderson. They were so great that I ended up buying the first book of the Stormlight series. Now I’m eagerly waiting for the next book to come out in December, but I’m enjoying Mistborn in the meantime.
I’m reading the mistborn books right now. I was up until 2 in the morning finishing the first book in the trilogy the other night. These books are fantastic!
I’m sorry, what? The best computer scientists I know, Djikstra, Tony Hoare, Turing, Knuth, and more, all developed practical algorithms and concepts that are still used today! Like the parent commenter said, it’s really not difficult to provide code that works and supports your conclusion. I’ve also read computer science papers that bury the lede. It’s apparent when you try to replicate them that the author was disappointed that the work didn’t support their hypothesis, so they made it look good. It’s sad because a true scientific pursuit finds the knowledge valuable whether it works or not! They just need to state it instead of hide that fact.
Your whole comment reads as some sort of weird gate-keeping where people without the “proper” education could never fully understand a “true” paper. We can, and we do. There’s a reason we learn from truly great computer scientists like I listed above in college, and not the people posting unreproducible work.
I live a 15 minute drive from my city, but it took me an hour and a half to get home in rush hour a couple weeks ago. I guess it’s my fault though for being stupid and not paying even more of a premium to live within a block of my office.
A more optimistic reading of that sentence is that OP respects the accomplishments the engineers were able to make, but they aren’t impressed. I tend to agree with your sentiment, but reading the whole original post in context does not give me the same take away that you got :)
Thanks for the response! I think it would be cool to see if a different notation lends itself better to these questions, but I do believe that the classic notation we already use satisfies most of these questions. I feel like reading a natural language has a lot of similarities. When you first learn to read, you often identify individual letters, then syllables, then you begin to read words, and finally one day you can compare the stylistic similarities between two different authors.
Music has a lot of the same steps and it just takes time to get to the different stages of comprehension. At the stage I’m at now, it’s fairly easy to look at sheet music and determine if it’s ragtime or swing or jazz. I’m sure I’ll be able to pick up more nuance as time goes on too.
But, I think it’s cool that you’re exploring different approaches! I don’t want to take away from that, I just wanted to put out a challenge to the presumptions your making that classic notation is insufficient in some of these areas :)
the main problem that i'm solving is that a standard notation mostly obscures structure
Can you expand on this? I’m a hobbyist that’s learned how to sight read, and one of the coolest things was when I stopped seeing individual notes and began to see structure, as in chords and progressions. I’m not sure how sheet music would obscure the structure because that’s all I see in it now.
Further in that article:
“For months, high-ranking Government officials placed unrelenting pressure on Facebook to suppress Americans’ free speech," Alito wrote. "Because the Court unjustifiably refuses to address this serious threat to the First Amendment, I respectfully dissent."
It seems like the court had agreement that government coercion did happen. They threw the case out because they couldn’t draw a direct correlation to harm to the specific people that brought the allegations up.
we have to ask ourselves when is Typescript done, instead of being an intellectual exercise for the sake of it.
You’re doing yourself an extreme disservice if this is all you perceive TypeScript as. It’s brought some semblance of order out of the Wild West that is JavaScript, which, like it or not, powers the vast majority of the modern web. Not only that, it’s also introduced a whole bunch of developers to different ideas about what a type system is capable of.
Most games have a lot of “jank”, even triple A games. I feel like most people underestimate Roblox because of the graphics, which is 90% how well you can create assets, and 10% programming skill. The real technicality of Roblox comes from its massive online nature, custom built-in editor + IDE combo, custom fork of Lua to add typing, sandboxing, and other optimizations, the social media aspect of the platform, the in game monetary system, and more I’m not thinking of.
If all you’re doing is characterizing it as a 3D engine, you’re missing pretty much everything about the platform that makes it work. Nobody looks at VsCode and asks why it’s hard to program that, or Facebook, or Unity, or MMOs, or Stripe. This platform is all those things in one. And I may be wrong on some of the details, but the stuff those devs get to work on is undoubtedly more difficult than the React apps 90% of developers do in their day job that they also had to grind leet code for.
But if you just have an internal helper function for that, then think about if you really want to lock its existence and behavior into place, or if that would just hinder future architectural changes.
I agree with everything you’ve said up until this point. The add function should be locked down, whether or not it’s internal code. I’ve written some physics libraries for games I’ve coded in the past, and you can bet that I wanted to lock in the functionality of that complex physics code by working some examples by hand and then codifying them into unit tests!
I think you’re right at the end, everything is nuanced. Using the right tool for the right job is easier said then done :)
I also don’t like OOP, but what does that have to do with digging through a large data abstraction? Sometimes it’s unavoidable, and the problem your solving naturally lends itself to a recursive data structure that ends up being very deep (basically any kind of tree data structure). A query language would be great for that, and trees are very common in all code, regardless of paradigm.
I can sympathize with the authors love/hate relationship with tests, but I can’t help feeling like it’s because we as developers so often test the completely wrong things.
I don’t typically write tests, but they do make sense for a few cases (specifically end to end tests that look for well defined outputs from well defined inputs). I was inspired by Andreas Kling’s method of testing Ladybird, where he would find visual bugs, recreate the bug in a minimum reproducible example, fix the bug, then codify the example into a test and make sure the regression was captured in his test suite[0]. This led to a seemingly large suite of tests that enabled him to continue modifying the browser without fear of regressing somewhere.
I used this method of testing while I was writing a code highlighter that used TextMate grammars. Since TextMate grammars have a well defined output for some input of code + grammar, I was able to mimic that output in my own code highlighter and then compare it to TextMate’s output for testing purposes. I wrote a bunch of general purpose tests, then ran into a bunch of bugs where I would have mismatched output. As I fixed those bugs, I would add the examples to my test suite.
Anyways, my code highlighter was slow, and I wanted to re-architect it to speed it up. I was able to completely change the way it worked with complete confidence. I had broken tests for a while in the middle of the refactor, but eventually I finished the refactor. As I started to fix the broken tests, there was a domino effect. I only had to fix a few tests and that ended up automatically correcting the rest. Now, I have a fast code highlighter and confidence that it’s at least bug for bug parity with the slow version :)
I even hate that the title got popularized. Code isn’t “clean” or “dirty”. It works or it doesn’t work. That’s the most important aspect. Another very important aspect is that It’s readable or unreadable. Readable code may be very long winded, but I would much rather have that than somebody’s idea of a “clean” concise very abstract piece of logic.
I hate when I get comments on a PR talking about some subjective piece of code suggesting an alternative that they think is “cleaner”. How clean a piece of code is shouldn’t be a part of consideration while reviewing any code. Instead, like I said before, the only thing that really matters is if it works and if it’s readable. I wonder how many junior engineers have been bogged down with pointless PR comments over the years because of this idea that code can somehow be “neat” or “clean”.
Yep, this all makes sense and is what I was thinking as well. I also think you’re right about truncation being a better idea in the rendering state rather than in the bytes themselves. Either way, truncation of strings being displayed to the user requires extra care no matter what language you’re using.
As far as this being the reason most C code doesn’t handle UTF-8 though, I’m still skeptical.
It's also pretty telling that every article that tries to explain how to safely copy or concat strings in C, like this one, only ever works with ASCII, no attempt whatsoever to handle UTF-8 and keep code points together, let alone grapheme clusters.
Can you expand on this? Why does it matter to keep code points and grapheme clusters together in the case of truncation? If you’re already truncating the string, then you can just copy as many bytes as possible. Then, later when you interpret that string, you’ll hit a malformed codepoint and ignore it. I guess what you might be getting at is that if you have a codepoint sequence, then you shouldn’t copy the bytes if they can’t all fit in the truncated string?
I feel like this is an edge case and not “the reason almost all C software has problems with non-English strings”. 99% of the time, copying up until the null byte is fine, whether or not the string is UTF-8 or ASCII. The reason most C software doesn’t work with non-English strings is because the developer never added support. The bytes are still there, they just need to be interpreted correctly in the UI portions of the code.