1
 
 

tl;dr: Use pre-built Docker images. Build-from-source requires BuildKit in Docker daemon, which needs sudo on Linux. The image-pull approach takes ~10 minutes instead of ~45.


Why This Guide?

The official Firecrawl self-hosting docs assume you're comfortable with BuildKit builds and lengthy docker compose build. On a fresh Manjaro install with only Portainer running, that approach hits two walls:

  1. BuildKit must be enabled in /etc/docker/daemon.json — requires sudo
  2. Building from source takes 30-45 minutes on first run

This guide uses pre-built images from GHCR and gets you scraping in ~10 minutes with zero sudo beyond initial Docker setup.


Prerequisites

  • Manjaro Linux (Arch-based)
  • Docker installed and running
  • Docker Compose installed (sudo pacman -S docker-compose)
  • Your user added to the docker group (no sudo for docker commands)
  • Docker daemon has BuildKit enabled (see note at bottom if not)
  • Portainer (optional, but nice to have)

Step 1 — Clone the Repo

cd ~
git clone https://github.com/mendableai/firecrawl.git
cd firecrawl

You only need the repo for the docker-compose.yaml. After setup you can rm -rf it if you want.


Step 2 — Create the .env File

cat > .env << 'EOF'
PORT=3002
HOST=0.0.0.0
USE_DB_AUTHENTICATION=false
BULL_AUTH_KEY=CHANGEME
EOF

Set BULL_AUTH_KEY to something secure — it guards the Bull queue admin panel.


Step 3 — Switch to Pre-Built Images

The default docker-compose.yaml tries to build everything from source. We need to flip it to use pre-built images instead. Four services need switching:

# API (main firecrawl service)
sed -i 's|# image: ghcr.io/firecrawl/firecrawl|image: ghcr.io/firecrawl/firecrawl|' docker-compose.yaml
sed -i 's|  build: apps/api|  # build: apps/api|' docker-compose.yaml

# Playwright (browser rendering)
sed -i 's|# image: ghcr.io/firecrawl/playwright-service:latest|image: ghcr.io/firecrawl/playwright-service:latest|' docker-compose.yaml
sed -i 's|    build: apps/playwright-service-ts|    # build: apps/playwright-service-ts|' docker-compose.yaml

# Postgres (database)
sed -i 's|# image: ghcr.io/firecrawl/nuq-postgres:latest|image: ghcr.io/firecrawl/nuq-postgres:latest|' docker-compose.yaml
sed -i 's|    build: apps/nuq-postgres|    # build: apps/nuq-postgres|' docker-compose.yaml

Redis and RabbitMQ already use standard public images (redis:alpine, rabbitmq:3-management) so no changes needed there.

Verify with:

grep -n "image:\|build:" docker-compose.yaml | grep -v "^#"

You should see image: lines for: firecrawl, playwright-service, nuq-postgres, redis, rabbitmq. No build: lines should remain.


Step 4 — Pull the Images

docker pull ghcr.io/firecrawl/firecrawl:latest
docker pull ghcr.io/firecrawl/playwright-service:latest
docker pull ghcr.io/firecrawl/nuq-postgres:latest

Each is ~200-400MB. This takes 5-10 minutes depending on your connection.


Step 5 — Start Everything

docker compose up -d

Check status:

docker ps --format "table {{.Names}}\t{{.Status}}" | grep firecrawl

All 5 containers should show "Up" — RabbitMQ will show "(healthy)" once its health check passes (~30s).


Step 6 — Verify It Works

curl -X POST http://localhost:3002/v0/scrape \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/",
    "pageOptions": {"onlyMainContent": true}
  }'

You should get back JSON with success: true, page content, markdown, and metadata. Credits used will be 1 (from the Postgres DB, even without auth configured).


Step 7 — Wire Hermes Agent to Local Firecrawl

Open ~/.hermes/config.yaml and find the web_extract section under auxiliary:

auxiliary:
  web_extract:
    provider: auto
    model: ''
    base_url: ''
    api_key: ''
    timeout: 360

Change it to:

auxiliary:
  web_extract:
    provider: custom
    model: ''
    base_url: http://localhost:3002/
    api_key: ''
    timeout: 360

Restart Hermes. Now every time Hermes needs to scrape or extract content from the web, it will use your local Firecrawl instance instead of calling an external API.


Useful URLs Once Running

Service URL
Firecrawl API http://localhost:3002/
Bull Queue Dashboard http://localhost:3002/admin/CHANGEME/queues
Portainer (if installed) https://localhost:9443/

Rebuilding After Reboot

cd ~/firecrawl
docker compose up -d

Everything persists in Docker volumes. No data is lost.


Troubleshooting

sed: can't read errors on macOS: macOS sed has different syntax. Use sed -i '' 's/old/new/' on macOS, or use the -i without argument on Linux.

"mount option requires BuildKit" during any build: This only matters if you're building from source. If you're using pre-built images (this guide), you never hit this. If you do need BuildKit for something else, add this to /etc/docker/daemon.json and restart Docker:

{ "features": { "buildkit": true } }

"Image denied" when pulling: Use ghcr.io/firecrawl/firecrawl (lowercase, org path) instead of ghcr.io/mendableai/firecrawl. The latter requires GitHub auth.

RabbitMQ not healthy: Wait 30-60 seconds. First startup runs migrations. Check logs with docker compose logs rabbitmq.

API returns 500: Check API logs with docker compose logs api — common cause is RabbitMQ not being healthy yet.


What's Working vs. Cloud

Feature Local Cloud
/v0/scrape (fetch) Yes Yes
/v0/scrape (Playwright) Yes Yes
/v1/crawl Yes Yes
/v0/extract (AI) Yes (needs OpenAI/Ollama key) Yes
Fire-engine (anti-bot) No Yes
/search Yes (needs SearXNG) Yes

AI features (/extract, structured output) work locally but require an OPENAI_API_KEY or OLLAMA_BASE_URL in your .env.

2
 
 

I stumbled across an idea in a video the other day that was something I had been wanting for a long time. At 2:32 in this clip, the creator mentions using Hermes agent to create a personalized podcast.

