~dr|z3d
@RN
@RN_
@StormyCloud
@T3s|4_
@eyedeekay
@orignal
@postman
@zzz
%Liorar
+FreefallHeavens
+Xeha
+bak83_
+cumlord
+hk
+profetikla
+uop23ip
Arch
DeltaOreo
FreeRider
Irc2PGuest19353
Irc2PGuest22478
Irc2PGuest48042
Irc2PGuest64530
Meow
Nausicaa
Onn4l7h
Onn4|7h
Over1
acetone_
anon4
anu3
boonst
juoQuua9
mareki2pb
not_bob_afk
plap
poriori_
shiver_1
simprelay
solidx66
thetia
tr
u5657
weko_
orignal
zzz, yes clock skew problem was fixed in 2.50.2
orignal
0.9.58 is hard to crash
orignal
it contains that fix about endless recursion inside garlic
orignal
it was actually deadlock but anyway
orignal
here we go
orignal
this commit is after 0.9.58
orignal
all you need it is to send ratchets message to router rather than to destination
zzz
good to know about the old clock skew bug. We definitely saw a lot of it last year
zzz
I don't think I'll be sending death ratchets to china though...
zzz
about 1700 unique routers seen so far
zzz
1 X
zzz
2 Xf
zzz
168 XfR
zzz
1 XfRD
zzz
19 XfRE
zzz
458 XR
zzz
37 XRE
zzz
991 XU
zzz
16 XUE
orignal
before 0.9.58 it's even easier
orignal
send a garlic message to router with garlic clove inside
orignal
and it fall into deadlock mutex
orignal
in 0.9.58 you need to send it with right timing
orignal
i2pd XfRD? it means latest release
orignal
we didn't publish D beofre
zzz
only 1, probably not part of botnet
orignal
then what is unique?
zzz
unique router hash
zzz
can't explain the one XfRD though, this is 0.9.58 only
orignal
and you believe it's i2pd
orignal
you mean unique in China?
zzz
in general the botnet is i2pd. The one XfRD, maybe not
orignal
how do you diferentite botnet? older version?
zzz
X && China && 0.9.58
zzz
a week ago: almost zero. Now: 1700
orignal
but how you know that XU is China?
orignal
since you don't see IP
zzz
actual connected IP
zzz
maybe some sort of GFW test to improve their classification
dr|z3d
GFW test? on the chinese routers or?
zzz
right, perhaps GFW ops deployed their own fleet, to test/improve classification/blocking
dr|z3d
the simplest way would be a head request to anything blocked by the gfw.
dr|z3d
(and wait for the reset packet)
zzz
attempting to hack up a js audio play-all button for snark
dr|z3d
don't we create a playlist from all the files already, or we just take one if it's there?
zzz
yes for an external player
zzz
but annoyingly I have a console pw so everything fails 401
zzz
so let's try an in-browser solution
dr|z3d
<script>
dr|z3d
fetch('playlist.m3u')
dr|z3d
.then(response => response.text())
dr|z3d
.then(data => {
dr|z3d
const audioUrls = data.split('\n').filter(line => line.trim().length > 0 && !line.startsWith('#'));
dr|z3d
let currentAudioIndex = 0;
dr|z3d
const audioPlayer = document.getElementById('audio-player');
dr|z3d
function playNextAudio() {
dr|z3d
if (currentAudioIndex < audioUrls.length) {
dr|z3d
audioPlayer.src = audioUrls[currentAudioIndex];
dr|z3d
audioPlayer.play();
dr|z3d
currentAudioIndex++;
dr|z3d
} else {
dr|z3d
alert('Playlist finished!');
dr|z3d
}
dr|z3d
}
dr|z3d
audioPlayer.addEventListener('ended', playNextAudio);
dr|z3d
playNextAudio();
dr|z3d
})
dr|z3d
.catch(error => {
dr|z3d
console.error('Error fetching playlist:', error);
dr|z3d
});
dr|z3d
</script>
zzz
ewww
dr|z3d
it's a rough and ready demo, the point being you can take a playlist and have the browser play it.
dr|z3d
with something like that, you'd just add a button to the table header when the playlist is available and use it to trigger that script. problem sorted.
zzz
I'm aiming for something a little less fugly
dr|z3d
who cares if it's fugly. it only matters that it works and is robust.
zzz
thought you were the original anti-fugly
dr|z3d
well, I don't see that as particularly fugly. it can doubtless be improved, but it's not as bad as you're making out.
dr|z3d
and there are two distinct classes of fugly. fugly that the user sees, and fugly that the user doesn't. I'm allergic to user-facing fugly :)
zzz
I'm adding handlers to the <audio> events
dr|z3d
whatever works, as long as it works :)
zzz
on the details page
dr|z3d
sure, only real place for them :)
dr|z3d
personally I'd leverage the playlist, but it's your call.
zzz
the m3u includes subdirs
zzz
with your way there's no player visible, right?
dr|z3d
That could probably be provisioned.
zzz
thats why it's ui-fugly. there's no ui at all
dr|z3d
oh
dr|z3d
I thought you were referring to the code itself.
dr|z3d
so you want an inline audio player, or just an indication of what track's playing?
zzz
I want to control all the players that are already there
dr|z3d
ok, so each player in turn indicates when it's playing etc?
zzz
yup
dr|z3d
wouldn't hurt to additionally indicate in the table header the name of the currently playing track.
dr|z3d
and what about sub-dirs? how are you going to manage those?
dr|z3d
that's where you fall down, unless you're going to have the script jumping into snark's sub-dirs, and that truly is eww++
zzz
this would be for current dir only. your way would work better for subdirs
dr|z3d
something like this as a compromise:
dr|z3d
<div id="current-track">Now Playing: </div>
dr|z3d
<button id="playBtn">Play</button>
dr|z3d
<button id="pauseBtn">Pause</button>
dr|z3d
<button id="nextBtn">Next Track</button>
dr|z3d
<script>
dr|z3d
fetch('playlist.m3u')
dr|z3d
.then(response => response.text())
dr|z3d
.then(data => {
dr|z3d
const audioUrls = data.split('\n').filter(line => line.trim().length > 0 && !line.startsWith('#'));
dr|z3d
let currentAudioIndex = 0;
dr|z3d
const audioPlayer = document.getElementById('audio-player');
dr|z3d
const currentTrack = document.getElementById('current-track');
dr|z3d
const playBtn = document.getElementById('playBtn');
dr|z3d
const pauseBtn = document.getElementById('pauseBtn');
dr|z3d
const nextBtn = document.getElementById('nextBtn');
dr|z3d
function playNextAudio() {
dr|z3d
if (currentAudioIndex < audioUrls.length) {
dr|z3d
audioPlayer.src = audioUrls[currentAudioIndex];
dr|z3d
audioPlayer.play();
dr|z3d
currentTrack.innerText = `Now Playing: ${audioUrls[currentAudioIndex]}`;
dr|z3d
currentAudioIndex++;
dr|z3d
} else {
dr|z3d
alert('Playlist finished!');
dr|z3d
}
dr|z3d
}
dr|z3d
audioPlayer.addEventListener('ended', playNextAudio);
dr|z3d
playNextAudio();
dr|z3d
playBtn.addEventListener('click', () => {
dr|z3d
audioPlayer.play();
dr|z3d
});
dr|z3d
pauseBtn.addEventListener('click', () => {
dr|z3d
audioPlayer.pause();
dr|z3d
});
dr|z3d
nextBtn.addEventListener('click', () => {
dr|z3d
playNextAudio();
dr|z3d
});
dr|z3d
})
dr|z3d
.catch(error => {
dr|z3d
console.error('Error fetching playlist:', error);
dr|z3d
});
dr|z3d
</script>
zzz
wtf is chatgpt writing your code now
zzz
the hybrid approach is messy
dr|z3d
any approach is less than perfect. assuming the playlist is generated for all tracks, no just the tracks in the current dir, it may be a better approach. if each folder has its own playlist, then it doesn't much matter.
dr|z3d
personally I'd prefer to see an in-browser playlist player contained in a div, with a single place to display the currently playing track, but each to their own.
zzz
go for it, looks like chatgpt already wrote it for you ))
dr|z3d
not on my list of priorities. happy with the playlist -> external player function :)
dr|z3d
here's a thought though.. if accessing the tunes via the console is causing 401's when you have a password set, why not set the playlist to reference the files on the filesystem instead? should bypass any password issues.
dr|z3d
check for console password, if set, swapout hrefs for file:// refs?
zzz
different box
dr|z3d
smb refs?
dr|z3d
or maybe they *need* to be played in the browser. ok.
dr|z3d
you could always generate the playlist with the password encoded into the urls.
zzz
thought of that but that whole thing is deprecated and who knows which players would support it
zzz
i have my events hung off the DOM, now just a debugging exercise
dr|z3d
event delegation.. as close a parent to the target as you can get ensuring that the parent isn't subject to ajax refresh or whatever.
dr|z3d
if you're attaching multiple event handlers to an element, it can help to attach them to different elements to aid debugging.
dr|z3d
but you know all that.
zzz
there's no ajax on details page
dr|z3d
not in canon, anyways.
dr|z3d
we never did get around to adding priority download preference for sub-dirs in snark, or a download percentage indicator. dunno if that's worth thinking about?
zzz
imho any work on subdirs is a near-waste, they aren't common
dr|z3d
they're common enough for things like collections, complete works, that sort of thing.
zzz
sure, but below my threshold to put more work into
dr|z3d
ok
zzz
52 typos later, got it working more or less
zzz
52 typos later, got it working more or less
dr|z3d
52!!!
zzz
and *poof* the china botnet shut down about 6 hours ago
snex
i was hoping we could get some new podcast listeners :(