Avatar
Anjhc
4abc8f17e30e49e8b960ea8211cfcc6448cc908b741e7f9819f066f272470848
Working on npub1lm93678pyyxxdta28lyjaq4pyfps6cqpk9y04w3seu4wfeh6alesnzwwz2 and npub10j5hz4l6l9ea6u2nut0r66v5d07lsqjaj4jl80sf0phyanaduefsnkc4cn

CONTOS DA CANTUÁRIA PARTE 1 - GEOFFREY CHAUCER (AUDIOLIVRO/AUDIOBOOK)

https://www.youtube.com/watch?v=eMFys8sDjmY

#brasil #audiolivro

TTC History of the English Language, 2nd Edition (video) by Seth Lerer

https://archive.org/details/05.-historical-linguistics-and-studying-culture

#english #language #history

Replying to Avatar Anjhc

Dom Diniz I (ou Denis), rei (e esposo de Santa Isabel de Portugal), foi um dos maiores trovadores do medievo.

https://www.youtube.com/watch?v=ZDRx-F1qHt0

Nesta cantiga de amigo, uma donzela interroga às flores o porque da demora de seu amado ao encontro que haviam marcado e é respondida por elas.

Esta cantiga, assim como todas as trovas de Dom Diniz são preciosidades da origem da língua portuguesa.

#galego #portugues #trova

Dom Diniz I (ou Denis), rei (e esposo de Santa Isabel de Portugal), foi um dos maiores trovadores do medievo.

https://www.youtube.com/watch?v=ZDRx-F1qHt0

Nesta cantiga de amigo, uma donzela interroga às flores o porque da demora de seu amado ao encontro que haviam marcado e é respondida por elas.

Esta cantiga, assim como todas as trovas de Dom Diniz são preciosidades da origem da língua portuguesa.

#galego #portugues #trova

A very good movie:

The Time Machine (1960)

https://m.imdb.com/title/tt0054387/

#movie #moviestr

Só fazendo as próprias e com bons ingredientes...

Replying to Avatar OK3E

## Plugin Chrome: Nostr Commentator - Comentários Descentralizados via Nostr para Páginas Web

**Nome:** Nostr Commentator

**Descrição:** Um plugin para o Google Chrome que permite comentar e ler comentários em páginas web usando o protocolo Nostr. Transforme qualquer página em um espaço de discussão descentralizado.

**Funcionalidades:**

1. **Ativação Sob Demanda:**

* O plugin fica inativo por padrão e só é ativado quando o usuário clica no ícone do plugin na barra de ferramentas do Chrome. Isso garante que o plugin não consuma recursos desnecessariamente.

* Ao clicar no ícone, o plugin injeta uma interface flutuante na página atual.

2. **Identificação da Página:**

* O plugin utiliza o URL completo da página acessada como referência para identificar a thread de comentários no Nostr. Pode ser opcionalmente complementado com um título da página para maior clareza, mas o URL é o identificador principal.

* Sugestão: Implementar uma função para "normalizar" o URL (remover parâmetros irrelevantes, como UTMs) para agrupar comentários relacionados.

3. **Interface de Comentários:**

* **Editor de Comentários:** Uma caixa de texto onde o usuário pode escrever seu comentário.

* Suporte básico para formatação Markdown (negrito, itálico, listas).

