HNHacker News
TopNewBestAskShowJobs

dguo

2,284 karma · joined December 30, 2013

https://dannyguo.com

You can reach me at danny@dannyguo.com

[ my public key: https://keybase.io/dannyguo; my proof: https://keybase.io/dannyguo/sigs/C2fFXC5Ko08xHzyJcfsCCYirEvBcPjlRkJBGlgl1ipk ]

submissionscomments
dguo··on Charge more for app subscriptions
Whenever I read "charge more," I think of the implicit assumption that service owners want to maximize total profit.

While I can understand that desire, there's no law of nature that says we have to act in a profit-maximizing manner. A SaaS service could have a different goal: running a sustainable business that benefits as many people as possible.

So they could choose to charge a deliberately low amount such that more people can afford to or are willing to pay for it, while also charging a high enough amount that the business is financially sustainable.

dguo··on Design Tip: Never Use Black (2012)
Lenovo ThinkPad X1 Carbon and Extreme laptops have anti-glare options for the display: https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-x1/c/...
dguo··on Safari adopts the Chrome/Firefox extension model
Yes, and that is actually already the case. When Apple finished deprecating .safariextz extensions in favor of Safari App Extensions, they also killed the Safari Extensions Gallery in favor of distribution through the App Store. And as you assumed, the developer does have to pay the annual fee.

See https://lapcatsoftware.com/articles/decimation.html

dguo··on Modeling a Wealth Tax
You may be interested in Lobsters: https://lobste.rs/about
dguo··on Ask HN: Anyone a social entrepreneur, i.e. placing social impact above profit?
With the help of some friends, I started Sublime Fund (https://sublimefund.org/). It lets people donate to multiple charities on a monthly basis from one place, while maintaining their privacy. Sublime Fund is itself a 501(c)(3), and we don't keep any cut of the donations for ourselves (though we do deduct the cost of payment processing and distribution).

A lot of the motivation for building it came from my own desire to use it, so I've tried to make it as user-friendly as possible. For example, there are no attempts to add friction to the process of stopping donations to a charity. I can do it in seconds.

I've let development stagnate because I started a new job last year, but it requires very little maintenance to keep going, and I plan on getting back into it soon to build out new features.

dguo··on Don't close your MacBook with a cover over the camera
That's what I use as well, and I'm still using the same one that I started with. It's lasted over a year.

I appreciate this line:

> The camera is engineered so that it can’t activate without the camera indicator light also turning on. This is how you can tell if your camera is on.

But I still want a physical assurance that the camera can't see anything. I don't want to have to count on myself noticing the light.

Some Lenovo ThinkPads have built-in shutters, and I wish Apple would do the same for MacBooks. In my ideal laptop, it would also physically disable the microphone.

dguo··on macOS Big Sur Preview
As a developer, one thing I am excited about is that they are adding support for the WebExtensions API to Safari. This should make it feasible to port many Chrome/Firefox extensions to Safari.
dguo··on Show HN: Switchboard – A mDNS based reverse proxy for personal infrastructure
I spent the past weekend setting up a VPS for a personal project, and Caddy worked wonderfully well. All I needed was HTTPS for a server, and a two line Caddyfile gave me that:

<domain>

reverse_proxy localhost:8000

dguo··on Ask HN: Side projects that are making money, but you'd not talk about them?
They do[1], but it costs $9 per site per month.

[1]: https://www.netlify.com/products/analytics/

dguo··on Ask HN: Side projects that are making money, but you'd not talk about them?
Haha thanks! As soon as I read the first line of your comment, I knew you must be from ReadMe.
dguo··on Ask HN: Side projects that are making money, but you'd not talk about them?
About 37,000 per month, according to Google Analytics. The actual number is probably quite a bit higher, since I assume programmers use ad blockers at a high rate.
dguo··on Ask HN: Side projects that are making money, but you'd not talk about them?
I got tired of reading bad READMEs and made https://www.makeareadme.com/ on a whim. Over the past few years, it has climbed up the Google search rankings. It's usually in the top three hits for "readme" now.

I serve developer-focused ads with CodeFund (and Carbon as a backup when CodeFund doesn't have an ad available). I get about $45 in revenue per month. Hosting costs are $0 because it's just a static site served from Netlify, so the only cost is the domain.

I never intended to make any money off of it, and I care much more that it's hopefully a helpful resource for some people. But it is nice to get a little bit of passive income.

dguo··on Serve Videos Instead of GIFs
As a website operator, I feel a personal responsibility to consider how my choices affect those things, even if my users might incorrectly blame others instead of me.
dguo··on Serve Videos Instead of GIFs
Author here. That is good criticism! Thanks for bringing it up. I didn't consider other factors like ease of sharing.

They are definitely tradeoffs. At least for my personal website, the size disadvantage of GIFs still outweighs them, in my opinion. I think bandwidth usage and battery drainage are also worth thinking about on behalf of the user.

dguo··on Serve Videos Instead of GIFs
Author here.

I added the "for me" to try to convey that it's a personal choice. I don't care what pronunciation others use.

In this case, it doesn't bother me if someone chooses to discount what I wrote just because of that statement. That's on them.

I know it doesn't add much to the post. I just really liked the video of him accepting the Webby award. It was nice to see the person behind the technology, and I like letting creators decide things like pronunciation and casing. For example, I always make sure I spell "GitHub" instead of "Github" for no reason other than that's how they spell it themselves.

dguo··on In Praise of AutoHotKey
Ah, that makes sense. Thanks. I just checked and realized that I forgot my monitor has a headphone jack.
dguo··on In Praise of AutoHotKey
I happily used Karabiner for years but only to handle my caps lock remapping. It's not bad. I just generally like having as few dependencies as possible. I definitely needed Hammerspoon for other stuff, so if it can cover my one use case for Karabiner as well, then I only need to use one program instead of two.

One specific reason I want to go with Hammerspoon in the long run for key remapping is that I plan to do more complicated things, like setting up key layers. And even if that's possible with Karabiner, I'd rather maintain the complexity with Lua code rather than Karabiner's JSON configuration, which is complicated enough that someone created a separate tool[1] just to generate the configuration.

I should note that one of the maintainers of Hammerspoon specifically recommended[2] using Karabiner instead of Hammerspoon for key remapping because Karabiner was built to do that. Hammerspoon has a much higher level view of key events, from what I understand. I don't plan to do any remapping with modifier keys though. I plan to only use the letter keys for everything. Something like: press and hold ;, then press and hold v, and then tap a. And that will re-arrange my current windows into my preferred arrangement. Stuff like that. Based on my initial experience, I should be able to do everything with just Hammerspoon.

[1]: https://github.com/yqrashawn/GokuRakuJoudo

[2]: https://github.com/Hammerspoon/hammerspoon/issues/1025#issue...

dguo··on In Praise of AutoHotKey
That's correct, but I've never gotten false input before. If my setup gave me false input even 0.5% of the time, I wouldn't use it at all. I give myself 250 milliseconds to release the ; key to type it as normal, and that has worked fine for me, both on my laptop keyboard and on my external keyboard.

I find it very easy to use since my pinky finger sits on the ; key by default.

dguo··on In Praise of AutoHotKey
I've started[1] to do similar things on macOS using Hammerspoon[2]. So far I've set it up to let me:

1. Use shift when pasting something to simulate typing in the text instead, getting around websites that block pasting.

2. Use ";" as a hyper key. By holding it down and pressing another key, I can switch between specific programs without cycling. I can also use hjkl as arrow keys.

3. Automatically switch audio input and output devices according to my specified priority order. Because macOS would frequently get it wrong, including treating my monitor as a speaker for some reason (it doesn't have built-in speakers).

4. Make control act as escape when tapped. I use this in conjunction with remapping caps lock to control in macOS system preferences. I previously used Karabiner Elements for making caps lock work as escape when tapped and control when held, but I was able to uninstall Karabiner because Hammerspoon was sufficient.

5. Disable the insert key because I've never wanted its functionality, but I would sometimes hit it accidentally.

[1]: https://github.com/dguo/dotfiles/blob/master/programs/hammer...

[2]: https://www.hammerspoon.org/

dguo··on Notion encourages busy-work
My teammate has described Notion as a B+ solution for everything. It's impressive how many things it can handle, but it's all in a merely decent manner.
dguo··on Hacking Together an E-ink Dashboard
I have my eye on that one. One of the creators just did an AMA on Discord an hour ago: https://discordapp.com/channels/571093131651448852/703384583...

I think I'm going to hold out for the Inkplate 10 (9.7" screen), which he mentioned when someone asked about upcoming plans.

dguo··on Moving Away from Gmail
I'm planning on migrating from Gmail to Fastmail, but I'm holding off until Hey launches to see what it offers.
dguo··on How porting to TypeScript solved our API woes
To your point, I do think it depends on the team and their ability to make good judgment calls.

But type safety is a spectrum anyway. One could say that not having dependent types is like having a swimming pool without a lifeguard.

Should every swimming pool in the world have a lifeguard? Probably not.

dguo··on How porting to TypeScript solved our API woes
Note that Stripe is working on a type checker for Ruby: https://sorbet.org/

I second the sentiment though. I wouldn't choose to use plain JavaScript over TypeScript for any significant project.

You might ask why I wouldn't just use a more fully typed language like Java. My main response is that I love having the flexibility to choose how strict the types should be. Sometimes, typing something out fully is not worth the trouble. Having escape hatches lets me make that choice. While I enjoy using types to turn runtime bugs into compile time errors as much as possible, it's not the right thing to do 100% of the time.

dguo··on Ask HN: What is your blog and why should I read it?
https://www.dannyguo.com/blog

I'm still working on developing a habit of writing regularly. I love it when I find a personal blog post that perfectly solves a problem that I have (especially when that blog post is essentially the only resource for a very specific problem) or explains a concept better than anything else. So I'm trying to do the same for others for things that I know about.

More people should share what they know.

dguo··on PayPal and Venmo are still letting SIM swappers hijack accounts
Thanks for the tip! I'm glad to see they've implemented this. Though I'm still very frustrated about how long it took for them to do anything about this problem.
dguo··on PayPal and Venmo are still letting SIM swappers hijack accounts
One of my relatives suffered three SIM swap attacks over about six months. I asked our carrier after the first two times what we could do to prevent it from occurring again. The answer each time boiled down to "nothing." After the third time, my relative got a new phone number.

I'd love to be able to opt in to having to provide a photo id at a physical location in order to complete the SIM swap.

Or maybe the carrier can try to call or text the number for some sort of confirmation process. In our case, we never even got a warning that the swap was going to occur. We found out after my relative's email account was compromised.

This issue alone is enough to make me want to switch carriers, but AFAIK, all of them do not provide robust protection measures for this issue. I've considered Google Fi, but it might have poor coverage where some of my relatives are.

dguo··on Apple acquires Dark Sky
That's fair. My counterpoint would be that Apple could have become a customer of the Dark Sky API, achieving essentially the same result without Dark Sky having to kill off platforms.

But sure, at that point, it probably makes sense for Apple to just buy the company to make sure that the data supply chain is within their control.

I am just a little bitter to lose the service personally.

dguo··on Apple acquires Dark Sky
"We’re thrilled to have the opportunity to reach far more people, with far more impact, than we ever could alone."

I generally don't mind "our incredible journey" posts that much, but I wonder how much mental gymnastics you need to justify that statement when you're shutting down platforms.

Congrats to the Dark Sky team though. I've enjoyed using it. Time to look for a replacement as I only use the Android app and website. At this point, I'm tempted to see what I can build for myself with government provided APIs: https://www.weather.gov/documentation/services-web-api

dguo··on Migrating from Authy to Bitwarden for 2FA Codes
Yep, you could definitely choose to use either 1Password or Bitwarden for both passwords and 2FA codes. I addressed this point in the article. I'm willing to deal with the hassle of using two password managers to avoid putting them all in one place, providing some degree of protection if one gets compromised but not the other.
← PreviousPage 2 of 9Next →