So I gave Hermes a single instruction: "Every morning, find the outlier posts from my Piefed subscriptions (credentials in the .env file), summarize them, record yourself reading them, and send everything to my Telegram."

It did all of it. No, really.

What Hermes Actually Did (On Its Own)

I didn't write a single line of code. Hermes handled:

  1. Writing the outlier detection script. It pulled Piefed's API docs, figured out the endpoints, and wrote a Python script that calculates moving averages per community and flags posts more than 2 standard deviations above the mean.
  2. Writing the summarization pipeline. It built the logic to fetch article content from each outlier link and summarize it.
  3. Creating the audio. It invoked its own voice synthesis to read those summaries aloud and save them as audio files.
  4. Sending to Telegram. It used its Telegram bot to deliver both the audio file and a text summary.
  5. Setting the cron job. It configured its own scheduled task to run every morning at 6 AM.

The Result

I asked to send it to me now about an hour after installing the agent, and there's already an audio message. I press play, and Hermes reads me the most interesting posts from the communities I follow — without me opening an app, touching a terminal, or writing a script.

The pipeline scans roughly 295 posts per run, flags the top 15% by score, filters out image-only posts, fetches article content via trafilatura, generates 2-3 sentence summaries, synthesizes audio with AriaNeural, and sends the whole thing to Telegram with a voice message — all running on a cron job that the agent set up itself.

I didn't even wait for the 6 AM cron. I told it to send me the briefing right now, and a few minutes later my phone buzzed with a voice message. It took about 20 minutes from "do this" to listening to it on my phone.

Inspired by the concept discussed here: https://youtu.be/tP6yf22OJdI?t=152

3
 
 

I'll guide you through setting up a complete, free, local debugging system on Manjaro Linux using Ollama (to run the LLM locally) and lite-cc (the agentic CLI tool). This combination lets you debug scripts without any cloud API calls or costs.


Step 1: Install and Configure Ollama

Ollama runs the actual language model on your local machine. The standard install script sometimes has issues with Manjaro, but here's the reliable method:

Install Required Dependencies (Especially for NVIDIA GPUs)

First, check your kernel version and install necessary packages:

uname -r
pamac search "linux.*header"
pamac install nvidia nvidia-utils cuda linux[version]-headers

Replace [version] with your kernel version from the uname -r command (e.g., linux69-headers). If you're unsure or don't have an NVIDIA GPU, you can skip the CUDA/NVIDIA packages and use CPU-only mode.

Restart your system after installing NVIDIA drivers to ensure they load properly.

Install Ollama via AUR (Recommended for Manjaro)

The AUR package is typically more up-to-date and better integrated with Arch-based systems:

pamac install ollama

Alternatively, you can use the official install script after ensuring your NVIDIA drivers are working:

curl -fsSL https://ollama.com/install.sh | sh

If you see the error VERSION_ID: unbound variable, your NVIDIA drivers aren't properly detected—go back to the dependency installation step.

Start Ollama Service and Download a Model

# Start the Ollama service
systemctl start ollama
systemctl enable ollama  # Auto-start on boot

# Download a model (I recommend qwen2.5-coder for debugging)
ollama pull qwen2.5-coder:7b

You can verify Ollama is working by running:

ollama run qwen2.5-coder:7b "print('hello')"

Verify GPU is Working (If Applicable)

nvidia-sim
journalctl -u ollama | grep "NVIDIA"

You should see your GPU model and available VRAM.


Step 2: Install lite-cc

lite-cc is a lightweight, safety-focused coding agent that connects to Ollama.

# Install via pip
pip install lite-cc

# Or with uv (faster, if you have it installed)
uv pip install lite-cc

Verify installation:

litecc --help

Step 3: Configure lite-cc for Ollama

Create a configuration file so lite-cc knows to use your local Ollama model:

mkdir -p ~/.cc
cat > ~/.cc/config.yaml << 'EOF'
model: ollama/qwen2.5-coder:7b
max_iterations: 30
timeout: 120
EOF

This configuration:

  • Uses the model you downloaded via Ollama
  • Limits the agent to 30 tool-calling iterations (prevents runaway loops)
  • Sets a 120-second timeout per command

Step 4: Debug Your Script

Navigate to your project directory and run lite-cc:

cd /path/to/your/project
litecc run "Debug the script myscript.py. Find and fix any errors, then explain what was wrong."

For more visibility into what the agent is doing:

litecc run "Debug myscript.py" -v

Example: Debugging a Python Script

Let's say you have broken.py:

def calculate_average(numbers):
    return sum(numbers) / len(nimbers)  # Typo: 'nimbers' instead of 'numbers'

result = calculate_average([1, 2, 3, 4, 5])
print(f"Average: {result}")

Running lite-cc will:

  1. Read the file with read_file
  2. Execute the script with bash to see the error
  3. Identify the typo
  4. Use write_file to fix it
  5. Re-run to verify the fix

The output will show colored, timestamped logs of each tool call:

14:32:05 [litecc]  Using model: ollama/qwen2.5-coder:7b
14:32:05 [litecc]  Starting task...
14:32:06 [tool]    read_file: broken.py
14:32:07 [tool]    bash: python broken.py
14:32:08 [ollama]  Identified typo: 'nimbers' should be 'numbers'
14:32:09 [tool]    write_file: broken.py
14:32:10 [tool]    bash: python broken.py
14:32:11 [litecc]  Fix complete. Script now outputs: Average: 3.0

Safety Features

lite-cc has built-in guardrails to prevent destructive actions:

  • Blocked commands: rm, sudo, kill, git push --force
  • Path restrictions: Cannot access ~/.ssh, /etc, or traverse outside project directory
  • Output limits: 2000 lines or 100KB per command
  • Timeouts: Commands automatically stop after configurable timeout

These make it safe to let the agent run autonomously.


Useful lite-cc Commands for Debugging

Command Purpose
litecc run "debug script.py" Basic debugging
litecc run "fix all tests" -v Verbose mode with full tool output
litecc run "explain the error" --max-iterations 10 Limit iterations for simple tasks
litecc run "refactor this module" --model ollama/deepseek-coder Switch to a different local model

