home.social

Search

1000 results for “vie”

  1. サル 大山田Dについて情報登録されました。平木集落と新長野トンネル津側の中間、南側山中から弱受信、位置はだいたい。
    sarudoko.net/view/?id=33645588

  2. Hoping the Australian Government might treat AI companies the same as regular citizens? Sign this petition, and please boost for reach 🙏

    aph.gov.au/e-petitions/petitio

    *Petition Reason*

    This petition of citizens and residents of Australia draws to the attention of the House that on 24 September 2026 the Prime Minister stated that an OpenAI AI agent gained unauthorised access to the a Medicare portal, administered by Services Australia, on 18 June 2026. While the Government has announced a taskforce and a forensic investigation, it has not announced a referral of the matter to Police.

    *Petition Request*

    We therefore ask the House to call on the Government to immediately refer the matter to the Australian Federal Police for investigation, with a view to criminal prosecution if the evidence supports it.

    #ai #auspol #australia #openai

  3. Tuần này có một bài trên Dev.to được chú ý: tác giả xóa mail server khỏi VPS và lấy lại được 1.2 GB RAM. Đọc xong mình nhớ lại con VPS 2 GB của mình. Mình cài nó "cho đủ thứ" rồi một hôm thấy OOM killer giết mất Postgres lúc 3 giờ sáng. Rất nhiều anh em Việt Nam chạy side project trên VPS 1-4 GB (Vultr, DigitalOcean, Hetzner, hoặc VPS trong nước giá rẻ), và kịch bản thường gặp là mua thêm RAM chứ không đi tìm xem RAM đang bị dùng vào đâu. Bài này là quy trình mình hay dùng để kiểm tra bộ nhớ một server Linux nhỏ: đọc số liệu cho đúng, tìm ra service tốn RAM nhất, cắt bớt những gì không cần và đặt giới hạn để một service không kéo sập cả máy. Mình test trên Ubuntu 24.04 và Debian 12, cả hai đều dùng cgroups v2 và systemd 252+.

    1. Đọc free -h cho đúng trước đã


    Sai lầm phổ biến nhất là nhìn cột free rồi hoảng:

    $ free -h
    total used free shared buff/cache available
    Mem: 1.9Gi 1.1Gi 92Mi 18Mi 780Mi 680Mi
    Swap: 0B 0B 0B

    free chỉ còn 92 MiB nhưng như vậy không có nghĩa là sắp hết RAM. Kernel dùng RAM trống làm page cache (buff/cache) và sẽ trả lại khi có process cần. Con số cần nhìn là available. Đây là ước lượng của kernel về lượng RAM có thể cấp cho process mới mà không phải swap.

    Một vài quy tắc mình dùng:

    • available > 30% total: ổn, chưa cần làm gì.
    • available < 15% và có swap đang tăng dần (vmstat 5, xem cột si/so): bắt đầu điều tra.
    • dmesg -T | grep -i 'killed process' có kết quả: đã có sự cố thật, phải xử lý ngay.

    Quy trình điều tra tổng quát như sau:

    flowchart TD
    A[free -h: available thấp?] -->|Không| Z[Không cần làm gì]
    A -->|Có| B[Xem RAM theo service: cgroup / PSS]
    B --> C{Service có cần thiết?}
    C -->|Không| D[systemctl disable --now]
    C -->|Có| E[Tune config: worker, buffer, pool]
    E --> F[Đặt MemoryHigh / MemoryMax]
    D --> G[Thêm zram làm lớp đệm]
    F --> G

    2. Tìm thủ phạm: RSS nói dối, PSS và cgroup thì không


    top hay htop hiển thị RSS (Resident Set Size). Vấn đề là RSS tính trùng shared memory. Ví dụ 10 worker PHP-FPM cùng dùng chung 30 MB thư viện thì mỗi worker vẫn báo RSS 30 MB, tổng lên 300 MB dù thực tế chỉ tốn 30 MB. Cộng RSS lại thì lần nào cũng ra con số lớn hơn RAM thật.

    Có hai cách đo chính xác hơn.

    Cách 1: Đọc thẳng từ cgroup. Với systemd, mỗi service nằm trong một cgroup riêng, và kernel đếm bộ nhớ của từng cgroup trong file memory.current:

    #!/usr/bin/env bash
    # mem-by-service.sh: top 15 service tốn RAM nhất (cgroups v2)
    for d in /sys/fs/cgroup/system.slice/*.service; do
    [ -f "$d/memory.current" ] || continue
    bytes=$(cat "$d/memory.current")
    printf '%8d MiB %s\n' $(( bytes / 1048576 )) "$(basename "$d")"
    done | sort -rn | head -15

    Muốn xem realtime thì dùng systemd-cgtop -m (sắp xếp theo memory). Lưu ý memory.current có tính cả page cache của service đó, nên một database vừa đọc nhiều file sẽ trông "béo" hơn thực tế. Muốn tách riêng thì xem anon (heap thật) và file (cache) trong memory.stat.

    Cách 2: Tính PSS theo service. PSS (Proportional Set Size) chia đều phần shared memory cho các process đang dùng chung, nên cộng lại sẽ khớp với thực tế. smem (apt install smem) tính được PSS nhưng chỉ group theo process hoặc user. Mình viết một script nhỏ để group theo systemd unit:

    #!/usr/bin/env python3
    # pss_by_unit.py: chạy bằng sudo, cần kernel >= 4.14 (smaps_rollup)
    import os
    from collections import Counter

    usage = Counter()
    for pid in filter(str.isdigit, os.listdir("/proc")):
    try:
    with open(f"/proc/{pid}/cgroup") as f:
    # cgroups v2: "0::/system.slice/nginx.service"
    cg = f.read().strip().split("::")[-1]
    with open(f"/proc/{pid}/smaps_rollup") as f:
    pss_kb = next(int(l.split()[1]) for l in f if l.startswith("Pss:"))
    except (FileNotFoundError, PermissionError, ProcessLookupError, StopIteration):
    continue # process đã chết hoặc là kernel thread
    unit = cg.rstrip("/").split("/")[-1] or "/"
    usage[unit] += pss_kb

    total = sum(usage.values())
    for unit, kb in usage.most_common(15):
    print(f"{kb / 1024:8.1f} MiB {kb * 100 / total:5.1f}% {unit}")
    print(f"{total / 1024:8.1f} MiB total PSS")

    Trên con VPS của mình, script in ra kết quả khá bất ngờ: snapd + snap.lxd ~110 MiB, multipathd ~25 MiB, một container Redis "test thử" từ năm ngoái ~180 MiB, và fwupd ngồi đó không làm gì.

    3. Cắt giảm: những thứ thường thừa trên VPS


    Để hiểu vì sao cgroup giúp "truy vết" được, hãy xem cấu trúc systemd tổ chức process:

    graph TD
    R["/sys/fs/cgroup (root)"] --> S[system.slice]
    R --> U[user.slice]
    S --> N[nginx.service]
    S --> P[postgresql.service]
    S --> D[docker.service]
    S --> X[snapd.service]
    D -.-> C["docker-xxx.scope (container)"]
    Mỗi node là một cgroup, mỗi cgroup có memory.current, memory.high, memory.max. Process nào cũng thuộc đúng một node, nên không có RAM nào "mồ côi".

    Danh sách mình thường dọn trên VPS Ubuntu image mặc định:

    # Không dùng snap? Gỡ hẳn, tiết kiệm 80-150 MiB
    sudo snap list && sudo apt purge -y snapd

    # Không có SAN/iSCSI thì multipathd vô dụng
    sudo systemctl disable --now multipathd.service multipathd.socket

    # Không có modem, không cần firmware update trên VM
    sudo systemctl disable --now ModemManager.service fwupd.service

    # Mail server cài "cho có"? Nếu chỉ cần gửi mail, dùng SMTP relay bên ngoài
    sudo systemctl disable --now postfix.service

    # Container cũ
    docker ps -a --format '{{.Names}}\t{{.Status}}'
    docker stats --no-stream

    Với những service cần giữ, cấu hình mặc định thường được viết cho máy lớn:

    • PostgreSQL 16: shared_buffers khoảng 25% RAM là hợp lý, nhưng max_connections = 100 với work_mem lớn mới là nguồn gây phình RAM. Trên VPS 2 GB, mình để max_connections = 30 và đặt PgBouncer phía trước.
    • MySQL 8.0: performance_schema = OFF giúp tiết kiệm 100-200 MiB, innodb_buffer_pool_size nên đặt rõ ràng thay vì để mặc định.
    • PHP-FPM: đổi pm = dynamic sang pm = ondemand với pm.max_children tính bằng (RAM dành cho PHP) / (PSS trung bình mỗi worker). Con số PSS lấy từ script ở trên chứ đừng lấy RSS.
    • Node.js: đặt --max-old-space-size=256 nếu bạn biết app không cần nhiều hơn, vì V8 khá "tham" khi còn RAM trống.


    4. Đặt rào chắn: MemoryHigh, MemoryMax và zram


    Dọn xong vẫn cần giới hạn, nếu không chỉ một memory leak cũng đủ khiến OOM killer chọn sai nạn nhân. systemd cho phép đặt giới hạn theo từng service mà không cần Docker:

    sudo systemctl edit myapp.service


    [Service]# Vượt MemoryHigh: kernel throttle + reclaim mạnh, service chậm lại nhưng không chết
    MemoryHigh=400M
    # Vượt MemoryMax: OOM chỉ trong cgroup này, các service khác an toàn
    MemoryMax=512M
    MemorySwapMax=128M

    Sau đó systemctl daemon-reload && systemctl restart myapp, rồi kiểm tra bằng systemctl show myapp -p MemoryHigh -p MemoryMax. Mình thích đặt MemoryHigh thấp hơn MemoryMax khoảng 20%, vì khi service bắt đầu chậm, monitoring sẽ báo trước lúc nó bị kill.

    Cuối cùng là zram: tạo swap nén ngay trong RAM. Với tỷ lệ nén zstd thường khoảng 3:1, đây là cách rẻ nhất để có thêm "đệm" trên VPS không có (hoặc có disk swap rất chậm):

    sudo apt install -y systemd-zram-generator
    sudo tee /etc/systemd/zram-generator.conf <<'EOF'

    [zram0]zram-size = ram / 2
    compression-algorithm = zstd
    EOF
    sudo systemctl daemon-reload && sudo systemctl start [email protected]
    zramctl # kiểm tra DATA vs COMPR

    Nếu muốn kill sớm, kiểm soát được thay vì để kernel OOM killer xử lý lúc đã quá muộn, hãy bật systemd-oomd (có sẵn trên Ubuntu 22.04+) hoặc cài earlyoom.

    Kết luận


    Trước khi bấm nâng cấp gói VPS, hãy dành 30 phút làm theo checklist này:

    1. Nhìn available, không nhìn free. Page cache không phải là RAM bị mất.
    2. Đo theo service, không theo process. Dùng systemd-cgtop -m hoặc memory.current để có cái nhìn nhanh, script PSS ở trên để có số chính xác. Đừng cộng RSS.
    3. Gỡ những gì không dùng: snapd, multipathd, ModemManager, mail server và container cũ thường cộng lại được vài trăm MiB.
    4. Tune service cần giữ dựa trên PSS thực tế: connection pool, worker count, buffer.
    5. Đặt MemoryHigh/MemoryMax cho service dễ leak, và bật zram làm lớp đệm.

    Trên con VPS 2 GB của mình, cả quy trình giúp lấy lại khoảng 600 MiB, và từ đó đến nay OOM killer chưa ghé lại lần nào. Cứ vài tháng nên chạy lại script một lần, vì server nào cũng dần tích tụ những thứ mình cài "tạm" rồi quên mất.#linux #devops #systemd #performance #software #coding #development #engineering #inclusive #community
    Where Did My VPS RAM Go? A Practical Memory Audit for Small Linux Servers with PSS, cgroups v2 and systemd

  4. Quick Review: Bloodborne
    Some art pieces just hit the right spot, and Bloodborne is one of them. It is a great game to play, yes, but it uses every single tool at its disposal to portray a terrifying, hopeless, gory and undeniably beautiful world. From the incredible views of Yharnam to the twisted, glorious creatures that…

    fantinel.dev/quick-reviews/blo

  5. Die #Kernfusionskollektoranlage hat heute 0,212 kWh Energie eingefangen.

    Gesamtleistung: 480 Wp
    Ausrichtung: West
    Anstellwinkel: 58 Grad

    Diese #Balkonsolaranlage wurde durch das Berliner SolarPLUS-Programm gefördert.

    Einspeiseverlust: 6.38 %
    Die Anlage hat sich durch Förderung am 24.07.2025 amortisiert.
    Ohne Förderung wären es noch 1211,147 kWh.
    CO₂-Bilanz: ca. 241,69 kg CO2-eq.

    👉 Berechnung der CO₂-Einsparung:
    tino-eberl.de/nutzen-kuenstlic

    #Steckersolar #Balkonkraftwerk #Energiewende

  6. Plants vs. Zombies: Replanted jetzt gratis für Nintendo Switch & Switch 2 herunterladen

    Mitglieder von Nintendo Switch Online können Plants vs. Zombies: Replanted kostenlos ausprobieren. Das Probespiel lässt sich ab sofort im Nintendo eShop herunterladen, spielbar ist die Vollversion vom 28. Oktober bis zum 3. November 2026. Angeboten wird es für Nintendo Switch 2 und Nintendo Switch. Der Klassiker in HD Plants vs. Zombies: Replanted ist eine Neuauflage des Tower-Defense-Klassikers Plants vs. Zombies. Das Original kehrt nach vielen Jahren auf Deppie Daves Dachboden zurück, […]

    nintendo-connect.de/heimkonsol

  7. México impulsa medidas contra el tráfico ilícito de armas en la ONU

    México logra la aprobación unánime de una resolución internacional para combatir el tráfico ilícito de armas de fuego, con medidas contra la corrupción, el lavado de dinero y la responsabilidad penal empresarial.

    Por Martín García | Reportero                                      

    México consiguió la aprobación unánime de una resolución internacional para reforzar el combate al tráfico ilícito de armas de fuego, mediante acciones contra la corrupción, el lavado de dinero y las redes empresariales que facilitan este delito.

    La iniciativa se adoptó durante la 13ª Conferencia de las Partes en la Convención de las Naciones Unidas contra la Delincuencia Organizada Transnacional, celebrada del 19 al 23 de octubre en Viena, Austria, y establece líneas de trabajo para los próximos años.

    La resolución también plantea aprovechar nuevas tecnologías y mejorar la recopilación de información para comprender las modalidades del tráfico de armas, una actividad que alimenta la violencia y fortalece las capacidades de organizaciones criminales en distintas regiones del mundo.

    Medidas contra las redes criminales

    Entre las prioridades de la resolución presentada por México figura combatir la corrupción y el lavado de dinero relacionados con el tráfico ilícito de armas de fuego.

    El documento también propone avanzar en la responsabilidad penal de las empresas que faciliten estas operaciones ilegales, con el propósito de abordar no solo a quienes trafican directamente con armamento, sino también a quienes contribuyen a sostener esas redes.

    Otro eje consiste en utilizar nuevas tecnologías para enfrentar este delito y fortalecer las herramientas disponibles para identificar sus mecanismos de operación.

    Más información para investigar el tráfico de armas

    La resolución plantea recopilar información que permita desarrollar estudios sobre las dinámicas y modalidades del tráfico ilícito de armas de fuego.

    Este enfoque busca mejorar el conocimiento sobre el funcionamiento de estas redes y aportar elementos para diseñar respuestas internacionales más eficaces. La cooperación entre países resulta relevante ante una actividad delictiva que puede atravesar fronteras y vincularse con otras formas de delincuencia organizada.

    La aprobación unánime representa un respaldo de los países participantes a la ruta de trabajo propuesta. Sin embargo, su impacto dependerá de las medidas que se adopten posteriormente y de la cooperación para llevarlas a la práctica. –sn–

    Armas de fuego en México | Ilustración MCCI

    ¡Conéctate con Sociedad Noticias! Suscríbete a nuestro canal de YouTube y activa las notificaciones, o bien, síguenos en las redes sociales: Facebook, Twitter e Instagram.

    También, te invitamos a que te sumes a nuestro canal de información en tiempo real a través de Telegram.

    #NoticiasMX #PeriodismoParaTi #PeriodismoParaTiSociedadNoticias #ArmasDeFuego #Cdmx #ConvenciónDePalermo #cooperaciónInternacional #corrupción #delincuenciaOrganizadaTransnacional #Información #InformaciónMéxico #LavadoDeDinero #México #Morena #NacionesUnidas #noticia #noticias #NoticiasMéxico #NoticiasSociedad #responsabilidadPenalEmpresarial #seguridadInternacional #SN #Sociedad #SociedadNoticias #SociedadNoticiasCom #sociedadNoticias #SociedadNoticiasCom #tráficoDeArmasDeFuego #tráficoIlícitoDeArmas
  8. CW: immigration, census rule

    The Census Bureau has proposed changing who gets counted in 2030. Only citizens and green card holders would count toward apportionment, the number that decides how many House seats each state gets. Race and ethnicity questions would be dropped.

    Comments close Nov. 2 at 9:59 pm Arizona time. Civic Engagement Beyond Voting shared a fill-in template with the points to make and how to submit.

    docs.google.com/document/d/1UL

    #Census #Census2030 #Arizona #Immigration

  9. @energisch_ @tazgetroete

    Vor allem #vegane Ernährung ist heutzutage sehr einfach und preiswert, zumindest hier in DE. In anderen Gegenden der Welt ist es teils schwieriger, aber schon "so-vegan-wie-möglich" oder "meistens-vegan" hilft dem #Klima.

    #Balkonsolar ist ein #Privileg für Menschen mit #Balkon (bin ich leider raus) und der Effekt auf's Klima ist winzig, zumal #Solarparks viel mehr Strom pro Panelfläche erzeugen. Lieber #Ökostrom von @ews o.a. kaufen! Das ist mehr #Klimaschutz pro Euro 😉

    #Fahrrad statt #Auto ist ein #Privileg, welches ich täglich genieße. Tut mir leid für Leute, deren Gesundheit das nicht erlaubt oder deren Strecken zu lang sind.

  10. 🫟 𝑪𝒖𝒓𝒊𝒐𝒔𝒊𝒅𝒂𝒅𝒆𝒔 🫟

    Hubo un tiempo en que castigar no era encerrar.
    Era exponer.

    A finales del siglo XVI y durante el XVII, en sociedades con una moral bastante rígida, no bastaba con decir que alguien había hecho algo mal.
    Había que enseñarlo.
    Que todo el mundo lo viera.
    Que sirviera de ejemplo.

    Y ahí entran castigos que no dejaban marcas físicas… pero sí algo más difícil de borrar.

    Uno de ellos era la llamada “capa del borracho”.

    No era realmente una capa.
    Era un barril adaptado, con huecos para la cabeza y los brazos, que la persona tenía que cargar encima.
    Pesaba, incomodaba… pero eso no era lo peor.

    Lo peor era la gente.

    Quien lo llevaba no pasaba desapercibido.
    Al contrario. Caminaba entre miradas, risas, comentarios.
    Los niños se acercaban por curiosidad, los adultos juzgaban sin decir mucho, y poco a poco la vergüenza se convertía en el verdadero castigo.

    Era un espectáculo.

    A veces, incluso decoraban el barril con dibujos que representaban la “falta” cometida.
    Lo exageraban, lo convertían en algo casi teatral.
    Ya no eras una persona: eras una advertencia con piernas.

    Y eso era justo lo que buscaban.

    No solo castigar, sino contar una historia.
    Dejar claro lo que pasaba cuando alguien se salía de la norma.

    En su momento, esto no se veía como crueldad.
    Se pensaba que avergonzar a alguien en público podía hacerle cambiar.
    Que la exposición llevaba al arrepentimiento.

    Pero había algo más.

    La gente participaba.

    No hacía falta tocar a la persona. Bastaba con mirar, reír, comentar.
    El castigo también estaba en el grupo, en cómo reaccionaba.

    Y eso dice mucho.

    Porque el control no venía solo de las normas, sino de todos.

    Hoy puede parecernos algo lejano, incluso brutal.
    Pero si lo piensas un poco… la idea no ha desaparecido del todo.

    Seguimos señalando.
    Seguimos exponiendo.
    Seguimos convirtiendo errores en espectáculo.

    Solo que ahora, el “barril”… tiene otras formas.

    ▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣

    #historia #historiaveridica #curiosidadeshistoricas #historiareal #edadmoderna #historiadeespaña #culturahistorica #aprendehistoria #datoscuriosos #reflexion #sociedad #historiasqueimpactan

  11. 1/ Install Visual Studio Code
    2/ Install Python and get the path where python is installed
    C:\Users\XXXXX\Python\pythoncore-3.15-64\python.exe
    python --version
    python path

    3/ go to aistudio.google.com and use 300$ free credit. Create API Key
    4/ Check the doumentation for api-key usage according to the requirement. In my case I am using Python. So, I refer the python code
    5/ Create a workspace folder on your desktop and open using VS Code editor. Then open the terminal in the path using view --> Open terminal
    6/ Create environment in the path for python using below command
    python -m venv myEnv
    7/ Activate virtual environment
    cd .\myEnv\Scripts
    .\Activate.ps1
    if security error occur then
    Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
    once activated, it shows (yourenv) in greencolor
    8/ From the command prompt go to the directory where Pythoncode is writted, same place install flask
    pip install Flask
    pip list --> will show if installed or not
    pip install google-generativeai
    9/ Now in the workspace folder create one more folder called templates
    10/ In the templates folder create Welcome.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Venkatesh AI Chatbot</title>

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

    <style>
    body {
    background-color: #f4f6f9;
    }

    .chat-container {
    max-width: 900px;
    margin: 30px auto;
    }

    .chat-header {
    background: #8e95a0;
    color: white;
    padding: 15px;
    border-radius: 10px 10px 0 0;
    font-size: 24px;
    font-weight: bold;
    text-align: center;
    }

    .chat-window {
    height: 500px;
    overflow-y: auto;
    background: white;
    border: 1px solid #dee2e6;
    padding: 15px;
    }

    .message {
    margin-bottom: 12px;
    padding: 10px 15px;
    border-radius: 10px;
    max-width: 80%;
    word-wrap: break-word;
    clear: both;
    }

    .user-message {
    background-color: #d1e7dd;
    float: right;
    }

    .bot-message {
    background-color: #e9ecef;
    float: left;
    }

    .input-section {
    border: 1px solid #dee2e6;
    border-top: none;
    padding: 15px;
    background: white;
    border-radius: 0 0 10px 10px;
    }

    textarea {
    resize: none;
    }

    .typing {
    font-style: italic;
    color: gray;
    }
    </style>
    </head>
    <body>

    <div class="container chat-container">

    <!-- Header -->
    <div class="chat-header">
    Venkatesh AI Chatbot
    </div>

    <!-- Chat Window -->
    <div id="chatWindow" class="chat-window">
    <div class="message bot-message">
    Hello! How can I help you today?
    </div>
    <div style="clear:both;"></div>
    </div>

    <!-- Input Area -->
    <div class="input-section">
    <div class="row">
    <div class="col-md-10">
    <textarea
    id="userInput"
    class="form-control"
    rows="3"
    placeholder="Type your message here..."></textarea>
    </div>

    <div class="col-md-2 d-grid">
    <button id="sendBtn" class="btn btn-primary">
    Send
    </button>
    </div>
    </div>
    </div>

    </div>

    <!-- JQuery -->
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

    <!-- Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

    <script>

    function appendMessage(message, type)
    {
    let cssClass = (type === "user")
    ? "user-message"
    : "bot-message";

    $("#chatWindow").append(`
    <div class="message ${cssClass}">
    ${message}
    </div>
    <div style="clear:both;"></div>
    `);

    scrollToBottom();
    }

    function scrollToBottom()
    {
    $("#chatWindow").scrollTop(
    $("#chatWindow")[0].scrollHeight
    );
    }

    $("#sendBtn").on("click", function ()
    {
    sendMessage();
    });

    $("#userInput").on("keypress", function(e)
    {
    if(e.which === 13 && !e.shiftKey)
    {
    e.preventDefault();
    sendMessage();
    }
    });

    function sendMessage()
    {
    let userText = $("#userInput").val().trim();

    if(userText === "")
    return;

    // Append User Message
    appendMessage(userText, "user");

    // Clear input
    $("#userInput").val("");

    // Show typing indicator
    let typingId = "typing_" + Date.now();

    $("#chatWindow").append(`
    <div id="${typingId}" class="message bot-message typing">
    AI is typing...
    </div>
    <div style="clear:both;"></div>
    `);

    scrollToBottom();

    // AJAX POST Call
    $.ajax({
    //url: "http://127.0.0.1:5000/chat",
    url: "/chat",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify({
    message: userText
    }),

    success: function(response)
    {
    $("#" + typingId).remove();

    appendMessage(
    response.response || "No response received",
    "bot"
    );
    },

    error: function(xhr)
    {
    $("#" + typingId).remove();

    console.log(xhr.responseText);

    appendMessage(
    "Error: " + xhr.responseText,
    "bot"
    );
    }
    });
    }

    </script>

    </body>
    </html>

    11/ In the workspace folder create Welcome.py

    from flask import Flask, render_template, request, jsonify
    import google.generativeai as genai
    import os

    # Replace with your actual Gemini API key
    GOOGLE_API_KEY = "your_APIKe"

    genai.configure(api_key=GOOGLE_API_KEY)
    #for m in genai.list_models():
    # print(m.name)

    #model = genai.GenerativeModel("gemini-1.5-flash")
    model = genai.GenerativeModel("gemini-3.5-flash-lite")
    chat = model.start_chat(history=[])

    app = Flask(__name__)

    @app.route('/')
    def index():
    return render_template('Welcome.html')

    @app.route('/chat', methods=['POST'])
    def chat_response():
    user_input = request.json.get('message')

    if not user_input:
    return jsonify({"error": "No message provided"}), 400

    try:
    response_raw = chat.send_message(user_input)

    #print(response raw)
    print("RAW:", response_raw)

    response = response_raw.text
    print("TEXT:", response)

    return jsonify({"response": response})

    except Exception as e:
    print(f"Error: {e}")
    return jsonify({"error": str(e)}), 500

    if __name__ == '__main__':
    app.run(debug=True)

    12/ Dubug the output and open the chatbot in Chrome and test

    All the best!!!!!!!!!!!!!!!!!!!!!!!!#ai #webdev #programming #javascript #software #coding #development #engineering #inclusive #community
    Google AI Chatbot

  12. Vyšné Ružbachy (Slovakia), 1967
    Vyšné Ružbachy: thermal swimming pool
    Regional geography, Spas, Health resorts, Swimming pools
    Graphic, Local postcards
    Koštial, Vladimír

    From Digital Library and Digital Archive of Slovak National Library
    https://dikda.snk.sk/view/uuid:2bfa9973-ba0f-4d1c-…

    #Slovakia #Slovensko #SVK #SK #history #image #photography #photo #postcards #postcard #map #maps #retro #photos

  13. Wie gestern im Podcast mit @owy besprochen, kann man einfach nicht auf Big Tech-Plattformen als Infrastruktur setzen - weder für demokratischen Protest, noch als NGO, Unternehmer oder auch Künstlerin. Der Account gehört dir nicht, deine Inhalte und Community können jederzeit gesperrt werden, oft ohne oder mit vager Begründung. Steht anders im DSA? Tja, who cares? Meta jedenfalls nicht.
    Die @EUCommission muss endlich konsequent handeln und die Regelungen auch durchsetzen. Gut, dass @alexandrageese am Thema dran ist. Aber es müssen noch viel mehr werden!

    Account-Sperren auf Instagram und Facebook: Metas Willkür unterworfen - netzpolitik.org
    netzpolitik.org/2026/account-s

    #UnplugBigTech #Meta #Instagram #DSA #Facebook #Fediverse

  14. @quixoticgeek @simon_brooke @wfk @bob

    While #systemd is not perfect, it's so much better than the stuff we had deal with before… I don't want to go back to #sysvinit, rc scripts, or #upstart.

    Talking from admin point of view, never looked at the code, tbh.

  15. CW: #vilniuspol

    Mačiau kažkur priešrinkiminę kampaniją, kad platins išvažiavimą nuo Gariūnų į Kauno pusę. Ok.

    Ten buvo ir skaičių: per valandą piko metu ten pravažiuoja 1000 auto. Ir per 10 metų išauga 30 proc. Tai prognozė yra, kad per metus prisidės po 100 mašinų per visą vakarinį piką?

    Tik pastebėsiu, kad priešingoje pusėje, vien Riešė su Avižieniais paaugo total vien oficialių 2000 gyventojų per metus. Kiek čia mašinų per vieną vakarinį piką?

  16. Proton: Angestellte müssen erneut ins Bewerbungsgespräch - Golem.de

    golem.de/news/proton-angestell

    > Proton will laut einer internen E-Mail die Angestellten finden, die mit der KI-Strategie kompatibel sind. Andere werden gehen müssen.

    Wer nutzt eigentlich noch Proton Mail? 😬

    Diese Follow-or-fire Mentalität hat vielleicht nicht nur was mit KI zu tun, aber KI erlaubt es den Unternehmen zu glauben, sie könnten nun so handeln. Denn im Zweifel ersetzt die KI den renitenten Angestellten, so glauben sie. Auch die kurze Frist zu den Interviews ist mehr als unverschämt.

    #AI #Proton #Unternehmenskultur #wirtschaft

  17. Today’s Zion photograph captures the North Fork Virgin River winding beneath towering sandstone cliffs as dramatic clouds fill the sky.

    I love how the landscape brings together flowing water, lush greenery, and the immense scale of Zion National Park. The changing light makes this place endlessly fascinating to explore with a camera.

    See Majestic Mountain View at Sunset and explore available prints:

    carlmoore.photos/featured/maje

    #ZionNationalPark #Photography #LandscapePhotography #Nature

  18. @kaffeeringe @thijs_lucas @norbert Warum nicht engagiert für Fernarbeit und Home Office werben? Wir haben gestern eine Doku über einen Ort in Neufundland gesehen, der aufgegeben werden soll, weil die Infrastruktur von Kanada nicht aufrechterhalten werden will. Zum Beispiel Schule. Da kam schnell der Gedanke, warum nicht konsequent Fernunterricht und remote Arbeit mit Satelliteninternet. Und Schule wäre bei Kiel-Rendsburg gar nicht das Thema.

    Ich fände es toll, wenn viele Menschen auf den Land leben können, Verstädterung ist zwar ein Megatrend, aber tut der gut?

    Solche " #Piraten " Ideen können wir doch weiter vorbringen.

    #Soziales #Innovation

  19. 🗳️ The 2026 OpenTelemetry Governance Committee Election is underway!

    If you haven't voted yet, there's still time to help shape the future of the project.

    ✅ Check eligibility: github.com/open-telemetry/comm
    🗳️ Vote here: vote.heliosvoting.org/helios/e

    Voting closes Oct 28, end of day Anywhere on Earth (Oct 29, 11:59 UTC). Don't miss your chance to have a say!

  20. Strasbourg. Un nouveau café du Secours populaire ouvre à la Meinau

    Située à la Meinau, dans d’anciens locaux de l’association qui ne servaient plus, la salle unique qui accueille…
    #Strasbourg #FR #France #Actu #News #Europe #EU #actu #Actualités #europe #FilInfo #GrandEst #Républiquefrançaise #Société #Vieassociative
    europesays.com/fr/1269006/

  21. Atelier de français 🌻

    La Plata Zona Centro, martes, 3 de noviembre, 10:30 GMT-3

    Bavardages es un taller enfocado en la expresión y la comprensión oral y escrita para apropiarse de la lengua francesa desde su práctica colectiva: conversamos, leemos, escuchamos e incorporamos herramientas lingüísticas de a poco. Aprender un idioma es abrir puertas hacia otros mundos, formas de pensar, historias…. Viens essayer!

    Horarios : Martes 10:30 - 11h30 / 19 - 20 hrs. La Plata zona centro - presencial y grupal. Becas para disidencias/migrantes. x Marjo profesora nativa. mail: [email protected]

    vagancio.partidopirata.com.ar/

  22. One habit I picked up from my time with Jellyfin: I don't want to put "singles", ie tracks that are not from an album, each into their own directory and tag as their own album. So instead I've been gathering all such tracks for an artist and putting them into a faux "ARTIST tracks" album. This worked out pretty well. I can even add a toggle on my Symfonium Android client to filter these faux albums out of my Albums view.

    Is any of this necessary under Navidrome? Hmmm...

  23. #RecomendaciónLiteraria

    The Examined Year, Jennette McCurdy

    La escritora Jennette McCurdy regresa al mapa de los libros con algo totalmente diferente a lo que nos tiene acostumbrados. Después de abrir su corazón con sus memorias y de meterse a la ficción con su novela de este año, ahora nos trae una propuesta que funciona más bien como una libreta de viaje para la mente. No nos viene a contar una historia de vida ajena, sino a darnos un empujón para que revisemos con lupa la nuestra. El lanzamiento oficial de esta obra está programado para el próximo 8 de diciembre de 2026.

    La idea central de este diario interactivo es ponerle un freno a las metas falsas que a veces perseguimos por pura inercia. Te invita a comparar lo que dices que te importa con lo que de verdad haces día con día, ayudando a descubrir si tus planes son tuyos o si los copiaste para darle el gusto a alguien más. Su sistema funciona con revisiones cada mes y cada tres meses, permitiendo cambiar el rumbo de tus propósitos a mitad del camino de forma muy tranquila y sin sentir culpa cuando las cosas no salen a la primera.

    Jennette McCurdy escribe igual que siempre, con ese estilo directo que no se anda con rodeos ni con frases motivacionales baratas de las que cansan. Sus preguntas te hacen encarar la realidad para que encuentres motivaciones que salgan desde adentro, lejos de lo que la sociedad te exige presumir. El libro viene con detalles muy cuidados desde su tipografía, una buena selección de papel y una portada hecha de cuero vegano azul que lo vuelve un objeto muy ameno para tener en la mesa de noche, listo para usarse cuando decidas que empiece tu año de cambio.

    — A. Eldritch, Periodista, Locutor, podcaster y bloger del fediverso

    Alt text via @altbot y @TeLoDescribot

    #RecomendaciónLiteraria #TheExaminedYear #JennetteMcCurdy #Libros #Lectura #CrecimientoPersonal #NovedadesEditoriales
    #reflexion

  24. @dirlego1 totalmente de acuerdo contigo, las corrientes anarquistas actuales adolecen de dispersión y falta de concreción en sus propuestas debido a que han abandonado la retórica revolucionaria y materialista, ignorando las bases y referentes históricos, si bien quiero hacer una puntualización acerca de las luchas identitarias, yo considero que estas han sido fagocitadas por el posmodernismo que comentas, siendo la corriente posmo, en mi opinión, un producto puramente de cooptación del capital para desactivar la lucha de clases a través de la atomización de las clases populares (divide et impera), sin duda el caso del anarquismo alemán que comentas es paradigmático y también tiene su reflejo en las corrientes y autores anarquistas que vienen de la esfera anglosajona, adhiriéndose muchas de esas corrientes a la ola woke (que no deja también a su vez de ser un producto político absolutamente desclasado y procapitalista), todo ello no resta un ápice a la necesidad y conveniencia de los avances sociales logrados por los movimientos civiles en materia de derechos LGTBI, feministas o antirracistas, la crítica tiene que ver más con como se ha instrumentalizado esas luchas (todas ellas justas) despojándola de su necesaria crítica anticapitalista, ya que la lucha de clases debe incorporar de serie esas justas demandas, pero no cada uno por su lado ya que eso resta fuerzas en lugar de unirlas, al capital le parece bien que se avance en esos derechos inocuos para sus intereses de clase, siempre y cuando son se cuestionen estos últimos, que de hecho suelen ser en gran medida el germen de esas discriminaciones.

    El anarquismo tiene que restaurar el análisis materialista de la realidad en su ideario, y además tiene que asumir e incorporar la realidad material menguante, en una biosfera en rápida descomposición gracias a las externalidades extractivas del capitalismo, con unos recursos menguantes fruto de la sobreexplotación y un paradigma de declive energético que condicionan mucho como se debe afrontar la lucha de clases y cualquier proceso revolucionario.

    Autores que creo que están incorporando bien estos elementos serian Graeber, Amorós, Taibo y unos cuantos más, por suerte no todas las corrientes anarquistas siguen la estela de Alemania y la anglosfera.

    pd. para otro tochopost podríamos hablar de la cooptación que se ha hecho en Alemania tambien de los movimientos ecologistas, los verdes alemanes son la mayor verguenza del movimiento ecologista global (complicidad con el genocidio palestino incluida).

    @Lon @onainigo @tsumy

  25. I have thoughts about AI in media production

    Not gonna lie, AI tools have crept into many of my workflows. I experiment with it all for sure.

    what's weird to me is creators and marketers talking about their use of AI automation to edit videos in apparently 5 minutes, for instance. I look at many of the results and they're trash. the message I get as a viewer is: this trash is good enough for me and I'll feed this trash to my audience. it makes me question their own standard of quality.

    1/3

  26. 'Kan paracetamol gevaarlijk zijn?'

    "Paracetamol wordt in de lever afgebroken. Slik je te veel, dan ontstaat er een schadelijke afbraakstof die de lever kan beschadigen. […] Op de bijsluiter van gewone tabletten van 500 milligram staat voor volwassenen meestal maximaal zes tabletten per dag."

    "Twaalf tabletten in één keer, samen 6 gram, kunnen al leverschade geven. Langdurig gebruik vlak onder het maximum is ook niet zonder risico: leverschade is ook gemeld na wekenlang 3 tot 4 gram per dag."

    "Gebruik je paracetamol langer of is je lever al kwetsbaar? Dan ligt de veilige grens lager als een of meer van deze dingen voor jou gelden:
    •je eet weinig of vast
    •je drinkt gemiddeld meer dan twee glazen alcohol per dag
    •je rookt
    •je hebt een leverziekte
    •je gebruikt bepaalde medicijnen, zoals sommige middelen tegen epilepsie
    •je gebruikt meerdere pijnstillers tegelijk
    •je bent op hoge leeftijd en weegt minder dan 50 kilo
    Geldt één van deze punten voor jou, neem dan niet meer dan vier tabletten van 500 milligram per dag. Gelden er twee of meer, dan is het maximum drie."

    "Het verraderlijke aan een overdosis is dat je de eerste uren vaak weinig merkt. Misselijkheid, overgeven of buikpijn kunnen optreden, maar dat hoeft niet. Duidelijke tekenen van leverschade, zoals een gele huid of geel oogwit, verschijnen vaak pas na twee tot drie dagen.
    Een overdosis paracetamol voelt in het begin vaak als niets. Juist daarom moet je niet wachten."

    welingelichtekringen.nl/gezond

    #gezondheid #paracetamol

  27. 💀NSU: Beate Zschäpe kommt mit 24 Jahren davon!💀

    Das OLG München hat ungewöhnlich freundlich entschieden: es setzte die Mindesverbüßungsdauer für Frau Zschäpe auf (nur) 24 Jahre fest.

    Es macht keines der Opfer des NSU wieder lebendig, wenn 25, 30, 40 oder mehr Jahre festgesetzt worden wären, aber Gerichte werfen für Fälle mit viel weniger Mordopfern, mit viel weniger weiteren schweren Straftaten wesentlich höhere Mindesverbüßungsdauern aus.

    Beispielsweise 28 Jahre (bei vier Mordopfern), oder 30 Jahre (bei drei Mordopfern).

    Der OLG Beschluss aus München bedeutet nicht, dass Zschäpe nach 24 Jahren zwingend frei kommt. Denn sollte sie als 'gefährlich' gelten, bliebe sie in Haft. Aber die Pressemitteilung des OLG liest sich extrem wohlwollend, so dass eine Freilassung im Jahr 2035 möglich erscheint.

    Vielleicht ändert sie noch ihren Namen, das geht in solchen Fällen, und verschwindet dann im Nebel.

    OLG München zu Beate Zschäpe:
    justiz.bayern.de/gerichte-und-

    Beleg für 28 Jahre (vier Tote):
    urteile.ai/e/d_4emvzwn034/olg-

    Beleg für 30 Jahre (drei Tote):
    openjur.de/u/2145315.html

    #nsu #zschape #mord #BeateZschäpe #olg #olgmunchen #OLGMünchen #faschismus #lebenslang #schuld #schuldschwere #deutschland #dienstag #rassismus #dresden #cottbus #chemnitz #sachsen #hamburg #munchen #Heilbronn #bremen #brandenburg #sachsenanhalt
    @NSU_Research
    @nsuwatch
    @nsuwatch_sax

  28. 👩‍💻 Alle nutzen Open Source. Aber wer hat eine Strategie dafür?

    «PHP2Shell» hat gezeigt: Wer nicht weiss, wo Open Source im Einsatz ist, kann im Ernstfall nicht reagieren. Der OSPO-Track an der DINAconCH zeigt in vier Sessions, wie Organisationen Open Source bewusst und strategisch nutzen.

    In diesem Track finden folgende Sessions statt:

    💡 Open Source als Säule der digitalen Souveränität in der Bundesverwaltung mit Bruno Schöb

    💡Warum Open Source Teil jeder digitalen Strategie sein muss mit Lukas Grossar

    💡Marktanforderungen und Open Source: Es fehlt nicht Code, es fehlt Struktur mit David Sommer

    💡Open Source für Resilienz und digitale Unabhängigkeit mit Nina Müller

    💡AI und das Open-Source-Ökosystem: Was OSPOs jetzt tun sollten mit Olivier Brian

    Mehr Informationen zum Track: dinacon.ch/2026/10/27/um-was-g

    🎟️ Zu den Tickets: eventfrog.ch/de/p/wissenschaft

    #DINAcon2026 #CHOpen #OpenSource #OSPO #DigitaleSouveränität

  29. 🔴 Pourquoi les cheminots doivent rejoindre par la #grève la révolte de la jeunesse ?

    Face à une mobilisation historique de la #jeunesse et à la répression massive du gouvernement, le #17octobre a montré que la colère gronde dans toutes les couches de la société. Alors que les cheminots subissent eux aussi des dégradations brutales de leurs conditions de #travail et de vie, ils doivent rejoindre la jeunesse par la grève pour faire reculer le gouvernement.

    revolutionpermanente.fr/Pourqu

  30. Kunstprojekt „PlakatWAND Toleranz“: Ausgestellt bis 13. November 2026 im Foyer der VHS Lüneburg: Ein buntes Plakat zum Thema Toleranz entstand am Freitag, 16. Oktober 2026, auf dem Marktplatz in Lüneburg. Mit bereitliegenden Materialien gestalteten Vorbeikommende eine vielfarbige Plakatwand mit Aussagen wie „Demokratie ist bunt“. Das Projekt „PlakatWAND Toleranz“ [...]

    Der Beitrag Kunstprojekt „PlakatWAND Toleranz“:… luene-blog.de/kunstprojekt-pla #Engagement #Kultur #Lüneburg #Demokratie #Kunst

Share on Mastodon

Enter the server where you have an account.