• 0 Posts
  • 47 Comments
Joined 2 years ago
cake
Cake day: June 22nd, 2023

help-circle



  • No meu caso em específico, com bootloader desbloqueado + LineageOS + magisk (para root) + patches pra corrigir o Play Integrity:

    BB, Mercado Pago e Nubank: nenhum problema.

    Inter: No passado, na hora de logar aparecia uma mensagem informando que a rom não era a original e que no futuro eles poderiam barrar o acesso. Ultimamente está abrindo normal sem aparecer a mensagem.

    Digio: Depois de uma atualização parou de funcionar e apresentava um código de erro na hora de logar na conta. Só consegui cancelar a minha conta lá pra evitar as cobranças logando em outro aparelho.


  • thes0lstoSoftware LivreLeitor de Comic para Android
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    5 months ago

    Estranho, porque testei aqui e o koreader rodou normal os cbz que eu tenho. Dentro do arquivo é tudo .jpg mesmo ou algum formato diferente?

    Outra alternativa de app seria o Mihon. O principal foco dele é usar com extensões que fazem ele abrir os sites de leitura online, mas ele oferece opção de leitura de arquivos locais também.

    EDIT: Ah, vi agora que você já tinha comentado sobre o mihon antes.




  • thes0lstoBate-PapoFake ?
    link
    fedilink
    Português
    arrow-up
    4
    ·
    7 months ago

    Fora que o arquivo sendo rodado tem aparentemente 14,9KB de tamanho.

    De qualquer forma, eu também barraria o acesso ao arquivo porque ninguém merece um arquivo .avi em pleno 2024 🙈


  • thes0lstoSoftware LivreSaindo de iOS para Android
    link
    fedilink
    arrow-up
    2
    ·
    7 months ago

    Dependendo pode ser interessante dar uma olhada no Tubular, que é um fork do NewPipe que implementa o SponsorBlock, que permite pular os trechos de publicidade/patrocínio dos vídeos usando banco de dados crowdsource. Também dá pra marcar os trechos e fazer os envios para o banco de dados pelo próprio app, assim a próxima pessoa que for assistir já será beneficiada.

    Antigamente o app era chamado “NewPipeSponsorBlock”, mas aparentemente o pessoal do NewPipe não gostou por criar confusão com os nomes.



  • Apesar do lance de ciclos, pelo que eu entendi, o desgaste dos ciclos quando a bateria está perto de cheia é bem maior que quando a bateria está abaixo dos 80%, por exemplo.

    Celular mesmo eu tenho sempre tentado seguir a regra dos 20-80. Colocar pra carregar quando estiver perto dos 20% e tirar da tomada assim que chegar perto dos 80%.

    Não sei quão realista são os dados desse accubattery, mas uma recarga de 89~100% deu um desgaste de 0.61 ciclos, enquanto uma recarga de 33~80%, o desgaste teria sido só de 0.17 ciclos.

    img


  • No meu caso, o que eu tenho feito é descobrir qual é o path que a câmera usa pro onvif e com isso consigo o acesso à stream diretamente pela rede local.

    No Windows, tenho usado o ONVIF Device Manager pra tentar descobrir qual o endereço do onvif delas.


    img Por exemplo, uma desta aqui sem marca do aliexpress (app Hopeway), a stream fica em rtsp://192.168.0.XXX/[HASHDE32CARACTERES]*0, porém só consegui fazer pegar a câmera móvel. As duas fixas do topo não consegui acessar localmente.


    img Já esta também do aliexpress(app tuya/smartlife) a stream fica em rtsp://192.168.0.XXX/streamtype=0 e as duas lentes ficam no mesmo vídeo, um em cima do outro (1920x2160).


    img

    Uma mais antiga que comprei no br, LKW1320lite, app yoosee, a stream fica em rtsp://192.168.0.XXX/onvif1.


    Geralmente trocando o número identificador você acessa outras resoluções da câmera, exemplo 0 = 1080p, 1 = 480p.


    EDIT:

    Só pra comentar, essa câmera de 3 lentes usa h264 e funciona meiaboca num raspberry pi 1 antigão + rpisurv. A parte perto do fundo do vídeo fica com defeitos, acho que o aparelho não consegue terminar de decodificar, mas a imagem é bem melhor que a câmera analógica+dvr que usava antes. Já no raspberry 4 + rpisurv, eu nem consegui fazer tocar. No windows ele roda bem com o ffplay, mas num vlc/mpv ele dava uns problemas.


    Já a camera de duas lentes eu testei por pouco tempo (era emprestada), mas era h265 e não funciona no rpi1+rpisurv. Já no rpi4 funcionou redondo. Usei pouco no Windows, mas o vlc e mpv parece que rodam de boas.


    O LKW eu acho que era h264 também e funcionou em tudo que testei.

    Já NVR eu não tenho nenhum pra saber como elas funcionam.


  • thes0lstoPrivacidadeMatrix ou Xmpp??
    link
    fedilink
    arrow-up
    3
    ·
    8 months ago

    No meu caso foi reaproveitando PC velho mesmo, inclusive era tudo com os gabinetes grandões todo sucateado.

    Mas dependendo da verba, até um raspberry pi pode ser interessante pra começar a mexer.

    O legal do raspberry é que basta você trocar um cartão SD que você consegue ter um sistema operacional diferente. Então quando quiser brincar como servidor, coloca um cartão SD com um ubuntu server da vida e nem precisa ligar num monitor.

    E se gostar de jogar joguinhos antigos, bota um SD com batocera ou coisa do tipo e liga numa tela via HDMI pra jogar uns Super Nintendo ou assistir coisas pelo Kodi.


    Alias como faz os backup nos hdd no home server para se um ir de arrasta pra cima n perde as coisas

    Acho que raid seja uma alternativa?

    No meu caso, raid “desperdiçaria” muito hdd, então eu vou na fé e só programo as coisas mais importantes pra rodar uns backups periodicamente e salvar numa pasta que tá sincronizada via syncthing com o meu desktop.


  • thes0lstoSoftware LivreComo verificar contas do mastodon ?
    link
    fedilink
    arrow-up
    5
    ·
    edit-2
    8 months ago

    Na verdade, a única parte que fica “verificada” é o link do site presente na bio do mastodon.

    Então no seu site pessoal (https://fulanodetal.com.zz), você precisa adicionar um link apontando pro seu mastodon, com a tag rel="me" (<a href="https://algumainstanciadomastodon.com.zz/@fulanodetal" rel="me">Meu Mastodon</a>) e depois no seu perfil do mastodon você adiciona o link do seu site(https://fulanodetal.com.zz) e automagicamente o link era pra aparecer verdinho na sua bio.


    Mas acho que isso só vai afetar o link na bio/perfil do mastodon, pelo que eu saiba, pra ficar como SeuUsuário@fulanodetal.com.zz seria necessário que você hospedasse uma instância própria no seu site.


  • thes0lstoPrivacidadeMatrix ou Xmpp??
    link
    fedilink
    Português
    arrow-up
    3
    ·
    8 months ago

    Olha, eu mantenho um servidor local rodando direto acho que faz uns 20 anos já.

    Este é o primeiro mais potente que eu uso, o resto era tudo de PC baixo custo velho que a placa-mãe vinha até com processador já embutido. Muito provavelmente eram mais fracos que um raspberry pi 3 da vida.

    Mesmo sendo fraquinhos, dava pra hospedar legal as coisas localmente. Só quando precisava compilar algo que tinha que ter uma paciência enorme.

    Então, se a ideia é tentar brincar de selfhost, acho que dá pra começar com qualquer equipamento, seja um PC/notebook velho ou um raspberry da vida.

    A propósito, vendo as mensagens antigas, o Synapse aqui normalizou depois de uns 2 dias e não voltou mais a comer processamento fora do normal.


  • thes0lstoPrivacidadeMatrix ou Xmpp??
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    9 months ago

    Abri aqui o link da ursal.zone e vários comentários do mastodon não apareceram aqui no lemmy, então vamos ver se pelo menos a resposta chega.

    @fbobraga@mastodon.social

    esse esquema de mirror do Telegram/WhatsApp é bem legal: nem parece coisa aberta, parece ter algum contrato entre desenvolvedores do matrix e provedores dos serviços fechados pra possibilitar isso!

    A bridge que eu uso não feita pelo próprio matrix, mas sim do maunium, que imagino que foi feito caçando as chamadas da api mesmo.

    Parece que algo similar tem para o xmpp também: https://slidge.im/slidge-whatsapp/

    sua conexão é qual ae?

    Tenho fibra 600mbps, mas a maioria do que eu faço selfhost é pra uso pessoal e acaba sendo usado mais na rede local mesmo.

    tesseract funciona com áudio? Achei que fosse só OCR

    Falha minha. Fui caçar os scripts antigos aqui e ele também tinha o tesseract logo antes, mas na verdade era o sr. O tesseract de fato tava lá só pra lidar com imagens.


    @noherotoots@ursal.zone

    Queria entender o modus operandis, se é automático, se preciso deixar aberto em um navegador / sessão ativa para o bot fazer o processo e me devolver…

    É um script em python, que roda como se fosse um app/client normal. No caso ele fica rodando de fundo o tempo todo no computador.


    EDIT:

    E pelo jeito eu falhei em como usar as mentions :v



  • thes0lstoPrivacidadeMatrix ou Xmpp??
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    9 months ago

    Welp que eu acabei mesmo passando a limpo o meu script.


    Aqui estou levando em conta que o matrix já está com a bridge rodando e o script vai cuidar só de espiar se chega mensagem de áudio.

    Quem for usar, leia o código que eu botei uns comentários nos trechos que deve editar.

    Testei só no meu próprio ambiente, então pode ser que tenha uma dependência ou outra que esqueci de anotar (nem lembro como que instalei o whisper, por exemplo).

    A documentação do nio fica em aqui: https://matrix-nio.readthedocs.io/en/latest/index.html


    # -*- coding: utf-8 -*-
    
    
    import requests
    
    import os
    import re
    import time
    
    import whisper
    
    import asyncio
    import json
    
    from nio import AsyncClient, MatrixRoom, RoomMessageText, RoomMessageAudio, Api
    
    # whisper requer o ffmpeg:
    # sudo apt update && sudo apt install ffmpeg
    
    # E no virtualenv do seu python, os requisitos provavelmente são:
    # pip install asyncio openai-whisper matrix-nio
    
    # Analisar o restante do script e substituir os valores do room_id na função audio_callback pelos da sua instância
    
    # ------------------------------------------------
    
    # Credenciais do login. Pegar os dados da response:
    # curl -XPOST -d '{"type":"m.login.password", "user":"NOMEDOUSUARIO", "password":"SENHADOUSUARIO"}' "https://matrix.zzz/_matrix/client/r0/login"
    CONFIG_FILE = "matrix-credentials.json"
    if not os.path.isfile(CONFIG_FILE):
      f = open(CONFIG_FILE, 'w')
      f.write('{"user_id":"@usuario:matrix.zzz","access_token":"abc123","home_server":"https://matrix.zzz","device_id":"ABCD"}')
      f.close()
      print('Preencha as credenciais...')
      exit()
      
    # Este arquivo é usado pro script ignorar mensagens anteriores a data dele
    lastruntime='matrix.time.txt'
    if not os.path.isfile(lastruntime):
      f = open(lastruntime, 'w')
      f.write("0")
      f.close()
    
    # Pasta onde ficarão salvos os áudio temporários
    if not os.path.isdir("matrixtemp"):
        os.mkdir("matrixtemp")
    
    with open(CONFIG_FILE, "r") as f:
        config = json.load(f)
        client = AsyncClient(config["home_server"])
        client.access_token = config["access_token"]
        client.user_id = config["user_id"]
        client.device_id = config["device_id"]
    
    async def matrix_message(text, room_id, server_timestamp, in_reply_to = 0):
        event_type="m.room.message"
        msgtype="m.text"
            
        if in_reply_to == 0:
            content = {
                    "msgtype": msgtype,
                    "body": cleanhtml(text),
                    "format": "org.matrix.custom.html",
                    "formatted_body": text
            }
        else:
            content = {
                    "m.relates_to": {"m.in_reply_to": {"event_id": in_reply_to  }   },
                    "msgtype": msgtype,
                    "body": cleanhtml(text),
                    "format": "org.matrix.custom.html",
                    "formatted_body": text
            }
        
        await client.room_send(
            room_id,
            message_type="m.room.message",
            content=content,
            ignore_unverified_devices=True,
        )
        
        f = open(lastruntime, "w")
        f.write(str(server_timestamp))
        f.close()
        
    
    CLEANR = re.compile('<.*?>') 
    
    def cleanhtml(raw_html):
      cleantext = re.sub(CLEANR, '', raw_html)
      return cleantext
      
    
    async def audio_callback(room: MatrixRoom, event: RoomMessageAudio) -> None:
        # Aqui os chats que podem receber a transcrição na própria conversa.
        # Pra pegar o id, no Element, clique direito na sala, Settings > Advanced > Internal room ID
        permitidos=[
        "!AsasasASas:matrix.zzz",
        "!Idasasas:matrix.zzz"
        ]
        if room.room_id in permitidos:    
            room_id = room.room_id
            event_id = event.event_id
        else:
            room_id = "!BHBhbHBHbhb:matrix.zzz" # Aqui especifica o room_id do chat que vai receber fora dos permitidos acima
            event_id = 0
        
        sender = event.source['sender']
        lastrun = open(lastruntime, "r")
        lastrun = lastrun.read()
        if event.server_timestamp > int(lastrun):
            print(vars(room))
            print(event)
            dllink = Api.mxc_to_http(event.source['content']['url'])
            print(dllink)
            filename = os.path.basename(dllink)+".ogg"
            filepath = "./matrixtemp/"+filename
            
            r = requests.get(dllink)
            
            print(r.status_code)
            
            with open(filepath, 'wb') as f:
                f.write(r.content)
            
            print("iniciando openai/whisper")
            start = time.time()
            model = whisper.load_model("medium")
            
            whisperconfig="bs3" #def p2bs5 bs3 bs2
            
            if whisperconfig == "p2bs5":
                result = model.transcribe(filepath, language="pt", fp16=False, verbose=True, patience=2, beam_size=5) #580 segundos
            if whisperconfig == "def":
                result = model.transcribe(filepath, language="pt", fp16=False, verbose=True) #56 segundos
            if whisperconfig == "bs3":
                result = model.transcribe(filepath, language="pt", fp16=False, verbose=True, beam_size=3) #181 segundos
            if whisperconfig == "bs2":
                result = model.transcribe(filepath, language="pt", fp16=False, verbose=True, beam_size=2) #136 segundos
                
            end = time.time()
            tempogasto = int(end - start)
            print("Conluido, tempo gasto: "+ str(tempogasto))
            text = result["text"]
    
            await matrix_message("<b>Transcrição:</b><br/><br/>"+sender+":<br/> "+text, room_id, str(event.server_timestamp), event_id)
    
    
    
    async def main() -> None:        
        client.add_event_callback(audio_callback, RoomMessageAudio)
        
        await client.sync_forever(timeout=30000)  # milliseconds
    
    
    asyncio.run(main())
    

    EDIT: 2024-03-27 21h50: Corrigi um erro de copicola logo depois do if not os.path.isfile(CONFIG_FILE):.


  • thes0lstoPrivacidadeMatrix ou Xmpp??
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    9 months ago

    Hahah, tá no meio de um script enorme que eu também uso pra fazer o mirror das outras mensagens. Qualquer coisa alguma hora eu vejo se tento isolar só isso, mas pra dar um início seria:

    Um script python com nio, que serve pra conectar no servidor, logar na conta e ficar espiando as mensagens que vão chegando.

    Quando ele encontrar uma mensagem de áudio, eu faço ele baixar o arquivo numa pasta local e depois eu rodo o whisper hospedado localmente pra fazer a transcrição.

    Depois com o resultado, eu tenho duas opções, enviar de volta o áudio para o mesmo chat, ou enviar pra um chat privado só comigo. Quando é com alguém chegado, eu envio pro mesmo chat, já o restante eu faço vir em separado.

    Inicialmente eu usava o sr*, mas se a pessoa tinha um pouco de sotaque, o reconhecimento não funcionava legal.

    Com o whisper o resultado é bem melhor, porém é bem mais pesado e demora um tanto pra transcrever. Um áudio de 30 segundos leva uns 3~4 minutos. Mas se a pessoa quis economizar o tempo dela enviando em audio, não deve se importar de esperar uns 5 minutos pra receber uma resposta do outro lado… hahah


    *EDIT: Uma correção, o meu script também tava com o tesseract sendo usado em outro trecho, por isso eu confundi, mas a parte do audio era usando o SpeechRecognition. Foi mals. EDIT


  • thes0lstoPrivacidadeMatrix ou Xmpp??
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    9 months ago

    O problema é que é totalmente aleatório. Ontem às 22h tava comendo os 35% de novo. Reiniciei o container e tá até agora rodando bonitinho consumindo de 1% pra baixo.

    No dendrite eu não tinha notado esses problemas.

    alias gastou quanto pra criar servidor doméstico?

    Um fornecedor do meu irmão tava se desfazendo de equipamentos antigos e peguei um “HP Prodesk 600 Slim”, acho que um i5 e 8gb de ram e um hdd mecânico de 500GB por uns R$600.

    Só botei mais uns pentes de memória que eu tinha sobrando aqui e um ssd, que também tinha de sobra.

    EDIT:

    Btw, não sei se é bug, mas só consegui fazer o upload da imagem pela interface normal, tentando pelo old.lemmy só retornava erro.