* Opção para adicionar tags (#hashtags) relevantes.

* Botão "Enviar" para publicar o comentário no Nostr.

* **Visualização de Comentários:**

* Exibição cronológica dos comentários (mais recentes no topo).

* Nome/identificador do usuário Nostr (pubkey, por exemplo).

* Conteúdo do comentário.

* Timestamp do comentário.

* Opções de "curtir" (reagir com um "ZAP") e responder a comentários (criar uma nova thread com o comentário original citado).

* Opção de reportar comentários inadequados (útil para moderação cooperativa).

4. **Configurações do Usuário:**

* **Chave Privada Nostr:** Permite ao usuário inserir sua chave privada Nostr (opcional, pode usar extensão existente como Alby). Importante: Enfatizar a importância de usar uma chave privada separada para este plugin, diferente da principal, para segurança.

* **Relays:** Uma lista de relays Nostr para os quais o plugin publicará os comentários e dos quais o plugin buscará os comentários existentes.

* Lista pré-definida de relays recomendados.

* Opção para o usuário adicionar/remover relays manualmente.

* Priorização de relays: Permite ao usuário definir a ordem de prioridade dos relays para publicação e leitura.

* **Nome de Exibição:** Um nome de exibição que será associado aos comentários do usuário (opcional).

* **Tema:** Opção para tema claro/escuro.

5. **Integração com Extensões Nostr Existentes:**

* O plugin deve detectar se o usuário já possui uma extensão Nostr instalada (ex: Alby) e oferecer a opção de usar essa extensão para assinar as notas em vez de inserir a chave privada diretamente no plugin. Isso melhora a segurança e a experiência do usuário.

6. **Performance:**

* Implementar paginação para carregar os comentários em lotes, especialmente em páginas com muitos comentários.

* Caching: Armazenar em cache os comentários recuperados para reduzir a carga nos relays e melhorar a velocidade de carregamento.

* Otimizar as consultas aos relays para buscar apenas os eventos relevantes (com base no URL da página).

**Fluxo de Trabalho:**

1. O usuário navega para uma página web.

2. O usuário clica no ícone do plugin "Nostr Commentator" na barra de ferramentas do Chrome.

3. A interface de comentários do plugin é injetada na página.

4. O plugin busca comentários existentes no Nostr associados ao URL da página, usando os relays configurados pelo usuário.

5. Os comentários são exibidos na interface.

6. O usuário pode escrever um novo comentário na caixa de texto e clicar em "Enviar".

7. O plugin assina o comentário usando a chave privada do usuário (ou a extensão Nostr) e publica o evento no Nostr através dos relays configurados.

8. O novo comentário é exibido na lista de comentários.

**Implementação Técnica:**

* **Linguagens:** JavaScript, HTML, CSS.

* **Bibliotecas Nostr:** Usar uma biblioteca JavaScript Nostr para facilitar a interação com o protocolo (ex: nostr-tools).

* **Armazenamento:** Usar o armazenamento local do Chrome para armazenar as configurações do usuário (relays, chave privada, etc.). Considerar usar um armazenamento mais seguro (ex: Chrome Storage API) para a chave privada.

* **Comunicação com Relays:** Usar WebSockets para se conectar aos relays Nostr.

**Considerações de Segurança:**

* **Chave Privada:** Armazenar a chave privada do usuário com a máxima segurança possível. A melhor prática é evitar armazená-la diretamente e depender de extensões Nostr existentes para a assinatura.

* **Sanitização:** Sanitizar o conteúdo dos comentários exibidos para evitar ataques XSS.

* **Validar URLs:** Validar os URLs antes de usá-los para buscar comentários.

**Recursos Adicionais:**

* **Moderação Cooperativa:** Implementar um sistema de reputação para os usuários e permitir que a comunidade vote em comentários inadequados. Comentários com baixa reputação podem ser ocultados por padrão.

* **Notificações:** Implementar um sistema de notificações para avisar o usuário quando alguém responde a um de seus comentários ou quando há novos comentários em uma página que ele já comentou.

* **Importar/Exportar Comentários:** Permitir que os usuários exportem seus comentários para um formato padrão (ex: JSON) e importem comentários de outras plataformas.

* **Visualização de Relays:** Mostrar uma lista dos relays que estão fornecendo dados para a página atual, com informações sobre a latência e o status de cada relay.

**Benefícios:**

* **Descentralização:** Comentários não estão vinculados a uma plataforma centralizada.

* **Resistência à Censura:** A informação é distribuída entre múltiplos relays.

* **Privacidade:** Usuários controlam seus próprios dados.

* **Portabilidade:** Comentários podem ser acessados através de diferentes clientes Nostr.

* **Transformação da Web:** Transforma qualquer página em um espaço de discussão.

**Desafios:**

* **Adoção:** Depende da adoção do protocolo Nostr.

* **Moderação:** A moderação descentralizada é um desafio complexo.

Não será implementada de primeiro momento, mas penso em algo como o WOT.

* **Performance:** A performance pode ser afetada pela latência dos relays.

* **Complexidade Técnica:** Implementar um plugin Nostr seguro e funcional requer conhecimento técnico.

Este plugin tem o potencial de revolucionar a forma como as pessoas interagem com o conteúdo online, permitindo discussões descentralizadas e resistentes à censura em qualquer página web. É um projeto ambicioso, mas com grande potencial para contribuir para um futuro da internet mais livre e descentralizado.

Montei algo parecido, tem alguns bugs, atualmente usa usuarios randomicos mas é um caminho andado:

https://andersonjuhasc.com/nostr-web-comments/

É bom olhar no console para ver se o relay está connectado....

# Construção Manual de Transações Bitcoin

Vou explicar detalhadamente como montar transações Bitcoin manualmente, abordando diferentes tipos de transações e fornecendo exemplos com valores hexadecimais.

## Estrutura Básica de uma Transação

Uma transação Bitcoin é composta por:

1. **Version** (4 bytes)

2. **Marker & Flag** (opcional, apenas para transações SegWit)

3. **Input Count** (1-9 bytes, VarInt)

4. **Inputs** (estrutura variável)

5. **Output Count** (1-9 bytes, VarInt)

6. **Outputs** (estrutura variável)

7. **Witnesses** (opcional, apenas para transações SegWit)

8. **Locktime** (4 bytes)

## Exemplo de Transação Legada (P2PKH)

Vamos construir uma transação passo a passo:

```

Version: 01000000 (versão 1)

Input Count: 01 (1 input)

Input:

- Txid: 7967a5185e907a25225574544c31f7b059c1a191d65b53dcc1554d339c4f9efc

- Vout: 01000000 (índice 1)

- ScriptSig length: 6a (106 bytes)

- ScriptSig: 47304402206a2eb16b7b92051d0fa38c133e67684ed064effada1d7f925c842da401d4f22702201f196b10e6e4b4a9fff948e5c5d71ec5da53e90529c8dbd122bff2b1d21dc8a90121039b7bcd0824b9a9164f7ba098408e63e5b7e3cf90835cceb19868f54f8961a825

- Sequence: ffffffff (finalized)

Output Count: 01 (1 output)

Output:

- Value: 00e1f50500000000 (1 BTC = 100,000,000 satoshis)

- ScriptPubKey length: 19 (25 bytes)

- ScriptPubKey: 76a9144ab4ee161c7a0d8d768439ab1a7647d37f2ffe3988ac (P2PKH para endereço 1BCyxfGTrkkqmHGg63z7kXvt2TCr4m8AoP)

Locktime: 00000000 (sem locktime)

```

## Evolução dos Tipos de Transação Bitcoin

### 1. P2PKH (Pay to Public Key Hash) - Original

Formato do ScriptPubKey:

```

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

```

Exemplo: `76a9144ab4ee161c7a0d8d768439ab1a7647d37f2ffe3988ac`

### 2. P2SH (Pay to Script Hash) - BIP16, 2012

Formato do ScriptPubKey:

```

OP_HASH160 OP_EQUAL

```

Exemplo: `a914f4c03f9e0a7667acbf893bcc99e9c5a3e6f7f6d087`

### 3. P2WPKH (Pay to Witness Public Key Hash) - BIP141, 2017

Formato do ScriptPubKey:

```

OP_0 <20-byte-key-hash>

```

Exemplo: `0014751e76e8199196d454941c45d1b3a323f1433bd6`

### 4. P2WSH (Pay to Witness Script Hash) - BIP141, 2017

Formato do ScriptPubKey:

```

OP_0 <32-byte-script-hash>

```

Exemplo: `00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262`

### 5. P2TR (Pay to Taproot) - BIP341, 2021

Formato do ScriptPubKey:

```

OP_1 <32-byte-schnorr-pubkey>

```

Exemplo: `5120a37c3903c8d0db6512e2b40b0dfbfc9213f4b673aeb58d1679364295b2c4e28`

## Montando uma Transação P2WPKH

Vamos construir uma transação SegWit P2WPKH passo a passo:

```

Version: 01000000 (versão 1)

Marker: 00 (indica transação SegWit)

Flag: 01 (obrigatório com o marker)

Input Count: 01 (1 input)

Input:

- Txid: 2d4a13bdfedcda173c35e61586ea21030bd1da2b010f00163c9417ee7384abd4

- Vout: 01000000 (índice 1)

- ScriptSig length: 00 (vazio para SegWit)

- ScriptSig: (vazio)

- Sequence: ffffffff

Output Count: 02 (2 outputs)

Output 1:

- Value: 00ca9a3b00000000 (10 BTC)

- ScriptPubKey length: 16 (22 bytes)

- ScriptPubKey: 0014d85c2b71d0060b09c9886aeb815e50991dda124d (P2WPKH)

Output 2:

- Value: 009435770000000 (1.5 BTC - troco)

- ScriptPubKey length: 16 (22 bytes)

- ScriptPubKey: 00146a59ac0e8f553f292dfe5e9f3aaa1da93499c15e (P2WPKH - endereço de troco)

Witness count: 01 (para 1 input)

Witness items for input 0:

- Item count: 02 (assinatura + chave pública)

- Item 1 length: 47 (71 bytes)

- Item 1: 3044022074ef696e55a0cc2f4d80fe833095b2a59c5bb9417ee5a3ba905994d228e6f33c02204ab291e35f37d3ed5ddf024170615f1e1d8d6118e3d6c5ecce33b01d72316fb901 (assinatura)

- Item 2 length: 21 (33 bytes)

- Item 2: 0283ef77a9821f95f8fd1b93bed127b398989ee19bd598d77859a5962e4fa0f047 (chave pública)

Locktime: 00000000 (sem locktime)

```

## Processo de Assinatura

O processo de assinatura varia conforme o tipo de transação. Vamos explicar para o P2WPKH:

1. **Criar o preimage da transação**:

- Version: 01000000

- Hash de outputs anteriores: d4ab8473ee17943c16000f012bdad10b0321ea8615e6353c17dadcfedd3ba1d4

- Hash de sequências anteriores: ffffffff

- Txid do input: 2d4a13bdfedcda173c35e61586ea21030bd1da2b010f00163c9417ee7384abd4

- Vout: 01000000

- Script do output sendo gasto: 1976a914d85c2b71d0060b09c9886aeb815e50991dda124d88ac

- Valor do input: e8030000000000000 (1000 satoshis)

- Sequence: ffffffff

- Hash de outputs: (hash de todos os outputs)

- Locktime: 00000000

- SigHash: 01000000 (SIGHASH_ALL)

2. **Calcular o hash SHA256 duplo do preimage**

3. **Assinar o hash com a chave privada**

4. **Construir a testemunha (witness) com a assinatura e a chave pública**

## Diferenças na Construção de Diferentes Tipos de Transação

1. **P2PKH**:

- ScriptSig contém ` `

- Sem campo witness

2. **P2SH**:

- ScriptSig contém ` ... `

- Sem campo witness

3. **P2WPKH**:

- ScriptSig vazio

- Witness contém ` `

- Usa marker (00) e flag (01)

4. **P2WSH**:

- ScriptSig vazio

- Witness contém ` ... `

- Usa marker (00) e flag (01)

5. **P2TR (Taproot)**:

- ScriptSig vazio

- Para gasto via chave: witness contém ``

- Para gasto via script: witness contém `