• 3 Posts
  • 10 Comments
Joined 7 months ago
cake
Cake day: April 20th, 2024

help-circle
  • We have to vote for the people who will admit to that and get rid of them. The U.S. is going to have to choose between a leader who tries to install good people to run the government and one who intends to install people bent on dismantling the government and giving loyalty to the leader alone.

    I largely share your thoughts. I honestly expected Biden to at least be prepared enough to counter the usual Trump tactics of making things up and using strong words to impress his base while deflecting blame or critical questions.

    Instead, we got Trump basically having free rein to appear strong with simple (and wrong) answers to complex questions, twisting the truth to support his positions and straight up lying and deflecting when finally confronted with something.

    I’m not a big fan of Biden, but IMO he’s the obvious, rational choice out of two candidates way past their prime - if you’re into rationality over the antics of a con artist.

    But this isn’t a fair fight, and Biden isn’t the showman Trump managed to be today. Biden was barely audible and mostly on the defensive while appearing weak, Trump was the opposite of that. I can’t imagine any Trump voter switching teams after the debate, but I can image more than a few more emotionally motivated democrats second guessing their choice.


  • Sure, the code is completely client-side, simply clone it. If you’re running into CORS problems due to the file:// scheme Origin of opening a local file, simply host it as a local temporary server with something like python -m http.server .

    This is due to the two ways most instances validate Cross-Origin requests:


    • Sending Access-Control-Allow-Origin: * (allow all hosts)
    • Dynamically putting your Origin into the Origin header of the response to your requests by the backend

    file:// URLs will result in a null or file:// Origin which can’t be authorized via the second option, therefore the need to sometimes host the application via (local) webserver.



  • The whole point of this being a web app is to make it as easy as possible for the user to download/modify/transfer their user data. LASIM is a traditional app the user has to download and install, similar to a script this web app was developed to replace due to being too difficult to use for some users.

    The import functionality targeted by this API is additive and my app features a built-in editor to add, modify or remove information as the user sees fit. To achieve your stated goal, you’d have to remove anything except the blocked_users entries before importing, which my app supports, I added a wiki entry explaining the workflow in more Detail.

    I may add options to modify the exported data in some ways via a simple checkbox in the future, but I wouldn’t count on it. I’m always open for pull requests!



  • The export/import functionality is, yes. This implementation uses the same API endpoints, but the main reason for this existing:

    An instance I was on slowly died, starting with the frontend (default web UI). At least at the time, no client implemented the export/import functionality, so I wrote a simple script in Bash to download the user data, if the backend still works. Running a script can still be a challenge to some users, so I wrote a web application with the same functionality. It’s a bit redundant if we’re talking about regularly working instances, but can be of use if the frontend isn’t available for some reason.




  • An dieser Stelle reposte ich nochmal zwei einfache Wege, um seinen User (Settings und abonnierte/geblockte Communities) von einer Lemmy Instanz auf eine andere umzuziehen, beispielsweise von feddit.de auf feddit.org, von meinem ursprünglichen Post unter feddit.de/c/main ( https://alexandrite.app/feddit.de/post/11325409)


    Weg 1, falls man noch einen Browser mit aktiver Session auf feddit.de hat:

    Lemmy bietet seit Version 0.19 eine Funktion an, um die user data zu ex- und importieren. Das geht normalerweise über einen Button in den Settings des Webinterfaces, das geht aktuell bei feddit.de nicht.

    Aber der zugrundeliegende API-Aufruf funktioniert noch, solange man noch mit einem Browser auf feddit.de eingeloggt ist:

    1. Man gehe auf https://feddit.de/api/v3/user/export_settings und speichert die zurückgegebene Datei als irgendwas.json
    2. Man nehme einen (neuen) Account auf einer stabilen Instanz der Wahl, gehe auf /settings und lade irgendwas.json über den Import-Button hoch.
    3. Voilà, man genieße die neue Instanz.

    Das funktioniert mit jeder Instanz >=0.19, man muss lediglich das “feddit.de” in der URL ersetzen. Und wenn das Webinterface funktioniert, geht das auch über den Export- Button in den Settings.


    Weg 2:

    Für die Leute, die keine offene Browser Session haben, hier ein kleines, aber funktionales Bash Script, welches im Ausführungsverzeichnis eine myFedditUserData.json erstellt, welche bei anderen Instanzen importiert werden kann.

    Anforderungen:

    • Linux/Mac OS X /Windows mit WSL
    • jq installiert (Unter Ubuntu/Debian/Mint z.B. per sudo apt install -y jq

    Anleitung:

    • Folgendes Script unter einem beliebigen Namen mit .sh Endung abspeichern, z.B. getMyFedditUserData.sh
    • Script in beliebigen Textprogramm öffnen, Username/Mail und Passwort ausfüllen (optional Instanz ändern)
    • Terminal im Ordner des Scripts öffnen und chmod +x getMyFedditUserData.sh ausführen (Namen eventuell anpassen)
    • ./getMyFedditUserData.sh im Terminal eingeben
    • Nun liegt im Ordner neben dem Script eine frische myFedditUserData.json

    Anmerkung: Das Script ist recht simpel, es wird ein JWT Bearer Token angefragt und als Header bei dem GET Aufruf von https://feddit.de/api/v3/user/export_settings mitgegeben. Wer kein Linux/Mac OS X zur Verfügung hat, kann den Ablauf mit anderen Mitteln nachstellen.

    Das Script:

    #!/bin/bash
    
    # Basic login script for Lemmy API
    
    # CHANGE THESE VALUES
    my_instance="https://feddit.de"			# e.g. https://feddit.nl
    my_username=""			# e.g. freamon
    my_password=""			# e.g. hunter2
    
    ########################################################
    
    # Lemmy API version
    API="api/v3"
    
    ########################################################
    
    # Turn off history substitution (avoid errors with ! usage)
    set +H
    
    ########################################################
    
    # Login
    login() {
    	end_point="user/login"
    	json_data="{\"username_or_email\":\"$my_username\",\"password\":\"$my_password\"}"
    
    	url="$my_instance/$API/$end_point"
    
    	curl -H "Content-Type: application/json" -d "$json_data" "$url"
    }
    
    # Get userdata as JSON
    getUserData() {
    	end_point="user/export_settings"
    
    	url="$my_instance/$API/$end_point"
    
    	curl -H "Authorization: Bearer ${JWT}" "$url"
    }
    
    JWT=$(login | jq -r '.jwt')
    
    printf 'JWT Token: %s\n' "$JWT"
    
    getUserData | jq > myFedditUserData.json
    

    @elvith@feddit.org hat mein Script auch in PowerShell nachgebaut, welches unter Windows ohne WSL auskommt: https://gist.github.com/elvith-de/89107061661e001df659d7a7d413092b

    # CHANGE THESE VALUES
    $my_instance="https://feddit.de" # e.g. https://feddit.nl
    $target_file = "C:\Temp\export.json"
    
    ########################################################
    #Ask user for username and password
    $credentials = Get-Credential -Message "Logindata for $my_instance" -Title "Login"
    
    $my_username= $credentials.UserName
    $my_password= $credentials.GetNetworkCredential().Password
    
    # Lemmy API version
    $API="api/v3"
    
    # Login
    function Get-AuthToken() {
        $end_point="user/login"
        $json_data= @{
            "username_or_email" = $my_username;
            "password" = $my_password
        } | ConvertTo-Json
    
        $url="$my_instance/$API/$end_point"
    
        (Invoke-RestMethod -Headers @{"Content-Type" = "application/json"} -Body $json_data -Method Post -Uri $url).JWT
    }
    
    # Get userdata as JSON
    function Get-UserData() {
        $end_point="user/export_settings"
    
        $url="$my_instance/$API/$end_point"
    
        Invoke-RestMethod -Headers @{"Authorization"="Bearer $($JWT)"} -Method Get -Uri $url
    }
    
    $JWT= Get-AuthToken
    
    Write-Host "Got JWT Token: $JWT"
    
    Write-Host "Exporting data to $target_file"
    Get-UserData | ConvertTo-Json | Out-File -FilePath $target_file
    

  • Great synopsis!

    The cool thing about GrapheneOS: It provides basically all the comforts and usability as any Android (stock) ROM minus some compatibility issues with a portion of Google Apps and services (Google Pay doesn’t and probably will never work, for example) while providing state-of-the-art security and privacy if you choose to utilize those features. A modern Pixel with up-to-date GrapheneOS, configured the right way, is literally the most secure and private smartphone you can get today.


  • Eh. Dadurch, dass es bei der Europawahl keine 5% Hürde wie auf nationaler Ebene gibt, haben viele, meiner Meinung nach völlig zurecht, Parteien gewählt, die ihren persönlichen Ansichten besser entsprechen als die etablierten Parteien. So wurde z.B., zumindest in meinem Bekanntenkreis, sehr oft Volt anstatt Grün gewählt. Bei Wahlen auf Bundesebene dürften dann die meisten halbwegs vernünftigen Wähler wieder Parteien unterstützen, die eine reelle Chance haben, >=5% zu bekommen, um mit ihrer “verschwendeten” Stimme keinen Extremismus zu unterstützen. Und dass die Linke mit ihrem aktuellen Parteiprogramm von den Wählern abgestraft wird, wundert mich nicht. Gegen Waffenlieferungen an die Ukraine zu sein und der NATO eine Mitschuld zu geben, polarisiert in den aktuellen internationalen Gegebenheiten sehr. Das Fiasko mit Wagenknecht hat natürlich auch einen großen Anteil.



  • er relativiert und vergleicht Dinge, die nicht verglichen gehören

    In der Theorie und rein moralisch betrachtet sind das unterschiedliche Dinge, das ist richtig. In der Praxis sieht es aber, zumindest meiner Meinung nach, anders aus:

    Einem Großteil der Bevölkerung geht es seit Jahren zunehmend schlechter. Das hat viele Faktoren: Wirtschaft, Pandemie, Krieg(e). Das Ungerechtigkeitsgefühl ist groß, die Politikverdrossenheit meist noch gößer. Das Volk fühlt sich weder repräsentiert noch ernst genommen.

    Vor diesem Hintergrund des Dauerstresses kommt es nun seit Jahren immer wieder zu solchen Meldungen: Messerstecherei hier, Gruppenvergewaltigung da, Kalifatherbeirufung en masse dort. Ein signifikanter Teil erlebt diese Nachrichten und fragt sich, nicht ganz zu Unrecht, wie das weitergehen soll und fühlt sich persönlich bedroht. Überspitzt stellvertretend ausgedrückt: “Wir lassen die seit vielen Jahren in unser Land, finanzieren ihnen mit unseren Steuern das Leben und im Gegenzug müssen wir solche Untaten tolerieren und in Angst leben? Wo bleiben denn die Ärzte und Ingenieure, wir kriegen doch höchstens Raketenwissenschafter aus Palästina. Wir müssen was tun, bevor es zu spät ist!”

    Da ist es vielen auch eher egal, dass es so viele Erfolgsgeschichten zur Integration gibt. Es ist egal, dass genau diese Feindseligkeit gegen eine ganze Bevölkerungsgruppe das Ziel vieler solcher Attacken ist. Es ist egal, dass viele Moslems diese Taten ebenso als abscheulich empfinden. Die Politik soll endlich hart durchgreifen, ihr Volk schützen und eine harte Linie fallen. Genug ist genug!

    Dabei wird natürlich ignoriert, dass es keine einfache Antwort gibt. Wir sind schließlich keine Diktatur, sondern eine Demokratie mit mehr oder weniger funktionalem Rechtssystem. Deportationen sind teilweise schwierig bis quasi unmöglich, Aktion statt Reaktion oft nicht Teil unseres Systems.

    Ich kann sehr gut nachvollziehen, dass viele Leute willentlich oder, weil sie es nicht besser wissen, die Vergleiche ziehen und sich bedroht fühlen. Die extremen Parteien bieten einfache Antworten auf kritische Fragen, die sonst kaum eine Partei offen ansprechen will. Ob diese Antworten auch nur annähernd realistisch sind und ob sonstige Positionen der eigenen entsprechen, wird oft unwichtig.