Help Bites



  • VDSL2's highest frequency seems to be 12 MHz:

    Cat3 cable attenuation at 10 MHz is apparently 9.7 dB/100 meters:

    So even with an unrealistically pessimistic calculation, the loss over 10 meters of cable shouldn't be over 1 dB or so. Your cursed cable is at least one order of magnitude over that.


  • Notification Spam Recipient

    @Zerosquare said in Help Bites:

    Your cursed cable

    Is probably wire-twisted to hell at least four times and split to as many walls.

    Better question is, if there's a way to determine where those points are and be able to cut them out of the nest...



  • Does anyone know of a simple JS/CSS/whatever trick to be able to scroll a Twitter account without being regularly stuck by the login prompt?

    It only appears after you've scrolled for a bit (to hook you in, I assume), and if you reload the page and scroll very fast (e.g. with page down), if you skip beyond the post that triggers it you can continue scrolling (until the next login prompt, but it's quite far away).

    All that makes me think that it's probably some JS fuckery and that it's probably possible to kill it without too much effort, but since I know nothing about webpages and JS (and would like to keep it that way, thank you very much, my current crazyness is enough), I have no clue.

    (my usual one-stop solution to paywalls is to turn off JS, but this doesn't work on Twitter)

    (also, no, I don't want to use nitter or similar because 1) they suck almost as much as Twitter itself and 2) most of the times I end up on Twitter through some random link and changing the URL is too much work)

    (also also, the first one who suggests I surrender and log in to Twitter gets -42 internet pointzzz)


  • I survived the hour long Uno hand

    @remi
    My recollection is that I don't get the stuck prompt on desktop with uBlock, but I do get it on my iPhone with AdGuard. :mlp_shrug:


  • Considered Harmful

    @remi On desktop Foxes or Chromes this mostly works for me: https://github.com/thiscoldhouse/bypass-twitter-softwall-extension.



  • @Applied-Mediocrity Thanks! I'm on Opera which is just some sort of Chrome.

    Except... it doesn't work 😿 Extension loaded, browser restarted (just in case... "when in doubt, reboot")... and I still get the login prompts.

    I'll try and have a look at the extension itself, it seems tiny enough that I might be able to muddle through.

    @izzion I have uBlock Origin (+ the Opera built-in add blocker), but clearly that's not enough for me.



  • From the console I can see that the script gets correctly loaded, but it seems the event listener is never triggered. No idea why.

    This is the relevant code (I think):

    // platform agnostic shenanigans
    if (typeof browser === "undefined") {
        var browser = chrome;
    }
    
    function bypassSoftPaywall(){
        // ... stuff ...
    }
    
    browser.runtime.onMessage.addListener(function(request){
      bypassSoftPaywall();
      return Promise.resolve({'success': true})
    });
    

    The first part seems to be to handle both firefox/chrome in the same code (according to e.g. this), which makes sense.

    A break point inside the last part (on the call to bypassSoftPaywall();) never gets triggered (while other break points are, so it's not that I can't even set a break point properly, or that the whole thing is never called). Nothing else I can see on the github page. Well, I'm lost. :mlp_shrug:

    ETA: seems that there is also a "background" script that, uh, maybe sends the event, I don't know? and maybe it's not properly loaded? Something about manifest being V2 instead of V3? But really, I'm just the monkey randomly bashing on the typewriter here.


  • Considered Harmful

    @remi Uh, damnit. Doesn't say on gitbub itself anywhere, but It doesn't work work automacatilly. It's supposed to add a button to the toolbar that you press every time Twitter bothers you with the popup. Not too elegant, but better than nothing.
    Now, if that button never shows up anywhere... 🤷



  • @Applied-Mediocrity I hadn't even understood that... but yeah, there isn't any button anywhere.

    I suspect that this is because Opera actually uses slightly different extensions, and in particular a special one that then contains all Chrome extensions. That extension has a button, but I don't know what happens to buttons created by other Chrome extensions. Clearly they're not added to the main Opera toolbar, and possibly they're not added anywhere.

    Mmm... I'm guessing the reason the extension uses a button is that it's too costly to run the check at every random event, but maybe triggering it automatically every few seconds wouldn't be so bad? (AFAICS it only runs on twitter.com so it shouldn't be an issue)

    If I wanted to do that (and if that makes sense...), can someone give me the codez plz?



  • Though the button doesn't show on a "true" Chrome, so I'm guessing there is something else that's not working here...



  • @remi said in Help Bites:

    Twitter account without being regularly stuck by the login prompt

    Simple. Edit your hosts file, and set twitter.com to 192.168.0.1.
    Done.
    Enjoy a life free from twitter annoynaces.



  • @BernieTheBernie ha ha ha very funny the unhelpful help thread is arrows please no trolling in help threads kthxbye



  • @remi said in Help Bites:

    (also, no, I don't want to use nitter or similar because 1) they suck almost as much as Twitter itself and 2) most of the times I end up on Twitter through some random link and changing the URL is too much work)

    It's the right solution, though. Just get an auto redirect extension for your browser and let it do the needful for you



  • @hungrier yeah, it's "the right solution" except when it times out or takes minutes to load a tweet for no reason (probably the instance is saturated or whatever), or when my company proxy blocks an instance (yeah, I know, that one isn't really anyone's else than my company's fault, but still, the end result is that it doesn't work).

    So no, it's not "the right solution" for me. Maybe if it ever becomes truly as seamless and efficient as the Real Thing, but not yet. And I don't care enough about Twitter and its clones to want to make the effort of living on the bleeding edge.

    I just want to see the funny cat pictures!

    (currently hitting the login wall is usually my signal to stop procrastinating and get back to workreadingshitposting on TDWTF, so maybe actually it's a good thing that I can't remove it easily... 🤔)


  • BINNED

    @remi I have two bookmarklets that are supposed to remove garbage like this, generically on every site. Two, because sometimes either one or the other doesn't work, and I have "plz send teh codez" understanding of what they actually do. (Supposedly one makes the text scrollable, like it's supposed to be, and the other does that plus removes overlay dreck.)

    "Kill Sticky":

    javascript:(function()%7Bdocument.querySelectorAll(%22body%20*%22).forEach(function(node)%7Bif(%5B%22fixed%22%2C%22sticky%22%5D.includes(getComputedStyle(node).position))%7Bnode.parentNode.removeChild(node)%7D%7D)%3Bdocument.querySelectorAll(%22html%20*%22).forEach(function(node)%7Bvar%20s%3DgetComputedStyle(node)%3Bif(%22hidden%22%3D%3D%3Ds%5B%22overflow%22%5D)%7Bnode.style%5B%22overflow%22%5D%3D%22visible%22%7Dif(%22hidden%22%3D%3D%3Ds%5B%22overflow-x%22%5D)%7Bnode.style%5B%22overflow-x%22%5D%3D%22visible%22%7Dif(%22hidden%22%3D%3D%3Ds%5B%22overflow-y%22%5D)%7Bnode.style%5B%22overflow-y%22%5D%3D%22visible%22%7D%7D)%3Bvar%20htmlNode%3Ddocument.querySelector(%22html%22)%3BhtmlNode.style%5B%22overflow%22%5D%3D%22visible%22%3BhtmlNode.style%5B%22overflow-x%22%5D%3D%22visible%22%3BhtmlNode.style%5B%22overflow-y%22%5D%3D%22visible%22%7D)()%3B%0A
    

    "Scrollable":

    javascript:var r="html,body{overflow:auto !important;}"; var s=document.createElement("style"); s.type="text/css"; s.appendChild(document.createTextNode(r)); document.body.appendChild(s); void 0;
    

    Anyways, I think the "Kill Sticky" one works on twitter.

    However, sometimes after that twitter complains "I haz the dumb and couldn't do that, it's not a you-problem" when e.g. clicking an image or thread. Not sure if that's a general twitter problem, an adblock problem, or related to the script above.


  • Considered Harmful

    @BernieTheBernie said in Help Bites:

    @remi said in Help Bites:

    Twitter account without being regularly stuck by the login prompt

    Simple. Edit your hosts file, and set twitter.com to 192.168.0.1.
    Done.
    Enjoy a life free from twitter annoynaces.

    Can confirm. 172.16.0.01 also provides this dark-web service.



  • @topspin said in Help Bites:

    Anyways, I think the "Kill Sticky" one works on twitter.

    It seems so. Thanks, that's a good one (and useful for more than just Twitter, so even better).

    The only drawback (for me) is that I usually don't have the bookmarks visible. But I'll look around and see if I can find an easy way to trigger them with a (custom) keyboard shortcut, that would fix it for me.

    (though the ideal solution would be something that I don't even have to trigger manually, like the no-JS that works on some sites, but the bookmarklet works, so that's good-enough)



  • Amusingly (but not unexpectedly, since this is what it does...), triggering the "kill sticky" on TD:wtf: removes the navigation bar at the top... I guess I'll have to be careful not to be too trigger-happy!


  • BINNED

    @remi said in Help Bites:

    The only drawback (for me) is that I usually don't have the bookmarks visible.

    I have the bookmarks toolbar disabled (well, set to "only on new tab page"), but can reach it from the bookmarks menu.



  • @topspin meh, for me that would be a bit more inconvenient as it's more clicks (i.e. navigating in menus, which also means more mouse accuracy, Fitt's law and all that). I guess I could learn the keyboard shortcuts to navigate there but it's probably a bit more cumbersome than just clicking (since when I hit a paywall I'm usually scrolling, so hand on mouse already).

    Seems like you can't assign shortcuts to individual bookmarks in Opera, which is a shame, and also I can't find a way to rearrange UI elements to put the bookmarks bar on the same line as the address bar (since I didn't use the bookmarks bar before, I only have those two bookmarklets so if I give them tiny names they wouldn't be much bigger than a button and thus would fit on the address bar). I'll live with that.

    (now that I have the bookmarks bar visible and thus a full screen width to use, I guess I could add more useful bookmarklets, I guess this means "suggestions welcome?")



  • I'm way late, but you can temporarily bypass the Twitter prompt by just clicking on the login button, then closing the login dialog. If you scroll down enough, it triggers again, at which point you can repeat the process. Not ideal, but it's a :kneeling_warthog:-friendly solution since you don't have to install anything.


  • Notification Spam Recipient

    @remi said in Help Bites:

    The only drawback (for me) is that I usually don't have the bookmarks visible. But I'll look around and see if I can find an easy way to trigger them with a (custom) keyboard shortcut, that would fix it for me.

    I've been able to trigger bookmarklet items from the address bar. It's pretty nifty to just search "enable paste" and it (usually) just works.



  • @Zerosquare said in Help Bites:

    I'm way late, but you can temporarily bypass the Twitter prompt by just clicking on the login button, then closing the login dialog. If you scroll down enough, it triggers again, at which point you can repeat the process. Not ideal, but it's a :kneeling_warthog:-friendly solution since you don't have to install anything.

    Oh, that's interesting. I'll give it a try next time I need it. Thanks.

    @Tsaukpaetra said in Help Bites:

    I've been able to trigger bookmarklet items from the address bar. It's pretty nifty to just search "enable paste" and it (usually) just works.

    How do you do that exactly? Do you have to associate your bookmarklet to some specific custom string? In any case, in this specific scenario typing stuff is less convenient than clicking a button, since I'm scrolling Twitter so hand-on-mouse.


  • Notification Spam Recipient

    @remi said in Help Bites:

    How do you do that exactly?

    Click URL bar. Match a bookmark with JavaScript. Choose option.

    Screenshot_20221205-044100_Chrome.png

    Option activates.

    Screenshot_20221205-044124_Chrome.png

    It works similarly on desktop. Obviously if you increase the marklet's popularity it would be less typing (if any).

    Edit: I suppose the Harlem shake bookmarklet is less impressive in still images...



  • @Tsaukpaetra right, thanks. Somehow I didn't see the bookmarklet in the popup list the first time I tried it.

    If I'm being picky, it still feels like more work than clicking because I have to type + navigate (either with mouse or keyboard) to the bookmarklet (even when typing a perfect match there's always "search for foo" at top of the list so I can't skip the "navigate to result" step).

    Still, it fits the bill of "not showing the bookmark bar," so no complaint here.


  • Java Dev

    So I was asked to take a look at my mum's aging, slow windows 10 laptop. Among others, I found three large games, including minecraft, which had been last accessed 3-5 weeks ago. She insists she didn't touch it and that the grandkids don't have access.

    Does anyone know if this could have been installed automatically, or do I have to insist it's the grandkids? I've already suggested she change the password but I do not know if she'll actually do that.



  • @PleegWat said in Help Bites:

    Does anyone know if this could have been installed automatically,

    You can see when it was installed in the "Installed apps" panel.


  • Java Dev

    @dcon Yeah, I did. Like I said, I'm pretty sure it was the grandkids. But my mum insisted "They don't use her computer" or "They don't go in that room".

    I told her to change the password; just have to hope she does.


  • Considered Harmful

    @PleegWat Heaven forfend the kids play an E-rated game.



  • @error said in Help Bites:

    @PleegWat Heaven forfend the kids play an E-rated game.

    But what if it's a renamed Leisure Suit Larry? Gasp! Outrage!



  • @PleegWat What about adding another account for administrative purposes, whose password you keep secret, and changing your mum's user account to just a user?
    That would make her realatively safe from installing malware (apart from Windows Updates :trollface:) without your help.



  • Does anyone here know gRPC / protobuf?

    I'm passing large-ish chunks of data between my own client and server and have implemented streaming because the overall dataset to pass is larger than the max message size (default is 4 MB, I know I could increase that but probably not to the point where it would cover all my use cases, so streaming it is in any case).

    The issue I have is how to find out what size of messages to send in my streaming implementation?

    Searching the interwebz I can find tons of discussions on how to set the maximum message size when starting the server, but this is not what I want. What I want is querying an existing server to find out what is that maximum size. Either my google-fu is weak, or nobody ever discusses that?

    Currently I need this in two places and in one I've hard-coded a 4 MB (minus a small margin for headers etc.) limit. In the other one I've been :airquotes:smarter:airquotes: and implemented a horrible hack where I parse the string from the error message (!!!) to read the maximum size.


  • Notification Spam Recipient

    @PleegWat said in Help Bites:

    large games, including minecraft

    :wat: Since when was that considered "large"?

    I wonder what you'll think of the several-hundred-gigabyte behemoths of today...


  • Notification Spam Recipient

    @remi said in Help Bites:

    how to find out what size of messages to send in my streaming implementation?

    Implement one of the queries to respond with it? You are in control of both server and client parts, right?



  • @Tsaukpaetra I didn't think of that, and actually that could be a solution. A fucked-up solution as this seems like something that I shouldn't have to do myself, but a solution nonetheless. Thanks for the idea!

    Except... I would still need to find a way to get this information! Granted, that's in the server now and not the client, but I still have no idea how to get this.

    Now since I can control the size when I start the server, I could store that information somewhere next to the server and have the code in the server read that information. At that point and since client and server are actually both running on the same machine, I could store that in e.g. a parameters file and read it from the client as well. In any case, that's really not very nice, and besides it wouldn't work unless I specify the size when starting the server (as opposed to what I currently do which is to let the server use the default size), which is one more ugliness.

    So while that's an idea that could work in theory, in practice... meh.

    (ETA: another idea that I initially had was the empirical approach of trying various sizes to find out which one works and which doesn't but while that's slightly less hacky than reading out the size in the error message, it's not very satisfying either)


  • Notification Spam Recipient

    @remi said in Help Bites:

    (ETA: another idea that I initially had was the empirical approach of trying various sizes to find out which one works and which doesn't but while that's slightly less hacky than reading out the size in the error message, it's not very satisfying either)

    See also: how the network stack determines MTU....



  • @Tsaukpaetra hey, this is the Help thread, not a TD:wtf: Code Challenge!

    For what it's worth, I spent a bit of time digging into the source code of grpc and there really doesn't seem to be any way to get this information, even from the server. The relevant variable is max_receive_message_size. It is stored within the Server class and there is a neat accessor max_receive_message_size() which is... private! :facepalm:

    So one more possible hack would be to define my own derived Server object just to get to look at the private parts of its parent (:low-quality-bait:) (in the ServerInterface where this function is first defined, it's protected, so the reimplementation could easily cast its way around the private-ness). But it's obviously ugly.

    Also, there are both a maximum receive and a maximum send size, the latter follows a different path and as far as I can see isn't really used anywhere, apart from being stored in the ChannelArguments. So I'm starting to think that maybe I'm supposed to be querying that (with some generic function that takes the macro name GRPC_ARG_MAX_SEND_MESSAGE_LENGTH?) and hoping that it is the same as the receive size?

    🤔 

    Wait, actually that last parenthesis might be the way to go? Maybe I'm supposed to get the ChannelArguments (not sure how but I haven't looked, this is becoming a stream of consciousness post...) and query them for this or that weird enum string (well, not that weird, they're pretty well documented).

    Hmmm, let me check all that...

    ETA: well, no, it looks like the ChannelArguments are something you pass when creating stuff, not something you can query later. So I can't get this object back and I'm still anywhere nearer to a proper solution.

    Well I've got something that "works" (for, uh, some definition of working...) so :shipit: and let future-me hate on past-me when I'll have to debug that. :party_parrot: :whistling:


  • Notification Spam Recipient

    @remi said in Help Bites:

    this is becoming a stream of consciousness post...

    Duck programming at its best!



  • @remi said in Help Bites:

    So I can't get this object back

    In the best tradition of HTTP. You configure maximum request size in all HTTP servers, and there ain't no way to query them for it either.

    @remi said in Help Bites:

    and I'm still anywhere nearer to a proper solution.

    I'm thinking that the proper solution is to simply specify the size as part of your protocol (i.e. your protocol only works with the default size) and call it a fortnight. Because I don't think there is actually a good reason to tweak that parameter, is there?



  • @Bulb said in Help Bites:

    In the best tradition of HTTP. You configure maximum request size in all HTTP servers, and there ain't no way to query them for it either.

    That sounds... well I don't know, I've never really worked with network so for once I'm going to withhold judgement and not just :wharrgarbl: about how dumb that is, but... yeah, not what I was intuitively expecting.

    But this still helps me: knowing that this is how HTTP servers work means I understand why grpc would behave in the same way, and that it might truly be something that doesn't exist rather than me looking in the wrong place.

    I'm thinking that the proper solution is to simply specify the size as part of your protocol (i.e. your protocol only works with the default size) and call it a fortnight. Because I don't think there is actually a good reason to tweak that parameter, is there?

    You're right, there is no good reason to tweak it. I could very well hard-code to whatever I want (either in both client and server, or in some sort of shared config if I want to be fancy) and indeed call it a day.

    But this initially didn't appeal to me because I have no idea which value to use, so since the protocol has a default, I thought it was best (easier...) to just let the protocol pick whatever it wants (on the, probably hugely over-optimistic, assumption that this default was wisely picked -- or even, one can dream, that it could be auto-tuned to... whatever matters for it!) and then just ask it to tell me what it chose. But since that route is pretty well closed to me, I guess I'll either leave my horrible hacks or hard-code the size (depending on how strong the :kneeling_warthog: is today!).

    @Tsaukpaetra said in Help Bites:

    Duck programming at its best!

    Yeah, I guess so. Thanks to all you little ducklings then! 😉



  • @remi said in Help Bites:

    But this still helps me: knowing that this is how HTTP servers work means I understand why grpc would behave in the same way, and that it might truly be something that doesn't exist rather than me looking in the wrong place.

    For HTTP—I don't really know gRPC—there is no limit at the protocol specification level, though there is a standard error code for exceeding it. But any practical server does need such limit to avoid wasting all resources on a broken or malicious request. So the idea is that you simply configure it to something that is large enough for your use-case.

    And configure it I usually have to, because the nginx proxy default is something like 100 kB, which is enough for some forms, but obviously not for an API server that needs to receive some non-trivial data.


Log in to reply