skysight-inc/HackerNews huggingface dataset:
It's fine as an additional layer only when the primary layers do not rely on obscurity.

I've seen too many instances where obscurity is used to justify weak primary layers (IE it's fine we're using this single word shared password since we have all these other layers). It can often provide a false sense of security since it looks like a security layer when in reality it often turns out to simply be a minor inconvenience to an experienced attacker.
I don't disagree, but this kind of goal post moving is how zero cost will turn into a buzzword down the line because it'll really mean zero incremental costs when referring to operations.

Plus, zero incremental costs may only apply if you match the situation being presented. If not, you may have real costs associated with implementing obscurity. This evaluation of whether you will get zero incremental costs or not is a cost in itself.

It's just a misappropriation of the term from zero cost abstractions and it bugs me, especially since it's being ported from compiler theory/engineering to operations, two things which rarely have anything to do with one-another.

They'd be way better off coming up with "cost-effective obscurity" ideas, instead of calling this zero cost.
Almost 2 decades ago, I maintained our company's self-hosted web server on FreeBSD/alpha. It ran a simple (thttpd) web sever. I remember looking through the logs, and seeing script-kiddie attack after attack fail due to running thttpd instead of apache, FreeBSD rather than Linux, and alpha rather than x86.

I obviously kept the machine patched and up-to-date, but I think I probably could have left it unpatched, and it still would have been fine.
A horrible system with tens of thousands of years of inertia might be expected to take some time to stop.

It’s interesting to contemplate that there are more slaves today in the world than at any time. Why is that true?

https://www.nydailynews.com/news/world/slaves-time-human-his...
Now this is worth keeping in mind next time I need a safe exit point.
Ummm, in the article it says: "Each participant only rated one man, with and without a cat."

The top photo in the article is a posed photo. But the second one is one that was part of the study.
If software ran like law, sometimes you'd get EPERM trying to run a program you have execute permission on, and to get it to work, you'd have to go to an IRC channel and beg the op for mercy. Other times, trying to run that program would result in "rm -rf ~" being executed instead. Apple would insist that it's your fault your home directory got deleted, and tbey'd refuse to fix your computer or sell you a new one.
In some ways I feel this is quite similar to myself. I've been doing bits and pieces of programming since I was ~8 years old, but I've never felt like I've necessarily loved coding, and for the longest time I felt the dreaded imposter syndrome. My tech friends would often talk about code with such excitement, but I couldn't get that feeling myself. It was just a tool to me.

But once I hit my 30s, I realised that actually what I enjoyed was finding a problem and solving it. Programming was part of the solution, design was another part. I'd been doing all the different parts, but just labelled myself a full-stack developer because I thought I had to fit into a bucket somehow.

That lead me to thinking about what actually I want to focus on, and I came to the conclusion that product (management, design, etc.) is actually what I enjoy. Programming, design, marketing, and the like, are the tools I use to make products. I don't necessarily "love" any of the tools, and I'm certainly not the best at any of them, but I have a broad knowledge of all of them, and that alone had helped me in so many ways that I hadn't realised before.

So perhaps you need to do something similar? You say you get interested in problems — that's a great start! While you might not be able to come up with the best technical solution yourself, you could be the person that's needed to research the problem, and to motivate and steer others towards the solution.

Also, having that broad knowledge of the surface of many topics is also a great advantage. I'm often the person my friends will come to when they're looking for a tech solution that they haven't found. The chance is that I've heard of something that I can point them towards, even if it's not something I would want to work with myself.

Essentially, even though you feel you're not good enough at programming, it seems like you have talents that are big strengths in slightly different areas.
Wildlife in ‘catastrophic decline’ due to human destruction, scientists warn
Everything about what you, and others, are saying seems incredibly wrong to me. I guess it's a point of view thing. Very different mindsets. So it would be more interesting knowing why, but I'm at a loss here.

Why should I wrap simplest code with boilerplate? OK, maybe too late, since I need to write several lines of boilerplate to just say hello world. People argue that it's just a template that wraps the program. OK, but now it's something more fine-grained: every function must be wrapped.

The way I see it, simple code must be simple. If you want to do complex things, the language should allow you to do it some way. But not at the expense of everyday tasks. It's an elemental usability consideration.

I mean, why are you writing a kleenex program in Java?

See? The mindset again. That question I can't understand. Actually I find it annoying as in "what kind of language is Java that you thing Kleenex functions are not allowed? does it thinks it's too good for my crappy functions?"

Do you not want to declare a return type for your functions either?

If there isn't a return value, I don't.

Java's checked exceptions are just a way to return multiple types from your methods: a success value and a failure values.

