160 karma · joined July 22, 2016
Tailscale allows devices that can access the Internet (no matter how they access the Internet) to see each other.
To do that, you create a tailscale network for yourself, then connect your devices to that network, then your devices can see each other. Other devices that are connecting to the Internet but not to our tailscale network won't see your devices.
AI might explain it better :-) Don't know why I wanted to explain it.
I'd love to see how Rue solves/avoids the problems that Rust's borrow checker tries to solves. You should put it on the 1st page, I think.
Why hesitant? Just ask AI. It'll tell you how to do it and then you can experiment it yourself.
1GB with the bytea data type (https://www.postgresql.org/docs/current/datatype-binary.html) and 4TB with the BLOB data type (https://wiki.postgresql.org/wiki/BinaryFilesInDB).
Have you ever thought of using a postgresql db (also on aws) to store those files and use CDC to publish messages about those files to a kafka topic? In your original way, we need 3 aws services: s3, lambda and sqs. With this way, we need 2: postgresql and kafka. I'm not sure how well this method works though :-)
// ==UserScript==
// @name ycombinator
// @namespace Violentmonkey Scripts
// @match https://news.ycombinator.com/*
// @grant GM_addStyle
// @version 1.0
// @author -
// @description 10/5/2022, 6:35:39 PM
// ==/UserScript==
GM_addStyle(`
.pagetop { color: #fff }
body .title { font: 19px/1.5 sans-serif }
body a, body a:link { color: #222 }
body .comhead { font-size: 16px; font-style: italic }
body .title .rank { color: #aaa; font-size: 14px }
body .subtext { font-size: 16px; padding: 4px 0 6px 19px }
.c00, .c00 a:link { color: #444 } body .comment { font: 16px/1.45 sans-serif; max-width: none }
body span.pagetop a, body span.pagetop a:visited { color: #fff }
body tr.athing:not(.comtr):nth-child(even) { background: linear-gradient(#f4f4f4, #eee, #f4f4f4) }
body tr.athing > td { padding: 5px 10px 5px 1px }
body tr.athing > td.votelinks { padding-right: 5px }
td.zoom { font-weight: 700; color: #fff; width: 32px }
td.zoom > span { cursor: pointer; font-size: 1.5rem }
div.toptext { font-size: 17px; color: #333 }
span.number-of-comments { font-size: 18px; color: #666 }
`);
const t = document.getElementById('hnmain');
if (t != null) {
t.removeAttribute('bgcolor');
t.removeAttribute('width');
t.parentNode.removeChild(t);
document.body.prepend(t);
}
const spanPagetop = document.querySelector('td span.pagetop');
if (spanPagetop) {
const tr = spanPagetop.parentElement.parentElement;
tr.insertAdjacentHTML('afterbegin', `
<td class="zoom"><span onclick="zoomIn(); return false">+</span></td>
<td class="zoom"><span onclick="zoomOut(); return false">-</span></td>
`);
}
setTimeout(function() {
while (true) {
const td = document.querySelector('tr:not([id]) > td.subtext');
if (td == null) {
break;
}
const tr = td.parentElement;
const previousTr = tr.previousElementSibling;
if (previousTr != null) {
tr.parentElement.removeChild(tr);
previousTr.append(td);
} else {
break;
}
}
while (true) {
const tr = document.querySelector('tr.spacer');
if (tr == null) {
break;
}
tr.parentElement.removeChild(tr);
}
document.querySelectorAll('td.title[valign="top"]').forEach(td => td.setAttribute('valign', 'middle'));
document.querySelectorAll('table > tbody > tr:has(> td + td + td + td) + tr + tr > td[colspan="2"]:first-child + td:last-child').forEach(td => {
td.setAttribute('colspan', '2');
});
document.querySelectorAll('a[href^="item?id="]').forEach(a => {
const arr = a.innerHTML.split(' ');
if (arr.length == 2) {
a.innerHTML = `<span class="number-of-comments">${arr[0]}</span> ${arr[1]}`;
}
});
}, 419);
const myScript = document.createElement('script');
myScript.innerHTML = `
const FONT_SIZE_THRESHOLD = 26.9;
function zoomIn() {
const bodyTitle = document.querySelector('body .title');
if (bodyTitle) {
const newFontSize = parseFloat(getComputedStyle(bodyTitle).getPropertyValue('font-size').replace('px', '')) + 1;
document.querySelectorAll('body .title').forEach(t => {
t.style.fontSize = newFontSize + 'px';
if (newFontSize > FONT_SIZE_THRESHOLD) t.style.fontWeight = 300;
});
}
const bodyComment = document.querySelector('body .comment');
if (bodyComment) {
const newFontSize = parseFloat(getComputedStyle(bodyComment).getPropertyValue('font-size').replace('px', '')) + 1;
document.querySelectorAll('body .comment').forEach(t => {
t.style.fontSize = newFontSize + 'px';
if (newFontSize > FONT_SIZE_THRESHOLD) t.style.fontWeight = 300;
});
}
}
function zoomOut() {
const bodyTitle = document.querySelector('body .title');
if (bodyTitle) {
const newFontSize = parseFloat(getComputedStyle(bodyTitle).getPropertyValue('font-size').replace('px', '')) - 1;
if (newFontSize > 12) document.querySelectorAll('body .title').forEach(t => {
t.style.fontSize = newFontSize + 'px';
if (newFontSize < FONT_SIZE_THRESHOLD) t.style.fontWeight = 400;
});
}
const bodyComment = document.querySelector('body .comment');
if (bodyComment) {
const newFontSize = parseFloat(getComputedStyle(bodyComment).getPropertyValue('font-size').replace('px', '')) - 1;
if (newFontSize > 12) document.querySelectorAll('body .comment').forEach(t => {
t.style.fontSize = newFontSize + 'px';
if (newFontSize < FONT_SIZE_THRESHOLD) t.style.fontWeight = 400;
});
}
}
`;
document.head.appendChild(myScript);The + - buttons on the top panel change the font size of every thing except the font size of the panel.
Things are arranged to minimize the page scrolling.
The news title and number of comments are darker and a little bit bigger than other elements for an easy reading.
- the Web & Network section expanded: the copyparty features (github.com/9001/copyparty) and curlie (github.com/rs/curlie).
- compress/decompress features with password: it doesn't need to use the best compress algorithm, gzip is good enough.
I don't have any experience with Redis Cluster Streams. Could you please tell us how it is simpler to manage? IMO, installing and managing a Kafka cluster in a non Fortune 100 scale is simple enough: run 1 java command for zookeeper, run another java command for a broker (with recent version of Kafka, zookeeper is not needed anymore). The configuration files are not very simple but not very complicated either. When we have another machine, we can run another broker on it.
Redis Cluster Streams is cheaper to run because it's written in C, doesn't need a VN to run? Or because its messages are stored in RAM not SSD?
I agree with the other comment. Then what you need is Rust without all the bells and whistles (pattern matching, Cow, Rc, Result, Option ...).