HNHacker News
TopNewBestAskShowJobs

xvello

486 karma · joined June 30, 2021

They/them - Distributed systems engineer - hello@xvello.net
submissionscomments
xvello··on Ask HN: What not-profit-seeking project are you tinkering with this week?
https://letsblock.it has been on a slow but steady growth trajectory since it's January ShowHN[1]. The public instance served 290 customized lists this week, and operations / project upkeep are a pretty light time commitment.

It's a companion project to uBlockOrigin, working towards improving the internet's signal/noise ratio by filtering out low-value content and nags. While cosmetic filtering is very powerful, its learning curve is steep, so the project provides customizable templates maintained by the community.

I'll be giving a talk about the project, titled "Designing an Open-Source project for low maintenance" this Thursday at Ory Summit[2] and will share the recording on HN once it's public. You can still watch the conference's live-stream for free!

After that, I'll need to update the website's copy and simplify some UX, to prepare for another visibility push later this year.

[1]: https://news.ycombinator.com/item?id=30057442

[2]: https://ory-events.vercel.app/

xvello··on Go runtime: 4 years later
For that use case, I think that you can assign your defaults before passing your target struct to the unmarshaller.

The unmarshaller will iterate on the json input and set struct fields when json fields are found. This means that struct fields that don't match the json are ignored, and values you have set before will be left as is.

xvello··on GitHub Actions Pitfalls
Agreed. The workaround my team uses is to first merge an empty action with the right parameters set, then open a second branch to implement the action steps. Once the action hits main, you can start it, using the definition from any branch.
xvello··on YouTube currently testing 5 to 10 unskippable ads before video starts
It's actually implemented, and called "Super Thanks", with a heart icon. IIRC the creator has to enable it on their channel for the button to show up.
xvello··on Show HN: Hacker News dark mode with uBlockOrigin / AdGuard cosmetic filters
For the CSS nerds out here, cross-browser compatibility dictated the split in two rules. The following rule:

    news.ycombinator.com##html:style(filter:invert(100%) hue-rotate(180deg); background: white)
works great on Firefox, but leaves the borders white in Chrome. Chrome applies the background directive AFTER the color inversion filter, while Firefox applies it BEFORE. On Chrome, you should use instead:

    news.ycombinator.com##html:style(filter:invert(100%) hue-rotate(180deg); background: black)
xvello··on Show HN: HN dark mode in 2 lines of code
For future reference, we can recover the orange colors by adding a hue-rotate filter too. Here's my current rule:

    news.ycombinator.com##html:style(filter:invert(100%) hue-rotate(180deg))
    news.ycombinator.com##body:style(background: white)
Published it in https://news.ycombinator.com/item?id=32800642
xvello··on Ask HN: 2FA for Credit Cards?
> Ye, it'd be great if I could configure it to do 2FA on all online transactions. Does anyone know what exactly triggers 2FA?

AFAIK, 3DS is opt-in on the merchant side, as it requires integration work. Visa & MS are pushing the envelope by only insuring against fraud if 3DS is properly setup. If the merchant chooses not to implement it (and some have decided not to, to reduce checkout friction), they have to bear the financial risk of the fraudulent transactions.

xvello··on Ask HN: 2FA for Credit Cards?
3DS delegates the second factor authentication to the card emitter (your bank): the 3DS interface is really just an iframe provided by the bank.

One of my banks embeds their login form, which asks for a portion of your login credentials (probably secure enough in recent browsers, but still a bit yucky). My other bank requires transactions to be approved in the account management interface (either via their mobile app or by logging into their website in another tab). Other banks use one-time-password generators for their website, and reuse that system as their second factor.

xvello··on Show HN: HN dark mode in 2 lines of code
Great idea, using it now! You can also apply styles with uBlockOrigin, for example the equivalent uBO rule is:

    news.ycombinator.com##html:style(filter:invert(100%); background = #fff;)
Setting topcolor to 0099ff (blue) in the profile settings returns it to its glorious orange state after color inversion.
xvello··on An odd discovery on Spotify
There is a community-maintained list of these stackoverflow / github / npm / wikipedia clones, and adblocking rules to hide them from search results: https://github.com/quenhus/uBlock-Origin-dev-filter

These lists are supported as presets in https://letsblock.it/filters/search-results

xvello··on Labstack/echo: High performance, minimalist Go web framework
Gin and Echo cover similar feature scopes (the HTTP plumbing around your business logic, that you write in handler functions), but I chose Echo for my project[1] because:

- it ships a pretty extensive collection of middlewares that will get you to 80% faster

- the documentation[2] is really well written and accessible to new web developers: most "must have" features have a cookbook page, so you don't have to google for blog posts.

- it does indeed use a custom handler function signature, but in my opinion this one is better (returning errors instead of handling them locally in each handler). You can still use handlers and middlewares written for other frameworks (for example the great statigz[3] handler) through the `echo.WrapHandler` and `echo.WrapMiddleware` functions

[1] https://github.com/letsblockit/letsblockit

[2] https://echo.labstack.com/guide

[3] https://github.com/vearutop/statigz

xvello··on Postgres full-text search: A search engine in a database (2021)
Most projects will never *need* to scale horizontally.

Unfortunately, many will, due to FOMO and Resume Driven Development.

xvello··on Improving distributed caching performance and efficiency at Pinterest
Just use the two following uBlock Origin / Adguard rules, the first one for text results, the second one for images:

    google.*##.g:has(a[href*=".pinterest."])
    google.*##a[href*=".pinterest."]:upward(1)
You can build custom rules for other websites and other search engines at https://letsblock.it/filters/search-results
xvello··on GitHub incident – now resolved
Agreed, the admins re-titled it too early. Git operations and API requests are back to green, but other subsystems are still impacted.
xvello··on Ask HN: How can I improve navigation skills?
My partner has similar struggles and after several years together, I think it boils down to how we orient maps. They use Google Maps' default "map turns around you" mode while I always orient my maps with the North pointing up.

Spatial navigation boils down to learning to position and orient yourself relative to your surroundings. I feel like Google Maps' approach of having the map rotate around you is deeply counter-productive: it puts you at the center of the world instead of emphasizing your movement in the fixed world. It can also mislead you because the phone's virtual compass might be completely wrong and pointing you to the wrong direction.

I have had a small compass on my keychain for more than a decade. When I get off the subway or start a trip, my first task is to determine where the North is. If I don't know it already, I'll check my compass. When I plot a course from the subway station to my final destination, I'll use either a paper map or an app (maps.me, or gmaps) in fixed orientation mode, and determine:

- what direction the A->B vector is (East-Southeast for example), so that I can check it regularly with my compass while walking and detect when I veer off course and need to re-check the map

- landmarks (shops, monuments, boulevards) I should pass by during my trip. If I don't see them, I re-check my position

- turn-by-turn directions (third street on the right, then a left at the roundabout...), with regular direction checkpoint (I should be facing South on this street)

Written in long form, this looks like an arduous project, but I usually perform this in a few seconds, before my partner has finished doing the figure-eight compass calibration dance on their phone. Before I had a smartphone, I used to position myself only with street names and landmarks on a paper map, but I do rely a lot on the GPS position now. I just never trust it for orientation, because my whole system relies on me keeping track of it.

xvello··on The Future of the Gitlab Web IDE
Google Code: https://code.google.com/archive/
xvello··on Ask HN: What do you think about Quay.io?
Docker Hub's introduction of pull rate limits in 2020 created significant disruption for companies and big projects, and left a sour taste in a lot of people's mouth. I am not saying that they shouldn't have done it (bandwidth is not free of course), but I'm weary of what user-hostile move they will pull next.

As the maintainer of an open-source project that will publish container images, I am evaluating quay.io vs github packages, as both offer free storage and bandwidth for public projects. Docker has a process for open-source projects to apply and get rate-limits lifted, but why should I bother with it?

My last interaction with Quay was a couple of years ago (so a product might have evolved in the bad direction since), but at the time the publisher UX was pretty good, and the security scanning relevant.

xvello··on Almost all searches on my independent search engine are now from SEO spam bots
You might be interested in using uBlockOrigin and https://letsblock.it/filters/search-results to easily block these domains. In addition to your own domain list, you can use the community-maintained SO / github / npm copycat lists.
xvello··on Ask HN: Best License for OSS Project
If you expect to receive external contributions, the Apache 2.0 license can be a pretty good choice, because it has a clause to automatically grant you a license on contributions (be them code or just ideas):

> Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions.

I am using it for https://letsblock.it, so that I can ensure the filter corpus is in the right license without requiring a CLA.

xvello··on Tell HN: By default, New Relic will start collecting production log data on 5/3
Interesting, I didn't think about this! Although it can work, using logs or APM without infrastructure monitoring was not a design goal for the agent. For this use case, I'd investigate using https://vector.dev/ instead of the full agent.
xvello··on Tell HN: By default, New Relic will start collecting production log data on 5/3
Metrics from all official integrations (including host metrics) are included in the $15/month/host flat pricing. Of course, them being sent will trigger that per-host billing, but that's an expected consequence of installing the agent on a host. The only caveats I know of are:

- some integrations have options to collect more timeseries. If the volume is too high, these will be marked in the documentation as billed as custom metrics

- custom integrations (including custom prometheus/openmetrics instances) are billed as custom metrics, as if they were sent through statsd

- container monitoring (enabled by default in the docker image, but not the other agent installations) is included up to 10 concurrent containers per host ; additional containers are billed on-demand

xvello··on Tell HN: By default, New Relic will start collecting production log data on 5/3
> features on by default that are billed at the on-demand rate.

Can you please elaborate on what these features are? I used to work in the agent team and we were cautious not to have that happen.

xvello··on Ask HN: What’s a good laptop for software development at around $2k?
> How is that allowed??

Looks like they can get away with it ¯\_O_/¯

> What is the replacement?

S0ix sleep (named s2idle in Linux), where the OS is responsible for suspending / resuming all non-essential functions. Work is ongoing on the Kernel and drivers to improve it, but there is a long way to go (yay Monday mornings with an empty battery because the power draw is still > 1W).

Even Windows is unable to make it correctly work without killing the battery overnight, so they now default to hibernating to disk after a couple of hours. This strategy is also possible with Linux, but making it work alongside full disk encryption is tricky: https://wiki.archlinux.org/title/Dm-crypt/Swap_encryption#Wi...

xvello··on Ask HN: What’s a good laptop for software development at around $2k?
Intel has removed support for S3 sleep from their platform, so every laptop with 11th+ generation Intel is plagued with this issue. Dell even put out an advisory that a sleeping laptop is not safe to store in a backpack anymore!

AMD still supports S3 sleep on their Ryzen processors, but you'll need to check user feedback to make sure that the vendor did their job implementing it properly. In S3 sleep, the UEFI/BIOS is responsible for suspending and resuming hardware state. If not implemented correctly, you'll have high battery drain (components not suspended) or bugs on resume. Lenovo had dropped the ball on that front repeatedly, with the last two gens of T14 requiring BIOS updates to fix issues.

xvello··on On anti-crypto toxicity
> Where are you located that visa and MasterCard are charging 3%?

I am guessing the good old unregulated free market of the US of A: https://www.valuepenguin.com/what-credit-card-processing-fee...

There, banks and credit card companies offer huge perks and cash-back to card holders. That money must come from somewhere, and that's from the transaction fees paid by merchants (and transitively customers, as merchants still need to make a profit). AMEX has even higher transaction fees, which is why some businesses don't accept it.

The situation is now at an idiotic local maximum: if I don't use one of these cashbacks cards, I am losing money paying for my neighbor's air miles, as I don't get a discount anyway. You don't need a "technofix" for that, you need regulations that cap interchange fees like the EU.

xvello··on The absurd complexity of server-side rendering
Ouch, that hit too close to home :/ It's too early for whiskey where I live.
xvello··on Three areas where Google Search lags behind competitors: code, cooking, travel
Thanks for the feedback! The site currently allows you to create one personal list that you can sync across all browsers, but I have plans to allow creating several lists and sharing some of them publicly

The main complexity will actually be in the frontend: how to make it easy to edit several instances, and check in what list you'll add a new filter?

xvello··on Three areas where Google Search lags behind competitors: code, cooking, travel
Shameless plug for the Let's Block It project: we have a filter template to selectively remove domains from search results: https://letsblock.it/filters/search-results

For the Stackoverflow / Github clones, we partner with https://github.com/quenhus/uBlock-Origin-dev-filter and their lists are available as presets at the bottom of the filter configuration.

xvello··on MarketRank: Anti-SEO Ranking Algorithm
That is the main value proposition for the new search engine https://kagi.com/ Each result has a menu to block or boost the domain, to remove SEO spam, and pin relevant domains (the online documentation for that framework that always ranks below stackoverflow) to the top. So far I am loving it.
xvello··on Firefox now requires upgrade to be done before refreshing or opening new pages
Firefox has required a browser restart after an update is installed for years. It manifests as an inability to open new tabs, with a prompt to restart. This is a safety mechanism implemented to avoid strange bugs that could happen when mixing code from the old and new versions.

As far as I know, Firefox does not have any mechanism to forbid running an old version, as your title is implying. You probably left auto updates on, and got that dialog I described?

← PreviousPage 2 of 3Next →