Troubleshooting

Ollama not responding to lite-cc

Make sure the Ollama service is running:

systemctl status ollama
ollama list  # Should show your downloaded model

lite-cc can't find the model

Check your config file and ensure the model name matches exactly:

cat ~/.cc/config.yaml
ollama list

"Command blocked" warnings

If lite-cc blocks a command you actually need (like git push), this is intentional safety. You can temporarily override by running with --dangerous flag, but only do this if you understand the risk.


Next Steps

Once you're comfortable with basic debugging, explore:

  • Plugins: Add specialized knowledge with --plugin-dir
  • Different models: Try ollama pull deepseek-coder:6.7b for alternative debugging styles
  • Skills: Create reusable debugging workflows with SKILL.md files

Would you like help setting up a specific plugin or debugging a particular type of script?

4
 
 

Average Number of Children for Economic Sustainability

To maintain a stable population size without contraction, a country must achieve a replacement level fertility rate, which is typically around 2.1 children per woman. This figure accounts for the need to replace both parents and factors in child mortality rates, which can lead to fewer surviving offspring reaching reproductive age.


Understanding Replacement Level Fertility

  • Replacement Rate: This is the total fertility rate (TFR) at which a population exactly replaces itself from one generation to the next, without factoring in net migration. The 2.1 children per woman benchmark is common in most developed countries.

  • Global Context: As of 2023, the global average TFR is about 2.3 children per woman, indicating a significant decline from historical figures but still above the replacement threshold. Some countries, particularly in East Asia (e.g., South Korea, Japan), are facing TFR as low as 1.0, which could lead to population shrinkage and economic challenges over time.

Fertility Rates Around the World

Region Average TFR (Children per Woman) Notes
Developed Countries ~1.5 - 2.1 Generally below replacement level.
Sub-Saharan Africa ~5.4 Expected to decline only modestly.
East Asia ~1.0 - 1.5 Significant declines impacting economy.
Global Average ~2.3 Close to replacement, but regional variances exist.

Implications of Low Fertility Rates

  1. Economic Growth: Low fertility rates can result in labor shortages and a shrinking consumer base, potentially leading to slower economic growth.

  2. Aging Population: A declining birth rate creates a higher proportion of older individuals, increasing the burden on social services and healthcare systems.

  3. Policy Responses: Many governments are implementing policies to encourage higher birth rates, such as parental leave, childcare support, and financial incentives for families.

Maintaining this balance between birth rates and economic needs is crucial for sustainable development. Countries actively monitoring and responding to these trends can better manage their demographic challenges.

5
 
 

Why is the West Censoring Porn?

The West's approach to censoring porn seems to stem from a complex mix of moral, economic, and socio-political factors, as gathered from various perspectives. Here are the key arguments:

Moral and Cultural Panic

A significant part of the discussion revolves around a moral panic concerning queerness and sexual expression. This is often tied to:

  • Fear of Queerness: There’s a concern that any representation of same-sex couples or trans individuals may be defined as "porn," leading to increased censorship.
  • Moral Decay: Policymakers may frame the censorship of porn as a necessary step against perceived moral decline, often associated with rising misogyny and normalized sexual violence.

Economic and Labor Market Implications

The censorship of porn may also relate to larger economic factors:

  • Birth Rates: There is a growing concern about declining birth rates which, according to some, leads to a desire to control and manipulate sexuality in society.
  • Workplace Dynamics: Censoring porn can remove a source of supplemental income for individuals, pushing them to work harder in traditional job markets.

Exploitation and Surveillance

The dynamics of exploitation and increased surveillance are also pronounced:

  • Surveillance State: Expanding the censorship framework can act as an excuse to enhance surveillance capabilities on various sectors of society, including those engaging in sex work.
  • Exploitation of Vulnerable Populations: Censorship can push sex work underground, increasing the precarity for those involved and ultimately allowing greater exploitation similar to how the drug trade has been treated.

Political Manipulation and Control

Several contributors noted how this censorship can serve political ends:

  • Client of Exploitation: The government can manipulate industries and sectors to maintain compliance through methods like debanking, ensuring that certain groups (e.g., trans individuals) become scapegoats in broader political agendas.
  • Empire Building: U.S. policies around porn can be seen as a way to export domestic moral and economic frameworks to allied nations, further consolidating American influence globally.

Disconnect Between Public Sentiment and Regulation

Many feel that current regulations are superficial and do not address the root causes of perceived societal issues linked to pornography:

  • False Solutions: There's concern that banning porn is seen as an easy fix for more complicated societal problems, providing a false sense of relief that makes people feel like action is being taken without actual structural change.
  • Desire for Meaningful Change: Instead of merely censoring porn, there is a call for more comprehensive solutions that protect individuals in the industry and improve social conditions overall.

Conclusion

Censorship of porn in the West appears to be a cocktail of cultural apprehensions, economic motivations, and political maneuvers, all aimed at managing societal norms and controlling populations. While some view this as a means of safeguarding moral standards, others argue it represents a deeper manipulation of personal freedoms and socioeconomic realities.

6
 
 

In the mid-19th century, a wave of health reform swept through America. At the heart of it was James Caleb Jackson, who in 1863 created the first dry breakfast cereal, Granula, at his sanitarium. He believed digestive “cleanliness” was key to wellness. (Wikipedia) Soon after, John Harvey Kellogg and his brother Will, working at the Battle Creek Sanitarium in Michigan, developed what became cold flakes of grain designed to be lighter and easier to digest than heavy breakfasts. (National Geographic) These cereals were marketed not just as convenient foods but as remedies for modern ailments — dyspepsia, sluggishness, even moral ills. (PBS) By the turn of the 20th century, ready-to-eat cereals were being mass-produced and marketed with claims that stretched far beyond nutrition. (HISTORY CHANNEL ITALIA) In short: what began as a dietary reform experiment rooted in wellness ideology turned into a mass-market breakfast staple built on convenience and health claims whose scientific basis was weak or speculative.

7
 
 

How would I build a Python bot that automatically reposts or highlights statistically outlier posts from my Lemmy subscriptions—like anything more than one standard deviation above the average? I’m looking for a general approach covering data retrieval from the Lemmy API, outlier detection, and reposting mechanics.