Why do you need checked exceptions, as opposed to regular unchecked, typed exceptions?
I wonder if the technical stack you are working with is not a good fit for you. I was miserable when working with PHP (5.x) and considered quitting my job/industry altogether. Would you consider exploring different languages lightly to see if you can find a better fit?

As for failing whiteboards/screens, I have counterexamples: two of the smartest and understated people I know do fairly badly at these, and a person who was brilliant at these turned out to be quite unproductive. While the whiteboard/screen is the gateway for a lot of companies, there are still more that don't use such antiquated and lazy filters and are also very satisfying places to work.
For a lot of things, I actually like being able to read what the code is doing inline, rather than having to constantly jump around to function definitions.

It is a subjective thing, and I think the permissive approach of the language with regard to lambda complexity is a good thing.

The biggest thing that can be done to make that code example more readable is to use coroutines (which were just introduced in C++20) which will get rid of the lambdas.
Lead is soft - you're definitely leaving traces of lead on your hands when you handle it. That then goes onto your clothes, your skin, and everything you touch.

But anyway - it's not really the point. The point is, I can confidently say that some idiot burning a trash bin isn't going to scatter lead all over the local enivroment - ditto a house fire, or a car crash, or somebody dumping a computer in a stream.
> competent pen tester

So it does eliminate incompetent ones? That's kind of the point of the article.
> But 1000+ developers for what?

Managerial prestige
Don't forget ClosedByInterruptException: if you are accessing a file using Java NIO (but not the classic Java IO), and the thread is interrupted, the file will be automatically closed. There's no way I know of to keep the file open (which you might want, for instance, when the file is shared by several threads), other than not using Java NIO or not using thread interruption.
> History is elided, forgotten, then repeated.

This seems like human nature. We continue to do the same thing with client side / Server side rendering. When it comes to computing, we oscillate a lot. In all these cases there is the desired system (lack of namespaces in a way they doesn't absolutely kill you later), we pursue it, we inevitably fail, get burned, revert, forget, repeat.

In the case of namespaces, this is a tale told a thousand times. To the point where I think people don't even want to try to fight for them. What's the point? They shall forge forward, namespace free, until it hurts enough decision makers. Then we get namespaces.

Now, back to Ruby for me. Where anything anywhere can just yolo reach into your namespace and mess your whole life up.
First thing first, Do you enjoy programming ? If yes, then in my opinion you are already good.

One advice that I will give to you to become better is read. Read a lot of code from seasoned programmers, existing open source applications. You will understand patterns on how to approach problems. Talk to people about your design, build some opinions of your own (but dont hold onto them)

I will be happy to mentor if you want. Ping me on my twitter @namagg
If it's exploratory trowaway code then you don't care anyway; if it's meant to last, this forces you to actually deal with failure modes instead of pretending they don't exist.
A senior IC who is a technical lead or area lead can do the same without formally leading anyone.

I know of quite a few teams where there is a high level manager and an equal level IC who report to the same director. They're both responsible for the same scope of work, (and this is oversimplifying) just one is responsible for the tech and one for the people.
So many are just trying to sell you something. It's like if you went to visit your Psychiatrist and they tried to sell you a time-share on your way out of the office.

People deserve to be compensated for their work, obviously, but this is a space where people are looking to escape from being sold something or manipulated in some way.

If someone is building the app for themselves, it's based around actually helping and doesn't have some underlying agenda that it's trying to hide under the tablecloth.

Like a walk through the forest, the trees aren't reaching for your wallet when you turn around. The trees are just there to do some light photosynthesis before lunch, and then maybe make some pinecones that afternoon.
Which tasks where GNNs get better performance have standardized benchmarks?
Guess sarcasm dies little by little on this forum everyday.
Glass bottles are great, until you use them for the bottle flipping game.

That's actually the main reason I use a metal bottle. I am clumsy and inattentive enough of the time to make using glass on the go a dangerous proposition. Glass remains the container of choice when sitting at my desk or table though.
Be kinder to yourself, and at the same time try to design a plan that motivates you to learn more.

Usually, if you have impostor syndrome, a good cure is to learn something that is unique in your environment and makes you feel valuable. Or to build something on your own and see it finished and working.
I have a very early account. I remember being chastised by another user for posting links to my own blog over weeks. That’s how few posts there were.

I wonder if it was them trying to shape content.
I frequently just use any hotel, not necessarily one I have a reservation with. Between tipping, having frequent traveler status, and dressing nicely I’ve never had a problem.

MSP airport is one of the few places I’ve seen coin lockers in America.
> The key is not what you have been until today. The only thing that matters is what you want to do.

I like this
you've got 6000+ karma. whether you feel like you're a member or not, you obviously participate on a continual basis.

i think a reasonable definition for online community is a group of people who regularly and continually participate in the same online platform.
>Randomizing variable names it just a nuisance, it won't stop any competent pen tester or attacker.

Sure it will. Imagine that your old, unpatched Wordpress admin is at /random-gobbledygook instead of /wp-admin. An attacker would have to try to hit random alphanumeric directories of your webserver over and over again, hoping that he stumbles across a specific thing that they can attack. This is completely impractical, unless they're somehow clued in that the URL exists.

It's really about making life difficult for an attacker, so much so that they will simply give up, or find an easier target. That can be achieved by throwing up a series of difficult/obscure barriers, each which makes it less likely you'll be trivially penetrated.
Avoiding "Security through Obscurity" is not about how useful it is. It is about keeping security experts and cryptographers alive and out of prison.
Impostor syndrome etc..

Also, who are you to judge that you're not good enough? As long as you are employed or employable that does in fact mean you're good enough.
I would suggest taking some time to evaluate what, specifically, you are observing that leads you to believe you are a terrible developer.

Your one example is interviewing and OOP. This is a specific skill that you could practice: by reading, perhaps some memorization of terms, or even trying a side project with an intentionality of implementing in an OO way.

What are other things that you would like to be able to do, but feel that you are unable to? That can serve as a starting point for things to learn.

Bear in mind that there is no clear definition of a good or terrible programmer. The good ones are perhaps fast, or have deep knowledge of systems, or have wide knowledge of many types of technologies, or can write very fast code, or have a lot of expertise in an industry, or none or all of the above.

A good programmer is characterized by a set of skills that make them effective in the role of building things that are valuable to users. So the exercise is to try and identify those skills, and from there you could find ways to develop them.
Wrapping exceptions when re-throwing can be really useful. I think that this feature is often underused, especially by people who complain about checked exceptions.
No More Searching for Hashtags
Sharing some learnings and insights from our Product Hunt launch.

What is your suggestion on how the PH algorithm rates upvotes?

What are your experiences with launching on PH?
It helps to remember that nuance is lost over time as recommendations of best practices become memes. It's useful to reiterate the valuable nuance on occasion to be sure people aren't just taking the memes at face value, as you can be sure some amount of people are.
You do realize, there is a sliding scale of confidence with all programmers?

Specifically, confidence levels decline the more experienced and knowledgeable you become.

Eventually you start talking in generalities, what should or should not happen instead of absolute outcomes. You'll start using words like "probably" quite often.

You'll find yourself paralyzed by indecision. What's the best way to do X? What if I need to change Y? What would my peers think about this code? Golly, that will be a lot of work, maybe I shouldn't start that project...

This is all normal, and I'd say it means you're becoming experienced enough to understand what you don't understand. When you're green... you'd just go forth guns ablaze regardless.

The reality is, every good programmer thinks they are awful, and every awful programmer thinks they are amazing 10X developers. Be wary of overconfident programmers.

Welcome to the club :)
> Assume for every code obfuscator there's a deobfuscator or at least someone as clever as you out there.

Then it filters out people who are not using a deobfuscator or are less clever than I.

> Randomizing variable names it just a nuisance, it won't stop any competent pen tester or attacker.

Then it will stop incompetent pen testers.

I don't see how your comment refutes the point made. The point is not that it makes your likelihood of attack zero, it just reduces the likelihood via adding more roadblocks.
Look at positions that ask for prototyping engineers. The goal is to get it working anyway possible. You're not going to bogged down by larger programming concepts, reusability, performance, etc. Try fast growing startups with the culture of shipping fast.

I went from working at a large company to writing software for a startup and had the unlearn a lot of these concepts. Since you don't care for these concepts anyways, you'll probably be a better prototype engineer than I ever was. Also, look at related fields that require scientific programming using tools such as matlab as they also (mostly) focus more on getting the solution working rather than how it works.
I’ve heard people say, oh we have Thiel on the board to have a diverse set of views.

Please describe to me the beliefs of the person who would balance Thiel’s? I don’t see it.
PHP and it's ecosystem has a lot of problems, but I think Composer/Packagist is as surprisingly exemplary example of how to go about structuring package management.
It's not so corporations can be more profitable. It's so poor people can eat. Raise the price of food 20% for heavy but recyclable containers and suddenly 1 of 5 poor kids doesn't get enough to eat.

This is why finding sustainable solutions that lower costs, not raise them is the dream solution.
> - Randomizing variable names it just a nuisance, it won't stop any competent pen tester or attacker.

But it will stop incompetent attackers - of which there are many. In fact, they are the vast majority.

