The funny thing is the internet archive is more connected to hacker culture than cracking a website will ever be. I hate posers more than anything. Hopefully the internet archive comes back stronger than ever.
Lmao. HN people don't want to grind for years to solve tough problems. They want to find some 'hack' or side-trick to bypass everything. But the reality is some problems take a long time to solve. How long do you think Bitcoin took to write? It wasn't 2 weeks.
Sorry, it wasn't my intention to make you feel harassed. Your advice probably makes a lot of sense for people who like to release many smaller products. Scope creep and extreme complexity are problems I've struggled with myself, and I often find it hard to start with the most basic deliverable rather than a vision that is much further along. I still have a lot to learn and I think these things are important problems for HN-type people.
Thanks, I appreciate that. As much as many people here didn't seem to have read the article or the note I linked, I should've phrased it differently so the context was apparent.
Maybe it doesn't have to be complex. Gwern could just have a restructured text feature to their articles that auto-builds to a PDF that you can buy as an on-demand book or get it on kindle. I don't think it has to be on a single subject. Gwerns essays are interesting in their own right and would still make a fine book. Wasn't 'Hackers and Painters' in the same spirit?
I noticed that too and thought I was missing something. Some cool resources that are actually decent for network programming:
https://beej.us/guide/bgnet/ -- Covers what abstractions the OS provides for network programming and the guarantees that are possible.
https://www.madwizard.org/programming/tutorials/ - This is the very first ever good tutorial I read on socket programming. It's OG winsock. Introduces network programming from the most basic level. Aimed at C.
When you understand these guides you'll learn that how you structure your entire programs networking depends on whether you want to use blocking or non-blocking sockets. If you go with blocking you'll probably be using threads or processes. Otherwise you can't do any other work. With non-blocking it will be more about polling sockets and eventually you might end up with something resembling an event loop.
Until you come towards to the current approach to networking which is mostly async await -- an event loop works with non-blocking sockets, watches them for changes, and passes data from them to event handlers. There's a lot more that can be done on sockets to effect things like how data is flushed, how TCP errors are handled, and so on, but its a good start.
This guy is very naive if he thinks flicking a few buttons in the UI of his ancient operating system is going to keep him from getting pwt.
Edit: might as well provide more info. Windows XP was notorious for its security issues which were fixed in the server version at the time. Even recent versions of Windows have been effected by 'zero-click' vulns in the TCP/IP stack which is about as bad as it gets. MS rated it a 9/10 but if all that's needed to own a box is sending the right packet then I can't imagine what a level 10 vuln looks like.
If you are behind a normal consumer router (default deny incoming connections) how to you send the right packet to the computer? It would have to be a response to a connection you initiated.
If you were careful about sites you connected to, you should be reasonably safe. I.e. I don't see Google/Microsoft/BBC/Apple/Wikipedia sending a xp-hacking packet in response to an HTTP request.
That's the point. Look up what duck typing means in Python. Your program is meant to throw exceptions if you pass in data that doesn't look and act how it needs to. This means that in Python you don't need to do defensive programming. It's not like in C where you spend many hundreds of lines safe-guarding buffer lengths, memory allocation, return codes, static type sizes, and so on. That means that Python code can really just look directly like the algorithms they need to implement. That makes Python genuinely shorter and more readable than almost every other language out there.
>Everything is global
Not really. Python passes basic types as a copy. This is 'pass by value.' Objects are passed as a 'reference' to an object. So you can change that named reference without effecting the object or you can use it to manipulate the item it points to. Your own classes, lists, and dicts fall under this category. But I don't think ints, strings, or bytes do.
>virtual environments hassle
Yeah, you're not wrong. pyenv doesn't work that well and installs often break when you try set it up. It's well worth getting it properly installed though. I mostly just test from Python 3.6 (the version that introduced asyncio) and the scattering of major versions between it. I also test on all major operating systems using esxi by vmware.
>very slow.
This is mostly a meme. If you're doing CPU-bound work where each instruction counts then there are ways to tune Python performance. There's https://numba.pydata.org/ and https://cython.org/ 'easily tune readable Python code into plain C performance by adding static type declarations, also in Python syntax.' Python can use multiple processes, multiple interpreters, and soon 'real threads.' I should add that a lot of algorithms aren't parallel so they're not likely to benefit from such improvements. But Python byte code already is quite fast as it is.
As for 'data processing' -- if the work-load is I/O bound its not going to matter if you use Python or C. It will be just as fast.
Everything in CPython is pass-by-reference. But there's no difference between that and pass-by-value for types like `int` and `str` because they're immutable.
reply