8
 
 

Here are the commonly cited claims that lead people to believe the September 11 attacks (9/11) were a government or inside-job conspiracy. These are claims, not validated facts; many have been investigated and debunked. I’m presenting them objectively so you can judge the strength of each.

  1. The collapse of World Trade Center Tower 7 (WTC 7) resembled a controlled demolition (straight down, into its footprint) rather than a fire-and-impact collapse. (Wikipedia)
  2. The impact and fires from the hijacked planes alone could not have caused the towers to collapse as quickly as they did. (Sky HISTORY TV channel)
  3. A missile, drone, or non-commercial aircraft hit the Pentagon rather than American Airlines Flight 77, because the entry hole appeared small and plane debris seemed limited. (CBS News)
  4. The U.S. military and air-defence (e.g., North American Aerospace Defense Command / NORAD) stood down, delayed intercepts, or allowed the attacks to proceed. (Sky HISTORY TV channel)
  5. Significant put-option trading (bets that stock prices would fall) in airline companies occurred prior to 9/11 — implying foreknowledge. (Sky HISTORY TV channel)
  6. Some intelligence, warnings, or prior knowledge of hijackings or al-Qaeda attacks existed but were ignored or suppressed—raising suspicion that government knew more than it admits. (Voice of America)
  7. The National Institute of Standards and Technology (NIST) investigations are criticised for relying on modelling rather than full forensic disclosure, so theorists argue the collapse explanations are incomplete. (Wikipedia)
  8. The think-tank Project for the New American Century (PNAC) had argued before 9/11 for a “new Pearl Harbor” to justify increased military spending and foreign wars; conspiracists see this as motive. (arfjournals.com)
  9. The fact that the towers collapsed so completely into dust and rubble leads some to argue that explosives or thermitic materials were used (e.g., claims of “nano-thermite” found in dust). (Wikipedia)
  10. The visible “search for survivors” and subsequent swift decision to demolish or clear WTC 7 raised suspicions of cover-up. (Sky HISTORY TV channel)
  11. The timing of the attacks allowed the U.S. government to pass laws (e.g., the USA PATRIOT Act) and expand surveillance and military reach; some see this as a motive. (lemontopics.com)
  12. The number of initial warnings and intelligence failures (e.g., known hijackers entering the country) feed into the belief that something was deliberately mishandled. (International Business Times)
  13. Some official statements and timelines are inconsistent or incomplete, which fuels suspicion of a cover-up. (Program on Extremism)
  14. The fact that the towers collapsed into their own footprint (especially Tower 2, then Tower 1) is cited as resembling classic demolition patterns. (Wikipedia)
  15. The building owner of the WTC complex, Larry Silverstein, reportedly said “pull it” (interpreted by some as “pull the building”) in a televised interview regarding WTC 7 collapse. (Note: disputed) (Reddit)
  16. The rapid transfer of billions of dollars in contracts (e.g., to defence, reconstruction) after 9/11 is viewed by some as benefiting people with ties to the event. (Sky HISTORY TV channel)
  17. Some testimonies from first-responders and witnesses claim hearing explosions or seeing flashes that are interpreted as planted charges. (Sky HISTORY TV channel)
  18. The presence of ongoing war-games or military exercises on the morning of 9/11 is flagged by conspiracists as enabling confusion and facilitating the attacks. (JOE.ie)
  19. Claims that the U.S. government rushed to destroy evidence, restricted access to sites, or cleared rubble quickly—interpreted as preventing independent forensic investigation. (Sky HISTORY TV channel)
  20. The distrust in government overall (due to other scandals) makes people more willing to believe that such a major event could have been orchestrated rather than merely allowed. (International Business Times)
9
 
 

Right now, big communities dominate the feed. I’m wondering what sort algorithm could level the field so niche or hobbyist communities have a fair chance to get seen.

There’s a good related post: Niche Communities won't be able to reach their true potential until Lemmy adds a sort that takes engagement into account. It puts it well:

“If Lemmy is to truly start having active hobbyist communities instead of being 95% lefty US politics, Shitposts, and some tech stuff, it needs a sort that takes into account the user’s engagement.”

What do you think should be the default sort for a more balanced Lemmy?

10
 
 

To use Anime4K with mpv on Manjaro, you need to do the following steps:

  1. Install Anime4K: Anime4K is available on the AUR. You can install it using any AUR helper like yay or pamac. Here's how you can do it with yay:

    yay -S anime4k-git
    

    Source 0

  2. Install mpv: You can install mpv from the official Manjaro repositories using pacman:

    sudo pacman -S mpv
    

    Source 3

  3. Download the Anime4K shaders: Depending on your GPU, you can download the optimized shaders for lower-end GPU or higher-end GPU from the Anime4K Github page. Extract the shaders and place them in the shaders folder. Source 3

  4. Configure mpv to use Anime4K: You need to modify your mpv.conf file to use Anime4K. The mpv.conf file is usually located in ~/.config/mpv/mpv.conf. If it doesn't exist, you can create it. Below is a sample configuration:

    profile=gpu-hq
    scale=ewa_lanczossharp
    cscale=ewa_lanczossharp
    dscale=mitchell
    tscale=oversample
    correct-downscaling=yes
    sigmoid-upscaling=yes
    scaler-resizes-only=yes
    deband=yes
    

    Add the path to the Anime4K shaders with the glsl-shaders-append option. For example:

    glsl-shaders-append="~~/shaders/Anime4K_Upscale_CNN_M_x2_Denoise_Bilateral_Mode.glsl"
    

    Replace "~~/shaders/Anime4K_Upscale_CNN_M_x2_Denoise_Bilateral_Mode.glsl" with the path to your shaders. Source 6

  5. Use the correct mode for your content: Anime4K has 3 major modes: A, B, and C. Each mode is optimized for a different class of anime degradations. You can switch between these modes using CTRL+1 for Mode A (Optimized for 1080p Anime), CTRL+2 for Mode B (Optimized for 720p Anime), and CTRL+3 for Mode C (Optimized for 480p Anime). You can disable Anime4K using CTRL+0. Source 3

Remember that Anime4K is quite GPU-intensive, so ensure your hardware is capable of handling it. If you experience issues, try adjusting your mpv settings or use a lower-end GPU version of Anime4K.

11
 
 

The 8BitDo Ultimate and Ultimate 2 controllers share a similar design but differ significantly in features, performance, and customization options. Here's a detailed comparison to help you understand the key differences:


🎮 Core Features Comparison

Feature 8BitDo Ultimate 8BitDo Ultimate 2
Connectivity Bluetooth, USB-C, 2.4GHz wireless via USB dongle Bluetooth, USB-C, 2.4GHz wireless via USB dongle
Polling Rate 125Hz 1000Hz
Hall Effect Joysticks No Yes (TMR Hall Effect Joysticks)
Hall Effect Triggers No Yes
Extra Buttons No Yes (two shoulder bumpers and two back paddles)
RGB Lighting No Yes (RGB Fire Ring lighting effects)
Motion Controls No Yes (six-axis motion controls)
Charging Dock No Yes (RGB-lit charging stand included)
Software Customization Limited Full customization via 8BitDo Ultimate Software V2
Price Range Approximately $40–$50 Approximately $60–$70

🔍 Detailed Feature Breakdown

🕹️ Hall Effect Joysticks and Triggers

The Ultimate 2 features TMR Hall Effect joysticks and triggers, offering enhanced precision and durability by reducing drift and wear over time. (The Verge)

🎮 Extra Buttons

The Ultimate 2 introduces additional inputs: two shoulder bumpers and two back paddles, providing more control options for gamers. (Reddit)

💡 RGB Lighting and Motion Controls

The Ultimate 2 includes customizable RGB Fire Ring lighting effects and six-axis motion controls, adding both aesthetic appeal and functionality for compatible games. (The Verge)

🧰 Charging Dock and Software Customization

The Ultimate 2 comes with an RGB-lit charging stand and supports full customization through 8BitDo's Ultimate Software V2, allowing users to remap buttons, adjust sensitivity, and configure profiles. (The Verge)


🧠 Summary

Aspect Ultimate Ultimate 2
Ideal For Budget-conscious gamers seeking basic functionality Enthusiasts desiring advanced features and customization
Performance Standard polling rate and analog controls High polling rate with Hall Effect sensors for enhanced precision
Customization Limited options Extensive customization via software
Extras None RGB lighting, extra buttons, motion controls, charging dock
Price More affordable (~$40–$50) Premium pricing (~$60–$70)

If you're looking for a controller that offers advanced features, customization, and enhanced performance, the 8BitDo Ultimate 2 is the superior choice. However, if you're on a budget and need a reliable controller for basic gaming, the 8BitDo Ultimate remains a solid option.


12
 
 

I’m searching for programming Q&A sites like Stack Overflow where I can ask “how-to” or practical coding questions without worrying about moderators closing my posts. Ideally, a community that’s beginner-friendly and encourages learning rather than strictly enforcing rules. Any recommendations?

13
 
 

cross-posted from: https://reddthat.com/post/52207927

I use Manjaro Linux with the Cinnamon desktop and sometimes run into system-level issues, but I have no idea how to properly debug them. It doesn’t feel as straightforward as debugging a normal program. What’s the best way or resource to learn system debugging on Linux?

14
 
 

The question of whether the United States has become a fascist state is a topic of significant debate among scholars, political analysts, and commentators. While some argue that certain developments exhibit characteristics reminiscent of fascism, others contend that these actions do not constitute a full-fledged fascist regime. Here's an overview of the arguments from both perspectives:


Evidence Suggesting Fascist Tendencies

Several recent actions by the U.S. government and political figures have raised concerns among observers:

  • Authoritarian Rhetoric and Military Deployment: President Donald Trump has employed militaristic language and deployed National Guard troops to Democratic-run cities, invoking wartime rhetoric to address domestic issues. Critics argue that this blurs the lines between military and civilian governance, undermining democratic norms (The Washington Post).

  • Suppression of Dissent: The administration's efforts to designate the anti-fascist movement "antifa" as a terrorist organization have been criticized as politically motivated attempts to suppress opposition. Legal experts note that antifa is a decentralized movement, making such designations legally questionable (Reuters).

  • Control Over Cultural Institutions: An executive order aimed at removing "improper, divisive or anti-American ideology" from institutions like the Smithsonian has been likened to authoritarian regimes' attempts to control cultural narratives and suppress discussions on systemic racism (The Guardian).

  • Project 2025: Critics argue that Project 2025 seeks to dismantle the U.S. system of checks and balances, concentrating power in the executive branch and undermining democratic institutions (Center for American Progress).


Counterarguments

Despite these concerns, some analysts argue that labeling the U.S. as fascist is an overstatement:

  • Legal and Institutional Resistance: While certain actions have been taken, legal challenges and resistance from state governments and institutions demonstrate that democratic checks and balances are still functioning (The Washington Post).

  • Lack of Totalitarian Control: Fascism typically involves the complete control of all aspects of life, including the economy, media, and education. While there are concerning trends, the U.S. still maintains a level of pluralism and institutional autonomy (Al Jazeera).

  • Political Polarization: Some argue that the current political climate is characterized by extreme polarization rather than a clear move toward fascism. The use of terms like "fascist" may be more reflective of political rhetoric than an accurate description of the political system (Reddit).


Conclusion

While there are actions and policies in the United States that exhibit characteristics reminiscent of fascism, such as the centralization of power, suppression of dissent, and control over cultural narratives, these developments have not yet culminated in a fully realized fascist regime. The situation remains fluid, and ongoing vigilance is necessary to safeguard democratic institutions and norms.


15
 
 

If you're looking to store a piece of text that you plan to access frequently on a Linux system, there are several efficient methods depending on your specific needs and usage context.


🗂️ 1. Store in Your Home Directory

For general-purpose text storage:

  • Location: ~/Documents, ~/Notes, or a custom directory like ~/mytextfiles
  • Why: Files in your home directory are easily accessible and can be backed up or synced across devices if needed.
  • Tip: If you access this text often, consider creating an alias or a symbolic link to the file in a directory that's already in your PATH (Ask Ubuntu).

⚙️ 2. Add to Your Shell Configuration

For snippets or commands you frequently use:

  • Location: Add the text directly to your ~/.bashrc (or ~/.zshrc if using Zsh)
  • Why: This method is ideal for storing environment variables or shell functions that you want to be available in every terminal session.
  • Example:
  export MY_TEXT="Your frequently used text here"
  • Tip: After editing ~/.bashrc, run source ~/.bashrc to apply the changes immediately.

📋 3. Use a Clipboard Manager (GUI)

For quick access to copied text:

  • Tools: Clipman, Diodon, CopyQ
  • Why: These tools allow you to store and quickly retrieve multiple clipboard entries, which is useful for text snippets you copy and paste frequently.
  • Note: This method is more suitable for graphical desktop environments.

🧠 4. Utilize a Scratchpad File

For temporary or frequently edited text:

  • Location: Create a file in ~/tmp or ~/setups
  • Why: These directories are commonly used for temporary files and can be easily accessed and managed.
  • Tip: You can open this file directly with your preferred text editor using a command like nano ~/tmp/mytextfile.txt.

🔗 5. Create a Symbolic Link to a Frequently Used File

For quick access to an existing file:

  • Command:
  ln -s /path/to/your/file.txt ~/myfilelink
  • Why: This creates a shortcut to your file in your home directory, making it easily accessible from anywhere.
  • Tip: You can then open it with nano ~/myfilelink or any other editor.

💡 6. Use a Terminal File Manager

For efficient navigation and access:

  • Tools: ranger, nnn, vifm
  • Why: These file managers provide a terminal-based interface for navigating and managing files, allowing you to quickly access your frequently used text files.
  • Tip: Install a file manager using your package manager, e.g., sudo apt install ranger.

🔒 7. Store in a Secure Location for Sensitive Text

For sensitive information:

  • Location: ~/.secrets or use a keyring manager like gnome-keyring
  • Why: These methods provide encrypted storage for sensitive data, ensuring it's protected.
  • Tip: Access the stored text using appropriate tools or commands that interact with the keyring.

🧭 8. Sync Across Devices (Optional)

If you need access from multiple machines:

  • Tools: Use synchronization tools like Syncthing or cloud storage solutions
  • Why: These tools allow you to keep your text file synchronized across different devices.
  • Tip: Set up synchronization by following the respective tool's documentation.

Choose the method that best fits your workflow and security requirements. If you need further assistance with any of these options, feel free to ask!

16
 
 

Writing a good Git commit message is a skill, and prompting a large language model (LLM) to do it effectively is about giving it clear context, structure, and intent. Here's a detailed guide on how to craft prompts for this purpose.


1. Give the LLM context about the changes

LLMs need to know what changed and why. You can provide:

  • A diff or a summary of changes
  • The file names and their purpose
  • Any bug IDs, tickets, or issue numbers

Example:

I modified `app.py` to fix a bug where the login fails if the username has special characters. Also updated `requirements.txt` to include `validators` library.

2. Specify the style of commit message

Good commit messages often follow the Conventional Commits style:

<type>(<scope>): <short summary>
<BLANK LINE>
<longer description>

Where type can be:

  • feat: new feature
  • fix: bug fix
  • chore: maintenance
  • docs: documentation

You can prompt the LLM to adhere to this style:

Write a Git commit message following the Conventional Commits format. Keep the first line under 50 characters, and include a detailed description if necessary.

3. Include an example prompt

Here’s a full example prompt you could use:

I made the following changes in this commit:
- Fixed login bug when the username contains special characters.
- Updated `requirements.txt` to include the `validators` library.

Write a clear, concise, and professional Git commit message in the Conventional Commits style, including:
- A short summary under 50 characters
- A longer description if necessary explaining the reason for the change
- Reference the issue #123 if relevant

Expected output from the LLM:

fix(auth): handle special characters in username

Login was failing when usernames contained special characters.
Added validation using the `validators` library to prevent this issue.

Closes #123

4. Tips for better prompts

  1. Include diff snippets if you want extremely precise commit messages.

  2. Ask for multiple options:

    Provide 3 alternative Git commit messages for these changes.
    
  3. Ask for formal or casual tone, depending on your team style.

  4. Include issue references for linking commits to tickets.


If you want, I can write a reusable LLM prompt template that you can plug into any repo to automatically generate high-quality commit messages from diffs. It would save a ton of time.

Do you want me to do that?

17
 
 

Humans eating insects (entomophagy) is ancient and biologically real. Yet we still feel disgust toward bugs. What are the signs we evolved eating them — and why doesn’t that stop disgust?


Evidence We Evolved Eating Insects

  1. Chitinase genes in mammals Early placental mammals had multiple working genes for chitin-digesting enzymes. Humans retain remnants of these. That points to insect-heavy diets in deep ancestry. (Berkeley News)

  2. Primates eating insects Many extant nonhuman primates eat insects regularly. That suggests our common ancestors also did so. (Annual Reviews)

  3. Archaeological evidence

    • Coprolites (fossilised droppings) show insect remains. (Wikipedia)
    • Bone tools with wear marks consistent with digging up termite mounds. (Wikipedia)
    • Art (cave paintings) depicting people collecting wild bee nests. (Wikipedia)
  4. Nutritional value and ecological utility Insects are nutrient dense: good protein‐to‐fat ratios, useful micronutrients. Useful especially when large vertebrate meat was scarce. (Annual Reviews)


Why Disgust Persists Despite Evolution

  • Disgust evolved for disease avoidance. Bugs often associate with decay, pathogens.
  • Culture modifies perception: many societies learned to see insects as unclean or “not food.”
  • Urban life severs daily exposure to insects, reinforcing unfamiliarity and fear.
  • Morphological and sensory triggers (many legs, exoskeleton, movement) still activate innate aversion in many people.

If you want, I can rewrite this as a social media post with tone or audience target (science, casual, etc.).

18
 
 

Several rolling-release Linux distributions offer support for Wayland, catering to users who prefer continuous updates and modern display technologies. Here are some notable options:

