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.
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.
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.
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)
}
}
23 comments
[ 1.8 ms ] story [ 55.1 ms ] threadLooks 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...
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(';'));
}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; } } }
}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...