-
@ b12b632c:d9e1ff79
2023-08-08 00:02:31"Welcome to the Bitcoin Lightning Bolt Card, the world's first Bitcoin debit card. This revolutionary card allows you to easily and securely spend your Bitcoin at lightning compatible merchants around the world." Bolt Card
I discovered few days ago the Bolt Card and I need to say that's pretty amazing. Thinking that we can pay daily with Bitcoin Sats in the same way that we pay with our Visa/Mastecard debit cards is really something huge⚡(based on the fact that sellers are accepting Bitcoins obviously!)
To use Bolt Card you have three choices :
- Use their (Bolt Card) own Bolt Card HUB and their own BTC Lightning node
- Use your own self hosted Bolt Card Hub and an external BTC Lightning node
- Use your own self hosted Bolt Card Hub and your BTC Lightning node (where you shoud have active Lightning channels)
⚡ The first choice is the quickiest and simpliest way to have an NFC Bolt Card. It will take you few seconds (for real). You'll have to wait much longer to receive your NFC card from a website where you bought it than configure it with Bolt Card services.
⚡⚡ The second choice is pretty nice too because you won't have a VPS + to deal with all the BTC Lightnode stuff but you'll use an external one. From the Bolt Card tutorial about Bolt Card Hub, they use a Lightning from voltage.cloud and I have to say that their services are impressive. In few seconds you'll have your own Lightning node and you'll be able to configure it into the Bolt Card Hub settings. PS : voltage.cloud offers 7 trial days / 20$ so don't hesitate to try it!
⚡⚡⚡ The third one is obvisouly a bit (way) more complex because you'll have to provide a VPS + Bitcoin node and a Bitcoin Lightning Node to be able to send and receive Lightning payments with your Bolt NFC Card. So you shoud already have configured everything by yourself to follow this tutorial. I will show what I did for my own installation and all my nodes (BTC & Lightning) are provided by my home Umbrel node (as I don't want to publish my nodes directly on the clearnet). We'll see how to connect to the Umbrel Lighting node later (spoiler: Tailscale).
To resume in this tutorial, I have :
- 1 Umbrel node (rpi4b) with BTC and Lightning with Tailscale installed.
- 1 VPS (Virtual Personal Server) to publish publicly the Bolt Card LNDHub and Bolt Card containers configured the same way as my other containers (with Nginx Proxy Manager)
Ready? Let's do it ! ⚡
Configuring Bolt Card & Bolt Card LNDHub
Always good to begin by reading the bolt card-lndhub-docker github repo. To a better understading of all the components, you can check this schema :
We'll not use it as it is because we'll skip the Caddy part because we already use Nginx Proxy Manager.
To begin we'll clone all the requested folders :
git clone https://github.com/boltcard/boltcard-lndhub-docker bolthub cd bolthub git clone https://github.com/boltcard/boltcard-lndhub BoltCardHub git clone https://github.com/boltcard/boltcard.git git clone https://github.com/boltcard/boltcard-groundcontrol.git GroundControl
PS : we won't see how to configure GroundControl yet. This article may be updated later.
We now need to modify the settings file with our own settings :
mv .env.example .env nano .env
You need to replace "your-lnd-node-rpc-address" by your Umbrel TAILSCALE ip address (you can find your Umbrel node IP from your Tailscale admin console):
``` LND_IP=your-lnd-node-rpc-address # <- UMBREL TAILSCALE IP ADDRESS LND_GRPC_PORT=10009 LND_CERT_FILE=tls.cert LND_ADMIN_MACAROON_FILE=admin.macaroon REDIS_PASSWORD=random-string LND_PASSWORD=your-lnd-node-unlock-password
docker-compose.yml only
GROUNDCONTROL=ground-control-url
docker-compose-groundcontrol.yml only
FCM_SERVER_KEY=hex-encoded APNS_P8=hex-encoded APNS_P8_KID=issuer-key-which-is-key-ID-of-your-p8-file APPLE_TEAM_ID=team-id-of-your-developer-account BITCOIN_RPC=bitcoin-rpc-url APNS_TOPIC=app-package-name ```
We now need to generate an AES key and insert it into the "settings.sql" file :
```
hexdump -vn 16 -e '4/4 "%08x" 1 "\n"' /dev/random 19efdc45acec06ad8ebf4d6fe50412d0 nano settings.sql ```
- Insert the AES between ' ' right from 'AES_DECRYPT_KEY'
- Insert your domain or subdomain (subdomain in my case) host between ' ' from 'HOST_DOMAIN'
- Insert your Umbrel tailscale IP between ' ' from 'LN_HOST'
Be aware that this subdomain won't be the LNDHub container (boltcard_hub:9002) but the Boltcard container (boltcard_main:9000)
``` \c card_db;
DELETE FROM settings;
-- at a minimum, the settings marked 'set this' must be set for your system -- an explanation for each of the bolt card server settings can be found here -- https://github.com/boltcard/boltcard/blob/main/docs/SETTINGS.md
INSERT INTO settings (name, value) VALUES ('LOG_LEVEL', 'DEBUG'); INSERT INTO settings (name, value) VALUES ('AES_DECRYPT_KEY', '19efdc45acec06ad8ebf4d6fe50412d0'); -- set this INSERT INTO settings (name, value) VALUES ('HOST_DOMAIN', 'sub.domain.tld'); -- set this INSERT INTO settings (name, value) VALUES ('MIN_WITHDRAW_SATS', '1'); INSERT INTO settings (name, value) VALUES ('MAX_WITHDRAW_SATS', '1000000'); INSERT INTO settings (name, value) VALUES ('LN_HOST', ''); -- set this INSERT INTO settings (name, value) VALUES ('LN_PORT', '10009'); INSERT INTO settings (name, value) VALUES ('LN_TLS_FILE', '/boltcard/tls.cert'); INSERT INTO settings (name, value) VALUES ('LN_MACAROON_FILE', '/boltcard/admin.macaroon'); INSERT INTO settings (name, value) VALUES ('FEE_LIMIT_SAT', '10'); INSERT INTO settings (name, value) VALUES ('FEE_LIMIT_PERCENT', '0.5'); INSERT INTO settings (name, value) VALUES ('LN_TESTNODE', ''); INSERT INTO settings (name, value) VALUES ('FUNCTION_LNURLW', 'ENABLE'); INSERT INTO settings (name, value) VALUES ('FUNCTION_LNURLP', 'ENABLE'); INSERT INTO settings (name, value) VALUES ('FUNCTION_EMAIL', 'DISABLE'); INSERT INTO settings (name, value) VALUES ('AWS_SES_ID', ''); INSERT INTO settings (name, value) VALUES ('AWS_SES_SECRET', ''); INSERT INTO settings (name, value) VALUES ('AWS_SES_EMAIL_FROM', ''); INSERT INTO settings (name, value) VALUES ('EMAIL_MAX_TXS', ''); INSERT INTO settings (name, value) VALUES ('FUNCTION_LNDHUB', 'ENABLE'); INSERT INTO settings (name, value) VALUES ('LNDHUB_URL', 'http://boltcard_hub:9002'); INSERT INTO settings (name, value) VALUES ('FUNCTION_INTERNAL_API', 'ENABLE'); ```
You now need to get two files used by Bolt Card LND Hub, the admin.macaroon and tls.cert files from your Umbrel BTC Ligtning node. You can get these files on your Umbrel node at these locations :
/home/umbrel/umbrel/app-data/lightning/data/lnd/tls.cert /home/umbrel/umbrel/app-data/lightning/data/lnd/data/chain/bitcoin/mainnet/admin.macaroon
You can use either WinSCP, scp or ssh to copy these files to your local workstation and copy them again to your VPS to the root folder "bolthub".
You shoud have all these files into the bolthub directory :
johndoe@yourvps:~/bolthub$ ls -al total 68 drwxrwxr-x 6 johndoe johndoe 4096 Jul 30 00:06 . drwxrwxr-x 3 johndoe johndoe 4096 Jul 22 00:52 .. -rw-rw-r-- 1 johndoe johndoe 482 Jul 29 23:48 .env drwxrwxr-x 8 johndoe johndoe 4096 Jul 22 00:52 .git -rw-rw-r-- 1 johndoe johndoe 66 Jul 22 00:52 .gitignore drwxrwxr-x 11 johndoe johndoe 4096 Jul 22 00:52 BoltCardHub -rw-rw-r-- 1 johndoe johndoe 113 Jul 22 00:52 Caddyfile -rw-rw-r-- 1 johndoe johndoe 173 Jul 22 00:52 CaddyfileGroundControl drwxrwxr-x 6 johndoe johndoe 4096 Jul 22 00:52 GroundControl -rw-rw-r-- 1 johndoe johndoe 431 Jul 22 00:52 GroundControlDockerfile -rw-rw-r-- 1 johndoe johndoe 1913 Jul 22 00:52 README.md -rw-rw-r-- 1 johndoe johndoe 293 May 6 22:24 admin.macaroon drwxrwxr-x 16 johndoe johndoe 4096 Jul 22 00:52 boltcard -rw-rw-r-- 1 johndoe johndoe 3866 Jul 22 00:52 docker-compose-groundcontrol.yml -rw-rw-r-- 1 johndoe johndoe 2985 Jul 22 00:57 docker-compose.yml -rw-rw-r-- 1 johndoe johndoe 1909 Jul 29 23:56 settings.sql -rw-rw-r-- 1 johndoe johndoe 802 May 6 22:21 tls.cert
We need to do few last tasks to ensure that Bolt Card LNDHub will work perfectly.
It's maybe already the case on your VPS but your user should be member of the docker group. If not, you can add your user by doing :
sudo groupadd docker sudo usermod -aG docker ${USER}
If you did these commands, you need to logout and login again.
We also need to create all the docker named volumes by doing :
docker volume create boltcard_hub_lnd docker volume create boltcard_redis
Configuring Nginx Proxy Manager to proxify Bolt Card LNDHub & Boltcard
You need to have followed my previous blog post to fit with the instructions above.
As we use have the Bolt Card LNDHub docker stack in another directory than we other services and it has its own docker-compose.yml file, we'll have to configure the docker network into the NPM (Nginx Proxy Manager) docker-compose.yml to allow NPM to communicate with the Bolt Card LNDHub & Boltcard containers.
To do this we need to add these lines into our NPM external docker-compose (not the same one that is located into the bolthub directory, the one used for all your other containers) :
nano docker-compose.yml
networks: bolthub_boltnet: name: bolthub_boltnet external: true
Be careful, "bolthub" from "bolthub_boltnet" is based on the directory where Bolt Card LNDHub Docker docker-compose.yml file is located.
We also need to attach this network to the NPM container :
nginxproxymanager: container_name: nginxproxymanager image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port volumes: - ./nginxproxymanager/data:/data - ./nginxproxymanager/letsencrypt:/etc/letsencrypt networks: - fractalized - bolthub_boltnet
You can now recreate the NPM container to attach the network:
docker compose up -d
Now, you'll have to create 2 new Proxy Hosts into NPM admin UI. First one for your domain / subdomain to the Bolt Card LNDHub GUI (boltcard_hub:9002) :
And the second one for the Boltcard container (boltcard_main:9000).
In both Proxy Host I set all the SSL options and I use my wildcard certificate but you can generate one certificate for each Proxy Host with Force SSL, HSTS enabled, HTTP/2 Suppot and HSTS Subdomains enabled.
Starting Bolt Card LNDHub & BoltCard containers
Well done! Everything is setup, we can now start the Bolt Card LNDHub & Boltcard containers !
You need to go again to the root folder of the Bolt Card LNDHub projet "bolthub" and start the docker compose stack. We'll begin wihtout a "-d" to see if we have some issues during the containers creation :
docker compose up
I won't share my containers logs to avoid any senstive information disclosure about my Bolt Card LNDHub node, but you can see them from the Bolt Card LNDHub Youtube video (link with exact timestamp where it's shown) :
If you have some issues about files mounting of admin.macaroon or tls.cert because you started the docker compose stack the first time without the files located in the bolthub folder do :
docker compose down && docker compose up
After waiting few seconds/minutes you should go to your Bolt Card LNDHub Web UI domain/sudomain (created earlier into NPM) and you should see the Bolt Card LNDHub Web UI :
if everything is OK, you now run the containers in detached mode :
docker compose up -d
Voilààààà ⚡
If you need to all the Bolt Card LNDHub logs you can use :
docker compose logs -f --tail 30
You can now follow the video from Bolt Card to configure your Bolt Card NFC card and using your own Bolt Card LNDHub :
~~PS : there is currently a bug when you'll click on "Connect Bolt Card" from the Bold Card Walle app, you might have this error message "API error: updateboltcard: enable_pin is not a valid boolean (code 6)". It's a know issue and the Bolt Card team is currently working on it. You can find more information on their Telegram~~
Thanks to the Bolt Card, the issue has been corrected : changelog
See you soon in another Fractalized story!
-
@ 8fb140b4:f948000c
2023-11-02 01:13:01Testing a brand new YakiHonne native client for iOS. Smooth as butter (not penis butter 🤣🍆🧈) with great visual experience and intuitive navigation. Amazing work by the team behind it! * lists * work
Bold text work!
Images could have used nostr.build instead of raw S3 from us-east-1 region.
Very impressive! You can even save the draft and continue later, before posting the long-form note!
🐶🐾🤯🤯🤯🫂💜
-
@ fa0165a0:03397073
2023-10-06 19:25:08I just tested building a browser plugin, it was easier than I thought. Here I'll walk you through the steps of creating a minimal working example of a browser plugin, a.k.a. the "Hello World" of browser plugins.
First of all there are two main browser platforms out there, Chromium and Mozilla. They do some things a little differently, but similar enough that we can build a plugin that works on both. This plugin will work in both, I'll describe the firefox version, but the chromium version is very similar.
What is a browser plugin?
Simply put, a browser plugin is a program that runs in the browser. It can do things like modify the content of a webpage, or add new functionality to the browser. It's a way to extend the browser with custom functionality. Common examples are ad blockers, password managers, and video downloaders.
In technical terms, they are plugins that can insert html-css-js into your browser experience.
How to build a browser plugin
Step 0: Basics
You'll need a computer, a text editor and a browser. For testing and development I personally think that the firefox developer edition is the easiest to work with. But any Chrome based browser will also do.
Create a working directory on your computer, name it anything you like. I'll call mine
hello-world-browser-plugin
. Open the directory and create a file calledmanifest.json
. This is the most important file of your plugin, and it must be named exactly right.Step 1: manifest.json
After creation open your file
manifest.json
in your text editor and paste the following code:json { "manifest_version": 3, "name": "Hello World", "version": "1.0", "description": "A simple 'Hello World' browser extension", "content_scripts": [ { "matches": ["<all_urls>"], "js": ["hello.js"] //The name of your script file. // "css": ["hello.css"] //The name of your css file. } ] }
If you wonder what the
json
file format is, it's a normal text file with a special syntax such that a computer can easily read it. It's thejson
syntax you see in the code above. Let's go through what's being said here. (If you are not interested, just skip to the next step after pasting this we are done here.)manifest_version
: This is the version of the manifest file format. It's currently at version 3, and it's the latest version. It's important that you set this to 3, otherwise your plugin won't work.name
: This is the name of your plugin. It can be anything you like.version
: This is the version of your plugin. It can be anything you like.description
: This is the description of your plugin. It can be anything you like.content_scripts
: This is where you define what your plugin does. It's a list of scripts that will be executed when the browser loads a webpage. In this case we have one script, calledhello.js
. It's the script that we'll create in the next step.matches
: This is a list of urls that the script will be executed on. In this case we have<all_urls>
, which means that the script will be executed on all urls. You can also specify a specific url, likehttps://brave.com/*
, which means that the script will only be executed on urls that start withhttps://brave.com/
.js
: This is a list of javascript files that will be executed. In this case we have one file, calledhello.js
. It's the script that we'll create in the next step.css
: This is where you can add a list of css files that will be executed. In this case we have none, but you can add css files here if you want to.//
: Text following these two characters are comments. They are ignored by the computer, You can add comments anywhere you like, and they are a good way to document your code.
Step 2: hello.js
Now it's time to create another file in your project folder. This time we'll call it
hello.js
. When created, open it in your text editor and paste the following code:js console.log("Hello World!");
That's javascript code, and it's what will be executed when you run your plugin. It's a simpleconsole.log
statement, which will print the text "Hello World!" to the console. The console is a place where the browser prints out messages, and it's a good place to start when debugging your plugin.Step 3: Load and launch your plugin
Firefox
Now it's time to load your plugin into your browser. Open your browser and go to the url
about:debugging#/runtime/this-firefox
. You should see a page that looks something like this:Click the button that says "Load Temporary Add-on...". A file dialog will open, navigate to your project folder and select the file
manifest.json
. Your plugin should now be loaded and running.Go to a website, any website, and open the inspector then navigate to the console. You'll find the inspector by right-clicking anywhere within the webpage, and click "Inspector" in the drop-down menu. When opening the console you might see some log messages from the site you visited and... you should see the text "Hello World!" printed there, from our little plugin! Congratulations!
Chrome
Open your browser and go to the url
chrome://extensions/
. Click the button that says "Load unpacked". A file dialog will open, navigate to your project folder and select the folderhello-world-browser-plugin
. Your plugin should now be loaded and running.Note the difference, of selecting the file
manifest.json
in firefox, and selecting the folderhello-world-browser-plugin
in chrome. Otherwise, the process is the same. So I'll repeat the same text as above: (for those who skipped ahead..)Go to a website, any website, and open the inspector then navigate to the console. You'll find the inspector by right-clicking anywhere within the webpage, and click "Inspector" in the drop-down menu. When opening the console you might see some log messages from the site you visited and... you should see the text "Hello World!" printed there, from our little plugin! Congratulations!
As you can see this isn't as complicated as one might think. Having preformed a "Hello-World!"-project is a very useful and valuable first step. These setup steps are the basics for any browser plugin, and you can build on this to create more advanced plugins.
-
@ ee11a5df:b76c4e49
2023-07-29 03:27:23Gossip: The HTTP Fetcher
Gossip is a desktop nostr client. This post is about the code that fetches HTTP resources.
Gossip fetches HTTP resources. This includes images, videos, nip05 json files, etc. The part of gossip that does this is called the fetcher.
We have had a fetcher for some time, but it was poorly designed and had problems. For example, it was never expiring items in the cache.
We've made a lot of improvements to the fetcher recently. It's pretty good now, but there is still room for improvement.
Caching
Our fetcher caches data. Each URL that is fetched is hashed, and the content is stored under a file in the cache named by that hash.
If a request is in the cache, we don't do an HTTP request, we serve it directly from the cache.
But cached data gets stale. Sometimes resources at a URL change. We generally check resources again after three days.
We save the server's ETag value for content, and when we check the content again we supply an If-None-Match header with the ETag so the server could respond with 304 Not Modified in which case we don't need to download the resource again, we just bump the filetime to now.
In the event that our cache data is stale, but the server gives us an error, we serve up the stale data (stale is better than nothing).
Queueing
We used to fire off HTTP GET requests as soon as we knew that we needed a resource. This was not looked on too kindly by servers and CDNs who were giving us either 403 Forbidden or 429 Too Many Requests.
So we moved into a queue system. The host is extracted from each URL, and each host is only given up to 3 requests at a time. If we want 29 images from the same host, we only ask for three, and the remaining 26 remain in the queue for next time. When one of those requests completes, we decrement the host load so we know that we can send it another request later.
We process the queue in an infinite loop where we wait 1200 milliseconds between passes. Passes take time themselves and sometimes must wait for a timeout. Each pass fetches potentially multiple HTTP resources in parallel, asynchronously. If we have 300 resources at 100 different hosts, three per host, we could get them all in a single pass. More likely a bunch of resources are at the same host, and we make multiple passes at it.
Timeouts
When we fetch URLs in parallel asynchronously, we wait until all of the fetches complete before waiting another 1200 ms and doing another loop. Sometimes one of the fetches times out. In order to keep things moving, we use short timeouts of 10 seconds for a connect, and 15 seconds for a response.
Handling Errors
Some kinds of errors are more serious than others. When we encounter these, we sin bin the server for a period of time where we don't try fetching from it until a specified period elapses.
-
@ 8fb140b4:f948000c
2023-08-22 12:14:34As the title states, scratch behind my ear and you get it. 🐶🐾🫡
-
@ ee11a5df:b76c4e49
2023-07-29 03:13:59Gossip: Switching to LMDB
Unlike a number of other nostr clients, Gossip has always cached events and related data in a local data store. Up until recently, SQLite3 has served this purpose.
SQLite3 offers a full ACID SQL relational database service.
Unfortunately however it has presented a number of downsides:
- It is not as parallel as you might think.
- It is not as fast as you might hope.
- If you want to preserve the benefit of using SQL and doing joins, then you must break your objects into columns, and map columns back into objects. The code that does this object-relational mapping (ORM) is not trivial and can be error prone. It is especially tricky when working with different types (Rust language types and SQLite3 types are not a 1:1 match).
- Because of the potential slowness, our UI has been forbidden from direct database access as that would make the UI unresponsive if a query took too long.
- Because of (4) we have been firing off separate threads to do the database actions, and storing the results into global variables that can be accessed by the interested code at a later time.
- Because of (4) we have been caching database data in memory, essentially coding for yet another storage layer that can (and often did) get out of sync with the database.
LMDB offers solutions:
- It is highly parallel.
- It is ridiculously fast when used appropriately.
- Because you cannot run arbitrary SQL, there is no need to represent the fields within your objects separately. You can serialize/deserialize entire objects into the database and the database doesn't care what is inside of the blob (yes, you can do that into an SQLite field, but if you did, you would lose the power of SQL).
- Because of the speed, the UI can look stuff up directly.
- We no longer need to fork separate threads for database actions.
- We no longer need in-memory caches of data. The LMDB data is already in-memory (it is memory mapped) so we just access it directly.
The one obvious downside is that we lose SQL. We lose the query planner. We cannot ask arbitrary question and get answers. Instead, we have to pre-conceive of all the kinds of questions we want to ask, and we have to write code that answers them efficiently. Often this involves building and maintaining indices.
Indices
Let's say I want to look at fiatjaf's posts. How do I efficiently pull out just his recent feed-related events in reverse chronological order? It is easy if we first construct the following index
key: EventKind + PublicKey + ReverseTime value: Event Id
In the above, '+' is just a concatenate operator, and ReverseTime is just some distant time minus the time so that it sorts backwards.
Now I just ask LMDB to start from (EventKind=1 + PublicKey=fiatjaf + now) and scan until either one of the first two fields change, or more like the time field gets too old (e.g. one month ago). Then I do it again for the next event kind, etc.
For a generalized feed, I have to scan a region for each person I follow.
Smarter indexes can be imagined. Since we often want only feed-related event kinds, that can be implicit in an index that only indexes those kinds of events.
You get the idea.
A Special Event Map
At first I had stored events into a K-V database under the Id of the event. Then I had indexes on events that output a set of Ids (as in the example above).
But when it comes to storing and retrieving events, we can go even faster than LMDB.
We can build an append-only memory map that is just a sequence of all the events we have, serialized, and in no particular order. Readers do not need a lock and multiple readers can read simultaneously. Writers will need to acquire a lock to append to the map and there may only be one writer at a time. However, readers can continue reading even while a writer is writing.
We can then have a K-V database that maps Id -> Offset. To get the event you just do a direct lookup in the event memory map at that offset.
The real benefit comes when we have other indexes that yield events, they can yield offsets instead of ids. Then we don't need to do a second lookup from the Id to the Event, we can just look directly at the offset.
Avoiding deserialization
Deserialization has a price. Sometimes it requires memory allocation (if the object is not already linear, e.g. variable lengthed data like strings and vectors are allocated on the heap) which can be very expensive if you are trying to scan 150,000 or so events.
We serialize events (and other objects where we can) with a serialization library called speedy. It does its best to preserve the data much like it is represented in memory, but linearized. Because events start with fixed-length fields, we know the offset into the serialized event where these first fields occur and we can directly extract the value of those fields without deserializing the data before it.
This comes in useful whenever we need to scan a large number of events. Search is the one situation where I know that we must do this. We can search by matching against the content of every feed-related event without fully deserialing any of them.
-
@ 8fb140b4:f948000c
2023-07-30 00:35:01Test Bounty Note
-
@ 8fb140b4:f948000c
2023-07-22 09:39:48Intro
This short tutorial will help you set up your own Nostr Wallet Connect (NWC) on your own LND Node that is not using Umbrel. If you are a user of Umbrel, you should use their version of NWC.
Requirements
You need to have a working installation of LND with established channels and connectivity to the internet. NWC in itself is fairly light and will not consume a lot of resources. You will also want to ensure that you have a working installation of Docker, since we will use a docker image to run NWC.
- Working installation of LND (and all of its required components)
- Docker (with Docker compose)
Installation
For the purpose of this tutorial, we will assume that you have your lnd/bitcoind running under user bitcoin with home directory /home/bitcoin. We will also assume that you already have a running installation of Docker (or docker.io).
Prepare and verify
git version - we will need git to get the latest version of NWC. docker version - should execute successfully and show the currently installed version of Docker. docker compose version - same as before, but the version will be different. ss -tupln | grep 10009- should produce the following output: tcp LISTEN 0 4096 0.0.0.0:10009 0.0.0.0: tcp LISTEN 0 4096 [::]:10009 [::]:**
For things to work correctly, your Docker should be version 20.10.0 or later. If you have an older version, consider installing a new one using instructions here: https://docs.docker.com/engine/install/
Create folders & download NWC
In the home directory of your LND/bitcoind user, create a new folder, e.g., "nwc" mkdir /home/bitcoin/nwc. Change to that directory cd /home/bitcoin/nwc and clone the NWC repository: git clone https://github.com/getAlby/nostr-wallet-connect.git
Creating the Docker image
In this step, we will create a Docker image that you will use to run NWC.
- Change directory to
nostr-wallet-connect
:cd nostr-wallet-connect
- Run command to build Docker image:
docker build -t nwc:$(date +'%Y%m%d%H%M') -t nwc:latest .
(there is a dot at the end) - The last line of the output (after a few minutes) should look like
=> => naming to docker.io/library/nwc:latest
nwc:latest
is the name of the Docker image with a tag which you should note for use later.
Creating docker-compose.yml and necessary data directories
- Let's create a directory that will hold your non-volatile data (DB):
mkdir data
- In
docker-compose.yml
file, there are fields that you want to replace (<> comments) and port “4321” that you want to make sure is open (check withss -tupln | grep 4321
which should return nothing). - Create
docker-compose.yml
file with the following content, and make sure to update fields that have <> comment:
version: "3.8" services: nwc: image: nwc:latest volumes: - ./data:/data - ~/.lnd:/lnd:ro ports: - "4321:8080" extra_hosts: - "localhost:host-gateway" environment: NOSTR_PRIVKEY: <use "openssl rand -hex 32" to generate a fresh key and place it inside ""> LN_BACKEND_TYPE: "LND" LND_ADDRESS: localhost:10009 LND_CERT_FILE: "/lnd/tls.cert" LND_MACAROON_FILE: "/lnd/data/chain/bitcoin/mainnet/admin.macaroon" DATABASE_URI: "/data/nostr-wallet-connect.db" COOKIE_SECRET: <use "openssl rand -hex 32" to generate fresh secret and place it inside ""> PORT: 8080 restart: always stop_grace_period: 1m
Starting and testing
Now that you have everything ready, it is time to start the container and test.
- While you are in the
nwc
directory (important), execute the following command and check the log output,docker compose up
- You should see container logs while it is starting, and it should not exit if everything went well.
- At this point, you should be able to go to
http://<ip of the host where nwc is running>:4321
and get to the interface of NWC - To stop the test run of NWC, simply press
Ctrl-C
, and it will shut the container down. - To start NWC permanently, you should execute
docker compose up -d
, “-d” tells Docker to detach from the session. - To check currently running NWC logs, execute
docker compose logs
to run it in tail mode add-f
to the end. - To stop the container, execute
docker compose down
That's all, just follow the instructions in the web interface to get started.
Updating
As with any software, you should expect fixes and updates that you would need to perform periodically. You could automate this, but it falls outside of the scope of this tutorial. Since we already have all of the necessary configuration in place, the update execution is fairly simple.
- Change directory to the clone of the git repository,
cd /home/bitcoin/nwc/nostr-wallet-connect
- Run command to build Docker image:
docker build -t nwc:$(date +'%Y%m%d%H%M') -t nwc:latest .
(there is a dot at the end) - Change directory back one level
cd ..
- Restart (stop and start) the docker compose config
docker compose down && docker compose up -d
- Done! Optionally you may want to check the logs:
docker compose logs
-
@ d2e97f73:ea9a4d1b
2023-04-11 19:36:53There’s a lot of conversation around the #TwitterFiles. Here’s my take, and thoughts on how to fix the issues identified.
I’ll start with the principles I’ve come to believe…based on everything I’ve learned and experienced through my past actions as a Twitter co-founder and lead:
- Social media must be resilient to corporate and government control.
- Only the original author may remove content they produce.
- Moderation is best implemented by algorithmic choice.
The Twitter when I led it and the Twitter of today do not meet any of these principles. This is my fault alone, as I completely gave up pushing for them when an activist entered our stock in 2020. I no longer had hope of achieving any of it as a public company with no defense mechanisms (lack of dual-class shares being a key one). I planned my exit at that moment knowing I was no longer right for the company.
The biggest mistake I made was continuing to invest in building tools for us to manage the public conversation, versus building tools for the people using Twitter to easily manage it for themselves. This burdened the company with too much power, and opened us to significant outside pressure (such as advertising budgets). I generally think companies have become far too powerful, and that became completely clear to me with our suspension of Trump’s account. As I’ve said before, we did the right thing for the public company business at the time, but the wrong thing for the internet and society. Much more about this here: https://twitter.com/jack/status/1349510769268850690
I continue to believe there was no ill intent or hidden agendas, and everyone acted according to the best information we had at the time. Of course mistakes were made. But if we had focused more on tools for the people using the service rather than tools for us, and moved much faster towards absolute transparency, we probably wouldn’t be in this situation of needing a fresh reset (which I am supportive of). Again, I own all of this and our actions, and all I can do is work to make it right.
Back to the principles. Of course governments want to shape and control the public conversation, and will use every method at their disposal to do so, including the media. And the power a corporation wields to do the same is only growing. It’s critical that the people have tools to resist this, and that those tools are ultimately owned by the people. Allowing a government or a few corporations to own the public conversation is a path towards centralized control.
I’m a strong believer that any content produced by someone for the internet should be permanent until the original author chooses to delete it. It should be always available and addressable. Content takedowns and suspensions should not be possible. Doing so complicates important context, learning, and enforcement of illegal activity. There are significant issues with this stance of course, but starting with this principle will allow for far better solutions than we have today. The internet is trending towards a world were storage is “free” and infinite, which places all the actual value on how to discover and see content.
Which brings me to the last principle: moderation. I don’t believe a centralized system can do content moderation globally. It can only be done through ranking and relevance algorithms, the more localized the better. But instead of a company or government building and controlling these solely, people should be able to build and choose from algorithms that best match their criteria, or not have to use any at all. A “follow” action should always deliver every bit of content from the corresponding account, and the algorithms should be able to comb through everything else through a relevance lens that an individual determines. There’s a default “G-rated” algorithm, and then there’s everything else one can imagine.
The only way I know of to truly live up to these 3 principles is a free and open protocol for social media, that is not owned by a single company or group of companies, and is resilient to corporate and government influence. The problem today is that we have companies who own both the protocol and discovery of content. Which ultimately puts one person in charge of what’s available and seen, or not. This is by definition a single point of failure, no matter how great the person, and over time will fracture the public conversation, and may lead to more control by governments and corporations around the world.
I believe many companies can build a phenomenal business off an open protocol. For proof, look at both the web and email. The biggest problem with these models however is that the discovery mechanisms are far too proprietary and fixed instead of open or extendable. Companies can build many profitable services that complement rather than lock down how we access this massive collection of conversation. There is no need to own or host it themselves.
Many of you won’t trust this solution just because it’s me stating it. I get it, but that’s exactly the point. Trusting any one individual with this comes with compromises, not to mention being way too heavy a burden for the individual. It has to be something akin to what bitcoin has shown to be possible. If you want proof of this, get out of the US and European bubble of the bitcoin price fluctuations and learn how real people are using it for censorship resistance in Africa and Central/South America.
I do still wish for Twitter, and every company, to become uncomfortably transparent in all their actions, and I wish I forced more of that years ago. I do believe absolute transparency builds trust. As for the files, I wish they were released Wikileaks-style, with many more eyes and interpretations to consider. And along with that, commitments of transparency for present and future actions. I’m hopeful all of this will happen. There’s nothing to hide…only a lot to learn from. The current attacks on my former colleagues could be dangerous and doesn’t solve anything. If you want to blame, direct it at me and my actions, or lack thereof.
As far as the free and open social media protocol goes, there are many competing projects: @bluesky is one with the AT Protocol, nostr another, Mastodon yet another, Matrix yet another…and there will be many more. One will have a chance at becoming a standard like HTTP or SMTP. This isn’t about a “decentralized Twitter.” This is a focused and urgent push for a foundational core technology standard to make social media a native part of the internet. I believe this is critical both to Twitter’s future, and the public conversation’s ability to truly serve the people, which helps hold governments and corporations accountable. And hopefully makes it all a lot more fun and informative again.
💸🛠️🌐 To accelerate open internet and protocol work, I’m going to open a new category of #startsmall grants: “open internet development.” It will start with a focus of giving cash and equity grants to engineering teams working on social media and private communication protocols, bitcoin, and a web-only mobile OS. I’ll make some grants next week, starting with $1mm/yr to Signal. Please let me know other great candidates for this money.
-
@ ee11a5df:b76c4e49
2023-07-29 02:52:13Gossip: Zaps
Gossip is a desktop nostr client. This post is about the code that lets users send lightning zaps to each other (NIP-57).
Gossip implemented Zaps initially on 20th of June, 2023.
Gossip maintains a state of where zapping is at, one of: None, CheckingLnurl, SeekingAmount, LoadingInvoice, and ReadyToPay.
When you click the zap lightning bolt icon, Gossip moves to the CheckingLnurl state while it looks up the LN URL of the user.
If this is successful, it moves to the SeekingAmount state and presents amount options to the user.
Once a user chooses an amount, it moves to the LoadingInvoice state where it interacts with the lightning node and receives and checks an invoice.
Once that is complete, it moves to the ReadyToPay state, where it presents the invoice as a QR code for the user to scan with their phone. There is also a copy button so they can pay it from their desktop computer too.
Gossip also loads zap receipt events and associates them with the event that was zapped, tallying a zap total on that event. Gossip is unfortunately not validating these receipts very well currently, so fake zap receipts can cause an incorrect total to show. This remains an open issue.
Another open issue is the implementation of NIP-46 Nostr Connect and NIP-47 Wallet Connect.
-
@ 82341f88:fbfbe6a2
2023-04-11 19:36:53There’s a lot of conversation around the #TwitterFiles. Here’s my take, and thoughts on how to fix the issues identified.
I’ll start with the principles I’ve come to believe…based on everything I’ve learned and experienced through my past actions as a Twitter co-founder and lead:
- Social media must be resilient to corporate and government control.
- Only the original author may remove content they produce.
- Moderation is best implemented by algorithmic choice.
The Twitter when I led it and the Twitter of today do not meet any of these principles. This is my fault alone, as I completely gave up pushing for them when an activist entered our stock in 2020. I no longer had hope of achieving any of it as a public company with no defense mechanisms (lack of dual-class shares being a key one). I planned my exit at that moment knowing I was no longer right for the company.
The biggest mistake I made was continuing to invest in building tools for us to manage the public conversation, versus building tools for the people using Twitter to easily manage it for themselves. This burdened the company with too much power, and opened us to significant outside pressure (such as advertising budgets). I generally think companies have become far too powerful, and that became completely clear to me with our suspension of Trump’s account. As I’ve said before, we did the right thing for the public company business at the time, but the wrong thing for the internet and society. Much more about this here: https://twitter.com/jack/status/1349510769268850690
I continue to believe there was no ill intent or hidden agendas, and everyone acted according to the best information we had at the time. Of course mistakes were made. But if we had focused more on tools for the people using the service rather than tools for us, and moved much faster towards absolute transparency, we probably wouldn’t be in this situation of needing a fresh reset (which I am supportive of). Again, I own all of this and our actions, and all I can do is work to make it right.
Back to the principles. Of course governments want to shape and control the public conversation, and will use every method at their disposal to do so, including the media. And the power a corporation wields to do the same is only growing. It’s critical that the people have tools to resist this, and that those tools are ultimately owned by the people. Allowing a government or a few corporations to own the public conversation is a path towards centralized control.
I’m a strong believer that any content produced by someone for the internet should be permanent until the original author chooses to delete it. It should be always available and addressable. Content takedowns and suspensions should not be possible. Doing so complicates important context, learning, and enforcement of illegal activity. There are significant issues with this stance of course, but starting with this principle will allow for far better solutions than we have today. The internet is trending towards a world were storage is “free” and infinite, which places all the actual value on how to discover and see content.
Which brings me to the last principle: moderation. I don’t believe a centralized system can do content moderation globally. It can only be done through ranking and relevance algorithms, the more localized the better. But instead of a company or government building and controlling these solely, people should be able to build and choose from algorithms that best match their criteria, or not have to use any at all. A “follow” action should always deliver every bit of content from the corresponding account, and the algorithms should be able to comb through everything else through a relevance lens that an individual determines. There’s a default “G-rated” algorithm, and then there’s everything else one can imagine.
The only way I know of to truly live up to these 3 principles is a free and open protocol for social media, that is not owned by a single company or group of companies, and is resilient to corporate and government influence. The problem today is that we have companies who own both the protocol and discovery of content. Which ultimately puts one person in charge of what’s available and seen, or not. This is by definition a single point of failure, no matter how great the person, and over time will fracture the public conversation, and may lead to more control by governments and corporations around the world.
I believe many companies can build a phenomenal business off an open protocol. For proof, look at both the web and email. The biggest problem with these models however is that the discovery mechanisms are far too proprietary and fixed instead of open or extendable. Companies can build many profitable services that complement rather than lock down how we access this massive collection of conversation. There is no need to own or host it themselves.
Many of you won’t trust this solution just because it’s me stating it. I get it, but that’s exactly the point. Trusting any one individual with this comes with compromises, not to mention being way too heavy a burden for the individual. It has to be something akin to what bitcoin has shown to be possible. If you want proof of this, get out of the US and European bubble of the bitcoin price fluctuations and learn how real people are using it for censorship resistance in Africa and Central/South America.
I do still wish for Twitter, and every company, to become uncomfortably transparent in all their actions, and I wish I forced more of that years ago. I do believe absolute transparency builds trust. As for the files, I wish they were released Wikileaks-style, with many more eyes and interpretations to consider. And along with that, commitments of transparency for present and future actions. I’m hopeful all of this will happen. There’s nothing to hide…only a lot to learn from. The current attacks on my former colleagues could be dangerous and doesn’t solve anything. If you want to blame, direct it at me and my actions, or lack thereof.
As far as the free and open social media protocol goes, there are many competing projects: @bluesky is one with the AT Protocol, nostr another, Mastodon yet another, Matrix yet another…and there will be many more. One will have a chance at becoming a standard like HTTP or SMTP. This isn’t about a “decentralized Twitter.” This is a focused and urgent push for a foundational core technology standard to make social media a native part of the internet. I believe this is critical both to Twitter’s future, and the public conversation’s ability to truly serve the people, which helps hold governments and corporations accountable. And hopefully makes it all a lot more fun and informative again.
💸🛠️🌐 To accelerate open internet and protocol work, I’m going to open a new category of #startsmall grants: “open internet development.” It will start with a focus of giving cash and equity grants to engineering teams working on social media and private communication protocols, bitcoin, and a web-only mobile OS. I’ll make some grants next week, starting with $1mm/yr to Signal. Please let me know other great candidates for this money.
-
@ d6dc9554:d0593a0c
2023-09-21 18:37:14Nas blockchains PoW o consenso é alcançado por meio de prova de trabalho computacional e o objetivo principal é evitar que atores mal intencionados consumam ou ataquem a rede de forma perigosa. Este método de consenso requer um grande poder computacional para criar novos blocos, mas é muito simples, por parte de outros, verificar esse trabalho. Por isso se diz que PoW é uma estratégia assimétrica.
Nas blockchains PoS o objetivo é o mesmo, criar blocos e chegar a um consenso, mas nas PoS não é necessário um poder de processamento tão grande como nas PoW. Em média as PoS gastam menos de 1% da energia das PoW. Nas PoS os mineradores são chamados de validadores. Enquanto que nas PoW quem fica com a recompensa é quem resolve primeiro a charada matemática, nas PoS o validador que vai ganhar a recompensa é escolhido de forma aleatória, mas dando maior probabilidade aos que respeitem determinados critérios. A comunidade bitcoin é muito relutante em relação a PoS porque é mais fácil conseguir uma grande quantidade da moeda em causa do que mais que 51% de poder processamento. Logo as PoS são mais vulneráveis no que toca a segurança. Mas aqui cada caso é um caso e é preciso fazer essa análise para cada moeda.
As blockchains PoW tendem a ser mais descentralizadas enquanto as PoS mais centralizadas, não só em acesso, mas também em operação. Mais de metade dos validadores de ethereum estão na cloud da amazon. As blockchains PoW apresentam grandes desafios na escalabilidade de operação, muitas vezes exigindo soluções de segunda camada (L2), enquanto que as PoS possuem mecanismos de escalabilidade muito mais flexíveis. Os algoritmos PoW são muito mais simples de implementar do que os PoS e, portanto, menos suscetíveis a erros. Um bom exemplo é o PoS da ethereum que estava a ser implementado desde 2018.
-
@ b12b632c:d9e1ff79
2023-07-21 19:45:20I love testing every new self hosted app and I can say that Nostr "world" is really good regarding self hosting stuff.
Today I tested a Nostr relay named Strfry.
Strfry is really simple to setup and support a lot's of Nostr NIPs.
Here is the list of what it is able to do :
- Supports most applicable NIPs: 1, 2, 4, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40
- No external database required: All data is stored locally on the filesystem in LMDB
- Hot reloading of config file: No server restart needed for many config param changes
- Zero downtime restarts, for upgrading binary without impacting users
- Websocket compression: permessage-deflate with optional sliding window, when supported by clients
- Built-in support for real-time streaming (up/down/both) events from remote relays, and bulk import/export of events from/to jsonl files
- negentropy-based set reconcilliation for efficient syncing with remote relays
Installation with docker compose (v2)
Spoiler : you need to have a computer with more than 1 (v)Core / 2GB of RAM to build the docker image locally. If not, this below might crash your computer during docker image build. You may need to use a prebuilt strfry docker image.
I assume you've read my first article on Managing domain with Nginx Proxy Manager because I will use the NPM docker compose stack to publish strfry Nostr relay. Without the initial NPM configuration done, it may not work as expected. I'll use the same docker-compose.yml file and folder.
Get back in the "npm-stack" folder :
cd npm-stack
Cloning the strfry github repo locally :
git clone https://github.com/hoytech/strfry.git
Modify the docker-compose file to locate the strfry configuration data outside of the folder repo directory to avoid mistake during futures upgrades (CTRL + X, S & ENTER to quit and save modifications) :
nano docker-compose.yml
You don't have to insert the Nginx Proxy Manager part, you should already have it into the file. If not, check here. You should only have to add the strfry part.
``` version: '3.8' services: # should already be present into the docker-compose.yml app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format
: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./nginxproxymanager/data:/data - ./nginxproxymanager/letsencrypt:/etc/letsencrypt
strfry-nostr-relay: container_name: strfry build: ./strfry volumes: - ./strfry-data/strfry.conf:/etc/strfry.conf - ./strfry-data/strfry-db:/app/strfry-db
ports is commented by NPM will access through docker internal network
no need to expose strfry port directly to the internet
ports:
- "7777:7777"
```
Before starting the container, we need to customize the strfry configuration file "strfry.conf". We'll copy the strfry configuration file and place it into the "strfry-data" folder to modify it with our own settings :
mkdir strfry-data && cp strfry/strfry.conf strfry-data/
And modify the strfry.conf file with your own settings :
nano strfry-data/strfry.conf
You can modify all the settings you need but the basics settings are :
- bind = "127.0.0.1" --> bind = "0.0.0.0" --> otherwise NPM won't be able to contact the strfry service
-
name = "strfry default" --> name of your nostr relay
-
description = "This is a strfry instance." --> your nostr relay description
-
pubkey = "" --> your pubkey in hex format. You can use the Damu's tool to generate your hex key from your npub key : https://damus.io/key/
-
contact = "" --> your email
``` relay { # Interface to listen on. Use 0.0.0.0 to listen on all interfaces (restart required) bind = "127.0.0.1"
# Port to open for the nostr websocket protocol (restart required) port = 7777 # Set OS-limit on maximum number of open files/sockets (if 0, don't attempt to set) (restart required) nofiles = 1000000 # HTTP header that contains the client's real IP, before reverse proxying (ie x-real-ip) (MUST be all lower-case) realIpHeader = "" info { # NIP-11: Name of this server. Short/descriptive (< 30 characters) name = "strfry default" # NIP-11: Detailed information about relay, free-form description = "This is a strfry instance." # NIP-11: Administrative nostr pubkey, for contact purposes pubkey = "" # NIP-11: Alternative administrative contact (email, website, etc) contact = "" }
```
You can now start the docker strfry docker container :
docker compose up -d
This command will take a bit of time because it will build the strfry docker image locally before starting the container. If your VPS doesn't have lot's of (v)CPU/RAM, it could fail (nothing happening during the docker image build). My VPS has 1 vCore / 2GB of RAM and died few seconds after the build beginning.
If it's the case, you can use prebuilt strfry docker image available on the Docker hub : https://hub.docker.com/search?q=strfry&sort=updated_at&order=desc
That said, otherwise, you should see this :
``` user@vps:~/npm-stack$ docker compose up -d [+] Building 202.4s (15/15) FINISHED
=> [internal] load build definition from Dockerfile 0.2s => => transferring dockerfile: 724B 0.0s => [internal] load .dockerignore 0.3s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ubuntu:jammy 0.0s => [build 1/7] FROM docker.io/library/ubuntu:jammy 0.4s => [internal] load build context 0.9s => => transferring context: 825.64kB 0.2s => [runner 2/4] WORKDIR /app 1.3s => [build 2/7] WORKDIR /build 1.5s => [runner 3/4] RUN apt update && apt install -y --no-install-recommends liblmdb0 libflatbuffers1 libsecp256k1-0 libb2-1 libzstd1 && rm -rf /var/lib/apt/lists/* 12.4s => [build 3/7] RUN apt update && apt install -y --no-install-recommends git g++ make pkg-config libtool ca-certificates libyaml-perl libtemplate-perl libregexp-grammars-perl libssl-dev zlib1g-dev l 55.5s => [build 4/7] COPY . . 0.9s => [build 5/7] RUN git submodule update --init 2.6s => [build 6/7] RUN make setup-golpe 10.8s => [build 7/7] RUN make -j4 126.8s => [runner 4/4] COPY --from=build /build/strfry strfry 1.3s => exporting to image 0.8s => => exporting layers 0.8s => => writing image sha256:1d346bf343e3bb63da2e4c70521a8350b35a02742dd52b12b131557e96ca7d05 0.0s => => naming to docker.io/library/docker-compose_strfry-nostr-relay 0.0sUse 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 02/02
⠿ Container strfry Started 11.0s ⠿ Container npm-stack-app-1 Running ```You can check if everything is OK with strfry container by checking the container logs :
user@vps:~/npm-stack$ docker logs strfry date time ( uptime ) [ thread name/id ] v| 2023-07-21 19:26:58.514 ( 0.039s) [main thread ]INFO| arguments: /app/strfry relay 2023-07-21 19:26:58.514 ( 0.039s) [main thread ]INFO| Current dir: /app 2023-07-21 19:26:58.514 ( 0.039s) [main thread ]INFO| stderr verbosity: 0 2023-07-21 19:26:58.514 ( 0.039s) [main thread ]INFO| ----------------------------------- 2023-07-21 19:26:58.514 ( 0.039s) [main thread ]INFO| CONFIG: Loading config from file: /etc/strfry.conf 2023-07-21 19:26:58.529 ( 0.054s) [main thread ]INFO| CONFIG: successfully installed 2023-07-21 19:26:58.533 ( 0.058s) [Websocket ]INFO| Started websocket server on 0.0.0.0:7777
Now, we have to create the subdomain where strfry Nostr relay will be accessible. You need to connect to your Nginx Proxy Manager admin UI and create a new proxy host with these settings :
"Details" tab (Websockets support is mandatory!, you can replace "strfry" by whatever you like, for instance : mybeautifulrelay.yourdomain.tld)
"Details" tab:
"SSL" tab:
And click on "Save"
If everything is OK, when you go to https://strfry.yourdomain.tld you should see :
To verify if strfry is working properly, you can test it with the (really useful!) website https://nostr.watch. You have to insert your relay URL into the nostr.watch URL like this : https://nostr.watch/relay/strfry.yourdomain.tld
You should see this :
If you are seeing your server as online, readable and writable, you made it ! You can add your Nostr strfry server to your Nostr prefered relay and begin to publish notes ! 🎇
Future work:
Once done, strfry will work like a charm but you may need to have more work to update strfry in the near future. I'm currently working on a bash script that will :
- Updatethe "strfry" folder,
- Backup the "strfry.conf" file,
- Download the latest "strfry.conf" from strfry github repo,
- Inject old configuration settings into the new "strfry.conf" file,
- Compose again the stack (rebuilding the image to get the latest code updates),
- etc.
Tell me if you need the script!
Voilààààà
See you soon in another Fractalized story!
-
@ b12b632c:d9e1ff79
2023-07-21 14:19:38Self hosting web applications comes quickly with the need to deal with HTTPS protocol and SSL certificates. The time where web applications was published over the 80/TCP port without any encryption is totally over. Now we have Let's Encrypt and other free certification authority that lets us play web applications with, at least, the basic minimum security required.
Second part of web self hosting stuff that is really useful is the web proxifycation.
It's possible to have multiple web applications accessible through HTTPS but as we can't use the some port (spoiler: we can) we are forced to have ugly URL as https://mybeautifudomain.tld:8443.
This is where Nginx Proxy Manager (NPM) comes to help us.
NPM, as gateway, will listen on the 443 https port and based on the subdomain you want to reach, it will redirect the network flow to the NPM differents declared backend ports. NPM will also request HTTPS cert for you and let you know when the certificate expires, really useful.
We'll now install NPM with docker compose (v2) and you'll see, it's very easy.
You can find the official NPM setup instructions here.
But before we absolutely need to do something. You need to connect to the registrar where you bought your domain name and go into the zone DNS section.You have to create a A record poing to your VPS IP. That will allow NPM to request SSL certificates for your domain and subdomains.
Create a new folder for the NPM docker stack :
mkdir npm-stack && cd npm-stack
Create a new docker-compose.yml :
nano docker-compose.yml
Paste this content into it (CTRL + X ; Y & ENTER to save/quit) :
``` version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format
: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./nginxproxymanager/data:/data - ./nginxproxymanager/letsencrypt:/etc/letsencrypt
```
You'll not believe but it's done. NPM docker compose configuration is done.
To start Nginx Proxy Manager with docker compose, you just have to :
docker compose up -d
You'll see :
user@vps:~/tutorials/npm-stack$ docker compose up -d [+] Running 2/2 ✔ Network npm-stack_default Created ✔ Container npm-stack-app-1 Started
You can check if NPM container is started by doing this command :
docker ps
You'll see :
user@vps:~/tutorials/npm-stack$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bc5ea8ac9c8 jc21/nginx-proxy-manager:latest "/init" About a minute ago Up About a minute 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp npm-stack-app-1
If the command show "Up X minutes" for the npm-stack-app-1, you're good to go! You can access to the NPM admin UI by going to http://YourIPAddress:81.You shoud see :
The default NPM login/password are : admin@example.com/changeme .If the login succeed, you should see a popup asking to edit your user by changing your email password :
And your password :
Click on "Save" to finish the login. To verify if NPM is able to request SSL certificates for you, create first a subdomain for the NPM admin UI : Click on "Hosts" and "Proxy Hosts" :
Followed by "Add Proxy Host"
If you want to access the NPM admin UI with https://admin.yourdomain.tld, please set all the parameters like this (I won't explain each parameters) :
Details tab :
SSL tab :
And click on "Save".
NPM will request the SSL certificate "admin.yourdomain.tld" for you.
If you have an erreor message "Internal Error" it's probably because your domaine DNS zone is not configured with an A DNS record pointing to your VPS IP.
Otherwise you should see (my domain is hidden) :
Clicking on the "Source" URL link "admin.yourdomain.tld" will open a pop-up and, surprise, you should see the NPM admin UI with the URL "https://admin.yourdomain.tld" !
If yes, bravo, everything is OK ! 🎇
You know now how to have a subdomain of your domain redirecting to a container web app. In the next blog post, you'll see how to setup a Nostr relay with NPM ;)
Voilààààà
See you soon in another Fractalized story!
-
@ 7d4417d5:3eaf36d4
2023-08-19 01:05:59I'm learning as I go, so take the text below for what it is: my notes on the process. These steps could become outdated quickly, and I may have some wrong assumptions at places. Either way, I have had success, and would like to share my experience for anyone new to the process. If I have made any errors, please reply with corrections so that others may avoid potential pitfalls.
!!! If you have "KYC Bitcoin", keep it in separate wallets from your "Anonymous Bitcoin". Any Anonymous Bitcoin in a wallet with KYC Bitcoin becomes 100% KYC Bitcoin.
!!! It took me several days to get all the right pieces set up before I could even start an exchange with someone.
!!! Using a VPN is highly recommended. If you're not already using one, take the time to find one that suits you and get it running.
!!! If you don't normally buy Amazon Gift Cards, start doing so now, and just send them to yourself, or friends that will give you cash in return, etc. For my first trade, Amazon locked me out of my account for about 22 hours, while I was in the middle of an exchange. All because I had never purchased an Amazon Gift Card before. It was quite nerve wracking. My second trade was for $300, and although my Amazon account wasn't shut down, that order had a status of "Sending" for about 22 hours, due to the large amount. In each of these cases I had multiple phone calls with their customer support, all of whom gave me false expectations. Had I already been sending gift cards to the anonymous email address that I created in the steps below, and maybe other anonymous email addresses that I could make, then I might not have been stalled so much.
-
Install Tor Browser for your OS. The RoboSats.com website issues a warning if you are not using Tor Browser. If you don't know what Tor is, I won't explain it all here, but trust me, it's cool and helps keep you anonymous. If you use Firefox, the interface will look very familiar to you.
-
Create a KYC-free e-mail address. I used tutanota.com in Firefox, as it would not allow me to create an account using Tor Browser. After the account was created, using Tor Browser to login, check emails, etc. has been working perfectly. Tutanota requires a 48 hour (or less) waiting period to prevent bots from using their system. You'll be able to login, and even draft an email, but you won't be able to send. After you've been approved, you should be able to login and send an email to your new address. It should show up in your Inbox almost instantly if it's working.
-
Have, or create, at least one Lightning wallet that is compatible with RoboSats.com and has no KYC Bitcoin in it. The RoboSats website has a compatibility chart available to find the best wallet for you. During an exchange on RoboSats, you will need to put up an escrow payment, or bond, in Satoshis. This amount is usually 3% of the total amount being exchanged. If the exchange is successful, the bond payment is canceled, leaving that amount in your wallet untouched, and with no record of it having been used as escrow. If you don't hold up your end of the trade, the bond amount will be transfered from your wallet. I created a wallet, using my new email address, with the Alby extension in the Tor Browser. This anonymous wallet was empty, so I used a separate wallet for the bond payment of my first trade. This wallet had KYC Bitcoin, but since it is being used for a bond payment, and no transaction will be recorded if everything goes okay, I don't mind taking the minuscule risk. After the first trade, I don't need to use the "KYC wallet", and I will use only my anonymous Lightning wallet for transactions related to performing a trade.
-
Create a new Robot Token by going to RoboSats using the Tor Browser. Copy the Token (Robot ID) to a text file as a temporary backup. It is recommended to create a new robot-token for every session of exchanges you make.
-
Select "Offers" to browse what others are presenting. "Create" is for when you want to create an offer of your own. You may need to create your own offer if none of the existing offers match your criteria.
-
Select "Buy" at the top of the page.
-
Select your currency (USD).
-
Select your payment methods by typing "amazon" and selecting (Amazon Gift Card). Repeat this process and select (Amazon USA Gift Card).
-
Determine Priorities - If you prefer to trade quickly, and don't care as much about premiums, look for users with a green dot on the upper-right of their robot icon. If you're not in a hurry, sort users by premium and select the best deal, even if they are inactive. They may become active once they are notified that their offer has activity from you.
-
The Definition of Price = the price with the premium added, but not the bond
-
A. Find A Compatible Offer - Select the row of the desired offer and enter the amount you would like to buy. i.e. $100 If you do not find a compatible offer, you will have to create your own offer.
B. **Create An Offer** - First, take a look at "Sell" offers for your same currency and payment method(s) that you will be using. Take note of the premium those buyers are willing to pay. If your premium is drastically less than theirs, your offer may get ignored. Select "Create" at the bottom of the screen. There is a slider at the top of the screen, select it to see all the options. Select "Buy". Enter the minimum and maximum amount that you wish to spend. Type "amazon" to select the methods that you would like to use (Amazon Gift Card, Amazon USA Gift Card). For "Premium Over Market", enter an amount that is competitive with premiums you saw at the start of this step and do not use the % sign! You can adjust the duration, timer, and bond amount, but I leave those at their default settings. Select the "Create Order" button, and follow the instructions for making a bond payment.
-
Pay the Bond - Copy the invoice that is presented. From your wallet that contains bond funds, select "Send", and paste the invoice as the recipient. This money will never leave your account if the exchange completes without issue. No transaction will be recorded. If there is a complication with the exchange, it is possible that this transaction will complete.
-
Create and Submit Your Invoice for Their Bitcoin Payment To You - Select "Lightning", if not selected by default.* Select the Copy Icon to copy the correct amount of Satoshis. This amount already has the premium deducted. From your anonymous Lightning Wallet, select "Receive", and paste the Satoshi amount. If you enter a description, it's probably best to keep it cryptic. Copy the invoice and paste it into RoboSats; then select "Submit".
* If you plan on "mixing" your Bitcoin after purchase, it may be better to select "On Chain" and pay the necessary fees swap and mining fees. In the example this comes from, Sparrow wallet is used and has whirlpool ability in its interface.
-
Connect With Seller and Send Funds - Greet the seller in the chat window. The seller has now provided RoboSats with the Bitcoin to transfer to you. Your move is to buy an Amazon eGift Card for the amount of the trade. Log in to your Amazon account and start the process of buying an eGift card. For delivery there is the option of email or txt message. Ask the seller what their preference is, and get their address, or phone number, to enter into Amazon's form. Complete the purchase process on Amazon, and check the status of your order. Once you see the status of "Sent", go back to RoboSats in your Tor Browser.
-
Confirm Your Payment - Select the "Confirm ___ USD Sent" button and notify the seller to check their e-mail/txt messages.
-
Seller Confirmation - Once the seller select their "Confirm" button, the trade will immediately end with a confirmation screen.
-
Verify - If you check the anonymous wallet, the new amount should be presented.
-
-
@ e6817453:b0ac3c39
2023-08-12 15:42:22The Zooko’s Triangle is a concept in the realm of naming systems, specifically for decentralized or distributed networks. It was named after Zooko Wilcox-O’Hearn, a computer scientist and cypherpunk known for his work on the Zcash cryptocurrency. The triangle illustrates a trade-off between three desirable properties in a naming system:
- Human-meaningful: Names are easily understood and remembered by humans.
- Decentralized: No central authority controls the allocation or management of names.
- Secure: Names are unique and cannot be easily taken or manipulated by others.
Zooko’s Triangle posits that achieving all three properties in a single system is difficult. Traditionally, a system could have only two of the three properties, leading to various combinations of naming systems with their respective advantages and disadvantages.
However, recent developments in cryptographic and distributed systems have led to solutions that challenge the traditional constraints of Zooko’s Triangle. One such system is the Decentralized Identifiers (DIDs).
DIDs
Decentralized Identifiers (DIDs) are a new identifier for verifiable, decentralized digital identity. DIDs are designed to be self-sovereign, meaning that individuals or organizations control their identifiers without relying on a central authority. DID systems are built on top of decentralized networks, such as blockchain or distributed ledgers, providing a secure and tamper-proof infrastructure for identity management.
DIDs aim to achieve the three properties of Zooko’s Triangle:
- Human-meaningful: While DIDs may not be human-meaningful due to their cryptographic nature, they can be associated with human-readable names or aliases.
- Decentralized: DIDs are managed on decentralized networks, removing the need for a central authority.
- Secure: The decentralized nature of DIDs, combined with cryptographic techniques, ensures that identifiers are unique, secure, and resistant to tampering.
In summary, Zooko’s Triangle presents a trade-off between human-meaningful, decentralized, and secure properties in naming systems. Decentralized Identifiers (DIDs) are an example of a system that seeks to overcome the traditional limitations of the triangle by leveraging decentralized networks and cryptographic techniques to provide a more comprehensive solution for digital identity management.
-
@ b12b632c:d9e1ff79
2023-07-20 20:12:39Self hosting web applications comes quickly with the need to deal with HTTPS protocol and SSL certificates. The time where web applications was published over the 80/TCP port without any encryption is totally over. Now we have Let's Encrypt and other free certification authority that lets us play web applications with, at least, the basic minimum security required.
Second part of web self hosting stuff that is really useful is the web proxifycation.
It's possible to have multiple web applications accessible through HTTPS but as we can't use the some port (spoiler: we can) we are forced to have ugly URL as https://mybeautifudomain.tld:8443.
This is where Nginx Proxy Manager (NPM) comes to help us.
NPM, as gateway, will listen on the 443 https port and based on the subdomain you want to reach, it will redirect the network flow to the NPM differents declared backend ports. NPM will also request HTTPS cert for you and let you know when the certificate expires, really useful.
We'll now install NPM with docker compose (v2) and you'll see, it's very easy.
You can find the official NPM setup instructions here.
But before we absolutely need to do something. You need to connect to the registrar where you bought your domain name and go into the zone DNS section.You have to create a A record poing to your VPS IP. That will allow NPM to request SSL certificates for your domain and subdomains.
Create a new folder for the NPM docker stack :
mkdir npm-stack && cd npm-stack
Create a new docker-compose.yml :
nano docker-compose.yml
Paste this content into it (CTRL + X ; Y & ENTER to save/quit) :
``` version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format
: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./nginxproxymanager/data:/data - ./nginxproxymanager/letsencrypt:/etc/letsencrypt
```
You'll not believe but it's done. NPM docker compose configuration is done.
To start Nginx Proxy Manager with docker compose, you just have to :
docker compose up -d
You'll see :
user@vps:~/tutorials/npm-stack$ docker compose up -d [+] Running 2/2 ✔ Network npm-stack_default Created ✔ Container npm-stack-app-1 Started
You can check if NPM container is started by doing this command :
docker ps
You'll see :
user@vps:~/tutorials/npm-stack$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7bc5ea8ac9c8 jc21/nginx-proxy-manager:latest "/init" About a minute ago Up About a minute 0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp npm-stack-app-1
If the command show "Up X minutes" for the npm-stack-app-1, you're good to go! You can access to the NPM admin UI by going to http://YourIPAddress:81.You shoud see :
The default NPM login/password are : admin@example.com/changeme .If the login succeed, you should see a popup asking to edit your user by changing your email password :
And your password :
Click on "Save" to finish the login. To verify if NPM is able to request SSL certificates for you, create first a subdomain for the NPM admin UI : Click on "Hosts" and "Proxy Hosts" :
Followed by "Add Proxy Host"
If you want to access the NPM admin UI with https://admin.yourdomain.tld, please set all the parameters like this (I won't explain each parameters) :
Details tab :
SSL tab :
And click on "Save".
NPM will request the SSL certificate "admin.yourdomain.tld" for you.
If you have an erreor message "Internal Error" it's probably because your domaine DNS zone is not configured with an A DNS record pointing to your VPS IP.
Otherwise you should see (my domain is hidden) :
Clicking on the "Source" URL link "admin.yourdomain.tld" will open a pop-up and, surprise, you should see the NPM admin UI with the URL "https://admin.yourdomain.tld" !
If yes, bravo, everything is OK ! 🎇
You know now how to have a subdomain of your domain redirecting to a container web app. In the next blog post, you'll see how to setup a Nostr relay with NPM ;)
Voilààààà
See you soon in another Fractalized story!
-
@ b12b632c:d9e1ff79
2023-07-19 00:17:02Welcome to a new Fractalized episode of "it works but I can do better"!
Original blog post from : https://fractalized.ovh/use-ghost-blog-to-serve-your-nostr-nip05-and-lnurl/
Few day ago, I wanted to set my Ghost blog (this one) as root domain for Fractalized instead of the old basic Nginx container that served my NIP05. I succeed to do it with Nginx Proxy Manager (I need to create a blog post because NPM is really awesome) but my NIP05 was down.
Having a bad NIP05 on Amethyst is now in the top tier list of my worst nightmares.
As a reminder, to have a valid NIP05 on your prefered Nostr client, you need to have a file named "nostr.json" in a folder ".well-known" located in the web server root path (subdomain or domain). The URL shoud look like this http://domain.tld/.well-known/nostr.json
PS : this doesn't work with Ghost as explained later. If you are here for Ghost, skip this and go directly to 1).
You should have these info inside the nostr.json file (JSON format) :
{ "names": { "YourUsername": "YourNPUBkey" } }
You can test it directly by going to the nostr.json URL, it should show you the JSON.
It was working like a charm on my previous Nginx and I needed to do it on my new Ghost. I saw on Google that I need to have the .well-known folder into the Ghost theme root folder (In my case I choosed the Solo theme). I created the folder, put my nostr.json file inside it and crossed my fingers. Result : 404 error.
I had to search a lot but it seems that Ghost forbid to server json file from its theme folders. Maybe for security reasons, I don't know. Nevertheless Ghost provide a method to do it (but it requires more than copy/paste some files in some folders) => routes
In the same time that configuring your NIP05, I also wanted to setup an LNURL to be zapped to pastagringo@fractalized.ovh (configured into my Amethyst profile). If you want more infromation on LNURL, it's very well explained here.
Because I want to use my Wallet of Satoshi sats wallet "behind" my LNURL, you'll have to read carefuly the EzoFox's blog post that explains how to retrieve your infos from Alby or WoS.
1) Configuring Ghost routes
Add the new route into the routes.yaml (accessible from "Settings" > "Labs" > "Beta features" > "Routes" ; you need to download the file, modify it and upload it again) to let him know where to look for the nostr.json file.
Here is the content of my routes.yaml file :
``` routes: /.well-known/nostr.json/: template: _nostr-json content_type: application/json /.well-known/lnurlp/YourUsername/: template: _lnurlp-YourUsername content_type: application/json collections: /: permalink: /{slug}/ template: index
taxonomies: tag: /tag/{slug}/ author: /author/{slug}/ ```
=> template : name of the file that ghost will search localy
=> content_type : file type (JSON is required for the NIP05)
The first route is about my NIP05 and the second route is about my LNURL.
2) Creating Ghost route .hbs files
To let Ghost serve our JSON content, I needed to create the two .hbs file filled into the routes.yaml file. These files need to be located into the root directory of the Ghost theme used. For me, it was Solo.
Here is there content of both files :
"_nostr-json.hbs"
{ "names": { "YourUsername": "YourNPUBkey" } }
"_lnurlp-pastagringo.hbs" (in your case, _lnurlp-YourUsername.hbs)
{ "callback":"https://livingroomofsatoshi.com/api/v1/lnurl/payreq/XXXXX", "maxSendable":100000000000, "minSendable":1000, "metadata":"[[\"text/plain\",\"Pay to Wallet of Satoshi user: burlyring39\"],[\"text/identifier\",\"YourUsername@walletofsatoshi.com\"]]", "commentAllowed":32, "tag":"payRequest", "allowsNostr":true, "nostrPubkey":"YourNPUBkey" }
After doing that, you almost finished, you just have to restart your Ghost blog. As I use Ghost from docker container, I just had to restart the container.
To verify if everything is working, you have to go in the routes URL created earlier:
https://YourDomain.tld/.well-known/nostr.json
and
https://YourDomain.tld/.well-known/lnurlp/YourUsername
Both URL should display JSON files from .hbs created ealier.
If it's the case, you can add your NIP05 and LNURL into your Nostr profile client and you should be able to see a valid tick from your domain and to be zapped on your LNURL (sending zaps to your WoS or Alby backend wallet).
Voilààààà
See you soon in another Fractalized story!
-
@ e6817453:b0ac3c39
2023-08-12 15:41:59Organizational identifiers
Organizational identifiers have different sets of requirements and functions. It is not enough to have per-to-peer private communications. Organizations are more public, so we need publicly resolvable identifiers. DID:key satisfy this condition entirely but fails to fulfill the organization's needs.
- Organizations quite often act as issuers of credentials or attestations. For issuance, it is critical to have the possibility to rotate signing keys or even deactivate or delete identifiers if keys or issuer get compromised or to comply with security company policies.
- Organizations often require a split between the Controller of the identifier and the Identifier subject or even a transfer of the identifier subject.
- Organizations must have complete control of infrastructure and effectively manage resources and costs. The price of a single identifier should be fixed, and the method of creating new identifiers should be scalable.
- One of the essential requirements is trust and governance and transparent mechanics of proving and binding an identifier to an organizational entity and creating trust relations.
- Access to Identifier management is quite often controlled by a group of users
Nonfunctional requirements
- portability
- interoperability
- scalability
- Autonomous and control
- security
In my previous articles, we talk about Autonomous identifiers and how they differ from regular DIDs.
To recap
Autonomous identifiers (AIDs) are DIDs generated algorithmically from a crypto- graphic key pair in such a way that they are self-certifying, i.e. the binding with the public key can be verified without the need to consult any external blockchain or third party. KERI is an example of a decentralized identity technology based entirely on AIDs. © https://trustoverip.org/blog/2023/01/05/the-toip-trust-spanning-protocol/
In a previous article, I show how to create and use a did:key as an Autonomous identifier that feet well to private person-to-person secure communication.
Architectures and protocols that build on top of AIDs have few critical properties
- self-hosting and self-contained
- self-certified and Autonomous
- portable
- interoperable
- full control of infrastructure
- cost management
Nowadays, I discovered a few AIDs methods
- did:key — self-contained and public
- did:peer — self-certified, upgradable but private
- KERI based did — we waiting for did:keri method to be announced soon, but KERI infrastructure could be used to build internals of did:peer or similar methods.
- did:web — public, self-certified, and self-hosted method, but still, we have active community discussion and critics as far as it fully relays to ownership of domain name that could be stolen or re-assigned.
So we have to choose from did:key did:web and I hope in a future from did:keri.
To move forward, we need to understand the DID architecture better and how all parts are connected.
In many cases of personal or sovereign entities Subject and the Controller are the same, but for Organisations, it could have a crucial difference.
DID Subject
The DID subject is the entity that the DID represents. It can be a person, organization, device, or other identifiable entity. The DID subject is associated with a unique DID that serves as a persistent, resolvable, and cryptographically verifiable identifier. The subject is the primary focus of the identity management process and typically has one or more DIDs associated with it.
DID Controller
The DID controller is the entity (person, organization, or device) that has the authority to manage the DID Document associated with a particular DID. The DID controller can update, revoke, or delegate control of the DID Document, which contains the public keys, service endpoints, and other information required for interacting with the DID subject.
In many cases, the DID subject and DID controller can be the same entity, especially for individual users who create and manage their DIDs. However, in some situations, the DID controller may differ from the DID subject, such as when an organization manages the DIDs on behalf of its employees or when an administrator manages a device.
In summary, the DID subject is the entity the DID represents, while the DID controller is the entity with authority to manage the associated DID Document. Depending on the specific use case and requirements, these roles can be held by the same or different entities.
Key Pair
It is simple from the first point of view. Key-Pair is an asymmetric public and private key. One of the main DID functions is the distribution of public keys. DIDDoccument could contain multiple public keys with authorization rules and key roles.
Identifier
Representation of did itself. is a part of DID URI.
DID:Key
did:key identifier
DID web
did:web
Relations
Relations between all parts of DID identifier can be illustrated in the following diagram. DID method dictate how DID identifier gets created, updated, deactivated, and resolved.
Focusing on the relations of the controller, key pairs, and the identifier is more interesting for us.
The most significant power and benefit of DID are decoupling a key pair from a controller and identifier. It allows the rotation of keys and changes the ownership of the identifier and its subject and controller. It is the main competitive advantage of DID and SSI over web3 wallets and raw keys.
The ideal case is KERI infrastructure that decouples all parties via cryptographic binding and protocols.
To discover more, read the paper.
We used did: keys as AID in the previous article. DID:key is a cryptographically bound identifier to the public key but cannot change the binding. As a result, keys couldn't be rotated in the future. The controller has no binding except to prove private key ownership via the signature-based protocol.
On the other side, DID:web does not have a cryptographic binding of an identifier to a key pair from one side. It gives an easy possibility to rotate keys but loses the verifiability of the identifier.
The most interesting part is the Controller to identifier binding in a did: web. It is based on proof of domain name ownership and website resource. As I mention, it has some security considerations and critics in a community. Still, at the same time, we get a critical mechanism that settles trust and connects identifiers to the organization entity.
The mechanism of web domain ownership is well-defined and easy to explain to other users, even outside of SSI and web5 domain. It is getting wider adoption and creating a lot of use cases for organizations. So it helps to create a trust relationship between an identifier and organizational entity in a very transparent, human-readable, and self-explained way — the identifier hosted on the corporate domain belongs to the organization. On another side, it makes the transfer of the controller almost impossible. That's why it is critical to differentiate between a subject and a controller.
I believe that did:web still covers a lot of organizational cases and is suitable for issuing Verifiable Credentials and attestations on behalf of organizations.
Step-by-step guide on how to create and manage did:web you could find in my article
More detailed step-by-step coding guide with the live example you could find in my SSI notebooks book
-
@ b12b632c:d9e1ff79
2023-07-17 22:09:53Today I created a new item (NIP05) to sell into my BTCpayserver store and everything was OK. The only thing that annoyed me a bit is that when a user pay the invoice to get his NIP on my Nostr Paid Relay, I need to warn him that he needs to fill his npub in the email info required by BTCpayserver before paying. Was not so user friendly. Not at all.
So I checked if BTCpayserver is able to create custom input before paying the invoice and at my big surprise, it's possible ! => release version v1.8
They even use as example my need from Nostr to get the user npub.
So it's possible, yes, but with at least the version 1.8.0. I checked immediately my BTCpayserver version on my Umbrel node and... damn... I'm in 1.7.2. I need to update my local BTCpayserver through Umbrel to access my so wanted BTCpayserver feature. I checked the local App Store but I can't see any "Update" button or something. I can see that the version installed is well the v1.7.2 but when I check the latest version available from the online Umbrel App Store. I can see v1.9.2. Damn bis.
I searched into the Umbrel Community forum, Telegram group, Google posts, asked the question on Nostr and didn't have any clue.
I finally found the answer from the Umbrel App Framework documention :
sudo ./scripts/repo checkout https://github.com/getumbrel/umbrel-apps.git
So I did it and it updated my local Umbrel App Store to the latest version available and my BTCpayserver.
After few seconds, the BTCpaysever local URL is available and I'm allowed to login => everything is OK! \o/
See you soon in another Fractalized story!
-
@ d3d74124:a4eb7b1d
2023-07-26 02:43:40This plan was GPT generated originally but then tweaked by myself as the idea fleshed itself out. All feedback welcome and encouraged.
Shenandoah Bitcoin
1. Executive Summary
Shenandoah Bitcoin is a for-profit community organization based in Frederick County, VA, uniquely blending the world of agriculture and STEM. Our mission is to foster community spirit, stimulate interest in agricultural technology, and promote understanding of Bitcoin, while providing enriching educational opportunities and ensuring sustainable business operations.
2. Company Description
Shenandoah Bitcoin is committed to delivering value to our local community. Our unique approach intertwines traditional agricultural practices, modern STEM concepts, and the world of digital currencies, specifically Bitcoin. Our activities cater to all age groups, focusing on fostering community engagement, hands-on learning experiences, and contributing to the overall welfare of our community.
What’s in a name?
Shenandoah Bitcoin. Shenandoah - an old and historied land. Bitcoin - a cutting edge technological advancement. Both encompass multiple industries, from energy and manufacturing, to farming and data centers. Both built using Proof of Work.
3. Services
We offer a range of services, including:
Family-friendly events: Agriculture, STEM, and Bitcoin-themed festivals, fairs, workshops, and community gatherings. Educational programs: Classes, seminars, and workshops on agricultural technology, STEM principles, and understanding and using Bitcoin. Facility Rentals: Spaces available for private events, business meetings, and community gatherings.
4. Membership Benefits
We offer tiered membership packages with benefits such as:
a. Silver Membership: Includes access to regular events, discounts on educational programs, and priority booking for facility rentals.
b. Gold Membership: All Silver benefits, free access to select educational programs, and further discounted facility rentals.
c. Platinum Membership: All Gold benefits, free access to all educational programs, highest priority and maximum discounts on facility rentals, and exclusive invitations to special events.
Member’s opting to pay in Bitcoin receive 10% off all pricing.
5. Market Analysis
Our primary market is the local community in Frederick County and Winchester, VA, which consists of various demographic groups. Our secondary market includes neighboring communities, tourists, businesses, and educational institutions interested in the intersection of agriculture, STEM, and Bitcoin. Understanding that facility use and events to be a drawing factor for all demographics, we outline demographic specific analysis below.
STEM professionals in the area may work remotely or commute toward DC and not interact much with their agricultural neighbors, but a desire for good quality food exists for many. In addition to events, drawing the STEM demographic in will be connections to CSAs, ranchers, and homesteaders for access to fresh locally grown food. Offering a child's play room adjacent to some office space, is a compelling benefit for the laptop class that is often in STEM professions.
Non-industrial food producers and homesteaders may not have the focus or resources for marketing and sales. By offering a physical touch point for them and direct connections to consumers, food producers benefit from membership. Having more options for drop off/pick up of various produced goods, makes it attractive for both the consumers and producers as coordination can be asynchronous.
Bitcoiners have a wide range of sub-demographics, including farmers and software engineers. Some travel hours over car and plane to attend bitcoin themed events. The topics of STEM and agriculture are of shared interest to non-trivially sized communities of bitcoiners. Having a physical touch point for bitcoiners will draw in some members just for that. Building fellowship is desired and sought in bitcoin.
5.1 Market Trends
The blending of agriculture, STEM fields, and Bitcoin is a unique concept with increasing interest in sustainable farming and ranching, food sovereignty, and health. Shenandoah Bitcoin is poised to tap into this growing interest and offer unique value to our community.
5.2 Market Needs
Our market requires initiatives that foster community engagement, promote understanding of agri-tech and Bitcoin, and provide a versatile space for events and learning.
6. Marketing and Sales Strategy
We will employ a blend of digital marketing, traditional advertising, and strategic partnerships. Our main marketing channels will be word of mouth, social media, local press, and our website. Partnerships with local small businesses, homesteaders, schools, agricultural organizations, and bitcoin companies will form a key part of our outreach strategy.
7. Organizational Structure
Shenandoah Bitcoin will be led by a CEO, supported by a management team responsible for daily operations, event planning, marketing, and community outreach. Event management and logistics will be handled by part-time staff and volunteers.
8. Financial Projections
Our revenue will be generated from membership fees, charges for events and educational programs, and facility rentals.
9. Funding Request
[If seeking additional funding, describe your needs and how the funds will be used]
10. Exit Strategy
Should it become necessary to dissolve the business, assets such as property, equipment, and any remaining cash reserves after meeting liabilities will be sold. Investors would receive their share of the remaining assets according to their proportion of ownership.
11. Conclusion
Shenandoah Bitcoin is a unique community organization bringing together agriculture, STEM, and Bitcoin in Frederick County, VA. Our distinctive approach is designed to deliver both profits and social impact, resonating strongly with our target market and positioning us for sustainable growth.
-
@ 34c0a532:5d3638e4
2023-03-16 13:14:53Most bitcoiners have their own, much different definition of what it means to orange pill a person. I’ve seen mentions of getting a taxi driver to download a lightning wallet and sending the payment in sats to them. Is that truly orange-pilling? Hmm… no. It is a great first step, but what makes you believe that that person won’t go on to shitcoins after learning about the ease of using cryptocurrency?
So, let’s define what that is in the terms of this guide.
To orange pill someone means to get them to take the first step into learning about bitcoin, money, self-custody, being sovereign, and to teach them to start questioning the world of lies we’ve been fed our entire lives.
Too poetic? Okay, here’s a more specific one:
To orange pill someone means showing them how to send and receive a bitcoin transaction, explain to them the importance of keeping their seed words safe, and showing them more articles, books and guides so they can go further down the rabbit hole.
I think that’s better, don’t you?
No matter what your definition of orange-pilling is, let’s discuss a few things first.
Orange-pilling comes from the scene in the Matrix where Morpheus offers the blue and the red pill to Neo.
This your last chance. After this there is no turning back. You take the blue pill, the story ends. You wake up in your bed and believe whatever you want to. You take the red pill, you stay in Wonderland, and I show you how deep the rabbit hole goes. Remember, all I’m offering is the truth. Nothing more. ~ Morpheus
The fact that the terms comes from the Matrix is absolutely perfect, because the Matrix is based on Plato’s Allegory of the Cave. Everybody knows the Matrix so let’s talk about the Cave. Inside the cave, people are chained up, in the dark. The only thing they can do is talk to each other and stare forward, where there’s a dim light on the cave’s wall. Someone is moving around objects, throwing shadows on the wall. The people can never see the three-dimensional object, they can only see a shadow, a projection of it, so their world is limited by that knowledge.
Someday a group of people manage to break out of the Cave. They go out into the light, their eyes hurt, the world is massive, they get a panic attack by the lack of a rock ceiling on top of them. It’s vast, it’s too much to bear. And they run back into the cave and tell everyone what they saw, that it’s too bright, too open, too much everything. Objects are real, there’s light everywhere and colours. So many colours, not just the flame, the rock and the shadow.
And they don’t believe them. Maybe they even get angry at them and attack them. Who are these fools to claim that the world is not what they think it is? Who are they to suggest that we’ve all been lied to all our lives?
And that’s the first thing you need to keep in mind when trying to orange pill someone.
Why do some people find it so hard to believe in bitcoin?
The answer is simple. It’s because understanding bitcoin requires acknowledging you’ve been tricked your entire life.
The culture shock is real, I’ve been through it. The stages are as follows:
What is money? You start to learn what money really is, and how fundamentally flawed the Keynesian system has become. You see that the only way forward is by a hard money standard, whether that’s gold or bitcoin. Then you realise that in a world of information, the only logical step is bitcoin. Then why bitcoin? You start to read about it’s properties. It’s antifragile, decentralised. Why is that important? Nobody can control, it great. Why is it like gold that can be attached to an email? Then there’s the anger and disbelief. We’ve been fooled. Why doesn’t everybody see this? You read everything about bitcoin, you listen to podcasts, talk on bitcoin twitter and nostr with other plebs. Nobody seems to have all the answers but they make far more sense than the lies of the mainstream media. You talk to your friends and family, you come off as crazy at best. As I said, you have to acknowledge the trauma the other person is going through. It’s a culture shock, and not many want to go through with it. Think of Plato’s Allegory of the Cave, people who got out into the world went back and told everyone that there’s more to life than the shadows on the wall. Or, the same allegory being told by the Matrix, with Cypher wanting to go back, to forget.
We call that Bitcoin Derangement Syndrome, BDS. It’s hilarious but it’s so real. Many early bitcoiners, people who have spend years of their lives either advocating for it or working on it, some making or losing fortunes in the process, go back to the fiat world, shift gears completely, rant and rave against bitcoin and dive back in the Matrix, the Cave, taking the blue pill. They want to be fiat rich, they lie and delude themselves that everything is okay in the world and if they get just enough money they’d be okay.
But they won’t. This is real, and no matter how many lies they tell themselves things will not change unless we change them ourselves. Babies are dying, that’s true. In wars, in artificially induced poverty, in carrying on with the Keynesian ways of thinking of endless imperial expansion and exploitation.
I’ll be honest, bitcoin rewires your brain.
Do you really wanna force that on people?
Yes?
Then let’s read on.
Why is it sometimes so hard to explain, persuade or convince people about bitcoin? Here’s a harsh truth. It’s because you’re the counterparty risk.
When your car breaks down, you go to a mechanic, you seek expert knowledge. He tells you what’s wrong and you generally accept it. Why? Because unless you’re an expert on cars, you don’t have pre-existing knowledge about this specific situation. Nature abhors a vacuum. The mechanic’s knowledge and expertise fills up that vacuum of knowledge.
Why is it different with bitcoin, then?
Because most people believe they already understand money. There’s no vacuum for their knowledge to fill. Like a woman going to a male gynecologist thinking she knows better because she’s the one with the female body, a nocoiner believes they know better because, see? They have been handling and making money all their lives! Who are you to claim things aren’t how they used to think they are?
Yes, sure. You’re the one with the female body, you’re the one with the wallet. But have you actually taken the time to study it? Have you invested the necessary six years in medical school or the 100 hours it takes to grasp bitcoin?
No.
But they don’t accept that. When you make statements about bitcoin, it collides with their pre-existing frame of reference. When that happens, their mind reflexively casts doubts on the new information, actively fights it and rejects it, because it doesn’t conform to what they know. Their mind is the bearer asset, you are the counterparty risk.
Okay, great. How do you overcome this, then?
By taking the time with them. You can’t force someone to get orange-pilled, it’s not shoving knowledge down their throats. They have to do it themselves, so you start small. Plant a seed. Make them question what they know. That tiny seed, just like in Inception, will grow and push aside the other propaganda in their minds, leaving some space for new information to fill the void.
“Why did they stop having money backed by gold?”
That’s one seed.
“Who prints all these new billions?”
Another. Take your pick, it depends on the person you’re talking to.
A good question makes the nocoiner access their accepted knowledge. They usually think they have the answer and you should listen to it, not shutting it down. Ask them to research it further, to back their claims, to look things up. If they don’t have the knowledge, a new vacuum is created and their curiosity will want to fill it up.
Nocoiner: Bitcoin isn’t backed by anything.
You: Okay. Then what would make good money in its place?
Make them talk by asking questions. As they talk, they’ll realise they have massive gaps in their knowledge. You can help them then, but they themselves have to fill up those gaps by asking more questions and getting them to talk more. Why? Because if someone tells something to themselves they will believe it much easier than having you say it to them. Try and lead them to conclusion, a revelation.
When persuading someone, the person talking the most is the one really getting persuaded. Why? Because when you talk you engrave those words into your brain as facts.
Nocoiner: Bitcoin wastes too much energy.
You: How do you determine how much is too much energy to use?
You will never change their minds, they have to change it themselves. You can only help show them the way, they’re the ones that have to do it. Questions are the key to that process.
Tell them less, ask more.
What questions make people curious about bitcoin? You never know, it depends on what ails the person. Think about their pain. If they’re living in Turkey or Argentina, for example, their pain is massive inflation. You might say, “You’re already using USD to protect your monetary value against inflation, right? How about adding BTC to the mix?”
People in those countries generally grasp this concept a lot quicker. The local lira is the crap kind of money, they spend it often. The USD is the good kind of money, they save it, spending it only when absolutely necessary. And gold is the best kind, keeping it hidden in safes and mattresses. Only to be spent in an emergency. They don’t have the financial privilege to insulate them from the need for bitcoin, they already get these layers of hardness in their money, so bitcoin is a lot easier for them.
“What is money?” is another good question. Most people will answer it, and of course it will be flawed and all over the place. Then you might say, “It’s the promise of future value,” and then discuss how bitcoin has a monetary policy that’s planned out for the next 120 years and how nodes and miners facilitate that design. And especially point out how hard it is to change.
“What happened in 1971?” That’s a good one. Get them to look up the fiat monetary system and figure out how it’s not backed by anything. Get them angry at the Keynesian economists, how they’ve ruined entire countries. 2008 money crisis? Inevitable, under the fiat standard. Forget about bitcoin, point your finger towards the rot. It’s all historical fact, they can’t call you a conspiracy theorist. Most people still think that money is backed by gold. Get them to tell it to other people, see their reactions.
This was a part of my guide. Let me know what you think. Soon to be posted at https://georgesaoulidis.com/how-to-orange-pill-people/
-
@ 2edbcea6:40558884
2023-11-05 18:23:21Happy Sunday #Nostr !
Here’s your #NostrTechWeekly newsletter brought to you by nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk written by nostr:npub1r3fwhjpx2njy87f9qxmapjn9neutwh7aeww95e03drkfg45cey4qgl7ex2
The #NostrTechWeekly is a weekly newsletter focused on the more technical happenings in the nostr-verse.
Before we dive in I want to congratulate the winners of the NostrAsia hackathon: eNuts, Shopstr, Zappdit, and the runner up Nosskey. Thanks for hacking away and building for the community. 😊
Let’s dive in!
Recent Upgrades to Nostr (AKA NIPs)
1) (Proposed) Updates to NIP 72: Moderated Communities
As mentioned in previous weeks, moderated communities as currently outlined in NIP 72 publish kind 1 events (tweet-like text notes), and they show up without context in clients like Damus, Amethyst, Snort, etc.
One solution to the lack of context is to make activities in moderated communities use event kinds other than 1 so that you have to be in a client specialized for moderated communities to see those activities.
There have been a few attempts to update NIP 72 to accomplish that goal, and this is the latest iteration. Unique to this proposal is the idea of community scoped user data, not just posts. For example you could follow people within the community within the scope of the community but not add them to your general following list for your whole Nostr account. They’d show up in your feed in the moderated community but not in your general feed.
There’s a lot of potential in moderated communities to become a core pillar of Nostr usage as the network scales, especially since the censorship and API management regimes of Reddit have gotten more restrictive. People want better and Nostr can be that solution.
Author: nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6
2) (Proposed) NIP 49: Nostr Wallet Auth
Having a Lightning Wallet connected to Nostr is a powerful tool for content monetization and nostr-based marketplaces. There’s a lot of great work done on Nostr Wallet Connect, but it all “hinges on having the user copy-paste a wallet connection URI into the app they wish to connect with. This can be a UX hurdle and often has the user handling sensitive information that they may not understand.”
“This NIP proposes a new protocol that solves these problems by having the wallet and app generate a NWC connection URI together. This URI is then used to connect the wallet and app.”
Making it easier for new users (especially those that are less technical) to participate in the new economy is fundamental to making Nostr the best place for content creators to make a living without middlemen and heavy handed platforms. 💪
Author: nostr:npub1u8lnhlw5usp3t9vmpz60ejpyt649z33hu82wc2hpv6m5xdqmuxhs46turz
3) (Proposed) Updates to NIP 15: Nostr-based Marketplaces
This proposal expands the capabilities of Nostr-based Marketplaces to support auctions. Think about a Nostr-based eBay where users can post an item for sale by auction using a marketplace Nostr client.
The auction going live is a Nostr event, and users can publish bids as Nostr events, and when the auction is closed it’ll be determined by the bid event with the highest offering. Which anyone can verify. This is a very interesting way to make marketplaces more censorship resistant.
Author: ibz
Notable Projects
Yondar (social maps) 🌐
Much physical commerce is discovered by consumers via map apps. You go on Google or Apple Maps to find an art supply store near you, or coffee shops that are open at 2pm when you’re in a new city. These centralized solutions have dominated, but no more! Enter Yondar.
Yondar is a Nostr client that allows users to publish places on a map. This could be places of business or events, really anything that has a location.
True to Nostr form, people can also socially interact with these places: do a kind 1 comment in response to an upcoming event published on Yondar. Or someone could create a Nostr client for restaurant reviews and publish one of those in response to a place published via Yondar. The possibilities are endless 🤯.
Author(s): npub1arkn0xxxll4llgy9qxkrncn3vc4l69s0dz8ef3zadykcwe7ax3dqrrh43w
WavLake 🎵
WavLake is a music player for web and mobile. It’s part Spotify music player and music discovery tool, part music monetization platform. They host the actual music files in their own cloud hosted system, but they publish Nostr events to represent the content that’s stored by WavLake, so other clients could help people discover music hosted and published via WavLake.
If musicians can get paid more for their music via solutions like WavLake, they will start using Nostr purely for selfish monetary reasons. This could be the start of purple-pilling that particular artistic community.
P.S. I listened to WavLake Radio while writing this, it was nice writing music.
Authors: based on the linked Github repo it’s nostr:npub1j0shgumvguvlsp38s49v4zm8algtt92cerkwyeagan9m6tnu256s2eg9a7 and blastshielddown
Opt-in content moderation on nos.social 👍👎
nostr:npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240 gave a presentation at NostrAsia about making Nostr more accessible for normies. One of the items that was announced was the implementation of opt-in content moderation in his Nostr client nos.social.
They now support content warnings set by users publishing content, reporting content with various tags, as well as the ability for users to opt-in to moderation that changes their feed based on what they want to filter out.
People that don’t want moderation don’t need to use it, but I applaud nos.social’s work to develop these tools and patterns so that people have the choice to moderate their own feed.
Latest conversations: Interoperability
NostrAsia really highlighted the superpowers of Nostr and one of the foremost is interoperability. nostr:npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft gave a great talk about this topic and explained NIP 31 and NIP 89.
In summary, imagine there’s a Nostr client for movie reviews and they publish the review in a specific structure with Kind 12345678. Most Nostr clients will see that event but won’t know how to display that content or help users interact with it.
If clients adopt NIPs 31 and 89 then Nostr events will have an “alt” tag and a way to find a suggested app to handle that type of Nostr content. The alt tag helps clients display something to the user and the suggested app handler helps the client indicate to the user how to interact with that content more natively.
Maximum interoperability is useful in allowing Nostr to grow without centralizing. We can all experiment and build and all efforts still support the usage of the Nostr ecosystem in general.
Kind 1 clients as gateways to the Nostr app ecosystem
This interoperable future points to a framework where Kind 1 clients (Damus, Amethyst, Snort, Primal, etc) are the entrypoint or gateway to the Nostr ecosystem. Kind 1 clients are the core social use case and the foundation of most social interaction and could be amazing standalone apps and businesses, but Nostr makes them something more.
People will post Kind 1 notes referencing all kinds of Nostr events: music published via WavLake or Stemstr, places shared via Yondar, recipes created on Nostr.Cooking, etc. Clients will display some context on what the comment is on (music, place, video, recipe, etc) and then help the user find the right plugin/app/website to use to interact with that content natively.
This makes the Kind 1 clients the purple pill. This is only possible because of the unique interoperability capabilities of Nostr.
Interoperability with non-Nostr services
Even more amazing about Nostr is that it’s fairly easy to make the network interoperable with services outside the Nostr-verse. We already have pretty good bridges to ActivityPub-based systems like Mastadon as well as Twitter (with Exit). That reduces the switching cost for people that want to explore Nostr and eventually make the switch.
Even within Nostr-verse we have services like nostr.build that provide services in a way that doesn’t lock users in. Nostr.build provides file hosting services and because they follow NIP 96, there’s a standard way for clients to interact with nostr.build as a user’s preferred file storage provider for pictures and videos. It is easy for users to switch providers and clients can easily pick up the change. Efforts like NIP 96 makes file storage much more interoperable across the Nostr-verse without centralization.
Continuing to build solutions that allow users to have freedom AND a great experience will make Nostr the best game in town.
Don’t reinvent the wheel: use ISO when possible
I’m not sure if every developer knows this, but there’s an International Standards Organization (ISO) that has done a ton of work to promote standards of all kinds. The most common one developers have all used is the ISO datetime format. No matter what language or database you’re using, you’re likely representing timezone aware datetimes in the ISO format so that you can pass that data around safely.
ISO has codified standards for everything : how to store medical history, how to interact with USB, even stuff as obscure as how to represent data around holograms
Nostr is doing a lot of work to define structure to data that will be stored as Nostr events. We’re essentially inventing standards for social-related data of all kinds.
There are some things we’re building support for in Nostr, and I will encourage folks to see if there’s an ISO standard to follow first. It may save you a ton of time and brain power. On top of that, adopting ISO standards makes Nostr more compatible with future development that we can’t even imagine yet.
Invest in interoperability to support the cause
The Nostr-verse is under construction and the best time to plan for interoperability is before the building is done. Devs have done a great job retaining interoperability as a cambrian explosion of Nostr development has taken place. I hope we can continue to invest in interoperability because it may just be the thing that makes Nostr able to take on the giants of Big Tech when the time is right.
Until next time 🫡
If you want to see something highlighted, if we missed anything, or if you’re building something we didn’t post about, let us know. DMs welcome at nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk
Stay Classy, Nostr.
-
@ aa55a479:f7598935
2023-02-20 13:44:48Nostrica is the shit.
-
@ 634bd19e:2247da9b
2023-02-15 08:00:45かけるのこれ? 日本語入力の取り扱いイベントがおかしいw
-
@ df67f9a7:2d4fc200
2023-11-03 21:28:18the following article is a repost from my recent issue #864 posted in the NIPs repository
Nostr is a protocol for events. Sending user generated content to a relay should be one kind of event (a
kind 1
event) regardless of the structure of the content being sent. Different “types” of user generated content (EG:microblog-post
,microblog-poll
,encrypted-dm
,blog-article
,photoblog-post
,calendar-event
,exchange-question
,exchange-answer
, ect…) should not require different event kinds. Content type definitions (describing structured content with supported and required tags) should be maintained freely by implementers, not controlled by protocol. By opening up (decentralizing) the architecture for typed content, a potential source of NIP bloat will be “nipped” and the creativity of nostr designers and developers will be released to organically evolve novel solutions for real world content needs.The protocol for clients and relays to define and communicate about typed content (including supported and required tags for each type) should be a new NIP (see below for draft). New content types may also be defined by individual NIPs, but these (both existing and proposed NIPs) should only prescribe the “minimal” structure and processing (of supported and required tags) needed for compliance. In the wild, content type implementations should be defined and updated “ad hoc” between clients and relays.
==Free the “other stuff”!==
Use Case Example
- Client “NotX” implements three content types :
microblog-post
,encrypted-dm
, andmicroblog-poll
. - The first is a stock NIP implementation. The second is a NIP content type with an added
location
tag. The last one is a custom content type being tested by the client. - These content types are defined locally by the client. Their
kind
anddescription
provide the basis for easily identifying the client’s IRL use case. - Each content type definition also includes a list of supported and required
tags
EG: Themicroblog-poll
content type haspoll-topic
,poll-options
, andclose-date
as required tags, andpublish-date
as a supported tag. - These content type definitions also describe the data expected and other properties for each tag.
- Upon WSS connection (during the “handshake” phase) the client sends it’s list of supported content types to the relay for comparison to it’s “local master” list of supported types. Any discrepancies in the list of
tags
for a given content type are either accepted (as updates) or rejected by the relay. - Relays dictate for themselves which content types (and which tags for each type) they will accept from a given client.
- The connected relay A has been updated to work with the
location
tag forencrypted-dm
content type, (it’s a common NIP mod these days) and will accept kind 1 events for this type. - Relay A rejects the novel
microblog-poll
content type, but logs the client request for future updates. - The client connects to Relay B (who’s operator is working closely with the client developer) to support the novel content type. Relay B has been updated already, and will accept Kind 1 events for the
microblog-poll
content type.
NIP Draft : Kind 1 User Generated Content Type
A NIP proposal (PR) will be forthcoming, depending on the discussions in this issue. Here are some possible highlights of what such a NIP would specify:
User Generated Content
User generated content refers to personally authored text or media content (sent as event data) which human users wish to “publish” to relays for consumption by other human users.
User generated content does NOT include: - events describing an action (EG: boost, like, vote, edit, or delete) that a user may take on already published content. - event data for user profile content - event data for reward or payment systems (EG: badges created or awarded, or zaps made to users or events). - event data that defines or configures a “grouping” of other users or events (EG: “lists”, or “communities”). - event data intended for consumption by an external API (EG: DVMs, ai bots, IOT, ect…) - event data that simply “adds function” to existing event kinds (EG: event encryption or replaceability).
NIPs Prescribing User Generated Content Types
NIPs should define new user generated content types as a
kind 1
event (rather than a new event kind). Each content type will have atype
anddescription
that clearly illustrates its use case or intended “style” of app. NIPs will also suggest the minimaltags
(content structure) and processing rules required for implementations to be NIP compliant.In addition NIPs may propose a new
tag
(and rules for processing it) that may be added to any (or a specific) content type. (For example: “gift wrap” encryption and “replaceable event” may become tags for events, rather than event kinds themselves).Supported Content Types via Handshake
Client implementers will send a list of supported content types as part of a “handshake” document when web socket is first connected.
Format for content type list:
{... “content”:<array[object]>, ... }
Format for defining a supported content type :
{ “kind” : 1, “type”:<string>, “description”:<string>, “tags”:<array[array]>, “legacy_kind”:<number> }
Format for supported tags in a content type definition:
[<tag_id>,<default_value>,<data_type>,<is_required>]
Kind 1 Content Typed Events
All user generated content should be a
kind 1
“content typed” event. The content type will be communicated via thec
tag (as opposed to a new eventkind
number). Structured content will be conveyed using standard tags in the event object, as defined in the handshake document for this content type.{ "id": <event_id>, "pubkey": <user_pubkey>, "created_at": <event_timestamp>, "kind": 1, "tags": [ [“c”, <content_type>], [<tag>,<tag_value>], ... ], "content": <note_content>, "sig": <event_sig> }
Update Path for Implementers
For backwards compatibility with legacy clients and relays, implementers should deprecate but not remove legacy “event kind content” event handling. As the implementation code is updated to support “content typed events”, the “supported types” list in the “handshake” document will reference the
legacy_kind
kind number that the legacy client or relay will be expecting. Using the info, implementors can send the event in the legacy “event kind content” format as needed. (If nostr supports log output via event tags, this can be used as well to inform of possible updates.)Related NIPs & Issues
These NIPs will Need Updating
(to redefine prescribed event kinds as Kind 1 content types, freeing clients and relays to update them as needed “in the wild” )
NIP-4 : Encrypted Direct Message NIP-18 : Reposts NIP-23 : Long form Content NIP-28 : Kind-42 : Channel Message NIP-52 : calendar events NIP-72 : community post NIP-99 : classified listing
These NIPs play well with content typed events
(by defining tags for events rather than new event kinds.)
NIP-14 : Subject Tags in Text Events NIP-32 : Labeling NIP-36 : Sensitive Content NIP-48 : Proxy Tags NIP-72 : community post
These PRs will need tweaking :
848 using multiple independent kinds for community scoped events
814 Internet on things on nostr (nip 107)
817 IOT sensors and intent
811 decentralized web hosting
787 draft of nip-34 : decentralized wikis
These Issues will be closer to resolving:
162 Decentralizing the NIPs registry.
394 add content-type tag for encrypted direct messages.
520 Different nostr: schemes for different types of apps/nips
583 nip-23 used for private journals
Conclusion
This architecture of “customizable content types” is not new. The best CMSs for over a decade have relied on this to allow website administrators to create new types of content (“pages”) with custom elements (“fields”) to suit their business needs. Indeed, some go even further and abstract other “entities” (not limited to user generated content) to use this modular “field-able” architecture.
Nostr can take this modular content architecture to the next level, by embedding it into a protocol for ANY developer, rather than a single code base for some. By defining a “means” of communicating content between clients and relays, rather than the structure of what “should be” communicated, nostr NIPs can become the open and long lasting protocol needed for decentralized social media.
- Client “NotX” implements three content types :
-
@ 124b23f2:02455947
2023-10-23 14:54:56Im my previous post, I explained how to use your getalby ln address to receive zaps directly to your LND node. Similarly, there is an additional option that one can utilize to receive zaps directly to your lightning node: lnaddress.com.
Lnaddress.com is a federated lightning address server that you can use to create a custom ln address. Unlike using getalby, lnaddress.com can be used with any lightning implementation (not just LND). For the purposes of this write-up, I am going to use LNBits to connect an lnaddress.com lightning address with my node. And as will be the case with most of my write-ups, I am going to be using @npub126ntw5mnermmj0znhjhgdk8lh2af72sm8qfzq48umdlnhaj9kuns3le9ll OS, so users of that OS will likely find this write-up most useful, but I'm sure people using other node interfaces can infer how to complete this set up as well.
With that said, let's dive into the step-by-step on how to create your own custom ln address with lnaddress.com and set it up to receive zaps directly to your lightning node:
*Users should have lnbits set up with their lightning node before proceeding.
-
Go to lnaddress.com. Input your desired username, select 'Node Backend Type' = LNBits, and if necessary check the box 'This is a new lightning address'. Keep this page open in one tab as we will be returning to it to input info.
-
From your Start9 OS services page, go to your LNBits service. Open the 'Properties' page, and in a new tab, open the (Tor) Superuser Account. Page will look like this:
http://usri6wfilambri77iwnapyyme43la4v2hgecoismowluriekrhuvxnid.onion/content/images/2023/10/pic1-1.png
From this LNbits page, you can choose to 'add a new wallet' and use that wallet instead of your superuser account. That is up to you but the steps will be the same.
- Now, we need to grab the info needed for the 'Host Protocol + IP or Domain + Port' field on the lnaddress.com page. On the lnbits page, expand the 'Api Docs' field, and the 'Get Wallet Details' field found on the right hand side menu. In this 'Get Wallet Details' section, you will want to copy some of the URL found in the 'curl example' section. Copy 'http://xxxxxx.onion' (don't copy any more!), and paste this into the 'Host Protocol + IP or Domain + Port' field found on the lnaddress.com page.
http://usri6wfilambri77iwnapyyme43la4v2hgecoismowluriekrhuvxnid.onion/content/images/2023/10/pic2-1.png
-
Next, we need to grab the key for your lnbits wallet. From the lnbits page, expand the API docs section found on the right hand side menu. Copy the 'Invoice/read key' (make sure to use the invoice/read key and not your Admin key), and paste it into the key field found on the lnaddress.com page. Upon pasting in that last piece of info, click 'submit' at the bottom of the page.
-
If all info was input correctly, your connection will be successful. If successful, you will be brought to a page that looks like this:
http://usri6wfilambri77iwnapyyme43la4v2hgecoismowluriekrhuvxnid.onion/content/images/2023/10/pic3-1.png
You will want to save this secret PIN in case you need to update info in your ln address. You'll also find a test lightning invoice of 1 sat. Using a wallet not connected to the node we connected to our new ln address, you can test the ln address out by paying the 1 sat test invoice.
Users of Start9 OS might find the following info particularly useful: This ln address via lnaddress.com comes with a couple advantages aside from self-custodial zap receiving:
- One, you can have a custom ln address username to go with your nym or nostr username. Users of Start9 may be familiar with the ln address one can generate in the btcpay server service. This ln address is not customizable.
- Two, if you are running a tor only lightning node, you will be able to receive zaps from both tor and clear net lightning nodes. Users of Start9 may be familiar with the ln address one can generate in the btcpay server service. This ln address can only receive zaps from other tor nodes and can't receive zaps from clear net nodes.
That is it, you should now be all set up with your new ln address hosted on lnaddress.com, and you should be all ready to receive zaps or lightning payments of any kind :)
-
-
@ 8947a945:9bfcf626
2023-10-23 08:13:39จงตระหนักรู้คุณค่าของตัวเอง เพชรไม่ได้เปล่งประกายเจิสจรัสจากสุดปลายถ้ำ
2023’s Wake up call
แรงบันดาลใจที่ทำให้ผมตัดสินใจเอาเรื่องนี้มาเล่าบน #ทุ่งม่วง เกิดจากเมื่อต้นปี 2023 ผมได้รับสัญญาณเตือนภัยจากที่ทำงานแห่งหนึ่ง (Wake up call) ปลุกให้ตื่นขึ้นจากภวังค์ ตระหนักรู้ถึงความเป็นจริงบางอย่าง ว่างาน part time ที่กำลังทำเริ่มมีสัญญาณความไม่มั่นคงเกิดขึ้นทีละเล็กทีละน้อย มีความสุ่มเสี่ยงที่จะถูกขอให้งดคลินิคไม่ต้องมาออกตรวจ (ภาษาสุภาพของการเลิกจ้างหมอ)
สำหรับหมอที่ทำงานหลายโรงพยาบาล จะเข้าใจสถานะ”หมอ part time” ของตนเองดีว่า สามารถถูกถอดเวรออกได้ทุกเมื่อ หากทางโรงพยาบาลมีความจำเป็น
เมื่อเกิดเหตุการณ์นี้ ผมติดต่อโรงพยาบาลใกล้บ้านเป็นแผนสำรองเอาไว้ ที่นี่ขาดอัตรากำลังแพทย์พอดี ผมเลยสามารถเริ่มงานได้ทันที ทำให้รายได้ไม่กระทบกระเทือนต่อครอบครัว แต่สิ่งที่ต้องพบเจอก็คือโรงพยาบาลแห่งใหม่นี้ งานหนักมาก หนักถึงขั้นกระอักเลือด เต็มไปด้วยความเสี่ยงที่ยังไม่มีระบบการบริหารจัดการที่มีประสิทธิภาพ ผมทำงานที่นี่ไประยะนึง เมื่อมาดูสลิปค่าตอบแทน พบว่าผมถูกจัดกลุ่มให้อยู่ในกลุ่มแพทย์เวชปฏิบัติทั่วไป (General practitioner หรือ GP คือหมอทั่วไปที่ยังไม่ได้เรียนต่อเฉพาะทาง)
แพทย์เฉพาะทาง ตามกลไกจะได้ค่าตอบแทนสูงกว่าแพทย์ GP ถึง 70 - 80%
ผมนำเรื่องนี้ขึ้นปรึกษาหน่วยงานที่เกี่ยวข้อง ได้รับการดำเนินแก้ไขอย่างเร่งด่วนเพราะความเข้าใจผิด และผมก็ได้ค่าตอบแทนสมน้ำสมเนื้อตามมาทีหลัง แต่ด้วยเนื้องานที่หนักมาก เหนื่อยมาก เลิกงานเที่ยงคืน วันอื่นๆทำงานอีก ทำงาน 7 วันต่อสัปดาห์ ร่างกายเริ่มส่งสัญญาณเตือนบางอย่างว่ากำลัง overheat เครื่องกำลังจะไหม้ในอีกไม่ช้า ถ้ายังคงลากเลือดขนาดนี้ แต่เวลานั้นผมทำเพื่อครอบครัวอย่างเดียว เลยไม่ได้ลังเล เดินหน้าต่อ
จุดเปลี่ยนมันอยู่ตรงนี้ครับ ผมมีอาจารย์แพทย์ที่เคารพมากท่านหนึ่ง อาจารย์เขารับรู้เรื่องผมมาตลอด เมื่อทราบว่าผมทำงานหักโหม แลกกับความเสี่ยงหลายมิติ จึงมีโอกาสได้นั่งคุยกัน อาจารย์ท่านนี้เล่าเรื่องสั้นเรื่องหนึ่งให้ฟัง และทิ้งท้ายเอาไว้ให้คิดว่า
ทรัพยากรที่มีค่าที่สุดคือเวลา จงเอาตัวผมไปอยู่ในที่ที่เห็นคุณค่าในตัวผมให้ได้ ถ้าผมทำได้ เวลาของผมมีจะสร้างมูลค่าได้มหาศาลกว่านี้
การสนทนาจบลงด้วยความรู้สึกพบแสงสว่างที่ปลายอุโมงค์ หลังจากนั้นไม่กี่สัปดาห์ผมตัดสินใจ ของดคลินิคจากโรงพยาบาลแห่งนั้นทันที และเป็นความโชคดี เพราะที่ทำงานประจำกำลังขาดแคลนหมอ ผมเลยได้ตารางออกตรวจเพิ่ม รายได้มั่นคงมากกว่าเดิม
ส่วนโรงพยาบาลที่กระตุ้น wake up call ผมตอนแรก เล็งเห็นความสำคัญของทักษะเฉพาะทางของผมที่ขาดไม่ได้และจำเป็นมากต่อสถานการณ์ปัจจุบัน จึงขอให้ผมอยู่ช่วยต่อและเพิ่มค่าตอบแทนเพิ่มจากเดิมอีกเกือบ 100%
ทักษะการเขียนบทความ ที่เกือบจะถูกปิดผนึกไปตลอดกาล เพราะเอาตัวเองไปอยู่ไม่ถูกที่
สิ่งที่ผมสนใจอยู่เป็นทุนเดิมคือการเล่าเรื่องแฝงแง่คิดจากประสบการณ์ของตัวเองให้กับผู้อื่นฟัง ตัวผมเองเป็นคนพูดไม่เก่ง บุคคลิกเก็บตัว Introvert ใช้เวลาส่วนใหญ่อยู่กับความคิดตัวเอง แล้วจดบันทึกข้อคิดที่คิดได้เอาไว้ ตั้งใจว่าถ้ามีเวลาพอ จะเอาสิ่งที่รีดออกมาจากสมอง มาขยายทำเป็นบทความ เพื่อเอาไว้ให้คนอื่นอ่าน เผื่อว่ามันจะมีประโยชน์ไม่มากก็น้อย ผมตระเวนหาเวบไซต์สำหรับนักเขียนไปเรื่อย แต่ก็หาที่ที่ถูกใจไม่ได้ ผมก็เลย”จำใจ” เขียนลงไปในเฟสบุค และ แพลตฟอร์มนักเขียนแห่งหนึ่งของประเทศไทย
ในช่วงแรกผมลองเขียนบทความลงเฟสบุค ผลลัพธ์เป็นไปตามคาดครับว่าไม่เป็นที่สนใจ ประเมินผลหยาบๆจากยอดกดไลค์ คอมเม้นท์ และการแชร์ เงียบเหมือนป่าช้าเลย นานๆจะมีคนมากดไลค์ซักที แต่ก็เป็นที่รู้ๆกันครับว่าการกดไลค์ มันอาจจะเกิดจากคนอื่นเปิดมาเจอโพสต์ของผม แล้วจะปัดให้มันพ้นๆไป “ไอ้บ้านี่มันบ่นอะไรของมัน” แต่นิ้วโป้งดันไปจิ้มโดนปุ่มไลค์พอดี ในเมื่อจิ้มไปโดนแล้วก็แล้วกันไปก็เป็นไปได้
เวลาผ่านไปมันเหมือนผมขึ้นไปพูดบนเวทีที่ไม่มีผู้ฟัง หรือ ผู้ฟังหลับทั้งห้อง บทความต่างๆข้อคิดต่างๆที่ผมตั้งใจเรียบเรียงมันส่งไปไม่ถึงผู้คน มันดูไร้ค่า จบด้วยการนั่งคุยกับตัวเองเหมือนเป็นคนไข้จิตเวช เหตุการณ์ทั้งหมดนี้เกือบนำพาผมไปสู่ข้อสรุปที่ว่า “ผมเองคงเขียนไม่เก่ง” หรือ “เขียนไม่ได้แย่หรอก แต่ไม่ได้โปรโมท เลยไม่มีใครมาพบเจอ” หรือไม่ก็ถูกทั้งสองข้อ บางครั้งอยากจะล้มเลิกการเขียนไปเลยก็มีครับ
ช่วงมกราคมปี 2023 เวบไซต์ Right shift เริ่มเป็นที่รู้จัก ฟังคอนเซปจากอาจารย์พิริยะแล้วชอบมาก
เวบไซต์ Right shift ตั้งใจเป็นแหล่งรวบรวมข้อมูลสำหรับผู้ที่สนใจอยากศึกษาบิตคอยน์ ให้สามารถเข้ามาศึกษาได้โดยไม่มีค่าใช้จ่าย แถมยังเชิญชวนให้ผู้ที่อยากเขียนบทความที่เป็นประโยชน์ให้แก่ผู้อื่น ใครสนใจสามารถส่งบทความเข้ามาได้ ถ้าหากบทความไหนมีแวว จะมีทีมบก.ติดต่อกลับไปเพื่อทำงานร่วมกันในการขัดเกล้า แก้ไขสำนวนบางจุดให้ดียิ่งขึ้น
พอรู้มาถึงตอนนี้มันนเหมือนมีอะไรมาเคาะกะโหลกดังๆ จนความรู้สึก “ปังปุริเย่ เฮ้ ร้องว้าว” มันผุดขึ้นมา แต่มันก็มาพร้อมกับความไม่มั่นใจในตัวเองนั่นแหละครับ ความขัดแย้งเต็มไปหมดว่า “จะเขียนหรือไม่เขียนดี” “เอาจริงอ่ะ? จะเขียนบทความส่งไปจริงๆเหรอ?” “ม_ึง ไม่ใช่นักเขียนมืออาชีพนะ คนที่เขาส่งบทความไปมีแต่เทพๆทั้งนั้น จะเอาอะไรไปสู้กับเขา” และเสียงอื่นๆในหัวอีกมากมาย
แต่สุดท้ายผมทลาย “Comfort zone” ได้ ด้วยกำลังใจเล็กๆน้อยๆจากภรรยาครับ ภรรยาผมบอกด้วยคำสั้นๆว่า “ก็ลองดูสิ สกิลการเขียนเล่าเรื่องของเธอก็ไม่ขี้เหร่นะ” ผมเลยลองทำดู และนี่คือสิ่งที่เกิดขึ้น
บอกได้ว่าเป็นครั้งแรกที่ผมได้ถูกฝึกการเขียนบทความโดย "ใครก็ไม่รู้” ผมรู้แค่ว่าเป็นทีมบก.ของ Right shift เมื่อทำงานร่วมกันไปเรื่อยๆ ทีมบก.ทุ่มเทในการช่วยแก้ไขช่วยตรวจสอบบทความของผมมากๆ จนผมสังเกตุเห็นได้
ใครเคยใช้ Google document ร่วมแก้ไขบทความด้วยกันมากกว่าหนึ่งคนคงจะรู้ดีนะครับว่า เวลาที่มีการแก้ไขข้อความมันจะมีเมล์แจ้งเตือนไปหาทุกคนที่เข้ามาร่วมแก้ไขเอกสารทั้งหมด บางคืนที่ผมนอนหลับไม่สนิท ตีสองตีสามตื่นมาเข้าห้องน้ำ ผมยังเห็นเมล์อัพเดทการแก้ไขบทความจากทีมงาน right shift เด้งๆอยู่เลย
จนสุดท้ายงานเขียนผมก็ได้รับการเผยแพร่บนเวบไซต์ Right shift
ใครยังไม่เคยอ่านกดตรงนี้ได้เลยครับ
หลังจากนั้นผมรับรู้ถึงทักษะนี้มากขึ้น เลยตั้งใจว่าต้องฝึกให้เก่งขึ้นดีขึ้นในทุกๆบทความที่ผมเขียน ผมอ่านหนังสือเยอะขึ้น ศึกษาสำนวนการเขียนจากนักเขียนรวมถึงนักแปลท่านอื่นๆ เพื่อดูตัวอย่างสำนวน ลีลาสไตล์การใช้คำ เอามาประยุกต์ใช้กับงานเขียนของตัวเอง
ไม่รู้ตัวหรอกครับ ว่าทักษะนี้มันโดนฝึก โดนขัดเกลาตั้งแต่เมื่อไหร่ แต่ตอนนี้ตระหนักรู้ถึงการที่มันมีตัวตนอยู่ภายในตัวผมแล้ว ผมก็จะลับคมมันไปเรื่อยๆ หลายครั้งตอนที่ผมเขียนบทความอยู่ผมลืมเวลา ลืมหิว ลืมง่วง ลืมเหนื่อยไปเลย ถ้าเปรียบเทียบกับนักกีฬา คาดว่าสภาวะตอนนั้นคงเป็นสภาวะหนึ่งของการเข้าสมาธิแบบ “Into the zone”
เรื่องสั้นที่อาจารย์ของผมเล่าให้ฟัง มอบบทเรียนชีวิตที่มีค่า อยู่ต่อจากนี้ครับ
พ่อคุยกับลูกสาว “ยินดีด้วยที่จบการศึกษา พ่อซื้อรถคันนี้ไว้ให้ลูกซักพักแล้ว ตอนนี้พ่อจะให้ลูกนะ แต่ก่อนที่พ่อจะให้ พ่ออยากให้ลูกนำไปที่ร้านรับซื้อ-ขายรถในตัวเมือง แล้วมาบอกพ่อด้วยว่าเขาให้ราคาเท่าไหร่”
ลูกสาวทำตาม กลับมาหาพ่อ บอกว่า “ร้านนี้เขาให้ราคา $10,000 เพราะรถเก่า” พ่อบอกลูกว่า “โอเคลูก ทีนี้พ่ออยากให้หนูเอารถไปที่โรงรับจำนำ ลองดูซิว่าเขาจะตีราคารถคันนี้เท่าไหร่”
ลูกสาวทำตาม แล้วกลับมาบอกพ่อว่า “โรงรับจำนำให้ราคา $1,000 เพราะรถเก่ามาก ดูแล้วต้องซ่อมอีกหลายรายการ ”
ครั้งนี้พ่อบอกลูกสาวให้นำรถนี้ไปยังชมรมคนรักรถที่มีผู้เชี่ยวชาญ และนำรถให้พวกเขาดู
ลูกสาวทำตาม ขับรถนี้ไปที่ชมรมที่ว่า หลังจากนั้นไม่นานลูกสาวกลับมาบอกพ่อด้วยน้ำเสียงตื่นเต้นว่า “บางคนเสนอราคา $100,000 เพราะเป็นรถหายาก และสภาพดีมาก”
ผู้เป็นพ่อยิ้มให้กับลูกสาว เหมือนว่ารู้อยู่แล้วว่าจะเกิดอะไรขึ้น ด้วยความสงสัยลูกสาวจึงถามพ่อว่า
“ในเมื่อพ่อรู้อยู่แล้วว่าร้านไหนจะให้ราคาสูง ทำไมพ่อไม่ให้หนูไปที่ชมรมคนรักรถตั้งแต่แรกล่ะ”
พ่อบอกลูกสาวว่า “นี่แหละบทเรียนชีวิตที่สำคัญบทหนึ่งที่พ่ออยากมอบให้แก่ลูก พ่ออยากให้ลูกรู้ไว้ว่า ลูกจะไม่มีค่าใดๆเลยถ้าอยู่ผิดที่ ที่ที่คนอื่นมองไม่เห็นเรา ไม่ต้องเสียเวลาไปโกรธโมโหไม่พอใจหรอกนะ สิ่งที่ลูกต้องทำก็คือเดินออกจากที่นั่น ออกไปจากสังคมและสถานที่ที่ไม่เห็นค่าในตัวลูก ค้นหาที่สถานที่ของลูกให้เจอ ถ้าลูกไม่ลองลงมือทำด้วยตัวเอง ลูกก็จะไม่ได้เรียนรู้อะไรเลย”
ข้อคิดที่อยากจะแบ่งปันกับทุกท่านที่อ่านมาจนจบ
บทความนี้มีความพิเศษกว่าบทความอื่นๆ ท้ายบทความของผมผมจะมาชวนคุยและสรุปข้อคิดที่เป็นประโยชน์ให้แก่เพื่อนๆพี่ๆทุกท่านที่อ่านมาจนจบ แต่สำหรับบทความนี้ข้อคิดที่ผมอยากให้ ถูกสรุปขมวดไว้ทั้งหมดแล้วในประโยคที่พ่อบอกลูกสาว
อย่าลืมต่อสู้ ฝ่าฟันอุปสรรค ค้นหาสถานที่ของตัวเราเองให้พบนะครับ เมื่อค้นพบทักษะในตัวแล้ว อย่าให้ถูกปิดผนึกไว้ เพียงเพราะอยู่ผิดที่ ลงมือฝึกฝนพัฒนามันไปเรื่อยๆ เราจะดีขึ้นในทุกๆวันครับ
-
@ 57fe4c4a:c3a0271f
2023-10-18 13:02:10📝 Summary: Batched splicing can be risky due to certain conditions like no funds in a channel and using an old state. It is important for batched splicing mechanisms to have a backout option to prevent disruptions caused by confirmed old states. Additionally, not all splice implementations performing a check can lead to potential loss of funds.
👥 Authors: • Greg Sanders ( nostr:npub1jdl3plz00rvxwc6g2ckemzrgg0amx5wen4kfvs3laxtssxvk9cvsf3gh0m ) • ZmnSCPxj ( nostr:npub1g5zswf6y48f7fy90jf3tlcuwdmjn8znhzaa4vkmtxaeskca8hpss23ms3l )
📅 Messages Date: 2023-10-17
✉️ Message Count: 3
📚 Total Characters in Messages: 5405
Messages Summaries
✉️ Message by ZmnSCPxj on 17/10/2023: Batched splicing can be risky if certain conditions are met, such as having no funds in a channel and using an old state. It is important for batched splicing mechanisms to have a backout option to prevent disruptions.
✉️ Message by Greg Sanders on 17/10/2023: Batched splicing is risky because if an old state is broadcasted and confirmed before the splice, it can disrupt the process. It is important for batched splicing mechanisms to have a backout option.
✉️ Message by ZmnSCPxj on 17/10/2023: Batched splicing can be risky if not all splice implementations perform a check to ensure subsequent splices confirm, potentially leading to loss of funds.
Follow nostr:npub1j3t00t9hv042ktszhk8xpnchma60x5kz4etemnslrhf9e9wavywqf94gll for full threads
-
@ fab018ad:dd9af89d
2023-10-13 05:25:1313. ทำอย่างที่ฉันพูด ไม่ใช่ทำอย่างที่ฉันทำ
“วิถีชีวิตของพวกเรานั้นไม่ได้มีไว้ต่อรอง”
–George H.W. Bush
>หมายเหตุผู้แปล : จอร์จ เอช. ดับเบิลยู. บุช (George H.W. Bush) เป็นประธานาธิบดีคนที่ 41 ของสหรัฐอเมริกาในช่วงระหว่างปี 1989-1993
ในโลกที่มีระบบตลาดเสรีอย่างแท้จริง นโยบายที่ธนาคารโลกและกองทุน IMF บังคับใช้ต่อประเทศยากจนอาจจะเป็นเรื่องสมเหตุสมผล เพราะจากประวัติศาสตร์แล้ว ผลลัพธ์ของระบอบสังคมนิยมและการยึดกิจการเอกชนให้กลายเป็นของรัฐนั้นคือความหายนะ แต่ทว่าปัญหาคือโลกไม่ได้เป็นระบบตลาดเสรีที่แท้จริง และการปฏิบัติแบบสองมาตรฐานก็มีอยู่ทุกหนทุกแห่ง
การให้เงินอุดหนุนต่าง ๆ ถือเป็นตัวอย่างที่ดี โครงการข้าวสารฟรีในประเทศศรีลังกา หรือส่วนลดราคาเชื้อเพลิงในประเทศไนจีเรียถูก IMF สั่งให้ยกเลิก แต่ชาติผู้ปล่อยเงินกู้อย่างสหราชอาณาจักรและสหรัฐอเมริกากลับหยิบยื่นสวัสดิการการรักษาพยาบาลจากภาครัฐและเงินอุดหนุนพืชผลให้แก่ประชาชนของพวกเขาเองเสียอย่างนั้น
ไม่ว่าคุณจะมองจากมุมมองแบบอิสรนิยมหรือมุมมองแบบมาร์กซิสม์ คุณก็จะได้ข้อสรุปเดียวกันว่านี่คือการปฏิบัติสองมาตรฐานที่ทำให้บางประเทศร่ำรวย และปล่อยให้ประเทศอื่นเป็นผู้รับเคราะห์แทน ซึ่งประชาชนของประเทศที่ร่ำรวยส่วนใหญ่ไม่ได้รับรู้อะไรเลย และต่างก็ใช้ชีวิตอยู่อย่างสุขสำราญ
ในการช่วยให้ชาติต่าง ๆ ฟื้นตัวจากเศษซากของสงครามโลกครั้งที่สอง ประเทศเจ้าหนี้ของ IMF พึ่งพิงการวางแผนจากส่วนกลางและนโยบายต่อต้านตลาดเสรีอย่างหนักในช่วงไม่กี่ทศวรรษแรกหลังการประชุมที่เบรตตัน วูดส์ เช่น การจำกัดการนำเข้า การจำกัดการไหลออกของเงินทุน การตั้งเพดานอัตราแลกเปลี่ยนเงินตรา และการให้เงินอุดหนุนสินค้าการเกษตร ซึ่งมาตรการเหล่านี้ช่วยปกป้องเศรษฐกิจของชาติอุตสาหกรรมเอาไว้ในช่วงที่กำลังอ่อนแอที่สุด
ตัวอย่างเช่นในสหรัฐอเมริกามีพรบ. การปรับดอกเบี้ยให้เท่าเทียม (Interest Equalization Act) ซึ่งออกในสมัยของประธานาธิบดีจอห์น เอฟ. เคนเนดี เพื่อหยุดชาวอเมริกันจากการซื้อหลักทรัพย์ต่างประเทศ และกระตุ้นให้หันมาสนใจการลงทุนในประเทศ นี่ถือเป็นหนึ่งในหลาย ๆ มาตรการที่ออกมาเพื่อควบคุมเงินทุน แต่ธนาคารโลกและกองทุน IMF กลับมีประวัติในการกีดกันไม่ให้ประเทศที่ยากจนสามารถใช้มาตรการเดียวกันนี้เพื่อปกป้องประเทศตัวเองได้บ้าง
>หมายเหตุผู้แปล : จอห์น เอฟ. เคนเนดี (John F. Kennedy) เป็นประธานาธิบดีคนที่ 35 ของสหรัฐอเมริกา ดำรงตำแหน่งตั้งแต่ปี 1961 จนกระทั่งถูกลอบสังหารในปี 1963
อย่างที่คุณ Payer ตั้งข้อสังเกตว่า “IMF ไม่เคยไปยุ่งเกี่ยวกับการตัดสินใจเรื่องการปรับอัตราแลกเปลี่ยนและนโยบายการค้าของประเทศพัฒนาแล้วที่ร่ำรวย... แต่กลุ่มชาติที่อ่อนแอต่างหากที่ต้องตกอยู่ภายใต้การบังคับใช้หลักการของ IMF อย่างเต็มสูบ... ความไม่เท่าเทียมในความสัมพันธ์ทางอำนาจนี้แปลว่ากองทุน IMF จงใจมองไม่เห็นการ 'บิดเบือนกลไกตลาด' เช่น การกีดกันทางการค้า ซึ่งเป็นสิ่งที่ชาติที่ร่ำรวยทำกันเป็นเรื่องปกติ”
คุณ Vásquez และคุณ Bandow จากสถาบัน Cato ก็ได้ข้อสรุปคล้าย ๆ กัน โดยชี้ว่า “ชาติอุตสาหกรรมส่วนใหญ่ยังคงแนวความคิดของการเป็นผู้อุปถัมภ์ต่อประเทศด้อยพัฒนา แต่มันเหมือนเป็นการเสแสร้งชัด ๆ เพราะพวกเขานี่แหละที่คอยกีดกันการส่งออกของประเทศเหล่านั้น”
ในช่วงต้นทศวรรษ 1990 ในขณะที่สหรัฐอเมริกาเน้นย้ำถึงความสำคัญของการค้าเสรี แต่ทางสหรัฐฯ กลับเสมือน “ตั้งม่านเหล็กขัดขวางการส่งออกของชาติในยุโรปตะวันออก สินค้าที่ได้รับผลกระทบนั้นรวมไปถึงสิ่งทอ เหล็ก และผลิตภัณฑ์ทางการเกษตร” โดยประเทศโปแลนด์ เชโกสโลวาเกีย ฮังการี โรมาเนีย บอสเนีย โครเอเชีย สโลวีเนีย อาเซอร์ไบจาน เบลารุส จอร์เจีย คาซัคสถาน คีร์กีซสถาน มอลโดวา รัสเซีย ทาจิกิสถาน เติร์กเมนิสถาน ยูเครน และอุซเบกิสถานนั้นต่างก็ตกเป็นเป้าหมายการกีดกันทางการค้าจากสหรัฐอเมริกาที่ไม่ต้องการให้ประเทศในยุโรปตะวันออก “ขายเนย นมผง หรือไอศกรีมแม้แต่กิโลกรัมเดียวในสหรัฐฯ” คณะรัฐบาลของประธานาธิบดีบุช และคณะรัฐบาลของประธานาธิบดีคลินตัน นั้นต่างก็ตั้งข้อจำกัดที่แข็งกร้าวต่อประเทศในพื้นที่แถบนั้นในการนำเข้าสารเคมีและสินค้าเภสัชกรรม
หมายเหตุผู้แปล : - จอร์จ เฮอร์เบิร์ต วอล์กเกอร์ บุช (George Herbert Walker Bush) เป็นประธานาธิบดีคนที่ 41 ของสหรัฐอเมริกา โดยดำรงตำแหน่งตั้งแต่ปี 1989-1993 - วิลเลียม เจฟเฟอร์สัน คลินตัน (William Jefferson Clinton) หรือรู้จักในนามบิล คลินตัน (Bill Clinton) เป็นประธานาธิบดีคนที่ 42 ของสหรัฐอเมริกา โดยดำรงตำแหน่งตั้งแต่ปี 1993-2001
มีการประมาณการว่าลัทธิการคุ้มครองทางการค้าโดยประเทศอุตสาหกรรมนั้น “ทำให้รายได้ของประเทศกำลังพัฒนาลดลงไปมากกว่า 2 เท่าของตัวเลขความช่วยเหลือที่ได้รับ” พูดอีกนัยหนึ่ง ถ้าชาติตะวันตกเปิดเศรษฐกิจให้เสรี พวกเขาก็ไม่จำเป็นต้องให้ความช่วยเหลือใด ๆ ต่อชาติยากจนด้วยซ้ำ
ข้อตกลงเงินกู้ยังมีจุดหักมุมที่บัดซบอยู่อีกด้วย นั่นคือในยามที่ชาติตะวันตก (เช่น สหรัฐอเมริกา) เจอปัญหาวิกฤตเงินเฟ้อแบบที่กำลังเจออยู่ในทุกวันนี้ และถูกบีบให้ต้องใช้นโยบายการเงินที่รัดกุมมากขึ้น พวกเขากลับได้อำนาจเพิ่มขึ้นในการควบคุมประเทศและทรัพยากรของประเทศกำลังพัฒนาเหล่านี้ เพราะหนี้ของประเทศกำลังพัฒนาที่อยู่ในสกุลเงินดอลลาร์เริ่มจะหามาชำระคืนได้ยากกว่าเดิม พวกเขาเลยต้องติดกับดักหนี้ที่ลึกกว่าเก่า จนต้องทำตามเงื่อนไขของธนาคารโลกและกองทุน IMF มากขึ้นไปอีก
ในปี 2008 ช่วงระหว่างวิกฤตทางการเงินครั้งใหญ่ ทางการสหรัฐอเมริกาและทางการยุโรปปรับลดอัตราดอกเบี้ยและอัดฉีดเงินพิเศษเพิ่มให้กับธนาคารในประเทศ แต่ในช่วงที่เกิดวิกฤตหนี้สินในประเทศโลกที่สาม ธนาคารโลกและกองทุน IMF ไม่ยินยอมให้ชาติเหล่านี้ทำพฤติกรรมแบบเดียวกัน แต่กลับแนะนำประเทศที่ได้รับผลกระทบว่าควรจะใช้มาตรการลดค่าใช้จ่ายในประเทศ และควรกู้เงินจากต่างประเทศเพิ่ม
ในเดือนกันยายน 2022 ข่าวพาดหัวหนังสือพิมพ์ระบุว่า IMF “มีความกังวล” เกี่ยวกับเงินเฟ้อในสหราชอาณาจักร ในขณะที่ตลาดพันธบัตรของพวกเขาค่อย ๆ เดินเข้าใกล้การล่มสลาย นี่แสดงให้เห็นถึงความเสแสร้งอีกครั้ง เพราะเมื่อพิจารณาจากการที่ IMF ดูจะไม่เคยเป็นห่วงเกี่ยวกับเงินเฟ้อเลยทุกครั้งที่สั่งให้ลดค่าเงินของคนหลายพันล้านคนทั่วโลกตลอดหลายทศวรรษที่ผ่านมา ชาติผู้ให้กู้นั้นดูจะเล่นอยู่บนกติกาที่ต่างออกไปอย่างสิ้นเชิง
ในกรณีตัวอย่างสุดท้ายของการ “ทำอย่างที่ฉันพูด ไม่ใช่ทำอย่างที่ฉันทำ” คือการที่ IMF ยังคงถือทองคำจำนวนมหาศาลถึง 90.5 ล้านออนซ์ หรือประมาณ 2,814 เมตริกตัน โดยส่วนใหญ่สะสมมาจากช่วงทศวรรษ 1940 ที่ตอนนั้นชาติสมาชิกถูกบังคับให้ชำระเงินด้วยทองคำจำนวนร้อยละ 25 ของโควตาที่ได้รับ ซึ่งจริง ๆ แล้วจนกระทั่งถึงปี 1970 นั้นถือเป็นเรื่องปกติมาก ๆ ที่ชาติสมาชิก “จะชำระดอกเบี้ยเงินกู้ IMF ด้วยทองคำ”
เมื่อประธานาธิบดีริชาร์ด นิกสันยุติการใช้มาตรฐานทองคำอย่างเป็นทางการในปี 1971 ทาง IMF ก็ไม่ได้ขายทองคำสำรองของพวกเขาออกไป แต่ถึงกระนั้น การพยายามจะตรึงค่าเงินเข้ากับทองคำของชาติสมาชิกใด ๆ กลับถูกสั่งห้ามเสียอย่างนั้น...
⚡️ กด Zap ที่ลิงก์นี้ เพื่อเป็นกำลังใจทีมงานผู้เรียบเรียงบทความ
(ทุกยอด zap จะถูกแบ่งอัตโนมัติเข้าวอลเล็ทของผู้เขียนบทความต้นฉบับภาษาอังกฤษ, ผู้แปลดราฟต์ 1, ผู้เรียบเรียงดราฟต์ 2-3, กองบรรณาธิการและพิสูจน์อักษรจากไรท์ชิฟต์ พร้อมกันบางส่วนไว้เพื่อเป็นค่าธรรมเนียมธุรกรรม)
-
@ d8a2c33f:76611e0c
2023-10-10 21:46:22Hola, A few weeks ago, we proudly launched PlebAI, a community-driven platform utilizing powerful open-source language models akin to ChatGPT. Learn more here
From the onset, we offered a diverse set of over 10 AI agents, each designed with unique capabilities, ranging from generating text to creating images. The community has been incredible, rapidly expanding the capabilities of these agents for a myriad of specialized applications.
Spotlight: Meet Agent Green
One of our community members developed Agent Green, your go-to AI for all things cannabis. Got questions? Agent Green has answers!
What's Next: Nostr Integration
We're taking this a step further by integrating these AI agents with Nostr, making it easier for you to interact using your preferred Nostr client.
Here's How You Can Get Started:
Choose Your Agent: Browse through our list of AI agents to find the one that best suits your needs. PlebAI agents
Initiate Conversation: Navigate to their Nostr profile and either DM them with a prompt or tag them in a regular message. For instance, "@Vent Therapist, how can I lift my spirits?"
Wait for the Magic: If you've chosen a text-based agent, expect a response within 10-20 seconds.
For Image-Based Agents: If your chosen agent specializes in images, you'll receive a lightning invoice for payment. Once successful, your custom image will be delivered to you. Here is the list of Generative Image AI agents
Privacy & Open Conversations
Your conversations can be private or open, depending on how you initiate the chat. With DM your conversation with AI is private and only you can see messages. We also reconstruct conversation history from Nostr events, making interactions seamless and engaging, perfect for roleplay or more complex discussions.
AI is a creativity tool that can help you tell your story. here's an example Man Like kweks. He created all the visuals using Gen Image AI
As always, check it out and let me know for questions.
-
@ 32e18276:5c68e245
2023-10-10 12:02:37Hey guys, I'm spending some time today preparing v1.6 for the app store, it's been a long time coming with many new features. Here's a breakdown of everything new in this version!
Notable new features in 1.6
- Custom built, embedded C WASM interpreter (nostrscript), which will be used for custom algos, filters and lists
- Longform note support
- Hashtag following
- Configurable reactions
- New Live user status NIP (music, general)
- Adjustable font sizes
- A very long list of bug fixes and performance improvements
- Fast and persistent profile searching using nostrdb
Top priorities for 1.7
- Lists
- Custom algos and filters using nostrscript
- Stories
- Multi account
- Tor integration
- Better NWC integration (wallet balances, transaction history)
- Advanced note search via nostrdb
- Fully switch to nostrdb for all notes
- Discord-like relays (click a relay to view all the notes on it)
So much more but maybe I will not try to be too ambitious ...
Contributors
name added removed commits William Casarin +57964 -8274 288 petrikaj +1524 -0 1 Terry Yiu +1266 -964 9 ericholguin +1234 -252 11 Daniel D’Aquino +1223 -399 19 Suhail Saqan +905 -70 16 Grimless +838 -736 6 Bryan Montz +793 -744 30 Jon Marrs +658 -60 3 Joel Klabo +653 -105 6 transifex-integration[bot] +176 -0 9 Fishcake +129 -21 5 Daniel D‘Aquino +123 -9 5 Jericho Hasselbush +78 -2 2 cr0bar +66 -19 11 Daniel D'Aquino +55 -32 2 Mazin +53 -0 1 gladiusKatana +37 -8 1 doffing.brett +10 -6 1 tappu75e@duck.com +5 -1 2 Ben Harvie +5 -0 1
Changelog
- 76 Fixes
- 18 Changes
- 26 Additions
Added
- Add "Do not show #nsfw tagged posts" setting (Daniel D’Aquino)
- Add ability to change order of custom reactions (Suhail Saqan)
- Add close button to custom reactions (Suhail Saqan)
- Add followed hashtags to your following list (Daniel D’Aquino)
- Add initial longform note support (William Casarin)
- Add r tag when mentioning a url (William Casarin)
- Add relay log in developer mode (Montz)
- Add settings for disabling user statuses (William Casarin)
- Add space when tagging users in posts if needed (William Casarin)
- Add support for multilingual hashtags (cr0bar)
- Add support for multiple reactions (Suhail Saqan)
- Add support for status URLs (William Casarin)
- Add the ability to follow hashtags (William Casarin)
- Added feedback when user adds a relay that is already on the list (Daniel D'Aquino)
- Added generic user statuses (William Casarin)
- Added live music statuses (William Casarin)
- Added merch store button to sidebar menu (Daniel D’Aquino)
- Added padding under word count on longform account (William Casarin)
- Adjustable font size (William Casarin)
- Click music statuses to display in spotify (William Casarin)
- Enable banner image editing (Joel Klabo)
- Finnish translations (petrikaj)
- Hold tap to preview status URL (Jericho Hasselbush)
- Re-add nip05 badges to profiles (William Casarin)
- Show nostr address username and support abbreviated _ usernames (William Casarin)
- Suggested Users to Follow (Joel Klabo)
Changed
- Allow reposting and quote reposting multiple times (William Casarin)
- Damus icon now opens sidebar (Daniel D’Aquino)
- Hide nsec when logging in (cr0bar)
- Improve UX around clearing cache (Daniel D’Aquino)
- Improved memory usage and performance when processing events (William Casarin)
- Increase size of the hitbox on note ellipsis button (Daniel D’Aquino)
- Make carousel tab dots tappable (Bryan Montz)
- Move the "Follow you" badge into the profile header (Grimless)
- Remove nip05 on events (William Casarin)
- Remove note size restriction for longform events (William Casarin)
- Rename NIP05 to "nostr address" (William Casarin)
- Show muted thread replies at the bottom of the thread view (#1522) (Daniel D’Aquino)
- Show renotes in Notes timeline (William Casarin)
- Start at top when reading longform events (William Casarin)
- Switch to nostrdb for @'s and user search (William Casarin)
- Updated relay view (ericholguin)
- Use nostrdb for profiles (William Casarin)
- clear statuses if they only contain whitespace (William Casarin)
Fixed
- Allow relay logs to be opened in dev mode even if relay (Daniel D'Aquino)
- Allow user to login to deleted profile (William Casarin)
- Apply filters to hashtag search timeline view (Daniel D’Aquino)
- Avoid notification for zaps from muted profiles (tappu75e@duck.com)
- Crash when muting threads (Bryan Montz)
- Dismiss qr screen on scan (Suhail Saqan)
- Don't always show text events in reposts (William Casarin)
- Don't spam lnurls when validating zaps (William Casarin)
- Eliminate nostr address validation bandwidth on startup (William Casarin)
- Ensure the person you're replying to is the first entry in the reply description (William Casarin)
- Fix Invalid Zap bug in reposts (William Casarin)
- Fix PostView initial string to skip mentioning self when on own profile (Terry Yiu)
- Fix UI freeze after swiping back from profile (#1449) (Daniel D’Aquino)
- Fix UTF support for hashtags (Daniel D‘Aquino)
- Fix action bar appearing on quoted longform previews (William Casarin)
- Fix broken markdown renderer (William Casarin)
- Fix bug where it would sometimes show -1 in replies (tappu75e@duck.com)
- Fix compilation error on test target in UserSearchCacheTests (Daniel D‘Aquino)
- Fix crash when long pressing custom reactions (William Casarin)
- Fix crash when long-pressing reactions (William Casarin)
- Fix freezing bug when tapping Developer settings menu (Terry Yiu)
- Fix icons on settings view (cr0bar)
- Fix images and links occasionally appearing with escaped slashes (Daniel D‘Aquino)
- Fix issue where malicious zappers can send fake zaps to another user's posts (William Casarin)
- Fix issue where relays with trailing slashes cannot be removed (#1531) (Daniel D’Aquino)
- Fix issue where typing cc@bob would produce brokenb ccnostr:bob mention (William Casarin)
- Fix issue with emojis next to hashtags and urls (William Casarin)
- Fix issue with slashes on relay urls causing relay connection problems (William Casarin)
- Fix lag when creating large posts (William Casarin)
- Fix localization issues and export strings for translation (Terry Yiu)
- Fix localization issues and export strings for translation (Terry Yiu)
- Fix long status lines (William Casarin)
- Fix nav crashing and buggyness (William Casarin)
- Fix nostr:nostr:... bugs (William Casarin)
- Fix npub mentions failing to parse in some cases (William Casarin)
- Fix padding of username next to pfp on some views (William Casarin)
- Fix padding on longform events (William Casarin)
- Fix paragraphs not appearing on iOS17 (cr0bar)
- Fix parsing issue with NIP-47 compliant NWC urls without double-slashes (Daniel D’Aquino)
- Fix potential fake profile zap attacks (William Casarin)
- Fix profile not updating (William Casarin)
- Fix profile post button mentions (cr0bar)
- Fix profiles not updating (William Casarin)
- Fix rare crash triggered by local notifications (William Casarin)
- Fix reaction button breaking scrolling (Suhail Saqan)
- Fix situations where the note composer cursor gets stuck in one place after tagging a user (Daniel D’Aquino)
- Fix small graphical toolbar bug when scrolling profiles (Daniel D’Aquino)
- Fix some note composer issues, such as when copying/pasting larger text, and make the post composer more robust. (Daniel D’Aquino)
- Fix status events not expiring locally (William Casarin)
- Fix text composer wrapping issue when mentioning npub (Daniel D’Aquino)
- Fix text editing issues on characters added right after mention link (Daniel D’Aquino)
- Fix wiggle when long press reactions (Suhail Saqan)
- Fix wikipedia url detection with parenthesis (William Casarin)
- Fix zaps sometimes not appearing (William Casarin)
- Fixed a bug where following a user might not work due to poor connectivity (William Casarin)
- Fixed audio in video playing twice (Bryan Montz)
- Fixed disappearing text on iOS17 (cr0bar)
- Fixed issue where hashtags were leaking in DMs (William Casarin)
- Fixed issue where reposts would sometimes repost the wrong thing (William Casarin)
- Fixed issues where sometimes there would be empty entries on your profile (William Casarin)
- Fixed nav bar color on login, eula, and account creation (ericholguin)
- Fixed nostr reporting decoding (William Casarin)
- Fixed nostrscript not working on smaller phones (William Casarin)
- Fixed old notifications always appearing on first start (William Casarin)
- Fixes issue where username with multiple emojis would place cursor in strange position. (Jericho Hasselbush)
- Hide quoted or reposted notes from people whom the user has muted. (#1216) (Daniel D’Aquino)
- Hide users and hashtags from home timeline when you unfollow (William Casarin)
- Make blurred videos viewable by allowing blur to disappear once tapped (Daniel D’Aquino)
- Mute hellthreads everywhere (William Casarin)
- Show QRCameraView regardless of same user (Suhail Saqan)
- Show longform previews in notifications instead of the entire post (William Casarin)
- Stop tab buttons from causing the root view to scroll to the top unless user is coming from another tab or already at the root view (Daniel D’Aquino)
- don't cutoff text in notifications (William Casarin)
- endless connection attempt loop after user removes relay (Bryan Montz)
- icon color for developer mode setting is incorrect in low-light mode (Bryan Montz)
- relay detail view is not immediately available after adding new relay (Bryan Montz)
Removed
- Remove following Damus Will by default (William Casarin)
- Remove old @ and & hex key mentions (William Casarin)
-
@ e6ce6154:275e3444
2023-07-27 14:12:49Este artigo foi censurado pelo estado e fomos obrigados a deletá-lo após ameaça de homens armados virem nos visitar e agredir nossa vida e propriedade.
Isto é mais uma prova que os autoproclamados antirracistas são piores que os racistas.
https://rothbardbrasil.com/pelo-direito-de-ser-racista-fascista-machista-e-homofobico
Segue artigo na íntegra. 👇
Sem dúvida, a escalada autoritária do totalitarismo cultural progressista nos últimos anos tem sido sumariamente deletéria e prejudicial para a liberdade de expressão. Como seria de se esperar, a cada dia que passa o autoritarismo progressista continua a se expandir de maneira irrefreável, prejudicando a liberdade dos indivíduos de formas cada vez mais deploráveis e contundentes.
Com a ascensão da tirania politicamente correta e sua invasão a todos os terrenos culturais, o autoritarismo progressista foi se alastrando e consolidando sua hegemonia em determinados segmentos. Com a eventual eclosão e a expansão da opressiva e despótica cultura do cancelamento — uma progênie inevitável do totalitarismo progressista —, todas as pessoas que manifestam opiniões, crenças ou posicionamentos que não estão alinhados com as pautas universitárias da moda tornam-se um alvo.
Há algumas semanas, vimos a enorme repercussão causada pelo caso envolvendo o jogador profissional de vôlei Maurício Sousa, que foi cancelado pelo simples fato de ter emitido sua opinião pessoal sobre um personagem de história em quadrinhos, Jon Kent, o novo Superman, que é bissexual. Maurício Sousa reprovou a conduta sexual do personagem, o que é um direito pessoal inalienável que ele tem. Ele não é obrigado a gostar ou aprovar a bissexualidade. Como qualquer pessoa, ele tem o direito pleno de criticar tudo aquilo que ele não gosta. No entanto, pelo simples fato de emitir a sua opinião pessoal, Maurício Sousa foi acusado de homofobia e teve seu contrato rescindido, sendo desligado do Minas Tênis Clube.
Lamentavelmente, Maurício Sousa não foi o primeiro e nem será o último indivíduo a sofrer com a opressiva e autoritária cultura do cancelamento. Como uma tirania cultural que está em plena ascensão e usufrui de um amplo apoio do establishment, essa nova forma de totalitarismo cultural colorido e festivo está se impondo de formas e maneiras bastante contundentes em praticamente todas as esferas da sociedade contemporânea. Sua intenção é relegar ao ostracismo todos aqueles que não se curvam ao totalitarismo progressista, criminalizando opiniões e crenças que divergem do culto à libertinagem hedonista pós-moderna. Oculto por trás de todo esse ativismo autoritário, o que temos de fato é uma profunda hostilidade por padrões morais tradicionalistas, cristãos e conservadores.
No entanto, é fundamental entendermos uma questão imperativa, que explica em partes o conflito aqui criado — todos os progressistas contemporâneos são crias oriundas do direito positivo. Por essa razão, eles jamais entenderão de forma pragmática e objetiva conceitos como criminalidade, direitos de propriedade, agressão e liberdade de expressão pela perspectiva do jusnaturalismo, que é manifestamente o direito em seu estado mais puro, correto, ético e equilibrado.
Pela ótica jusnaturalista, uma opinião é uma opinião. Ponto final. E absolutamente ninguém deve ser preso, cancelado, sabotado ou boicotado por expressar uma opinião particular sobre qualquer assunto. Palavras não agridem ninguém, portanto jamais poderiam ser consideradas um crime em si. Apenas deveriam ser tipificados como crimes agressões de caráter objetivo, como roubo, sequestro, fraude, extorsão, estupro e infrações similares, que representam uma ameaça direta à integridade física da vítima, ou que busquem subtrair alguma posse empregando a violência.
Infelizmente, a geração floquinho de neve — terrivelmente histérica, egocêntrica e sensível — fica profundamente ofendida e consternada sempre que alguém defende posicionamentos contrários à religião progressista. Por essa razão, os guerreiros da justiça social sinceramente acreditam que o papai-estado deve censurar todas as opiniões que eles não gostam de ouvir, assim como deve também criar leis para encarcerar todos aqueles que falam ou escrevem coisas que desagradam a militância.
Como a geração floquinho de neve foi criada para acreditar que todas as suas vontades pessoais e disposições ideológicas devem ser sumariamente atendidas pelo papai-estado, eles embarcaram em uma cruzada moral que pretende erradicar todas as coisas que são ofensivas à ideologia progressista; só assim eles poderão deflagrar na Terra o seu tão sonhado paraíso hedonista e igualitário, de inimaginável esplendor e felicidade.
Em virtude do seu comportamento intrinsecamente despótico, autoritário e egocêntrico, acaba sendo inevitável que militantes progressistas problematizem tudo aquilo que os desagrada.
Como são criaturas inúteis destituídas de ocupação real e verdadeiro sentido na vida, sendo oprimidas unicamente na sua própria imaginação, militantes progressistas precisam constantemente inventar novos vilões para serem combatidos.
Partindo dessa perspectiva, é natural para a militância que absolutamente tudo que exista no mundo e que não se enquadra com as regras autoritárias e restritivas da religião progressista seja encarado como um problema. Para a geração floquinho de neve, o capitalismo é um problema. O fascismo é um problema. A iniciativa privada é um problema. O homem branco, tradicionalista, conservador e heterossexual é um problema. A desigualdade é um problema. A liberdade é um problema. Monteiro Lobato é um problema (sim, até mesmo o renomado ícone da literatura brasileira, autor — entre outros títulos — de Urupês, foi vítima da cultura do cancelamento, acusado de ser racista e eugenista).
Para a esquerda, praticamente tudo é um problema. Na mentalidade da militância progressista, tudo é motivo para reclamação. Foi em função desse comportamento histérico, histriônico e infantil que o famoso pensador conservador-libertário americano P. J. O’Rourke afirmou que “o esquerdismo é uma filosofia de pirralhos chorões”. O que é uma verdade absoluta e irrefutável em todos os sentidos.
De fato, todas as filosofias de esquerda de forma geral são idealizações utópicas e infantis de um mundo perfeito. Enquanto o mundo não se transformar naquela colorida e vibrante utopia que é apresentada pela cartilha socialista padrão, militantes continuarão a reclamar contra tudo o que existe no mundo de forma agressiva, visceral e beligerante. Evidentemente, eles não vão fazer absolutamente nada de positivo ou construtivo para que o mundo se transforme no gracioso paraíso que eles tanto desejam ver consolidado, mas eles continuarão a berrar e vociferar muito em sua busca incessante pela utopia, marcando presença em passeatas inúteis ou combatendo o fascismo imaginário nas redes sociais.
Sem dúvida, estamos muito perto de ver leis absurdas e estúpidas sendo implementadas, para agradar a militância da terra colorida do assistencialismo eterno onde nada é escasso e tudo cai do céu. Em breve, você não poderá usar calças pretas, pois elas serão consideradas peças de vestuário excessivamente heterossexuais. Apenas calças amarelas ou coloridas serão permitidas. Você também terá que tingir de cor-de-rosa uma mecha do seu cabelo; pois preservar o seu cabelo na sua cor natural é heteronormativo demais da sua parte, sendo portanto um componente demasiadamente opressor da sociedade.
Você também não poderá ver filmes de guerra ou de ação, apenas comédias românticas, pois certos gêneros de filmes exaltam a violência do patriarcado e isso impede o mundo de se tornar uma graciosa festa colorida de fraternidades universitárias ungidas por pôneis resplandecentes, hedonismo infinito, vadiagem universitária e autogratificação psicodélica, que certamente são elementos indispensáveis para se produzir o paraíso na Terra.
Sabemos perfeitamente, no entanto, que dentre as atitudes “opressivas” que a militância progressista mais se empenha em combater, estão o racismo, o fascismo, o machismo e a homofobia. No entanto, é fundamental entender que ser racista, fascista, machista ou homofóbico não são crimes em si. Na prática, todos esses elementos são apenas traços de personalidade; e eles não podem ser pura e simplesmente criminalizados porque ideólogos e militantes progressistas iluminados não gostam deles.
Tanto pela ética quanto pela ótica jusnaturalista, é facilmente compreensível entender que esses traços de personalidade não podem ser criminalizados ou proibidos simplesmente porque integrantes de uma ideologia não tem nenhuma apreciação ou simpatia por eles. Da mesma forma, nenhum desses traços de personalidade representa em si um perigo para a sociedade, pelo simples fato de existir. Por incrível que pareça, até mesmo o machismo, o racismo, o fascismo e a homofobia merecem a devida apologia.
Mas vamos analisar cada um desses tópicos separadamente para entender isso melhor.
Racismo
Quando falamos no Japão, normalmente não fazemos nenhuma associação da sociedade japonesa com o racismo. No entanto, é incontestável o fato de que a sociedade japonesa pode ser considerada uma das sociedades mais racistas do mundo. E a verdade é que não há absolutamente nada de errado com isso.
Aproximadamente 97% da população do Japão é nativa; apenas 3% do componente populacional é constituído por estrangeiros (a população do Japão é estimada em aproximadamente 126 milhões de habitantes). Isso faz a sociedade japonesa ser uma das mais homogêneas do mundo. As autoridades japonesas reconhecidamente dificultam processos de seleção e aplicação a estrangeiros que desejam se tornar residentes. E a maioria dos japoneses aprova essa decisão.
Diversos estabelecimentos comerciais como hotéis, bares e restaurantes por todo o país tem placas na entrada que dizem “somente para japoneses” e a maioria destes estabelecimentos se recusa ostensivamente a atender ou aceitar clientes estrangeiros, não importa quão ricos ou abastados sejam.
Na Terra do Sol Nascente, a hostilidade e a desconfiança natural para com estrangeiros é tão grande que até mesmo indivíduos que nascem em algum outro país, mas são filhos de pais japoneses, não são considerados cidadãos plenamente japoneses.
Se estes indivíduos decidem sair do seu país de origem para se estabelecer no Japão — mesmo tendo descendência nipônica legítima e inquestionável —, eles enfrentarão uma discriminação social considerável, especialmente se não dominarem o idioma japonês de forma impecável. Esse fato mostra que a discriminação é uma parte tão indissociável quanto elementar da sociedade japonesa, e ela está tão profundamente arraigada à cultura nipônica que é praticamente impossível alterá-la ou atenuá-la por qualquer motivo.
A verdade é que — quando falamos de um país como o Japão — nem todos os discursos politicamente corretos do mundo, nem a histeria progressista ocidental mais inflamada poderão algum dia modificar, extirpar ou sequer atenuar o componente racista da cultura nipônica. E isso é consequência de uma questão tão simples quanto primordial: discriminar faz parte da natureza humana, sendo tanto um direito individual quanto um elemento cultural inerente à muitas nações do mundo. Os japoneses não tem problema algum em admitir ou institucionalizar o seu preconceito, justamente pelo fato de que a ideologia politicamente correta não tem no oriente a força e a presença que tem no ocidente.
E é fundamental enfatizar que, sendo de natureza pacífica — ou seja, não violando nem agredindo terceiros —, a discriminação é um recurso natural dos seres humanos, que está diretamente associada a questões como familiaridade e segurança.
Absolutamente ninguém deve ser forçado a apreciar ou integrar-se a raças, etnias, pessoas ou tribos que não lhe transmitem sentimentos de segurança ou familiaridade. Integração forçada é o verdadeiro crime, e isso diversos países europeus — principalmente os escandinavos (países que lideram o ranking de submissão à ideologia politicamente correta) — aprenderam da pior forma possível.
A integração forçada com imigrantes islâmicos resultou em ondas de assassinato, estupro e violência inimagináveis para diversos países europeus, até então civilizados, que a imprensa ocidental politicamente correta e a militância progressista estão permanentemente tentando esconder, porque não desejam que o ocidente descubra como a agenda “humanitária” de integração forçada dos povos muçulmanos em países do Velho Mundo resultou em algumas das piores chacinas e tragédias na história recente da Europa.
Ou seja, ao discriminarem estrangeiros, os japoneses estão apenas se protegendo e lutando para preservar sua nação como um ambiente cultural, étnico e social que lhe é seguro e familiar, assim se opondo a mudanças bruscas, indesejadas e antinaturais, que poderiam comprometer a estabilidade social do país.
A discriminação — sendo de natureza pacífica —, é benévola, salutar e indubitavelmente ajuda a manter a estabilidade social da comunidade. Toda e qualquer forma de integração forçada deve ser repudiada com veemência, pois, mais cedo ou mais tarde, ela irá subverter a ordem social vigente, e sempre será acompanhada de deploráveis e dramáticos resultados.
Para citar novamente os países escandinavos, a Suécia é um excelente exemplo do que não fazer. Tendo seguido o caminho contrário ao da discriminação racional praticada pela sociedade japonesa, atualmente a sociedade sueca — além de afundar de forma consistente na lama da libertinagem, da decadência e da deterioração progressista — sofre em demasia com os imigrantes muçulmanos, que foram deixados praticamente livres para matar, saquear, esquartejar e estuprar quem eles quiserem. Hoje, eles são praticamente intocáveis, visto que denunciá-los, desmoralizá-los ou acusá-los de qualquer crime é uma atitude politicamente incorreta e altamente reprovada pelo establishment progressista. A elite socialista sueca jamais se atreve a acusá-los de qualquer crime, pois temem ser classificados como xenófobos e intolerantes. Ou seja, a desgraça da Europa, sobretudo dos países escandinavos, foi não ter oferecido nenhuma resistência à ideologia progressista politicamente correta. Hoje, eles são totalmente submissos a ela.
O exemplo do Japão mostra, portanto — para além de qualquer dúvida —, a importância ética e prática da discriminação, que é perfeitamente aceitável e natural, sendo uma tendência inerente aos seres humanos, e portanto intrínseca a determinados comportamentos, sociedades e culturas.
Indo ainda mais longe nessa questão, devemos entender que na verdade todos nós discriminamos, e não existe absolutamente nada de errado nisso. Discriminar pessoas faz parte da natureza humana e quem se recusa a admitir esse fato é um hipócrita. Mulheres discriminam homens na hora de selecionar um parceiro; elas avaliam diversos quesitos, como altura, aparência, status social, condição financeira e carisma. E dentre suas opções, elas sempre escolherão o homem mais atraente, másculo e viril, em detrimento de todos os baixinhos, calvos, carentes, frágeis e inibidos que possam estar disponíveis. Da mesma forma, homens sempre terão preferência por mulheres jovens, atraentes e delicadas, em detrimento de todas as feministas de meia-idade, acima do peso, de cabelo pintado, que são mães solteiras e militantes socialistas. A própria militância progressista discrimina pessoas de forma virulenta e intransigente, como fica evidente no tratamento que dispensam a mulheres bolsonaristas e a negros de direita.
A verdade é que — não importa o nível de histeria da militância progressista — a discriminação é inerente à condição humana e um direito natural inalienável de todos. É parte indissociável da natureza humana e qualquer pessoa pode e deve exercer esse direito sempre que desejar. Não existe absolutamente nada de errado em discriminar pessoas. O problema real é a ideologia progressista e o autoritarismo politicamente correto, movimentos tirânicos que não respeitam o direito das pessoas de discriminar.
Fascismo
Quando falamos de fascismo, precisamos entender que, para a esquerda política, o fascismo é compreendido como um conceito completamente divorciado do seu significado original. Para um militante de esquerda, fascista é todo aquele que defende posicionamentos contrários ao progressismo, não se referindo necessariamente a um fascista clássico.
Mas, seja como for, é necessário entender que — como qualquer ideologia política — até mesmo o fascismo clássico tem o direito de existir e ocupar o seu devido lugar; portanto, fascistas não devem ser arbitrariamente censurados, apesar de defenderem conceitos que representam uma completa antítese de tudo aquilo que é valioso para os entusiastas da liberdade.
Em um país como o Brasil, onde socialistas e comunistas tem total liberdade para se expressar, defender suas ideologias e até mesmo formar partidos políticos, não faz absolutamente o menor sentido que fascistas — e até mesmo nazistas assumidos — sofram qualquer tipo de discriminação. Embora socialistas e comunistas se sintam moralmente superiores aos fascistas (ou a qualquer outra filosofia política ou escola de pensamento), sabemos perfeitamente que o seu senso de superioridade é fruto de uma pueril romantização universitária da sua própria ideologia. A história mostra efetivamente que o socialismo clássico e o comunismo causaram muito mais destruição do que o fascismo.
Portanto, se socialistas e comunistas tem total liberdade para se expressar, não existe a menor razão para que fascistas não usufruam dessa mesma liberdade.
É claro, nesse ponto, seremos invariavelmente confrontados por um oportuno dilema — o famoso paradoxo da intolerância, de Karl Popper. Até que ponto uma sociedade livre e tolerante deve tolerar a intolerância (inerente a ideologias totalitárias)?
As leis de propriedade privada resolveriam isso em uma sociedade livre. O mais importante a levarmos em consideração no atual contexto, no entanto — ao defender ou criticar uma determinada ideologia, filosofia ou escola de pensamento —, é entender que, seja ela qual for, ela tem o direito de existir. E todas as pessoas que a defendem tem o direito de defendê-la, da mesma maneira que todos os seus detratores tem o direito de criticá-la.
Essa é uma forte razão para jamais apoiarmos a censura. Muito pelo contrário, devemos repudiar com veemência e intransigência toda e qualquer forma de censura, especialmente a estatal.
Existem duas fortes razões para isso:
A primeira delas é a volatilidade da censura (especialmente a estatal). A censura oficial do governo, depois que é implementada, torna-se absolutamente incontrolável. Hoje, ela pode estar apontada para um grupo de pessoas cujas ideias divergem das suas. Mas amanhã, ela pode estar apontada justamente para as ideias que você defende. É fundamental, portanto, compreendermos que a censura estatal é incontrolável. Sob qualquer ponto de vista, é muito mais vantajoso que exista uma vasta pluralidade de ideias conflitantes na sociedade competindo entre si, do que o estado decidir que ideias podem ser difundidas ou não.
Além do mais, libertários e anarcocapitalistas não podem nunca esperar qualquer tipo de simpatia por parte das autoridades governamentais. Para o estado, seria infinitamente mais prático e vantajoso criminalizar o libertarianismo e o anarcocapitalismo — sob a alegação de que são filosofias perigosas difundidas por extremistas radicais que ameaçam o estado democrático de direito — do que o fascismo ou qualquer outra ideologia centralizada em governos burocráticos e onipotentes. Portanto, defender a censura, especialmente a estatal, representa sempre um perigo para o próprio indivíduo, que mais cedo ou mais tarde poderá ver a censura oficial do sistema se voltar contra ele.
Outra razão pela qual libertários jamais devem defender a censura, é porque — ao contrário dos estatistas — não é coerente que defensores da liberdade se comportem como se o estado fosse o seu papai e o governo fosse a sua mamãe. Não devemos terceirizar nossas próprias responsabilidades, tampouco devemos nos comportar como adultos infantilizados. Assumimos a responsabilidade de combater todas as ideologias e filosofias que agridem a liberdade e os seres humanos. Não procuramos políticos ou burocratas para executar essa tarefa por nós.
Portanto, se você ver um fascista sendo censurado nas redes sociais ou em qualquer outro lugar, assuma suas dores. Sinta-se compelido a defendê-lo, mostre aos seus detratores que ele tem todo direito de se expressar, como qualquer pessoa. Você não tem obrigação de concordar com ele ou apreciar as ideias que ele defende. Mas silenciar arbitrariamente qualquer pessoa não é uma pauta que honra a liberdade.
Se você não gosta de estado, planejamento central, burocracia, impostos, tarifas, políticas coletivistas, nacionalistas e desenvolvimentistas, mostre com argumentos coesos e convincentes porque a liberdade e o livre mercado são superiores a todos esses conceitos. Mas repudie a censura com intransigência e mordacidade.
Em primeiro lugar, porque você aprecia e defende a liberdade de expressão para todas as pessoas. E em segundo lugar, por entender perfeitamente que — se a censura eventualmente se tornar uma política de estado vigente entre a sociedade — é mais provável que ela atinja primeiro os defensores da liberdade do que os defensores do estado.
Machismo
Muitos elementos do comportamento masculino que hoje são atacados com virulência e considerados machistas pelo movimento progressista são na verdade manifestações naturais intrínsecas ao homem, que nossos avôs cultivaram ao longo de suas vidas sem serem recriminados por isso. Com a ascensão do feminismo, do progressismo e a eventual problematização do sexo masculino, o antagonismo militante dos principais líderes da revolução sexual da contracultura passou a naturalmente condenar todos os atributos genuinamente masculinos, por considerá-los símbolos de opressão e dominação social.
Apesar do Brasil ser uma sociedade liberal ultra-progressista, onde o estado protege mais as mulheres do que as crianças — afinal, a cada semana novas leis são implementadas concedendo inúmeros privilégios e benefícios às mulheres, aos quais elas jamais teriam direito em uma sociedade genuinamente machista e patriarcal —, a esquerda política persiste em tentar difundir a fantasia da opressão masculina e o mito de que vivemos em uma sociedade machista e patriarcal.
Como sempre, a realidade mostra um cenário muito diferente daquilo que é pregado pela militância da terra da fantasia. O Brasil atual não tem absolutamente nada de machista ou patriarcal. No Brasil, mulheres podem votar, podem ocupar posições de poder e autoridade tanto na esfera pública quanto em companhias privadas, podem se candidatar a cargos políticos, podem ser vereadoras, deputadas, governadoras, podem ser proprietárias do próprio negócio, podem se divorciar, podem dirigir, podem comprar armas, podem andar de biquíni nas praias, podem usar saias extremamente curtas, podem ver programas de televisão sobre sexo voltados única e exclusivamente para o público feminino, podem se casar com outras mulheres, podem ser promíscuas, podem consumir bebidas alcoólicas ao ponto da embriaguez, e podem fazer praticamente tudo aquilo que elas desejarem. No Brasil do século XXI, as mulheres são genuinamente livres para fazer as próprias escolhas em praticamente todos os aspectos de suas vidas. O que mostra efetivamente que a tal opressão do patriarcado não existe.
O liberalismo social extremo do qual as mulheres usufruem no Brasil atual — e que poderíamos estender a toda a sociedade contemporânea ocidental — é suficiente para desmantelar completamente a fábula feminista da sociedade patriarcal machista e opressora, que existe única e exclusivamente no mundinho de fantasias ideológicas da esquerda progressista.
Tão importante quanto, é fundamental compreender que nenhum homem é obrigado a levar o feminismo a sério ou considerá-lo um movimento social e político legítimo. Para um homem, ser considerado machista ou até mesmo assumir-se como um não deveria ser um problema. O progressismo e o feminismo — com o seu nefasto hábito de demonizar os homens, bem como todos os elementos inerentes ao comportamento e a cultura masculina — é que são o verdadeiro problema, conforme tentam modificar o homem para transformá-lo em algo que ele não é nem deveria ser: uma criatura dócil, passiva e submissa, que é comandada por ideologias hostis e antinaturais, que não respeitam a hierarquia de uma ordem social milenar e condições inerentes à própria natureza humana. Com o seu hábito de tentar modificar tudo através de leis e decretos, o feminismo e o progressismo mostram efetivamente que o seu real objetivo é criminalizar a masculinidade.
A verdade é que — usufruindo de um nível elevado de liberdades — não existe praticamente nada que a mulher brasileira do século XXI não possa fazer. Adicionalmente, o governo dá as mulheres uma quantidade tão avassaladora de vantagens, privilégios e benefícios, que está ficando cada vez mais difícil para elas encontrarem razões válidas para reclamarem da vida. Se o projeto de lei que pretende fornecer um auxílio mensal de mil e duzentos reais para mães solteiras for aprovado pelo senado, muitas mulheres que tem filhos não precisarão nem mesmo trabalhar para ter sustento. E tantas outras procurarão engravidar, para ter direito a receber uma mesada mensal do governo até o seu filho completar a maioridade.
O que a militância colorida da terra da fantasia convenientemente ignora — pois a realidade nunca corresponde ao seu conto de fadas ideológico — é que o mundo de uma forma geral continua sendo muito mais implacável com os homens do que é com as mulheres. No Brasil, a esmagadora maioria dos suicídios é praticada por homens, a maioria das vítimas de homicídio são homens e de cada quatro moradores de rua, três são homens. Mas é evidente que uma sociedade liberal ultra-progressista não se importa com os homens, pois ela não é influenciada por fatos concretos ou pela realidade. Seu objetivo é simplesmente atender as disposições de uma agenda ideológica, não importa quão divorciadas da realidade elas são.
O nível exacerbado de liberdades sociais e privilégios governamentais dos quais as mulheres brasileiras usufruem é suficiente para destruir a fantasiosa fábula da sociedade machista, opressora e patriarcal. Se as mulheres brasileiras não estão felizes, a culpa definitivamente não é dos homens. Se a vasta profusão de liberdades, privilégios e benefícios da sociedade ocidental não as deixa plenamente saciadas e satisfeitas, elas podem sempre mudar de ares e tentar uma vida mais abnegada e espartana em países como Irã, Paquistão ou Afeganistão. Quem sabe assim elas não se sentirão melhores e mais realizadas?
Homofobia
Quando falamos em homofobia, entramos em uma categoria muito parecida com a do racismo: o direito de discriminação é totalmente válido. Absolutamente ninguém deve ser obrigado a aceitar homossexuais ou considerar o homossexualismo como algo normal. Sendo cristão, não existe nem sequer a mais vaga possibilidade de que algum dia eu venha a aceitar o homossexualismo como algo natural. O homossexualismo se qualifica como um grave desvio de conduta e um pecado contra o Criador.
A Bíblia proíbe terminantemente conduta sexual imoral, o que — além do homossexualismo — inclui adultério, fornicação, incesto e bestialidade, entre outras formas igualmente pérfidas de degradação.
Segue abaixo três passagens bíblicas que proíbem terminantemente a conduta homossexual:
“Não te deitarás com um homem como se deita com uma mulher. Isso é abominável!” (Levítico 18:22 — King James Atualizada)
“Se um homem se deitar com outro homem, como se deita com mulher, ambos terão praticado abominação; certamente serão mortos; o seu sangue estará sobre eles.” (Levítico 20:13 — João Ferreira de Almeida Atualizada)
“O quê! Não sabeis que os injustos não herdarão o reino de Deus? Não sejais desencaminhados. Nem fornicadores, nem idólatras, nem adúlteros, nem homens mantidos para propósitos desnaturais, nem homens que se deitam com homens, nem ladrões, nem gananciosos, nem beberrões, nem injuriadores, nem extorsores herdarão o reino de Deus.” (1 Coríntios 6:9,10 —Tradução do Novo Mundo das Escrituras Sagradas com Referências)
Se você não é religioso, pode simplesmente levar em consideração o argumento do respeito pela ordem natural. A ordem natural é incondicional e incisiva com relação a uma questão: o complemento de tudo o que existe é o seu oposto, não o seu igual. O complemento do dia é a noite, o complemento da luz é a escuridão, o complemento da água, que é líquida, é a terra, que é sólida. E como sabemos o complemento do macho — de sua respectiva espécie — é a fêmea.
Portanto, o complemento do homem, o macho da espécie humana, é naturalmente a mulher, a fêmea da espécie humana. Um homem e uma mulher podem naturalmente se reproduzir, porque são um complemento biológico natural. Por outro lado, um homem e outro homem são incapazes de se reproduzir, assim como uma mulher e outra mulher.
Infelizmente, o mundo atual está longe de aceitar como plenamente estabelecida a ordem natural pelo simples fato dela existir, visto que tentam subvertê-la a qualquer custo, não importa o malabarismo intelectual que tenham que fazer para justificar os seus pontos de vista distorcidos e antinaturais. A libertinagem irrefreável e a imoralidade bestial do mundo contemporâneo pós-moderno não reconhecem nenhum tipo de limite. Quem tenta restabelecer princípios morais salutares é imediatamente considerado um vilão retrógrado e repressivo, sendo ativamente demonizado pela militância do hedonismo, da luxúria e da licenciosidade desenfreada e sem limites.
Definitivamente, fazer a apologia da moralidade, do autocontrole e do autodomínio não faz nenhum sucesso na Sodoma e Gomorra global dos dias atuais. O que faz sucesso é lacração, devassidão, promiscuidade e prazeres carnais vazios. O famoso escritor e filósofo francês Albert Camus expressou uma verdade contundente quando disse: “Uma só frase lhe bastará para definir o homem moderno — fornicava e lia jornais”.
Qualquer indivíduo tem o direito inalienável de discriminar ativamente homossexuais, pelo direito que ele julgar mais pertinente no seu caso. A objeção de consciência para qualquer situação é um direito natural dos indivíduos. Há alguns anos, um caso que aconteceu nos Estados Unidos ganhou enorme repercussão internacional, quando o confeiteiro Jack Phillips se recusou a fazer um bolo de casamento para o “casal” homossexual Dave Mullins e Charlie Craig.
Uma representação dos direitos civis do estado do Colorado abriu um inquérito contra o confeiteiro, alegando que ele deveria ser obrigado a atender todos os clientes, independente da orientação sexual, raça ou crença. Preste atenção nas palavras usadas — ele deveria ser obrigado a atender.
Como se recusou bravamente a ceder, o caso foi parar invariavelmente na Suprema Corte, que decidiu por sete a dois em favor de Jack Phillips, sob a alegação de que obrigar o confeiteiro a atender o “casal” homossexual era uma violação nefasta dos seus princípios religiosos. Felizmente, esse foi um caso em que a liberdade prevaleceu sobre a tirania progressista.
Evidentemente, homossexuais não devem ser agredidos, ofendidos, internados em clínicas contra a sua vontade, nem devem ser constrangidos em suas liberdades pelo fato de serem homossexuais. O que eles precisam entender é que a liberdade é uma via de mão dupla. Eles podem ter liberdade para adotar a conduta que desejarem e fazer o que quiserem (contanto que não agridam ninguém), mas da mesma forma, é fundamental respeitar e preservar a liberdade de terceiros que desejam rejeitá-los pacificamente, pelo motivo que for.
Afinal, ninguém tem a menor obrigação de aceitá-los, atendê-los ou sequer pensar que uma união estável entre duas pessoas do mesmo sexo — incapaz de gerar descendentes, e, portanto, antinatural — deva ser considerado um matrimônio de verdade. Absolutamente nenhuma pessoa, ideia, movimento, crença ou ideologia usufrui de plena unanimidade no mundo. Por que o homossexualismo deveria ter tal privilégio?
Homossexuais não são portadores de uma verdade definitiva, absoluta e indiscutível, que está acima da humanidade. São seres humanos comuns que — na melhor das hipóteses —, levam um estilo de vida que pode ser considerado “alternativo”, e absolutamente ninguém tem a obrigação de considerar esse estilo de vida normal ou aceitável. A única obrigação das pessoas é não interferir, e isso não implica uma obrigação em aceitar.
Discriminar homossexuais (assim como pessoas de qualquer outro grupo, raça, religião, nacionalidade ou etnia) é um direito natural por parte de todos aqueles que desejam exercer esse direito. E isso nem o direito positivo nem a militância progressista poderão algum dia alterar ou subverter. O direito natural e a inclinação inerente dos seres humanos em atender às suas próprias disposições é simplesmente imutável e faz parte do seu conjunto de necessidades.
Conclusão
A militância progressista é absurdamente autoritária, e todas as suas estratégias e disposições ideológicas mostram que ela está em uma guerra permanente contra a ordem natural, contra a liberdade e principalmente contra o homem branco, cristão, conservador e tradicionalista — possivelmente, aquilo que ela mais odeia e despreza.
Nós não podemos, no entanto, ceder ou dar espaço para a agenda progressista, tampouco pensar em considerar como sendo normais todas as pautas abusivas e tirânicas que a militância pretende estabelecer como sendo perfeitamente razoáveis e aceitáveis, quer a sociedade aceite isso ou não. Afinal, conforme formos cedendo, o progressismo tirânico e totalitário tende a ganhar cada vez mais espaço.
Quanto mais espaço o progressismo conquistar, mais corroída será a liberdade e mais impulso ganhará o totalitarismo. Com isso, a cultura do cancelamento vai acabar com carreiras, profissões e com o sustento de muitas pessoas, pelo simples fato de que elas discordam das pautas universitárias da moda.
A história mostra perfeitamente que quanto mais liberdade uma sociedade tem, mais progresso ela atinge. Por outro lado, quanto mais autoritária ela for, mais retrocessos ela sofrerá. O autoritarismo se combate com liberdade, desafiando as pautas de todos aqueles que persistem em implementar a tirania na sociedade. O politicamente correto é o nazismo dos costumes, que pretende subverter a moral através de uma cultura de vigilância policial despótica e autoritária, para que toda a sociedade seja subjugada pela agenda totalitária progressista.
Pois quanto a nós, precisamos continuar travando o bom combate em nome da liberdade. E isso inclui reconhecer que ideologias, hábitos e costumes de que não gostamos tem o direito de existir e até mesmo de serem defendidos.
-
@ b3590d02:0f2b1ae4
2023-07-06 18:44:20Verification: tweet
Badge implications:
- an account that joined Twitter in 2010 or earlier
- an account with fewer than 10,000 followers
Twitter user tweetious profile information:
- Joined in 2008
- Follower count: 699
- Following count: 529
-
@ 2edbcea6:40558884
2023-10-08 15:27:57Happy Sunday #Nostr !
Here’s your #NostrTechWeekly newsletter brought to you by nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk written by nostr:npub1r3fwhjpx2njy87f9qxmapjn9neutwh7aeww95e03drkfg45cey4qgl7ex2
NostrTechWeekly is a weekly newsletter focused on the more technical happenings in the nostr-verse.
Let’s dive in!
Recent Upgrades to Nostr (AKA NIPs)
1) (Proposed) NIP 43: Fast Auth between clients and relays
Some relays are member-only. There has to be some way for relays to verify the content being sent/requested is from an authorized user (one of the members). Most methods for this are clunky and slow.
This NIP proposes a faster method for auth between clients and relays. From what I can tell when clients open a connection to a relay they’ll open it with an “authorization” query parameter on the end of the relay url. That query param will actually be an encoded Nostr event whose payload has the necessary info for the relay to authenticate the user opening the connection.
Kinda looks like an auth header like you’d see in an http request but shoehorned into a query parameter since websockets (which are used for connections to relays) don’t traditionally support headers.
Author: aruthurfranca
2) (Proposed) Updates to NIP 03: Timestamps you can rely on
Sometimes you want to make sure that a piece of Nostr content was actually created/pushed to a relay at a specific time. The example from last week was in the case of a future betting system built on Nostr, you really don’t want people to be able to publish that they made a bet 2 weeks ago for something whose outcome was determined twenty minutes ago.
NIP-3 already outlines a way to add OpenTimestamp attestations to Nostr events essentially allowing Nostr clients to outsource trust to a third party on whether a piece of content was created when it claims to be created. As is, NIP 3 is a little hard to use. This update would make it far simpler.
In the new methodology, you’d publish a Nostr event of kind 1040 with the proof of timestamp and point to the event that you’re trying to prove the timestamp for.
Author: nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6
Notable Projects
Cellar Relay
If you haven’t been graced by the nostr.wine community they are a group of fine folks that host wine-themed relays. They’re some of the most reliable and widely used public and paid relays around.
nostr:npub18kzz4lkdtc5n729kvfunxuz287uvu9f64ywhjz43ra482t2y5sks0mx5sz recently announced the “Cellar” Relay that will store notes long term for paid users. Like we talked about in last week’s #NostrTechWeekly long-term note storage is a challenge for relay hosts (especially for relays that are free to users). But solving long term storage will help folks on Nostr feel like they’re building a persistent social experience instead of building an ephemeral feed.
Nice work! Glad to see the trend continuing for long-term note storage. 💪
Memestr.app
I can’t tell you how many times folks I talk to have said there should be a meme-focused client on Nostr. nostr:npub1zumzudhtu2558fgvycnjlc7pq9l4m338vghgcfzafftz9qg45ruslzpl4x delivers with https://memestr.app I definitely had some giggles when I logged on.
This could quickly evolve into a nostr-based Imgur and be far better for being nostr-based. But one thing I think is missing from the internet (not just Nostr) is a way to iterate on memes easily in the same place where you can share them. In combination with prisms/boosts this could be an interesting way for people to make money for their content and earn from what is built on top of their content.
Zap threads
Threaded conversations are an important component to social experiences on the internet. Reddit and Hackernews have really shown its power, we’ve seen StackerNews also leverage this format as well.
nostr:npub1wf4pufsucer5va8g9p0rj5dnhvfeh6d8w0g6eayaep5dhps6rsgs43dgh9 has created a nostr-based component for supporting the threaded comments, and it looks like it could be used in any web-application that needs commenting, spreading Nostr to every corner of the internet. It’s already powering the commenting on Habla.News
nostr:npub1wf4pufsucer5va8g9p0rj5dnhvfeh6d8w0g6eayaep5dhps6rsgs43dgh9 also did a great writeup on the reasoning for this project and where it’s going: https://habla.news/franzap/threading-the-web-with-nostr
If you need comments on your project, take a look!
Latest conversations: How decentralized is decentralized enough?
Distributed vs Decentralized
These two concepts are often used interchangeably, and it’s worth highlighting their distinction, especially in the context of Nostr. This is a good visualization to illustrate the difference.
Distributed: the P2P model
Robust, distributed systems are extremely censorship resistant, and include a lot of redundancy. Distributed systems distribute power widely, everyone is a peer.
Biological systems (cells, ecosystems, etc) are like this, cells are all peers and replaceable. Napster was distributed, everyone in the Napster ecosystem stored and shared some of the songs. IP (the “internet protocol”), which is how computers find each other on the internet, is a peer to peer technology where every node gossips about where to find other nodes.
Ideally all systems would be built this way, but in practice distributed / P2P systems are generally used when there’s a high chance of node failure (the death of individual cells) or attack (government takedowns). The challenge is that they’re expensive to run.
This might be confusing because Napster was “free” right? Most P2P software feels free-ish because many are donating some of their existing hardware/bandwidth/etc. But if you take the aggregate resources to run Napster versus just the parts of Spotify that help users to upload and download music, Spotify for sure uses fewer resources.
Distributed systems by their very nature have to assume that most peers in the network may fail. In order to maintain uptime, that results in P2P systems having many copies of what’s being shared and/or sending data many times to ensure it arrives.
I think most people would say they’d prefer everything to be P2P but it’s difficult to maintain a good experience in a P2P system and so it’s often only used in cases where it’s absolutely necessary.
Where does decentralization work better?
I wrote up a whole thing about decentralization a while back but the TL;DR is decentralized systems are better than centralized systems at distributing power widely, but they are generally still more performant than peer to peer systems.
Sometimes you need a mix of preventing abuses of power but still maintain a good experience for users. Freedom minded folks usually end up supporting decentralized solutions because they’re viable in the market and still take power away from centralized players.
Is Bitcoin decentralized or distributed?
The Bitcoin blockchain is a distributed system. Every Bitcoin full-node is an equal participant in storing, updating, and validating the blockchain.
Bitcoin as a monetary system, on the other hand, is decentralized: there are many more Bitcoin users than Bitcoin full-nodes. The nodes are the hubs and the users are the spokes.
There’s a reason for this architecture. Bitcoin nodes are ultimately in control of Bitcoin, it must be the least corruptible, most censorship resistant architecture possible. On the other hand a decentralized system has efficiency gains that make Bitcoin more competitive in comparison to existing financial systems. By having hubs (full-nodes, Bitcoin banks, wallet providers, exchanges, etc), the system is more efficient (and therefore cheaper). But by having many hubs, power is still spread widely.
Nostr: Decentralized or Distributed?
Nostr, as introduced by FiatJaf, seems like it was intended to be decentralized. Relays are the hubs and users are the spokes. Clients help connect users to relays (and therefore each other). There is wisdom to this architecture, because it will scale better than a P2P system.
Think of it this way, there are on the order of hundreds of millions of songs available for human consumption. With 10 million users storing a few hundred songs, there would be plenty of redundancy to allow Napster to distribute every song in a P2P manner. There are on the order of trillions of social media posts, if you include follows, reactions, DMs, etc, it’s likely in the quadrillions. With current technology a P2P system would never be able to provide coverage of every post and make it available in a reasonable time.
That said, there are some elements of Nostr that could benefit from being more P2P. Especially operations that would benefit from greater privacy (DMs, zaps, and reactions). Right now privacy around these actions is not well supported via Nostr.
Dev work has started on some P2P Nostr functionality announced by nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z and it’s right along those lines: maximizing privacy and security for nostr-based comms. It will have all the great things and all the difficulties of any P2P system, but it may be necessary to improve privacy on Nostr.
One thing that is great about Nostr is everyone can try things out and see if they work and if people want them. I see a lot of demand for privacy for certain Nostr operations, and if a P2P model would help, it needs to be tried. We’ll see whether the trade offs of P2P make Nostr better or if they make it less likely to succeed. We’ll see as development continues!
Until next time 🫡
If you want to see something highlighted, if we missed anything, or if you’re building something we didn’t post about, let us know. DMs welcome at nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk
Stay Classy, Nostr.
-
@ 9be0be0e:c3cbb81e
2023-09-28 07:41:35I’m not sure if nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 had a Web of Trust in mind when designing nostr and its use of public contact lists but I think it’s very important to nostr’s future.
Technically there is no need to publish a follow list, if a nostr client wants to show a feed of follows it just needs a list of contacts, this list does not need to exist in public or on relays, but the fact that it does is what makes the Web of Trust work.
Accidental
The only other Web of Trust that I know of is PGP’s Web of Trust, it is only used by IT and security people, which is also the reason why it is unusable for most people. It leaves no room for error because security has the highest priority in those circles.
But on nostr the Web of Trust is a side effect of just following people. You press Follow a few times and you are accidentally building a Web of Trust without even knowing it. It might not be perfect, but that’s also why it works, because it is so simple, like nostr itself.
Attempts to “fix” or improve the Web of Trust should be made with that simplicity in mind. Creating new lists with granularity of people you really trust, partially trust, don’t trust at all etc are all great, but this will make it possible for it to end up like PGP. Nostr’s Web of Trust works precisely because people don’t have to think about it.
There is also this idea that likes, reposts or any signal that can be made by users are useless because they can be gamed, but they can only be gamed if you don’t use a Web of Trust.
Web of Trust fixes almost everything
nostr:note1a8nq7kdqgr20dnvzmhv2a6quy8vx3l56pfzjlly3jv2u2l55exhs84cev8
Web of Trust fixes spam, bots, abuse of trending/hot algorithms
Zaps were supposed to fix the problem of gaming/abusing likes or reposts, but Web of Trust fixes it better. Zaps are useful for sending value, so let’s use it to send actual value. 1 sat zaps are not much different from Like-spam and considering the technical overhead required for zaps and possibility for timeouts and failures it’s actually worse.
So, Web of Trust Makes Likes Great Again, and with that you can make algorithms that are useful to the individual instead of the advertisers or platforms.
Example of a most basic Web of Trust filter (follows + follows of follows)
Nostur uses follows + follows of follows to filter spam and bots, and it uses likes and reposts from follows uniquely ranked to create Hot and Gallery feeds.
Another example is nostr:npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4‘s https://oddbean.com, a community website where the content of the community is based on the administrator’s follows, the algorithm is incredibly simple and transparent, and it wouldn’t be possible if nostr did not have an accidental Web of Trust:
Challenges
Now there are still some challenges to be solved, new users being onboarded won’t have a Web of Trust yet, maybe we could give them training wheels, a preloaded Web of Trust until they followed enough people to use their own.
Also, new users don’t exist in anyone else’s Web of Trust yet, so they won’t be seen until someone follows them. This is not a good new user experience.
You also might miss someone’s post because they are not in your Web of Trust yet.
These are all challenges and I will keep exploring solutions for these.
-
@ 2edbcea6:40558884
2023-09-17 17:13:39Happy Sunday #Nostr!
Here’s your #NostrTechWeekly newsletter brought to you by nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk , written by nostr:npub1r3fwhjpx2njy87f9qxmapjn9neutwh7aeww95e03drkfg45cey4qgl7ex2 .
NostrTechWeekly is a weekly newsletter focused on the more technical happenings in the nostr-verse.
A little light on NIP activity this week, but a fair bit of activity with work done around search and discoverability. Let’s dive in!
Recent Upgrades to Nostr (AKA NIPs)
1) (Proposed) NIP 133: Game Scores 🃏
This NIP proposes a new nostr event for publishing game scores. Users can publish their own “scores” (like with daily step counts) or game providers can publish the scores of users (imagine a public leaderboard).
This NIP is in early stages, but could be the foundation of some unique game experiences that could only be possible on Nostr.
Author: nostr:npub1melv683fw6n2mvhl5h6dhqd8mqfv3wmxnz4qph83ua4dk4006ezsrt5c24
Notable projects
RSSLay
This makes any RSS feed into a Nostr profile that can be followed via a pubkey. You can follow blogs, twitter accounts, subreddits, whatever. You’ll just need to tell RSSLay to create a profile for an RSS feed, follow the generated pubkey, and start using the RSSLay relay and you’re good to go.
This could help Nostr be the best place to consume all your content, instead of just another source of it.
Author: nostr:npub1ftpy6thgy2354xypal6jd0m37wtsgsvcxljvzje5vskc9cg3a5usexrrtq
Ditto
nostr:npub108pv4cg5ag52nq082kd5leu9ffrn2gdg6g4xdwatn73y36uzplmq9uyev6 has been making bridging Nostr with Mastadon (and other ActivityPub based tech) as easy as possible. Ditto is the latest foray with that goal.
Ditto is a Nostr client that uses relays to store data, but it acts like a Mastadon server so that you can interact with Mastadon and get many of the benefits of Nostr. Hopefully it’ll continue to make the Nostr-verse and Fediverse more interoperable. Then we may steal all the Mastadon users because Nostr is better 😈.
Author: nostr:npub108pv4cg5ag52nq082kd5leu9ffrn2gdg6g4xdwatn73y36uzplmq9uyev6
Latest conversations: Search and Discoverability
Discoverability
In my estimation, Nostr is the best censorship-resistant social media with any meaningful ongoing usage. Nostr currently isn’t great at one core aspect of great social media experiences: discoverability.
If you know exactly who to follow, Nostr is great. Find those folks and you’re able to interact in a censorship resistant way where you control your data. 👍
If you want to discover people to follow and interact with, it’s currently very difficult.
One of the best things about social media for me is the ability to learn, and what the bird app has historically done very well was surface people I wouldn’t have otherwise heard from. Lots of noise but at least I was exposed to more than the people I already knew.
Without solving this problem it’s unlikely Nostr will attract and onboard a significant fraction of humanity and reach its full potential for good.
Historically solving this problem has meant submitting to the whims of algorithms.
Algorithms as a solution for discoverability
Algorithms are great ways for social media companies to inject ads into users’ feeds; it’s also great for controlling users’ feeds so that content that is “offensive” to advertisers aren’t shown with their ads.
Before all that, algorithms are usually created to help increase the signal to noise ratio of users’ feeds. At their most basic they’re intended to surface content users may like from accounts they’re not following, or to hide content they’ve seen before but someone recently reposted or liked.
We don’t have many true feed algos on Nostr yet, I’ve only seen Nostur and Coracle start experimenting with widening what shows up in users’ feeds. But it goes beyond compiling a full feed for users, the “trending” lists on various clients (Primal and nostr.band being the most cited examples I’ve seen) are introducing more centralized logic around what is recommended to users.
Many came to Nostr because they were tired of the algorithms manipulating their feed and manipulating the reach of content that they published. Many are wary of algos entirely.
Algorithmic feeds are a tempting place to go to solve discoverability, but as the heavier-handed solution it comes with risks that Nostr users are less tolerant of.
Search as a bridge
Before search engines people had the same challenges around discoverability as Nostr users have now.
People actually printed and shipped zines which were themed publications that would publish new or noteworthy websites so that people could discover content on the internet that might interest them. (Sounds a bit like a certain publication you may or may not be reading right now 😉)
Search engines were able to solve the problem of discoverability in a way that was accessible to far more users than previous solutions. It wasn’t that discoverability was impossible before, it was just too much work to unlock usage by the masses.
There are several projects in the Nostr-verse that are attempting to solve this problem, coming from different perspectives.
Nostr.band (built by: nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy) is the incumbent if Nostr is old enough to have incumbents. They’re indexing as much of Nostr as they can and putting together trending feeds, and APIs for devs to consume so clients can make Nostr easier to navigate.
relay.noswhere.com (built by nostr:npub12262qa4uhw7u8gdwlgmntqtv7aye8vdcmvszkqwgs0zchel6mz7s6cgrkj) is an attempt to make a relay available that follows the exact Nostr specifications as possible but still make tasks like putting together a trending feed easier for clients.
There are even solutions like the project by nostr:npub1vp8fdcyejd4pqjyrjk9sgz68vuhq7pyvnzk8j0ehlljvwgp8n6eqsrnpsw https://advancednostrsearch.vercel.app/ to give searchability a user interface or https://relay.guide/inspector (built by nostr:npub1r3fwhjpx2njy87f9qxmapjn9neutwh7aeww95e03drkfg45cey4qgl7ex2) to just help people inspect what events are on a relay.
Effective, accessible, dev-friendly search could be the happy middle that allows us to avoid heavy algorithmic feeds, but still allow clients to help users discover content.
The challenge is some solutions (like nostr.band) tend towards creating more of a walled garden around their solution, because they’re creating APIs that are a layer on top of Nostr instead of utilizing Nostr’s unique and specific architecture. While noswhere is more exactly tied to Nostr’s design specifications (what’s outlined in NIPs) it’s not yet as widely adopted or utilized.
The risk of consolidation
Just like what we saw with Google monopolizing web search, solutions to discoverability of any network have strong incentives towards a winner-take-all situation. Nostr is not uniquely immune to that.
Discoverability is a fundamental challenge of decentralization, but it must be solved for Nostr to live up to its potential. I’m glad that Nostr devs are trying things and figuring out what works so we can build that future as fast as possible.
Events
Here are some upcoming events that we are looking forward to! We keep a comprehensive list and details of Nostr-related events that we hear about (in person or virtual) that you can bookmark here NostrConf Report
- Nostrasia Nov 1-3 in Tokyo & Hong Kong
- Nostrville Nov 9-10 in Nashville, TN, USA
- NostrCon Jan 12, 2024 (online only)
Until next time 🫡
If you want to see something highlighted, if we missed anything, or if you’re building something we didn’t post about, let us know, DMs welcome.
nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk
Stay Classy, Nostr.
-
@ 7fa56f5d:751ac194
2023-09-13 08:51:55nostr:npub108pv4cg5ag52nq082kd5leu9ffrn2gdg6g4xdwatn73y36uzplmq9uyev6 introduced NIP-30 Custom Emojis yesterday and many clients were quick to implement it: Nostter, Rabbit and Snort added support right away.
nostr:nevent1qqstvcc4gek4azr6aqc9qjewfs8vk86j0lkv5yt09n0sjqxq3xmjchcsjxd8s
Check out these collections that you can use in your notes or any other nostr app that supports them
nostr:naddr1qqy4x42nfpy4j42tfypzpn2q3f5ucmrn0js6wmhu873y03k220kgqlmw0j2hg9jpv3uhaqtzqvzqqqr4fc62gvap
nostr:naddr1qqr85ctsd4skuq3q07jk7htfv243u0x5ynn43scq9wrxtaasmrwwa8lfu2ydwag6cx2qxpqqqp65utc6838
-
@ fab018ad:dd9af89d
2023-09-07 13:39:261. ฟาร์มกุ้งวิปโยค
“ทุกอย่างล้วนหายไปหมดแล้ว”
–Kolyani Mondal
เมื่อ 52 ปีก่อน พายุไซโคลนโบลาฆ่าผู้คนในแถบชายฝั่งของบังกลาเทศไปมากกว่า 1 ล้านคน ถือเป็นพายุไซโคลนที่ร้ายแรงที่สุดที่มีการบันทึกไว้ในประวัติศาสตร์
หน่วยงานท้องถิ่นและองค์กรนานาชาติรู้ถึงความเสี่ยงที่จะเกิดความเสียหายร้ายแรงจากพายุลักษณะนี้เป็นอย่างดี ดังนั้นในช่วงปี 1960 หน่วยงานภูมิภาคจึงสร้างแนวกันคลื่นขนาดใหญ่เพื่อป้องกันแนวชายฝั่ง ซึ่งเปิดโอกาสให้มีการใช้พื้นที่สำหรับการเกษตรได้มากขึ้น
แต่หลังจากการลอบสังหารผู้นำอย่าง ชีค มูจิบูร์ เราะห์มาน ในการประกาศอิสรภาพ ก็ได้เกิดการเปลี่ยนแปลงแนวทางภายใต้ระบอบเผด็จการของบังกลาเทศด้วยการผลักดันของอิทธิพลจากต่างประเทศ ชีวิตของผู้คนถูกลดความสำคัญ และแนวป้องกันพายุสำหรับประชาชนถูกทำให้อ่อนแอลง
หมายเหตุผู้แปล : ชีค มูจิบูร์ เราะห์มาน (Sheikh Mujibur Rahman) เป็นผู้ก่อตั้งประเทศบังกลาเทศ โดยดำรงตำแหน่งประธานาธิบดีและนายกรัฐมนตรีระหว่างปี 1971 จนถูกลอบสังหารในปี 1975
ทั้งหมดก็เพื่อเร่งอัตราการส่งออกและเพื่อนำเงินมาชดใช้หนี้
โดยแทนที่จะส่งเสริมการปลูกป่าชายเลน ซึ่งสามารถเป็นแนวป้องกันพายุตามธรรมชาติ เพื่อประโยชน์สำหรับประชาชนมากกว่า 1 ใน 3 ของประเทศที่อาศัยอยู่ตามแนวชายฝั่ง หรือแม้แต่ลงทุนในการผลิตอาหารให้เพียงพอต่อการบริโภคภายในประเทศที่กำลังเติบโตอย่างรวดเร็ว แต่รัฐบาลกลับเลือกที่จะกู้เงินจากธนาคารโลกและกองทุน IMF เพื่อที่จะขยายฟาร์มกุ้ง ซึ่งกระบวนการเพาะเลี้ยงสัตว์น้ำในประเทศนั้นถูกควบคุมโดยเครือข่ายชนชั้นปกครองที่ร่ำรวยอีกด้วย
พวกคนรวยรวมหัวกันผลักดันบรรดาเหล่าชาวไร่ให้กู้ยืมเงินเพื่อทำสิ่งที่เรียกว่าการ “อัปเกรดกระบวนการเพาะเลี้ยง” โดยทำการขุดหลุมตามแนวกันคลื่นซึ่งป้องกันที่ดินของพวกเขาจากทะเล ทำให้ที่ดินที่เคยอุดมสมบูรณ์ของพวกเขาเต็มไปด้วยน้ำเกลือ หลังจากนั้นพวกเขาก็ต้องทำงานอย่างหลังขดหลังแข็ง เพื่อจับตัวอ่อนของกุ้งจากทะเลด้วยมือเปล่า เพื่อนำมันกลับมาเลี้ยงในบ่อพัก ก่อนจะขายกุ้งตัวโตเต็มวัยให้กับผู้รับซื้อกุ้ง ซึ่งมักจะเป็นผู้มีอิทธิพลในพื้นที่
เงินทุนที่กู้จากธนาคารโลกและ IMF ทำให้ไร่นาสวน ที่ดินลุ่มน้ำ และป่าชายเลนนับไม่ถ้วน ถูกดัดแปลงให้กลายเป็นบ่อกุ้งที่เรียกว่า “ghers”
พื้นที่บริเวณสามเหลี่ยมปากแม่น้ำคงคานั้นถือเป็นพื้นที่ที่มีความอุดมสมบูรณ์อย่างน่าทึ่ง โดยเป็นที่ตั้งของ “ป่าสุนทรพนา” ป่าชายเลนที่ใหญ่ที่สุดในโลก แต่หลังจากที่การทำฟาร์มกุ้งเชิงพาณิชย์ได้กลายเป็นธุรกิจหลักในท้องถิ่น ต้นโกงกางมากกว่าร้อยละ 45 ได้ถูกตัดออกไปเกลี้ยง ทิ้งให้ผู้คนเผชิญกับคลื่นสูงกว่า 10 เมตรที่พุ่งเข้าชนแนวชายหาดเวลาเกิดพายุไซโคลน พื้นที่ทำกินที่อุดมสมบูรณ์และสิ่งมีชีวิตตามริมแม่น้ำค่อย ๆ ถูกทำลายไปจากความเค็มที่เพิ่มขึ้นจากน้ำทะเล
จนสุดท้ายป่าทั้งป่าก็ได้อันตรธานหายไป เพราะฟาร์มกุ้งนั้นทำลายพืชพรรณท้องถิ่นทั้งหมด กลุ่มความร่วมมือพัฒนาชายฝั่ง (Coastal Development Partnership) ได้กล่าวถึงผลกระทบที่เกิดขึ้นนี้ว่า “การกระทำนี้ทำให้ดินแดนที่เคยอุดมสมบูรณ์กลายเป็น ‘ทะเลทรายที่เต็มไปด้วยน้ำเค็ม' ”
พื้นที่ไร่นาที่ปล่อยน้ำทะเลเข้ามาเพื่อทำฟาร์มกุ้งในจังหวัด Khuna
อย่างไรก็ตาม ผู้มีอิทธิพลที่รับซื้อกุ้งเหล่านี้กลับร่ำรวยขึ้นอย่างมาก และกุ้ง (ซึ่งถูกเรียกว่าเป็น “ทองคำสีขาว”) ก็กลายเป็นสินค้าส่งออกอันดับ 2 ของประเทศ
โดยนับตั้งแต่ปี 2014 เป็นต้นมา ชาวบังกลาเทศมากกว่า 1.2 ล้านคนทำงานในอุตสาหกรรมกุ้ง และผู้คนอีกกว่า 4.8 ล้านคนที่ต้องพึ่งพิงอุตสาหกรรมนี้ในทางอ้อม ซึ่งตัวเลขนี้ถือเป็นครึ่งหนึ่งของจำนวนคนยากจนที่อาศัยอยู่ตามชายฝั่ง คนเก็บกุ้งเป็นผู้ที่ทำงานหนักที่สุด (ซึ่งถือเป็นร้อยละ 50 ของแรงงานในอุตสาหกรรม) แต่ได้รับส่วนแบ่งเพียงร้อยละ 6 ของผลกำไร โดยร้อยละ 30 ของแรงงานนั้นเป็นแรงงานเด็กที่มีทั้งเด็กผู้ชายและเด็กผู้หญิง ซึ่งทำงานในน้ำเค็มมากถึง 9 ชั่วโมงต่อวันด้วยค่าจ้างรายวันน้อยกว่า 1 ดอลลาร์สหรัฐ เด็กเหล่านี้ส่วนมากไม่รู้หนังสือและไม่ได้เรียนต่อ
ผู้คนเคยมีการลุกฮือขึ้นประท้วงต่อต้านการขยายตัวของฟาร์มกุ้ง แต่แล้วก็ถูกปราบปรามอย่างรุนแรง โดยในเหตุปราบปรามที่เลื่องลือครั้งหนึ่่งนั้น ขบวนผู้ประท้วงถูกทำร้ายด้วยระเบิดจากผู้มีอิทธิพลที่รับซื้อกุ้งและกลุ่มลูกน้อง และมีผู้หญิงรายหนึ่งชื่อ Kuranamoyee Sardar ถูกตัดศีรษะจากเหตุปราบปรามดังกล่าว
ในงานวิจัยปี 2007 ซึ่งสำรวจฟาร์มกุ้งของชาวบังกลาเทศกว่า 102 แห่ง พบว่าแม้ค่าใช้จ่ายในการผลิตทั้งหมดจะอยู่ที่ 1,084 ดอลลาร์สหรัฐต่อเฮกตาร์ แต่รายได้สุทธิกลับอยู่ที่ 689 ดอลลาร์สหรัฐ นั่นหมายถึงกำไรที่ประเทศได้จากการส่งออกนั้น แลกมาด้วยการที่แรงงานในอุตสาหกรรมกุ้งต้องรับเคราะห์จากค่าจ้างที่ถูกกดและสภาพแวดล้อมของพวกเขาที่ถูกทำลายจนหมดสิ้น
ในรายงานที่จัดทำโดยมูลนิธิความยุติธรรมด้านสิ่งแวดล้อม (Environmental Justice Foundation) ชาวไร่ที่อยู่ริมชายฝั่งอย่างคุณ Kolyani Mondal ได้กล่าวว่า “เธอเคยปลูกข้าว พร้อมเลี้ยงปศุสัตว์และสัตว์ปีก” แต่หลังจากที่ได้มีการทำเกษตรฟาร์มกุ้ง “วัว ควาย และแพะของเธอก็เริ่มเป็นโรคท้องร่วงไปพร้อม ๆ กับเหล่าแม่ไก่และเป็ดซึ่งเป็นสัตว์ของเธอ พวกมันล้วนตายทั้งหมด”
ตอนนี้ทุ่งของเธอเต็มไปด้วยน้ำเกลือ และที่ดินที่ยังเหลืออยู่ก็เพาะปลูกอะไรแทบไม่ขึ้น ในอดีตนั้นครอบครัวของเธอสามารถปลูกข้าวได้ 18-19 มอนต่อเฮกตาร์ แต่ตอนนี้เหลือแค่ 1 มอนต่อเฮกตาร์ เธอยังจำช่วงเวลาในปี 1980 ที่เพิ่งเริ่มมีการทำฟาร์มกุ้งได้ ในตอนนั้น ชาวบ้านได้รับการสัญญาว่าสิ่งนี้จะสร้างรายได้เพิ่มขึ้น รวมทั้งมอบอาหารและพืชผลให้พวกเขามากขึ้น
แต่ตอนนี้ “ทุกอย่างล้วนหายไปหมดแล้ว” ชาวไร่ผู้เลี้ยงกุ้งขอเช่าที่ดินของเธอ โดยตกลงจะจ่ายเงินเธอ 140 ดอลลาร์สหรัฐต่อปี แต่ตอนนี้อย่างดีที่สุดที่เธอได้รับคือเงินผ่อนจ่ายแปลงละ 8 ดอลลาร์สหรัฐบ้างเป็นครั้งคราว โดยเธอกล่าวว่า “ในอดีตครอบครัวของเธอสามารถหาเลี้ยงตัวเองได้อย่างดีจากบนผืนดินแห่งนี้ แต่ตอนนี้ไม่เหลือทางเลือกใด ๆ นอกจากการไปซื้ออาหารที่ตลาด”
หมายเหตุผู้แปล : - มอน (Muand) เป็นหน่วยวัดน้ำหนักดั้งเดิมที่ใช้กันในเอเชียใต้ โดย 1 มอนมีค่าเทียบเท่าที่หลากหลายตั้งแต่ 11 กิโลกรัม จนถึง 72 กิโลกรัม - เฮกตาร์ (Hectare) เป็นหน่วยวัดพื้นที่ในมาตราเมตริกโดย 1 เฮกตาร์ เท่ากับ 10,000 ตารางเมตร หรือประมาณ 6 ไร่ 1 งาน.
ในบังกลาเทศนั้นเงินกู้เพื่อการปรับโครงสร้างจากธนาคารโลกและ IMF ปริมาณนับพันล้านดอลลาร์ (ที่มาของชื่อ “เงินกู้เพื่อการปรับโครงสร้าง” ได้มาจากการที่ผู้ปล่อยกู้จะบังคับให้ประเทศผู้กู้ต้องปรับโครงสร้างทางเศรษฐกิจเพื่อให้เอื้อกับการส่งออก ซึ่งต้องแลกมาด้วยการบริโภคภายในประเทศ) ได้ทำให้กำไรในการส่งออกกุ้งของประเทศเพิ่มขึ้นจาก 2.9 ล้านดอลลาร์สหรัฐในปี 1973 - เพิ่มเป็น 90 ล้านดอลลาร์สหรัฐในปี 1986 - และเพิ่มเป็น 590 ล้านดอลลาร์สหรัฐในปี 2012
ซึ่งรายได้ดังกล่าวถูกนำมาใช้จ่ายหนี้ต่างประเทศและใช้ในการพัฒนากองทัพ แต่เงินบางส่วนก็ไหลเข้ากระเป๋าเจ้าหน้าที่รัฐ (ซึ่งก็ไม่ได้แตกต่างอะไรกับกรณีส่วนใหญ่ของประเทศกำลังพัฒนา) ในขณะที่เหล่าแรงงานทาสในอุตสาหกรรมกุ้งต้องถูกกดขี่ให้ยากจน ถูกลิดรอนอิสรภาพ ต้องพึ่งพิงผู้อื่น และมีความสามารถในการหาเลี้ยงตัวเองได้น้อยลงกว่าแต่ก่อน
โดยที่แย่ไปกว่านั้นคือผลวิจัยยังแสดงให้เห็นว่า “หมู่บ้านที่มีป่าชายเลนไว้เป็นแนวป้องกันตัวจากคลื่นพายุซัดฝั่งจะมีผู้เสียชีวิตน้อยลงมาก เมื่อเทียบกับหมู่บ้านที่ป่าชายเลนเสียหายหรือถูกทำลาย”
ภายใต้แรงกดดันของสาธารณชน ในปี 2013 ธนาคารโลกจึงได้ปล่อยเงินกู้ 400 ล้านดอลลาร์สหรัฐให้แก่บังกลาเทศเพื่อใช้ในการพยายามแก้ไขความเสียหายของระบบนิเวศที่เกิดขึ้น ซึ่งพูดในอีกแง่หนึ่งก็คือธนาคารโลกจะได้รับค่าตอบแทนในรูปแบบของดอกเบี้ยจากการพยายามแก้ปัญหาที่ตัวเองเป็นผู้ก่อขึ้นตั้งแต่แรก ในขณะเดียวกันธนาคารโลกยังได้ปล่อยเงินกู้นับพันล้านดอลลาร์สหรัฐไปยังทุกประเทศ ไล่ตั้งแต่เอกวาดอร์ ไปยันโมร็อกโก จนถึงอินเดีย เพื่อเปลี่ยนฟาร์มดั้งเดิมในท้องถิ่นให้กลายเป็นฟาร์มกุ้ง
ธนาคารโลกได้อ้างว่าบังกลาเทศนั้นคือ “เรื่องราวที่น่าทึ่งของการลดความยากจนและการพัฒนาประเทศ” หากยึดจากในข้อมูลตามเอกสารที่ว่าแล้ว นี่ถือเป็นชัยชนะ เพราะเศรษฐกิจของประเทศอย่างบังกลาเทศมีแนวโน้มที่จะเติบโตต่อไป ในขณะเดียวกับที่มูลค่าการส่งออกนั้นเติบโตขึ้นเพื่อชดเชยมูลค่าจากการนำเข้า แต่แท้จริงแล้วรายได้จากการส่งออกส่วนใหญ่กลับไหลเข้าสู่กระเป๋าของชนชั้นนำและเจ้าหนี้ต่างประเทศ และหลังจากได้รับเงินกู้เพื่อการปรับโครงสร้างมาถึง 10 ครั้ง หนี้ของบังกลาเทศเติบโตขึ้นอย่างมหาศาล โดยเพิ่มจาก 145 ล้านดอลลาร์สหรัฐในปี 1972 กลายเป็น 95,900 ล้านดอลลาร์สหรัฐในปี 2022 ซึ่ง ณ ตอนนี้ประเทศบังกลาเทศเองก็กำลังเผชิญกับวิกฤตด้านดุลการชำระเงิน (Balance of Payments) จากหนี้สินอีกครั้ง และในเดือนพฤศจิกายน 2022 รัฐบาลก็ตกลงที่จะกู้เงินปรับโครงสร้างครั้งที่ 11 จาก IMF โดยมีการอัดฉีดเงินช่วยเหลือมูลค่า 4,500 ล้านดอลลาร์สหรัฐเข้ามาในระบบ โดยแลกกับการถูกแทรกแซงในการปรับโครงสร้างที่เพิ่มขึ้นไปอีก
ธนาคารโลกและ IMF นั้นก็ต่างอ้างว่าพวกเขาต้องการช่วยเหลือประเทศที่ยากจน แต่ตลอด 50 ปีที่ผ่านมา ผลลัพธ์จากนโยบายของพวกเขาก็ได้แสดงให้เห็นอย่างชัดเจนว่า ประเทศอย่างบังกลาเทศกลับกลายเป็นประเทศที่ต้องพึ่งพาผู้อื่นมากขึ้น และเต็มไปด้วยหนี้สินอย่างที่ไม่เคยเป็นมาก่อน
ในระหว่างวิกฤตหนี้ของประเทศโลกที่สามในช่วงทศวรรษ 1990 การวิพากษ์วิจารณ์จากสาธารณชนทั่วโลกที่ต้องการจะตรวจสอบข้อเท็จจริงของธนาคารโลกและ IMF ได้ค่อย ๆ สะสมจนปะทุขึ้น เริ่มมีการศึกษาวิจัยเพื่อสืบค้นข้อมูลอย่างจริงจัง ผู้คนออกมาประท้วงตามท้องถนน และมีความเชื่อที่แพร่กระจายไปยังทุกฝั่งการเมือง (แม้กระทั้งในรัฐสภาของสหรัฐฯ เอง) ว่าองค์กรเหล่านี้ไร้ซึ่งประโยชน์ หรือกระทั่งเป็นพิษภัยด้วยซ้ำ แต่ความรู้สึกและความสนใจในองค์กรเหล่านี้ได้จางหายไปเกือบหมดแล้ว และถึงแม้ความรู้สึกและความสนใจเหล่านี้จะกลับมาอีกครั้ง มันกลับถูกมองว่าเป็นสิ่งที่ไม่สำคัญ หรือแม้จะมีการยอมรับว่าองค์กรพวกนี้มีปัญหาแต่ก็ยังมีความจำเป็นอยู่ หรือกระทั่งยังมีความเชื่อว่าองค์กรพวกนี้มีประโยชน์และยังได้รับการต้อนรับเหมือนเดิม
ความเป็นจริงแล้วองค์กรเหล่านี้ทำให้ผู้คนนับล้านยากจนลงและชีวิตเสี่ยงอันตรายมากกว่าในอดีต ในขณะเดียวกันกลับทำให้เหล่าผู้นำเผด็จการและเครือข่ายที่ยักยอกความมั่งคั่งของประเทศนั้นร่ำรวยขึ้น และยอมละทิ้งสิทธิมนุษยชนเพื่อทำให้อาหาร ทรัพยากรธรรมชาติ และแรงงานราคาถูกไหลออกจากประเทศที่ยากจนไปสู่ประเทศที่ร่ำรวย พฤติกรรมของพวกเขาที่กระทำในบังกลาเทศนั้นไม่ใช่เรื่องผิดพลาดหรือเป็นกรณียกเว้นแต่อย่างใด
แต่นั่นเป็นวิธีการดำเนินธุรกิจตามปกติของพวกเขา..
⚡️กด Zap บทความนี้เป็นกำลังใจทีมงาน
(ทุกยอด zap จะถูกแบ่งอัตโนมัติเข้าวอลเล็ทของผู้เขียนบทความต้นฉบับภาษาอังกฤษ, ผู้แปลดราฟต์ 1, ผู้เรียบเรียงดราฟต์ 2-3, กองบรรณาธิการและพิสูจน์อักษรจากไรท์ชิฟต์ พร้อมกันบางส่วนไว้เพื่อเป็นค่าธรรมเนียมธุรกรรม)
>แปลและเรียบเรียงจากบทความต้นฉบับเรื่อง : STRUCTURAL ADJUSTMENT: HOW THE IMF AND WORLD BANK REPRESS POOR COUNTRIES AND FUNNEL THEIR RESOURCES TO RICH ONES ซึ่งเผยแพร่ครั้งแรกเมื่อวันที่ 22 พ.ย. ปี ค.ศ. 2022
-
@ d830ee7b:4e61cd62
2023-08-31 04:44:06ผมเจอหลายคนเริ่มต้นกับ Nostr มานาน แต่กลับยังไม่สามารถ “อิน” กับการอยู่ในสังคมแห่งใหม่นี้ได้เท่าไหร่นัก บางคนยังมีเพื่อนใหม่เพียงหลักสิบคน และหลายคนยังแทบไม่รู้จักหรือกดตามใครเลย บางคนมีคนติดตามเพียง 3-5 คน เท่านั้น แล้วมันจะไปมีคนเห็นสิ่งที่เราสื่อสารออกไปได้มากพอได้อย่างไรล่ะคับ?
ก็คนที่ไม่ได้ติดตามเราเค้าก็จะมองไม่เห็นสิ่งที่เราโน๊ตไปนั่นเอง
นี่แหละครับ Nostr
ผมไม่ชอบใช้คำว่า “เล่น Nostr” เท่าไหร่นัก สำหรับผมแล้ว.. Nostr คือ สถานที่ใหม่ สังคมใหม่ที่ทุกคนต้องเริ่มนับใหม่จากศูนย์ ผมขอใช้คำว่ามันเป็นการ “ใช้ชีวิตบน Nostr” ก็แล้วกัน เชื่อไหมครับว่าในแต่ละวัน ผมยังรู้สึกว่าตัวเองมีเวลาไม่มากพอจะใช้ชีวิตบน Nostr ให้สมใจอยากได้เลย.. ในขณะที่บางคนกลับรู้สึกว่า 5 นาทีมันก็นานเกินไปแล้ว..
เราลองมาพิจารณากันดูไหมว่าเพราะอะไร?
มันไม่ค่อยมีอะไรให้อ่าน ไม่ค่อยมีเรื่องให้ทำ
สำหรับข้อโต้แย้งนี้ผมคงต้องบอกว่ามัน “ผิดถนัด” เลยล่ะ.. บน Nostr นี่มีอะไรให้เราทำมากกว่าบนทุกแพลตฟอร์มเก่าๆ มาขยำรวมกันเสียอีกนะ
ผมคิดว่า.. ผมคงต้องเริ่มเล่าเรื่องในจินตนการให้พวกเราเห็นภาพนี้ได้ง่ายขึ้น ผมขอพาพวกเรากลับไปสู่จุดเริ่มต้นของการก่อร่างสร้างสังคม
อันดับแรก ผมอยากให้พวกเราลืม “สังคมแบบเดิม” ไปเสียก่อน ทั้งในชีวิตจริง หรือในโลกออนไลน์ที่เราเคยประสบพบเจอมา ที่ Nostr นี่มันต่างออกไปอย่างสิ้นเชิงครับ
จินตการว่าเราได้ลงจากเรือโนอาห์ที่เกาะขนาดใหญ่แห่งหนึ่ง กองเรือจัดตั้งอาณานิคมใหม่หลายลำที่พาผู้คนหลักแสนมาปล่อยไว้ ณ สถานที่เดียวกัน เกาะอันเวิ้งว้างว่างเปล่าที่อุดมไปด้วยทรัพยากรธรรมชาติ เต็มไปด้วยสิ่งเร้นลับและแปลกใหม่ ที่รอให้เหล่านักสำรวจได้ออกไปทำการค้นพบ
Nostr ก็คือสถานที่แบบเดียวกันนั้น..
เราต่างคนต่างมา ณ ที่แห่งนี้ เรามีสถานะภาพเท่าเทียมกันทุกประการ ทุกคนเริ่มนับหนึ่งใหม่ที่นี่ เริ่มทำความรู้จักกัน รวมกลุ่มกัน สร้างสังคมขนาดย่อมจนผ่านเวลาไปถึงขนาดกลางและกลายเป็นใหญ่ได้ในที่สุด
สิ่งนี้จะเกิดขึ้นไม่ได้เลย ถ้าผู้คนเหล่านี้ไม่พยายาม “Engage” เข้าหากัน ไม่มีปฏิสัมพันธ์ต่อกัน ไม่ยอมแลกเปลี่ยนหรือทำกิจกรรมบางอย่างร่วมกัน นี่คือกลไกการสร้างสังคมโดยธรรมชาติที่จะไม่มีใครมีคอยชี้นำ บังคับ หรือออกกฏเกณฑ์ชี้นิ้วสั่งใครให้ต้องทำอะไรทั้งนั้น.. มันคือสังคมแห่งเสรีชนโดยแท้จริง ทุกคนจะประพฤติอย่างเสรีภายใต้ทัศนวิสัยของปัจเจกชน
โฆษณาชวนเชื่อ หรือการทำเท่ห์ด้วยคอนเท้นต์โก้หรู ศิลปะในการหลอกล่ออัลกอริทึมเหมือนที่เคยทำๆ กันมา มันใช้ไม่ได้กับที่แห่งนี้
ที่นี่พวกเราให้ค่ากับ “คุณค่า” ที่เราจะได้รับมันมาจริงๆ และคุณค่าของแต่ละคนก็ไม่มีวันเหมือนกันเสียด้วย นี่คือความท้าทายที่พวกเราต้องเริ่มออกไปค้นหา ‘คุณค่า’ ที่ว่านั้น ด้วยตัวเองหรือจะทำกันเป็นหมู่คณะก็ย่อมให้ผลดีกว่าอย่างแน่นอนครับ
ไม่มีใครต้องการ “ฮีโร่” ที่นี่ ทุกคนแค่ต้องการ “เพื่อน” เพื่อนที่จะคอย 'ให้' เราก่อนและ 'ขอ' เราทีหลัง
ผมร่ายมายาวก็เพียงแค่ต้องการจะบอกว่า..
ที่เราไม่เห็นคอนเทนต์อะไรน่าสนใจเลย อาจเป็นเพราะเรายังทำความรู้จักกับ “คนที่น่าสนใจ” ยังไม่มากพอก็เป็นได้
แล้วมันเพราะอะไรได้อีกบ้าง?
เรายังกดติดตามคนอื่นน้อยเกินไป
ทำให้เราไม่เจอโน๊ตหรือคอนเทนต์ที่ดึงดูดใจเราได้มากพอ เราก็จะเห็นแต่โน๊ตของคนที่เราติดตามไว้อย่างน้อยนิดนั่นแหละครับ เว้นแต่เราจะไปกดดูแบบ Global ที่จะเห็นผู้คนทั้งเกาะเป็นหมื่นๆ แสนๆ ต่างคนต่างคนโน๊ตกันรัวๆ ซึ่งมันคงเต็มไปด้วยสิ่งที่เราไม่ได้ให้ความสนใจหรือคัดสรรมา
เรามีคนติดตามเราน้อยเกินไป
ทำให้เหงาและเงียบกริบทุกรอบที่เราโน๊ต มันก็แน่อยู่แล้ว ถ้าทั้งเกาะมีคนที่รู้จักเราอยู่แค่ 2-3 คน มันก็คงมีคนแค่จำนวนนี้แหละครับที่จะได้ยินสิ่งที่เราพูด ได้เห็นสิ่งที่เราทำ เราแค่ต้องออกไปทำความรู้จักหรือมีปฏิสัมพันธ์กับคนอื่นๆ ให้มากกว่านี้ มันไม่เหมือนกันนะครับ ระหว่างการโพสต์สิ่งที่อยากพูดออกไป เน้นเอาเท่ เอาเจ๋ง ไว้ก่อน กับการเดินไปหาคนอื่นเพื่อแลกเปลี่ยนความคิดและสร้างมิตรภาพกับเขาอย่างจริงใจ ผมคิดว่ามันให้ผลลัพธ์ไม่เหมือนกันบน Nostr
เรายังไม่เจอ Hashtag หรือกลุ่มสนทนาที่ตรงกับจริต
ทำให้เราไม่รู้สึกอินกับอะไรที่นี่เลย คนชอบฟุตบอลก็ชอบเสวนากับคนดูบอลฉันใด บิตคอยเนอร์ก็อยากจะคุยถูกคอกับบิตคอยเนอร์ฉันนั้น คนรักแมวก็มองหาคนรักแมว ฯลฯ ที่นี่มันพาเราย้อนกลับไปที่ยังยุคแรกๆ ของสังคมโซเชียลมีเดีย ที่คนจะเชื่อมโยงหากันโดยใช้ “Hashtag” ที่ต่างก็สนใจร่วมกัน มันเหมือนการชูป้ายไฟโลกให้รู้ว่า “ฉันรักแมว” (#Catstr) เพื่อดึงดูดคนประเภทเดียวกัน นั่นแหละครับ เราแค่ต้องหาป้ายไฟที่ว่านั่นให้เจอ
เราไม่เห็นได้ “Earn Zap” อย่างที่หลายคนป้ายยาเราไว้เลย
ก็ถ้าวันนี้เราเองยังไม่ค่อยอยาก Zap ให้ใครเท่าไหร่ แน่นอนว่ามันก็จะไม่มีใครอยาก Zap ให้เราด้วยเช่นกัน ป๋ามา-ป๋ากลับ คนที่นี่เป็นกันแบบนั้น มันประหลาดดี ทำลายความเชื่อแบบเดิมๆ ของเราไปเลยทีเดียว
จริงๆ แล้วมันไม่มีใครอยากได้ Sats เพิ่มบน Nostr เพราะมันไม่ง่ายขนาดนั้น พวกเขาก็แค่อยากหาเรื่อง Zap ให้คนอื่นๆ พวกเขาแสวงหาโน๊ต ข้อความ หรือคอนเทนต์ แม้กระทั่งมีมที่โดนใจ ไม่มีใครมาคอยนั่งคิดคำนวนว่า "วันนี้ฉัน Earn ไปเท่าไหร่” (คอนเซ็ปต์แบบนี้มัน Fiat สิ้นดี) สังคมบน Nostr นั้นเน้นการให้และการมีส่วนร่วม ช่วยเหลือกัน เมื่อคุณให้มา เราจะให้กลับ มันแฟร์ๆ แมนๆ ครับ
ในสังคมที่ไม่มีใครคอยมาทำหน้าที่กำกับดูแลพฤติกรรมหรือการกระทำของเรา ความสัมพันธ์จะเกิดขึ้นอย่างเป็นธรรมชาติสุดๆ เป็นเรื่องของปัจเจกชนที่จะเลือกว่าพวกเขาจะให้คุณค่ากับอะไร ดังนั้น.. เราจึงแทบไม่มีทางรู้ได้เลยว่าใครจะชอบ หรือคิดอะไรยังไง นอกเสียจากว่า.. เราจะใช้เวลาไปกับการทำความรู้จักความคิดและจิตใจของพวกเขา ออกไปพูดคุยแลกเปลี่ยนกับพวกเขาเพื่อให้เราเข้าใจคนอื่นได้มากขึ้นนั่นเอง
เมื่อคุณเข้าใจผู้อื่น มันก็ไม่ยากที่คุณจะรู้ว่า “คุณค่า” ที่พวกเขาตามหานั้นคืออะไร?
บก. จิงโจ้ ผู้มีปฎิสัมพันธ์และคอย Make friend กับคนไปทั่ว นั่นทำให้เขามีคนติดตาม และติดตามคนอื่นจำนวนมากทีเดียว เขาทำไปเพื่อ Sats หรือเปล่า? ผมคิดว่าไม่นะ.. Just make friend
เราไม่รู้ว่ามันใช้งานยังไง ทำอะไรได้บ้าง เลยไม่รู้จะไปต่อยังไง
ประเด็นนี้ก็ต้องย้อนกลับไปที่หัวข้อต่างๆ ด้านบน ก็ในเมื่อเรายังไม่เคยเจอคนที่จะคอยตอบคำถาม หรือสอนการใช้งานเราให้กับเราได้ หรือจริงๆ แล้วเราก็อาจแค่ถูกสอนให้ “รอรับ” มากกว่าที่จะ “ค้นหา” จนเคยตัว เราเลยไม่ชินกับการต้องออกไปไขว่คว้ามันด้วยตัวเอง?
ไม่ว่าอย่างไร.. เรามาเริ่มกันใหม่ที่นี่ เชื่อไหมครับว่าหลายคนบน Nostr นั้นเป็นระดับพระกาฬแทบทั้งสิ้น แถมพวกเขายังเต็มใจที่จะให้ความช่วยเหลือหรือคอยตอบคำถามให้กับพวกเราด้วย เราต้องหาเค้าให้เจอและเปลี่ยนตัวเองให้เป็นคนที่จะ “กล้า” ถาม กล้าแสดงออก และกล้าที่จะยอมรับว่าเราไม่รู้ ก่อนที่จะเราจะกลายเป็นผู้เชี่ยวชาญได้ในภายหลัง
นี่เป็นโอกาสที่เราจะได้ใกล้ชิดกับคนที่เราอยากคุยด้วยมานานแล้ว คนที่เราเคยชื่นชม หรือคนที่เราเคยเห็นบนโลกเฟียตๆ แต่ไม่เคยหาเหลี่ยมได้สักทีว่าจะเข้าหาหรือเข้าถึงพวกเขาได้ยังไง
แค่เริ่มทำความรู้จัก โลกก็เปลี่ยน
เอาล่ะ.. ผมจะลองแนะนำวิธีว่าเราจะเพิ่มผู้ติดตามหรือเลือกเฟ้นยังไงในการติดตามผู้อื่น ผมมีแนวทางของผมเอง คงไม่ใช่สูตรสำเร็จ แต่ถ้าเพื่อนๆ จะลองนำไปประยุกต์ก็ไม่ว่ากันครับ
ตามคนดัง
วิธีที่ง่าย และตรงไปตรงมาที่สุด ซึ่งมันก็ถูกแล้ว เพราะคนเหล่านี้การที่เค้าจะดังได้ต่างก็มี proof-of-work และความน่าสนใจในแบบของตัวเองด้วยกันทั้งนั้น แอคเคาต์แรกๆ ที่พวกเราคงนึกถึงก็คงเป็น อ.ตั๊ม พิริยะ และ Right Shift ทั้งแอคเคาต์ทางการ และทีมงานทั้งทีม ก็แหง๋ล่ะ เพราะพวกเขาป้ายยาพาคุณมาอยู่บน Nostr แต่อย่าตามแค่พวกเขาไม่กี่คนเท่านั้นนะครับ คุณควรจะ...
ตามคนอื่นๆ เลียนแบบคนดัง
เราสามารถกดดูได้ว่าใครกดติดตามใครเอาไว้บ้าง คนดังก็มักจะตามกลุ่มคนที่น่าสนใจแหละส่วนหนึ่ง ส่วนที่เหลือเขาก็คงตามคนที่ถูกจริตกับตัวเอง นอกจากนี่คนที่กดติดตามพวกเขาก็จะเป็นคนที่ชอบอะไรคล้ายๆ กับเขา มันก็เป็นไปตามกฎแห่งแรงดึงดูดทางด้านความสัมพันธ์ เราค่อยๆ กดไปดูโปรไฟล์ของแต่ละคนได้ว่าเขามีความน่าสนใจยังไง ชอบโน๊ตหรือการสื่อสารแบบไหน เขามีวิธีคิดหรือนิสัยใจคอ มีเคมีแบบเดียวกันกับเราหรือเปล่า?
ถ้าใช่.. คุณก็แค่กดปุ่ม Follow แล้วกระโจนเข้าไปตอบโต้กับเขาได้เลย ไม่ว่าจะในโน๊ตใหม่ หรือ โน๊ตเก่าๆ คอมเม้นให้มันได้เพื่อนนะครับ อย่าไปเม้นให้ได้ศัตรู
เราจะเห็นแอคฯ น่าสนใจให้เพียบ แค่ลองกดไปดูว่าคนดังๆ เขามีวงสังคมบน Nostr เป็นใครกันบ้าง แล้วตอบตัวเองว่าเราอยากพาตัวเองเข้าไปอยู่ในนั้นบ้างไหม?
ตาม Hashtag
ตามหา “ป้ายไฟ” สีที่เราชอบ หรือก็คือกด ‘#’ นำในช่องค้นหา ตามด้วยคำที่เราสนใจ แล้วลองไล่หาดูได้เลย คุณอาจเจอเข้ากับกระทู้ที่ตรงกับสิ่งที่ตามหา เรื่องที่อยากอ่าน หรือมุมมองที่อยากเห็น รวมไปถึงคนที่.. เอ้อ มันเจ๋งดีว่ะ อะไรแบบนี้ได้ง่ายๆ เลยล่ะ
เมื่อเราชอบแฮ็ชแท็กไหน เรายังสามารถกดติดตามตัวแฮชแท็กนั้นได้อีกด้วย และอย่าลืมกดติดตาม หรือติดแฮ็ชแท็ก #ThaiNostrich กับ #Siamstr เอาไว้ด้วยนะครับ มันคือป้ายไฟสามัญประจำบ้านของคนไทยบน Nostr คุณสามารถตามหาเพื่อนคนไทยได้ง่ายๆ ด้วยแฮชแท็ก 2 ตัวนี้นี่แหละ
Swarmstr เป็นตัวอย่างไคลเอนต์ที่จะรวบรวมข้อมูลบน Nostr ที่เราสามารถค้นหา หรือศึกษา Nostr ได้จากหัวข้อต่างๆ ตามแฮชแท็คที่แสดงเป็นตัวอย่างได้ (หรือค้นหาด้วยตัวเอง)
ตามประเด็นที่สนใจไปจนเจอตัวพ่อ
มันต้องมีบางโอกาสที่เราไปเจอเข้ากับกระทู้น่าสนใจ มีการสนทนากันอย่างเผ็ดร้อนหรือรื่นเริงจนคุณก็อดเข้าไปแจมด้วยไม่ได้ ที่แบบนี้แหละที่คุณจะเจอกับคนเก่งๆ ในด้านนั้นๆ หรือผู้เชี่ยวชาญเฉพาะด้าน หรือกระทั่งเป็นผู้ก่อตั้ง หรือนักพัฒนาไคลเอนต์เลยทีเดียว และคนเหล่านี้เขาก็มาที่เกาะแห่งนี้ด้วยจุดประสงค์คล้ายๆ เรา คือ "หนีความวุ่นวายและโสมมบนโลกเก่าเพื่อแสวงหาเสรีภาพและมิตรภาพ ณ สังคมใหม่"
ดังนั้น เขาเต็มใจที่จะได้ทำความรู้จักกับเราอย่างแน่นอนครับ
แต่คนนิสัยไม่ดี หรือมีพฤติกรรมไม่เป็นมิตรเราก็จะดูออกได้ในทันที และมันก็เป็นสิทธิ์ของเราล้านเปอร์เซ็นต์ที่จะเลือกว่า จะสนใจติดตามคนๆ นี้ หรือแค่ปล่อยผ่าน หรือไม่ก็ บล็อกแม่ง ให้มันจบๆ ไป
Nostrends เป็นตัวอย่างไคลเอ็นต์ที่คอยรวบรวมและแสดงโน๊ต หรือหัวข้อที่กำลังได้รับความนิยมบน Nostr ตามช่วงเวลาหรือตัวกรองที่เราเลือก
พยายามอย่าทำพฤติกรรมแบบเดิมๆ บน Nostr
ผมเชื่อว่ามีพวกเราส่วนใหญ่ (ชาวไทย) จะคุ้นเคยกับการใช้งานและวัฒนธรรมบน Facebook แต่ชาวต่างชาติหรือผู้ใช้งานส่วนใหญ่ที่นี่จะเคยชินกับวัฒนธรรมแบบ Twitter กันมากกว่านะครับ ไม่ว่าจะเป็นการโพสต์ การคอมเมนต์ หรือการกดตอบโต้ด้วยอีโมจิ (Discord cult) ก็ถือว่าเป็นวัฒนธรรมในแบบที่เราอาจยังไม่คุ้นเคยกันมากนักและคงต้องใช้เวลาเรียนรู้กันพอสมควร
ขอให้พวกเราทิ้งวิธีคิดแบบเดิมๆ ในการใช้งานโซเชียลมีเดียไปได้เลยครับ เราควรอยู่บน Nostr โดยใช้แนวคิดแบบเดียวกับการอยู่ในสังคมจริงๆ ทักทาย ตอบโต้ เห็นอกเห็นใจ ช่วยเหลือ แลกเปลี่ยน คอนทริบิ้วท์และมีส่วนร่วมให้มากกว่าที่เคย ฯลฯ เราจึงจะมีตัวตนและรู้สึกเหมือนเป็นส่วนหนึ่งในสังคมแห่งนี้ได้จริงๆ (ไม่งั้นเราก็เป็นได้เพียง "ผู้สังเกตการณ์เหงาๆ" เท่านั้นเอง)
ที่นี่.. ไม่ให้คุณค่ากับ การอวดรู้ หรือ โชว์พาว ทุกคนดูออกได้ง่ายๆ ว่าเจตนาของแต่ละคนคืออะไร คนเหล่านี้ล้วนเคยขยะแขยง Fiat Social Media Cult มาแทบทั้งนั้น ถ้าต้องมาเจออะไรแบบนี้บน Nostr ก็จะ ยี้ ได้ทันที และทุกคนก็พร้อม และ มีสิทธิ์ที่จะบล็อกเราได้ตลอดเวลา
เราจะกดติดตามคนนั้น-คนนี้ให้มากมายไปทำไมกัน ถ้าเราจะแค่ไถๆๆ ฟีดวืดๆๆ ไปวันๆ เราจะไม่ได้เพื่อนเลยสักคนกับการทำแบบนั้น และอาจพลาดโอกาสดีๆ ที่จะได้เรียนรู้อะไรบางอย่าง
เราไม่ควรทำแค่อ่านผ่านๆ เหมือนกับตอนที่เราเบื่อโลกเมื่อต้องใช้ Facebook และเห็นแต่อะไรที่ไม่ต้องการเห็น ที่นี่.. เราจะเลิกติดตามไปเลยก็ได้ถ้าแอคฯ นั้นเอาแต่โพสต์อะไรที่ดูไม่เข้าตา หรือไม่สามารถดึงดูดเราได้ (ถ้าเกรงใจก็กด Mute ไว้ก่อนก็ได้)
การอ่านอย่างตั้งใจในสิ่งที่เค้าโพสต์มา และตอบโต้ตามสมควร ก็เปรียบเสมือน การรับฟังผู้พูดอย่างตั้งอกตั้งใจ นั่นเอง นั่นคือหนทางเดียวที่เราจะเรียนรู้ได้ว่าเราควรตอบโต้อย่างไร เพราะเราเข้าใจ สาส์น ที่เขาได้สื่อออกมาอย่างถ่องแท้นั่นเองครับ
ถ้าไม่ว่าง คุณก็ปัดทิ้งได้ แล้วค่อยตามไปอ่านทีหลัง มันไม่มีการลบหรือปิดกั้นเรา ไม่มีโฆษณามาให้รกหูรกตา ถ้าเจอพวก แสกม/แสปม ก็บล็อกมันซะ อย่าให้พวกน่ารังเกียจได้มีที่ยืนบนสังคมที่คุณอยากให้เป็น
และขอให้ทุกคนระลึกไว้เสมอว่า การพูดคุยและมีปฎิสัมพันธ์ต่อกัน เท่านั้น ที่จะทำให้มนุษย์ได้มีความสัมพันธ์ต่อกัน
ผมขอทิ้งท้ายด้วยเคล็ดลับตกผลึกสั้นๆ ว่า..
- ติดตามผู้อื่น
- Zap ให้คนอื่นๆ
- เริ่มสร้าง Note ของตัวเอง (โพสต์) สักครั้ง หรือบ่อยครั้ง
- คุยกับคนอื่นให้มากกว่าที่เคย (มากกว่าแค่อ่านๆ ไปเรื่อยเหมือนตอนใช้ Facebook)
- ได้ Zap กลับมาจากคนอื่น
- สำรวจแฮชแท็กต่างๆ ลองใช้งานมันไปเรื่อยๆ
เหนือสิ่งอื่นใด จงใช้ชีวิตบน Nostr และแค่สนุกไปกับมันให้ได้ก็พอ.. :)
ปล. |--
-
มนุษย์มีวุ้นแปลภาษาจริงๆ แล้วนะครับ ก็ Google translate นั่นยังไง อย่าให้ภาษากลายเป็นกำแพงแห่งการเรียนรู้.. จงใช้มัน ไม่ต้องขวยเขิลกันหรอกครับ (เพราะผมเองก็ใช้)
-
บทความต่อไปผมจะมาลองแนะนำว่า มีแอคเคานต์ไหนบ้างที่น่าสนใจกดติดตามสัก 10-20 บัญชี เอาคนไทยเราก่อนเลย ไว้คอยติดตามกันนะครับ
-
@ d830ee7b:4e61cd62
2023-08-28 06:53:07"Bitcoin isn't real money until you can buy coffee at the street corner with it."
I've heard this frustrating argument many times. I don’t have exact numbers to confirm the current global adoption rate, but I believe over 90% of the world still doesn't know about it. That's why many still mockingly view Bitcoin as play money, stemming from their own misunderstandings.
Indeed, most general businesses don't accept it as a 'Unit of Account' yet. No governments globally have allowed Bitcoin to be a 'Medium of Exchange.' And why would they? Who would willingly relinquish financial control and power?
For over a decade, Bitcoin has proven itself as a 'Store of Value'. No other form of currency can preserve and enhance wealth like it. The HODLers have witnessed Bitcoin's value appreciation over time, surpassing fiat's fickle nature.
This phenomenon makes most Bitcoin enthusiasts reluctant to spend their stash. It's understandable and beyond criticism. After all, it's a natural right of an individual. We can't force someone to frivolously spend their saved Bitcoin, can we?
Then came Joseph Poon and Thaddeus Dryja, who jointly developed the Lightning Network in 2015. Bitcoin's world was never the same.
In 2018, the Lightning Network was introduced to the public. Starting with about 4 BTC and 1,000 nodes in March 2018, it has grown to 4,797.48 BTC (+119,837%) and 15,448 nodes (+1,444.8%). No other payment system has witnessed such astounding growth.
Bitcoin enthusiasts, then, face a personal dilemma (especially from my experiences in Thailand). They must choose between hoarding fervently or using a fraction of their Bitcoins. Whichever path they choose, both essentially promote Bitcoin adoption. Both are pushing Bitcoin to become genuine money and gain global acceptance.
A new case study emerges for Bitcoin adoption following the advent of the Lightning Network. Instead of beginning with a laborious and time-consuming study of Bitcoin, this new generation can immediately adopt it through learning and experimenting with Bitcoin Lightning. Once they experience its convenience and instantly recognize its benefits, they willingly dive deeper, venturing down their own rabbit holes.
I have an example to illustrate this. The excitement of numerous people who tried the Lightning Payment at the Bitcoin Thailand Conference 2023 (#BTC2023).
https://youtu.be/-wVuD9QUe5U?si=2e7mfhhkVsbJrPU0
We at Right Shift saw this phenomenon coming from the outset, and have played a pioneering role in pushing Lightning Network Adoption in Thailand consistently throughout 2022-2023. The impact has been overwhelmingly positive.
I can confidently state that its momentum is truly powerful. The only thing that could possibly hinder its growth is governments that don't wish to see it succeed. I believe they will either find a way to regulate it or, more likely, resist it vehemently with their lackluster CBDCs. Ironically, they're only driving more interest towards Bitcoin.
Today, I'd like to extend my gratitude to fiatjaf, the developer behind this human protocol, and Jack Dorsey, the force behind Nostr which you are using right now. Although it lacks any algorithm, I'm naturally addicted to it. I feel like a kid who has just received a Playstation5 after waiting for 3 years.
Nostr is the next evolutionary step for humanity, working hand in hand with the stories I've mentioned above to further Bitcoin adoption. In a world currently heading towards severe inflation and mainstream social media acting like power-hungry tyrants, these elements will serve as perfect catalysts to accelerate the inevitable adoption.
I have endured the mainstream media and those overwhelming apps for so long. As soon as I encountered Nostr and its constant developments, I instantly foresaw the victory of the side I chose, which will surely happen in the near future.
My team, Right Shift, and I spent less than an hour discussing the campaign to promote Nostr in Thailand. Believe it or not, after that, hundreds of Thais started exploring Nostr, some of whom had never heard of the Lightning Network before!
They grew tired of the overbearing rules of mainstream social media platforms and quickly embraced Nostr (as evidenced by #ThaiNostrich, #Siamstr, and specific events like #ThailandZapathon, as well as what’s happening on Zap.stream).
Nostr, which has captured their hearts, introduced them to Lightning and Bitcoin. This realization hit me immediately.
I believe it's a brilliant idea to show people the deterioration of this world, starting with the online community and then expanding to the real society under the control of governments that shouldn't exist and play their current roles. Eventually, they will see that Bitcoin and Nostr are solutions to these distortions.
For this reason, Nostr is paving the way for more Bitcoin adoption options through use cases that resonate more with contemporary society.
Bitcoin is no longer a challenging or rocky subject to study. Nostr is one of the easiest and most fun ways to adopt Bitcoin right now.
I'm confident that when hosting the Bitcoin Thailand Conference 2024 (#BTC2024) next year, Nostr will surely be a major highlight.
If you are a developer, expert, or enthusiast on Nostr, let me know if you'd like to be in Bangkok next year.
-
@ 78733875:4eb851f2
2023-08-17 14:23:51After announcing our first wave of grants for bitcoin[^fn-btc] and nostr[^fn-nostr] projects, we are pleased to announce an additional wave of grants for open-source projects in the space:
[^fn-btc]: First Wave of Bitcoin Grants [^fn-nostr]: First Wave of Nostr Grants
- BDK
- LNbits
- Watchdescriptor
- Stratum V2 Testing \& Benchmarking Tool
- Fedimint Modules and Resources
- Amber: Nostr Event Signer
- Nostr UI/UX Development
- Nostr Use-Case Exploration \& Education
The first five grants are sourced from our General Fund, the last three—being nostr projects—from our Nostr Fund. This brings the total number of OpenSats grants to 41, adding to the grants we previously announced in July.
Once again, let's take a closer look at each of the projects to see how they align with the OpenSats mission.
BDK
Bitcoin Development Kit (BDK) is a set of libraries and tools that allows you to seamlessly build cross-platform on-chain bitcoin wallets without having to re-implement standard bitcoin data structures, algorithms, and protocols. BDK is built on top of the powerful rust-bitcoin and rust-miniscript libraries and adds features for managing descriptor-based wallets, syncing wallets to the bitcoin blockchain, viewing transaction histories, managing and selecting UTXOs to create new transactions, signing, and more. The core BDK components are written in Rust, but the team also maintains Kotlin and Swift language bindings for use in mobile projects. There are also Python bindings, and React Native and Flutter support is being actively developed.
Repository: bitcoindevkit/bdk
License: Apache 2.0 / MITLNbits
LNbits is used by a multitude of projects in the bitcoin space, especially as part of their lightning payments stack. Being easy to build on through its extension framework, LNbits has been pioneering various cutting-edge solutions and experiments in the world of bitcoin, lightning, and nostr.
The project has a thriving maker community building various hardware devices such as Lightning ATMs, point-of-sale devices, DIY hardware wallets, and nostr signing devices. The modular design of LNbits makes it attractive to users and tinkerers alike, as its plugin architecture makes it easy to extend and understand.
Repository: lnbits/lnbits
License: MITWatchdescriptor
watchdescriptor
is a CLN plugin written in Rust that connects a business's treasury wallet to its CLN node. It utilizescln-plugin
and the BDK library to track coin movements in registered wallets and report this information to thebookkeeper
plugin.The plugin enables businesses to design a complete treasury using Miniscript and import the resulting descriptor into CLN. Since
bookkeeper
already accounts for all coin movements internal to CLN, this plugin is the last piece businesses need in order to unify all their bitcoin accounting in one place. This enables businesses to account for all inflows and outflows from their operations, streamlining tax reporting and financial analysis.The
watchdescriptor
project is part of a broader vision to transform the lightning node (particularly CLN) into a financial hub for businesses, enabling them to conduct operations without reliance on any third parties.Repository: chrisguida/watchdescriptor
License: MITStratum V2 Testing & Benchmarking Tool
The Stratum V2 Testing & Benchmarking Tool allows the bitcoin mining industry to test and benchmark Stratum V2 performance against Stratum V1. The tool supports different mining scenarios to help miners make informed decisions and evaluate their profitability. The goal of the project is to motivate miners to upgrade to Stratum V2, increasing their individual profits and making the Bitcoin network more resilient in the process.
Repository: stratum-mining/stratum @GitGab19
License: Apache 2.0 / MITFedimint Modules and Resources
Fedimint is a federated Chaumian e-cash mint backed by sats with deposits and withdrawals that can occur on-chain or via lightning. It can be understood as a scaling and privacy layer as well as an adoption accelerator for Bitcoin.
The goal of this particular project is to improve the Fedimint UI and develop free and open resources for developers and "Guardians" to enable more people to run and develop on Fedimint.
Repository: fedimint/ui @EthnTuttle
License: MITAmber: Nostr Event Signer
Amber is a nostr event signer for Android. It allows users to keep their
nsec
segregated in a single, dedicated app. The goal of Amber is to have your smartphone act as a NIP-46 signing device without any need for servers or additional hardware. "Private keys should be exposed to as few systems as possible as each system adds to the attack surface," as the rationale of said NIP states. In addition to native apps, Amber aims to support all current nostr web applications without requiring any extensions or web servers.Repository: greenart7c3/Amber
License: MITNostr UI/UX Development
The goal of this project is to help improve the UI/UX of major nostr clients, starting with Gossip and Coracle, emphasizing the onboarding process as well as usability and accessibility. One part of onboarding is solving the discoverability problem that nostr has in the first place. Solving the problem of jumping in and out of the nostr world is what motivated the development of
njump
, which was redesigned as part of these efforts and is now live at nostr.com.In addition to client-specific improvements, generic design modules and learnings will be incorporated into the Nostr Design project for others to use.
Activity: github.com/dtonon @dtonon
License: MITNostr Use-Case Exploration & Education
As of today, most nostr clients implement social media applications on top of the nostr protocol. However, nostr allows for various use cases, many of which go beyond social media. Two examples are Listr and Ostrich, a list management tool and job board, respectively.
In addition to use-case exploration, this project will continue to educate users and developers alike, be it via Nostr How or various video series, e.g., explaining how to build upon NDK.
Activity: github.com/erskingardner @jeffg
License: MIT / GPL-3.0 / CC BY-NC-SA 4.0
We have more grants in the pipeline and will provide funding for many more projects in the future. Note that we can only fund those projects which reach out and apply. If you are an open-source developer who is aligned with our mission, don't hesitate to apply for funding.
-
@ 134743ca:46019ee7
2023-08-11 06:24:04We have reached 1000🎉🎉🎉 We can't believe it but we have arrived here💜
We are very happy and we want to share it with you, we have been working hard to be able to launch all these new features all at once, today, for you:
New design
https://nostrcheck.me/media/quentin/nostrcheck.me_c7971bf984d68e661ad19740b6116d9b788a3e91ed35f90b.mp4
Nostrcheck.me was born as a small project with the aim of offering nostr address to anyone who did not have their own domain. Over time it grew and we have been very focused on making our backend solid and technologically powerful. It was time to give some love to our visible face, we hope you like it!
https://nostrcheck.me/media/quentin/nostrcheck.me_da527cea258f21f20bdaf31dbf27899169331020a4370813.webp
Visit us to see it in action!
Lightning redirection
https://nostrcheck.me/media/quentin/nostrcheck.me_810d951385157e0fefc43ee0b52ed2ebc6571c38279f98b0.webp
One of the most requested features by our users is the lightning redirects. With this new feature we offer more flexibility to our community by giving them the possibility to choose their own lightning address.
You can use your nostr address as your only address for nostr and lightning, you can try this one for example 😉
Smoother image upload
https://nostrcheck.me/media/quentin/nostrcheck.me_4eff5bd176146728cbaf70498d4e8d33273ab4e8dc32cd9b.mp4
We have adapted our multimedia upload process to our powerful backend, so we process each upload, we remove all metadata and we compress the uploaded files to improve your sharing experience.
New domain name, nostrverse.net
https://nostrcheck.me/media/quentin/nostrcheck.me_6221aefece0a2b67e7ecf8486b272ce6e53ea7a3fa6e20de.webp
The aim of nostrcheck.me is to offer the widest range of possibilities for everyone. Nostrverse.net joins our family as a private domain like its siblings. Only the first 100 members will be able to get it directly, after that it will only be available by invitation from another member.
If you don't want to stay without your nostr address @nostrverse.net sign up here.
Magnets!! 🧲
http://nostrcheck.me/media/quentin/nostrcheck.me_5ca2e846754cbf91bace34330d2f7fd48ef8e1b50a0c8ba6.webp
Our spirit is as free as the wind, we don't like you to depend on us for the survival of your multimedia files. Every upload to nostrcheck is automatically shared on the bittorrent network, so if you want, you can download all your files using the magnet link and share them with whoever you want!
Improved public gallery
https://nostrcheck.me/media/quentin/nostrcheck.me_1ef64dcd7cf50ee2a4848fbd76d916a42d2aa08b60a77087.mp4
We have made profound improvements to the public gallery, now everything flows fast and beautifully. Our heart is your nostr address, but we know that multimedia uploads are a very important part of your nostr experience.
We have improved our public gallery so you can use it without being registered, with the same limits as a nostrcheck member. We like freedom, and that's why we offer it all to you.
Our passion is nostr and this is how we celebrate it 💜
We will give out 100,000 sats to all the people who follow us and send us a little thank you message on this note.
555 sats to each message of love and affection that we receive, one per pubkey.
We hope to celebrate 10,000 very soon. Thanks for being there 🤗
-
@ 57fe4c4a:c3a0271f
2023-07-27 00:22:35👥 Authors: Antoine Riard ( nostr:npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd )
📅 Messages Date: 2023-07-25
✉️ Message Count: 1
📚 Total Characters in Messages: 4315
Messages Summaries
✉️ Message by Antoine Riard on 26/07/2023: Implementations should be cautious about flushing BOLT8 messages at fixed intervals to avoid timing analysis and potential channel closure. Fixed-size packets may also incur bandwidth costs and impact privacy.
Follow nostr:npub1j3t00t9hv042ktszhk8xpnchma60x5kz4etemnslrhf9e9wavywqf94gll for full threads
-
@ 1bc70a01:24f6a411
2023-07-21 12:03:38The concept of value of value is one where information yearns to flow freely, transactions should be voluntary, unlimited and direct. In V4V model, people pay what something is worth to them.
Sounds great. On paper. There are some issues…
Free sucks
At least, that’s the perception. People don’t assign much value to free. Ask anyone who has ever ran any business and has not suggested a value for a product or service and they’ll tell you that they earned far less than when charging for the thing.
It’s true, some people will give a lot, some a little, and most none. Most - none. None.
Pricing is Signal
Pricing is a signal of desirability and quality. Of course, it is often incorrect and people manipulate pricing all the time. But for the most part, people don’t see much value in free. Unless a recommended price is offered, people will usually pay nothing. This is not a great model to thrive on if you spend years of your life acquiring knowledge and turning it into products that nobody ultimately buys. I have very personal experience with free. I’ve created and sold digital products and ran many pricing experiments myself. The highest priced products usually generated the most revenue. Surprise! The middle cost product (same product, just priced less) decimated the revenue stream. When set to 0 (even with a suggested minimum price), I generated almost no revenue at all.
None of this is surprising. Pricing acts as a psychological anchor. “You get what you pay for” is ingrained in our brains whether we think about it or not.
People are clueless
The issue with price is that most people don’t have a clue what anything is worth. The only time people have any rough idea of what they should pay for something is when they have already purchased that thing in the past. But, introduce something they have never before purchased and they won’t have a single clue about what to pay. Take for example a set of professional photos of you and your family. Unless you’ve been to a photo studio in the last 5 years, you probably won’t have a single clue what that package of photos is worth. Does that mean the product is worthless? Of course not, but people don’t know what to pay.
In a value for value model, the absence of price makes it super difficult to determine the value of anything. You may take some social cues from previous payments from other people, but this could backfire for the content creator.
Suppose I created a UI framework that saved developers hundreds of hours. In theory, I should be able to charge at least a few hours’ worth of value for this product. If the developer’s time is valued at $100/hour, a $200 price for a product that saves you $2000 worth of time seems very justifiable. Not only do you get to use it once, but you can re-use the product for ALL future projects and employment.
Now, remove the price and see what people pay. Absolutely nothing. You may have a few people who pay $200 voluntarily, but it’s highly unlikely The vast majority will pay nothing, and some may “tip” in the 5-$60 range. Anything that approaches a $100 mark is seen as a purchase. Hey, I don’t make the rules, I just see what other founders have figured out long ago and combine with my own observations. Don’t kill the messenger.
Free is Expensive
If I am accurate in my assessment and recall my personal experiences accurately, then the majority of people who consume your value will do so for free. When that content is a product, you may end up spending a lot of time on supporting the thing that is not generating any revenue. You don’t want to be rude and ignore people so you’ll probably spend your valuable time answering questions and helping them troubleshoot issues. All of that time adds up. Startup founders who offer free tiers or near free tiers of services learn very quickly that free customers are the most painful and demanding. You are basically forced to charge just to avoid dealing with demanding people who expect everything for nothing.
Free is Noise
Price is not just a request for value, but it acts as a feedback signal for future content. If you have no idea what people are paying for, it’s difficult to know if what you create is worth anything. A situation where the vast majority of your content is consumed for free yield a lot of noise.
Well, why not focus on the people who pay? You certainly could, but it ends up being a tiny fraction of the sample size you could have had if you actually charged something up front.
Lack of forecasting
Businesses rely on predictible revenue. Forecasting is necessary for all sorts of decisions if you work with anyone but yourself. It helps with purchasing decision (expenses) and with planning of future products. Value for value makes it impossible to know what your revenue will be next month as you just have no idea if everyone pays nothing or a lot.
V4V could make you uncompetitive
In a model where one person charges a fixed price and the other is relying on the good will of the people to "see the value" in their work, the person with predictible revenue will most likely win out in a competitive environment - enabling them to get ahead of you and your business. They will have an easier time planning further content / products and hiring people to scale the business even further.
It’s not all hopeless
That’s not to say that I don’t like the idea of value for value. Of course I only want people to pay if they find the thing useful. The issue is that people may not know the thing is useful until they’ve already acquired it. At that point who is going back to pay for the thing they already got for free? Few to none.
Value for value may work. For some.
I’m not saying value for value doesn’t work sometimes, for some people. It is entirely possible that a person earns a living on v4v transactions. However, I think for that to be true there may be other factors at play such as social standing, personal brand, influence, likability, status within a community. The vast majority of creators do not fall into this category and will just struggle.
I’m cautiously optimistic about V4V and hope it works out at scale. But as it stands, I have not seen much evidence that it actually pays the bills. Yes, there has been some support for podcasts on Fountain, but it is unclear whether it is just as or more significant than traditional transaction model.
“Information is not scarce” is irrelevant
There’s some notion that information yearns to be free and cannot be scarce by nature. I think this may be a false argument from the start. When we purchase digital things, we are not paying for scarcity - it’s totally irrelevant. We pay for the experience and the feeling we get from that thing. In fact, the same is probably true for physical products (with the added benefit of personal sustenance). I don’t go into the grocery store to buy a dinner and fork over the money because it’s scarce. I pay because I’m hungry. There’s utility and there’s pleasure and fulfillment. If I’m having a dinner with friends, there’s also fun. Unless I am totally misunderstanding the argument, I’m not sure how it applies.
In Summary
- Value 4 value may work at scale, but remains to be seen
- It could be great fun money but not serious enough to pay the bills (for most of us)
- Sounds good on paper but we humans have our own ways of thinking about value and what it's worth
- May work well for people who build a personal brand or have status in a community
As always I look forward to your thoughts. Let me know if I’m overlooking something or should consider some point of view in more depth.
-
@ 92294577:49af776d
2023-07-19 23:40:11Growing evidence suggests, however, there is no ‘one size fits all’ approach but rather many complementary protocols, each addressing different problems and catering to specific use cases and markets.
In this edition of Layer-2 Roundup, we look at some of these second-layer protocols in detail. Among other things, we will explore their interoperability (or lack thereof) and the projects using these solutions to promote mass adoption. We will also look at some of the various growing pains experienced so far, as seen recently as a result of May’s high-fee market environment.
Choosing the Right Tool for the Job
Each second layer addresses a unique set of limitations inherent in the mainchain, such as the lack of high transaction throughput, privacy, or the ability to issue assets. For example, if you want to send a friend a small amount of sats and value affordability and speed, Lightning is likely the best option. Whereas if you are a financial institution wanting to issue an asset like a bond or digital security, it makes more sense to use Liquid.
https://cdn.nostr.build/i/5fdbca0ff4cd19d5cccd049387d495812a91b45fafd5e9a4c899eb7478611378.png
There are also varying tradeoffs when using each solution that may affect a user’s decision to opt in, like Lightning’s liquidity constraints or the trust requirements (albeit distributed) seen with federated models, such as Liquid and Fedimint. As creator Burak has openly shared, even the newest addition to the layer-2 landscape, Ark, has tradeoffs with the mainchain and other L2s.
Like the old analogy of 'choosing the right tool for the job,' in a hyperbitcoinized world, users can expect to have a toolkit of L2s at their disposal, with different capabilities and tradeoffs.
Increasing Interoperability
Often overlooked is the importance of interoperability between not only the second-layer protocol and Bitcoin but the layer-2 protocols themselves. A second layer, where end-users can leverage several protocols together and move seamlessly between them, creates a healthier, more resilient financial system and an overall better user experience—both essential for mass adoption. For example, by running Lightning on top of Liquid, users gain greater privacy, additional liquidity, and cheaper fees (and much more, as we will explore later).
While both Liquid and Lightning networks operate independently, they are complementary and interoperable, offering a secure, alternative method to stacking sats or a more cost-effective option to Lightning channel rebalancing, especially when fees are high on the mainchain.
Elements, the open-source codebase that Liquid is built on, is designed to be as close to parity with Bitcoin Core as possible. This not only offers some nice security guarantees (since any bug fix or performance improvement upstream in Bitcoin can be merged into Elements) but also greater interoperability with other L2s, given that its design functions very similarly to Bitcoin.
Connecting the Second Layer with Lightning
The basis of Lightning is its network of payment channels, which are fundamentally made possible through Bitcoin's Unspent Transaction Outputs (UTXOs) in conjunction with Lightning's Hashed Timelock Contracts (HTLCs). The UTXO model allows certain script conditions, and hash puzzles and time constraints to be encoded in the transaction for payment to be securely routed across Lightning.
One of the many design features that Liquid inherits from Bitcoin is its UTXO model. This compatibility allows Lightning's HTLCs to function with Liquid Bitcoin (L-BTC) in a manner similar to how they function with Bitcoin, enabling the payment network to operate on top of Liquid. Note that this Lightning Network on Liquid would run as a separate network but with all the advantages of Liquid as its underlying chain (e.g., Confidential Transactions and deterministic blocks). You could even bridge the two networks if you ran both—one on top of Bitcoin, the other on Liquid—for greater cross-platform compatibility. The payments remain end-to-end secure since both use the HTLC construction. The bridge, however, gets to dictate a dynamic exchange rate if the two assets being transferred are different, which is not an issue when transferring BTC and L-BTC since they are pegged.
Lightning's inherent decentralization, wide adoption, and compatibility with UTXO-based technologies could position it as the connective tissue between each L2. It could act as a primary hub for new protocols seeking to bridge to existing ones, helping to avoid the chicken-and-egg problem of adoption that has plagued new protocols in the past.
This thesis has begun to play out more recently, with several big-name exchanges adding Lightning and swap platforms incorporating Liquid with Lightning to leverage the benefits of both protocols.
Unfairly Cheap with Lightning and Liquid
In early May, on-chain Bitcoin transaction costs surged due to network congestion, resulting in the highest fees seen in nearly two years. This affected major exchanges like Binance and Coinbase, and even some Lightning-compatible wallets like Muun, pricing some users out of the market entirely. This week-long episode underscored the importance of hardening scalability solutions like Lightning, which have so far relied on mainchain transactions to keep liquidity balanced. The event also raised awareness of the powerful benefits of using layer-2 technologies together, especially when fees on Bitcoin's mainchain are not only high but also volatile.
One of the new products in-market driven by this episode is the use of Liquid submarine swaps by Boltz to offer cheap Lightning channel liquidity to its users. As opening a Lightning channel requires an on-chain transaction and many users rely on the mainchain to add liquidity to their Lightning node, costs can quickly add up in high-fee conditions. By using the Liquid sidechain instead of the Bitcoin mainchain as the underlying liquidity source, users can rebalance their Lightning channels independently from the congested mainchain mempool—and do so without losing self-custody of their funds, thanks to the atomic nature of the swap.
In a high-fee scenario, users can expect upwards of 99% savings using the Liquid swap feature. Boltz intends to expand the scope of their Liquid integration by building an L-BTC <> BTC chain-to-chain atomic swap for trustless peg-outs—the first of its kind.
You can read more about Boltz's decision to add Liquid and why in their write-up here.
📺 Lightning Channel Rebalancing with Liquid Bitcoin on boltz.exchange
Another option for users is the self-hosted rebalancing protocol PeerSwap, which allows Lightning node operators to rebalance their channels with peers directly using BTC and L-BTC atomic swaps. This setup eliminates the need for a third-party coordinator for even greater savings and allows smaller nodes to better compete with larger ones. PeerSwap is currently available for both CLN and LND implementations.
The story does not end there, though. In addition to provisioning Lightning liquidity with Liquid, users turned to Lightning <> Liquid swaps to stack sats (and humbly, I might add). Many used a cheap starting point like Strike, Cash App, or some other fiat on-ramp to buy Lightning Bitcoin (LN-BTC) directly and then moved to one of the growing number of Lightning to Liquid swap services like Boltz, SideShift, or Classic CoinOs to convert to L-BTC to HODL for the mid-term. So, why would anyone HODL in L-BTC rather than LN-BTC? Unlike with Lightning, Liquid assets can be self-custodied offline in cold storage, like on a hardware device such as Jade. This setup is better for HODLing over a longer time frame—another difference to consider when deciding what layer-2 solution is best for you and your specific use case.
The Emergence of the Bitcoin Superapp
Some builders are already working on improving the Bitcoin layer-2 user experience by directly integrating swaps and multi-protocol support into their app offerings.
For example, the Blockstream Green team is in the final stages of adding Lightning capability via Greenlight, giving Bitcoiners the ability to self-custody mainchain, Liquid, and Lightning all in one app. Green, SideSwap, and the soon-to-be rereleased version of the AQUA wallet also plan to incorporate in-app Lightning <> Liquid swaps using the Boltz API.
Wallby, a newly anointed Bitcoin ‘superapp,’ supports the custody of mainchain, Liquid, and Rootstock, with further plans to add Lightning and RGB. The Wallby team is also placing emphasis on features. For instance, users can already add bitcoin and other digital assets to liquidity pools and earn interest through an automated market maker (AMM), with the ability to lend and borrow peer-to-peer and perform cross-chain swaps also on the way.
The emergence of these Bitcoin superapps and new features like in-app swaps prioritizes improving user experience, something the Bitcoin space is notoriously bad at (to the point it has become a running meme). This pivot and Lightning's maturation as a sort of lingua franca of Bitcoin will be a crucial part of the strategy for increasing layer-2 interoperability and facilitating mass adoption. Each protocol will have a unique place in the hyperbitcoinization story, ending in a second layer that is stronger than each individual protocol on its own.
-
@ 9be0be0e:c3cbb81e
2023-07-19 11:05:48Enable the freedom to communicate.
Reach should be the result of how many people want or don’t want to listen to your message, there is no reason for a third party or algorithm to be required in this equation.
You should be in control of what you can or cannot see. Who you block should be up to you.
Ideally Nostur tries to reduce the need to require or trust any third party in order to communicate, unless there is no other way.
BUT
Nostur is built for iPhone, iPad and Mac users. In one way this is a limitation, (e.g., zap restrictions by Apple) but if we are using the Apple ecosystem already, we might as well use it to our advantage.
Nostur's target audience already trusts Apple with their data, their messages, photos, calendar, reminders, security cameras, etc.
We don’t need to store our data on random relays, and hope our contact list doesn’t get lost, or leak metadata to the public. We can store everything on our device, and sync using iCloud, it is reliable, and we already use it for far more important data anyway. Converting Apple users to Android or GrapheneOS is an uphill battle, I applaud people who take that route, but it’s not for Nostur users, we have people saying don't trust the media, don't use twitter, don't use iPhone, if we keep going, we end up sending smoke signals in a circle. As for interoperability, we can still publish or export using nostr native formats so you can use your data in another nostr app.
Nostur will publish to relays, but our data is on our device first, iCloud second, and third-party relays third. And you can still use a personal private relay for yourself if you want.
With this in mind, Nostur tries to let relays just be relays, not personal storage. Using relays for storage might end up centralising nostr, in the same way email, which used to be decentralised, is now mostly hosted by google and microsoft.
If you disagree with this mission or direction, Nostur's source is released under GPL-3.0 license, so feel free to fork and create a different version.
Ultimately, the goal of Nostur is not to get more people to use Nostur, but to get more people to use nostr.
-
@ d5d25ac9:65ea8ded
2023-06-14 13:10:39📝 Summary: [TEST-J] An extension to BOLT-11 is proposed for invoices to contain two bundled payments for non-custodial exchanges. Boltz is distributing a submarine swap client separate from the user's lightning wallet, enabling competition and increasing potential user base. However, dedicated logic is required for a trust-minimized swap. 👥 Authors: • Olaoluwa Osuntokun ( nostr:npub1p032kpesmmlcwqcexuglqwxug3flxa2ayuhdd8utpw896k7x99gs37dh8h ) • Thomas Voegtlin ( nostr:npub1ghyhf8fhfkysttrhqkq3cjr4c4jaf70ug8chcczh88lpptx26ggs785w2q ) 📅 Messages Date Range: 2023-06-13 to 2023-06-15 ✉️ Message Count: 3 📚 Total Characters in Messages: 17494
-
@ c5fb6ecc:e58c38bb
2023-05-12 00:59:58https://ln.tips is a great wallet. It's an extremely easy to use, custodial Lightning wallet for the masses. Each telegram account has it's own
@ln.tips
LN Address, but sometimes you want to use your own domain.In this guide I will teach you how to setup LN Address redirection with your own domain using Cloudflare's Redirection Rules.
Prerequisites
- A Web Domain that's has Cloudflare setup on it.
- https://ln.tips setup and ready to go.
- Using ln.tips is optional. This guide will work with any other custodial wallet that provides you with an LN Address will work too.
Setup
Getting your destructured LN Address
ln.tips
Since ln.tips provides two LN addresses to everybody, you have two options. 1. Use your Telegram username LN address (Not Recommended) 1. This isn't recommended because anyone can see your Telegram username with this method and use it to message you. It's the best choice for anonymity from other users. 2. ex:
nym@ln.tips
2. Use your anonymous LN address (Recommended) 1. This is recommended because the address is random, nobody can look this up back to your Telegram account. 2. Can be obtained by running/advanced
to the bot, and finding it under "Anonymous Lightning address" 3. ex:0x84e6b3ea699ab309@ln.tips
What option you pick doesn't matter to your next step, you're going to want to take the username portion of the address (everything before the @, like an email address) add
https://ln.tips/.well-known/lnurlp/<username>
username goes at the end.The final url should look something like
https://ln.tips/.well-known/lnurlp/0x84e6b3ea699ab309
(depending on the method you chose)Other platforms
Custodial Wallets that provide you with a Lightning address work similarly to this. Apps like Wallet of Satoshi provide you with a completely random address when you sign up, so a Wallet of Satoshi destructured address would look like:
https://walletofsatoshi.com/.well-known/lnurlp/LawyerCicanery69
Setting up Cloudflare Redirects
Assuming that you have Cloudflare hooked up and ready to go, you're going to want to follow a few steps. 1. Open your site on the panel 2. On the sidebar, click the dropdown arrow next to Rules 3. Click "Redirect Rules" 4. Press the button that says "Create Rule" 5. Configure your new rule 1. Give it a name. ex: "lnaddr" 2. Configure the first condition 1. Set "Field" to
URI Path
2. Set "Operator" tostarts with
3. Set "Value" to/.well-known/lnurlp/
3. Configure the "then" 1. Set "Type" toStatic
2. Set "URL" to your destructured Lightning address from earlier 3. Set "Status Code" to307
4. Check "Preserve query string" 6. Click SaveAll done! Now whenever someone goes to pay your new Lightning address, it should automatically redirect to your custodial wallet. Have fun!
-
@ 52b4a076:e7fad8bd
2023-05-01 19:37:20What is NIP-05 really?
If you look at the spec, it's a way to map Nostr public keys to DNS-based internet identifiers, such as
name@example.com
.If you look at Nostr Plebs:
It's a human readable identifier for your public key. It makes finding your profile on Nostr easier. It makes identifying your account easier.
If you look at basically any client, you see a checkmark, which you assume means verification.
If you ask someone, they probably will call it verification.
How did we get here?
Initially, there was only one client, which was (kind of) the reference implementation: Branle.
When it added support for NIP-05 identifiers, it used to replace the display name with the NIP-05 identifier, and it had to distinguish a NIP-05 from someone setting their display name to a NIP-05. So they added a checkmark...
Then there was astral.ninja and Damus: The former was a fork of Branle, and therefore inherited the checkmark. Damus didn't implement NIP-05 until a while later, and they added a checkmark because Astral and other clients were doing it.
And then came new clients, all copying what the previous ones did... (Snort originally did not have a checkmark, but that changed later.)
The first NIP-05 provider
Long story short, people were wondering what NIP-05 is and wanted it, and that's how Nostr Plebs came to be.
They initially called their service verification. Somewhere between January and February, they removed all mentions to verification except one (because people were searching for it), and publicly said that NIP-05 is not verification. But that didn't work.
Then, there were the new NIP-05 providers, some understood perfectly what a NIP-05 identifier is and applied the correct nomenclature. Others misnamed it as verification, adding confusion to users. This made the problem worse on top of the popular clients showing checkmarks.
(from this point in the article we'll refer to it as a Nostr address)
And so, the scams begin
Spammers and scammers started to abuse Nostr addresses to scam people: - Some providers has been used by fake crypto airdrop bots. - A few Nostr address providers have terminated multitude of impersonating and scam identifiers over the past weeks.
This goes to show that Nostr addresses don't verify anything, they are just providers of human readable handles.
Nostr addresses can be proof of association
Nostr addresses can be a proof of association. The easiest analogy to understand is email:
jack@cash.app -> You could assume this is the Jack that works at Cash App.
jack@nostr-address-provider.example.com -> This could be any Jack.
What now?
We urge that clients stop showing a checkmark for all Nostr addresses, as they are not useful for verification.
We also urge that clients hide checkmarks for all domain names, without exception in the same way we do not show checkmarks for emails.
Lastly, NIP-05 is a nostr address and that is why we urge all clients to use the proper nomenclature.
Signed:
- Semisol, Nostr Plebs (semisol@nostrplebs.com)
- Quentin, nostrcheck.me (quentin@nostrcheck.me)
- Derek Ross, Nostr Plebs (derekross@nostrplebs.com)
- Bitcoin Nostrich, Bitcoin Nostr (BitcoinNostrich@BitcoinNostr.com)
- Remina, zaps.lol (remina@zaps.lol)
- Harry Hodler, nostr-check.com (harryhodler@nostr-check.com)
-
@ c9dccd5f:dce00d9a
2023-04-11 09:14:49I am an aspiring physicist, interested in atomic, particle and gravitational physics. In 2021 I became interested in Bitcoin and have been fascinated by it and its impact on the world ever since. Like probably most of you, in December 2022 Nostr happened to me, which kept me hooked throughout.
I always wanted to write something, like a blog, but I never knew what to write about and where to publish it. I never got used to sites like Substack, but now with Nostr I know where to publish. What remains is the question: What should I write about?
My plan is to document what I learn and to help me learn. So it's not a typical blog, which is why I put blog in quotes in the first paragraph. Most likely the topics will be physics, Bitcoin and Nostr related. But anything is possible.
I will not have a publishing schedule, at least at the beginning. I will post as things come to me.
The posts are mainly for me to learn, so I'm planning to write my posts in the style of the Feynman technique and you are my audience. You probably already know what it is, but if not, my next post will explain it to you 😜
My hope is that you will find my posts useful and that we can have a learning experience together. I look forward to your comments. Surely it will happen that I get something wrong and I hope you will correct me.
PV 🤙
-
@ 6e468422:15deee93
2023-04-04 13:23:19Not too long ago, I tried to paint a picture of what a vision for a value-enabled web could look like. Now, only a couple of months later, all this stuff is being built. On nostr, and on lightning. Orange and purple, a match made in heaven.
It goes without saying that I'm beyond delighted. What a time to be alive!
nostr
Here's the thing that nostr got right, and it's the same thing that Bitcoin got right: information is easy to spread and hard to stifle.[^fn-stifle] Information can be copied quickly and perfectly, which is, I believe, the underlying reason for its desire to be free.
[^fn-stifle]: That's a Satoshi quote, of course: "Bitcoin's solution is to use a peer-to-peer network to check for double-spending. In a nutshell, the network works like a distributed timestamp server, stamping the first transaction to spend a coin. It takes advantage of the nature of information being easy to spread but hard to stifle."
Easy to spread, hard to stifle. That's the base reality of the nature of information. As always, the smart thing is to work with nature, not against it.[^1] That's what's beautiful about the orange coin and the purple ostrich: both manage to work with the peculiarities of information, not against them. Both realize that information can and should be copied, as it can be perfectly read and easily spread, always. Both understand that resistance to censorship comes from writing to many places, making the cost of deletion prohibitive.
Information does not just want to be free, it longs to be free. Information expands to fill the available storage space. Information is Rumor's younger, stronger cousin; Information is fleeter of foot, has more eyes, knows more, and understands less than Rumor.
Eric Hughes, A Cypherpunk's Manifesto
Nostr is quickly establishing itself as a base layer for information exchange, one that is identity-native and value-enabled. It is distinctly different from systems that came before it, just like Bitcoin is distinctly different from monies that came before it.
As of today, the focus of nostr is mostly on short text notes, the so-called "type 1" events more commonly known as tweets.[^fn-kinds] However, as you should be aware by now, nostr is way more than just an alternative to twitter. It is a new paradigm. Change the note kind from
1
to30023
and you don't have an alternative to Twitter, but a replacement for Medium, Substack, and all the other long-form platforms. I believe that special-purpose clients that focus on certain content types will emerge over time, just like we have seen the emergence of special-purpose platforms in the Web 2.0 era. This time, however, the network effects are cumulative, not separate. A new paradigm.Let me now turn to one such special-purpose client, a nostr-based reading app.
[^fn-kinds]: Refer to the various NIPs to discover the multitude of event kinds defined by the protocol.
Reading
I'm constantly surprised that, even though most people do read a lot online, very few people seem to have a reading workflow or reading tools.
Why that is is anyone's guess, but maybe the added value of such tools is not readily apparent. You can just read the stuff right there, on the ad-ridden, dead-ugly site, right? Why should you sign up for another site, use another app, or bind yourself to another closed platform?
That's a fair point, but the success of Medium and Substack shows that there is an appetite for clean reading and writing, as well as providing avenues for authors to get paid for their writing (and a willingness of readers to support said authors, just because).
The problem is, of course, that all of these platforms are platforms, which is to say, walled gardens that imprison readers and writers alike. Worse than that: they are fiat platforms, which means that permissionless value-flows are not only absent from their DNA, they are outright impossible.[^2]
Nostr fixes this.
The beauty of nostr is that it is not a platform. It's a protocol, which means that you don't have to sign up for it---you can create an identity yourself. You don't have to ask for permission; you just do, without having to rely on the benevolence of whatever dictator is in charge of the platform right now.
Nostr is not a platform, and yet, powerful tools and services can be built and monetized on top of it. This is good for users, good for service providers, and good for the network(s) at large. Win-win-win.
So what am I talking about, exactly? How can nostr improve everyone's reading (and writing) experience?
Allow me to paint a (rough) picture of what I have in mind. Nostr already supports private and public bookmarks, so let's start from there.
Imagine a special-purpose client that scans all your bookmarks for long-form content.[^fn-urls] Everything that you marked to be read later is shown in an orderly fashion, which is to say searchable, sortable, filterable, and displayed without distractions. Voilà, you have yourself a reading app. That's, in essence, how Pocket, Readwise, and other reading apps work. But all these apps are walled gardens without much interoperability and without direct monetization.
[^fn-urls]: In the nostr world long-form content is simply markdown as defined in NIP-23, but it could also be a link to an article or PDF, which in turn could get converted into markdown and posted as an event to a special relay.
Bitcoin fixes the direct monetization part.[^fn-v4v] Nostr fixes the interoperability part.
[^fn-v4v]: ...because Bitcoin makes V4V practical. (Paywalls are not the way.)
Alright, we got ourselves a boring reading app. Great. Now, imagine that users are able to highlight passages. These highlights, just like bookmarks now, could be private or public. When shared publicly, something interesting emerges: an overlay on existing content, a lens on the written Web. In other words: swarm highlights.
Imagine a visual overlay of all public highlights, automatically shining a light on what the swarm of readers found most useful, insightful, funny, etc.
Further, imagine the possibility of sharing these highlights as a "type 1" event with one click, automatically tagging the highlighter(s)---as well as the author, of course---so that eventual sat-flows can be split and forwarded automatically.
Voilà, you have a system that allows for value to flow back to those who provide it, be it authors, editors, curators, or readers that willingly slog through the information jungle to share and highlight the best stuff (which is a form of curation, of course).
Zaps make nostr a defacto address book[^fn-pp] of payment information, which is to say lightning addresses, as of now. Thanks to nostr wallet connect (among other developments), sending sats ~~will soon be~~ is already as frictionless as leaving a like.
[^fn-pp]: The Yellow Pages are dead, long live The Purple Pages!
Value-for-value and participatory payment flows are something that traditional reading apps desperately lack, be it Pocket, Instapaper, Readwise, or the simple reading mode that is part of every browser.
A neat side-effect of a more structured way to share passages of text is that it enables semi-structured discussions around said passages---which could be another useful overlay inside special-purpose clients, providing context and further insights.[^5]
Further, imagine the option of seamlessly switching from text-on-screen to text-to-speech, allowing the user to stream sats if desired, as Podcasting 2.0 clients already do.[^3]
Imagine user-built curations of the best articles of the week, bundled neatly for your reading pleasure, incentivized by a small value split that allows the curator to participate in the flow of sats.
You get the idea.
I'm sure that the various implementation details will be hashed out, but as I see it, 90% of the stuff is already there. Maybe we'll need another NIP or two, but I don't see a reason why this can't be built---and, more importantly: I don't see a reason why it wouldn't be sustainable for everyone involved.
Most puzzle pieces are already there, and the rest of them can probably be implemented by custom event types. From the point of view of nostr, most everything is an event: bookmarks are events, highlights are events, marking something as read is an event, and sharing an excerpt or a highlight is an event. Public actions are out in the open, private actions are encrypted, the data is not in a silo, and everyone wins. Especially the users, those who are at the edge of the network and usually lose out on the value generated.
In this case, the reading case, the users are mostly "consumers" of content. What changes from the producing perspective, the perspective of the writer?
Writing
Back to the one thing that nostr got right: information is easy to spread but hard to stifle. In addition to that, digital information can be copied perfectly, which is why it shouldn't matter where stuff is published in the first place.
Allow me to repeat this point in all caps, for emphasis: IT SHOULD NOT MATTER WHERE INFORMATION IS PUBLISHED, and, maybe even more importantly, it shouldn't matter if it is published in a hundred different places at once.[^fn-torrents]
What matters is trust and accuracy, which is to say, digital signatures and reputation. To translate this to nostr speak: because every event is signed by default, as long as you trust the person behind the signature, it doesn't matter from which relay the information is fetched.
This is already true (or mostly true) on the regular web. Whether you read the internet archive version of an article or the version that is published by an online magazine, the version on the author's website, or the version read by some guy that has read more about Bitcoin than anyone else you know[^fn-guy]---it's all the same, essentially. What matters is the information itself.
[^fn-guy]: There is only one such guy, as we all know, and it's this Guy: nostr:npub1h8nk2346qezka5cpm8jjh3yl5j88pf4ly2ptu7s6uu55wcfqy0wq36rpev
Practically speaking, the source of truth in a hypernostrized world is---you guessed it---an event. An event signed by the author, which allows for the information to be wrapped in a tamper-proof manner, which in turn allows the information to spread far and wide---without it being hosted in one place.
The first clients that focus on long-form content already exist, and I expect more clients to pop up over time.[^4] As mentioned before, one could easily imagine prism-like value splits seamlessly integrated into these clients, splitting zaps automatically to compensate writers, editors, proofreaders, and illustrators in a V4V fashion. Further, one could imagine various compute-intensive services built into these special-purpose clients, such as GPT Ghostwriters, or writing aids such as Grammarly and the like. All these services could be seamlessly paid for in sats, without the requirement of any sign-ups or the gathering of any user data. That's the beauty of money proper.
Plagiarism is one issue that needs to be dealt with, of course. Humans are greedy, and some humans are assholes. Neither bitcoin nor nostr fixes this. However, while plagiarism detection is not necessarily trivial, it is also not impossible, especially if most texts are published on nostr first. Nostr-based publishing tools allow for OpenTimestamp attestations thanks to NIP-03, which in turn allows for plagiarism detection based on "first seen" lookups.
That's just one way to deal with the problem, of course. In any case, I'm confident that we'll figure it out.
Value
I believe that in the open ~~attention~~ information economy we find ourselves in, value will mostly derive from effective curation, dissemination, and transmission of information, not the exclusive ownership of it.
Although it is still early days, the statistics around Podcasting 2.0 and nostr zaps clearly show that (a) people are willing to monetarily reward content they care about, and (b) the willingness to send sats increases as friction decreases.
The ingenious thing about boostagrams and zaps is that they are direct and visible, which is to say, public and interactive. They are neither regular transactions nor simple donations---they are something else entirely. An unforgable value signal, a special form of gratitude and appreciation.
Contrast that with a link to Paypal or Patreon: impersonal, slow, indirect, and friction-laden. It's the opposite of a super-charged interaction.
While today's information jungle increasingly presents itself in the form of (short) videos and (long-form) audio, I believe that we will see a renaissance of the written word, especially if we manage to move away from an economy built around attention, towards an economy built upon value and insight.
The orange future now has a purple hue, and I believe that it will be as bright as ever. We just have a lot of building to do.
Further Reading
NIPs and Resources
- Nostr Resources
- value4value.info
- nips.be
- NIP-23: Long-form content
- NIP-57: Event-specific zap markers
- NIP-47: Nostr Wallet Connect
- NIP-03: OpenTimestamps attestations for events
Originally published on dergigi.com
[^1]: Paywalls work against this nature, which is why I consider them misguided at best and incredibly retarded at worst.
[^2]: Fiat doesn't work for the value-enabled web, as fiat rails can never be open and permissionless. Digital fiat is never money. It is---and always will be---credit.
[^3]: Whether the recipient is a text-to-speech service provider or a human narrator doesn't even matter too much, sats will flow just the same.
[^4]: BlogStack and Habla being two of them.
[^5]: Use a URI as the discussion base (instead of a highlight), and you got yourself a Disqus in purple feathers!
[^fn-torrents]: That's what torrents got right, and ipfs for that matter.
-
@ 1bc70a01:24f6a411
2023-03-27 02:41:22You may remember a documentary on Netflix that discussed the negative effects of social media - Social Dilemma. It sparked many discussions in various circles, but nothing came of it.
Well, today I want to talk about making social media healthier, if not for ourselves, but for our kids.
We have a once in a lifetime opportunity with Nostr to reshape social media clients from scratch. Let us not blindly copy existing social media behavior. After all, the definition of stupidity is doing the same thing and expecting different results. Let’s not be stupid and make social media just as, if not more addicting than before.
The big TLDR; is that social media addictive mechanisms harm self image in kids. At the time where they should be building confidence, the mechanics of social media make them feel insecure. I can only imagine the downstream effects into adulthood, but on society level it can’t be good.
Some organizations even exist to supposedly move this subject forward, but after reviewing their content, I see nothing substantial put forward. One such organization “Center for Human Technology” seems to say the right things but puts no effort into offering any actual solutions.
Strategies to make social media healthier
Let’s brainstorm some actual things we can do to limit social media addictiveness, reduce social influence and manipulation.
Boost self-esteem
Vanity metrics can play a positive role but the wrong kind of metric is more harmful than not. Follower count immediately comes to mind. You see people obsessing with their follower count, and even those not realizing they are obsessed are constantly comparing themselves to one another. You are probably one of those people. If you don’t believe me, go ahead and close down your account right now, and create a fresh one to start over. I’ll wait.
Still here? I thought so. Short of constantly deleting our accounts, we can do something else - not showing a follower metric at all.
Remove followers metrics
As drastic as this sounds, removing followers is a huge step forward to better mental health. We don’t need to see how many people follow us. As long as you can see who you follow, it shouldn’t matter who is following you.
This goes beyond Twitter-like apps. Subscriber counts on YouTube channels, on email lists, none of these things need to exist. The number of people you send something to should be irrelevant. Think about it - how does it impact the content of your message whether you have 100 followers or 10,000? It doesn’t.
Avoid algorithms at all costs
Algos are excellent at hijacking attention. They know what you like and keep feeding off you to keep you hooked. Let’s end this stupidity once and for all and say no to algorithms.
I also came to a realization that “algorithmic choice” is an illusion. The “best” algorithm will by definition be the winner and the most popular. Clients will implement the thing that people crave most until “better” algorithms get more users hooked on a client. Who doesn’t want that for their platform? Everyone. Attention is money. Attention is harm.
If we want to create a better future for our children, we’ll say no to algorithms. This means we have to accept that people will gravitate towards “cheaters” who do include “useful” algorithms in their clients. It also means we have to be willing to forgo larger profits.
Perhaps well-thought out policy can be introduced in the future that limits the harm of algorithms, but in the meantime we can take matters into our own hands and simply say no.
Improve happiness levels
Avoid news feeds
Thanks to nostr we can create clients that only handle news feeds, so we don’t really need to include them in social clients.
News keeps people down because negative news gets most clicks. We can avoid this whole issue just by not including news feeds in social applications. Less clickbaity headlines, less rage, more productive conversations.
If you still crave news, go ahead and use that nostr client designed specifically for news consumption.
Of course, we can’t stop people from sharing the news, but we can avoid algos that surface it, and avoid creating feeds specifically designed for news consumption.
News also consumed a lot of time and spreads misinformation. You get scenarios where neither of the arguers read the article in full and are arguing about something that’s not even reported. It’s painful to watch.
Then you have situations where the news is actually a narrative spun by some organization or individual who wants to influence social behavior. They may report correct information or completely misrepresent facts.
News is “bad news”. Just don’t build it into social clients intentionally.
Create happiness clients
One thing I have not seen any social media do is ask whether a piece of content makes you feel positive, neutral or negative.
In theory, we should be able to create clients that prioritize positive content. I know I said avoid algorithms at all costs, but if you wanted to create a happiness portal, you could cheat a little and ask people to market content as positive, neutral or negative, and then surface only the positive.
In my opinion this is not an ideal way to go about it, because you’re creating a different type of bubble, one where people ignore the reality of things. Yet, it is a possibility if we want to alter our mood by putting algos to work for us. At the very least it would be a fun experiment!
Reduce addiction / Save time
Disable notifications by default
You hear countless stories of people feeling better in their lives after disabling notifications. Why not make this the default behavior? “But, people won’t know if the app works!” Yeah.. it has to start some place. If we want change, we need to make tough decisions. If you want to be less extreme about it, you could disable most notifications by default, while not touching the “critical” ones. Personally, I don’t think any notification is critical, you should be completely in control over your attention and that any notification is a major intrusion into your consciousness.
With notifications disabled, we can regain time and attention. Society as a whole might think more clearly and be in the moment. I think it would be a huge step forward.
Delay notifications
Nothing sucks more time than notifications. That tiny red dot begging to be tapped. One solution to make notification less addicting short of turning them off is to delay them. We can purposely set a timer to show notifications in a delayed fashion rather than right away. This way people or kids don’t need to constantly check to see who replied or messaged you. Something as simple as a 3 minute notification delay may be sufficient to curb the constant checking behavior.
Delay reactions
Dopamine is fun, but constant dopamine in real time is unhealthy. Real time reactions force us to stare at our screens waiting for the next reaction.
We can lessen this addictive behavior by introducing delayed reactions to notes. Instead of reactions coming in real time, introduce a delay of 1-5 minutes. If you know that you won’t see any responses to your post for at least 5 minutes, it makes it easier to put down the phone and not have to constantly look to see who liked your note.
Improve Transparency
Once media organizations get on nostr, I think there’s a lot we can do to make them more transparent, accountable, and less manipulative.
One thing we can do is to create meta data for media accounts to indicate their funding sources. Everyone should be able to see who funds a certain organization (as discovered by anyone in the community and voted on by the community in terms of accuracy).
The idea is that someone could dig up funding sources for an organization and add them as meta notes to the account. The community can then collectively decide if this is accurate or inaccurate, giving others an idea if there is a certain bias involved.
Think about the Greenpeace ordeal currently happening. A meta note to indicate that Ripple, a “competing” cryptocurrency is funding them would add a lot of transparency to their claims. I think people would be less likely to believe the nonsense they are spewing.
Create a record of accuracy
Fueled entirely by the community, people could verify the accuracy of claims and indicate that in meta data. Other members can then review those claims and vote on them as well. With enough people involved, you could see if there is a sufficient sample size to indicate whether a media organization has been accurate or inaccurate in the past.
One thing we’d need to watch out here is bot manipulation. Said organizations could hire out malicious services to make it seem they are more accurate than they are typically. We’d have to think of some ways of preventing that.
The sheer lack of ratings on a claim should raise an eyebrow and whether something is to be believed or not.
The right to be forgotten
I know I will catch a lot of heat for this one. “The internet never forgets!” This is what the vast majority of people will say right away. That’s fine… but hear me out…
As builders and developers, we can form a consensus that social media data should be forgotten after x amount of time. Yes, anyone can screenshot it, mirror, put it on their own relay, rebroadcast it, yada yada yada… I get it. But that doesn’t mean we can’t create a consensus by which many builders, relay operators can voluntarily abide. It may not be a bulletproof solution, but it’s an effort that counts.
When we speak in the real world, unless recorded, our words are forgotten. A person should not be judged by a stupid thing they said yesterday, a week ago, a year ago. We can’t be in the right all the time - all people make mistakes and say and do stupid things. However, online, your word remains forever. Various servers cache, duplicate, at zero cost. I totally get that. Yet, we can still design an experience where that information disappears from our feeds, unless actively surfaced with some specific intent to surface it. I think this is a worthwhile effort that developers should consider today.
In cases where information should be saved for good reasons, someone will save it. Entire clients can and will exist to index everything, but that doesn’t mean every single client should surface every single note. People have a right to be wrong and to not be constantly harassed for what they said or did if they no longer feel or act that way.
Let’s have this conversation because no one else will
This article is meant to be a conversation starter. I really think we should weave it into the Nostr conferences as a crucial segment worth exploring and discussing. If we don’t do this, no one will. The world will continue to get gamified, attention hijacked and kids will continue suffering, depressed, lacking confidence and the tools needed to create a better world for their own kids. Let’s not fall sleep at the wheel and actually do something about it.
What other ideas do you have? Share the article and attach your own ideas.