1. openSUSE Tumbleweed

  • A stable rolling-release distro known for its rigorous testing and stability.
  • Supports Wayland, including experimental sessions for LXQt with compositors like Sway and Hyprland. (9to5Linux)
  • Ideal for users seeking the latest software with robust stability. (LinuxBlog.io)

2. Arch Linux

  • A minimalist rolling-release distro offering maximum control.
  • Supports Wayland through compositors like Sway, Hyprland, and River.
  • Suitable for advanced users comfortable with manual configuration.

3. Manjaro Linux

  • An Arch-based distro with user-friendly enhancements.
  • Offers official editions with GNOME and KDE Plasma, both supporting Wayland.
  • Provides a balance between cutting-edge software and ease of use.

4. Solus

  • A rolling-release distro with its own package manager and desktop environment.
  • Offers Plasma 6, which includes Wayland support. (community.kde.org)
  • Designed for users seeking a cohesive and curated experience.

5. Artix Linux

  • An Arch-based distro that avoids systemd, offering init systems like OpenRC and runit.
  • Supports Wayland through compositors like Sway and Hyprland.
  • Appeals to users preferring a systemd-free environment. (Wikipedia)

6. Chimera Linux

  • A rolling-release distro using musl libc and dinit.
  • Supports Wayland with GNOME Shell. (Wikipedia)
  • Targets users interested in a minimalist and flexible system.

7. Archcraft

  • A minimal Arch-based distro with preconfigured window managers.
  • Supports Wayland through compositors like Sway and Hyprland.
  • Suitable for users who prefer a lightweight and aesthetic setup. (Wikipedia)

8. Fedora (Rawhide)

  • A cutting-edge distro with a focus on free and open-source software.
  • The Rawhide branch is a rolling-release version that supports Wayland.
  • Best for users who want the latest features and are comfortable with potential instability.

9. Void Linux

  • A rolling-release distro known for its simplicity and efficiency.
  • Supports Wayland with compositors like Sway.
  • Appeals to users seeking a lightweight and systemd-free environment. (LinuxBlog.io)

10. PCLinuxOS

  • A rolling-release distro with a focus on user-friendliness.
  • Offers KDE Plasma, which supports Wayland. (Wikipedia)
  • Suitable for users who prefer a polished desktop experience.

11. GreenBANG (formerly ArchBang)

  • A lightweight rolling-release distro based on Arch Linux.
  • Supports Wayland through compositors like Sway and Hyprland.
  • Ideal for users with older hardware or those seeking a minimal setup. (Wikipedia)

12. Kali Linux

  • A rolling-release distro tailored for security professionals.
  • The testing branch supports Wayland.
  • Best for users interested in penetration testing and security research.

13. Chimera Linux

  • A rolling-release distro using musl libc and dinit.
  • Supports Wayland with GNOME Shell.
  • Targets users interested in a minimalist and flexible system. (Wikipedia)

14. Zorin OS

  • A user-friendly distro based on Ubuntu.
  • The latest versions support Wayland, especially on systems with newer hardware.
  • Suitable for users transitioning from other operating systems.

15. Debian Testing

  • A rolling-release branch of Debian offering newer software.
  • Supports Wayland, particularly with GNOME.
  • Ideal for users seeking Debian's stability with more up-to-date packages.

16. Kali Linux

  • A rolling-release distro tailored for security professionals.
  • The testing branch supports Wayland.
  • Best for users interested in penetration testing and security research.

17. Ubuntu (with GNOME)

  • While not traditionally rolling-release, Ubuntu offers a rolling-release variant.
  • The GNOME desktop environment supports Wayland.
  • Suitable for users seeking a balance between stability and newer software.

18. Chimera Linux

  • A rolling-release distro using musl libc and dinit.
  • Supports Wayland with GNOME Shell.
  • Targets users interested in a minimalist and flexible system. (Wikipedia)

When choosing a rolling-release distro with Wayland support, consider factors like hardware compatibility, desired desktop environment, and system configuration preferences. Distributions like openSUSE Tumbleweed and Fedora Rawhide offer robust support for Wayland, while Arch-based distros provide flexibility and control.

If you have specific requirements or preferences, feel free to provide more details, and I can offer more tailored recommendations.

19
 
 

You can approximate per-directory history in zsh using plugins or custom hooks. The shell itself doesn’t support this natively (though patches have been proposed). (zsh.org)

Here are viable methods:


Method 1: Use the “per-directory-history” plugin (Oh My Zsh or standalone)

  • Oh My Zsh includes a plugin called per-directory-history. (GitHub)
  • To enable it, add per-directory-history to your plugins=( … ) in ~/.zshrc. (Unix & Linux Stack Exchange)
  • The plugin arranges that commands are saved to both a global history file and to per-directory-history files (mirroring the directory tree under a base history directory). (Jim Hester)
  • There is a toggle (default key binding Ctrl-G) to switch between viewing global history and directory-specific history. (GitHub)
  • You can configure base dir for per-directory history via a variable like HISTORY_BASE. (GitHub)

Method 2: Use another plugin or custom “cwd-history” approach


Method 3: DIY using hooks (zshaddhistory / chpwd)

If you want to roll your own:

  1. In your ~/.zshrc, set a base directory to store local histories, e.g.:

    export DIRHIST_BASE="$HOME/.dirhist"
    
  2. Use chpwd hook (runs on each cd) to switch HISTFILE:

    function chpwd_set_histfile() {
      local dir_rel="${PWD/#$HOME\//}"  # directory relative to home
      local histf="${DIRHIST_BASE}/${dir_rel}/.zsh_history"
      mkdir -p "$(dirname "$histf")"
      HISTFILE="$histf"
    }
    autoload -U add-zsh-hook
    add-zsh-hook chpwd chpwd_set_histfile
    
  3. Optionally, when starting the shell (at prompt or init), you may want to load the relevant directory history:

    if [[ -n $PWD ]]; then
      chpwd_set_histfile
      fc -R  # read history from the new HISTFILE
    fi
    
  4. You may also want to duplicate commands into a global history file (so you don’t lose cross-dir commands). You can use the zshaddhistory function to append each new command to a global log as well. Example:

    function zshaddhistory() {
      local cmd=${1%%$'\n'}  # strip newline
      print -sr -- "$cmd"   # to current HISTFILE
      print -s -- "$cmd" >> "$HOME/.zsh_global_history"
      return 1  # prevent double logging by default handler
    }
    

