Ask HN: How do you consume HN?

11 points by vvps ↗ HN
For long I've used the Materialistic app on Android but it hasn't been updated in 2 years and has its glitches. I am looking at alternatives and any suggestions from other HN readers.

23 comments

[ 1.8 ms ] story [ 55.1 ms ] thread
I just use the site in a browser, with no dedicated app.
I use my default browser. It works fine for me :-)
Just the browser. I’ve never seen an iOS HN reader app that add any interesting features.
On iOS I’ve tried a bunch of apps and have finally settled on Hack [0] which is excellent.

Looks like there is an Android version too. [1]

[0] https://apps.apple.com/ca/app/hack-for-hacker-news-developer...

[1] https://play.google.com/store/apps/details?id=com.pranapps.h...

I used another app before finding Hack (iOS). The developer is absolutely amazing, and has responded to me very quickly on the single bug I found (in several years of usage), as well as the feature request I made. Definitely a great app for consuming HN.
(comment deleted)
Whats wrong with the browser?
It's a pain reading it on a Mobile device
How so? I use it on mobile, HN has a pretty nice mobile website
Browser with some custom CSS and a JS script that filters blacklisted keywords and doesn't load new stories when I hide one, so most of the day there's only a story or two visible on the main page.
I'd like to use those scripts. Would you please share?
css:

html { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); filter: grayscale(100%); }

tbody tr td { background-color: white; }

td.subtext { opacity: .3; }

span.rank { opacity: 0; }

tr td center { display: none; }

---

js:

function remEl (el) { console.log(el) el.parentNode.removeChild(el) }

const atags = document.getElementsByTagName('a') console.log(atags) for (const a of atags) { console.log(a) if (a.textContent === 'reply') a.style.display = 'none' }

function blockId(id) { var ids = (localStorage.getItem('blockedIds') || '') + ';' + id; localStorage.setItem('blockedIds', ids); }

function hidestory (el, id) { for (var i=0; i < 3; i++) { remEl($(id).nextSibling) } remEl($(id)); blockId(id); return false }

function getCurrentIds() { return [].map.call(document.getElementsByClassName('athing'), x => x.id); }

function hideBlocked() { var ids = getCurrentIds(); var blockedIds = new Set((localStorage.getItem('blockedIds') || '').split(';'));

    console.log(blockedIds);
    for (let id of ids) {
        if (blockedIds.has(id)) {
            try {
                 hidestory('', id);
            } catch (e) {
                
            }
        }
    }
}

function getPosts() { return document.getElementsByClassName('athing') }

function hideWithKeywords(words=[]) { const deleteIDs = new Set() for (let post of getPosts()) { for (let word of words) { if (post.textContent.indexOf(word) > -1) { console.log('Blocked', post.textContent) deleteIDs.add(post.id) break; } } }

    for (let id of deleteIDs) {
        hidestory('', id)
    }
}

function hidePosts(func) { const deleteIDs = new Set() for (let post of getPosts()) { if (func(post)) { console.log('Blocked', post.textContent) deleteIDs.add(post.id) } } for (let id of deleteIDs) { hidestory('', id) } }

const blockedWords = [ 'Juicero', 'Blockchain', 'Bitcoin', 'Vatican', 'Lisp', 'Yahoo', 'People.ai', 'NASA', 'MH370', 'soylent.com', 'Soylent', 'Tesla', 'FBI', 'CIA', 'Sexual', 'Ethereum', 'Emacs', 'Azure', 'Comic Con', 'Drchrono', 'GitLab', ') is hiring', ') Is Hiring', 'Clojure', 'Uber', 'Theranos', 'WannaCry', 'Venture Capital', 'Bees ', 'Sexist', 'sexist', 'diversity', 'Diversity', 'Palantir', 'Monsanto', 'discrimination', 'sexism', 'Sexism', 'Equifax', 'SpaceX', 'blockchain', 'video game', 'is hiring ', 'Cryptoc', 'cryptoc', 'bbc.com', 'forbes.com', 'fortune.com', 'vice.com', 'nautil.us', 'Zuckerberg', 'Trump', 'techcrunch', 'theguardian', 'wsj.com', 'economist.com', 'libertarianism.org', 'slate.com', 'coronavirus', 'covid', 'covid-19', 'Covid-19', 'Tether', 'NFT', 'Web3', 'web3' ]

if (blockedWords.length) hideWithKeywords(blockedWords)

hi...

This is awesome! Thank you!
Np, the hide button should work this way by default.
(comment deleted)
Harmonic on Android is nice.
To be honest, browser or on Octal iOS, but I've heard a few good opinions on Boreal as well (I haven't tried it myself yet)