None of those 'obscurity' techniques will stop a targeted attack. That's not their function. But each of them raises the bar. The more hoops, the better.
That's the 'gold standard' but it leaves it open to interpretation. Some people mean it with very little sense of irony.

Do you think Sam is being ironic with that title, or sincere? His intro is telling us how he's going to calmly explain to us dumb hicks and newbies that we wouldn't know a feature if it bit us on the ass (which it most definitely will, at some point).

The rest of the article doesn't (quite) follow up on that warning, but if you start out by putting everyone on guard nobody is going to listen to you.
"What to do about" any self-revelation is a huge, huge topic. Some high level pointers:

1. Get some perspective, and a community

It's important to have a realistic assessment of one's skills and goals, strengths and weaknesses. Especially important about things that one thinks one is "terrible" at, or that one thinks one is "great" at.

There are a lot of lenses through which to see one's own capabilities, and it is not uncommon for a person to be a consensus of one about themselves. Others may think a terrible person is great, and vice versa.

It's important to have conversations with other folks about these issues, to understand where one stands. If one does not have such a local trusted "community" in which to have these conversations, that is the most important thing to try to develop. How to do so is its own huge topic.

2. Get an assessment of safety/vulnerability

In the near term, being sufficiently skilled and ergonomic to a job is important, for obvious reasons. If there are specific concerns- which to be clear are more about "ergonomics" and nuanced compatibility, than some intrinsic binary good/bad system- that's an important conversation to have with deciders at the employer.

How to have these conversations is another big topic all on its own.

3. Get an understanding of the landscape

Developer isn't the only job in the world. It's not even the only good job.

Think of "developer" as a "translator" job- operating on a "border" translating from one community of humans to another of very quick but exceptionally stupid beings. There are many, many, many other "translator" jobs, both more and less "technical" than developer and more and less "domain specific" (whatever industry the job is in). If one is uncomfortable in one kind of translation role, there are many other kinds, many other trajectories.

OP mentions having wide knowledge of other "tech" topics- I would advise thinking about that as a skill and think of it from a "translator" perspective. What community does the person with those skills translate from, and who do they translate to, and what domains would they work in.

There's much more, but those are my top level thoughts:

1. Get some perspective and a community.

2. Get a sense of safety/vulnerability.

3. Get some understanding of the landscape.

The world is a BIG BIG place. Lots of things to do, ways to help and engage.

Best wishes.
Width is hugely valuable. It allows you to quickly pick things up; quickly draw connections; quickly get up to speed.

What you need now is a chance to apply this. Get a thing you know roughly about and make it your job. You will pick on it more quickly than most people would think. Use that time to do it properly. The things you will learn from this will help knowing how to do it properly in all the other wide things.

Key here is to get a mentor that will help guide you, show you how to do it properly, and show you how to judge what is and isn't proper. That experience usually widely translates.
I must have misunderstood that part. I still didn't see any reference to using the same person with and without a cat to different people.
I use SSH keys, and disabled passwords. However when I was running SSH on port 22, the number of attempts was slowing my machine to a crawl at times.

Moving the port to some obscure random one divided the number of requests from several thousands per hour to a few per day. Definitely an improvement by any measure : suddenly you can analyze the attacks if necessary.

I run fail2ban on top of it, because why not? In case someone would attempt to really target my system, any obstacle is good to take. And who knows what ssh vulnerabilities exist; any protection is good to take.
Tell me about it. Doing bulk updates to dozens of bugs as a routine daily activity was an exercise in masochism. As for making comments on existing bugs, you had to manually download the mbox archive just to make sure the right recipients were copied in.

It was pretty neat in 1998. Today, it's long eclipsed by pretty much everything else.

If I were Debian, I'd migrate the whole lot over to GitLab issues seeing as they have the infrastructure for it set up (salsa). The problem is there is a very vocal minority who still think it's not only good, but the best choice for Debian. I doubt the silent majority who suffer it agree. Like anything, it's an entrenched part of Debian culture that's hard to change. But it was time to retire it over a decade back.
What qualifies as "a large number of packages"? As was posted in another thread, it seems like the packages of user https://crates.io/users/swmon would qualify?

Alternative to just removing them, would the crates team be more open to transferring ownership of these packages?
>This irks me too. It's been a while but I believe the workaround is just to define your own (checked) FunctionE, SupplierE, ConsumerE functional interfaces. But maybe that causes other problems I've forgotten.

You can do that, but you need to do it for every exception type ): I'd love it if Java had templated exceptions.

>> the stupid distinction between primitive types and Objects

One of the slowest things I found out about C# was floats being objects and `a < b` (or something similar) being a stack about 7 levels deep.