Thankfully someone in IRC told me back then to just switch on the feature flag. Never looked back.
1,125 karma · joined April 3, 2018
Thankfully someone in IRC told me back then to just switch on the feature flag. Never looked back.
Let's keep spam off HN.
Btw, reusing Amazon referral IDs across the internet links all of your accounts.
Though this is the main reason I use Caddy over Nginx. I have my Caddy executable and config for all my projects right there in the home root. I ssh into one of my cheap vps and I'm an `ls` away from remembering how to configure it.
Meanwhile, every time I use Nginx I have to remember where the different folders are that it uses, where the configs are, and how to even start/stop/reload it. I usually symlink its config to the home root and paste a few common commands into ~/README.md for future-me.
Obviously, at a larger scale where you're automating your machines, this doesn't really matter. But at any scale under that where you're sshing into different machines, it becomes a nice to have.
I could credentialize in multimonitor usage (I have before), but now I'm getting used to something that's incompatible with portability.
It's absolutely a deodorant + perfume combo, and primarily the latter from my experience as a niño. Go smell some Axe next time you're in Walmart and see for yourself. Or smell a junior high boy's locker room.
Also, where I live, dairy comes in those tetrapaks, too.
The only reason ads make a little money on mobile is because of the lack of adblocker penetration + low tech-savviness + compulsive mobile games. When was the last time you even used a desktop app with ads?
Donations aren't a source of income. Though I encourage you to try a tip jar like Patreon just to see how vanishingly impossible it is.
Sounds like you're still deciding if you even are trying to make money. But make no mistake: you won't luck into money by writing cool blog posts and building free features that people ask for.
Building a revenue channel into your application with IAP sounds like the only thing that has a shot and the only thing that might align with your goals.
I can keep you out of your account indefinitely with a curl loop and a rotation of proxies?
Because the reason why https://en.wikipedia.org/wiki/Hashcash wasn't useful for anti-spam after all is because attackers have access to the cheapest compute in the world: botnets and devices that aren't their own.
But I encourage everyone to consider a darker reality: that centralized services by large companies are becoming more and more necessary in a world where it's becoming easier and easier to be an attacker. The internet is kinda broken. Like how half the ISPs in the world don't filter their egress for spoofed IPs because there's no real incentive. That every networked device in every household could unknowingly be part of a botnet because we aren't billed for externalities.
Yeah, maybe it's kinda spooky that now ReCaptcha v3 wants to be loaded on every page. But is that really the take-away? What about the fact that this is what's necessary to detect the next generation of attacker? That you can either use Google's omniscient neural-network to dynamically identify abuse or you can, what? Roll your own? What exactly is the alternative?
Do HNers think this stuff is a non-issue because nobody has every attacked their Jekyll blog hosted on Github Pages (btw, another free service by a large company)?
You're right on, but I wouldn't call it sad.
The population is expected to operate vehicles without putting others in danger, not credentialize in how cars work. There are endless amounts of things we could demand people spend their precious time deeply understanding. We just like to demand tech-savviness because it's self-aggrandizing.
Like everything else, the solution is to help people on their own behalf.
At an online casino I once worked at, we ended up generating random passwords for our users. We had to, because otherwise attackers would lookup usernames in the large password dumps online and log in as our users. No amount of warnings on our /register page stopped password reuse. So we decided we could do better than that, and that "well, we warned you" was not an appropriate response.
If you look around at everyday objects, everything is designed to protect the user. But for some reason in computing we're still in the dark ages of snickering and rolling our eyes at users for making mistakes.
Maybe your LoS algorithm sucks with 1x1 columns and windows, so decide your game doesn't need them and you move on.
Kind of like how the classic mistake you hear about among gamedevs is that they built a game engine instead of the game, basically the end result of constantly following the siren's call of "I'll just generalize this."
One resource I used was: http://roguebasin.roguelikedevelopment.org/index.php?title=C...
Check out recursive shadow-casting. Had the best results of all the implementations I tried.
Frankly, I think the three product lines should be shaped like this:
- Macbook: For price sensitive people. $800-900 to enter the Apple ecosystem.
- Macbook Air: Basically the current MBP with its fixation on power capped by form-factor. (Note: The new Air is heavier than the MBP!)
- Macbook Pro: A portable workstation that doesn't sacrifice everything for form factor. Apple doesn't have one of these right now. For example, prioritizes thermals so that it can sustain max performance instead of the bursty performance of the current MBPs.
The most naive solution (tracing a line to each tile and checking for collision) introduces weird artifacts, like illuminating a single cell 8 tiles away from a window when you're 45 degrees away from the window, that I couldn't persevere through the temptation of getting that perfect.
Then I realized this is just a taste of why all gamedev is hard. Is $GameMechanic going to be more fun implemented like $this or like $that? Well, you can't just git-branch and try both because both options are non-trivial. And it's easy to procrastinate by working on things off the critical path of finishing the game because that is what's hard.
Turns out it involves an impressive amount of visionary power + ability to laser-focus on the Hard Stuff That Matters to build a game. And I'll always respect the super heroes out there that are able to finish one. I suppose it's not so different from writing a book.
Some of the most unsettling behavior I've seen online is a thread on Reddit where an indie developer shared their game with /r/gaming. The reactions: "Looks like dogshit", "This really took you two years to build? lol", "Doesn't even work on Android? lol miss me with that garbage."
Like that /r/gaming thread, we on HN do the same thing with the superficial qualities of a project.
"Python in JS? Who the fuck would want this lol. It took you how long to build this dogshit? Yet another web developer who refuses to learn anything beyond JS." Our analysis goes no deeper than whatever was summed up in the Show HN title where the author is lucky if anybody even navigates to the Github repo and looks at the work involved.
I think it comes down to modern entitlement culture where we see the world as our personal buffet. Now combine that with the ease of sharing your opinion with the world.
It's true that Clojure has its own perks that aid in refactoring, like how you may have less code altogether. But in my experience it's still a drop in the bucket compared to the zoomed out view of dynamic vs static typing.
For example, could you give some examples that make Clojure particularly good in this regard? I'd have trouble coming up with many that quantify favorably against compile-time analysis. And it would be unfair to take this reality and say "Clojure sucks at refactoring." I think that people do say that is what clouds these discussions where one then needs to point out that Clojure has advantages over other dynamically typed languages which is definitely true.
One big difference is that Java APIs tend to require the collaboration of various class instances to get something done, things that you would implement as a single function + options object on your own.
Bouncy Castle is a good example. You may need a Hasher, HasherStrategy, ASNEncoder, DERParameters, and ASNSerializerStrategy instances to execute what you would've implement as `(asn-encode thing)` otherwise, maybe even having to subclass some of them to change some behavior you'd expect an option flag for.
Clojure's own Java-helper macros will compact your 1:1 Java interop code as well, so you have fewer lines even when writing Java from Clojure. Also, short-cuts like ad-hoc reification in Clojure will spare you LoC where you might otherwise have created a whole file for a class with custom interface implementation in Java.
Of course, line-to-line code is also just more compact in Clojure, but ecosystem/api difference is one I don't see mentioned as often.
I don't think this is just good vs bad, though. There are certainly upsides to the more rigid everything-in-its-right-place code you tend to have in Java which has been making big strides in improving itself over the past decade.
Not sure why'd you'd say "objectively" when it's clearly not, the hint being the word "ugly."
I can certainly appreciate the limitation of "extensions will always be three characters". In fact, I wasn't exposed to extensions habitually longer than that until I did iOS dev. "Main.storyboard" "Model.xcdatamodeld" So if we're going to talk about ugly, I'd start there. ;)
This is a completely different thing than the UI widget that tells you the time and may freeze for any reason UI can freeze.