AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-9171697

ph3rin's questions

Martin Hope
ph3rin
Asked: 2025-02-08 00:11:28 +0800 CST

Crie um fluxo que emitirá um único valor constante para cada assinatura uma vez

  • 5

Quero criar um fluxo que possa emitir um único valor para cada assinante, não importa quando ele se inscreveu.

O ideal seria que o código a seguir imprimisse dois 42antes de done, mas nenhuma das abordagens fornecidas funciona.

void main() async {
  final stream = createStream(42);
  stream.listen(printValue);
  await Future.delayed(Duration(seconds: 1));
  stream.listen(printValue);

  // Wait for everything to finish.
  await Future.delayed(Duration(seconds: 1));
  print('done');
}

Stream<int> createStream(int val) {
  // Error: Stream has already been listened to.
  // return Stream.value(val);

  // Only gets one output
  return Stream.value(val).asBroadcastStream();
}

void printValue(int val) {
  print(val);
}

Saída desejada:

42
42
done

Mas Stream.value()gera um erro Stream has already been listened to.. Enquanto .asBroadcastStream()dá o resultado errado.


Observação: respostas usando o RxDart serão bem-vindas.

flutter
  • 1 respostas
  • 44 Views
Martin Hope
ph3rin
Asked: 2024-12-31 17:27:22 +0800 CST

Por que o nó de ganho do WebAudio pode misturar várias entradas quando ele tem apenas uma entrada?

  • 9

Eu estava tentando encontrar uma maneira de mixar fluxos de áudio com WebAudio e gravá-los com um MediaRecorder. Tenho seguido a abordagem descrita aqui:

Grave várias faixas de áudio disponíveis em um fluxo com o MediaRecorder

Parece que um nó de ganho (no exemplo deles, o nó de destino) pode executar mixagem em vários fluxos, como mostrado pelo meu experimento abaixo. No exemplo, você pode ouvir o tema Caribbean Pirates e o tema Universal Studios tocando quando você aperta o recordbotão.

Entretanto, no MDN diz que o nó de ganho (assim como o nó de destino) tem uma contagem de entrada de 1 .

Número de entradas = 1 insira a descrição da imagem aqui

Intuitivamente, algo com uma única entrada não pode executar mixagem! Estou esquecendo de algo aqui?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Web Audio Track Recorder</title>
</head>
<body>
  <h1>Web Audio Track Recorder</h1>
  <button id="recordButton">Start Recording</button>
  <script src="script.js"></script>
</body>
</html>

script.js

// URLs of the audio tracks:
const track1Url = 'https://archive.org/download/tvtunes_13046/Pirates%20of%20the%20Caribbean%20-%20Hes%20a%20Pirate.mp3';
const track2Url = 'https://archive.org/download/tvtunes_7590/Universal%20Studios.mp3';

// Initialize variables
let audioContext;
let source1, source2;
let mediaRecorder;
let audioChunks = [];
let isRecording = false;

// Function to start the audio context and load tracks
async function startAudio() {
  audioContext = new (window.AudioContext || window.webkitAudioContext)();

  // Load and decode the audio tracks
  const track1Data = await fetch(track1Url).then(response => response.arrayBuffer());
  const track2Data = await fetch(track2Url).then(response => response.arrayBuffer());

  const track1Buffer = await audioContext.decodeAudioData(track1Data);
  const track2Buffer = await audioContext.decodeAudioData(track2Data);

  // Create buffer sources
  source1 = audioContext.createBufferSource();
  source2 = audioContext.createBufferSource();

  source1.buffer = track1Buffer;
  source2.buffer = track2Buffer;

  // Create a gain node to control the volume
  const gainNode = audioContext.createGain();
  gainNode.gain.setValueAtTime(0.25, audioContext.currentTime);

  // Connect sources to the gain node
  source1.connect(gainNode);
  source2.connect(gainNode);

  // Connect gain node to the destination (speakers)
  gainNode.connect(audioContext.destination);

  // Create a MediaStream from the audio context
  const destination = audioContext.createMediaStreamDestination();
  gainNode.connect(destination);

  // Initialize MediaRecorder with the audio stream
  mediaRecorder = new MediaRecorder(destination.stream);

  // Event handler for when data is available
  mediaRecorder.ondataavailable = event => {
    audioChunks.push(event.data);
  };

  // Event handler for when recording stops
  mediaRecorder.onstop = () => {
    const audioBlob = new Blob(audioChunks, { type: 'audio/webm' });
    const audioUrl = URL.createObjectURL(audioBlob);
    const downloadLink = document.createElement('a');
    downloadLink.href = audioUrl;
    downloadLink.download = 'recording.webm';
    downloadLink.click();
    audioChunks = [];
  };

  // Start the sources
  source1.start();
  source2.start();
}