Caveats:

  • You must manage HISTSIZE, SAVEHIST, trimming, etc.
  • If you have concurrent shells in the same directory, they write to the same file.
  • Performance may degrade if you have many directories with deep trees.
  • Some plugins limit history size per directory.

If you like, I can generate a ready-to-use .zshrc snippet (or plugin setup) for your environment (Linux/macOS). Do you prefer plugin-based or DIY?

20
 
 

Ah, the classic “Han shot first” debate—this is one of the most famous controversies in Star Wars fandom, and it’s all about a very specific scene in Episode IV: A New Hope. Let me break it down carefully:


The Scene

  • Han Solo is in the Mos Eisley Cantina.
  • Greedo, a bounty hunter, confronts him about a debt Han owes to Jabba the Hutt.
  • They have a tense standoff at close range.

What Happened Originally (1977)

  • In the original 1977 theatrical release, Han Solo shoots Greedo without being shot at first.
  • Han’s action is portrayed as preemptive self-defense—he’s the one who fires first, and Greedo never fires a shot.

The Change in 1997 Special Edition

  • George Lucas made changes for the 1997 Special Edition re-release.
  • Now, the scene was edited so that Greedo shoots first and misses, and then Han fires back.
  • Lucas’s reasoning: he wanted Han to seem less “cold-blooded” and more morally upright—a reluctant hero rather than someone who kills first.

Why Fans Say “Han Shot First”

  • Many fans argue that the original Han Solo was a roguish, morally gray character, and his “shoot first” attitude is core to his personality.
  • The 1997 change felt like it undermined Han’s character and was unnecessary.
  • “Han shot first” became a rallying cry among fans who prefer the original version and resist Lucas’s retroactive edits.

Cultural Impact

  • The phrase is now shorthand for defending the original material and resisting changes that alter characters’ personalities.
  • It’s also become a meme, symbolizing debates over artistic edits and “canonical purity.”
21
 
 

I found no credible source that claims Quinlan Vos was officially based on “The Dude” from The Big Lebowski.

However there is evidence of informal influence / homage:

  • In The Clone Wars episode “Hunt for Ziro”, Vos uses a line very similar to “Well, that’s just your opinion, man,” a signature line of The Dude. (Wookieepedia)
  • Some commentators and fans observe a “laid-back, rule-bending” vibe in Vos’s depiction in that episode and liken it to The Dude’s demeanor. (outoflives.net)

If you like, I can dig into interviews with The Clone Wars writers / Lucasfilm to see if any have confirmed this influence. Do you want me to check that?

22
 
 

Use Git’s mirroring functions. Steps:

  1. Clone the Forgejo repo as a bare mirror:

    git clone --mirror https://forgejo.example.com/user/repo.git
    cd repo.git
    
  2. Add GitHub as a mirror remote:

    git remote add --mirror=push github https://github.com/user/repo.git
    
  3. Push the mirror to GitHub:

    git push --mirror github
    

To keep it updated, automate with cron or CI:

#!/bin/sh
cd /path/to/repo.git
git fetch -p origin
git push --mirror github

Run periodically. This mirrors all branches, tags, and refs from Forgejo to GitHub.

23
 
 

If you want to remove all trailing whitespace in a file in Neovim, use this command:

:%s/\s\+$//e

Explanation:

  • :%s → substitute across the entire file
  • \s\+$ → matches one or more spaces or tabs at the end of a line
  • //e → suppress errors if no match is found

Optional: Automatically remove trailing whitespace on save:

Vimscript version (init.vim):

autocmd BufWritePre * :%s/\s\+$//e

Lua version (init.lua):

vim.api.nvim_create_autocmd("BufWritePre", {
  pattern = "*",
  command = [[%s/\s\+$//e]],
})

This ensures your files are always clean of trailing spaces.

24
 
 

I want to feed a Git repository to a large language model so it can give better feedback when I ask questions about the code. To do that, I need to merge all Python files in the repo (including those in subfolders) into a single Markdown file.

The format I’m thinking of is similar to the Linux tree command for the structure, followed by the content of each file. For example:

merged_python_files.md

├── a.py
a.py content between triple quotes
└── subfolder
    └── b.py
b.py content between triple quotes

I’d like a Python script that can recursively traverse the repo, collect all .py files, and produce this Markdown file automatically.

25
 
 

S N Smith's Blog: On Ad Hominem Attacks | Ad hominem, Morally wrong ...

The pyramid you're referring to is Paul Graham's Hierarchy of Disagreement, a framework that ranks seven common forms of disagreement from the least to the most intellectually rigorous. In this hierarchy, ad hominem attacks are considered the second-lowest form of disagreement.

🧠 Paul Graham’s Hierarchy of Disagreement

Paul Graham, in his essay "How to Disagree", outlines the following hierarchy:

  1. Name-calling (DH0): The lowest form, involving insults without any argument.
  2. Ad Hominem (DH1): Attacking the person making the argument rather than the argument itself.
  3. Responding to Tone (DH2): Criticizing the author's tone instead of addressing the content.
  4. Contradiction (DH3): Simply stating the opposite case with little or no supporting evidence.
  5. Counterargument (DH4): Presenting a reasoned argument against the original point.
  6. Refutation (DH5): Directly addressing and disproving specific points made in the original argument.
  7. Refuting the Central Point (DH6): The highest form, where the core argument is directly and thoroughly refuted.

In this hierarchy, ad hominem attacks are placed just above name-calling. While both are considered weak forms of disagreement, ad hominem attacks are slightly more sophisticated because they involve attacking the person rather than resorting to outright insults. However, they still fail to engage with the actual argument and are thus deemed ineffective and intellectually dishonest.

Understanding this hierarchy can help individuals recognize and avoid fallacious reasoning in debates and discussions, promoting more constructive and meaningful conversations.

view more: next ›