// Function to toggle recording
function toggleRecording() {
  if (!isRecording) {
    if (!audioContext) {
      startAudio().then(() => {
        mediaRecorder.start();
        document.getElementById('recordButton').textContent = 'Stop Recording';
      });
    } else {
      mediaRecorder.start();
      document.getElementById('recordButton').textContent = 'Stop Recording';
    }
  } else {
    mediaRecorder.stop();
    document.getElementById('recordButton').textContent = 'Start Recording';
  }
  isRecording = !isRecording;
}

// Add event listener to the record button
document.getElementById('recordButton').addEventListener('click', toggleRecording);

Você também pode tentar aqui: https://jsfiddle.net/10ms7pyd/8/

javascript
  • 1 respostas
  • 35 Views
Martin Hope
ph3rin
Asked: 2024-12-18 01:24:22 +0800 CST

AWS: tornar um recurso (por exemplo, um lambda) público na produção, mas privado no desenvolvimento

  • 5

Temos um aplicativo móvel com funcionalidade de inscrição (pense nele como um lambda da AWS), que é acessível publicamente.

Durante o desenvolvimento, implantamos em uma conta AWS sandbox. Queremos que o sistema dev proíba a inscrição pública, mas ainda permita que o desenvolvedor se inscreva por meio de um front-end especificamente configurado (ou seja, com as chaves secretas necessárias).

O raciocínio para isso é que não queremos que atores maliciosos consigam falar com nossos sistemas de desenvolvimento! Como estamos fazendo serverless, é difícil aplicar isolamento em nível de rede, então toda a segurança deve vir da autenticação. Também queremos manter a maioria do trabalho de autenticação e autorização para o IAM porque chamadas não autorizadas para lambdas não incorrem em custo.

Minha solução atual é:

Na produção, anexe uma política baseada em recursos à função Lambda de inscrição, permitindo explicitamente a invocação pública (Principal: "*")para lambda:InvokeFunction.

Em desenvolvimento, anexe uma Denydeclaração às funções Lambda marcadas com dev_protect = true. Esta regra de negação bloqueia a invocação se o chamador não tiver uma tag principal developer = true. Adicione esta tag às funções do desenvolvedor, que o front-end usa para inscrição.

Aqui está o exemplo das políticas:

Produção (Acesso Público a sign-up):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPublicInvokeForSignUp",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:sign-up"
    }
  ]
}

Desenvolvimento (Negar acesso a dev_protectfunções sem developertag):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyNonDeveloperAccessToDevProtected",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/dev_protect": "true"
        },
        "ForAnyValue:StringNotEqualsIfExists": {
          "aws:PrincipalTag/developer": "true"
        }
      }
    }
  ]
}

Essa é uma boa abordagem ou existem outras melhores para o meu problema?

  • 1 respostas
  • 18 Views
Martin Hope
ph3rin
Asked: 2024-12-12 21:45:50 +0800 CST

No DynamoDb, como faço para otimizar junções extras ao acessar registros de dados que geralmente são buscados juntos

  • 5

Digamos que eu esteja administrando um fórum, onde cada usuário pode fazer várias postagens.

Então eu estruturei meu banco de dados da seguinte maneira: (com colunas não relacionadas omitidas)

PK Eslováquia CADEIA_0
POST,post_id thread,seq_num ID do usuário
USUÁRIO,id_do_usuário NÃO_RELEVANTE grandes_meta_dados

Um caso de uso comum é renderizar um tópico de discussão inteiro, com todas as postagens dentro dele. No entanto, sempre que renderizamos uma postagem, renderizaremos alguns metadados do usuário que são representados acima como big_meta_data(Isso pode incluir a imagem do perfil do usuário, a reputação do usuário, etc.)

Claro que podemos primeiro executar uma consulta para obter todas as postagens e, então, para cada usuário que vemos, executamos uma consulta adicional (provavelmente em lote).

Existe alguma maneira de evitar consultas extras aos registros do usuário ou o acima é suficiente?

A única maneira que consigo pensar é manter uma cópia disso big_meta_datanas linhas POST, mas isso parece difícil de gerenciar e consome armazenamento extra.

  • 1 respostas
  • 19 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve